From 56108102c0e9e852b441deb838c3f5c9561da784 Mon Sep 17 00:00:00 2001 From: yoruka <> Date: Sun, 11 May 2025 21:42:34 +0000 Subject: [PATCH] more damning ui features --- libpukeko/src/navigation/selector.c | 6 +- program/include/store.h | 6 ++ program/src/debug/debug.c | 14 ++-- program/src/main_menu.c | 18 ++++-- program/src/pukeko.c | 97 ++++++++++++++++++++++------ program/src/store/damn_level.c | 27 ++++++++ pukeko-3ds.3dsx | Bin 107852 -> 108724 bytes 7 files changed, 133 insertions(+), 35 deletions(-) create mode 100644 program/include/store.h create mode 100644 program/src/store/damn_level.c diff --git a/libpukeko/src/navigation/selector.c b/libpukeko/src/navigation/selector.c index f60b4b6..0e9781a 100644 --- a/libpukeko/src/navigation/selector.c +++ b/libpukeko/src/navigation/selector.c @@ -14,12 +14,12 @@ MenuItem* create_menu(size_t item_count) return items; } -void set_menu_item(MenuItem* menu, int index, const char* text) +void set_menu_item(MenuItem* menu, int id, const char* text) { - int id = index + 1; + int index = id - 1; if (menu && text) { - menu[index].text = (char*)malloc(strlen(text) + 1); + menu[index].text = malloc(strlen(text) + 1); if (menu[index].text) { strcpy(menu[index].text, text); diff --git a/program/include/store.h b/program/include/store.h new file mode 100644 index 0000000..5f4c80e --- /dev/null +++ b/program/include/store.h @@ -0,0 +1,6 @@ +#ifndef STORE_H +#define STORE_H + +void render_store_menu(); + +#endif // !STORE_H diff --git a/program/src/debug/debug.c b/program/src/debug/debug.c index a2d9594..c8ddfee 100644 --- a/program/src/debug/debug.c +++ b/program/src/debug/debug.c @@ -3,14 +3,15 @@ #include "../../libpukeko/include/navigation.h" void print_debug_menu() { - int items_count = 2; + int items_count = 3; MenuItem* menu = create_menu(items_count); if (!menu) return; - set_menu_item(menu, 0, "Add money (500)"); - set_menu_item(menu, 1, "Back"); + set_menu_item(menu, 1, "Add money (500)"); + set_menu_item(menu, 2, "Add money (100000)"); + set_menu_item(menu, 3, "Back"); while (true) { int selection = selector_render(menu, items_count); @@ -18,10 +19,13 @@ void print_debug_menu() { switch (selection) { case 1: - user_money = user_money + 500; + user_money += 500; + break; + case 2: + user_money += 100000; break; case 0: - case 2: + case 3: destroy_menu(menu, items_count); return; } diff --git a/program/src/main_menu.c b/program/src/main_menu.c index 503bfcb..2dd3f6b 100644 --- a/program/src/main_menu.c +++ b/program/src/main_menu.c @@ -2,19 +2,21 @@ #include "main_menu.h" #include "pukeko_app.h" #include "pukeko.h" +#include "store.h" #include "debug.h" #include "../../libpukeko/include/navigation.h" void print_main_menu() { - int items_count = 3; + int items_count = 4; MenuItem* menu = create_menu(items_count); if (!menu) return; - set_menu_item(menu, 0, "Catch pukekos"); - set_menu_item(menu, 1, "Debugging"); - set_menu_item(menu, 2, "Quit"); + set_menu_item(menu, 1, "Catch pukekos"); + set_menu_item(menu, 2, "Debugging"); + set_menu_item(menu, 3, "Shop"); + set_menu_item(menu, 4, "Quit"); while (true) { int selection = selector_render(menu, items_count); @@ -23,13 +25,17 @@ void print_main_menu() { case 1: consoleClear(); print_game_screen(); - break; + break; case 2: print_debug_menu(); - break; + break; case 3: + render_store_menu(); + break; + + case 4: destroy_menu(menu, items_count); return; } diff --git a/program/src/pukeko.c b/program/src/pukeko.c index 0b45625..ab4396d 100644 --- a/program/src/pukeko.c +++ b/program/src/pukeko.c @@ -5,44 +5,99 @@ #include "pukeko_app.h" #include "pukeko.h" -void print_top_info() { +// RO data + +char* damning_messages[] = { + "DAMN!!! ", + "DAMN, what was that?! ", + "DAMN, its so fluffy! ", + "DAMN!!! This birds got moves! ", + "DAMN, did you see that?!! ", + "DAMN, its a disaster! ", + "DAMN, I cant stop laughing! ", + "DAMN, I just caught it! ", + "DAMN, the birds on fire!! ", + "DAMN, this is too much! " +}; + +// Logic functions + +void print_pukeko_ascii() +{ + printf("\x1b[4;5H _____"); + printf("\x1b[5;5H ___/ o \\"); + printf("\x1b[6;5H < > )"); + printf("\x1b[7;5H \\_________/"); + printf("\x1b[8;8H || ||"); + printf("\x1b[9;7H || ||"); + printf("\x1b[10;6H ^^ ^^"); +} + +void catch_pukeko() +{ + int random_number = rand() % 5 + 1; + int random_message = rand() % 10; + printf("\x1b[1;1H%s", damning_messages[random_message]); + held_pukekos = held_pukekos + random_number; + sleep(2); + printf("\x1b[1;1H(A) Catch Pukeko!!!"); +} + +void sell_pukeko() +{ + user_money += held_pukekos * 5; + held_pukekos = 0; +} + +// Print functions + +void print_top_info() +{ printf("\x1b[1;1H(A) Catch Pukeko!!!"); printf("\x1b[2;1H(Y) Sell Pukeko... :("); printf("\x1b[30;1H(B) Go back"); } -void print_bottom_info() { +void print_bottom_info() +{ consoleInit(GFX_BOTTOM, NULL); printf("\x1b[1;1HMoney: %d", user_money); - printf("\x1b[3;1HPukekos: %d", held_pukekos); + print_pukeko_ascii(); consoleInit(GFX_TOP, NULL); } -void catch_pukeko() { - int random_number = rand() % 5 + 1; - - printf("\x1b[1;1HDAMN!!! "); - held_pukekos = held_pukekos + random_number; - sleep(2); - print_bottom_info(); - print_top_info(); - printf("\x1b[1;1H(A) Catch Pukeko!!!"); -} - -void print_game_screen() { +void print_game_screen() +{ + // Show screen print_bottom_info(); print_top_info(); - while (true) { + while (true) + { hidScanInput(); u32 key_down = hidKeysDown(); - if (key_down & KEY_A) { - catch_pukeko(); - } - if (key_down & KEY_B) { - return; + if (key_down) + { + if (key_down & KEY_A) + catch_pukeko(); + + if (key_down & KEY_Y) + sell_pukeko(); + + if (key_down & KEY_B) + { + consoleInit(GFX_BOTTOM, NULL); + consoleClear(); + consoleInit(GFX_TOP, NULL); + return; + } + + // Update display + print_bottom_info(); + print_top_info(); } } } + diff --git a/program/src/store/damn_level.c b/program/src/store/damn_level.c new file mode 100644 index 0000000..e17c3bf --- /dev/null +++ b/program/src/store/damn_level.c @@ -0,0 +1,27 @@ +#include <3ds.h> +#include "store.h" +#include "../../../libpukeko/include/navigation.h" + +void render_store_menu() +{ + size_t item_count = 2; + MenuItem* store_menu = create_menu(item_count); + + set_menu_item(store_menu, 1, "DAMN!!! level"); + set_menu_item(store_menu, 2, "Back"); + + while (true) + { + int selection = selector_render(store_menu, item_count); + switch (selection) + { + case 1: + //draw_damn_level_menu(); + break; + + case 2: + destroy_menu(store_menu, item_count); + return; + } + } +} diff --git a/pukeko-3ds.3dsx b/pukeko-3ds.3dsx index 854c9683f64f34488c2cc6eccb452a8cd4c07ec7..c5941328fe474994bf318ce8a5587b6faf2a78a9 100644 GIT binary patch delta 5656 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 delta 4811 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 IhIUT=CpT~)3;+NC