mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-28 11:44:30 -05:00
Merge pull request #355 from DizzyEggg/code_8041AD0
sub_804225C in code_8041AD0
This commit is contained in:
@@ -1,162 +0,0 @@
|
||||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_804225C
|
||||
sub_804225C:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x4
|
||||
mov r8, r0
|
||||
adds r5, r1, 0
|
||||
lsls r2, 24
|
||||
lsrs r4, r2, 24
|
||||
adds r7, r4, 0
|
||||
cmp r4, 0x11
|
||||
bne _08042274
|
||||
b _08042384
|
||||
_08042274:
|
||||
adds r0, r5, 0
|
||||
bl sub_803F428
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08042282
|
||||
b _08042384
|
||||
_08042282:
|
||||
adds r0, r4, 0
|
||||
bl sub_800EF28
|
||||
bl sub_800EF64
|
||||
movs r0, 0x4
|
||||
movs r1, 0x42
|
||||
bl sub_803E708
|
||||
movs r0, 0
|
||||
ldrsh r1, [r5, r0]
|
||||
lsls r0, r1, 1
|
||||
adds r0, r1
|
||||
lsls r0, 11
|
||||
movs r1, 0xC0
|
||||
lsls r1, 4
|
||||
adds r0, r1
|
||||
cmp r0, 0
|
||||
bge _080422AA
|
||||
adds r0, 0xFF
|
||||
_080422AA:
|
||||
lsls r0, 8
|
||||
lsrs r0, 16
|
||||
ldr r1, _080422FC
|
||||
ldr r2, [sp]
|
||||
ands r2, r1
|
||||
orrs r2, r0
|
||||
str r2, [sp]
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r5, r0]
|
||||
lsls r0, r1, 1
|
||||
adds r0, r1
|
||||
lsls r0, 11
|
||||
movs r1, 0x80
|
||||
lsls r1, 5
|
||||
adds r0, r1
|
||||
cmp r0, 0
|
||||
bge _080422CE
|
||||
adds r0, 0xFF
|
||||
_080422CE:
|
||||
lsls r0, 8
|
||||
lsrs r0, 16
|
||||
lsls r0, 16
|
||||
ldr r1, _08042300
|
||||
ands r2, r1
|
||||
orrs r2, r0
|
||||
str r2, [sp]
|
||||
adds r0, r4, 0
|
||||
mov r1, sp
|
||||
bl sub_800E448
|
||||
adds r6, r0, 0
|
||||
cmp r4, 0x4
|
||||
bne _08042308
|
||||
ldr r1, _08042304
|
||||
movs r0, 0
|
||||
bl sub_80421C0
|
||||
movs r0, 0x28
|
||||
movs r1, 0x33
|
||||
bl sub_803E708
|
||||
b _08042360
|
||||
.align 2, 0
|
||||
_080422FC: .4byte 0xffff0000
|
||||
_08042300: .4byte 0x0000ffff
|
||||
_08042304: .4byte 0x00000193
|
||||
_08042308:
|
||||
cmp r7, 0x8
|
||||
bne _08042358
|
||||
mov r0, r8
|
||||
ldr r7, [r0, 0x70]
|
||||
adds r0, r7, 0
|
||||
adds r0, 0x46
|
||||
ldrb r4, [r0]
|
||||
movs r5, 0
|
||||
b _0804231C
|
||||
_0804231A:
|
||||
adds r5, 0x2
|
||||
_0804231C:
|
||||
ldr r0, _08042354
|
||||
cmp r5, r0
|
||||
bgt _08042346
|
||||
subs r4, 0x1
|
||||
movs r0, 0x7
|
||||
ands r4, r0
|
||||
mov r0, r8
|
||||
movs r1, 0
|
||||
adds r2, r4, 0
|
||||
bl sub_806CDD4
|
||||
movs r0, 0x2
|
||||
movs r1, 0x33
|
||||
bl sub_803E708
|
||||
adds r0, r6, 0
|
||||
bl sub_800E9A8
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0804231A
|
||||
_08042346:
|
||||
movs r0, 0x7
|
||||
ands r4, r0
|
||||
adds r0, r7, 0
|
||||
adds r0, 0x46
|
||||
strb r4, [r0]
|
||||
b _08042360
|
||||
.align 2, 0
|
||||
_08042354: .4byte 0x000003e7
|
||||
_08042358:
|
||||
movs r0, 0x28
|
||||
movs r1, 0x33
|
||||
bl sub_803E708
|
||||
_08042360:
|
||||
movs r5, 0
|
||||
ldr r4, _08042368
|
||||
b _0804236E
|
||||
.align 2, 0
|
||||
_08042368: .4byte 0x000003e7
|
||||
_0804236C:
|
||||
adds r5, 0x1
|
||||
_0804236E:
|
||||
cmp r5, r4
|
||||
bgt _08042384
|
||||
movs r0, 0x42
|
||||
bl sub_803E46C
|
||||
adds r0, r6, 0
|
||||
bl sub_800E9A8
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0804236C
|
||||
_08042384:
|
||||
add sp, 0x4
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_804225C
|
||||
|
||||
.align 2,0
|
||||
@@ -201,7 +201,6 @@ SECTIONS {
|
||||
src/code_8040094.o(.text);
|
||||
asm/code_8040094.o(.text);
|
||||
src/code_8041AD0.o(.text);
|
||||
asm/code_8041AD0.o(.text);
|
||||
src/code_804267C.o(.text);
|
||||
src/code_8042B34.o(.text);
|
||||
src/dungeon_engine.o(.text);
|
||||
|
||||
@@ -893,3 +893,57 @@ void sub_8042238(Entity *pokemon, Entity *target)
|
||||
else
|
||||
PlaySoundEffect(0x156);
|
||||
}
|
||||
|
||||
extern void sub_800EF28(u8);
|
||||
extern void sub_803E708(u32, u32);
|
||||
extern u32 sub_800E448(u8, DungeonPos *);
|
||||
|
||||
void sub_804225C(Entity *entity, DungeonPos *pos, u8 trapId)
|
||||
{
|
||||
s32 uVar6;
|
||||
DungeonPos newPos;
|
||||
s32 i, x, y;
|
||||
|
||||
if (trapId == TRAP_WONDER_TILE)
|
||||
return;
|
||||
if (!sub_803F428(pos))
|
||||
return;
|
||||
|
||||
sub_800EF28(trapId);
|
||||
sub_800EF64();
|
||||
sub_803E708(4,0x42);
|
||||
|
||||
x = X_POS_TO_PIXELPOS(pos->x);
|
||||
newPos.x = x / 256;
|
||||
|
||||
y = Y_POS_TO_PIXELPOS(pos->y);
|
||||
newPos.y = y / 256;
|
||||
|
||||
uVar6 = sub_800E448(trapId,&newPos);
|
||||
if (trapId == TRAP_SUMMON_TRAP) {
|
||||
sub_80421C0(0,0x193);
|
||||
sub_803E708(0x28,0x33);
|
||||
}
|
||||
else if (trapId == TRAP_SPIN_TRAP) {
|
||||
EntityInfo *info = GetEntInfo(entity);
|
||||
s32 direction = info->action.direction;
|
||||
for (i = 0; i < 1000; i += 2) {
|
||||
direction--;
|
||||
direction &= DIRECTION_MASK;
|
||||
sub_806CDD4(entity,0,direction);
|
||||
sub_803E708(2,0x33);
|
||||
if (!sub_800E9A8(uVar6))
|
||||
break;
|
||||
}
|
||||
info->action.direction = direction & DIRECTION_MASK;
|
||||
}
|
||||
else {
|
||||
sub_803E708(0x28,0x33);
|
||||
}
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
sub_803E46C(0x42);
|
||||
if (!sub_800E9A8(uVar6))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user