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;
}
Beispiel #2
0
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 "";
}
Beispiel #5
0
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 "";
}
Beispiel #6
0
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) {
		});
	});