bool Game_Interpreter_Map::CommandEnterHeroName(RPG::EventCommand const& com) { // code 10740 if (Game_Message::visible) { return false; } Game_Temp::hero_name_id = com.parameters[0]; Game_Temp::hero_name_charset = com.parameters[1]; if (com.parameters[2] != 0) { Game_Actor *actor = Game_Actors::GetActor(Game_Temp::hero_name_id); if (!actor) { Output::Warning("EnterHeroName: Invalid actor ID %d", Game_Temp::hero_name_id); Game_Temp::hero_name.clear(); } else { Game_Temp::hero_name = actor->GetName(); } } else { Game_Temp::hero_name.clear(); } scene_call = Scene::Name; ++index; return false; }
void Scene_Save::Action(int index) { std::stringstream ss; ss << "Save" << (index <= 8 ? "0" : "") << (index + 1) << ".lsd"; // TODO: Maybe find a better place to setup the save file? RPG::SaveTitle title; int size = (int)Main_Data::game_party->GetActors().size(); Game_Actor* actor; switch (size) { case 4: actor = Main_Data::game_party->GetActors()[3]; title.face4_id = actor->GetFaceIndex(); title.face4_name = actor->GetFaceName(); case 3: actor = Main_Data::game_party->GetActors()[2]; title.face3_id = actor->GetFaceIndex(); title.face3_name = actor->GetFaceName(); case 2: actor = Main_Data::game_party->GetActors()[1]; title.face2_id = actor->GetFaceIndex(); title.face2_name = actor->GetFaceName(); case 1: actor = Main_Data::game_party->GetActors()[0]; title.face1_id = actor->GetFaceIndex(); title.face1_name = actor->GetFaceName(); title.hero_hp = actor->GetHp(); title.hero_level = actor->GetLevel(); title.hero_name = actor->GetName(); break; default:; } Main_Data::game_data.title = title; Main_Data::game_data.system.save_slot = index + 1; Main_Data::game_data.system.save_count += 1; Game_Map::PrepareSave(); std::string filename = FileFinder::FindDefault(*tree, ss.str()); if (filename.empty()) { filename = FileFinder::MakePath(Main_Data::project_path, ss.str()); } LSD_Reader::Save(filename, Main_Data::game_data, ReaderUtil::GetEncoding(FileFinder::FindDefault(INI_NAME))); Scene::Pop(); }
void Scene_Name::Update() { kbd_window->Update(); name_window->Update(); if (Input::IsTriggered(Input::CANCEL)) { if (name_window->Get().size() > 0) { Game_System::SePlay(Main_Data::game_data.system.cancel_se); name_window->Erase(); } else Game_System::SePlay(Main_Data::game_data.system.buzzer_se); } else if (Input::IsTriggered(Input::DECISION)) { Game_System::SePlay(Main_Data::game_data.system.decision_se); std::string const& s = kbd_window->GetSelected(); assert(!s.empty()); if(s == Window_Keyboard::DONE || s == Window_Keyboard::DONE_JP) { Game_Temp::hero_name = name_window->Get(); Game_Actor* actor = Game_Actors::GetActor(Game_Temp::hero_name_id); if (actor != NULL) { if (name_window->Get().empty()) { name_window->Set(actor->GetName()); name_window->Refresh(); } else { actor->SetName(name_window->Get()); Scene::Pop(); } } } else if(s == Window_Keyboard::TO_SYMBOL) { kbd_window->SetMode(Window_Keyboard::Symbol); } else if(s == Window_Keyboard::TO_LETTER) { kbd_window->SetMode(Window_Keyboard::Letter); } else if(s == Window_Keyboard::TO_HIRAGANA) { kbd_window->SetMode(Window_Keyboard::Hiragana); } else if(s == Window_Keyboard::TO_KATAKANA) { kbd_window->SetMode(Window_Keyboard::Katakana); } else if(s == Window_Keyboard::SPACE) { name_window->Append(" "); } else { name_window->Append(s); } } }
std::string Window_Message::ParseCommandCode(bool& success) { int parameter; bool is_valid; uint32_t cmd_char = *text_index; success = true; switch (tolower(cmd_char)) { case 'n': // Output Hero name parameter = ParseParameter(is_valid); if (is_valid) { Game_Actor* actor = NULL; if (parameter == 0) { // Party hero actor = Main_Data::game_party->GetActors()[0]; } else { actor = Game_Actors::GetActor(parameter); } if (actor != NULL) { return actor->GetName(); } } break; case 'v': // Show Variable value parameter = ParseParameter(is_valid); if (is_valid && Game_Variables.IsValid(parameter)) { std::stringstream ss; ss << Game_Variables[parameter]; return ss.str(); } else { // Invalid Var is always 0 return "0"; } default:; // When this happens text_index was not on a \ during calling } success = false; return ""; }
std::string Window_Message::ParseCommandCode(bool& success, int& parameter) { bool is_valid; uint32_t cmd_char = *text_index; success = true; parameter = -1; switch (tolower(cmd_char)) { case 'n': // Output Hero name parameter = ParseParameter(is_valid); if (is_valid) { Game_Actor* actor = NULL; if (parameter == 0) { // Party hero if (Main_Data::game_party->GetBattlerCount() > 0) { actor = Main_Data::game_party->GetActors()[0]; } } else { actor = Game_Actors::GetActor(parameter); } if (actor != NULL) { return actor->GetName(); } } break; case 'v': // Show Variable value parameter = ParseParameter(is_valid); if (is_valid) { return std::to_string(Game_Variables.Get(parameter)); } else { // Invalid Var is always 0 return "0"; } default:; // When this happens text_index was not on a \ during calling } success = false; return ""; }
void Scene_Save::Action(int index) { std::stringstream ss; ss << "Save" << (index <= 8 ? "0" : "") << (index + 1) << ".lsd"; Output::Debug("Saving to %s", ss.str().c_str()); // TODO: Maybe find a better place to setup the save file? RPG::SaveTitle title; int size = (int)Main_Data::game_party->GetActors().size(); Game_Actor* actor; if (size > 3) { actor = Main_Data::game_party->GetActors()[3]; title.face4_id = actor->GetFaceIndex(); title.face4_name = actor->GetFaceName(); } if (size > 2) { actor = Main_Data::game_party->GetActors()[2]; title.face3_id = actor->GetFaceIndex(); title.face3_name = actor->GetFaceName(); } if (size > 1) { actor = Main_Data::game_party->GetActors()[1]; title.face2_id = actor->GetFaceIndex(); title.face2_name = actor->GetFaceName(); } if (size > 0) { actor = Main_Data::game_party->GetActors()[0]; title.face1_id = actor->GetFaceIndex(); title.face1_name = actor->GetFaceName(); title.hero_hp = actor->GetHp(); title.hero_level = actor->GetLevel(); title.hero_name = actor->GetName(); } Main_Data::game_data.title = title; Main_Data::game_data.system.save_slot = index + 1; Game_Map::PrepareSave(); std::string save_file = ss.str(); std::string filename = FileFinder::FindDefault(*tree, ss.str()); if (filename.empty()) { filename = FileFinder::MakePath((*tree).directory_path, save_file); } LSD_Reader::PrepareSave(Main_Data::game_data, PLAYER_SAVEGAME_VERSION); auto data_copy = LSD_Reader::ClearDefaults(Main_Data::game_data, Game_Map::GetMapInfo(), Game_Map::GetMap()); // RPG_RT saves always have the scene set to this. data_copy.system.scene = RPG::SaveSystem::Scene_file; // RPG_RT always stores SaveMapEvent with map_id == 0. for (auto& sme: data_copy.map_info.events) { sme.map_id = 0; } LSD_Reader::Save(filename, data_copy, Player::encoding); #ifdef EMSCRIPTEN // Save changed file system EM_ASM({ FS.syncfs(function(err) { }); });