mirror of https://github.com/zeldaret/tmc.git
Decompile PushableRock
This commit is contained in:
parent
d34aa9166f
commit
ff7147e9da
|
|
@ -1,269 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start PushableRock
|
||||
PushableRock: @ 0x0808A4F4
|
||||
push {lr}
|
||||
ldr r2, _0808A508 @ =gUnk_08121078
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0808A508: .4byte gUnk_08121078
|
||||
|
||||
thumb_func_start sub_0808A50C
|
||||
sub_0808A50C: @ 0x0808A50C
|
||||
push {lr}
|
||||
ldrb r2, [r0, #0x18]
|
||||
movs r1, #4
|
||||
rsbs r1, r1, #0
|
||||
ands r1, r2
|
||||
movs r2, #1
|
||||
orrs r1, r2
|
||||
strb r1, [r0, #0x18]
|
||||
ldrb r1, [r0, #0xc]
|
||||
adds r1, #1
|
||||
strb r1, [r0, #0xc]
|
||||
ldrb r2, [r0, #0x19]
|
||||
movs r1, #0x3f
|
||||
ands r1, r2
|
||||
movs r2, #0x80
|
||||
orrs r1, r2
|
||||
strb r1, [r0, #0x19]
|
||||
adds r3, r0, #0
|
||||
adds r3, #0x29
|
||||
ldrb r2, [r3]
|
||||
movs r1, #8
|
||||
rsbs r1, r1, #0
|
||||
ands r1, r2
|
||||
movs r2, #4
|
||||
orrs r1, r2
|
||||
movs r2, #0x39
|
||||
rsbs r2, r2, #0
|
||||
ands r1, r2
|
||||
movs r2, #0x18
|
||||
orrs r1, r2
|
||||
strb r1, [r3]
|
||||
bl sub_0808A644
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_0808A550
|
||||
sub_0808A550: @ 0x0808A550
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r0, #0x74
|
||||
ldrh r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x38
|
||||
ldrb r1, [r1]
|
||||
bl GetTileType
|
||||
adds r1, r0, #0
|
||||
ldr r0, _0808A58C @ =0x0000401F
|
||||
cmp r1, r0
|
||||
bhi _0808A5CC
|
||||
subs r0, #3
|
||||
cmp r1, r0
|
||||
blo _0808A5CC
|
||||
adds r0, r1, #0
|
||||
subs r0, #0x1c
|
||||
lsls r1, r0, #1
|
||||
strb r1, [r4, #0x14]
|
||||
lsls r1, r0, #3
|
||||
strb r1, [r4, #0x15]
|
||||
lsls r0, r0, #0x19
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #2
|
||||
bne _0808A590
|
||||
ldrb r0, [r4, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
b _0808A598
|
||||
.align 2, 0
|
||||
_0808A58C: .4byte 0x0000401F
|
||||
_0808A590:
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
_0808A598:
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x70
|
||||
ldrh r0, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x74
|
||||
ldrh r1, [r1]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0x14]
|
||||
lsrs r1, r1, #1
|
||||
adds r1, #1
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
ldr r0, _0808A5C8 @ =0x0000010F
|
||||
bl EnqueueSFX
|
||||
b _0808A5DE
|
||||
.align 2, 0
|
||||
_0808A5C8: .4byte 0x0000010F
|
||||
_0808A5CC:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x58
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _0808A5DE
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl InitializeAnimation
|
||||
_0808A5DE:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0808A5E0
|
||||
sub_0808A5E0: @ 0x0808A5E0
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_0800445C
|
||||
ldr r2, _0808A618 @ =gUnk_08121088
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x5a
|
||||
ldrb r1, [r5]
|
||||
movs r0, #0xf
|
||||
ands r0, r1
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r2
|
||||
ldrh r0, [r0]
|
||||
strh r0, [r4, #0x24]
|
||||
adds r0, r4, #0
|
||||
bl LinearMoveUpdate
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
ldrb r1, [r5]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0808A616
|
||||
movs r0, #0
|
||||
strb r0, [r4, #0xc]
|
||||
_0808A616:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0808A618: .4byte gUnk_08121088
|
||||
|
||||
thumb_func_start sub_0808A61C
|
||||
sub_0808A61C: @ 0x0808A61C
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0808A634
|
||||
adds r0, r2, #0
|
||||
bl GetNextFrame
|
||||
b _0808A640
|
||||
_0808A634:
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x29
|
||||
ldrb r1, [r0]
|
||||
movs r2, #7
|
||||
orrs r1, r2
|
||||
strb r1, [r0]
|
||||
_0808A640:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0808A644
|
||||
sub_0808A644: @ 0x0808A644
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r4, r0]
|
||||
ldr r2, _0808A6D0 @ =gRoomControls
|
||||
ldrh r0, [r2, #6]
|
||||
subs r1, r1, r0
|
||||
asrs r1, r1, #4
|
||||
movs r3, #0x3f
|
||||
ands r1, r3
|
||||
movs r5, #0x32
|
||||
ldrsh r0, [r4, r5]
|
||||
ldrh r2, [r2, #8]
|
||||
subs r0, r0, r2
|
||||
asrs r0, r0, #4
|
||||
ands r0, r3
|
||||
lsls r0, r0, #6
|
||||
orrs r1, r0
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x74
|
||||
strh r1, [r5]
|
||||
ldrh r0, [r5]
|
||||
adds r6, r4, #0
|
||||
adds r6, #0x38
|
||||
ldrb r1, [r6]
|
||||
bl GetTileIndex
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x70
|
||||
strh r0, [r1]
|
||||
ldrh r0, [r5]
|
||||
ldrb r1, [r6]
|
||||
bl sub_080002E0
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x72
|
||||
strb r0, [r1]
|
||||
ldrh r0, [r5]
|
||||
ldrb r1, [r6]
|
||||
bl sub_080002C8
|
||||
cmp r0, #0x19
|
||||
beq _0808A69E
|
||||
cmp r0, #0xf0
|
||||
bne _0808A6E2
|
||||
_0808A69E:
|
||||
ldr r0, _0808A6D4 @ =0x00004015
|
||||
ldrh r1, [r5]
|
||||
ldrb r2, [r6]
|
||||
bl SetTile
|
||||
movs r0, #3
|
||||
strb r0, [r4, #0xc]
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x86
|
||||
ldrh r0, [r5]
|
||||
bl CheckFlags
|
||||
cmp r0, #0
|
||||
bne _0808A6D8
|
||||
ldrh r0, [r5]
|
||||
bl SetFlag
|
||||
movs r0, #0xcd
|
||||
bl SoundReq
|
||||
adds r0, r4, #0
|
||||
movs r1, #5
|
||||
bl InitializeAnimation
|
||||
b _0808A6EC
|
||||
.align 2, 0
|
||||
_0808A6D0: .4byte gRoomControls
|
||||
_0808A6D4: .4byte 0x00004015
|
||||
_0808A6D8:
|
||||
adds r0, r4, #0
|
||||
movs r1, #6
|
||||
bl InitializeAnimation
|
||||
b _0808A6EC
|
||||
_0808A6E2:
|
||||
ldr r0, _0808A6F0 @ =0x0000401B
|
||||
ldrh r1, [r5]
|
||||
ldrb r2, [r6]
|
||||
bl SetTile
|
||||
_0808A6EC:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0808A6F0: .4byte 0x0000401B
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_08121078:: @ 08121078
|
||||
.4byte sub_0808A50C
|
||||
.4byte sub_0808A550
|
||||
.4byte sub_0808A5E0
|
||||
.4byte sub_0808A61C
|
||||
|
||||
gUnk_08121088:: @ 08121088
|
||||
.incbin "pushableRock/gUnk_08121088.bin"
|
||||
|
|
@ -165,4 +165,10 @@ extern void sub_0806FBB4(Entity*);
|
|||
extern u32 sub_080002D4(s32, s32, u32);
|
||||
extern void sub_08078930(Entity*);
|
||||
extern void sub_080044AE(Entity*, u32, u32);
|
||||
extern void sub_0801AF18(u8*, u32, u32);
|
||||
extern void sub_0807B9B8(s32, s32, s32);
|
||||
extern void sub_08000148(u32, u32, u32);
|
||||
extern void sub_0805457C(Entity*, s32);
|
||||
extern Entity* sub_080A2A3C(Entity*, u32, u32, u32);
|
||||
extern void sub_0806FCF4(Entity*, s32, s32, s32);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -233,7 +233,7 @@ void Button(Entity*);
|
|||
void MinishEmoticon(Entity*);
|
||||
void Pot(Entity*);
|
||||
void EzloCap(Entity*);
|
||||
void BlockPushed(Entity*);
|
||||
void BlockPushed();
|
||||
void LockedDoor(Entity*);
|
||||
void Object9(Entity*);
|
||||
void ObjectA(Entity*);
|
||||
|
|
@ -265,18 +265,18 @@ void EyeSwitch(Entity*);
|
|||
void PressurePlate();
|
||||
void BigBarrel(Entity*);
|
||||
void BarrelInside(Entity*);
|
||||
void PushableStatue(Entity*);
|
||||
void PushableStatue();
|
||||
void Object28(Entity*);
|
||||
void AmbientClouds(Entity*);
|
||||
void Object2A(Entity*);
|
||||
void Object2B(Entity*);
|
||||
void Beanstalk(Entity*);
|
||||
void Smoke(Entity*);
|
||||
void PushableRock(Entity*);
|
||||
void PushableRock();
|
||||
void HittableLever();
|
||||
void Object30(Entity*);
|
||||
void FrozenFlower(Entity*);
|
||||
void PullableMushroom(Entity*);
|
||||
void PullableMushroom();
|
||||
void Bollard(Entity*);
|
||||
void WarpPoint(Entity*);
|
||||
void Object35(Entity*);
|
||||
|
|
@ -302,7 +302,7 @@ void FileScreenObjects(Entity*);
|
|||
void Object49(Entity*);
|
||||
void BackgroundCloud(Entity*);
|
||||
void Object4B(Entity*);
|
||||
void PushableFurniture(Entity*);
|
||||
void PushableFurniture();
|
||||
void Furniture(Entity*);
|
||||
void MinishSizedEntrance(Entity*);
|
||||
void Archway(Entity*);
|
||||
|
|
@ -339,7 +339,7 @@ void ObjectOnPillar(Entity*);
|
|||
void MineralWaterSource(Entity*);
|
||||
void MinishSizedArchway(Entity*);
|
||||
void Object70(Entity*);
|
||||
void PushableGrave(Entity*);
|
||||
void PushableGrave();
|
||||
void StoneTablet(Entity*);
|
||||
void LilypadSmall(Entity*);
|
||||
void Object74(Entity*);
|
||||
|
|
@ -358,8 +358,8 @@ void Board(Entity*);
|
|||
void Object81(Entity*);
|
||||
void BigVortex(Entity*);
|
||||
void BigPushableLever();
|
||||
void SmallIceBlock(Entity*);
|
||||
void BigIceBlock(Entity*);
|
||||
void SmallIceBlock();
|
||||
void BigIceBlock();
|
||||
void Object86(Entity*);
|
||||
void OctorokBossObject(Entity*);
|
||||
void MacroBook(Entity*);
|
||||
|
|
|
|||
|
|
@ -76,7 +76,8 @@ typedef struct {
|
|||
/* 0x4c */ u8 filler5[28];
|
||||
/* 0x68 */ u32 animFlags;
|
||||
/* 0x6c */ void* field_0x6c[8];
|
||||
/* 0x8c */ void* field_0x8c[16];
|
||||
/* 0x8c */ void* field_0x8c[8];
|
||||
/* 0xac */ void* field_0xac[8];
|
||||
} RoomVars;
|
||||
static_assert(sizeof(RoomVars) == 0xCC);
|
||||
extern RoomVars gRoomVars;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,123 @@
|
|||
/**
|
||||
* @file pushableRock.c
|
||||
* @ingroup Objects
|
||||
*
|
||||
* @brief Pushable Rock 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 tileIndex;
|
||||
/*0x72*/ u8 unk_72;
|
||||
/*0x73*/ u8 unk_73;
|
||||
/*0x74*/ u16 tilePosition;
|
||||
/*0x76*/ u8 unk_76[0x10];
|
||||
/*0x86*/ u16 pushedFlag;
|
||||
} PushableRockEntity;
|
||||
|
||||
extern void (*const PushableRock_Actions[])(PushableRockEntity*);
|
||||
extern const u16 PushableRock_Speeds[];
|
||||
|
||||
void sub_0808A644(PushableRockEntity*);
|
||||
|
||||
void PushableRock(PushableRockEntity* this) {
|
||||
PushableRock_Actions[super->action](this);
|
||||
}
|
||||
|
||||
void PushableRock_Init(PushableRockEntity* this) {
|
||||
super->spriteSettings.draw = 1;
|
||||
super->action += 1;
|
||||
super->spriteRendering.b3 = 2;
|
||||
super->spritePriority.b0 = 4;
|
||||
super->spritePriority.b1 = 3;
|
||||
sub_0808A644(this);
|
||||
}
|
||||
|
||||
void PushableRock_Action1(PushableRockEntity* this) {
|
||||
u32 tileType;
|
||||
u32 tmp;
|
||||
|
||||
tileType = GetTileType(this->tilePosition, super->collisionLayer);
|
||||
switch (tileType) {
|
||||
case 0x401c:
|
||||
case 0x401d:
|
||||
case 0x401e:
|
||||
case 0x401f:
|
||||
tmp = (tileType - 0x1c);
|
||||
super->animationState = tmp * 2;
|
||||
super->direction = tmp * 8;
|
||||
if ((u8)(tmp * 2) == 2) {
|
||||
super->spriteSettings.flipX = 1;
|
||||
} else {
|
||||
super->spriteSettings.flipX = 0;
|
||||
}
|
||||
SetTile(this->tileIndex, this->tilePosition, super->collisionLayer);
|
||||
super->action = 2;
|
||||
InitializeAnimation(super, (super->animationState >> 1) + 1);
|
||||
EnqueueSFX(SFX_10F);
|
||||
break;
|
||||
default:
|
||||
if (super->animIndex) {
|
||||
InitializeAnimation(super, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void PushableRock_Action2(PushableRockEntity* this) {
|
||||
sub_0800445C(super);
|
||||
super->speed = PushableRock_Speeds[super->frame & 0xf];
|
||||
LinearMoveUpdate(super);
|
||||
GetNextFrame(super);
|
||||
if (super->frame & 0x80) {
|
||||
super->action = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void PushableRock_Action3(PushableRockEntity* this) {
|
||||
if ((super->frame & 0x80) == 0) {
|
||||
GetNextFrame(super);
|
||||
} else {
|
||||
super->spritePriority.b0 = 7;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0808A644(PushableRockEntity* this) {
|
||||
u32 tmp;
|
||||
this->tilePosition = COORD_TO_TILE(super);
|
||||
this->tileIndex = GetTileIndex(this->tilePosition, super->collisionLayer);
|
||||
this->unk_72 = sub_080002E0(this->tilePosition, super->collisionLayer);
|
||||
tmp = sub_080002C8(this->tilePosition, super->collisionLayer);
|
||||
if ((tmp == 0x19) || (tmp == 0xf0)) {
|
||||
SetTile(0x4015, this->tilePosition, super->collisionLayer);
|
||||
super->action = 3;
|
||||
if (!CheckFlags(this->pushedFlag)) {
|
||||
SetFlag(this->pushedFlag);
|
||||
SoundReq(SFX_TASK_COMPLETE);
|
||||
InitializeAnimation(super, 5);
|
||||
} else {
|
||||
InitializeAnimation(super, 6);
|
||||
}
|
||||
} else {
|
||||
SetTile(0x401b, this->tilePosition, super->collisionLayer);
|
||||
}
|
||||
}
|
||||
|
||||
void (*const PushableRock_Actions[])(PushableRockEntity*) = {
|
||||
PushableRock_Init,
|
||||
PushableRock_Action1,
|
||||
PushableRock_Action2,
|
||||
PushableRock_Action3,
|
||||
};
|
||||
const u16 PushableRock_Speeds[] = {
|
||||
0,
|
||||
256,
|
||||
96,
|
||||
64,
|
||||
};
|
||||
Loading…
Reference in New Issue