mirror of https://github.com/zeldaret/tmc.git
Decompile itemOnGround.c
This commit is contained in:
parent
82654cd402
commit
3b78407194
|
@ -0,0 +1,436 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_08080A40
|
||||
sub_08080A40: @ 0x08080A40
|
||||
push {r4, r5, r6, r7, lr}
|
||||
ldr r7, _08080A70 @ =gRoomControls
|
||||
ldr r1, [r7, #0x30]
|
||||
ldr r0, _08080A74 @ =gPlayerEntity
|
||||
adds r2, r7, #0
|
||||
cmp r1, r0
|
||||
beq _08080A50
|
||||
b _08080B5C
|
||||
_08080A50:
|
||||
ldr r0, _08080A78 @ =gPlayerState
|
||||
ldrb r0, [r0, #2]
|
||||
cmp r0, #0
|
||||
beq _08080A5A
|
||||
b _08080B5C
|
||||
_08080A5A:
|
||||
ldrb r0, [r1, #0xc]
|
||||
subs r0, #1
|
||||
cmp r0, #0x1c
|
||||
bls _08080A64
|
||||
b _08080B5C
|
||||
_08080A64:
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _08080A7C @ =_08080A80
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08080A70: .4byte gRoomControls
|
||||
_08080A74: .4byte gPlayerEntity
|
||||
_08080A78: .4byte gPlayerState
|
||||
_08080A7C: .4byte _08080A80
|
||||
_08080A80: @ jump table
|
||||
.4byte _08080AFA @ case 0
|
||||
.4byte _08080B5C @ case 1
|
||||
.4byte _08080B5C @ case 2
|
||||
.4byte _08080B5C @ case 3
|
||||
.4byte _08080B5C @ case 4
|
||||
.4byte _08080B5C @ case 5
|
||||
.4byte _08080B5C @ case 6
|
||||
.4byte _08080B5C @ case 7
|
||||
.4byte _08080AFA @ case 8
|
||||
.4byte _08080B5C @ case 9
|
||||
.4byte _08080B5C @ case 10
|
||||
.4byte _08080B5C @ case 11
|
||||
.4byte _08080B5C @ case 12
|
||||
.4byte _08080B5C @ case 13
|
||||
.4byte _08080AF4 @ case 14
|
||||
.4byte _08080B5C @ case 15
|
||||
.4byte _08080B5C @ case 16
|
||||
.4byte _08080B5C @ case 17
|
||||
.4byte _08080B5C @ case 18
|
||||
.4byte _08080B5C @ case 19
|
||||
.4byte _08080B5C @ case 20
|
||||
.4byte _08080B5C @ case 21
|
||||
.4byte _08080B5C @ case 22
|
||||
.4byte _08080AFA @ case 23
|
||||
.4byte _08080B5C @ case 24
|
||||
.4byte _08080B5C @ case 25
|
||||
.4byte _08080B5C @ case 26
|
||||
.4byte _08080B5C @ case 27
|
||||
.4byte _08080AFA @ case 28
|
||||
_08080AF4:
|
||||
ldrb r0, [r2, #4]
|
||||
cmp r0, #0x48
|
||||
beq _08080B5C
|
||||
_08080AFA:
|
||||
ldr r3, [r7, #0x30]
|
||||
movs r0, #0x32
|
||||
ldrsh r1, [r3, r0]
|
||||
ldrh r0, [r7, #8]
|
||||
subs r6, r1, r0
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r3, r0]
|
||||
ldrh r0, [r7, #6]
|
||||
subs r5, r1, r0
|
||||
asrs r0, r5, #4
|
||||
movs r2, #0x3f
|
||||
ands r0, r2
|
||||
asrs r1, r6, #4
|
||||
ands r1, r2
|
||||
lsls r1, r1, #6
|
||||
orrs r0, r1
|
||||
adds r3, #0x38
|
||||
ldrb r1, [r3]
|
||||
bl sub_080002C8
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r7, #0x30]
|
||||
adds r0, #0x38
|
||||
ldrb r2, [r0]
|
||||
adds r0, r5, #0
|
||||
adds r1, r6, #0
|
||||
bl sub_080002A8
|
||||
ldr r1, _08080B48 @ =gScreenTransition
|
||||
strh r0, [r1, #0xa]
|
||||
cmp r4, #0x3f
|
||||
beq _08080B50
|
||||
cmp r4, #0x3f
|
||||
bhi _08080B4C
|
||||
cmp r4, #0x29
|
||||
bhi _08080B5C
|
||||
cmp r4, #0x28
|
||||
blo _08080B5C
|
||||
b _08080B50
|
||||
.align 2, 0
|
||||
_08080B48: .4byte gScreenTransition
|
||||
_08080B4C:
|
||||
cmp r4, #0xf1
|
||||
bne _08080B5C
|
||||
_08080B50:
|
||||
adds r0, r5, #0
|
||||
adds r1, r6, #0
|
||||
movs r2, #0xff
|
||||
movs r3, #0xa
|
||||
bl sub_080806BC
|
||||
_08080B5C:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08080B60
|
||||
sub_08080B60: @ 0x08080B60
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
ldr r1, _08080B90 @ =0x00005004
|
||||
adds r4, r0, r1
|
||||
ldr r2, _08080B94 @ =gUnk_080B37A0
|
||||
mov r8, r2
|
||||
movs r3, #0
|
||||
ldr r1, _08080B98 @ =0x00003FFF
|
||||
mov ip, r1
|
||||
ldr r7, _08080B9C @ =gUnk_080B7910
|
||||
ldr r2, _08080BA0 @ =0x0000B004
|
||||
adds r1, r0, r2
|
||||
adds r2, r0, #4
|
||||
ldr r6, _08080BA4 @ =0xFFFFC000
|
||||
ldr r5, _08080BA8 @ =0x00000FFF
|
||||
_08080B80:
|
||||
ldrh r0, [r2]
|
||||
cmp r0, ip
|
||||
bhi _08080BAC
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r4
|
||||
ldrh r0, [r0]
|
||||
add r0, r8
|
||||
b _08080BB0
|
||||
.align 2, 0
|
||||
_08080B90: .4byte 0x00005004
|
||||
_08080B94: .4byte gUnk_080B37A0
|
||||
_08080B98: .4byte 0x00003FFF
|
||||
_08080B9C: .4byte gUnk_080B7910
|
||||
_08080BA0: .4byte 0x0000B004
|
||||
_08080BA4: .4byte 0xFFFFC000
|
||||
_08080BA8: .4byte 0x00000FFF
|
||||
_08080BAC:
|
||||
adds r0, r0, r6
|
||||
adds r0, r0, r7
|
||||
_08080BB0:
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r1]
|
||||
adds r1, #1
|
||||
adds r2, #2
|
||||
adds r3, #1
|
||||
cmp r3, r5
|
||||
bls _08080B80
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
|
||||
thumb_func_start sub_08080BC4
|
||||
sub_08080BC4: @ 0x08080BC4
|
||||
push {r4, r5, r6, lr}
|
||||
ldr r3, _08080C40 @ =gRoomControls
|
||||
movs r0, #0xa
|
||||
ldrsh r1, [r3, r0]
|
||||
ldrh r0, [r3, #6]
|
||||
subs r5, r1, r0
|
||||
movs r2, #0xf
|
||||
ands r5, r2
|
||||
movs r1, #0xc
|
||||
ldrsh r0, [r3, r1]
|
||||
ldrh r1, [r3, #8]
|
||||
subs r0, r0, r1
|
||||
ands r0, r2
|
||||
adds r6, r0, #0
|
||||
adds r6, #8
|
||||
ldrh r2, [r3, #0x16]
|
||||
adds r4, r2, #0
|
||||
cmp r4, #0
|
||||
beq _08080C50
|
||||
subs r2, #1
|
||||
strh r2, [r3, #0x16]
|
||||
ldrb r0, [r3, #0x14]
|
||||
lsls r0, r0, #4
|
||||
movs r1, #0xe
|
||||
ands r2, r1
|
||||
adds r0, r0, r2
|
||||
ldr r1, _08080C44 @ =gUnk_080169A4
|
||||
adds r2, r0, r1
|
||||
ldr r4, _08080C48 @ =gUnk_02025EB0
|
||||
ldr r1, [r4]
|
||||
cmp r1, #0
|
||||
beq _08080C16
|
||||
movs r0, #0
|
||||
ldrsb r0, [r2, r0]
|
||||
adds r0, r0, r5
|
||||
strh r0, [r1, #2]
|
||||
ldr r1, [r4]
|
||||
movs r0, #1
|
||||
ldrsb r0, [r2, r0]
|
||||
adds r0, r0, r6
|
||||
strh r0, [r1, #4]
|
||||
_08080C16:
|
||||
ldr r4, _08080C4C @ =gUnk_0200B650
|
||||
ldr r1, [r4]
|
||||
cmp r1, #0
|
||||
beq _08080C30
|
||||
movs r0, #0
|
||||
ldrsb r0, [r2, r0]
|
||||
adds r0, r0, r5
|
||||
strh r0, [r1, #2]
|
||||
ldr r1, [r4]
|
||||
movs r0, #1
|
||||
ldrsb r0, [r2, r0]
|
||||
adds r0, r0, r6
|
||||
strh r0, [r1, #4]
|
||||
_08080C30:
|
||||
ldrb r1, [r2]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x24
|
||||
strb r1, [r0]
|
||||
ldrb r1, [r2, #1]
|
||||
adds r0, #1
|
||||
strb r1, [r0]
|
||||
b _08080C76
|
||||
.align 2, 0
|
||||
_08080C40: .4byte gRoomControls
|
||||
_08080C44: .4byte gUnk_080169A4
|
||||
_08080C48: .4byte gUnk_02025EB0
|
||||
_08080C4C: .4byte gUnk_0200B650
|
||||
_08080C50:
|
||||
ldr r0, _08080C78 @ =gUnk_02025EB0
|
||||
ldr r1, [r0]
|
||||
cmp r1, #0
|
||||
beq _08080C5E
|
||||
strh r5, [r1, #2]
|
||||
ldr r0, [r0]
|
||||
strh r6, [r0, #4]
|
||||
_08080C5E:
|
||||
ldr r0, _08080C7C @ =gUnk_0200B650
|
||||
ldr r1, [r0]
|
||||
cmp r1, #0
|
||||
beq _08080C6C
|
||||
strh r5, [r1, #2]
|
||||
ldr r0, [r0]
|
||||
strh r6, [r0, #4]
|
||||
_08080C6C:
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x24
|
||||
strb r4, [r0]
|
||||
adds r0, #1
|
||||
strb r4, [r0]
|
||||
_08080C76:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08080C78: .4byte gUnk_02025EB0
|
||||
_08080C7C: .4byte gUnk_0200B650
|
||||
|
||||
thumb_func_start sub_08080C80
|
||||
sub_08080C80: @ 0x08080C80
|
||||
push {r4, lr}
|
||||
bl sub_080197D4
|
||||
ldr r0, _08080CA8 @ =gMapDataBottom
|
||||
ldr r4, _08080CAC @ =gRoomControls
|
||||
ldrh r1, [r4, #0x1e]
|
||||
lsrs r1, r1, #4
|
||||
ldrh r2, [r4, #0x20]
|
||||
lsrs r2, r2, #4
|
||||
bl sub_0807C8B0
|
||||
ldr r0, _08080CB0 @ =gMapDataTop
|
||||
ldrh r1, [r4, #0x1e]
|
||||
lsrs r1, r1, #4
|
||||
ldrh r2, [r4, #0x20]
|
||||
lsrs r2, r2, #4
|
||||
bl sub_0807C8B0
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08080CA8: .4byte gMapDataBottom
|
||||
_08080CAC: .4byte gRoomControls
|
||||
_08080CB0: .4byte gMapDataTop
|
||||
|
||||
thumb_func_start sub_08080CB4
|
||||
sub_08080CB4: @ 0x08080CB4
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x58
|
||||
ldrb r0, [r4, #0xa]
|
||||
ldrb r1, [r1]
|
||||
cmp r0, r1
|
||||
beq _08080CF0
|
||||
adds r1, r0, #0
|
||||
adds r0, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0x5c
|
||||
beq _08080CD4
|
||||
b _08080E00
|
||||
_08080CD4:
|
||||
ldrb r0, [r4, #0xb]
|
||||
lsls r0, r0, #3
|
||||
ldr r1, _08080CEC @ =gUnk_080C9CBC
|
||||
adds r0, r0, r1
|
||||
ldrb r0, [r0]
|
||||
movs r1, #0xf
|
||||
ands r1, r0
|
||||
lsls r0, r0, #4
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x1a]
|
||||
b _08080E00
|
||||
.align 2, 0
|
||||
_08080CEC: .4byte gUnk_080C9CBC
|
||||
_08080CF0:
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
ldrb r0, [r4, #0x18]
|
||||
lsls r0, r0, #0x1e
|
||||
cmp r0, #0
|
||||
bne _08080D00
|
||||
b _08080E00
|
||||
_08080D00:
|
||||
ldrb r0, [r4, #0xa]
|
||||
subs r0, #0x40
|
||||
cmp r0, #0x22
|
||||
bhi _08080E00
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _08080D14 @ =_08080D18
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08080D14: .4byte _08080D18
|
||||
_08080D18: @ jump table
|
||||
.4byte _08080DEE @ case 0
|
||||
.4byte _08080DEE @ case 1
|
||||
.4byte _08080DEE @ case 2
|
||||
.4byte _08080DEE @ case 3
|
||||
.4byte _08080E00 @ case 4
|
||||
.4byte _08080E00 @ case 5
|
||||
.4byte _08080E00 @ case 6
|
||||
.4byte _08080E00 @ case 7
|
||||
.4byte _08080E00 @ case 8
|
||||
.4byte _08080E00 @ case 9
|
||||
.4byte _08080E00 @ case 10
|
||||
.4byte _08080E00 @ case 11
|
||||
.4byte _08080E00 @ case 12
|
||||
.4byte _08080E00 @ case 13
|
||||
.4byte _08080E00 @ case 14
|
||||
.4byte _08080E00 @ case 15
|
||||
.4byte _08080E00 @ case 16
|
||||
.4byte _08080E00 @ case 17
|
||||
.4byte _08080E00 @ case 18
|
||||
.4byte _08080E00 @ case 19
|
||||
.4byte _08080E00 @ case 20
|
||||
.4byte _08080E00 @ case 21
|
||||
.4byte _08080E00 @ case 22
|
||||
.4byte _08080E00 @ case 23
|
||||
.4byte _08080E00 @ case 24
|
||||
.4byte _08080E00 @ case 25
|
||||
.4byte _08080E00 @ case 26
|
||||
.4byte _08080E00 @ case 27
|
||||
.4byte _08080DEE @ case 28
|
||||
.4byte _08080E00 @ case 29
|
||||
.4byte _08080E00 @ case 30
|
||||
.4byte _08080E00 @ case 31
|
||||
.4byte _08080DA4 @ case 32
|
||||
.4byte _08080E00 @ case 33
|
||||
.4byte _08080DEE @ case 34
|
||||
_08080DA4:
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x6a
|
||||
ldrb r0, [r5]
|
||||
cmp r0, #0
|
||||
beq _08080DB4
|
||||
subs r0, #1
|
||||
strb r0, [r5]
|
||||
b _08080E00
|
||||
_08080DB4:
|
||||
bl Random
|
||||
movs r1, #0x1f
|
||||
ands r0, r1
|
||||
adds r0, #0xa
|
||||
strb r0, [r5]
|
||||
adds r0, r4, #0
|
||||
movs r1, #7
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _08080E00
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x62
|
||||
ldrb r0, [r0]
|
||||
adds r2, r1, #0
|
||||
adds r2, #0x62
|
||||
strb r0, [r2]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x63
|
||||
ldrb r0, [r0]
|
||||
adds r2, #1
|
||||
strb r0, [r2]
|
||||
adds r0, r4, #0
|
||||
bl ResolveEntityOnTop
|
||||
b _08080E00
|
||||
_08080DEE:
|
||||
ldr r0, _08080E04 @ =gScreenTransition
|
||||
ldr r0, [r0]
|
||||
movs r1, #0xf
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _08080E00
|
||||
adds r0, r4, #0
|
||||
bl CreateSparkle
|
||||
_08080E00:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_08080E04: .4byte gScreenTransition
|
1593
asm/itemOnGround.s
1593
asm/itemOnGround.s
File diff suppressed because it is too large
Load Diff
|
@ -99,10 +99,7 @@ typedef struct Entity {
|
|||
/*0x45*/ u8 currentHealth;
|
||||
/*0x46*/ u16 field_0x46;
|
||||
/*0x48*/ BoundingBox* boundingBox;
|
||||
/*0x4c*/ u8 field_0x4c;
|
||||
/*0x4d*/ u8 field_0x4d;
|
||||
/*0x4e*/ u8 field_0x4e;
|
||||
/*0x4f*/ u8 field_0x4f;
|
||||
/*0x4c*/ struct Entity* field_0x4c;
|
||||
/*0x50*/ struct Entity* parent;
|
||||
/*0x54*/ struct Entity* attachedEntity;
|
||||
/*0x58*/ u8 animIndex;
|
||||
|
@ -125,7 +122,7 @@ typedef struct Entity {
|
|||
/*0x68*/ union SplitHWord field_0x68;
|
||||
/*0x6a*/ union SplitHWord field_0x6a;
|
||||
/*0x6c*/ union SplitHWord field_0x6c;
|
||||
/*0x6e*/ u8 filler4[2];
|
||||
/*0x6e*/ union SplitHWord field_0x6e;
|
||||
/*0x70*/ union SplitWord field_0x70;
|
||||
/*0x74*/ union SplitHWord field_0x74;
|
||||
/*0x76*/ union SplitHWord field_0x76;
|
||||
|
|
|
@ -221,7 +221,7 @@ extern u32 sub_0807CF88(u32, u8*);
|
|||
extern u32 sub_0807D008(u32, void*);
|
||||
extern void sub_0807D184(u32, char*);
|
||||
extern u32 sub_0806F520();
|
||||
extern void sub_0806F4E8();
|
||||
extern void sub_0806F4E8(Entity*);
|
||||
extern u32 sub_0806F3E4(Entity*);
|
||||
extern void sub_0804A7D4(Entity*);
|
||||
extern void sub_08033744(Entity*);
|
||||
|
@ -262,4 +262,9 @@ extern void sub_08004542(Entity*);
|
|||
extern void sub_08077B20();
|
||||
extern u32 sub_080040A8(Entity*);
|
||||
extern u32 sub_08017850(Entity*);
|
||||
extern void sub_080809D4(void);
|
||||
extern void sub_08080CB4(Entity*);
|
||||
extern u32 GetTileTypeByEntity(Entity*);
|
||||
extern u32 sub_0800442E(Entity*);
|
||||
extern void sub_08081404(Entity*, u32);
|
||||
#endif
|
||||
|
|
|
@ -12,32 +12,34 @@ typedef struct {
|
|||
*/
|
||||
|
||||
typedef struct {
|
||||
u16 unk2;
|
||||
u8 unk3;
|
||||
u8 unk4;
|
||||
u8 areaID;
|
||||
u8 roomID;
|
||||
u16 roomOriginX;
|
||||
u16 roomOriginY;
|
||||
s16 roomScrollX;
|
||||
s16 roomScrollY;
|
||||
u8 unk5;
|
||||
u8 unk6;
|
||||
u8 filler[4];
|
||||
u8 screenShakeMagnitude;
|
||||
u8 unk7;
|
||||
u16 screenShakeTime;
|
||||
u16 filler2[3];
|
||||
u16 width;
|
||||
u16 height;
|
||||
u8 filler3[6];
|
||||
union SplitWord bg3OffsetX;
|
||||
union SplitWord bg3OffsetY;
|
||||
Entity* cameraTarget;
|
||||
/*0x00*/ u16 unk2;
|
||||
/*0x02*/ u8 unk3;
|
||||
/*0x03*/ u8 unk4;
|
||||
/*0x04*/ u8 areaID;
|
||||
/*0x05*/ u8 roomID;
|
||||
/*0x06*/ u16 roomOriginX;
|
||||
/*0x08*/ u16 roomOriginY;
|
||||
/*0x0A*/ s16 roomScrollX;
|
||||
/*0x0C*/ s16 roomScrollY;
|
||||
/*0x0E*/ u8 unk5;
|
||||
/*0x0F*/ u8 unk6;
|
||||
/*0x10*/ u8 filler[4];
|
||||
/*0x14*/ u8 screenShakeMagnitude;
|
||||
/*0x15*/ u8 unk7;
|
||||
/*0x16*/ u16 screenShakeTime;
|
||||
/*0x18*/ u16 filler2[3];
|
||||
/*0x1E*/ u16 width;
|
||||
/*0x20*/ u16 height;
|
||||
/*0x22*/ u8 filler3[6];
|
||||
/*0x28*/ union SplitWord bg3OffsetX;
|
||||
/*0x2C*/ union SplitWord bg3OffsetY;
|
||||
/*0x30*/ Entity* cameraTarget;
|
||||
} RoomControls;
|
||||
|
||||
typedef struct {
|
||||
u8 filler[6];
|
||||
u8 filler[4];
|
||||
u8 field_0x4;
|
||||
u8 filler1[1];
|
||||
u8 itemForSaleIndex;
|
||||
u8 field_0x7;
|
||||
u8 field_0x8;
|
||||
|
|
|
@ -669,8 +669,9 @@ SECTIONS {
|
|||
src/code_0807CC3C.o(.text);
|
||||
asm/code_0807CC3C.o(.text);
|
||||
src/code_0808091C.o(.text);
|
||||
asm/code_0808091C.o(.text);
|
||||
/* objects */
|
||||
asm/itemOnGround.o(.text);
|
||||
src/object/itemOnGround.o(.text);
|
||||
asm/deathFx.o(.text);
|
||||
asm/itemForSale.o(.text);
|
||||
src/object/button.o(.text);
|
||||
|
|
|
@ -5,10 +5,12 @@
|
|||
#include "room.h"
|
||||
|
||||
extern void sub_0805E5A8();
|
||||
extern void sub_08080BC4(void);
|
||||
|
||||
extern RoomControls gRoomControls;
|
||||
extern u32 gUnk_0200B650;
|
||||
extern u32 gUnk_02025EB0;
|
||||
extern u8 gUnk_02000070;
|
||||
|
||||
extern void DoExitTransition(ScreenTransitionData*);
|
||||
extern void sub_080809D4();
|
||||
|
@ -53,7 +55,6 @@ void sub_08080930(void)
|
|||
}
|
||||
|
||||
u32* GetLayerByIndex(u32 param_1)
|
||||
|
||||
{
|
||||
|
||||
if (param_1 == 2) {
|
||||
|
@ -64,9 +65,79 @@ u32* GetLayerByIndex(u32 param_1)
|
|||
}
|
||||
|
||||
void sub_08080964(u16 time, u32 magnitude)
|
||||
|
||||
{
|
||||
gRoomControls.screenShakeTime = time;
|
||||
gRoomControls.screenShakeMagnitude = magnitude & 7;
|
||||
return;
|
||||
}
|
||||
|
||||
void sub_08080974(u32 arg0, u32 arg1) {
|
||||
u32 var0, var1;
|
||||
RoomControls* roomControls = &gRoomControls;
|
||||
|
||||
var0 = roomControls->roomOriginX;
|
||||
if (arg0 <= var0 + 120) {
|
||||
roomControls->roomScrollX = var0;
|
||||
} else {
|
||||
var0 += roomControls->width;
|
||||
var1 = var0 - 120;
|
||||
if (arg0 < var1) {
|
||||
var1 = arg0;
|
||||
}
|
||||
roomControls->roomScrollX = var1 - 120;
|
||||
}
|
||||
|
||||
var0 = roomControls->roomOriginY;
|
||||
if (arg1 <= var0 + 80) {
|
||||
roomControls->roomScrollY = var0;
|
||||
} else {
|
||||
var0 += roomControls->height;
|
||||
var1 = var0 - 80;
|
||||
if (arg1 < var1) {
|
||||
var1 = arg1;
|
||||
}
|
||||
roomControls->roomScrollY = var1 - 80;
|
||||
}
|
||||
|
||||
sub_080809D4();
|
||||
gUnk_02000070 = 1;
|
||||
}
|
||||
|
||||
void sub_080809D4(void) {
|
||||
register Entity* target asm("r4");
|
||||
int x, y;
|
||||
int var1, var0;
|
||||
RoomControls* roomControls = &gRoomControls;
|
||||
roomControls->unk6 &= 0xFB;
|
||||
|
||||
target = roomControls->cameraTarget;
|
||||
x = target->x.HALF.HI;
|
||||
var0 = roomControls->roomOriginX;
|
||||
if (x <= var0 + 120) {
|
||||
roomControls->roomScrollX = var0;
|
||||
} else {
|
||||
var0 += roomControls->width;
|
||||
var1 = var0 - 120;
|
||||
if (x < var1) {
|
||||
var1 = (u16)target->x.HALF.HI;
|
||||
}
|
||||
roomControls->roomScrollX = var1 - 120;
|
||||
}
|
||||
|
||||
target = roomControls->cameraTarget;
|
||||
y = target->y.HALF.HI;
|
||||
var0 = roomControls->roomOriginY;
|
||||
if (y <= var0 + 80) {
|
||||
roomControls->roomScrollY = var0;
|
||||
} else {
|
||||
var0 += roomControls->height;
|
||||
var1 = var0 - 80;
|
||||
if (y < var1) {
|
||||
var1 = (u16)target->y.HALF.HI;
|
||||
}
|
||||
roomControls->roomScrollY = var1 - 80;
|
||||
}
|
||||
|
||||
sub_08080BC4();
|
||||
gUnk_02000070 = 1;
|
||||
}
|
||||
|
|
|
@ -316,8 +316,8 @@ void sub_08031E48(Entity* this, Entity* child) {
|
|||
child->field_0x6c.HALF.LO = this->field_0x6c.HALF.LO;
|
||||
child->field_0x70.HALF.LO = this->field_0x70.HALF.LO;
|
||||
child->field_0x70.HALF.HI = this->field_0x70.HALF.HI;
|
||||
child->filler4[0] = this->filler4[0];
|
||||
child->filler4[1] = this->filler4[1];
|
||||
child->field_0x6e.HALF.LO = this->field_0x6e.HALF.LO;
|
||||
child->field_0x6e.HALF.HI = this->field_0x6e.HALF.HI;
|
||||
child->field_0x7c.WORD = (s32)this;
|
||||
}
|
||||
|
||||
|
|
|
@ -186,7 +186,6 @@ void sub_08023330(Entity* this) {
|
|||
}
|
||||
}
|
||||
|
||||
extern u32 GetTileTypeByEntity(Entity*);
|
||||
void sub_08023A68(Entity*);
|
||||
void sub_08023AB0(Entity*);
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@ extern const s8 gUnk_080CA5D4[];
|
|||
void sub_080205F8(Entity*);
|
||||
void sub_08020604(Entity*);
|
||||
|
||||
extern u32 sub_0800442E(Entity*);
|
||||
extern u32 sub_08049F1C(Entity*, Entity*, u32);
|
||||
extern void sub_0804AA1C(Entity*);
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ void sub_08033650(Entity* this) {
|
|||
}
|
||||
|
||||
void sub_08033658(Entity* this) {
|
||||
sub_0806F4E8();
|
||||
sub_0806F4E8(this);
|
||||
}
|
||||
|
||||
void sub_08033660(Entity* this) {
|
||||
|
|
|
@ -0,0 +1,442 @@
|
|||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "flags.h"
|
||||
#include "functions.h"
|
||||
#include "player.h"
|
||||
|
||||
static void sub_08081150(Entity*);
|
||||
static u8 sub_0808147C(u32);
|
||||
static void sub_080814A4(Entity*);
|
||||
static u32 sub_080814C0(Entity*);
|
||||
static void sub_08081500(Entity*);
|
||||
static void sub_0808153C(Entity*);
|
||||
static void sub_08081598(Entity*);
|
||||
static void sub_080813BC(Entity*);
|
||||
static void sub_080810FC(Entity*);
|
||||
static bool32 CheckShouldPlayItemGetCutscene(Entity*);
|
||||
|
||||
extern u32 sub_080002D0(Entity*);
|
||||
extern u32 sub_080177A0(Entity*, Entity*);
|
||||
extern void GiveItem(u32, u32);
|
||||
extern u32 sub_0805E40C(Entity*);
|
||||
|
||||
extern void (*const gUnk_0811E7D4[])(Entity*);
|
||||
extern void (*const gUnk_0811E7E8[])(Entity*);
|
||||
extern void (*const gUnk_0811E814[])(Entity*);
|
||||
extern void (*const gUnk_0811E840[])(Entity*);
|
||||
extern BoundingBox gUnk_080FD1A8;
|
||||
|
||||
typedef struct {
|
||||
u8 unk0[3];
|
||||
u8 unk3;
|
||||
u8 unk4[4];
|
||||
} Unk_080FD5B4;
|
||||
|
||||
extern const Unk_080FD5B4 gUnk_080FD5B4[];
|
||||
|
||||
typedef struct {
|
||||
u8 unk0[2];
|
||||
u16 sfx;
|
||||
u8 unk4;
|
||||
u8 unk5[3];
|
||||
} Unk_0811E84C;
|
||||
|
||||
extern const Unk_0811E84C gUnk_0811E84C[];
|
||||
|
||||
void ItemOnGround(Entity* this) {
|
||||
if (this->bitfield & 0x80) {
|
||||
switch (this->bitfield & 0x7F) {
|
||||
case 20:
|
||||
this->action = 3;
|
||||
this->flags &= 0x7F;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
this->field_0x3c |= 0x10;
|
||||
this->attachedEntity = this->field_0x4c;
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 8:
|
||||
case 9:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
case 30:
|
||||
sub_08081598(this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (sub_0806F520(this)) {
|
||||
sub_080813BC(this);
|
||||
} else {
|
||||
gUnk_0811E7D4[this->action](this);
|
||||
}
|
||||
|
||||
if (this->entityType.form == 0x5C) {
|
||||
gRoomVars.field_0x4++;
|
||||
}
|
||||
|
||||
sub_08080CB4(this);
|
||||
}
|
||||
|
||||
void sub_08080F20(Entity* this) {
|
||||
if (this->field_0x86 && CheckFlags(this->field_0x86)) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
if (this->entityType.form != 0x60) {
|
||||
this->spriteSettings.b.draw = 1;
|
||||
this->spritePriority.b1 = 3;
|
||||
this->spriteSettings.b.shadow = 0;
|
||||
this->damageType = 7;
|
||||
this->field_0x3c = 0x47;
|
||||
this->field_0x40 = 0x44;
|
||||
this->currentHealth = 0xFF;
|
||||
this->boundingBox = &gUnk_080FD1A8;
|
||||
switch (this->entityType.form - 0x3F) {
|
||||
case 0:
|
||||
case 21:
|
||||
case 22:
|
||||
case 23:
|
||||
case 24:
|
||||
case 25:
|
||||
case 29:
|
||||
case 30:
|
||||
case 31:
|
||||
case 32:
|
||||
this->flags2 = 0x17;
|
||||
break;
|
||||
default:
|
||||
this->flags2 = 0x11;
|
||||
break;
|
||||
}
|
||||
|
||||
this->field_0x68.HALF.HI = this->actionDelay;
|
||||
this->field_0x6a.HALF.LO = 0;
|
||||
this->field_0x6c.HWORD = 0;
|
||||
this->field_0x68.HALF.LO = 0;
|
||||
this->actionDelay = 0;
|
||||
sub_0805E3A0(this, 3);
|
||||
this->field_0x1c = sub_0808147C(this->entityType.form);
|
||||
gUnk_0811E7E8[this->field_0x68.HALF.HI](this);
|
||||
} else {
|
||||
Entity* entity = CreateObject(0x40, 0x60, 0);
|
||||
if (entity) {
|
||||
entity->actionDelay = 0;
|
||||
if (this->actionDelay == 1) {
|
||||
entity->entityType.parameter = 2;
|
||||
}
|
||||
|
||||
CopyPosition(this, entity);
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_080810A8(Entity* this) {
|
||||
this->action = 1;
|
||||
sub_080814A4(this);
|
||||
if (this->direction & 0x80) {
|
||||
this->direction &= 0x1F;
|
||||
if (this->nonPlanarMovement == 0) {
|
||||
this->nonPlanarMovement = 0x100;
|
||||
}
|
||||
} else {
|
||||
this->direction |= 0xFF;
|
||||
}
|
||||
|
||||
if (this->field_0x20 == 0) {
|
||||
this->field_0x20 = 0x1E000;
|
||||
}
|
||||
|
||||
if (this->collisionLayer == 2) {
|
||||
sub_08016A30(this);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_080810FC(Entity* this) {
|
||||
if (this->entityType.form != 0x5F) {
|
||||
sub_08081598(this);
|
||||
} else {
|
||||
this->action = 2;
|
||||
this->previousActionFlag = 0;
|
||||
this->flags |= 0x80;
|
||||
this->flags2 = 0x11;
|
||||
CopyPosition(&gPlayerEntity, this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08081134(Entity* this) {
|
||||
sub_080814A4(this);
|
||||
this->field_0x6c.HWORD += 80;
|
||||
sub_08081150(this);
|
||||
}
|
||||
|
||||
static void sub_08081150(Entity* this) {
|
||||
this->action = 2;
|
||||
this->flags |= 0x80;
|
||||
this->height.HALF.HI = -0x80;
|
||||
this->spriteOrientation.flipY = 1;
|
||||
this->spriteRendering.b3 = 1;
|
||||
PlaySFX(0x12D);
|
||||
}
|
||||
|
||||
static void sub_08081188(Entity* this) {
|
||||
this->action = 2;
|
||||
this->flags |= 0x80;
|
||||
if (this->collisionLayer == 2) {
|
||||
sub_08016A30(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080811AC(Entity* this) {
|
||||
this->action = 2;
|
||||
this->spriteSettings.b.draw = 0;
|
||||
this->field_0x6e.HWORD = GetTileTypeByEntity(this);
|
||||
}
|
||||
|
||||
void sub_080811C8(Entity* this) {
|
||||
this->action = 2;
|
||||
this->spriteSettings.b.draw = 0;
|
||||
}
|
||||
|
||||
void sub_080811D8(Entity* this) {
|
||||
sub_08081188(this);
|
||||
PlaySFX(0x215);
|
||||
}
|
||||
|
||||
void sub_080811EC(Entity* this) {
|
||||
if (this->field_0x68.HALF.HI != 6) {
|
||||
sub_080AEFE0(this);
|
||||
} else {
|
||||
sub_0806F69C(this);
|
||||
}
|
||||
|
||||
sub_08003FC4(this, 0x2800);
|
||||
if (this->field_0x20 <= 0) {
|
||||
this->action = 2;
|
||||
this->flags |= 0x80;
|
||||
sub_080814A4(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0808122C(Entity* this) {
|
||||
gUnk_0811E814[this->field_0x68.HALF.HI](this);
|
||||
}
|
||||
|
||||
void sub_08081248(Entity* this) {
|
||||
sub_08081500(this);
|
||||
if (sub_080814C0(this)) {
|
||||
sub_08081404(this, 0);
|
||||
} else {
|
||||
sub_0800442E(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0808126C(Entity* this) {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
sub_0808153C(this);
|
||||
}
|
||||
|
||||
void sub_0808127C(Entity* this) {
|
||||
if (sub_080814C0(this)) {
|
||||
sub_08081404(this, 0);
|
||||
} else {
|
||||
sub_0808153C(this);
|
||||
}
|
||||
}
|
||||
|
||||
void nullsub_113(Entity* this) {
|
||||
}
|
||||
|
||||
void sub_080812A0(Entity* this) {
|
||||
sub_08081500(this);
|
||||
}
|
||||
|
||||
void sub_080812A8(Entity* this) {
|
||||
if (sub_080002D0(this) != 0xF && this->field_0x6e.HWORD != GetTileTypeByEntity(this)) {
|
||||
this->direction = 0;
|
||||
this->nonPlanarMovement = 0;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
this->field_0x68.HALF.HI = 0;
|
||||
sub_080810A8(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080812E8(Entity* this) {
|
||||
PlayerState* playerState = &gPlayerState;
|
||||
if ((playerState->swimState & 0x80) &&
|
||||
!(playerState->flags.all & 0x80) &&
|
||||
sub_080177A0(this, &gPlayerEntity)) {
|
||||
sub_080810FC(this);
|
||||
}
|
||||
}
|
||||
|
||||
void nullsub_510(Entity* this) {
|
||||
}
|
||||
|
||||
void sub_08081328(Entity* this) {
|
||||
Entity* other = this->attachedEntity;
|
||||
if (!(other->entityType.type == 8 && other->entityType.subtype == 3)) {
|
||||
sub_08081404(this, 0);
|
||||
} else {
|
||||
CopyPosition(other, this);
|
||||
this->height.HALF.HI--;
|
||||
other = &gPlayerEntity;
|
||||
if (sub_080177A0(this, other)) {
|
||||
sub_080810FC(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0808136C(Entity* this) {
|
||||
if (--this->actionDelay) {
|
||||
Entity* other = this->attachedEntity;
|
||||
this->x.WORD = other->x.WORD;
|
||||
this->y.WORD = other->y.WORD;
|
||||
this->spriteOrientation.flipY = other->spriteOrientation.flipY;
|
||||
this->spriteRendering.b3 = other->spriteRendering.b3;
|
||||
sub_08003FC4(this, 0x2800);
|
||||
} else {
|
||||
sub_08081404(this, 1);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_080813BC(Entity* this) {
|
||||
gUnk_0811E840[this->previousActionFlag](this);
|
||||
}
|
||||
|
||||
void sub_080813D4(Entity* this) {
|
||||
this->previousActionFlag = 1;
|
||||
this->field_0x1d = 1;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
}
|
||||
|
||||
void sub_080813E8(Entity* this) {
|
||||
sub_0806F4E8(this);
|
||||
}
|
||||
|
||||
void sub_080813F0(Entity* this) {
|
||||
if (sub_0806F3E4(this)) {
|
||||
sub_080810FC(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08081404(Entity* this, u32 arg1) {
|
||||
if (arg1 && this->field_0x86) {
|
||||
SetFlag(this->field_0x86);
|
||||
}
|
||||
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
bool32 sub_08081420(Entity* this) {
|
||||
if (CheckShouldPlayItemGetCutscene(this)) {
|
||||
sub_0805E3A0(this, 6);
|
||||
CreateItemEntity(this->entityType.form, this->entityType.parameter, 0);
|
||||
return TRUE;
|
||||
} else {
|
||||
GiveItem(this->entityType.form, this->entityType.parameter);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 CheckShouldPlayItemGetCutscene(Entity* this) {
|
||||
bool32 result = FALSE;
|
||||
if ((gUnk_080FD5B4[this->entityType.form].unk0[3] & 0x2) || !GetInventoryValue(this->entityType.form)) {
|
||||
result = TRUE;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static u8 sub_0808147C(u32 arg0) {
|
||||
const Unk_0811E84C* var0 = &gUnk_0811E84C[arg0];
|
||||
return var0->unk4;
|
||||
}
|
||||
|
||||
void sub_0808148C(u32 arg0) {
|
||||
const Unk_0811E84C* var0 = &gUnk_0811E84C[arg0];
|
||||
if (var0->sfx) {
|
||||
PlaySFX(var0->sfx);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_080814A4(Entity* this) {
|
||||
if (this->field_0x68.HALF.HI == 10) {
|
||||
this->field_0x6c.HWORD = 120;
|
||||
} else {
|
||||
this->field_0x6c.HWORD = 600;
|
||||
}
|
||||
}
|
||||
|
||||
static u32 sub_080814C0(Entity* this) {
|
||||
if (!sub_0805E40C(this)) {
|
||||
if (--this->field_0x6c.HWORD == 0) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (this->field_0x6c.HWORD < 90) {
|
||||
this->spriteSettings.b.draw ^= 1;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_08081500(Entity* this) {
|
||||
if (this->field_0x68.HALF.LO == 0) {
|
||||
u32 var0 = sub_080044EC(this, 0x2800);
|
||||
if (var0 == 0) {
|
||||
this->field_0x68.HALF.LO = 1;
|
||||
} else {
|
||||
if (var0 == 1) {
|
||||
sub_0808148C(this->entityType.form);
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
}
|
||||
|
||||
sub_080AEFE0(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_0808153C(Entity* this) {
|
||||
if (this->field_0x68.HALF.LO > 1)
|
||||
return;
|
||||
|
||||
if (this->field_0x68.HALF.LO == 0) {
|
||||
if (!sub_08003FC4(this, 0x1000) && !sub_0800442E(this)) {
|
||||
this->field_0x68.HALF.LO = 1;
|
||||
this->field_0x20 = 0x1E000;
|
||||
sub_0808148C(this->entityType.form);
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
}
|
||||
} else {
|
||||
if (!sub_08003FC4(this, 0x2800)) {
|
||||
this->field_0x68.HALF.LO = 2;
|
||||
sub_0808148C(this->entityType.form);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_08081598(Entity* this) {
|
||||
if (this->currentHealth == 0) {
|
||||
sub_08081404(this, 1);
|
||||
}
|
||||
|
||||
this->flags &= 0x7F;
|
||||
this->action = 4;
|
||||
this->actionDelay = 14;
|
||||
this->field_0x20 = 0x20000;
|
||||
this->spriteSettings.b.draw = 1;
|
||||
this->spritePriority.b1 = 2;
|
||||
this->spritePriority.b0 = 3;
|
||||
this->attachedEntity = &gPlayerEntity;
|
||||
CopyPosition(this->attachedEntity, this);
|
||||
this->height.HALF.HI -= 4;
|
||||
if (this->entityType.form != 0x5F && sub_08081420(this)) {
|
||||
sub_08081404(this, 1);
|
||||
}
|
||||
}
|
|
@ -18,11 +18,9 @@ extern BoundingBox gUnk_080FD340; // TODO: should be const
|
|||
|
||||
extern u32 sub_08016A30(Entity*);
|
||||
extern u32 sub_080001DA(u32, u32);
|
||||
extern u32 GetTileTypeByEntity(Entity*);
|
||||
extern void sub_08078930(Entity*);
|
||||
extern u32 sub_080002B8(Entity*);
|
||||
extern void sub_08016A6C(Entity*);
|
||||
extern u32 sub_0800442E(Entity*);
|
||||
|
||||
void Pot(Entity* this) {
|
||||
gUnk_0811F090[this->action](this);
|
||||
|
|
Loading…
Reference in New Issue