mirror of
https://github.com/zeldaret/st
synced 2026-08-07 10:15:54 -04:00
5e934a8c9b
* name func_01ffd3d8 and func_01ffd400 * name func_01ffd3b0 * match func_ov024_020cf9d4 + improve the Random struct * UnkStruct_027e0cf8_00_0C_024 45% * match PassengerManager::GetRandomIndex * UnkStruct_027e0cf8_00_0C_024 OK * UnkStruct_027e0cf8_00_0C_024: do other sections * UnkStruct_027e0cf8_08_024 55% * cleanup: remplace delete into null by the delete macro * UnkStruct_027e0cf8_08_024 OK * fix build issues * UnkStruct_ov024_020d86a0_024 OK * PlayerActor_A0_38_024 .text OK, CreditsEndingType OK * tools: create courselist.py to convert .CLB data to yaml * UnkDataStruct4_14 OK * UnkDataStruct4 17% * UnkDataStruct4 OK * MiscAdvManager OK * PassengerManager OK * fix build issues * ZeldaTrainBinary OK * mark PassengerManager as complete and adjust delinks * UnkStruct_027e0cf8_08_00_024 OK * document more of UnkStruct_027e0ce0 * savefile hotfixes * UnkStruct_027e0ce0_34_024 OK * code_020d46b4_024 OK * UnkStruct_027e0d00 & UnkStruct_027e0d00_20 OK * code_020d51dc_024 OK * fix weird formatting * UnkTrainSystem1 OK * fix jp broken match * UnkTrainSystem2 OK * UnkStruct_027e0d08_024 31% * fix build issues * UnkStruct_027e0d08 OK!!! * remove useless parenthesis * ActorUnk_ov000_020a8bb0_EC OK * move ActorUnk_ov000_020a8bb0_EC to MainGame/Actor/ * ActorUnkOBPC OK * add sjiswrap support * solve remaining gaps and fix build issues * reorganise files + counter docs * tools: remove format command execution from defaults
209 lines
6.3 KiB
C++
209 lines
6.3 KiB
C++
#include "Unknown/UnkStruct_027e0d00.hpp"
|
|
#include "MainGame/CargoManager.hpp"
|
|
#include "System/SysNew.hpp"
|
|
#include "Unknown/UnkStruct_027e09a4.hpp"
|
|
#include "Unknown/UnkStruct_027e0ce0.hpp"
|
|
#include "versions.h"
|
|
|
|
extern "C" bool func_ov026_020f4be0(int, int);
|
|
extern "C" unk32 func_02012fc4(unk32);
|
|
|
|
const UnkStruct_ov024_020d7624 data_ov024_020d7624 = {0x13, {0}};
|
|
static const unk32 data_ov024_020d764c[] = {0x0320, 0x0300, 0x0500, 0x0200};
|
|
static const unk32 data_ov024_020d763c[] = {0x0270, 0x0140, 0x0240, 0x0100};
|
|
static const unk32 data_ov024_020d762c[] = {0x444C, 0x2178, 0x203C, 0x15B8};
|
|
static const unk32 data_ov024_020d765c[] = {0x0080, 0x0000, 0x0000, 0x0000};
|
|
const unk32 data_ov024_020d766c[] = {0x0004, 0x0610, 0x03F0, 0x0450};
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d47c4(unk32 *param1, unk32 *param2, unk32 param3) {
|
|
UnkStruct_027e0ce0_34 *ptr = UnkStruct_027e0ce0::func_ov000_0205c904();
|
|
|
|
if (param3 < ptr->mUnk_2C) {
|
|
*param1 = ptr->func_ov024_020d3dec(param3);
|
|
*param2 = ptr->func_ov024_020d3e0c(param3);
|
|
} else if (param3 == 2) {
|
|
*param1 = 1;
|
|
*param2 = 0;
|
|
} else if (param3 == 3) {
|
|
*param1 = 3;
|
|
*param2 = 0;
|
|
}
|
|
}
|
|
|
|
UnkStruct_027e0d00 *UnkStruct_027e0d00::Create() {
|
|
return new(HeapIndex_1) UnkStruct_027e0d00();
|
|
}
|
|
|
|
unk32 UnkStruct_027e0d00::func_ov024_020d485c(unk32 param1, unk32 param2) {
|
|
switch (param2) {
|
|
case 0:
|
|
return data_ov024_020d765c[param1];
|
|
case 1:
|
|
return data_ov024_020d764c[param1];
|
|
case 2:
|
|
return data_ov024_020d763c[param1];
|
|
case 3:
|
|
return func_02012fc4(data_ov024_020d762c[param1]);
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
u8 UnkStruct_027e0d00::func_ov024_020d48c8(unk32 param1) {
|
|
return data_ov024_020d7624.unk_01[param1];
|
|
}
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d48d8(unk32 param1, unk32 param2) {
|
|
for (int i = 0; i < MAX_TRAIN_SETS; i++) {
|
|
this->DestroyUnk020(param1, i);
|
|
}
|
|
|
|
this->mUnk_020[param1][param2] = new(this->mUnk_0E4[param1]) UnkStruct_027e0d00_20(param1, param2);
|
|
this->mUnk_020[param1][param2]->func_ov000_020588f0(this->mUnk_010[param1], this->func_ov024_020d485c(param1, 0x03), 0x01,
|
|
this->mUnk_000[param1]);
|
|
this->mUnk_020[param1][param2]->func_ov024_020d4fa0(this->mUnk_0A0[param1], data_ov024_020d766c[param1]);
|
|
}
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d49ec(unk32 param1, unk32 param2) {
|
|
this->DestroyUnk020(param1, param2);
|
|
}
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d4a50() {
|
|
UnkStruct_027e0ce0_34 *ptr = UnkStruct_027e0ce0::func_ov000_0205c904();
|
|
|
|
for (int i = 0; i < MAX_TRAIN_PARTS; i++) {
|
|
unk32 local_1c = -1;
|
|
unk32 local_20 = -1;
|
|
|
|
UnkStruct_027e0d00::func_ov024_020d47c4(&local_1c, &local_20, i);
|
|
this->func_ov024_020d48d8(local_1c, local_20);
|
|
}
|
|
|
|
this->func_ov024_020d4bf8();
|
|
}
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d4ab4() {
|
|
int j;
|
|
int i;
|
|
|
|
for (i = 0; i < MAX_TRAIN_PARTS; i++) {
|
|
for (j = 0; j < MAX_TRAIN_SETS; j++) {
|
|
this->func_ov024_020d49ec(i, j);
|
|
}
|
|
}
|
|
}
|
|
|
|
#if IS_JP
|
|
extern "C" void func_ov000_0205a1f4(void *, int, int, int, int);
|
|
#endif
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d4af4() {
|
|
if (!this->mUnk_104) {
|
|
return;
|
|
}
|
|
|
|
if (data_027e09a4->IsTrain()) {
|
|
return;
|
|
}
|
|
|
|
for (int i = 0; i < MAX_TRAIN_PARTS; i++) {
|
|
unk32 local_1c = -1;
|
|
unk32 local_20 = -1;
|
|
|
|
UnkStruct_027e0d00::func_ov024_020d47c4(&local_1c, &local_20, i);
|
|
UnkStruct_027e0d00_20 *pUnk20 = this->mUnk_020[local_1c][local_20];
|
|
|
|
if (pUnk20 != NULL && pUnk20->mUnk_20.mUnk_04 != NULL) {
|
|
#if IS_JP
|
|
UnkStruct_027e0d00_00 *ptr = this->mUnk_000[local_1c];
|
|
func_ov000_0205a1f4(ptr, ptr->mUnk_1C, ptr->mUnk_20, ptr->mUnk_24, ptr->mUnk_1B);
|
|
#endif
|
|
|
|
pUnk20->func_ov000_02058914(this->mUnk_000[local_1c]);
|
|
}
|
|
}
|
|
|
|
this->func_ov024_020d4bf8();
|
|
}
|
|
|
|
unk32 UnkStruct_027e0d00::func_ov024_020d4b9c(unk32 param1) {
|
|
switch (param1) {
|
|
case 0x00:
|
|
return 0x18; // meant to be 0x17?
|
|
case 0x01:
|
|
return 0x18;
|
|
case 0x02:
|
|
return 0x19;
|
|
case 0x03:
|
|
return 0x1A;
|
|
case 0x04:
|
|
return 0x1B;
|
|
case 0x05:
|
|
return 0x1C;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
#if IS_JP
|
|
return 0x40;
|
|
#else
|
|
return 0x3F;
|
|
#endif
|
|
}
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d4bf8() {
|
|
UnkStruct_StackTitleScreen auStack_20("Npc/Tex.bin", 1);
|
|
auStack_20.func_ov000_02059270(0x17, "feel_e", 0x2D200000);
|
|
auStack_20.func_ov000_02059270(0x18, "feel0", 0x2D200000);
|
|
auStack_20.func_ov000_02059270(0x19, "feel1", 0x2D200000);
|
|
auStack_20.func_ov000_02059270(0x1A, "feel2", 0x2D200000);
|
|
auStack_20.func_ov000_02059270(0x1B, "feel3", 0x2D200000);
|
|
auStack_20.func_ov000_02059270(0x1C, "feel4", 0x2D200000);
|
|
}
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d4cc0(u32 cargoType) {
|
|
if (cargoType != CargoType_None && this->mUnk_100 != NULL) {
|
|
this->mUnk_0F4 = new(this->mUnk_100) MapObjectProfile_Derived5(cargoType);
|
|
this->mUnk_0F4->func_ov000_020588f0(this->mUnk_0FC, 0xD30, 0x01, this->mUnk_0F8);
|
|
}
|
|
}
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d4d10() {
|
|
this->DestroyUnk0F4();
|
|
}
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d4d44() {
|
|
if (this->mUnk_0F4 != NULL && this->mUnk_0F4->mUnk_20.mUnk_04 != NULL) {
|
|
#if IS_JP
|
|
UnkStruct_027e0d00_00 *ptr = this->mUnk_0F8;
|
|
func_ov000_0205a1f4(ptr, ptr->mUnk_1C, ptr->mUnk_20, ptr->mUnk_24, ptr->mUnk_1B);
|
|
#endif
|
|
this->mUnk_0F4->func_ov000_02058914(this->mUnk_0F8);
|
|
}
|
|
}
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d4d6c(unk32 param1) {
|
|
for (int i = 0; i < ARRAY_LEN(this->mUnk_0B0); i++) {
|
|
if (func_ov026_020f4be0(param1, i)) {
|
|
this->mUnk_0B0[i] = new(HeapIndex_1) MapObjectProfile_Derived5(i);
|
|
this->mUnk_0B0[i]->func_ov000_020586b4(0, 0, 0, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
void UnkStruct_027e0d00::func_ov024_020d4df8() {
|
|
for (int i = 0; i < ARRAY_LEN(this->mUnk_0B0); i++) {
|
|
DELETE(this->mUnk_0B0[i]);
|
|
}
|
|
}
|
|
|
|
G3d_Model *UnkStruct_027e0d00::func_ov024_020d4e3c(unk32 param1) {
|
|
if (this->mUnk_0B0[param1] != NULL) {
|
|
return G3d_GetModelPtr(this->mUnk_0B0[param1]->mUnk_50);
|
|
}
|
|
|
|
return NULL;
|
|
}
|