Skip to content

Commit

Permalink
Add possibility to change commands in main Menu, and one new command…
Browse files Browse the repository at this point in the history
… to set a Switch and quit Menu.
  • Loading branch information
MackValentine committed May 8, 2024
1 parent 32c5d53 commit c4323df
Show file tree
Hide file tree
Showing 4 changed files with 170 additions and 80 deletions.
61 changes: 57 additions & 4 deletions src/game_interpreter_map.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -682,7 +682,6 @@ bool Game_Interpreter_Map::CommandToggleAtbMode(lcf::rpg::EventCommand const& /*
bool Game_Interpreter_Map::CommandSetCustomBattleHUD(lcf::rpg::EventCommand const& com) {

CustomBattle::used = true;
Output::Debug("Battle");

std::string s = com.string.c_str();
char delim = '\n';
Expand Down Expand Up @@ -853,7 +852,6 @@ bool Game_Interpreter_Map::CommandSetCustomBattleHUD(lcf::rpg::EventCommand cons
// Output::Debug("Window Status");

w.itemHeight = atoi(params[7].c_str());
Output::Debug("{}", w.itemHeight);

if (params.size() > 8) {
std::regex pattern("\\{([^{}]*)\\}");
Expand Down Expand Up @@ -903,8 +901,6 @@ bool Game_Interpreter_Map::CommandSetCustomMenu(lcf::rpg::EventCommand const& co
return CommandSetCustomBattleHUD(com);
}

Output::Debug("Menu");

CustomMenu::used = true;

std::string s = com.string.c_str();
Expand Down Expand Up @@ -1084,7 +1080,64 @@ bool Game_Interpreter_Map::CommandSetCustomMenu(lcf::rpg::EventCommand const& co
}
}
}
else if (name == "Commands") {

CustomMenu::customCommands = false;

// Output::Debug("Window Status");
if (params.size() > 7)
w.itemHeight = atoi(params[7].c_str());

if (params.size() > 8) {

CustomMenu::customCommands = true;

std::regex pattern("\\{([^{}]*)\\}");

// Iterator pour parcourir les correspondances
std::sregex_iterator it(params[8].begin(), params[8].end(), pattern);
std::sregex_iterator end;

lcf::Data::system.menu_commands.clear();
while (it != end)
{
auto s = it->str(1);
delim = ';';
std::vector<std::string> strPos;
tokenize(s, delim, strPos);

int id = 0;
for (auto ss : strPos) {

if (ss[0] == '[') {

delim = '|';
std::vector<std::string> strCom;
tokenize(ss, delim, strCom);

auto sss = strCom[0];
sss.replace(0, 1, "");
int i = atoi(sss.c_str());
lcf::Data::system.menu_commands.push_back(i);

if (strCom.size() > 1) {
std::string txt = strCom[1].c_str();
txt.replace(txt.end() - 1, txt.end(), "");

CustomMenu::commands[id] = txt;
}

} else {
int i = atoi(ss.c_str());
lcf::Data::system.menu_commands.push_back(i);
}
id++;
}

it++;
}
}
}
}

// Output::Debug("{} {} {} {} {} {}", w.x, w.y, w.w, w.h, w.hide, w.column);
Expand Down
2 changes: 0 additions & 2 deletions src/scene_battle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,6 @@ void Scene_Battle::CreateUi() {

if (CustomBattle::used) {

Output::Debug("CustomBattle");
std::string win_name = "Options";

auto it2 = CustomBattle::customWindows.find(win_name);
Expand All @@ -258,7 +257,6 @@ void Scene_Battle::CreateUi() {

options_window->Refresh();

Output::Debug("Options");
}

win_name = "Items";
Expand Down
183 changes: 109 additions & 74 deletions src/scene_menu_custom.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@
#include <output.h>
#include <window_custom.h>
#include <window_command_custom.h>
#include "game_switches.h"
#include "game_map.h"

constexpr int menu_command_width = 88;
constexpr int gold_window_width = 88;
Expand All @@ -55,6 +57,10 @@ namespace CustomMenu {
int parallax_y = 0;

bool used = false;

bool customCommands = false;

std::string commands[16] = {""};
}

Scene_Menu_Custom::Scene_Menu_Custom(int menu_index) :
Expand All @@ -81,8 +87,6 @@ void Scene_Menu_Custom::Start() {
// Gold Window
gold_window.reset(new Window_Gold(Player::menu_offset_x, (Player::screen_height - gold_window_height - Player::menu_offset_y), gold_window_width, gold_window_height));

Output::Debug("CustomMenu");

std::string win_name = "Gold";
auto it2 = CustomMenu::customWindows.find(win_name);

Expand Down Expand Up @@ -245,21 +249,23 @@ void Scene_Menu_Custom::CreateCommandWindow() {
// Create Options Window
std::vector<std::string> options;

if (Player::IsRPG2k()) {
command_options.push_back(Item);
command_options.push_back(Skill);
command_options.push_back(Equipment);
command_options.push_back(Save);
if (Player::player_config.settings_in_menu.Get()) {
command_options.push_back(Settings);
}
if (Player::debug_flag) {
command_options.push_back(Debug);
if (!CustomMenu::customCommands) {
if (Player::IsRPG2k()) {
command_options.push_back(Item);
command_options.push_back(Skill);
command_options.push_back(Equipment);
command_options.push_back(Save);
if (Player::player_config.settings_in_menu.Get()) {
command_options.push_back(Settings);
}
if (Player::debug_flag) {
command_options.push_back(Debug);
}
command_options.push_back(Quit);
}
command_options.push_back(Quit);
} else {
for (std::vector<int16_t>::iterator it = lcf::Data::system.menu_commands.begin();
it != lcf::Data::system.menu_commands.end(); ++it) {
else {
for (std::vector<int16_t>::iterator it = lcf::Data::system.menu_commands.begin();
it != lcf::Data::system.menu_commands.end(); ++it) {
switch (*it) {
case Row:
if (Feature::HasRow()) {
Expand All @@ -275,17 +281,27 @@ void Scene_Menu_Custom::CreateCommandWindow() {
command_options.push_back((CommandOptionType)*it);
break;
}
}
if (Player::player_config.settings_in_menu.Get()) {
command_options.push_back(Settings);
}
if (Player::debug_flag) {
command_options.push_back(Debug);
}
command_options.push_back(Quit);
}
if (Player::player_config.settings_in_menu.Get()) {
command_options.push_back(Settings);
}
if (Player::debug_flag) {
command_options.push_back(Debug);
}
else {
for (std::vector<int16_t>::iterator it = lcf::Data::system.menu_commands.begin();
it != lcf::Data::system.menu_commands.end(); ++it) {

command_options.push_back((CommandOptionType)*it);

}
command_options.push_back(Quit);
}

// Add all menu items
int i = 0;
std::vector<CommandOptionType>::iterator it;
for (it = command_options.begin(); it != command_options.end(); ++it) {
switch(*it) {
Expand Down Expand Up @@ -320,9 +336,16 @@ void Scene_Menu_Custom::CreateCommandWindow() {
options.push_back("Debug");
break;
default:
options.push_back(ToString(lcf::Data::terms.menu_quit));
int d = *it;
if (d > 0) {
options.push_back(ToString(lcf::Data::terms.menu_quit));
}
else {
options.push_back(CustomMenu::commands[i]);
}
break;
}
i++;
}
std::string win_name = "Commands";
auto it2 = CustomMenu::customWindows.find(win_name);
Expand Down Expand Up @@ -379,62 +402,74 @@ void Scene_Menu_Custom::UpdateCommand() {
} else if (Input::IsTriggered(Input::DECISION)) {
menu_index = command_window->GetIndex();
if (menu_index >= 0 && menu_index < command_options.size())
switch (command_options[menu_index]) {
case Item:
if (Main_Data::game_party->GetActors().empty()) {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Buzzer));
} else {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Decision));
Scene::Push(std::make_shared<Scene_Item>());
}
break;
case Skill:
case Equipment:
case Status:
case Row:
if (Main_Data::game_party->GetActors().empty()) {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Buzzer));
} else {
if (command_options[menu_index] >= 0) {
switch (command_options[menu_index]) {
case Item:
if (Main_Data::game_party->GetActors().empty()) {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Buzzer));
}
else {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Decision));
Scene::Push(std::make_shared<Scene_Item>());
}
break;
case Skill:
case Equipment:
case Status:
case Row:
if (Main_Data::game_party->GetActors().empty()) {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Buzzer));
}
else {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Decision));
command_window->SetActive(false);
menustatus_window->SetActive(true);
menustatus_window->SetIndex(0);
}
break;
case Save:
if (!Main_Data::game_system->GetAllowSave()) {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Buzzer));
}
else {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Decision));
Scene::Push(std::make_shared<Scene_Save>());
}
break;
case Order:
if (Main_Data::game_party->GetActors().size() <= 1) {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Buzzer));
}
else {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Decision));
Scene::Push(std::make_shared<Scene_Order>());
}
break;
case Wait:
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Decision));
command_window->SetActive(false);
menustatus_window->SetActive(true);
menustatus_window->SetIndex(0);
}
break;
case Save:
if (!Main_Data::game_system->GetAllowSave()) {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Buzzer));
} else {
Main_Data::game_system->ToggleAtbMode();
command_window->SetItemText(menu_index,
Main_Data::game_system->GetAtbMode() == lcf::rpg::SaveSystem::AtbMode_atb_wait ? lcf::Data::terms.wait_on : lcf::Data::terms.wait_off);
break;
case Settings:
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Game_System::SFX_Decision));
Scene::Push(std::make_shared<Scene_Settings>());
break;
case Debug:
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Decision));
Scene::Push(std::make_shared<Scene_Save>());
}
break;
case Order:
if (Main_Data::game_party->GetActors().size() <= 1) {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Buzzer));
} else {
Scene::Push(std::make_shared<Scene_Debug>());
break;
case Quit:
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Decision));
Scene::Push(std::make_shared<Scene_Order>());
Scene::Push(std::make_shared<Scene_End>());
break;
}
break;
case Wait:
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Decision));
Main_Data::game_system->ToggleAtbMode();
command_window->SetItemText(menu_index,
Main_Data::game_system->GetAtbMode() == lcf::rpg::SaveSystem::AtbMode_atb_wait ? lcf::Data::terms.wait_on : lcf::Data::terms.wait_off);
break;
case Settings:
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Game_System::SFX_Decision));
Scene::Push(std::make_shared<Scene_Settings>());
break;
case Debug:
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Decision));
Scene::Push(std::make_shared<Scene_Debug>());
break;
case Quit:
}
else {
Main_Data::game_system->SePlay(Main_Data::game_system->GetSystemSE(Main_Data::game_system->SFX_Decision));
Scene::Push(std::make_shared<Scene_End>());
break;
Main_Data::game_switches->Set(-command_options[menu_index], true);
Game_Map::SetNeedRefresh(true);
Scene::Pop();
}
}
}
Expand Down
4 changes: 4 additions & 0 deletions src/scene_menu_custom.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,10 @@ namespace CustomMenu {

extern bool used;

extern std::string commands[16];

extern bool customCommands;

}
/**
* Scene Menu class.
Expand Down

0 comments on commit c4323df

Please sign in to comment.