From ae2853b67165de74fa349b101cd1d391f5e00dfa Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 8 May 2023 15:45:09 -0700 Subject: [PATCH] address comments --- ld_script.txt | 1 + src/code_8045A00.c | 1 - src/code_807CD9C.c | 183 +++++++++++++++++++++++++++++++++++++++++++++ src/options_menu.c | 3 +- src/weather.c | 179 -------------------------------------------- 5 files changed, 186 insertions(+), 181 deletions(-) create mode 100644 src/code_807CD9C.c diff --git a/ld_script.txt b/ld_script.txt index 56ef49cb8..a9c0f1667 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -263,6 +263,7 @@ SECTIONS { asm/code_807CABC.o(.text); src/targeting_flags.o(.text); asm/code_807CD9C.o(.text); + src/code_807CD9C.o(.text); src/weather.o(.text); asm/code_807E5AC.o(.text); src/code_807E5AC.o(.text); diff --git a/src/code_8045A00.c b/src/code_8045A00.c index b48663308..87b0933f8 100644 --- a/src/code_8045A00.c +++ b/src/code_8045A00.c @@ -181,7 +181,6 @@ void sub_8045CB0(void) uVar5 = 3; } else { - // TODO: Ternary? uVar5 = -(tile->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE) >> 0x1f & 2; } } diff --git a/src/code_807CD9C.c b/src/code_807CD9C.c new file mode 100644 index 000000000..2e94e2fe7 --- /dev/null +++ b/src/code_807CD9C.c @@ -0,0 +1,183 @@ +#include "global.h" + +#include "constants/ability.h" +#include "constants/type.h" +#include "dungeon_global_data.h" +#include "dungeon_leader.h" +#include "dungeon_util.h" +#include "code_80521D0.h" +#include "dungeon_ai.h" +#include "dungeon_pokemon_attributes.h" +#include "moves.h" +#include "move_util.h" + +extern u8 UseAttack(struct Entity *); +extern void sub_805E804(void); +void sub_806A2BC(struct Entity *pokemon, u8 param_2); +extern u8 sub_8044B28(void); +extern void sub_80426C8(u32, u32); +extern void sub_8068FE0(struct Entity *, u32, struct Entity *r2); +extern void nullsub_93(struct Position *); +extern void sub_80522F4(struct Entity *, struct Entity *, u8 *); +extern void SetMessageArgument(char[], struct Entity*, u32); +extern void sub_806F370(struct Entity *r0, struct Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32); +extern void sub_80694C0(struct Entity *, s32, s32, u32); +extern void sub_804535C(struct Entity *, u32); +extern void sub_804AC20(struct Position *); +extern void sub_807EC28(u32); +extern void sub_806A5B8(struct Entity *); + +extern u32 gUnknown_80F5FAC[]; +extern u8 *gUnknown_80F9C4C[]; +extern u8 *gUnknown_80F9C70[]; +extern u8 *gUnknown_80F9C8C[]; +extern u8 *gUnknown_80F9CBC[]; +extern u8 gAvailablePokemonNames[]; +extern u8 *gUnknown_80FCAC0[]; + +void sub_807E1A0(struct Entity *pokemon,struct Entity *target,u8 param_3,s16 param_4,s32 param_5) +{ + struct EntityInfo *targetInfo; + u8 flag; + struct Move move; + s32 newHP; + s32 param_4_s32; + + param_4_s32 = param_4; + + if (EntityExists(target)) { + targetInfo = target->info; + InitPokemonMove(&move, MOVE_REGULAR_ATTACK); + if (!sub_80571F0(target,&move)) { + if (!targetInfo->isNotTeamMember) { + newHP = targetInfo->HP; + newHP /= 2; + if (MonsterIsType(target, TYPE_FIRE)) { + newHP /= 2; + } + if (newHP < 1) { + newHP = 1; + } + } + else { + newHP = param_5; + if (MonsterIsType(target, TYPE_FIRE)) { + newHP /= 2; + } + } + sub_806F370(pokemon,target,newHP,0,&flag,param_3,param_4_s32,0,0,0); + } + } +} + +void sub_807E254(struct Entity *pokemon,struct Entity *target) +{ + struct Position pokemonPos; + struct Position targetPos; + + + if (HasAbility(pokemon, ABILITY_SUCTION_CUPS)) { + SetMessageArgument(gAvailablePokemonNames,pokemon,0); + sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places + } + else if(HasAbility(target, ABILITY_SUCTION_CUPS)) + { + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places + } + else + { + pokemonPos.x = pokemon->pos.x; + pokemonPos.y = pokemon->pos.y; + targetPos.x = target->pos.x; + targetPos.y = target->pos.y; + nullsub_93(&pokemonPos); + nullsub_93(&targetPos); + sub_80694C0(pokemon,targetPos.x,targetPos.y,1); + sub_80694C0(target,pokemonPos.x,pokemonPos.y,1); + sub_804535C(pokemon,0x0); + sub_804535C(target,0x0); + + if (EntityExists(pokemon)) { + if (pokemon->info->isTeamLeader) { + sub_804AC20(&pokemon->pos); + sub_807EC28(0); + } + sub_806A5B8(pokemon); + sub_8075900(pokemon,gDungeon->unk3A08); + } + + if (EntityExists(target)) { + if (target->info->isTeamLeader) { + sub_804AC20(&target->pos); + sub_807EC28(0); + } + sub_806A5B8(target); + sub_8075900(target,gDungeon->unk3A08); + } + } +} + +void sub_807E378(void) +{ + u16 uVar2; + struct Entity *leader; + + leader = GetLeader(); + if (EntityExists(leader)) { + + uVar2 = gDungeon->windTurns; + if ((gDungeon->windTurns < 1) || + (gDungeon->windTurns--, ((uVar2 - 1) << 0x10) < 1)) { + gDungeon->unk67A = 3; + } + + if (gDungeon->unk67A == 0) { + if (gDungeon->windTurns < 0xfa) { + sub_805E804(); + sub_806A2BC(leader,1); + UseAttack(leader); + if (sub_8044B28() == 0) { + SendMessage(leader,*gUnknown_80F9C4C); + sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],0); + gDungeon->unk67A = 1; + } + } + } + else if (gDungeon->unk67A == 1) { + if (gDungeon->windTurns < 0x96) { + sub_805E804(); + sub_806A2BC(leader,1); + UseAttack(leader); + if (sub_8044B28() == 0) { + SendMessage(leader,*gUnknown_80F9C70); + sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],1); + gDungeon->unk67A = 2; + } + } + } + else if (gDungeon->unk67A == 2) { + if (gDungeon->windTurns < 0x32) { + sub_805E804(); + sub_806A2BC(leader,1); + UseAttack(leader); + if (sub_8044B28() == 0) { + SendMessage(leader,*gUnknown_80F9C8C); + sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],2); + gDungeon->unk67A = 3; + } + } + } + else if (gDungeon->windTurns < 1) { + sub_805E804(); + sub_806A2BC(leader,1); + UseAttack(leader); + if (sub_8044B28() == 0) { + SendMessage(leader,*gUnknown_80F9CBC); + sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],3); + gDungeon->unk67A = 4; + sub_8068FE0(leader,0x21e,leader); + } + } + } +} diff --git a/src/options_menu.c b/src/options_menu.c index 4a965f4df..4379a990c 100644 --- a/src/options_menu.c +++ b/src/options_menu.c @@ -110,7 +110,8 @@ enum OptionsMenuStates { OPTIONS_MENU_PRE_HINT_SELECTION, OPTIONS_MENU_HINT_SELECTION, OPTIONS_MENU_DISPLAY_HINT, - OPTIONS_MENU_CONFIRM_NEW_OPTIONS = 7, + OPTIONS_MENU_UNKNOWN_6, + OPTIONS_MENU_CONFIRM_NEW_OPTIONS, }; u32 sub_801DCC4(void) diff --git a/src/weather.c b/src/weather.c index c8f421feb..34408ed59 100644 --- a/src/weather.c +++ b/src/weather.c @@ -1,196 +1,17 @@ #include "global.h" #include "weather.h" -#include "constants/ability.h" #include "constants/item.h" #include "constants/move_id.h" -#include "constants/type.h" #include "constants/weather.h" #include "dungeon_global_data.h" #include "dungeon_items.h" #include "dungeon_random.h" -#include "dungeon_leader.h" #include "dungeon_util.h" -#include "code_80521D0.h" -#include "dungeon_ai.h" -#include "dungeon_pokemon_attributes.h" -#include "moves.h" -#include "move_util.h" extern void TriggerWeatherAbilities(void); extern void sub_807EAA0(u32, u32); void sub_807E5E4(u8); -extern u8 UseAttack(struct Entity *); -extern void sub_805E804(void); -void sub_806A2BC(struct Entity *pokemon, u8 param_2); -extern u8 sub_8044B28(void); -extern void sub_80426C8(u32, u32); -extern void sub_8068FE0(struct Entity *, u32, struct Entity *r2); -extern void nullsub_93(struct Position *); -extern void sub_80522F4(struct Entity *, struct Entity *, u8 *); -extern void SetMessageArgument(char[], struct Entity*, u32); -extern void sub_806F370(struct Entity *r0, struct Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32); -extern void sub_80694C0(struct Entity *, s32, s32, u32); -extern void sub_804535C(struct Entity *, u32); -extern void sub_804AC20(struct Position *); -extern void sub_807EC28(u32); -extern void sub_806A5B8(struct Entity *); - -extern u32 gUnknown_80F5FAC[]; -extern u8 *gUnknown_80F9C4C[]; -extern u8 *gUnknown_80F9C70[]; -extern u8 *gUnknown_80F9C8C[]; -extern u8 *gUnknown_80F9CBC[]; -extern u8 gAvailablePokemonNames[]; -extern u8 *gUnknown_80FCAC0[]; - - -void sub_807E1A0(struct Entity *pokemon,struct Entity *target,u8 param_3,s16 param_4,s32 param_5) -{ - struct EntityInfo *targetInfo; - u8 flag; - struct Move move; - s32 newHP; - s32 param_4_s32; - - param_4_s32 = param_4; - - if (EntityExists(target)) { - targetInfo = target->info; - InitPokemonMove(&move, MOVE_REGULAR_ATTACK); - if (!sub_80571F0(target,&move)) { - if (!targetInfo->isNotTeamMember) { - newHP = targetInfo->HP; - newHP /= 2; - if (MonsterIsType(target, TYPE_FIRE)) { - newHP /= 2; - } - if (newHP < 1) { - newHP = 1; - } - } - else { - newHP = param_5; - if (MonsterIsType(target, TYPE_FIRE)) { - newHP /= 2; - } - } - sub_806F370(pokemon,target,newHP,0,&flag,param_3,param_4_s32,0,0,0); - } - } -} - -void sub_807E254(struct Entity *pokemon,struct Entity *target) -{ - struct Position pokemonPos; - struct Position targetPos; - - - if (HasAbility(pokemon, ABILITY_SUCTION_CUPS)) { - SetMessageArgument(gAvailablePokemonNames,pokemon,0); - sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places - } - else if(HasAbility(target, ABILITY_SUCTION_CUPS)) - { - SetMessageArgument(gAvailablePokemonNames,target,0); - sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places - } - else - { - pokemonPos.x = pokemon->pos.x; - pokemonPos.y = pokemon->pos.y; - targetPos.x = target->pos.x; - targetPos.y = target->pos.y; - nullsub_93(&pokemonPos); - nullsub_93(&targetPos); - sub_80694C0(pokemon,targetPos.x,targetPos.y,1); - sub_80694C0(target,pokemonPos.x,pokemonPos.y,1); - sub_804535C(pokemon,0x0); - sub_804535C(target,0x0); - - if (EntityExists(pokemon)) { - if (pokemon->info->isTeamLeader) { - sub_804AC20(&pokemon->pos); - sub_807EC28(0); - } - sub_806A5B8(pokemon); - sub_8075900(pokemon,gDungeon->unk3A08); - } - - if (EntityExists(target)) { - if (target->info->isTeamLeader) { - sub_804AC20(&target->pos); - sub_807EC28(0); - } - sub_806A5B8(target); - sub_8075900(target,gDungeon->unk3A08); - } - } -} - -void sub_807E378(void) -{ - u16 uVar2; - struct Entity *leader; - - leader = GetLeader(); - if (EntityExists(leader)) { - - uVar2 = gDungeon->windTurns; - if ((gDungeon->windTurns < 1) || - (gDungeon->windTurns--, ((uVar2 - 1) << 0x10) < 1)) { - gDungeon->unk67A = 3; - } - - if (gDungeon->unk67A == 0) { - if (gDungeon->windTurns < 0xfa) { - sub_805E804(); - sub_806A2BC(leader,1); - UseAttack(leader); - if (sub_8044B28() == 0) { - SendMessage(leader,*gUnknown_80F9C4C); - sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],0); - gDungeon->unk67A = 1; - } - } - } - else if (gDungeon->unk67A == 1) { - if (gDungeon->windTurns < 0x96) { - sub_805E804(); - sub_806A2BC(leader,1); - UseAttack(leader); - if (sub_8044B28() == 0) { - SendMessage(leader,*gUnknown_80F9C70); - sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],1); - gDungeon->unk67A = 2; - } - } - } - else if (gDungeon->unk67A == 2) { - if (gDungeon->windTurns < 0x32) { - sub_805E804(); - sub_806A2BC(leader,1); - UseAttack(leader); - if (sub_8044B28() == 0) { - SendMessage(leader,*gUnknown_80F9C8C); - sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],2); - gDungeon->unk67A = 3; - } - } - } - else if (gDungeon->windTurns < 1) { - sub_805E804(); - sub_806A2BC(leader,1); - UseAttack(leader); - if (sub_8044B28() == 0) { - SendMessage(leader,*gUnknown_80F9CBC); - sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],3); - gDungeon->unk67A = 4; - sub_8068FE0(leader,0x21e,leader); - } - } - } -} u8 GetApparentWeather(struct Entity *pokemon) {