EnJso (Garo) OK and documented (#1440)

* EnJso (Garo) OK and documented

* Respond to review

* Replace some weird ifs with early returns

* Respond to Anghelo's review
This commit is contained in:
Tom Overton 2023-10-14 23:39:47 -07:00 committed by GitHub
parent 93713a1da0
commit a1bdc6c382
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 1803 additions and 180 deletions

3
spec
View File

@ -2162,8 +2162,7 @@ beginseg
name "ovl_En_Jso" name "ovl_En_Jso"
compress compress
include "build/src/overlays/actors/ovl_En_Jso/z_en_jso.o" include "build/src/overlays/actors/ovl_En_Jso/z_en_jso.o"
include "build/data/ovl_En_Jso/ovl_En_Jso.data.o" include "build/src/overlays/actors/ovl_En_Jso/ovl_En_Jso_reloc.o"
include "build/data/ovl_En_Jso/ovl_En_Jso.reloc.o"
endseg endseg
beginseg beginseg

View File

@ -5,6 +5,7 @@
*/ */
#include "z_en_hint_skb.h" #include "z_en_hint_skb.h"
#include "overlays/actors/ovl_En_Part/z_en_part.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10)
@ -903,12 +904,12 @@ void EnHintSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
Collider_UpdateSpheres(limbIndex, &this->collider); Collider_UpdateSpheres(limbIndex, &this->collider);
if ((limbIndex == STALCHILD_LIMB_HEAD) && (this->unk_3E8 & 1) && !(this->unk_3E8 & 2)) { if ((limbIndex == STALCHILD_LIMB_HEAD) && (this->unk_3E8 & 1) && !(this->unk_3E8 & 2)) {
Actor_SpawnBodyParts(&this->actor, play, 1, dList); Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList);
this->unk_3E8 |= 2; this->unk_3E8 |= 2;
} else if ((this->unk_3E8 & 4) && !(this->unk_3E8 & 8) && } else if ((this->unk_3E8 & 4) && !(this->unk_3E8 & 8) &&
((limbIndex != STALCHILD_LIMB_HEAD) || !(this->unk_3E8 & 1)) && ((limbIndex != STALCHILD_LIMB_HEAD) || !(this->unk_3E8 & 1)) &&
(limbIndex != STALCHILD_LIMB_LOWER_JAW)) { (limbIndex != STALCHILD_LIMB_LOWER_JAW)) {
Actor_SpawnBodyParts(&this->actor, play, 1, dList); Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList);
} }
if (this->drawDmgEffTimer != 0) { if (this->drawDmgEffTimer != 0) {

File diff suppressed because it is too large Load Diff

View File

@ -2,16 +2,107 @@
#define Z_EN_JSO_H #define Z_EN_JSO_H
#include "global.h" #include "global.h"
#include "assets/objects/object_jso/object_jso.h"
struct EnJso; struct EnJso;
#define EN_JSO_GET_HINT_TYPE(thisx) ((thisx)->params)
#define EN_JSO_AFTERIMAGE_COUNT 20
typedef void (*EnJsoActionFunc)(struct EnJso*, PlayState*); typedef void (*EnJsoActionFunc)(struct EnJso*, PlayState*);
// For the four `VARIABLE` hint types, the former hint is used if the player hasn't restored the river in
// Ikana Canyon yet, and the latter hint is used if the player has. If the player has the Elegy of Emptiness,
// then all hints will be replaced with a hint telling the player to use the song to climb Stone Tower.
typedef enum {
/* 0 */ EN_JSO_HINT_FREEZE_OCTOROKS,
/* 1 */ EN_JSO_HINT_FLATS_LOCATION,
/* 2 */ EN_JSO_HINT_VARIABLE_1, // Hints that Pamela's family is in the house or that the Song of Healing can heal Pamela's father
/* 3 */ EN_JSO_HINT_VARIABLE_2, // Hints that Pamela leaves the house to check something or that the well is connected to Ikana Castle
/* 4 */ EN_JSO_HINT_VARIABLE_3, // Hints that they can restore the river by going to Sharp's cave or that the Gidbos in the well want items
/* 5 */ EN_JSO_HINT_VARIABLE_4, // Hints that they need to Song of Storms to stop Sharp or that the items the Gibdos want can be found in the well
/* 6 */ EN_JSO_HINT_DANCING_REDEADS,
/* 7 */ EN_JSO_HINT_DESTRUCTIBLE_CEILING_IN_CASTLE,
/* 8 */ EN_JSO_HINT_SECOND_ENTRANCE_TO_CASTLE,
/* 9 */ EN_JSO_HINT_KING_WEAK_TO_MIRROR_SHIELD
} EnJsoHintType;
typedef enum {
/* 0 */ EN_JSO_BODYPART_LEFT_SWORD,
/* 1 */ EN_JSO_BODYPART_RIGHT_SWORD,
/* 2 */ EN_JSO_BODYPART_ROBE_TOP,
/* 3 */ EN_JSO_BODYPART_ROBE_BACK,
/* 4 */ EN_JSO_BODYPART_ROBE_LEFT,
/* 5 */ EN_JSO_BODYPART_ROBE_RIGHT,
/* 6 */ EN_JSO_BODYPART_ROBE_FRONT,
/* 7 */ EN_JSO_BODYPART_HEAD,
/* 8 */ EN_JSO_BODYPART_RIGHT_THIGH,
/* 9 */ EN_JSO_BODYPART_RIGHT_FOOT,
/* 10 */ EN_JSO_BODYPART_LEFT_THIGH,
/* 11 */ EN_JSO_BODYPART_LEFT_FOOT,
/* 12 */ EN_JSO_BODYPART_MAX
} EnJsoBodyPart;
typedef struct EnJso { typedef struct EnJso {
/* 0x000 */ Actor actor; /* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x134]; /* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ Vec3s jointTable[GARO_LIMB_MAX];
/* 0x200 */ Vec3s morphTable[GARO_LIMB_MAX];
/* 0x278 */ EnJsoActionFunc actionFunc; /* 0x278 */ EnJsoActionFunc actionFunc;
/* 0x27C */ char unk_27C[0xD70]; /* 0x27C */ s16 action;
/* 0x27E */ s16 circlingAngle;
/* 0x280 */ s16 circlingAngularVelocity;
/* 0x282 */ s16 dashAttackTimer;
/* 0x284 */ UNK_TYPE1 unk_284[0x2];
/* 0x286 */ s16 attackWaitTimer; // while bouncing, the Garo cannot start an attack until this reaches 0
/* 0x288 */ s16 timer;
/* 0x28A */ s16 isGuarding; // Set to false when the guard animation ends, never checked or set otherwise. Name is inferred based on how it's being set.
/* 0x28C */ s16 isPlayerLockedOn;
/* 0x28E */ s16 isAttacking;
/* 0x290 */ Vec3s robeRightRot;
/* 0x296 */ Vec3s targetRobeRightRot;
/* 0x29C */ Vec3s rightArmRot;
/* 0x2A2 */ Vec3s targetRightArmRot;
/* 0x2A8 */ s16 drawDmgEffAlpha;
/* 0x2AA */ s16 drawDmgEffType;
/* 0x2AC */ f32 drawDmgEffScale;
/* 0x2B0 */ f32 drawDmgEffFrozenSteamScale;
/* 0x2B4 */ Vec3f bodyPartsPos[EN_JSO_BODYPART_MAX];
/* 0x344 */ s16 bodyPartIndex;
/* 0x346 */ s16 disableAnimations; // Checked but never set, so it's implicitly always false. Name is inferred based on how it's being checked.
/* 0x348 */ s16 textIndex;
/* 0x34A */ s16 hintType;
/* 0x34C */ u8 disableBlure;
/* 0x34D */ u8 swordState;
/* 0x34E */ u8 swordHitSomething;
/* 0x350 */ f32 animEndFrame;
/* 0x354 */ f32 scale;
/* 0x358 */ UNK_TYPE1 unk_358[0x4];
/* 0x35C */ ColliderCylinder bodyCollider;
/* 0x3A8 */ ColliderQuad rightSwordCollider;
/* 0x428 */ ColliderQuad leftSwordCollider;
/* 0x4A8 */ s32 rightSwordBlureIndex;
/* 0x4AC */ s32 leftSwordBlureIndex;
/* 0x4B0 */ s16 afterimageIndex;
/* 0x4B4 */ s32 afterimageCount;
/* 0x4B8 */ s16 csId;
/* 0x4BC */ u32 introCsTimer;
/* 0x4C0 */ s16 introCsState;
/* 0x4C2 */ s16 subCamId;
/* 0x4C4 */ UNK_TYPE1 unk_4C4[0x4];
/* 0x4C8 */ Vec3f subCamEye;
/* 0x4D4 */ Vec3f subCamAt;
/* 0x4E0 */ Vec3f subCamUp;
/* 0x4EC */ Vec3f subCamEyeNext;
/* 0x4F8 */ Vec3f subCamAtNext;
/* 0x504 */ UNK_TYPE1 unk_504[0x10];
/* 0x514 */ s16 introCsType;
/* 0x518 */ Vec3f afterimagePos[EN_JSO_AFTERIMAGE_COUNT];
/* 0x608 */ Vec3s afterimageRot[EN_JSO_AFTERIMAGE_COUNT];
/* 0x680 */ Vec3s afterimageJointTable[EN_JSO_AFTERIMAGE_COUNT][GARO_LIMB_MAX];
/* 0xFE0 */ Vec3f knockbackVelocity; // Adds a little push backwards when the Garo is bounced off the player's shield, damaged, or stunned
} EnJso; // size = 0xFEC } EnJso; // size = 0xFEC
#endif // Z_EN_JSO_H #endif // Z_EN_JSO_H

View File

@ -5,6 +5,8 @@
struct EnPart; struct EnPart;
#define ENPART_PARAMS(type) (type)
typedef void (*EnPartActionFunc)(struct EnPart*, PlayState*); typedef void (*EnPartActionFunc)(struct EnPart*, PlayState*);
typedef enum { typedef enum {

View File

@ -5,8 +5,9 @@
*/ */
#include "z_en_rail_skb.h" #include "z_en_rail_skb.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
#include "objects/object_skb/object_skb.h" #include "objects/object_skb/object_skb.h"
#include "overlays/actors/ovl_En_Part/z_en_part.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10)
@ -1119,10 +1120,10 @@ void EnRailSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
Collider_UpdateSpheres(limbIndex, &this->collider); Collider_UpdateSpheres(limbIndex, &this->collider);
if ((limbIndex == 11) && (this->unk_402 & 1) && !(this->unk_402 & 2)) { if ((limbIndex == 11) && (this->unk_402 & 1) && !(this->unk_402 & 2)) {
Actor_SpawnBodyParts(&this->actor, play, 1, dList); Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList);
this->unk_402 |= 2; this->unk_402 |= 2;
} else if ((this->unk_402 & 0x40) && ((limbIndex != 11) || !(this->unk_402 & 1)) && (limbIndex != 12)) { } else if ((this->unk_402 & 0x40) && ((limbIndex != 11) || !(this->unk_402 & 1)) && (limbIndex != 12)) {
Actor_SpawnBodyParts(&this->actor, play, 1, dList); Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList);
} }
if (this->drawDmgEffTimer != 0) { if (this->drawDmgEffTimer != 0) {

View File

@ -6,6 +6,7 @@
#include "z_en_sb.h" #include "z_en_sb.h"
#include "objects/object_sb/object_sb.h" #include "objects/object_sb/object_sb.h"
#include "overlays/actors/ovl_En_Part/z_en_part.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)
@ -388,13 +389,13 @@ void EnSb_Update(Actor* thisx, PlayState* play) {
} }
void EnSb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { void EnSb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
s8 phi_a2; s8 partParams;
EnSb* this = THIS; EnSb* this = THIS;
if (this->isDrawn) { if (this->isDrawn) {
if (limbIndex < 7) { if (limbIndex < 7) {
phi_a2 = (this->actor.depthInWater > 0) ? 4 : 1; partParams = (this->actor.depthInWater > 0) ? ENPART_PARAMS(ENPART_TYPE_4) : ENPART_PARAMS(ENPART_TYPE_1);
Actor_SpawnBodyParts(thisx, play, phi_a2, dList); Actor_SpawnBodyParts(thisx, play, partParams, dList);
} }
if (limbIndex == 6) { if (limbIndex == 6) {
this->isDrawn = false; this->isDrawn = false;

View File

@ -5,9 +5,10 @@
*/ */
#include "z_en_skb.h" #include "z_en_skb.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
#include "overlays/actors/ovl_En_Encount4/z_en_encount4.h"
#include "objects/object_skb/object_skb.h" #include "objects/object_skb/object_skb.h"
#include "overlays/actors/ovl_En_Encount4/z_en_encount4.h"
#include "overlays/actors/ovl_En_Part/z_en_part.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)
@ -1106,12 +1107,12 @@ void EnSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Collider_UpdateSpheres(limbIndex, &this->collider); Collider_UpdateSpheres(limbIndex, &this->collider);
if ((this->unk_3D8 & 1) && !(this->unk_3D8 & 2)) { if ((this->unk_3D8 & 1) && !(this->unk_3D8 & 2)) {
if (limbIndex == 11) { if (limbIndex == 11) {
Actor_SpawnBodyParts(&this->actor, play, 1, dList); Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList);
this->unk_3D8 |= 2; this->unk_3D8 |= 2;
} }
} else if ((this->unk_3D8 & 0x40) && !(this->unk_3D8 & 0x80) && ((limbIndex != 11) || !(this->unk_3D8 & 1)) && } else if ((this->unk_3D8 & 0x40) && !(this->unk_3D8 & 0x80) && ((limbIndex != 11) || !(this->unk_3D8 & 1)) &&
(limbIndex != 12)) { (limbIndex != 12)) {
Actor_SpawnBodyParts(&this->actor, play, 1, dList); Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList);
} }
if (this->drawDmgEffTimer != 0) { if (this->drawDmgEffTimer != 0) {

View File

@ -8846,45 +8846,45 @@
0x809AD614:("EnEncount3_Draw",), 0x809AD614:("EnEncount3_Draw",),
0x809AD8E0:("EnJso_Init",), 0x809AD8E0:("EnJso_Init",),
0x809ADB24:("EnJso_Destroy",), 0x809ADB24:("EnJso_Destroy",),
0x809ADBC8:("func_809ADBC8",), 0x809ADBC8:("EnJso_ChangeAnim",),
0x809ADC7C:("func_809ADC7C",), 0x809ADC7C:("EnJso_SetupHandleIntroCutscene",),
0x809ADCB8:("func_809ADCB8",), 0x809ADCB8:("EnJso_HandleIntroCutscene",),
0x809AE754:("func_809AE754",), 0x809AE754:("EnJso_SetupReappear",),
0x809AE87C:("func_809AE87C",), 0x809AE87C:("EnJso_Reappear",),
0x809AE9B0:("func_809AE9B0",), 0x809AE9B0:("EnJso_SetupCirclePlayer",),
0x809AEA08:("func_809AEA08",), 0x809AEA08:("EnJso_CirclePlayer",),
0x809AECA8:("func_809AECA8",), 0x809AECA8:("EnJso_SetupGuard",),
0x809AED00:("func_809AED00",), 0x809AED00:("EnJso_Guard",),
0x809AED54:("func_809AED54",), 0x809AED54:("EnJso_SetupSpinBeforeAttack",),
0x809AEDAC:("func_809AEDAC",), 0x809AEDAC:("EnJso_SpinBeforeAttack",),
0x809AEE44:("func_809AEE44",), 0x809AEE44:("EnJso_SetupDashAttack",),
0x809AEEC0:("func_809AEEC0",), 0x809AEEC0:("EnJso_DashAttack",),
0x809AF064:("func_809AF064",), 0x809AF064:("EnJso_SetupSlash",),
0x809AF110:("func_809AF110",), 0x809AF110:("EnJso_Slash",),
0x809AF28C:("func_809AF28C",), 0x809AF28C:("EnJso_SetupWaitAfterSlash",),
0x809AF2F8:("func_809AF2F8",), 0x809AF2F8:("EnJso_WaitAfterSlash",),
0x809AF368:("func_809AF368",), 0x809AF368:("EnJso_SetupKnockedBack",),
0x809AF3C0:("func_809AF3C0",), 0x809AF3C0:("EnJso_KnockedBack",),
0x809AF3FC:("func_809AF3FC",), 0x809AF3FC:("EnJso_SetupCower",),
0x809AF440:("func_809AF440",), 0x809AF440:("EnJso_Cower",),
0x809AF470:("func_809AF470",), 0x809AF470:("EnJso_SetupStunned",),
0x809AF53C:("func_809AF53C",), 0x809AF53C:("EnJso_Stunned",),
0x809AF5F8:("func_809AF5F8",), 0x809AF5F8:("EnJso_SetupDamaged",),
0x809AF714:("func_809AF714",), 0x809AF714:("EnJso_Damaged",),
0x809AF76C:("func_809AF76C",), 0x809AF76C:("EnJso_SetupJumpBack",),
0x809AF7F4:("func_809AF7F4",), 0x809AF7F4:("EnJso_JumpBack",),
0x809AF8D0:("func_809AF8D0",), 0x809AF8D0:("EnJso_SetupDead",),
0x809AF99C:("func_809AF99C",), 0x809AF99C:("EnJso_Dead",),
0x809AFA58:("func_809AFA58",), 0x809AFA58:("EnJso_SetupFallDownAndTalk",),
0x809AFAF4:("func_809AFAF4",), 0x809AFAF4:("EnJso_FallDownAndTalk",),
0x809AFC10:("func_809AFC10",), 0x809AFC10:("EnJso_TellHint",),
0x809AFE38:("func_809AFE38",), 0x809AFE38:("EnJso_BurstIntoFlames",),
0x809B0034:("func_809B0034",), 0x809B0034:("EnJso_UpdateDamage",),
0x809B02CC:("EnJso_Update",), 0x809B02CC:("EnJso_Update",),
0x809B0734:("func_809B0734",), 0x809B0734:("EnJso_OverrideLimbDraw",),
0x809B0820:("func_809B0820",), 0x809B0820:("EnJso_PostLimbDraw",),
0x809B0B70:("func_809B0B70",), 0x809B0B70:("EnJso_SetAfterimageRenderMode",),
0x809B0BB0:("func_809B0BB0",), 0x809B0BB0:("EnJso_Draw",),
0x809B1550:("func_809B1550",), 0x809B1550:("func_809B1550",),
0x809B162C:("ObjChikuwa_Init",), 0x809B162C:("ObjChikuwa_Init",),
0x809B179C:("ObjChikuwa_Destroy",), 0x809B179C:("ObjChikuwa_Destroy",),

View File

@ -9487,21 +9487,21 @@
0x809AD82C:("D_809AD82C","f32","",0x4), 0x809AD82C:("D_809AD82C","f32","",0x4),
0x809AD830:("D_809AD830","f32","",0x4), 0x809AD830:("D_809AD830","f32","",0x4),
0x809AD834:("D_809AD834","f32","",0x4), 0x809AD834:("D_809AD834","f32","",0x4),
0x809B0F40:("D_809B0F40","UNK_TYPE4","",0x4), 0x809B0F40:("sIsAttacking","s32","",0x4),
0x809B0F44:("D_809B0F44","UNK_TYPE4","",0x4), 0x809B0F44:("sIsPlayerLockedOn","s32","",0x4),
0x809B0F48:("D_809B0F48","UNK_TYPE1","",0x1), 0x809B0F48:("sDamageTable","DamageTable","",0x20),
0x809B0F68:("En_Jso_InitVars","UNK_TYPE1","",0x1), 0x809B0F68:("En_Jso_InitVars","ActorInit","",0x20),
0x809B0F88:("D_809B0F88","UNK_TYPE1","",0x1), 0x809B0F88:("sCylinderInit","ColliderCylinderInit","",0x2C),
0x809B0FB4:("D_809B0FB4","UNK_TYPE1","",0x1), 0x809B0FB4:("sQuadInit","ColliderQuadInit","",0x50),
0x809B1004:("D_809B1004","UNK_TYPE1","",0x1), 0x809B1004:("sTextIds","u16","[4]",0x8),
0x809B100C:("D_809B100C","UNK_TYPE1","",0x1), 0x809B100C:("sAnimations","AnimationHeader*","[12]",0x30),
0x809B103C:("D_809B103C","UNK_TYPE1","",0x1), 0x809B103C:("sAnimationModes","u8","[12]",0xC),
0x809B1048:("D_809B1048","UNK_TYPE4","",0x4), 0x809B1048:("fireVelocityAndAccel","Vec3f","[9]",0x6C),
0x809B10B4:("D_809B10B4","UNK_TYPE1","",0x1), 0x809B10B4:("sSwordTipOffset","Vec3f","",0xC),
0x809B10C0:("D_809B10C0","UNK_TYPE1","",0x1), 0x809B10C0:("sSwordBaseOffset","Vec3f","",0xC),
0x809B10CC:("D_809B10CC","UNK_TYPE1","",0x1), 0x809B10CC:("sSwordTipQuadOffset","Vec3f","",0xC),
0x809B10D8:("D_809B10D8","UNK_TYPE1","",0x1), 0x809B10D8:("sSwordBaseQuadOffset","Vec3f","",0xC),
0x809B10E4:("D_809B10E4","UNK_TYPE2","",0x2), 0x809B10E4:("sAfterimageAlpha","s16","[20]",0x28),
0x809B1110:("D_809B1110","f32","",0x4), 0x809B1110:("D_809B1110","f32","",0x4),
0x809B1114:("jtbl_809B1114","UNK_PTR","",0x4), 0x809B1114:("jtbl_809B1114","UNK_PTR","",0x4),
0x809B112C:("D_809B112C","f32","",0x4), 0x809B112C:("D_809B112C","f32","",0x4),

View File

@ -462,11 +462,6 @@ D_06015C28 = 0x06015C28;
D_060156D8 = 0x060156D8; D_060156D8 = 0x060156D8;
D_06016720 = 0x06016720; D_06016720 = 0x06016720;
// ovl_En_Jso
D_060081F4 = 0x060081F4;
D_0600AA00 = 0x0600AA00;
// ovl_En_Jso2 // ovl_En_Jso2
D_06002ED8 = 0x06002ED8; D_06002ED8 = 0x06002ED8;