mirror of
https://github.com/zeldaret/tmc
synced 2026-05-28 08:25:51 -04:00
Improve LayerStruct
This commit is contained in:
@@ -24,7 +24,7 @@ _08019694: .4byte gMenu
|
||||
thumb_func_start sub_08019698
|
||||
sub_08019698: @ 0x08019698
|
||||
push {r4, r5, lr}
|
||||
ldr r0, _08019724 @ =gUnk_02032EC0
|
||||
ldr r0, _08019724 @ =gUI
|
||||
ldrb r1, [r0, #3]
|
||||
lsls r0, r1, #3
|
||||
subs r0, r0, r1
|
||||
@@ -86,7 +86,7 @@ _08019700:
|
||||
strb r0, [r1]
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_08019724: .4byte gUnk_02032EC0
|
||||
_08019724: .4byte gUI
|
||||
_08019728: .4byte gUnk_080B4410
|
||||
_0801972C: .4byte gRoomControls
|
||||
_08019730: .4byte gUpdateVisibleTiles
|
||||
@@ -3232,7 +3232,7 @@ _0801AEB6:
|
||||
ldr r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _0801AED0
|
||||
ldr r0, _0801AF00 @ =gUnk_02019EE0
|
||||
ldr r0, _0801AF00 @ =gMapDataBottomSpecial
|
||||
bl sub_0801AB08
|
||||
_0801AED0:
|
||||
ldr r1, _0801AF04 @ =gMapTop
|
||||
@@ -3251,7 +3251,7 @@ _0801AEF0: .4byte gUnk_03004030
|
||||
_0801AEF4: .4byte 0x0000088C
|
||||
_0801AEF8: .4byte 0x00000888
|
||||
_0801AEFC: .4byte gMapBottom
|
||||
_0801AF00: .4byte gUnk_02019EE0
|
||||
_0801AF00: .4byte gMapDataBottomSpecial
|
||||
_0801AF04: .4byte gMapTop
|
||||
_0801AF08: .4byte gMapDataTopSpecial
|
||||
_0801AF0C:
|
||||
|
||||
@@ -26,7 +26,7 @@ sub_0804AB70: @ 0x0804AB70
|
||||
ldrb r5, [r0, #0x17]
|
||||
cmp r5, #2
|
||||
bne _0804ABA4
|
||||
ldr r0, _0804AC08 @ =gUnk_02032EC0
|
||||
ldr r0, _0804AC08 @ =gUI
|
||||
adds r0, #0x20
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #2
|
||||
@@ -72,7 +72,7 @@ _0804ABF8: .4byte gScreen
|
||||
_0804ABFC: .4byte 0x00009E83
|
||||
_0804AC00: .4byte gRoomControls
|
||||
_0804AC04: .4byte gArea
|
||||
_0804AC08: .4byte gUnk_02032EC0
|
||||
_0804AC08: .4byte gUI
|
||||
_0804AC0C: .4byte gUnk_080D4138
|
||||
_0804AC10: .4byte gUnk_02017700
|
||||
_0804AC14: .4byte gUsedPalettes
|
||||
|
||||
+3
-3
@@ -54,12 +54,12 @@
|
||||
map_data \src_offset, gMapDataTopSpecial, \size, \compressed, \terminator
|
||||
.endm
|
||||
|
||||
.macro map_unknown src_offset, size, compressed, terminator=0
|
||||
.macro collision_bottom src_offset, size, compressed, terminator=0
|
||||
map_data \src_offset, gUnk_02027EB4, \size, \compressed, \terminator
|
||||
.endm
|
||||
|
||||
.macro map_unknown_2 src_offset, size, compressed, terminator=0
|
||||
map_data \src_offset, gUnk_02019EE0, \size, \compressed, \terminator
|
||||
.macro map_bottom_special src_offset, size, compressed, terminator=0
|
||||
map_data \src_offset, gMapDataBottomSpecial, \size, \compressed, \terminator
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ _08081E9A:
|
||||
ldrh r0, [r1]
|
||||
lsl r0, r0, #3
|
||||
add r3, r3, r0
|
||||
ldr r2, _08081EF8 @ =gUnk_02019EE0
|
||||
ldr r2, _08081EF8 @ =gMapDataBottomSpecial
|
||||
cmp r5, #2
|
||||
bne _08081EB4
|
||||
ldr r2, _08081EFC @ =gMapDataTopSpecial
|
||||
@@ -64,5 +64,5 @@ _08081EE8:
|
||||
_08081EEC: .4byte 0x00003FFF
|
||||
_08081EF0: .4byte 0x00007004
|
||||
_08081EF4: .4byte 0x00006004
|
||||
_08081EF8: .4byte gUnk_02019EE0
|
||||
_08081EF8: .4byte gMapDataBottomSpecial
|
||||
_08081EFC: .4byte gMapDataTopSpecial
|
||||
|
||||
@@ -20,7 +20,7 @@ _0801DDB8:
|
||||
lsls r0, r4, #2
|
||||
adds r0, r0, r1
|
||||
ldr r4, [r0]
|
||||
ldr r0, _0801DDE0 @ =gUnk_02019EE0
|
||||
ldr r0, _0801DDE0 @ =gMapDataBottomSpecial
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #8
|
||||
bl MemClear
|
||||
@@ -28,7 +28,7 @@ _0801DDB8:
|
||||
.align 2, 0
|
||||
_0801DDD8: .4byte gUnk_080C9C50
|
||||
_0801DDDC: .4byte gArea
|
||||
_0801DDE0: .4byte gUnk_02019EE0
|
||||
_0801DDE0: .4byte gMapDataBottomSpecial
|
||||
_0801DDE4:
|
||||
ldrb r0, [r4]
|
||||
ldrb r1, [r4, #1]
|
||||
@@ -41,7 +41,7 @@ _0801DDE4:
|
||||
movs r0, #0
|
||||
str r0, [sp, #0xc]
|
||||
ldrh r2, [r4]
|
||||
ldr r0, _0801DE14 @ =gUnk_02032EC0
|
||||
ldr r0, _0801DE14 @ =gUI
|
||||
ldrh r3, [r0, #0x20]
|
||||
ldr r1, _0801DE18 @ =0x0000FFFF
|
||||
ands r1, r2
|
||||
@@ -52,7 +52,7 @@ _0801DDE4:
|
||||
movs r3, #8
|
||||
b _0801DE36
|
||||
.align 2, 0
|
||||
_0801DE14: .4byte gUnk_02032EC0
|
||||
_0801DE14: .4byte gUI
|
||||
_0801DE18: .4byte 0x0000FFFF
|
||||
_0801DE1C:
|
||||
bl HasDungeonSmallKey
|
||||
@@ -89,7 +89,7 @@ _0801DE46:
|
||||
ldr r1, _0801DEFC @ =gMapData
|
||||
adds r0, r0, r1
|
||||
str r0, [r2]
|
||||
ldr r0, _0801DF00 @ =gUnk_02019EE0
|
||||
ldr r0, _0801DF00 @ =gMapDataBottomSpecial
|
||||
str r0, [r2, #4]
|
||||
ldr r0, _0801DF04 @ =0x84000100
|
||||
str r0, [r2, #8]
|
||||
@@ -127,7 +127,7 @@ _0801DEA0:
|
||||
ldr r3, [sp, #8]
|
||||
adds r1, r6, #0
|
||||
muls r1, r3, r1
|
||||
ldr r0, _0801DF00 @ =gUnk_02019EE0
|
||||
ldr r0, _0801DF00 @ =gMapDataBottomSpecial
|
||||
adds r1, r1, r0
|
||||
mov r8, r1
|
||||
movs r5, #0
|
||||
@@ -172,7 +172,7 @@ _0801DEEA:
|
||||
.align 2, 0
|
||||
_0801DEF8: .4byte 0x040000D4
|
||||
_0801DEFC: .4byte gMapData
|
||||
_0801DF00: .4byte gUnk_02019EE0
|
||||
_0801DF00: .4byte gMapDataBottomSpecial
|
||||
_0801DF04: .4byte 0x84000100
|
||||
_0801DF08: .4byte gAreaRoomHeaders
|
||||
_0801DF0C: .4byte 0x000007FF
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
ldr r0, _08050F40 @ =gUnk_02019EE0
|
||||
ldr r0, _08050F40 @ =gMapDataBottomSpecial
|
||||
ldrb r1, [r0]
|
||||
adds r6, r0, #0
|
||||
cmp r1, #0
|
||||
@@ -38,7 +38,7 @@ _08050F1E:
|
||||
beq _08050F82
|
||||
b _08050F8E
|
||||
.align 2, 0
|
||||
_08050F40: .4byte gUnk_02019EE0
|
||||
_08050F40: .4byte gMapDataBottomSpecial
|
||||
_08050F44: .4byte 0x000004B4
|
||||
_08050F48: .4byte gMenu
|
||||
_08050F4C: .4byte gInput
|
||||
@@ -107,12 +107,12 @@ _08050FAC:
|
||||
_08050FBA:
|
||||
adds r0, r5, #0
|
||||
bl SetMenuType
|
||||
ldr r0, _08050FCC @ =gUnk_02019EE0
|
||||
ldr r0, _08050FCC @ =gMapDataBottomSpecial
|
||||
ldrb r0, [r0, #6]
|
||||
bl SetActiveSave
|
||||
b _08050FF4
|
||||
.align 2, 0
|
||||
_08050FCC: .4byte gUnk_02019EE0
|
||||
_08050FCC: .4byte gMapDataBottomSpecial
|
||||
_08050FD0:
|
||||
mov r1, ip
|
||||
ldrb r0, [r1, #1]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
ldr r1, _08051768 @ =gUnk_02019EE0
|
||||
ldr r1, _08051768 @ =gMapDataBottomSpecial
|
||||
movs r0, #4
|
||||
strb r0, [r1, #7]
|
||||
movs r4, #0
|
||||
@@ -25,7 +25,7 @@ _0805174C:
|
||||
ands r2, r0
|
||||
b _08051774
|
||||
.align 2, 0
|
||||
_08051768: .4byte gUnk_02019EE0
|
||||
_08051768: .4byte gMapDataBottomSpecial
|
||||
_0805176C: .4byte gUnk_02000090
|
||||
_08051770:
|
||||
adds r4, #1
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
ldr r0, _080510E4 @ =gUnk_02019EE0
|
||||
ldr r0, _080510E4 @ =gMapDataBottomSpecial
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _080510C4
|
||||
@@ -24,7 +24,7 @@ _080510DC:
|
||||
beq _080511B8
|
||||
b _08051100
|
||||
.align 2, 0
|
||||
_080510E4: .4byte gUnk_02019EE0
|
||||
_080510E4: .4byte gMapDataBottomSpecial
|
||||
_080510E8: .4byte gInput
|
||||
_080510EC:
|
||||
movs r0, #0x80
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
movs r0, #0x1e
|
||||
strh r0, [r1, #0xa]
|
||||
strb r4, [r1, #0x10]
|
||||
ldr r0, _080537E0 @ =gUnk_02032EC0
|
||||
ldr r0, _080537E0 @ =gUI
|
||||
strb r3, [r0, #6]
|
||||
ldr r0, _080537E4 @ =gMapBottom
|
||||
str r2, [r0]
|
||||
@@ -61,7 +61,7 @@
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080537DC: .4byte gMenu
|
||||
_080537E0: .4byte gUnk_02032EC0
|
||||
_080537E0: .4byte gUI
|
||||
_080537E4: .4byte gMapBottom
|
||||
_080537E8: .4byte gMapTop
|
||||
_080537EC: .4byte gRoomControls
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
ldr r4, _080548DC @ =gUnk_02032EC0
|
||||
ldr r4, _080548DC @ =gUI
|
||||
ldrb r1, [r4, #3]
|
||||
lsls r0, r1, #2
|
||||
adds r0, r0, r1
|
||||
@@ -34,7 +34,7 @@
|
||||
bl sub_080548E8
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080548DC: .4byte gUnk_02032EC0
|
||||
_080548DC: .4byte gUI
|
||||
_080548E0: .4byte gUnk_080FE320
|
||||
_080548E4: .4byte gMenu
|
||||
.syntax divided
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
ldrb r0, [r0, #7]
|
||||
cmp r0, #0
|
||||
beq _08054954
|
||||
ldr r0, _08054950 @ =gUnk_02032EC0
|
||||
ldr r0, _08054950 @ =gUI
|
||||
ldrb r1, [r0, #3]
|
||||
movs r0, #0xa
|
||||
bl MenuFadeIn
|
||||
@@ -18,9 +18,9 @@
|
||||
.align 2, 0
|
||||
_08054948: .4byte gUnk_080C9CBC
|
||||
_0805494C: .4byte gFuseInfo
|
||||
_08054950: .4byte gUnk_02032EC0
|
||||
_08054950: .4byte gUI
|
||||
_08054954:
|
||||
ldr r1, _08054964 @ =gUnk_02032EC0
|
||||
ldr r1, _08054964 @ =gUI
|
||||
movs r0, #3
|
||||
strb r0, [r1]
|
||||
movs r0, #7
|
||||
@@ -29,5 +29,5 @@ _08054954:
|
||||
_08054962:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08054964: .4byte gUnk_02032EC0
|
||||
_08054964: .4byte gUI
|
||||
.syntax divided
|
||||
|
||||
@@ -57,7 +57,7 @@ _080549CE:
|
||||
bne _080549F4
|
||||
bl TryLoadPrologueHyruleTown
|
||||
_080549F4:
|
||||
ldr r0, _08054A10 @ =gUnk_02032EC0
|
||||
ldr r0, _08054A10 @ =gUI
|
||||
ldrb r0, [r0, #3]
|
||||
bl sub_08018710
|
||||
pop {r4, r5, r6, pc}
|
||||
@@ -66,5 +66,5 @@ _08054A00: .4byte gUpdateVisibleTiles
|
||||
_08054A04: .4byte gScreen
|
||||
_08054A08: .4byte 0x00001FFF
|
||||
_08054A0C: .4byte gRoomControls
|
||||
_08054A10: .4byte gUnk_02032EC0
|
||||
_08054A10: .4byte gUI
|
||||
.syntax divided
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #5
|
||||
bl MemClear
|
||||
ldr r0, _0807C160 @ =gUnk_02019EE0
|
||||
ldr r0, _0807C160 @ =gMapDataBottomSpecial
|
||||
movs r4, #0x80
|
||||
lsls r4, r4, #8
|
||||
adds r1, r4, #0
|
||||
@@ -56,7 +56,7 @@
|
||||
.align 2, 0
|
||||
_0807C158: .4byte gRoomControls
|
||||
_0807C15C: .4byte gMapDataTop
|
||||
_0807C160: .4byte gUnk_02019EE0
|
||||
_0807C160: .4byte gMapDataBottomSpecial
|
||||
_0807C164: .4byte gMapDataTopSpecial
|
||||
_0807C168: .4byte gArea
|
||||
_0807C16C: .4byte 0x0000085C
|
||||
@@ -204,7 +204,7 @@ _0807C2A0:
|
||||
mov r3, sb
|
||||
cmp r3, #0
|
||||
bne _0807C2E4
|
||||
ldr r0, _0807C2DC @ =gUnk_02019EE0
|
||||
ldr r0, _0807C2DC @ =gMapDataBottomSpecial
|
||||
adds r1, r4, #0
|
||||
bl sub_0801AB08
|
||||
ldr r0, _0807C2E0 @ =gMapDataTopSpecial
|
||||
@@ -216,10 +216,10 @@ _0807C2CC: .4byte gUnk_02027EB4
|
||||
_0807C2D0: .4byte gUnk_0200D654
|
||||
_0807C2D4: .4byte gMapBottom
|
||||
_0807C2D8: .4byte gMapTop
|
||||
_0807C2DC: .4byte gUnk_02019EE0
|
||||
_0807C2DC: .4byte gMapDataBottomSpecial
|
||||
_0807C2E0: .4byte gMapDataTopSpecial
|
||||
_0807C2E4:
|
||||
ldr r4, _0807C34C @ =gUnk_02019EE0
|
||||
ldr r4, _0807C34C @ =gMapDataBottomSpecial
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #7
|
||||
adds r5, r4, r0
|
||||
@@ -269,7 +269,7 @@ _0807C33A:
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0807C34C: .4byte gUnk_02019EE0
|
||||
_0807C34C: .4byte gMapDataBottomSpecial
|
||||
_0807C350: .4byte gMapDataTopSpecial
|
||||
_0807C354: .4byte _0807C358
|
||||
_0807C358: @ jump table
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r5, r0, #0
|
||||
adds r4, r1, #0
|
||||
adds r6, r2, #0
|
||||
ldr r0, _0807B3A0 @ =0x000007FF
|
||||
cmp r5, r0
|
||||
bhi _0807B410
|
||||
adds r0, r4, #0
|
||||
adds r1, r6, #0
|
||||
bl DeleteLoadedTileEntity
|
||||
adds r0, r6, #0
|
||||
bl GetLayerByIndex
|
||||
adds r2, r0, #0
|
||||
lsls r1, r5, #1
|
||||
ldr r3, _0807B3A4 @ =0x00006004
|
||||
adds r0, r2, r3
|
||||
adds r0, r0, r1
|
||||
ldrh r0, [r0]
|
||||
mov ip, r0
|
||||
lsls r1, r4, #1
|
||||
adds r0, r2, #4
|
||||
adds r0, r0, r1
|
||||
mov r1, ip
|
||||
strh r1, [r0]
|
||||
ldr r0, _0807B3A8 @ =gUnk_080B3E80
|
||||
adds r0, r5, r0
|
||||
ldrb r3, [r0]
|
||||
ldr r1, _0807B3AC @ =0x00002004
|
||||
adds r0, r2, r1
|
||||
adds r0, r0, r4
|
||||
strb r3, [r0]
|
||||
ldr r7, _0807B3B0 @ =gRoomControls
|
||||
ldrb r1, [r7, #0xf]
|
||||
movs r0, #2
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0807B36C
|
||||
ldr r0, _0807B3B4 @ =gMapBottom
|
||||
ldr r1, _0807B3AC @ =0x00002004
|
||||
adds r0, r0, r1
|
||||
adds r0, r4, r0
|
||||
strb r3, [r0]
|
||||
_0807B36C:
|
||||
ldr r3, _0807B3B8 @ =0x0000B004
|
||||
adds r1, r2, r3
|
||||
adds r1, r1, r4
|
||||
ldr r0, _0807B3BC @ =gUnk_080B37A0
|
||||
adds r0, r5, r0
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r1]
|
||||
ldrb r1, [r7, #0xf]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0807B430
|
||||
movs r1, #0x3f
|
||||
ands r1, r4
|
||||
lsls r1, r1, #1
|
||||
movs r0, #0xfc
|
||||
lsls r0, r0, #4
|
||||
ands r0, r4
|
||||
lsls r0, r0, #2
|
||||
adds r1, r1, r0
|
||||
cmp r6, #2
|
||||
beq _0807B3C4
|
||||
lsls r1, r1, #1
|
||||
ldr r0, _0807B3C0 @ =gUnk_02019EE0
|
||||
b _0807B3C8
|
||||
.align 2, 0
|
||||
_0807B3A0: .4byte 0x000007FF
|
||||
_0807B3A4: .4byte 0x00006004
|
||||
_0807B3A8: .4byte gUnk_080B3E80
|
||||
_0807B3AC: .4byte 0x00002004
|
||||
_0807B3B0: .4byte gRoomControls
|
||||
_0807B3B4: .4byte gMapBottom
|
||||
_0807B3B8: .4byte 0x0000B004
|
||||
_0807B3BC: .4byte gUnk_080B37A0
|
||||
_0807B3C0: .4byte gUnk_02019EE0
|
||||
_0807B3C4:
|
||||
lsls r1, r1, #1
|
||||
ldr r0, _0807B400 @ =gMapDataTopSpecial
|
||||
_0807B3C8:
|
||||
adds r3, r1, r0
|
||||
mov r1, ip
|
||||
lsls r0, r1, #3
|
||||
ldr r1, _0807B404 @ =0x00007004
|
||||
adds r0, r0, r1
|
||||
adds r0, r2, r0
|
||||
ldrh r1, [r0]
|
||||
strh r1, [r3]
|
||||
ldrh r1, [r0, #2]
|
||||
strh r1, [r3, #2]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #1
|
||||
adds r2, r3, r1
|
||||
ldrh r1, [r0, #4]
|
||||
strh r1, [r2]
|
||||
movs r2, #0x81
|
||||
lsls r2, r2, #1
|
||||
adds r1, r3, r2
|
||||
ldrh r0, [r0, #6]
|
||||
strh r0, [r1]
|
||||
ldr r0, _0807B408 @ =gRoomControls
|
||||
ldrh r0, [r0]
|
||||
cmp r0, #1
|
||||
beq _0807B430
|
||||
ldr r1, _0807B40C @ =gUpdateVisibleTiles
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
b _0807B430
|
||||
.align 2, 0
|
||||
_0807B400: .4byte gMapDataTopSpecial
|
||||
_0807B404: .4byte 0x00007004
|
||||
_0807B408: .4byte gRoomControls
|
||||
_0807B40C: .4byte gUpdateVisibleTiles
|
||||
_0807B410:
|
||||
ldr r0, _0807B424 @ =0x00003FFF
|
||||
cmp r5, r0
|
||||
bls _0807B428
|
||||
adds r0, r5, #0
|
||||
adds r1, r4, #0
|
||||
adds r2, r6, #0
|
||||
bl SetTile
|
||||
b _0807B430
|
||||
.align 2, 0
|
||||
_0807B424: .4byte 0x00003FFF
|
||||
_0807B428:
|
||||
adds r0, r4, #0
|
||||
adds r1, r6, #0
|
||||
bl sub_0807BA8C
|
||||
_0807B430:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,99 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r7, r0, #0
|
||||
adds r4, r1, #0
|
||||
adds r6, r2, #0
|
||||
adds r0, r4, #0
|
||||
adds r1, r6, #0
|
||||
bl DeleteLoadedTileEntity
|
||||
adds r0, r6, #0
|
||||
bl GetLayerByIndex
|
||||
adds r5, r0, #0
|
||||
lsls r1, r4, #1
|
||||
adds r0, r5, #4
|
||||
adds r0, r0, r1
|
||||
strh r7, [r0]
|
||||
lsls r1, r7, #1
|
||||
ldr r2, _0807BA24 @ =0x00005004
|
||||
adds r0, r5, r2
|
||||
adds r0, r0, r1
|
||||
ldrh r2, [r0]
|
||||
ldr r0, _0807BA28 @ =0x00002004
|
||||
adds r1, r5, r0
|
||||
adds r1, r1, r4
|
||||
ldr r0, _0807BA2C @ =gUnk_080B3E80
|
||||
adds r0, r2, r0
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r1]
|
||||
ldr r0, _0807BA30 @ =0x0000B004
|
||||
adds r1, r5, r0
|
||||
adds r1, r1, r4
|
||||
ldr r0, _0807BA34 @ =gUnk_080B37A0
|
||||
adds r2, r2, r0
|
||||
ldrb r0, [r2]
|
||||
strb r0, [r1]
|
||||
ldr r0, _0807BA38 @ =gRoomControls
|
||||
ldrb r1, [r0, #0xf]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0807BA78
|
||||
movs r1, #0x3f
|
||||
ands r1, r4
|
||||
lsls r1, r1, #1
|
||||
movs r0, #0xfc
|
||||
lsls r0, r0, #4
|
||||
ands r0, r4
|
||||
lsls r0, r0, #2
|
||||
adds r1, r1, r0
|
||||
cmp r6, #2
|
||||
beq _0807BA40
|
||||
lsls r1, r1, #1
|
||||
ldr r0, _0807BA3C @ =gUnk_02019EE0
|
||||
b _0807BA44
|
||||
.align 2, 0
|
||||
_0807BA24: .4byte 0x00005004
|
||||
_0807BA28: .4byte 0x00002004
|
||||
_0807BA2C: .4byte gUnk_080B3E80
|
||||
_0807BA30: .4byte 0x0000B004
|
||||
_0807BA34: .4byte gUnk_080B37A0
|
||||
_0807BA38: .4byte gRoomControls
|
||||
_0807BA3C: .4byte gUnk_02019EE0
|
||||
_0807BA40:
|
||||
lsls r1, r1, #1
|
||||
ldr r0, _0807BA7C @ =gMapDataTopSpecial
|
||||
_0807BA44:
|
||||
adds r3, r1, r0
|
||||
lsls r0, r7, #3
|
||||
ldr r1, _0807BA80 @ =0x00007004
|
||||
adds r0, r0, r1
|
||||
adds r0, r5, r0
|
||||
ldrh r1, [r0]
|
||||
strh r1, [r3]
|
||||
ldrh r1, [r0, #2]
|
||||
strh r1, [r3, #2]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #1
|
||||
adds r2, r3, r1
|
||||
ldrh r1, [r0, #4]
|
||||
strh r1, [r2]
|
||||
movs r2, #0x81
|
||||
lsls r2, r2, #1
|
||||
adds r1, r3, r2
|
||||
ldrh r0, [r0, #6]
|
||||
strh r0, [r1]
|
||||
ldr r0, _0807BA84 @ =gRoomControls
|
||||
ldrh r0, [r0]
|
||||
cmp r0, #1
|
||||
beq _0807BA78
|
||||
ldr r1, _0807BA88 @ =gUpdateVisibleTiles
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
_0807BA78:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0807BA7C: .4byte gMapDataTopSpecial
|
||||
_0807BA80: .4byte 0x00007004
|
||||
_0807BA84: .4byte gRoomControls
|
||||
_0807BA88: .4byte gUpdateVisibleTiles
|
||||
.syntax divided
|
||||
@@ -1,101 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r4, r0, #0
|
||||
adds r7, r1, #0
|
||||
bl DeleteLoadedTileEntity
|
||||
adds r0, r7, #0
|
||||
bl GetLayerByIndex
|
||||
adds r5, r0, #0
|
||||
lsls r2, r4, #1
|
||||
adds r1, r5, #4
|
||||
adds r1, r1, r2
|
||||
ldr r3, _0807BAFC @ =0x00003004
|
||||
adds r0, r5, r3
|
||||
adds r0, r0, r2
|
||||
ldrh r6, [r0]
|
||||
strh r6, [r1]
|
||||
lsls r1, r6, #1
|
||||
ldr r2, _0807BB00 @ =0x00005004
|
||||
adds r0, r5, r2
|
||||
adds r0, r0, r1
|
||||
ldrh r2, [r0]
|
||||
ldr r3, _0807BB04 @ =0x00002004
|
||||
adds r1, r5, r3
|
||||
adds r1, r1, r4
|
||||
ldr r0, _0807BB08 @ =gUnk_080B3E80
|
||||
adds r0, r2, r0
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r1]
|
||||
ldr r0, _0807BB0C @ =0x0000B004
|
||||
adds r1, r5, r0
|
||||
adds r1, r1, r4
|
||||
ldr r0, _0807BB10 @ =gUnk_080B37A0
|
||||
adds r2, r2, r0
|
||||
ldrb r0, [r2]
|
||||
strb r0, [r1]
|
||||
ldr r0, _0807BB14 @ =gRoomControls
|
||||
ldrb r1, [r0, #0xf]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0807BB54
|
||||
movs r1, #0x3f
|
||||
ands r1, r4
|
||||
lsls r1, r1, #1
|
||||
movs r0, #0xfc
|
||||
lsls r0, r0, #4
|
||||
ands r0, r4
|
||||
lsls r0, r0, #2
|
||||
adds r1, r1, r0
|
||||
cmp r7, #2
|
||||
beq _0807BB1C
|
||||
lsls r1, r1, #1
|
||||
ldr r0, _0807BB18 @ =gUnk_02019EE0
|
||||
b _0807BB20
|
||||
.align 2, 0
|
||||
_0807BAFC: .4byte 0x00003004
|
||||
_0807BB00: .4byte 0x00005004
|
||||
_0807BB04: .4byte 0x00002004
|
||||
_0807BB08: .4byte gUnk_080B3E80
|
||||
_0807BB0C: .4byte 0x0000B004
|
||||
_0807BB10: .4byte gUnk_080B37A0
|
||||
_0807BB14: .4byte gRoomControls
|
||||
_0807BB18: .4byte gUnk_02019EE0
|
||||
_0807BB1C:
|
||||
lsls r1, r1, #1
|
||||
ldr r0, _0807BB58 @ =gMapDataTopSpecial
|
||||
_0807BB20:
|
||||
adds r3, r1, r0
|
||||
lsls r0, r6, #3
|
||||
ldr r1, _0807BB5C @ =0x00007004
|
||||
adds r0, r0, r1
|
||||
adds r0, r5, r0
|
||||
ldrh r1, [r0]
|
||||
strh r1, [r3]
|
||||
ldrh r1, [r0, #2]
|
||||
strh r1, [r3, #2]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #1
|
||||
adds r2, r3, r1
|
||||
ldrh r1, [r0, #4]
|
||||
strh r1, [r2]
|
||||
movs r2, #0x81
|
||||
lsls r2, r2, #1
|
||||
adds r1, r3, r2
|
||||
ldrh r0, [r0, #6]
|
||||
strh r0, [r1]
|
||||
ldr r0, _0807BB60 @ =gRoomControls
|
||||
ldrh r0, [r0]
|
||||
cmp r0, #1
|
||||
beq _0807BB54
|
||||
ldr r1, _0807BB64 @ =gUpdateVisibleTiles
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
_0807BB54:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0807BB58: .4byte gMapDataTopSpecial
|
||||
_0807BB5C: .4byte 0x00007004
|
||||
_0807BB60: .4byte gRoomControls
|
||||
_0807BB64: .4byte gUpdateVisibleTiles
|
||||
.syntax divided
|
||||
@@ -1,73 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
ldr r1, _0807BD04 @ =gRoomControls
|
||||
ldrh r0, [r1, #0x1e]
|
||||
lsrs r2, r0, #4
|
||||
mov r8, r1
|
||||
cmp r2, #0x40
|
||||
bne _0807BC98
|
||||
movs r2, #0x3f
|
||||
_0807BC98:
|
||||
ldr r1, _0807BD08 @ =gUnk_02027EB4
|
||||
adds r3, r2, r1
|
||||
adds r6, r1, #0
|
||||
adds r6, #0x3f
|
||||
ldr r0, _0807BD0C @ =gUnk_0200D654
|
||||
adds r2, r2, r0
|
||||
adds r5, r0, #0
|
||||
adds r5, #0x3f
|
||||
movs r4, #0
|
||||
adds r7, r1, #0
|
||||
mov ip, r0
|
||||
movs r0, #0xff
|
||||
_0807BCB0:
|
||||
strb r0, [r3]
|
||||
strb r0, [r6]
|
||||
strb r0, [r2]
|
||||
strb r0, [r5]
|
||||
adds r3, #0x40
|
||||
adds r6, #0x40
|
||||
adds r2, #0x40
|
||||
adds r5, #0x40
|
||||
adds r4, #1
|
||||
cmp r4, #0x3f
|
||||
bls _0807BCB0
|
||||
mov r0, r8
|
||||
ldrh r1, [r0, #0x20]
|
||||
ldr r0, _0807BD10 @ =0x0000FFF0
|
||||
ands r0, r1
|
||||
lsls r0, r0, #2
|
||||
adds r3, r0, r7
|
||||
movs r1, #0xfc
|
||||
lsls r1, r1, #4
|
||||
adds r6, r7, r1
|
||||
mov r1, ip
|
||||
adds r2, r0, r1
|
||||
movs r5, #0xfc
|
||||
lsls r5, r5, #4
|
||||
add r5, ip
|
||||
movs r4, #0
|
||||
movs r0, #0xff
|
||||
_0807BCE6:
|
||||
strb r0, [r3]
|
||||
adds r3, #1
|
||||
strb r0, [r6]
|
||||
adds r6, #1
|
||||
strb r0, [r2]
|
||||
adds r2, #1
|
||||
strb r0, [r5]
|
||||
adds r5, #1
|
||||
adds r4, #1
|
||||
cmp r4, #0x3f
|
||||
bls _0807BCE6
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0807BD04: .4byte gRoomControls
|
||||
_0807BD08: .4byte gUnk_02027EB4
|
||||
_0807BD0C: .4byte gUnk_0200D654
|
||||
_0807BD10: .4byte 0x0000FFF0
|
||||
.syntax divided
|
||||
@@ -1,159 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r3, r0, #0
|
||||
movs r5, #0xff
|
||||
movs r0, #7
|
||||
ands r1, r0
|
||||
cmp r1, #7
|
||||
bls _0807BDC8
|
||||
b _0807BEE2
|
||||
_0807BDC8:
|
||||
lsls r0, r1, #2
|
||||
ldr r1, _0807BDD4 @ =_0807BDD8
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0807BDD4: .4byte _0807BDD8
|
||||
_0807BDD8: @ jump table
|
||||
.4byte _0807BDF8 @ case 0
|
||||
.4byte _0807BE10 @ case 1
|
||||
.4byte _0807BE30 @ case 2
|
||||
.4byte _0807BE4C @ case 3
|
||||
.4byte _0807BE78 @ case 4
|
||||
.4byte _0807BE94 @ case 5
|
||||
.4byte _0807BEB4 @ case 6
|
||||
.4byte _0807BEC4 @ case 7
|
||||
_0807BDF8:
|
||||
movs r1, #0x32
|
||||
ldrsh r0, [r3, r1]
|
||||
ldr r1, _0807BE0C @ =gRoomControls
|
||||
ldrh r1, [r1, #8]
|
||||
subs r0, r0, r1
|
||||
cmp r0, #9
|
||||
bhi _0807BEE2
|
||||
movs r5, #0
|
||||
b _0807BEE2
|
||||
.align 2, 0
|
||||
_0807BE0C: .4byte gRoomControls
|
||||
_0807BE10:
|
||||
movs r2, #0x32
|
||||
ldrsh r0, [r3, r2]
|
||||
ldr r2, _0807BE2C @ =gRoomControls
|
||||
ldrh r1, [r2, #8]
|
||||
subs r0, r0, r1
|
||||
cmp r0, #9
|
||||
bhi _0807BE20
|
||||
movs r5, #0
|
||||
_0807BE20:
|
||||
ldrh r0, [r2, #0x1e]
|
||||
subs r0, #0xa
|
||||
movs r4, #0x2e
|
||||
ldrsh r1, [r3, r4]
|
||||
ldrh r2, [r2, #6]
|
||||
b _0807BE6A
|
||||
.align 2, 0
|
||||
_0807BE2C: .4byte gRoomControls
|
||||
_0807BE30:
|
||||
ldr r1, _0807BE48 @ =gRoomControls
|
||||
ldrh r2, [r1, #0x1e]
|
||||
subs r2, #0xa
|
||||
movs r4, #0x2e
|
||||
ldrsh r0, [r3, r4]
|
||||
ldrh r1, [r1, #6]
|
||||
subs r0, r0, r1
|
||||
cmp r2, r0
|
||||
bhs _0807BEE2
|
||||
movs r5, #1
|
||||
b _0807BEE2
|
||||
.align 2, 0
|
||||
_0807BE48: .4byte gRoomControls
|
||||
_0807BE4C:
|
||||
ldr r4, _0807BE74 @ =gRoomControls
|
||||
ldrh r0, [r4, #0x20]
|
||||
subs r0, #0xa
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r3, r2]
|
||||
ldrh r2, [r4, #8]
|
||||
subs r1, r1, r2
|
||||
cmp r0, r1
|
||||
bhs _0807BE60
|
||||
movs r5, #2
|
||||
_0807BE60:
|
||||
ldrh r0, [r4, #0x1e]
|
||||
subs r0, #0xa
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r3, r2]
|
||||
ldrh r2, [r4, #6]
|
||||
_0807BE6A:
|
||||
subs r1, r1, r2
|
||||
cmp r0, r1
|
||||
bhs _0807BEE2
|
||||
movs r5, #1
|
||||
b _0807BEE2
|
||||
.align 2, 0
|
||||
_0807BE74: .4byte gRoomControls
|
||||
_0807BE78:
|
||||
ldr r1, _0807BE90 @ =gRoomControls
|
||||
ldrh r2, [r1, #0x20]
|
||||
subs r2, #0xa
|
||||
movs r4, #0x32
|
||||
ldrsh r0, [r3, r4]
|
||||
ldrh r1, [r1, #8]
|
||||
subs r0, r0, r1
|
||||
cmp r2, r0
|
||||
bhs _0807BEE2
|
||||
movs r5, #2
|
||||
b _0807BEE2
|
||||
.align 2, 0
|
||||
_0807BE90: .4byte gRoomControls
|
||||
_0807BE94:
|
||||
ldr r4, _0807BEB0 @ =gRoomControls
|
||||
ldrh r0, [r4, #0x20]
|
||||
subs r0, #0xa
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r3, r2]
|
||||
ldrh r2, [r4, #8]
|
||||
subs r1, r1, r2
|
||||
cmp r0, r1
|
||||
bhs _0807BEA8
|
||||
movs r5, #2
|
||||
_0807BEA8:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r3, r1]
|
||||
ldrh r1, [r4, #6]
|
||||
b _0807BEDA
|
||||
.align 2, 0
|
||||
_0807BEB0: .4byte gRoomControls
|
||||
_0807BEB4:
|
||||
movs r2, #0x2e
|
||||
ldrsh r0, [r3, r2]
|
||||
ldr r1, _0807BEC0 @ =gRoomControls
|
||||
ldrh r1, [r1, #6]
|
||||
b _0807BEDA
|
||||
.align 2, 0
|
||||
_0807BEC0: .4byte gRoomControls
|
||||
_0807BEC4:
|
||||
movs r4, #0x32
|
||||
ldrsh r0, [r3, r4]
|
||||
ldr r2, _0807BEE8 @ =gRoomControls
|
||||
ldrh r1, [r2, #8]
|
||||
subs r0, r0, r1
|
||||
cmp r0, #9
|
||||
bhi _0807BED4
|
||||
movs r5, #0
|
||||
_0807BED4:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r3, r1]
|
||||
ldrh r1, [r2, #6]
|
||||
_0807BEDA:
|
||||
subs r0, r0, r1
|
||||
cmp r0, #9
|
||||
bhi _0807BEE2
|
||||
movs r5, #3
|
||||
_0807BEE2:
|
||||
adds r0, r5, #0
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0807BEE8: .4byte gRoomControls
|
||||
.syntax divided
|
||||
@@ -1,84 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r6, r0, #0
|
||||
adds r7, r1, #0
|
||||
ldr r0, _0807BF04 @ =gArea
|
||||
ldrb r1, [r0, #0xd]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0807BF0C
|
||||
ldr r0, _0807BF08 @ =gRoomControls
|
||||
ldrb r0, [r0, #5]
|
||||
b _0807BF7C
|
||||
.align 2, 0
|
||||
_0807BF04: .4byte gArea
|
||||
_0807BF08: .4byte gRoomControls
|
||||
_0807BF0C:
|
||||
cmp r2, #1
|
||||
beq _0807BF2C
|
||||
cmp r2, #1
|
||||
blo _0807BF1E
|
||||
cmp r2, #2
|
||||
beq _0807BF40
|
||||
cmp r2, #3
|
||||
beq _0807BF58
|
||||
b _0807BF7A
|
||||
_0807BF1E:
|
||||
ldr r0, _0807BF28 @ =gRoomControls
|
||||
ldrh r0, [r0, #8]
|
||||
adds r7, r0, #0
|
||||
subs r7, #0x10
|
||||
b _0807BF60
|
||||
.align 2, 0
|
||||
_0807BF28: .4byte gRoomControls
|
||||
_0807BF2C:
|
||||
ldr r0, _0807BF3C @ =gRoomControls
|
||||
ldrh r1, [r0, #6]
|
||||
ldrh r0, [r0, #0x1e]
|
||||
adds r1, r1, r0
|
||||
adds r6, r1, #0
|
||||
adds r6, #0x10
|
||||
b _0807BF60
|
||||
.align 2, 0
|
||||
_0807BF3C: .4byte gRoomControls
|
||||
_0807BF40:
|
||||
ldr r0, _0807BF50 @ =gRoomControls
|
||||
ldrh r1, [r0, #8]
|
||||
ldrh r0, [r0, #0x20]
|
||||
adds r1, r1, r0
|
||||
adds r7, r1, #0
|
||||
adds r7, #0x10
|
||||
b _0807BF60
|
||||
.align 2, 0
|
||||
_0807BF50: .4byte gRoomControls
|
||||
_0807BF54:
|
||||
adds r0, r4, #0
|
||||
b _0807BF7C
|
||||
_0807BF58:
|
||||
ldr r0, _0807BF80 @ =gRoomControls
|
||||
ldrh r0, [r0, #6]
|
||||
adds r6, r0, #0
|
||||
subs r6, #0x10
|
||||
_0807BF60:
|
||||
ldr r5, _0807BF84 @ =gUnk_02033ACC
|
||||
movs r4, #0
|
||||
_0807BF64:
|
||||
adds r0, r6, #0
|
||||
adds r1, r7, #0
|
||||
adds r2, r5, #0
|
||||
bl sub_0807BF88
|
||||
cmp r0, #0
|
||||
bne _0807BF54
|
||||
adds r4, #1
|
||||
adds r5, #0x20
|
||||
cmp r4, #0x3f
|
||||
bls _0807BF64
|
||||
_0807BF7A:
|
||||
movs r0, #0xff
|
||||
_0807BF7C:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0807BF80: .4byte gRoomControls
|
||||
_0807BF84: .4byte gUnk_02033ACC
|
||||
.syntax divided
|
||||
@@ -1,19 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r3, r2, #0
|
||||
ldrh r2, [r3, #4]
|
||||
subs r0, r0, r2
|
||||
ldrh r2, [r3, #6]
|
||||
subs r1, r1, r2
|
||||
movs r2, #0
|
||||
ldrh r4, [r3]
|
||||
cmp r0, r4
|
||||
bhs _0807BFA4
|
||||
ldrh r3, [r3, #2]
|
||||
cmp r1, r3
|
||||
bhs _0807BFA4
|
||||
movs r2, #1
|
||||
_0807BFA4:
|
||||
adds r0, r2, #0
|
||||
pop {r4, pc}
|
||||
.syntax divided
|
||||
@@ -1,79 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
sub sp, #8
|
||||
ldr r7, _0807C4E8 @ =gMapDataBottom
|
||||
ldr r6, _0807C4EC @ =gMapDataTop
|
||||
ldr r0, _0807C4F0 @ =gRoomControls
|
||||
ldrh r1, [r0, #0x1e]
|
||||
lsrs r3, r1, #4
|
||||
ldrh r0, [r0, #0x20]
|
||||
lsrs r0, r0, #4
|
||||
str r0, [sp]
|
||||
movs r4, #0
|
||||
movs r1, #0
|
||||
cmp r1, r0
|
||||
bhs _0807C4DC
|
||||
movs r0, #0x40
|
||||
subs r0, r0, r3
|
||||
lsls r0, r0, #1
|
||||
mov sb, r0
|
||||
_0807C48C:
|
||||
movs r5, #0
|
||||
adds r1, #1
|
||||
mov sl, r1
|
||||
cmp r5, r3
|
||||
bhs _0807C4CA
|
||||
ldr r0, _0807C4F4 @ =0x00003FFF
|
||||
mov r8, r0
|
||||
_0807C49A:
|
||||
ldrh r0, [r7]
|
||||
cmp r0, r8
|
||||
bls _0807C4AC
|
||||
adds r1, r4, #0
|
||||
movs r2, #1
|
||||
str r3, [sp, #4]
|
||||
bl SetTile
|
||||
ldr r3, [sp, #4]
|
||||
_0807C4AC:
|
||||
ldrh r0, [r6]
|
||||
cmp r0, r8
|
||||
bls _0807C4BE
|
||||
adds r1, r4, #0
|
||||
movs r2, #2
|
||||
str r3, [sp, #4]
|
||||
bl SetTile
|
||||
ldr r3, [sp, #4]
|
||||
_0807C4BE:
|
||||
adds r7, #2
|
||||
adds r6, #2
|
||||
adds r4, #1
|
||||
adds r5, #1
|
||||
cmp r5, r3
|
||||
blo _0807C49A
|
||||
_0807C4CA:
|
||||
add r7, sb
|
||||
add r6, sb
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x40
|
||||
subs r4, r0, r3
|
||||
mov r1, sl
|
||||
ldr r0, [sp]
|
||||
cmp r1, r0
|
||||
blo _0807C48C
|
||||
_0807C4DC:
|
||||
add sp, #8
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0807C4E8: .4byte gMapDataBottom
|
||||
_0807C4EC: .4byte gMapDataTop
|
||||
_0807C4F0: .4byte gRoomControls
|
||||
_0807C4F4: .4byte 0x00003FFF
|
||||
.syntax divided
|
||||
@@ -4,7 +4,7 @@
|
||||
ldrb r0, [r0, #4]
|
||||
cmp r0, #0x71
|
||||
beq _0807C592
|
||||
ldr r0, _0807C598 @ =gUnk_02019EE0
|
||||
ldr r0, _0807C598 @ =gMapDataBottomSpecial
|
||||
movs r4, #0x80
|
||||
lsls r4, r4, #8
|
||||
adds r1, r4, #0
|
||||
@@ -22,7 +22,7 @@
|
||||
_0807C524:
|
||||
adds r4, #0xc
|
||||
ldr r1, [r4, #4]
|
||||
ldr r0, _0807C598 @ =gUnk_02019EE0
|
||||
ldr r0, _0807C598 @ =gMapDataBottomSpecial
|
||||
cmp r1, r0
|
||||
beq _0807C534
|
||||
ldr r0, _0807C59C @ =gMapDataTopSpecial
|
||||
@@ -43,7 +43,7 @@ _0807C54A:
|
||||
ldr r0, [r4]
|
||||
cmp r0, #0
|
||||
blt _0807C524
|
||||
ldr r4, _0807C598 @ =gUnk_02019EE0
|
||||
ldr r4, _0807C598 @ =gMapDataBottomSpecial
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #7
|
||||
adds r5, r4, r0
|
||||
@@ -74,7 +74,7 @@ _0807C592:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0807C594: .4byte gRoomControls
|
||||
_0807C598: .4byte gUnk_02019EE0
|
||||
_0807C598: .4byte gMapDataBottomSpecial
|
||||
_0807C59C: .4byte gMapDataTopSpecial
|
||||
_0807C5A0: .4byte gUnk_02022830
|
||||
_0807C5A4: .4byte gArea
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
bl sub_0807BFD0
|
||||
ldr r2, _0807C850 @ =gUnk_03004030
|
||||
ldr r6, _0807C854 @ =gPlayerEntity
|
||||
ldr r4, _0807C858 @ =gRoomControls
|
||||
ldr r3, [r2]
|
||||
ldrh r1, [r3, #6]
|
||||
movs r0, #0x3f
|
||||
ands r0, r1
|
||||
lsls r0, r0, #4
|
||||
ldrh r1, [r4, #6]
|
||||
adds r0, r0, r1
|
||||
ldrh r1, [r2, #4]
|
||||
adds r1, r1, r0
|
||||
movs r5, #0
|
||||
strh r1, [r6, #0x2e]
|
||||
ldrh r1, [r3, #6]
|
||||
movs r0, #0xfc
|
||||
lsls r0, r0, #4
|
||||
ands r0, r1
|
||||
lsrs r0, r0, #2
|
||||
ldrh r4, [r4, #8]
|
||||
adds r0, r0, r4
|
||||
ldrh r1, [r2, #6]
|
||||
adds r1, r1, r0
|
||||
strh r1, [r6, #0x32]
|
||||
bl sub_080809D4
|
||||
ldr r0, _0807C85C @ =gUpdateVisibleTiles
|
||||
strb r5, [r0]
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0807C850: .4byte gUnk_03004030
|
||||
_0807C854: .4byte gPlayerEntity
|
||||
_0807C858: .4byte gRoomControls
|
||||
_0807C85C: .4byte gUpdateVisibleTiles
|
||||
.syntax divided
|
||||
@@ -37,7 +37,7 @@
|
||||
bl sub_0807BBE4
|
||||
bl sub_0807BC84
|
||||
bl sub_0805E248
|
||||
ldr r0, _08080190 @ =gUnk_02019EE0
|
||||
ldr r0, _08080190 @ =gMapDataBottomSpecial
|
||||
adds r1, r5, #0
|
||||
bl sub_0801AB08
|
||||
ldr r0, _08080194 @ =gMapDataTopSpecial
|
||||
@@ -51,6 +51,6 @@ _08080180: .4byte gUnk_02034480
|
||||
_08080184: .4byte gUnk_0200B640
|
||||
_08080188: .4byte gUnk_02022830
|
||||
_0808018C: .4byte gUnk_020246B0
|
||||
_08080190: .4byte gUnk_02019EE0
|
||||
_08080190: .4byte gMapDataBottomSpecial
|
||||
_08080194: .4byte gMapDataTopSpecial
|
||||
.syntax divided
|
||||
|
||||
@@ -9,7 +9,7 @@ _080A73B4:
|
||||
bl DeleteAllEntities
|
||||
bl sub_0805E974
|
||||
ldr r1, _080A746C @ =gCurrentRoomProperties
|
||||
ldr r5, _080A7470 @ =gUnk_02032EC0
|
||||
ldr r5, _080A7470 @ =gUI
|
||||
ldr r0, [r5, #0x10]
|
||||
str r0, [r1]
|
||||
ldr r0, _080A7474 @ =gPlayerState
|
||||
@@ -84,7 +84,7 @@ _080A73B4:
|
||||
.align 2, 0
|
||||
_080A7468: .4byte gFadeControl
|
||||
_080A746C: .4byte gCurrentRoomProperties
|
||||
_080A7470: .4byte gUnk_02032EC0
|
||||
_080A7470: .4byte gUI
|
||||
_080A7474: .4byte gPlayerState
|
||||
_080A7478: .4byte gMapBottom
|
||||
_080A747C: .4byte gMapTop
|
||||
@@ -102,7 +102,7 @@ _080A74A8:
|
||||
ldrh r0, [r5, #0xa]
|
||||
bl SetFadeInverted
|
||||
_080A74AE:
|
||||
ldr r1, _080A74C0 @ =gUnk_02032EC0
|
||||
ldr r1, _080A74C0 @ =gUI
|
||||
movs r2, #0
|
||||
movs r0, #4
|
||||
strb r0, [r1]
|
||||
@@ -112,6 +112,6 @@ _080A74AE:
|
||||
_080A74BC:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_080A74C0: .4byte gUnk_02032EC0
|
||||
_080A74C0: .4byte gUI
|
||||
_080A74C4: .4byte gRoomTransition
|
||||
.syntax divided
|
||||
|
||||
@@ -175,7 +175,7 @@ _080A5658:
|
||||
cmp r5, r1
|
||||
blo _080A5658
|
||||
_080A5672:
|
||||
ldr r5, _080A56B0 @ =gUnk_02019EE0
|
||||
ldr r5, _080A56B0 @ =gMapDataBottomSpecial
|
||||
ldrb r0, [r5]
|
||||
cmp r0, #0
|
||||
beq _080A570E
|
||||
@@ -199,7 +199,7 @@ _080A56A0: .4byte gMenu
|
||||
_080A56A4: .4byte gMain
|
||||
_080A56A8: .4byte gSpriteAnimations_322
|
||||
_080A56ACEU: .4byte 0x00000143
|
||||
_080A56B0: .4byte gUnk_02019EE0
|
||||
_080A56B0: .4byte gMapDataBottomSpecial
|
||||
_080A56B4: .4byte gScreen
|
||||
_080A56B8:
|
||||
cmp r0, #3
|
||||
@@ -428,7 +428,7 @@ _080A5E64:
|
||||
cmp r5, r1
|
||||
blo _080A5E64
|
||||
_080A5E7C:
|
||||
ldr r5, _080A5EB8 @ =gUnk_02019EE0
|
||||
ldr r5, _080A5EB8 @ =gMapDataBottomSpecial
|
||||
ldrb r0, [r5]
|
||||
cmp r0, #0
|
||||
beq _080A5F14
|
||||
@@ -452,7 +452,7 @@ _080A5EA8: .4byte gMenu
|
||||
_080A5EAC: .4byte gMain
|
||||
_080A5EB0: .4byte 0x000001FB
|
||||
_080A5EB4: .4byte gSpriteAnimations_322
|
||||
_080A5EB8: .4byte gUnk_02019EE0
|
||||
_080A5EB8: .4byte gMapDataBottomSpecial
|
||||
_080A5EBC: .4byte gScreen
|
||||
_080A5EC0:
|
||||
cmp r0, #3
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
movs r0, #0
|
||||
bl SetColor
|
||||
ldr r1, _080A659C @ =gUnk_08128F4C
|
||||
ldr r0, _080A65A0 @ =gUnk_02032EC0
|
||||
ldr r0, _080A65A0 @ =gUI
|
||||
ldrb r0, [r0, #3]
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
@@ -44,7 +44,7 @@ _080A6590: .4byte gScreen
|
||||
_080A6594: .4byte 0x0000F7FF
|
||||
_080A6598: .4byte gPaletteBuffer
|
||||
_080A659C: .4byte gUnk_08128F4C
|
||||
_080A65A0: .4byte gUnk_02032EC0
|
||||
_080A65A0: .4byte gUI
|
||||
_080A65A4: .4byte gSave
|
||||
_080A65A8: .4byte gMenu
|
||||
.syntax divided
|
||||
|
||||
@@ -74,7 +74,7 @@ _080A5F30:
|
||||
ands r0, r1
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r6, r0, #0x18
|
||||
ldr r4, _080A5F80 @ =gUnk_02019EE0
|
||||
ldr r4, _080A5F80 @ =gMapDataBottomSpecial
|
||||
ldrh r0, [r4, #2]
|
||||
cmp r0, #0
|
||||
beq _080A5FAE
|
||||
@@ -92,7 +92,7 @@ _080A5F66:
|
||||
_080A5F74: .4byte gOamCmd
|
||||
_080A5F78: .4byte gMenu
|
||||
_080A5F7C: .4byte gUnk_08128E94
|
||||
_080A5F80: .4byte gUnk_02019EE0
|
||||
_080A5F80: .4byte gMapDataBottomSpecial
|
||||
_080A5F84:
|
||||
cmp r6, #0
|
||||
bne _080A5F8A
|
||||
@@ -195,7 +195,7 @@ _080A6738:
|
||||
ands r0, r1
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r6, r0, #0x18
|
||||
ldr r4, _080A678C @ =gUnk_02019EE0
|
||||
ldr r4, _080A678C @ =gMapDataBottomSpecial
|
||||
ldrh r0, [r4, #2]
|
||||
cmp r0, #0
|
||||
beq _080A67BA
|
||||
@@ -214,7 +214,7 @@ _080A677C: .4byte gOamCmd
|
||||
_080A6780: .4byte gMenu
|
||||
_080A6784: .4byte gUnk_08128E94
|
||||
_080A6788: .4byte 0x000001FB
|
||||
_080A678C: .4byte gUnk_02019EE0
|
||||
_080A678C: .4byte gMapDataBottomSpecial
|
||||
_080A6790:
|
||||
cmp r6, #0
|
||||
bne _080A6796
|
||||
|
||||
@@ -31,7 +31,7 @@ _080A67F4:
|
||||
movs r5, #0x71
|
||||
b _080A6822
|
||||
_080A6802:
|
||||
ldr r1, _080A68AC @ =gUnk_02032EC0
|
||||
ldr r1, _080A68AC @ =gUI
|
||||
adds r0, r1, #0
|
||||
adds r0, #0x20
|
||||
ldrb r0, [r0]
|
||||
@@ -113,13 +113,13 @@ _080A6886:
|
||||
ldrb r0, [r4, #2]
|
||||
lsrs r0, r0, #1
|
||||
strh r0, [r1, #0xa]
|
||||
ldr r0, _080A68D0 @ =gUnk_02019EE0
|
||||
ldr r0, _080A68D0 @ =gMapDataBottomSpecial
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #3
|
||||
bl MemClear
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_080A68AC: .4byte gUnk_02032EC0
|
||||
_080A68AC: .4byte gUI
|
||||
_080A68B0: .4byte gUnk_08128E94
|
||||
_080A68B4: .4byte gUnk_03003DE4
|
||||
_080A68B8: .4byte gUnk_02017AA0
|
||||
@@ -128,5 +128,5 @@ _080A68C0: .4byte 0x00001E0B
|
||||
_080A68C4: .4byte 0x0400000E
|
||||
_080A68C8: .4byte 0xA2600001
|
||||
_080A68CC: .4byte gMenu
|
||||
_080A68D0: .4byte gUnk_02019EE0
|
||||
_080A68D0: .4byte gMapDataBottomSpecial
|
||||
.syntax divided
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
adds r2, #0x2d
|
||||
ldrb r0, [r2]
|
||||
lsls r0, r0, #3
|
||||
ldr r3, _080A69DC @ =gUnk_02019EE0
|
||||
ldr r3, _080A69DC @ =gMapDataBottomSpecial
|
||||
adds r0, r0, r3
|
||||
lsrs r1, r5, #8
|
||||
strb r1, [r0]
|
||||
@@ -38,5 +38,5 @@ _080A69D4:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_080A69D8: .4byte gMenu
|
||||
_080A69DC: .4byte gUnk_02019EE0
|
||||
_080A69DC: .4byte gMapDataBottomSpecial
|
||||
.syntax divided
|
||||
|
||||
@@ -16,7 +16,7 @@ sub_0808C964: @ 0x0808C964
|
||||
ldrb r0, [r4, #9]
|
||||
cmp r0, #0x76
|
||||
bne _0808C982
|
||||
ldr r0, _0808CA08 @ =gUnk_02032EC0
|
||||
ldr r0, _0808CA08 @ =gUI
|
||||
adds r0, #0x20
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #2
|
||||
@@ -93,7 +93,7 @@ _0808C9FA:
|
||||
_0808CA04:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0808CA08: .4byte gUnk_02032EC0
|
||||
_0808CA08: .4byte gUI
|
||||
_0808CA0C: .4byte gArea
|
||||
|
||||
thumb_func_start sub_0808CA10
|
||||
|
||||
+2
-2
@@ -92,7 +92,7 @@ UpdateScrollVram: @ 0x08000108
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _08000126
|
||||
ldr r0, _080001F0 @ =gUnk_02019EE0
|
||||
ldr r0, _080001F0 @ =gMapDataBottomSpecial
|
||||
ldr r1, _080001F4 @ =gUnk_02021F70
|
||||
bl _call_via_r4
|
||||
_08000126:
|
||||
@@ -197,7 +197,7 @@ GetTileIndex: @ 0x080001DA
|
||||
.align 2, 0
|
||||
_080001E8: .4byte gUpdateVisibleTiles
|
||||
_080001EC: .4byte gMapBottom
|
||||
_080001F0: .4byte gUnk_02019EE0
|
||||
_080001F0: .4byte gMapDataBottomSpecial
|
||||
_080001F4: .4byte gUnk_02021F70
|
||||
_080001F8: .4byte gMapTop
|
||||
_080001FC: .4byte gMapDataTopSpecial
|
||||
|
||||
+60
-60
@@ -544,108 +544,108 @@ gAreaRoomMaps_CrenelMinishPaths:: @ 08103D24
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_0:: @ 08103D34
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_0_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_0_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_0_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_0_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_1:: @ 08103D58
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_1_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_1_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_1_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_1_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_2:: @ 08103D7C
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_2_1, 0x1D0, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_2_2, 0x1000, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_2_1, 0x1D0, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_2_2, 0x1000, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_3:: @ 08103DA0
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_3_1, 0xA0, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_3_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_3_1, 0xA0, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_3_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_4:: @ 08103DC4
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_4_1, 0xA0, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_4_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_4_1, 0xA0, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_4_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_5:: @ 08103DE8
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_5_1, 0xA0, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_5_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_5_1, 0xA0, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_5_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_6:: @ 08103E0C
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_6_1, 0xA0, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_6_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_6_1, 0xA0, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_6_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_8:: @ 08103E30
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_8_1, 0xE1, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_8_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_8_1, 0xE1, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_8_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_7:: @ 08103E54
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_7_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_7_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_7_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_7_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_9:: @ 08103E78
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_9_1, 0x159, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_9_2, 0x1000, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_9_1, 0x159, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_9_2, 0x1000, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_10:: @ 08103E9C
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_10_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_10_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_10_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_10_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_11:: @ 08103EC0
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_11_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_11_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_11_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_11_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_12:: @ 08103EE4
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_12_1, 0xDC, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_12_2, 0x1000, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_12_1, 0xDC, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_12_2, 0x1000, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_13:: @ 08103F08
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_13_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_13_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_13_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_13_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_14:: @ 08103F2C
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_14_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_14_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_14_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_14_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_15:: @ 08103F50
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_15_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_15_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_15_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_15_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_16:: @ 08103F74
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_16_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_16_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_16_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_16_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_17:: @ 08103F98
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_17_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_17_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_17_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_17_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_18:: @ 08103FBC
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_18_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_18_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_18_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_18_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_19:: @ 08103FE0
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_19_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_19_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_19_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_19_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_MinishHouseInteriors_20:: @ 08104004
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_MinishHouseInteriors_20_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_MinishHouseInteriors_20_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_MinishHouseInteriors_20_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_MinishHouseInteriors_20_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMaps_MinishHouseInteriors:: @ 08104028
|
||||
.4byte gAreaRoomMap_MinishHouseInteriors_0
|
||||
@@ -691,48 +691,48 @@ gAreaRoomMaps_MinishHouseInteriors:: @ 08104028
|
||||
|
||||
gAreaRoomMap_TownMinishHoles_0:: @ 081040C8
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_TownMinishHoles_0_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_TownMinishHoles_0_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_TownMinishHoles_0_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_TownMinishHoles_0_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_TownMinishHoles_1:: @ 081040EC
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_TownMinishHoles_1_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_TownMinishHoles_1_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_TownMinishHoles_1_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_TownMinishHoles_1_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_TownMinishHoles_2:: @ 08104110
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_TownMinishHoles_2_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_TownMinishHoles_2_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_TownMinishHoles_2_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_TownMinishHoles_2_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_TownMinishHoles_3:: @ 08104134
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_TownMinishHoles_3_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_TownMinishHoles_3_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_TownMinishHoles_3_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_TownMinishHoles_3_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_TownMinishHoles_4:: @ 08104158
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_TownMinishHoles_4_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_TownMinishHoles_4_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_TownMinishHoles_4_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_TownMinishHoles_4_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_TownMinishHoles_5:: @ 0810417C
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_TownMinishHoles_5_1, 0x96, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_TownMinishHoles_5_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_TownMinishHoles_5_1, 0x96, 1
|
||||
map_bottom_special offset_gAreaRoomMap_TownMinishHoles_5_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_TownMinishHoles_6:: @ 081041A0
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_TownMinishHoles_6_1, 0x24C, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_TownMinishHoles_6_2, 0x2000, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_TownMinishHoles_6_1, 0x24C, 1
|
||||
map_bottom_special offset_gAreaRoomMap_TownMinishHoles_6_2, 0x2000, 1, 1
|
||||
|
||||
gAreaRoomMap_TownMinishHoles_7:: @ 081041C4
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_TownMinishHoles_7_1, 0xE1, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_TownMinishHoles_7_2, 0x800, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_TownMinishHoles_7_1, 0xE1, 1
|
||||
map_bottom_special offset_gAreaRoomMap_TownMinishHoles_7_2, 0x800, 1, 1
|
||||
|
||||
gAreaRoomMap_TownMinishHoles_8:: @ 081041E8
|
||||
map_bottom offset_gAreaRoomMap_TownMinishHoles_8_0, 0x2000, 1
|
||||
map_unknown offset_gAreaRoomMap_TownMinishHoles_8_1, 0x190, 1
|
||||
map_unknown_2 offset_gAreaRoomMap_TownMinishHoles_8_2, 0x2000, 1, 1
|
||||
collision_bottom offset_gAreaRoomMap_TownMinishHoles_8_1, 0x190, 1
|
||||
map_bottom_special offset_gAreaRoomMap_TownMinishHoles_8_2, 0x2000, 1, 1
|
||||
|
||||
gAreaRoomMaps_TownMinishHoles:: @ 0810420C
|
||||
.4byte gAreaRoomMap_TownMinishHoles_0
|
||||
|
||||
@@ -506,6 +506,7 @@ extern u8 gManagerCount;
|
||||
|
||||
/** @name Tile Macros */ /// @{
|
||||
#define TILE(x, y) (((((x)-gRoomControls.origin_x) >> 4) & 0x3F) | ((((y)-gRoomControls.origin_y) >> 4) & 0x3F) << 6)
|
||||
#define TILE_POS(x, y) (x + (y << 6))
|
||||
#define COORD_TO_TILE(entity) TILE((entity)->x.HALF.HI, (entity)->y.HALF.HI)
|
||||
#define COORD_TO_TILE_OFFSET(entity, xOff, yOff) TILE((entity)->x.HALF.HI - (xOff), (entity)->y.HALF.HI - (yOff))
|
||||
/// @}
|
||||
|
||||
@@ -53,7 +53,7 @@ typedef struct {
|
||||
/*0x08*/ s8 saveStatus[3];
|
||||
/*0x0b*/ SaveFile saves[3];
|
||||
} struct_02019EE0;
|
||||
extern struct_02019EE0 gUnk_02019EE0;
|
||||
extern struct_02019EE0 gMapDataBottomSpecial;
|
||||
// TODO size: 0x8000 from ClearTilemaps?
|
||||
|
||||
extern void sub_08056FEC(u32, struct_020227E8*);
|
||||
|
||||
+1
-1
@@ -214,7 +214,7 @@ extern void sub_0807ACCC(Entity*);
|
||||
extern u32 sub_0807B014();
|
||||
extern void sub_0807B0C8(void);
|
||||
extern void sub_0807B7D8(u32, u32, u32);
|
||||
extern void sub_0807B9B8(s32, s32, s32);
|
||||
extern void sub_0807B9B8(u32, u32, u32);
|
||||
extern void sub_0807BA8C(u32, u32);
|
||||
extern void sub_0807BB68(s16*, u32, u32);
|
||||
extern bool32 sub_0807BD14(Entity*, u32);
|
||||
|
||||
+2
-2
@@ -82,8 +82,8 @@ typedef struct {
|
||||
} UI;
|
||||
static_assert(sizeof(UI) == 0x3b4);
|
||||
|
||||
extern Main gMain; /**< Main instance. */
|
||||
extern UI gUnk_02032EC0; /**< UI instance. */
|
||||
extern Main gMain; /**< Main instance. */
|
||||
extern UI gUI; /**< UI instance. */
|
||||
|
||||
/**
|
||||
* Program entry point.
|
||||
|
||||
+3
-2
@@ -137,7 +137,7 @@ typedef struct {
|
||||
u16 unk_06;
|
||||
} DiggingCaveEntrance;
|
||||
|
||||
extern struct {
|
||||
typedef struct {
|
||||
DiggingCaveEntrance* unk_00;
|
||||
u16 unk_04;
|
||||
u16 unk_06;
|
||||
@@ -145,7 +145,8 @@ extern struct {
|
||||
u8 unk_09;
|
||||
u8 unk_0a;
|
||||
u8 unk_0b;
|
||||
} gUnk_03004030;
|
||||
} struct_03004030;
|
||||
extern struct_03004030 gUnk_03004030;
|
||||
|
||||
extern DiggingCaveEntrance* diggingCaveEntrances[];
|
||||
|
||||
|
||||
+8
-8
@@ -4,14 +4,14 @@
|
||||
#include "global.h"
|
||||
|
||||
typedef struct {
|
||||
u16* bgControlPtr; // Points to the BgSettings.control field for the bg belonging to this layer?
|
||||
u16 _4[0x1000]; // tilemap data? <-- gMapDataTop / gMapDataBottom
|
||||
u8 _2004[0x1000]; // more tilemap data? <-- gUnk_0200D654 / gUnk_02027EB4
|
||||
u8 _3004[0x1000]; // more tilemap data? <-- gUnk_0200E654 / gUnk_02028EB4
|
||||
u8 _4004[0x1000]; // gMetatileTypesTop, gMetatileTypesBottom
|
||||
s16 _5004[0x500]; // gUnk_02011654,gUnk_0202BEB4
|
||||
// Maybe even include here gMetatilesTop, gUnk_02016654 ?
|
||||
// gMetatilesBottom, gUnk_02030EB4
|
||||
/*0x0000*/ u16* bgControlPtr; // Points to the BgSettings.control field for the bg belonging to this layer?
|
||||
/*0x0004*/ u16 mapData[0x1000]; // tilemap data? <-- gMapDataTop / gMapDataBottom
|
||||
/*0x2004*/ u8 collisionData[0x1000]; // more tilemap data? <-- gUnk_0200D654 / gUnk_02027EB4
|
||||
/*0x3004*/ u16 mapDataClone[0x1000]; // more tilemap data? <-- gUnk_0200E654 / gUnk_02028EB4
|
||||
/*0x5004*/ u16 metatileTypes[0x800]; // gMetatileTypesTop, gMetatileTypesBottom
|
||||
/*0x6004*/ u16 unkData2[0x800]; // gUnk_02011654,gUnk_0202BEB4
|
||||
/*0x7004*/ u16 metatiles[0x2000]; // gMetatilesTop, gMetatilesBottom
|
||||
/*0xb004*/ u8 unkData3[0x1000]; // gUnk_02016654, gUnk_02030EB4
|
||||
} LayerStruct;
|
||||
|
||||
extern LayerStruct gMapTop;
|
||||
|
||||
@@ -68,7 +68,7 @@ SECTIONS {
|
||||
. = 0x00018EA0; gUnk_02018EA0 = .;
|
||||
. = 0x00018EB0; gUnk_02018EB0 = .;
|
||||
. = 0x00018EE0; gUnk_02018EE0 = .;
|
||||
. = 0x00019EE0; gUnk_02019EE0 = .;
|
||||
. = 0x00019EE0; gMapDataBottomSpecial = .;
|
||||
. = 0x0001AEE0; gUnk_0201AEE0 = .;
|
||||
. = 0x00021EE0; gSoundPlayingInfo = .;
|
||||
. = 0x00021F00; gUnk_02021F00 = .;
|
||||
@@ -104,7 +104,7 @@ SECTIONS {
|
||||
. = 0x0002CEB4; gMetatilesBottom = .;
|
||||
. = 0x00030EB4; gUnk_02030EB4 = .;
|
||||
. = 0x00031EC0; gUnk_02031EC0 = .;
|
||||
. = 0x00032EC0; gUnk_02032EC0 = .;
|
||||
. = 0x00032EC0; gUI = .;
|
||||
. = 0x00032EDC; gUnk_02032EDC = .;
|
||||
. = 0x00032F14; gUnk_02032F14 = .;
|
||||
. = 0x00033280; gActiveScriptInfo = .;
|
||||
|
||||
+4
-3
@@ -174,6 +174,7 @@ void sub_0806F704(Entity* ent, u32 a2) {
|
||||
ent->y.HALF.HI = (((a2 >> 2) & 0x3F0) | 8) + gRoomControls.origin_y;
|
||||
}
|
||||
|
||||
/** Calculates the tile position of the player but modifies it by the hitbox depending on the animation state. */
|
||||
u32 sub_0806F730(Entity* ent) {
|
||||
u32 tmp = 0x3F;
|
||||
u32 x = ent->x.HALF.HI + ent->hitbox->offset_x - gRoomControls.origin_x;
|
||||
@@ -203,16 +204,16 @@ u32 sub_0806F798(Entity* ent) {
|
||||
}
|
||||
|
||||
u32 sub_0806F7D0(Entity* ent) {
|
||||
return gMapBottom._2004[sub_0806F730(ent)];
|
||||
return gMapBottom.collisionData[sub_0806F730(ent)];
|
||||
}
|
||||
|
||||
u32 sub_0806F7EC(Entity* ent) {
|
||||
return gMapBottom._4[sub_0806F730(ent)];
|
||||
return gMapBottom.mapData[sub_0806F730(ent)];
|
||||
}
|
||||
|
||||
u32 sub_0806F804(u32 x, u32 y) {
|
||||
u32 idx = ((x >> 4) & 0x3F) + 4 * (y & 0x3F0);
|
||||
return gMapBottom._4[idx];
|
||||
return gMapBottom.mapData[idx];
|
||||
}
|
||||
|
||||
u32 sub_0806F824(Entity* a, Entity* b, s32 x, s32 y) {
|
||||
|
||||
+2
-2
@@ -33,12 +33,12 @@ void sub_0805FA04(void) {
|
||||
gScreen.bg3.control = BGCNT_SCREENBASE(30) | BGCNT_PRIORITY(3) | BGCNT_CHARBASE(3);
|
||||
gScreen.bg3.updated = 1;
|
||||
MessageInitialize();
|
||||
MemClear((void*)&gUnk_02032EC0, sizeof(UI));
|
||||
MemClear((void*)&gUI, sizeof(UI));
|
||||
MemClear((void*)&gGenericMenu, sizeof(GenericMenu));
|
||||
gGenericMenu.unk16 = gSaveHeader->language;
|
||||
LoadGfxGroups();
|
||||
SetColor(0, 0x1144);
|
||||
gMain.state = 1;
|
||||
gMain.state = GAMETASK_INIT;
|
||||
InitSoundPlayingInfo();
|
||||
ResetFadeMask();
|
||||
}
|
||||
|
||||
+6
-6
@@ -46,7 +46,7 @@ void sub_080A2E40(void) {
|
||||
EraseAllEntities();
|
||||
ResetPalettes();
|
||||
ResetPaletteTable(0);
|
||||
MemClear(&gUnk_02032EC0, sizeof gUnk_02032EC0);
|
||||
MemClear(&gUI, sizeof gUI);
|
||||
MemClear(&gChooseFileState, sizeof gChooseFileState);
|
||||
MemClear(&gBG0Buffer, sizeof gBG0Buffer);
|
||||
LoadGfxGroups();
|
||||
@@ -73,7 +73,7 @@ void sub_080A2E40(void) {
|
||||
*(u8*)(addr + 4) = 0;
|
||||
}
|
||||
sub_080A3198(0, 0);
|
||||
gMain.state = 1;
|
||||
gMain.state = GAMETASK_INIT;
|
||||
SoundReq(BGM_FILE_SELECT);
|
||||
SetFade(4, 8);
|
||||
}
|
||||
@@ -81,18 +81,18 @@ void sub_080A2E40(void) {
|
||||
void sub_080A2F8C(void) {
|
||||
if (gFadeControl.active == 0) {
|
||||
switch (gMain.substate) {
|
||||
case 0:
|
||||
gMain.substate = 1;
|
||||
case GAMEMAIN_INITROOM:
|
||||
gMain.substate = GAMEMAIN_CHANGEROOM;
|
||||
{
|
||||
// TODO write to 0x2000005
|
||||
u32 addr = (0x80 << 0x12);
|
||||
*(u8*)(addr + 5) = 1;
|
||||
*(u8*)(addr + 6) = 1;
|
||||
}
|
||||
gMain.state = 2;
|
||||
gMain.state = GAMETASK_MAIN;
|
||||
SetFade(5, 8);
|
||||
break;
|
||||
case 1:
|
||||
case GAMEMAIN_CHANGEROOM:
|
||||
SetTask(TASK_GAME);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
extern u8 gEntCount;
|
||||
extern u8 gMapDataTopSpecial[];
|
||||
|
||||
extern u16 gUnk_02019EE0[];
|
||||
extern u16 gMapDataBottomSpecial[];
|
||||
|
||||
extern void sub_080197D4(const void*);
|
||||
|
||||
@@ -86,7 +86,7 @@ void GyorgFemale_Setup(GyorgFemaleEntity* this) {
|
||||
this->eyesVulnerable = 0;
|
||||
this->unk_79 = 0;
|
||||
this->childrenSpawnTimer = 0x3C;
|
||||
MemClear(&gUnk_02019EE0, 0x8000);
|
||||
MemClear(&gMapDataBottomSpecial, 0x8000);
|
||||
MemClear(&gMapDataTopSpecial, 0x8000);
|
||||
sub_0804660C(this, 0);
|
||||
sub_080464C0(this);
|
||||
@@ -215,7 +215,7 @@ void GyorgFemale_Action3(GyorgFemaleEntity* this) {
|
||||
|
||||
#ifndef EU
|
||||
void sub_08046498(GyorgFemaleEntity* this) {
|
||||
MemClear(&gUnk_02019EE0, 0x8000);
|
||||
MemClear(&gMapDataBottomSpecial, 0x8000);
|
||||
MemClear(&gMapDataTopSpecial, 0x8000);
|
||||
sub_080464C0(this);
|
||||
}
|
||||
@@ -233,12 +233,12 @@ void sub_080464C0(GyorgFemaleEntity* this) {
|
||||
u8* dst;
|
||||
sub_080197D4(gUnk_080D1A74[super->animationState >> 6]);
|
||||
sub_08046518();
|
||||
for (i = 0x20, src = ((u8*)&gUnk_02019EE0), dst = ((u8*)&gUnk_02019EE0) + 0x3260; i != 0; i--) {
|
||||
for (i = 0x20, src = ((u8*)&gMapDataBottomSpecial), dst = ((u8*)&gMapDataBottomSpecial) + 0x3260; i != 0; i--) {
|
||||
MemCopy(src, dst, 0x40);
|
||||
dst += 0x100;
|
||||
src += 0x40;
|
||||
}
|
||||
MemClear(&gUnk_02019EE0, 0x800);
|
||||
MemClear(&gMapDataBottomSpecial, 0x800);
|
||||
gUpdateVisibleTiles = 1;
|
||||
}
|
||||
|
||||
@@ -271,7 +271,7 @@ void sub_080465C8(void) {
|
||||
s32 x, y;
|
||||
x = (gPlayerEntity.x.HALF.HI - gRoomControls.origin_x) >> 3;
|
||||
y = (gPlayerEntity.y.HALF.HI - gRoomControls.origin_y) >> 3;
|
||||
if (gUnk_02019EE0[(y << 7) + x]) {
|
||||
if (gMapDataBottomSpecial[(y << 7) + x]) {
|
||||
gPlayerState.field_0x14 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1133,7 +1133,7 @@ void sub_08048004(GyorgMaleEntity* this) {
|
||||
if (b == 3) {
|
||||
s32 posX = ((gPlayerEntity.x.HALF.HI - gRoomControls.origin_x) >> 3);
|
||||
s32 posY = ((gPlayerEntity.y.HALF.HI - gRoomControls.origin_y) >> 3);
|
||||
u16* tmp = (u16*)&gUnk_02019EE0;
|
||||
u16* tmp = (u16*)&gMapDataBottomSpecial;
|
||||
if (tmp[(posY << 7) + posX]) {
|
||||
if (!(this->unk_7c & 2)) {
|
||||
this->unk_7c |= 0x80;
|
||||
|
||||
@@ -112,7 +112,7 @@ void sub_08037E14(Entity* this) {
|
||||
s32 x, y;
|
||||
this->actionDelay = 0x8;
|
||||
dir = (GetFacingDirection(this, &gPlayerEntity) + 4) & 0x18;
|
||||
layer = (u8*)GetLayerByIndex(this->collisionLayer)->_2004;
|
||||
layer = (u8*)GetLayerByIndex(this->collisionLayer)->collisionData;
|
||||
ptr = gUnk_080CF498 + (dir >> 2);
|
||||
x = this->x.HALF.HI + *ptr;
|
||||
y = this->y.HALF.HI + *(ptr + 1);
|
||||
|
||||
@@ -27,7 +27,6 @@ extern void sub_08033D78(SpinyBeetleEntity*);
|
||||
extern u32 sub_08033DF0(SpinyBeetleEntity*);
|
||||
extern void SpinyBeetle_SetHitType(SpinyBeetleEntity*);
|
||||
extern void EnemyFunctionHandlerAfterCollision(Entity*, EntityActionArray);
|
||||
extern void sub_0807B9B8(s32, s32, s32);
|
||||
extern u32 sub_0804A024(Entity*, u32, u32);
|
||||
|
||||
void SpinyBeetle(Entity* this) {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "screen.h"
|
||||
#include "object.h"
|
||||
#include "functions.h"
|
||||
#include "game.h"
|
||||
|
||||
typedef struct {
|
||||
u8 filler[18];
|
||||
@@ -19,7 +20,7 @@ extern struct_02018EB0 gUnk_02018EB0;
|
||||
|
||||
u32 IsEnterPortal(void) {
|
||||
if (gArea.playShrinkSeq) {
|
||||
gMain.substate = 4;
|
||||
gMain.substate = GAMEMAIN_MINISHPORTAL;
|
||||
gArea.filler[8] = 0;
|
||||
gArea.filler[9] = 0;
|
||||
*(u16*)&gArea.filler[10] = 0;
|
||||
|
||||
+91
-87
@@ -15,6 +15,7 @@
|
||||
#include "functions.h"
|
||||
#include "subtask.h"
|
||||
#include "item.h"
|
||||
#include "game.h"
|
||||
|
||||
// copy, erase, start
|
||||
#define NUM_FILE_OPERATIONS 3
|
||||
@@ -30,7 +31,7 @@ typedef enum {
|
||||
STATE_START,
|
||||
} FileSelectState;
|
||||
|
||||
// todo: does this belong with gUnk_02019EE0?
|
||||
// todo: does this belong with gMapDataBottomSpecial?
|
||||
typedef enum {
|
||||
SAVE_EMPTY = 0,
|
||||
SAVE_VALID = 1,
|
||||
@@ -132,7 +133,7 @@ void sub_080503A8(u32 gfxGroup) {
|
||||
}
|
||||
|
||||
void SetFileSelectState(FileSelectState mode) {
|
||||
gUnk_02032EC0.state = mode;
|
||||
gUI.state = mode;
|
||||
MemClear(&gBG0Buffer, sizeof(gBG0Buffer));
|
||||
MemClear(&gBG1Buffer, sizeof(gBG1Buffer));
|
||||
}
|
||||
@@ -146,7 +147,7 @@ void LoadOptionsFromSave(u32 idx) {
|
||||
msg_speed = 1;
|
||||
brightness = 1;
|
||||
} else {
|
||||
SaveFile* saveFile = &gUnk_02019EE0.saves[idx];
|
||||
SaveFile* saveFile = &gMapDataBottomSpecial.saves[idx];
|
||||
msg_speed = saveFile->msg_speed;
|
||||
brightness = saveFile->brightness;
|
||||
}
|
||||
@@ -159,7 +160,7 @@ void LoadOptionsFromSave(u32 idx) {
|
||||
void SetActiveSave(u32 idx) {
|
||||
if (idx < NUM_SAVE_SLOTS) {
|
||||
gSaveHeader->saveFileId = idx;
|
||||
MemCopy(&gUnk_02019EE0.saves[idx], &gSave, sizeof(gUnk_02019EE0.saves[idx]));
|
||||
MemCopy(&gMapDataBottomSpecial.saves[idx], &gSave, sizeof(gMapDataBottomSpecial.saves[idx]));
|
||||
}
|
||||
LoadOptionsFromSave(idx);
|
||||
}
|
||||
@@ -167,8 +168,8 @@ void SetActiveSave(u32 idx) {
|
||||
void FileSelectTask(void) {
|
||||
FlushSprites();
|
||||
sTaskHandlers[gMain.state]();
|
||||
if (gUnk_02032EC0.lastState != gUnk_02032EC0.state) {
|
||||
gUnk_02032EC0.lastState = gUnk_02032EC0.state;
|
||||
if (gUI.lastState != gUI.state) {
|
||||
gUI.lastState = gUI.state;
|
||||
gScreen.bg0.xOffset = 0;
|
||||
gScreen.bg0.yOffset = 0;
|
||||
gScreen.bg1.xOffset = 0;
|
||||
@@ -179,17 +180,17 @@ void FileSelectTask(void) {
|
||||
}
|
||||
|
||||
HideButtonR();
|
||||
sFileScreenSubHandlers[gUnk_02032EC0.lastState]();
|
||||
sFileScreenSubHandlers[gUI.lastState]();
|
||||
|
||||
gUnk_02019EE0.isTransitioning = FALSE;
|
||||
gMapDataBottomSpecial.isTransitioning = FALSE;
|
||||
UpdateEntities();
|
||||
sub_0805066C();
|
||||
sub_0801C1D4();
|
||||
DrawOAMCmd();
|
||||
DrawEntities();
|
||||
CopyOAM();
|
||||
if (gUnk_02019EE0.unk3 != gSaveHeader->language) {
|
||||
gUnk_02019EE0.unk3 = gSaveHeader->language;
|
||||
if (gMapDataBottomSpecial.unk3 != gSaveHeader->language) {
|
||||
gMapDataBottomSpecial.unk3 = gSaveHeader->language;
|
||||
sub_080503A8(0x6);
|
||||
sub_080503A8(0xF);
|
||||
}
|
||||
@@ -207,11 +208,11 @@ static void HandleFileScreenEnter(void) {
|
||||
ResetPalettes();
|
||||
ResetPaletteTable(0);
|
||||
MemClear(&gUnk_0200AF00, sizeof(gUnk_0200AF00));
|
||||
MemClear(&gUnk_02019EE0, sizeof(gUnk_02019EE0));
|
||||
gUnk_02019EE0.unk3 = 7;
|
||||
gUnk_02019EE0.unk6 = gSaveHeader->language > LANGUAGE_EN ? 3 : 0;
|
||||
MemClear(&gUnk_02032EC0, sizeof(gUnk_02032EC0));
|
||||
gUnk_02032EC0.lastState = 8;
|
||||
MemClear(&gMapDataBottomSpecial, sizeof(gMapDataBottomSpecial));
|
||||
gMapDataBottomSpecial.unk3 = 7;
|
||||
gMapDataBottomSpecial.unk6 = gSaveHeader->language > LANGUAGE_EN ? 3 : 0;
|
||||
MemClear(&gUI, sizeof(gUI));
|
||||
gUI.lastState = 8;
|
||||
SetFileSelectState(STATE_NONE);
|
||||
InitDMA();
|
||||
sub_08050624(0);
|
||||
@@ -231,7 +232,7 @@ static void HandleFileScreenEnter(void) {
|
||||
gScreen.controls.layerFXControl = BLDCNT_TGT1_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_BLEND;
|
||||
gScreen.controls.alphaBlend = BLDALPHA_BLEND(15, 10);
|
||||
gGFXSlots.unk0 = 1;
|
||||
gMain.state = 1;
|
||||
gMain.state = GAMETASK_INIT;
|
||||
SoundReq(BGM_FILE_SELECT);
|
||||
SetFade(4, 8);
|
||||
}
|
||||
@@ -246,7 +247,7 @@ static void HandleFileScreenExit(void) {
|
||||
}
|
||||
|
||||
static void sub_08050624(u32 idx) {
|
||||
SaveFile* saveFile = &gUnk_02019EE0.saves[idx];
|
||||
SaveFile* saveFile = &gMapDataBottomSpecial.saves[idx];
|
||||
int status = ReadSaveFile(idx, saveFile);
|
||||
switch (status) {
|
||||
case SAVE_DELETED:
|
||||
@@ -256,7 +257,7 @@ static void sub_08050624(u32 idx) {
|
||||
sub_0805194C(idx);
|
||||
break;
|
||||
}
|
||||
gUnk_02019EE0.saveStatus[idx] = status;
|
||||
gMapDataBottomSpecial.saveStatus[idx] = status;
|
||||
}
|
||||
|
||||
static void sub_0805066C(void) {
|
||||
@@ -264,20 +265,20 @@ static void sub_0805066C(void) {
|
||||
const u8* paletteOffset;
|
||||
|
||||
loadNewPalette = FALSE;
|
||||
if (--gUnk_02019EE0.unk1 == 0) {
|
||||
gUnk_02019EE0.unk1 = 16;
|
||||
gUnk_02019EE0.unk2 = (gUnk_02019EE0.unk2 + 1) % 15;
|
||||
if (--gMapDataBottomSpecial.unk1 == 0) {
|
||||
gMapDataBottomSpecial.unk1 = 16;
|
||||
gMapDataBottomSpecial.unk2 = (gMapDataBottomSpecial.unk2 + 1) % 15;
|
||||
loadNewPalette = TRUE;
|
||||
}
|
||||
|
||||
if (gUnk_02019EE0.unk2 == 0) {
|
||||
gUnk_02019EE0.unk2 = 1;
|
||||
gUnk_02019EE0.unk1 = (Random() & 0x7) * 16 + 8;
|
||||
if (gMapDataBottomSpecial.unk2 == 0) {
|
||||
gMapDataBottomSpecial.unk2 = 1;
|
||||
gMapDataBottomSpecial.unk1 = (Random() & 0x7) * 16 + 8;
|
||||
loadNewPalette = TRUE;
|
||||
}
|
||||
|
||||
if (loadNewPalette) {
|
||||
paletteOffset = &gGlobalGfxAndPalettes[gUnk_080FC8DE[gUnk_02019EE0.unk2]];
|
||||
paletteOffset = &gGlobalGfxAndPalettes[gUnk_080FC8DE[gMapDataBottomSpecial.unk2]];
|
||||
#ifdef EU
|
||||
LoadPalettes(&paletteOffset[0x11A60], 11, 1);
|
||||
LoadPalettes(&paletteOffset[0x11B60], 12, 1);
|
||||
@@ -308,7 +309,7 @@ void sub_0805070C(void) {
|
||||
for (i = 0; i < NUM_SAVE_SLOTS; i++) {
|
||||
var0->unk6 = 0;
|
||||
MemClear(var0->unk8, 0x200);
|
||||
name = &gUnk_02019EE0.saves[i].name[0];
|
||||
name = &gMapDataBottomSpecial.saves[i].name[0];
|
||||
for (j = 0; j < FILENAME_LENGTH; j++) {
|
||||
sub_0805F7DC(name[j], var0);
|
||||
}
|
||||
@@ -356,14 +357,14 @@ static void ShowButtonR(void) {
|
||||
|
||||
static void HandleFileSelect(void) {
|
||||
sFileSelectDefaultHandlers[gChooseFileState.state]();
|
||||
sub_08050A64(gUnk_02019EE0.unk6);
|
||||
sub_08050A64(gMapDataBottomSpecial.unk6);
|
||||
}
|
||||
|
||||
void sub_08050848(void) {
|
||||
sub_080503A8(0x7);
|
||||
sub_0805070C();
|
||||
gUnk_02019EE0.unk7 = 0;
|
||||
sub_08050AFC(gUnk_02019EE0.unk6);
|
||||
gMapDataBottomSpecial.unk7 = 0;
|
||||
sub_08050AFC(gMapDataBottomSpecial.unk6);
|
||||
SetMenuType(1);
|
||||
}
|
||||
|
||||
@@ -374,17 +375,17 @@ void sub_0805086C(void) {
|
||||
// transitioning away from submenu
|
||||
void sub_08050888(void) {
|
||||
if (!gFadeControl.active) {
|
||||
switch (gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk7]) {
|
||||
switch (gMapDataBottomSpecial.saveStatus[gMapDataBottomSpecial.unk7]) {
|
||||
case SAVE_EMPTY:
|
||||
sub_0805194C(gUnk_02019EE0.unk7);
|
||||
sub_0805194C(gMapDataBottomSpecial.unk7);
|
||||
gChooseFileState.subState = 2;
|
||||
break;
|
||||
case SAVE_VALID:
|
||||
gChooseFileState.subState = 2;
|
||||
break;
|
||||
default:
|
||||
sub_0805194C(gUnk_02019EE0.unk7);
|
||||
CreateDialogBox(0, gUnk_02019EE0.unk7 + 1);
|
||||
sub_0805194C(gMapDataBottomSpecial.unk7);
|
||||
CreateDialogBox(0, gMapDataBottomSpecial.unk7 + 1);
|
||||
gChooseFileState.timer = 30;
|
||||
gChooseFileState.subState = 1;
|
||||
break;
|
||||
@@ -404,7 +405,7 @@ void sub_080508E4(void) {
|
||||
|
||||
void sub_08050910(void) {
|
||||
sub_08050384();
|
||||
if (++gUnk_02019EE0.unk7 > 2) {
|
||||
if (++gMapDataBottomSpecial.unk7 > 2) {
|
||||
SetMenuType(2);
|
||||
} else {
|
||||
gChooseFileState.subState = 0;
|
||||
@@ -417,18 +418,18 @@ void sub_08050940(void) {
|
||||
int num_rows;
|
||||
FileSelectState mode;
|
||||
|
||||
if (gUnk_02019EE0.isTransitioning) {
|
||||
if (gMapDataBottomSpecial.isTransitioning) {
|
||||
return;
|
||||
}
|
||||
|
||||
row_idx = gUnk_02019EE0.unk6;
|
||||
row_idx = gMapDataBottomSpecial.unk6;
|
||||
keys = gInput.newKeys;
|
||||
if ((gInput.heldKeys & L_BUTTON) && gUnk_02019EE0.saveStatus[row_idx] == SAVE_VALID) {
|
||||
if ((gInput.heldKeys & L_BUTTON) && gMapDataBottomSpecial.saveStatus[row_idx] == SAVE_VALID) {
|
||||
keys &= ~(DPAD_UP | DPAD_DOWN);
|
||||
}
|
||||
|
||||
num_rows = gSaveHeader->language > 1 ? NUM_SAVE_SLOTS + 1 : NUM_SAVE_SLOTS;
|
||||
mode = gUnk_02032EC0.lastState;
|
||||
mode = gUI.lastState;
|
||||
switch (keys) {
|
||||
case DPAD_UP:
|
||||
if (row_idx > 0)
|
||||
@@ -439,7 +440,7 @@ void sub_08050940(void) {
|
||||
row_idx++;
|
||||
break;
|
||||
case R_BUTTON:
|
||||
if (gUnk_02019EE0.saveStatus[row_idx] == SAVE_VALID)
|
||||
if (gMapDataBottomSpecial.saveStatus[row_idx] == SAVE_VALID)
|
||||
mode = STATE_OPTIONS;
|
||||
break;
|
||||
case A_BUTTON:
|
||||
@@ -448,7 +449,7 @@ void sub_08050940(void) {
|
||||
if (row_idx == 3)
|
||||
mode = STATE_CHOOSE_LANG;
|
||||
else
|
||||
switch (gUnk_02019EE0.saveStatus[row_idx]) {
|
||||
switch (gMapDataBottomSpecial.saveStatus[row_idx]) {
|
||||
case SAVE_EMPTY:
|
||||
mode = STATE_NEW;
|
||||
break;
|
||||
@@ -459,25 +460,25 @@ void sub_08050940(void) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (gUnk_02032EC0.lastState != mode) {
|
||||
if (gUI.lastState != mode) {
|
||||
SetFileSelectState(mode);
|
||||
SoundReq(SFX_TEXTBOX_SELECT);
|
||||
}
|
||||
|
||||
row_idx = (row_idx + num_rows) % num_rows;
|
||||
if (gUnk_02019EE0.unk6 != row_idx) {
|
||||
gUnk_02019EE0.unk6 = row_idx;
|
||||
if (gMapDataBottomSpecial.unk6 != row_idx) {
|
||||
gMapDataBottomSpecial.unk6 = row_idx;
|
||||
sub_08050AFC(row_idx);
|
||||
SoundReq(SFX_TEXTBOX_CHOICE);
|
||||
}
|
||||
|
||||
if (gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk6] == SAVE_VALID) {
|
||||
if (gMapDataBottomSpecial.saveStatus[gMapDataBottomSpecial.unk6] == SAVE_VALID) {
|
||||
ShowButtonR();
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050A64(u32 idx) {
|
||||
if (gUnk_02019EE0.saveStatus[idx] != SAVE_VALID) {
|
||||
if (gMapDataBottomSpecial.saveStatus[idx] != SAVE_VALID) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -529,7 +530,7 @@ void sub_08050B3C(u16*);
|
||||
void sub_08050AFC(u32 idx) {
|
||||
SetActiveSave(idx);
|
||||
MemClear(&gBG1Buffer, sizeof(gBG1Buffer));
|
||||
if (gUnk_02019EE0.saveStatus[idx] == SAVE_VALID) {
|
||||
if (gMapDataBottomSpecial.saveStatus[idx] == SAVE_VALID) {
|
||||
sub_08050B3C(&gBG1Buffer[0x14E]);
|
||||
}
|
||||
gScreen.bg1.updated = 1;
|
||||
@@ -614,13 +615,13 @@ END_NONMATCH
|
||||
|
||||
void HandleFileView(void) {
|
||||
gUnk_080FC93C[gMenu.menuType]();
|
||||
sub_08050A64(gUnk_02019EE0.unk6);
|
||||
sub_08050A64(gMapDataBottomSpecial.unk6);
|
||||
}
|
||||
|
||||
void sub_08050C54(void) {
|
||||
s32 column_idx;
|
||||
|
||||
if (gUnk_02019EE0.isTransitioning)
|
||||
if (gMapDataBottomSpecial.isTransitioning)
|
||||
return;
|
||||
|
||||
column_idx = gMenu.column_idx;
|
||||
@@ -693,7 +694,7 @@ void sub_08050DB8(void) {
|
||||
void sub_08050DE4(void) {
|
||||
s32 row_idx;
|
||||
|
||||
if (gUnk_02019EE0.isTransitioning)
|
||||
if (gMapDataBottomSpecial.isTransitioning)
|
||||
return;
|
||||
|
||||
row_idx = gSaveHeader->language;
|
||||
@@ -747,9 +748,9 @@ void HandleFileOptions(void) {
|
||||
void sub_08050EB8(void) {
|
||||
SaveFile* save;
|
||||
sub_080503A8(0xe);
|
||||
save = &gUnk_02019EE0.saves[gUnk_02019EE0.unk6];
|
||||
gUnk_02019EE0.unk4 = save->msg_speed;
|
||||
gUnk_02019EE0.unk5 = save->brightness;
|
||||
save = &gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6];
|
||||
gMapDataBottomSpecial.unk4 = save->msg_speed;
|
||||
gMapDataBottomSpecial.unk5 = save->brightness;
|
||||
gMenu.column_idx = 0;
|
||||
gMenu.transitionTimer = 0xff;
|
||||
SetMenuType(1);
|
||||
@@ -761,12 +762,12 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void)
|
||||
char column_idx;
|
||||
int mode;
|
||||
|
||||
if (gUnk_02019EE0.isTransitioning)
|
||||
if (gMapDataBottomSpecial.isTransitioning)
|
||||
return;
|
||||
|
||||
p_option = &gUnk_02019EE0.saves[gUnk_02019EE0.unk6].brightness;
|
||||
p_option = &gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6].brightness;
|
||||
if (gMenu.column_idx == 0) {
|
||||
p_option = &gUnk_02019EE0.saves[gUnk_02019EE0.unk6].msg_speed;
|
||||
p_option = &gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6].msg_speed;
|
||||
}
|
||||
|
||||
mode = 0;
|
||||
@@ -792,7 +793,8 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void)
|
||||
case A_BUTTON:
|
||||
case START_BUTTON:
|
||||
mode = 2;
|
||||
if (*(u16*)&gUnk_02019EE0.unk4 != *(u16*)&gUnk_02019EE0.saves[gUnk_02019EE0.unk6].msg_speed)
|
||||
if (*(u16*)&gMapDataBottomSpecial.unk4 !=
|
||||
*(u16*)&gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6].msg_speed)
|
||||
mode = 3;
|
||||
break;
|
||||
case B_BUTTON:
|
||||
@@ -802,11 +804,11 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void)
|
||||
|
||||
switch (mode) {
|
||||
case 3:
|
||||
gUnk_02019EE0.saves[gUnk_02019EE0.unk6].msg_speed = gUnk_02019EE0.unk4;
|
||||
gUnk_02019EE0.saves[gUnk_02019EE0.unk6].brightness = gUnk_02019EE0.unk5;
|
||||
gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6].msg_speed = gMapDataBottomSpecial.unk4;
|
||||
gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6].brightness = gMapDataBottomSpecial.unk5;
|
||||
SoundReq(SFX_MENU_CANCEL);
|
||||
SetMenuType(mode);
|
||||
SetActiveSave(gUnk_02019EE0.unk6);
|
||||
SetActiveSave(gMapDataBottomSpecial.unk6);
|
||||
break;
|
||||
case 2:
|
||||
CreateDialogBox(8, 0);
|
||||
@@ -814,7 +816,7 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void)
|
||||
default:
|
||||
case 1:
|
||||
SetMenuType(mode);
|
||||
SetActiveSave(gUnk_02019EE0.unk6);
|
||||
SetActiveSave(gMapDataBottomSpecial.unk6);
|
||||
break;
|
||||
case 0:
|
||||
if (gMenu.column_idx != column_idx) {
|
||||
@@ -822,7 +824,7 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void)
|
||||
SoundReq(SFX_TEXTBOX_CHOICE);
|
||||
} else if (option != *p_option) {
|
||||
*p_option = option;
|
||||
LoadOptionsFromSave(gUnk_02019EE0.unk6);
|
||||
LoadOptionsFromSave(gMapDataBottomSpecial.unk6);
|
||||
SoundReq(SFX_TEXTBOX_CHOICE);
|
||||
}
|
||||
break;
|
||||
@@ -834,7 +836,7 @@ void sub_08050FFC(void) {
|
||||
switch (HandleSave(0)) {
|
||||
case SAVE_ERROR:
|
||||
gMenu.transitionTimer = 0x1e;
|
||||
sub_0805194C(gUnk_02019EE0.unk6);
|
||||
sub_0805194C(gMapDataBottomSpecial.unk6);
|
||||
CreateDialogBox(9, 0);
|
||||
case SAVE_OK:
|
||||
SetMenuType(3);
|
||||
@@ -897,13 +899,13 @@ void sub_080513A8(void) {
|
||||
void sub_080513C0(void) {
|
||||
switch (HandleSave(0)) {
|
||||
case 1:
|
||||
gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk6] = 1;
|
||||
gMapDataBottomSpecial.saveStatus[gMapDataBottomSpecial.unk6] = 1;
|
||||
SetMenuType(3);
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
case -1:
|
||||
sub_0805194C(gUnk_02019EE0.unk6);
|
||||
sub_0805194C(gMapDataBottomSpecial.unk6);
|
||||
CreateDialogBox(6, 0);
|
||||
gMenu.transitionTimer = 0x1e;
|
||||
gMenu.overlayType = 2;
|
||||
@@ -1030,13 +1032,14 @@ u32 sub_080514BC(u32 a1) {
|
||||
|
||||
void sub_08051574(u32 sfx) {
|
||||
SoundReq(sfx);
|
||||
MemCopy(&gSave, &gUnk_02019EE0.saves[gUnk_02019EE0.unk6], sizeof(gUnk_02019EE0.saves[gUnk_02019EE0.unk6]));
|
||||
MemCopy(&gSave, &gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6],
|
||||
sizeof(gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6]));
|
||||
sub_0805070C();
|
||||
}
|
||||
|
||||
void HandleFileDelete(void) {
|
||||
gUnk_080FC9BC[gMenu.menuType]();
|
||||
sub_08050A64(gUnk_02019EE0.unk6);
|
||||
sub_08050A64(gMapDataBottomSpecial.unk6);
|
||||
}
|
||||
|
||||
void sub_080515c8(void) {
|
||||
@@ -1046,7 +1049,7 @@ void sub_080515c8(void) {
|
||||
void sub_080515D4(void) {
|
||||
u32 column_idx;
|
||||
|
||||
if (gUnk_02019EE0.isTransitioning)
|
||||
if (gMapDataBottomSpecial.isTransitioning)
|
||||
return;
|
||||
|
||||
gMenu.transitionTimer = 4;
|
||||
@@ -1082,8 +1085,8 @@ void sub_080515D4(void) {
|
||||
|
||||
void sub_080516E0(void) {
|
||||
if (HandleSave(1)) {
|
||||
sub_0805194C(gUnk_02019EE0.unk6);
|
||||
sub_08050AFC(gUnk_02019EE0.unk6);
|
||||
sub_0805194C(gMapDataBottomSpecial.unk6);
|
||||
sub_08050AFC(gMapDataBottomSpecial.unk6);
|
||||
gMenu.transitionTimer = 2;
|
||||
SetFileSelectState(0);
|
||||
}
|
||||
@@ -1091,7 +1094,7 @@ void sub_080516E0(void) {
|
||||
|
||||
void HandleFileCopy(void) {
|
||||
gUnk_080FC9C8[gMenu.menuType]();
|
||||
sub_08050A64(gUnk_02019EE0.unk6);
|
||||
sub_08050A64(gMapDataBottomSpecial.unk6);
|
||||
}
|
||||
|
||||
// regalloc
|
||||
@@ -1100,11 +1103,11 @@ NONMATCH("asm/non_matching/fileScreen/sub_08051738.inc", void sub_08051738(void)
|
||||
u32 i;
|
||||
s32 uVar3;
|
||||
|
||||
gUnk_02019EE0.unk7 = 4;
|
||||
gMapDataBottomSpecial.unk7 = 4;
|
||||
uVar3 = 0;
|
||||
for (i = 0; i < 3; i++) {
|
||||
if (gUnk_02019EE0.saveStatus[i] == 1) {
|
||||
temp = gUnk_02019EE0.unk6 ^ i;
|
||||
if (gMapDataBottomSpecial.saveStatus[i] == 1) {
|
||||
temp = gMapDataBottomSpecial.unk6 ^ i;
|
||||
uVar3 = !!temp & 4;
|
||||
} else {
|
||||
uVar3++;
|
||||
@@ -1126,14 +1129,14 @@ NONMATCH("asm/non_matching/fileScreen/sub_08051738.inc", void sub_08051738(void)
|
||||
END_NONMATCH
|
||||
|
||||
s32 sub_080517B4(s32 a1) {
|
||||
u32 i = gUnk_02019EE0.unk7;
|
||||
u32 i = gMapDataBottomSpecial.unk7;
|
||||
if (a1 != 0) {
|
||||
for (i = i + a1; i < 5; i += a1) {
|
||||
if (gGenericMenu.unk10.a[i] != 0 && gGenericMenu.unk10.a[i] != 4)
|
||||
return i;
|
||||
}
|
||||
|
||||
i = gUnk_02019EE0.unk7;
|
||||
i = gMapDataBottomSpecial.unk7;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
@@ -1142,7 +1145,7 @@ void sub_080517EC(void) {
|
||||
u32 temp;
|
||||
s32 delta;
|
||||
|
||||
if (gUnk_02019EE0.isTransitioning)
|
||||
if (gMapDataBottomSpecial.isTransitioning)
|
||||
return;
|
||||
|
||||
delta = 0;
|
||||
@@ -1155,7 +1158,7 @@ void sub_080517EC(void) {
|
||||
break;
|
||||
case A_BUTTON:
|
||||
case START_BUTTON:
|
||||
if (gUnk_02019EE0.unk7 < 3) {
|
||||
if (gMapDataBottomSpecial.unk7 < 3) {
|
||||
CreateDialogBox(2, 0);
|
||||
SetMenuType(2);
|
||||
SoundReq(SFX_TEXTBOX_SELECT);
|
||||
@@ -1163,30 +1166,31 @@ void sub_080517EC(void) {
|
||||
}
|
||||
// fallthrough
|
||||
case B_BUTTON:
|
||||
gUnk_02019EE0.unk7 = 4;
|
||||
gMapDataBottomSpecial.unk7 = 4;
|
||||
SoundReq(SFX_MENU_CANCEL);
|
||||
SetFileSelectState(0);
|
||||
break;
|
||||
}
|
||||
temp = sub_080517B4(delta);
|
||||
if (temp != gUnk_02019EE0.unk7) {
|
||||
gUnk_02019EE0.unk7 = temp;
|
||||
if (temp != gMapDataBottomSpecial.unk7) {
|
||||
gMapDataBottomSpecial.unk7 = temp;
|
||||
SoundReq(SFX_TEXTBOX_CHOICE);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08051874(void) {
|
||||
s32 temp;
|
||||
gSaveHeader->saveFileId = gUnk_02019EE0.unk7;
|
||||
gSaveHeader->saveFileId = gMapDataBottomSpecial.unk7;
|
||||
temp = HandleSave(0);
|
||||
gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk7] = temp;
|
||||
gMapDataBottomSpecial.saveStatus[gMapDataBottomSpecial.unk7] = temp;
|
||||
switch (temp) {
|
||||
case 1:
|
||||
MemCopy(&gSave, &gUnk_02019EE0.saves[gUnk_02019EE0.unk7], sizeof(gUnk_02019EE0.saves[gUnk_02019EE0.unk7]));
|
||||
MemCopy(&gSave, &gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk7],
|
||||
sizeof(gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk7]));
|
||||
SetFileSelectState(0);
|
||||
break;
|
||||
case -1:
|
||||
sub_0805194C(gUnk_02019EE0.unk7);
|
||||
sub_0805194C(gMapDataBottomSpecial.unk7);
|
||||
CreateDialogBox(3, 0);
|
||||
gMenu.transitionTimer = 0x1e;
|
||||
SetMenuType(3);
|
||||
@@ -1212,7 +1216,7 @@ void HandleFileStart(void) {
|
||||
gMenu.menuType = 1;
|
||||
gSaveHeader->msg_speed = gSave.msg_speed;
|
||||
gSaveHeader->brightness = gSave.brightness;
|
||||
gMain.state = 2;
|
||||
gMain.state = GAMETASK_MAIN;
|
||||
SetFade(5, 8);
|
||||
}
|
||||
}
|
||||
@@ -1220,8 +1224,8 @@ void HandleFileStart(void) {
|
||||
void sub_0805194C(u32 save_idx) {
|
||||
SaveFile* save;
|
||||
|
||||
gUnk_02019EE0.saveStatus[save_idx] = 0;
|
||||
save = &gUnk_02019EE0.saves[save_idx];
|
||||
gMapDataBottomSpecial.saveStatus[save_idx] = 0;
|
||||
save = &gMapDataBottomSpecial.saves[save_idx];
|
||||
MemClear(save, sizeof(*save));
|
||||
save->msg_speed = 1;
|
||||
save->brightness = 1;
|
||||
|
||||
+29
-29
@@ -123,7 +123,7 @@ extern void sub_08054524(void);
|
||||
extern void sub_080186D4(void);
|
||||
extern void sub_0806F364(void);
|
||||
extern void sub_08052FF4(u32 area, u32 room);
|
||||
extern void sub_0807C860(void);
|
||||
extern void CloneMapData(void);
|
||||
extern void sub_0807C740(void);
|
||||
extern void SetBGDefaults(void);
|
||||
extern void LoadItemGfx(void);
|
||||
@@ -141,8 +141,8 @@ static void sub_08052C3C(void);
|
||||
static void sub_0805340C(void);
|
||||
static void sub_08051D98(void);
|
||||
static void sub_08051DCC(void);
|
||||
static u32 CheckGameOver(void);
|
||||
static u32 CheckRoomExit(void);
|
||||
static bool32 CheckGameOver(void);
|
||||
static bool32 CheckRoomExit(void);
|
||||
static void UpdatePlayerRoomStatus(void);
|
||||
static void sub_0805329C(void);
|
||||
static void InitializePlayer(void);
|
||||
@@ -306,14 +306,14 @@ static void GameTask_Transition(void) {
|
||||
ResetTmpFlags();
|
||||
|
||||
gMain.state = GAMETASK_INIT;
|
||||
gMain.substate = 0;
|
||||
gMain.substate = GAMEMAIN_INITROOM;
|
||||
}
|
||||
|
||||
static void GameTask_Init(void) {
|
||||
DispReset(1);
|
||||
gFadeControl.mask = 0xffffffff;
|
||||
MemClear(&gOAMControls, 0xB74);
|
||||
MemClear(&gUnk_02032EC0, sizeof(gUnk_02032EC0));
|
||||
MemClear(&gUI, sizeof(gUI));
|
||||
EraseAllEntities();
|
||||
SetBGDefaults();
|
||||
ClearTilemaps();
|
||||
@@ -495,7 +495,7 @@ static void GameMain_ChangeArea(void) {
|
||||
if (!gFadeControl.active) {
|
||||
DispReset(1);
|
||||
gMain.state = GAMETASK_INIT;
|
||||
gMain.substate = 0;
|
||||
gMain.substate = GAMEMAIN_INITROOM;
|
||||
gRoomTransition.transitioningOut = 1;
|
||||
}
|
||||
}
|
||||
@@ -594,7 +594,7 @@ void Subtask_AuxCutscene(void) {
|
||||
}
|
||||
|
||||
static void AuxCutscene_Init(void) {
|
||||
const CutsceneData* p = &sCutsceneData[gUnk_02032EC0.field_0x3];
|
||||
const CutsceneData* p = &sCutsceneData[gUI.field_0x3];
|
||||
gRoomControls.area = p->area;
|
||||
gRoomControls.room = p->room;
|
||||
LoadGfxGroups();
|
||||
@@ -644,18 +644,18 @@ static const CutsceneData sCutsceneData[] = {
|
||||
};
|
||||
|
||||
static void AuxCutscene_Exit(void) {
|
||||
u32 flag = sCutsceneData[gUnk_02032EC0.field_0x3]._3;
|
||||
u32 flag = sCutsceneData[gUI.field_0x3]._3;
|
||||
if (flag & 0xF0) {
|
||||
MenuFadeIn(2, flag >> 4);
|
||||
} else {
|
||||
gUnk_02032EC0.nextToLoad = 3;
|
||||
gUI.nextToLoad = 3;
|
||||
SetFadeInverted(0x10);
|
||||
MessageInitialize();
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08051F78(void) {
|
||||
u32 idx = gUnk_02032EC0.field_0x3;
|
||||
u32 idx = gUI.field_0x3;
|
||||
const CutsceneData* p = &sCutsceneData[idx];
|
||||
sub_08051F9C(p->area, p->room, p->x, p->y);
|
||||
}
|
||||
@@ -704,7 +704,7 @@ void GameOverTask(void) {
|
||||
};
|
||||
|
||||
sStates[gMain.state]();
|
||||
if (gMain.state != 0) {
|
||||
if (gMain.state != GAMETASK_TRANSITION) {
|
||||
FlushSprites();
|
||||
DrawGameOverText();
|
||||
CopyOAM();
|
||||
@@ -727,7 +727,7 @@ static void GameOver_Init(void) {
|
||||
SoundReq(BGM_GAMEOVER);
|
||||
SetFadeInverted(4);
|
||||
gFadeControl.mask = 0xFFFF0001;
|
||||
switch_state(1);
|
||||
switch_state(GAMETASK_INIT);
|
||||
}
|
||||
|
||||
static void GameOver_FadeIn(void) {
|
||||
@@ -740,7 +740,7 @@ static void GameOver_FadeIn(void) {
|
||||
} else {
|
||||
gMenu.transitionTimer--;
|
||||
if (gMenu.transitionTimer == 0) {
|
||||
switch_state(2);
|
||||
switch_state(GAMETASK_MAIN);
|
||||
#if defined(DEMO_USA) || defined(DEMO_JP)
|
||||
SoundReq(SONG_VOL_FADE_OUT);
|
||||
SetFade(7, 4);
|
||||
@@ -834,7 +834,7 @@ static void GameOver_TextMove(void) {
|
||||
default:
|
||||
gScreen.lcd.displayControl &= ~DISPCNT_BG1_ON;
|
||||
sub_08050384();
|
||||
switch_state(3);
|
||||
switch_state(GAMETASK_EXIT);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1175,16 +1175,16 @@ static void sub_0805289C(void) {
|
||||
}
|
||||
#endif
|
||||
|
||||
static u32 CheckGameOver(void) {
|
||||
static bool32 CheckGameOver(void) {
|
||||
if (gRoomTransition.field_0x4[1]) {
|
||||
InitFade();
|
||||
gMain.state = 3;
|
||||
gMain.substate = 0;
|
||||
gMain.state = GAMETASK_EXIT;
|
||||
gMain.substate = GAMEMAIN_INITROOM;
|
||||
SetFade(5, 8);
|
||||
SoundReq(SONG_STOP_BGM);
|
||||
return 1;
|
||||
return TRUE;
|
||||
}
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void RoomExitCallback(void) {
|
||||
@@ -1192,11 +1192,11 @@ void RoomExitCallback(void) {
|
||||
gArea.onExit(gArea.transitionManager);
|
||||
}
|
||||
|
||||
static u32 CheckRoomExit(void) {
|
||||
static bool32 CheckRoomExit(void) {
|
||||
if (gRoomTransition.transitioningOut && gSave.stats.health != 0 && gPlayerState.framestate != PL_STATE_DIE) {
|
||||
if (StairsAreValid()) {
|
||||
gRoomTransition.transitioningOut = 0;
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
switch (gRoomTransition.type) {
|
||||
@@ -1227,11 +1227,11 @@ static u32 CheckRoomExit(void) {
|
||||
break;
|
||||
}
|
||||
RoomExitCallback();
|
||||
gMain.substate = 3;
|
||||
gMain.substate = GAMEMAIN_CHANGEAREA;
|
||||
*(&gMain.pauseInterval + 1) = 1;
|
||||
return 1;
|
||||
return TRUE;
|
||||
}
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 StairsAreValid(void) {
|
||||
@@ -1410,7 +1410,7 @@ u32 GetFlagBankOffset(u32 idx) {
|
||||
}
|
||||
|
||||
void RegisterTransitionManager(void* mgr, void (*onEnter)(), void (*onExit)()) {
|
||||
if (gMain.substate != 7) {
|
||||
if (gMain.substate != GAMEMAIN_SUBTASK) {
|
||||
gArea.transitionManager = mgr;
|
||||
gArea.onEnter = onEnter;
|
||||
gArea.onExit = onExit;
|
||||
@@ -1519,7 +1519,7 @@ static void UpdateFakeScroll(void) {
|
||||
void LoadAuxiliaryRoom(u32 area, u32 room) {
|
||||
sub_08052FF4(area, room);
|
||||
gRoomControls.camera_target = NULL;
|
||||
sub_0807C860();
|
||||
CloneMapData();
|
||||
sub_0807C740();
|
||||
}
|
||||
|
||||
@@ -1806,7 +1806,7 @@ void CutsceneMain_Init(void) {
|
||||
void sub_080535AC(void) {
|
||||
gMenu.overlayType = 1;
|
||||
gMenu.transitionTimer = 0x78;
|
||||
gUnk_02032EC0.field_0x6 = 1;
|
||||
gUI.field_0x6 = 1;
|
||||
gUpdateVisibleTiles = 1;
|
||||
gScreen.lcd.displayControl &= 0xfeff;
|
||||
LoadRoomEntityList((EntityData*)gUnk_080FCB94);
|
||||
@@ -1831,7 +1831,7 @@ void sub_08053618(void) {
|
||||
}
|
||||
|
||||
void sub_08053634(void) {
|
||||
gUnk_02032EC0.nextToLoad = 3;
|
||||
gUI.nextToLoad = 3;
|
||||
MessageInitialize();
|
||||
}
|
||||
|
||||
@@ -1945,7 +1945,7 @@ void sub_08053A5C(void) {
|
||||
|
||||
void sub_08053A90(void) {
|
||||
if (gFadeControl.active == 0) {
|
||||
gUnk_02032EC0.nextToLoad = 3;
|
||||
gUI.nextToLoad = 3;
|
||||
SetBGDefaults();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -1,6 +1,5 @@
|
||||
#include "global.h"
|
||||
|
||||
extern u32 SetTileType(u32 tileID, u32 tilePos, u32 layerID);
|
||||
#include "room.h"
|
||||
|
||||
void CreateMinishEntrance(u32 tilePos) {
|
||||
u32 x, y;
|
||||
|
||||
+3
-2
@@ -6,6 +6,7 @@
|
||||
#include "save.h"
|
||||
#include "message.h"
|
||||
#include "interrupts.h"
|
||||
#include "game.h"
|
||||
|
||||
extern u32 gRand;
|
||||
|
||||
@@ -121,8 +122,8 @@ static bool32 SoftResetKeysPressed(void) {
|
||||
|
||||
void SetTask(u32 task) {
|
||||
gMain.task = task;
|
||||
gMain.state = 0;
|
||||
gMain.substate = 0;
|
||||
gMain.state = GAMETASK_TRANSITION;
|
||||
gMain.substate = GAMEMAIN_INITROOM;
|
||||
}
|
||||
|
||||
void DisableInterruptsAndDMA(void) {
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "coord.h"
|
||||
#include "functions.h"
|
||||
#include "common.h"
|
||||
#include "game.h"
|
||||
|
||||
typedef struct {
|
||||
Manager manager;
|
||||
@@ -40,7 +41,7 @@ void Manager22_Main(Manager22* this) {
|
||||
sub_0801E120();
|
||||
sub_0801E154(this->manager.unk_0e);
|
||||
}
|
||||
if (gMain.substate == 2) {
|
||||
if (gMain.substate == GAMEMAIN_UPDATE) {
|
||||
gScreen.lcd.displayControl |= DISPCNT_BG3_ON;
|
||||
sub_0805BA78();
|
||||
sub_0805BAD4();
|
||||
|
||||
@@ -38,15 +38,15 @@ void Manager29_Main(Manager29* this) {
|
||||
}
|
||||
|
||||
void sub_0805CBD0(Manager29* this) {
|
||||
LayerStruct* puVar2;
|
||||
LayerStruct* layer;
|
||||
|
||||
this->manager.action = 1;
|
||||
this->unk_38 = (this->unk_38 >> 4 & 0x3fU) | (((this->unk_3a << 0x10) >> 0x14 & 0x3fU) << 6);
|
||||
this->unk_3a = (this->unk_3c >> 4 & 0x3f) | (((this->unk_36 + this->unk_37 * 0x100) >> 4 & 0x3fU) << 6);
|
||||
this->unk_3c = GetTileType(this->unk_38, this->unk_34);
|
||||
puVar2 = GetLayerByIndex(this->unk_34);
|
||||
this->unk_28 = puVar2->_5004;
|
||||
this->unk_2c = &puVar2->_4[(s16)this->unk_3a];
|
||||
layer = GetLayerByIndex(this->unk_34);
|
||||
this->unk_28 = (u16*)layer->metatileTypes;
|
||||
this->unk_2c = &layer->mapData[(s16)this->unk_3a];
|
||||
}
|
||||
|
||||
void sub_0805CC3C(Manager29* this) {
|
||||
|
||||
@@ -78,7 +78,7 @@ void Subtask_FigurineMenu(void) {
|
||||
};
|
||||
#if !(defined(DEMO_USA) || defined(DEMO_JP))
|
||||
FlushSprites();
|
||||
if (gUnk_02032EC0.field_0x3 == 0xff) {
|
||||
if (gUI.field_0x3 == 0xff) {
|
||||
figurineMenu0_Types[gMenu.menuType]();
|
||||
} else {
|
||||
figurineMenu1_Types[gMenu.menuType]();
|
||||
@@ -113,7 +113,7 @@ void FigurineMenu_080A4608(void) {
|
||||
{
|
||||
int r0, r1, r2;
|
||||
|
||||
r1 = gUnk_02032EC0.field_0x3;
|
||||
r1 = gUI.field_0x3;
|
||||
r0 = gSave.unk6;
|
||||
r2 = 0x88;
|
||||
if (r0 == 0) {
|
||||
|
||||
+10
-10
@@ -345,7 +345,7 @@ typedef struct {
|
||||
u8 unk_01;
|
||||
u8 unk_02[2];
|
||||
} struct_02019EE0;
|
||||
extern struct_02019EE0 gUnk_02019EE0[16];
|
||||
extern struct_02019EE0 gMapDataBottomSpecial[16];
|
||||
|
||||
void KinstoneMenu_080A4054(void) {
|
||||
u32 uVar2;
|
||||
@@ -353,8 +353,8 @@ void KinstoneMenu_080A4054(void) {
|
||||
KinstoneMenu_080A414C();
|
||||
KinstoneMenu_080A4080();
|
||||
for (uVar2 = 0; uVar2 < 0x10; uVar2++) {
|
||||
if (gUnk_02019EE0[uVar2].unk_01 != 0) {
|
||||
gUnk_02019EE0[uVar2].unk_01 -= 1;
|
||||
if (gMapDataBottomSpecial[uVar2].unk_01 != 0) {
|
||||
gMapDataBottomSpecial[uVar2].unk_01 -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -505,8 +505,8 @@ void sub_080A42E0(u32 param_1, u32 param_2) {
|
||||
iVar4 = sub_080A43A8(uVar1);
|
||||
if ((param_2 != 0) && (param_2 != 0xff)) {
|
||||
int index = iVar4 * 4;
|
||||
if (param_2 != gUnk_02019EE0[iVar4].unk_02[0]) {
|
||||
gUnk_02019EE0[iVar4].unk_02[0] = param_2;
|
||||
if (param_2 != gMapDataBottomSpecial[iVar4].unk_02[0]) {
|
||||
gMapDataBottomSpecial[iVar4].unk_02[0] = param_2;
|
||||
sub_0801C2F0(iVar4 * 2 + 0x2e0, param_2);
|
||||
}
|
||||
gOamCmd._8 = (s16)(iVar4 * 2) + 0x3ae0;
|
||||
@@ -535,7 +535,7 @@ void sub_080A42E0(u32 param_1, u32 param_2) {
|
||||
}
|
||||
|
||||
void sub_080A4398(void) {
|
||||
MemClear(&gUnk_02019EE0, sizeof(gUnk_02019EE0));
|
||||
MemClear(&gMapDataBottomSpecial, sizeof(gMapDataBottomSpecial));
|
||||
}
|
||||
|
||||
u32 sub_080A43A8(u32 param_1) {
|
||||
@@ -547,20 +547,20 @@ u32 sub_080A43A8(u32 param_1) {
|
||||
sub_080A4418(param_1, uVar1 * 0x10 + 0x300);
|
||||
}
|
||||
{ int index = uVar1 * 4; }
|
||||
gUnk_02019EE0[uVar1].unk_00[0] = param_1;
|
||||
gUnk_02019EE0[uVar1].unk_01 = 2;
|
||||
gMapDataBottomSpecial[uVar1].unk_00[0] = param_1;
|
||||
gMapDataBottomSpecial[uVar1].unk_01 = 2;
|
||||
return uVar1;
|
||||
}
|
||||
|
||||
u32 sub_080A43DC(u32 unk1) {
|
||||
u32 i;
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (unk1 == gUnk_02019EE0[i].unk_00[0]) {
|
||||
if (unk1 == gMapDataBottomSpecial[i].unk_00[0]) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (gUnk_02019EE0[i].unk_01 == 0) {
|
||||
if (gMapDataBottomSpecial[i].unk_01 == 0) {
|
||||
return i + 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1654,7 +1654,7 @@ ASM_FUNC("asm/non_matching/movement/CalculateEntityTileCollisions.inc",
|
||||
u32 hitboxUnkX;
|
||||
u32 hitboxUnkY;
|
||||
|
||||
layer = GetLayerByIndex(this->collisionLayer)->_2004;
|
||||
layer = GetLayerByIndex(this->collisionLayer)->collisionData;
|
||||
xMin = this->x.HALF.HI + this->hitbox->offset_x;
|
||||
yMin = this->y.HALF.HI + this->hitbox->offset_y;
|
||||
hitboxUnkX = this->hitbox->unk2[0];
|
||||
|
||||
+2
-2
@@ -190,7 +190,7 @@ u32 sub_08081F00(u32*, u32*);
|
||||
|
||||
extern u16 gMapDataTopSpecial[0x2000];
|
||||
|
||||
extern u16 gUnk_02019EE0[];
|
||||
extern u16 gMapDataBottomSpecial[];
|
||||
NONMATCH("asm/non_matching/button/sub_08081E6C.inc", void sub_08081E6C(Entity* this)) {
|
||||
u32 r4;
|
||||
u16 *tmp, *r1;
|
||||
@@ -205,7 +205,7 @@ NONMATCH("asm/non_matching/button/sub_08081E6C.inc", void sub_08081E6C(Entity* t
|
||||
tmp = r1 + 0x3802;
|
||||
r1 += 0x3002 + r4;
|
||||
tmp = tmp + (*r1 << 2);
|
||||
tmp2 = (r5 == 2 ? gMapDataTopSpecial : gUnk_02019EE0);
|
||||
tmp2 = (r5 == 2 ? gMapDataTopSpecial : gMapDataBottomSpecial);
|
||||
tmp2 += (((0x3f & r6) << 1) + ((0xfc0 & r6) << 2)) << 1;
|
||||
if (sub_08081F00((u32*)tmp2, (u32*)tmp))
|
||||
return;
|
||||
|
||||
@@ -74,8 +74,8 @@ void sub_0808E818(Entity* this) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this->type2 != gUnk_02019EE0.unk6) {
|
||||
this->type2 = gUnk_02019EE0.unk6;
|
||||
if (this->type2 != gMapDataBottomSpecial.unk6) {
|
||||
this->type2 = gMapDataBottomSpecial.unk6;
|
||||
this->field_0x68.HWORD = CheckGlobalFlag(EZERO_1ST) == 0 ? 0x400 : 0x100;
|
||||
this->field_0x70.BYTES.byte0 = 4;
|
||||
this->animationState = 2;
|
||||
@@ -83,7 +83,7 @@ void sub_0808E818(Entity* this) {
|
||||
LoadPalettes(&gGlobalGfxAndPalettes[var1], 31, 1);
|
||||
}
|
||||
|
||||
if (gUnk_02032EC0.lastState == 0) {
|
||||
if (gUI.lastState == 0) {
|
||||
if (gInput.heldKeys & L_BUTTON) {
|
||||
switch (gInput.newKeys) {
|
||||
case DPAD_UP:
|
||||
@@ -118,13 +118,13 @@ void sub_0808E818(Entity* this) {
|
||||
|
||||
static bool32 sub_0808E950(void) {
|
||||
bool32 result = FALSE;
|
||||
switch (gUnk_02032EC0.lastState) {
|
||||
switch (gUI.lastState) {
|
||||
case 0:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
result = gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk6] == 1;
|
||||
result = gMapDataBottomSpecial.saveStatus[gMapDataBottomSpecial.unk6] == 1;
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
@@ -182,11 +182,11 @@ void sub_0808EA28(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
if (this->type == gUnk_02019EE0.unk6) {
|
||||
if (this->type == gMapDataBottomSpecial.unk6) {
|
||||
var0 = 12;
|
||||
var1 = 1;
|
||||
} else {
|
||||
if (gUnk_02032EC0.lastState == 5 && this->type == gUnk_02019EE0.unk7) {
|
||||
if (gUI.lastState == 5 && this->type == gMapDataBottomSpecial.unk7) {
|
||||
var0 = 13;
|
||||
var1 = 2;
|
||||
} else {
|
||||
@@ -198,14 +198,14 @@ void sub_0808EA28(Entity* this) {
|
||||
this->palette.b.b0 = var0;
|
||||
this->spriteRendering.b3 = var1;
|
||||
sub_0808EABC(this);
|
||||
gUnk_02019EE0.isTransitioning |= sub_0808EF6C(this);
|
||||
gMapDataBottomSpecial.isTransitioning |= sub_0808EF6C(this);
|
||||
}
|
||||
|
||||
void sub_0808EABC(Entity* this) {
|
||||
int var0 = -72;
|
||||
int var1 = this->type * 32 + 40;
|
||||
int var2 = gUnk_02019EE0.unk6 == this->type;
|
||||
switch (gUnk_02032EC0.lastState) {
|
||||
int var2 = gMapDataBottomSpecial.unk6 == this->type;
|
||||
switch (gUI.lastState) {
|
||||
case 0:
|
||||
var0 = 24;
|
||||
break;
|
||||
@@ -251,7 +251,7 @@ void sub_0808EABC(Entity* this) {
|
||||
}
|
||||
|
||||
void sub_0808EB74(Entity* this) {
|
||||
Entity* entity = sub_0808EC80(gUnk_02019EE0.unk6);
|
||||
Entity* entity = sub_0808EC80(gMapDataBottomSpecial.unk6);
|
||||
if (entity) {
|
||||
this->x.WORD = entity->x.WORD;
|
||||
this->y.WORD = entity->y.WORD;
|
||||
@@ -268,7 +268,7 @@ void sub_0808EBB8(Entity* this) {
|
||||
u32 x, y;
|
||||
Entity* entity;
|
||||
|
||||
switch (gUnk_02032EC0.lastState) {
|
||||
switch (gUI.lastState) {
|
||||
case 4:
|
||||
var0 = gMenu.column_idx + 4;
|
||||
break;
|
||||
@@ -298,7 +298,7 @@ void sub_0808EBB8(Entity* this) {
|
||||
x = 112;
|
||||
break;
|
||||
case 2:
|
||||
var0 = gUnk_02019EE0.unk7;
|
||||
var0 = gMapDataBottomSpecial.unk7;
|
||||
if (var0 == 4) {
|
||||
var0 = 7;
|
||||
}
|
||||
@@ -337,12 +337,12 @@ void sub_0808ECBC(Entity* this) {
|
||||
const struct_08121CD4* var3;
|
||||
|
||||
var0 = gMenu.column_idx;
|
||||
switch (gUnk_02032EC0.lastState) {
|
||||
switch (gUI.lastState) {
|
||||
case 4:
|
||||
var1 = 1;
|
||||
break;
|
||||
case 5:
|
||||
var0 = gUnk_02019EE0.unk7;
|
||||
var0 = gMapDataBottomSpecial.unk7;
|
||||
var1 = 2;
|
||||
break;
|
||||
case 6:
|
||||
@@ -366,12 +366,12 @@ void sub_0808ECBC(Entity* this) {
|
||||
this->palette.b.b0 = 14;
|
||||
}
|
||||
|
||||
gUnk_02019EE0.isTransitioning |= sub_0808EF6C(this);
|
||||
gMapDataBottomSpecial.isTransitioning |= sub_0808EF6C(this);
|
||||
}
|
||||
|
||||
void sub_0808ED64(Entity* this) {
|
||||
int y = 255;
|
||||
if (gUnk_02032EC0.lastState == 1 && gGenericMenu.unk10.a[1] != 5) {
|
||||
if (gUI.lastState == 1 && gGenericMenu.unk10.a[1] != 5) {
|
||||
this->x.HALF.HI = gGenericMenu.unk10.a[0] * 16 + 28;
|
||||
y = gGenericMenu.unk10.a[1] * 16 + 58;
|
||||
}
|
||||
@@ -380,7 +380,7 @@ void sub_0808ED64(Entity* this) {
|
||||
|
||||
void sub_0808ED98(Entity* this) {
|
||||
int y;
|
||||
if (gUnk_02032EC0.lastState != 1) {
|
||||
if (gUI.lastState != 1) {
|
||||
this->field_0x68.HWORD = 27;
|
||||
y = -10;
|
||||
} else {
|
||||
@@ -408,7 +408,7 @@ void sub_0808EE00(Entity* this) {
|
||||
this->x.HALF.HI = gUnk_08121D18[var0][var1];
|
||||
this->field_0x68.HWORD = gUnk_08121D18[var0][var1];
|
||||
var1 -= var0;
|
||||
if (gUnk_02032EC0.lastState != 1) {
|
||||
if (gUI.lastState != 1) {
|
||||
var1 = 128;
|
||||
var2 = 176;
|
||||
} else {
|
||||
@@ -417,14 +417,14 @@ void sub_0808EE00(Entity* this) {
|
||||
|
||||
this->field_0x6a.HWORD = var2;
|
||||
this->palette.b.b0 = gGenericMenu.unk10.a[1] == 5 && var1 == gGenericMenu.unk10.a[2] ? 11 : 9;
|
||||
gUnk_02019EE0.isTransitioning |= sub_0808EF6C(this);
|
||||
gMapDataBottomSpecial.isTransitioning |= sub_0808EF6C(this);
|
||||
}
|
||||
|
||||
void nullsub_522(Entity* this) {
|
||||
}
|
||||
|
||||
void sub_0808EE98(Entity* this) {
|
||||
this->actionDelay = gUnk_02032EC0.lastState;
|
||||
this->actionDelay = gUI.lastState;
|
||||
this->frameIndex = gUnk_08121D48[this->actionDelay];
|
||||
if (this->actionDelay != 2) {
|
||||
this->field_0x68.HWORD = 96;
|
||||
@@ -436,7 +436,7 @@ void sub_0808EE98(Entity* this) {
|
||||
|
||||
void sub_0808EED8(Entity* this) {
|
||||
int var0;
|
||||
if (gUnk_02032EC0.lastState != 3) {
|
||||
if (gUI.lastState != 3) {
|
||||
this->spriteSettings.draw = 0;
|
||||
} else {
|
||||
this->spriteSettings.draw = 2;
|
||||
@@ -447,7 +447,7 @@ void sub_0808EED8(Entity* this) {
|
||||
|
||||
void sub_0808EF24(Entity* this) {
|
||||
int var0;
|
||||
if (gUnk_02032EC0.lastState != 3) {
|
||||
if (gUI.lastState != 3) {
|
||||
this->spriteSettings.draw = 0;
|
||||
} else {
|
||||
this->spriteSettings.draw = 2;
|
||||
|
||||
@@ -40,7 +40,7 @@ void sub_080851AC(Entity* this) {
|
||||
}
|
||||
}
|
||||
InitializeAnimation(this, this->animationState);
|
||||
this->field_0x70.WORD = (u32)GetLayerByIndex(this->collisionLayer) + 4 + (COORD_TO_TILE(this) * 2);
|
||||
this->field_0x70.WORD = (u32)&GetLayerByIndex(this->collisionLayer)->mapData[COORD_TO_TILE(this)];
|
||||
sub_08085394(this);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -2689,7 +2689,7 @@ static void sub_0807332C(Entity* this) {
|
||||
gRoomControls.camera_target = this;
|
||||
SetPlayerActionNormal();
|
||||
} else {
|
||||
gMain.substate = 3;
|
||||
gMain.substate = GAMEMAIN_CHANGEAREA;
|
||||
*(&gMain.pauseInterval + 1) = 1;
|
||||
SetFade(5, 8);
|
||||
}
|
||||
|
||||
+336
-52
@@ -32,10 +32,6 @@ typedef struct {
|
||||
u8 unk6[6];
|
||||
} struct_0811BE48;
|
||||
|
||||
extern void gMapDataBottom; // 0x2000
|
||||
extern void gMapDataTop; // 0x2000
|
||||
extern u16 gMetatilesBottom[];
|
||||
extern u16 gMetatilesTop[];
|
||||
extern u8 gMapData;
|
||||
extern const u8 gUnk_020176E0[];
|
||||
extern const ScreenTransitionData gUnk_0813AD88[];
|
||||
@@ -73,6 +69,19 @@ extern void (*const gUnk_0811C120[])(Entity*);
|
||||
extern u16 gUnk_0811C268[];
|
||||
extern ItemBehavior* (*const gUnk_0811BFC8[])(u32);
|
||||
|
||||
extern void DeleteLoadedTileEntity(u32, u32);
|
||||
|
||||
extern const u8 gUnk_080B3E80[]; // collisionData for tileType?
|
||||
extern const u8 gUnk_080B37A0[]; // unkData3 for tileType?
|
||||
|
||||
extern u8 gUpdateVisibleTiles;
|
||||
extern u16 gMapDataTopSpecial[];
|
||||
extern u16 gMapDataBottomSpecial[];
|
||||
|
||||
bool32 sub_0807BF88(u32, u32, RoomResInfo*);
|
||||
|
||||
void sub_0807BFD0(void);
|
||||
|
||||
void sub_08077698(PlayerEntity* this) {
|
||||
ItemBehavior* puVar2;
|
||||
u32 uVar3;
|
||||
@@ -1587,7 +1596,46 @@ void sub_0807B2F8(PlayerEntity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/SetTileType.inc", void SetTileType(u32 a, u32 b, u32 c))
|
||||
void SetTileType(u32 tileType, u32 position, u32 layer) {
|
||||
u8 collisionData;
|
||||
u16 metatile;
|
||||
LayerStruct* data;
|
||||
u16* src;
|
||||
u16* dest;
|
||||
|
||||
if (tileType < 0x800) {
|
||||
DeleteLoadedTileEntity(position, layer);
|
||||
data = GetLayerByIndex(layer);
|
||||
metatile = data->unkData2[tileType];
|
||||
data->mapData[position] = metatile;
|
||||
collisionData = gUnk_080B3E80[tileType];
|
||||
data->collisionData[position] = collisionData;
|
||||
if ((gRoomControls.scroll_flags & 2) != 0) {
|
||||
gMapBottom.collisionData[position] = collisionData;
|
||||
}
|
||||
data->unkData3[position] = gUnk_080B37A0[tileType];
|
||||
if ((gRoomControls.scroll_flags & 1) == 0) {
|
||||
u32 offset = (position & 0x3f) * 2 + (position & 0xfc0) * 4;
|
||||
if (layer != 2) {
|
||||
dest = gMapDataBottomSpecial + offset;
|
||||
} else {
|
||||
dest = gMapDataTopSpecial + offset;
|
||||
}
|
||||
src = data->metatiles + metatile * 4;
|
||||
*dest = *src;
|
||||
dest[1] = src[1];
|
||||
dest[0x80] = src[2];
|
||||
dest[0x81] = src[3];
|
||||
if (gRoomControls.reload_flags != 1) {
|
||||
gUpdateVisibleTiles = 1;
|
||||
}
|
||||
}
|
||||
} else if (tileType >= 0x4000) { // The tile type actually directly is a tileIndex
|
||||
SetTile(tileType, position, layer);
|
||||
} else {
|
||||
sub_0807BA8C(position, layer);
|
||||
}
|
||||
}
|
||||
|
||||
bool32 sub_0807B434(u32 position, u32 layer) {
|
||||
switch (GetTileType(position, layer)) {
|
||||
@@ -1626,49 +1674,106 @@ void sub_0807B7D8(u32 param_1, u32 param_2, u32 param_3) {
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807B820(u32 param_1) {
|
||||
SetTileType(620, param_1 - 65, 1);
|
||||
SetTileType(627, param_1 - 65, 2);
|
||||
SetTileType(621, param_1 - 64, 1);
|
||||
SetTileType(628, param_1 - 64, 2);
|
||||
SetTileType(622, param_1 - 63, 1);
|
||||
SetTileType(629, param_1 - 63, 2);
|
||||
SetTileType(623, param_1 - 1, 1);
|
||||
SetTileType(624, param_1, 1);
|
||||
SetTileType(626, param_1 + 1, 1);
|
||||
void sub_0807B820(u32 position) {
|
||||
SetTileType(0x26c, position + TILE_POS(-1, -1), 1);
|
||||
SetTileType(0x273, position + TILE_POS(-1, -1), 2);
|
||||
SetTileType(0x26d, position + TILE_POS(0, -1), 1);
|
||||
SetTileType(0x274, position + TILE_POS(0, -1), 2);
|
||||
SetTileType(0x26e, position + TILE_POS(1, -1), 1);
|
||||
SetTileType(0x275, position + TILE_POS(1, -1), 2);
|
||||
SetTileType(0x26f, position + TILE_POS(-1, 0), 1);
|
||||
SetTileType(0x270, position, 1);
|
||||
SetTileType(0x272, position + TILE_POS(1, 0), 1);
|
||||
}
|
||||
|
||||
void sub_0807B8A8(u32 param_1) {
|
||||
SetTileType(636, param_1 - 65, 1);
|
||||
SetTileType(643, param_1 - 65, 2);
|
||||
SetTileType(637, param_1 - 64, 1);
|
||||
SetTileType(644, param_1 - 64, 2);
|
||||
SetTileType(638, param_1 - 63, 1);
|
||||
SetTileType(645, param_1 - 63, 2);
|
||||
SetTileType(639, param_1 - 1, 1);
|
||||
SetTileType(640, param_1, 1);
|
||||
SetTileType(642, param_1 + 1, 1);
|
||||
void sub_0807B8A8(u32 position) {
|
||||
SetTileType(0x27c, position + TILE_POS(-1, -1), 1);
|
||||
SetTileType(0x283, position + TILE_POS(-1, -1), 2);
|
||||
SetTileType(0x27d, position + TILE_POS(0, -1), 1);
|
||||
SetTileType(0x284, position + TILE_POS(0, -1), 2);
|
||||
SetTileType(0x27e, position + TILE_POS(1, -1), 1);
|
||||
SetTileType(0x285, position + TILE_POS(1, -1), 2);
|
||||
SetTileType(0x27f, position + TILE_POS(-1, 0), 1);
|
||||
SetTileType(0x280, position, 1);
|
||||
SetTileType(0x282, position + TILE_POS(1, 0), 1);
|
||||
}
|
||||
|
||||
void sub_0807B930(int param_1) {
|
||||
SetTileType(652, param_1 - 65, 1);
|
||||
SetTileType(659, param_1 - 65, 2);
|
||||
SetTileType(653, param_1 - 64, 1);
|
||||
SetTileType(660, param_1 - 64, 2);
|
||||
SetTileType(654, param_1 - 63, 1);
|
||||
SetTileType(661, param_1 - 63, 2);
|
||||
SetTileType(655, param_1 - 1, 1);
|
||||
SetTileType(656, param_1, 1);
|
||||
SetTileType(658, param_1 + 1, 1);
|
||||
void sub_0807B930(u32 position) {
|
||||
SetTileType(0x28c, position + TILE_POS(-1, -1), 1);
|
||||
SetTileType(0x293, position + TILE_POS(-1, -1), 2);
|
||||
SetTileType(0x28d, position + TILE_POS(0, -1), 1);
|
||||
SetTileType(0x294, position + TILE_POS(0, -1), 2);
|
||||
SetTileType(0x28e, position + TILE_POS(1, -1), 1);
|
||||
SetTileType(0x295, position + TILE_POS(1, -1), 2);
|
||||
SetTileType(0x28f, position + TILE_POS(-1, 0), 1);
|
||||
SetTileType(0x290, position, 1);
|
||||
SetTileType(0x292, position + TILE_POS(1, 0), 1);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807B9B8.inc", void sub_0807B9B8(s32 a, s32 b, s32 c))
|
||||
void sub_0807B9B8(u32 tileIndex, u32 position, u32 layer) {
|
||||
LayerStruct* data;
|
||||
u16* src;
|
||||
u16* dest;
|
||||
u16 tileType;
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807BA8C.inc", void sub_0807BA8C(u32 a, u32 b))
|
||||
DeleteLoadedTileEntity(position, layer);
|
||||
data = GetLayerByIndex(layer);
|
||||
data->mapData[position] = tileIndex;
|
||||
tileType = data->metatileTypes[tileIndex];
|
||||
data->collisionData[position] = gUnk_080B3E80[tileType];
|
||||
data->unkData3[position] = gUnk_080B37A0[tileType];
|
||||
if ((gRoomControls.scroll_flags & 1) == 0) {
|
||||
u32 offset = (position & 0x3f) * 2 + (position & 0xfc0) * 4;
|
||||
if (layer != 2) {
|
||||
dest = gMapDataBottomSpecial + offset;
|
||||
} else {
|
||||
dest = gMapDataTopSpecial + offset;
|
||||
}
|
||||
src = data->metatiles + tileIndex * 4;
|
||||
*dest = *src;
|
||||
dest[1] = src[1];
|
||||
dest[0x80] = src[2];
|
||||
dest[0x81] = src[3];
|
||||
if (gRoomControls.reload_flags != 1) {
|
||||
gUpdateVisibleTiles = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807BB68(s16* param_1, u32 param_2, u32 param_3) {
|
||||
void sub_0807BA8C(u32 position, u32 layer) {
|
||||
u32 tileIndex;
|
||||
u32 tileType;
|
||||
LayerStruct* data;
|
||||
u16* dest;
|
||||
u16* src;
|
||||
|
||||
DeleteLoadedTileEntity(position, layer);
|
||||
data = GetLayerByIndex(layer);
|
||||
data->mapData[position] = tileIndex = data->mapDataClone[position];
|
||||
tileType = data->metatileTypes[tileIndex];
|
||||
data->collisionData[position] = gUnk_080B3E80[tileType];
|
||||
data->unkData3[position] = gUnk_080B37A0[tileType];
|
||||
if ((gRoomControls.scroll_flags & 1) == 0) {
|
||||
u32 offset = (position & 0x3f) * 2 + (position & 0xfc0) * 4;
|
||||
if (layer != 2) {
|
||||
dest = gMapDataBottomSpecial + offset;
|
||||
} else {
|
||||
dest = gMapDataTopSpecial + offset;
|
||||
}
|
||||
src = &data->metatiles[tileIndex * 4];
|
||||
dest[0] = src[0];
|
||||
dest[1] = src[1];
|
||||
dest[0x80] = src[2];
|
||||
dest[0x81] = src[3];
|
||||
if (gRoomControls.reload_flags != 1) {
|
||||
gUpdateVisibleTiles = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807BB68(s16* param_1, u32 basePosition, u32 layer) {
|
||||
while (param_1[0] != -1) {
|
||||
SetTileType((u16)param_1[0], param_2 + param_1[1], param_3);
|
||||
SetTileType((u16)param_1[0], basePosition + param_1[1], layer);
|
||||
param_1 += 2;
|
||||
}
|
||||
}
|
||||
@@ -1686,15 +1791,157 @@ void sub_0807BB98(s32 basePosition, u32 layer, u32 width, u32 height) {
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807BBE4.inc", void sub_0807BBE4())
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807BC84.inc", void sub_0807BC84())
|
||||
void sub_0807BC84(void) {
|
||||
s32 height;
|
||||
u32 width;
|
||||
u8* puVar3;
|
||||
u8* puVar4;
|
||||
u8* puVar5;
|
||||
u8* puVar6;
|
||||
u32 index;
|
||||
|
||||
width = (u32)(gRoomControls.width >> 4);
|
||||
if (width == 0x40) {
|
||||
width = 0x3f;
|
||||
}
|
||||
puVar4 = gMapBottom.collisionData + width;
|
||||
puVar6 = gMapBottom.collisionData + 0x3f;
|
||||
puVar3 = gMapTop.collisionData + width;
|
||||
puVar5 = gMapTop.collisionData + 0x3f;
|
||||
index = 0;
|
||||
while (index < 0x40) {
|
||||
*puVar4 = 0xff;
|
||||
*puVar6 = 0xff;
|
||||
*puVar3 = 0xff;
|
||||
*puVar5 = 0xff;
|
||||
puVar4 += 0x40;
|
||||
puVar6 += 0x40;
|
||||
puVar3 += 0x40;
|
||||
puVar5 += 0x40;
|
||||
index++;
|
||||
}
|
||||
height = (gRoomControls.height & 0xfff0) * 4;
|
||||
puVar4 = gMapBottom.collisionData + height;
|
||||
puVar6 = gMapBottom.collisionData + 0xfc0;
|
||||
puVar3 = gMapTop.collisionData + height;
|
||||
puVar5 = gMapTop.collisionData + 0xfc0;
|
||||
index = 0;
|
||||
while (index < 0x40) {
|
||||
*puVar4 = 0xff;
|
||||
puVar4++;
|
||||
*puVar6 = 0xff;
|
||||
puVar6++;
|
||||
*puVar3 = 0xff;
|
||||
puVar3++;
|
||||
*puVar5 = 0xff;
|
||||
puVar5++;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807BD14.inc", bool32 sub_0807BD14(Entity* a, u32 b))
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807BDB8.inc", void sub_0807BDB8())
|
||||
u32 sub_0807BDB8(Entity* this, u32 param_2) {
|
||||
u32 result = 0xff;
|
||||
switch (param_2 & 7) {
|
||||
case 0:
|
||||
if (this->y.HALF.HI - (u32)gRoomControls.origin_y < 10) {
|
||||
result = 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (this->y.HALF.HI - (u32)gRoomControls.origin_y < 10) {
|
||||
result = 0;
|
||||
}
|
||||
if (gRoomControls.width - 10 < this->x.HALF.HI - (u32)gRoomControls.origin_x) {
|
||||
result = 1;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (gRoomControls.width - 10 < this->x.HALF.HI - (u32)gRoomControls.origin_x) {
|
||||
result = 1;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (gRoomControls.height - 10 < this->y.HALF.HI - (u32)gRoomControls.origin_y) {
|
||||
result = 2;
|
||||
}
|
||||
if (gRoomControls.width - 10 < this->x.HALF.HI - (u32)gRoomControls.origin_x) {
|
||||
result = 1;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (gRoomControls.height - 10 < this->y.HALF.HI - (u32)gRoomControls.origin_y) {
|
||||
result = 2;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (gRoomControls.height - 10 < this->y.HALF.HI - (u32)gRoomControls.origin_y) {
|
||||
result = 2;
|
||||
}
|
||||
if (this->x.HALF.HI - (u32)gRoomControls.origin_x < 10) {
|
||||
result = 3;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (this->x.HALF.HI - (u32)gRoomControls.origin_x < 10) {
|
||||
result = 3;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (this->y.HALF.HI - (u32)gRoomControls.origin_y < 10) {
|
||||
result = 0;
|
||||
}
|
||||
if (this->x.HALF.HI - (u32)gRoomControls.origin_x < 10) {
|
||||
result = 3;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807BEEC.inc", void sub_0807BEEC())
|
||||
u32 sub_0807BEEC(u32 param_1, u32 param_2, u32 param_3) {
|
||||
u32 index;
|
||||
RoomResInfo* ptr;
|
||||
if ((gArea.filler3[-1] & 1) != 0) {
|
||||
return gRoomControls.room;
|
||||
}
|
||||
switch (param_3) {
|
||||
case 0:
|
||||
param_2 = gRoomControls.origin_y - 0x10;
|
||||
break;
|
||||
case 1:
|
||||
param_1 = gRoomControls.origin_x + gRoomControls.width + 0x10;
|
||||
break;
|
||||
case 2:
|
||||
param_2 = gRoomControls.origin_y + gRoomControls.height + 0x10;
|
||||
break;
|
||||
case 3:
|
||||
param_1 = gRoomControls.origin_x - 0x10;
|
||||
break;
|
||||
default:
|
||||
return 0xff;
|
||||
}
|
||||
ptr = gArea.roomResInfos;
|
||||
index = 0;
|
||||
while (index < 0x40) {
|
||||
if (sub_0807BF88(param_1, param_2, ptr)) {
|
||||
return index;
|
||||
}
|
||||
index++;
|
||||
ptr++;
|
||||
}
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807BF88.inc", void sub_0807BF88())
|
||||
bool32 sub_0807BF88(u32 param_1, u32 param_2, RoomResInfo* info) {
|
||||
u32 width = param_1 - info->map_x;
|
||||
u32 height = param_2 - info->map_y;
|
||||
bool32 result = FALSE;
|
||||
if (width < info->pixel_width && height < info->pixel_height) {
|
||||
result = TRUE;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void sub_0807BFA8(void) {
|
||||
gRoomControls.origin_x = (gArea.pCurrentRoomInfo)->map_x;
|
||||
@@ -1707,7 +1954,32 @@ ASM_FUNC("asm/non_matching/playerUtils/sub_0807BFD0.inc", void sub_0807BFD0())
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/LoadRoomGfx.inc", void LoadRoomGfx())
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807C460.inc", void sub_0807C460())
|
||||
void sub_0807C460(void) {
|
||||
u32 x;
|
||||
u32 y;
|
||||
u16* mapBottom = gMapBottom.mapData;
|
||||
u16* mapTop = gMapTop.mapData;
|
||||
u32 width = gRoomControls.width >> 4;
|
||||
u32 height = gRoomControls.height >> 4;
|
||||
u32 position = 0;
|
||||
|
||||
for (y = 0; y < height; y++) {
|
||||
for (x = 0; x < width; x++) {
|
||||
if (*mapBottom > 0x3fff) {
|
||||
SetTile(*mapBottom, position, 1);
|
||||
}
|
||||
if (*mapTop > 0x3fff) {
|
||||
SetTile(*mapTop, position, 2);
|
||||
}
|
||||
mapBottom++;
|
||||
mapTop++;
|
||||
position++;
|
||||
}
|
||||
mapBottom += 0x40 - width;
|
||||
mapTop += 0x40 - width;
|
||||
position += 0x40 - width;
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807C4F8.inc", void sub_0807C4F8())
|
||||
|
||||
@@ -1719,12 +1991,24 @@ ASM_FUNC("asm/non_matching/playerUtils/sub_0807C69C.inc", void sub_0807C69C())
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807C740.inc", void sub_0807C740())
|
||||
|
||||
ASM_FUNC("asm/non_matching/playerUtils/sub_0807C810.inc", void sub_0807C810())
|
||||
void sub_0807C810(void) {
|
||||
struct_03004030* ptr;
|
||||
Entity* player;
|
||||
RoomControls* ctrls;
|
||||
sub_0807BFD0();
|
||||
ptr = &gUnk_03004030;
|
||||
player = &gPlayerEntity;
|
||||
ctrls = &gRoomControls;
|
||||
player->x.HALF.HI = ((ptr->unk_00)->unk_06 & 0x3f) * 0x10 + ctrls->origin_x + ptr->unk_04;
|
||||
player->y.HALF.HI = (((ptr->unk_00)->unk_06 & 0xfc0) >> 2) + ctrls->origin_y + ptr->unk_06;
|
||||
sub_080809D4();
|
||||
gUpdateVisibleTiles = 0;
|
||||
}
|
||||
|
||||
void sub_0807C860(void) {
|
||||
void CloneMapData(void) {
|
||||
gRoomTransition.field_0x2c[1] = 1;
|
||||
MemCopy(&gMapDataBottom, &gMapDataBottom + 0x3000, 0x2000);
|
||||
MemCopy(&gMapDataTop, &gMapDataTop + 0x3000, 0x2000);
|
||||
MemCopy(&gMapBottom.mapData, &gMapBottom.mapDataClone, 0x2000);
|
||||
MemCopy(&gMapTop.mapData, &gMapTop.mapDataClone, 0x2000);
|
||||
}
|
||||
|
||||
void sub_0807C898(void) {
|
||||
@@ -1749,10 +2033,10 @@ void LoadCompressedMapData(void* dest, u32 offset) {
|
||||
}
|
||||
|
||||
void sub_0807C998(u32* a1) {
|
||||
LoadCompressedMapData(gMetatilesBottom, a1[0]);
|
||||
LoadCompressedMapData(gMetatilesBottom - 0x1000, a1[1]);
|
||||
LoadCompressedMapData(gMetatilesTop, a1[2]);
|
||||
LoadCompressedMapData(gMetatilesTop - 0x1000, a1[3]);
|
||||
LoadCompressedMapData(&gMapBottom.metatiles, a1[0]);
|
||||
LoadCompressedMapData(&gMapBottom.metatileTypes, a1[1]);
|
||||
LoadCompressedMapData(&gMapTop.metatiles, a1[2]);
|
||||
LoadCompressedMapData(&gMapTop.metatileTypes, a1[3]);
|
||||
}
|
||||
|
||||
void sub_0807C9D8(u32* a1) {
|
||||
|
||||
@@ -91,7 +91,7 @@ bool32 sub_080AB9FC(Entity* this, u32 dir) {
|
||||
val = (((this->x.HALF.HI - gRoomControls.origin_x) >> 4) & 0x3f) |
|
||||
((((this->y.HALF.HI - gRoomControls.origin_y) >> 4) & 0x3f) << 6);
|
||||
val += gUnk_080B4488[dir >> 3];
|
||||
tmp = layer->_2004[val];
|
||||
tmp = layer->collisionData[val];
|
||||
if (tmp <= 0x1f) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
+1
-1
@@ -2364,7 +2364,7 @@ u32 sub_unk3_DeepwoodShrine_InsideBarrel(void) {
|
||||
void sub_StateChange_DeepwoodShrine_InsideBarrel(void) {
|
||||
sub_08058D34();
|
||||
gArea.areaMetadata |= 0x40;
|
||||
gMain.substate = 5;
|
||||
gMain.substate = GAMEMAIN_BARRELUPDATE;
|
||||
}
|
||||
|
||||
u32 sub_unk3_DeepwoodShrineEntry_Main(void) {
|
||||
|
||||
+1
-1
@@ -135,7 +135,7 @@ void ClearTilemaps(void) {
|
||||
gRoomControls.filler3 = 0xffff;
|
||||
gUnk_03004030.unk_0a = 0xff;
|
||||
gUnk_02034480.unk_00 = 0;
|
||||
MemClear(&gUnk_02019EE0, 0x8000);
|
||||
MemClear(&gMapDataBottomSpecial, 0x8000);
|
||||
MemClear(&gMapDataTopSpecial, 0x8000);
|
||||
}
|
||||
|
||||
|
||||
+33
-33
@@ -125,7 +125,7 @@ ASM_FUNC("asm/non_matching/subtask2/sub_080A5C9C.inc", void sub_080A5C9C())
|
||||
void sub_080A5CFC(u32 menuType, void* param_2, u32 param_3) {
|
||||
DrawDungeonFeatures(menuType, param_2, param_3);
|
||||
LoadDungeonMap();
|
||||
DrawDungeonMap(menuType, &gUnk_02019EE0, 0x400);
|
||||
DrawDungeonMap(menuType, &gMapDataBottomSpecial, 0x400);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/subtask2/sub_080A5D1C.inc", void sub_080A5D1C())
|
||||
@@ -297,46 +297,46 @@ void SetMenuType(u32 menuType) {
|
||||
}
|
||||
|
||||
void ResetUI(void) {
|
||||
MemClear(&gUnk_02032EC0, 0x3b4);
|
||||
MemClear(&gUI, 0x3b4);
|
||||
}
|
||||
|
||||
void MenuFadeIn(u32 param_1, u32 param_2) {
|
||||
if (gUnk_02032EC0.nextToLoad == 0) {
|
||||
MemClear(&gUnk_02032EC0, 0x3b4);
|
||||
gUnk_02032EC0.lastState = param_1;
|
||||
gUnk_02032EC0.field_0x3 = param_2;
|
||||
gUnk_02032EC0.pauseFadeIn = gMain.substate;
|
||||
if (gUI.nextToLoad == 0) {
|
||||
MemClear(&gUI, 0x3b4);
|
||||
gUI.lastState = param_1;
|
||||
gUI.field_0x3 = param_2;
|
||||
gUI.pauseFadeIn = gMain.substate;
|
||||
} else {
|
||||
gUnk_02032EC0.state = param_1;
|
||||
gUnk_02032EC0.field_0x5 = param_2;
|
||||
gUnk_02032EC0.nextToLoad = 1;
|
||||
gUI.state = param_1;
|
||||
gUI.field_0x5 = param_2;
|
||||
gUI.nextToLoad = 1;
|
||||
}
|
||||
gUnk_02032EC0.field_0x6 = 0;
|
||||
gUnk_02032EC0.isLoading = 0xffff;
|
||||
gUnk_02032EC0.fadeInTime = 0x20;
|
||||
gMain.substate = 7;
|
||||
gUI.field_0x6 = 0;
|
||||
gUI.isLoading = 0xffff;
|
||||
gUI.fadeInTime = 0x20;
|
||||
gMain.substate = GAMEMAIN_SUBTASK;
|
||||
SetFade(5, 0x20);
|
||||
gUnk_02018EB0[0] = 0;
|
||||
gUnk_02018EB0[1] = 0;
|
||||
}
|
||||
|
||||
void sub_080A71A4(u32 param_1, u32 param_2, u32 param_3) {
|
||||
if (gUnk_02032EC0.nextToLoad == 0) {
|
||||
gUnk_02032EC0.fillerC[2] = param_3;
|
||||
if (gUI.nextToLoad == 0) {
|
||||
gUI.fillerC[2] = param_3;
|
||||
} else {
|
||||
gUnk_02032EC0.fillerC[3] = param_3;
|
||||
gUI.fillerC[3] = param_3;
|
||||
}
|
||||
MenuFadeIn(param_1, param_2);
|
||||
}
|
||||
|
||||
void sub_080A71C4(u32 param_1, u32 param_2, u32 param_3, u32 param_4) {
|
||||
MenuFadeIn(param_1, param_2);
|
||||
gUnk_02032EC0.isLoading = param_3;
|
||||
gUnk_02032EC0.fadeInTime = param_4;
|
||||
gUI.isLoading = param_3;
|
||||
gUI.fadeInTime = param_4;
|
||||
}
|
||||
|
||||
void Subtask_Exit(void) {
|
||||
gUnk_02032EC0.nextToLoad = 3;
|
||||
gUI.nextToLoad = 3;
|
||||
SetFade(5, 0x20);
|
||||
}
|
||||
|
||||
@@ -347,19 +347,19 @@ void sub_080A71F4(ScreenTransitionData* exitTransition) {
|
||||
DeleteAllEntities();
|
||||
sub_0805E974();
|
||||
DeleteAllEntities();
|
||||
gMain.state = 1;
|
||||
gMain.substate = 0;
|
||||
gMain.state = GAMETASK_INIT;
|
||||
gMain.substate = GAMEMAIN_INITROOM;
|
||||
}
|
||||
|
||||
void GameMain_Subtask(void) {
|
||||
if (gUnk_02032EC0.nextToLoad < 3) {
|
||||
if (gUnk_02032EC0.state != 0) {
|
||||
gUnk_02032EC0.field_0x3 = gUnk_02032EC0.field_0x5;
|
||||
gUnk_02032EC0.lastState = gUnk_02032EC0.state;
|
||||
gUnk_02032EC0.state = 0;
|
||||
if (gUI.nextToLoad < 3) {
|
||||
if (gUI.state != 0) {
|
||||
gUI.field_0x3 = gUI.field_0x5;
|
||||
gUI.lastState = gUI.state;
|
||||
gUI.state = 0;
|
||||
}
|
||||
}
|
||||
gUnk_0812901C[gUnk_02032EC0.nextToLoad]();
|
||||
gUnk_0812901C[gUI.nextToLoad]();
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/subtask2/Subtask_FadeIn.inc", void Subtask_FadeIn())
|
||||
@@ -377,7 +377,7 @@ void Subtask_Init(void) {
|
||||
ResetPalettes();
|
||||
ResetPaletteTable(0);
|
||||
gGFXSlots.unk0 = 1;
|
||||
gUnk_02032EC0.nextToLoad = 2;
|
||||
gUI.nextToLoad = 2;
|
||||
gRoomTransition.field_0x2c[4] = 1;
|
||||
}
|
||||
}
|
||||
@@ -387,9 +387,9 @@ ASM_FUNC("asm/non_matching/subtask2/Subtask_FadeOut.inc", void Subtask_FadeOut()
|
||||
void Subtask_Die(void) {
|
||||
sub_080A74F4();
|
||||
if (gFadeControl.active == 0) {
|
||||
gMain.substate = gUnk_02032EC0.pauseFadeIn;
|
||||
gUnk_02032EC0.nextToLoad = gFadeControl.active;
|
||||
gUnk_02032EC0.lastState = gFadeControl.active;
|
||||
gMain.substate = gUI.pauseFadeIn;
|
||||
gUI.nextToLoad = gFadeControl.active;
|
||||
gUI.lastState = gFadeControl.active;
|
||||
ResetSystemPriority();
|
||||
}
|
||||
}
|
||||
@@ -408,5 +408,5 @@ void sub_080A74F4(void) {
|
||||
}
|
||||
|
||||
void Subtask_Update(void) {
|
||||
gSubtasks[gUnk_02032EC0.lastState]();
|
||||
gSubtasks[gUI.lastState]();
|
||||
}
|
||||
|
||||
+6
-5
@@ -16,6 +16,7 @@
|
||||
#include "save.h"
|
||||
#include "area.h"
|
||||
#include "item.h"
|
||||
#include "game.h"
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x4];
|
||||
@@ -123,8 +124,8 @@ static const u8 unk[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
#endif
|
||||
|
||||
static u32 AdvanceIntroSequence(u32 transition) {
|
||||
gUnk_02032EC0.lastState = transition;
|
||||
gMain.state = 2;
|
||||
gUI.lastState = transition;
|
||||
gMain.state = GAMETASK_MAIN;
|
||||
MemClear(&gIntroState, sizeof(gIntroState));
|
||||
SetFade(7, 8);
|
||||
}
|
||||
@@ -134,18 +135,18 @@ void TitleTask(void) {
|
||||
switch (gMain.state) {
|
||||
case 0:
|
||||
MessageInitialize();
|
||||
MemClear(&gUnk_02032EC0, sizeof(gUnk_02032EC0));
|
||||
MemClear(&gUI, sizeof(gUI));
|
||||
AdvanceIntroSequence(0);
|
||||
break;
|
||||
case 1:
|
||||
sIntroSequenceHandlers[gUnk_02032EC0.lastState]();
|
||||
sIntroSequenceHandlers[gUI.lastState]();
|
||||
break;
|
||||
case 2:
|
||||
if (gFadeControl.active) {
|
||||
return;
|
||||
}
|
||||
DispReset(1);
|
||||
gMain.state = 1;
|
||||
gMain.state = GAMETASK_INIT;
|
||||
break;
|
||||
}
|
||||
CopyOAM();
|
||||
|
||||
Reference in New Issue
Block a user