123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
-
-
-
-
-
-
- #include <agb_debug.h>
- #include <config/core.h>
- #include <pokeagb/pokeagb.h>
-
-
- extern void battle_init();
- extern void battle_80801F0_something();
-
- extern volatile u8 trainerbattle_battle_type;
- extern volatile u16 trainerbattle_arg2;
- extern volatile char *trainerbattle_message_intro;
- extern volatile char *trainerbattle_message_defeat;
- extern volatile char *trainerbattle_message_2;
- extern volatile char *trainerbattle_message_need_2_poke;
- extern volatile char *trainerbattle_message_4;
- extern volatile void *trainerbattle_next_scr_cmd;
- extern volatile u16 trainerbattle_unknown;
-
- char ***trainer_text_array;
- char *str_invalid_text_ref;
-
-
-
-
-
-
- u8 load_byte(void *ptr) {
- u8 *to_load = (u8 *)ptr;
- return (u8)(*to_load);
- }
-
-
- u16 load_hword(void *ptr) {
- u8 *to_load = (u8 *)ptr;
- u16 result = *to_load;
- u16 result2 = *(to_load + 1) << 8;
- return result | result2;
- }
-
-
- u32 load_word(void *ptr) {
- u8 *to_load = (u8 *)ptr;
- u32 result = *to_load;
- u32 result2 = *(to_load + 1);
- u32 result3 = *(to_load + 2);
- u32 result4 = *(to_load + 3);
- return (result) | (result2 << 8) | (result3 << 16) | (result4 << 24);
- }
-
-
- u16 tb_modify_flag_id(u16 flag) {
- u16 difficulty = var_load(0x5052);
- u16 new_flag = flag;
- switch (difficulty) {
- case 0:
- break;
- case 1:
- new_flag = flag + 1;
- break;
- case 2:
- new_flag = flag + 2;
- break;
- }
- dprintf("tb_modify_flag_id;; trainer ID: %d, difficulty: %d, new trainer id: %d\n", flag, difficulty, new_flag);
- return new_flag;
- }
-
-
- char *tb_modify_text(char *original, u8 index) {
- if (original != NULL)
- return original;
- u8 flag_index = trainerbattle_flag_id;
- for (int i = 0; i <= flag_index; ++i) {
- if (trainer_text_array[i] == (char **)0xDEADBEEF) {
- return str_invalid_text_ref;
- }
- }
- for (int i = 0; i <= index; ++i) {
- if (trainer_text_array[flag_index][i] == (char *)0xDEADBEEF) {
- return str_invalid_text_ref;
- }
- }
- return trainer_text_array[flag_index][index];
- }
-
-
- void *tb_configure_by_script(void *ptr_script) {
- battle_init();
- trainerbattle_battle_type = load_byte(ptr_script);
- switch (trainerbattle_battle_type) {
- case 1:
- case 2:
- trainerbattle_battle_type = load_byte(ptr_script);
- ptr_script++;
-
- trainerbattle_flag_id = tb_modify_flag_id(load_hword(ptr_script));
- ptr_script += 2;
-
- trainerbattle_arg2 = load_hword(ptr_script);
- ptr_script += 2;
-
- trainerbattle_message_intro = tb_modify_text((char *)load_word(ptr_script), 0);
- ptr_script += 4;
-
- trainerbattle_message_defeat = tb_modify_text((char *)load_word(ptr_script), 1);
- ptr_script += 4;
-
- trainerbattle_message_2 = NULL;
- trainerbattle_message_need_2_poke = NULL;
-
- trainerbattle_message_4 = tb_modify_text((char *)load_word(ptr_script), 2);
- ptr_script += 4;
- trainerbattle_next_scr_cmd = ptr_script;
- battle_80801F0_something();
- return (void *)(0x081A4EC1) ;
- case 3:
- trainerbattle_battle_type = load_byte(ptr_script);
-
- trainerbattle_flag_id = tb_modify_flag_id(load_hword(ptr_script));
- ptr_script += 2;
-
- trainerbattle_arg2 = load_hword(ptr_script);
- ptr_script += 2;
-
- trainerbattle_message_intro = NULL;
-
- trainerbattle_message_defeat = tb_modify_text((char *)load_word(ptr_script), 0);
- ptr_script += 4;
-
- trainerbattle_message_2 = NULL;
- trainerbattle_message_need_2_poke = NULL;
-
- trainerbattle_message_4 = NULL;
-
- trainerbattle_next_scr_cmd = ptr_script;
- return (void *)(0x081A4F21);
- case 4:
- trainerbattle_battle_type = load_byte(ptr_script);
- ptr_script++;
-
- trainerbattle_flag_id = tb_modify_flag_id(load_hword(ptr_script));
- ptr_script += 2;
-
- trainerbattle_arg2 = load_hword(ptr_script);
- ptr_script += 2;
-
- trainerbattle_message_intro = tb_modify_text((char *)load_word(ptr_script), 0);
- ptr_script += 4;
-
- trainerbattle_message_defeat = tb_modify_text((char *)load_word(ptr_script), 1);
- ptr_script += 4;
-
- trainerbattle_message_2 = NULL;
-
- trainerbattle_message_need_2_poke = tb_modify_text((char *)load_word(ptr_script), 2);
- ptr_script += 4;
-
- trainerbattle_message_4 = NULL;
- ptr_script += 4;
- trainerbattle_next_scr_cmd = ptr_script;
- battle_80801F0_something();
- return (void *)(0x081A4EE9);
-
-
- case 6:
- case 8:
- trainerbattle_battle_type = load_byte(ptr_script);
- ptr_script++;
-
- trainerbattle_flag_id = tb_modify_flag_id(load_hword(ptr_script));
- ptr_script += 2;
-
- trainerbattle_arg2 = load_hword(ptr_script);
- ptr_script += 2;
-
- trainerbattle_message_intro = tb_modify_text((char *)load_word(ptr_script), 0);
- ptr_script += 4;
-
- trainerbattle_message_defeat = tb_modify_text((char *)load_word(ptr_script), 1);
- ptr_script += 4;
-
- trainerbattle_message_2 = NULL;
-
- trainerbattle_message_need_2_poke = tb_modify_text((char *)load_word(ptr_script), 2);
- ptr_script += 4;
- trainerbattle_message_4 = tb_modify_text((char *)load_word(ptr_script), 3);
- ptr_script += 4;
- trainerbattle_next_scr_cmd = ptr_script;
- battle_80801F0_something();
- return (void *)(0x081A4EE9);
-
-
- case 9:
-
-
- trainerbattle_battle_type = load_byte(ptr_script);
- ptr_script++;
-
- trainerbattle_flag_id = tb_modify_flag_id(load_hword(ptr_script));
- ptr_script += 2;
-
- trainerbattle_unknown = load_hword(ptr_script);
- ptr_script += 2;
-
- trainerbattle_message_intro = NULL;
-
- trainerbattle_message_defeat = tb_modify_text((char *)load_word(ptr_script), 0);
- ptr_script += 4;
-
- trainerbattle_message_2 = tb_modify_text((char *)load_word(ptr_script), 1);
- ptr_script += 4;
-
- trainerbattle_message_need_2_poke = NULL;
-
- trainerbattle_message_4 = NULL;
-
- trainerbattle_next_scr_cmd = ptr_script;
-
- battle_80801F0_something();
-
- return (void *)(0x081A4EC1);
-
- case 0xFF:
-
-
- return ptr_script + 13;
- default:
- trainerbattle_battle_type = load_byte(ptr_script);
- ptr_script++;
-
- trainerbattle_flag_id = tb_modify_flag_id(load_hword(ptr_script));
- ptr_script += 2;
-
- trainerbattle_arg2 = load_hword(ptr_script);
- ptr_script += 2;
-
- trainerbattle_message_intro = tb_modify_text((char *)load_word(ptr_script), 0);
- ptr_script += 4;
-
- trainerbattle_message_defeat = tb_modify_text((char *)load_word(ptr_script), 1);
- ptr_script += 4;
-
- trainerbattle_message_2 = NULL;
- trainerbattle_message_need_2_poke = NULL;
- trainerbattle_message_4 = NULL;
- trainerbattle_next_scr_cmd = ptr_script;
- battle_80801F0_something();
- return (void *)(0x081A4EC1);
- }
-
-
-
- }
-
- void tb_on_spot(u8 npc_id, void *ptr_script) {
- scripting_npc = npc_id;
- var_800F = npc_states[npc_id].local_id;
- u8 tb_battle_type = load_byte(ptr_script + 1);
-
- if (tb_battle_type != 0xFF) {
- tb_configure_by_script(ptr_script + 1);
- script_env_init_script((void *)0x081A4EB4);
- script_env_enable();
- } else {
- u16 flag = load_hword(ptr_script + 2);
- void *scr_true = (void *)load_word(ptr_script + 6);
- void *scr_false = (void *)load_word(ptr_script + 10);
- if (flag_check(flag))
- script_env_init_script(scr_true);
- else
- script_env_init_script(scr_false);
- script_env_enable();
- }
- }
|