mirror of
https://github.com/zeldaret/tmc
synced 2026-06-13 14:06:52 -04:00
Merge pull request #215 from notyourav/stuff
item enum, tile entities, util files
This commit is contained in:
@@ -1,352 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.text
|
||||
.syntax unified
|
||||
|
||||
thumb_func_start GetCurrentRoomProperty
|
||||
GetCurrentRoomProperty: @ 0x0804B128
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldr r0, _0804B138 @ =gCurrentRoomProperties
|
||||
ldr r1, [r0]
|
||||
cmp r1, #0
|
||||
bne _0804B13C
|
||||
movs r0, #0
|
||||
b _0804B166
|
||||
.align 2, 0
|
||||
_0804B138: .4byte gCurrentRoomProperties
|
||||
_0804B13C:
|
||||
cmp r2, #0x7f
|
||||
bls _0804B150
|
||||
ldr r0, _0804B14C @ =gRoomVars
|
||||
movs r1, #7
|
||||
ands r1, r2
|
||||
lsls r1, r1, #2
|
||||
adds r0, #0x8c
|
||||
b _0804B162
|
||||
.align 2, 0
|
||||
_0804B14C: .4byte gRoomVars
|
||||
_0804B150:
|
||||
cmp r2, #7
|
||||
bls _0804B15C
|
||||
lsls r0, r2, #2
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
b _0804B166
|
||||
_0804B15C:
|
||||
ldr r0, _0804B168 @ =gRoomVars
|
||||
lsls r1, r2, #2
|
||||
adds r0, #0x6c
|
||||
_0804B162:
|
||||
adds r1, r1, r0
|
||||
ldr r0, [r1]
|
||||
_0804B166:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0804B168: .4byte gRoomVars
|
||||
|
||||
thumb_func_start sub_0804B16C
|
||||
sub_0804B16C: @ 0x0804B16C
|
||||
push {r4, lr}
|
||||
ldr r4, _0804B1A4 @ =gSmallChests
|
||||
_0804B170:
|
||||
ldrh r0, [r4, #4]
|
||||
cmp r0, #0
|
||||
beq _0804B198
|
||||
ldrb r0, [r4, #1]
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
beq _0804B198
|
||||
ldrh r3, [r4, #4]
|
||||
ldrb r1, [r4, #6]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
movs r2, #1
|
||||
cmp r0, #0
|
||||
beq _0804B190
|
||||
movs r2, #2
|
||||
_0804B190:
|
||||
movs r0, #0x74
|
||||
adds r1, r3, #0
|
||||
bl SetTileType
|
||||
_0804B198:
|
||||
adds r4, #8
|
||||
ldr r0, _0804B1A8 @ =gPaletteBuffer
|
||||
cmp r4, r0
|
||||
blo _0804B170
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0804B1A4: .4byte gSmallChests
|
||||
_0804B1A8: .4byte gPaletteBuffer
|
||||
|
||||
thumb_func_start LoadRoomTileEntities
|
||||
LoadRoomTileEntities: @ 0x0804B1AC
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
cmp r4, #0
|
||||
beq _0804B25A
|
||||
b _0804B254
|
||||
_0804B1B6:
|
||||
ldrb r0, [r4]
|
||||
subs r0, #1
|
||||
cmp r0, #0xc
|
||||
bhi _0804B252
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _0804B1C8 @ =_0804B1CC
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0804B1C8: .4byte _0804B1CC
|
||||
_0804B1CC: @ jump table
|
||||
.4byte _0804B200 @ case 0
|
||||
.4byte _0804B208 @ case 1
|
||||
.4byte _0804B252 @ case 2
|
||||
.4byte _0804B210 @ case 3
|
||||
.4byte _0804B252 @ case 4
|
||||
.4byte _0804B252 @ case 5
|
||||
.4byte _0804B218 @ case 6
|
||||
.4byte _0804B252 @ case 7
|
||||
.4byte _0804B22C @ case 8
|
||||
.4byte _0804B234 @ case 9
|
||||
.4byte _0804B23C @ case 10
|
||||
.4byte _0804B244 @ case 11
|
||||
.4byte _0804B24C @ case 12
|
||||
_0804B200:
|
||||
adds r0, r4, #0
|
||||
bl sub_0804B290
|
||||
b _0804B252
|
||||
_0804B208:
|
||||
adds r0, r4, #0
|
||||
bl sub_0804B29C
|
||||
b _0804B252
|
||||
_0804B210:
|
||||
adds r0, r4, #0
|
||||
bl sub_0804B300
|
||||
b _0804B252
|
||||
_0804B218:
|
||||
ldr r0, _0804B224 @ =gArea
|
||||
ldr r1, _0804B228 @ =0x00000864
|
||||
adds r0, r0, r1
|
||||
ldrb r1, [r4, #3]
|
||||
str r1, [r0]
|
||||
b _0804B252
|
||||
.align 2, 0
|
||||
_0804B224: .4byte gArea
|
||||
_0804B228: .4byte 0x00000864
|
||||
_0804B22C:
|
||||
adds r0, r4, #0
|
||||
bl sub_0804B334
|
||||
b _0804B252
|
||||
_0804B234:
|
||||
adds r0, r4, #0
|
||||
bl sub_0804B340
|
||||
b _0804B252
|
||||
_0804B23C:
|
||||
adds r0, r4, #0
|
||||
bl sub_0804B260
|
||||
b _0804B252
|
||||
_0804B244:
|
||||
adds r0, r4, #0
|
||||
bl sub_0804B27C
|
||||
b _0804B252
|
||||
_0804B24C:
|
||||
ldr r1, _0804B25C @ =gRoomVars
|
||||
ldrb r0, [r4, #3]
|
||||
strb r0, [r1, #9]
|
||||
_0804B252:
|
||||
adds r4, #8
|
||||
_0804B254:
|
||||
ldrb r0, [r4]
|
||||
cmp r0, #0
|
||||
bne _0804B1B6
|
||||
_0804B25A:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0804B25C: .4byte gRoomVars
|
||||
|
||||
thumb_func_start sub_0804B260
|
||||
sub_0804B260: @ 0x0804B260
|
||||
push {lr}
|
||||
ldrb r0, [r0, #1]
|
||||
lsls r0, r0, #5
|
||||
ldr r1, _0804B274 @ =gUnk_080015BC
|
||||
adds r0, r0, r1
|
||||
ldr r1, _0804B278 @ =gUnk_02034398
|
||||
movs r2, #0x20
|
||||
bl MemCopy
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0804B274: .4byte gUnk_080015BC
|
||||
_0804B278: .4byte gUnk_02034398
|
||||
|
||||
thumb_func_start sub_0804B27C
|
||||
sub_0804B27C: @ 0x0804B27C
|
||||
push {lr}
|
||||
ldr r1, _0804B28C @ =gArea
|
||||
ldrb r0, [r0, #1]
|
||||
strb r0, [r1, #1]
|
||||
bl sub_08054524
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0804B28C: .4byte gArea
|
||||
|
||||
thumb_func_start sub_0804B290
|
||||
sub_0804B290: @ 0x0804B290
|
||||
push {lr}
|
||||
ldrb r0, [r0, #1]
|
||||
bl SetLocalFlag
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0804B29C
|
||||
sub_0804B29C: @ 0x0804B29C
|
||||
push {r4, lr}
|
||||
adds r2, r0, #0
|
||||
ldr r4, _0804B2EC @ =gSmallChests
|
||||
movs r1, #0
|
||||
_0804B2A4:
|
||||
ldrh r0, [r4, #4]
|
||||
cmp r0, #0
|
||||
bne _0804B2F4
|
||||
adds r0, r2, #0
|
||||
adds r1, r4, #0
|
||||
movs r2, #8
|
||||
bl MemCopy
|
||||
ldrb r1, [r4, #6]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0804B2FC
|
||||
ldr r0, _0804B2F0 @ =gRoomControls
|
||||
ldrb r1, [r0, #0xf]
|
||||
movs r0, #2
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0804B2FC
|
||||
ldrb r0, [r4, #1]
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
bne _0804B2FC
|
||||
ldrb r1, [r4, #1]
|
||||
movs r0, #0x52
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
cmp r0, #0
|
||||
beq _0804B2FC
|
||||
ldrh r1, [r4, #4]
|
||||
bl sub_0806F704
|
||||
b _0804B2FC
|
||||
.align 2, 0
|
||||
_0804B2EC: .4byte gSmallChests
|
||||
_0804B2F0: .4byte gRoomControls
|
||||
_0804B2F4:
|
||||
adds r1, #1
|
||||
adds r4, #8
|
||||
cmp r1, #7
|
||||
bls _0804B2A4
|
||||
_0804B2FC:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0804B300
|
||||
sub_0804B300: @ 0x0804B300
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl GetEmptyManager
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0804B332
|
||||
movs r0, #9
|
||||
strb r0, [r1, #8]
|
||||
movs r0, #0x24
|
||||
strb r0, [r1, #9]
|
||||
ldrh r0, [r4, #4]
|
||||
strh r0, [r1, #0x38]
|
||||
ldrh r0, [r4, #6]
|
||||
strh r0, [r1, #0x3a]
|
||||
ldrb r0, [r4, #2]
|
||||
adds r2, r1, #0
|
||||
adds r2, #0x35
|
||||
strb r0, [r2]
|
||||
ldrb r0, [r4, #1]
|
||||
strh r0, [r1, #0x3e]
|
||||
adds r0, r1, #0
|
||||
movs r1, #6
|
||||
bl AppendEntityToList
|
||||
_0804B332:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0804B334
|
||||
sub_0804B334: @ 0x0804B334
|
||||
push {lr}
|
||||
ldrb r0, [r0, #3]
|
||||
movs r1, #1
|
||||
bl sub_0805BB00
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_0804B340
|
||||
sub_0804B340: @ 0x0804B340
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrh r0, [r4, #2]
|
||||
bl CheckLocalFlag
|
||||
cmp r0, #0
|
||||
beq _0804B35A
|
||||
ldrh r0, [r4, #6]
|
||||
ldrh r1, [r4, #4]
|
||||
ldrb r2, [r4, #1]
|
||||
bl SetTileType
|
||||
b _0804B380
|
||||
_0804B35A:
|
||||
ldr r1, _0804B384 @ =gRoomVars
|
||||
ldrb r0, [r1, #1]
|
||||
cmp r0, #0
|
||||
bne _0804B380
|
||||
movs r0, #1
|
||||
strb r0, [r1, #1]
|
||||
bl GetEmptyManager
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0804B380
|
||||
movs r0, #9
|
||||
strb r0, [r1, #8]
|
||||
movs r0, #0x2a
|
||||
strb r0, [r1, #9]
|
||||
adds r0, r1, #0
|
||||
movs r1, #6
|
||||
bl AppendEntityToList
|
||||
_0804B380:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0804B384: .4byte gRoomVars
|
||||
|
||||
thumb_func_start sub_0804B388
|
||||
sub_0804B388: @ 0x0804B388
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
adds r4, r1, #0
|
||||
movs r0, #0x34
|
||||
cmp r4, #1
|
||||
bne _0804B396
|
||||
movs r0, #0x26
|
||||
_0804B396:
|
||||
adds r1, r5, #0
|
||||
adds r2, r4, #0
|
||||
bl SetTileType
|
||||
movs r0, #0xf
|
||||
movs r1, #2
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0804B3BA
|
||||
adds r0, #0x38
|
||||
strb r4, [r0]
|
||||
adds r0, r1, #0
|
||||
adds r1, r5, #0
|
||||
bl sub_0806F704
|
||||
_0804B3BA:
|
||||
movs r0, #1
|
||||
rsbs r0, r0, #0
|
||||
bl sub_080526F8
|
||||
pop {r4, r5, pc}
|
||||
@@ -1,252 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start UpdateFade
|
||||
UpdateFade: @ 0x08050154
|
||||
push {r4, r5, r6, lr}
|
||||
ldr r4, _08050180 @ =gFadeControl
|
||||
ldrh r0, [r4, #8]
|
||||
movs r5, #0x1c
|
||||
ands r5, r0
|
||||
movs r6, #0
|
||||
ldrb r0, [r4]
|
||||
cmp r0, #0
|
||||
beq _080501BE
|
||||
ldrh r0, [r4, #0xc]
|
||||
ldrh r1, [r4, #0xa]
|
||||
subs r0, r0, r1
|
||||
strh r0, [r4, #0xc]
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
ldrh r2, [r4, #0xe]
|
||||
movs r3, #0xe
|
||||
ldrsh r1, [r4, r3]
|
||||
cmp r0, r1
|
||||
bgt _080501B8
|
||||
strh r2, [r4, #0xc]
|
||||
b _080501B8
|
||||
.align 2, 0
|
||||
_08050180: .4byte gFadeControl
|
||||
_08050184:
|
||||
mvns r0, r5
|
||||
adds r0, #1
|
||||
ands r0, r5
|
||||
eors r5, r0
|
||||
cmp r0, #8
|
||||
beq _080501A8
|
||||
cmp r0, #8
|
||||
bhi _0805019A
|
||||
cmp r0, #4
|
||||
beq _080501A0
|
||||
b _080501B8
|
||||
_0805019A:
|
||||
cmp r0, #0x10
|
||||
beq _080501B0
|
||||
b _080501B8
|
||||
_080501A0:
|
||||
adds r0, r4, #0
|
||||
bl sub_080501C0
|
||||
b _080501B6
|
||||
_080501A8:
|
||||
adds r0, r4, #0
|
||||
bl sub_08050230
|
||||
b _080501B6
|
||||
_080501B0:
|
||||
adds r0, r4, #0
|
||||
bl sub_080502A4
|
||||
_080501B6:
|
||||
orrs r6, r0
|
||||
_080501B8:
|
||||
cmp r5, #0
|
||||
bne _08050184
|
||||
strb r6, [r4]
|
||||
_080501BE:
|
||||
pop {r4, r5, r6, pc}
|
||||
|
||||
thumb_func_start sub_080501C0
|
||||
sub_080501C0: @ 0x080501C0
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r3, r0, #0
|
||||
ldrh r1, [r3, #8]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080501DA
|
||||
movs r0, #0xc
|
||||
ldrsh r1, [r3, r0]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #1
|
||||
subs r5, r0, r1
|
||||
b _080501DE
|
||||
_080501DA:
|
||||
movs r2, #0xc
|
||||
ldrsh r5, [r3, r2]
|
||||
_080501DE:
|
||||
ldr r0, _080501F8 @ =gFadeControl
|
||||
ldr r2, [r0, #4]
|
||||
ldr r1, _080501FC @ =gUnk_020354C0
|
||||
movs r4, #0
|
||||
ldr r7, _08050200 @ =gUsedPalettes
|
||||
movs r6, #1
|
||||
_080501EA:
|
||||
adds r0, r2, #0
|
||||
ands r0, r6
|
||||
cmp r0, #0
|
||||
beq _08050204
|
||||
strb r6, [r1]
|
||||
strh r5, [r1, #2]
|
||||
b _08050208
|
||||
.align 2, 0
|
||||
_080501F8: .4byte gFadeControl
|
||||
_080501FC: .4byte gUnk_020354C0
|
||||
_08050200: .4byte gUsedPalettes
|
||||
_08050204:
|
||||
strb r0, [r1]
|
||||
strh r0, [r1, #2]
|
||||
_08050208:
|
||||
ldrb r0, [r3, #2]
|
||||
strb r0, [r1, #1]
|
||||
lsrs r2, r2, #1
|
||||
adds r4, #1
|
||||
adds r1, #4
|
||||
cmp r4, #0x1f
|
||||
bls _080501EA
|
||||
movs r0, #1
|
||||
rsbs r0, r0, #0
|
||||
str r0, [r7]
|
||||
movs r0, #0xe
|
||||
ldrsh r1, [r3, r0]
|
||||
movs r2, #0xc
|
||||
ldrsh r0, [r3, r2]
|
||||
eors r1, r0
|
||||
rsbs r0, r1, #0
|
||||
orrs r0, r1
|
||||
lsrs r0, r0, #0x1f
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08050230
|
||||
sub_08050230: @ 0x08050230
|
||||
push {r4, r5, lr}
|
||||
ldrh r4, [r0, #8]
|
||||
ldrh r0, [r0, #0xc]
|
||||
lsls r5, r0, #0x10
|
||||
asrs r2, r5, #0x14
|
||||
movs r0, #0xf
|
||||
ands r2, r0
|
||||
movs r0, #1
|
||||
ands r4, r0
|
||||
cmp r4, #0
|
||||
beq _0805024A
|
||||
movs r0, #0xf
|
||||
subs r2, r0, r2
|
||||
_0805024A:
|
||||
ldr r3, _08050264 @ =gScreen
|
||||
ldr r1, _08050268 @ =gUnk_080FC3C4
|
||||
lsls r0, r2, #1
|
||||
adds r0, r0, r1
|
||||
ldrh r1, [r0]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x64
|
||||
strh r1, [r0]
|
||||
cmp r5, #0
|
||||
beq _0805026C
|
||||
movs r0, #1
|
||||
b _08050298
|
||||
.align 2, 0
|
||||
_08050264: .4byte gScreen
|
||||
_08050268: .4byte gUnk_080FC3C4
|
||||
_0805026C:
|
||||
ldr r1, _0805029C @ =gUnk_03000000
|
||||
movs r0, #0
|
||||
strb r0, [r1, #2]
|
||||
cmp r4, #0
|
||||
bne _08050296
|
||||
ldrh r2, [r3, #8]
|
||||
ldr r1, _080502A0 @ =0x0000FFBF
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
strh r0, [r3, #8]
|
||||
ldrh r2, [r3, #0x14]
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
strh r0, [r3, #0x14]
|
||||
ldrh r2, [r3, #0x20]
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
strh r0, [r3, #0x20]
|
||||
ldrh r0, [r3, #0x2c]
|
||||
ands r1, r0
|
||||
strh r1, [r3, #0x2c]
|
||||
_08050296:
|
||||
movs r0, #0
|
||||
_08050298:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0805029C: .4byte gUnk_03000000
|
||||
_080502A0: .4byte 0x0000FFBF
|
||||
|
||||
thumb_func_start sub_080502A4
|
||||
sub_080502A4: @ 0x080502A4
|
||||
push {r4, lr}
|
||||
ldrh r1, [r0, #8]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080502E4
|
||||
ldr r4, _080502E0 @ =gFadeControl
|
||||
ldrh r0, [r4, #0x10]
|
||||
ldrh r1, [r4, #0xa]
|
||||
subs r0, r0, r1
|
||||
strh r0, [r4, #0x10]
|
||||
lsls r0, r0, #0x10
|
||||
cmp r0, #0
|
||||
bgt _080502C4
|
||||
movs r0, #0
|
||||
strh r0, [r4, #0x10]
|
||||
_080502C4:
|
||||
movs r1, #0x12
|
||||
ldrsh r0, [r4, r1]
|
||||
movs r2, #0x14
|
||||
ldrsh r1, [r4, r2]
|
||||
movs r3, #0x10
|
||||
ldrsh r2, [r4, r3]
|
||||
bl sub_0801E1EC
|
||||
movs r1, #0x10
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, #0
|
||||
bne _08050314
|
||||
movs r0, #0
|
||||
b _08050316
|
||||
.align 2, 0
|
||||
_080502E0: .4byte gFadeControl
|
||||
_080502E4:
|
||||
ldr r4, _08050310 @ =gFadeControl
|
||||
ldrh r0, [r4, #0xa]
|
||||
ldrh r2, [r4, #0x10]
|
||||
adds r0, r0, r2
|
||||
strh r0, [r4, #0x10]
|
||||
movs r3, #0x12
|
||||
ldrsh r0, [r4, r3]
|
||||
movs r2, #0x14
|
||||
ldrsh r1, [r4, r2]
|
||||
movs r3, #0x10
|
||||
ldrsh r2, [r4, r3]
|
||||
bl sub_0801E1EC
|
||||
movs r1, #0x10
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, #0x96
|
||||
ble _08050314
|
||||
bl sub_0801E104
|
||||
movs r0, #0
|
||||
b _08050316
|
||||
.align 2, 0
|
||||
_08050310: .4byte gFadeControl
|
||||
_08050314:
|
||||
movs r0, #1
|
||||
_08050316:
|
||||
pop {r4, pc}
|
||||
+1
-1
@@ -510,7 +510,7 @@ sub_08053974: @ 0x08053974
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _080539A8
|
||||
bl sub_0804FFE4
|
||||
bl InitFade
|
||||
movs r0, #1
|
||||
bl DispReset
|
||||
bl sub_080197AC
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_0806EC20
|
||||
sub_0806EC20: @ 0x0806EC20
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x58
|
||||
movs r1, #0
|
||||
movs r2, #0
|
||||
bl CreateNPC
|
||||
cmp r0, #0
|
||||
beq _0806EC34
|
||||
str r4, [r0, #0x50]
|
||||
_0806EC34:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0806EC38
|
||||
sub_0806EC38: @ 0x0806EC38
|
||||
push {lr}
|
||||
movs r0, #7
|
||||
movs r1, #0x58
|
||||
movs r2, #7
|
||||
bl FindEntityByID
|
||||
cmp r0, #0
|
||||
beq _0806EC4C
|
||||
bl DeleteEntity
|
||||
_0806EC4C:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
-1749
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -4948,7 +4948,7 @@ sub_080A7328: @ 0x080A7328
|
||||
movs r0, #1
|
||||
bl DispReset
|
||||
bl MessageInitialize
|
||||
bl sub_080ADD30
|
||||
bl ResetPalettes
|
||||
movs r0, #0
|
||||
bl sub_0801CFA8
|
||||
ldr r0, _080A739C @ =gGFXSlots
|
||||
|
||||
+2
-2
@@ -8,8 +8,8 @@
|
||||
|
||||
|
||||
|
||||
thumb_func_start sub_080ADD30
|
||||
sub_080ADD30: @ 0x080ADD30
|
||||
thumb_func_start ResetPalettes
|
||||
ResetPalettes: @ 0x080ADD30
|
||||
push {r4, r5, r6, lr}
|
||||
ldr r4, _080ADD6C @ =gGFXSlots
|
||||
movs r1, #0x85
|
||||
|
||||
+1
-1
@@ -125,7 +125,7 @@ sub_08051A14: @ 0x08051A14
|
||||
bl EraseAllEntities
|
||||
bl sub_080197AC
|
||||
bl sub_08080668
|
||||
bl sub_080ADD30
|
||||
bl ResetPalettes
|
||||
movs r0, #1
|
||||
bl sub_0801CFA8
|
||||
bl sub_0806FD8C
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
mov r8, r0
|
||||
adds r6, r1, #0
|
||||
ldrh r1, [r6, #2]
|
||||
asrs r7, r1, #4
|
||||
movs r0, #1
|
||||
ands r7, r0
|
||||
movs r0, #0xf
|
||||
ands r1, r0
|
||||
cmp r1, #6
|
||||
bls _0806F1C8
|
||||
b _0806F332
|
||||
_0806F1C8:
|
||||
lsls r0, r1, #2
|
||||
ldr r1, _0806F1D4 @ =_0806F1D8
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0806F1D4: .4byte _0806F1D8
|
||||
_0806F1D8: @ jump table
|
||||
.4byte _0806F332 @ case 0
|
||||
.4byte _0806F342 @ case 1
|
||||
.4byte _0806F1F4 @ case 2
|
||||
.4byte _0806F24E @ case 3
|
||||
.4byte _0806F2BA @ case 4
|
||||
.4byte _0806F324 @ case 5
|
||||
.4byte _0806F336 @ case 6
|
||||
_0806F1F4:
|
||||
ldr r4, [r6]
|
||||
asrs r1, r4, #0xc
|
||||
movs r0, #0xf
|
||||
ands r1, r0
|
||||
ldr r0, _0806F210 @ =0x00000FFF
|
||||
ands r4, r0
|
||||
movs r5, #0
|
||||
cmp r1, #1
|
||||
beq _0806F22A
|
||||
cmp r1, #1
|
||||
bgt _0806F214
|
||||
cmp r1, #0
|
||||
beq _0806F21A
|
||||
b _0806F248
|
||||
.align 2, 0
|
||||
_0806F210: .4byte 0x00000FFF
|
||||
_0806F214:
|
||||
cmp r1, #2
|
||||
beq _0806F23A
|
||||
b _0806F248
|
||||
_0806F21A:
|
||||
adds r0, r4, #0
|
||||
bl CheckRoomFlag
|
||||
adds r5, r0, #0
|
||||
_0806F222:
|
||||
adds r0, r4, #0
|
||||
bl SetRoomFlag
|
||||
b _0806F248
|
||||
_0806F22A:
|
||||
adds r0, r4, #0
|
||||
bl CheckLocalFlag
|
||||
adds r5, r0, #0
|
||||
_0806F232:
|
||||
adds r0, r4, #0
|
||||
bl SetLocalFlag
|
||||
b _0806F248
|
||||
_0806F23A:
|
||||
adds r0, r4, #0
|
||||
bl CheckGlobalFlag
|
||||
adds r5, r0, #0
|
||||
adds r0, r4, #0
|
||||
bl SetGlobalFlag
|
||||
_0806F248:
|
||||
cmp r5, #0
|
||||
beq _0806F342
|
||||
b _0806F34C
|
||||
_0806F24E:
|
||||
ldr r4, [r6]
|
||||
asrs r1, r4, #0xc
|
||||
movs r0, #0xf
|
||||
ands r1, r0
|
||||
ldr r0, _0806F26C @ =0x00000FFF
|
||||
ands r4, r0
|
||||
movs r5, #0
|
||||
cmp r1, #1
|
||||
beq _0806F28A
|
||||
cmp r1, #1
|
||||
bgt _0806F270
|
||||
cmp r1, #0
|
||||
beq _0806F276
|
||||
b _0806F248
|
||||
.align 2, 0
|
||||
_0806F26C: .4byte 0x00000FFF
|
||||
_0806F270:
|
||||
cmp r1, #2
|
||||
beq _0806F29E
|
||||
b _0806F248
|
||||
_0806F276:
|
||||
adds r0, r4, #0
|
||||
bl CheckRoomFlag
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
beq _0806F222
|
||||
adds r0, r4, #0
|
||||
bl ClearRoomFlag
|
||||
b _0806F248
|
||||
_0806F28A:
|
||||
adds r0, r4, #0
|
||||
bl CheckLocalFlag
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
beq _0806F232
|
||||
adds r0, r4, #0
|
||||
bl ClearLocalFlag
|
||||
b _0806F248
|
||||
_0806F29E:
|
||||
adds r0, r4, #0
|
||||
bl CheckGlobalFlag
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
bne _0806F2B2
|
||||
adds r0, r4, #0
|
||||
bl SetGlobalFlag
|
||||
b _0806F248
|
||||
_0806F2B2:
|
||||
adds r0, r4, #0
|
||||
bl ClearGlobalFlag
|
||||
b _0806F248
|
||||
_0806F2BA:
|
||||
ldr r4, [r6]
|
||||
asrs r1, r4, #0xc
|
||||
movs r0, #0xf
|
||||
ands r1, r0
|
||||
ldr r0, _0806F2D8 @ =0x00000FFF
|
||||
ands r4, r0
|
||||
movs r5, #0
|
||||
cmp r1, #4
|
||||
bhi _0806F248
|
||||
lsls r0, r1, #2
|
||||
ldr r1, _0806F2DC @ =_0806F2E0
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0806F2D8: .4byte 0x00000FFF
|
||||
_0806F2DC: .4byte _0806F2E0
|
||||
_0806F2E0: @ jump table
|
||||
.4byte _0806F2F4 @ case 0
|
||||
.4byte _0806F2FC @ case 1
|
||||
.4byte _0806F304 @ case 2
|
||||
.4byte _0806F30C @ case 3
|
||||
.4byte _0806F314 @ case 4
|
||||
_0806F2F4:
|
||||
adds r0, r4, #0
|
||||
bl CheckRoomFlag
|
||||
b _0806F320
|
||||
_0806F2FC:
|
||||
adds r0, r4, #0
|
||||
bl CheckLocalFlag
|
||||
b _0806F320
|
||||
_0806F304:
|
||||
adds r0, r4, #0
|
||||
bl CheckGlobalFlag
|
||||
b _0806F320
|
||||
_0806F30C:
|
||||
adds r0, r4, #0
|
||||
bl CheckKinstoneFused
|
||||
b _0806F320
|
||||
_0806F314:
|
||||
adds r0, r4, #0
|
||||
bl GetInventoryValue
|
||||
cmp r0, #0
|
||||
beq _0806F320
|
||||
movs r0, #1
|
||||
_0806F320:
|
||||
adds r5, r0, #0
|
||||
b _0806F248
|
||||
_0806F324:
|
||||
ldr r1, [r6, #4]
|
||||
cmp r1, #0
|
||||
beq _0806F332
|
||||
mov r0, r8
|
||||
bl _call_via_r1
|
||||
b _0806F35E
|
||||
_0806F332:
|
||||
movs r0, #0
|
||||
b _0806F34E
|
||||
_0806F336:
|
||||
ldr r0, _0806F348 @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F34C
|
||||
_0806F342:
|
||||
ldrh r0, [r6, #6]
|
||||
b _0806F34E
|
||||
.align 2, 0
|
||||
_0806F348: .4byte gPlayerState
|
||||
_0806F34C:
|
||||
ldrh r0, [r6, #4]
|
||||
_0806F34E:
|
||||
cmp r7, #0
|
||||
beq _0806F35A
|
||||
mov r1, r8
|
||||
bl MessageNoOverlap
|
||||
b _0806F35E
|
||||
_0806F35A:
|
||||
bl MessageFromTarget
|
||||
_0806F35E:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.syntax divided
|
||||
@@ -0,0 +1,30 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r2, r0, #0
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r2, r1]
|
||||
ldr r4, [r2, #0x48]
|
||||
movs r1, #0
|
||||
ldrsb r1, [r4, r1]
|
||||
adds r0, r0, r1
|
||||
ldr r3, _0806F7CC @ =gRoomControls
|
||||
ldrh r1, [r3, #6]
|
||||
subs r0, r0, r1
|
||||
movs r5, #0x32
|
||||
ldrsh r1, [r2, r5]
|
||||
movs r2, #1
|
||||
ldrsb r2, [r4, r2]
|
||||
adds r1, r1, r2
|
||||
ldrh r2, [r3, #8]
|
||||
subs r1, r1, r2
|
||||
movs r2, #0x3f
|
||||
lsrs r0, r0, #4
|
||||
ands r0, r2
|
||||
lsrs r1, r1, #4
|
||||
ands r1, r2
|
||||
lsls r1, r1, #6
|
||||
adds r0, r0, r1
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0806F7CC: .4byte gRoomControls
|
||||
.syntax divided
|
||||
@@ -0,0 +1,25 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
mov r6, r8
|
||||
push {r6}
|
||||
adds r4, r2, #0
|
||||
adds r5, r3, #0
|
||||
movs r2, #0x2e
|
||||
ldrsh r6, [r0, r2]
|
||||
movs r2, #0x32
|
||||
ldrsh r3, [r0, r2]
|
||||
mov r8, r3
|
||||
movs r3, #0x2e
|
||||
ldrsh r2, [r1, r3]
|
||||
adds r2, r2, r4
|
||||
movs r0, #0x32
|
||||
ldrsh r3, [r1, r0]
|
||||
adds r3, r3, r5
|
||||
adds r0, r6, #0
|
||||
mov r1, r8
|
||||
bl sub_080045D4
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -0,0 +1,48 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r4, [r2, #0x14]
|
||||
ldrb r1, [r2, #0x15]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0806F9E6
|
||||
movs r0, #0x1c
|
||||
ands r0, r1
|
||||
lsrs r3, r0, #2
|
||||
movs r1, #1
|
||||
adds r0, r3, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F9C4
|
||||
subs r0, r3, r4
|
||||
adds r0, #1
|
||||
movs r1, #4
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F9E6
|
||||
_0806F9C4:
|
||||
ldrb r0, [r2, #0x15]
|
||||
lsrs r0, r0, #2
|
||||
movs r1, #0x7e
|
||||
ands r0, r1
|
||||
strb r0, [r2, #0x14]
|
||||
adds r4, r0, #0
|
||||
cmp r4, #4
|
||||
bhi _0806F9DE
|
||||
ldrb r1, [r2, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
b _0806F9E4
|
||||
_0806F9DE:
|
||||
ldrb r0, [r2, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
_0806F9E4:
|
||||
strb r0, [r2, #0x18]
|
||||
_0806F9E6:
|
||||
adds r0, r4, #0
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -0,0 +1,65 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
sub sp, #4
|
||||
ldr r7, _0806F114 @ =gUnk_03003DA8
|
||||
ldr r5, [r7, #4]
|
||||
movs r0, #0
|
||||
cmp r5, r7
|
||||
beq _0806F0BA
|
||||
_0806F0B2:
|
||||
adds r0, #1
|
||||
ldr r5, [r5, #4]
|
||||
cmp r5, r7
|
||||
bne _0806F0B2
|
||||
_0806F0BA:
|
||||
cmp r0, #1
|
||||
bls _0806F10E
|
||||
ldr r5, [r7, #4]
|
||||
cmp r5, r7
|
||||
beq _0806F10E
|
||||
movs r2, #1
|
||||
_0806F0C6:
|
||||
ldrb r1, [r5, #0x10]
|
||||
adds r0, r2, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F108
|
||||
ldrb r1, [r5, #0x17]
|
||||
adds r0, r2, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F108
|
||||
ldr r4, [r5, #4]
|
||||
cmp r4, r7
|
||||
beq _0806F108
|
||||
movs r6, #1
|
||||
_0806F0E2:
|
||||
ldrb r1, [r4, #0x10]
|
||||
adds r0, r6, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F102
|
||||
ldrb r1, [r4, #0x17]
|
||||
adds r0, r6, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F102
|
||||
adds r0, r5, #0
|
||||
adds r1, r4, #0
|
||||
str r2, [sp]
|
||||
bl sub_08004484
|
||||
ldr r2, [sp]
|
||||
_0806F102:
|
||||
ldr r4, [r4, #4]
|
||||
cmp r4, r7
|
||||
bne _0806F0E2
|
||||
_0806F108:
|
||||
ldr r5, [r5, #4]
|
||||
cmp r5, r7
|
||||
bne _0806F0C6
|
||||
_0806F10E:
|
||||
add sp, #4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0806F114: .4byte gUnk_03003DA8
|
||||
.syntax divided
|
||||
+1
-1
@@ -89,7 +89,7 @@ _0808CF82:
|
||||
bl sub_0808D030
|
||||
movs r0, #0
|
||||
bl sub_0801CFA8
|
||||
bl sub_080ADD30
|
||||
bl ResetPalettes
|
||||
ldr r0, _0808D024 @ =gGFXSlots
|
||||
movs r6, #1
|
||||
strb r6, [r0]
|
||||
|
||||
+1
-1
@@ -3026,7 +3026,7 @@
|
||||
"size": 28
|
||||
},
|
||||
{
|
||||
"path": "sounds/sfx11B.bin",
|
||||
"path": "sounds/sfxChestOpen.bin",
|
||||
"start": 14558640,
|
||||
"type": "midi",
|
||||
"options": {
|
||||
|
||||
@@ -281,7 +281,7 @@
|
||||
.equiv SFX_ITEM_SHIELD_BOUNCE, 0x118
|
||||
.equiv SFX_ITEM_GLOVES_KNOCKBACK, 0x119
|
||||
.equiv SFX_EM_ARMOS_ON, 0x11a
|
||||
.equiv SFX_11B, 0x11b
|
||||
.equiv SFX_CHEST_OPEN, 0x11b
|
||||
.equiv SFX_11C, 0x11c
|
||||
.equiv SFX_11D, 0x11d
|
||||
.equiv SFX_EM_MOBLIN_SPEAR, 0x11e
|
||||
|
||||
+1
-1
@@ -247,7 +247,7 @@
|
||||
.include "sounds/sfxItemShieldBounce.s"
|
||||
.include "sounds/sfxItemGlovesKnockback.s"
|
||||
.include "sounds/sfxEmArmosOn.s"
|
||||
.include "sounds/sfx11B.s"
|
||||
.include "sounds/sfxChestOpen.s"
|
||||
.include "sounds/sfx11C.s"
|
||||
.include "sounds/sfx11D.s"
|
||||
.include "sounds/sfxEmMoblinSpear.s"
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
#ifndef ARM_PROXY_H
|
||||
#define ARM_PROXY_H
|
||||
|
||||
extern void PrepNextFrame(void);
|
||||
extern void WaitForNextFrame(void);
|
||||
|
||||
#endif
|
||||
|
||||
+2
-2
@@ -291,7 +291,7 @@ typedef enum {
|
||||
SFX_ITEM_SHIELD_BOUNCE,
|
||||
SFX_ITEM_GLOVES_KNOCKBACK,
|
||||
SFX_EM_ARMOS_ON,
|
||||
SFX_11B,
|
||||
SFX_CHEST_OPEN,
|
||||
SFX_11C,
|
||||
SFX_11D,
|
||||
SFX_EM_MOBLIN_SPEAR,
|
||||
@@ -593,6 +593,6 @@ extern SoundPlayingInfo gSoundPlayingInfo;
|
||||
|
||||
void InitSound(void);
|
||||
void SoundReq(Sound sound);
|
||||
void SoundLoop(void);
|
||||
void AudioMain(void);
|
||||
|
||||
#endif // AUDIO_H
|
||||
|
||||
+3
-3
@@ -49,7 +49,6 @@ extern u32 GetSaleItemConfirmMessageID(u32);
|
||||
extern void FlushSprites(void);
|
||||
extern void DispReset(u32);
|
||||
extern void InitSoundPlayingInfo(void);
|
||||
extern void InitDMA(void);
|
||||
extern Entity* CreateProjectile(u32);
|
||||
extern void RegisterPlayerHitbox();
|
||||
extern s32 GetItemPrice();
|
||||
@@ -107,7 +106,6 @@ extern void sub_080AD9B0(void);
|
||||
extern void sub_080AD918(void);
|
||||
extern void sub_0801E104(void);
|
||||
extern void sub_080A57F4(void);
|
||||
extern void sub_0804B29C(void*);
|
||||
extern void sub_08030118(u32);
|
||||
extern void sub_080575C8(u32);
|
||||
extern void sub_08057688(void);
|
||||
@@ -278,7 +276,7 @@ extern Entity* sub_08077C0C(ItemBehavior*, u32);
|
||||
extern void sub_08077D38(ItemBehavior*, u32);
|
||||
extern void sub_08077E78(ItemBehavior*, u32);
|
||||
extern void UpdateItemAnim(ItemBehavior*);
|
||||
extern void sub_0806F948(Entity*);
|
||||
extern u32 sub_0806F948(Entity*);
|
||||
extern void sub_08077DF4(ItemBehavior*, u32);
|
||||
extern void sub_08077BB8(ItemBehavior*);
|
||||
extern bool32 sub_08077EFC(ItemBehavior*);
|
||||
@@ -295,4 +293,6 @@ extern void sub_0801855C(void);
|
||||
extern u32 sub_0807CAEC(u32);
|
||||
extern void sub_0807CAC8(u32);
|
||||
extern void LoadObjPalette(Entity*, u32);
|
||||
|
||||
void sub_0804B3C4(void*);
|
||||
#endif
|
||||
|
||||
+120
-123
@@ -21,128 +21,125 @@ extern void ItemOcarina(ItemBehavior*, u32);
|
||||
extern void ItemTryPickupObject(ItemBehavior*, u32);
|
||||
extern void ItemJarEmpty(ItemBehavior*, u32);
|
||||
|
||||
/* On hold until naming conflicts are resolved */
|
||||
/*
|
||||
enum
|
||||
{
|
||||
Untyped,
|
||||
SmithSword = 0x01,
|
||||
GreenSword = 0x02,
|
||||
RedSword = 0x03,
|
||||
BlueSword = 0x04,
|
||||
// UnusedSword = 0x05,
|
||||
FourSword = 0x06,
|
||||
Bombs = 0x07,
|
||||
RemoteBombs = 0x08,
|
||||
Bow = 0x09,
|
||||
LightArrow = 0x0A,
|
||||
Boomerang = 0x0B,
|
||||
MagicBoomerang = 0x0C,
|
||||
Shield = 0x0D,
|
||||
MirrorShield = 0x0E,
|
||||
LanternOff = 0x0F,
|
||||
enum {
|
||||
ITEM_NONE,
|
||||
ITEM_SMITH_SWORD,
|
||||
ITEM_GREEN_SWORD,
|
||||
ITEM_RED_SWORD,
|
||||
ITEM_BLUE_SWORD,
|
||||
ITEM_UNUSED_SWORD,
|
||||
ITEM_FOURSWORD,
|
||||
ITEM_BOMBS,
|
||||
ITEM_REMOTE_BOMBS,
|
||||
ITEM_BOW,
|
||||
ITEM_LIGHT_ARROW,
|
||||
ITEM_BOOMERANG,
|
||||
ITEM_MAGIC_BOOMERANG,
|
||||
ITEM_SHIELD,
|
||||
ITEM_MIRROR_SHIELD,
|
||||
ITEM_LANTERN_OFF,
|
||||
ITEM_LANTERN_ON,
|
||||
ITEM_GUST_JAR,
|
||||
ITEM_PACCI_CANE,
|
||||
ITEM_MOLE_MITTS,
|
||||
ITEM_ROCS_CAPE,
|
||||
ITEM_PEGASUS_BOOTS,
|
||||
ITEM_FIRE_ROD,
|
||||
ITEM_OCARINA,
|
||||
ITEM_ORB_GREEN,
|
||||
ITEM_ORB_BLUE,
|
||||
ITEM_ORB_RED,
|
||||
ITEM_TRAP,
|
||||
ITEM_BOTTLE1,
|
||||
ITEM_BOTTLE2,
|
||||
ITEM_BOTTLE3,
|
||||
ITEM_BOTTLE4,
|
||||
ITEM_BOTTLE_EMPTY,
|
||||
ITEM_BOTTLE_BUTTER,
|
||||
ITEM_BOTTLE_MILK,
|
||||
ITEM_BOTTLE_HALF_MILK,
|
||||
ITEM_BOTTLE_RED_POTION,
|
||||
ITEM_BOTTLE_BLUE_POTION,
|
||||
ITEM_BOTTLE_WATER,
|
||||
ITEM_BOTTLE_MINERAL_WATER,
|
||||
ITEM_BOTTLE_FAIRY,
|
||||
ITEM_BOTTLE_PICOLYTE_RED,
|
||||
ITEM_BOTTLE_PICOLYTE_ORANGE,
|
||||
ITEM_BOTTLE_PICOLYTE_YELLOW,
|
||||
ITEM_BOTTLE_PICOLYTE_GREEN,
|
||||
ITEM_BOTTLE_PICOLYTE_BLUE,
|
||||
ITEM_BOTTLE_PICOLYTE_WHITE,
|
||||
BOTTLE_CHARM_NAYRU,
|
||||
BOTTLE_CHARM_FARORE,
|
||||
BOTTLE_CHARM_DIN,
|
||||
ITEM_32,
|
||||
ITEM_33,
|
||||
ITEM_QST_SWORD,
|
||||
ITEM_QST_BROKEN_SWORD,
|
||||
ITEM_QST_DOGFOOD,
|
||||
ITEM_QST_LONLON_KEY,
|
||||
ITEM_QST_MUSHROOM,
|
||||
ITEM_QST_BOOK1,
|
||||
ITEM_QST_BOOK2,
|
||||
ITEM_QST_BOOK3,
|
||||
ITEM_QST_GRAVEYARD_KEY,
|
||||
ITEM_QST_TINGLE_TROPHY,
|
||||
ITEM_QST_CARLOV_MEDAL,
|
||||
ITEM_SHELLS,
|
||||
ITEM_EARTH_ELEMENT,
|
||||
ITEM_FIRE_ELEMENT,
|
||||
ITEM_WATER_ELEMENT,
|
||||
ITEM_WIND_ELEMENT,
|
||||
ITEM_GRIP_RING,
|
||||
ITEM_POWER_BRACELETS,
|
||||
ITEM_FLIPPERS,
|
||||
ITEM_MAP,
|
||||
ITEM_SKILL_SPIN_ATTACK,
|
||||
ITEM_SKILL_ROLL_ATTACK,
|
||||
ITEM_SKILL_DASH_ATTACK,
|
||||
ITEM_SKILL_ROCK_BREAKER,
|
||||
ITEM_SKILL_SWORD_BEAM,
|
||||
ITEM_SKILL_GREAT_SPIN,
|
||||
ITEM_SKILL_DOWN_THRUST,
|
||||
ITEM_SKILL_PERIL_BEAM,
|
||||
ITEM_DUNGEON_MAP,
|
||||
ITEM_COMPASS,
|
||||
ITEM_BIG_KEY,
|
||||
ITEM_SMALL_KEY,
|
||||
ITEM_RUPEE1,
|
||||
ITEM_RUPEE5,
|
||||
ITEM_RUPEE20,
|
||||
ITEM_RUPEE50,
|
||||
ITEM_RUPEE100,
|
||||
ITEM_RUPEE200,
|
||||
ITEM_5A,
|
||||
ITEM_JABBERNUT,
|
||||
ITEM_KINSTONE,
|
||||
ITEM_BOMBS5,
|
||||
ITEM_ARROWS5,
|
||||
ITEM_HEART,
|
||||
ITEM_FAIRY,
|
||||
ITEM_SHELLS30,
|
||||
ITEM_HEART_CONTAINER,
|
||||
ITEM_HEART_PIECE,
|
||||
ITEM_WALLET,
|
||||
ITEM_BOMBBAG,
|
||||
ITEM_LARGE_QUIVER,
|
||||
ITEM_KINSTONE_BAG,
|
||||
ITEM_BRIOCHE,
|
||||
ITEM_CROISSANT,
|
||||
ITEM_PIE,
|
||||
ITEM_CAKE,
|
||||
ITEM_BOMBS10,
|
||||
ITEM_BOMBS30,
|
||||
ITEM_ARROWS10,
|
||||
ITEM_ARROWS30,
|
||||
ITEM_ARROW_BUTTERFLY,
|
||||
ITEM_DIG_BUTTERFLY,
|
||||
ITEM_SWIM_BUTTERFLY,
|
||||
ITEM_SKILL_FAST_SPIN,
|
||||
ITEM_SKILL_FAST_SPLIT,
|
||||
ITEM_SKILL_LONG_SPIN,
|
||||
};
|
||||
|
||||
GustJar = 0x11,
|
||||
PacciCane = 0x12,
|
||||
MoleMitts = 0x13,
|
||||
RocsCape = 0x14,
|
||||
PegasusBoots = 0x15,
|
||||
FireRod = 0x16,
|
||||
Ocarina = 0x17,
|
||||
GreenOrb = 0x18,
|
||||
BlueOrb = 0x19,
|
||||
RedOrb = 0x1A,
|
||||
Trap = 0x1B,
|
||||
Bottle1 = 0x1C,
|
||||
Bottle2 = 0x1D,
|
||||
Bottle3 = 0x1E,
|
||||
Bottle4 = 0x1F,
|
||||
BottleEmpty = 0x20,
|
||||
BottleButter = 0x21,
|
||||
BottleMilk = 0x22,
|
||||
BottleHalfMilk = 0x23,
|
||||
BottleRedPotion = 0x24,
|
||||
BottleBluePotion = 0x25,
|
||||
BottleWater = 0x26,
|
||||
BottleMineralWater = 0x27,
|
||||
BottleFairy = 0x28,
|
||||
BottlePicolyteRed = 0x29,
|
||||
BottlePicolyteOrange = 0x2A,
|
||||
BottlePicolyteYellow = 0x2B,
|
||||
BottlePiclolyteGreen = 0x2C,
|
||||
BottlePicolyteBlue = 0x2D,
|
||||
BottlePicolyteWhite = 0x2E,
|
||||
BottleCharmNayru = 0x2F,
|
||||
BottleCharmFarore = 0x30,
|
||||
BottleCharmDin = 0x31,
|
||||
|
||||
|
||||
SmithSwordQuest = 0x34,
|
||||
BrokenPicoriBlade = 0x35,
|
||||
DogFoodBottle = 0x36,
|
||||
LonLonKey = 0x37,
|
||||
WakeUpMushroom = 0x38,
|
||||
HyruleanBestiary = 0x39,
|
||||
PicoriLegend = 0x3A,
|
||||
MaskHistory = 0x3B,
|
||||
GraveyardKey = 0x3C,
|
||||
TingleTrophy = 0x3D,
|
||||
CarlovMedal = 0x3E,
|
||||
ShellsX = 0x3F,
|
||||
EarthElement = 0x40,
|
||||
FireElement = 0x41,
|
||||
WaterElement = 0x42,
|
||||
WindElement = 0x43,
|
||||
GripRing = 0x44,
|
||||
PowerBracelets = 0x45,
|
||||
Flippers = 0x46,
|
||||
HyruleMap = 0x47,
|
||||
SpinAttack = 0x48,
|
||||
RollAttack = 0x49,
|
||||
DashAttack = 0x4A,
|
||||
RockBreaker = 0x4B,
|
||||
SwordBeam = 0x4C,
|
||||
GreatSpin = 0x4D,
|
||||
DownThrust = 0x4E,
|
||||
PerilBeam = 0x4F,
|
||||
DungeonMap = 0x50,
|
||||
Compass = 0x51,
|
||||
BigKey = 0x52,
|
||||
SmallKey = 0x53,
|
||||
Rupee1 = 0x54,
|
||||
Rupee5 = 0x55,
|
||||
Rupee20 = 0x56,
|
||||
Rupee50 = 0x57,
|
||||
Rupee100 = 0x58,
|
||||
Rupee200 = 0x59,
|
||||
|
||||
JabberNut = 0x5B,
|
||||
KinstoneX = 0x5C,
|
||||
Bombs5 = 0x5D,
|
||||
Arrows5 = 0x5E,
|
||||
SmallHeart = 0x5F,
|
||||
Fairy = 0x60,
|
||||
Shells30 = 0x61,
|
||||
HeartContainer = 0x62,
|
||||
PieceOfHeart = 0x63,
|
||||
Wallet = 0x64,
|
||||
BombBag = 0x65,
|
||||
LargeQuiver = 0x66,
|
||||
KinstoneBag = 0x67,
|
||||
Brioche = 0x68,
|
||||
Croissant = 0x69,
|
||||
PieSlice = 0x6A,
|
||||
CakeSlice = 0x6B,
|
||||
Bombs10 = 0x6C,
|
||||
Bombs30 = 0x6D,
|
||||
Arrows10 = 0x6E,
|
||||
Arrows30 = 0x6F,
|
||||
ArrowButterfly = 0x70,
|
||||
DigButterfly = 0x71,
|
||||
SwimButterfly = 0x72,
|
||||
FastSpin = 0x73,
|
||||
FastSplit = 0x74,
|
||||
LongSpin = 0x75
|
||||
} ItemType;
|
||||
*/
|
||||
#endif
|
||||
|
||||
+16
-9
@@ -47,18 +47,23 @@ enum {
|
||||
SCREEN_DEBUG_TEXT,
|
||||
};
|
||||
|
||||
enum {
|
||||
DEFAULT,
|
||||
SLEEP,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
vu8 interruptFlag;
|
||||
u8 field_0x1;
|
||||
u8 sleepStatus;
|
||||
u8 screen;
|
||||
u8 funcIndex;
|
||||
u8 transition;
|
||||
u8 field_0x5;
|
||||
u8 muteAudio;
|
||||
u8 field_0x7;
|
||||
u8 countdown;
|
||||
u8 field_0x9;
|
||||
u8 field_0xa;
|
||||
u8 pauseFrames;
|
||||
u8 pauseCount;
|
||||
u8 pauseInterval;
|
||||
u16 ticks;
|
||||
} Main;
|
||||
|
||||
@@ -84,18 +89,20 @@ extern UI gUnk_02032EC0;
|
||||
*/
|
||||
void InitScreen(u32 screen);
|
||||
|
||||
void InitDMA(void);
|
||||
|
||||
extern void sub_08056208(void);
|
||||
extern void sub_0804FFE4(void);
|
||||
extern void sub_080ADD30(void);
|
||||
extern void InitFade(void);
|
||||
extern void ResetPalettes(void);
|
||||
|
||||
extern void DoSoftReset(void);
|
||||
extern void sub_08056260(void);
|
||||
extern void SetSleepMode(void);
|
||||
extern void VBlankIntrWait();
|
||||
extern void UpdateFade(void);
|
||||
extern void FadeMain(void);
|
||||
|
||||
extern u8 gUnk_03003DE4;
|
||||
|
||||
extern void sub_0804FF84(u32);
|
||||
extern void SetBrightness(u32);
|
||||
extern u16 gPaletteBuffer[];
|
||||
extern void VBlankInterruptWait(void);
|
||||
extern void DisableInterruptsAndDMA(void);
|
||||
|
||||
@@ -149,6 +149,18 @@ extern struct {
|
||||
|
||||
extern DiggingCaveEntrance* diggingCaveEntrances[];
|
||||
|
||||
typedef struct {
|
||||
Manager manager;
|
||||
u8 field_0x20[0x15];
|
||||
u8 field_0x35;
|
||||
u8 field_0x36;
|
||||
u8 field_0x37;
|
||||
s16 x;
|
||||
u16 y;
|
||||
u16 tile;
|
||||
u16 field_0x3e;
|
||||
} Manager24;
|
||||
|
||||
typedef struct {
|
||||
u8 unk_00;
|
||||
u8 unk_01;
|
||||
|
||||
+30
-1
@@ -74,7 +74,8 @@ typedef struct {
|
||||
u8 filler4[48];
|
||||
u8 filler5[28];
|
||||
u32 animFlags;
|
||||
void* field_0x6c[24];
|
||||
void* field_0x6c[8];
|
||||
void* field_0x8c[16];
|
||||
} RoomVars;
|
||||
static_assert(sizeof(RoomVars) == 0xCC);
|
||||
extern RoomVars gRoomVars;
|
||||
@@ -142,6 +143,34 @@ typedef struct {
|
||||
} ScreenTransition;
|
||||
extern ScreenTransition gScreenTransition;
|
||||
|
||||
typedef struct {
|
||||
u8 type;
|
||||
u8 _1;
|
||||
u8 _2;
|
||||
u8 _3;
|
||||
u16 _4;
|
||||
u8 _6;
|
||||
u8 _7;
|
||||
} TileEntity;
|
||||
extern TileEntity gSmallChests[8];
|
||||
|
||||
typedef enum {
|
||||
NONE,
|
||||
ROOM_VISIT_MARKER,
|
||||
SMALL_CHEST,
|
||||
BIG_CHEST,
|
||||
BOMBABLE_WALL,
|
||||
SIGN,
|
||||
TILE_ENTITY_6,
|
||||
MUSIC_SETTER,
|
||||
TILE_ENTITY_8,
|
||||
DARKNESS,
|
||||
DESTRUCTIBLE_TILE,
|
||||
GRASS_DROP_CHANGER,
|
||||
LOCATION_CHANGER,
|
||||
TILE_ENTITY_D
|
||||
} TileEntityType;
|
||||
|
||||
extern void SetTileType(u32, u32, u32);
|
||||
extern void sub_08080964(u32 time, u32 magnitude); // shake screen
|
||||
|
||||
|
||||
+6
-5
@@ -42,11 +42,12 @@ typedef struct {
|
||||
/*0x088*/ PlayerWorldStatus saved_status;
|
||||
/*0x0A8*/ Stats stats;
|
||||
/*0x0D0*/ u8 fillerD0[0x71];
|
||||
/*0x141*/ u8 unk141[0x45c - 0x141];
|
||||
/*0x45c*/ u8 unk45C[0x10];
|
||||
/*0x46c*/ u8 unk46C[0x20];
|
||||
/*0x48c*/ u32 unk48C[8];
|
||||
/*0x4ac*/ u8 filler4ac[0x8];
|
||||
/*0x141*/ u8 unk141[0x1c1 - 0x141];
|
||||
/*0x1C1*/ u8 unk1C1[0x45c - 0x1c1];
|
||||
/*0x45C*/ u8 unk45C[0x10];
|
||||
/*0x46C*/ u8 unk46C[0x20];
|
||||
/*0x48C*/ u32 unk48C[8];
|
||||
/*0x4AC*/ u8 filler4ac[0x8];
|
||||
} SaveFile;
|
||||
|
||||
extern SaveFile gSave;
|
||||
|
||||
@@ -157,30 +157,4 @@ typedef struct {
|
||||
void* unk8;
|
||||
} WStruct;
|
||||
|
||||
typedef struct {
|
||||
u8 type;
|
||||
u8 unk_0x1;
|
||||
u8 unk_0x2;
|
||||
u8 unk_0x3;
|
||||
u16 tilePos;
|
||||
u16 unk_0x6;
|
||||
} TileEntityData;
|
||||
|
||||
typedef enum {
|
||||
NONE,
|
||||
ROOM_VISIT_MARKER,
|
||||
SMALL_CHEST,
|
||||
BIG_CHEST,
|
||||
BOMBABLE_WALL,
|
||||
SIGN,
|
||||
TILE_ENTITY_6,
|
||||
MUSIC_SETTER,
|
||||
TILE_ENTITY_8,
|
||||
DARKNESS,
|
||||
DESTRUCTIBLE_TILE,
|
||||
GRASS_DROP_CHANGER,
|
||||
TILE_ENTITY_C,
|
||||
TILE_ENTITY_D
|
||||
} TileEntityType;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -475,19 +475,15 @@ SECTIONS {
|
||||
/* END enemies */
|
||||
src/code_08049CD4.o(.text);
|
||||
asm/code_08049D30.o(.text);
|
||||
src/enemyInit.o(.text);
|
||||
src/enemyUtils.o(.text);
|
||||
asm/code_0804A720.o(.text);
|
||||
asm/sub_0804AA30.o(.text);
|
||||
src/createEnemy.o(.text);
|
||||
src/code_0804AA84.o(.text);
|
||||
asm/code_0804AA84.o(.text);
|
||||
src/loadRoom.o(.text);
|
||||
asm/code_0804B058.o(.text);
|
||||
src/room.o(.text);
|
||||
src/code_0804B9F8.o(.text);
|
||||
src/sub_08050008.o(.text);
|
||||
src/roomInit.o(.text);
|
||||
src/fade.o(.text);
|
||||
asm/code_08050038.o(.text);
|
||||
src/fileScreen.o(.text);
|
||||
asm/fileScreen.o(.text);
|
||||
src/overworld.o(.text);
|
||||
@@ -654,9 +650,7 @@ SECTIONS {
|
||||
src/npc/phonograph.o(.text);
|
||||
src/npc/npc58.o(.text);
|
||||
/* END npcs */
|
||||
asm/code_0806EC20.o(.text);
|
||||
src/createNPC.o(.text);
|
||||
asm/code_0806ED78.o(.text);
|
||||
src/npcUtils.o(.text);
|
||||
src/coord.o(.text);
|
||||
asm/code_0806FA6C.o(.text);
|
||||
src/playerItem/playerItem12.o(.text);
|
||||
@@ -905,7 +899,7 @@ SECTIONS {
|
||||
asm/objectC1.o(.text);
|
||||
/* END objects */
|
||||
asm/sub_080A276C.o(.text);
|
||||
src/createObject.o(.text);
|
||||
src/objectUtils.o(.text);
|
||||
asm/code_080A29BC.o(.text);
|
||||
src/playerItem/playerItemShield.o(.text);
|
||||
src/playerItem/playerItem15.o(.text);
|
||||
@@ -919,8 +913,8 @@ SECTIONS {
|
||||
src/sub_080A554C.o(.text);
|
||||
asm/code_080A5574.o(.text);
|
||||
src/playerItem/playerItemSword.o(.text);
|
||||
src/code_080A7C00.o(.text);
|
||||
src/projectileInit.o(.text);
|
||||
src/playerItemUtils.o(.text);
|
||||
src/projectileUtils.o(.text);
|
||||
src/projectile/darkNutSwordSlash.o(.text);
|
||||
src/projectile/rockProjectile.o(.text);
|
||||
src/projectile/boneProjectile.o(.text);
|
||||
|
||||
+3
-3
@@ -143,7 +143,7 @@ void SoundReq(Sound sound) {
|
||||
}
|
||||
}
|
||||
|
||||
void SoundLoop(void) {
|
||||
void AudioMain(void) {
|
||||
s32 fadeValue;
|
||||
SoundPlayingInfo* ptr = &gSoundPlayingInfo;
|
||||
|
||||
@@ -478,7 +478,7 @@ extern const SongHeader sfx117;
|
||||
extern const SongHeader sfxItemShieldBounce;
|
||||
extern const SongHeader sfxItemGlovesKnockback;
|
||||
extern const SongHeader sfxEmArmosOn;
|
||||
extern const SongHeader sfx11B;
|
||||
extern const SongHeader sfxChestOpen;
|
||||
extern const SongHeader sfx11C;
|
||||
extern const SongHeader sfx11D;
|
||||
extern const SongHeader sfxEmMoblinSpear;
|
||||
@@ -1110,7 +1110,7 @@ const Song gSongTable[] = {
|
||||
[SFX_ITEM_SHIELD_BOUNCE] = { &sfxItemShieldBounce, MUSIC_PLAYER_07, MUSIC_PLAYER_07 },
|
||||
[SFX_ITEM_GLOVES_KNOCKBACK] = { &sfxItemGlovesKnockback, MUSIC_PLAYER_14, MUSIC_PLAYER_14 },
|
||||
[SFX_EM_ARMOS_ON] = { &sfxEmArmosOn, MUSIC_PLAYER_13, MUSIC_PLAYER_13 },
|
||||
[SFX_11B] = { &sfx11B, MUSIC_PLAYER_12, MUSIC_PLAYER_12 },
|
||||
[SFX_CHEST_OPEN] = { &sfxChestOpen, MUSIC_PLAYER_12, MUSIC_PLAYER_12 },
|
||||
[SFX_11C] = { &sfx11C, MUSIC_PLAYER_11, MUSIC_PLAYER_11 },
|
||||
[SFX_11D] = { &sfx11D, MUSIC_PLAYER_10, MUSIC_PLAYER_10 },
|
||||
[SFX_EM_MOBLIN_SPEAR] = { &sfxEmMoblinSpear, MUSIC_PLAYER_0F, MUSIC_PLAYER_0F },
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "utils.h"
|
||||
#include "fileScreen.h"
|
||||
|
||||
extern u16 gPaletteBuffer[];
|
||||
extern u32 gUsedPalettes;
|
||||
|
||||
// function pointer to overlay (0x03005e98) in ram calls rom function MakeFadeBuff256
|
||||
extern u32 gMakeFadeBuff256;
|
||||
typedef void (*fptrMakeFadeBuff256)(u8*, u8*, u16, u8);
|
||||
|
||||
void FadeMain() {
|
||||
fptrMakeFadeBuff256 func;
|
||||
u32 usedPalettesTmp, palIdx;
|
||||
|
||||
struct_020354C0* ptrUnk = gUnk_020354C0;
|
||||
usedPalettesTmp = gUsedPalettes;
|
||||
gUsedPalettes = 0;
|
||||
palIdx = 0;
|
||||
|
||||
while (usedPalettesTmp != 0) {
|
||||
if ((usedPalettesTmp & 1) == 1) {
|
||||
func = (fptrMakeFadeBuff256)&gMakeFadeBuff256;
|
||||
func(&((u8*)gPaletteBuffer)[palIdx], &PAL_RAM[palIdx], ptrUnk->unk2, ptrUnk->unk1);
|
||||
}
|
||||
palIdx += 0x20;
|
||||
|
||||
ptrUnk++;
|
||||
usedPalettesTmp /= 2;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0804FFE4() {
|
||||
MemClear(&gFadeControl, sizeof(gFadeControl));
|
||||
MemClear(&gUnk_020354C0, sizeof(gUnk_020354C0));
|
||||
gFadeControl.mask = 0xffffffff;
|
||||
}
|
||||
@@ -1,115 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "utils.h"
|
||||
#include "textbox.h"
|
||||
#include "save.h"
|
||||
#include "audio.h"
|
||||
#include "flags.h"
|
||||
#include "functions.h"
|
||||
#include "object.h"
|
||||
|
||||
extern Entity* GiveItemWithCutscene();
|
||||
extern Entity* sub_080A276C(Entity*, u32, u32);
|
||||
extern void sub_08078AF0(Entity*, u32, u32);
|
||||
extern Entity* sub_0805E744(void);
|
||||
|
||||
extern TileEntityData gSmallChests[8];
|
||||
|
||||
void sub_080A7D44(u32, bool32);
|
||||
|
||||
void CreateItemEntity(u32 type, u32 type2, u32 actionDelay) {
|
||||
Entity* entity = GiveItemWithCutscene(type, type2, actionDelay);
|
||||
if (entity != NULL) {
|
||||
Entity* new_entity = sub_080A276C(entity, entity->type, 0);
|
||||
entity->parent = new_entity;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080A7C18(u32 type, u32 type2, u32 actionDelay) {
|
||||
Entity* entity = GiveItemWithCutscene(type, type2, actionDelay);
|
||||
if (entity != NULL) {
|
||||
entity->parent = &gPlayerEntity;
|
||||
sub_08078AF0(entity, entity->type, 0);
|
||||
}
|
||||
}
|
||||
|
||||
Entity* GiveItemWithCutscene(s32 type, u32 type2, u32 actionDelay) {
|
||||
Entity* entity;
|
||||
|
||||
if ((type == 0x3f) && (gSave.stats.filler3[0] != 0)) {
|
||||
type = 0x57;
|
||||
type2 = 0;
|
||||
}
|
||||
entity = sub_0805E744();
|
||||
if (entity != NULL) {
|
||||
entity->type = type;
|
||||
entity->type2 = type2;
|
||||
entity->actionDelay = actionDelay;
|
||||
entity->id = OBJECT_B;
|
||||
entity->kind = OBJECT;
|
||||
AppendEntityToList(entity, 6);
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
|
||||
void ClearSmallChests(void) {
|
||||
MemClear(&gSmallChests, sizeof(gSmallChests));
|
||||
}
|
||||
|
||||
void sub_080A7C8C(u32 tilePos, u32 param_2) {
|
||||
TileEntityData* data = gSmallChests;
|
||||
bool32 found = FALSE;
|
||||
u32 index;
|
||||
for (index = 0; index < 8; data++) {
|
||||
if (data->tilePos == tilePos) {
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
if (param_2 >> 1 == ((u32)(*((u8*)&data->unk_0x6) << 0x1f) >> 0x1f)) {
|
||||
if (found) {
|
||||
SetLocalFlag(data->unk_0x1);
|
||||
CreateItemEntity(data->unk_0x2, data->unk_0x3, 0);
|
||||
} else {
|
||||
CreateItemEntity(0x60, 0, 0);
|
||||
}
|
||||
sub_0807B7D8(0x74, tilePos, param_2);
|
||||
RequestPriorityDuration(NULL, 0x78);
|
||||
SoundReq(SFX_11B);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080A7CFC(u32 tilePos) {
|
||||
u32 messageId = 0x600;
|
||||
bool32 isTileEntity6 = FALSE;
|
||||
TileEntityData* data = (TileEntityData*)GetCurrentRoomProperty(3);
|
||||
if (data != NULL) {
|
||||
do {
|
||||
if (data->tilePos == tilePos) {
|
||||
switch (data->type) {
|
||||
case SIGN:
|
||||
isTileEntity6 = FALSE;
|
||||
messageId = data->unk_0x6; // message id
|
||||
break;
|
||||
case TILE_ENTITY_6:
|
||||
isTileEntity6 = TRUE;
|
||||
messageId = data->unk_0x6;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
data += 1;
|
||||
} while (data->tilePos != 0);
|
||||
}
|
||||
sub_080A7D44(messageId, isTileEntity6);
|
||||
}
|
||||
|
||||
void sub_080A7D44(u32 messageId, bool32 isTileEntity6) {
|
||||
if (isTileEntity6) {
|
||||
// TILE_ENTITY_6
|
||||
sub_08078AA8(messageId, 0);
|
||||
} else {
|
||||
// Read sign text
|
||||
MessageFromTarget(messageId);
|
||||
}
|
||||
}
|
||||
+251
@@ -1,10 +1,261 @@
|
||||
#include "area.h"
|
||||
#include "player.h"
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "coord.h"
|
||||
#include "utils.h"
|
||||
#include "audio.h"
|
||||
#include "room.h"
|
||||
#include "functions.h"
|
||||
|
||||
extern u8 gUnk_08114F78[];
|
||||
extern u8 gUnk_08114F80[];
|
||||
|
||||
typedef struct {
|
||||
u32 _0;
|
||||
u16 _4[0x1000];
|
||||
u8 _2004[0x2000];
|
||||
} struct_02025EB0;
|
||||
extern struct_02025EB0 gUnk_02025EB0;
|
||||
|
||||
extern s8 gUnk_08126EE4[];
|
||||
extern u8 gUnk_08114F38[];
|
||||
extern u8 gUnk_08114F58[];
|
||||
|
||||
void sub_080027EA(Entity*, u32, u32);
|
||||
void sub_0806F5BC(Entity*, u32, u32);
|
||||
u32 sub_0806F58C(Entity*, Entity*);
|
||||
u32 sub_0806FCA0(Entity*, Entity*);
|
||||
|
||||
void sub_0806F364(void) {
|
||||
gArea.filler[2] ^= 0x80;
|
||||
MemClear(&gArea.filler5[(gArea.filler[2] + 7) / 8], 16);
|
||||
}
|
||||
|
||||
void sub_0806F38C(void) {
|
||||
gArea.filler[2] ^= 0x80;
|
||||
}
|
||||
|
||||
u32 sub_0806F39C(Entity* ent) {
|
||||
s32 dist;
|
||||
|
||||
if (gPlayerEntity.animationState & 2) {
|
||||
dist = ent->x.HALF.HI - gPlayerEntity.x.HALF.HI;
|
||||
} else {
|
||||
dist = ent->y.HALF.HI - gPlayerEntity.y.HALF.HI;
|
||||
}
|
||||
if (dist < 0) {
|
||||
dist = -dist;
|
||||
}
|
||||
|
||||
if (dist > 64) {
|
||||
sub_080027EA(&gPlayerEntity, ent->speed, ent->direction);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806F3E4(Entity* ent) {
|
||||
Entity tmp_ent;
|
||||
s8* p;
|
||||
|
||||
if ((gPlayerState.field_0x1c & 0x7F) != 1)
|
||||
return 0;
|
||||
switch (gPlayerState.field_0x1d[0]) {
|
||||
case 1:
|
||||
ent->field_0x46 += 64;
|
||||
break;
|
||||
case 2:
|
||||
ent->field_0x46 += 128;
|
||||
break;
|
||||
case 3:
|
||||
ent->field_0x46 += 192;
|
||||
break;
|
||||
}
|
||||
if (ent->field_0x46 > 0x500)
|
||||
ent->field_0x46 = 0x500;
|
||||
p = &gUnk_08126EE4[gPlayerEntity.animationState & 0xE];
|
||||
tmp_ent.x.HALF.HI = p[0] + gPlayerEntity.x.HALF.HI;
|
||||
tmp_ent.y.HALF.HI = p[1] + gPlayerEntity.y.HALF.HI;
|
||||
sub_0806F5BC(ent, ent->field_0x46, GetFacingDirection(ent, &tmp_ent));
|
||||
if (sub_0800419C(&tmp_ent, ent, 4, 4)) {
|
||||
u32 state = ent->field_0x1c & 0xF;
|
||||
if (state == 2) {
|
||||
Entity* item;
|
||||
ent->subAction = 3;
|
||||
(Entity*)gPlayerEntity.field_0x70.WORD = ent;
|
||||
gPlayerState.field_0x1c = 7;
|
||||
item = CreatePlayerItem(0x11, 0, 0, 0);
|
||||
if (item != NULL) {
|
||||
item->child = ent;
|
||||
ent->parent = item;
|
||||
}
|
||||
SoundReq(SFX_ED);
|
||||
} else if (state == 1) {
|
||||
gPlayerState.field_0x2c[10] = 1;
|
||||
SoundReq(SFX_EF);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_0806F4E8(Entity* ent) {
|
||||
switch (ent->field_0x1d & 3) {
|
||||
case 2:
|
||||
ent->spriteOffsetX = -2;
|
||||
break;
|
||||
case 1:
|
||||
ent->spriteOffsetX = 0;
|
||||
break;
|
||||
case 0:
|
||||
ent->spriteOffsetX = 2;
|
||||
break;
|
||||
case 3:
|
||||
ent->spriteOffsetX = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_0806F520(Entity* ent) {
|
||||
if (ent->bitfield == 0x93)
|
||||
return 1;
|
||||
ent->field_0x3a &= ~4;
|
||||
ent->spriteOffsetY = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806F548(Entity* a, Entity* b, u32 x, u32 y) {
|
||||
if (EntityInRectRadius(a, b, x, y))
|
||||
return sub_0806F58C(a, b);
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806F564(Entity* ent, u32 b, u32 c) {
|
||||
u32 tmp = sub_080045D4(ent->x.HALF.HI, ent->y.HALF.HI, b, c);
|
||||
return ent->animationState == sub_0806F5A4(tmp);
|
||||
}
|
||||
|
||||
u32 sub_0806F58C(Entity* a, Entity* b) {
|
||||
return a->animationState >> 1 == sub_0806FCA0(a, b);
|
||||
}
|
||||
|
||||
u32 sub_0806F5A4(u32 idx) {
|
||||
return gUnk_08114F38[idx];
|
||||
}
|
||||
|
||||
u32 sub_0806F5B0(u32 idx) {
|
||||
return gUnk_08114F58[idx];
|
||||
}
|
||||
|
||||
void sub_0806F5BC(Entity* ent, u32 a, u32 b) {
|
||||
if ((b & 0x80) == 0) {
|
||||
u32 m1 = b;
|
||||
|
||||
ent->x.WORD += FixedDiv(FixedMul(gSineTable[m1 *= 8], a), 256) << 8;
|
||||
ent->y.WORD -= FixedDiv(FixedMul(gSineTable[m1 + 64], a), 256) << 8;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806F62C(Entity* ent, u32 a, u32 b) {
|
||||
ent->x.WORD += FixedDiv(FixedMul(gSineTable[(u8)b], a), 256) << 8;
|
||||
ent->y.WORD -= FixedDiv(FixedMul(gSineTable[(u8)b + 64], a), 256) << 8;
|
||||
}
|
||||
|
||||
void sub_0806F69C(Entity* ent) {
|
||||
if ((ent->direction & 0x80) == 0) {
|
||||
ent->x.WORD += FixedDiv(FixedMul(gSineTable[ent->direction * 8], ent->speed), 256) << 8;
|
||||
ent->y.WORD -= FixedDiv(FixedMul(gSineTable[ent->direction * 8 + 64], ent->speed), 256) << 8;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806F704(Entity* ent, u32 a2) {
|
||||
ent->x.HALF.HI = (((16 * a2) & 0x3F0) | 8) + gRoomControls.roomOriginX;
|
||||
ent->y.HALF.HI = (((a2 >> 2) & 0x3F0) | 8) + gRoomControls.roomOriginY;
|
||||
}
|
||||
|
||||
u32 sub_0806F730(Entity* ent) {
|
||||
u32 tmp = 0x3F;
|
||||
u32 x = ent->x.HALF.HI + ent->hitbox->offset_x - gRoomControls.roomOriginX;
|
||||
u32 y = ent->y.HALF.HI + ent->hitbox->offset_y - gRoomControls.roomOriginY;
|
||||
switch (ent->animationState) {
|
||||
case 0:
|
||||
y -= ent->hitbox->unk2[3];
|
||||
break;
|
||||
case 4:
|
||||
y += ent->hitbox->unk2[3];
|
||||
break;
|
||||
case 2:
|
||||
x += ent->hitbox->unk2[0];
|
||||
break;
|
||||
case 6:
|
||||
x -= ent->hitbox->unk2[0];
|
||||
break;
|
||||
}
|
||||
return ((x >> 4) & tmp) + (((y >> 4) & tmp) << 6);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/sub_0806F798.inc", u32 sub_0806F798(Entity* ent));
|
||||
|
||||
u32 sub_0806F7D0(Entity* ent) {
|
||||
return gUnk_02025EB0._2004[sub_0806F730(ent)];
|
||||
}
|
||||
|
||||
u32 sub_0806F7EC(Entity* ent) {
|
||||
return gUnk_02025EB0._4[sub_0806F730(ent)];
|
||||
}
|
||||
|
||||
u32 sub_0806F804(u32 x, u32 y) {
|
||||
u32 idx = ((x >> 4) & 0x3F) + 4 * (y & 0x3F0);
|
||||
return gUnk_02025EB0._4[idx];
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/sub_0806F824.inc", void sub_0806F824(Entity* a, Entity* b, u32 x, u32 y));
|
||||
|
||||
u32 sub_0806F854(Entity* ent, s32 x, s32 y) {
|
||||
if (ent->z.WORD == 0 || (ent->collisionLayer & 2))
|
||||
return 0;
|
||||
if (!sub_080002F0(TILE(ent->x.HALF.HI + x, ent->y.HALF.HI + y), 2, 8)) {
|
||||
ent->spriteRendering.b3 = 1;
|
||||
ent->spriteOrientation.flipY = 1;
|
||||
return 0;
|
||||
}
|
||||
ent->spriteRendering.b3 = 2;
|
||||
ent->spriteOrientation.flipY = 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
u32 sub_0806F8DC(Entity* ent) {
|
||||
if (ent->collisionLayer & 2)
|
||||
return 0;
|
||||
if (!GetTileTypeByPos(ent->x.HALF.HI, ent->y.HALF.HI - 4, 2)) {
|
||||
GetTileTypeByPos(ent->x.HALF.HI, ent->y.HALF.HI - 4, ent->collisionLayer);
|
||||
ent->spriteRendering.b3 = 1;
|
||||
ent->spriteOrientation.flipY = 1;
|
||||
return 0;
|
||||
}
|
||||
ent->spriteRendering.b3 = 2;
|
||||
ent->spriteOrientation.flipY = 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
u32 sub_0806F948(Entity* ent) {
|
||||
u32 v1;
|
||||
if (gPlayerState.field_0xd == 0xFF)
|
||||
return ent->animationState;
|
||||
|
||||
v1 = gPlayerState.field_0xd / 4;
|
||||
if ((v1 & 1) && !(((v1 + 1) - ent->animationState) & 4)) {
|
||||
return ent->animationState;
|
||||
} else {
|
||||
ent->spriteSettings.flipX = v1 > 4;
|
||||
ent->animationState = v1 & 6;
|
||||
}
|
||||
return ent->animationState;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/sub_0806F998.inc", u32 sub_0806F998(Entity* ent));
|
||||
|
||||
s16 FixedMul(s16 r0, s16 r1) {
|
||||
s32 temp = r0 * r1;
|
||||
if (temp < 0)
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
// #include "entity.h"
|
||||
// #include "entityData.h"
|
||||
// #include "global.h"
|
||||
|
||||
// extern Entity * DeepFindEntityByID(u32, u32);
|
||||
// extern Entity * GetEmptyEntityByKind();
|
||||
// extern void RegisterRoomEntity(Entity *, EntityData *);
|
||||
// extern u32 sub_0804AF0C(Entity *, EntityData *);
|
||||
// extern void sub_08016A30(Entity *);
|
||||
// extern u32 gRoomControls;
|
||||
|
||||
// Entity * LoadRoomEntity(EntityData *param_1)
|
||||
// {
|
||||
// Entity *preexisting;
|
||||
// Entity *entity;
|
||||
// s32 type;
|
||||
|
||||
// type = param_1->entityType & 15;
|
||||
// if (((param_1->field_0x1 & 240) == 80) &&
|
||||
// (preexisting = DeepFindEntityByID(type,param_1->entitySubtype), preexisting != NULL)) {
|
||||
// entity = NULL;
|
||||
// }
|
||||
// else {
|
||||
// entity = GetEmptyEntityByKind(); //Get empty entity
|
||||
// if (entity != NULL) {
|
||||
// (entity->entityType).type = type;
|
||||
// (entity->entityType).subtype = param_1->entitySubtype;
|
||||
// (entity->entityType).form = param_1->entityform;
|
||||
// RegisterRoomEntity(entity,param_1);
|
||||
// if ((param_1->field_0x1 & 240) != 16) {
|
||||
// (entity->type2 = *(u8 *)¶m_1->entityparameter;
|
||||
// entity->actionDelay = (u8)((u32)param_1->entityparameter >> 8);
|
||||
// if ((type != 9) && (sub_0804AF0C(entity,param_1), entity->field_0x4 != NULL)) {
|
||||
// if ((param_1->entityType & 16) == 0) {
|
||||
// if ((param_1->entityType & 32) != 0) {
|
||||
// entity->collisionLayer = 2;
|
||||
// return entity;
|
||||
// }
|
||||
// if ((gRoomControls & 2) == 0) {
|
||||
// sub_08016A30(entity);
|
||||
// return entity;
|
||||
// }
|
||||
// }
|
||||
// entity->collisionLayer = 1;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return entity;
|
||||
// }
|
||||
@@ -1,67 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "definitions.h"
|
||||
|
||||
extern const NPCDefinition gNPCDefinitions[];
|
||||
|
||||
extern Hitbox* gNPCHitboxes[];
|
||||
const NPCDefinition* GetNPCDefinition(Entity*);
|
||||
|
||||
const NPCDefinition* GetNPCDefinition(Entity* this) {
|
||||
const NPCDefinition* definition = &gNPCDefinitions[this->id];
|
||||
if (definition->bitfield.type == 2) {
|
||||
definition = &definition->data.definition[this->type];
|
||||
}
|
||||
return definition;
|
||||
}
|
||||
|
||||
void NPCInit(Entity* this) {
|
||||
u32 tmp;
|
||||
u32 tmp2;
|
||||
|
||||
if ((this->flags & 1) == 0) {
|
||||
const NPCDefinition* definition = GetNPCDefinition(this);
|
||||
if (definition->bitfield.type == 0) {
|
||||
// No sprite for this NPC
|
||||
this->flags |= 1;
|
||||
} else {
|
||||
tmp = definition->bitfield.gfx;
|
||||
switch (definition->bitfield.gfx_type) {
|
||||
case 2:
|
||||
this->spriteVramOffset = definition->bitfield.gfx;
|
||||
break;
|
||||
case 1:
|
||||
LoadSwapGFX(this, tmp, 0);
|
||||
break;
|
||||
default:
|
||||
LoadFixedGFX(this, tmp);
|
||||
break;
|
||||
}
|
||||
tmp = definition->data.sprite.paletteIndex;
|
||||
LoadObjPalette(this, tmp);
|
||||
this->spriteIndex = definition->data.sprite.spriteIndex;
|
||||
this->spriteSettings.shadow = definition->data.sprite.shadow;
|
||||
this->spritePriority.b1 = definition->data.sprite.spritePriority;
|
||||
this->spriteSettings.draw = definition->data.sprite.draw;
|
||||
this->hitbox = gNPCHitboxes[definition->bitfield.hitbox];
|
||||
this->flags |= ENT_DID_INIT;
|
||||
tmp2 = 0xff;
|
||||
this->animIndex = tmp2;
|
||||
this->frameIndex = tmp2;
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Entity* CreateNPC(u32 subtype, u32 form, u32 parameter) {
|
||||
Entity* entity = GetEmptyEntity();
|
||||
if (entity != NULL) {
|
||||
entity->kind = 7;
|
||||
entity->id = subtype;
|
||||
entity->type = form;
|
||||
entity->type2 = parameter;
|
||||
AppendEntityToList(entity, 7);
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
+1
-1
@@ -34,7 +34,7 @@ void sub_080A2E40(void) {
|
||||
MemClear((void*)VRAM, 0x80);
|
||||
MessageInitialize();
|
||||
EraseAllEntities();
|
||||
sub_080ADD30();
|
||||
ResetPalettes();
|
||||
sub_0801CFA8(0);
|
||||
MemClear(&gUnk_02032EC0, sizeof gUnk_02032EC0);
|
||||
MemClear(&gChooseFileState, sizeof gChooseFileState);
|
||||
|
||||
+152
-6
@@ -1,20 +1,67 @@
|
||||
#include "global.h"
|
||||
#include "functions.h"
|
||||
#include "screen.h"
|
||||
#include "utils.h"
|
||||
|
||||
typedef struct {
|
||||
u8 field_0x0;
|
||||
u8 field_0x1;
|
||||
u8 spritesOffset;
|
||||
} struct_03000000;
|
||||
|
||||
extern struct_03000000 gUnk_03000000;
|
||||
|
||||
static u32 sub_080501C0(FadeControl* ctl);
|
||||
static u32 sub_08050230(FadeControl* ctl);
|
||||
static u32 sub_080502A4(FadeControl* ctl);
|
||||
|
||||
extern u32 gUsedPalettes;
|
||||
extern u16 gPaletteBuffer[];
|
||||
extern u16 gUnk_080FC3C4[];
|
||||
|
||||
// function pointer to overlay (0x03005e98) in ram calls rom function MakeFadeBuff256
|
||||
extern u32 gMakeFadeBuff256;
|
||||
typedef void (*fptrMakeFadeBuff256)(u8*, u8*, u16, u8);
|
||||
|
||||
void SetBrightness(u32 arg0) {
|
||||
gSaveHeader->brightnessPref = arg0;
|
||||
gUsedPalettes = 0xffffffff;
|
||||
}
|
||||
|
||||
void FadeVBlank(void) {
|
||||
fptrMakeFadeBuff256 func;
|
||||
u32 usedPalettesTmp, palIdx;
|
||||
|
||||
struct_020354C0* ptrUnk = gUnk_020354C0;
|
||||
usedPalettesTmp = gUsedPalettes;
|
||||
gUsedPalettes = 0;
|
||||
palIdx = 0;
|
||||
|
||||
while (usedPalettesTmp != 0) {
|
||||
if ((usedPalettesTmp & 1) == 1) {
|
||||
func = (fptrMakeFadeBuff256)&gMakeFadeBuff256;
|
||||
func(&((u8*)gPaletteBuffer)[palIdx], &PAL_RAM[palIdx], ptrUnk->unk2, ptrUnk->unk1);
|
||||
}
|
||||
palIdx += 0x20;
|
||||
|
||||
ptrUnk++;
|
||||
usedPalettesTmp >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
void InitFade() {
|
||||
MemClear(&gFadeControl, sizeof(gFadeControl));
|
||||
MemClear(&gUnk_020354C0, sizeof(gUnk_020354C0));
|
||||
gFadeControl.mask = 0xffffffff;
|
||||
}
|
||||
|
||||
void sub_08050008() {
|
||||
MemClear(&gUnk_020354C0, sizeof(gUnk_020354C0));
|
||||
gFadeControl.mask = 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
void sub_08050024() {
|
||||
sub_0801E104();
|
||||
DoFade(5, 0x80 << 1);
|
||||
DoFade(5, 256);
|
||||
}
|
||||
|
||||
void sub_08050038(u32 arg0) {
|
||||
@@ -31,22 +78,22 @@ void DoFade(u32 fadeType, u32 fadeSpeed) {
|
||||
gFadeControl.active = 1;
|
||||
gFadeControl.fadeDuration = 0x100;
|
||||
gFadeControl.field_0xe = 0;
|
||||
if ((gFadeControl.fadeType & 2) != 0) {
|
||||
if (gFadeControl.fadeType & 2) {
|
||||
gFadeControl.field_0x2 = 0xf8;
|
||||
} else {
|
||||
gFadeControl.field_0x2 = 0;
|
||||
}
|
||||
if ((fadeType & 8) != 0) {
|
||||
if (fadeType & 8) {
|
||||
gUnk_03000000.spritesOffset = 1;
|
||||
gScreen.bg1.control |= BGCNT_MOSAIC;
|
||||
gScreen.bg2.control |= BGCNT_MOSAIC;
|
||||
gScreen.bg3.control |= BGCNT_MOSAIC;
|
||||
}
|
||||
if ((fadeType & 0x10) != 0) {
|
||||
if (fadeType & 0x10) {
|
||||
sub_0801E1B8(gFadeControl.field_0x16, gFadeControl.field_0x18);
|
||||
sub_0801E1EC(gFadeControl.field_0x12, gFadeControl.field_0x14, gFadeControl.field_0x10);
|
||||
if ((fadeType & 1) == 0) {
|
||||
gFadeControl.fadeType &= 0xfffb;
|
||||
gFadeControl.fadeType &= ~4;
|
||||
sub_08050008();
|
||||
gUsedPalettes = 0xffffffff;
|
||||
}
|
||||
@@ -72,3 +119,102 @@ void sub_08050110(u32 param_1, u32 param_2, u32 fadeType, u32 fadeSpeed) {
|
||||
gFadeControl.field_0x18 = 0;
|
||||
DoFade(fadeType, fadeSpeed);
|
||||
}
|
||||
|
||||
void FadeMain(void) {
|
||||
FadeControl* ctl = &gFadeControl;
|
||||
u32 flags = ctl->fadeType & 0x1C;
|
||||
u32 active = 0;
|
||||
u32 bit;
|
||||
|
||||
if (ctl->active) {
|
||||
ctl->fadeDuration -= ctl->fadeSpeed;
|
||||
if ((s16)ctl->fadeDuration <= (s16)ctl->field_0xe)
|
||||
ctl->fadeDuration = ctl->field_0xe;
|
||||
while (flags) {
|
||||
bit = (~flags + 1) & flags;
|
||||
flags ^= bit;
|
||||
switch (bit) {
|
||||
case 4:
|
||||
active |= sub_080501C0(ctl);
|
||||
break;
|
||||
case 8:
|
||||
active |= sub_08050230(ctl);
|
||||
break;
|
||||
case 16:
|
||||
active |= sub_080502A4(ctl);
|
||||
break;
|
||||
}
|
||||
}
|
||||
ctl->active = active;
|
||||
}
|
||||
}
|
||||
|
||||
static u32 sub_080501C0(FadeControl* ctl) {
|
||||
u32 v1;
|
||||
u32 v2;
|
||||
struct_020354C0* v3;
|
||||
u32 i;
|
||||
|
||||
if (ctl->fadeType & 1) {
|
||||
v1 = 256 - (s16)ctl->fadeDuration;
|
||||
} else {
|
||||
v1 = (s16)ctl->fadeDuration;
|
||||
}
|
||||
v2 = gFadeControl.mask;
|
||||
v3 = gUnk_020354C0;
|
||||
for (i = 0; i < 0x20; ++i, ++v3) {
|
||||
if (v2 & 1) {
|
||||
v3->unk0 = 1;
|
||||
v3->unk2 = v1;
|
||||
} else {
|
||||
v3->unk0 = 0;
|
||||
v3->unk2 = 0;
|
||||
}
|
||||
v3->unk1 = ctl->field_0x2;
|
||||
v2 >>= 1;
|
||||
}
|
||||
gUsedPalettes = 0xffffffff;
|
||||
|
||||
return !!((s16)ctl->field_0xe ^ (s16)ctl->fadeDuration);
|
||||
}
|
||||
|
||||
static u32 sub_08050230(FadeControl* ctl) {
|
||||
u32 type = ctl->fadeType;
|
||||
u32 idx = ((s16)ctl->fadeDuration >> 4) & 0xF;
|
||||
if (type & 1)
|
||||
idx = 0xF - idx;
|
||||
gScreen.controls.mosaicSize = gUnk_080FC3C4[idx];
|
||||
if (ctl->fadeDuration != 0)
|
||||
return 1;
|
||||
|
||||
// fade is finished
|
||||
gUnk_03000000.spritesOffset = 0;
|
||||
if ((type & 1) == 0) {
|
||||
// reset registers if fading in
|
||||
gScreen.bg0.control &= ~BGCNT_MOSAIC;
|
||||
gScreen.bg1.control &= ~BGCNT_MOSAIC;
|
||||
gScreen.bg2.control &= ~BGCNT_MOSAIC;
|
||||
gScreen.bg3.control &= ~BGCNT_MOSAIC;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 sub_080502A4(FadeControl* ctl) {
|
||||
if (ctl->fadeType & 1) {
|
||||
s32 delta = (u16)gFadeControl.field_0x10 - gFadeControl.fadeSpeed;
|
||||
gFadeControl.field_0x10 -= gFadeControl.fadeSpeed;
|
||||
if (delta << 16 <= 0)
|
||||
gFadeControl.field_0x10 = 0;
|
||||
sub_0801E1EC(gFadeControl.field_0x12, gFadeControl.field_0x14, gFadeControl.field_0x10);
|
||||
if (!gFadeControl.field_0x10)
|
||||
return 0;
|
||||
} else {
|
||||
gFadeControl.field_0x10 += gFadeControl.fadeSpeed;
|
||||
sub_0801E1EC(gFadeControl.field_0x12, gFadeControl.field_0x14, gFadeControl.field_0x10);
|
||||
if (gFadeControl.field_0x10 > 150) {
|
||||
sub_0801E104();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
+1
-1
@@ -197,7 +197,7 @@ static void HandleFileScreenEnter(void) {
|
||||
MessageInitialize();
|
||||
EraseAllEntities();
|
||||
sub_08080668();
|
||||
sub_080ADD30();
|
||||
ResetPalettes();
|
||||
sub_0801CFA8(0);
|
||||
MemClear(&gUnk_0200AF00, sizeof(gUnk_0200AF00));
|
||||
MemClear(&gUnk_02019EE0, sizeof(gUnk_02019EE0));
|
||||
|
||||
+3
-3
@@ -29,7 +29,7 @@ extern void sub_080ADD70();
|
||||
extern void sub_0801C25C();
|
||||
extern void UpdateDisplayControls();
|
||||
extern void LoadResources();
|
||||
extern void FadeMain();
|
||||
extern void FadeVBlank();
|
||||
extern void HandlePlayerLife();
|
||||
extern void DoPlayerAction();
|
||||
extern void sub_080171F0();
|
||||
@@ -156,7 +156,7 @@ void LoadResources(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void PrepNextFrame(void) {
|
||||
void WaitForNextFrame(void) {
|
||||
gMain.interruptFlag = 0;
|
||||
VBlankIntrWait();
|
||||
do {
|
||||
@@ -176,7 +176,7 @@ void PrepNextFrame(void) {
|
||||
if (gUnk_0200B650 != NULL)
|
||||
DmaCopy32(3, &gBG2Buffer, VRAM + (*gUnk_0200B650 & 0x1f00) * 8, 0x5C0);
|
||||
}
|
||||
FadeMain();
|
||||
FadeVBlank();
|
||||
}
|
||||
|
||||
void PlayerUpdate(Entity* this) {
|
||||
|
||||
+1
-1
@@ -145,7 +145,7 @@ static void HandleTitlescreen(void) {
|
||||
gIntroState.gameLanguage = 7;
|
||||
EraseAllEntities();
|
||||
sub_0801CFA8(0);
|
||||
sub_080ADD30();
|
||||
ResetPalettes();
|
||||
gGFXSlots.unk0 = 1;
|
||||
LoadGfxGroup(2);
|
||||
if (gSaveHeader->gameLanguage == 0) {
|
||||
|
||||
-222
@@ -1,222 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "area.h"
|
||||
#include "room.h"
|
||||
#include "flags.h"
|
||||
#include "functions.h"
|
||||
#include "utils.h"
|
||||
|
||||
extern void sub_0804B058(EntityData* dat);
|
||||
extern void sub_0801AC98();
|
||||
extern u32 sub_08049D1C(u32);
|
||||
extern Entity* LoadRoomEntity(EntityData*);
|
||||
extern void* GetRoomProperty(u32, u32, u32);
|
||||
|
||||
extern void** gCurrentRoomProperties;
|
||||
extern void*** gAreaTable[];
|
||||
extern u8 gUnk_081091E4[];
|
||||
|
||||
extern void sub_080186EC();
|
||||
extern void sub_0804B16C();
|
||||
extern void ClearSmallChests(void);
|
||||
extern Entity* GetEmptyEntityByKind(u32 kind);
|
||||
|
||||
void RegisterRoomEntity(Entity*, EntityData*);
|
||||
void sub_0804AF0C(Entity*, EntityData*);
|
||||
void sub_0804AFB0(void** properties);
|
||||
|
||||
void LoadRoomEntityList(EntityData* listPtr) {
|
||||
if (listPtr != NULL) {
|
||||
while (listPtr->kind != 0xFF) {
|
||||
LoadRoomEntity(listPtr++);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NONMATCH("asm/loadRoomEntity.s", Entity* LoadRoomEntity(EntityData* dat)) {
|
||||
int kind;
|
||||
Entity* v4;
|
||||
Entity* v5;
|
||||
|
||||
kind = dat->kind & 0xF;
|
||||
if ((dat->flags & 0xF0) == 0x50 && DeepFindEntityByID(kind, dat->id))
|
||||
return NULL;
|
||||
v4 = GetEmptyEntityByKind(kind);
|
||||
v5 = v4;
|
||||
if (v4 != NULL) {
|
||||
v4->kind = kind;
|
||||
v4->id = dat->id;
|
||||
v4->type = dat->type;
|
||||
RegisterRoomEntity(v4, dat);
|
||||
if ((dat->flags & 0xF0) != 16) {
|
||||
v5->type2 = dat->type2;
|
||||
v5->actionDelay = (dat->type2 & 0xFF00) >> 8;
|
||||
if (kind == 9)
|
||||
return v5;
|
||||
sub_0804AF0C(v5, dat);
|
||||
if (!v5->next)
|
||||
return v5;
|
||||
if ((dat->kind & 0x10) == 0) {
|
||||
if ((dat->kind & 0x20) != 0) {
|
||||
v5->collisionLayer = 2;
|
||||
return v5;
|
||||
}
|
||||
if ((gRoomControls.unk6 & 2) == 0) {
|
||||
sub_08016A30(v5);
|
||||
}
|
||||
}
|
||||
v5->collisionLayer = 1;
|
||||
}
|
||||
}
|
||||
return v5;
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void RegisterRoomEntity(Entity* ent, EntityData* dat) {
|
||||
u32 list;
|
||||
u32 kind;
|
||||
void* offset;
|
||||
|
||||
list = dat->flags & 0xF;
|
||||
kind = dat->kind & 0xF;
|
||||
if (ent->prev == NULL) {
|
||||
if (list == 0xF) {
|
||||
AppendEntityToList(ent, gUnk_081091E4[kind]);
|
||||
} else if (list == 8) {
|
||||
AppendEntityToList(ent, 8);
|
||||
} else {
|
||||
AppendEntityToList(ent, list);
|
||||
}
|
||||
}
|
||||
offset = &ent->field_0x78;
|
||||
if (kind == MANAGER)
|
||||
offset = &ent->y;
|
||||
MemCopy(dat, offset, sizeof(EntityData));
|
||||
}
|
||||
|
||||
void sub_0804AF0C(Entity* ent, EntityData* dat) {
|
||||
switch (dat->flags & 0xf0) {
|
||||
case 0x0:
|
||||
ent->x.HALF.HI = dat->xPos + gRoomControls.roomOriginX;
|
||||
ent->y.HALF.HI = dat->yPos + gRoomControls.roomOriginY;
|
||||
break;
|
||||
case 0x20:
|
||||
ent->field_0x6c.HALF.HI |= 0x20;
|
||||
ent->x.HALF.HI = dat->xPos + gRoomControls.roomOriginX;
|
||||
ent->y.HALF.HI = dat->yPos + gRoomControls.roomOriginY;
|
||||
break;
|
||||
case 0x40:
|
||||
ent->x.HALF.HI = dat->xPos + gRoomControls.roomOriginX;
|
||||
ent->y.HALF.HI = dat->yPos + gRoomControls.roomOriginY;
|
||||
if (!StartCutscene(ent, (u16*)dat->spritePtr))
|
||||
DeleteEntity(ent);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0804AF90(void) {
|
||||
sub_0804AFB0(gArea.pCurrentRoomInfo->properties);
|
||||
ClearSmallChests();
|
||||
}
|
||||
|
||||
void sub_0804AFB0(void** properties) {
|
||||
u32 i;
|
||||
|
||||
gCurrentRoomProperties = properties;
|
||||
for (i = 0; i < 8; ++i) {
|
||||
gRoomVars.field_0x6c[i] = gCurrentRoomProperties[i];
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_0804AFDC() {
|
||||
u32 result;
|
||||
u32 (*func)();
|
||||
|
||||
result = 1;
|
||||
func = (u32(*)())GetCurrentRoomProperty(6);
|
||||
if (func != NULL)
|
||||
result = func();
|
||||
return result;
|
||||
}
|
||||
|
||||
void sub_0804AFF4(void) {
|
||||
void (*func)();
|
||||
|
||||
sub_080186EC();
|
||||
func = (void (*)())GetCurrentRoomProperty(5);
|
||||
if (func) {
|
||||
func();
|
||||
}
|
||||
func = (void (*)())GetCurrentRoomProperty(7);
|
||||
if (func) {
|
||||
func();
|
||||
}
|
||||
sub_0804B16C();
|
||||
}
|
||||
|
||||
void LoadRoom(void) {
|
||||
LoadRoomEntityList(GetCurrentRoomProperty(1));
|
||||
LoadRoomEntityList(GetCurrentRoomProperty(0));
|
||||
|
||||
if (CheckGlobalFlag(TABIDACHI))
|
||||
sub_0804B058(GetCurrentRoomProperty(2));
|
||||
|
||||
LoadRoomTileEntities(GetCurrentRoomProperty(3));
|
||||
sub_0801AC98();
|
||||
}
|
||||
|
||||
void sub_0804B058(EntityData* dat) {
|
||||
Entity* ent;
|
||||
u32 uVar2;
|
||||
|
||||
if ((dat != NULL) && dat->kind != 0xff) {
|
||||
uVar2 = 0;
|
||||
do {
|
||||
if ((uVar2 < 0x20) && ((dat->kind & 0xF) == 3)) {
|
||||
if (sub_08049D1C(uVar2) != 0) {
|
||||
ent = LoadRoomEntity(dat);
|
||||
if ((ent != NULL) && (ent->kind == 3)) {
|
||||
ent->field_0x6c.HALF.LO = uVar2 | 0x80;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
LoadRoomEntity(dat);
|
||||
}
|
||||
uVar2++;
|
||||
dat++;
|
||||
} while (dat->kind != 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0804B0B0(u32 arg0, u32 arg1) {
|
||||
LoadRoomEntityList(GetRoomProperty(arg0, arg1, 1));
|
||||
}
|
||||
|
||||
void SetCurrentRoomPropertyList(u32 area, u32 room) {
|
||||
gCurrentRoomProperties = NULL;
|
||||
if (gAreaTable[area] != NULL) {
|
||||
gCurrentRoomProperties = gAreaTable[area][room];
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0804B0E8(u32 arg0, u32 arg1) {
|
||||
void (*func)();
|
||||
|
||||
// init function at index 4 of room data
|
||||
|
||||
func = (void (*)())GetRoomProperty(arg0, arg1, 4);
|
||||
if (func != NULL) {
|
||||
func();
|
||||
}
|
||||
}
|
||||
|
||||
void* GetRoomProperty(u32 area, u32 room, u32 property) {
|
||||
void** temp;
|
||||
temp = NULL;
|
||||
if (gAreaTable[area] != NULL) {
|
||||
temp = gAreaTable[area][room];
|
||||
if (temp != NULL) {
|
||||
temp = temp[property];
|
||||
}
|
||||
}
|
||||
return temp;
|
||||
}
|
||||
+21
-22
@@ -38,8 +38,6 @@ void (*const sScreenHandlers[])(void) = {
|
||||
static void sub_080560B8(void);
|
||||
|
||||
void AgbMain(void) {
|
||||
int var0;
|
||||
|
||||
InitOverlays();
|
||||
InitSound();
|
||||
InitDMA();
|
||||
@@ -47,11 +45,11 @@ void AgbMain(void) {
|
||||
sub_080560B8();
|
||||
sub_08056208();
|
||||
gUnk_02000010.field_0x4 = 193;
|
||||
sub_0804FFE4();
|
||||
InitFade();
|
||||
DmaCopy32(3, BG_PLTT, gPaletteBuffer, BG_PLTT_SIZE);
|
||||
sub_0804FF84(1);
|
||||
SetBrightness(1);
|
||||
MessageInitialize();
|
||||
sub_080ADD30();
|
||||
ResetPalettes();
|
||||
gRand = 0x1234567;
|
||||
MemClear(&gMain, sizeof(gMain));
|
||||
InitScreen(SCREEN_INTRO);
|
||||
@@ -61,22 +59,23 @@ void AgbMain(void) {
|
||||
DoSoftReset();
|
||||
}
|
||||
|
||||
switch (gMain.field_0x1) {
|
||||
case 1:
|
||||
sub_08056260();
|
||||
switch (gMain.sleepStatus) {
|
||||
case SLEEP:
|
||||
SetSleepMode();
|
||||
break;
|
||||
case 0:
|
||||
case DEFAULT:
|
||||
default:
|
||||
if (gMain.countdown != 0) {
|
||||
if (gMain.pauseFrames != 0) {
|
||||
do {
|
||||
VBlankIntrWait();
|
||||
} while (--gMain.countdown);
|
||||
} while (--gMain.pauseFrames);
|
||||
}
|
||||
|
||||
if (gMain.field_0x9 != 0) {
|
||||
gMain.field_0x9--;
|
||||
var0 = gMain.field_0xa;
|
||||
while (var0-- > 0) {
|
||||
if (gMain.pauseCount != 0) {
|
||||
int cnt;
|
||||
gMain.pauseCount--;
|
||||
cnt = gMain.pauseInterval;
|
||||
while (cnt-- > 0) {
|
||||
VBlankIntrWait();
|
||||
}
|
||||
}
|
||||
@@ -84,11 +83,11 @@ void AgbMain(void) {
|
||||
gMain.ticks++;
|
||||
sScreenHandlers[gMain.screen]();
|
||||
MessageMain();
|
||||
UpdateFade();
|
||||
SoundLoop();
|
||||
FadeMain();
|
||||
AudioMain();
|
||||
break;
|
||||
}
|
||||
PrepNextFrame();
|
||||
WaitForNextFrame();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,7 +199,7 @@ NONMATCH("asm/non_matching/sub_080560B8.inc", static void sub_080560B8(void)) {
|
||||
}
|
||||
|
||||
temp = gUnk_02000010.signature ^ SIGNATURE;
|
||||
b = !!temp;
|
||||
b = BOOLCAST(temp);
|
||||
|
||||
if ((gUnk_02000010.field_0x4 != 0) && (gUnk_02000010.field_0x4 != 0xc1)) {
|
||||
b = TRUE;
|
||||
@@ -257,7 +256,7 @@ void sub_08056250() {
|
||||
gScreen._6c = 0;
|
||||
}
|
||||
|
||||
void sub_08056260(void) {
|
||||
void SetSleepMode(void) {
|
||||
u32 restore;
|
||||
Main* m;
|
||||
|
||||
@@ -272,8 +271,8 @@ void sub_08056260(void) {
|
||||
REG_IE = restore;
|
||||
REG_IME = 1;
|
||||
m = &gMain;
|
||||
*(vu8*)&m->field_0x1; // force a read
|
||||
m->field_0x1 = 0;
|
||||
*(vu8*)&m->sleepStatus; // force a read
|
||||
m->sleepStatus = 0;
|
||||
}
|
||||
|
||||
// Convert AABB to screen coordinates and check if it's within the viewport
|
||||
|
||||
@@ -6,18 +6,6 @@
|
||||
#include "object.h"
|
||||
#include "area.h"
|
||||
|
||||
typedef struct {
|
||||
Manager manager;
|
||||
u8 field_0x20[0x15];
|
||||
u8 field_0x35;
|
||||
u8 field_0x36;
|
||||
u8 field_0x37;
|
||||
s16 x;
|
||||
u16 y;
|
||||
u16 tile;
|
||||
u16 field_0x3e;
|
||||
} Manager24;
|
||||
|
||||
extern void (*const gUnk_08108CDC[])(Manager24*);
|
||||
|
||||
u32 sub_0805BFC4(u32, u32);
|
||||
|
||||
+1
-1
@@ -139,7 +139,7 @@ void sub_0806A550(Entity* this) {
|
||||
this->frame = 0;
|
||||
sub_08080964(8, 2);
|
||||
gActiveScriptInfo.unk_00 |= 0x100;
|
||||
SoundReq(SFX_11B);
|
||||
SoundReq(SFX_CHEST_OPEN);
|
||||
}
|
||||
if ((this->frame & 0x80) != 0) {
|
||||
this->action = 5;
|
||||
|
||||
+312
@@ -0,0 +1,312 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "definitions.h"
|
||||
#include "save.h"
|
||||
|
||||
extern const NPCDefinition gNPCDefinitions[];
|
||||
|
||||
extern Hitbox* gNPCHitboxes[];
|
||||
const NPCDefinition* GetNPCDefinition(Entity*);
|
||||
extern u32 (*gUnk_08114EFC[])();
|
||||
extern u32 (*gUnk_08114F0C[])(Entity*, u8*);
|
||||
|
||||
typedef struct {
|
||||
u16 _0;
|
||||
u16 _2;
|
||||
u16 _4;
|
||||
} NPCData;
|
||||
extern NPCData* gUnk_08001A7C[];
|
||||
|
||||
u32 sub_0800445C(Entity*);
|
||||
void sub_08077B20(void);
|
||||
void sub_0806EF14(Entity*);
|
||||
void sub_0806F69C(Entity*);
|
||||
void sub_0806EF4C(Entity*, u16*);
|
||||
u32 sub_080041DC(Entity*, u32, u32);
|
||||
u32 sub_0806EF74(Entity*, u32);
|
||||
u32 sub_0806EF88(Entity*);
|
||||
|
||||
void sub_0806EC20(Entity* ent) {
|
||||
Entity* e = CreateNPC(0x58, 0, 0);
|
||||
if (e != NULL) {
|
||||
e->parent = ent;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806EC38(void) {
|
||||
Entity* e = FindEntityByID(7, 0x58, 7);
|
||||
if (e != NULL)
|
||||
DeleteEntity(e);
|
||||
}
|
||||
|
||||
const NPCDefinition* GetNPCDefinition(Entity* this) {
|
||||
const NPCDefinition* definition = &gNPCDefinitions[this->id];
|
||||
if (definition->bitfield.type == 2) {
|
||||
definition = &definition->data.definition[this->type];
|
||||
}
|
||||
return definition;
|
||||
}
|
||||
|
||||
void NPCInit(Entity* this) {
|
||||
u32 tmp;
|
||||
u32 tmp2;
|
||||
|
||||
if ((this->flags & 1) == 0) {
|
||||
const NPCDefinition* definition = GetNPCDefinition(this);
|
||||
if (definition->bitfield.type == 0) {
|
||||
// No sprite for this NPC
|
||||
this->flags |= 1;
|
||||
} else {
|
||||
tmp = definition->bitfield.gfx;
|
||||
switch (definition->bitfield.gfx_type) {
|
||||
case 2:
|
||||
this->spriteVramOffset = definition->bitfield.gfx;
|
||||
break;
|
||||
case 1:
|
||||
LoadSwapGFX(this, tmp, 0);
|
||||
break;
|
||||
default:
|
||||
LoadFixedGFX(this, tmp);
|
||||
break;
|
||||
}
|
||||
tmp = definition->data.sprite.paletteIndex;
|
||||
LoadObjPalette(this, tmp);
|
||||
this->spriteIndex = definition->data.sprite.spriteIndex;
|
||||
this->spriteSettings.shadow = definition->data.sprite.shadow;
|
||||
this->spritePriority.b1 = definition->data.sprite.spritePriority;
|
||||
this->spriteSettings.draw = definition->data.sprite.draw;
|
||||
this->hitbox = gNPCHitboxes[definition->bitfield.hitbox];
|
||||
this->flags |= ENT_DID_INIT;
|
||||
tmp2 = 0xff;
|
||||
this->animIndex = tmp2;
|
||||
this->frameIndex = tmp2;
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Entity* CreateNPC(u32 subtype, u32 form, u32 parameter) {
|
||||
Entity* entity = GetEmptyEntity();
|
||||
if (entity != NULL) {
|
||||
entity->kind = 7;
|
||||
entity->id = subtype;
|
||||
entity->type = form;
|
||||
entity->type2 = parameter;
|
||||
AppendEntityToList(entity, 7);
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
|
||||
u32 sub_0806ED78(Entity* ent) {
|
||||
u32 result = sub_0800445C(ent);
|
||||
if (result) {
|
||||
if (gPlayerState.field_0x1d[1] & 0x40) {
|
||||
sub_08077B20();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
s32 sub_0806ED9C(Entity* ent, u32 x, u32 y) {
|
||||
s32 anim = -1;
|
||||
if (EntityInRectRadius(ent, &gPlayerEntity, x, y))
|
||||
anim = GetAnimationState(ent);
|
||||
return anim;
|
||||
}
|
||||
|
||||
u32 GetAnimationState(Entity* ent) {
|
||||
u32 direction = GetFacingDirection(ent, &gPlayerEntity);
|
||||
return sub_0806F5A4(direction);
|
||||
}
|
||||
|
||||
s32 sub_0806EDD8(Entity* ent, u32 x, u32 y) {
|
||||
s32 anim = -1;
|
||||
if (EntityInRectRadius(ent, &gPlayerEntity, x, y))
|
||||
anim = GetFacingDirection(ent, &gPlayerEntity);
|
||||
return anim;
|
||||
}
|
||||
|
||||
void sub_0806EE04(Entity* ent, void* a2, u32 a3) {
|
||||
ent->child = a2;
|
||||
ent->field_0x3c = a3;
|
||||
ent->hitType = 0;
|
||||
ent->field_0x46 = 0;
|
||||
ent->field_0x16 = 0;
|
||||
}
|
||||
|
||||
u32 sub_0806EE20(Entity* ent) {
|
||||
u32 v3;
|
||||
|
||||
if (!ent->interactType) {
|
||||
if (ent->child)
|
||||
return gUnk_08114EFC[ent->field_0x16](ent);
|
||||
} else {
|
||||
ent->field_0x46 = 8;
|
||||
v3 = GetFacingDirection(ent, &gPlayerEntity);
|
||||
ent->knockbackDirection = sub_0806F5A4(v3);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806EE70(Entity* ent) {
|
||||
s32 tmp1;
|
||||
s32 tmp2;
|
||||
u32 result;
|
||||
u16 xy[2];
|
||||
|
||||
if (++ent->field_0x46 > 8) {
|
||||
ent->field_0x46 = 0;
|
||||
sub_0806EF14(ent);
|
||||
}
|
||||
sub_0806F69C(ent);
|
||||
sub_0806EF4C(ent, xy);
|
||||
tmp1 = sub_080041DC(ent, xy[0], xy[1]);
|
||||
tmp2 = ent->speed;
|
||||
if (tmp2 < 0)
|
||||
tmp2 = -tmp2;
|
||||
if ((u32)tmp2 / 8 <= tmp1)
|
||||
result = 0;
|
||||
else
|
||||
result = sub_0806EF74(ent, 3);
|
||||
return result;
|
||||
}
|
||||
|
||||
u32 sub_0806EED0(Entity* ent) {
|
||||
if (!--ent->field_0x46)
|
||||
return sub_0806EF74(ent, 2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806EEF4(Entity* ent) {
|
||||
if (ent->frame & 0x80)
|
||||
return sub_0806EF74(ent, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_0806EF14(Entity* ent) {
|
||||
u16 xy[2];
|
||||
sub_0806EF4C(ent, xy);
|
||||
ent->direction = sub_080045B4(ent, xy[0], xy[1]);
|
||||
if ((ent->field_0x3c & 1) == 0)
|
||||
ent->knockbackDirection = sub_0806F5A4(ent->direction);
|
||||
}
|
||||
|
||||
void sub_0806EF4C(Entity* ent, u16* xy) {
|
||||
u16* src = &((u16*)ent->child)[ent->hitType];
|
||||
xy[0] = gRoomControls.roomOriginX + src[1];
|
||||
xy[1] = gRoomControls.roomOriginY + src[2];
|
||||
}
|
||||
|
||||
u32 sub_0806EF74(Entity* ent, u32 a2) {
|
||||
ent->hitType += a2;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806EF88(Entity* ent) {
|
||||
u8* v1 = (u8*)&((u16*)ent->child)[ent->hitType];
|
||||
return gUnk_08114F0C[*v1](ent, v1);
|
||||
}
|
||||
|
||||
u32 sub_0806EFAC(Entity* ent, u16* a2) {
|
||||
ent->hitType = 0;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806EFBC(Entity* ent, u16* a2) {
|
||||
ent->field_0x16 = 1;
|
||||
ent->field_0x46 = 8;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806EFCC(Entity* ent, u16* a2) {
|
||||
ent->field_0x16 = 2;
|
||||
ent->field_0x46 = a2[1];
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806EFDC(Entity* ent, u16* a2) {
|
||||
if (*a2 >> 8) {
|
||||
ent->field_0x3c &= ~1;
|
||||
} else {
|
||||
ent->field_0x3c |= 1;
|
||||
}
|
||||
ent->hitType++;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806F014(Entity* ent, u16* a2) {
|
||||
ent->speed = a2[1];
|
||||
ent->hitType += 2;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806F02C(Entity* ent, u16* a2) {
|
||||
ent->knockbackDirection = *a2 >> 8;
|
||||
ent->hitType++;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806F048(Entity* ent, u16* a2) {
|
||||
ent->field_0x16 = 3;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806F050(Entity* ent, u16* a2) {
|
||||
(u16*)ent->child = a2 + 1;
|
||||
ent->hitType = 0;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806F064(Entity* ent, u16* a2) {
|
||||
ent->field_0x16 = 0;
|
||||
ent->hitType++;
|
||||
return *a2 >> 8;
|
||||
}
|
||||
|
||||
s32 sub_0806F078(Entity* ent, s32 a2) {
|
||||
if (a2 != ent->animIndex) {
|
||||
if (ent->spriteAnimation[0])
|
||||
InitAnimationForceUpdate(ent, a2);
|
||||
else
|
||||
InitializeAnimation(ent, a2);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/sub_0806FOA4.inc", void sub_0806F0A4(void));
|
||||
|
||||
void sub_0806F118(Entity* ent) {
|
||||
u32 idx = sub_08002632(ent);
|
||||
NPCData* data = gUnk_08001A7C[idx];
|
||||
sub_0801DFB4(ent, data->_0, data->_2, data->_4);
|
||||
gPlayerState.controlMode = 3;
|
||||
}
|
||||
|
||||
u32 UpdateFuseInteraction(void) {
|
||||
u32 ret;
|
||||
sub_0801E00C();
|
||||
ret = -1;
|
||||
switch (gUnk_02022740[0]) {
|
||||
default:
|
||||
ret = 0;
|
||||
break;
|
||||
case 2:
|
||||
gPlayerState.controlMode = 3;
|
||||
ret = 1;
|
||||
case 1:
|
||||
sub_0807919C();
|
||||
gPlayerState.controlMode = 1;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void sub_0806F188(Entity* ent) {
|
||||
u32 idx = sub_08002632(ent);
|
||||
if (idx != 0)
|
||||
gSave.unk1C1[idx] = 0xF3;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/showNPCDialogue.inc", void ShowNPCDialogue(Entity* ent, Dialog* dia));
|
||||
+2
-2
@@ -513,7 +513,7 @@ void sub_0805289C(void) {
|
||||
|
||||
u32 sub_080528B4(void) {
|
||||
if (gScreenTransition.field_0x4[1]) {
|
||||
sub_0804FFE4();
|
||||
InitFade();
|
||||
gMain.funcIndex = 3;
|
||||
gMain.transition = 0;
|
||||
DoFade(5, 8);
|
||||
@@ -564,7 +564,7 @@ u32 HandleRoomExit(void) {
|
||||
}
|
||||
RoomExitCallback();
|
||||
gMain.transition = 3;
|
||||
*(&gMain.field_0xa + 1) = 1;
|
||||
*(&gMain.pauseInterval + 1) = 1;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -180,7 +180,6 @@ extern void RespawnPlayer();
|
||||
extern void sub_080797EC();
|
||||
extern void sub_08079E08();
|
||||
extern void sub_08078F60();
|
||||
extern void sub_0806F948();
|
||||
extern void sub_08077698();
|
||||
extern void DisplayEzloMessage();
|
||||
extern void sub_08079258();
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "room.h"
|
||||
#include "save.h"
|
||||
#include "utils.h"
|
||||
#include "audio.h"
|
||||
#include "flags.h"
|
||||
#include "textbox.h"
|
||||
#include "object.h"
|
||||
|
||||
Entity* GiveItemWithCutscene(u32, u32, u32);
|
||||
Entity* sub_080A276C(Entity*, u32, u32);
|
||||
void sub_08078AF0(Entity*, u32, u32);
|
||||
Entity* sub_0805E744(void);
|
||||
void sub_080A7D44(u32, u32);
|
||||
|
||||
void CreateItemEntity(u32 type, u32 type2, u32 delay) {
|
||||
Entity* e = GiveItemWithCutscene(type, type2, delay);
|
||||
if (e != NULL) {
|
||||
e->parent = sub_080A276C(e, e->type, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080A7C18(u32 type, u32 type2, u32 delay) {
|
||||
Entity* e = GiveItemWithCutscene(type, type2, delay);
|
||||
if (e != NULL) {
|
||||
e->parent = &gPlayerEntity;
|
||||
sub_08078AF0(e, e->type, 0);
|
||||
}
|
||||
}
|
||||
|
||||
Entity* GiveItemWithCutscene(u32 type, u32 type2, u32 delay) {
|
||||
Entity* e;
|
||||
if (type == 63 && gSave.stats.filler3[0]) {
|
||||
type = 87;
|
||||
type2 = 0;
|
||||
}
|
||||
e = sub_0805E744();
|
||||
if (e != NULL) {
|
||||
e->type = type;
|
||||
e->type2 = type2;
|
||||
e->actionDelay = delay;
|
||||
e->id = OBJECT_B;
|
||||
e->kind = OBJECT;
|
||||
AppendEntityToList(e, 6);
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
void ClearSmallChests(void) {
|
||||
MemClear(gSmallChests, sizeof(gSmallChests));
|
||||
}
|
||||
|
||||
void sub_080A7C8C(u32 pos, u32 layer) {
|
||||
TileEntity* t = gSmallChests;
|
||||
u32 found = 0;
|
||||
u32 i;
|
||||
for (i = 0; i < 8; ++i, ++t) {
|
||||
if (*(u16*)&t->_4 == pos) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((layer >> 1) == ((u32)(t->_6 << 31) >> 31)) {
|
||||
if (found) {
|
||||
SetLocalFlag(t->_1);
|
||||
CreateItemEntity(t->_2, t->_3, 0);
|
||||
} else {
|
||||
CreateItemEntity(0x60, 0, 0);
|
||||
}
|
||||
sub_0807B7D8(0x74, pos, layer);
|
||||
RequestPriorityDuration(NULL, 120);
|
||||
SoundReq(SFX_CHEST_OPEN);
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_080A7CFC(u32 a1) {
|
||||
u32 msg = 0x600;
|
||||
u32 isTileEntity6 = 0;
|
||||
TileEntity* t = GetCurrentRoomProperty(3);
|
||||
if (t != 0) {
|
||||
do {
|
||||
if (t->_4 == a1) {
|
||||
switch (t->type) {
|
||||
case SIGN:
|
||||
isTileEntity6 = 0;
|
||||
msg = *(u16*)&t->_6;
|
||||
break;
|
||||
case TILE_ENTITY_6:
|
||||
isTileEntity6 = 1;
|
||||
msg = *(u16*)&t->_6;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
t++;
|
||||
} while (t->_4 != 0);
|
||||
}
|
||||
sub_080A7D44(msg, isTileEntity6);
|
||||
}
|
||||
|
||||
void sub_080A7D44(u32 msg, u32 isTileEntity6) {
|
||||
if (isTileEntity6)
|
||||
sub_08078AA8(msg, 0);
|
||||
else
|
||||
// Read sign text
|
||||
MessageFromTarget(msg);
|
||||
}
|
||||
+283
-6638
File diff suppressed because it is too large
Load Diff
+6666
File diff suppressed because it is too large
Load Diff
@@ -2,6 +2,7 @@
|
||||
#include "gba/eeprom.h"
|
||||
#include "audio.h"
|
||||
#include "menu.h"
|
||||
#include "main.h"
|
||||
#include "functions.h"
|
||||
|
||||
typedef struct SaveFileStatus {
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "utils.h"
|
||||
#include "structures.h"
|
||||
|
||||
void sub_08050008() {
|
||||
MemClear(&gUnk_020354C0, sizeof(gUnk_020354C0));
|
||||
gFadeControl.mask = 0xFFFFFFFF;
|
||||
}
|
||||
Reference in New Issue
Block a user