mirror of https://github.com/zeldaret/tmc.git
Decompile ObjectB
This commit is contained in:
parent
e41e97950b
commit
6b6f946caf
|
@ -1,304 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start ObjectB
|
||||
ObjectB: @ 0x08083B88
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r1, _08083BDC @ =gUnk_0811F7D8
|
||||
ldrb r0, [r4, #0xc]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
ldr r0, [r4, #0x50]
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
lsrs r1, r1, #6
|
||||
movs r0, #1
|
||||
ands r1, r0
|
||||
ldrb r2, [r4, #0x18]
|
||||
subs r0, #5
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
bl sub_08080CB4
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x29
|
||||
ldrb r1, [r2]
|
||||
movs r0, #0x39
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r2]
|
||||
ldrb r1, [r4, #0x1b]
|
||||
movs r2, #0x3f
|
||||
adds r0, r2, #0
|
||||
ands r0, r1
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x1b]
|
||||
ldrb r0, [r4, #0x19]
|
||||
ands r2, r0
|
||||
strb r2, [r4, #0x19]
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08083BDC: .4byte gUnk_0811F7D8
|
||||
|
||||
thumb_func_start sub_08083BE0
|
||||
sub_08083BE0: @ 0x08083BE0
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #6
|
||||
bl SetDefaultPriority
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_08083BF0
|
||||
sub_08083BF0: @ 0x08083BF0
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #0x50]
|
||||
adds r0, #0x5a
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x41
|
||||
bne _08083C98
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #5
|
||||
bhi _08083C98
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _08083C14 @ =_08083C18
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08083C14: .4byte _08083C18
|
||||
_08083C18: @ jump table
|
||||
.4byte _08083C30 @ case 0
|
||||
.4byte _08083C30 @ case 1
|
||||
.4byte _08083C4A @ case 2
|
||||
.4byte _08083C98 @ case 3
|
||||
.4byte _08083C98 @ case 4
|
||||
.4byte _08083C74 @ case 5
|
||||
_08083C30:
|
||||
ldrb r0, [r4, #0xa]
|
||||
ldrb r1, [r4, #0xb]
|
||||
bl GiveItem
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x68
|
||||
strh r0, [r1]
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0x43
|
||||
bgt _08083C62
|
||||
cmp r0, #0x40
|
||||
bge _08083C98
|
||||
b _08083C62
|
||||
_08083C4A:
|
||||
ldrb r0, [r4, #0xa]
|
||||
ldrb r1, [r4, #0xb]
|
||||
bl GiveItem
|
||||
ldr r1, _08083C6C @ =gUnk_080FD964
|
||||
ldrb r0, [r4, #0xa]
|
||||
lsls r0, r0, #3
|
||||
adds r0, r0, r1
|
||||
ldrh r1, [r0, #6]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x68
|
||||
strh r1, [r0]
|
||||
_08083C62:
|
||||
ldr r0, _08083C70 @ =0x00000109
|
||||
bl SoundReq
|
||||
b _08083C98
|
||||
.align 2, 0
|
||||
_08083C6C: .4byte gUnk_080FD964
|
||||
_08083C70: .4byte 0x00000109
|
||||
_08083C74:
|
||||
ldrb r0, [r4, #0xa]
|
||||
bl GetInventoryValue
|
||||
ldrb r1, [r4, #0xa]
|
||||
lsls r1, r1, #3
|
||||
ldr r2, _08083C8C @ =gItemMetaData
|
||||
adds r1, r1, r2
|
||||
cmp r0, #0
|
||||
bne _08083C90
|
||||
ldrh r1, [r1, #4]
|
||||
b _08083C92
|
||||
.align 2, 0
|
||||
_08083C8C: .4byte gItemMetaData
|
||||
_08083C90:
|
||||
ldrh r1, [r1, #6]
|
||||
_08083C92:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x68
|
||||
strh r1, [r0]
|
||||
_08083C98:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08083C9C
|
||||
sub_08083C9C: @ 0x08083C9C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #0x50]
|
||||
adds r0, #0x5a
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x42
|
||||
bne _08083D22
|
||||
movs r0, #3
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #5
|
||||
bhi _08083D22
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _08083CC0 @ =_08083CC4
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08083CC0: .4byte _08083CC4
|
||||
_08083CC4: @ jump table
|
||||
.4byte _08083CDC @ case 0
|
||||
.4byte _08083D22 @ case 1
|
||||
.4byte _08083CDC @ case 2
|
||||
.4byte _08083D22 @ case 3
|
||||
.4byte _08083D22 @ case 4
|
||||
.4byte _08083CDC @ case 5
|
||||
_08083CDC:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x68
|
||||
ldrh r1, [r0]
|
||||
cmp r1, #0
|
||||
beq _08083D22
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0x3f
|
||||
beq _08083D00
|
||||
cmp r0, #0x63
|
||||
bne _08083D16
|
||||
ldr r0, _08083CFC @ =gSave
|
||||
adds r0, #0xa9
|
||||
ldrb r0, [r0]
|
||||
adds r1, r1, r0
|
||||
b _08083D16
|
||||
.align 2, 0
|
||||
_08083CFC: .4byte gSave
|
||||
_08083D00:
|
||||
ldrb r0, [r4, #0xb]
|
||||
cmp r0, #1
|
||||
bls _08083D16
|
||||
ldr r0, _08083D10 @ =0x00000577
|
||||
cmp r1, r0
|
||||
bne _08083D14
|
||||
subs r1, #1
|
||||
b _08083D16
|
||||
.align 2, 0
|
||||
_08083D10: .4byte 0x00000577
|
||||
_08083D14:
|
||||
adds r1, #1
|
||||
_08083D16:
|
||||
adds r0, r1, #0
|
||||
bl MessageFromTarget
|
||||
ldr r1, _08083D24 @ =gMessage
|
||||
ldrb r0, [r4, #0xb]
|
||||
str r0, [r1, #0x10]
|
||||
_08083D22:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08083D24: .4byte gMessage
|
||||
|
||||
thumb_func_start sub_08083D28
|
||||
sub_08083D28: @ 0x08083D28
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #0x50]
|
||||
ldrb r0, [r0, #0xc]
|
||||
cmp r0, #8
|
||||
beq _08083DD4
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #5
|
||||
bhi _08083DD0
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _08083D44 @ =_08083D48
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08083D44: .4byte _08083D48
|
||||
_08083D48: @ jump table
|
||||
.4byte _08083D60 @ case 0
|
||||
.4byte _08083D60 @ case 1
|
||||
.4byte _08083D60 @ case 2
|
||||
.4byte _08083DAC @ case 3
|
||||
.4byte _08083DD0 @ case 4
|
||||
.4byte _08083DD0 @ case 5
|
||||
_08083D60:
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0x62
|
||||
beq _08083D88
|
||||
cmp r0, #0x63
|
||||
bne _08083DD0
|
||||
movs r0, #0xa0
|
||||
bl ModHealth
|
||||
ldr r0, _08083DA8 @ =gSave
|
||||
adds r1, r0, #0
|
||||
adds r1, #0xa9
|
||||
ldrb r0, [r1]
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #3
|
||||
bls _08083DD0
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
_08083D88:
|
||||
ldr r0, _08083DA8 @ =gSave
|
||||
adds r1, r0, #0
|
||||
adds r1, #0xab
|
||||
ldrb r0, [r1]
|
||||
adds r0, #8
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0xa0
|
||||
bls _08083DA0
|
||||
movs r0, #0xa0
|
||||
strb r0, [r1]
|
||||
_08083DA0:
|
||||
movs r0, #0xa0
|
||||
bl ModHealth
|
||||
b _08083DD0
|
||||
.align 2, 0
|
||||
_08083DA8: .4byte gSave
|
||||
_08083DAC:
|
||||
ldrb r0, [r4, #0xa]
|
||||
bl GetBottleContaining
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _08083DC8
|
||||
ldr r0, _08083DC4 @ =gSave
|
||||
adds r0, r0, r1
|
||||
adds r0, #0xb5
|
||||
movs r1, #0x20
|
||||
strb r1, [r0]
|
||||
b _08083DD0
|
||||
.align 2, 0
|
||||
_08083DC4: .4byte gSave
|
||||
_08083DC8:
|
||||
ldrb r0, [r4, #0xa]
|
||||
movs r1, #2
|
||||
bl SetInventoryValue
|
||||
_08083DD0:
|
||||
bl DeleteThisEntity
|
||||
_08083DD4:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
|
@ -1,11 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_0811F7D8:: @ 0811F7D8
|
||||
.4byte sub_08083BE0
|
||||
.4byte sub_08083BF0
|
||||
.4byte sub_08083C9C
|
||||
.4byte sub_08083D28
|
|
@ -38,7 +38,7 @@ extern void GenericKnockback2(Entity*);
|
|||
extern LayerStruct* GetLayerByIndex(u32);
|
||||
extern u32 GetRandomByWeight(const u8*);
|
||||
extern u32 GetTileIndex(u32, u32);
|
||||
extern void GiveItem(u32, u32);
|
||||
extern u32 GiveItem(u32, u32);
|
||||
extern void HandlePlayerLife(Entity*);
|
||||
extern bool32 HasSwordEquipped();
|
||||
extern bool32 IsColliding(Entity*, Entity*);
|
||||
|
|
|
@ -237,7 +237,7 @@ void BlockPushed();
|
|||
void LockedDoor(Entity*);
|
||||
void Object9(Entity*);
|
||||
void ObjectA(Entity*);
|
||||
void ObjectB(Entity*);
|
||||
void ObjectB();
|
||||
void ChestSpawner();
|
||||
void ObjectD(Entity*);
|
||||
void ObjectE(Entity*);
|
||||
|
|
|
@ -631,7 +631,7 @@ SECTIONS {
|
|||
src/object/lockedDoor.o(.text);
|
||||
asm/object/object9.o(.text);
|
||||
src/object/objectA.o(.text);
|
||||
asm/object/objectB.o(.text);
|
||||
src/object/objectB.o(.text);
|
||||
src/object/chestSpawner.o(.text);
|
||||
asm/object/objectD.o(.text);
|
||||
asm/object/objectE.o(.text);
|
||||
|
@ -1347,7 +1347,7 @@ SECTIONS {
|
|||
src/object/lockedDoor.o(.rodata);
|
||||
data/const/object/object9.o(.rodata);
|
||||
data/animations/object/object9.o(.rodata);
|
||||
data/const/object/objectB.o(.rodata);
|
||||
src/object/objectB.o(.rodata);
|
||||
src/object/chestSpawner.o(.rodata);
|
||||
data/animations/object/chestSpawner.o(.rodata);
|
||||
data/const/object/objectD.o(.rodata);
|
||||
|
|
|
@ -2168,7 +2168,7 @@ s32 GetItemPrice(u32 item) {
|
|||
return ptr[0];
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/game/GiveItem.inc", void GiveItem(u32 a, u32 b))
|
||||
ASM_FUNC("asm/non_matching/game/GiveItem.inc", u32 GiveItem(u32 a, u32 b))
|
||||
|
||||
// TODO Adapt ItemMetaData struct
|
||||
void sub_08054288(s32 param_1) {
|
||||
|
|
|
@ -0,0 +1,172 @@
|
|||
/**
|
||||
* @file objectB.c
|
||||
* @ingroup Objects
|
||||
*
|
||||
* @brief ObjectB object
|
||||
*/
|
||||
|
||||
#define NENT_DEPRECATED
|
||||
#include "global.h"
|
||||
#include "object.h"
|
||||
#include "functions.h"
|
||||
#include "itemMetaData.h"
|
||||
#include "message.h"
|
||||
#include "save.h"
|
||||
#include "game.h"
|
||||
#include "item.h"
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ Entity base;
|
||||
/*0x68*/ u16 unk_68;
|
||||
} ObjectBEntity;
|
||||
|
||||
typedef struct {
|
||||
u8 unk_0[6];
|
||||
u16 unk_6;
|
||||
} struct_080FD964;
|
||||
extern const struct_080FD964 gUnk_080FD964[];
|
||||
extern const u16 gUnk_080FD5B4[];
|
||||
|
||||
void ObjectB_Init(ObjectBEntity*);
|
||||
void ObjectB_Action1(ObjectBEntity*);
|
||||
void ObjectB_Action2(ObjectBEntity*);
|
||||
void ObjectB_Action3(ObjectBEntity*);
|
||||
|
||||
void ObjectB(ObjectBEntity* this) {
|
||||
static void (*const ObjectB_Actions[])(ObjectBEntity*) = { ObjectB_Init, ObjectB_Action1, ObjectB_Action2,
|
||||
ObjectB_Action3 };
|
||||
u32 tmp;
|
||||
ObjectB_Actions[super->action](this);
|
||||
tmp = (super->parent->frame >> 6);
|
||||
super->spriteSettings.draw = tmp & 1;
|
||||
sub_08080CB4(super);
|
||||
super->spritePriority.b1 = 0;
|
||||
super->spriteOrientation.flipY = 1;
|
||||
super->spriteRendering.b3 = 0;
|
||||
}
|
||||
|
||||
void ObjectB_Init(ObjectBEntity* this) {
|
||||
SetDefaultPriority(super, 6);
|
||||
super->action = 1;
|
||||
}
|
||||
|
||||
void ObjectB_Action1(ObjectBEntity* this) {
|
||||
u32 tmp;
|
||||
const ItemMetaData* ptr;
|
||||
|
||||
if ((super->parent)->frame != 0x41) {
|
||||
return;
|
||||
}
|
||||
super->action = 2;
|
||||
switch (super->actionDelay) {
|
||||
case 0:
|
||||
case 1:
|
||||
this->unk_68 = GiveItem(super->type, super->type2);
|
||||
switch (super->type) {
|
||||
case 0x40:
|
||||
case 0x41:
|
||||
case 0x42:
|
||||
case 0x43:
|
||||
break;
|
||||
default:
|
||||
SoundReq(SFX_109);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
GiveItem(super->type, super->type2);
|
||||
this->unk_68 = gUnk_080FD964[super->type].unk_6;
|
||||
SoundReq(SFX_109);
|
||||
break;
|
||||
case 5:
|
||||
tmp = GetInventoryValue((u32)super->type);
|
||||
ptr = &gItemMetaData[super->type];
|
||||
if (tmp == 0) {
|
||||
this->unk_68 = *(u16*)&ptr->unk4;
|
||||
} else {
|
||||
this->unk_68 = *(u16*)&ptr->unk6;
|
||||
}
|
||||
return;
|
||||
case 3:
|
||||
case 4:
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void ObjectB_Action2(ObjectBEntity* this) {
|
||||
u32 messageIndex;
|
||||
if ((super->parent)->frame == 0x42) {
|
||||
super->action = 3;
|
||||
switch (super->actionDelay) {
|
||||
case 1:
|
||||
case 3:
|
||||
case 4:
|
||||
default:
|
||||
break;
|
||||
case 0:
|
||||
case 2:
|
||||
case 5:
|
||||
messageIndex = this->unk_68;
|
||||
if (messageIndex != 0) {
|
||||
switch (super->type) {
|
||||
case 0x63:
|
||||
messageIndex += gSave.stats.heartPieces;
|
||||
break;
|
||||
case 0x3f:
|
||||
if (super->type2 > 1) {
|
||||
if (messageIndex == 0x577) {
|
||||
messageIndex--;
|
||||
} else {
|
||||
messageIndex++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
MessageFromTarget(messageIndex);
|
||||
gMessage.field_0x10 = super->type2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ObjectB_Action3(ObjectBEntity* this) {
|
||||
u32 tmp;
|
||||
if ((super->parent)->action == 8) {
|
||||
return;
|
||||
}
|
||||
switch (super->actionDelay) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
if (super->type != 0x62) {
|
||||
if (super->type != 0x63) {
|
||||
break;
|
||||
}
|
||||
ModHealth(0xa0);
|
||||
gSave.stats.heartPieces++;
|
||||
if (gSave.stats.heartPieces < 4) {
|
||||
break;
|
||||
}
|
||||
gSave.stats.heartPieces = 0;
|
||||
}
|
||||
gSave.stats.maxHealth += 8;
|
||||
if (gSave.stats.maxHealth > 0xa0) {
|
||||
gSave.stats.maxHealth = 0xa0;
|
||||
}
|
||||
ModHealth(0xa0);
|
||||
break;
|
||||
case 3:
|
||||
tmp = GetBottleContaining(super->type);
|
||||
if (tmp != 0) {
|
||||
gSave.stats.itemButtons[tmp + 1] = 0x20;
|
||||
} else {
|
||||
SetInventoryValue(super->type, ITEM_GREEN_SWORD);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
case 5:
|
||||
break;
|
||||
}
|
||||
DeleteThisEntity();
|
||||
}
|
Loading…
Reference in New Issue