mirror of https://github.com/zeldaret/tmc.git
Decompile Object3A
This commit is contained in:
parent
a462cd8daa
commit
e41e97950b
|
@ -1,345 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start Object3A
|
||||
Object3A: @ 0x0808C69C
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r0, [r2, #0xa]
|
||||
cmp r0, #0
|
||||
bne _0808C6BC
|
||||
ldr r0, _0808C6B8 @ =gUnk_08121638
|
||||
ldrb r1, [r2, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r2, #0
|
||||
bl _call_via_r1
|
||||
b _0808C6CC
|
||||
.align 2, 0
|
||||
_0808C6B8: .4byte gUnk_08121638
|
||||
_0808C6BC:
|
||||
ldr r0, _0808C6D0 @ =gUnk_08121640
|
||||
ldrb r1, [r2, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r2, #0
|
||||
bl _call_via_r1
|
||||
_0808C6CC:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0808C6D0: .4byte gUnk_08121640
|
||||
|
||||
thumb_func_start sub_0808C6D4
|
||||
sub_0808C6D4: @ 0x0808C6D4
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
ldrb r1, [r5, #0xb]
|
||||
lsls r0, r1, #2
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _0808C744 @ =gUnk_081215E8
|
||||
adds r4, r0, r1
|
||||
ldrh r0, [r4, #4]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x86
|
||||
strh r0, [r1]
|
||||
ldrh r0, [r4, #6]
|
||||
subs r1, #1
|
||||
strb r0, [r1]
|
||||
ldrh r1, [r4, #8]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x84
|
||||
strb r1, [r0]
|
||||
ldrh r0, [r4, #0xa]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x83
|
||||
strb r0, [r1]
|
||||
ldrh r0, [r4, #0xc]
|
||||
subs r1, #1
|
||||
strb r0, [r1]
|
||||
ldrh r0, [r4, #0xe]
|
||||
subs r1, #1
|
||||
strb r0, [r1]
|
||||
ldr r0, _0808C748 @ =gScreen
|
||||
adds r0, #0x60
|
||||
ldrh r1, [r0]
|
||||
movs r0, #0xff
|
||||
lsls r0, r0, #8
|
||||
ands r0, r1
|
||||
ldrh r1, [r4, #0x10]
|
||||
orrs r0, r1
|
||||
ldrh r1, [r4, #0x12]
|
||||
bl sub_0801E1B8
|
||||
movs r0, #1
|
||||
strb r0, [r5, #0xc]
|
||||
adds r0, r5, #0
|
||||
bl sub_0808C74C
|
||||
ldrh r2, [r4]
|
||||
movs r0, #0x3a
|
||||
movs r1, #1
|
||||
bl CreateObject
|
||||
cmp r0, #0
|
||||
beq _0808C742
|
||||
ldrh r1, [r4, #2]
|
||||
adds r0, #0x6a
|
||||
strh r1, [r0]
|
||||
_0808C742:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0808C744: .4byte gUnk_081215E8
|
||||
_0808C748: .4byte gScreen
|
||||
|
||||
thumb_func_start sub_0808C74C
|
||||
sub_0808C74C: @ 0x0808C74C
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r3, [r4, #0x50]
|
||||
cmp r3, #0
|
||||
beq _0808C76C
|
||||
ldr r2, _0808C768 @ =gRoomControls
|
||||
ldrh r0, [r3, #0x2e]
|
||||
ldrh r1, [r2, #0xa]
|
||||
subs r0, r0, r1
|
||||
strh r0, [r4, #0x2e]
|
||||
ldrh r0, [r3, #0x32]
|
||||
ldrh r1, [r2, #0xc]
|
||||
subs r0, r0, r1
|
||||
b _0808C772
|
||||
.align 2, 0
|
||||
_0808C768: .4byte gRoomControls
|
||||
_0808C76C:
|
||||
movs r0, #0x78
|
||||
strh r0, [r4, #0x2e]
|
||||
movs r0, #0x50
|
||||
_0808C772:
|
||||
strh r0, [r4, #0x32]
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x86
|
||||
movs r1, #0
|
||||
ldrsh r0, [r5, r1]
|
||||
cmp r0, #0
|
||||
bge _0808C79C
|
||||
movs r2, #0x2e
|
||||
ldrsh r0, [r4, r2]
|
||||
movs r3, #0x32
|
||||
ldrsh r1, [r4, r3]
|
||||
movs r2, #0
|
||||
movs r3, #0
|
||||
bl sub_0801E49C
|
||||
ldr r1, _0808C83C @ =gUnk_02036BB8
|
||||
movs r0, #1
|
||||
str r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_0808C840
|
||||
_0808C79C:
|
||||
movs r6, #0
|
||||
ldrsh r0, [r5, r6]
|
||||
movs r2, #0xfa
|
||||
lsls r2, r2, #1
|
||||
cmp r0, r2
|
||||
ble _0808C7C2
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r4, r1]
|
||||
movs r3, #0x32
|
||||
ldrsh r1, [r4, r3]
|
||||
movs r3, #0
|
||||
bl sub_0801E49C
|
||||
ldr r1, _0808C83C @ =gUnk_02036BB8
|
||||
movs r0, #1
|
||||
str r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_0808C840
|
||||
_0808C7C2:
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x85
|
||||
movs r0, #0
|
||||
ldrsb r0, [r1, r0]
|
||||
ldrh r6, [r5]
|
||||
adds r0, r0, r6
|
||||
strh r0, [r5]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x84
|
||||
ldrb r0, [r0]
|
||||
ldrb r2, [r1]
|
||||
adds r0, r0, r2
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
cmp r0, #0x10
|
||||
ble _0808C7E8
|
||||
movs r0, #0x10
|
||||
strb r0, [r1]
|
||||
_0808C7E8:
|
||||
movs r0, #0
|
||||
ldrsb r0, [r1, r0]
|
||||
movs r2, #0x10
|
||||
rsbs r2, r2, #0
|
||||
cmp r0, r2
|
||||
bge _0808C7F6
|
||||
strb r2, [r1]
|
||||
_0808C7F6:
|
||||
adds r3, r4, #0
|
||||
adds r3, #0x83
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x82
|
||||
ldrb r0, [r1]
|
||||
ldrb r6, [r3]
|
||||
adds r0, r0, r6
|
||||
strb r0, [r3]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x81
|
||||
ldrb r0, [r0]
|
||||
ldrb r6, [r1]
|
||||
adds r0, r0, r6
|
||||
strb r0, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
cmp r0, #0x10
|
||||
ble _0808C81E
|
||||
movs r0, #0x10
|
||||
strb r0, [r1]
|
||||
_0808C81E:
|
||||
movs r0, #0
|
||||
ldrsb r0, [r1, r0]
|
||||
cmp r0, r2
|
||||
bge _0808C828
|
||||
strb r2, [r1]
|
||||
_0808C828:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r4, r1]
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r4, r2]
|
||||
movs r4, #0
|
||||
ldrsh r2, [r5, r4]
|
||||
ldrb r3, [r3]
|
||||
bl sub_0801E49C
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0808C83C: .4byte gUnk_02036BB8
|
||||
|
||||
thumb_func_start sub_0808C840
|
||||
sub_0808C840: @ 0x0808C840
|
||||
push {lr}
|
||||
ldr r0, _0808C854 @ =gScreen
|
||||
adds r0, #0x66
|
||||
movs r1, #0
|
||||
strh r1, [r0]
|
||||
bl sub_0801E104
|
||||
bl DeleteThisEntity
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0808C854: .4byte gScreen
|
||||
|
||||
thumb_func_start sub_0808C858
|
||||
sub_0808C858: @ 0x0808C858
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r1, [r2, #0xb]
|
||||
movs r0, #2
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0808C878
|
||||
ldr r1, _0808C870 @ =gScreen
|
||||
adds r3, r1, #0
|
||||
adds r3, #0x66
|
||||
ldr r0, _0808C874 @ =0x00003FBF
|
||||
b _0808C880
|
||||
.align 2, 0
|
||||
_0808C870: .4byte gScreen
|
||||
_0808C874: .4byte 0x00003FBF
|
||||
_0808C878:
|
||||
ldr r1, _0808C898 @ =gScreen
|
||||
adds r3, r1, #0
|
||||
adds r3, #0x66
|
||||
ldr r0, _0808C89C @ =0x00003FFF
|
||||
_0808C880:
|
||||
strh r0, [r3]
|
||||
adds r3, r1, #0
|
||||
ldrb r1, [r2, #0xb]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0808C8A0
|
||||
adds r1, r3, #0
|
||||
adds r1, #0x6a
|
||||
movs r0, #0
|
||||
b _0808C8A6
|
||||
.align 2, 0
|
||||
_0808C898: .4byte gScreen
|
||||
_0808C89C: .4byte 0x00003FFF
|
||||
_0808C8A0:
|
||||
adds r1, r3, #0
|
||||
adds r1, #0x6a
|
||||
movs r0, #0x10
|
||||
_0808C8A6:
|
||||
strh r0, [r1]
|
||||
movs r0, #1
|
||||
strb r0, [r2, #0xc]
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x68
|
||||
adds r0, #0xff
|
||||
strh r0, [r1]
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0808C8B8
|
||||
sub_0808C8B8: @ 0x0808C8B8
|
||||
push {lr}
|
||||
adds r3, r0, #0
|
||||
adds r2, r3, #0
|
||||
adds r2, #0x68
|
||||
adds r1, r3, #0
|
||||
adds r1, #0x6a
|
||||
ldrh r0, [r2]
|
||||
ldrh r1, [r1]
|
||||
subs r0, r0, r1
|
||||
strh r0, [r2]
|
||||
lsls r0, r0, #0x10
|
||||
cmp r0, #0
|
||||
bge _0808C8D6
|
||||
movs r0, #0
|
||||
strh r0, [r2]
|
||||
_0808C8D6:
|
||||
ldrb r1, [r3, #0xb]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0808C8F8
|
||||
ldr r0, _0808C8F4 @ =gScreen
|
||||
ldrh r1, [r2]
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x14
|
||||
movs r2, #0x10
|
||||
subs r2, r2, r1
|
||||
adds r0, #0x6a
|
||||
strh r2, [r0]
|
||||
b _0808C904
|
||||
.align 2, 0
|
||||
_0808C8F4: .4byte gScreen
|
||||
_0808C8F8:
|
||||
ldr r1, _0808C918 @ =gScreen
|
||||
ldrh r0, [r2]
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x14
|
||||
adds r1, #0x6a
|
||||
strh r0, [r1]
|
||||
_0808C904:
|
||||
adds r0, r3, #0
|
||||
adds r0, #0x68
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
cmp r0, #0
|
||||
bne _0808C914
|
||||
bl DeleteThisEntity
|
||||
_0808C914:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0808C918: .4byte gScreen
|
|
@ -43382,6 +43382,11 @@
|
|||
"start": 1185352,
|
||||
"size": 32
|
||||
},
|
||||
{
|
||||
"path": "macroPlayer/gUnk_081216B4.bin",
|
||||
"start": 1185460,
|
||||
"size": 8
|
||||
},
|
||||
{
|
||||
"path": "object3D/gUnk_081216C8_EU.bin",
|
||||
"variants": [
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_081215E8:: @ 081215E8
|
||||
.incbin "object3A/gUnk_081215E8.bin"
|
||||
|
||||
gUnk_08121638:: @ 08121638
|
||||
.4byte sub_0808C6D4
|
||||
.4byte sub_0808C74C
|
||||
|
||||
gUnk_08121640:: @ 08121640
|
||||
.4byte sub_0808C858
|
||||
.4byte sub_0808C8B8
|
||||
|
||||
gUnk_08121648:: @ 08121648
|
||||
.incbin "object3A/gUnk_08121648.bin"
|
|
@ -284,7 +284,7 @@ void Object36(Entity*);
|
|||
void Object37(Entity*);
|
||||
void JarPortal(Entity*);
|
||||
void BossDoor();
|
||||
void Object3A(Entity*);
|
||||
void Object3A();
|
||||
void MacroMushromStalks(Entity*);
|
||||
void MacroPlayer(Entity*);
|
||||
void Object3D(Entity*);
|
||||
|
|
|
@ -678,7 +678,7 @@ SECTIONS {
|
|||
asm/object/object37.o(.text);
|
||||
src/object/jarPortal.o(.text);
|
||||
src/object/bossDoor.o(.text);
|
||||
asm/object/object3A.o(.text);
|
||||
src/object/object3A.o(.text);
|
||||
src/object/macroMushroomStalks.o(.text);
|
||||
asm/object/object75.o(.text); /* 75 and 76 are mislocated in object table */
|
||||
asm/object/object76.o(.text);
|
||||
|
@ -1412,7 +1412,7 @@ SECTIONS {
|
|||
data/animations/object/jarPortal.o(.rodata);
|
||||
src/object/bossDoor.o(.rodata);
|
||||
data/animations/object/bossDoor.o(.rodata);
|
||||
data/const/object/object3A.o(.rodata);
|
||||
src/object/object3A.o(.rodata);
|
||||
src/object/macroMushroomStalks.o(.rodata);
|
||||
data/const/object/object75.o(.rodata);
|
||||
data/const/object/object76.o(.rodata);
|
||||
|
|
|
@ -0,0 +1,164 @@
|
|||
/**
|
||||
* @file object3A.c
|
||||
* @ingroup Objects
|
||||
*
|
||||
* @brief Object3A object
|
||||
*/
|
||||
|
||||
#define NENT_DEPRECATED
|
||||
#include "global.h"
|
||||
#include "object.h"
|
||||
#include "functions.h"
|
||||
#include "screen.h"
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ Entity base;
|
||||
/*0x68*/ u16 unk_68;
|
||||
/*0x6a*/ u16 unk_6a;
|
||||
/*0x6c*/ u8 unk_6c[0x15];
|
||||
/*0x81*/ u8 unk_81;
|
||||
/*0x82*/ s8 unk_82;
|
||||
/*0x83*/ u8 unk_83;
|
||||
/*0x84*/ u8 unk_84;
|
||||
/*0x85*/ s8 unk_85;
|
||||
/*0x86*/ s16 unk_86;
|
||||
} Object3AEntity;
|
||||
|
||||
typedef struct {
|
||||
u16 unk_0;
|
||||
u16 unk_1;
|
||||
u16 unk_2;
|
||||
s16 unk_3;
|
||||
u16 unk_4;
|
||||
u16 unk_5;
|
||||
s16 unk_6;
|
||||
u16 unk_7;
|
||||
u16 unk_8;
|
||||
u16 unk_9;
|
||||
} struct_081215E8;
|
||||
|
||||
extern void sub_0801E49C(u32, u32, u32, u32);
|
||||
extern bool32 gUnk_02036BB8;
|
||||
|
||||
void sub_0808C6D4(Object3AEntity*);
|
||||
void sub_0808C74C(Object3AEntity*);
|
||||
void sub_0808C858(Object3AEntity*);
|
||||
void sub_0808C8B8(Object3AEntity*);
|
||||
void sub_0808C840(Object3AEntity*);
|
||||
|
||||
const struct_081215E8 gUnk_081215E8[] = {
|
||||
{ 5, 4, 280, -6, 0, 0, -8, 0, 31, 63 },
|
||||
{ 6, 2, 0, 4, 0, 0, 8, 0, 63, 31 },
|
||||
{ 7, 4, 0, 4, 0, 0, -6, 0, 63, 31 },
|
||||
{ 6, 2, 0, 16, 0, 0, 16, 0, 63, 31 },
|
||||
};
|
||||
|
||||
void Object3A(Object3AEntity* this) {
|
||||
static void (*const gUnk_08121638[])(Object3AEntity*) = {
|
||||
sub_0808C6D4,
|
||||
sub_0808C74C,
|
||||
};
|
||||
static void (*const gUnk_08121640[])(Object3AEntity*) = {
|
||||
sub_0808C858,
|
||||
sub_0808C8B8,
|
||||
};
|
||||
|
||||
if (super->type == 0) {
|
||||
gUnk_08121638[super->action](this);
|
||||
} else {
|
||||
gUnk_08121640[super->action](this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0808C6D4(Object3AEntity* this) {
|
||||
Object3AEntity* obj;
|
||||
const struct_081215E8* ptr = &gUnk_081215E8[super->type2];
|
||||
this->unk_86 = ptr->unk_2;
|
||||
this->unk_85 = ptr->unk_3;
|
||||
this->unk_84 = ptr->unk_4;
|
||||
this->unk_83 = ptr->unk_5;
|
||||
this->unk_82 = ptr->unk_6;
|
||||
this->unk_81 = ptr->unk_7;
|
||||
sub_0801E1B8((gScreen.controls.windowInsideControl & 0xff00) | ptr->unk_8, ptr->unk_9);
|
||||
super->action = 1;
|
||||
sub_0808C74C(this);
|
||||
obj = (Object3AEntity*)CreateObject(OBJECT_3A, 1, ptr->unk_0);
|
||||
if (obj != NULL) {
|
||||
obj->unk_6a = ptr->unk_1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0808C74C(Object3AEntity* this) {
|
||||
if (super->parent != NULL) {
|
||||
super->x.HALF.HI = super->parent->x.HALF.HI - gRoomControls.scroll_x;
|
||||
super->y.HALF.HI = super->parent->y.HALF.HI - gRoomControls.scroll_y;
|
||||
} else {
|
||||
super->x.HALF.HI = 0x78;
|
||||
super->y.HALF.HI = 0x50;
|
||||
}
|
||||
if (this->unk_86 < 0) {
|
||||
sub_0801E49C(super->x.HALF.HI, super->y.HALF.HI, 0, 0);
|
||||
gUnk_02036BB8 = TRUE;
|
||||
sub_0808C840(this);
|
||||
}
|
||||
if (this->unk_86 > 500) {
|
||||
sub_0801E49C(super->x.HALF.HI, super->y.HALF.HI, 500, 0);
|
||||
gUnk_02036BB8 = 1;
|
||||
sub_0808C840(this);
|
||||
}
|
||||
this->unk_86 += this->unk_85;
|
||||
this->unk_85 += this->unk_84;
|
||||
if (this->unk_85 > 0x10) {
|
||||
this->unk_85 = 0x10;
|
||||
}
|
||||
if (this->unk_85 < -0x10) {
|
||||
this->unk_85 = 0xf0;
|
||||
}
|
||||
this->unk_83 += this->unk_82;
|
||||
this->unk_82 += this->unk_81;
|
||||
if (this->unk_82 > 0x10) {
|
||||
this->unk_82 = 0x10;
|
||||
}
|
||||
if (this->unk_82 < -0x10) {
|
||||
this->unk_82 = -0x10;
|
||||
}
|
||||
sub_0801E49C(super->x.HALF.HI, super->y.HALF.HI, this->unk_86, this->unk_83);
|
||||
}
|
||||
|
||||
void sub_0808C840(Object3AEntity* this) {
|
||||
gScreen.controls.layerFXControl = 0;
|
||||
sub_0801E104();
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
void sub_0808C858(Object3AEntity* this) {
|
||||
if ((super->type2 & 2) != 0) {
|
||||
gScreen.controls.layerFXControl = 0x3fbf;
|
||||
} else {
|
||||
gScreen.controls.layerFXControl = 0x3fff;
|
||||
}
|
||||
if ((super->type2 & 1) != 0) {
|
||||
gScreen.controls.layerBrightness = 0;
|
||||
} else {
|
||||
gScreen.controls.layerBrightness = 0x10;
|
||||
}
|
||||
super->action = 1;
|
||||
this->unk_68 = 0x100;
|
||||
}
|
||||
|
||||
void sub_0808C8B8(Object3AEntity* this) {
|
||||
s32 tmp = this->unk_68 -= this->unk_6a;
|
||||
if (tmp * 0x10000 < 0) {
|
||||
this->unk_68 = 0;
|
||||
}
|
||||
if ((super->type2 & 1) != 0) {
|
||||
gScreen.controls.layerBrightness = 0x10 - ((s16)this->unk_68 >> 4);
|
||||
} else {
|
||||
gScreen.controls.layerBrightness = (s16)this->unk_68 >> 4;
|
||||
}
|
||||
if ((s16)this->unk_68 == 0) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
const u16 gUnk_08121648[] = { 264, 252, 256, 256, 248, 260, 240, 264, 248, 260, 256, 256, 264, 252, 272, 248 };
|
Loading…
Reference in New Issue