mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-22 16:54:36 -05:00
code_8045A00 decompiled
This commit is contained in:
@@ -1,705 +0,0 @@
|
||||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
|
||||
thumb_func_start sub_8046734
|
||||
sub_8046734:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x18
|
||||
mov r8, r0
|
||||
ldr r0, _08046858
|
||||
ldr r0, [r0]
|
||||
ldr r2, _0804685C
|
||||
adds r0, r2
|
||||
ldrb r0, [r0]
|
||||
str r0, [sp, 0xC]
|
||||
movs r0, 0
|
||||
ldrsh r2, [r1, r0]
|
||||
lsls r0, r2, 1
|
||||
adds r0, r2
|
||||
lsls r0, 3
|
||||
adds r0, 0x4
|
||||
lsls r4, r0, 8
|
||||
movs r2, 0x2
|
||||
ldrsh r1, [r1, r2]
|
||||
lsls r0, r1, 1
|
||||
adds r0, r1
|
||||
lsls r0, 3
|
||||
adds r0, 0x4
|
||||
lsls r5, r0, 8
|
||||
mov r1, r8
|
||||
ldr r0, [r1, 0xC]
|
||||
subs r0, r4
|
||||
cmp r0, 0
|
||||
bge _08046776
|
||||
negs r0, r0
|
||||
_08046776:
|
||||
mov r2, r8
|
||||
ldr r2, [r2, 0x10]
|
||||
mov r9, r2
|
||||
cmp r0, 0xB
|
||||
bgt _0804678C
|
||||
subs r0, r2, r5
|
||||
cmp r0, 0
|
||||
bge _08046788
|
||||
negs r0, r0
|
||||
_08046788:
|
||||
cmp r0, 0xB
|
||||
ble _08046822
|
||||
_0804678C:
|
||||
movs r0, 0
|
||||
mov r10, r0
|
||||
movs r1, 0
|
||||
str r1, [sp, 0x10]
|
||||
mov r2, r8
|
||||
ldr r0, [r2, 0xC]
|
||||
str r0, [sp, 0x4]
|
||||
mov r1, r9
|
||||
str r1, [sp, 0x8]
|
||||
subs r0, r4, r0
|
||||
movs r1, 0x18
|
||||
bl __divsi3
|
||||
adds r6, r0, 0
|
||||
mov r2, r9
|
||||
subs r0, r5, r2
|
||||
movs r1, 0x18
|
||||
bl __divsi3
|
||||
adds r7, r0, 0
|
||||
movs r0, 0
|
||||
mov r9, r0
|
||||
mov r1, sp
|
||||
adds r1, 0x4
|
||||
str r1, [sp, 0x14]
|
||||
_080467BE:
|
||||
ldr r0, [sp, 0x4]
|
||||
adds r0, r6
|
||||
str r0, [sp, 0x4]
|
||||
ldr r2, [sp, 0x14]
|
||||
ldr r0, [r2, 0x4]
|
||||
adds r0, r7
|
||||
str r0, [r2, 0x4]
|
||||
ldr r0, [sp, 0x10]
|
||||
bl sin_4096
|
||||
lsls r1, r0, 1
|
||||
adds r1, r0
|
||||
lsls r1, 2
|
||||
mov r0, r8
|
||||
str r1, [r0, 0x1C]
|
||||
add r1, sp, 0x4
|
||||
bl sub_804535C
|
||||
mov r1, r10
|
||||
lsls r3, r1, 24
|
||||
lsrs r3, 24
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
mov r0, r8
|
||||
ldr r1, [sp, 0xC]
|
||||
movs r2, 0
|
||||
bl sub_80462AC
|
||||
movs r0, 0x13
|
||||
bl DungeonRunFrameActions
|
||||
ldr r2, [sp, 0x10]
|
||||
adds r2, 0x55
|
||||
str r2, [sp, 0x10]
|
||||
movs r0, 0x3
|
||||
mov r1, r9
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _08046810
|
||||
movs r2, 0x1
|
||||
add r10, r2
|
||||
_08046810:
|
||||
movs r0, 0x7
|
||||
mov r1, r10
|
||||
ands r1, r0
|
||||
mov r10, r1
|
||||
movs r2, 0x1
|
||||
add r9, r2
|
||||
mov r0, r9
|
||||
cmp r0, 0x17
|
||||
ble _080467BE
|
||||
_08046822:
|
||||
mov r0, r8
|
||||
adds r1, r4, 0
|
||||
adds r2, r5, 0
|
||||
bl SetEntityPixelPos
|
||||
movs r0, 0
|
||||
mov r1, r8
|
||||
str r0, [r1, 0x1C]
|
||||
str r0, [sp]
|
||||
mov r0, r8
|
||||
ldr r1, [sp, 0xC]
|
||||
movs r2, 0x1
|
||||
movs r3, 0xFF
|
||||
bl sub_80462AC
|
||||
movs r0, 0x13
|
||||
bl DungeonRunFrameActions
|
||||
add sp, 0x18
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08046858: .4byte gDungeon
|
||||
_0804685C: .4byte 0x00018210
|
||||
thumb_func_end sub_8046734
|
||||
|
||||
thumb_func_start sub_8046860
|
||||
sub_8046860:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x4
|
||||
adds r4, r1, 0
|
||||
adds r5, r2, 0
|
||||
str r3, [sp]
|
||||
adds r2, r4, 0
|
||||
adds r3, r5, 0
|
||||
bl sub_804687C
|
||||
add sp, 0x4
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8046860
|
||||
|
||||
thumb_func_start sub_804687C
|
||||
sub_804687C:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
ldr r4, _08046970
|
||||
add sp, r4
|
||||
ldr r5, _08046974
|
||||
add r5, sp
|
||||
str r0, [r5]
|
||||
movs r0, 0xA5
|
||||
lsls r0, 3
|
||||
add r0, sp
|
||||
str r1, [r0]
|
||||
mov r8, r2
|
||||
ldr r1, _08046978
|
||||
add r1, sp
|
||||
str r3, [r1]
|
||||
movs r1, 0
|
||||
movs r7, 0x1D
|
||||
ldr r0, _0804697C
|
||||
add r0, sp
|
||||
_080468A8:
|
||||
strb r1, [r0]
|
||||
subs r0, 0x1
|
||||
subs r7, 0x1
|
||||
cmp r7, 0
|
||||
bge _080468A8
|
||||
movs r7, 0
|
||||
movs r2, 0xAD
|
||||
lsls r2, 3
|
||||
add r2, sp
|
||||
ldr r2, [r2]
|
||||
cmp r7, r2
|
||||
blt _080468C2
|
||||
b _080469DE
|
||||
_080468C2:
|
||||
ldr r3, _08046980
|
||||
mov r9, r3
|
||||
ldr r5, _08046984
|
||||
movs r0, 0
|
||||
ldrsh r5, [r5, r0]
|
||||
ldr r0, _08046988
|
||||
add r0, sp
|
||||
str r5, [r0]
|
||||
_080468D2:
|
||||
mov r1, r8
|
||||
ldrh r0, [r1]
|
||||
ldr r1, _0804698C
|
||||
ands r4, r1
|
||||
orrs r4, r0
|
||||
mov r2, r8
|
||||
ldrh r0, [r2, 0x2]
|
||||
lsls r0, 16
|
||||
mov r3, r9
|
||||
ands r4, r3
|
||||
orrs r4, r0
|
||||
movs r5, 0
|
||||
adds r0, r7, 0x1
|
||||
mov r10, r0
|
||||
ldr r1, _08046984
|
||||
ldr r2, _08046988
|
||||
add r2, sp
|
||||
ldr r2, [r2]
|
||||
cmp r2, 0x63
|
||||
beq _080469B0
|
||||
ldr r3, _08046990
|
||||
add r3, sp
|
||||
ldr r0, _08046994
|
||||
add r0, sp
|
||||
str r3, [r0]
|
||||
_08046904:
|
||||
ldr r0, _08046998
|
||||
add r0, sp
|
||||
adds r6, r0, r5
|
||||
ldrb r0, [r6]
|
||||
cmp r0, 0
|
||||
bne _0804699C
|
||||
lsls r2, r5, 2
|
||||
adds r2, r1
|
||||
ldrh r0, [r2]
|
||||
mov r1, r8
|
||||
ldrh r1, [r1]
|
||||
adds r0, r1
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
ldr r1, _0804698C
|
||||
ands r4, r1
|
||||
orrs r4, r0
|
||||
ldrh r0, [r2, 0x2]
|
||||
mov r2, r8
|
||||
ldrh r2, [r2, 0x2]
|
||||
adds r0, r2
|
||||
lsls r0, 16
|
||||
mov r3, r9
|
||||
ands r4, r3
|
||||
orrs r4, r0
|
||||
lsls r0, r4, 16
|
||||
asrs r0, 16
|
||||
asrs r1, r4, 16
|
||||
bl GetTile
|
||||
adds r2, r0, 0
|
||||
ldrh r1, [r2]
|
||||
movs r0, 0x3
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0804699C
|
||||
movs r3, 0x80
|
||||
lsls r3, 2
|
||||
adds r0, r3, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _0804699C
|
||||
ldr r0, [r2, 0x14]
|
||||
cmp r0, 0
|
||||
bne _0804699C
|
||||
lsls r0, r7, 2
|
||||
ldr r5, _08046994
|
||||
add r5, sp
|
||||
ldr r5, [r5]
|
||||
adds r0, r5, r0
|
||||
str r4, [r0]
|
||||
movs r0, 0x1
|
||||
strb r0, [r6]
|
||||
b _080469CE
|
||||
.align 2, 0
|
||||
_08046970: .4byte 0xfffffab8
|
||||
_08046974: .4byte 0x00000524
|
||||
_08046978: .4byte 0x0000052c
|
||||
_0804697C: .4byte 0x00000521
|
||||
_08046980: .4byte 0x0000ffff
|
||||
_08046984: .4byte gUnknown_80F4468
|
||||
_08046988: .4byte 0x00000534
|
||||
_0804698C: .4byte 0xffff0000
|
||||
_08046990: .4byte 0x0000048c
|
||||
_08046994: .4byte 0x00000544
|
||||
_08046998: .4byte 0x00000504
|
||||
_0804699C:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x1D
|
||||
bgt _080469B0
|
||||
lsls r0, r5, 2
|
||||
ldr r1, _08046A18
|
||||
adds r0, r1
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r0, 0x63
|
||||
bne _08046904
|
||||
_080469B0:
|
||||
movs r3, 0
|
||||
cmp r3, 0
|
||||
bne _080469CE
|
||||
ldr r1, _08046A1C
|
||||
add r1, sp
|
||||
lsls r0, r7, 2
|
||||
adds r1, r0
|
||||
ldrh r2, [r1]
|
||||
mov r0, r9
|
||||
orrs r0, r2
|
||||
strh r0, [r1]
|
||||
ldrh r2, [r1, 0x2]
|
||||
mov r0, r9
|
||||
orrs r0, r2
|
||||
strh r0, [r1, 0x2]
|
||||
_080469CE:
|
||||
mov r7, r10
|
||||
movs r5, 0xAD
|
||||
lsls r5, 3
|
||||
add r5, sp
|
||||
ldr r5, [r5]
|
||||
cmp r7, r5
|
||||
bge _080469DE
|
||||
b _080468D2
|
||||
_080469DE:
|
||||
movs r1, 0
|
||||
mov r9, r1
|
||||
movs r7, 0
|
||||
movs r0, 0xAD
|
||||
lsls r0, 3
|
||||
add r0, sp
|
||||
ldr r0, [r0]
|
||||
cmp r7, r0
|
||||
blt _080469F2
|
||||
b _08046B0A
|
||||
_080469F2:
|
||||
movs r2, 0
|
||||
mov r8, r2
|
||||
_080469F6:
|
||||
ldr r0, _08046A1C
|
||||
add r0, sp
|
||||
lsls r2, r7, 2
|
||||
adds r3, r0, r2
|
||||
movs r4, 0
|
||||
ldrsh r0, [r3, r4]
|
||||
cmp r0, 0
|
||||
bge _08046A20
|
||||
movs r0, 0x74
|
||||
muls r0, r7
|
||||
add r0, sp
|
||||
adds r0, 0x4
|
||||
mov r5, r8
|
||||
str r5, [r0]
|
||||
movs r0, 0x1
|
||||
mov r9, r0
|
||||
b _08046AFA
|
||||
.align 2, 0
|
||||
_08046A18: .4byte gUnknown_80F4468
|
||||
_08046A1C: .4byte 0x0000048c
|
||||
_08046A20:
|
||||
movs r0, 0x74
|
||||
adds r6, r7, 0
|
||||
muls r6, r0
|
||||
mov r4, sp
|
||||
adds r4, r6
|
||||
adds r4, 0x4
|
||||
movs r0, 0x3
|
||||
str r0, [r4]
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x24
|
||||
mov r1, r8
|
||||
strb r1, [r0]
|
||||
adds r1, r4, 0
|
||||
adds r1, 0x20
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x22
|
||||
mov r5, r8
|
||||
strb r5, [r0]
|
||||
add r0, sp, 0x74
|
||||
adds r0, r6
|
||||
ldr r1, _08046B2C
|
||||
add r1, sp
|
||||
ldr r1, [r1]
|
||||
adds r2, r1, r2
|
||||
str r2, [r0]
|
||||
add r0, sp, 0x8
|
||||
adds r0, r6
|
||||
ldr r1, [r3]
|
||||
str r1, [r0]
|
||||
movs r2, 0xA5
|
||||
lsls r2, 3
|
||||
add r2, sp
|
||||
ldr r2, [r2]
|
||||
movs r5, 0
|
||||
ldrsh r0, [r2, r5]
|
||||
lsls r1, r0, 1
|
||||
adds r1, r0
|
||||
lsls r1, 3
|
||||
adds r1, 0x4
|
||||
lsls r1, 8
|
||||
movs r5, 0x2
|
||||
ldrsh r0, [r2, r5]
|
||||
lsls r2, r0, 1
|
||||
adds r2, r0
|
||||
lsls r2, 3
|
||||
adds r2, 0x4
|
||||
lsls r2, 8
|
||||
adds r0, r4, 0
|
||||
movs r5, 0xA8
|
||||
lsls r5, 3
|
||||
add r5, sp
|
||||
str r3, [r5]
|
||||
bl SetEntityPixelPos
|
||||
mov r0, r8
|
||||
strh r0, [r4, 0x26]
|
||||
ldr r4, _08046B30
|
||||
add r4, sp
|
||||
lsls r5, r7, 3
|
||||
adds r4, r5
|
||||
movs r1, 0xA8
|
||||
lsls r1, 3
|
||||
add r1, sp
|
||||
ldr r3, [r1]
|
||||
movs r2, 0
|
||||
ldrsh r1, [r3, r2]
|
||||
lsls r0, r1, 1
|
||||
adds r0, r1
|
||||
lsls r0, 3
|
||||
adds r0, 0x4
|
||||
lsls r0, 8
|
||||
add r1, sp, 0x10
|
||||
adds r1, r6
|
||||
ldr r1, [r1]
|
||||
subs r0, r1
|
||||
movs r1, 0x18
|
||||
movs r2, 0xA8
|
||||
lsls r2, 3
|
||||
add r2, sp
|
||||
str r3, [r2]
|
||||
bl __divsi3
|
||||
str r0, [r4]
|
||||
movs r4, 0x97
|
||||
lsls r4, 3
|
||||
add r4, sp
|
||||
adds r4, r5
|
||||
movs r5, 0xA8
|
||||
lsls r5, 3
|
||||
add r5, sp
|
||||
ldr r3, [r5]
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r3, r0]
|
||||
lsls r0, r1, 1
|
||||
adds r0, r1
|
||||
lsls r0, 3
|
||||
adds r0, 0x4
|
||||
lsls r0, 8
|
||||
add r1, sp, 0x14
|
||||
adds r1, r6
|
||||
ldr r1, [r1]
|
||||
subs r0, r1
|
||||
movs r1, 0x18
|
||||
bl __divsi3
|
||||
str r0, [r4]
|
||||
movs r1, 0x1
|
||||
_08046AFA:
|
||||
adds r7, 0x1
|
||||
movs r2, 0xAD
|
||||
lsls r2, 3
|
||||
add r2, sp
|
||||
ldr r2, [r2]
|
||||
cmp r7, r2
|
||||
bge _08046B0A
|
||||
b _080469F6
|
||||
_08046B0A:
|
||||
cmp r1, 0
|
||||
bne _08046B54
|
||||
movs r3, 0xAD
|
||||
lsls r3, 3
|
||||
add r3, sp
|
||||
ldr r3, [r3]
|
||||
cmp r3, 0x1
|
||||
ble _08046B3C
|
||||
ldr r0, _08046B34
|
||||
ldr r1, [r0]
|
||||
ldr r4, _08046B38
|
||||
add r4, sp
|
||||
ldr r0, [r4]
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
b _08046C7C
|
||||
.align 2, 0
|
||||
_08046B2C: .4byte 0x0000052c
|
||||
_08046B30: .4byte 0x000004b4
|
||||
_08046B34: .4byte gAllItemsLost
|
||||
_08046B38: .4byte 0x00000524
|
||||
_08046B3C:
|
||||
ldr r0, _08046B4C
|
||||
ldr r1, [r0]
|
||||
ldr r5, _08046B50
|
||||
add r5, sp
|
||||
ldr r0, [r5]
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
b _08046C7C
|
||||
.align 2, 0
|
||||
_08046B4C: .4byte gItemLost
|
||||
_08046B50: .4byte 0x00000524
|
||||
_08046B54:
|
||||
mov r0, r9
|
||||
cmp r0, 0
|
||||
beq _08046B68
|
||||
ldr r0, _08046C90
|
||||
ldr r1, [r0]
|
||||
ldr r2, _08046C94
|
||||
add r2, sp
|
||||
ldr r0, [r2]
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
_08046B68:
|
||||
movs r3, 0
|
||||
mov r9, r3
|
||||
ldr r0, _08046C98
|
||||
ldr r0, [r0]
|
||||
ldr r4, _08046C9C
|
||||
adds r0, r4
|
||||
ldrb r0, [r0]
|
||||
movs r5, 0xA6
|
||||
lsls r5, 3
|
||||
add r5, sp
|
||||
str r0, [r5]
|
||||
mov r10, r3
|
||||
movs r6, 0
|
||||
_08046B82:
|
||||
movs r7, 0
|
||||
mov r0, r10
|
||||
adds r0, 0x55
|
||||
movs r1, 0xA7
|
||||
lsls r1, 3
|
||||
add r1, sp
|
||||
str r0, [r1]
|
||||
adds r2, r6, 0x1
|
||||
ldr r3, _08046CA0
|
||||
add r3, sp
|
||||
str r2, [r3]
|
||||
movs r4, 0xAD
|
||||
lsls r4, 3
|
||||
add r4, sp
|
||||
ldr r4, [r4]
|
||||
cmp r7, r4
|
||||
bge _08046C14
|
||||
mov r5, r9
|
||||
lsls r5, 24
|
||||
mov r8, r5
|
||||
_08046BAA:
|
||||
movs r0, 0x74
|
||||
adds r5, r7, 0
|
||||
muls r5, r0
|
||||
mov r4, sp
|
||||
adds r4, r5
|
||||
adds r4, 0x4
|
||||
adds r0, r4, 0
|
||||
bl EntityIsValid
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08046C06
|
||||
ldr r0, _08046CA4
|
||||
add r0, sp
|
||||
lsls r2, r7, 3
|
||||
adds r0, r2
|
||||
ldr r1, [r0]
|
||||
movs r0, 0x97
|
||||
lsls r0, 3
|
||||
add r0, sp
|
||||
adds r0, r2
|
||||
ldr r2, [r0]
|
||||
adds r0, r4, 0
|
||||
bl IncreaseEntityPixelPos
|
||||
mov r0, r10
|
||||
bl sin_4096
|
||||
add r2, sp, 0x20
|
||||
adds r2, r5
|
||||
lsls r1, r0, 1
|
||||
adds r1, r0
|
||||
lsls r1, 2
|
||||
str r1, [r2]
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
adds r0, r4, 0
|
||||
movs r2, 0xA6
|
||||
lsls r2, 3
|
||||
add r2, sp
|
||||
ldr r1, [r2]
|
||||
movs r2, 0x1
|
||||
mov r4, r8
|
||||
lsrs r3, r4, 24
|
||||
bl sub_80462AC
|
||||
_08046C06:
|
||||
adds r7, 0x1
|
||||
movs r5, 0xAD
|
||||
lsls r5, 3
|
||||
add r5, sp
|
||||
ldr r5, [r5]
|
||||
cmp r7, r5
|
||||
blt _08046BAA
|
||||
_08046C14:
|
||||
movs r0, 0x13
|
||||
bl DungeonRunFrameActions
|
||||
movs r0, 0xA7
|
||||
lsls r0, 3
|
||||
add r0, sp
|
||||
ldr r0, [r0]
|
||||
mov r10, r0
|
||||
movs r0, 0x3
|
||||
ands r0, r6
|
||||
cmp r0, 0
|
||||
bne _08046C30
|
||||
movs r1, 0x1
|
||||
add r9, r1
|
||||
_08046C30:
|
||||
movs r0, 0x7
|
||||
mov r2, r9
|
||||
ands r2, r0
|
||||
mov r9, r2
|
||||
ldr r3, _08046CA0
|
||||
add r3, sp
|
||||
ldr r6, [r3]
|
||||
cmp r6, 0x17
|
||||
ble _08046B82
|
||||
movs r4, 0xAD
|
||||
lsls r4, 3
|
||||
add r4, sp
|
||||
ldr r4, [r4]
|
||||
cmp r4, 0
|
||||
ble _08046C7C
|
||||
ldr r0, _08046CA8
|
||||
add r0, sp
|
||||
ldr r5, [r0]
|
||||
ldr r4, _08046CAC
|
||||
add r4, sp
|
||||
movs r1, 0xAD
|
||||
lsls r1, 3
|
||||
add r1, sp
|
||||
ldr r7, [r1]
|
||||
_08046C60:
|
||||
movs r2, 0
|
||||
ldrsh r0, [r4, r2]
|
||||
cmp r0, 0
|
||||
blt _08046C72
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
movs r2, 0x1
|
||||
bl sub_80460F8
|
||||
_08046C72:
|
||||
adds r5, 0x4
|
||||
adds r4, 0x4
|
||||
subs r7, 0x1
|
||||
cmp r7, 0
|
||||
bne _08046C60
|
||||
_08046C7C:
|
||||
movs r3, 0xA9
|
||||
lsls r3, 3
|
||||
add sp, r3
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08046C90: .4byte gSeveralItemsLost
|
||||
_08046C94: .4byte 0x00000524
|
||||
_08046C98: .4byte gDungeon
|
||||
_08046C9C: .4byte 0x00018210
|
||||
_08046CA0: .4byte 0x0000053c
|
||||
_08046CA4: .4byte 0x000004b4
|
||||
_08046CA8: .4byte 0x0000052c
|
||||
_08046CAC: .4byte 0x0000048c
|
||||
thumb_func_end sub_804687C
|
||||
|
||||
.align 2, 0
|
||||
@@ -210,7 +210,6 @@ SECTIONS {
|
||||
src/code_80450F8.o(.text);
|
||||
src/dungeon_visibility.o(.text);
|
||||
src/code_8045A00.o(.text);
|
||||
asm/code_8045A00.o(.text);
|
||||
src/dungeon_items.o(.text);
|
||||
asm/code_8046CE4.o(.text);
|
||||
src/code_8048480.o(.text);
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
#include "structs/map.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "trap.h"
|
||||
#include "math.h"
|
||||
#include "code_80450F8.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "structs/str_item_text.h"
|
||||
|
||||
extern u8 *gUnknown_80FE6F4[];
|
||||
@@ -605,4 +607,174 @@ void sub_804652C(Entity *entity1, Entity *entity2, Item *item, bool8 a3, Dungeon
|
||||
}
|
||||
}
|
||||
|
||||
extern void DungeonRunFrameActions(u32);
|
||||
|
||||
void sub_8046734(Entity *entity, DungeonPos *pos)
|
||||
{
|
||||
PixelPos posPixel;
|
||||
PixelPos calcPixelPos;
|
||||
bool8 hallucinating = gDungeon->unk181e8.hallucinating;
|
||||
|
||||
posPixel.x = ((pos->x * 24) + 4) << 8;
|
||||
posPixel.y = ((pos->y * 24) + 4) << 8;
|
||||
if (abs(entity->pixelPos.x - posPixel.x) > 11 || abs(entity->pixelPos.y - posPixel.y) > 11) {
|
||||
s32 i;
|
||||
PixelPos add;
|
||||
s32 unk = 0; // Direction?
|
||||
s32 sinVal = 0;
|
||||
|
||||
calcPixelPos.x = entity->pixelPos.x;
|
||||
calcPixelPos.y = entity->pixelPos.y;
|
||||
|
||||
add.x = (posPixel.x - calcPixelPos.x) / 24;
|
||||
add.y = (posPixel.y - calcPixelPos.y) / 24;
|
||||
for (i = 0; i < 24; i++) {
|
||||
calcPixelPos.x += add.x;
|
||||
calcPixelPos.y += add.y;
|
||||
entity->unk1C.raw = sin_4096(sinVal) * 12;
|
||||
sub_804535C(entity, &calcPixelPos);
|
||||
sub_80462AC(entity, hallucinating, 0, unk, 0);
|
||||
DungeonRunFrameActions(0x13);
|
||||
sinVal += 85;
|
||||
if ((i & 3) == 0) {
|
||||
unk++;
|
||||
}
|
||||
unk &= 7;
|
||||
}
|
||||
}
|
||||
|
||||
SetEntityPixelPos(entity, posPixel.x, posPixel.y);
|
||||
entity->unk1C.raw = 0;
|
||||
sub_80462AC(entity, hallucinating, 1, 0xFF, 0);
|
||||
DungeonRunFrameActions(0x13);
|
||||
}
|
||||
|
||||
extern void sub_804687C(Entity *entity, DungeonPos *pos1, DungeonPos *pos2, Item *item, s32 a4);
|
||||
|
||||
void sub_8046860(Entity *entity, DungeonPos *pos, Item *item, s32 a4)
|
||||
{
|
||||
sub_804687C(entity, pos, pos, item, a4);
|
||||
}
|
||||
|
||||
extern const u8 *gSeveralItemsLost;
|
||||
extern const u8 *gItemLost;
|
||||
extern const u8 *gAllItemsLost;
|
||||
|
||||
void sub_804687C(Entity *entity, DungeonPos *pos1, DungeonPos *pos2, Item *item, s32 count)
|
||||
{
|
||||
Entity itemEntities[10];
|
||||
DungeonPos targetTilePos[10];
|
||||
PixelPos itemVelocity[10];
|
||||
u8 targetTileUsed[30];
|
||||
s32 sinVal;
|
||||
s32 i;
|
||||
bool8 r1, r9;
|
||||
|
||||
for (i = 0; i < 30; i++) {
|
||||
targetTileUsed[i] = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
s32 j;
|
||||
bool8 foundTile = FALSE;
|
||||
DungeonPos pos;
|
||||
|
||||
pos.x = pos2->x;
|
||||
pos.y = pos2->y;
|
||||
|
||||
for (j = 0; j < 30; j++) {
|
||||
if (gUnknown_80F4468[j].x == 99)
|
||||
break;
|
||||
if (!targetTileUsed[j]) {
|
||||
const Tile *tile;
|
||||
|
||||
pos.x = pos2->x + gUnknown_80F4468[j].x;
|
||||
pos.y = pos2->y + gUnknown_80F4468[j].y;
|
||||
|
||||
tile = GetTile(pos.x, pos.y);
|
||||
if (GetTerrainType(tile) != TERRAIN_TYPE_WALL && !(tile->terrainType & TERRAIN_TYPE_STAIRS) && tile->object == NULL) {
|
||||
targetTilePos[i] = pos;
|
||||
targetTileUsed[j] = TRUE;
|
||||
foundTile = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundTile) {
|
||||
targetTilePos[i].x = -1;
|
||||
targetTilePos[i].y = -1;
|
||||
}
|
||||
}
|
||||
|
||||
r1 = FALSE;
|
||||
r9 = FALSE;
|
||||
for (i = 0; i < count; i++) {
|
||||
if (targetTilePos[i].x < 0) {
|
||||
itemEntities[i].type = ENTITY_NOTHING;
|
||||
r9 = TRUE;
|
||||
}
|
||||
else {
|
||||
s32 x, y;
|
||||
|
||||
itemEntities[i].type = ENTITY_ITEM;
|
||||
itemEntities[i].unk24 = 0;
|
||||
itemEntities[i].isVisible = TRUE;
|
||||
itemEntities[i].unk22 = 0;
|
||||
itemEntities[i].axObj.info.item = &item[i];
|
||||
itemEntities[i].pos = targetTilePos[i];
|
||||
x = ((pos1->x * 24) + 4) << 8;
|
||||
y = ((pos1->y * 24) + 4) << 8;
|
||||
SetEntityPixelPos(&itemEntities[i], x, y);
|
||||
itemEntities[i].spawnGenID = 0;
|
||||
itemVelocity[i].x = ((((targetTilePos[i].x * 24) + 4) << 8) - (itemEntities[i].pixelPos.x)) / 24;
|
||||
itemVelocity[i].y = ((((targetTilePos[i].y * 24) + 4) << 8) - (itemEntities[i].pixelPos.y)) / 24;
|
||||
r1 = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (!r1) {
|
||||
if (count > 1) {
|
||||
LogMessageByIdWithPopupCheckUser(entity, gAllItemsLost);
|
||||
}
|
||||
else {
|
||||
LogMessageByIdWithPopupCheckUser(entity, gItemLost);
|
||||
}
|
||||
}
|
||||
else {
|
||||
s32 counter;
|
||||
s32 dirMaybe;
|
||||
bool8 hallucinating;
|
||||
|
||||
if (r9) {
|
||||
LogMessageByIdWithPopupCheckUser(entity, gSeveralItemsLost);
|
||||
}
|
||||
|
||||
dirMaybe = 0;
|
||||
hallucinating = gDungeon->unk181e8.hallucinating;
|
||||
sinVal = 0;
|
||||
for (counter = 0; counter < 24; counter++) {
|
||||
for (i = 0; i < count; i++) {
|
||||
if (EntityIsValid(&itemEntities[i])) {
|
||||
IncreaseEntityPixelPos(&itemEntities[i], itemVelocity[i].x, itemVelocity[i].y);
|
||||
itemEntities[i].unk1C.raw = sin_4096(sinVal) * 12;
|
||||
sub_80462AC(&itemEntities[i], hallucinating, 1, dirMaybe, 0);
|
||||
}
|
||||
}
|
||||
DungeonRunFrameActions(0x13);
|
||||
sinVal += 85;
|
||||
if ((counter & 3) == 0) {
|
||||
dirMaybe++;
|
||||
}
|
||||
dirMaybe &= 7;
|
||||
}
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
if (targetTilePos[i].x >= 0) {
|
||||
sub_80460F8(&targetTilePos[i], &item[i], TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -292,15 +292,11 @@ void sub_8047104(void)
|
||||
if(item->id == ITEM_POKE)
|
||||
{
|
||||
AddToTeamMoney(GetMoneyValue(item));
|
||||
item->id = 0;
|
||||
item->quantity = 0;
|
||||
item->flags = 0;
|
||||
ZeroOutItem(item);
|
||||
}
|
||||
if(item->flags & ITEM_FLAG_IN_SHOP)
|
||||
{
|
||||
item->id = 0;
|
||||
item->quantity = 0;
|
||||
item->flags = 0;
|
||||
ZeroOutItem(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user