mirror of
https://github.com/zeldaret/tmc
synced 2026-05-25 23:35:29 -04:00
Merge and split game
This commit is contained in:
-1712
File diff suppressed because it is too large
Load Diff
@@ -1,207 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_0805488C
|
||||
sub_0805488C: @ 0x0805488C
|
||||
push {r4, lr}
|
||||
ldr r4, _080548DC @ =gUnk_02032EC0
|
||||
ldrb r1, [r4, #3]
|
||||
lsls r0, r1, #2
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _080548E0 @ =gUnk_080FE320
|
||||
adds r0, r0, r1
|
||||
ldr r2, _080548E4 @ =gMenu
|
||||
ldrb r1, [r0]
|
||||
movs r3, #0
|
||||
strb r1, [r2]
|
||||
ldrb r1, [r0, #1]
|
||||
strb r1, [r2, #3]
|
||||
ldrb r1, [r4, #3]
|
||||
strb r1, [r2, #4]
|
||||
str r0, [r2, #0xc]
|
||||
ldrb r0, [r2, #5]
|
||||
adds r0, #1
|
||||
strb r0, [r2, #5]
|
||||
strb r3, [r2, #6]
|
||||
movs r0, #0x96
|
||||
lsls r0, r0, #1
|
||||
strh r0, [r2, #8]
|
||||
movs r0, #0
|
||||
bl DispReset
|
||||
ldrb r0, [r4, #3]
|
||||
movs r1, #1
|
||||
bl sub_08054974
|
||||
bl sub_0806F364
|
||||
movs r0, #0xff
|
||||
bl ClearRoomFlag
|
||||
bl sub_080548E8
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080548DC: .4byte gUnk_02032EC0
|
||||
_080548E0: .4byte gUnk_080FE320
|
||||
_080548E4: .4byte gMenu
|
||||
|
||||
thumb_func_start sub_080548E8
|
||||
sub_080548E8: @ 0x080548E8
|
||||
push {lr}
|
||||
ldr r1, _08054918 @ =gUnk_080FE2AC
|
||||
ldr r0, _0805491C @ =gMenu
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
bl _call_via_r0
|
||||
bl FlushSprites
|
||||
bl UpdateEntities
|
||||
bl DrawEntities
|
||||
bl CopyOAM
|
||||
bl UpdateScroll
|
||||
bl UpdateBgAnim
|
||||
bl UpdateScrollVram
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08054918: .4byte gUnk_080FE2AC
|
||||
_0805491C: .4byte gMenu
|
||||
|
||||
thumb_func_start sub_08054920
|
||||
sub_08054920: @ 0x08054920
|
||||
push {lr}
|
||||
bl MessageInitialize
|
||||
bl sub_0806F38C
|
||||
ldr r1, _08054948 @ =gUnk_080C9CBC
|
||||
ldr r0, _0805494C @ =gFuseInfo
|
||||
ldrb r0, [r0, #3]
|
||||
lsls r0, r0, #3
|
||||
adds r0, r0, r1
|
||||
ldrb r0, [r0, #7]
|
||||
cmp r0, #0
|
||||
beq _08054954
|
||||
ldr r0, _08054950 @ =gUnk_02032EC0
|
||||
ldrb r1, [r0, #3]
|
||||
movs r0, #0xa
|
||||
bl MenuFadeIn
|
||||
b _08054962
|
||||
.align 2, 0
|
||||
_08054948: .4byte gUnk_080C9CBC
|
||||
_0805494C: .4byte gFuseInfo
|
||||
_08054950: .4byte gUnk_02032EC0
|
||||
_08054954:
|
||||
ldr r1, _08054964 @ =gUnk_02032EC0
|
||||
movs r0, #3
|
||||
strb r0, [r1]
|
||||
movs r0, #7
|
||||
movs r1, #0x10
|
||||
bl SetFade
|
||||
_08054962:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08054964: .4byte gUnk_02032EC0
|
||||
|
||||
thumb_func_start sub_08054968
|
||||
sub_08054968: @ 0x08054968
|
||||
ldr r1, _08054970 @ =gMenu
|
||||
movs r0, #2
|
||||
strb r0, [r1, #5]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_08054970: .4byte gMenu
|
||||
|
||||
thumb_func_start sub_08054974
|
||||
sub_08054974: @ 0x08054974
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r1, #0
|
||||
lsls r1, r0, #2
|
||||
adds r1, r1, r0
|
||||
lsls r1, r1, #2
|
||||
ldr r0, _080549B0 @ =gUnk_080FE320
|
||||
adds r6, r1, r0
|
||||
ldrb r0, [r6, #2]
|
||||
ldrb r1, [r6, #3]
|
||||
bl SetCurrentRoomPropertyList
|
||||
ldr r4, _080549B4 @ =gRoomControls
|
||||
ldrb r0, [r6, #2]
|
||||
strb r0, [r4, #4]
|
||||
ldrb r0, [r6, #3]
|
||||
strb r0, [r4, #5]
|
||||
bl LoadGfxGroups
|
||||
ldrb r0, [r4, #4]
|
||||
bl GetFlagBankOffset
|
||||
ldr r1, _080549B8 @ =gArea
|
||||
strh r0, [r1, #4]
|
||||
cmp r5, #0
|
||||
beq _080549BC
|
||||
ldrb r0, [r6, #2]
|
||||
ldrb r1, [r6, #3]
|
||||
bl LoadAuxiliaryRoom
|
||||
b _080549CE
|
||||
.align 2, 0
|
||||
_080549B0: .4byte gUnk_080FE320
|
||||
_080549B4: .4byte gRoomControls
|
||||
_080549B8: .4byte gArea
|
||||
_080549BC:
|
||||
ldrb r0, [r6, #2]
|
||||
ldrb r1, [r6, #3]
|
||||
bl sub_08052FF4
|
||||
bl sub_0807C740
|
||||
ldr r1, _08054A00 @ =gUpdateVisibleTiles
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
_080549CE:
|
||||
ldr r2, _08054A04 @ =gScreen
|
||||
ldrh r1, [r2]
|
||||
ldr r0, _08054A08 @ =0x00001FFF
|
||||
ands r0, r1
|
||||
strh r0, [r2]
|
||||
ldr r1, _08054A0C @ =gRoomControls
|
||||
ldrh r0, [r6, #4]
|
||||
ldrh r2, [r1, #6]
|
||||
adds r0, r0, r2
|
||||
strh r0, [r1, #0xa]
|
||||
ldrh r0, [r6, #6]
|
||||
ldrh r2, [r1, #8]
|
||||
adds r0, r0, r2
|
||||
strh r0, [r1, #0xc]
|
||||
ldrb r0, [r6, #2]
|
||||
cmp r0, #2
|
||||
bne _080549F4
|
||||
bl TryLoadPrologueHyruleTown
|
||||
_080549F4:
|
||||
ldr r0, _08054A10 @ =gUnk_02032EC0
|
||||
ldrb r0, [r0, #3]
|
||||
bl sub_08018710
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08054A00: .4byte gUpdateVisibleTiles
|
||||
_08054A04: .4byte gScreen
|
||||
_08054A08: .4byte 0x00001FFF
|
||||
_08054A0C: .4byte gRoomControls
|
||||
_08054A10: .4byte gUnk_02032EC0
|
||||
|
||||
thumb_func_start sub_08054A14
|
||||
sub_08054A14: @ 0x08054A14
|
||||
push {lr}
|
||||
lsls r1, r0, #2
|
||||
adds r1, r1, r0
|
||||
lsls r1, r1, #2
|
||||
ldr r0, _08054A38 @ =gUnk_080FE320
|
||||
adds r2, r1, r0
|
||||
ldrb r0, [r2, #0x11]
|
||||
cmp r0, #0xd
|
||||
bhi _08054A34
|
||||
ldr r1, _08054A3C @ =gLocalFlagBanks
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
ldrh r0, [r0]
|
||||
ldrh r1, [r2, #0x12]
|
||||
bl SetLocalFlagByBank
|
||||
_08054A34:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08054A38: .4byte gUnk_080FE320
|
||||
_08054A3C: .4byte gLocalFlagBanks
|
||||
@@ -1,40 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start ModArrows
|
||||
ModArrows: @ 0x08054330
|
||||
push {lr}
|
||||
adds r3, r0, #0
|
||||
ldr r1, _08054354 @ =gSave
|
||||
adds r0, r1, #0
|
||||
adds r0, #0xad
|
||||
ldrb r0, [r0]
|
||||
adds r3, r3, r0
|
||||
ldr r2, _08054358 @ =gQuiverSizes
|
||||
adds r0, r1, #0
|
||||
adds r0, #0xaf
|
||||
ldrb r0, [r0]
|
||||
adds r0, r0, r2
|
||||
ldrb r2, [r0]
|
||||
cmp r3, #0
|
||||
bge _0805435C
|
||||
movs r3, #0
|
||||
b _08054362
|
||||
.align 2, 0
|
||||
_08054354: .4byte gSave
|
||||
_08054358: .4byte gQuiverSizes
|
||||
_0805435C:
|
||||
cmp r2, r3
|
||||
bge _08054362
|
||||
adds r3, r2, #0
|
||||
_08054362:
|
||||
adds r0, r1, #0
|
||||
adds r0, #0xad
|
||||
strb r3, [r0]
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
@@ -1,40 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start ModBombs
|
||||
ModBombs: @ 0x080542F4
|
||||
push {lr}
|
||||
adds r3, r0, #0
|
||||
ldr r1, _08054318 @ =gSave
|
||||
adds r0, r1, #0
|
||||
adds r0, #0xac
|
||||
ldrb r0, [r0]
|
||||
adds r3, r3, r0
|
||||
ldr r2, _0805431C @ =gBombBagSizes
|
||||
adds r0, r1, #0
|
||||
adds r0, #0xae
|
||||
ldrb r0, [r0]
|
||||
adds r0, r0, r2
|
||||
ldrb r2, [r0]
|
||||
cmp r3, #0
|
||||
bge _08054320
|
||||
movs r3, #0
|
||||
b _08054326
|
||||
.align 2, 0
|
||||
_08054318: .4byte gSave
|
||||
_0805431C: .4byte gBombBagSizes
|
||||
_08054320:
|
||||
cmp r2, r3
|
||||
bge _08054326
|
||||
adds r3, r2, #0
|
||||
_08054326:
|
||||
adds r0, r1, #0
|
||||
adds r0, #0xac
|
||||
strb r3, [r0]
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
@@ -15,7 +15,7 @@ _08087CC6:
|
||||
adds r0, #0x81
|
||||
ldrb r0, [r0]
|
||||
rsbs r0, r0, #0
|
||||
bl sub_080542C0
|
||||
bl ModShells
|
||||
bl Random
|
||||
movs r1, #0x7f
|
||||
ands r1, r0
|
||||
@@ -141,7 +141,7 @@ _08088332:
|
||||
adds r0, #0x81
|
||||
ldrb r0, [r0]
|
||||
rsbs r0, r0, #0
|
||||
bl sub_080542C0
|
||||
bl ModShells
|
||||
bl Random
|
||||
movs r1, #0x7f
|
||||
ands r1, r0
|
||||
|
||||
@@ -0,0 +1,314 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
adds r6, r0, #0
|
||||
adds r7, r1, #0
|
||||
bl GetInventoryValue
|
||||
adds r5, r0, #0
|
||||
lsls r1, r6, #3
|
||||
ldr r0, _08054010 @ =gItemMetaData
|
||||
adds r4, r1, r0
|
||||
cmp r5, #0
|
||||
bne _08054014
|
||||
ldrh r0, [r4, #4]
|
||||
mov r8, r0
|
||||
b _08054018
|
||||
.align 2, 0
|
||||
_08054010: .4byte gItemMetaData
|
||||
_08054014:
|
||||
ldrh r2, [r4, #6]
|
||||
mov r8, r2
|
||||
_08054018:
|
||||
adds r0, r6, #0
|
||||
bl ItemIsBottle
|
||||
cmp r0, #0
|
||||
bne _08054034
|
||||
adds r0, r6, #0
|
||||
bl PutItemOnSlot
|
||||
cmp r5, #0
|
||||
bne _08054034
|
||||
adds r0, r6, #0
|
||||
movs r1, #1
|
||||
bl SetInventoryValue
|
||||
_08054034:
|
||||
ldrb r0, [r4, #1]
|
||||
cmp r0, #0x12
|
||||
bls _0805403C
|
||||
b _0805427C
|
||||
_0805403C:
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _08054048 @ =_0805404C
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08054048: .4byte _0805404C
|
||||
_0805404C: @ jump table
|
||||
.4byte _0805427C @ case 0
|
||||
.4byte _08054098 @ case 1
|
||||
.4byte _080540A6 @ case 2
|
||||
.4byte _080540C0 @ case 3
|
||||
.4byte _08054104 @ case 4
|
||||
.4byte _0805414C @ case 5
|
||||
.4byte _08054154 @ case 6
|
||||
.4byte _08054194 @ case 7
|
||||
.4byte _080541B6 @ case 8
|
||||
.4byte _080541F0 @ case 9
|
||||
.4byte _08054212 @ case 10
|
||||
.4byte _080541F8 @ case 11
|
||||
.4byte _08054238 @ case 12
|
||||
.4byte _08054174 @ case 13
|
||||
.4byte _08054240 @ case 14
|
||||
.4byte _0805425C @ case 15
|
||||
.4byte _08054264 @ case 16
|
||||
.4byte _080541B0 @ case 17
|
||||
.4byte _0805417C @ case 18
|
||||
_08054098:
|
||||
ldrb r0, [r4, #2]
|
||||
bl ModHealth
|
||||
movs r0, #0x71
|
||||
bl SoundReq
|
||||
b _0805427C
|
||||
_080540A6:
|
||||
ldr r0, _080540BC @ =gUnk_080FD5A8
|
||||
ldrb r1, [r4, #2]
|
||||
lsls r1, r1, #1
|
||||
adds r1, r1, r0
|
||||
ldrh r0, [r1]
|
||||
bl ModRupees
|
||||
movs r0, #0x6f
|
||||
bl SoundReq
|
||||
b _0805427C
|
||||
.align 2, 0
|
||||
_080540BC: .4byte gUnk_080FD5A8
|
||||
_080540C0:
|
||||
movs r5, #0
|
||||
movs r4, #0x1c
|
||||
b _080540CA
|
||||
_080540C6:
|
||||
adds r4, r1, #1
|
||||
adds r5, #1
|
||||
_080540CA:
|
||||
cmp r5, #3
|
||||
bls _080540D0
|
||||
b _0805427C
|
||||
_080540D0:
|
||||
adds r0, r4, #0
|
||||
bl GetInventoryValue
|
||||
adds r1, r4, #0
|
||||
cmp r0, #0
|
||||
bne _080540C6
|
||||
adds r6, r4, #0
|
||||
ldr r0, _08054100 @ =gSave
|
||||
adds r0, #0xb6
|
||||
adds r1, r5, r0
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0
|
||||
bne _080540EE
|
||||
movs r0, #0x20
|
||||
strb r0, [r1]
|
||||
_080540EE:
|
||||
adds r0, r6, #0
|
||||
movs r1, #1
|
||||
bl SetInventoryValue
|
||||
adds r0, r6, #0
|
||||
bl PutItemOnSlot
|
||||
b _0805427C
|
||||
.align 2, 0
|
||||
_08054100: .4byte gSave
|
||||
_08054104:
|
||||
movs r5, #0
|
||||
ldr r0, _08054144 @ =gSave
|
||||
adds r2, r0, #0
|
||||
adds r2, #0xb6
|
||||
ldrb r1, [r2]
|
||||
adds r3, r0, #0
|
||||
cmp r1, #0x20
|
||||
beq _08054126
|
||||
adds r1, r2, #0
|
||||
_08054116:
|
||||
adds r5, #1
|
||||
cmp r5, #3
|
||||
bls _0805411E
|
||||
b _0805427C
|
||||
_0805411E:
|
||||
adds r0, r5, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x20
|
||||
bne _08054116
|
||||
_08054126:
|
||||
cmp r5, #3
|
||||
bls _0805412C
|
||||
b _0805427C
|
||||
_0805412C:
|
||||
adds r0, r3, #0
|
||||
adds r0, #0xb6
|
||||
adds r0, r5, r0
|
||||
strb r6, [r0]
|
||||
adds r0, r6, #0
|
||||
movs r1, #1
|
||||
bl SetInventoryValue
|
||||
ldr r0, _08054148 @ =0x00000109
|
||||
bl SoundReq
|
||||
b _0805427C
|
||||
.align 2, 0
|
||||
_08054144: .4byte gSave
|
||||
_08054148: .4byte 0x00000109
|
||||
_0805414C:
|
||||
movs r0, #1
|
||||
bl sub_080526F8
|
||||
b _0805424E
|
||||
_08054154:
|
||||
ldr r1, _08054168 @ =gSave
|
||||
ldr r0, _0805416C @ =gArea
|
||||
ldr r2, _08054170 @ =0x0000046C
|
||||
adds r1, r1, r2
|
||||
ldrb r0, [r0, #3]
|
||||
adds r1, r1, r0
|
||||
ldrb r0, [r1]
|
||||
ldrb r2, [r4, #2]
|
||||
orrs r0, r2
|
||||
b _0805427A
|
||||
.align 2, 0
|
||||
_08054168: .4byte gSave
|
||||
_0805416C: .4byte gArea
|
||||
_08054170: .4byte 0x0000046C
|
||||
_08054174:
|
||||
movs r0, #0x72
|
||||
bl sub_0801E738
|
||||
b _0805427C
|
||||
_0805417C:
|
||||
cmp r6, #0xb
|
||||
bne _0805418A
|
||||
movs r0, #0xc
|
||||
movs r1, #0
|
||||
bl SetInventoryValue
|
||||
b _080541B0
|
||||
_0805418A:
|
||||
movs r0, #0xb
|
||||
movs r1, #0
|
||||
bl SetInventoryValue
|
||||
b _080541B0
|
||||
_08054194:
|
||||
cmp r6, #7
|
||||
bne _080541A2
|
||||
movs r0, #8
|
||||
movs r1, #0
|
||||
bl SetInventoryValue
|
||||
b _080541AA
|
||||
_080541A2:
|
||||
movs r0, #7
|
||||
movs r1, #0
|
||||
bl SetInventoryValue
|
||||
_080541AA:
|
||||
movs r0, #0x63
|
||||
bl ModBombs
|
||||
_080541B0:
|
||||
bl LoadItemGfx
|
||||
b _0805427C
|
||||
_080541B6:
|
||||
cmp r5, #0
|
||||
bne _080541CA
|
||||
movs r0, #7
|
||||
movs r1, #1
|
||||
bl SetInventoryValue
|
||||
movs r0, #7
|
||||
bl PutItemOnSlot
|
||||
b _080541E2
|
||||
_080541CA:
|
||||
ldr r0, _080541EC @ =gSave
|
||||
adds r1, r0, #0
|
||||
adds r1, #0xae
|
||||
ldrb r0, [r1]
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #3
|
||||
bls _080541E2
|
||||
movs r0, #3
|
||||
strb r0, [r1]
|
||||
_080541E2:
|
||||
movs r0, #0x63
|
||||
bl ModBombs
|
||||
b _0805427C
|
||||
.align 2, 0
|
||||
_080541EC: .4byte gSave
|
||||
_080541F0:
|
||||
ldrb r0, [r4, #2]
|
||||
bl ModBombs
|
||||
b _0805424E
|
||||
_080541F8:
|
||||
movs r0, #0x66
|
||||
bl GetInventoryValue
|
||||
cmp r0, #0
|
||||
bne _0805420A
|
||||
movs r0, #0x66
|
||||
movs r1, #1
|
||||
bl SetInventoryValue
|
||||
_0805420A:
|
||||
movs r0, #0x63
|
||||
bl ModArrows
|
||||
b _080541B0
|
||||
_08054212:
|
||||
ldr r0, _08054234 @ =gSave
|
||||
adds r1, r0, #0
|
||||
adds r1, #0xaf
|
||||
ldrb r0, [r1]
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #3
|
||||
bls _0805422A
|
||||
movs r0, #3
|
||||
strb r0, [r1]
|
||||
_0805422A:
|
||||
movs r0, #0x63
|
||||
bl ModArrows
|
||||
b _0805427C
|
||||
.align 2, 0
|
||||
_08054234: .4byte gSave
|
||||
_08054238:
|
||||
ldrb r0, [r4, #2]
|
||||
bl ModArrows
|
||||
b _0805424E
|
||||
_08054240:
|
||||
movs r0, #0x3f
|
||||
movs r1, #1
|
||||
bl SetInventoryValue
|
||||
adds r0, r7, #0
|
||||
bl ModShells
|
||||
_0805424E:
|
||||
ldr r0, _08054258 @ =0x00000103
|
||||
bl SoundReq
|
||||
b _0805427C
|
||||
.align 2, 0
|
||||
_08054258: .4byte 0x00000103
|
||||
_0805425C:
|
||||
adds r0, r7, #0
|
||||
bl sub_0801E738
|
||||
b _0805427C
|
||||
_08054264:
|
||||
ldr r0, _08054284 @ =gSave
|
||||
adds r1, r0, #0
|
||||
adds r1, #0xa8
|
||||
ldrb r0, [r1]
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #3
|
||||
bls _0805427C
|
||||
movs r0, #3
|
||||
_0805427A:
|
||||
strb r0, [r1]
|
||||
_0805427C:
|
||||
mov r0, r8
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_08054284: .4byte gSave
|
||||
.syntax divided
|
||||
@@ -0,0 +1,72 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
ldr r1, _080537DC @ =gMenu
|
||||
movs r2, #0
|
||||
movs r3, #1
|
||||
strb r3, [r1, #6]
|
||||
movs r4, #0
|
||||
movs r0, #0x78
|
||||
strh r0, [r1, #8]
|
||||
movs r0, #0x1e
|
||||
strh r0, [r1, #0xa]
|
||||
strb r4, [r1, #0x10]
|
||||
ldr r0, _080537E0 @ =gUnk_02032EC0
|
||||
strb r3, [r0, #6]
|
||||
ldr r0, _080537E4 @ =gMapBottom
|
||||
str r2, [r0]
|
||||
ldr r0, _080537E8 @ =gMapTop
|
||||
str r2, [r0]
|
||||
ldr r0, _080537EC @ =gRoomControls
|
||||
str r2, [r0, #0x30]
|
||||
strh r2, [r0, #0xc]
|
||||
strh r2, [r0, #0xa]
|
||||
bl sub_0801B170
|
||||
movs r0, #0
|
||||
bl DispReset
|
||||
ldr r2, _080537F0 @ =gScreen
|
||||
movs r0, #0x99
|
||||
lsls r0, r0, #6
|
||||
strh r0, [r2]
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x66
|
||||
ldr r0, _080537F4 @ =0x00002244
|
||||
strh r0, [r1]
|
||||
adds r1, #2
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #5
|
||||
strh r0, [r1]
|
||||
subs r1, #8
|
||||
movs r0, #0x1f
|
||||
strh r0, [r1]
|
||||
adds r1, #2
|
||||
movs r0, #0x3f
|
||||
strh r0, [r1]
|
||||
subs r1, #0xa
|
||||
movs r0, #0xf0
|
||||
strh r0, [r1]
|
||||
adds r1, #4
|
||||
movs r0, #0x60
|
||||
strh r0, [r1]
|
||||
ldr r0, _080537F8 @ =0x00001C4E
|
||||
strh r0, [r2, #0x14]
|
||||
ldr r0, _080537FC @ =0x00001DC1
|
||||
strh r0, [r2, #0x20]
|
||||
movs r0, #0xf
|
||||
bl SoundReq
|
||||
bl ResetSystemPriority
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #1
|
||||
movs r0, #5
|
||||
bl SetFade
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080537DC: .4byte gMenu
|
||||
_080537E0: .4byte gUnk_02032EC0
|
||||
_080537E4: .4byte gMapBottom
|
||||
_080537E8: .4byte gMapTop
|
||||
_080537EC: .4byte gRoomControls
|
||||
_080537F0: .4byte gScreen
|
||||
_080537F4: .4byte 0x00002244
|
||||
_080537F8: .4byte 0x00001C4E
|
||||
_080537FC: .4byte 0x00001DC1
|
||||
.syntax divided
|
||||
@@ -0,0 +1,67 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
ldr r0, _0805387C @ =gFadeControl
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _0805387A
|
||||
ldr r1, _08053880 @ =gMenu
|
||||
ldrb r5, [r1, #0x10]
|
||||
lsls r4, r5, #1
|
||||
adds r4, r4, r5
|
||||
lsls r4, r4, #2
|
||||
ldr r0, _08053884 @ =gUnk_080FCCB4
|
||||
adds r4, r4, r0
|
||||
ldrh r0, [r4, #8]
|
||||
movs r2, #0
|
||||
strh r0, [r1, #8]
|
||||
movs r0, #0x1e
|
||||
strh r0, [r1, #0xa]
|
||||
ldrb r0, [r1, #0x10]
|
||||
adds r0, #1
|
||||
strb r0, [r1, #0x10]
|
||||
ldrb r0, [r1, #6]
|
||||
adds r0, #1
|
||||
strb r0, [r1, #6]
|
||||
strb r2, [r1, #7]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x8a
|
||||
bl LoadPaletteGroup
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x3a
|
||||
bl LoadGfxGroup
|
||||
ldr r0, _08053888 @ =gBG1Buffer
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #4
|
||||
bl MemClear
|
||||
ldr r0, _0805388C @ =0x00000F01
|
||||
adds r5, r5, r0
|
||||
ldr r1, [r4]
|
||||
adds r0, r5, #0
|
||||
bl sub_0805F46C
|
||||
ldr r2, _08053890 @ =gScreen
|
||||
movs r0, #1
|
||||
strh r0, [r2, #0x1a]
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x68
|
||||
movs r0, #0x10
|
||||
strh r0, [r1]
|
||||
ldrh r1, [r4, #4]
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x58
|
||||
strh r1, [r0]
|
||||
ldrh r1, [r4, #6]
|
||||
adds r0, #4
|
||||
strh r1, [r0]
|
||||
ldrh r1, [r4, #0xa]
|
||||
movs r0, #4
|
||||
bl SetFade
|
||||
_0805387A:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0805387C: .4byte gFadeControl
|
||||
_08053880: .4byte gMenu
|
||||
_08053884: .4byte gUnk_080FCCB4
|
||||
_08053888: .4byte gBG1Buffer
|
||||
_0805388C: .4byte 0x00000F01
|
||||
_08053890: .4byte gScreen
|
||||
.syntax divided
|
||||
@@ -0,0 +1,57 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
ldr r0, _080538B4 @ =gFadeControl
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _080538F8
|
||||
ldr r1, _080538B8 @ =gMenu
|
||||
ldrh r0, [r1, #8]
|
||||
subs r0, #1
|
||||
strh r0, [r1, #8]
|
||||
ldrh r0, [r1, #0xa]
|
||||
adds r4, r1, #0
|
||||
cmp r0, #0
|
||||
beq _080538BC
|
||||
subs r0, #1
|
||||
strh r0, [r4, #0xa]
|
||||
b _080538E4
|
||||
.align 2, 0
|
||||
_080538B4: .4byte gFadeControl
|
||||
_080538B8: .4byte gMenu
|
||||
_080538BC:
|
||||
ldr r0, _080538FC @ =gRoomTransition
|
||||
ldr r0, [r0]
|
||||
movs r1, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080538E4
|
||||
ldrb r1, [r4, #7]
|
||||
cmp r1, #0xf
|
||||
bhi _080538E4
|
||||
adds r1, #1
|
||||
strb r1, [r4, #7]
|
||||
lsls r1, r1, #0x18
|
||||
ldr r3, _08053900 @ =gScreen
|
||||
lsrs r2, r1, #0x10
|
||||
lsrs r1, r1, #0x19
|
||||
movs r0, #0x10
|
||||
subs r0, r0, r1
|
||||
orrs r2, r0
|
||||
adds r3, #0x68
|
||||
strh r2, [r3]
|
||||
_080538E4:
|
||||
ldrh r0, [r4, #8]
|
||||
cmp r0, #0
|
||||
bne _080538F8
|
||||
ldrb r0, [r4, #6]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #6]
|
||||
movs r0, #5
|
||||
movs r1, #8
|
||||
bl SetFade
|
||||
_080538F8:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080538FC: .4byte gRoomTransition
|
||||
_08053900: .4byte gScreen
|
||||
.syntax divided
|
||||
@@ -0,0 +1,57 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
ldr r0, _08053924 @ =gFadeControl
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _08053968
|
||||
ldr r1, _08053928 @ =gMenu
|
||||
ldrh r0, [r1, #8]
|
||||
subs r0, #1
|
||||
strh r0, [r1, #8]
|
||||
ldrh r0, [r1, #0xa]
|
||||
adds r4, r1, #0
|
||||
cmp r0, #0
|
||||
beq _0805392C
|
||||
subs r0, #1
|
||||
strh r0, [r4, #0xa]
|
||||
b _08053954
|
||||
.align 2, 0
|
||||
_08053924: .4byte gFadeControl
|
||||
_08053928: .4byte gMenu
|
||||
_0805392C:
|
||||
ldr r0, _0805396C @ =gRoomTransition
|
||||
ldr r0, [r0]
|
||||
movs r1, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _08053954
|
||||
ldrb r1, [r4, #7]
|
||||
cmp r1, #0xf
|
||||
bhi _08053954
|
||||
adds r1, #1
|
||||
strb r1, [r4, #7]
|
||||
lsls r1, r1, #0x18
|
||||
ldr r3, _08053970 @ =gScreen
|
||||
lsrs r2, r1, #0x10
|
||||
lsrs r1, r1, #0x19
|
||||
movs r0, #0x10
|
||||
subs r0, r0, r1
|
||||
orrs r2, r0
|
||||
adds r3, #0x68
|
||||
strh r2, [r3]
|
||||
_08053954:
|
||||
ldrh r0, [r4, #8]
|
||||
cmp r0, #0
|
||||
bne _08053968
|
||||
ldrb r0, [r4, #6]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #6]
|
||||
movs r0, #5
|
||||
movs r1, #1
|
||||
bl SetFade
|
||||
_08053968:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0805396C: .4byte gRoomTransition
|
||||
_08053970: .4byte gScreen
|
||||
.syntax divided
|
||||
@@ -0,0 +1,47 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
ldr r6, _08053D20 @ =gMenu
|
||||
ldrb r4, [r6, #3]
|
||||
lsls r4, r4, #4
|
||||
ldr r0, _08053D24 @ =gUnk_080FCF04
|
||||
adds r4, r4, r0
|
||||
adds r0, r4, #0
|
||||
adds r0, #8
|
||||
str r0, [r6, #0xc]
|
||||
ldr r0, [r4]
|
||||
bl LoadRoomEntityList
|
||||
ldrb r0, [r4, #4]
|
||||
ldrb r1, [r4, #5]
|
||||
movs r2, #1
|
||||
bl GetRoomProperty
|
||||
bl LoadRoomEntityList
|
||||
ldrb r0, [r4, #4]
|
||||
ldrb r1, [r4, #5]
|
||||
movs r2, #2
|
||||
bl GetRoomProperty
|
||||
bl LoadRoomEntityList
|
||||
movs r5, #1
|
||||
strb r5, [r6, #6]
|
||||
ldr r2, _08053D28 @ =gScreen
|
||||
ldrh r1, [r2]
|
||||
ldr r0, _08053D2C @ =0x0000FEFF
|
||||
ands r0, r1
|
||||
strh r0, [r2]
|
||||
ldr r0, _08053D30 @ =gUpdateVisibleTiles
|
||||
strb r5, [r0]
|
||||
movs r0, #4
|
||||
movs r1, #0x10
|
||||
bl SetFade
|
||||
ldrb r0, [r4, #5]
|
||||
cmp r0, #0x1d
|
||||
bne _08053D1E
|
||||
strh r5, [r6, #0xa]
|
||||
_08053D1E:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08053D20: .4byte gMenu
|
||||
_08053D24: .4byte gUnk_080FCF04
|
||||
_08053D28: .4byte gScreen
|
||||
_08053D2C: .4byte 0x0000FEFF
|
||||
_08053D30: .4byte gUpdateVisibleTiles
|
||||
.syntax divided
|
||||
@@ -0,0 +1,40 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
ldr r4, _080548DC @ =gUnk_02032EC0
|
||||
ldrb r1, [r4, #3]
|
||||
lsls r0, r1, #2
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _080548E0 @ =gUnk_080FE320
|
||||
adds r0, r0, r1
|
||||
ldr r2, _080548E4 @ =gMenu
|
||||
ldrb r1, [r0]
|
||||
movs r3, #0
|
||||
strb r1, [r2]
|
||||
ldrb r1, [r0, #1]
|
||||
strb r1, [r2, #3]
|
||||
ldrb r1, [r4, #3]
|
||||
strb r1, [r2, #4]
|
||||
str r0, [r2, #0xc]
|
||||
ldrb r0, [r2, #5]
|
||||
adds r0, #1
|
||||
strb r0, [r2, #5]
|
||||
strb r3, [r2, #6]
|
||||
movs r0, #0x96
|
||||
lsls r0, r0, #1
|
||||
strh r0, [r2, #8]
|
||||
movs r0, #0
|
||||
bl DispReset
|
||||
ldrb r0, [r4, #3]
|
||||
movs r1, #1
|
||||
bl sub_08054974
|
||||
bl sub_0806F364
|
||||
movs r0, #0xff
|
||||
bl ClearRoomFlag
|
||||
bl sub_080548E8
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080548DC: .4byte gUnk_02032EC0
|
||||
_080548E0: .4byte gUnk_080FE320
|
||||
_080548E4: .4byte gMenu
|
||||
.syntax divided
|
||||
@@ -0,0 +1,33 @@
|
||||
.syntax unified
|
||||
push {lr}
|
||||
bl MessageInitialize
|
||||
bl sub_0806F38C
|
||||
ldr r1, _08054948 @ =gUnk_080C9CBC
|
||||
ldr r0, _0805494C @ =gFuseInfo
|
||||
ldrb r0, [r0, #3]
|
||||
lsls r0, r0, #3
|
||||
adds r0, r0, r1
|
||||
ldrb r0, [r0, #7]
|
||||
cmp r0, #0
|
||||
beq _08054954
|
||||
ldr r0, _08054950 @ =gUnk_02032EC0
|
||||
ldrb r1, [r0, #3]
|
||||
movs r0, #0xa
|
||||
bl MenuFadeIn
|
||||
b _08054962
|
||||
.align 2, 0
|
||||
_08054948: .4byte gUnk_080C9CBC
|
||||
_0805494C: .4byte gFuseInfo
|
||||
_08054950: .4byte gUnk_02032EC0
|
||||
_08054954:
|
||||
ldr r1, _08054964 @ =gUnk_02032EC0
|
||||
movs r0, #3
|
||||
strb r0, [r1]
|
||||
movs r0, #7
|
||||
movs r1, #0x10
|
||||
bl SetFade
|
||||
_08054962:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08054964: .4byte gUnk_02032EC0
|
||||
.syntax divided
|
||||
@@ -0,0 +1,70 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r1, #0
|
||||
lsls r1, r0, #2
|
||||
adds r1, r1, r0
|
||||
lsls r1, r1, #2
|
||||
ldr r0, _080549B0 @ =gUnk_080FE320
|
||||
adds r6, r1, r0
|
||||
ldrb r0, [r6, #2]
|
||||
ldrb r1, [r6, #3]
|
||||
bl SetCurrentRoomPropertyList
|
||||
ldr r4, _080549B4 @ =gRoomControls
|
||||
ldrb r0, [r6, #2]
|
||||
strb r0, [r4, #4]
|
||||
ldrb r0, [r6, #3]
|
||||
strb r0, [r4, #5]
|
||||
bl LoadGfxGroups
|
||||
ldrb r0, [r4, #4]
|
||||
bl GetFlagBankOffset
|
||||
ldr r1, _080549B8 @ =gArea
|
||||
strh r0, [r1, #4]
|
||||
cmp r5, #0
|
||||
beq _080549BC
|
||||
ldrb r0, [r6, #2]
|
||||
ldrb r1, [r6, #3]
|
||||
bl LoadAuxiliaryRoom
|
||||
b _080549CE
|
||||
.align 2, 0
|
||||
_080549B0: .4byte gUnk_080FE320
|
||||
_080549B4: .4byte gRoomControls
|
||||
_080549B8: .4byte gArea
|
||||
_080549BC:
|
||||
ldrb r0, [r6, #2]
|
||||
ldrb r1, [r6, #3]
|
||||
bl sub_08052FF4
|
||||
bl sub_0807C740
|
||||
ldr r1, _08054A00 @ =gUpdateVisibleTiles
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
_080549CE:
|
||||
ldr r2, _08054A04 @ =gScreen
|
||||
ldrh r1, [r2]
|
||||
ldr r0, _08054A08 @ =0x00001FFF
|
||||
ands r0, r1
|
||||
strh r0, [r2]
|
||||
ldr r1, _08054A0C @ =gRoomControls
|
||||
ldrh r0, [r6, #4]
|
||||
ldrh r2, [r1, #6]
|
||||
adds r0, r0, r2
|
||||
strh r0, [r1, #0xa]
|
||||
ldrh r0, [r6, #6]
|
||||
ldrh r2, [r1, #8]
|
||||
adds r0, r0, r2
|
||||
strh r0, [r1, #0xc]
|
||||
ldrb r0, [r6, #2]
|
||||
cmp r0, #2
|
||||
bne _080549F4
|
||||
bl TryLoadPrologueHyruleTown
|
||||
_080549F4:
|
||||
ldr r0, _08054A10 @ =gUnk_02032EC0
|
||||
ldrb r0, [r0, #3]
|
||||
bl sub_08018710
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08054A00: .4byte gUpdateVisibleTiles
|
||||
_08054A04: .4byte gScreen
|
||||
_08054A08: .4byte 0x00001FFF
|
||||
_08054A0C: .4byte gRoomControls
|
||||
_08054A10: .4byte gUnk_02032EC0
|
||||
.syntax divided
|
||||
@@ -0,0 +1,22 @@
|
||||
.syntax unified
|
||||
push {lr}
|
||||
lsls r1, r0, #2
|
||||
adds r1, r1, r0
|
||||
lsls r1, r1, #2
|
||||
ldr r0, _08054A38 @ =gUnk_080FE320
|
||||
adds r2, r1, r0
|
||||
ldrb r0, [r2, #0x11]
|
||||
cmp r0, #0xd
|
||||
bhi _08054A34
|
||||
ldr r1, _08054A3C @ =gLocalFlagBanks
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
ldrh r0, [r0]
|
||||
ldrh r1, [r2, #0x12]
|
||||
bl SetLocalFlagByBank
|
||||
_08054A34:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08054A38: .4byte gUnk_080FE320
|
||||
_08054A3C: .4byte gLocalFlagBanks
|
||||
.syntax divided
|
||||
@@ -436,11 +436,6 @@ SECTIONS {
|
||||
src/fade.o(.text);
|
||||
src/fileselect.o(.text);
|
||||
src/game.o(.text);
|
||||
asm/code_080526F8.o(.text);
|
||||
asm/modBombs.o(.text);
|
||||
asm/modArrows.o(.text);
|
||||
src/code_0805436C.o(.text);
|
||||
asm/code_0805436C.o(.text); /* game.c */
|
||||
src/playerItem/playerItemLantern.o(.text);
|
||||
src/subtask.o(.text);
|
||||
src/sub_08055E08.o(.text);
|
||||
@@ -619,17 +614,7 @@ SECTIONS {
|
||||
src/item/itemGustJar.o(.text);
|
||||
src/item/itemMoleMitts.o(.text);
|
||||
src/item/itemJarEmpty.o(.text);
|
||||
asm/playerUtils.o(.text);
|
||||
src/respawnPlayer.o(.text);
|
||||
src/code_08077B98.o(.text);
|
||||
asm/code_08077B98.o(.text);
|
||||
src/code_08078778.o(.text);
|
||||
asm/code_08078778.o(.text);
|
||||
src/sub_0807B820.o(.text);
|
||||
asm/code_0807B9B8.o(.text);
|
||||
src/sub_0807CA18.o(.text);
|
||||
asm/getInventoryValue.o(.text);
|
||||
asm/code_0807CAA0.o(.text); /* playerUtils.c */
|
||||
src/playerUtils.o(.text);
|
||||
src/flags.o(.text);
|
||||
src/save.o(.text);
|
||||
src/screenTilemap.o(.text);
|
||||
|
||||
@@ -1,403 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "player.h"
|
||||
#include "room.h"
|
||||
#include "menu.h"
|
||||
#include "area.h"
|
||||
#include "common.h"
|
||||
#include "save.h"
|
||||
#include "item.h"
|
||||
#include "object.h"
|
||||
#include "enemy.h"
|
||||
#include "droptables.h"
|
||||
#include "itemMetaData.h"
|
||||
|
||||
extern u8 gUnk_0200AF13;
|
||||
extern u8 gUnk_0200AF14;
|
||||
extern u8 gUnk_080FE1C6[];
|
||||
/*{
|
||||
0u,
|
||||
0x1u,
|
||||
0x2u,
|
||||
0x3u,
|
||||
0x4u,
|
||||
0x5u,
|
||||
0x6u,
|
||||
0x7u,
|
||||
0x8u,
|
||||
0x9u,
|
||||
0x8u,
|
||||
0x9u,
|
||||
0xau,
|
||||
0xau,
|
||||
0xbu,
|
||||
0xcu,
|
||||
0xdu,
|
||||
0xeu,
|
||||
0xfu,
|
||||
0x8u,
|
||||
0xfu,
|
||||
0x1u,
|
||||
0x8u,
|
||||
};
|
||||
*/
|
||||
extern void (*const gUnk_080FE2A0[])(void);
|
||||
|
||||
void ForceEquipItem(u32, u32);
|
||||
extern void sub_0807CAA0(u32, u32);
|
||||
|
||||
/*
|
||||
Returns the slot the item is equipped in.
|
||||
0: A
|
||||
1: B
|
||||
2: Not equipped
|
||||
*/
|
||||
extern u8 gUnk_080FE1DD[];
|
||||
|
||||
u32 IsItemEquipped(u32 itemID) {
|
||||
u32 itemSlot;
|
||||
|
||||
if (itemID == gSave.stats.itemButtons[SLOT_A])
|
||||
itemSlot = 0;
|
||||
else if (itemID == gSave.stats.itemButtons[SLOT_B])
|
||||
itemSlot = 1;
|
||||
else
|
||||
itemSlot = 2;
|
||||
return itemSlot;
|
||||
}
|
||||
|
||||
void PutItemOnSlot(u32 itemID) {
|
||||
u32 itemSlot;
|
||||
u32 itemID2 = itemID;
|
||||
if (itemID2 < 0x47) {
|
||||
sub_0807CAA0(0, 1);
|
||||
}
|
||||
if (itemID2 - 1 < 0x1f) {
|
||||
itemSlot = 2;
|
||||
if (gSave.stats.itemButtons[SLOT_A] == 0) {
|
||||
itemSlot = 0;
|
||||
} else if (gSave.stats.itemButtons[SLOT_B] == 0) {
|
||||
itemSlot = 1;
|
||||
}
|
||||
if (itemSlot == 2) {
|
||||
u32 temp = gItemMetaData[itemID2].menuSlot;
|
||||
if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_A]].menuSlot) {
|
||||
itemSlot = 0;
|
||||
} else {
|
||||
if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_B]].menuSlot) {
|
||||
itemSlot = 1;
|
||||
}
|
||||
}
|
||||
if (itemSlot == 2) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
ForceEquipItem(itemID2, itemSlot);
|
||||
}
|
||||
}
|
||||
|
||||
void ForceEquipItem(u32 itemID, u32 itemSlot) {
|
||||
u32 otherItem;
|
||||
u32 otherItemIndex;
|
||||
u32 replacedItem;
|
||||
|
||||
if ((itemID - 1 < 0x1f) && (itemSlot < 2)) {
|
||||
otherItemIndex = itemSlot == 0;
|
||||
replacedItem = gSave.stats.itemButtons[itemSlot];
|
||||
otherItem = gSave.stats.itemButtons[otherItemIndex];
|
||||
if (gItemMetaData[otherItem].menuSlot == gItemMetaData[itemID].menuSlot) {
|
||||
otherItem = replacedItem;
|
||||
}
|
||||
gSave.stats.itemButtons[itemSlot] = itemID;
|
||||
gSave.stats.itemButtons[otherItemIndex] = otherItem;
|
||||
gUnk_0200AF00.filler0[0x13] = 0x7f;
|
||||
gUnk_0200AF00.filler0[0x14] = 0x7f;
|
||||
}
|
||||
}
|
||||
|
||||
u32 SetBottleContents(u32 itemID, u32 bottleIndex) {
|
||||
if (bottleIndex > 3) {
|
||||
bottleIndex = 0;
|
||||
if (gSave.stats.bottles[0] != 0x20) {
|
||||
do {
|
||||
bottleIndex++;
|
||||
if (bottleIndex > 3) {
|
||||
return bottleIndex;
|
||||
}
|
||||
} while (gSave.stats.bottles[bottleIndex] != 0x20);
|
||||
}
|
||||
if (bottleIndex > 3) {
|
||||
return bottleIndex;
|
||||
}
|
||||
}
|
||||
gSave.stats.bottles[bottleIndex] = itemID;
|
||||
return bottleIndex;
|
||||
}
|
||||
|
||||
bool32 ItemIsSword(u32 item) {
|
||||
switch (item) {
|
||||
case ITEM_SMITH_SWORD:
|
||||
case ITEM_GREEN_SWORD:
|
||||
case ITEM_RED_SWORD:
|
||||
case ITEM_BLUE_SWORD:
|
||||
case ITEM_FOURSWORD:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
bool32 ItemIsShield(u32 id) {
|
||||
switch (id) {
|
||||
case 13:
|
||||
case 14:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool32 ItemIsBottle(u32 id) {
|
||||
switch (id) {
|
||||
case 28:
|
||||
case 29:
|
||||
case 30:
|
||||
case 31:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
u32 GetBottleContaining(u32 id) {
|
||||
if (id == gSave.stats.bottles[0]) {
|
||||
return 1;
|
||||
} else if (id == gSave.stats.bottles[1]) {
|
||||
return 2;
|
||||
} else if (id == gSave.stats.bottles[2]) {
|
||||
return 3;
|
||||
} else if (id == gSave.stats.bottles[3]) {
|
||||
return 4;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08054524(void) {
|
||||
u32 bVar1;
|
||||
|
||||
bVar1 = gArea.locationIndex;
|
||||
if (gArea.locationIndex == 0) {
|
||||
bVar1 = gRoomTransition.player_status.field_0x24[0xa];
|
||||
}
|
||||
if (bVar1 > 0x16) {
|
||||
bVar1 = 0;
|
||||
}
|
||||
|
||||
bVar1 = gUnk_080FE1C6[bVar1];
|
||||
MemCopy(&gAreaDroptables[bVar1], &gRoomVars.currentAreaDroptable, 0x20);
|
||||
}
|
||||
|
||||
void sub_08054564(void) {
|
||||
gRoomVars.field_0x2 = 1;
|
||||
}
|
||||
|
||||
void sub_08054570(void) {
|
||||
gRoomVars.field_0x2 = 0;
|
||||
}
|
||||
|
||||
extern void sub_08000F14(s16*, const s16*, const s16*, const s16*);
|
||||
extern u32 sub_08000F2C(s16*, const s16*, const s16*, const s16*);
|
||||
u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter);
|
||||
u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
|
||||
extern const u8 gUnk_080FE1B4[] /* = {
|
||||
ITEM_NONE, ITEM_RUPEE1, ITEM_RUPEE5, ITEM_RUPEE20, ITEM_HEART, ITEM_FAIRY,
|
||||
ITEM_BOMBS5, ITEM_ARROWS5, ITEM_SHELLS, ITEM_KINSTONE_GREEN, ITEM_KINSTONE_BLUE, ITEM_KINSTONE_RED,
|
||||
ITEM_ENEMY_BEETLE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE,
|
||||
}*/;
|
||||
|
||||
int r0, r1, rand, summOdds, item;
|
||||
u32 r3;
|
||||
const Droptable *ptr2, *ptr3, *ptr4;
|
||||
Droptable droptable;
|
||||
r3 = arg1;
|
||||
if (gRoomVars.field_0x2 != 1) {
|
||||
ptr2 = &gDroptableModifiers[DROPTABLE_NONE];
|
||||
ptr4 = NULL;
|
||||
switch (r3) {
|
||||
case 1 ... 12:
|
||||
ptr4 = &gEnemyDroptables[r3];
|
||||
break;
|
||||
#ifndef EU
|
||||
case 24:
|
||||
case 25:
|
||||
r0 = gRoomVars.unk2;
|
||||
ptr4 = &gUnk_0800191C[0];
|
||||
if (r0) {
|
||||
ptr4++;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case 16 ... 23:
|
||||
#ifdef EU
|
||||
case 24:
|
||||
#endif
|
||||
ptr2 = &gObjectDroptables[r3 - 16];
|
||||
case 15:
|
||||
ptr4 = &gRoomVars.currentAreaDroptable;
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (ptr4 != 0) {
|
||||
if ((r1 = gSave.stats.picolyteType) == 0) {
|
||||
// nop
|
||||
ptr3 = &gDroptableModifiers[DROPTABLE_NONE];
|
||||
} else {
|
||||
#ifdef EU
|
||||
ptr3 = &gEnemyDroptables[r1 + 9];
|
||||
#else
|
||||
ptr3 = &gEnemyDroptables[r1 + 6];
|
||||
#endif
|
||||
}
|
||||
// vector addition, s0 = ptr4 + ptr2 + ptr3
|
||||
sub_08000F14(droptable.a, ptr4->a, ptr2->a, ptr3->a);
|
||||
if (gSave.stats.health <= 8) {
|
||||
droptable.s.hearts += 5;
|
||||
}
|
||||
if (gSave.stats.bombCount == 0) {
|
||||
droptable.s.bombs += 3;
|
||||
}
|
||||
if (gSave.stats.arrowCount == 0) {
|
||||
droptable.s.arrows += 3;
|
||||
}
|
||||
if (gSave.stats.rupees <= 10) {
|
||||
droptable.s.rupee5 += 1;
|
||||
}
|
||||
ptr2 = &gDroptableModifiers[DROPTABLE_NONE];
|
||||
r0 = gSave.stats.hasAllFigurines;
|
||||
ptr3 = &gDroptableModifiers[DROPTABLE_NONE];
|
||||
// don't drop shells anymore
|
||||
if (r0 != 0) {
|
||||
ptr2 = &gDroptableModifiers[DROPTABLE_NO_SHELLS];
|
||||
}
|
||||
// don't drop kinstones anymore
|
||||
if (gSave.didAllFusions != 0) {
|
||||
ptr3 = &gDroptableModifiers[DROPTABLE_NO_KINSTONES];
|
||||
}
|
||||
// vector addition, s0 = s0 + ptr2 + ptr3
|
||||
// resulting values are clamped to be >= 0
|
||||
// returns sum over s0
|
||||
summOdds = sub_08000F2C(droptable.a, droptable.a, ptr2->a, ptr3->a);
|
||||
rand = Random();
|
||||
item = (rand >> 0x18);
|
||||
item &= 0xF;
|
||||
rand = rand % summOdds;
|
||||
{
|
||||
u32 r3;
|
||||
for (r3 = 0, r1 = 0; r3 < 0x10; r3++, item = (item + 1) & 0xF) {
|
||||
if ((r1 += droptable.a[item]) > rand) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
r1 = gUnk_080FE1B4[item];
|
||||
if (r1 != ITEM_NONE) {
|
||||
return CreateItemDrop(arg0, r1, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ITEM_NONE;
|
||||
}
|
||||
|
||||
u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) {
|
||||
u32 adjustedParam = itemParameter;
|
||||
Entity* itemEntity;
|
||||
|
||||
switch (itemID) {
|
||||
case ITEM_ENEMY_BEETLE:
|
||||
if (!GetInventoryValue(ITEM_SMITH_SWORD)) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
break;
|
||||
case ITEM_BOMBS5:
|
||||
if (!GetInventoryValue(ITEM_BOMBBAG)) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
break;
|
||||
case ITEM_ARROWS5:
|
||||
if (!GetInventoryValue(ITEM_BOW)) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
break;
|
||||
case ITEM_SHELLS: {
|
||||
if (!GetInventoryValue(ITEM_EARTH_ELEMENT)) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
if (itemParameter == 0) {
|
||||
adjustedParam = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ITEM_KINSTONE:
|
||||
case ITEM_KINSTONE_GREEN ... ITEM_KINSTONE_RED: {
|
||||
u32 rand;
|
||||
|
||||
if (GetInventoryValue(ITEM_KINSTONE_BAG) == 0) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
if (3 < gRoomVars.filler1[0]) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
|
||||
if (itemID != ITEM_KINSTONE) {
|
||||
adjustedParam = itemID - ITEM_KINSTONE_GREEN;
|
||||
rand = (Random() & 0x3f);
|
||||
adjustedParam = gUnk_080FE1DD[(rand + adjustedParam * 0x40)];
|
||||
if (adjustedParam == 0) {
|
||||
itemID = ITEM_NONE;
|
||||
} else {
|
||||
itemID = ITEM_KINSTONE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (itemID != ITEM_NONE) {
|
||||
if (itemID != ITEM_ENEMY_BEETLE) {
|
||||
itemEntity = CreateObject(GROUND_ITEM, itemID, adjustedParam);
|
||||
if (itemEntity != NULL) {
|
||||
if (arg0 == &gPlayerEntity) {
|
||||
itemEntity->actionDelay = 1;
|
||||
} else {
|
||||
itemEntity->actionDelay = 0;
|
||||
}
|
||||
if (arg0->kind == OBJECT) {
|
||||
if (arg0->id == 99) {
|
||||
arg0->child = itemEntity;
|
||||
} else if (arg0->id == 0x1e) {
|
||||
itemEntity->direction = arg0->animationState << 3 | 0x80;
|
||||
itemEntity->speed = 0xc0;
|
||||
itemEntity->zVelocity = Q_16_16(1.5);
|
||||
}
|
||||
}
|
||||
CopyPosition(arg0, itemEntity);
|
||||
}
|
||||
} else {
|
||||
itemEntity = CreateEnemy(BEETLE, 0);
|
||||
if (itemEntity != NULL) {
|
||||
itemEntity->x.HALF.HI = arg0->x.HALF.HI;
|
||||
itemEntity->y.HALF.HI = arg0->y.HALF.HI;
|
||||
itemEntity->collisionLayer = arg0->collisionLayer;
|
||||
UpdateSpriteForCollisionLayer(itemEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
return itemID;
|
||||
}
|
||||
|
||||
void Subtask_WorldEvent(void) {
|
||||
#if !(defined(DEMO_USA) || defined(DEMO_JP))
|
||||
gUnk_080FE2A0[gMenu.menuType]();
|
||||
#endif
|
||||
}
|
||||
+900
-24
@@ -6,24 +6,30 @@
|
||||
*/
|
||||
|
||||
#include "global.h"
|
||||
#include "asm.h"
|
||||
#include "sound.h"
|
||||
#include "screen.h"
|
||||
#include "entity.h"
|
||||
#include "player.h"
|
||||
#include "room.h"
|
||||
#include "main.h"
|
||||
#include "flags.h"
|
||||
#include "save.h"
|
||||
#include "common.h"
|
||||
#include "fileselect.h"
|
||||
#include "menu.h"
|
||||
#include "functions.h"
|
||||
#include "area.h"
|
||||
#include "message.h"
|
||||
#include "asm.h"
|
||||
#include "common.h"
|
||||
#include "droptables.h"
|
||||
#include "enemy.h"
|
||||
#include "entity.h"
|
||||
#include "fileselect.h"
|
||||
#include "flags.h"
|
||||
#include "functions.h"
|
||||
#include "game.h"
|
||||
#include "item.h"
|
||||
#include "itemMetaData.h"
|
||||
#include "main.h"
|
||||
#include "menu.h"
|
||||
#include "message.h"
|
||||
#include "object.h"
|
||||
#include "player.h"
|
||||
#include "room.h"
|
||||
#include "save.h"
|
||||
#include "screen.h"
|
||||
#include "sound.h"
|
||||
#include "subtask.h"
|
||||
#include "itemMetaData.h"
|
||||
#include "player.h"
|
||||
|
||||
// Game task
|
||||
|
||||
@@ -197,6 +203,68 @@ typedef struct {
|
||||
} CutsceneData;
|
||||
static const CutsceneData sCutsceneData[];
|
||||
|
||||
extern u8 gUnk_0200AF13;
|
||||
extern u8 gUnk_0200AF14;
|
||||
extern u8 gUnk_080FE1C6[];
|
||||
extern void (*const gUnk_080FE2AC[])(void);
|
||||
|
||||
/** @see Item */
|
||||
void ForceEquipItem(u32, u32);
|
||||
extern void SetInventoryValue(u32, u32);
|
||||
|
||||
extern u8 gUnk_080FE1DD[];
|
||||
|
||||
extern void (*const gUnk_080FE2A0[])(void);
|
||||
|
||||
extern void (*const gUnk_080FCBB4[])(void);
|
||||
|
||||
extern const EntityData gUnk_080FCB94[];
|
||||
|
||||
void sub_08052004(void);
|
||||
|
||||
extern void (*const gUnk_080FCCFC[])(void);
|
||||
|
||||
extern void (*const gUnk_080FCD38[])(void);
|
||||
|
||||
extern const EntityData gUnk_080FCC54[];
|
||||
|
||||
void sub_08051FF0(void);
|
||||
|
||||
extern void (*const gUnk_080FCD40[])(void);
|
||||
|
||||
extern const EntityData gUnk_080FCBC4[];
|
||||
void sub_08051F78(void);
|
||||
|
||||
extern const EntityData gUnk_080FCC14[];
|
||||
|
||||
extern void DeleteAllEntities(void);
|
||||
|
||||
extern void (*const gUnk_080FCDD4[])(void);
|
||||
|
||||
extern const EntityData gUnk_080FCD84[];
|
||||
|
||||
extern void (*const gUnk_080FCEB0[])(void);
|
||||
|
||||
extern const EntityData gUnk_080FCDE0[];
|
||||
|
||||
extern void (*const gUnk_080FCEEC[])(void);
|
||||
|
||||
extern const EntityData gUnk_080FCEBC[];
|
||||
|
||||
extern void (*const gUnk_080FCEF8[])(void);
|
||||
|
||||
extern void (*const gUnk_080FCFA4[])(void);
|
||||
|
||||
extern void* GetRoomProperty(u32, u32, u32);
|
||||
|
||||
extern void (*const gUnk_080FD108[])(void);
|
||||
|
||||
extern const EntityData* gUnk_080FCFB8[];
|
||||
|
||||
extern void (*const gUnk_080FD138[])(void);
|
||||
|
||||
extern const u16 gUnk_080FD964[];
|
||||
|
||||
void GameTask(void) {
|
||||
static GameState* const sStates[] = {
|
||||
GameTask_Transition,
|
||||
@@ -586,7 +654,7 @@ static void AuxCutscene_Exit(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08051F78(u32 a1, u32 a2, u32 a3, u32 a4) {
|
||||
void sub_08051F78(void) {
|
||||
u32 idx = gUnk_02032EC0.field_0x3;
|
||||
const CutsceneData* p = &sCutsceneData[idx];
|
||||
sub_08051F9C(p->area, p->room, p->x, p->y);
|
||||
@@ -931,24 +999,24 @@ static void InitializePlayer(void) {
|
||||
pl->z.HALF.HI = -0xc0;
|
||||
break;
|
||||
case PL_SPAWN_STEP_IN:
|
||||
gPlayerState.field_0x34[4] = 16;
|
||||
gPlayerState.field_0x38 = 16;
|
||||
pl->direction = Direction8FromAnimationState(gRoomTransition.player_status.start_anim);
|
||||
case PL_SPAWN_WALKING:
|
||||
pl->speed = 224;
|
||||
break;
|
||||
case PL_SPAWN_STAIRS_ASCEND:
|
||||
case PL_SPAWN_STAIRS_DESCEND:
|
||||
gPlayerState.field_0x34[4] = 1;
|
||||
gPlayerState.field_0x34[5] = gRoomTransition.player_status.spawn_type;
|
||||
gPlayerState.field_0x38 = 1;
|
||||
gPlayerState.field_0x39 = gRoomTransition.player_status.spawn_type;
|
||||
break;
|
||||
case PL_SPAWN_PARACHUTE_FORWARD:
|
||||
gPlayerState.field_0x34[4] = 1;
|
||||
gPlayerState.field_0x38 = 1;
|
||||
break;
|
||||
case PL_SPAWN_PARACHUTE_UP:
|
||||
gPlayerState.field_0x34[4] = 3;
|
||||
gPlayerState.field_0x38 = 3;
|
||||
break;
|
||||
case PL_SPAWN_FAST_TRAVEL:
|
||||
gPlayerState.field_0x34[4] = 4;
|
||||
gPlayerState.field_0x38 = 4;
|
||||
}
|
||||
|
||||
pl->kind = PLAYER;
|
||||
@@ -1716,11 +1784,11 @@ static void ResetTmpFlags(void) {
|
||||
|
||||
if (!CheckGlobalFlag(WATERBEAN_PUT))
|
||||
ClearGlobalFlag(WATERBEAN_OUT);
|
||||
if (!GetInventoryValue(0x40u))
|
||||
if (!GetInventoryValue(ITEM_EARTH_ELEMENT))
|
||||
ClearGlobalFlag(LV1_CLEAR);
|
||||
if (!GetInventoryValue(0x41u))
|
||||
if (!GetInventoryValue(ITEM_FIRE_ELEMENT))
|
||||
ClearGlobalFlag(LV2_CLEAR);
|
||||
if (!GetInventoryValue(0x42u))
|
||||
if (!GetInventoryValue(ITEM_WATER_ELEMENT))
|
||||
ClearGlobalFlag(LV4_CLEAR);
|
||||
}
|
||||
|
||||
@@ -1730,3 +1798,811 @@ static void ClearFlagArray(const u16* p) {
|
||||
for (i = p; i[0] != 0xFFFF; i += 2)
|
||||
ClearLocalFlagByBank(i[0], i[1]);
|
||||
}
|
||||
|
||||
void CutsceneMain_Init(void) {
|
||||
gUnk_080FCBB4[gMenu.overlayType]();
|
||||
}
|
||||
|
||||
void sub_080535AC(void) {
|
||||
gMenu.overlayType = 1;
|
||||
gMenu.transitionTimer = 0x78;
|
||||
gUnk_02032EC0.field_0x6 = 1;
|
||||
gUpdateVisibleTiles = 1;
|
||||
gScreen.lcd.displayControl &= 0xfeff;
|
||||
LoadRoomEntityList((EntityData*)gUnk_080FCB94);
|
||||
SetFade(6, 8);
|
||||
}
|
||||
|
||||
void sub_080535F4(void) {
|
||||
if (gFadeControl.active == 0) {
|
||||
ResetSystemPriority();
|
||||
gMenu.overlayType = 2;
|
||||
}
|
||||
}
|
||||
|
||||
void nullsub_481(void) {
|
||||
}
|
||||
|
||||
void sub_08053618(void) {
|
||||
gMenu.transitionTimer--;
|
||||
if (gMenu.transitionTimer == 0) {
|
||||
sub_08052004();
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053634(void) {
|
||||
gUnk_02032EC0.nextToLoad = 3;
|
||||
MessageInitialize();
|
||||
}
|
||||
|
||||
void sub_08053648(void) {
|
||||
Entity* obj = CreateObject(SMOKE, 0, 0);
|
||||
if (obj != NULL) {
|
||||
obj->x.HALF.HI = gRoomControls.origin_x + 0x2d0;
|
||||
obj->y.HALF.HI = gRoomControls.origin_y + 0x148;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0805367C(void) {
|
||||
gMenu.overlayType++;
|
||||
}
|
||||
|
||||
void sub_0805368C(void) {
|
||||
Entity* entity = FindEntityByID(OBJECT, HOUSE_DOOR_INT, 6);
|
||||
if (entity != NULL) {
|
||||
DeleteEntity(entity);
|
||||
SoundReq(SFX_F0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080536A8(void) {
|
||||
sub_080A71C4(5, 5, 4, 0x10);
|
||||
}
|
||||
|
||||
void sub_080536B8(void) {
|
||||
sub_080A71C4(5, 3, 4, 4);
|
||||
SetFade(5, 0x100);
|
||||
}
|
||||
|
||||
void sub_080536D4(void) {
|
||||
gUnk_080FCCFC[gMenu.overlayType]();
|
||||
}
|
||||
|
||||
void sub_080536F0(void) {
|
||||
gUnk_080FCD38[gMenu.overlayType]();
|
||||
}
|
||||
|
||||
void sub_0805370C(void) {
|
||||
gMenu.overlayType++;
|
||||
gUpdateVisibleTiles = 1;
|
||||
sub_08051FF0();
|
||||
LoadRoomEntityList((EntityData*)gUnk_080FCC54);
|
||||
SetFade(4, 0x10);
|
||||
}
|
||||
|
||||
void sub_0805373C(void) {
|
||||
gUnk_080FCD40[gMenu.overlayType]();
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08053758.inc", void sub_08053758())
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08053800.inc", void sub_08053800())
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08053894.inc", void sub_08053894())
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08053904.inc", void sub_08053904())
|
||||
|
||||
void sub_08053974(void) {
|
||||
if (gFadeControl.active == 0) {
|
||||
InitFade();
|
||||
DispReset(1);
|
||||
SetBGDefaults();
|
||||
sub_08051F78();
|
||||
LoadRoomEntityList((EntityData*)&gUnk_080FCBC4);
|
||||
SetFade(5, 0x100);
|
||||
gMenu.overlayType++;
|
||||
}
|
||||
}
|
||||
|
||||
void nullsub_482(void) {
|
||||
}
|
||||
|
||||
void sub_080539BC(void) {
|
||||
SetBGDefaults();
|
||||
DeleteAllEntities();
|
||||
sub_08051F9C(0x22, 0x11, 0, 0);
|
||||
sub_0804B0B0(0x22, 0x11);
|
||||
LoadRoomEntityList((EntityData*)&gUnk_080FCC14);
|
||||
gMenu.overlayType++;
|
||||
}
|
||||
|
||||
void sub_080539F4(void) {
|
||||
if (gFadeControl.active == 0) {
|
||||
DispReset(1);
|
||||
gMenu.overlayType++;
|
||||
gMenu.transitionTimer = 0x3c;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053A1C(void) {
|
||||
gMenu.transitionTimer--;
|
||||
if (gMenu.transitionTimer == 0) {
|
||||
gMenu.overlayType++;
|
||||
gMenu.transitionTimer = 8;
|
||||
MessageFromTarget(0xf07);
|
||||
gMessage.textWindowPosX = 1;
|
||||
gMessage.textWindowPosY = 8;
|
||||
SetFade(4, 8);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053A5C(void) {
|
||||
if (((gMessage.doTextBox & 0x7f) == 0) && --gMenu.transitionTimer == 0) {
|
||||
gMenu.overlayType++;
|
||||
SetFade(5, 8);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053A90(void) {
|
||||
if (gFadeControl.active == 0) {
|
||||
gUnk_02032EC0.nextToLoad = 3;
|
||||
SetBGDefaults();
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053AB0(void) {
|
||||
gUnk_080FCDD4[gMenu.overlayType]();
|
||||
}
|
||||
|
||||
void sub_08053ACC(void) {
|
||||
gMenu.overlayType++;
|
||||
gUpdateVisibleTiles = 1;
|
||||
sub_08051FF0();
|
||||
LoadRoomEntityList((EntityData*)&gUnk_080FCD84);
|
||||
SetFade(5, 0x100);
|
||||
}
|
||||
|
||||
void sub_08053B00(void) {
|
||||
gMenu.overlayType++;
|
||||
}
|
||||
|
||||
void sub_08053B10(void) {
|
||||
if (CheckRoomFlag(1)) {
|
||||
gMenu.menuType++;
|
||||
DispReset(1);
|
||||
SetFade(4, 0x100);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053B3C(void) {
|
||||
sub_080A71C4(5, 4, 5, 0x100);
|
||||
SetFade(5, 0x100);
|
||||
}
|
||||
|
||||
void sub_08053B58(void) {
|
||||
gUnk_080FCEB0[gMenu.overlayType]();
|
||||
}
|
||||
|
||||
void sub_08053B74(void) {
|
||||
gMenu.overlayType++;
|
||||
gUpdateVisibleTiles = 1;
|
||||
LoadRoomEntityList((EntityData*)&gUnk_080FCDE0);
|
||||
ResetSystemPriority();
|
||||
ResetEntityPriority();
|
||||
SetFade(5, 0x100);
|
||||
}
|
||||
|
||||
void sub_08053BAC(void) {
|
||||
gMenu.overlayType++;
|
||||
}
|
||||
|
||||
void sub_08053BBC(void) {
|
||||
if (CheckRoomFlag(0)) {
|
||||
gMenu.menuType++;
|
||||
DispReset(1);
|
||||
SetFade(4, 0x100);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053BE8(void) {
|
||||
sub_080A71C4(5, 2, 5, 0x100);
|
||||
SetFade(5, 0x100);
|
||||
}
|
||||
|
||||
void sub_08053C04(void) {
|
||||
gUnk_080FCEEC[gMenu.overlayType]();
|
||||
}
|
||||
|
||||
void sub_08053C20(void) {
|
||||
gMenu.overlayType = 1;
|
||||
gMenu.transitionTimer = 0x78;
|
||||
gUpdateVisibleTiles = 1;
|
||||
sub_08051FF0();
|
||||
sub_0805B4D0(4);
|
||||
LoadRoomEntityList((EntityData*)&gUnk_080FCEBC);
|
||||
SetFade(4, 0x10);
|
||||
SoundReq(BGM_FIGHT_THEME2);
|
||||
}
|
||||
|
||||
void nullsub_483(void) {
|
||||
}
|
||||
|
||||
void sub_08053C60(void) {
|
||||
SetFade(5, 2);
|
||||
SoundReq(SFX_SUMMON);
|
||||
SoundReq(SONG_STOP_BGM);
|
||||
SetTask(3);
|
||||
}
|
||||
|
||||
void sub_08053C84(void) {
|
||||
gMenu.overlayType = 2;
|
||||
}
|
||||
|
||||
void CutsceneMain_Exit(void) {
|
||||
gUnk_080FCEF8[gMenu.field_0x3]();
|
||||
}
|
||||
|
||||
void sub_08053CAC(void) {
|
||||
gUnk_080FCFA4[gMenu.overlayType]();
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08053CC8.inc", void sub_08053CC8())
|
||||
|
||||
void sub_08053D34(void) {
|
||||
if (gMenu.field_0xa != 0) {
|
||||
gMenu.field_0xa = 0;
|
||||
if (CheckLocalFlagByBank(0x680, 0x3d)) {
|
||||
SetTileType(0x74, 0xc4, 1);
|
||||
}
|
||||
if (CheckLocalFlagByBank(0x680, 0x3e)) {
|
||||
SetTileType(0x74, 0xcc, 1);
|
||||
}
|
||||
}
|
||||
if (gFadeControl.active == 0) {
|
||||
gMenu.transitionTimer = 0x78;
|
||||
gMenu.overlayType++;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053D90(void) {
|
||||
gMenu.transitionTimer--;
|
||||
if (gMenu.transitionTimer == 0) {
|
||||
gMenu.overlayType++;
|
||||
SetFadeInverted(0x10);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053DB4(void) {
|
||||
if (gFadeControl.active == 0) {
|
||||
u8* ptr = gMenu.field_0xc;
|
||||
sub_08052FF4(gMenu.field_0xc[4], gMenu.field_0xc[5]);
|
||||
sub_0807C740();
|
||||
gUpdateVisibleTiles = 1;
|
||||
gRoomControls.scroll_x = (s8)ptr[6] + gRoomControls.scroll_x;
|
||||
gRoomControls.scroll_y = (s8)ptr[7] + gRoomControls.scroll_y;
|
||||
LoadRoomEntityList(*(EntityData**)ptr);
|
||||
LoadRoomEntityList((EntityData*)GetRoomProperty(ptr[4], ptr[5], 1));
|
||||
LoadRoomEntityList((EntityData*)GetRoomProperty(ptr[4], ptr[5], 2));
|
||||
gMenu.transitionTimer = 0x78;
|
||||
gMenu.overlayType++;
|
||||
SetFadeInverted(0x10);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053E30(void) {
|
||||
if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) {
|
||||
gMenu.menuType++;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053E58(void) {
|
||||
gUnk_080FD108[gMenu.overlayType]();
|
||||
}
|
||||
|
||||
void sub_08053E74(void) {
|
||||
const EntityData** ptr = gUnk_080FCFB8;
|
||||
gMenu.field_0xc = (u8*)ptr;
|
||||
LoadRoomEntityList((EntityData*)ptr[0]);
|
||||
gMenu.transitionTimer = 0x78;
|
||||
gMenu.field_0xa = 0x3c;
|
||||
gMenu.overlayType++;
|
||||
gScreen.lcd.displayControl &= 0xfeff;
|
||||
gUpdateVisibleTiles = 1;
|
||||
SetMinPriority(1);
|
||||
SetFade(4, 8);
|
||||
}
|
||||
|
||||
void sub_08053EC4(void) {
|
||||
EntityData** data;
|
||||
if ((gFadeControl.active == 0) && (--gMenu.field_0xa == 0)) {
|
||||
data = (EntityData**)(gMenu.field_0xc + 4);
|
||||
gMenu.field_0xc += 0xc;
|
||||
LoadRoomEntityList(*data);
|
||||
gMenu.overlayType++;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053EFC(void) {
|
||||
if (--gMenu.transitionTimer == 0) {
|
||||
gMenu.overlayType++;
|
||||
SetFadeInverted(8);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053F20(void) {
|
||||
u8* ptr;
|
||||
if (gFadeControl.active == 0) {
|
||||
DeleteAllEntities();
|
||||
ptr = gMenu.field_0xc;
|
||||
sub_08052FF4(gMenu.field_0xc[8], gMenu.field_0xc[9]);
|
||||
sub_0807C740();
|
||||
gUpdateVisibleTiles = 1;
|
||||
gRoomControls.scroll_x = (s8)ptr[10] + gRoomControls.scroll_x;
|
||||
gRoomControls.scroll_y = (s8)ptr[0xb] + gRoomControls.scroll_y;
|
||||
LoadRoomEntityList(*(EntityData**)ptr);
|
||||
gMenu.transitionTimer = 0x78;
|
||||
gMenu.field_0xa = 0x3c;
|
||||
gMenu.overlayType++;
|
||||
SetFadeInverted(8);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08053F88(void) {
|
||||
if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) {
|
||||
gMenu.menuType++;
|
||||
ResetEntityPriority();
|
||||
}
|
||||
}
|
||||
|
||||
void CutsceneMain_Update(void) {
|
||||
gUnk_080FD138[gMenu.field_0x3]();
|
||||
}
|
||||
|
||||
u32 GetSaleItemConfirmMessageID(u32 item) {
|
||||
const u16* ptr = &gUnk_080FD964[item * 4];
|
||||
return ptr[2];
|
||||
}
|
||||
|
||||
s32 GetItemPrice(u32 item) {
|
||||
const u16* ptr = &gUnk_080FD964[item * 4];
|
||||
return ptr[0];
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/GiveItem.inc", void GiveItem(u32 a, u32 b))
|
||||
|
||||
// TODO Adapt ItemMetaData struct
|
||||
void sub_08054288(s32 param_1) {
|
||||
const ItemMetaData* ptr1 = gItemMetaData;
|
||||
u16* ptr = (u16*)&((ptr1)[param_1]);
|
||||
MessageFromTarget(ptr[3]);
|
||||
}
|
||||
|
||||
u32 sub_0805429C(s32 param_1) {
|
||||
const ItemMetaData* ptr1 = gItemMetaData;
|
||||
u16* ptr = (u16*)&((ptr1)[param_1]);
|
||||
return ptr[2];
|
||||
}
|
||||
|
||||
u32 sub_080542AC(u32 param_1) {
|
||||
const ItemMetaData* ptr1 = gItemMetaData;
|
||||
u8* ptr = (u8*)&((ptr1)[param_1]);
|
||||
return ptr[3] & 1;
|
||||
}
|
||||
|
||||
void ModShells(s32 shells) {
|
||||
if (shells == 0) {
|
||||
shells = 1;
|
||||
}
|
||||
shells += gSave.stats.shells;
|
||||
if (shells < 0) {
|
||||
shells = 0;
|
||||
} else if (999 < shells) {
|
||||
shells = 999;
|
||||
}
|
||||
gSave.stats.shells = shells;
|
||||
}
|
||||
|
||||
void ModBombs(s32 bombs) {
|
||||
s32 bombCount = bombs;
|
||||
s32 bagSize;
|
||||
bombCount += gSave.stats.bombCount;
|
||||
bagSize = gBombBagSizes[gSave.stats.bombBagType];
|
||||
if (bombCount < 0) {
|
||||
bombCount = 0;
|
||||
} else if (bagSize < bombCount) {
|
||||
bombCount = bagSize;
|
||||
}
|
||||
gSave.stats.bombCount = bombCount;
|
||||
}
|
||||
|
||||
void ModArrows(s32 arrows) {
|
||||
s32 quiverSize;
|
||||
s32 arrowCount = arrows;
|
||||
arrowCount += gSave.stats.arrowCount;
|
||||
quiverSize = gQuiverSizes[gSave.stats.quiverType];
|
||||
if (arrowCount < 0) {
|
||||
arrowCount = 0;
|
||||
} else if (quiverSize < arrowCount) {
|
||||
arrowCount = quiverSize;
|
||||
}
|
||||
gSave.stats.arrowCount = arrowCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the slot the item is equipped in.
|
||||
*
|
||||
* 0: A
|
||||
* 1: B
|
||||
* 2: Not equipped
|
||||
*/
|
||||
u32 IsItemEquipped(u32 itemID) {
|
||||
u32 itemSlot;
|
||||
|
||||
if (itemID == gSave.stats.itemButtons[SLOT_A])
|
||||
itemSlot = 0;
|
||||
else if (itemID == gSave.stats.itemButtons[SLOT_B])
|
||||
itemSlot = 1;
|
||||
else
|
||||
itemSlot = 2;
|
||||
return itemSlot;
|
||||
}
|
||||
|
||||
void PutItemOnSlot(u32 itemID) {
|
||||
u32 itemSlot;
|
||||
u32 itemID2 = itemID;
|
||||
if (itemID2 < 0x47) {
|
||||
SetInventoryValue(0, 1);
|
||||
}
|
||||
if (itemID2 - 1 < 0x1f) {
|
||||
itemSlot = 2;
|
||||
if (gSave.stats.itemButtons[SLOT_A] == 0) {
|
||||
itemSlot = 0;
|
||||
} else if (gSave.stats.itemButtons[SLOT_B] == 0) {
|
||||
itemSlot = 1;
|
||||
}
|
||||
if (itemSlot == 2) {
|
||||
u32 temp = gItemMetaData[itemID2].menuSlot;
|
||||
if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_A]].menuSlot) {
|
||||
itemSlot = 0;
|
||||
} else {
|
||||
if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_B]].menuSlot) {
|
||||
itemSlot = 1;
|
||||
}
|
||||
}
|
||||
if (itemSlot == 2) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
ForceEquipItem(itemID2, itemSlot);
|
||||
}
|
||||
}
|
||||
|
||||
void ForceEquipItem(u32 itemID, u32 itemSlot) {
|
||||
u32 otherItem;
|
||||
u32 otherItemIndex;
|
||||
u32 replacedItem;
|
||||
|
||||
if ((itemID - 1 < 0x1f) && (itemSlot < 2)) {
|
||||
otherItemIndex = itemSlot == 0;
|
||||
replacedItem = gSave.stats.itemButtons[itemSlot];
|
||||
otherItem = gSave.stats.itemButtons[otherItemIndex];
|
||||
if (gItemMetaData[otherItem].menuSlot == gItemMetaData[itemID].menuSlot) {
|
||||
otherItem = replacedItem;
|
||||
}
|
||||
gSave.stats.itemButtons[itemSlot] = itemID;
|
||||
gSave.stats.itemButtons[otherItemIndex] = otherItem;
|
||||
gUnk_0200AF00.filler0[0x13] = 0x7f;
|
||||
gUnk_0200AF00.filler0[0x14] = 0x7f;
|
||||
}
|
||||
}
|
||||
|
||||
u32 SetBottleContents(u32 itemID, u32 bottleIndex) {
|
||||
if (bottleIndex > 3) {
|
||||
bottleIndex = 0;
|
||||
if (gSave.stats.bottles[0] != 0x20) {
|
||||
do {
|
||||
bottleIndex++;
|
||||
if (bottleIndex > 3) {
|
||||
return bottleIndex;
|
||||
}
|
||||
} while (gSave.stats.bottles[bottleIndex] != 0x20);
|
||||
}
|
||||
if (bottleIndex > 3) {
|
||||
return bottleIndex;
|
||||
}
|
||||
}
|
||||
gSave.stats.bottles[bottleIndex] = itemID;
|
||||
return bottleIndex;
|
||||
}
|
||||
|
||||
bool32 ItemIsSword(u32 item) {
|
||||
switch (item) {
|
||||
case ITEM_SMITH_SWORD:
|
||||
case ITEM_GREEN_SWORD:
|
||||
case ITEM_RED_SWORD:
|
||||
case ITEM_BLUE_SWORD:
|
||||
case ITEM_FOURSWORD:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
bool32 ItemIsShield(u32 id) {
|
||||
switch (id) {
|
||||
case 13:
|
||||
case 14:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool32 ItemIsBottle(u32 id) {
|
||||
switch (id) {
|
||||
case 28:
|
||||
case 29:
|
||||
case 30:
|
||||
case 31:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
u32 GetBottleContaining(u32 id) {
|
||||
if (id == gSave.stats.bottles[0]) {
|
||||
return 1;
|
||||
} else if (id == gSave.stats.bottles[1]) {
|
||||
return 2;
|
||||
} else if (id == gSave.stats.bottles[2]) {
|
||||
return 3;
|
||||
} else if (id == gSave.stats.bottles[3]) {
|
||||
return 4;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08054524(void) {
|
||||
u32 bVar1;
|
||||
|
||||
bVar1 = gArea.locationIndex;
|
||||
if (gArea.locationIndex == 0) {
|
||||
bVar1 = gRoomTransition.player_status.field_0x24[0xa];
|
||||
}
|
||||
if (bVar1 > 0x16) {
|
||||
bVar1 = 0;
|
||||
}
|
||||
|
||||
bVar1 = gUnk_080FE1C6[bVar1];
|
||||
MemCopy(&gAreaDroptables[bVar1], &gRoomVars.currentAreaDroptable, 0x20);
|
||||
}
|
||||
|
||||
void sub_08054564(void) {
|
||||
gRoomVars.field_0x2 = 1;
|
||||
}
|
||||
|
||||
void sub_08054570(void) {
|
||||
gRoomVars.field_0x2 = 0;
|
||||
}
|
||||
|
||||
extern void sub_08000F14(s16*, const s16*, const s16*, const s16*);
|
||||
extern u32 sub_08000F2C(s16*, const s16*, const s16*, const s16*);
|
||||
u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter);
|
||||
u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
|
||||
extern const u8 gUnk_080FE1B4[] /* = {
|
||||
ITEM_NONE, ITEM_RUPEE1, ITEM_RUPEE5, ITEM_RUPEE20, ITEM_HEART, ITEM_FAIRY,
|
||||
ITEM_BOMBS5, ITEM_ARROWS5, ITEM_SHELLS, ITEM_KINSTONE_GREEN, ITEM_KINSTONE_BLUE, ITEM_KINSTONE_RED,
|
||||
ITEM_ENEMY_BEETLE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE,
|
||||
}*/;
|
||||
|
||||
int r0, r1, rand, summOdds, item;
|
||||
u32 r3;
|
||||
const Droptable *ptr2, *ptr3, *ptr4;
|
||||
Droptable droptable;
|
||||
r3 = arg1;
|
||||
if (gRoomVars.field_0x2 != 1) {
|
||||
ptr2 = &gDroptableModifiers[DROPTABLE_NONE];
|
||||
ptr4 = NULL;
|
||||
switch (r3) {
|
||||
case 1 ... 12:
|
||||
ptr4 = &gEnemyDroptables[r3];
|
||||
break;
|
||||
#ifndef EU
|
||||
case 24:
|
||||
case 25:
|
||||
r0 = gRoomVars.unk2;
|
||||
ptr4 = &gUnk_0800191C[0];
|
||||
if (r0) {
|
||||
ptr4++;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case 16 ... 23:
|
||||
#ifdef EU
|
||||
case 24:
|
||||
#endif
|
||||
ptr2 = &gObjectDroptables[r3 - 16];
|
||||
case 15:
|
||||
ptr4 = &gRoomVars.currentAreaDroptable;
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (ptr4 != 0) {
|
||||
if ((r1 = gSave.stats.picolyteType) == 0) {
|
||||
// nop
|
||||
ptr3 = &gDroptableModifiers[DROPTABLE_NONE];
|
||||
} else {
|
||||
#ifdef EU
|
||||
ptr3 = &gEnemyDroptables[r1 + 9];
|
||||
#else
|
||||
ptr3 = &gEnemyDroptables[r1 + 6];
|
||||
#endif
|
||||
}
|
||||
// vector addition, s0 = ptr4 + ptr2 + ptr3
|
||||
sub_08000F14(droptable.a, ptr4->a, ptr2->a, ptr3->a);
|
||||
if (gSave.stats.health <= 8) {
|
||||
droptable.s.hearts += 5;
|
||||
}
|
||||
if (gSave.stats.bombCount == 0) {
|
||||
droptable.s.bombs += 3;
|
||||
}
|
||||
if (gSave.stats.arrowCount == 0) {
|
||||
droptable.s.arrows += 3;
|
||||
}
|
||||
if (gSave.stats.rupees <= 10) {
|
||||
droptable.s.rupee5 += 1;
|
||||
}
|
||||
ptr2 = &gDroptableModifiers[DROPTABLE_NONE];
|
||||
r0 = gSave.stats.hasAllFigurines;
|
||||
ptr3 = &gDroptableModifiers[DROPTABLE_NONE];
|
||||
// don't drop shells anymore
|
||||
if (r0 != 0) {
|
||||
ptr2 = &gDroptableModifiers[DROPTABLE_NO_SHELLS];
|
||||
}
|
||||
// don't drop kinstones anymore
|
||||
if (gSave.didAllFusions != 0) {
|
||||
ptr3 = &gDroptableModifiers[DROPTABLE_NO_KINSTONES];
|
||||
}
|
||||
// vector addition, s0 = s0 + ptr2 + ptr3
|
||||
// resulting values are clamped to be >= 0
|
||||
// returns sum over s0
|
||||
summOdds = sub_08000F2C(droptable.a, droptable.a, ptr2->a, ptr3->a);
|
||||
rand = Random();
|
||||
item = (rand >> 0x18);
|
||||
item &= 0xF;
|
||||
rand = rand % summOdds;
|
||||
{
|
||||
u32 r3;
|
||||
for (r3 = 0, r1 = 0; r3 < 0x10; r3++, item = (item + 1) & 0xF) {
|
||||
if ((r1 += droptable.a[item]) > rand) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
r1 = gUnk_080FE1B4[item];
|
||||
if (r1 != ITEM_NONE) {
|
||||
return CreateItemDrop(arg0, r1, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ITEM_NONE;
|
||||
}
|
||||
|
||||
u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) {
|
||||
u32 adjustedParam = itemParameter;
|
||||
Entity* itemEntity;
|
||||
|
||||
switch (itemID) {
|
||||
case ITEM_ENEMY_BEETLE:
|
||||
if (!GetInventoryValue(ITEM_SMITH_SWORD)) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
break;
|
||||
case ITEM_BOMBS5:
|
||||
if (!GetInventoryValue(ITEM_BOMBBAG)) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
break;
|
||||
case ITEM_ARROWS5:
|
||||
if (!GetInventoryValue(ITEM_BOW)) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
break;
|
||||
case ITEM_SHELLS: {
|
||||
if (!GetInventoryValue(ITEM_EARTH_ELEMENT)) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
if (itemParameter == 0) {
|
||||
adjustedParam = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ITEM_KINSTONE:
|
||||
case ITEM_KINSTONE_GREEN ... ITEM_KINSTONE_RED: {
|
||||
u32 rand;
|
||||
|
||||
if (GetInventoryValue(ITEM_KINSTONE_BAG) == 0) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
if (3 < gRoomVars.filler1[0]) {
|
||||
return ITEM_NONE;
|
||||
}
|
||||
|
||||
if (itemID != ITEM_KINSTONE) {
|
||||
adjustedParam = itemID - ITEM_KINSTONE_GREEN;
|
||||
rand = (Random() & 0x3f);
|
||||
adjustedParam = gUnk_080FE1DD[(rand + adjustedParam * 0x40)];
|
||||
if (adjustedParam == 0) {
|
||||
itemID = ITEM_NONE;
|
||||
} else {
|
||||
itemID = ITEM_KINSTONE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (itemID != ITEM_NONE) {
|
||||
if (itemID != ITEM_ENEMY_BEETLE) {
|
||||
itemEntity = CreateObject(GROUND_ITEM, itemID, adjustedParam);
|
||||
if (itemEntity != NULL) {
|
||||
if (arg0 == &gPlayerEntity) {
|
||||
itemEntity->actionDelay = 1;
|
||||
} else {
|
||||
itemEntity->actionDelay = 0;
|
||||
}
|
||||
if (arg0->kind == OBJECT) {
|
||||
if (arg0->id == 99) {
|
||||
arg0->child = itemEntity;
|
||||
} else if (arg0->id == 0x1e) {
|
||||
itemEntity->direction = arg0->animationState << 3 | 0x80;
|
||||
itemEntity->speed = 0xc0;
|
||||
itemEntity->zVelocity = Q_16_16(1.5);
|
||||
}
|
||||
}
|
||||
CopyPosition(arg0, itemEntity);
|
||||
}
|
||||
} else {
|
||||
itemEntity = CreateEnemy(BEETLE, 0);
|
||||
if (itemEntity != NULL) {
|
||||
itemEntity->x.HALF.HI = arg0->x.HALF.HI;
|
||||
itemEntity->y.HALF.HI = arg0->y.HALF.HI;
|
||||
itemEntity->collisionLayer = arg0->collisionLayer;
|
||||
UpdateSpriteForCollisionLayer(itemEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
return itemID;
|
||||
}
|
||||
|
||||
void Subtask_WorldEvent(void) {
|
||||
#if !(defined(DEMO_USA) || defined(DEMO_JP))
|
||||
gUnk_080FE2A0[gMenu.menuType]();
|
||||
#endif
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_0805488C.inc", void sub_0805488C())
|
||||
|
||||
void sub_080548E8(void) {
|
||||
gUnk_080FE2AC[gMenu.field_0x0]();
|
||||
FlushSprites();
|
||||
UpdateEntities();
|
||||
DrawEntities();
|
||||
CopyOAM();
|
||||
UpdateScroll();
|
||||
UpdateBgAnim();
|
||||
UpdateScrollVram();
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08054920.inc", void sub_08054920())
|
||||
|
||||
void sub_08054968(void) {
|
||||
gMenu.menuType = 2;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08054974.inc", void sub_08054974())
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/sub_08054A14.inc", void sub_08054A14())
|
||||
|
||||
@@ -40,7 +40,7 @@ typedef struct {
|
||||
#endif
|
||||
} FigurineDeviceEntity;
|
||||
|
||||
extern void sub_080542C0(s32);
|
||||
extern void ModShells(s32);
|
||||
extern u8 gUnk_020227F0;
|
||||
typedef struct {
|
||||
u32 unk_0;
|
||||
|
||||
Reference in New Issue
Block a user