Files
st/src/024_MainGame/Train/UnkTrainSystem2_024.cpp
T
Alessevan f1c7b3cc72 Decompiling NTTZ actor and part of TGTZ (#121)
* feat: decompiling NTTZ

* feat: progress TGTZ

* feat: progress

* style: cleanup

* feat: name parameter in header

* refactor: cleanup unused class

* feat: increase sinit

* feat: remove extern
2026-07-24 02:36:43 +02:00

102 lines
3.2 KiB
C++

#include "MainGame/AdventureMode.hpp"
#include "MainGame/CargoManager.hpp"
#include "MainGame/UnkTrainSystems.hpp"
#include "System/Random.hpp"
#include "Unknown/Common.hpp"
#include "Unknown/UnkStruct_027e09a4.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_027e0d00.hpp"
#include "Unknown/UnkStruct_ov000_020b5214.hpp"
extern "C" void func_01ffcb94(unk16, unk16, Mat3p *);
extern "C" void func_01ffa60c(const Mat3p *, Mat3p *, Mat3p *);
const UnkStruct_ov024_020d86a8 data_ov024_020d78bc = {0};
const UnkCargoStruct data_ov024_020d78c0[] = {
{.type = CargoType_MegaIce, .requiredAmount = 1}, {.type = CargoType_DarkOre, .requiredAmount = 5},
{.type = CargoType_MegaIce, .requiredAmount = 10}, {.type = CargoType_Iron, .requiredAmount = 5},
{.type = CargoType_Fish, .requiredAmount = 10}, {.type = CargoType_Cuccos, .requiredAmount = 10},
{.type = CargoType_Wood, .requiredAmount = 15}, {.type = CargoType_Vessel, .requiredAmount = 1},
{.type = CargoType_Cuccos, .requiredAmount = 5}, {.type = CargoType_MegaIce, .requiredAmount = 10},
};
struct UnkStruct_ov024_020d86a8_Mgr {
const UnkStruct_ov024_020d86a8 *pInstance;
UnkStruct_ov024_020d86a8_Mgr(const UnkStruct_ov024_020d86a8 *pInstance) {
this->pInstance = pInstance;
}
};
UnkStruct_ov024_020d86a8_Mgr data_ov024_020d86ac(&data_ov024_020d78bc);
UnkTrainSystem2::UnkTrainSystem2() :
mUnk_00(0),
mModelRender(NULL),
mUnk_64(0),
mUnk_66(0) {
if (this->func_ov024_020d5c40()) {
this->mUnk_00 = 0x1000;
}
}
UnkTrainSystem2::~UnkTrainSystem2() {}
extern "C" bool func_01ff916c(void *, int, int);
void UnkTrainSystem2::func_ov024_020d5990() {
if (this->func_ov024_020d5c40()) {
this->mUnk_00 = 0x1000;
} else {
unk32 temp_r6 = this->mUnk_00;
func_01ff916c(&this->mUnk_00, 0, 0x7B);
if (data_027e09a4->IsTrain() && temp_r6 != 0 && this->mUnk_00 == 0 && gpCargoManager->mUnk_1C) {
data_ov000_020b5214.func_ov000_0206dc4c(0x141);
}
}
if (data_027e09b8->func_01ffd420() == 0) {
if (gpCargoManager->mUnk_18 <= 0) {
this->mUnk_64 = 0;
this->mUnk_66 = 0;
} else {
this->mUnk_64 = ((s16) gRandom.Next16(0) + this->mUnk_64 / 2) >> 4;
this->mUnk_66 = ((s16) gRandom.Next16(0) + this->mUnk_66 / 2) >> 4;
}
}
}
void UnkTrainSystem2::func_ov024_020d5afc(const Mat3p *param1, const VecFx32 *param2, unk32 param3) {
if (this->mUnk_00 <= 0) {
return;
}
if (data_027e0d00->mUnk_0F4 == NULL) {
return;
}
fx32 scale = MUL_FX32(this->mUnk_00, param3);
this->SetModel();
if (gpCargoManager->mUnk_18 > 0) {
Mat3p auStack_40;
VecFx32 temp;
func_01ffcb94(this->mUnk_64, this->mUnk_66, &auStack_40);
func_01ffa60c(param1, &auStack_40, &auStack_40);
this->SetTransform(&auStack_40, param2, scale);
} else {
this->SetTransform(param1, param2, scale);
}
}
bool UnkTrainSystem2::func_ov024_020d5c40() {
if (gpCargoManager->GetCargo()->IsTypeSet() && gpCargoManager->GetCargo()->GetAmount() != 0 ||
data_ov024_020d86ac.pInstance->mUnk_00_0 != 0) {
return true;
}
return false;
}