thoughtBubble.c OK

This commit is contained in:
theo3 2020-06-19 00:35:45 -07:00
parent b093824bde
commit cae2706938
11 changed files with 136 additions and 205 deletions

View File

@ -6,134 +6,6 @@
.text
thumb_func_start sub_0802A84C
sub_0802A84C: @ 0x0802A84C
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xa]
cmp r0, #2
beq _0802A878
cmp r0, #3
beq _0802A894
ldr r0, _0802A874 @ =gUnk_080CD108
ldrb r1, [r4, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
bl _call_via_r1
adds r0, r4, #0
bl sub_0802AD54
b _0802A8A4
.align 2, 0
_0802A874: .4byte gUnk_080CD108
_0802A878:
ldr r0, _0802A890 @ =gUnk_080CD120
ldrb r1, [r4, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
bl _call_via_r1
adds r0, r4, #0
bl sub_0802B048
b _0802A8A4
.align 2, 0
_0802A890: .4byte gUnk_080CD120
_0802A894:
ldr r0, _0802A8A8 @ =gUnk_080CD134
ldrb r1, [r4, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
bl _call_via_r1
_0802A8A4:
pop {r4, pc}
.align 2, 0
_0802A8A8: .4byte gUnk_080CD134
thumb_func_start sub_0802A8AC
sub_0802A8AC: @ 0x0802A8AC
push {lr}
adds r1, r0, #0
adds r2, r1, #0
adds r2, #0x81
movs r0, #0
strb r0, [r2]
ldrb r0, [r1, #0xa]
cmp r0, #1
bhi _0802A8C6
adds r0, r1, #0
movs r1, #0
bl InitializeAnimation
_0802A8C6:
pop {pc}
thumb_func_start sub_0802A8C8
sub_0802A8C8: @ 0x0802A8C8
push {lr}
ldr r2, _0802A8DC @ =gUnk_080CD140
ldrb r1, [r0, #0xd]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_0802A8DC: .4byte gUnk_080CD140
thumb_func_start sub_0802A8E0
sub_0802A8E0: @ 0x0802A8E0
movs r1, #1
strb r1, [r0, #0xd]
movs r1, #0x3c
strb r1, [r0, #0x1d]
bx lr
.align 2, 0
thumb_func_start sub_0802A8EC
sub_0802A8EC: @ 0x0802A8EC
push {lr}
bl sub_0806F4E8
pop {pc}
thumb_func_start sub_0802A8F4
sub_0802A8F4: @ 0x0802A8F4
push {lr}
bl sub_0806F3E4
pop {pc}
thumb_func_start sub_0802A8FC
sub_0802A8FC: @ 0x0802A8FC
push {lr}
adds r2, r0, #0
ldr r0, _0802A914 @ =gLinkState
ldrb r0, [r0, #0x1c]
movs r1, #0xf
ands r1, r0
cmp r1, #0
bne _0802A912
adds r0, r2, #0
adds r0, #0x45
strb r1, [r0]
_0802A912:
pop {pc}
.align 2, 0
_0802A914: .4byte gLinkState
thumb_func_start nullsub_143
nullsub_143: @ 0x0802A918
bx lr
.align 2, 0
thumb_func_start sub_0802A91C
sub_0802A91C: @ 0x0802A91C
adds r0, #0x45
movs r1, #0
strb r1, [r0]
bx lr
thumb_func_start sub_0802A924
sub_0802A924: @ 0x0802A924
push {r4, r5, r6, r7, lr}

View File

@ -6,57 +6,6 @@
.text
thumb_func_start Object56
Object56: @ 0x08091E60
push {lr}
ldr r2, _08091E74 @ =gUnk_08122598
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_08091E74: .4byte gUnk_08122598
thumb_func_start sub_08091E78
sub_08091E78: @ 0x08091E78
push {r4, lr}
adds r4, r0, #0
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]
ldrb r0, [r4, #0xe]
cmp r0, #0
bne _08091E96
movs r0, #0x2d
strb r0, [r4, #0xe]
_08091E96:
ldrb r1, [r4, #0x1b]
movs r0, #0x3f
ands r0, r1
movs r1, #0x40
orrs r0, r1
strb r0, [r4, #0x1b]
ldrb r1, [r4, #0xb]
adds r0, r4, #0
bl InitializeAnimation
ldr r1, _08091EBC @ =gUnk_08122590
ldrb r0, [r4, #0xb]
lsls r0, r0, #1
adds r0, r0, r1
ldrh r0, [r0]
bl PlaySFX
pop {r4, pc}
.align 2, 0
_08091EBC: .4byte gUnk_08122590
thumb_func_start sub_08091EC0
sub_08091EC0: @ 0x08091EC0
push {r4, lr}

View File

@ -1276,10 +1276,10 @@ gUnk_08122538:: @ 08122538
gUnk_08122540:: @ 08122540
.incbin "baserom.gba", 0x122540, 0x0000050
gUnk_08122590:: @ 08122590
ThoughtBubble_SFX:: @ 08122590
.incbin "baserom.gba", 0x122590, 0x0000008
gUnk_08122598:: @ 08122598
ThoughtBubble_Behaviors:: @ 08122598
.incbin "baserom.gba", 0x122598, 0x0000008
gUnk_081225A0:: @ 081225A0

View File

@ -70,8 +70,8 @@ typedef struct Entity {
u8 palette;
struct {
u8 b0 : 4;
u8 b1 : 1;
u8 b2 : 3;
u8 b1 : 2;
u8 b2 : 2;
} PACKED spriteOrientation;
u8 filler[2];
u8 frameIndex;

View File

@ -19,7 +19,9 @@ typedef struct {
u8 hurtBlinkSpeed;
u8 filler4[4];
u16 filler5[3];
u8 filler6[8];
u8 filler6[2];
u8 field_0x1c;
u8 filler9[2];
u16 filler7[2];
u8 swimState;
u8 filler8[5];
@ -52,6 +54,7 @@ typedef struct {
u32 unk8;
} LinkState;
typedef struct {
u8 walletType;
u8 heartPieces;

View File

@ -90,7 +90,7 @@ extern void Object52(Entity*);
extern void Object53(Entity*);
extern void PullableLever(Entity*);
extern void Minecart(Entity*);
extern void Object56(Entity*);
extern void ThoughtBubble(Entity*);
extern void HiddenLadderDown(Entity*);
extern void GentariCurtain(Entity*);
extern void LavaPlatform(Entity*);

View File

@ -677,7 +677,7 @@ SECTIONS {
asm/object53.o(.text);
asm/pullableLever.o(.text);
asm/minecart.o(.text);
asm/object56.o(.text);
src/thoughtBubble.o(.text);
asm/hiddenLadderDown.o(.text);
asm/gentariCurtains.o(.text);
asm/lavaPlatform.o(.text);

View File

@ -1,22 +1,87 @@
#include "global.h"
#include "entity.h"
#include "functions.h"
#include "link.h"
extern s32 sub_080012DC(Entity*);
extern u32 GetNextFunction(Entity*);
extern void sub_0802AD54(Entity*);
extern void sub_0802B048(Entity*);
extern void InitializeAnimation(Entity*, u32);
extern void sub_0806F4E8(Entity*);
extern void sub_0806F3E4(Entity*);
extern void (*gUnk_080012C8[])(Entity*);
extern void (*gUnk_080CD0F0[])(Entity*);
extern void (*const gUnk_080012C8[])(Entity*);
extern void (*const gUnk_080CD0F0[])(Entity*);
extern void (*const gUnk_080CD120[])(Entity*);
extern void (*const gUnk_080CD134[])(Entity*);
extern void (*const gUnk_080CD108[])(Entity*);
extern void (*const gUnk_080CD140[])(Entity*);
void BombPeahat(Entity *this)
void BombPeahat(Entity* this) {
s32 iVar1;
u32 uVar2;
if (((this->entityType).form == 2) && (iVar1 = sub_080012DC(this), iVar1)) {
gUnk_080012C8[iVar1](this);
} else {
gUnk_080CD0F0[GetNextFunction(this)](this);
}
}
void sub_0802A84C(Entity* this) {
switch (this->entityType.form) {
default:
gUnk_080CD108[this->action](this);
sub_0802AD54(this);
return;
case 2:
gUnk_080CD120[this->action](this);
sub_0802B048(this);
return;
case 3:
gUnk_080CD134[this->action](this);
}
}
void sub_0802A8AC(Entity *this) {
*((u8 *)&this->field_0x80 + 1) = 0;
if (this->entityType.form < 2) {
InitializeAnimation(this, 0);
}
}
void sub_0802A8C8(Entity* this)
{
s32 iVar1;
u32 uVar2;
gUnk_080CD140[this->previousActionFlag](this);
}
if (((this->entityType).form == 2) && (iVar1 = sub_080012DC(this), iVar1 != 0)) {
gUnk_080012C8[iVar1](this);
}
else {
gUnk_080CD0F0[GetNextFunction(this)](this);
void sub_0802A8E0(Entity *this)
{
this->previousActionFlag = 1;
this->filler[1] = 0x3c;
}
void sub_0802A8EC(Entity *this)
{
sub_0806F4E8(this);
}
void sub_0802A8F4(Entity *this)
{
sub_0806F3E4(this);
}
void sub_0802A8FC(Entity *this)
{
if ((gLinkState.field_0x1c & 0xf) == 0) {
this->currentHealth = gLinkState.field_0x1c & 0xf;
}
}
void nullsub_143(Entity* this){}
void sub_0802A91C(Entity *this)
{
this->currentHealth = 0;
}

View File

@ -9,8 +9,8 @@ void GreatFairy(Entity* this) {
u8 bVar1;
if (this->action == 0) {
bVar1 = __modsi3((this->entityType).form, 11);
(this->entityType).parameter = bVar1;
bVar1 = __modsi3(this->entityType.form, 11);
this->entityType.parameter = bVar1;
}
GreatFairy_Main[(this->entityType).parameter](this);
}
@ -281,7 +281,7 @@ void GreatFairy_MiniAffineUpdate(Entity* this) {
sub_0805EC60(this);
} else {
iVar2 = this->nonPlanarMovement -= 24;
sub_0805EC9C(this, 256, iVar2 * 65536 >> 20, 0);
sub_0805EC9C(this, 256, iVar2 * 0x10000 >> 20, 0);
}
}
@ -301,7 +301,7 @@ void GreatFairy_DropletInit(Entity* this) {
void GreatFairy_DropletUpdate(Entity* this) {
GetNextFrame(this);
if ((this->frames.all & 128) != 0) {
if (this->frames.b.f3) {
DeleteEntity(this);
}
}
@ -367,7 +367,7 @@ void GreatFairy_EnergyInit(Entity* this) {
void GreatFairy_EnergyUpdate(Entity* this) {
GetNextFrame(this);
if ((this->frames.all & 128) != 0) {
if (this->frames.b.f3) {
DeleteEntity(this);
}
}
@ -403,8 +403,7 @@ void sub_08087150(Entity* this) {
}
#endif
void nullsub_516() {
}
void nullsub_516(Entity* this) {}
void sub_080871A8(Entity* this) {
u32 bVar1;

View File

@ -89,7 +89,7 @@ void (*const gObjectFunctions[])(Entity*) = {
Object53,
PullableLever,
Minecart,
Object56,
ThoughtBubble,
HiddenLadderDown,
GentariCurtain,
LavaPlatform,

43
src/thoughtBubble.c Normal file
View File

@ -0,0 +1,43 @@
#include "global.h"
#include "entity.h"
extern void InitializeAnimation(Entity*, u32);
extern void PlaySFX(u32);
extern void DeleteThisEntity();
extern void GetNextFrame(Entity*);
extern void (*const ThoughtBubble_Behaviors[])(Entity*);
extern u16 ThoughtBubble_SFX[];
void ThoughtBubble(Entity* this)
{
ThoughtBubble_Behaviors[this->action](this);
}
void ThoughtBubble_Init(Entity *this)
{
this->action = 1;
this->spriteSettings.b.ss0 = 1;
if (this->actionDelay == 0) {
this->actionDelay = 0x2d;
}
this->spriteOrientation.b2 = 1;
InitializeAnimation(this, this->entityType.parameter);
PlaySFX(ThoughtBubble_SFX[this->entityType.parameter]);
}
void ThoughtBubble_Update(Entity *this)
{
if (this->parent != NULL) {
this->x.HALF.HI = this->parent->x.HALF.HI;
this->y.HALF.HI = this->parent->y.HALF.HI;
this->height.HALF.HI = this->parent->height.HALF.HI;
}
if ((this->entityType).parameter != 2) {
if (--this->actionDelay == 0) {
DeleteThisEntity();
}
}
GetNextFrame(this);
}