Start decompiling pot.c

This commit is contained in:
Marcus Huderle 2020-08-08 16:49:10 -05:00
parent 4dfda76e5d
commit 6a68cca275
12 changed files with 182 additions and 543 deletions

532
asm/pot.s
View File

@ -6,538 +6,6 @@
.text
thumb_func_start Pot
Pot: @ 0x0808220C
push {r4, lr}
adds r4, r0, #0
ldr r1, _08082228 @ =gUnk_0811F090
ldrb r0, [r4, #0xc]
lsls r0, r0, #2
adds r0, r0, r1
ldr r1, [r0]
adds r0, r4, #0
bl _call_via_r1
adds r4, #0x41
movs r0, #0
strb r0, [r4]
pop {r4, pc}
.align 2, 0
_08082228: .4byte gUnk_0811F090
thumb_func_start sub_0808222C
sub_0808222C: @ 0x0808222C
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r4, r0, #0
ldrb r0, [r4, #0xb]
cmp r0, #1
bne _0808224C
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
beq _0808224C
bl DeleteThisEntity
_0808224C:
movs r2, #1
strb r2, [r4, #0xc]
ldr r0, _08082308 @ =gUnk_080FD338
str r0, [r4, #0x48]
movs r1, #0
movs r0, #0x80
strh r0, [r4, #0x24]
ldrh r0, [r4, #0x32]
adds r0, #3
strh r0, [r4, #0x32]
strb r1, [r4, #0x16]
ldrb r1, [r4, #0x10]
movs r0, #0x80
orrs r0, r1
strb r0, [r4, #0x10]
adds r0, r4, #0
adds r0, #0x45
strb r2, [r0]
adds r1, r4, #0
adds r1, #0x3c
movs r0, #7
strb r0, [r1]
adds r1, #3
movs r0, #0x6e
strb r0, [r1]
subs r1, #4
movs r0, #0x84
strb r0, [r1]
movs r0, #0x12
strb r0, [r4, #0x1c]
adds r5, r4, #0
adds r5, #0x38
ldrb r0, [r5]
cmp r0, #0
bne _08082298
adds r0, r4, #0
bl sub_08016A30
_08082298:
movs r1, #0x2e
ldrsh r0, [r4, r1]
ldr r7, _0808230C @ =gRoomControls
ldrh r1, [r7, #6]
subs r0, r0, r1
asrs r0, r0, #4
movs r6, #0x3f
ands r0, r6
movs r2, #0x32
ldrsh r1, [r4, r2]
ldrh r2, [r7, #8]
subs r1, r1, r2
asrs r1, r1, #4
ands r1, r6
lsls r1, r1, #6
orrs r0, r1
ldrb r1, [r5]
bl sub_080001DA
adds r1, r4, #0
adds r1, #0x70
strh r0, [r1]
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
movs r1, #0x80
lsls r1, r1, #7
mov r8, r1
cmp r0, r8
bne _080822D6
bl DeleteThisEntity
_080822D6:
movs r2, #0x2e
ldrsh r1, [r4, r2]
ldrh r0, [r7, #6]
subs r1, r1, r0
asrs r1, r1, #4
ands r1, r6
movs r2, #0x32
ldrsh r0, [r4, r2]
ldrh r2, [r7, #8]
subs r0, r0, r2
asrs r0, r0, #4
ands r0, r6
lsls r0, r0, #6
orrs r1, r0
ldrb r2, [r5]
mov r0, r8
bl SetTile
adds r0, r4, #0
movs r1, #5
bl InitializeAnimation
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
_08082308: .4byte gUnk_080FD338
_0808230C: .4byte gRoomControls
thumb_func_start sub_08082310
sub_08082310: @ 0x08082310
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
adds r0, #0x41
ldrb r0, [r0]
movs r6, #0x7f
adds r1, r6, #0
ands r1, r0
cmp r1, #0x13
beq _08082342
cmp r1, #0x1d
beq _0808234C
adds r0, r5, #0
bl GetTileTypeByEntity
adds r4, r0, #0
movs r0, #0x80
lsls r0, r0, #7
cmp r4, r0
bne _08082338
b _080824F0
_08082338:
adds r0, #1
cmp r4, r0
bhs _08082340
b _08082484
_08082340:
b _080823C4
_08082342:
movs r1, #0
movs r0, #3
strb r0, [r5, #0xc]
strb r1, [r5, #0xd]
b _080824F6
_0808234C:
adds r0, r5, #0
adds r0, #0x70
ldrh r0, [r0]
movs r2, #0x2e
ldrsh r1, [r5, r2]
ldr r3, _080823C0 @ =gRoomControls
ldrh r2, [r3, #6]
subs r1, r1, r2
asrs r1, r1, #4
movs r4, #0x3f
ands r1, r4
movs r7, #0x32
ldrsh r2, [r5, r7]
ldrh r3, [r3, #8]
subs r2, r2, r3
asrs r2, r2, #4
ands r2, r4
lsls r2, r2, #6
orrs r1, r2
adds r2, r5, #0
adds r2, #0x38
ldrb r2, [r2]
bl SetTile
movs r1, #0
movs r0, #5
strb r0, [r5, #0xc]
movs r0, #0xa8
lsls r0, r0, #0xa
str r0, [r5, #0x20]
adds r0, r5, #0
adds r0, #0x63
strb r1, [r0]
ldrb r1, [r5, #0x18]
movs r0, #0x31
rsbs r0, r0, #0
ands r0, r1
movs r1, #0x10
orrs r0, r1
strb r0, [r5, #0x18]
adds r2, r5, #0
adds r2, #0x29
ldrb r1, [r2]
movs r0, #0x39
rsbs r0, r0, #0
ands r0, r1
movs r1, #0x18
orrs r0, r1
strb r0, [r2]
ldrb r1, [r5, #0x10]
adds r0, r6, #0
ands r0, r1
strb r0, [r5, #0x10]
adds r0, r5, #0
bl sub_08082824
b _080824F6
.align 2, 0
_080823C0: .4byte gRoomControls
_080823C4:
ldr r0, _080823D4 @ =0x00004004
cmp r4, r0
bls _080823D8
adds r0, #0x63
cmp r4, r0
beq _08082448
b _08082484
.align 2, 0
_080823D4: .4byte 0x00004004
_080823D8:
ldr r1, _08082438 @ =0xFFFFBFFF
adds r0, r4, r1
lsls r0, r0, #3
strb r0, [r5, #0x15]
movs r0, #0x20
strb r0, [r5, #0xe]
movs r0, #4
strb r0, [r5, #0xc]
ldr r0, _0808243C @ =gLinkState
ldr r0, [r0, #0x30]
movs r1, #0x80
ands r0, r1
cmp r0, #0
beq _08082400
ldrh r0, [r5, #0x24]
lsls r0, r0, #0x10
asrs r0, r0, #0x11
strh r0, [r5, #0x24]
movs r0, #0x40
strb r0, [r5, #0xe]
_08082400:
adds r0, r5, #0
adds r0, #0x70
ldrh r0, [r0]
movs r2, #0x2e
ldrsh r1, [r5, r2]
ldr r3, _08082440 @ =gRoomControls
ldrh r2, [r3, #6]
subs r1, r1, r2
asrs r1, r1, #4
movs r4, #0x3f
ands r1, r4
movs r6, #0x32
ldrsh r2, [r5, r6]
ldrh r3, [r3, #8]
subs r2, r2, r3
asrs r2, r2, #4
ands r2, r4
lsls r2, r2, #6
orrs r1, r2
adds r2, r5, #0
adds r2, #0x38
ldrb r2, [r2]
bl SetTile
ldr r0, _08082444 @ =0x0000010F
bl sub_08004488
b _080824F6
.align 2, 0
_08082438: .4byte 0xFFFFBFFF
_0808243C: .4byte gLinkState
_08082440: .4byte gRoomControls
_08082444: .4byte 0x0000010F
_08082448:
adds r0, r5, #0
adds r0, #0x70
ldrh r0, [r0]
movs r7, #0x2e
ldrsh r1, [r5, r7]
ldr r3, _08082480 @ =gRoomControls
ldrh r2, [r3, #6]
subs r1, r1, r2
asrs r1, r1, #4
movs r4, #0x3f
ands r1, r4
movs r6, #0x32
ldrsh r2, [r5, r6]
ldrh r3, [r3, #8]
subs r2, r2, r3
asrs r2, r2, #4
ands r2, r4
lsls r2, r2, #6
orrs r1, r2
adds r2, r5, #0
adds r2, #0x38
ldrb r2, [r2]
bl SetTile
bl DeleteThisEntity
b _080824F6
.align 2, 0
_08082480: .4byte gRoomControls
_08082484:
adds r0, r5, #0
bl sub_080002B8
cmp r0, #0xd
bne _0808249A
adds r0, r5, #0
movs r1, #0
movs r2, #0
bl CreateFx
b _080824D8
_0808249A:
ldr r0, _080824E4 @ =0x00004005
cmp r4, r0
bne _080824D8
ldr r0, _080824E8 @ =gLinkState
adds r0, #0xab
movs r1, #4
strb r1, [r0]
adds r0, r5, #0
adds r0, #0x70
ldrh r0, [r0]
movs r7, #0x2e
ldrsh r1, [r5, r7]
ldr r3, _080824EC @ =gRoomControls
ldrh r2, [r3, #6]
subs r1, r1, r2
asrs r1, r1, #4
movs r4, #0x3f
ands r1, r4
movs r6, #0x32
ldrsh r2, [r5, r6]
ldrh r3, [r3, #8]
subs r2, r2, r3
asrs r2, r2, #4
ands r2, r4
lsls r2, r2, #6
orrs r1, r2
adds r2, r5, #0
adds r2, #0x38
ldrb r2, [r2]
bl SetTile
_080824D8:
adds r0, r5, #0
movs r1, #0
bl sub_08082850
b _080824F6
.align 2, 0
_080824E4: .4byte 0x00004005
_080824E8: .4byte gLinkState
_080824EC: .4byte gRoomControls
_080824F0:
adds r0, r5, #0
bl sub_08078930
_080824F6:
pop {r4, r5, r6, r7, pc}
thumb_func_start sub_080824F8
sub_080824F8: @ 0x080824F8
push {lr}
ldr r2, _0808250C @ =gUnk_0811F0A8
ldrb r1, [r0, #0xd]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_0808250C: .4byte gUnk_0811F0A8
thumb_func_start sub_08082510
sub_08082510: @ 0x08082510
push {r4, r5, r6, lr}
adds r5, r0, #0
ldrb r1, [r5, #0x10]
movs r0, #0x80
movs r2, #0
orrs r0, r1
strb r0, [r5, #0x10]
ldr r0, _08082578 @ =gUnk_080FD340
str r0, [r5, #0x48]
adds r1, r5, #0
adds r1, #0x3c
movs r0, #7
strb r0, [r1]
adds r1, #3
movs r0, #1
strb r0, [r1]
ldr r0, _0808257C @ =gLinkEntity
adds r0, #0x3b
ldrb r0, [r0]
subs r1, #4
strb r0, [r1]
adds r0, r5, #0
adds r0, #0x63
strb r2, [r0]
adds r0, #0xd
ldrh r0, [r0]
movs r2, #0x2e
ldrsh r1, [r5, r2]
ldr r3, _08082580 @ =gRoomControls
ldrh r2, [r3, #6]
subs r1, r1, r2
asrs r1, r1, #4
movs r4, #0x3f
ands r1, r4
movs r6, #0x32
ldrsh r2, [r5, r6]
ldrh r3, [r3, #8]
subs r2, r2, r3
asrs r2, r2, #4
ands r2, r4
lsls r2, r2, #6
orrs r1, r2
adds r2, r5, #0
adds r2, #0x38
ldrb r2, [r2]
bl SetTile
ldrb r0, [r5, #0xd]
adds r0, #1
strb r0, [r5, #0xd]
pop {r4, r5, r6, pc}
.align 2, 0
_08082578: .4byte gUnk_080FD340
_0808257C: .4byte gLinkEntity
_08082580: .4byte gRoomControls
thumb_func_start nullsub_511
nullsub_511: @ 0x08082584
bx lr
.align 2, 0
thumb_func_start sub_08082588
sub_08082588: @ 0x08082588
adds r0, #0x29
ldrb r2, [r0]
movs r1, #0x39
rsbs r1, r1, #0
ands r1, r2
movs r2, #0x18
orrs r1, r2
strb r1, [r0]
bx lr
.align 2, 0
thumb_func_start sub_0808259C
sub_0808259C: @ 0x0808259C
push {r4, lr}
adds r4, r0, #0
bl sub_080043E8
cmp r0, #2
beq _080825B8
cmp r0, #2
bhi _080825B2
cmp r0, #1
beq _080825BE
b _080825D0
_080825B2:
cmp r0, #3
beq _080825C4
b _080825D0
_080825B8:
adds r0, r4, #0
movs r1, #0xb
b _080825C8
_080825BE:
adds r0, r4, #0
movs r1, #0
b _080825C8
_080825C4:
adds r0, r4, #0
movs r1, #0xc
_080825C8:
movs r2, #0
bl CreateFx
b _080825E0
_080825D0:
ldr r1, _080825DC @ =gLinkEntity
adds r0, r4, #0
bl sub_08082850
b _080825E4
.align 2, 0
_080825DC: .4byte gLinkEntity
_080825E0:
bl DeleteThisEntity
_080825E4:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_080825E8
sub_080825E8: @ 0x080825E8
push {lr}
bl DeleteThisEntity
pop {pc}
thumb_func_start sub_080825F0
sub_080825F0: @ 0x080825F0
push {lr}
adds r1, r0, #0
ldr r0, _08082604 @ =gLinkState
ldrb r0, [r0, #5]
cmp r0, #0
bne _08082602
adds r0, r1, #0
bl sub_08082608
_08082602:
pop {pc}
.align 2, 0
_08082604: .4byte gLinkState
thumb_func_start sub_08082608
sub_08082608: @ 0x08082608
movs r2, #0
movs r1, #1
strb r1, [r0, #0xc]
strb r2, [r0, #0xd]
bx lr
.align 2, 0
thumb_func_start sub_08082614
sub_08082614: @ 0x08082614
push {r4, r5, r6, r7, lr}

View File

@ -47,8 +47,7 @@ typedef struct Entity {
/* */ u8 draw : 2; // 1-2
/* */ u8 ss2 : 1; // 4
/* */ u8 ss3 : 1; // 8
/* */ u8 bigShadow : 1; //0x10
/* */ u8 giantShadow : 1; //0x20
/* */ u8 shadow : 2; //0x10
/* */ u8 flipX : 1; //0x40
/* */ u8 flipY : 1; //0x80
/* */ } PACKED b;
@ -71,7 +70,7 @@ typedef struct Entity {
/* */ u8 flipX : 2; //0x10
/* */ u8 flipY : 2; //0x40
/* */ } PACKED spriteOrientation;
/*0x1c*/ u8 filler[1];
/*0x1c*/ u8 field_0x1c;
/*0x1d*/ u8 field_0x1d;
/*0x1e*/ u8 frameIndex;
/*0x1f*/ u8 lastFrameIndex;

View File

@ -192,7 +192,7 @@ extern void sub_080A70AC(void*);
extern void sub_080A7114(u32);
extern void sub_08001242(void);
extern u32 sub_08003FC4(Entity*, u32);
extern u8 sub_080043E8(Entity*);
extern u32 sub_080043E8(Entity*);
extern void sub_08001290(Entity*, u32);
extern void sub_08004488(u32);
extern void sub_08004596(Entity*, u32);

View File

@ -35,7 +35,9 @@ typedef struct {
/* */ u32 noMinishCap : 1;
/* */ u32 pullingState : 1;
/* */ u32 windyState : 1;
/* */ u32 filler10 : 4;
/* */ u32 filler6 : 1;
/* */ u32 unk7 : 1;
/* */ u32 filler8 : 2;
/* */ u32 slipperyState : 1;
/* */ u32 filler11 : 5;
/* */ u32 filler11b : 16;

View File

@ -673,6 +673,7 @@ SECTIONS {
asm/itemForSale.o(.text);
asm/button.o(.text);
asm/object4.o(.text);
src/object/pot.o(.text);
asm/pot.o(.text);
asm/object6.o(.text);
asm/blockPushed.o(.text);

View File

@ -57,7 +57,7 @@ void sub_0802A8C8(Entity* this)
void sub_0802A8E0(Entity *this)
{
this->previousActionFlag = 1;
this->filler[1] = 0x3c;
this->field_0x1d = 0x3c;
}
void sub_0802A8EC(Entity *this)

View File

@ -73,7 +73,7 @@ void sub_08021DF0(Entity *this)
this->height.HALF.HI = -0x10;
}
this->direction = Random() & 0x1f;
this->filler[0] = 1;
this->field_0x1c = 1;
this->spritePriority.b0 = 3;
this->collisionLayer = 3;
UpdateSpriteForCollisionLayer(this);

View File

@ -62,7 +62,7 @@ void sub_0801EB2C(Entity* ent) {
void sub_0801EB68(Entity* ent) {
ent->previousActionFlag = 1;
ent->filler[1] = 60;
ent->field_0x1d = 60;
}
void sub_0801EB74(Entity* ent) {

View File

@ -25,7 +25,7 @@ void RupeeLike(Entity* this) {
u32 uVar1;
if (this->entityType.parameter == 0) {
uVar1 = sub_080043E8(this);
uVar1 = (u8)sub_080043E8(this);
if (uVar1 != 0) {
if (this->action == 4) {
sub_080296D8(this);

View File

@ -46,7 +46,7 @@ void sub_0803169C(Entity *this)
void sub_080316DC(Entity *this)
{
this->previousActionFlag = 1;
this->filler[1] = 0x3c;
this->field_0x1d = 0x3c;
}
void sub_080316E8(Entity *this)

View File

@ -85,7 +85,7 @@ void sub_08033674(Entity* this) {
sub_0804A720(this);
this->actionDelay = 0;
this->action = 1;
this->filler[0] = 1;
this->field_0x1c = 1;
this->field_0x80.HWORD = this->x.HALF.HI;
this->field_0x82.HWORD = this->y.HALF.HI;
sub_08033744(this);

169
src/object/pot.c Executable file
View File

@ -0,0 +1,169 @@
#include "global.h"
#include "entity.h"
#include "functions.h"
#include "flags.h"
#include "link.h"
#include "room.h"
extern void (*const gUnk_0811F090[])(Entity*);
extern void (*const gUnk_0811F0A8[])(Entity*);
extern BoundingBox gUnk_080FD338; // TODO: should be const
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 void sub_08082824(Entity*);
extern u32 sub_080002B8(Entity*);
extern void sub_08082850(Entity*, Entity*);
extern void sub_08082608(Entity*);
void Pot(Entity* this) {
gUnk_0811F090[this->action](this);
this->bitfield = 0;
}
void sub_0808222C(Entity* this) {
if (this->entityType.parameter == 1 && CheckFlags(this->field_0x86)) {
DeleteThisEntity();
}
this->action = 1;
this->boundingBox = &gUnk_080FD338;
this->nonPlanarMovement = 0x80;
this->y.HALF.HI += 3;
this->possibleBool = 0;
this->flags |= 0x80;
this->currentHealth = 1;
this->field_0x3c = 7;
this->damageType = 0x6E;
this->flags2 = 0x84;
this->field_0x1c = 0x12;
if (this->collisionLayer == 0) {
sub_08016A30(this);
}
this->field_0x70.HALF.LO = sub_080001DA(COORD_TO_TILE(this), this->collisionLayer);
if ((u16)this->field_0x70.HALF.LO == 0x4000) {
DeleteThisEntity();
}
SetTile(0x4000, COORD_TO_TILE(this), this->collisionLayer);
InitializeAnimation(this, 5);
}
void sub_08082310(Entity* this) {
u32 tileType;
u32 var0 = this->bitfield & 0x7F;
switch (var0) {
case 0x13:
this->action = 3;
this->previousActionFlag = 0;
break;
case 0x1D:
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
this->action = 5;
this->field_0x20 = 0x2A000;
this->spriteOffsetY = 0;
this->spriteSettings.b.shadow = 1;
this->spritePriority.b1 = 3;
this->flags &= 0x7F;
sub_08082824(this);
break;
default:
tileType = GetTileTypeByEntity(this);
if (tileType != 0x4000) {
switch (tileType) {
case 0x4004:
case 0x4003:
case 0x4002:
case 0x4001:
this->direction = (tileType - 0x4001) * 8;
this->actionDelay = 32;
this->action = 4;
if (gLinkState.flags.all & 0x80) {
this->nonPlanarMovement >>= 1;
this->actionDelay = 64;
}
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
sub_08004488(0x10F);
break;
case 0x4067:
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
DeleteThisEntity();
break;
default:
if (sub_080002B8(this) == 13) {
CreateFx(this, 0, 0);
} else if (tileType == 0x4005) {
gLinkState.field_0xab = 4;
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
}
sub_08082850(this, NULL);
break;
}
} else {
sub_08078930(this);
}
break;
}
}
void sub_080824F8(Entity* this) {
gUnk_0811F0A8[this->previousActionFlag](this);
}
void sub_08082510(Entity* this) {
this->flags |= 0x80;
this->boundingBox = &gUnk_080FD340;
this->field_0x3c = 7;
this->damageType = 1;
this->flags2 = gLinkEntity.flags2;
this->spriteOffsetY = 0;
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
this->previousActionFlag++;
}
void nullsub_511(Entity* this) {
}
void sub_08082588(Entity* this) {
this->spritePriority.b1 = 3;
}
void sub_0808259C(Entity* this) {
switch (sub_080043E8(this)) {
case 2:
CreateFx(this, 11, 0);
break;
case 1:
CreateFx(this, 0, 0);
break;
case 3:
CreateFx(this, 12, 0);
break;
default:
sub_08082850(this, &gLinkEntity);
return;
}
DeleteThisEntity();
}
void sub_080825E8(Entity* this) {
DeleteThisEntity();
}
void sub_080825F0(Entity* this) {
if (gLinkState.heldObject == 0) {
sub_08082608(this);
}
}
void sub_08082608(Entity* this) {
this->action = 1;
this->previousActionFlag = 0;
}