mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-25 18:25:00 -05:00
more ground object decomp
This commit is contained in:
@@ -5,301 +5,6 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start CallbackObjectGetPosHeightAndUnk
|
||||
CallbackObjectGetPosHeightAndUnk:
|
||||
push {r4,lr}
|
||||
adds r3, r0, 0
|
||||
movs r4, 0x9A
|
||||
lsls r4, 1
|
||||
adds r0, r3, r4
|
||||
ldr r0, [r0]
|
||||
str r0, [r1]
|
||||
movs r1, 0x9C
|
||||
lsls r1, 1
|
||||
adds r0, r3, r1
|
||||
ldr r0, [r0]
|
||||
str r0, [r2]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CallbackObjectGetPosHeightAndUnk
|
||||
|
||||
thumb_func_start CallbackObjectSetPosHeight
|
||||
CallbackObjectSetPosHeight:
|
||||
movs r2, 0x9A
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
str r1, [r0]
|
||||
bx lr
|
||||
thumb_func_end CallbackObjectSetPosHeight
|
||||
|
||||
thumb_func_start CallbackObjectGetDirection
|
||||
CallbackObjectGetDirection:
|
||||
movs r2, 0x90
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r1]
|
||||
bx lr
|
||||
thumb_func_end CallbackObjectGetDirection
|
||||
|
||||
thumb_func_start CallbackObjectSetDirection
|
||||
CallbackObjectSetDirection:
|
||||
push {lr}
|
||||
adds r2, r0, 0
|
||||
lsls r1, 24
|
||||
asrs r1, 24
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
beq _080AC934
|
||||
movs r3, 0x90
|
||||
lsls r3, 1
|
||||
adds r0, r2, r3
|
||||
strb r1, [r0]
|
||||
_080AC934:
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CallbackObjectSetDirection
|
||||
|
||||
thumb_func_start CallbackObjectSetEventIndex
|
||||
CallbackObjectSetEventIndex:
|
||||
push {r4,r5,lr}
|
||||
lsls r1, 16
|
||||
adds r3, r0, 0
|
||||
movs r0, 0xFF
|
||||
lsls r0, 16
|
||||
ands r0, r1
|
||||
lsrs r0, 16
|
||||
cmp r0, 0
|
||||
beq _080AC958
|
||||
ldr r1, _080AC954
|
||||
lsls r0, 1
|
||||
adds r0, r1
|
||||
b _080AC95E
|
||||
.align 2, 0
|
||||
_080AC954: .4byte gUnknown_81183A0
|
||||
_080AC958:
|
||||
movs r5, 0x9F
|
||||
lsls r5, 1
|
||||
adds r0, r3, r5
|
||||
_080AC95E:
|
||||
movs r1, 0
|
||||
ldrsh r2, [r0, r1]
|
||||
movs r5, 0x9F
|
||||
lsls r5, 1
|
||||
adds r1, r3, r5
|
||||
ldrh r4, [r1]
|
||||
movs r5, 0
|
||||
ldrsh r0, [r1, r5]
|
||||
cmp r0, r2
|
||||
beq _080AC97C
|
||||
strh r2, [r1]
|
||||
movs r0, 0x9E
|
||||
lsls r0, 1
|
||||
adds r1, r3, r0
|
||||
b _080AC98C
|
||||
_080AC97C:
|
||||
movs r0, 0x80
|
||||
lsls r0, 5
|
||||
ands r0, r4
|
||||
cmp r0, 0
|
||||
beq _080AC990
|
||||
movs r5, 0x9E
|
||||
lsls r5, 1
|
||||
adds r1, r3, r5
|
||||
_080AC98C:
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
_080AC990:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CallbackObjectSetEventIndex
|
||||
|
||||
thumb_func_start CallbackObjectSetUnk_80AC998
|
||||
CallbackObjectSetUnk_80AC998:
|
||||
push {lr}
|
||||
lsls r1, 16
|
||||
asrs r1, 16
|
||||
adds r2, r1, 0
|
||||
cmp r1, 0
|
||||
bne _080AC9AA
|
||||
movs r1, 0xE0
|
||||
lsls r1, 1
|
||||
adds r2, r1, 0
|
||||
_080AC9AA:
|
||||
movs r1, 0xA0
|
||||
lsls r1, 1
|
||||
adds r0, r1
|
||||
strh r2, [r0]
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CallbackObjectSetUnk_80AC998
|
||||
|
||||
thumb_func_start CallbackObjectSpriteRelatedCheck_80AC9B8
|
||||
CallbackObjectSpriteRelatedCheck_80AC9B8:
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
movs r2, 0x9E
|
||||
lsls r2, 1
|
||||
adds r0, r1, r2
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _080AC9D6
|
||||
adds r2, 0x8
|
||||
adds r0, r1, r2
|
||||
bl sub_80A66F8
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
b _080AC9D8
|
||||
_080AC9D6:
|
||||
movs r0, 0x1
|
||||
_080AC9D8:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end CallbackObjectSpriteRelatedCheck_80AC9B8
|
||||
|
||||
thumb_func_start CallbackObjectSpriteRelated_80AC9DC
|
||||
CallbackObjectSpriteRelated_80AC9DC:
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
movs r2, 0xA0
|
||||
lsls r2, 1
|
||||
adds r0, r1, r2
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r0, 0
|
||||
bne _080AC9FE
|
||||
movs r2, 0xA2
|
||||
lsls r2, 1
|
||||
adds r0, r1, r2
|
||||
bl sub_80A671C
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
b _080ACA00
|
||||
_080AC9FE:
|
||||
movs r0, 0x1
|
||||
_080ACA00:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end CallbackObjectSpriteRelated_80AC9DC
|
||||
|
||||
thumb_func_start CallbackObjectGetFlags
|
||||
CallbackObjectGetFlags:
|
||||
movs r2, 0x8E
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
ldr r0, [r0]
|
||||
str r0, [r1]
|
||||
bx lr
|
||||
thumb_func_end CallbackObjectGetFlags
|
||||
|
||||
thumb_func_start CallbackObjectSetFlags
|
||||
CallbackObjectSetFlags:
|
||||
push {lr}
|
||||
movs r2, 0x4
|
||||
ldrsh r0, [r0, r2]
|
||||
bl sub_80AC1B0
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CallbackObjectSetFlags
|
||||
|
||||
thumb_func_start CallbackObjectClearFlags
|
||||
CallbackObjectClearFlags:
|
||||
push {lr}
|
||||
movs r2, 0x4
|
||||
ldrsh r0, [r0, r2]
|
||||
bl sub_80AC1F4
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CallbackObjectClearFlags
|
||||
|
||||
thumb_func_start CallbackObjectMoveRelative
|
||||
CallbackObjectMoveRelative:
|
||||
push {lr}
|
||||
bl TryMoveRelative_80AC720
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end CallbackObjectMoveRelative
|
||||
|
||||
thumb_func_start GroundObject_Action
|
||||
GroundObject_Action:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
ldr r0, _080ACA7C
|
||||
ldr r5, [r0]
|
||||
movs r7, 0
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
mov r8, r0
|
||||
movs r1, 0x9E
|
||||
lsls r1, 1
|
||||
adds r6, r5, r1
|
||||
_080ACA54:
|
||||
movs r3, 0x6
|
||||
ldrsh r0, [r5, r3]
|
||||
cmp r0, r8
|
||||
beq _080ACAB2
|
||||
adds r4, r5, 0
|
||||
adds r4, 0x38
|
||||
adds r0, r4, 0
|
||||
ldr r1, _080ACA80
|
||||
bl HandleAction
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0
|
||||
beq _080ACA84
|
||||
cmp r0, 0x4
|
||||
bne _080ACA90
|
||||
adds r0, r7, 0
|
||||
bl GroundObject_Delete
|
||||
b _080ACAB2
|
||||
.align 2, 0
|
||||
_080ACA7C: .4byte gGroundObjects
|
||||
_080ACA80: .4byte gUnknown_8118524
|
||||
_080ACA84:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
movs r2, 0x1
|
||||
ldr r3, _080ACAD0
|
||||
bl ExecutePredefinedScript
|
||||
_080ACA90:
|
||||
ldrb r0, [r6]
|
||||
cmp r0, 0
|
||||
beq _080ACAB2
|
||||
movs r0, 0
|
||||
strb r0, [r6]
|
||||
movs r1, 0xA2
|
||||
lsls r1, 1
|
||||
adds r0, r5, r1
|
||||
ldrh r2, [r6, 0x2]
|
||||
movs r3, 0xF8
|
||||
lsls r3, 5
|
||||
adds r1, r3, 0
|
||||
ands r1, r2
|
||||
lsls r2, 24
|
||||
asrs r2, 24
|
||||
bl sub_80A6EFC
|
||||
_080ACAB2:
|
||||
adds r0, r7, 0x1
|
||||
lsls r0, 16
|
||||
asrs r7, r0, 16
|
||||
movs r0, 0xE2
|
||||
lsls r0, 1
|
||||
adds r6, r0
|
||||
adds r5, r0
|
||||
cmp r7, 0xF
|
||||
ble _080ACA54
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080ACAD0: .4byte gUnknown_8118530
|
||||
thumb_func_end GroundObject_Action
|
||||
|
||||
thumb_func_start sub_80ACAD4
|
||||
sub_80ACAD4:
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
typedef struct GroundObject {
|
||||
// size: 0x1C4
|
||||
u8 unk0[4];
|
||||
s16 unk4;
|
||||
s16 id;
|
||||
s16 unk6; // kind
|
||||
s16 unk8; // scriptID / group
|
||||
s8 unkA; // sector
|
||||
@@ -24,13 +24,13 @@ typedef struct GroundObject {
|
||||
PixelPos unk30;
|
||||
Action unk38;
|
||||
u32 flags;
|
||||
s8 unk120;
|
||||
s8 direction;
|
||||
PixelPos unk124;
|
||||
PixelPos unk12C;
|
||||
PixelPos unk134;
|
||||
u8 unk13C;
|
||||
u16 unk13E;
|
||||
u16 unk140;
|
||||
u8 directionRelated;
|
||||
s16 unk13E;
|
||||
s16 unk140;
|
||||
struct UnkGroundSpriteStruct unk144;
|
||||
} GroundObject;
|
||||
|
||||
@@ -67,18 +67,18 @@ static void CallbackObjectSetHitboxPos(void *objectPtr_, PixelPos *posOrNull);
|
||||
static void CallbackObjectSetPositionBounds(void *objectPtr_, PixelPos *from, PixelPos *to);
|
||||
static void CallbackObjectGetHitboxCenter(void *objectPtr_, PixelPos *out);
|
||||
static s32 CallbackObjectMoveReal(void *objectPtr_, PixelPos *pos);
|
||||
extern void CallbackObjectGetPosHeightAndUnk(void *objectPtr_, u32 *height, u32 *unk);
|
||||
extern void CallbackObjectSetPosHeight(void *objectPtr_, u32 height);
|
||||
extern void CallbackObjectGetDirection(void *objectPtr_, s8 *dir);
|
||||
extern void CallbackObjectSetDirection(void *objectPtr_, s32 dir_);
|
||||
extern void CallbackObjectSetEventIndex(void *objectPtr_, u16 a1);
|
||||
extern void CallbackObjectSetUnk_80AC998(void *objectPtr_, s32 a1_, s32 a2);
|
||||
extern bool8 CallbackObjectSpriteRelatedCheck_80AC9B8(void *objectPtr_);
|
||||
extern bool8 CallbackObjectSpriteRelated_80AC9DC(void *objectPtr_);
|
||||
extern void CallbackObjectGetFlags(void *objectPtr_, u32 *flags);
|
||||
extern void CallbackObjectSetFlags(void *objectPtr_, u32 flags);
|
||||
extern void CallbackObjectClearFlags(void *objectPtr_, u32 flags);
|
||||
extern s32 CallbackObjectMoveRelative(void *objectPtr_, PixelPos *pos);
|
||||
static void CallbackObjectGetPosHeightAndUnk(void *objectPtr_, u32 *height, u32 *unk);
|
||||
static void CallbackObjectSetPosHeight(void *objectPtr_, u32 height);
|
||||
static void CallbackObjectGetDirection(void *objectPtr_, s8 *dir);
|
||||
static void CallbackObjectSetDirection(void *objectPtr_, s32 dir_);
|
||||
static void CallbackObjectSetEventIndex(void *objectPtr_, u16 a1);
|
||||
static void CallbackObjectSetUnk_80AC998(void *objectPtr_, s32 a1_, s32 a2);
|
||||
static bool8 CallbackObjectSpriteRelatedCheck_80AC9B8(void *objectPtr_);
|
||||
static bool8 CallbackObjectSpriteRelated_80AC9DC(void *objectPtr_);
|
||||
static void CallbackObjectGetFlags(void *objectPtr_, u32 *flags);
|
||||
static void CallbackObjectSetFlags(void *objectPtr_, u32 flags);
|
||||
static void CallbackObjectClearFlags(void *objectPtr_, u32 flags);
|
||||
static s32 CallbackObjectMoveRelative(void *objectPtr_, PixelPos *pos);
|
||||
|
||||
|
||||
static const CallbackData gGroundObjectCallbacks = {
|
||||
@@ -153,7 +153,6 @@ const u8 gUnknown_8118334[];
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static const struct ScriptCommand gUnknown_81182F4[] = {
|
||||
@@ -171,8 +170,31 @@ static const struct ScriptCommand gUnknown_8118350[] = {
|
||||
JUMP_LABEL(0),
|
||||
};
|
||||
|
||||
const u8 gUnknown_81183A0[] = {
|
||||
0xFF, 0xFF, 0x0, 0x8, 0x1, 0x8, 0x0, 0x10, 0x1, 0x10, 0x2, 0x10, 0x3, 0x10, 0x0, 0x8, 0x1, 0x8, 0x2, 0x8, 0x3, 0x8, 0x4, 0x8, 0x5, 0x8, 0x6, 0x8, 0x7, 0x8, 0x8, 0x8, 0x9, 0x8, 0xA, 0x8, 0xB, 0x8, 0xC, 0x8, 0xD, 0x8, 0xE, 0x8, 0xF, 0x8, 0x0, 0x0};
|
||||
const s16 gUnknown_81183A0[] = {
|
||||
0xFFFF,
|
||||
0x800,
|
||||
0x801,
|
||||
0x1000,
|
||||
0x1001,
|
||||
0x1002,
|
||||
0x1003,
|
||||
0x800,
|
||||
0x801,
|
||||
0x802,
|
||||
0x803,
|
||||
0x804,
|
||||
0x805,
|
||||
0x806,
|
||||
0x807,
|
||||
0x808,
|
||||
0x809,
|
||||
0x80A,
|
||||
0x80B,
|
||||
0x80C,
|
||||
0x80D,
|
||||
0x80E,
|
||||
0x80F,
|
||||
0};
|
||||
|
||||
void AllocGroundObjects(void)
|
||||
{
|
||||
@@ -369,7 +391,7 @@ s32 GroundObject_Add(s32 id_,const GroundObjectData *objectData,s32 group_,s32 s
|
||||
parent = &gGroundObjects[id];
|
||||
Log(0,"GroundObject Add id %3d kind %3d[%3d] type %3d group %3d sector %3d",id,kind,objectData->kind,typeDataPtr->unk0,group,sector);
|
||||
bVar12 = (parent->unk6 == -1);
|
||||
parent->unk4 = id;
|
||||
parent->id = id;
|
||||
parent->unk6 = kind;
|
||||
parent->unk8 = group;
|
||||
parent->unkA = sector;
|
||||
@@ -436,7 +458,7 @@ s32 GroundObject_Add(s32 id_,const GroundObjectData *objectData,s32 group_,s32 s
|
||||
SetUnkInGroundEvent(&objectData->pos, &parent->unk20);
|
||||
|
||||
if (bVar12) {
|
||||
parent->unk120 = parent->unk1C;
|
||||
parent->direction = parent->unk1C;
|
||||
parent->unk124.x = parent->unk20.x - parent->unk14.x;
|
||||
parent->unk12C.x = parent->unk20.x + parent->unk14.x;
|
||||
parent->unk124.y = parent->unk20.y - parent->unk14.y;
|
||||
@@ -446,7 +468,7 @@ s32 GroundObject_Add(s32 id_,const GroundObjectData *objectData,s32 group_,s32 s
|
||||
GetCurrentDungeonBounds(&parent->unk28,&parent->unk30);
|
||||
if (bVar12) {
|
||||
parent->unk13E = 0x800;
|
||||
parent->unk13C = 1;
|
||||
parent->directionRelated = 1;
|
||||
parent->unk140 = 0;
|
||||
sub_80A75CC(&(parent->unk144),id,parent->unk6, parent->flags);
|
||||
}
|
||||
@@ -543,7 +565,7 @@ bool8 GroundObject_ExecuteScript(s32 index_, void *a1, ScriptInfoSmall *script)
|
||||
if(parent->unk6 != -1)
|
||||
{
|
||||
GroundScript_ExecutePP(&parent->unk38, (ActionUnkIds *)a1, script, DEBUG_LOC_PTR(gUnknown_8118334, 0x303, "GroundObject_ExecuteScript"));
|
||||
parent->unk13C = 1;
|
||||
parent->directionRelated = 1;
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
@@ -778,87 +800,87 @@ s32 GetObjectCollision_80AC5F4(GroundObject *param_1, PixelPos *param_2, PixelPo
|
||||
|
||||
s32 TryMoveObjectRelative_80AC6AC(GroundObject *param_1,PixelPos *param_2)
|
||||
{
|
||||
PixelPos local_1c;
|
||||
PixelPos local_14;
|
||||
PixelPos local_1c;
|
||||
PixelPos local_14;
|
||||
|
||||
local_1c.x = param_2->x - (param_1->unk14).x;
|
||||
local_1c.y = param_2->y - (param_1->unk14).y;
|
||||
local_14.x = param_2->x + (param_1->unk14).x;
|
||||
local_14.y = param_2->y + (param_1->unk14).y;
|
||||
if ((((local_1c.x < param_1->unk28.x) || (local_14.x >= param_1->unk30.x)) ||
|
||||
(local_1c.y < param_1->unk28.y)) || (local_14.y >= param_1->unk30.y)) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
s32 ret = GetObjectCollision_80AC5F4(param_1,&local_1c,&local_14);
|
||||
if (ret == 0) {
|
||||
(param_1->unk124) = local_1c;
|
||||
param_1->unk12C = local_14;
|
||||
return 0;
|
||||
local_1c.x = param_2->x - (param_1->unk14).x;
|
||||
local_1c.y = param_2->y - (param_1->unk14).y;
|
||||
local_14.x = param_2->x + (param_1->unk14).x;
|
||||
local_14.y = param_2->y + (param_1->unk14).y;
|
||||
if ((((local_1c.x < param_1->unk28.x) || (local_14.x >= param_1->unk30.x)) ||
|
||||
(local_1c.y < param_1->unk28.y)) || (local_14.y >= param_1->unk30.y)) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
s32 ret = GetObjectCollision_80AC5F4(param_1,&local_1c,&local_14);
|
||||
if (ret == 0) {
|
||||
(param_1->unk124) = local_1c;
|
||||
param_1->unk12C = local_14;
|
||||
return 0;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
s32 TryMoveRelative_80AC720(GroundObject *param_1,PixelPos *param_2)
|
||||
{
|
||||
s32 ret;
|
||||
bool8 bVar1;
|
||||
PixelPos iVar2;
|
||||
PixelPos uVar4;
|
||||
|
||||
iVar2.x = (param_1->unk124).x + param_2->x;
|
||||
iVar2.y = (param_1->unk124).y + param_2->y;
|
||||
uVar4.x = param_1->unk12C.x + param_2->x;
|
||||
uVar4.y = param_1->unk12C.y + param_2->y;
|
||||
|
||||
bVar1 = 0;
|
||||
|
||||
s32 ret;
|
||||
bool8 bVar1;
|
||||
PixelPos iVar2;
|
||||
PixelPos uVar4;
|
||||
|
||||
if (iVar2.x < param_1->unk28.x) {
|
||||
iVar2.x = param_1->unk28.x;
|
||||
uVar4.x = param_1->unk28.x + param_1->unkC.x;
|
||||
bVar1 = 1;
|
||||
}
|
||||
else {
|
||||
if (uVar4.x >= param_1->unk30.x) {
|
||||
iVar2.x = param_1->unk30.x - param_1->unkC.x;
|
||||
uVar4.x = param_1->unk30.x;
|
||||
bVar1 = 1;
|
||||
}
|
||||
}
|
||||
iVar2.x = (param_1->unk124).x + param_2->x;
|
||||
iVar2.y = (param_1->unk124).y + param_2->y;
|
||||
uVar4.x = param_1->unk12C.x + param_2->x;
|
||||
uVar4.y = param_1->unk12C.y + param_2->y;
|
||||
|
||||
if (iVar2.y < param_1->unk28.y) {
|
||||
iVar2.y = param_1->unk28.y;
|
||||
uVar4.y = param_1->unk28.y + param_1->unkC.y;
|
||||
bVar1 = 1;
|
||||
}
|
||||
else {
|
||||
if (uVar4.y >= param_1->unk30.y){
|
||||
iVar2.y = param_1->unk30.y - param_1->unkC.y;
|
||||
uVar4.y = param_1->unk30.y;
|
||||
bVar1 = 0;
|
||||
|
||||
|
||||
if (iVar2.x < param_1->unk28.x) {
|
||||
iVar2.x = param_1->unk28.x;
|
||||
uVar4.x = param_1->unk28.x + param_1->unkC.x;
|
||||
bVar1 = 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (uVar4.x >= param_1->unk30.x) {
|
||||
iVar2.x = param_1->unk30.x - param_1->unkC.x;
|
||||
uVar4.x = param_1->unk30.x;
|
||||
bVar1 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
ret = GetObjectCollision_80AC5F4(param_1,&iVar2,&uVar4);
|
||||
if (ret == 0) {
|
||||
(param_1->unk124) = iVar2;
|
||||
param_1->unk12C = uVar4;
|
||||
if (!bVar1) {
|
||||
return 0;
|
||||
if (iVar2.y < param_1->unk28.y) {
|
||||
iVar2.y = param_1->unk28.y;
|
||||
uVar4.y = param_1->unk28.y + param_1->unkC.y;
|
||||
bVar1 = 1;
|
||||
}
|
||||
else {
|
||||
return 1;
|
||||
if (uVar4.y >= param_1->unk30.y){
|
||||
iVar2.y = param_1->unk30.y - param_1->unkC.y;
|
||||
uVar4.y = param_1->unk30.y;
|
||||
bVar1 = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
||||
ret = GetObjectCollision_80AC5F4(param_1,&iVar2,&uVar4);
|
||||
if (ret == 0) {
|
||||
(param_1->unk124) = iVar2;
|
||||
param_1->unk12C = uVar4;
|
||||
if (!bVar1) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static s16 CallbackObjectGetIndex(void *ptr)
|
||||
{
|
||||
struct GroundObject *groundObject = ptr;
|
||||
return groundObject->unk4;
|
||||
return groundObject->id;
|
||||
}
|
||||
|
||||
static void CallbackObjectGetSize(void *objectPtr_, PixelPos *out)
|
||||
@@ -883,10 +905,10 @@ static void CallbackObjectSetHitboxPos(void *objectPtr_, PixelPos *posOrNull)
|
||||
objectPtr->unk124.y = objectPtr->unk20.y - objectPtr->unk14.y;
|
||||
objectPtr->unk12C.y = objectPtr->unk20.y + objectPtr->unk14.y;
|
||||
objectPtr->unk134.x = objectPtr->unk134.y = 0;
|
||||
if (objectPtr->unk120 != objectPtr->unk1C) {
|
||||
objectPtr->unk13C = TRUE;
|
||||
if (objectPtr->direction != objectPtr->unk1C) {
|
||||
objectPtr->directionRelated = TRUE;
|
||||
}
|
||||
objectPtr->unk120 = objectPtr->unk1C;
|
||||
objectPtr->direction = objectPtr->unk1C;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -911,3 +933,163 @@ static s32 CallbackObjectMoveReal(void *objectPtr_, PixelPos *pos)
|
||||
struct GroundObject *objectPtr = objectPtr_;
|
||||
return TryMoveObjectRelative_80AC6AC(objectPtr, pos);
|
||||
}
|
||||
|
||||
static void CallbackObjectGetPosHeightAndUnk(void *objectPtr_, u32 *height, u32 *unk)
|
||||
{
|
||||
struct GroundObject *objectPtr = objectPtr_;
|
||||
|
||||
*height = objectPtr->unk134.x;
|
||||
*unk= objectPtr->unk134.y;
|
||||
}
|
||||
|
||||
static void CallbackObjectSetPosHeight(void *objectPtr_, u32 height)
|
||||
{
|
||||
struct GroundObject *objectPtr = objectPtr_;
|
||||
objectPtr->unk134.x = height;
|
||||
|
||||
}
|
||||
|
||||
static void CallbackObjectGetDirection(void *objectPtr_, s8 *dir)
|
||||
{
|
||||
struct GroundObject *objectPtr = objectPtr_;
|
||||
*dir = objectPtr->direction;
|
||||
|
||||
}
|
||||
|
||||
static void CallbackObjectSetDirection(void *livesPtr_, s32 direction)
|
||||
{
|
||||
struct GroundObject *livesPtr = livesPtr_;
|
||||
s32 dir = (s8) direction;
|
||||
|
||||
if (dir != -1) {
|
||||
livesPtr->direction = dir;
|
||||
}
|
||||
}
|
||||
|
||||
static void CallbackObjectSetEventIndex(void *livesPtr_, u16 a1) {
|
||||
struct GroundObject *livesPtr = livesPtr_;
|
||||
|
||||
u32 r1;
|
||||
u16 f1 = a1 & 0xFF;
|
||||
|
||||
if (f1 != 0)
|
||||
{
|
||||
r1 = gUnknown_81183A0[f1];
|
||||
}
|
||||
else
|
||||
{
|
||||
r1 = livesPtr->unk13E;
|
||||
}
|
||||
|
||||
if(livesPtr->unk13E != (s16) r1)
|
||||
{
|
||||
livesPtr->unk13E = r1;
|
||||
livesPtr->directionRelated = 1;
|
||||
}
|
||||
else if((livesPtr->unk13E & 0x1000))
|
||||
livesPtr->directionRelated = 1;
|
||||
}
|
||||
|
||||
|
||||
static void CallbackObjectSetUnk_80AC998(void *objectPtr_, s32 a1_, s32 a2) {
|
||||
struct GroundObject *livesPtr = objectPtr_;
|
||||
|
||||
s32 a1Match = (s16) a1_;
|
||||
#ifndef NONMATCHING
|
||||
register s16 a1 asm("r2") = a1Match;
|
||||
#else
|
||||
s32 a1 = a1Match;
|
||||
#endif
|
||||
|
||||
if (a1Match == 0) {
|
||||
a1 = 448;
|
||||
}
|
||||
|
||||
livesPtr->unk140 = a1;
|
||||
}
|
||||
|
||||
extern bool8 sub_80A66F8(struct UnkGroundSpriteStruct *ptr);
|
||||
extern bool8 sub_80A671C(struct UnkGroundSpriteStruct *ptr);
|
||||
|
||||
static bool8 CallbackObjectSpriteRelatedCheck_80AC9B8(void *objectPtr_)
|
||||
{
|
||||
struct GroundObject *livesPtr = objectPtr_;
|
||||
|
||||
if (livesPtr->directionRelated) {
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
return sub_80A66F8(&livesPtr->unk144);
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 CallbackObjectSpriteRelated_80AC9DC(void *objectPtr_)
|
||||
{
|
||||
struct GroundObject *livesPtr = objectPtr_;
|
||||
|
||||
if (livesPtr->unk140 != 0) {
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
return sub_80A671C(&livesPtr->unk144);
|
||||
}
|
||||
}
|
||||
|
||||
static void CallbackObjectGetFlags(void *livesPtr_, u32 *flags)
|
||||
{
|
||||
struct GroundObject *livesPtr = livesPtr_;
|
||||
|
||||
*flags = livesPtr->flags;
|
||||
}
|
||||
|
||||
static void CallbackObjectSetFlags(void *livesPtr_, u32 flags)
|
||||
{
|
||||
struct GroundObject *livesPtr = livesPtr_;
|
||||
|
||||
sub_80AC1B0(livesPtr->id, flags);
|
||||
}
|
||||
|
||||
static void CallbackObjectClearFlags(void *livesPtr_, u32 flags)
|
||||
{
|
||||
struct GroundObject *livesPtr = livesPtr_;
|
||||
|
||||
sub_80AC1F4(livesPtr->id, flags);
|
||||
}
|
||||
|
||||
static s32 CallbackObjectMoveRelative(void *livesPtr_, PixelPos *pos)
|
||||
{
|
||||
struct GroundObject *livesPtr = livesPtr_;
|
||||
|
||||
return TryMoveRelative_80AC720(livesPtr, pos);
|
||||
}
|
||||
|
||||
extern DebugLocation gUnknown_8118524;
|
||||
extern DebugLocation gUnknown_8118530;
|
||||
extern s16 HandleAction(Action *action, DebugLocation *debug);
|
||||
|
||||
void GroundObject_Action(void)
|
||||
{
|
||||
GroundObject *objectPtr;
|
||||
s32 i;
|
||||
|
||||
for (objectPtr = &gGroundObjects[0], i = 0; i < 0x10; i = (s16)(i + 1), objectPtr++)
|
||||
{
|
||||
if (objectPtr->unk6 != -1) {
|
||||
|
||||
switch(HandleAction(&objectPtr->unk38, &gUnknown_8118524))
|
||||
{
|
||||
case 4:
|
||||
GroundObject_Delete(i);
|
||||
continue;
|
||||
case 0:
|
||||
ExecutePredefinedScript(&objectPtr->unk38, NULL, 1, &gUnknown_8118530);
|
||||
break;
|
||||
}
|
||||
|
||||
if (objectPtr->directionRelated) {
|
||||
objectPtr->directionRelated = FALSE;
|
||||
sub_80A6EFC(&objectPtr->unk144,objectPtr->unk13E & 0x1f00,(s8)objectPtr->unk13E);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user