SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
WaterRoad.cpp
1#include "Game/Map/WaterRoad.hpp"
2#include "Game/Util.hpp"
3
4void WaterRoadModelInfo::initDisplayList() {
6
7 s32 val = 0x18;
8
9 if (mIsLow) {
10 val = 0x10;
11 }
12
13 mList = new u8[0x20];
14 //DCInvalidateRange(mList, )
15}
16
17void WaterRoadModelInfo::drawGD() const {
18 if (mIsLow) {
19 loadMaterialLow();
20 }
21 else {
22 loadMaterialHigh(0);
23 }
24
25 GXCallDisplayList(mList, mDLLength);
26}
27
28s32 WaterRoadModelInfo::calcDemoDrawPointNum(const WaterRoad *pRoad) const {
29 s32 ret = 1;
30
31 for (; ret < _8; ret++) {
32 if (MR::getRailCoord(pRoad) < _18[ret]) {
33 return ret;
34 }
35 }
36
37 return _8;
38}
39
40void WaterRoadModelInfo::loadMaterialHigh(const WaterRoad *pRoad) const {
41 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
42 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_POS_XY, GX_S16, 0x10);
43 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_POS_XYZ, GX_F32, 0);
44 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_POS_XYZ, GX_F32, 0);
45 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX2, GX_POS_XYZ, GX_F32, 0);
46 GXClearVtxDesc();
47 GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
48 GXSetVtxDesc(GX_VA_NRM, GX_INDEX16);
49 GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
50 GXSetVtxDesc(GX_VA_TEX1, GX_DIRECT);
51 GXSetVtxDesc(GX_VA_TEX2, GX_DIRECT);
52 GXSetArray(GX_VA_POS, _10, 0xC);
53 GXSetArray(GX_VA_NRM, _14, 6);
54 GXLoadPosMtxImm(MR::getCameraViewMtx(), 0);
55 GXLoadNrmMtxImm(MR::getCameraViewMtx(), 0);
56 GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x1E, 0, 0x7D);
57 GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, 0x21, 0, 0x7D);
58 GXSetTexCoordGen2(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX2, 0x24, 0, 0x7D);
59 GXSetTexCoordGen2(GX_TEXCOORD3, GX_TG_MTX3x4, GX_TG_POS, 0x27, 0, 0x7D);
60 GXSetTexCoordGen2(GX_TEXCOORD4, GX_TG_MTX2x4, GX_TG_NRM, 0x2A, 0, 0x7D);
61 MR::loadTexProjectionMtx(0x27);
62
63 TPos3f pos;
64 pos.identity();
65 pos.set(MR::getCameraViewMtx());
66 pos.zeroTrans();
67
68 TMtx34f mtx;
69 mtx.identity();
70 mtx.scale(1.0f);
71
72 PSMTXConcat((const MtxPtr)&pos.mMtx, (const MtxPtr)&mtx, (MtxPtr)&pos.mMtx);
73 PSMTXConcat((const MtxPtr)&pos.mMtx, qMtx2_1, (MtxPtr)&pos.mMtx);
74 GXLoadTexMtxImm((const MtxPtr)&pos.mMtx, 0x2A, GX_MTX2x4);
75 GXSetNumIndStages(1);
76 GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD2, GX_TEXMAP1);
77 GXSetTevIndWarp(GX_TEVSTAGE3, GX_INDTEXSTAGE0, 1, 0, GX_ITM_0);
78
79 f32 offset[2][3];
80 offset[0][1] = 0.0f;
81 offset[0][0] = 0.2f;
82 offset[0][2] = 0.0f;
83 offset[1][0] = 0.0f;
84 offset[1][1] = 0.2f;
85 offset[1][2] = 0.0f;
86
87 GXSetIndTexMtx(GX_ITM_0, offset, 0);
88 GXSetNumTevStages(5);
89
90 const GXColor color_0 = { 0x28, 0x28, 0x28, 0x14 };
91 GXSetTevColor(GX_TEVREG0, color_0);
92 const GXColor color_1 = { 0x55, 0x96, 0xBE, 0xFF };
93 GXSetTevColor(GX_TEVREG1, color_1);
94
95 if (pRoad) {
96 const GXColor color_2 = { 0xFF, 0xFF, 0xFF, pRoad->_9C };
97 GXSetTevColor(GX_TEVREG2, color_2);
98 }
99
100 GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
101 GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
102 GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
103 GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
104 GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
105 GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP0, GX_COLOR_NULL);
106 GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO);
107 GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_DIVIDE_2, 0, GX_TEVPREV);
108 GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
109 GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_2, 0, GX_TEVPREV);
110 GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
111 GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_CPREV, GX_CC_A0, GX_CC_C0, GX_CC_CPREV);
112 GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_COMP_R8_EQ, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
113 GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
114 GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
115 GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD3, GX_TEXMAP2, GX_COLOR_NULL);
116 GXSetTevColorIn(GX_TEVSTAGE3, GX_CC_ZERO, GX_CC_TEXC, GX_CC_C1, GX_CC_CPREV);
117 GXSetTevColorOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
118 GXSetTevAlphaIn(GX_TEVSTAGE3, GX_CA_APREV, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
119 GXSetTevAlphaOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
120 GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD4, GX_TEXMAP3, GX_COLOR_NULL);
121 GXSetTevColorIn(GX_TEVSTAGE4, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_CPREV);
122 GXSetTevColorOp(GX_TEVSTAGE4, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
123
124 if (pRoad && pRoad->_9C != 0xFF) {
125 GXSetTevAlphaIn(GX_TEVSTAGE4, GX_CA_A2, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
126 }
127 else {
128 GXSetTevAlphaIn(GX_TEVSTAGE4, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
129 }
130
131 GXSetTevAlphaOp(GX_TEVSTAGE4, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
132 GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
133 GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
134 GXSetZMode(1, GX_LEQUAL, 1);
135 GXSetZCompLoc(1);
136 GXSetCullMode(GX_CULL_NONE);
137 GXSetClipMode(GX_CLIP_ENABLE);
138}
139
140void WaterRoadModelInfo::loadMaterialLow() const {
141 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
142 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_POS_XY, GX_S16, 0x10);
143 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_POS_XYZ, GX_F32, 0);
144 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_POS_XYZ, GX_F32, 0);
145 GXClearVtxDesc();
146 GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
147 GXSetVtxDesc(GX_VA_NRM, GX_INDEX16);
148 GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
149 GXSetVtxDesc(GX_VA_TEX1, GX_DIRECT);
150 GXSetArray(GX_VA_POS, _10, 0xC);
151 GXSetArray(GX_VA_NRM, _14, 6);
152 GXLoadPosMtxImm(MR::getCameraViewMtx(), 0);
153 GXLoadNrmMtxImm(MR::getCameraViewMtx(), 0);
154 GXSetCurrentMtx(0);
155 GXSetNumChans(0);
156 GXSetNumTexGens(4);
157 GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x1E, 0, 0x7D);
158 GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, 0x21, 0, 0x7D);
159 GXSetTexCoordGen2(GX_TEXCOORD2, GX_TG_MTX3x4, GX_TG_POS, 0x24, 0, 0x7D);
160 GXSetTexCoordGen2(GX_TEXCOORD3, GX_TG_MTX2x4, GX_TG_NRM, 0x27, 0, 0x7D);
161
162 MR::loadTexProjectionMtx(0x24);
163
164 TPos3f pos;
165 pos.identity();
166 pos.set(MR::getCameraViewMtx());
167 pos.zeroTrans();
168
169 TMtx34f mtx;
170 mtx.identity();
171 mtx.scale(1.0f);
172
173 PSMTXConcat((const MtxPtr)&pos.mMtx, (const MtxPtr)&mtx, (MtxPtr)&pos.mMtx);
174 PSMTXConcat((const MtxPtr)&pos.mMtx, qMtx2_1, (MtxPtr)&pos.mMtx);
175 GXLoadTexMtxImm((const MtxPtr)&pos.mMtx, 0x27, GX_MTX2x4);
176 GXSetNumIndStages(0);
177 GXSetNumTevStages(4);
178 const GXColor color_0 = { 0x28, 0x28, 0x28, 0x14 };
179 GXSetTevColor(GX_TEVREG0, color_0);
180 const GXColor color_1 = { 0x55, 0x96, 0xBE, 0xFF };
181 GXSetTevColor(GX_TEVREG1, color_1);
182 GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
183 GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
184 GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
185 GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
186 GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
187 GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP0, GX_COLOR_NULL);
188 GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO);
189 GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_DIVIDE_2, 0, GX_TEVPREV);
190 GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
191 GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_2, 0, GX_TEVPREV);
192 GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD2, GX_TEXMAP2, GX_COLOR_NULL);
193 GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_ZERO, GX_CC_TEXC, GX_CC_C1, GX_CC_CPREV);
194 GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
195 GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
196 GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
197 GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD3, GX_TEXMAP3, GX_COLOR_NULL);
198 GXSetTevColorIn(GX_TEVSTAGE3, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_CPREV);
199 GXSetTevColorOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
200 GXSetTevAlphaIn(GX_TEVSTAGE3, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
201 GXSetTevAlphaOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
202 GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
203 GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
204 GXSetZMode(1, GX_LEQUAL, 1);
205 GXSetZCompLoc(1);
206 GXSetCullMode(GX_CULL_NONE);
207 GXSetClipMode(GX_CLIP_ENABLE);
208}