1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#include "d/a/obj/d_a_obj_treasure_island.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "d/d_stage_mgr.h"
const f32 dAcOtreasureIsland_c::unkFloat0 = 100000.0f;
const f32 dAcOtreasureIsland_c::unkFloat1 = 50000.0f;
static const char *const AcOtreasureIsland__OarcNames[] = {
"IslTreA", "IslTreB", "IslTreC", "IslTreD", "IslTreE", "IslTreF", "IslTreG", "IslTreH",
};
static const char *const AcOtreasureIsland__ModelNames[] = {
"IslTreA", "IslTreB", "IslTreC", "IslTreD", "IslTreE", "IslTreF", "IslTreG", "IslTreH",
};
static const char *const AcOtreasureIsland__DbzNames[] = {
"dzb/IslTreA.dzb", "dzb/IslTreB.dzb", "dzb/IslTreC.dzb", "dzb/IslTreD.dzb",
"dzb/IslTreE.dzb", "dzb/IslTreF.dzb", "dzb/IslTreG.dzb", "dzb/IslTreH.dzb",
};
static const char *const AcOtreasureIsland__PlcNames[] = {
"dat/IslTreA.plc", "dat/IslTreB.plc", "dat/IslTreC.plc", "dat/IslTreD.plc",
"dat/IslTreE.plc", "dat/IslTreF.plc", "dat/IslTreG.plc", "dat/IslTreH.plc",
};
SPECIAL_ACTOR_PROFILE(OBJ_TREASURE_ISLAND, dAcOtreasureIsland_c, fProfile::OBJ_TREASURE_ISLAND, 0x1EE, 0, 3);
bool dAcOtreasureIsland_c::createHeap() {
mResFile = nw4r::g3d::ResFile(getOarcResFile(AcOtreasureIsland__OarcNames[subtype]));
dStage_c::bindStageResToFile(&mResFile);
dStage_c::bindSkyCmnToResFile(&mResFile);
nw4r::g3d::ResMdl mdl;
nw4r::g3d::ResAnmTexSrt anmSrt;
mdl = mResFile.GetResMdl(AcOtreasureIsland__ModelNames[subtype]);
TRY_CREATE(mModel.create(mdl, &mAllocator, 0x120));
if (subtype == 2) {
mdl = mResFile.GetResMdl("IslTreCWater00");
TRY_CREATE(mWater00.create(mdl, &mAllocator, 0x324));
if (dStage_c::getMA0IndirectSrt(&anmSrt, mdl)) {
TRY_CREATE(mWaterSrt00.create(mdl, anmSrt, &mAllocator, 0x0, 1));
}
mdl = mResFile.GetResMdl("IslTreCWater01");
d3d::UnkWithWater::linkMdl(mdl, &waterStuff);
TRY_CREATE(mWater01.create(mdl, &mAllocator, 0x324));
if (dStage_c::getMA0IndirectSrt(&anmSrt, mdl)) {
TRY_CREATE(mWaterSrt01.create(mdl, anmSrt, &mAllocator, 0x0, 1));
}
}
void *dzb = getOarcFile(AcOtreasureIsland__OarcNames[subtype], AcOtreasureIsland__DbzNames[subtype]);
void *plc = getOarcFile(AcOtreasureIsland__OarcNames[subtype], AcOtreasureIsland__PlcNames[subtype]);
updateMatrix();
mModel.setLocalMtx(mWorldMtx);
if (subtype == 2) {
mWater00.setLocalMtx(mWorldMtx);
mWater01.setLocalMtx(mWorldMtx);
}
TRY_CREATE(!mCollision.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale));
mCollision.Lock();
return mCollision.InitMapStuff(&mAllocator);
}
int dAcOtreasureIsland_c::create() {
subtype = mParams & 0xf;
if (subtype == 2) {
dStageMgr_c::GetInstance()->initUnkWithWater(0, &waterStuff);
}
CREATE_ALLOCATOR(dAcOtreasureIsland_c);
dBgS::GetInstance()->Regist(&mCollision, this);
dBgS::GetInstance()->RegistBg(&mCollision, this);
mModel.setPriorityDraw(0x1C, 0x9);
if (subtype == 2) {
mWater00.setAnm(mWaterSrt00);
mWater01.setAnm(mWaterSrt01);
mWater01.setPriorityDraw(0x1C, 0x84);
mWater00.setPriorityDraw(0x1C, 0x9);
}
mBoundingBox.Set(mVec3_c(-1850.0f, -2050.0f, -1900.0f), mVec3_c(1950.0f, 2500.0f, 1850.0f));
mCullingDistance = 500000.0f;
return SUCCEEDED;
}
int dAcOtreasureIsland_c::doDelete() {
if (subtype == 2) {
dStageMgr_c::GetInstance()->destroyUnkWithWater(0, &waterStuff);
}
dBgS::GetInstance()->UnRegist(&mCollision);
return SUCCEEDED;
}
int dAcOtreasureIsland_c::actorExecute() {
if (subtype == 2) {
mWaterSrt00.play();
mWaterSrt01.play();
}
return SUCCEEDED;
}
int dAcOtreasureIsland_c::draw() {
drawModelType1(&mModel);
if (subtype == 2) {
drawModelType1(&mWater00);
drawModelType1(&mWater01);
}
return SUCCEEDED;
}
|