ObjMakeoshihiki OK (#272)

* ObjMakeoshihiki OK

* suggested changed

Co-authored-by: gamestabled <gamest@bl.edu>
This commit is contained in:
gamestabled 2021-09-02 09:49:00 -05:00 committed by GitHub
parent c94fd6ccbc
commit b3816cd26b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 81 additions and 13 deletions

View File

@ -863,8 +863,8 @@ Actor* Actor_RemoveFromTypeList(GlobalContext* globalCtx, ActorContext* actorCtx
void Actor_FreeOverlay(ActorOverlay* entry);
Actor* Actor_Spawn(ActorContext* actorCtx, GlobalContext* globalCtx, s16 index, f32 x, f32 y, f32 z, s16 rotX, s16 rotY, s16 rotZ, s16 sParm10);
ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index);
Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, GlobalContext* globalCtx, s16 index, f32 x, f32 y, f32 z, s16 rotX, s16 rotY, s16 rotZ, s16 variable, u32 cutscene, s32 param_12, Actor* parent);
Actor* Actor_SpawnAsChild(ActorContext* actorCtx, Actor* parent, GlobalContext* globalCtx, s16 index, f32 x, f32 y, f32 z, s16 rotX, s16 rotY, s16 rotZ, s16 variable);
Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, GlobalContext* globalCtx, s16 index, f32 x, f32 y, f32 z, s16 rotX, s16 rotY, s16 rotZ, s32 variable, u32 cutscene, s32 param_12, Actor* parent);
Actor* Actor_SpawnAsChild(ActorContext* actorCtx, Actor* parent, GlobalContext* globalCtx, s16 index, f32 x, f32 y, f32 z, s16 rotX, s16 rotY, s16 rotZ, s32 variable);
void Actor_SpawnTransitionActors(GlobalContext* globalCtx, ActorContext* actorCtx);
void func_800BB2D0(ActorContext* actorCtx, u16* param_2, GlobalContext* globalCtx);
Actor* func_800BB498(ActorContext* actorCtx, Actor* actor, GlobalContext* globalCtx);

3
spec
View File

@ -1819,8 +1819,7 @@ beginseg
name "ovl_Obj_Makeoshihiki"
compress
include "build/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.o"
include "build/data/ovl_Obj_Makeoshihiki/ovl_Obj_Makeoshihiki.data.o"
include "build/data/ovl_Obj_Makeoshihiki/ovl_Obj_Makeoshihiki.reloc.o"
include "build/src/overlays/actors/ovl_Obj_Makeoshihiki/ovl_Obj_Makeoshihiki_reloc.o"
endseg
beginseg

View File

@ -1,3 +1,9 @@
/*
* File: z_obj_makeoshihiki.c
* Overlay: ovl_Obj_Makeoshihiki
* Description: Pushable Block Switch Flags Handler
*/
#include "z_obj_makeoshihiki.h"
#define FLAGS 0x00000010
@ -7,7 +13,6 @@
void ObjMakeoshihiki_Init(Actor* thisx, GlobalContext* globalCtx);
void ObjMakeoshihiki_Update(Actor* thisx, GlobalContext* globalCtx);
#if 0
const ActorInit Obj_Makeoshihiki_InitVars = {
ACTOR_OBJ_MAKEOSHIHIKI,
ACTORCAT_PROP,
@ -20,12 +25,71 @@ const ActorInit Obj_Makeoshihiki_InitVars = {
(ActorFunc)NULL,
};
#endif
s32 ObjMakeoshihiki_GetChildSpawnPointIndex(ObjMakeoshihiki* this, GlobalContext* globalCtx) {
s32 pad;
s32 pathIndexOffset1 = Flags_GetSwitch(globalCtx, OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(this)) ? 1 : 0;
s32 pathIndexOffset2 = Flags_GetSwitch(globalCtx, OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(this)) ? 2 : 0;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Makeoshihiki/func_80972350.s")
return pathIndexOffset1 + pathIndexOffset2;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Makeoshihiki/func_809723C4.s")
void ObjMakeoshihiki_SetSwitchFlags(ObjMakeoshihiki* this, GlobalContext* globalCtx, s32 pathIndex) {
s32 pad;
s32 pad2;
s32 switchFlag1;
s32 switchFlag2;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Makeoshihiki/ObjMakeoshihiki_Init.s")
switchFlag2 = OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(this);
switchFlag1 = OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(this);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Makeoshihiki/ObjMakeoshihiki_Update.s")
if (pathIndex & 2) {
Actor_SetSwitchFlag(globalCtx, switchFlag2);
} else {
Actor_UnsetSwitchFlag(globalCtx, switchFlag2);
}
if (pathIndex & 1) {
Actor_SetSwitchFlag(globalCtx, switchFlag1);
} else {
Actor_UnsetSwitchFlag(globalCtx, switchFlag1);
}
}
void ObjMakeoshihiki_Init(Actor* thisx, GlobalContext* globalCtx) {
ObjMakeoshihiki* this = THIS;
Vec3s* childPoint;
Path* path;
s32 childPointIndex;
path = &globalCtx->setupPathList[OBJMAKEOSHIHIKI_GET_PATHLISTINDEX(this)];
this->pathPoints = Lib_SegmentedToVirtual(path->points);
this->pathCount = path->count;
childPointIndex = ObjMakeoshihiki_GetChildSpawnPointIndex(this, globalCtx);
childPoint = &this->pathPoints[childPointIndex];
if (Actor_SpawnAsChild(&globalCtx->actorCtx, &this->actor, globalCtx, ACTOR_OBJ_OSHIHIKI, childPoint->x,
childPoint->y, childPoint->z, 0, 0, 0, 0xFFF1) == NULL) {
Actor_MarkForDeath(&this->actor);
}
}
void ObjMakeoshihiki_Update(Actor* thisx, GlobalContext* globalCtx) {
ObjMakeoshihiki* this = THIS;
Actor* child;
s32 loopPathIndex;
Vec3f pathPointF;
child = this->actor.child;
if (child != NULL) {
if (child->update == NULL) {
this->actor.child = NULL;
} else {
for (loopPathIndex = 0; loopPathIndex < this->pathCount; loopPathIndex++) {
Math_Vec3s_ToVec3f(&pathPointF, &this->pathPoints[loopPathIndex]);
if (Math3D_DistanceSquared(&this->actor.child->world.pos, &pathPointF) < SQ(0.5f)) {
ObjMakeoshihiki_SetSwitchFlags(this, globalCtx, loopPathIndex);
return;
}
}
}
}
}

View File

@ -5,9 +5,14 @@
struct ObjMakeoshihiki;
#define OBJMAKEOSHIHIKI_GET_PATHLISTINDEX(this) (((this)->actor.params >> 7) & 0x7F)
#define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(this) ((this)->actor.home.rot.z & 0x7F)
#define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(this) ((this)->actor.params & 0x7F)
typedef struct ObjMakeoshihiki {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x8];
/* 0x144 */ Vec3s* pathPoints;
/* 0x148 */ s32 pathCount;
} ObjMakeoshihiki; // size = 0x14C
extern const ActorInit Obj_Makeoshihiki_InitVars;

View File

@ -8054,8 +8054,8 @@
0x80971B48:("EnKakasi_Update",),
0x80971CE0:("func_80971CE0",),
0x80971D20:("EnKakasi_Draw",),
0x80972350:("func_80972350",),
0x809723C4:("func_809723C4",),
0x80972350:("ObjMakeoshihiki_GetChildSpawnPointIndex",),
0x809723C4:("ObjMakeoshihiki_SetSwitchFlags",),
0x80972454:("ObjMakeoshihiki_Init",),
0x80972548:("ObjMakeoshihiki_Update",),
0x80972680:("OceffSpot_SetupAction",),