Skip to content

Commit 80fe09a

Browse files
author
Niko
committed
RaceFlag progress
1 parent c2662e2 commit 80fe09a

File tree

1 file changed

+71
-62
lines changed

1 file changed

+71
-62
lines changed

decompile/General/RaceFlag/RaceFlag_13_DrawSelf.c

Lines changed: 71 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,12 @@ void DECOMP_RaceFlag_DrawSelf()
3838

3939
// 0x28, 0x2C, 0x30, 0x34, 0x38
4040
// copies of data.checkeredFlag[X]
41-
int unk1;
42-
int unk2;
43-
int waveAngle;
44-
int brightness;
45-
int darkness;
41+
int local0;
42+
int local1;
43+
int local2;
44+
int local3;
45+
int local4;
46+
4647
int time;
4748

4849
if (sdata->RaceFlag_CanDraw == 0)
@@ -80,57 +81,63 @@ void DECOMP_RaceFlag_DrawSelf()
8081
scratchpad = (u_int*)0x1f800000;
8182
#endif
8283
toggle = 1;
84+
85+
86+
// === Step 1 ===
8387
data.checkerFlagVariables[4] += data.checkerFlagVariables[3] * gGT->elapsedTimeMS;
8488
angle[0] = (int)data.checkerFlagVariables[4] >> 5;
8589

90+
91+
// === Step 2 ===
8692
if (0xfff < angle[0])
8793
{
8894
data.checkerFlagVariables[4] &= 0x1ffff;
8995
angle[0] = (int)data.checkerFlagVariables[4] >> 5;
9096

91-
// += 45 degrees
97+
// Linear +=
9298
data.checkerFlagVariables[0] += 0x200;
99+
data.checkerFlagVariables[2] += 200;
93100

94-
// Range: [1.0, 2.0]
101+
// Trigonometric +=
95102
approx[0] = DECOMP_MATH_Sin(data.checkerFlagVariables[0]) + 0xfff;
96-
97-
// Range: [16, 32] + 0x96
98103
data.checkerFlagVariables[1] = (approx[0] * 0x20 >> 0xd) + 0x96;
99104

100-
// += 18 degrees
101-
data.checkerFlagVariables[2] = data.checkerFlagVariables[2] + 200;
102-
103-
// Range: [1.0, 2.0]
104105
approx[0] = DECOMP_MATH_Sin(data.checkerFlagVariables[2]) + 0xfff;
105-
106-
// Range: [32, 64] + 0xb4
107106
data.checkerFlagVariables[3] = (approx[0] * 0x40 >> 0xd) + 0xb4;
108107
}
109108

110-
// Range: [1.0, 2.0]
109+
110+
// === Step 3 ===
111111
approx[0] = DECOMP_MATH_Sin(angle[0]) + 0xfff;
112112
approx[0] = approx[0] * data.checkerFlagVariables[1];
113113
approx[0] = (approx[0] >> 0xd) + 0x280;
114114

115-
// 280 degrees (3/4 of 360)
116-
angle[0] += 0xc80;
117115

118-
// Range: [1.0, 2.0]
116+
// === Step 4 ===
117+
angle[0] += 0xc80;
119118
colorSine[0] = DECOMP_MATH_Sin(angle[0]) + 0xfff;
120119

121-
time = sdata->RaceFlag_ElapsedTime >> 5;
122-
angle[0] = time;
123120

121+
// === Step 5 ===
124122
pos[0].vy = 0xfc72;
125123
pos[1].vy = 0xfcd0;
126124
pos[2].vy = 0xfd2e;
127125

126+
127+
// === Step 6 ===
128+
time = sdata->RaceFlag_ElapsedTime >> 5;
129+
angle[0] = time;
130+
131+
132+
// === Step 7 ===
128133
flagPos = sdata->RaceFlag_Position;
129134
flagPos = -0xbbe - flagPos;
130135
pos[0].vx = flagPos;
131136
pos[1].vx = flagPos;
132137
pos[2].vx = flagPos;
133138

139+
140+
// === Step 8 ===
134141
for (i = 0; i < 10; i++)
135142
{
136143
for (
@@ -159,11 +166,11 @@ void DECOMP_RaceFlag_DrawSelf()
159166
// screen size
160167
dimensions = 0xd80200;
161168

162-
unk1 = data.checkerFlagVariables[0];
163-
unk2 = data.checkerFlagVariables[1];
164-
waveAngle = data.checkerFlagVariables[2];
165-
brightness = data.checkerFlagVariables[3];
166-
darkness = data.checkerFlagVariables[4];
169+
local0 = data.checkerFlagVariables[0];
170+
local1 = data.checkerFlagVariables[1];
171+
local2 = data.checkerFlagVariables[2];
172+
local3 = data.checkerFlagVariables[3];
173+
local4 = data.checkerFlagVariables[4];
167174

168175
// vertical strips
169176
for (column = 1; column < 35; column++)
@@ -178,58 +185,60 @@ void DECOMP_RaceFlag_DrawSelf()
178185
bottom = (u_int *)(0x1f800000 + toggle * 0x78);
179186
#endif
180187

181-
// increment
182-
darkness += brightness * 0x40;
183-
angle[0] = darkness;
184-
angle[1] = (int)angle[0] >> 5;
185188

186-
if (0xfff < angle[1])
189+
// === Step 1 ===
190+
local4 += local3 * 0x40;
191+
angle[0] = (int)local4 >> 5;
192+
193+
194+
// === Step 2 ===
195+
if (0xfff < angle[0])
187196
{
188-
angle[1] = (int)(angle[0] & 0x1ffff) >> 5;
189-
darkness = angle[0] & 0x1ffff;
190-
191-
// increment
192-
unk1 += 0x200;
193-
angle[0] = unk1;
194-
195-
// Range: [1.0, 2.0]
196-
approx[0] = DECOMP_MATH_Sin(angle[0]) + 0xfff;
197+
local4 &= 0x1ffff;
198+
angle[0] = (int)local4 >> 5;
199+
200+
// Linear +=
201+
local0 += 0x200;
202+
local2 += 200;
203+
204+
// Trigonometric +=
205+
approx[0] = DECOMP_MATH_Sin(local0) + 0xfff;
206+
local1 = (approx[0] * 0x20 >> 0xd) + 0x96;
207+
208+
approx[0] = DECOMP_MATH_Sin(local2) + 0xfff;
209+
local3 = (approx[0] * 0x40 >> 0xd) + 0xb4;
210+
}
197211

198-
// Range: [16, 32] + 0x96
199-
unk2 = (approx[0] * 0x20 >> 0xd) + 0x96;
200212

201-
// increment
202-
waveAngle += 200;
203-
angle[0] = waveAngle;
213+
// === Step 3 ===
214+
approx[0] = DECOMP_MATH_Sin(angle[0]) + 0xfff;
215+
approx[0] = approx[0] * local1;
216+
approx[0] = (approx[0] >> 0xd) + 0x280;
204217

205-
// Range: [1.0, 2.0]
206-
approx[0] = DECOMP_MATH_Sin(angle[0]) + 0xfff;
207218

208-
// Range: [32, 64] + 0xb4
209-
brightness = (approx[0] * 0x40 >> 0xd) + 0xb4;
210-
}
219+
// === Step 4 ===
220+
angle[0] += 0xc80;
221+
colorSine[1] = DECOMP_MATH_Sin(angle[0]) + 0xfff;
211222

212-
// Range: [1.0, 2.0]
213-
approx[0] = DECOMP_MATH_Sin(angle[1]) + 0xfff;
214-
approx[0] = (approx[0] * unk2 >> 0xd) + 0x280;
215-
216-
// 280 degrees
217-
angle[1] += 0xc80;
218-
219-
// range: [1.0, 2.0]
220-
colorSine[1] = DECOMP_MATH_Sin(angle[1]) + 0xfff;
221223

224+
// === Step 5 ===
222225
pos[0].vy = 0xfc72;
223226
pos[1].vy = 0xfcd0;
224227
pos[2].vy = 0xfd2e;
228+
229+
230+
// === Step 6 ===
231+
time += 0x100;
232+
angle[0] = time;
233+
234+
235+
// === Step 7 ===
225236
pos[0].vx += 100;
226237
pos[1].vx += 100;
227238
pos[2].vx += 100;
228239

229-
// increment
230-
time += 0x100;
231-
angle[0] = time;
232240

241+
// === Step 8 ===
233242
for (
234243
i = 0, vect = &pos[0];
235244
i < 3;

0 commit comments

Comments
 (0)