Add message loading functionality and refactor message data handling
- Introduced yaze_load_messages function to load messages from ROM data, enhancing message management. - Updated message data structures to use std::string_view for improved performance and clarity. - Refactored message parsing logic to utilize modern C++ features like ranges and optional, improving readability. - Adjusted various functions to streamline message handling and ensure consistency across the codebase.
This commit is contained in:
28
src/yaze.cc
28
src/yaze.cc
@@ -6,6 +6,7 @@
|
||||
|
||||
#include "app/core/controller.h"
|
||||
#include "app/core/platform/app_delegate.h"
|
||||
#include "app/editor/message/message_data.h"
|
||||
#include "app/rom.h"
|
||||
#include "app/zelda3/overworld/overworld.h"
|
||||
#include "util/flag.h"
|
||||
@@ -94,7 +95,7 @@ zelda3_rom *yaze_load_rom(const char *filename) {
|
||||
zelda3_rom *rom = new zelda3_rom();
|
||||
rom->filename = filename;
|
||||
rom->impl = internal_rom;
|
||||
rom->data = internal_rom->data();
|
||||
rom->data = const_cast<uint8_t *>(internal_rom->data());
|
||||
rom->size = internal_rom->size();
|
||||
return rom;
|
||||
}
|
||||
@@ -181,3 +182,28 @@ zelda3_dungeon_room *yaze_load_all_rooms(const zelda3_rom *rom) {
|
||||
zelda3_dungeon_room *rooms = new zelda3_dungeon_room[256];
|
||||
return rooms;
|
||||
}
|
||||
|
||||
yaze_status yaze_load_messages(zelda3_rom *rom, zelda3_message **messages) {
|
||||
if (rom->impl == nullptr) {
|
||||
return yaze_status::YAZE_ERROR;
|
||||
}
|
||||
|
||||
// Use LoadAllTextData from message_data.h
|
||||
std::vector<yaze::editor::MessageData> message_data =
|
||||
yaze::editor::ReadAllTextData(rom->data, 0);
|
||||
for (const auto &message : message_data) {
|
||||
messages[message.ID] = new zelda3_message();
|
||||
messages[message.ID]->id = message.ID;
|
||||
messages[message.ID]->address = message.Address;
|
||||
messages[message.ID]->raw_string = reinterpret_cast<uint8_t *>(
|
||||
const_cast<char *>(message.RawString.data()));
|
||||
messages[message.ID]->contents_parsed = reinterpret_cast<uint8_t *>(
|
||||
const_cast<char *>(message.ContentsParsed.data()));
|
||||
messages[message.ID]->data =
|
||||
reinterpret_cast<uint8_t *>(const_cast<uint8_t *>(message.Data.data()));
|
||||
messages[message.ID]->data_parsed = reinterpret_cast<uint8_t *>(
|
||||
const_cast<uint8_t *>(message.DataParsed.data()));
|
||||
}
|
||||
|
||||
return yaze_status::YAZE_OK;
|
||||
}
|
||||
Reference in New Issue
Block a user