pmd-sky/asm/overlay_29_0231F594.s
2025-11-14 00:01:31 -05:00

507 lines
8.9 KiB
ArmAsm

.include "asm/macros.inc"
.include "overlay_29_0231F594.inc"
.text
arm_func_start TryDrought
TryDrought: ; 0x0231F594
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r1, _0231F6D4 ; =DUNGEON_PTR
mov r8, r0
ldr r0, [r1]
mov r6, #0
add r0, r0, #0x4000
#ifdef JAPAN
ldrb r0, [r0, #0x36]
#else
ldrb r0, [r0, #0xda]
#endif
bl AreOrbsAllowedVeneer
cmp r0, #0
bne _0231F5CC
ldr r1, _0231F6D8 ; =0x00000C08
mov r0, r8
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0231F5CC:
bl IsWaterTileset
cmp r0, #0
beq _0231F5E8
ldr r1, _0231F6DC ; =0x00000C09
mov r0, r8
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0231F5E8:
mov r7, r6
mov sb, #1
mov r4, r6
_0231F5F4:
mov r5, r4
_0231F5F8:
mov r0, r5
mov r1, r7
bl GetTileSafe
ldrh r1, [r0]
and r1, r1, #3
cmp r1, #2
bne _0231F63C
ldrh r2, [r0]
mov r1, r7
bic r2, r2, #3
strh r2, [r0]
ldrh r2, [r0]
orr r2, r2, #1
strh r2, [r0]
mov r0, r5
bl ov29_02336694
mov r6, sb
_0231F63C:
add r5, r5, #1
cmp r5, #0x38
blt _0231F5F8
add r7, r7, #1
cmp r7, #0x20
blt _0231F5F4
mov r5, #0
mov r4, r5
_0231F65C:
mov r7, r4
_0231F660:
mov r0, r7
mov r1, r5
bl DetermineTileWalkableNeighbors
add r7, r7, #1
cmp r7, #0x38
blt _0231F660
add r5, r5, #1
cmp r5, #0x20
blt _0231F65C
cmp r6, #0
beq _0231F6A8
mov r0, r8
mov r1, #0x210
bl PlaySeByIdIfShouldDisplayEntity
ldr r1, _0231F6E0 ; =0x00000C07
mov r0, r8
bl LogMessageByIdWithPopupCheckUser
b _0231F6B4
_0231F6A8:
ldr r1, _0231F6D8 ; =0x00000C08
mov r0, r8
bl LogMessageByIdWithPopupCheckUser
_0231F6B4:
ldr r0, _0231F6D4 ; =DUNGEON_PTR
mov r1, #1
ldr r0, [r0]
strb r1, [r0, #0x78f]
bl DetermineAllMonsterShadow
bl UpdateMinimap
bl UpdateTrapsVisibility
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_0231F6D4: .word DUNGEON_PTR
#ifdef JAPAN
_0231F6D8: .word 0x00000947
_0231F6DC: .word 0x00000948
_0231F6E0: .word 0x00000946
#else
_0231F6D8: .word 0x00000C08
_0231F6DC: .word 0x00000C09
_0231F6E0: .word 0x00000C07
#endif
arm_func_end TryDrought
arm_func_start TryTrawl
TryTrawl: ; 0x0231F6E4
#ifdef JAPAN
#define OV29_0231F6E4_OFFSET -0xA4
#else
#define OV29_0231F6E4_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x38
ldr r1, _0231FBE4 ; =DUNGEON_PTR
mov sl, r0
ldr r0, [r1]
add r0, r0, #0x4000
ldrb r0, [r0, #0xda + OV29_0231F6E4_OFFSET]
bl AreTrawlOrbsAllowed
cmp r0, #0
bne _0231F71C
#ifdef JAPAN
ldr r1, _02321094 ; =0x0000090F
mov r0, sl
#else
mov r0, sl
mov r1, #0xbd0
#endif
bl LogMessageByIdWithPopupCheckUser
b _0231FBDC
_0231F71C:
ldr r0, _0231FBE8 ; =0x000013BC
mov r2, #0
mov r1, #0xf
str r2, [sp, #0xc]
bl MemAlloc
mov r4, r0
mov r6, #0
add r0, r4, #0x1f8
mov r5, r4
mov r8, r6
add fp, r0, #0x1000
b _0231F86C
_0231F74C:
add r0, r1, r8, lsl #2
add r0, r0, #0x12000
ldr r7, [r0, #0xbc8 + OV29_0231F6E4_OFFSET]
mov r0, r7
bl EntityIsValid__0231FBFC
cmp r0, #0
beq _0231F868
cmp r6, #0x19
bge _0231F884
ldrsh sb, [r7, #4]
ldrsh r0, [sl, #4]
sub r0, sb, r0
bl abs
cmp r0, #2
bgt _0231F7A0
ldrsh r1, [r7, #6]
ldrsh r0, [sl, #6]
sub r0, r1, r0
bl abs
cmp r0, #2
ble _0231F868
_0231F7A0:
mov r0, sb
ldrsh r1, [r7, #6]
bl GetTile
ldrh r0, [r0]
tst r0, #3
beq _0231F868
mov r0, #3
str r0, [r5]
mov r0, #6
mul sb, r6, r0
add r0, fp, sb
str r0, [r5, #0xb4]
ldrh r1, [r7, #4]
mov r0, r5
strh r1, [r5, #4]
ldrh r1, [r7, #6]
strh r1, [r5, #6]
ldrsh r2, [r7, #4]
mov r1, #0x18
ldrsh r3, [r7, #6]
smulbb r1, r2, r1
mov r2, #0x18
smulbb r2, r3, r2
add r1, r1, #4
add r2, r2, #4
mov r1, r1, lsl #8
mov r2, r2, lsl #8
bl SetEntityPixelPosXY
mov r1, #0
strh r1, [r5, #0x26]
mov r1, #1
strb r1, [r5, #0x20]
mov r1, #0
strb r1, [r5, #0x22]
str r1, [r5, #0x1c]
ldr r1, _0231FBE4 ; =DUNGEON_PTR
add r0, r4, sb
ldr r2, [r1]
mov r1, #6
mla r1, r8, r1, r2
#ifdef JAPAN
add r1, r1, #0x3d00
ldrh r2, [r1, #0x9c]
#else
add r1, r1, #0x3e00
ldrh r2, [r1, #0x40]
#endif
add r0, r0, #0x1100
add r5, r5, #0xb8
strh r2, [r0, #0xf8]
#ifdef JAPAN
ldrh r2, [r1, #0x9e]
add r6, r6, #1
strh r2, [r0, #0xfa]
ldrh r1, [r1, #0xa0]
#else
ldrh r2, [r1, #0x42]
add r6, r6, #1
strh r2, [r0, #0xfa]
ldrh r1, [r1, #0x44]
#endif
strh r1, [r0, #0xfc]
_0231F868:
add r8, r8, #1
_0231F86C:
ldr r0, _0231FBE4 ; =DUNGEON_PTR
ldr r1, [r0]
add r0, r1, #0x3f00
ldrsh r0, [r0, #0xc0 + OV29_0231F6E4_OFFSET]
cmp r8, r0
blt _0231F74C
_0231F884:
cmp r6, #0
bne _0231F89C
ldr r1, _0231FBEC ; =0x00000BCF
mov r0, sl
bl LogMessageByIdWithPopupCheckUser
b _0231FBD4
_0231F89C:
mov r1, #0
mov sb, r1
add r0, sp, #0x18
_0231F8A8:
strb sb, [r0, r1]
add r1, r1, #1
cmp r1, #0x1e
blt _0231F8A8
b _0231F9A8
_0231F8BC:
ldrsh r1, [sl, #4]
ldrsh r0, [sl, #6]
mov r7, #0
ldr r5, _0231FBF0 ; =DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST
mov r8, r7
strh r1, [sp, #0x14]
strh r0, [sp, #0x16]
add fp, sp, #0x18
_0231F8DC:
cmp r8, #0x1e
bge _0231F978
mov r2, r8, lsl #2
ldrsh r0, [r5, r2]
cmp r0, #0x63
beq _0231F978
ldrb r1, [fp, r8]
cmp r1, #0
bne _0231F970
add r1, r5, r2
ldrsh r3, [sl, #4]
ldrsh r2, [sl, #6]
ldrsh r1, [r1, #2]
add r0, r3, r0
strh r0, [sp, #0x14]
add r0, r2, r1
strh r0, [sp, #0x16]
ldrsh r0, [sp, #0x14]
ldrsh r1, [sp, #0x16]
bl GetTile
ldrh r2, [r0]
and r1, r2, #3
cmp r1, #1
bne _0231F970
tst r2, #0x200
ldreq r0, [r0, #0x10]
cmpeq r0, #0
bne _0231F970
ldrh r2, [sp, #0x14]
add r0, r4, sb, lsl #2
add r0, r0, #0x1200
ldrh r1, [sp, #0x16]
strh r2, [r0, #0x8e]
mov r7, #1
strh r1, [r0, #0x90]
strb r7, [fp, r8]
b _0231F978
_0231F970:
add r8, r8, #1
b _0231F8DC
_0231F978:
cmp r7, #0
bne _0231F9A4
mov r0, #0xb8
mul r2, sb, r0
add r1, r4, sb, lsl #2
mov r3, #0
str r3, [r4, r2]
sub r2, r0, #0xb9
add r0, r1, #0x1200
strh r2, [r0, #0x8e]
strh r2, [r0, #0x90]
_0231F9A4:
add sb, sb, #1
_0231F9A8:
cmp sb, r6
blt _0231F8BC
mov fp, #0x18
mov sb, #0
mov r5, fp
mov r7, #0xb8
b _0231FA58
_0231F9C4:
mla r0, sb, r7, r4
bl EntityIsValid__0231FBFC
cmp r0, #0
beq _0231FA54
mov r0, #0xb8
mla r8, sb, r0, r4
mov r1, #1
add r0, r8, #4
bl RemoveGroundItem
ldrsh r0, [r8, #4]
ldrsh r1, [r8, #6]
bl DrawMinimapTile
add r0, r4, sb, lsl #2
add r0, r0, #0x1200
ldrsh r2, [r0, #0x8e]
ldr r0, [r8, #0xc]
mov r1, #0x3c
smulbb r2, r2, fp
add r2, r2, #4
rsb r0, r0, r2, lsl #8
bl _s32_div_f
add r1, r4, sb, lsl #3
add r1, r1, #0x1000
str r0, [r1, #0x2f4]
add r0, r4, sb, lsl #2
add r0, r0, #0x1200
ldrsh r0, [r0, #0x90]
ldr r2, [r8, #0x10]
mov r1, #0x3c
smulbb r0, r0, r5
add r0, r0, #4
rsb r0, r2, r0, lsl #8
bl _s32_div_f
add r1, r4, sb, lsl #3
add r1, r1, #0x1000
str r0, [r1, #0x2f8]
_0231FA54:
add sb, sb, #1
_0231FA58:
cmp sb, r6
blt _0231F9C4
ldr r1, _0231FBF4 ; =0x00000222
mov r0, sl
bl PlaySeByIdIfShouldDisplayEntity
ldr r0, _0231FBE4 ; =DUNGEON_PTR
mov r7, #0
ldr r0, [r0]
mov r8, r7
add r0, r0, #0x1a000
ldrb r0, [r0, #0x245 + OV29_0231F6E4_OFFSET]
mov r5, r7
str r0, [sp, #8]
_0231FA8C:
and r0, r7, #0xff
mov sb, #0
str r0, [sp, #0x10]
b _0231FB0C
_0231FA9C:
mov r0, #0xb8
mul fp, sb, r0
add r0, r4, fp
bl EntityIsValid__0231FBFC
cmp r0, #0
beq _0231FB08
mov r0, #0xb8
mla r0, sb, r0, r4
add r1, r4, sb, lsl #3
add r2, r1, #0x1000
ldr r1, [r2, #0x2f4]
ldr r2, [r2, #0x2f8]
str r0, [sp, #4]
bl IncrementEntityPixelPosXY
mov r0, r8
bl SinAbs4096
mov r1, #0xc
mul r1, r0, r1
ldr r0, [sp, #4]
ldr r3, [sp, #0x10]
str r1, [r0, #0x1c]
mov r1, #0
str r1, [sp]
ldr r1, [sp, #8]
add r0, r4, fp
mov r2, #0
bl ov29_023457C8
_0231FB08:
add sb, sb, #1
_0231FB0C:
cmp sb, r6
blt _0231FA9C
mov r0, #0x13
bl AdvanceFrame
tst r5, #3
addeq r7, r7, #1
add r5, r5, #1
add r8, r8, #0x22
cmp r5, #0x3c
and r7, r7, #7
blt _0231FA8C
add r0, r4, #0x8e
mov fp, #1
mov sb, #0
add r8, r0, #0x1200
mov r7, fp
mov r5, #0xb8
b _0231FB9C
_0231FB54:
add r0, r4, sb, lsl #2
add r0, r0, #0x1200
ldrsh r0, [r0, #0x8e]
cmp r0, #0
blt _0231FB98
mla r0, sb, r5, r4
bl GetItemInfo
mov r1, r0
mov r2, fp
add r0, r8, sb, lsl #2
bl SpawnItem
add r0, r4, sb, lsl #2
add r1, r0, #0x1200
ldrsh r0, [r1, #0x8e]
ldrsh r1, [r1, #0x90]
bl DrawMinimapTile
str r7, [sp, #0xc]
_0231FB98:
add sb, sb, #1
_0231FB9C:
cmp sb, r6
blt _0231FB54
ldr r0, [sp, #0xc]
cmp r0, #0
beq _0231FBC0
#ifdef JAPAN
mov r0, sl
mov r1, #0x910
#else
ldr r1, _0231FBF8 ; =0x00000BD1
mov r0, sl
#endif
bl LogMessageByIdWithPopupCheckUser
b _0231FBCC
_0231FBC0:
ldr r1, _0231FBEC ; =0x00000BCF
mov r0, sl
bl LogMessageByIdWithPopupCheckUser
_0231FBCC:
mov r0, #1
bl ov29_022F62CC
_0231FBD4:
mov r0, r4
bl MemFree
_0231FBDC:
add sp, sp, #0x38
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_0231FBE4: .word DUNGEON_PTR
#ifdef JAPAN
_02321094: .word 0x0000090F
_0231FBE8: .word 0x000013BC
_0231FBEC: .word 0x0000090E
#else
_0231FBE8: .word 0x000013BC
_0231FBEC: .word 0x00000BCF
#endif
_0231FBF0: .word DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST
_0231FBF4: .word 0x00000222
#ifndef JAPAN
_0231FBF8: .word 0x00000BD1
#endif
arm_func_end TryTrawl