diff --git a/asm/code_8041AD0.s b/asm/code_8041AD0.s deleted file mode 100644 index d45d8b6bd..000000000 --- a/asm/code_8041AD0.s +++ /dev/null @@ -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 diff --git a/ld_script.txt b/ld_script.txt index a34b84c8e..04764d2ff 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -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); diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c index 6e87e719c..26dd961cc 100644 --- a/src/code_8041AD0.c +++ b/src/code_8041AD0.c @@ -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; + } +}