* En_Osk

* PR

* run actorfixer

Co-authored-by: angie <angheloalf95@gmail.com>
This commit is contained in:
Maide 2022-03-10 02:19:00 +00:00 committed by GitHub
parent fa321be0f3
commit 6ed7b0849c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 526 additions and 33 deletions

3
spec
View File

@ -4970,8 +4970,7 @@ beginseg
name "ovl_En_Osk"
compress
include "build/src/overlays/actors/ovl_En_Osk/z_en_osk.o"
include "build/data/ovl_En_Osk/ovl_En_Osk.data.o"
include "build/data/ovl_En_Osk/ovl_En_Osk.reloc.o"
include "build/src/overlays/actors/ovl_En_Osk/ovl_En_Osk_reloc.o"
endseg
beginseg

View File

@ -5,6 +5,8 @@
*/
#include "z_en_osk.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_ikn_demo/object_ikn_demo.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8)
@ -20,7 +22,6 @@ void func_80BF61EC(EnOsk* this, GlobalContext* globalCtx);
void func_80BF656C(EnOsk* this, GlobalContext* globalCtx);
void func_80BF6A20(EnOsk* this, GlobalContext* globalCtx);
#if 0
const ActorInit En_Osk_InitVars = {
ACTOR_EN_OSK,
ACTORCAT_NPC,
@ -33,42 +34,533 @@ const ActorInit En_Osk_InitVars = {
(ActorFunc)EnOsk_Draw,
};
#endif
AnimationHeader* D_80BF6FA0[] = {
&object_ikn_demo_Anim_003CAC, &object_ikn_demo_Anim_004208, &object_ikn_demo_Anim_004514,
&object_ikn_demo_Anim_004A58, &object_ikn_demo_Anim_0065D8,
};
extern UNK_TYPE D_06006808;
AnimationHeader* D_80BF6FB4[] = {
&object_ikn_demo_Anim_0067B8, &object_ikn_demo_Anim_0083F4, &object_ikn_demo_Anim_0081A8,
&object_ikn_demo_Anim_008AF4, &object_ikn_demo_Anim_008724, &object_ikn_demo_Anim_008F1C,
&object_ikn_demo_Anim_008CEC, &object_ikn_demo_Anim_009254, &object_ikn_demo_Anim_009044,
&object_ikn_demo_Anim_0098E4, &object_ikn_demo_Anim_009CC8, &object_ikn_demo_Anim_009A44,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/EnOsk_Init.s")
AnimationHeader* D_80BF6FE4[] = {
&object_ikn_demo_Anim_009EA8, &object_ikn_demo_Anim_00B8C0, &object_ikn_demo_Anim_00B704,
&object_ikn_demo_Anim_00BDB4, &object_ikn_demo_Anim_00B9E4, &object_ikn_demo_Anim_00C154,
&object_ikn_demo_Anim_00BF04, &object_ikn_demo_Anim_00CA74, &object_ikn_demo_Anim_00C804,
&object_ikn_demo_Anim_00D044, &object_ikn_demo_Anim_00CD28, &object_ikn_demo_Anim_00C59C,
&object_ikn_demo_Anim_00C2C4,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/EnOsk_Destroy.s")
Vec3f D_80BF7018 = { 0.0f, 0.5f, 0.0f };
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF5E00.s")
Vec3f D_80BF7024 = { 0.0f, 0.0f, 0.0f };
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF5E68.s")
void EnOsk_Init(Actor* thisx, GlobalContext* globalCtx) {
EnOsk* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF5EBC.s")
Actor_SetScale(&this->actor, 0.013f);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 10.0f);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF5F60.s")
this->actionFunc = func_80BF5F60;
this->unk_254 = -1;
this->unk_256 = -1;
this->actor.flags &= ~ACTOR_FLAG_1;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF5F70.s")
switch (ENOSK_GET_F(&this->actor)) {
case ENOSK_1:
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_ikn_demo_Skel_007B48, &object_ikn_demo_Anim_006808,
this->jointTable, this->morphTable, 7);
Animation_PlayLoop(&this->skelAnime, &object_ikn_demo_Anim_006808);
this->actionFunc = func_80BF656C;
this->unk_258 = 0x210;
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF609C.s")
case ENOSK_2:
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_ikn_demo_Skel_00B490, &object_ikn_demo_Anim_009F00,
this->jointTable, this->morphTable, 7);
Animation_PlayLoop(&this->skelAnime, &object_ikn_demo_Anim_006808);
this->actionFunc = func_80BF6A20;
this->unk_258 = 0x211;
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF61EC.s")
default:
Actor_SetScale(&this->actor, 0.017f);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_ikn_demo_Skel_0038F0, &object_ikn_demo_Anim_0000B8,
this->jointTable, this->morphTable, 17);
Animation_PlayLoop(&this->skelAnime, &object_ikn_demo_Anim_0000B8);
this->actionFunc = func_80BF61EC;
this->unk_258 = 0x212;
this->actor.home.rot.z = 0;
this->unk_25C = 0.0f;
break;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF6314.s")
void EnOsk_Destroy(Actor* thisx, GlobalContext* globalCtx) {
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF6478.s")
void func_80BF5E00(EnOsk* this, AnimationHeader** animations, s16 index, f32 morphFrame) {
if (index == this->unk_254) {
return;
}
Animation_MorphToLoop(&this->skelAnime, animations[index], morphFrame);
this->unk_254 = index;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF656C.s")
void func_80BF5E68(EnOsk* this, AnimationHeader** animations, s16 index, f32 playSpeed) {
Animation_MorphToPlayOnce(&this->skelAnime, animations[index], playSpeed);
this->unk_254 = index;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF67A8.s")
void func_80BF5EBC(EnOsk* this, GlobalContext* globalCtx) {
Vec3f sp2C;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF68E0.s")
sp2C.x = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.x;
sp2C.z = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.z;
sp2C.y = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.y;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF6A20.s")
func_800B3030(globalCtx, &sp2C, &D_80BF7018, &D_80BF7018, 100, 0, 2);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/EnOsk_Update.s")
void func_80BF5F60(EnOsk* this, GlobalContext* globalCtx) {
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/func_80BF6C54.s")
void func_80BF5F70(EnOsk* this) {
if ((this->unk_256 != 1) && (this->unk_256 != 6)) {
this->actor.draw = EnOsk_Draw;
Actor_SetScale(&this->actor, 0.017f);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Osk/EnOsk_Draw.s")
switch (this->unk_256) {
case 1:
this->actor.draw = NULL;
break;
case 2:
func_80BF5E00(this, D_80BF6FA0, 3, -5.0f);
break;
case 3:
func_80BF5E00(this, D_80BF6FA0, 2, -5.0f);
break;
case 4:
func_80BF5E00(this, D_80BF6FA0, 1, -5.0f);
break;
case 5:
func_80BF5E00(this, D_80BF6FA0, 0, -5.0f);
break;
case 6:
func_80BF5E00(this, D_80BF6FA0, 1, -5.0f);
break;
case 7:
func_80BF5E00(this, D_80BF6FA0, 4, -5.0f);
this->actor.home.rot.z = 1;
break;
}
}
void func_80BF609C(EnOsk* this, GlobalContext* globalCtx) {
if (this->actor.draw != NULL) {
if (this->actor.home.rot.z != 0) {
if (globalCtx->msgCtx.unk11F04 == 0x1531) {
this->actor.home.rot.z = 0;
}
} else {
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
this->unk_25C = Rand_ZeroFloat(3.0f);
}
switch (this->unk_254) {
case 0:
if (Animation_OnFrame(&this->skelAnime, this->unk_25C) ||
Animation_OnFrame(&this->skelAnime, this->unk_25C + 8.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOSU_TALK);
}
break;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->unk_25C)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOSU_TALK);
}
break;
case 2:
if (Animation_OnFrame(&this->skelAnime, this->unk_25C) ||
Animation_OnFrame(&this->skelAnime, this->unk_25C + 6.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOSU_TALK);
}
break;
}
}
}
}
void func_80BF61EC(EnOsk* this, GlobalContext* globalCtx) {
SkelAnime_Update(&this->skelAnime);
if (Cutscene_CheckActorAction(globalCtx, this->unk_258)) {
Cutscene_ActorTranslateAndYaw(&this->actor, globalCtx, Cutscene_GetActorActionIndex(globalCtx, this->unk_258));
if (this->unk_256 !=
globalCtx->csCtx.actorActions[Cutscene_GetActorActionIndex(globalCtx, this->unk_258)]->action) {
this->unk_256 =
globalCtx->csCtx.actorActions[Cutscene_GetActorActionIndex(globalCtx, this->unk_258)]->action;
func_80BF5F70(this);
}
func_80BF609C(this, globalCtx);
} else {
this->actor.draw = NULL;
}
if (this->unk_256 == 6) {
if (this->actor.scale.x > 0.85f * 0.001f) {
this->actor.scale.x -= 0.85f * 0.001f;
Actor_SetScale(&this->actor, this->actor.scale.x);
func_80BF5EBC(this, globalCtx);
func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG);
} else {
this->actor.draw = NULL;
}
}
}
void func_80BF6314(EnOsk* this) {
if ((this->unk_256 != 1) && (this->unk_256 != 9)) {
this->actor.draw = EnOsk_Draw;
Actor_SetScale(&this->actor, 0.013f);
}
switch (this->unk_256) {
case 1:
this->actor.draw = NULL;
break;
case 2:
func_80BF5E00(this, D_80BF6FB4, 9, -5.0f);
Actor_SetScale(&this->actor, 0.0f);
break;
case 3:
func_80BF5E68(this, D_80BF6FB4, 2, -5.0f);
break;
case 4:
func_80BF5E68(this, D_80BF6FB4, 4, 0);
break;
case 5:
func_80BF5E68(this, D_80BF6FB4, 8, -5.0f);
break;
case 6:
func_80BF5E68(this, D_80BF6FB4, 11, -5.0f);
break;
case 7:
func_80BF5E68(this, D_80BF6FB4, 6, -5.0f);
break;
case 8:
func_80BF5E00(this, D_80BF6FB4, 0, -5.0f);
break;
case 9:
func_80BF5E00(this, D_80BF6FB4, 0, -5.0f);
break;
}
}
void func_80BF6478(EnOsk* this) {
if (this->actor.draw != NULL) {
switch (this->unk_254) {
case 1:
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 6.0f) ||
Animation_OnFrame(&this->skelAnime, 11.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 3:
if (Animation_OnFrame(&this->skelAnime, 11.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 4:
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 10:
case 11:
func_800B9010(&this->actor, NA_SE_EN_YASE_LAUGH_K - SFX_FLAG);
break;
}
}
}
void func_80BF656C(EnOsk* this, GlobalContext* globalCtx) {
if (SkelAnime_Update(&this->skelAnime)) {
switch (this->unk_254) {
case 2:
func_80BF5E00(this, D_80BF6FB4, 1, 0.0f);
break;
case 4:
func_80BF5E00(this, D_80BF6FB4, 3, 0.0f);
break;
case 8:
func_80BF5E00(this, D_80BF6FB4, 7, -5.0f);
break;
case 11:
func_80BF5E00(this, D_80BF6FB4, 10, -5.0f);
break;
case 6:
func_80BF5E00(this, D_80BF6FB4, 5, -5.0f);
break;
}
}
if (Cutscene_CheckActorAction(globalCtx, this->unk_258)) {
Cutscene_ActorTranslateAndYaw(&this->actor, globalCtx, Cutscene_GetActorActionIndex(globalCtx, this->unk_258));
if (this->unk_256 !=
globalCtx->csCtx.actorActions[Cutscene_GetActorActionIndex(globalCtx, this->unk_258)]->action) {
this->unk_256 =
globalCtx->csCtx.actorActions[Cutscene_GetActorActionIndex(globalCtx, this->unk_258)]->action;
func_80BF6314(this);
}
func_80BF6478(this);
} else {
this->actor.draw = NULL;
}
if ((this->unk_256 == 2) && (this->actor.scale.x < 13.0f * 0.001f)) {
this->actor.scale.x += 0.65f * 0.001f;
Actor_SetScale(&this->actor, this->actor.scale.x);
}
if (this->unk_256 == 9) {
if (this->actor.scale.x > 0.65f * 0.001f) {
this->actor.scale.x -= 0.65f * 0.001f;
Actor_SetScale(&this->actor, this->actor.scale.x);
func_80BF5EBC(this, globalCtx);
func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG);
} else {
this->actor.draw = NULL;
}
}
}
void func_80BF67A8(EnOsk* this) {
if ((this->unk_256 != 1) && (this->unk_256 != 8)) {
this->actor.draw = EnOsk_Draw;
Actor_SetScale(&this->actor, 0.013f);
}
switch (this->unk_256) {
case 1:
this->actor.draw = NULL;
break;
case 2:
func_80BF5E68(this, D_80BF6FE4, 2, -5.0f);
break;
case 3:
func_80BF5E68(this, D_80BF6FE4, 8, -5.0f);
break;
case 4:
func_80BF5E68(this, D_80BF6FE4, 4, -5.0f);
break;
case 5:
func_80BF5E68(this, D_80BF6FE4, 6, -5.0f);
break;
case 6:
func_80BF5E68(this, D_80BF6FE4, 10, -5.0f);
break;
case 7:
case 8:
func_80BF5E00(this, D_80BF6FE4, 0, -5.0f);
break;
case 9:
func_80BF5E68(this, D_80BF6FE4, 12, -5.0f);
break;
}
}
void func_80BF68E0(EnOsk* this) {
if (this->actor.draw != NULL) {
switch (this->unk_254) {
case 1:
case 7:
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 6.0f) ||
Animation_OnFrame(&this->skelAnime, 11.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 2:
if (Animation_OnFrame(&this->skelAnime, 4.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 4:
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 5:
if ((Animation_OnFrame(&this->skelAnime, 6.0f)) || Animation_OnFrame(&this->skelAnime, 11.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 8:
if (Animation_OnFrame(&this->skelAnime, 13.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
}
}
}
void func_80BF6A20(EnOsk* this, GlobalContext* globalCtx) {
if (SkelAnime_Update(&this->skelAnime)) {
switch (this->unk_254) {
case 2:
func_80BF5E00(this, D_80BF6FE4, 1, -5.0f);
break;
case 8:
func_80BF5E00(this, D_80BF6FE4, 7, -5.0f);
break;
case 4:
func_80BF5E00(this, D_80BF6FE4, 3, -5.0f);
break;
case 6:
func_80BF5E00(this, D_80BF6FE4, 5, -5.0f);
break;
case 10:
func_80BF5E00(this, D_80BF6FE4, 9, -5.0f);
break;
case 12:
func_80BF5E00(this, D_80BF6FE4, 11, -5.0f);
break;
}
}
if (Cutscene_CheckActorAction(globalCtx, this->unk_258)) {
Cutscene_ActorTranslateAndYaw(&this->actor, globalCtx, Cutscene_GetActorActionIndex(globalCtx, this->unk_258));
if (this->unk_256 !=
globalCtx->csCtx.actorActions[Cutscene_GetActorActionIndex(globalCtx, this->unk_258)]->action) {
this->unk_256 =
globalCtx->csCtx.actorActions[Cutscene_GetActorActionIndex(globalCtx, this->unk_258)]->action;
func_80BF67A8(this);
}
func_80BF68E0(this);
} else {
this->actor.draw = NULL;
}
if (this->unk_256 == 8) {
if (this->actor.scale.x > 0.65f * 0.001f) {
this->actor.scale.x -= 0.65f * 0.001f;
Actor_SetScale(&this->actor, this->actor.scale.x);
func_80BF5EBC(this, globalCtx);
func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG);
} else {
this->actor.draw = NULL;
}
}
}
void EnOsk_Update(Actor* thisx, GlobalContext* globalCtx) {
EnOsk* this = THIS;
this->actionFunc(this, globalCtx);
}
void func_80BF6C54(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnOsk* this = THIS;
if (limbIndex == 1) {
Matrix_MultiplyVector3fByState(&D_80BF7024, &this->actor.focus.pos);
}
}
void EnOsk_Draw(Actor* thisx, GlobalContext* globalCtx) {
s32 pad;
EnOsk* this = THIS;
Gfx* gfx;
Vec3f sp80;
s32 pad2[4];
OPEN_DISPS(globalCtx->state.gfxCtx);
func_8012C28C(globalCtx->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_PrimColor(globalCtx->state.gfxCtx, 0x80, 255, 255, 255, 255));
SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
NULL, func_80BF6C54, &this->actor);
{
s16 sp62;
s16 sp60;
Vec3f sp54;
sp54 = GET_ACTIVE_CAM(globalCtx)->eye;
sp62 = Math_Vec3f_Yaw(&sp54, &this->actor.focus.pos);
sp60 = -Math_Vec3f_Pitch(&sp54, &this->actor.focus.pos);
sp80.x = -(15.0f * (Math_SinS(sp62)) * Math_CosS(sp60));
sp80.y = -(Math_SinS(sp60) * 15.0f);
sp80.z = -(15.0f * (Math_CosS(sp62)) * Math_CosS(sp60));
Matrix_InsertTranslation(this->actor.focus.pos.x + sp80.x, this->actor.focus.pos.y + sp80.y,
sp80.z = this->actor.focus.pos.z + sp80.z, MTXMODE_NEW);
sp80.z = Math_SinS(globalCtx->gameplayFrames << 0xE);
sp80.z = ((sp80.z + 1.0f) * 0.1f) + 2.0f;
Matrix_Scale(this->actor.scale.x * sp80.z, this->actor.scale.y * sp80.z, this->actor.scale.z * sp80.z,
MTXMODE_APPLY);
}
gfx = func_8012C868(POLY_XLU_DISP);
gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080);
if (1) {}
if (1) {}
if (1) {}
gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
gSPDisplayList(gfx++, gameplay_keep_DL_029CB0);
gDPSetPrimColor(gfx++, 0, 0, 130, 0, 255, 100);
gSPMatrix(gfx++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gfx++, gameplay_keep_DL_029CF0);
POLY_XLU_DISP = gfx;
CLOSE_DISPS(globalCtx->state.gfxCtx);
}

View File

@ -7,9 +7,20 @@ struct EnOsk;
typedef void (*EnOskActionFunc)(struct EnOsk*, GlobalContext*);
#define ENOSK_GET_F(thisx) ((thisx)->params & 0xF)
#define ENOSK_1 1
#define ENOSK_2 2
typedef struct EnOsk {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0x11C];
/* 0x0144 */ SkelAnime skelAnime;
/* 0x0188 */ Vec3s jointTable[17];
/* 0x01EE */ Vec3s morphTable[17];
/* 0x0254 */ s16 unk_254;
/* 0x0256 */ s16 unk_256;
/* 0x0258 */ u16 unk_258;
/* 0x025C */ f32 unk_25C;
/* 0x0260 */ EnOskActionFunc actionFunc;
} EnOsk; // size = 0x264

View File

@ -1624,15 +1624,6 @@ D_06003EE4 = 0x06003EE4;
D_06004204 = 0x06004204;
D_0600466C = 0x0600466C;
// ovl_En_Osk
D_060000B8 = 0x060000B8;
D_060038F0 = 0x060038F0;
D_06006808 = 0x06006808;
D_06007B48 = 0x06007B48;
D_06009F00 = 0x06009F00;
D_0600B490 = 0x0600B490;
// ovl_En_Osn
D_060192A0 = 0x060192A0;