This commit is contained in:
blackgamma7 2025-12-14 09:23:39 +09:00 committed by GitHub
commit 7d87de438c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 537 additions and 426 deletions

View File

@ -56,16 +56,16 @@
<Array Name="object_st_Vtx_0026D0" Count="398" Offset="0x26D0">
<Vtx/>
</Array>
<DList Name="object_st_DL_003FB0" Offset="0x3FB0"/>
<DList Name="object_st_DL_0043D8" Offset="0x43D8"/>
<DList Name="object_st_DL_0045C0" Offset="0x45C0"/>
<DList Name="object_st_DL_004658" Offset="0x4658"/>
<DList Name="object_st_DL_0046F0" Offset="0x46F0"/>
<DList Name="object_st_DL_004788" Offset="0x4788"/>
<DList Name="object_st_DL_004820" Offset="0x4820"/>
<DList Name="object_st_DL_0048B8" Offset="0x48B8"/>
<DList Name="object_st_DL_004950" Offset="0x4950"/>
<DList Name="object_st_DL_0049E8" Offset="0x49E8"/>
<DList Name="gGoldSkulltulaLimb5Dlist" Offset="0x3FB0"/>
<DList Name="gGoldSkulltulaLimb4Dlist" Offset="0x43D8"/>
<DList Name="gGoldSkulltulaLimb11Dlist" Offset="0x45C0"/>
<DList Name="gGoldSkulltulaLimb14Dlist" Offset="0x4658"/>
<DList Name="gGoldSkulltulaLimb8Dlist" Offset="0x46F0"/>
<DList Name="gGoldSkulltulaLimb23Dlist" Offset="0x4788"/>
<DList Name="gGoldSkulltulaLimb26Dlist" Offset="0x4820"/>
<DList Name="gGoldSkulltulaLimb20Dlist" Offset="0x48B8"/>
<DList Name="gGoldSkulltulaLimb17Dlist" Offset="0x4950"/>
<DList Name="gGoldSkulltulaLimb29Dlist" Offset="0x49E8"/>
<Array Name="gSkulltulaTokenVtx" Count="25" Offset="0x4A80">
<Vtx/>
</Array>

View File

@ -1085,7 +1085,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
D_801211D4[0].atTargetInit.x = actor->focus.pos.x;
D_801211D4[0].atTargetInit.y = actor->focus.pos.y - 5.0f;
D_801211D4[0].atTargetInit.z = actor->focus.pos.z;
spC0 = ((EnSw*)actor)->unk_364;
spC0 = ((EnSw*)actor)->surfaceNormal;
PRINTF("%s(%d): xyz_t: %s (%f %f %f)\n", "../z_onepointdemo.c", 1671, "&cp", spC0.x, spC0.y, spC0.z);
D_801211D4[0].eyeTargetInit.x = (actor->focus.pos.x + (120.0f * spC0.x)) - (Rand_ZeroOne() * 20.0f);
D_801211D4[0].eyeTargetInit.y = actor->focus.pos.y + (120.0f * spC0.y) + 20.0f;

File diff suppressed because it is too large Load Diff

View File

@ -14,39 +14,53 @@ typedef struct EnSw {
/* 0x0190 */ EnSwActionFunc actionFunc;
/* 0x0194 */ ColliderJntSph collider;
/* 0x01B4 */ ColliderJntSphElement colliderElements[1];
/* 0x01F4 */ Color_RGBA8 unk_1F4;
/* 0x01F4 */ Color_RGBA8 limb4Color; // never set past black.
/* 0x01F8 */ Vec3s jointTable[30];
/* 0x02AC */ Vec3s morphTable[30];
/* 0x0360 */ u8 unk_360;
/* 0x0364 */ Vec3f unk_364;
/* 0x0370 */ Vec3f unk_370;
/* 0x037C */ Vec3f unk_37C;
/* 0x0388 */ s16 unk_388;
/* 0x038A */ s16 unk_38A;
/* 0x038C */ s16 unk_38C;
/* 0x038E */ s16 unk_38E;
/* 0x0390 */ s16 unk_390;
/* 0x0392 */ s16 unk_392;
/* 0x0394 */ s16 unk_394;
/* 0x0396 */ char unk_396[0x42];
/* 0x03D8 */ MtxF unk_3D8;
/* 0x0360 */ u8 goldInAir; // set when revealed, unset when landing.
/* 0x0364 */ Vec3f surfaceNormal; // normal of wall/floor/ceiling it's on.
/* 0x0370 */ Vec3f unk_370; // used for rotate calculation
/* 0x037C */ Vec3f unk_37C; // used for rotate calculation
/* 0x0388 */ s16 animTimer;
/* 0x038A */ s16 animVar; // used to determine crawl and "death bounce" animations.
/* 0x038C */ s16 waitTimer;
/* 0x038E */ s16 crawlTimer;
/* 0x0390 */ s16 attackTimer;
/* 0x0392 */ s16 damageTimer;
/* 0x0394 */ s16 deathFlamesTimer;
/* 0x0396 */ char unk_396[0x42]; //another Mtx(F)?
/* 0x03D8 */ MtxF rotMtxF;
/* 0x0418 */ char unk_418[8];
/* 0x0420 */ f32 unk_420;
/* 0x0420 */ f32 rotateMag;
/* 0x0424 */ char unk_424[0x8];
/* 0x042C */ u8 unk_42C;
/* 0x0430 */ struct CollisionPoly* unk_430;
/* 0x0434 */ Vec3f unk_434;
/* 0x0440 */ s16 unk_440;
/* 0x0442 */ s16 unk_442;
/* 0x0444 */ s16 unk_444;
/* 0x0446 */ s16 unk_446;
/* 0x0448 */ Vec3f unk_448;
/* 0x0454 */ Vec3f unk_454;
/* 0x0460 */ Vec3f unk_460;
/* 0x046C */ Vec3f unk_46C;
/* 0x0478 */ Vec3f unk_478;
/* 0x0484 */ Vec3f unk_484;
/* 0x042C */ u8 goldMoveBool; // set during EnSw_GoldMove, never read.
/* 0x0430 */ struct CollisionPoly* wallPoly;
/* 0x0434 */ Vec3f unk_434; // set during EnSW_LineTestWall, never read. another target pos?
/* 0x0440 */ s16 sfxTimer;
/* 0x0442 */ s16 dashTimer;
/* 0x0444 */ s16 rotZTarget;
/* 0x0448 */ Vec3f targetPos;
/* 0x0454 */ Vec3f eyeLine0; // used for line tests of walls/player
/* 0x0460 */ Vec3f eyeLine1;
/* 0x046C */ Vec3f eyeLine2;
/* 0x0478 */ Vec3f eyeLine3;
/* 0x0484 */ Vec3f wallCast;
/* 0x0490 */ char unk_490[0x48];
} EnSw; // size = 0x04D8
// Skullwalltula type stored in last 3 bits of params.
#define ENSW_GET_TYPE(thisx) PARAMS_GET_S(thisx->params,13,3)
// version of the macro used for the whole entity struct.
#define ENSW_GET_TYPE_EN(this) PARAMS_GET_S(this->actor.params,13,3)
#define EN_SW_PARAM_GOLD_SOIL 0x8000
#define EN_SW_PARAM_GOLD_TREE 0xE000
typedef enum EnSwType{
SW_TYPE_NORMAL, // normal Skull(wall)tula
SW_TYPE_GOLD_DEFAULT, // normal Gold Skulltula, found in dungeons
SW_TYPE_GOLD_NIGHT, // nocturnal Gold Skulltula, found outside
SW_TYPE_GOLD_HIDDEN_SOIL, // found by using bugs on soil patches and hitting crates
SW_TYPE_GOLD_HIDDEN_TREE, // found by hitting trees
} EnSwType;
#endif

View File

@ -20,6 +20,8 @@
#include "player.h"
#include "skin_matrix.h"
#include "overlays/actors/ovl_En_Sw/z_en_sw.h"
#include "assets/objects/object_wood02/object_wood02.h"
#define FLAGS 0
@ -357,7 +359,7 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) {
} else {
if (this->actor.home.rot.z != 0) {
this->actor.home.rot.z &= 0x1FFF;
this->actor.home.rot.z |= 0xE000;
this->actor.home.rot.z |= EN_SW_PARAM_GOLD_TREE;
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_SW, dropsSpawnPt.x, dropsSpawnPt.y, dropsSpawnPt.z, 0,
this->actor.world.rot.y, 0, this->actor.home.rot.z);
this->actor.home.rot.z = 0;

View File

@ -17,6 +17,8 @@
#include "effect.h"
#include "play_state.h"
#include "overlays/actors/ovl_En_Sw/z_en_sw.h"
#include "assets/objects/object_kibako2/object_kibako2.h"
#define FLAGS 0
@ -171,7 +173,7 @@ void ObjKibako2_Kill(ObjKibako2* this, PlayState* play) {
if (PARAMS_GET_NOSHIFT(params, 15, 1) == 0) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_SW, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
this->dyna.actor.world.pos.z, 0, this->dyna.actor.shape.rot.y, 0, params | 0x8000);
this->dyna.actor.world.pos.z, 0, this->dyna.actor.shape.rot.y, 0, params | EN_SW_PARAM_GOLD_SOIL);
}
ObjKibako2_SpawnCollectible(this, play);
Actor_Kill(&this->dyna.actor);

View File

@ -12,6 +12,8 @@
#include "play_state.h"
#include "player.h"
#include "overlays/actors/ovl_En_Sw/z_en_sw.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void ObjMakekinsuta_Init(Actor* thisx, PlayState* play);
@ -52,7 +54,8 @@ void func_80B98320(ObjMakekinsuta* this, PlayState* play) {
if (this->unk_152 != 0) {
if (this->timer >= 60 && !func_8002DEEC(GET_PLAYER(play))) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_SW, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, (this->actor.params | 0x8000));
this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0,
(this->actor.params | EN_SW_PARAM_GOLD_SOIL));
this->actionFunc = ObjMakekinsuta_DoNothing;
} else {
this->timer++;