From 0fca0de856955dd6533b5749a10c8451fa5cd83c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 25 Aug 2024 10:41:00 -0700 Subject: [PATCH] decomp two more trap funcs --- asm/code_807FCD4.s | 119 --------------------------------------------- src/trap.c | 48 ++++++++++++++++++ 2 files changed, 48 insertions(+), 119 deletions(-) diff --git a/asm/code_807FCD4.s b/asm/code_807FCD4.s index 33fdb27a1..3049241bf 100644 --- a/asm/code_807FCD4.s +++ b/asm/code_807FCD4.s @@ -5,125 +5,6 @@ .text - thumb_func_start HandleSealTrap -HandleSealTrap: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - mov r8, r0 - adds r7, r1, 0 - movs r0, 0 - mov r9, r0 - cmp r7, 0 - beq _08080870 - mov r0, r8 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _08080870 - ldr r0, [r7, 0x70] - movs r5, 0 - movs r6, 0x1 - movs r1, 0x8C - lsls r1, 1 - adds r2, r0, r1 - adds r3, r2, 0 - mov r12, sp - movs r4, 0x3 -_080807F6: - ldrb r1, [r2] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _08080816 - ldrb r1, [r2, 0x1] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - bne _08080816 - mov r0, r12 - adds r0, 0x4 - mov r12, r0 - subs r0, 0x4 - stm r0!, {r3} - adds r5, 0x1 -_08080816: - adds r2, 0x8 - adds r3, 0x8 - subs r4, 0x1 - cmp r4, 0 - bge _080807F6 - cmp r5, 0 - beq _08080848 - adds r0, r5, 0 - bl DungeonRandInt - lsls r0, 2 - mov r1, sp - adds r3, r1, r0 - ldr r2, [r3] - ldrb r1, [r2, 0x1] - movs r0, 0x1 - orrs r0, r1 - strb r0, [r2, 0x1] - ldr r0, _0808085C - ldr r1, [r3] - movs r2, 0 - bl sub_80928C0 - movs r0, 0x1 - mov r9, r0 -_08080848: - mov r1, r9 - cmp r1, 0 - beq _08080864 - ldr r0, _08080860 - ldr r2, [r0] - mov r0, r8 - adds r1, r7, 0 - bl sub_80522F4 - b _08080870 - .align 2, 0 -_0808085C: .4byte gFormatItems -_08080860: .4byte gUnknown_80FDB04 -_08080864: - ldr r0, _08080880 - ldr r2, [r0] - mov r0, r8 - adds r1, r7, 0 - bl sub_80522F4 -_08080870: - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08080880: .4byte gUnknown_80FDB2C - thumb_func_end HandleSealTrap - - thumb_func_start HandleWhirlwindTrap -HandleWhirlwindTrap: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - cmp r4, 0 - beq _0808089E - movs r0, 0x8 - bl DungeonRandInt - adds r2, r0, 0 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_807CD9C -_0808089E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end HandleWhirlwindTrap - thumb_func_start HandlePokemonTrap HandlePokemonTrap: push {r4-r7,lr} diff --git a/src/trap.c b/src/trap.c index 9aa45b7ce..011786fa8 100644 --- a/src/trap.c +++ b/src/trap.c @@ -11,6 +11,7 @@ #include "dungeon_engine.h" #include "dungeon_items.h" #include "dungeon_map_access.h" +#include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "dungeon_util.h" #include "items.h" @@ -44,6 +45,9 @@ extern u8 *gUnknown_80FED04[]; extern u8 *gUnknown_80FED0C[]; extern u8 *gUnknown_80FDAA0[]; extern u8 *gUnknown_80FDA80[]; +extern u8 *gUnknown_80FDB04[]; +extern u8 *gUnknown_80FDB2C[]; + extern s16 gUnknown_80F4E0E; extern s16 gUnknown_80F4F84; @@ -90,6 +94,7 @@ u8 sub_803D6FC(void); Entity *sub_8045684(u8, Position *, u8); extern void sub_807D148(Entity *pokemon, Entity *target, u32 r2, Position *r3); extern void sub_807DF38(Entity *pokemon, Entity *target, Position *pos, u32, u8 moveType, s16); +extern void sub_807CD9C(Entity *, Entity *, u32 direction); void sub_807FC3C(Position *pos, u32 trapID, u32 param_3) { @@ -676,3 +681,46 @@ void HandleWonderTile(Entity *pokemon, Entity *target) { sub_8079E34(pokemon, target, FALSE); } + +void HandleSealTrap(Entity *param_1,Entity *param_2) +{ + Move *move; + s32 moveIndex; + s32 i; + s32 counter; + EntityInfo *info; + Move *moveStack [MAX_MON_MOVES]; + bool8 flag = FALSE; + + + if (param_2 != NULL && !HasSafeguardStatus(param_1, param_2, TRUE)) { + info = param_2->info; + counter = 0; + for(i = 0; i < MAX_MON_MOVES;i++) + { + move = &info->moves[i]; + if ((move->moveFlags & MOVE_FLAG_EXISTS) && !(move->moveFlags2 & MOVE_FLAG_SEALED)) { + moveStack[counter] = move; + counter++; + } + } + if (counter != 0) { + moveIndex = DungeonRandInt(counter); + moveStack[moveIndex]->moveFlags2 |= MOVE_FLAG_SEALED; + sub_80928C0(gUnknown_202DE58,moveStack[moveIndex], NULL); + flag = TRUE; + } + if(flag) + sub_80522F4(param_1,param_2,*gUnknown_80FDB04); + else + sub_80522F4(param_1,param_2,*gUnknown_80FDB2C); + } +} + +void HandleWhirlwindTrap(Entity *pokemon, Entity *target) +{ + if(target) + { + sub_807CD9C(pokemon, target, DungeonRandInt(NUM_DIRECTIONS)); + } +}