Skip to content

Commit

Permalink
Partially match it_27CF and it_2E6A (doldecomp#1478)
Browse files Browse the repository at this point in the history
Co-authored-by: Robin Avery <[email protected]>
  • Loading branch information
AaronB-Hub and ribbanya authored Oct 13, 2024
1 parent 3f8154d commit 824bb09
Show file tree
Hide file tree
Showing 7 changed files with 540 additions and 35 deletions.
10 changes: 5 additions & 5 deletions src/melee/gr/grmaterial.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,14 +151,14 @@ void grMaterial_801C8CDC(Item_GObj* gobj)
Item_8026A8EC(gobj);
}

void grMaterial_801C8CFC(int arg0, int arg1, int arg2, int arg3, int arg4,
int arg5, int arg6)
void grMaterial_801C8CFC(int arg0, int arg1, Ground* arg2, HSD_JObj* arg3,
int arg4, HSD_GObjEvent arg5, int arg6)
{
it_802E6AEC(arg2, arg0, arg1, arg3, 0, 0, arg4, arg5, arg6);
it_802E6AEC(arg2, arg0, arg1, arg3, NULL, 0, arg4, arg5, arg6);
}

void grMaterial_801C8D44(int arg0, int arg1, int arg2, int arg3, int arg4,
int arg5, int arg6, int arg7)
void grMaterial_801C8D44(int arg0, int arg1, Ground* arg2, Vec3* arg3,
int arg4, int arg5, HSD_GObjEvent arg6, int arg7)
{
it_802E6AEC(arg2, arg0, arg1, 0, arg3, arg4, arg5, arg6, arg7);
}
Expand Down
42 changes: 40 additions & 2 deletions src/melee/it/itCommonItems.h
Original file line number Diff line number Diff line change
Expand Up @@ -393,15 +393,53 @@ typedef struct itTaruCann_DatAttrs {
/* +2C */ int x2C;
} itTaruCann_DatAttrs;

// Should it_2F28 and it_27CF use the same structs?
typedef struct it_27CF_ItemVars {
f32 x0;
} it_27CF_ItemVars;

typedef struct it_27CF_DatAttrs {
Vec3 pos;
Vec3 vel;
f32 float1; // lifetime
f32 float2;
f32 float3; // item var x0
f32 x24; // item->xC98
int x28; // ItemKind
} it_27CF_DatAttrs;

typedef struct it_2F28_ItemVars {
f32 x0;
} it_2F28_ItemVars;

struct it_2F28_DatAttrs {
Vec3 pos;
Vec3 vel;
f32 float1;
f32 float2;
f32 float1; // lifetime
f32 float2; // item var x0
};

// Not sure if there is a way to combine these two structs?
typedef struct it_2E6A_ItemVars_1 {
/* +0 ip+DD4 */ s16 x0;
/* +0 ip+DD4 */ s16 x2;
/* +4 ip+DD8 */ HSD_JObj* x4;
/* +8 ip+DDC */ f32 x8; // unused?
/* +C ip+DE0 */ f32 xC; // unused?
/* +10 ip+DE4 */ void* x10;
/* +14 ip+DE8 */ void* x14;
/* +18 ip+DEC */ void* x18;
/* +1C ip+DF0 */ void* x1C;
} it_2E6A_ItemVars_1;

typedef struct it_2E6A_ItemVars_2 {
/* +0 ip+DD4 */ s16 x0;
/* +0 ip+DD4 */ u16 x2;
/* +4 ip+DD8 */ Vec3 x4;
/* +10 ip+DE4 */ void* x10;
/* +14 ip+DE8 */ void* x14;
/* +18 ip+DEC */ void* x18;
/* +1C ip+DF0 */ void* x1C;
} it_2E6A_ItemVars_2;

#endif
245 changes: 232 additions & 13 deletions src/melee/it/items/it_27CF.c
Original file line number Diff line number Diff line change
@@ -1,25 +1,244 @@
/// #it_802F2F34
#include "it/forward.h"

/// #it_802F3020
#include "it_27CF.h"

/// #it_802F3078
#include "ef/efasync.h"
#include "it/inlines.h"
#include "it/it_266F.h"
#include "it/it_26B1.h"
#include "it/it_2725.h"
#include "it/itCommonItems.h"
#include "it/item.h"
#include "it/items/types.h"
#include "it/types.h"

/// #it_802F3120
#include <math_ppc.h>
#include <baselib/gobj.h>
#include <baselib/jobj.h>
#include <melee/it/item.h>

/// #it_802F3150
ItemStateTable it_803F94A0[] = {
{ -1, it_802F31B8, it_802F3260, it_802F3264 },
{ -1, it_802F3078, it_802F3120, it_802F3150 },
{ -1, it_802F32F8, NULL, NULL },
};

/// #it_802F317C
void it_802F2F34(HSD_GObj* gobj, it_27CF_DatAttrs* attr)
{
Item* item;
Item_GObj* item_gobj;
SpawnItem spawn;

/// #it_802F31B8
spawn.kind = attr->x28;
spawn.prev_pos = attr->pos;
spawn.prev_pos.z = 0.0f;
spawn.pos = spawn.prev_pos;
spawn.facing_dir = attr->float2;
spawn.x3C_damage = 0;
spawn.vel = attr->vel;
spawn.x0_parent_gobj = 0;
spawn.x4_parent_gobj2 = 0;
spawn.x44_flag.b0 = 1;
spawn.x40 = 0;
item_gobj = Item_80268B18(&spawn);
if (item_gobj != NULL) {
item = GET_ITEM((HSD_GObj*) item_gobj);
item->xDD4_itemVar.it_27CF.x0 = attr->float3;
item->xC98 = attr->x24;
it_80275158(item_gobj, attr->float1);
// it_802F3020(item_gobj);
it_802F3020((HSD_GObj*) item_gobj);
}
}

void it_802F3260(void) {}
// void it_802F3020(Item_GObj* item_gobj) {
void it_802F3020(HSD_GObj* item_gobj)
{
Item* item;

/// #it_802F3264
item = GET_ITEM(item_gobj);
it_8026B3A8((Item_GObj*) item_gobj);
Item_80268E5C((HSD_GObj*) item_gobj, 1, ITEM_ANIM_UPDATE);
item->xDCE_flag.b7 = 0;
}

/// #it_802F3290
#if 0
inline bool inline1(HSD_GObj* item_gobj) {
Item* item;
f32 sp1C;
HSD_JObj* item_jobj;

/// #it_802F32F8
item = GET_ITEM(item_gobj);
item->xD44_lifeTimer -= 1.0f;
if (item->xD44_lifeTimer <= 0.0f) {
item = item_gobj->user_data;
item_jobj = item_gobj->hsd_obj;
sp1C = 1.0f;
Item_8026AE84(item, 280088, 127, 64);
efAsync_Spawn(item_gobj, &item->xBC0, 4U, 1231, item_gobj->hsd_obj, &sp1C);
it_802F3290((Item_GObj*) item_gobj);
}
return false;
}

/// #it_802F3330
bool it_802F3078(HSD_GObj* item_gobj) {
PAD_STACK(8);
return inline1(item_gobj);
}

/// #it_802F3374
// void it_802F3120(Item_GObj* item_gobj) {
void it_802F3120(HSD_GObj* item_gobj) {
ItemAttr* attr;

attr = ((Item*) item_gobj->user_data)->xCC_item_attr;
it_80272860((Item_GObj*) item_gobj, attr->x10_fall_speed, attr->x14_fall_speed_max);
}

// bool it_802F3150(Item_GObj* item_gobj) {
bool it_802F3150(HSD_GObj* item_gobj) {
it_8026E15C((Item_GObj*) item_gobj, it_802F317C);
return false;
}

// void it_802F317C(Item_GObj* gobj) {
void it_802F317C(HSD_GObj* item_gobj) {
Item* item;

item = item_gobj->user_data;
item->x40_vel.x = item->x40_vel.y = item->x40_vel.z = 0.0f;
Item_80268E5C(item_gobj, 0, ITEM_ANIM_UPDATE);
}

bool it_802F31B8(HSD_GObj* item_gobj) {
PAD_STACK(8);
return inline1(item_gobj);
}

#else
// bool it_802F3078(Item_GObj* item_gobj) {
bool it_802F3078(HSD_GObj* item_gobj)
{
Item* item;
f32 sp1C;
HSD_JObj* item_jobj;
PAD_STACK(10);

item = item_gobj->user_data;
item->xD44_lifeTimer -= 1.0f;
if (item->xD44_lifeTimer <= 0.0f) {
item = item_gobj->user_data;
item_jobj = item_gobj->hsd_obj;
sp1C = 1.0f;
Item_8026AE84(item, 280088, 127, 64);
efAsync_Spawn(item_gobj, &item->xBC0, 4U, 1231, item_gobj->hsd_obj,
&sp1C);
it_802F3290((Item_GObj*) item_gobj);
}
return false;
}

// void it_802F3120(Item_GObj* item_gobj) {
void it_802F3120(HSD_GObj* item_gobj)
{
ItemAttr* attr;

attr = ((Item*) item_gobj->user_data)->xCC_item_attr;
it_80272860((Item_GObj*) item_gobj, attr->x10_fall_speed,
attr->x14_fall_speed_max);
}

// bool it_802F3150(Item_GObj* item_gobj) {
bool it_802F3150(HSD_GObj* item_gobj)
{
it_8026E15C((Item_GObj*) item_gobj, it_802F317C);
return false;
}

// void it_802F317C(Item_GObj* gobj) {
void it_802F317C(HSD_GObj* item_gobj)
{
Item* item;

item = item_gobj->user_data;
item->x40_vel.x = item->x40_vel.y = item->x40_vel.z = 0.0f;
Item_80268E5C(item_gobj, 0, ITEM_ANIM_UPDATE);
}

// bool it_802F31B8(Item_GObj* item_gobj) {
bool it_802F31B8(HSD_GObj* item_gobj)
{
Item* item;
f32 sp1C;
HSD_JObj* item_jobj;
PAD_STACK(10);

item = item_gobj->user_data;
item->xD44_lifeTimer -= 1.0f;
if (item->xD44_lifeTimer <= 0.0f) {
item = item_gobj->user_data;
item_jobj = item_gobj->hsd_obj;
sp1C = 1.0f;
Item_8026AE84(item, 280088, 127, 64);
efAsync_Spawn(item_gobj, &item->xBC0, 4U, 1231, item_gobj->hsd_obj,
&sp1C);
it_802F3290((Item_GObj*) item_gobj);
}
return false;
}
#endif

// void it_802F3260(Item_GObj* item_gobj) {
void it_802F3260(HSD_GObj* item_gobj)
{
return;
}

// bool it_802F3264(Item_GObj* item_gobj) {
bool it_802F3264(HSD_GObj* item_gobj)
{
it_8026D62C((Item_GObj*) item_gobj, it_802F3020);
return false;
}

void it_802F3290(Item_GObj* item_gobj)
{
HSD_JObj* item_jobj;
Item* item;

item_jobj = GET_JOBJ((HSD_GObj*) item_gobj);
item = GET_ITEM((HSD_GObj*) item_gobj);
item->x40_vel.x = item->x40_vel.y = item->x40_vel.z = 0.0f;
item->xD44_lifeTimer = 40.0f;
HSD_JObjSetFlagsAll(item_jobj, 0x10U);
it_802756D0(item_gobj);
Item_80268E5C((HSD_GObj*) item_gobj, 2, ITEM_ANIM_UPDATE);
}

// bool it_802F32F8(Item_GObj* item_gobj) {
bool it_802F32F8(HSD_GObj* item_gobj)
{
Item* item;

item = GET_ITEM(item_gobj);
item->xD44_lifeTimer -= 1.0f;
if (item->xD44_lifeTimer <= 0.0f) {
return true;
}
return false;
}

bool it_802F3330(Item_GObj* item_gobj)
{
Item* item;

item = GET_ITEM((HSD_GObj*) item_gobj);
// item->xD44_lifeTimer = -((item->xCA0 * item->xDD4_itemVar.it_27CF.x0) -
// item->xD44_lifeTimer);
item->xD44_lifeTimer -= item->xCA0 * item->xDD4_itemVar.it_27CF.x0;
return false;
}

void it_802F3374(Item_GObj* item_gobj, HSD_GObj* ref_gobj)
{
it_8026B894(item_gobj, ref_gobj);
}
25 changes: 13 additions & 12 deletions src/melee/it/items/it_27CF.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <baselib/forward.h>

#include "ftSeak/types.h"
#include "it/itCommonItems.h"
#include "it/items/types.h"

/* 283AE4 */ Item_GObj* it_80283AE4(Item_GObj*, Vec3*, s32);
Expand Down Expand Up @@ -78,19 +79,19 @@
/* 2C7AD0 */ void it_802C7AD0(Item_GObj*);
/* 2C7AF0 */ void it_802C7AF0(Item_GObj*);
/* 2F2094 */ Item_GObj* it_802F2094(int, Vec3*, int, int);
/* 2F2F34 */ UNK_RET it_802F2F34(UNK_PARAMS);
/* 2F3020 */ UNK_RET it_802F3020(UNK_PARAMS);
/* 2F3078 */ UNK_RET it_802F3078(UNK_PARAMS);
/* 2F3120 */ UNK_RET it_802F3120(UNK_PARAMS);
/* 2F3150 */ UNK_RET it_802F3150(UNK_PARAMS);
/* 2F317C */ UNK_RET it_802F317C(UNK_PARAMS);
/* 2F31B8 */ UNK_RET it_802F31B8(UNK_PARAMS);
/* 2F3260 */ UNK_RET it_802F3260(UNK_PARAMS);
/* 2F3264 */ UNK_RET it_802F3264(UNK_PARAMS);
/* 2F3290 */ UNK_RET it_802F3290(UNK_PARAMS);
/* 2F32F8 */ UNK_RET it_802F32F8(UNK_PARAMS);
/* 2F2F34 */ void it_802F2F34(HSD_GObj*, it_27CF_DatAttrs*);
/* 2F3020 */ void it_802F3020(HSD_GObj*);
/* 2F3078 */ bool it_802F3078(HSD_GObj*);
/* 2F3120 */ void it_802F3120(HSD_GObj*);
/* 2F3150 */ bool it_802F3150(HSD_GObj*);
/* 2F317C */ void it_802F317C(HSD_GObj*);
/* 2F31B8 */ bool it_802F31B8(HSD_GObj*);
/* 2F3260 */ void it_802F3260(HSD_GObj*);
/* 2F3264 */ bool it_802F3264(HSD_GObj*);
/* 2F3290 */ void it_802F3290(Item_GObj*);
/* 2F32F8 */ bool it_802F32F8(HSD_GObj*);
/* 2F3330 */ bool it_802F3330(Item_GObj*);
/* 2F3374 */ void it_802F3374(Item_GObj*, Item_GObj*);
/* 2F3374 */ void it_802F3374(Item_GObj*, HSD_GObj*);
/* 3F94A0 */ extern ItemStateTable it_803F94A0[];

#endif
Loading

0 comments on commit 824bb09

Please sign in to comment.