mirror of
https://github.com/zeldaret/st
synced 2026-08-05 09:34:10 -04:00
f1c7b3cc72
* 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
102 lines
3.2 KiB
C++
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;
|
|
}
|