Files
st/src/001_SceneInit/UnkStruct_027e0cec_001.cpp
T
Yanis 96874ba24e Decompile overlay 1 (Part 8) (#108)
* UnkStruct_027e09b4_001 OK

* UnkStruct_027e09ac_001 OK

* UnkStruct_027e0cec_001 OK

* SysNew OK

* UnkStruct_027e0cec_18_001 OK

* UnkStruct_027e0ce0_34_001 OK

* UnkStruct_027e0d00_001 OK

* PassengerManager_001 OK

* UnkStruct_027e0cf8_08_00_001 OK

* UnkStruct_ov020_020e8544_001 OK

* code_020bfdd0 OK and code_020bfeec OK

* code_020c099c OK
2026-07-15 20:19:35 +02:00

206 lines
7.0 KiB
C++

#include "Cutscene/Cutscene.hpp"
#include "System/OverlayManager.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_0204a110.hpp"
#include "Unknown/UnkStruct_027e09a4.hpp"
#include "Unknown/UnkStruct_027e0cec.hpp"
#include <string.h>
extern "C" BOOL func_02012fa8(const char *);
DATA_ALIGN_FIX2();
enum EffectPathIndex_ {
EffectPathIndex_Dungeon1 = 0,
EffectPathIndex_Field = 1,
EffectPathIndex_Dungeon2 = 2,
EffectPathIndex_Battle = 3,
EffectPathIndex_BossForest = 4,
EffectPathIndex_BossSnow = 5,
EffectPathIndex_BossWater = 6,
EffectPathIndex_BossFlame = 7,
EffectPathIndex_BossDesert = 8,
EffectPathIndex_BossDeago = 9,
EffectPathIndex_BossLast1 = 10,
EffectPathIndex_BossLast2 = 11,
};
static const char *data_ov001_020c2f28[] = {
"Effect/dungeon.spa", // EffectPathIndex_Dungeon1
"Effect/field.spa", // EffectPathIndex_Field
"Effect/dungeon.spa", // EffectPathIndex_Dungeon2
"Effect/battle.spa", // EffectPathIndex_Battle
"Effect/boss_forest.spa", // EffectPathIndex_BossForest
"Effect/boss_snow.spa", // EffectPathIndex_BossSnow
"Effect/boss_water.spa", // EffectPathIndex_BossWater
"Effect/boss_flame.spa", // EffectPathIndex_BossFlame
"Effect/boss_desert.spa", // EffectPathIndex_BossDesert
"Effect/boss_deago.spa", // EffectPathIndex_BossDeago
"Effect/boss_last1.spa", // EffectPathIndex_BossLast1
"Effect/boss_last2.spa", // EffectPathIndex_BossLast2
};
UnkStruct_027e0cec *UnkStruct_027e0cec::Create() {
data_0204999c.func_ov001_020ba620();
return new(HeapIndex_5) UnkStruct_027e0cec();
}
void UnkStruct_027e0cec::func_ov001_020bed34() {
data_027e0cec->~UnkStruct_027e0cec();
data_0204999c.func_ov001_020ba658();
}
UnkStruct_027e0cec::UnkStruct_027e0cec() :
mUnk_00(this),
mUnk_20(0) {
for (int i = 0; i < ARRAY_LEN(this->mUnk_18); i++) {
this->mUnk_18[i] = NULL;
}
this->mUnk_20 = 0x00;
UnkFileSystem2 *pUnkFs2;
if (data_027e09a4->IsSceneModeBattle()) {
UnkFileSystem2 local_2c(NULL, 0x00);
pUnkFs2 = &local_2c;
const char *path = "Effect/multiboot.spa";
pUnkFs2->vfunc_0C();
pUnkFs2->mUnk_04 = path;
this->mUnk_18[0] = new(HeapIndex_5) UnkStruct_027e0cec_18(pUnkFs2, true, 0);
this->mUnk_20 = 0x02;
} else if (data_027e09a4->IsTrain()) {
{
UnkFileSystem2 local_44(NULL, 0x00);
pUnkFs2 = &local_44;
const char *path = "Effect/train.spa";
pUnkFs2->vfunc_0C();
pUnkFs2->mUnk_04 = path;
this->mUnk_18[0] = new(HeapIndex_5) UnkStruct_027e0cec_18(pUnkFs2, true, 0);
}
if (gOverlayManager.IsTrainDark()) {
UnkFileSystem2 local_5c(NULL, 0x00);
pUnkFs2 = &local_5c;
const char *path = "Effect/train_dark.spa";
pUnkFs2->vfunc_0C();
pUnkFs2->mUnk_04 = path;
this->mUnk_18[1] = new(HeapIndex_5) UnkStruct_027e0cec_18(pUnkFs2, true, 1);
}
} else if (data_027e09a4->IsCutscene()) {
this->mUnk_20 = 0x01;
const char *unk_00 = Cutscene_GetParamEntry(data_027e09a4->CurrentCSIndex())->mUnk_00;
wchar_t aStack_9c[32];
aStack_9c[ARRAY_LEN(aStack_9c) - 1] = L'\0';
strncpy((char *) aStack_9c, "Effect/demo_", sizeof(aStack_9c) - 1);
size_t len1 = strlen((char *) aStack_9c);
strncpy((char *) aStack_9c + len1, unk_00, sizeof(aStack_9c) - 1 - len1);
const char *ext = ".spa";
size_t len2 = strlen((char *) aStack_9c);
strncpy((char *) aStack_9c + len2, ext, sizeof(aStack_9c) - 1 - len2);
UnkFileSystem2 local_b4(NULL, 0x00);
pUnkFs2 = &local_b4;
pUnkFs2->vfunc_0C();
pUnkFs2->mUnk_04 = (char *) aStack_9c;
const char *local_b0 = (char *) aStack_9c;
if (func_02012fa8(local_b0)) {
this->mUnk_18[0] = new(HeapIndex_5) UnkStruct_027e0cec_18(pUnkFs2, true, 0);
}
} else {
const char *iVar4;
for (int i = 0; i < ARRAY_LEN(this->mUnk_18); i++) {
switch (i) {
case 0: {
UnkFileSystem2 local_cc(NULL, 0x00);
pUnkFs2 = &local_cc;
const char *path = "Effect/land.spa";
pUnkFs2->vfunc_0C();
pUnkFs2->mUnk_04 = path;
this->mUnk_18[i] = new(HeapIndex_5) UnkStruct_027e0cec_18(pUnkFs2, true, i);
break;
}
case 1:
iVar4 = this->func_ov001_020bef98();
if (iVar4 != NULL) {
UnkFileSystem2 local_e4(NULL, 0x00);
pUnkFs2 = &local_e4;
pUnkFs2->vfunc_0C();
pUnkFs2->mUnk_04 = iVar4;
this->mUnk_18[i] = new(HeapIndex_5) UnkStruct_027e0cec_18(pUnkFs2, true, i);
}
break;
default:
break;
}
}
}
data_0204999c.func_ov001_020ba640();
}
const char *UnkStruct_027e0cec::func_ov001_020bef98() {
SceneIndex sceneIndex = data_027e09a4->CurrentSceneIndex();
if (sceneIndex == SceneIndex_b_last22) {
return data_ov001_020c2f28[EffectPathIndex_BossLast2];
}
if (gOverlayManager.IsField()) {
return data_ov001_020c2f28[EffectPathIndex_Field];
}
switch (gOverlayManager.mLoadedOverlays[OverlaySlot_8]) {
case OverlayIndex_BossForest:
return data_ov001_020c2f28[EffectPathIndex_BossForest];
case OverlayIndex_BossSnow:
return data_ov001_020c2f28[EffectPathIndex_BossSnow];
case OverlayIndex_BossWater:
return data_ov001_020c2f28[EffectPathIndex_BossWater];
case OverlayIndex_BossFlame:
if (sceneIndex == SceneIndex_d_flame || sceneIndex == SceneIndex_tekiya03) {
return data_ov001_020c2f28[EffectPathIndex_Dungeon2];
}
return data_ov001_020c2f28[EffectPathIndex_BossFlame];
case OverlayIndex_BossDesert:
return data_ov001_020c2f28[EffectPathIndex_BossDesert];
case OverlayIndex_BossDeago:
return data_ov001_020c2f28[EffectPathIndex_BossDeago];
case OverlayIndex_BossLast1:
return data_ov001_020c2f28[EffectPathIndex_BossLast1];
case OverlayIndex_BossLast2:
return data_ov001_020c2f28[EffectPathIndex_BossLast2];
default:
break;
}
return data_ov001_020c2f28[2];
}
UnkStruct_027e0cec::~UnkStruct_027e0cec() {}
void UnkStruct_027e0cec::func_ov001_020bf028() {
for (int i = 0; i < ARRAY_LEN(this->mUnk_18); i++) {
if (this->mUnk_18[i] != NULL) {
this->mUnk_18[i]->func_ov000_020a0460();
}
}
}
ARM_BEGIN
UnkStruct_027e0cec_00::UnkStruct_027e0cec_00(void *param1) :
mUnk_10(param1),
mUnk_14(0) {}
DECL_INSTANCE(UnkStruct_027e0cec, data_027e0cec);
ARM_END