decomp two more trap funcs

This commit is contained in:
Seth Barberee
2024-08-25 10:41:00 -07:00
parent 55c2ee9990
commit 0fca0de856
2 changed files with 48 additions and 119 deletions

View File

@@ -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}

View File

@@ -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));
}
}