@@ -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