Decompile BossDoor

This commit is contained in:
octorock 2022-02-16 17:41:35 +01:00
parent a448d22298
commit 0aebbae239
27 changed files with 261 additions and 787 deletions

View File

@ -1,621 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start BossDoor
BossDoor: @ 0x0808C1E4
push {lr}
ldr r2, _0808C1F8 @ =gUnk_081214D8
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_0808C1F8: .4byte gUnk_081214D8
thumb_func_start sub_0808C1FC
sub_0808C1FC: @ 0x0808C1FC
push {r4, r5, r6, lr}
adds r4, r0, #0
adds r2, r4, #0
adds r2, #0x84
ldrh r1, [r2]
ldr r0, _0808C2B0 @ =0x0000FFFF
cmp r1, r0
beq _0808C21A
adds r0, r1, #0
bl CheckFlags
cmp r0, #0
beq _0808C21A
bl DeleteThisEntity
_0808C21A:
adds r1, r4, #0
adds r1, #0x86
ldrh r0, [r1]
cmp r0, #0
beq _0808C230
bl CheckFlags
cmp r0, #0
beq _0808C230
bl DeleteThisEntity
_0808C230:
ldrb r0, [r4, #0xa]
lsrs r0, r0, #2
strb r0, [r4, #0xb]
movs r0, #0xc0
lsls r0, r0, #2
strh r0, [r4, #0x24]
ldrh r1, [r4, #0x2e]
adds r0, r4, #0
adds r0, #0x70
strh r1, [r0]
ldrh r0, [r4, #0x32]
adds r1, r4, #0
adds r1, #0x72
strh r0, [r1]
ldr r0, _0808C2B4 @ =gHitbox_3
str r0, [r4, #0x48]
adds r2, r4, #0
adds r2, #0x29
ldrb r1, [r2]
movs r0, #8
rsbs r0, r0, #0
ands r0, r1
movs r1, #5
orrs r0, r1
strb r0, [r2]
ldrb r1, [r4, #0xa]
movs r0, #3
ands r0, r1
adds r5, r4, #0
adds r5, #0x76
strh r0, [r5]
movs r0, #0x2e
ldrsh r1, [r4, r0]
ldr r2, _0808C2B8 @ =gRoomControls
ldrh r0, [r2, #6]
subs r1, r1, r0
asrs r1, r1, #4
movs r3, #0x3f
ands r1, r3
movs r6, #0x32
ldrsh r0, [r4, r6]
ldrh r2, [r2, #8]
subs r0, r0, r2
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r1, r0
adds r0, r4, #0
adds r0, #0x74
strh r1, [r0]
ldrb r0, [r4, #0xa]
movs r1, #0x1f
ands r1, r0
adds r0, r4, #0
bl InitializeAnimation
ldrb r0, [r4, #0xb]
cmp r0, #1
beq _0808C2F8
cmp r0, #1
bgt _0808C2BC
cmp r0, #0
beq _0808C2C2
b _0808C31C
.align 2, 0
_0808C2B0: .4byte 0x0000FFFF
_0808C2B4: .4byte gHitbox_3
_0808C2B8: .4byte gRoomControls
_0808C2BC:
cmp r0, #2
beq _0808C306
b _0808C31C
_0808C2C2:
movs r2, #1
movs r0, #1
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x18]
subs r0, #5
ands r0, r1
orrs r0, r2
strb r0, [r4, #0x18]
adds r0, r4, #0
bl sub_0808C500
adds r0, r4, #0
bl sub_08078800
ldr r1, _0808C2F4 @ =gUnk_0811F740
ldrh r0, [r5]
adds r0, r0, r1
ldrb r2, [r0]
adds r0, r4, #0
movs r1, #0
movs r3, #0
bl sub_08078850
b _0808C31C
.align 2, 0
_0808C2F4: .4byte gUnk_0811F740
_0808C2F8:
movs r0, #4
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x18]
subs r0, #8
ands r0, r1
strb r0, [r4, #0x18]
b _0808C31C
_0808C306:
movs r2, #1
movs r0, #1
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x18]
subs r0, #5
ands r0, r1
orrs r0, r2
strb r0, [r4, #0x18]
adds r0, r4, #0
bl sub_0808C500
_0808C31C:
pop {r4, r5, r6, pc}
.align 2, 0
thumb_func_start sub_0808C320
sub_0808C320: @ 0x0808C320
push {r4, lr}
adds r4, r0, #0
adds r0, #0x39
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
beq _0808C344
movs r0, #2
strb r0, [r4, #0xc]
adds r0, r4, #0
bl sub_080788E0
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl SetFlag
_0808C344:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_0808C348
sub_0808C348: @ 0x0808C348
push {r4, lr}
adds r4, r0, #0
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
bne _0808C37C
ldr r0, _0808C374 @ =gRoomTransition
ldr r0, [r0]
movs r1, #3
ands r0, r1
cmp r0, #0
bne _0808C36A
ldr r0, _0808C378 @ =0x00000185
bl SoundReq
_0808C36A:
adds r0, r4, #0
bl GetNextFrame
b _0808C382
.align 2, 0
_0808C374: .4byte gRoomTransition
_0808C378: .4byte 0x00000185
_0808C37C:
adds r0, r4, #0
bl sub_0808C4BC
_0808C382:
pop {r4, pc}
thumb_func_start sub_0808C384
sub_0808C384: @ 0x0808C384
push {r4, lr}
adds r4, r0, #0
bl LinearMoveUpdate
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _0808C3B4
ldrb r0, [r4, #0xa]
cmp r0, #3
bhi _0808C3B0
movs r0, #0x40
movs r1, #0
movs r2, #1
bl sub_08078AC0
ldr r1, _0808C3B8 @ =gPlayerEntity
ldrb r0, [r4, #0xa]
lsls r0, r0, #3
strb r0, [r1, #0x15]
_0808C3B0:
bl DeleteThisEntity
_0808C3B4:
pop {r4, pc}
.align 2, 0
_0808C3B8: .4byte gPlayerEntity
thumb_func_start sub_0808C3BC
sub_0808C3BC: @ 0x0808C3BC
push {r4, r5, lr}
adds r4, r0, #0
adds r5, r4, #0
adds r5, #0x76
ldrh r1, [r5]
bl sub_08083734
cmp r0, #0
beq _0808C40E
movs r0, #5
strb r0, [r4, #0xc]
movs r0, #0xc
strb r0, [r4, #0xe]
ldrb r1, [r4, #0x18]
subs r0, #0x10
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r4, #0x18]
ldrb r0, [r5]
lsls r0, r0, #3
movs r1, #0x10
eors r0, r1
strb r0, [r4, #0x15]
ldrh r1, [r5]
lsls r1, r1, #1
ldr r0, _0808C410 @ =gUnk_081214F4
adds r1, r1, r0
movs r0, #0
ldrsb r0, [r1, r0]
ldrh r2, [r4, #0x2e]
adds r0, r0, r2
strh r0, [r4, #0x2e]
movs r0, #1
ldrsb r0, [r1, r0]
ldrh r1, [r4, #0x32]
adds r0, r0, r1
strh r0, [r4, #0x32]
adds r0, r4, #0
bl sub_0808C500
_0808C40E:
pop {r4, r5, pc}
.align 2, 0
_0808C410: .4byte gUnk_081214F4
thumb_func_start sub_0808C414
sub_0808C414: @ 0x0808C414
push {r4, r5, lr}
adds r4, r0, #0
bl LinearMoveUpdate
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
cmp r1, #0
bne _0808C49A
movs r0, #6
strb r0, [r4, #0xc]
strh r1, [r4, #0x36]
adds r0, r4, #0
adds r0, #0x70
ldrh r0, [r0]
strh r0, [r4, #0x2e]
adds r0, r4, #0
adds r0, #0x72
ldrh r0, [r0]
strh r0, [r4, #0x32]
adds r0, r4, #0
adds r0, #0x76
ldrh r0, [r0]
lsls r0, r0, #2
ldr r1, _0808C49C @ =gUnk_081214FC
adds r5, r0, r1
adds r0, r4, #0
movs r1, #0x11
movs r2, #0x40
bl CreateFx
adds r1, r0, #0
cmp r1, #0
beq _0808C470
movs r0, #0
ldrsb r0, [r5, r0]
ldrh r2, [r1, #0x2e]
adds r0, r0, r2
strh r0, [r1, #0x2e]
movs r0, #1
ldrsb r0, [r5, r0]
ldrh r2, [r1, #0x32]
adds r0, r0, r2
strh r0, [r1, #0x32]
_0808C470:
adds r0, r4, #0
movs r1, #0x11
movs r2, #0x40
bl CreateFx
adds r1, r0, #0
cmp r1, #0
beq _0808C494
movs r0, #2
ldrsb r0, [r5, r0]
ldrh r2, [r1, #0x2e]
adds r0, r0, r2
strh r0, [r1, #0x2e]
movs r0, #3
ldrsb r0, [r5, r0]
ldrh r2, [r1, #0x32]
adds r0, r0, r2
strh r0, [r1, #0x32]
_0808C494:
ldr r0, _0808C4A0 @ =0x0000010B
bl EnqueueSFX
_0808C49A:
pop {r4, r5, pc}
.align 2, 0
_0808C49C: .4byte gUnk_081214FC
_0808C4A0: .4byte 0x0000010B
thumb_func_start sub_0808C4A4
sub_0808C4A4: @ 0x0808C4A4
push {r4, lr}
adds r4, r0, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
beq _0808C4B8
movs r0, #2
strb r0, [r4, #0xc]
_0808C4B8:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_0808C4BC
sub_0808C4BC: @ 0x0808C4BC
push {lr}
movs r1, #3
strb r1, [r0, #0xc]
movs r1, #0xc
strb r1, [r0, #0xe]
adds r2, r0, #0
adds r2, #0x76
ldrh r1, [r2]
lsls r1, r1, #3
strb r1, [r0, #0x15]
ldrh r2, [r2]
lsls r2, r2, #1
ldr r1, _0808C4F8 @ =gUnk_0812150C
adds r2, r2, r1
movs r1, #0
ldrsb r1, [r2, r1]
ldrh r3, [r0, #0x2e]
adds r1, r1, r3
strh r1, [r0, #0x2e]
movs r1, #1
ldrsb r1, [r2, r1]
ldrh r2, [r0, #0x32]
adds r1, r1, r2
strh r1, [r0, #0x32]
bl sub_0808C5D0
ldr r0, _0808C4FC @ =0x0000010B
bl SoundReq
pop {pc}
.align 2, 0
_0808C4F8: .4byte gUnk_0812150C
_0808C4FC: .4byte 0x0000010B
thumb_func_start sub_0808C500
sub_0808C500: @ 0x0808C500
push {r4, r5, r6, lr}
adds r4, r0, #0
adds r0, #0x76
ldrh r0, [r0]
cmp r0, #0
beq _0808C510
cmp r0, #2
bne _0808C570
_0808C510:
adds r6, r4, #0
adds r6, #0x74
ldrh r0, [r6]
subs r0, #1
adds r5, r4, #0
adds r5, #0x38
ldrb r1, [r5]
bl GetTileIndex
adds r1, r4, #0
adds r1, #0x78
strh r0, [r1]
ldrh r0, [r6]
ldrb r1, [r5]
bl GetTileIndex
adds r1, r4, #0
adds r1, #0x7a
strh r0, [r1]
ldrh r0, [r6]
adds r0, #1
ldrb r1, [r5]
bl GetTileIndex
adds r1, r4, #0
adds r1, #0x7c
strh r0, [r1]
ldr r4, _0808C56C @ =0x00004022
ldrh r1, [r6]
subs r1, #1
ldrb r2, [r5]
adds r0, r4, #0
bl SetTile
ldrh r1, [r6]
ldrb r2, [r5]
adds r0, r4, #0
bl SetTile
ldrh r1, [r6]
adds r1, #1
ldrb r2, [r5]
adds r0, r4, #0
bl SetTile
b _0808C5CA
.align 2, 0
_0808C56C: .4byte 0x00004022
_0808C570:
adds r6, r4, #0
adds r6, #0x74
ldrh r0, [r6]
subs r0, #0x40
adds r5, r4, #0
adds r5, #0x38
ldrb r1, [r5]
bl GetTileIndex
adds r1, r4, #0
adds r1, #0x78
strh r0, [r1]
ldrh r0, [r6]
ldrb r1, [r5]
bl GetTileIndex
adds r1, r4, #0
adds r1, #0x7a
strh r0, [r1]
ldrh r0, [r6]
adds r0, #0x40
ldrb r1, [r5]
bl GetTileIndex
adds r1, r4, #0
adds r1, #0x7c
strh r0, [r1]
ldr r4, _0808C5CC @ =0x00004022
ldrh r1, [r6]
subs r1, #0x40
ldrb r2, [r5]
adds r0, r4, #0
bl SetTile
ldrh r1, [r6]
ldrb r2, [r5]
adds r0, r4, #0
bl SetTile
ldrh r1, [r6]
adds r1, #0x40
ldrb r2, [r5]
adds r0, r4, #0
bl SetTile
_0808C5CA:
pop {r4, r5, r6, pc}
.align 2, 0
_0808C5CC: .4byte 0x00004022
thumb_func_start sub_0808C5D0
sub_0808C5D0: @ 0x0808C5D0
push {r4, r5, r6, lr}
adds r6, r0, #0
adds r0, #0x76
ldrh r0, [r0]
cmp r0, #0
beq _0808C5E0
cmp r0, #2
bne _0808C618
_0808C5E0:
adds r0, r6, #0
adds r0, #0x78
ldrh r0, [r0]
adds r5, r6, #0
adds r5, #0x74
ldrh r1, [r5]
subs r1, #1
adds r4, r6, #0
adds r4, #0x38
ldrb r2, [r4]
bl SetTile
adds r0, r6, #0
adds r0, #0x7a
ldrh r0, [r0]
ldrh r1, [r5]
ldrb r2, [r4]
bl SetTile
adds r0, r6, #0
adds r0, #0x7c
ldrh r0, [r0]
ldrh r1, [r5]
adds r1, #1
ldrb r2, [r4]
bl SetTile
b _0808C64E
_0808C618:
adds r0, r6, #0
adds r0, #0x78
ldrh r0, [r0]
adds r5, r6, #0
adds r5, #0x74
ldrh r1, [r5]
subs r1, #0x40
adds r4, r6, #0
adds r4, #0x38
ldrb r2, [r4]
bl SetTile
adds r0, r6, #0
adds r0, #0x7a
ldrh r0, [r0]
ldrh r1, [r5]
ldrb r2, [r4]
bl SetTile
adds r0, r6, #0
adds r0, #0x7c
ldrh r0, [r0]
ldrh r1, [r5]
adds r1, #0x40
ldrb r2, [r4]
bl SetTile
_0808C64E:
pop {r4, r5, r6, pc}
thumb_func_start sub_0808C650
sub_0808C650: @ 0x0808C650
push {r4, lr}
adds r4, r0, #0
adds r2, r1, #0
movs r0, #0x3a
movs r1, #0
bl CreateObject
cmp r0, #0
beq _0808C670
str r4, [r0, #0x50]
ldr r1, _0808C66C @ =gUnk_02036BB8
movs r0, #0
b _0808C674
.align 2, 0
_0808C66C: .4byte gUnk_02036BB8
_0808C670:
ldr r1, _0808C678 @ =gUnk_02036BB8
movs r0, #1
_0808C674:
str r0, [r1]
pop {r4, pc}
.align 2, 0
_0808C678: .4byte gUnk_02036BB8
thumb_func_start sub_0808C67C
sub_0808C67C: @ 0x0808C67C
ldr r0, _0808C684 @ =gUnk_02036BB8
ldr r0, [r0]
bx lr
.align 2, 0
_0808C684: .4byte gUnk_02036BB8
thumb_func_start sub_0808C688
sub_0808C688: @ 0x0808C688
push {lr}
bl sub_0801E104
ldr r1, _0808C698 @ =gUnk_02036BB8
movs r0, #1
str r0, [r1]
pop {pc}
.align 2, 0
_0808C698: .4byte gUnk_02036BB8

View File

@ -43544,21 +43544,6 @@
"size": 4,
"type": "animation"
},
{
"path": "bossDoor/gUnk_081214F4.bin",
"start": 1185012,
"size": 8
},
{
"path": "bossDoor/gUnk_081214FC.bin",
"start": 1185020,
"size": 16
},
{
"path": "bossDoor/gUnk_0812150C.bin",
"start": 1185036,
"size": 8
},
{
"path": "object3A/gUnk_081215E8.bin",
"start": 1185256,
@ -47275,61 +47260,6 @@
"EU": -2484
}
},
{
"path": "data_08132B30/gUnk_08133918.bin",
"start": 1259800,
"size": 32
},
{
"path": "data_08132B30/gUnk_08133938.bin",
"start": 1259832,
"size": 32
},
{
"path": "data_08132B30/gUnk_08133958.bin",
"start": 1259864,
"size": 32
},
{
"path": "data_08132B30/gUnk_08133978.bin",
"start": 1259896,
"size": 32
},
{
"path": "data_08132B30/gUnk_08133998.bin",
"start": 1259928,
"size": 32
},
{
"path": "data_08132B30/gUnk_081339B8.bin",
"start": 1259960,
"size": 32
},
{
"path": "data_08132B30/gUnk_081339D8.bin",
"start": 1259992,
"size": 32
},
{
"path": "data_08132B30/gUnk_081339F8.bin",
"start": 1260024,
"size": 32
},
{
"path": "data_08132B30/gUnk_08133A40.bin",
"start": 1260096,
"size": 26
},
{
"path": "data_08132B30/gUnk_08133A5A.bin",
"start": 1260122,
"size": 13
},
{
"path": "data_08132B30/gUnk_08133A67.bin",
"start": 1260135,
"size": 1249
},
{
"path": "exit_lists/gExitList_NoExitList.bin",
"start": 1261512,

View File

@ -1,23 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnk_081214D8:: @ 081214D8
.4byte sub_0808C1FC
.4byte sub_0808C320
.4byte sub_0808C348
.4byte sub_0808C384
.4byte sub_0808C3BC
.4byte sub_0808C414
.4byte sub_0808C4A4
gUnk_081214F4:: @ 081214F4
.incbin "bossDoor/gUnk_081214F4.bin"
gUnk_081214FC:: @ 081214FC
.incbin "bossDoor/gUnk_081214FC.bin"
gUnk_0812150C:: @ 0812150C
.incbin "bossDoor/gUnk_0812150C.bin"

View File

@ -14,9 +14,12 @@
// Identified - to be sorted into header files
extern void CalculateEntityTileCollisions(Entity*, u32, u32);
extern u32 CheckOnScreen(Entity*);
extern u32 CheckRegionOnScreen(u32, u32, u32, u32);
extern void CopyOAM(void);
extern void CreateChestSpawner(Entity*);
extern void CreateItemOnGround(Entity*);
extern void CreateMagicSparkles(u32, u32, u32);
extern void CreateRandomItemDrop(Entity*, s32);
extern void DrawDirect(u32, u32); // trampoline to sub_080B27F4
extern void DrawEntities(void);
@ -26,9 +29,9 @@ extern u32 EntityWithinDistance(Entity*, s32, s32, s32);
extern void FlushSprites(void);
extern void GenericKnockback2(Entity*);
extern LayerStruct* GetLayerByIndex(u32);
extern u32 GetRandomByWeight(const u8*);
extern u32 GetTileIndex(u32, u32);
extern u32 IsColliding(Entity*, Entity*);
extern u32 IsColliding(Entity*, Entity*);
extern u32 IsCollidingPlayer(Entity*);
extern bool32 IsProjectileOffScreen(Entity*);
extern bool32 IsTileCollision(u8*, s32, s32, u32);
@ -38,7 +41,6 @@ extern bool32 LoadFixedGFX(Entity*, u32);
extern bool32 LoadSwapGFX(Entity*, u16, u32);
extern void MenuFadeIn(u32, u32);
extern u32 PlayerInRange(Entity*, u32, u32);
extern u32 PlayerInRange(Entity*, u32, u32);
extern bool32 ProcessMovement1(Entity*);
extern bool32 ProcessMovement12(Entity*);
extern bool32 ProcessMovement2(Entity*);
@ -49,8 +51,6 @@ extern bool32 ProcessMovement6(Entity*);
extern bool32 ProcessMovementInternal(Entity*, s32, s32, u32);
extern void SetDirtTile(u32);
extern void SoundReqClipped(Entity*, u32);
extern void SoundReqClipped(Entity*, u32);
extern void SoundReqClipped(Entity*, u32);
extern void TryLoadPrologueHyruleTown(void);
extern void UnloadOBJPalette(Entity*);
extern void UpdateItemAnim(ItemBehavior*);
@ -65,6 +65,7 @@ extern u32 sub_080002CC(Entity*, s32, s32);
extern u32 sub_080002D4(s32, s32, u32);
extern u32 sub_080002E0(u32, u32);
extern s32 sub_080012DC(Entity*);
extern void sub_08001318(Entity*);
extern u32 sub_0800132C(Entity*, Entity*);
extern u32 sub_080040A2(Entity*);
extern u32 sub_080040D8(Entity*, u8*, s32, s32);
@ -87,6 +88,7 @@ extern void sub_0801AF18(u8*, u32, u32);
extern void sub_0801AFE4(void);
extern void sub_0801C1D4(void);
extern void sub_0801E104(void);
extern void sub_08027870(Entity*);
extern void sub_08030118(u32);
extern u32 sub_08031E04(Entity*);
extern void sub_08031E48(Entity*, Entity*);
@ -95,12 +97,14 @@ extern u32 sub_080322A4(Entity*);
extern void sub_080322E8(Entity*);
extern void sub_08032338(Entity*);
extern void sub_0803C0AC(Entity*);
extern void sub_08049CF4(Entity*);
extern Entity* sub_08049DF4(u32);
extern u32 sub_08049EE4(Entity*);
extern u32 sub_08049F1C(Entity*, Entity*, u32);
extern u32 sub_08049F84(Entity*, u32);
extern u32 sub_08049FA0(Entity*);
extern u32 sub_08049FDC(Entity*, u32);
extern u32 sub_0804A024(Entity*, u32, u32);
extern u32 sub_0804A044(Entity*, Entity*, u32);
extern void sub_0804A720(Entity*);
extern void sub_0804AA1C(Entity*);
@ -149,17 +153,20 @@ extern void sub_08077F50(ItemBehavior* beh, u32 arg1);
extern void sub_080784C8();
extern void sub_08078790(Entity*, u32);
extern void sub_080787CC(Entity*);
extern s32 sub_08078800(Entity*);
extern void sub_08078850(Entity*, u32, u32, void*);
extern s32 sub_0807887C(Entity*, u32, u32);
extern void sub_080788E0(Entity*);
extern s32 sub_08078904();
extern void sub_08078930(Entity*);
extern void sub_08078930(Entity*);
extern void sub_08078954(Entity*);
extern void sub_08078AC0(u32, u32, u32);
extern void sub_08078B48(void);
extern void sub_08078E84(Entity*, Entity*);
extern void sub_08079184();
extern void sub_0807919C();
extern void sub_0807921C();
extern void sub_080792BC(s32, u32, u32);
extern u32 sub_0807953C(void);
extern void sub_08079BD8(Entity*);
extern u32 sub_08079D48();
@ -181,40 +188,21 @@ extern void sub_0808091C(const ScreenTransitionData*, u32);
extern void sub_080809D4(void);
extern void sub_08080CB4(Entity*);
extern u32 sub_0808288C(Entity*, u32, u32, u32);
extern bool32 sub_08083734(Entity*, u32); // lockedDoor
extern void sub_08095C48(Entity*);
extern void sub_0809EABC(Entity*);
extern void sub_0809EAD8(Entity*);
extern void sub_0809EB30(Entity*);
extern void sub_080A1ED0(u32, u32, u32);
extern Entity* sub_080A2A3C(Entity*, u32, u32, u32);
extern Entity* sub_080A2AD4(Entity*);
extern void sub_080A2AF4(Entity*, u32, u32);
extern void sub_080A2CC0(Entity*, Entity**, u16*);
extern void sub_080A57F4(void);
extern void sub_080A71C4(u32, u32, u32, u32);
extern void sub_080A7C18(u32, u32, u32);
extern void sub_080AE068(Entity*);
extern void sub_080AF284(void);
extern void sub_08078930(Entity*);
extern void sub_08078954(Entity*);
extern void sub_0809EB30(Entity*);
extern void sub_0809EAD8(Entity*);
extern void sub_0809EABC(Entity*);
extern void sub_08079D84(void);
extern void sub_080A2CC0(Entity*, Entity**, u16*);
// extern void sub_080A2CC0(Entity*, void*, void*);
extern void sub_08095C48(Entity*);
extern s32 sub_080012DC(Entity*);
extern u32 sub_0804A024(Entity*, u32, u32);
extern s32 sub_080012DC(Entity*);
extern void sub_08001318(Entity*);
extern void sub_080043A8(Entity*);
extern u32 sub_08049F1C(Entity*, Entity*, u32);
extern void sub_0804AA1C(Entity*);
extern void sub_08027870(Entity*);
extern u32 sub_0804A044(Entity*, Entity*, u32);
extern void sub_0804AA1C(Entity*);
extern void sub_08049CF4(Entity*);
extern void sub_0806FCF4(Entity*, s32, s32, s32);
extern u32 sub_080041DC(Entity*, u32, u32);
extern void sub_080AE58C(Entity*, u32, u32);
extern u32 sub_0800132C(Entity*, Entity*);
extern bool32 sub_080AE4CC(Entity*, u32, u32, u32);
extern void sub_08008796(Entity*, u32, u32, u32);
extern void sub_08078AC0(u32, u32, u32);
extern void CreateMagicSparkles(u32, u32, u32);
extern void sub_080AE58C(Entity*, u32, u32);
extern void sub_080AF284(void);
#endif

View File

@ -283,7 +283,7 @@ void Object35(Entity*);
void Object36(Entity*);
void Object37(Entity*);
void JarPortal(Entity*);
void BossDoor(Entity*);
void BossDoor();
void Object3A(Entity*);
void MacroMushromStalks(Entity*);
void MacroPlayer(Entity*);

View File

@ -700,7 +700,7 @@ SECTIONS {
asm/object/object36.o(.text);
asm/object/object37.o(.text);
src/object/jarPortal.o(.text);
asm/object/bossDoor.o(.text);
src/object/bossDoor.o(.text);
asm/object/object3A.o(.text);
asm/object/macroMushroomStalks.o(.text);
asm/object/object75.o(.text); /* 75 and 76 are mislocated in object table */
@ -1436,7 +1436,7 @@ SECTIONS {
data/const/object/object37.o(.rodata);
data/const/object/jarPortal.o(.rodata);
data/animations/object/jarPortal.o(.rodata);
data/const/object/bossDoor.o(.rodata);
src/object/bossDoor.o(.rodata);
data/animations/object/bossDoor.o(.rodata);
data/const/object/object3A.o(.rodata);
data/const/object/macroMushroomStalks.o(.rodata);

View File

@ -65,13 +65,13 @@ s32 sub_08078828(Entity* ent) {
return iVar1;
}
void sub_08078850(u32 arg0, u32 arg1, u32 arg2, u32 arg3) {
void sub_08078850(Entity* arg0, u32 arg1, u32 arg2, void* arg3) {
s32 iVar1;
iVar1 = sub_08078904();
if (iVar1 >= 0) {
gUnk_03003DF0[iVar1].unk[8] = arg1;
gUnk_03003DF0[iVar1].unk[10] = arg2;
*(&gUnk_03003DF0[iVar1].unk4 + 1) = arg3;
*(&gUnk_03003DF0[iVar1].unk4 + 1) = (u32)arg3;
}
}

View File

@ -11,9 +11,6 @@
#include "projectile.h"
#include "game.h"
extern u32 GetRandomByWeight(const u8*);
extern void sub_080792BC(s32, u32, u32);
enum OctorokRotation { ROTATION_CW, ROTATION_CCW, NO_ROTATION = 0xff };
typedef struct HelperStruct {

View File

@ -5,14 +5,13 @@
#include "script.h"
#include "npc.h"
#include "game.h"
#include "functions.h"
typedef struct {
u32 unk_00;
s8 unk_04;
} gUnk_0810C89C_struct;
extern void sub_08078850(Entity*, u32, s8, gUnk_0810C89C_struct*);
extern u8 gUnk_0810C88C[];
extern Hitbox gUnk_0810C894;
extern gUnk_0810C89C_struct gUnk_0810C89C[];

View File

@ -34,7 +34,6 @@ extern void sub_08067DCC(Entity*, u32);
extern u8 gUnk_0811110C[2];
extern u32 gUnk_0811110F;
extern void sub_08078850(Entity*, u32, u8, u32*);
extern u16 gUnk_08111104[];

View File

@ -1,6 +1,5 @@
#include "npc.h"
extern void sub_08078850(Entity*, u32, u8, u32*);
#include "functions.h"
extern u32 gUnk_081133B4;
void sub_0806BFD8(Entity* this);

View File

@ -5,7 +5,6 @@
extern void (*gUnk_08113D8C[])(Entity*);
extern void sub_08078850(Entity*, u32, u8, u32*);
extern u32 gUnk_08113D84[];
void Gregal(Entity* this) {
@ -32,7 +31,7 @@ void sub_0806CAF4(Entity* this) {
}
sub_0807DD64(this);
sub_08078778(this);
sub_08078850(this, 1, gUnk_08113D84[1], gUnk_08113D84);
sub_08078850(this, 1, (u8)gUnk_08113D84[1], gUnk_08113D84);
}
ExecuteScriptForEntity(this, NULL);
HandleEntity0x82Actions(this);

View File

@ -3,8 +3,8 @@
#include "player.h"
#include "flags.h"
#include "npc.h"
#include "functions.h"
extern void sub_08078850(Entity*, u32, u32, u32*);
extern u32 gUnk_08113F44;
extern Dialog gUnk_08113F48[];

View File

@ -14,8 +14,6 @@ typedef struct {
s8 unk_04;
} gUnk_0810C89C_struct;
extern void sub_08078850(Entity*, u32, u8 /* TODO this is a s8 in beedle.c*/, gUnk_0810C89C_struct*);
extern void script_Object3ELeftStoneOpening; // Cutscene data type?
extern void script_Object3ERightStoneOpening; // Cutscene data type?
@ -46,7 +44,7 @@ void sub_0806DA04(Entity* this, ScriptExecutionContext* context) {
// TODO gUnk_0811415C should be a gUnk_0810C89C_struct[], but then a lot of bytes everywhere are wrong?
gUnk_0810C89C_struct* a = (gUnk_0810C89C_struct*)&(
(gUnk_0810C89C_struct*)gUnk_0811415C)[context->intVariable]; // cast necessary to no longer make it a const* ?
sub_08078850(this, 1, a->unk_04, a);
sub_08078850(this, 1, (u8)a->unk_04, a);
}
void sub_0806DA1C(Entity* this, ScriptExecutionContext* context) {

View File

@ -8,7 +8,6 @@ extern void (*gUnk_08112278[])(Entity*);
extern void script_Rem;
extern void sub_08078850(Entity*, u32, u32, u32*);
extern u32 gUnk_0811229C;
extern void sub_0807F950(Entity* this, ScriptExecutionContext* context);

View File

@ -4,9 +4,9 @@
#include "script.h"
#include "save.h"
#include "npc.h"
#include "functions.h"
extern Hitbox gUnk_081142FC;
extern void sub_08078850(Entity*, u32, u32, u32*);
extern u32 gUnk_08114304;
extern Dialog gUnk_08114308[];

View File

@ -1,6 +1,5 @@
#include "npc.h"
extern void sub_08078850(Entity*, u32, u32, u32*);
#include "functions.h"
extern void (*const gUnk_08110360[])(Entity*);
extern void (*const gUnk_0811036C[])(Entity*);

View File

@ -14,8 +14,6 @@ extern u16 script_StockwellBuy[];
extern u16 script_StockwellDogFood[];
extern u8 gUnk_0810FDB8[];
extern void sub_08078850(Entity*, u32, u8, u32*);
extern void InitScriptExecutionContext(ScriptExecutionContext* context, u16* script);
extern u32 gUnk_0810FDA0;
extern u16 script_Stockwell;

View File

@ -8,7 +8,6 @@ extern void sub_0806ACC4(Entity*);
extern void sub_0806AEA8(Entity*);
extern void sub_0806AEE4(Entity*);
extern void sub_0806AFE8(Entity*, ScriptExecutionContext*);
extern void sub_08078850(Entity*, u32, u32, u32*);
extern u8 gUnk_081125F4[12];
extern SpriteLoadData gUnk_08112674[];

View File

@ -13,7 +13,6 @@ extern void (*const gUnk_0810B77C[])(Entity*);
extern void sub_08061CB4(Entity*, u32);
extern void sub_08061D64(Entity*);
extern void sub_08062048(Entity*);
extern void sub_08078850(Entity*, u32, u8, u32*);
extern SpriteLoadData* gUnk_0810B6EC[];
extern u8 gUnk_0810B78C[];

225
src/object/bossDoor.c Normal file
View File

@ -0,0 +1,225 @@
/**
* @file bossDoor.c
* @ingroup Objects
*
* @brief Boss Door object
*/
#define NENT_DEPRECATED
#include "global.h"
#include "object.h"
#include "functions.h"
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unk_68[8];
/*0x70*/ u16 unk_70;
/*0x72*/ u16 unk_72;
/*0x74*/ u16 unk_74;
/*0x76*/ u16 unk_76;
/*0x78*/ u16 unk_78;
/*0x7a*/ u16 unk_7a;
/*0x7c*/ u16 unk_7c;
/*0x7e*/ u8 unk_7e[6];
/*0x84*/ u16 unk_84;
/*0x86*/ u16 unk_86;
} BossDoorEntity;
extern Hitbox gHitbox_3;
extern bool32 gUnk_02036BB8;
extern const u8 gUnk_0811F740[];
void sub_0808C500(BossDoorEntity*);
void sub_0808C4BC(BossDoorEntity*);
void sub_0808C5D0(BossDoorEntity*);
void BossDoor_Init(BossDoorEntity*);
void BossDoor_Action1(BossDoorEntity*);
void BossDoor_Action2(BossDoorEntity*);
void BossDoor_Action3(BossDoorEntity*);
void BossDoor_Action4(BossDoorEntity*);
void BossDoor_Action5(BossDoorEntity*);
void BossDoor_Action6(BossDoorEntity*);
void BossDoor(BossDoorEntity* this) {
static void (*const BossDoor_Actions[])(BossDoorEntity*) = {
BossDoor_Init, BossDoor_Action1, BossDoor_Action2, BossDoor_Action3,
BossDoor_Action4, BossDoor_Action5, BossDoor_Action6,
};
BossDoor_Actions[super->action](this);
}
void BossDoor_Init(BossDoorEntity* this) {
if ((this->unk_84 != 0xffff) && CheckFlags(this->unk_84)) {
DeleteThisEntity();
}
if ((this->unk_86 != BEGIN) && CheckFlags(this->unk_86)) {
DeleteThisEntity();
}
super->type2 = super->type >> 2;
super->speed = 0x300;
this->unk_70 = super->x.HALF.HI;
this->unk_72 = super->y.HALF.HI;
super->hitbox = (Hitbox*)&gHitbox_3;
super->spritePriority.b0 = 5;
this->unk_76 = super->type & 3;
this->unk_74 = COORD_TO_TILE(super);
InitializeAnimation(super, super->type & 0x1f);
switch (super->type2) {
case 0:
super->action = 1;
super->spriteSettings.draw = 1;
sub_0808C500(this);
sub_08078800(super);
sub_08078850(super, 0, gUnk_0811F740[this->unk_76], 0);
break;
case 1:
super->action = 4;
super->spriteSettings.draw = 0;
break;
case 2:
super->action = 1;
super->spriteSettings.draw = 1;
sub_0808C500(this);
break;
}
}
void BossDoor_Action1(BossDoorEntity* this) {
if (super->interactType != 0) {
super->action = 2;
sub_080788E0(super);
SetFlag(this->unk_86);
}
}
void BossDoor_Action2(BossDoorEntity* this) {
if ((super->frame & 0x80) == 0) {
if ((gRoomTransition.frameCount & 3) == 0) {
SoundReq(SFX_185);
}
GetNextFrame(super);
} else {
sub_0808C4BC(this);
}
}
void BossDoor_Action3(BossDoorEntity* this) {
LinearMoveUpdate(super);
if (--super->actionDelay == 0) {
if (super->type < 4) {
sub_08078AC0(0x40, 0, 1);
gPlayerEntity.direction = super->type << 3;
}
DeleteThisEntity();
}
}
void BossDoor_Action4(BossDoorEntity* this) {
static const s8 gUnk_081214F4[] = { 0, -36, 36, 0, 0, 36, -36, 0 };
const s8* ptr;
if (sub_08083734(super, this->unk_76)) {
super->action = 5;
super->actionDelay = 0xc;
super->spriteSettings.draw = 1;
super->direction = *(u8*)&this->unk_76 << 3 ^ 0x10;
ptr = &gUnk_081214F4[this->unk_76 * 2];
super->x.HALF.HI += ptr[0];
super->y.HALF.HI += ptr[1];
sub_0808C500(this);
}
}
void BossDoor_Action5(BossDoorEntity* this) {
static const s8 gUnk_081214FC[] = { 12, 12, -12, 12, -12, 12, -12, -12, 12, -12, -12, -12, 12, 12, 12, -12 };
Entity* effect;
const s8* ptr;
LinearMoveUpdate(super);
if (--super->actionDelay == 0) {
super->action = 6;
super->z.HALF.HI = 0;
super->x.HALF.HI = this->unk_70;
super->y.HALF.HI = this->unk_72;
ptr = &gUnk_081214FC[this->unk_76 * 4];
effect = CreateFx(super, FX_DASH, 0x40);
if (effect != NULL) {
effect->x.HALF.HI += ptr[0];
effect->y.HALF.HI += ptr[1];
}
effect = CreateFx(super, FX_DASH, 0x40);
if (effect != NULL) {
effect->x.HALF.HI += ptr[2];
effect->y.HALF.HI += ptr[3];
}
EnqueueSFX(SFX_10B);
}
}
void BossDoor_Action6(BossDoorEntity* this) {
if (CheckFlags(this->unk_86)) {
super->action = 2;
}
}
void sub_0808C4BC(BossDoorEntity* this) {
static const s8 gUnk_0812150C[] = { 0, -2, 2, 0, 0, 2, -2, 0 };
const s8* ptr;
super->action = 3;
super->actionDelay = 0xc;
super->direction = this->unk_76 * 8;
ptr = &gUnk_0812150C[this->unk_76 * 2];
super->x.HALF.HI += ptr[0];
super->y.HALF.HI += ptr[1];
sub_0808C5D0(this);
SoundReq(SFX_10B);
}
void sub_0808C500(BossDoorEntity* this) {
if ((this->unk_76 == 0) || (this->unk_76 == 2)) {
this->unk_78 = GetTileIndex(this->unk_74 - 1, super->collisionLayer);
this->unk_7a = GetTileIndex(this->unk_74, super->collisionLayer);
this->unk_7c = GetTileIndex(this->unk_74 + 1, super->collisionLayer);
SetTile(0x4022, this->unk_74 - 1, super->collisionLayer);
SetTile(0x4022, this->unk_74, super->collisionLayer);
SetTile(0x4022, this->unk_74 + 1, super->collisionLayer);
} else {
this->unk_78 = GetTileIndex(this->unk_74 - 0x40, super->collisionLayer);
this->unk_7a = GetTileIndex(this->unk_74, super->collisionLayer);
this->unk_7c = GetTileIndex(this->unk_74 + 0x40, super->collisionLayer);
SetTile(0x4022, this->unk_74 - 0x40, super->collisionLayer);
SetTile(0x4022, this->unk_74, super->collisionLayer);
SetTile(0x4022, this->unk_74 + 0x40, super->collisionLayer);
}
}
void sub_0808C5D0(BossDoorEntity* this) {
if ((this->unk_76 == 0) || (this->unk_76 == 2)) {
SetTile(this->unk_78, this->unk_74 - 1, super->collisionLayer);
SetTile(this->unk_7a, this->unk_74, super->collisionLayer);
SetTile(this->unk_7c, this->unk_74 + 1, super->collisionLayer);
} else {
SetTile(this->unk_78, this->unk_74 - 0x40, super->collisionLayer);
SetTile(this->unk_7a, this->unk_74, super->collisionLayer);
SetTile(this->unk_7c, this->unk_74 + 0x40, super->collisionLayer);
}
}
void sub_0808C650(Entity* this, u32 param_2) {
Entity* obj = CreateObject(OBJECT_3A, 0, param_2);
if (obj != NULL) {
obj->parent = this;
gUnk_02036BB8 = FALSE;
} else {
gUnk_02036BB8 = TRUE;
}
}
bool32 sub_0808C67C(void) {
return gUnk_02036BB8;
}
void sub_0808C688(void) {
sub_0801E104();
gUnk_02036BB8 = TRUE;
}

View File

@ -28,8 +28,6 @@ static bool32 sub_080867CC(u32);
void sub_0808681C(Entity*);
static u8 sub_08086954(Entity*);
extern u32 CheckRegionOnScreen(u32, u32, u32, u32);
extern void (*const gUnk_081206B4[])(Entity*);
extern Hitbox gUnk_081206AC; // TODO: should be const

View File

@ -14,7 +14,7 @@ typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unk_68[8];
/*0x70*/ u16 timer;
/*0x72*/ u16 wobbleTime; /**< Time the player can stand on the platform. */
/*0x72*/ u16 wobbleTime; /**< Time the player can stand on the platform. */
/*0x74*/ u16 respawnTime; /**< Time until the platform respawns after it has sunk. */
/*0x76*/ u16 unk_76;
/*0x78*/ Entity* unk_78; // Typed same as second argument of sub_080A2CC0

View File

@ -37,8 +37,6 @@ void LockedDoor(Entity* this) {
extern Hitbox gHitbox_2;
extern void sub_08078850(Entity*, u32, u32, u32);
typedef struct PACKED {
s8 x;
s8 y;

View File

@ -29,7 +29,7 @@ void Object3E_Type8_Action2(Object3EEntity*);
void Object3E(Object3EEntity* this) {
static void (*const Object3E_Types[])(Object3EEntity*) = {
Object3E_Type0, Object3E_Type1, Object3E_Type1, Object3E_Type3, Object3E_Type4,
Object3E_Type0, Object3E_Type1, Object3E_Type1, Object3E_Type3, Object3E_Type4,
Object3E_Type5, Object3E_Type6, Object3E_Type7, Object3E_Type8, Object3E_Type1,
};
Object3E_Types[super->type](this);

View File

@ -103,11 +103,6 @@ Object6ATypeAction sub_080961F4;
Object6ATypeAction sub_08096284;
Object6ATypeAction sub_08096290;
extern void sub_08080CB4(Entity*);
extern u32 sub_080002B8(Entity*);
extern u32 CheckOnScreen(Entity*);
extern void sub_08078850(Entity*, u32, u32, u8*);
void sub_08095754(Object6AEntity*);
void sub_080957B4(Object6AEntity*);
void sub_08095954(Object6AEntity*);

View File

@ -4,8 +4,7 @@
#include "save.h"
#include "script.h"
#include "effects.h"
extern void sub_08078850(Entity*, u32, u32, u8*);
#include "functions.h"
extern u8 gUnk_08125010;