diff --git a/src/cli/tui.cc b/src/cli/tui.cc index 70f175fe..219cafea 100644 --- a/src/cli/tui.cc +++ b/src/cli/tui.cc @@ -256,7 +256,7 @@ void LoadRomComponent(ftxui::ScreenInteractive &screen) { } Element ColorBox(const Color &color) { - return ftxui::text(" ") | ftxui::bgcolor(color); + return ftxui::text(" ") | ftxui::bgcolor(color); } void PaletteEditorComponent(ftxui::ScreenInteractive &screen) { @@ -382,6 +382,116 @@ void PaletteEditorComponent(ftxui::ScreenInteractive &screen) { } } +void HelpComponent(ftxui::ScreenInteractive &screen) { + auto help_text = vbox({ + text("z3ed") | bold | color(Color::Yellow), + text("by scawful") | color(Color::Magenta), + text("The Legend of Zelda: A Link to the Past Hacking Tool") | color(Color::Red), + separator(), + hbox({ + text("Command") | bold | underlined, + filler(), + text("Arg") | bold | underlined, + filler(), + text("Params") | bold | underlined, + }), + separator(), + hbox({ + text("Apply BPS Patch"), + filler(), + text("-a"), + filler(), + text(" "), + }), + hbox({ + text("Create BPS Patch"), + filler(), + text("-c"), + filler(), + text(" "), + }), + separator(), + hbox({ + text("Open ROM"), + filler(), + text("-o"), + filler(), + text(""), + }), + hbox({ + text("Backup ROM"), + filler(), + text("-b"), + filler(), + text(" "), + }), + hbox({ + text("Expand ROM"), + filler(), + text("-x"), + filler(), + text(" "), + }), + separator(), + hbox({ + text("Transfer Tile16"), + filler(), + text("-t"), + filler(), + text(" "), + }), + separator(), + hbox({ + text("Export Graphics"), + filler(), + text("-e"), + filler(), + text(" "), + }), + hbox({ + text("Import Graphics"), + filler(), + text("-i"), + filler(), + text(" "), + }), + separator(), + hbox({ + text("SNES to PC Address"), + filler(), + text("-s"), + filler(), + text("
"), + }), + hbox({ + text("PC to SNES Address"), + filler(), + text("-p"), + filler(), + text("
"), + }), + }); + + auto help_text_component = Renderer([&] { return help_text; }); + + auto back_button = Button("Back", [&] { SwitchComponents(screen, LayoutID::kMainMenu); }); + + auto container = Container::Vertical({ + help_text_component, + back_button, + }); + + auto renderer = Renderer(container, [&] { + return vbox({ + help_text_component->Render() | center, + separator(), + back_button->Render() | center, + }) | border; + }); + + screen.Loop(renderer); +} + void MainMenuComponent(ftxui::ScreenInteractive &screen) { // Tracks which menu item is selected. static int selected = 0; @@ -429,6 +539,9 @@ void MainMenuComponent(ftxui::ScreenInteractive &screen) { case MainMenuEntry::kPaletteEditor: SwitchComponents(screen, LayoutID::kPaletteEditor); return true; + case MainMenuEntry::kHelp: + SwitchComponents(screen, LayoutID::kHelp); + return true; case MainMenuEntry::kExit: SwitchComponents(screen, LayoutID::kExit); return true; @@ -463,10 +576,12 @@ void ShowMain() { case LayoutID::kGenerateSaveFile: { GenerateSaveFileComponent(screen); } break; - case LayoutID::kPaletteEditor: { PaletteEditorComponent(screen); } break; + case LayoutID::kHelp: { + HelpComponent(screen); + } break; case LayoutID::kError: { // Display error message and return to main menu. auto error_button = Button("Back to Main Menu", [&] { diff --git a/src/cli/tui.h b/src/cli/tui.h index db94572b..10ad5020 100644 --- a/src/cli/tui.h +++ b/src/cli/tui.h @@ -13,7 +13,11 @@ namespace yaze { namespace cli { const std::vector kMainMenuEntries = { - "Load ROM", "Apply BPS Patch", "Generate Save File", "Palette Editor", + "Load ROM", + "Apply BPS Patch", + "Generate Save File", + "Palette Editor", + "Help", "Exit", }; @@ -22,6 +26,7 @@ enum class MainMenuEntry { kApplyBpsPatch, kGenerateSaveFile, kPaletteEditor, + kHelp, kExit, }; @@ -30,6 +35,7 @@ enum LayoutID { kApplyBpsPatch, kGenerateSaveFile, kPaletteEditor, + kHelp, kExit, kMainMenu, kError,