diff --git a/.gitignore b/.gitignore index 88a09e4..f971a4a 100644 --- a/.gitignore +++ b/.gitignore @@ -55,4 +55,6 @@ dkms.conf bin/ obj/ -*.z64 \ No newline at end of file +*.z64 +*.n64 +*.v64 \ No newline at end of file diff --git a/lib/libnbke.a b/lib/libnbke.a index 0a74b00..8422d23 100755 --- a/lib/libnbke.a +++ b/lib/libnbke.a @@ -10,7 +10,11 @@ kb_vi_counter = 0x80274578; /* need nbke */ bk_controller_raw = 0x802812B8; bk_take_me_there = 0x802E4078; -bk_transformation_set = 0x8029a95c; + +bk_player_model_update = 0x80291d04; +bk_player_movement_state_set = 0x8029a72c; +bk_transformation_set = 0x8029a95c; +bk_idle_movement_index_get = 0x8029bf78; bk_item_array = 0x80385f30; bk_item_get_count = 0x80345fa0; @@ -27,4 +31,4 @@ bk_mumbo_token_flag_set = 0x803215d0; bk_empty_honeycomb_flag_get = 0x803212e4; bk_empty_honeycomb_flag_set = 0x80321364; -bk_high_note_scores = 0x80385ff0; \ No newline at end of file +bk_high_note_scores = 0x80385ff0; diff --git a/lib/libnbke11.a b/lib/libnbke11.a index a52d510..a739200 100644 --- a/lib/libnbke11.a +++ b/lib/libnbke11.a @@ -10,4 +10,8 @@ kb_vi_counter = 0x80274578; /* need nbke-1.1 */ bk_controller_raw = 0x80284754; bk_take_me_there = 0x802e30b8; -bk_transformation_set = 0x802997d8; \ No newline at end of file + +bk_player_model_update = 0x80290b44; +bk_player_movement_state_set = 0x8029959c; +bk_transformation_set = 0x802997cc; +bk_idle_movement_index_get = 0x8029ae00; \ No newline at end of file diff --git a/lib/libnbkj.a b/lib/libnbkj.a index f1f7e1a..96f72a7 100755 --- a/lib/libnbkj.a +++ b/lib/libnbkj.a @@ -10,4 +10,8 @@ kb_vi_counter = 0x80274578; bk_controller_raw = 0x80284754; bk_take_me_there = 0x802e31d8; -bk_transformation_set = 0x802997fC; \ No newline at end of file + +bk_player_model_update = 0x80290b74; +bk_player_movement_state_set = 0x802995cc; +bk_transformation_set = 0x802997fC; +bk_idle_movement_index_get = 0x8029ae30; \ No newline at end of file diff --git a/lib/libnbkp.a b/lib/libnbkp.a index 013f60a..acec97c 100755 --- a/lib/libnbkp.a +++ b/lib/libnbkp.a @@ -10,4 +10,9 @@ kb_vi_counter = 0x80274578; /* need nbkp */ bk_controller_raw = 0x802810d8; bk_take_me_there = 0x802E4268; -bk_transformation_set = 0x8029a95c; \ No newline at end of file + +bk_player_model_update = 0x80291b24; +bk_player_movement_state_set = 0x8029a56c; +bk_transformation_set = 0x8029a79c; +bk_idle_movement_index_get = 0x8029bdb8; + diff --git a/src/kb/bk.h b/src/kb/bk.h index 6200d0a..41802b9 100644 --- a/src/kb/bk.h +++ b/src/kb/bk.h @@ -29,6 +29,16 @@ typedef struct{ int8_t y; } bk_controller_t; +typedef enum transformations { + BK_TRANS_BANJO = 0x01, + BK_TRANS_TERMITE = 0X02, + BK_TRANS_PUMPKIN = 0X03, + BK_TRANS_WALRUS = 0X04, + BK_TRANS_CROC = 0X05, + BK_TRANS_BEE = 0X06, + BK_TRANS_WISHYWASHY = 0X07, +} bk_transformation_t; + typedef enum bK_item{ BK_ITEM_SKULL_HOURGLASS = 0x1, BK_ITEM_PROPELLOR_TIMER = 0x3, @@ -81,11 +91,16 @@ bk_extern int32_t bk_vi_counter; bk_extern bk_controller_t bk_controller_raw; bk_extern uint8_t bk_high_note_scores; -bk_extern int game_update (void); -bk_extern void load_code_stage2 (void); -bk_extern void load_code_stage1 (void); -bk_extern void bk_gfx_finish (Gfx **p_gfx_p); -bk_extern void bk_take_me_there (uint32_t map, uint32_t exit, uint32_t warp_type); +bk_extern int game_update (void); +bk_extern void load_code_stage2 (void); +bk_extern void load_code_stage1 (void); +bk_extern void bk_gfx_finish (Gfx **p_gfx_p); +bk_extern void bk_take_me_there (uint32_t map, uint32_t exit, uint32_t warp_type); +bk_extern void bk_transformation_set (uint32_t transform); +bk_extern uint32_t bk_idle_movement_index_get (void); +bk_extern void bk_player_movement_state_set (uint32_t movement_state_indx); +bk_extern void bk_player_model_update (void); + bk_extern uint32_t bk_item_get_count (uint32_t item_index); bk_extern uint32_t bk_item_array; diff --git a/src/kb/kb.c b/src/kb/kb.c index 14f6eef..663d7c0 100644 --- a/src/kb/kb.c +++ b/src/kb/kb.c @@ -89,8 +89,10 @@ void init(void){ menu_init(main_menu, 20, 30); main_menu->selected_item = menu_button_add(main_menu, 0, 0, "return", main_menu_on_activate, NULL); - menu_submenu_add(main_menu, 0, 1, "warps", create_warps_menu()); - menu_submenu_add(main_menu, 0, 2, "watches", create_watches_menu()); + menu_submenu_add(main_menu, 0, 1, "transformations", create_transformations_menu()); + menu_submenu_add(main_menu, 0, 2, "warps", create_warps_menu()); + menu_submenu_add(main_menu, 0, 3, "watches", create_watches_menu()); + menu_submenu_add(main_menu, 0, 5, "items", create_items_menu()); kb.menu_active = 0; diff --git a/src/kb/kb.h b/src/kb/kb.h index 4cdb925..9fcb764 100644 --- a/src/kb/kb.h +++ b/src/kb/kb.h @@ -14,6 +14,7 @@ typedef struct { extern kb_ctxt_t kb; +menu_t *create_transformations_menu(void); menu_t *create_warps_menu(void); menu_t *create_watches_menu (void); diff --git a/src/kb/kb_transformations_menu.c b/src/kb/kb_transformations_menu.c new file mode 100644 index 0000000..ce1e12e --- /dev/null +++ b/src/kb/kb_transformations_menu.c @@ -0,0 +1,29 @@ +#include +#include +#include "kb.h" +#include "bk.h" + +static int set_transformation_proc(event_handler_t *handler, menu_event_t event, void **data){ + uint32_t transformation = (uint32_t)handler->callback_data & 0xFF; + bk_transformation_set(transformation); + bk_player_model_update(); + uint32_t idle = bk_idle_movement_index_get(); + bk_player_movement_state_set(idle); + //todo: force control if washing machine + + return 1; +} + +menu_t *create_transformations_menu(){ + menu_t *trans_menu = malloc(sizeof(*trans_menu)); + menu_init(trans_menu,0,0); + trans_menu->selected_item = menu_button_add(trans_menu,0,0,"return",menu_return,NULL); + menu_button_add(trans_menu, 0, 1, "banjo", set_transformation_proc, (void*)BK_TRANS_BANJO); + menu_button_add(trans_menu, 0, 2, "termite", set_transformation_proc, (void*)BK_TRANS_TERMITE); + menu_button_add(trans_menu, 0, 3, "crocodile", set_transformation_proc, (void*)BK_TRANS_CROC); + menu_button_add(trans_menu, 0, 4, "walrus", set_transformation_proc, (void*)BK_TRANS_WALRUS); + menu_button_add(trans_menu, 0, 5, "pumpkin", set_transformation_proc, (void*)BK_TRANS_PUMPKIN); + menu_button_add(trans_menu, 0, 6, "bee", set_transformation_proc, (void*)BK_TRANS_BEE); + menu_button_add(trans_menu, 0, 7, "washing machine", set_transformation_proc, (void*)BK_TRANS_WISHYWASHY); + return trans_menu; +} \ No newline at end of file diff --git a/src/kb/scenes.c b/src/kb/scenes.c index ee23c85..ef45ca5 100644 --- a/src/kb/scenes.c +++ b/src/kb/scenes.c @@ -359,7 +359,7 @@ static kb_scene_t MMM_scenes[16] = { } }, { "rain barrel", - 0x2E, 1, + 0x2F, 2, (kb_entrance_t[]){ {0x1, "downspout"}, {0x2, "bottom"}, @@ -511,7 +511,7 @@ static kb_scene_t CCW_spring_scenes[5] = { } }, { "zubba's hive", - 0x5A, 1, + 0x5B, 1, (kb_entrance_t[]){ {0x1, ""}, }