mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-07 08:35:47 -05:00
decomp two more trap funcs
This commit is contained in:
@@ -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}
|
||||
|
||||
48
src/trap.c
48
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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user