ALL: Huge upstream synch + PerRom DelaySI & CountPerOp parameters
[mupen64plus-pandora.git] / source / gles2glide64 / src / Glide64 / Combine.cpp
CommitLineData
98e75f2d 1/*
2* Glide64 - Glide video plugin for Nintendo 64 emulators.
3* Copyright (c) 2002 Dave2001
4* Copyright (c) 2003-2009 Sergey 'Gonetz' Lipski
5*
6* This program is free software; you can redistribute it and/or modify
7* it under the terms of the GNU General Public License as published by
8* the Free Software Foundation; either version 2 of the License, or
9* any later version.
10*
11* This program is distributed in the hope that it will be useful,
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14* GNU General Public License for more details.
15*
16* You should have received a copy of the GNU General Public License
17* along with this program; if not, write to the Free Software
18* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19*/
20
21//****************************************************************
22//
23// Glide64 - Glide Plugin for Nintendo 64 emulators
24// Project started on December 29th, 2001
25//
26// Authors:
27// Dave2001, original author, founded the project in 2001, left it in 2002
28// Gugaman, joined the project in 2002, left it in 2002
29// Sergey 'Gonetz' Lipski, joined the project in 2002, main author since fall of 2002
30// Hiroshi 'KoolSmoky' Morii, joined the project in 2007
31//
32//****************************************************************
33//
34// To modify Glide64:
35// * Write your name and (optional)email, commented by your work, so I know who did it, and so that you can find which parts you modified when it comes time to send it to me.
36// * Do NOT send me the whole project or file that you modified. Take out your modified code sections, and tell me where to put them. If people sent the whole thing, I would have many different versions, but no idea how to combine them all.
37//
38//****************************************************************
39
40#include "Gfx_1.3.h"
41#include "Util.h"
42#include "Combine.h"
43
44#define FASTSEARCH // Enable fast combine mode searching algorithm
45
46float percent_org, percent, r, g, b;
47wxUint32 lod_frac;
48
49wxUint32 cc_lookup[257];
50wxUint32 ac_lookup[257];
51COMBINE cmb;
52
53//****************************************************************
54// Macros
55//****************************************************************
56
57#define MOD_0(mode) cmb.mod_0 = mode
58#define MOD_0_COL(color) cmb.modcolor_0 = color
59#define MOD_0_COL1(color) cmb.modcolor1_0 = color
60#define MOD_0_COL2(color) cmb.modcolor2_0 = color
61#define MOD_0_FAC(factor) cmb.modfactor_0 = factor
62#define MOD_1(mode) cmb.mod_1 = mode
63#define MOD_1_COL(color) cmb.modcolor_1 = color
64#define MOD_1_COL1(color) cmb.modcolor1_1 = color
65#define MOD_1_COL2(color) cmb.modcolor2_1 = color
66#define MOD_1_FAC(factor) cmb.modfactor_1 = factor
67
68#define A_BLEND(f1,f2) cmb.abf1=f1,cmb.abf2=f2
69
70// To make a color or alpha combine
71#define CCMB(fnc,fac,loc,oth) \
72 cmb.c_fnc = fnc, \
73 cmb.c_fac = fac, \
74 cmb.c_loc = loc, \
75 cmb.c_oth = oth
76#define ACMB(fnc,fac,loc,oth) \
77 cmb.a_fnc = fnc, \
78 cmb.a_fac = fac, \
79 cmb.a_loc = loc, \
80 cmb.a_oth = oth
81#define CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
82 cmb.c_ext_a = a, \
83 cmb.c_ext_a_mode = a_mode, \
84 cmb.c_ext_b = b, \
85 cmb.c_ext_b_mode = b_mode, \
86 cmb.c_ext_c = c, \
87 cmb.c_ext_c_invert = c_invert, \
88 cmb.c_ext_d= d, \
89 cmb.c_ext_d_invert = d_invert, \
90 cmb.cmb_ext_use |= COMBINE_EXT_COLOR
91#define ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
92 cmb.a_ext_a = a, \
93 cmb.a_ext_a_mode = a_mode, \
94 cmb.a_ext_b = b, \
95 cmb.a_ext_b_mode = b_mode, \
96 cmb.a_ext_c = c, \
97 cmb.a_ext_c_invert = c_invert, \
98 cmb.a_ext_d= d, \
99 cmb.a_ext_d_invert = d_invert, \
100 cmb.cmb_ext_use |= COMBINE_EXT_ALPHA
101#define T0CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
102 cmb.t0c_ext_a = a, \
103 cmb.t0c_ext_a_mode = a_mode, \
104 cmb.t0c_ext_b = b, \
105 cmb.t0c_ext_b_mode = b_mode, \
106 cmb.t0c_ext_c = c, \
107 cmb.t0c_ext_c_invert = c_invert, \
108 cmb.t0c_ext_d= d, \
109 cmb.t0c_ext_d_invert = d_invert, \
110 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR
111#define T0ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
112 cmb.t0a_ext_a = a, \
113 cmb.t0a_ext_a_mode = a_mode, \
114 cmb.t0a_ext_b = b, \
115 cmb.t0a_ext_b_mode = b_mode, \
116 cmb.t0a_ext_c = c, \
117 cmb.t0a_ext_c_invert = c_invert, \
118 cmb.t0a_ext_d= d, \
119 cmb.t0a_ext_d_invert = d_invert, \
120 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA
121#define T1CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
122 cmb.t1c_ext_a = a, \
123 cmb.t1c_ext_a_mode = a_mode, \
124 cmb.t1c_ext_b = b, \
125 cmb.t1c_ext_b_mode = b_mode, \
126 cmb.t1c_ext_c = c, \
127 cmb.t1c_ext_c_invert = c_invert, \
128 cmb.t1c_ext_d= d, \
129 cmb.t1c_ext_d_invert = d_invert, \
130 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR
131#define T1ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
132 cmb.t1a_ext_a = a, \
133 cmb.t1a_ext_a_mode = a_mode, \
134 cmb.t1a_ext_b = b, \
135 cmb.t1a_ext_b_mode = b_mode, \
136 cmb.t1a_ext_c = c, \
137 cmb.t1a_ext_c_invert = c_invert, \
138 cmb.t1a_ext_d= d, \
139 cmb.t1a_ext_d_invert = d_invert, \
140 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA
141
142// To use textures
143#define USE_T0() \
144 rdp.best_tex = 0; \
145 cmb.tex |= 1, \
146 cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL
147#define USE_T1() \
148 if (voodoo.num_tmu > 1) { \
149 rdp.best_tex = 1; \
150 cmb.tex |= 2, \
151 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
152 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
153 cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE; \
154 } \
155 else { \
156 USE_T0(); \
157}
158#define T0_ADD_T1() \
159 rdp.best_tex = 0; \
160 cmb.tex |= 3, \
161 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
162 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
163 cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE
164#define T0_MUL_T1() \
165 rdp.best_tex = 0; \
166 cmb.tex |= 3, \
167 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
168 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
169 cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
170#define T0_MUL_T1_ADD_T0() \
171 rdp.best_tex = 0; \
172 cmb.tex |= 3, \
173 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
174 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
175 cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
176#define T0A_MUL_T1() \
177 rdp.best_tex = 1; \
178 cmb.tex |= 3, \
179 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
180 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
181 cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA
182#define T0_MUL_T1A() \
183 rdp.best_tex = 1; \
184 cmb.tex |= 3, \
185 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA, \
186 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
187 cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
188#define T0_INTER_T1_USING_FACTOR(factor) \
189 if (factor == 0xFF) { \
190 USE_T1(); \
191 } \
192 else if (factor == 0x00) { \
193 USE_T0(); \
194}\
195 else {\
196 if (factor <= 0x80) rdp.best_tex = 0; \
197 else rdp.best_tex = 1; \
198 cmb.tex |= 3, \
199 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
200 cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
201 cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
202 percent = (float)factor / 255.0f, \
203 cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
204}
205#define T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\
206 if (factor == 0xFF) { \
207 USE_T0(); \
208 } \
209 else if (factor == 0x00) { \
210 USE_T1(); \
211}\
212 else {\
213 if (factor <= 0x80) rdp.best_tex = 0; \
214 else rdp.best_tex = 1; \
215 cmb.tex |= 3, \
216 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
217 cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
218 cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
219 percent = (255 - factor) / 255.0f, \
220 cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
221}
222#define T0_INTER_T1_USING_T0() \
223 rdp.best_tex = 0; \
224 cmb.tex |= 3, \
225 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
226 cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
227 cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
228#define T1_INTER_T0_USING_T0() \
229 rdp.best_tex = 0; \
230 cmb.tex |= 3, \
231 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
232 cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
233 cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL
234#define T0_INTER_T1_USING_T1() \
235 if (!cmb.combine_ext) { \
236 T0_INTER_T1_USING_FACTOR(0x7F); \
237 }\
238 else {\
239 rdp.best_tex = 0; \
240 cmb.tex |= 3, \
241 cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
242 cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
243 cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
244 cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
245 cmb.t1c_ext_c = GR_CMBX_ZERO, \
246 cmb.t1c_ext_c_invert = 0, \
247 cmb.t1c_ext_d= GR_CMBX_B, \
248 cmb.t1c_ext_d_invert = 0, \
249 cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
250 cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
251 cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
252 cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
253 cmb.t0c_ext_c = GR_CMBX_OTHER_TEXTURE_RGB, \
254 cmb.t0c_ext_c_invert = 0, \
255 cmb.t0c_ext_d= GR_CMBX_B, \
256 cmb.t0c_ext_d_invert = 0, \
257 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
258}
259#define T0_INTER_T1_USING_T1A() \
260 rdp.best_tex = 0; \
261 cmb.tex |= 3, \
262 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
263 cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
264 cmb.tmu0_fac = GR_COMBINE_FACTOR_OTHER_ALPHA
265#define T0_INTER_T1_USING_PRIM() \
266 if (!cmb.combine_ext) { \
267 T0_INTER_T1_USING_FACTOR ((rdp.prim_color&0xFF)); \
268 }\
269 else {\
270 rdp.best_tex = 0; \
271 cmb.tex |= 3, \
272 cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
273 cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
274 cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
275 cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
276 cmb.t1c_ext_c = GR_CMBX_ZERO, \
277 cmb.t1c_ext_c_invert = 0, \
278 cmb.t1c_ext_d= GR_CMBX_B, \
279 cmb.t1c_ext_d_invert = 0, \
280 cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
281 cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
282 cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
283 cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
284 cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
285 cmb.t0c_ext_c_invert = 0, \
286 cmb.t0c_ext_d= GR_CMBX_B, \
287 cmb.t0c_ext_d_invert = 0, \
288 cmb.tex_ccolor = rdp.prim_color, \
289 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
290}
291#define T1_INTER_T0_USING_PRIM() /* inverse of above */\
292 if (!cmb.combine_ext) { \
293 T1_INTER_T0_USING_FACTOR ((rdp.prim_color&0xFF)); \
294 }\
295 else {\
296 rdp.best_tex = 0; \
297 cmb.tex |= 3, \
298 cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
299 cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
300 cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
301 cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
302 cmb.t1c_ext_c = GR_CMBX_ZERO, \
303 cmb.t1c_ext_c_invert = 0, \
304 cmb.t1c_ext_d= GR_CMBX_B, \
305 cmb.t1c_ext_d_invert = 0, \
306 cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
307 cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
308 cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \
309 cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
310 cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
311 cmb.t0c_ext_c_invert = 0, \
312 cmb.t0c_ext_d= GR_CMBX_B, \
313 cmb.t0c_ext_d_invert = 0, \
314 cmb.tex_ccolor = rdp.prim_color, \
315 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
316}
317#define T0_INTER_T1_USING_ENV() \
318 if (!cmb.combine_ext) { \
319 T0_INTER_T1_USING_FACTOR ((rdp.env_color&0xFF)); \
320 }\
321 else {\
322 rdp.best_tex = 0; \
323 cmb.tex |= 3, \
324 cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
325 cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
326 cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
327 cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
328 cmb.t1c_ext_c = GR_CMBX_ZERO, \
329 cmb.t1c_ext_c_invert = 0, \
330 cmb.t1c_ext_d= GR_CMBX_B, \
331 cmb.t1c_ext_d_invert = 0, \
332 cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
333 cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
334 cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
335 cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
336 cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
337 cmb.t0c_ext_c_invert = 0, \
338 cmb.t0c_ext_d= GR_CMBX_B, \
339 cmb.t0c_ext_d_invert = 0, \
340 cmb.tex_ccolor = rdp.env_color, \
341 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
342}
343#define T1_INTER_T0_USING_ENV() /* inverse of above */\
344 if (!cmb.combine_ext) { \
345 T1_INTER_T0_USING_FACTOR ((rdp.env_color&0xFF)); \
346 }\
347 else {\
348 rdp.best_tex = 0; \
349 cmb.tex |= 3, \
350 cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
351 cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
352 cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
353 cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
354 cmb.t1c_ext_c = GR_CMBX_ZERO, \
355 cmb.t1c_ext_c_invert = 0, \
356 cmb.t1c_ext_d= GR_CMBX_B, \
357 cmb.t1c_ext_d_invert = 0, \
358 cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
359 cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
360 cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \
361 cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
362 cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
363 cmb.t0c_ext_c_invert = 0, \
364 cmb.t0c_ext_d= GR_CMBX_B, \
365 cmb.t0c_ext_d_invert = 0, \
366 cmb.tex_ccolor = rdp.env_color, \
367 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
368}
369#define T0_INTER_T1_USING_SHADEA() \
370 if (!cmb.combine_ext) { \
371 T0_INTER_T1_USING_FACTOR (0x7F); \
372 }\
373 else {\
374 rdp.best_tex = 0; \
375 cmb.tex |= 3, \
376 cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
377 cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
378 cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
379 cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
380 cmb.t1c_ext_c = GR_CMBX_ZERO, \
381 cmb.t1c_ext_c_invert = 0, \
382 cmb.t1c_ext_d= GR_CMBX_B, \
383 cmb.t1c_ext_d_invert = 0, \
384 cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
385 cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
386 cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
387 cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
388 cmb.t0c_ext_c = GR_CMBX_ITALPHA, \
389 cmb.t0c_ext_c_invert = 0, \
390 cmb.t0c_ext_d= GR_CMBX_B, \
391 cmb.t0c_ext_d_invert = 0, \
392 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
393}
394#define T1_INTER_T0_USING_SHADEA() \
395 if (!cmb.combine_ext) { \
396 T0_INTER_T1_USING_FACTOR (0x7F); \
397 }\
398 else {\
399 rdp.best_tex = 0; \
400 cmb.tex |= 3, \
401 cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
402 cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
403 cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
404 cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
405 cmb.t1c_ext_c = GR_CMBX_ZERO, \
406 cmb.t1c_ext_c_invert = 0, \
407 cmb.t1c_ext_d= GR_CMBX_B, \
408 cmb.t1c_ext_d_invert = 0, \
409 cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
410 cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
411 cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \
412 cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
413 cmb.t0c_ext_c = GR_CMBX_ITALPHA, \
414 cmb.t0c_ext_c_invert = 0, \
415 cmb.t0c_ext_d= GR_CMBX_B, \
416 cmb.t0c_ext_d_invert = 0, \
417 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
418}
419#define T1_SUB_T0() \
420 rdp.best_tex = 0; \
421 cmb.tex |= 3, \
422 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
423 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \
424 cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE
425#define T1_SUB_T0_MUL_T0() \
426 rdp.best_tex = 0; \
427 cmb.tex |= 3, \
428 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
429 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \
430 cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
431#define T1_MUL_PRIMLOD_ADD_T0() \
432 rdp.best_tex = 0; \
433 cmb.tex |= 3, \
434 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
435 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
436 cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
437 percent = (float)(lod_frac) / 255.0f, \
438 cmb.dc0_detailmax = cmb.dc1_detailmax = percent
439#define T1_MUL_PRIMA_ADD_T0() \
440 rdp.best_tex = 0; \
441 cmb.tex |= 3, \
442 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
443 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
444 cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
445 percent = (float)(rdp.prim_color&0xFF) / 255.0f, \
446 cmb.dc0_detailmax = cmb.dc1_detailmax = percent
447#define T1_MUL_ENVA_ADD_T0() \
448 rdp.best_tex = 0; \
449 cmb.tex |= 3, \
450 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
451 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
452 cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
453 percent = (float)(rdp.env_color&0xFF) / 255.0f, \
454 cmb.dc0_detailmax = cmb.dc1_detailmax = percent
455#define T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1() \
456 T0_ADD_T1 (); \
457 MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC); \
458 MOD_0_COL (rdp.prim_color & 0xFFFFFF00); \
459 MOD_0_FAC (lod_frac & 0xFF);
460#define T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0() \
461 if (cmb.combine_ext) \
462{ \
463 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X, \
464 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X, \
465 GR_CMBX_DETAIL_FACTOR, 0, \
466 GR_CMBX_ZERO, 0); \
467 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X, \
468 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X, \
469 GR_CMBX_ZERO, 1, \
470 GR_CMBX_ZERO, 0); \
471 cmb.tex_ccolor = rdp.prim_color; \
472 cmb.tex |= 3; \
473 percent = (float)(lod_frac) / 255.0f; \
474 cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
475} \
476 else \
477{ \
478 T0_ADD_T1 (); \
479 MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC); \
480 MOD_1_COL (rdp.prim_color & 0xFFFFFF00); \
481 MOD_1_FAC (lod_frac & 0xFF); \
482}
483#define PRIM_INTER_T0_USING_SHADEA() \
484 if (!cmb.combine_ext) { \
485 USE_T0 (); \
486 }\
487 else {\
488 rdp.best_tex = 0; \
489 cmb.tex |= 1, \
490 cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
491 cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
492 cmb.t0c_ext_b = GR_CMBX_TMU_CCOLOR, \
493 cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
494 cmb.t0c_ext_c = GR_CMBX_ITALPHA, \
495 cmb.t0c_ext_c_invert = 0, \
496 cmb.t0c_ext_d= GR_CMBX_B, \
497 cmb.t0c_ext_d_invert = 0, \
498 cmb.tex_ccolor = rdp.prim_color, \
499 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
500}
501
502#define A_USE_T0() \
503 cmb.tex |= 1, \
504 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_LOCAL
505#define A_USE_T1() \
506 if (voodoo.num_tmu > 1) { \
507 cmb.tex |= 2, \
508 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
509 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
510 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE; \
511 } \
512 else { \
513 A_USE_T0(); \
514}
515#define A_T0_ADD_T1() \
516 cmb.tex |= 3, \
517 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
518 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
519 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE
520#define A_T1_SUB_T0() \
521 cmb.tex |= 3, \
522 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
523 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \
524 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE
525#define A_T0_SUB_T1() \
526 cmb.tex |= 3, \
527 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
528 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL, \
529 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA
530#define A_T0_MUL_T1() \
531 cmb.tex |= 3, \
532 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
533 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
534 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_LOCAL
535#define A_T0_INTER_T1_USING_T0A() \
536 rdp.best_tex = 0; \
537 cmb.tex |= 3, \
538 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
539 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
540 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA
541#define A_T1_INTER_T0_USING_T0A() \
542 rdp.best_tex = 0; \
543 cmb.tex |= 3, \
544 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
545 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
546 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA
547#define A_T0_INTER_T1_USING_T1A() \
548 rdp.best_tex = 0; \
549 cmb.tex |= 3, \
550 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
551 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
552 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA
553#define A_T0_INTER_T1_USING_FACTOR(factor) \
554 if (factor == 0xFF) { \
555 A_USE_T1(); \
556 } \
557 else if (factor == 0x00) { \
558 A_USE_T0(); \
559}\
560 else { \
561 cmb.tex |= 3, \
562 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
563 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
564 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
565 percent = (float)factor / 255.0f, \
566 cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
567}
568#define A_T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\
569 if (factor == 0xFF) { \
570 A_USE_T0(); \
571 } \
572 else if (factor == 0x00) { \
573 A_USE_T1(); \
574}\
575 else { \
576 cmb.tex |= 3, \
577 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
578 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
579 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
580 percent = (255 - factor) / 255.0f, \
581 cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
582}
583#define A_T0_INTER_T1_USING_SHADEA() \
584 if (!cmb.combine_ext) { \
585 A_T0_INTER_T1_USING_FACTOR (0x7F); \
586 }\
587 else {\
588 rdp.best_tex = 0; \
589 cmb.tex |= 3, \
590 cmb.t1a_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA, \
591 cmb.t1a_ext_a_mode = GR_FUNC_MODE_ZERO, \
592 cmb.t1a_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA, \
593 cmb.t1a_ext_b_mode = GR_FUNC_MODE_ZERO, \
594 cmb.t1a_ext_c = GR_CMBX_ZERO, \
595 cmb.t1a_ext_c_invert = 0, \
596 cmb.t1a_ext_d= GR_CMBX_B, \
597 cmb.t1a_ext_d_invert = 0, \
598 cmb.t0a_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA, \
599 cmb.t0a_ext_a_mode = GR_FUNC_MODE_X, \
600 cmb.t0a_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA, \
601 cmb.t0a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
602 cmb.t0a_ext_c = GR_CMBX_ITALPHA, \
603 cmb.t0a_ext_c_invert = 0, \
604 cmb.t0a_ext_d= GR_CMBX_B, \
605 cmb.t0a_ext_d_invert = 0, \
606 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA; \
607}
608#define A_T1_MUL_PRIMLOD_ADD_T0() \
609 rdp.best_tex = 0; \
610 cmb.tex |= 3, \
611 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
612 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
613 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
614 percent = (float)(lod_frac) / 255.0f, \
615 cmb.dc0_detailmax = cmb.dc1_detailmax = percent
616#define A_T1_MUL_PRIMA_ADD_T0() \
617 rdp.best_tex = 0; \
618 cmb.tex |= 3, \
619 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
620 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
621 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
622 percent = (float)(rdp.prim_color&0xFF) / 255.0f, \
623 cmb.dc0_detailmax = cmb.dc1_detailmax = percent
624#define A_T1_MUL_ENVA_ADD_T0() \
625 rdp.best_tex = 0; \
626 cmb.tex |= 3, \
627 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
628 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
629 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
630 percent = (float)(rdp.env_color&0xFF) / 255.0f, \
631 cmb.dc0_detailmax = cmb.dc1_detailmax = percent
632
633
634// UNIMP - writes to the unimplemented log, if it's enabled
635#ifdef UNIMP_LOG
636#define UNIMPMODE() { \
637 std::ofstream unimp; \
638 unimp.open("unimp.txt", std::ios::app); \
639 unimp << out_buf; \
640 unimp.close(); \
641}
642#else
643#define UNIMPMODE()
644#endif
645
646// Bright red, sets up a bright red combine
647#ifdef BRIGHT_RED
648// Bright red, sets up a bright red combine during the alpha stage
649#define BrightRed() { \
650 CCMB (GR_COMBINE_FUNCTION_LOCAL, \
651 GR_COMBINE_FACTOR_NONE, \
652 GR_COMBINE_LOCAL_CONSTANT, \
653 GR_COMBINE_OTHER_NONE); \
654 ACMB (GR_COMBINE_FUNCTION_LOCAL, \
655 GR_COMBINE_FACTOR_NONE, \
656 GR_COMBINE_LOCAL_CONSTANT, \
657 GR_COMBINE_OTHER_NONE); \
658 cmb.ccolor = 0xFF0000FF; \
659}
660#else
661#define BrightRed()
662#endif
663
664#define CC(color) cmb.ccolor=(color)&0xFFFFFF00
665#define CC_BYTE(byte) { cmb.ccolor=(byte<<8)|(byte<<16)|(byte<<24); }
666#define CC_C1MULC2(color1, color2) { \
667 cmb.ccolor=(wxUint8)( ((color1 & 0xFF000000) >> 24) * (((color2 & 0xFF000000) >> 24) /255.0f) ) << 24 | \
668 (wxUint8)( ((color1 & 0x00FF0000) >> 16) * (((color2 & 0x00FF0000) >> 16) /255.0f) ) << 16 | \
669 (wxUint8)( ((color1 & 0x0000FF00) >> 8) * (((color2 & 0x0000FF00) >> 8) /255.0f) ) << 8 ; \
670}
671#define CC_C1SUBC2(color1, color2) { \
672 cmb.ccolor=(wxUint8)( max(0, (int)((color1 & 0xFF000000) >> 24) - (int)((color2 & 0xFF000000) >> 24)) ) << 24 | \
673 (wxUint8)( max(0, (int)((color1 & 0x00FF0000) >> 16) - (int)((color2 & 0x00FF0000) >> 16)) ) << 16 | \
674 (wxUint8)( max(0, (int)((color1 & 0x0000FF00) >> 8) - (int)((color2 & 0x0000FF00) >> 8)) ) << 8 ; \
675}
676#define CC_COLMULBYTE(color, byte) { \
677 float factor = byte/255.0f; \
678 cmb.ccolor = (wxUint8)( ((color & 0xFF000000) >> 24) * factor ) << 24 | \
679 (wxUint8)( ((color & 0x00FF0000) >> 16) * factor ) << 16 | \
680 (wxUint8)( ((color & 0x0000FF00) >> 8) * factor ) << 8 ; \
681}
682#define CC_PRIM() CC(rdp.prim_color)
683#define CC_ENV() CC(rdp.env_color)
684#define CC_1SUBPRIM() CC((~rdp.prim_color))
685#define CC_1SUBENV() CC((~rdp.env_color))
686#define CC_PRIMA() CC_BYTE((rdp.prim_color&0xFF))
687#define CC_ENVA() CC_BYTE((rdp.env_color&0xFF))
688#define CC_1SUBPRIMA() CC_BYTE(((~rdp.prim_color)&0xFF))
689#define CC_1SUBENVA() CC_BYTE(((~rdp.env_color)&0xFF))
690#define CC_PRIMLOD() CC_BYTE(rdp.prim_lodfrac)
691#define CC_K5() CC_BYTE(rdp.K5)
692#define CC_PRIMMULENV() CC_C1MULC2(rdp.prim_color, rdp.env_color)
693#define CC_PRIMSUBENV() CC_C1SUBC2(rdp.prim_color, rdp.env_color)
694
695#define XSHADE(color, flag) { \
696 rdp.col[0] *= (float)((color & 0xFF000000) >> 24) / 255.0f; \
697 rdp.col[1] *= (float)((color & 0x00FF0000) >> 16) / 255.0f; \
698 rdp.col[2] *= (float)((color & 0x0000FF00) >> 8) / 255.0f; \
699 rdp.cmb_flags |= flag; \
700}
701#define XSHADE1M(color, flag) { \
702 rdp.col[0] *= 1.0f-((float)((color & 0xFF000000) >> 24)/255.0f); \
703 rdp.col[1] *= 1.0f-((float)((color & 0x00FF0000) >> 16)/255.0f); \
704 rdp.col[2] *= 1.0f-((float)((color & 0x0000FF00) >> 8)/255.0f); \
705 rdp.cmb_flags |= flag; \
706}
707#define XSHADEC1MC2(color1, color2, flag) { \
708 rdp.col[0] *= (float)( max(0, (int)((color1 & 0xFF000000) >> 24) - (int)((color2 & 0xFF000000) >> 24)) )/255.0f; \
709 rdp.col[1] *= (float)( max(0, (int)((color1 & 0x00FF0000) >> 16) - (int)((color2 & 0x00FF0000) >> 16)) )/255.0f; \
710 rdp.col[2] *= (float)( max(0, (int)((color1 & 0x0000FF00) >> 8) - (int)((color2 & 0x0000FF00) >> 8)) )/255.0f; \
711 rdp.cmb_flags |= flag; \
712}
713#define XSHADE_BYTE(byte, flag) { \
714 float tmpcol = (float)byte / 255.0f; \
715 rdp.col[0] *= tmpcol; \
716 rdp.col[1] *= tmpcol; \
717 rdp.col[2] *= tmpcol; \
718 rdp.cmb_flags |= flag; \
719}
720#define MULSHADE(color) XSHADE(color, CMB_MULT)
721#define MULSHADE_PRIM() MULSHADE(rdp.prim_color)
722#define MULSHADE_ENV() MULSHADE(rdp.env_color)
723#define MULSHADE_1MPRIM() XSHADE1M(rdp.prim_color, CMB_MULT)
724#define MULSHADE_1MENV() XSHADE1M(rdp.env_color, CMB_MULT)
725#define MULSHADE_PRIMSUBENV() XSHADEC1MC2(rdp.prim_color, rdp.env_color, CMB_MULT)
726#define MULSHADE_ENVSUBPRIM() XSHADEC1MC2(rdp.env_color, rdp.prim_color, CMB_MULT)
727#define MULSHADE_BYTE(byte) XSHADE_BYTE(byte, CMB_MULT)
728#define MULSHADE_PRIMA() MULSHADE_BYTE((rdp.prim_color & 0xFF))
729#define MULSHADE_ENVA() MULSHADE_BYTE((rdp.env_color & 0xFF))
730#define MULSHADE_1MENVA() MULSHADE_BYTE(((~rdp.env_color) & 0xFF))
731#define MULSHADE_PRIMLOD() MULSHADE_BYTE((rdp.prim_lodfrac & 0xFF))
732#define MULSHADE_K5() MULSHADE_BYTE(rdp.K5)
733
734#define SETSHADE(color) XSHADE(color, CMB_SET)
735#define SETSHADE_PRIM() SETSHADE(rdp.prim_color)
736#define SETSHADE_ENV() SETSHADE(rdp.env_color)
737#define SETSHADE_BYTE(byte) XSHADE_BYTE(byte, CMB_SET)
738#define SETSHADE_PRIMA() SETSHADE_BYTE((rdp.prim_color & 0xFF))
739#define SETSHADE_ENVA() SETSHADE_BYTE((rdp.env_color & 0xFF))
740#define SETSHADE_1MPRIMA() SETSHADE_BYTE(((~rdp.prim_color) & 0xFF))
741#define SETSHADE_PRIMLOD() SETSHADE_BYTE((rdp.prim_lodfrac & 0xFF))
742#define SETSHADE_1MPRIMLOD() SETSHADE_BYTE(((~rdp.prim_lodfrac) & 0xFF))
743
744#define SETSHADE_1MPRIM() XSHADE1M(rdp.prim_color, CMB_SET)
745#define SETSHADE_1MENV() XSHADE1M(rdp.env_color, CMB_SET)
746#define SETSHADE_PRIMSUBENV() XSHADEC1MC2(rdp.prim_color, rdp.env_color, CMB_SET)
747#define SETSHADE_ENVSUBPRIM() XSHADEC1MC2(rdp.env_color, rdp.prim_color, CMB_SET)
748#define SETSHADE_SHADE_A() { \
749 rdp.cmb_flags = CMB_SETSHADE_SHADEALPHA; \
750}
751
752#define XSHADEADD(color, flag) { \
753 rdp.coladd[0] *= (float)((color & 0xFF000000) >> 24) / 255.0f; \
754 rdp.coladd[1] *= (float)((color & 0x00FF0000) >> 16) / 255.0f; \
755 rdp.coladd[2] *= (float)((color & 0x0000FF00) >> 8) / 255.0f; \
756 rdp.cmb_flags |= flag; \
757}
758#define XSHADEC1MC2ADD(color1, color2, flag) { \
759 rdp.coladd[0] *= (float)( max(0, (int)((color1 & 0xFF000000) >> 24) - (int)((color2 & 0xFF000000) >> 24)) )/255.0f; \
760 rdp.coladd[1] *= (float)( max(0, (int)((color1 & 0x00FF0000) >> 16) - (int)((color2 & 0x00FF0000) >> 16)) )/255.0f; \
761 rdp.coladd[2] *= (float)( max(0, (int)((color1 & 0x0000FF00) >> 8) - (int)((color2 & 0x0000FF00) >> 8)) )/255.0f; \
762 rdp.cmb_flags |= flag; \
763}
764#define SUBSHADE_PRIM() XSHADEADD(rdp.prim_color, CMB_SUB)
765#define SUBSHADE_ENV() XSHADEADD(rdp.env_color, CMB_SUB)
766#define SUBSHADE_PRIMSUBENV() XSHADEC1MC2ADD(rdp.prim_color, rdp.env_color, CMB_SUB)
767#define ADDSHADE_PRIM() XSHADEADD(rdp.prim_color, CMB_ADD)
768#define ADDSHADE_ENV() XSHADEADD(rdp.env_color, CMB_ADD)
769#define ADDSHADE_PRIMSUBENV() XSHADEC1MC2ADD(rdp.prim_color, rdp.env_color, CMB_ADD)
770#define SUBSHADE_PRIMMULENV() { \
771 rdp.coladd[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) * ((rdp.env_color & 0xFF000000) >> 24) )/255.0f/255.0f; \
772 rdp.coladd[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) * ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f/255.0f; \
773 rdp.coladd[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) * ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f/255.0f; \
774 rdp.cmb_flags |= CMB_SUB; \
775}
776
777#define COLSUBSHADE_PRIM() { \
778 rdp.coladd[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \
779 rdp.coladd[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \
780 rdp.coladd[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \
781 rdp.cmb_flags |= CMB_COL_SUB_OWN; \
782}
783
784#define INTERSHADE_2(color,factor) { \
785 rdp.col_2[0] = (((color) >> 24) & 0xFF) / 255.0f; \
786 rdp.col_2[1] = (((color) >> 16) & 0xFF) / 255.0f; \
787 rdp.col_2[2] = (((color) >> 8) & 0xFF) / 255.0f; \
788 rdp.shade_factor = (factor) / 255.0f; \
789 rdp.cmb_flags_2 = CMB_INTER; \
790}
791
792#define MULSHADE_SHADEA() rdp.cmb_flags |= CMB_MULT_OWN_ALPHA;
793
794#define CA(color) cmb.ccolor|=(color)&0xFF
795#define CA_PRIM() CA(rdp.prim_color)
796#define CA_ENV() CA(rdp.env_color)
797#define CA_INVPRIM() cmb.ccolor|=0xFF-(rdp.prim_color&0xFF)
798#define CA_INVENV() cmb.ccolor|=0xFF-(rdp.env_color&0xFF)
799#define CA_ENV1MPRIM() cmb.ccolor|= (wxUint32)(((rdp.env_color&0xFF)/255.0f) * (((~(rdp.prim_color&0xFF)) & 0xff)/255.0f) * 255.0f);
800#define CA_PRIMENV() cmb.ccolor |= (wxUint32)(((rdp.env_color&0xFF)/255.0f) * ((rdp.prim_color&0xFF)/255.0f) * 255.0f);
801#define CA_PRIMLOD() cmb.ccolor |= rdp.prim_lodfrac;
802#define CA_PRIM_MUL_PRIMLOD() cmb.ccolor |= (int)(((rdp.prim_color&0xFF) * rdp.prim_lodfrac) / 255.0f);
803#define CA_ENV_MUL_PRIMLOD() cmb.ccolor |= (int)(((rdp.env_color&0xFF) * rdp.prim_lodfrac) / 255.0f);
804
805#define XSHADE_A(color, flag) { \
806 rdp.col[3] *= (float)(color & 0xFF) / 255.0f; \
807 rdp.cmb_flags |= flag; \
808}
809#define XSHADE1M_A(color, flag) { \
810 rdp.col[3] *= 1.0f-((float)(color & 0xFF) / 255.0f); \
811 rdp.cmb_flags |= flag; \
812}
813#define XSHADEC1MC2_A(color1, color2, flag) { \
814 rdp.col[3] *= (float)( max(0, (int)(color1 & 0xFF) - (int)(color2 & 0xFF)) ) / 255.0f; \
815 rdp.cmb_flags |= flag; \
816}
817#define MULSHADE_A_PRIM() XSHADE_A(rdp.prim_color, CMB_A_MULT)
818#define MULSHADE_A_1MPRIM() XSHADE1M_A(rdp.prim_color, CMB_A_MULT)
819#define MULSHADE_A_ENV() XSHADE_A(rdp.env_color, CMB_A_MULT)
820#define MULSHADE_A_PRIMSUBENV() XSHADEC1MC2_A(rdp.prim_color, rdp.env_color, CMB_A_MULT)
821#define MULSHADE_A_ENVSUBPRIM() XSHADEC1MC2_A(rdp.env_color, rdp.prim_color, CMB_A_MULT)
822#define SETSHADE_A(color) XSHADE_A(color, CMB_A_SET)
823#define SETSHADE_A_PRIM() SETSHADE_A(rdp.prim_color)
824#define SETSHADE_A_ENV() SETSHADE_A(rdp.env_color)
825#define SETSHADE_A_PRIMSUBENV() XSHADEC1MC2_A(rdp.prim_color, rdp.env_color, CMB_A_SET)
826#define SETSHADE_A_INVENV() XSHADE1M_A(rdp.env_color, CMB_A_SET)
827
828#define XSHADEADD_A(color, flag) { \
829 rdp.coladd[3] *= (float)(color & 0xFF) / 255.0f; \
830 rdp.cmb_flags |= flag; \
831}
832#define SUBSHADE_A_PRIM() XSHADEADD_A(rdp.prim_color, CMB_A_SUB)
833#define SUBSHADE_A_ENV() XSHADEADD_A(rdp.env_color, CMB_A_SUB)
834#define ADDSHADE_A_PRIM() XSHADEADD_A(rdp.prim_color, CMB_A_ADD)
835#define ADDSHADE_A_ENV() XSHADEADD_A(rdp.env_color, CMB_A_ADD)
836
837//****************************************************************
838// Combine Functions
839//****************************************************************
840
841// These are in a somewhat ordered way, using the A constants below. T0 comes before
842// T1 comes before PRIM, ... except for CMB, which always comes at the end, where
843// the CMB comes first in the name. T0 and T1 are always interleaved, because they use the
844// same function.
845// Keep going in alphabetical order, but do not break the order of variables!
846// ex: A*C + B*C -> T0_MUL_PRIM_ADD_ENV_MUL_PRIM,
847// Although prim comes before env, we have already used prim as C, so it must stay as C
848// and would NOT become T0_MUL_PRIM_ADD_PRIM_MUL_ENV
849//
850// New version ordered by:
851// t0
852// prim
853// env
854// shade
855
856static void cc_one ()
857{
858 CCMB (GR_COMBINE_FUNCTION_LOCAL,
859 GR_COMBINE_FACTOR_NONE,
860 GR_COMBINE_LOCAL_CONSTANT,
861 GR_COMBINE_OTHER_NONE);
862 // CC (0xFFFFFF00);
863 CC (0xFFFFFF00);
864}
865
866static void cc_zero ()
867{
868 CCMB (GR_COMBINE_FUNCTION_LOCAL,
869 GR_COMBINE_FACTOR_NONE,
870 GR_COMBINE_LOCAL_CONSTANT,
871 GR_COMBINE_OTHER_NONE);
872 CC (0x00000000);
873}
874
875static void cc_t0 ()
876{
877 if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))
878 {
879 wxUint32 blend_mode = (rdp.othermode_l >> 16);
880 if (blend_mode == 0xa500)
881 {
882 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
883 GR_COMBINE_FACTOR_ONE,
884 GR_COMBINE_LOCAL_CONSTANT,
885 GR_COMBINE_OTHER_TEXTURE);
886 float fog = (rdp.fog_color&0xFF)/255.0f;
887 wxUint32 R = (wxUint32)(((rdp.blend_color>>24)&0xFF)*fog);
888 wxUint32 G = (wxUint32)(((rdp.blend_color>>16)&0xFF)*fog);
889 wxUint32 B = (wxUint32)(((rdp.blend_color>> 8)&0xFF)*fog);
890 CC((R<<24)|(G<<16)|(B<<8));
891 }
892 else if (blend_mode == 0x55f0) //cmem*afog + cfog*1ma
893 {
894 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
895 GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA,
896 GR_COMBINE_LOCAL_NONE,
897 GR_COMBINE_OTHER_CONSTANT);
898 CC(rdp.fog_color);
899 A_USE_T0 ();
900 }
901 else
902 {
903 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
904 GR_COMBINE_FACTOR_ONE,
905 GR_COMBINE_LOCAL_NONE,
906 GR_COMBINE_OTHER_TEXTURE);
907 }
908 }
909 else
910 {
911 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
912 GR_COMBINE_FACTOR_ONE,
913 GR_COMBINE_LOCAL_NONE,
914 GR_COMBINE_OTHER_TEXTURE);
915 }
916 USE_T0 ();
917}
918
919static void cc_t0a ()
920{
921 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
922 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
923 GR_COMBINE_LOCAL_NONE,
924 GR_COMBINE_OTHER_CONSTANT);
925 USE_T0 ();
926 A_USE_T0 ();
927 CC (0xFFFFFF00);
928}
929
930static void cc_t1 () //Added by Gonetz
931{
932 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
933 GR_COMBINE_FACTOR_ONE,
934 GR_COMBINE_LOCAL_NONE,
935 GR_COMBINE_OTHER_TEXTURE);
936 USE_T1 ();
937}
938
939static void cc_t0_mul_t1 ()
940{
941 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
942 GR_COMBINE_FACTOR_ONE,
943 GR_COMBINE_LOCAL_NONE,
944 GR_COMBINE_OTHER_TEXTURE);
945 T0_MUL_T1 ();
946}
947
948static void cc_t0_mul_t1_add_t0 () //Added by Gonetz
949{
950 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
951 GR_COMBINE_FACTOR_ONE,
952 GR_COMBINE_LOCAL_NONE,
953 GR_COMBINE_OTHER_TEXTURE);
954 T0_MUL_T1_ADD_T0 ();
955}
956
957/*
958static void cc_t1_inter__env_inter_t0_using_k5__using_t1a ()
959{
960CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
961GR_COMBINE_FACTOR_ONE,
962GR_COMBINE_LOCAL_NONE,
963GR_COMBINE_OTHER_TEXTURE);
964wxUint32 col1 = (rdp.K5<<24) | (rdp.K5<<16) | (rdp.K5<<8);
965MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
966MOD_0_COL (rdp.env_color & 0xFFFFFF00);
967MOD_0_COL1 (col1 & 0xFFFFFF00);
968rdp.best_tex = 0;
969cmb.tex |= 3;
970cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;
971cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL;
972cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND;
973cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA;
974}
975*/
976
977static void cc_t1_inter_t0_using_env ()
978{
979 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
980 GR_COMBINE_FACTOR_ONE,
981 GR_COMBINE_LOCAL_NONE,
982 GR_COMBINE_OTHER_TEXTURE);
983 T1_INTER_T0_USING_ENV ();
984}
985
986static void cc_prim ()
987{
988 CCMB (GR_COMBINE_FUNCTION_LOCAL,
989 GR_COMBINE_FACTOR_NONE,
990 GR_COMBINE_LOCAL_CONSTANT,
991 GR_COMBINE_OTHER_NONE);
992 CC_PRIM ();
993}
994
995static void cc_env ()
996{
997 CCMB (GR_COMBINE_FUNCTION_LOCAL,
998 GR_COMBINE_FACTOR_NONE,
999 GR_COMBINE_LOCAL_CONSTANT,
1000 GR_COMBINE_OTHER_NONE);
1001 CC_ENV ();
1002}
1003
1004static void cc_scale ()
1005{
1006 CCMB (GR_COMBINE_FUNCTION_LOCAL,
1007 GR_COMBINE_FACTOR_NONE,
1008 GR_COMBINE_LOCAL_CONSTANT,
1009 GR_COMBINE_OTHER_NONE);
1010 CC (rdp.SCALE);
1011}
1012
1013static void cc_shade ()
1014{
1015 CCMB (GR_COMBINE_FUNCTION_LOCAL,
1016 GR_COMBINE_FACTOR_NONE,
1017 GR_COMBINE_LOCAL_ITERATED,
1018 GR_COMBINE_OTHER_NONE);
1019}
1020
1021static void cc_one_mul_shade ()
1022{
1023 if ((settings.hacks&hack_Knockout) && (rdp.aTBuffTex[0] || rdp.aTBuffTex[1] || rdp.cur_image)) //hack for boxer shadow
1024 {
1025 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1026 GR_COMBINE_FACTOR_LOCAL,
1027 GR_COMBINE_LOCAL_CONSTANT,
1028 GR_COMBINE_OTHER_TEXTURE);
1029 CC (0x20202000);
1030 USE_T0 ();
1031 }
1032 else
1033 {
1034 cc_shade ();
1035 }
1036}
1037
1038static void cc_shadea ()
1039{
1040 CCMB (GR_COMBINE_FUNCTION_LOCAL_ALPHA,
1041 GR_COMBINE_FACTOR_NONE,
1042 GR_COMBINE_LOCAL_ITERATED,
1043 GR_COMBINE_OTHER_NONE);
1044}
1045
1046static void cc_t0_mul_prim ()
1047{
1048 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1049 GR_COMBINE_FACTOR_LOCAL,
1050 GR_COMBINE_LOCAL_CONSTANT,
1051 GR_COMBINE_OTHER_TEXTURE);
1052 CC_PRIM ();
1053 USE_T0 ();
1054}
1055
1056static void cc_t0_mul_prima ()
1057{
1058 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1059 GR_COMBINE_FACTOR_LOCAL,
1060 GR_COMBINE_LOCAL_CONSTANT,
1061 GR_COMBINE_OTHER_TEXTURE);
1062 CC_PRIMA ();
1063 USE_T0 ();
1064}
1065
1066static void cc_t1_mul_prim ()
1067{
1068 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1069 GR_COMBINE_FACTOR_LOCAL,
1070 GR_COMBINE_LOCAL_CONSTANT,
1071 GR_COMBINE_OTHER_TEXTURE);
1072 CC_PRIM ();
1073 if ((rdp.cycle1 & 0xFFFF) == (rdp.cycle2 & 0xFFFF)) // 1 cycle, use t0
1074 {
1075 USE_T0 ();
1076 }
1077 else
1078 {
1079 USE_T1 ();
1080 }
1081}
1082
1083static void cc_t0a_mul_prim ()
1084{
1085 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1086 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
1087 GR_COMBINE_LOCAL_NONE,
1088 GR_COMBINE_OTHER_CONSTANT);
1089 CC_PRIM ();
1090 A_USE_T0 ();
1091}
1092
1093//Added by Gonetz
1094static void cc__t1_inter_t0_using_enva__mul_prim ()
1095{
1096 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1097 GR_COMBINE_FACTOR_LOCAL,
1098 GR_COMBINE_LOCAL_CONSTANT,
1099 GR_COMBINE_OTHER_TEXTURE);
1100 CC_PRIM ();
1101 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
1102 T1_INTER_T0_USING_FACTOR (factor);
1103}
1104
1105static void cc__t0_inter_one_using_t1__mul_prim ()
1106{
1107 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1108 GR_COMBINE_FACTOR_LOCAL,
1109 GR_COMBINE_LOCAL_CONSTANT,
1110 GR_COMBINE_OTHER_TEXTURE);
1111 CC_PRIM ();
1112 rdp.best_tex = 0;
1113 cmb.tex |= 3;
1114 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;
1115 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
1116 cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL;
1117}
1118
1119static void cc__t0_inter_one_using_primlod__mul_prim ()
1120{
1121 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1122 GR_COMBINE_FACTOR_LOCAL,
1123 GR_COMBINE_LOCAL_CONSTANT,
1124 GR_COMBINE_OTHER_TEXTURE);
1125 CC_PRIM ();
1126 if (cmb.combine_ext)
1127 {
1128 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1129 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
1130 GR_CMBX_DETAIL_FACTOR, 0,
1131 GR_CMBX_B, 0);
1132 cmb.tex |= 1;
1133 percent = (float)lod_frac / 255.0f;
1134 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
1135 }
1136 else
1137 {
1138 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1139 MOD_0_COL (0xFFFFFF00);
1140 MOD_0_FAC (lod_frac);
1141 USE_T0 ();
1142 }
1143}
1144
1145static void cc__t1_inter_one_using_env__mul_prim ()
1146{
1147 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1148 GR_COMBINE_FACTOR_LOCAL,
1149 GR_COMBINE_LOCAL_CONSTANT,
1150 GR_COMBINE_OTHER_TEXTURE);
1151 CC_PRIM ();
1152 if (cmb.combine_ext)
1153 {
1154 T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1155 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1156 GR_CMBX_LOCAL_TEXTURE_RGB, 1,
1157 GR_CMBX_B, 0);
1158 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1159 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1160 GR_CMBX_ZERO, 1,
1161 GR_CMBX_ZERO, 0);
1162 cmb.tex |= 2;
1163 cmb.tex_ccolor = rdp.env_color;
1164 }
1165 else
1166 {
1167 USE_T1 ();
1168 }
1169}
1170
1171static void cc__t1_inter_one_using_enva__mul_t0 ()
1172{
1173 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1174 GR_COMBINE_FACTOR_ONE,
1175 GR_COMBINE_LOCAL_NONE,
1176 GR_COMBINE_OTHER_TEXTURE);
1177 if (cmb.combine_ext)
1178 {
1179 T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1180 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1181 GR_CMBX_TMU_CALPHA, 0,
1182 GR_CMBX_B, 0);
1183 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1184 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1185 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1186 GR_CMBX_ZERO, 0);
1187 cmb.tex |= 3;
1188 cmb.tex_ccolor = 0xFFFFFF00 | (rdp.env_color&0xFF);
1189 }
1190 else
1191 {
1192 if ((rdp.env_color&0xFF) == 0xFF)
1193 {
1194 USE_T0 ();
1195 }
1196 else
1197 {
1198 T0_MUL_T1 ();
1199 }
1200 }
1201}
1202
1203//Added by Gonetz
1204static void cc_prim_mul_prim ()
1205{
1206 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1207 GR_COMBINE_FACTOR_LOCAL,
1208 GR_COMBINE_LOCAL_ITERATED,
1209 GR_COMBINE_OTHER_CONSTANT);
1210 CC_PRIM ();
1211 SETSHADE_PRIM ();
1212}
1213
1214static void cc_prim_mul_prima ()
1215{
1216 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1217 GR_COMBINE_FACTOR_LOCAL,
1218 GR_COMBINE_LOCAL_CONSTANT,
1219 GR_COMBINE_OTHER_ITERATED);
1220 CC_PRIM ();
1221 SETSHADE_PRIMA ();
1222}
1223
1224static void cc_t1_mul_prima ()
1225{
1226 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1227 GR_COMBINE_FACTOR_LOCAL,
1228 GR_COMBINE_LOCAL_CONSTANT,
1229 GR_COMBINE_OTHER_TEXTURE);
1230 CC_PRIMA ();
1231 USE_T1 ();
1232}
1233
1234static void cc_t1_mul_enva ()
1235{
1236 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1237 GR_COMBINE_FACTOR_LOCAL,
1238 GR_COMBINE_LOCAL_CONSTANT,
1239 GR_COMBINE_OTHER_TEXTURE);
1240 CC_ENVA ();
1241 USE_T1 ();
1242}
1243
1244static void cc_t0_mul_env ()
1245{
1246 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1247 GR_COMBINE_FACTOR_LOCAL,
1248 GR_COMBINE_LOCAL_CONSTANT,
1249 GR_COMBINE_OTHER_TEXTURE);
1250 CC_ENV ();
1251 USE_T0 ();
1252}
1253
1254static void cc_t1_mul_env ()
1255{
1256 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1257 GR_COMBINE_FACTOR_LOCAL,
1258 GR_COMBINE_LOCAL_CONSTANT,
1259 GR_COMBINE_OTHER_TEXTURE);
1260 CC_ENV ();
1261 USE_T1 ();
1262}
1263
1264//Added by Gonetz
1265static void cc_t0_mul_enva ()
1266{
1267 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1268 GR_COMBINE_FACTOR_LOCAL,
1269 GR_COMBINE_LOCAL_CONSTANT,
1270 GR_COMBINE_OTHER_TEXTURE);
1271 CC_ENVA ();
1272 USE_T0 ();
1273}
1274
1275static void cc_t0_mul_scale ()
1276{
1277 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1278 GR_COMBINE_FACTOR_LOCAL,
1279 GR_COMBINE_LOCAL_CONSTANT,
1280 GR_COMBINE_OTHER_TEXTURE);
1281 CC (rdp.SCALE);
1282 USE_T0 ();
1283}
1284
1285static void cc_t0_mul_enva_add_prim ()
1286{
1287 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1288 GR_COMBINE_FACTOR_TEXTURE_RGB,
1289 GR_COMBINE_LOCAL_ITERATED,
1290 GR_COMBINE_OTHER_CONSTANT);
1291 SETSHADE_PRIM ();
1292 CC_ENVA ();
1293 USE_T0 ();
1294}
1295
1296static void cc_t0_mul_shade ()
1297{
1298 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1299 GR_COMBINE_FACTOR_LOCAL,
1300 GR_COMBINE_LOCAL_ITERATED,
1301 GR_COMBINE_OTHER_TEXTURE);
1302 USE_T0 ();
1303}
1304
1305static void cc_f1_sky ()
1306{
1307 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
1308 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
1309 GR_COMBINE_LOCAL_ITERATED,
1310 GR_COMBINE_OTHER_CONSTANT);
1311 MULSHADE_SHADEA ();
1312 MULSHADE_ENVSUBPRIM ();
1313 ADDSHADE_PRIM();
1314 CC(0xFFFFFFFF);
1315}
1316
1317static void cc_t0_mul_shadea ()
1318{
1319 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1320 GR_COMBINE_FACTOR_LOCAL,
1321 GR_COMBINE_LOCAL_ITERATED,
1322 GR_COMBINE_OTHER_TEXTURE);
1323 SETSHADE_SHADE_A ();
1324 USE_T0 ();
1325}
1326
1327static void cc_t0_mul_k5 ()
1328{
1329 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1330 GR_COMBINE_FACTOR_LOCAL,
1331 GR_COMBINE_LOCAL_CONSTANT,
1332 GR_COMBINE_OTHER_TEXTURE);
1333 CC_K5 ();
1334 USE_T0 ();
1335}
1336
1337static void cc_t1_mul_shade ()
1338{
1339 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1340 GR_COMBINE_FACTOR_LOCAL,
1341 GR_COMBINE_LOCAL_ITERATED,
1342 GR_COMBINE_OTHER_TEXTURE);
1343 USE_T1 ();
1344}
1345
1346//Added by Gonetz
1347static void cc__t0_add_t1__mul_shade ()
1348{
1349 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1350 GR_COMBINE_FACTOR_LOCAL,
1351 GR_COMBINE_LOCAL_ITERATED,
1352 GR_COMBINE_OTHER_TEXTURE);
1353 T0_ADD_T1 ();
1354}
1355
1356static void cc__t0_mul_shade__add__t1_mul_shade ()
1357{
1358 //combiner is used in Spiderman. It seems that t0 is used instead of t1
1359 if (cmb.combine_ext)
1360 {
1361 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1362 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1363 GR_CMBX_ITRGB, 0,
1364 GR_CMBX_ZERO, 0);
1365 cmb.tex |= 1;
1366 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
1367 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1368 GR_CMBX_ZERO, 1,
1369 GR_CMBX_B, 0);
1370 }
1371 else
1372 {
1373 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1374 GR_COMBINE_FACTOR_LOCAL,
1375 GR_COMBINE_LOCAL_ITERATED,
1376 GR_COMBINE_OTHER_TEXTURE);
1377 USE_T0 ();
1378 }
1379}
1380
1381static void cc__t0_mul_prim__inter_env_using_enva ()
1382{
1383 wxUint32 enva = rdp.env_color&0xFF;
1384 if (enva == 0xFF)
1385 cc_env ();
1386 else if (enva == 0)
1387 cc_t0_mul_prim ();
1388 else if (cmb.combine_ext)
1389 {
1390 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1391 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
1392 GR_CMBX_TMU_CCOLOR, 0,
1393 GR_CMBX_ZERO, 0);
1394 cmb.tex |= 1;
1395 cmb.tex_ccolor = rdp.prim_color;
1396 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
1397 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1398 GR_CMBX_CONSTANT_COLOR, 0,
1399 GR_CMBX_B, 0);
1400 SETSHADE_ENV();
1401 CC_ENVA();
1402 }
1403 else
1404 {
1405 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1406 GR_COMBINE_FACTOR_LOCAL,
1407 GR_COMBINE_LOCAL_ITERATED,
1408 GR_COMBINE_OTHER_TEXTURE);
1409 SETSHADE_PRIM();
1410 INTERSHADE_2 (rdp.env_color & 0xFFFFFF00, rdp.env_color & 0xFF);
1411 USE_T0 ();
1412 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1413 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
1414 MOD_0_FAC (rdp.env_color & 0xFF);
1415 }
1416}
1417
1418
1419static void cc__t1_inter_t0_using_t1__mul_shade ()
1420{
1421 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1422 GR_COMBINE_FACTOR_LOCAL,
1423 GR_COMBINE_LOCAL_ITERATED,
1424 GR_COMBINE_OTHER_TEXTURE);
1425 if (cmb.combine_ext)
1426 {
1427 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1428 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1429 GR_CMBX_ZERO, 0,
1430 GR_CMBX_B, 0);
1431 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1432 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1433 GR_CMBX_B, 0,
1434 GR_CMBX_B, 0);
1435 cmb.tex |= 3;
1436 }
1437 else
1438 {
1439 T0_INTER_T1_USING_FACTOR (0x7F);
1440 }
1441}
1442
1443//Added by Gonetz
1444static void cc__t1_inter_t0_using_enva__mul_shade ()
1445{
1446 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1447 GR_COMBINE_FACTOR_LOCAL,
1448 GR_COMBINE_LOCAL_ITERATED,
1449 GR_COMBINE_OTHER_TEXTURE);
1450 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
1451 T1_INTER_T0_USING_FACTOR (factor);
1452}
1453
1454//Added by Gonetz
1455static void cc__t1_inter_t0_using_shadea__mul_shade ()
1456{
1457 if (!cmb.combine_ext) {
1458 cc_t0_mul_shade ();
1459 return;
1460 }
1461 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1462 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
1463 GR_CMBX_ITRGB, 0,
1464 GR_CMBX_ZERO, 0);
1465 T1_INTER_T0_USING_SHADEA ();
1466}
1467
1468//Added by Gonetz
1469static void cc__t0_inter_one_using_prim__mul_shade ()
1470{
1471 // (1-t0)*prim+t0, (cmb-0)*shade+0
1472 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1473 GR_COMBINE_FACTOR_LOCAL,
1474 GR_COMBINE_LOCAL_ITERATED,
1475 GR_COMBINE_OTHER_TEXTURE);
1476 if (cmb.combine_ext)
1477 {
1478 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
1479 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ONE_MINUS_X,
1480 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1481 GR_CMBX_B, 0);
1482 cmb.tex |= 1;
1483 cmb.tex_ccolor = rdp.prim_color;
1484 }
1485 else
1486 {
1487 USE_T0 ();
1488 MOD_0 (TMOD_TEX_INTER_COL_USING_COL1);
1489 MOD_0_COL (0xFFFFFF00);
1490 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
1491 }
1492}
1493
1494static void cc__t0_inter_one_using_primlod__mul_shade ()
1495{
1496 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1497 GR_COMBINE_FACTOR_LOCAL,
1498 GR_COMBINE_LOCAL_ITERATED,
1499 GR_COMBINE_OTHER_TEXTURE);
1500 if (cmb.combine_ext)
1501 {
1502 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1503 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
1504 GR_CMBX_DETAIL_FACTOR, 0,
1505 GR_CMBX_B, 0);
1506 cmb.tex |= 1;
1507 percent = (float)lod_frac / 255.0f;
1508 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
1509 }
1510 else
1511 {
1512 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1513 MOD_0_COL (0xFFFFFF00);
1514 MOD_0_FAC (lod_frac);
1515 USE_T0 ();
1516 }
1517}
1518
1519//Added by Gonetz
1520static void cc__t0_inter_env_using_enva__mul_shade ()
1521{
1522 // (env-t0)*env_a+t0, (cmb-0)*shade+0
1523 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1524 GR_COMBINE_FACTOR_LOCAL,
1525 GR_COMBINE_LOCAL_ITERATED,
1526 GR_COMBINE_OTHER_TEXTURE);
1527 if (cmb.combine_ext)
1528 {
1529 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1530 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1531 GR_CMBX_TMU_CALPHA, 0,
1532 GR_CMBX_B, 0);
1533 cmb.tex |= 1;
1534 cmb.tex_ccolor = rdp.env_color;
1535 }
1536 else
1537 {
1538 USE_T0 ();
1539 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1540 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
1541 MOD_0_FAC (rdp.env_color&0xFF);
1542 }
1543}
1544
1545//Added by Gonetz
1546static void cc__t0_inter_env_using_shadea__mul_shade ()
1547{
1548 // (env-t0)*shade_a+t0, (cmb-0)*shade+0
1549 if (cmb.combine_ext)
1550 {
1551 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1552 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1553 GR_CMBX_ITALPHA, 0,
1554 GR_CMBX_B, 0);
1555 cmb.tex |= 1;
1556 cmb.tex_ccolor = rdp.env_color;
1557 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1558 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
1559 GR_CMBX_ITRGB, 0,
1560 GR_CMBX_ZERO, 0);
1561 }
1562 else
1563 {
1564 cc_t0_mul_shade ();
1565 }
1566}
1567
1568static void cc__t0_mul_prim_add_env__mul_shade ()
1569{
1570 if (cmb.combine_ext)
1571 {
1572 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1573 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1574 GR_CMBX_TMU_CCOLOR, 0,
1575 GR_CMBX_ZERO, 0);
1576 cmb.tex |= 1;
1577 cmb.tex_ccolor = rdp.prim_color;
1578 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1579 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
1580 GR_CMBX_ITRGB, 0,
1581 GR_CMBX_ZERO, 0);
1582 CC_ENV ();
1583 }
1584 else
1585 {
1586 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1587 GR_COMBINE_FACTOR_LOCAL,
1588 GR_COMBINE_LOCAL_ITERATED,
1589 GR_COMBINE_OTHER_TEXTURE);
1590 MOD_0 (TMOD_TEX_SCALE_COL_ADD_COL);
1591 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1592 MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);
1593 USE_T0 ();
1594 }
1595}
1596
1597static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade ()
1598{
1599 if (cmb.combine_ext)
1600 {
1601 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1602 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1603 GR_CMBX_ZERO, 0,
1604 GR_CMBX_B, 0);
1605 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1606 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1607 GR_CMBX_DETAIL_FACTOR, 0,
1608 GR_CMBX_ZERO, 0);
1609 cmb.tex |= 3;
1610 percent = (float)lod_frac / 255.0f;
1611 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
1612 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1613 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
1614 GR_CMBX_ITRGB, 0,
1615 GR_CMBX_ZERO, 0);
1616 CC_PRIM ();
1617 }
1618 else
1619 {
1620 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1621 GR_COMBINE_FACTOR_LOCAL,
1622 GR_COMBINE_LOCAL_ITERATED,
1623 GR_COMBINE_OTHER_TEXTURE);
1624 T0_INTER_T1_USING_FACTOR (lod_frac);
1625 }
1626}
1627
1628static void cc__t1_sub_prim_mul_t0__mul_shade ()
1629{
1630 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1631 GR_COMBINE_FACTOR_LOCAL,
1632 GR_COMBINE_LOCAL_ITERATED,
1633 GR_COMBINE_OTHER_TEXTURE);
1634 if (cmb.combine_ext)
1635 {
1636 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1637 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1638 GR_CMBX_ZERO, 0,
1639 GR_CMBX_B, 0);
1640 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1641 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
1642 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1643 GR_CMBX_ZERO, 0);
1644 cmb.tex_ccolor = rdp.prim_color;
1645 cmb.tex |= 3;
1646 }
1647 else
1648 {
1649 T0_MUL_T1 ();
1650 }
1651}
1652
1653static void cc__t1_sub_t0_mul_t0_add_shade__mul_shade () //Aded by Gonetz
1654{
1655 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1656 GR_COMBINE_FACTOR_ONE,
1657 GR_COMBINE_LOCAL_ITERATED,
1658 GR_COMBINE_OTHER_TEXTURE);
1659 if (cmb.combine_ext)
1660 {
1661 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1662 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1663 GR_CMBX_ZERO, 0,
1664 GR_CMBX_B, 0);
1665 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1666 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1667 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1668 GR_CMBX_ITRGB, 0);
1669 cmb.tex |= 3;
1670 }
1671 else
1672 {
1673 T1_SUB_T0_MUL_T0 ();
1674 }
1675}
1676
1677static void cc__one_sub_shade_mul_t0_add_shade__mul_shade ()
1678{
1679 if (cmb.combine_ext)
1680 {
1681 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1682 GR_CMBX_ITRGB, GR_FUNC_MODE_ONE_MINUS_X,
1683 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1684 GR_CMBX_B, 0);
1685 cmb.tex |= 1;
1686 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1687 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
1688 GR_CMBX_ITRGB, 0,
1689 GR_CMBX_ZERO, 0);
1690 }
1691 else
1692 {
1693 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1694 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
1695 GR_COMBINE_LOCAL_ITERATED,
1696 GR_COMBINE_OTHER_TEXTURE);
1697 USE_T0 ();
1698 }
1699}
1700
1701static void cc__t0_sub_prim_mul_t1_add_t1__mul_shade ()
1702{
1703 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1704 GR_COMBINE_FACTOR_LOCAL,
1705 GR_COMBINE_LOCAL_ITERATED,
1706 GR_COMBINE_OTHER_TEXTURE);
1707 if (rdp.prim_color & 0xFFFFFF00)
1708 {
1709 MOD_0 (TMOD_TEX_SUB_COL);
1710 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1711 }
1712 if (cmb.combine_ext)
1713 {
1714 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1715 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1716 GR_CMBX_ZERO, 0,
1717 GR_CMBX_B, 0);
1718 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1719 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1720 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1721 GR_CMBX_B, 0);
1722 cmb.tex |= 3;
1723 }
1724 else
1725 {
1726 T0_MUL_T1 ();
1727 }
1728}
1729
1730static void cc__t1_sub_env_mul_t0_add_t0__mul_shade ()
1731{
1732 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1733 GR_COMBINE_FACTOR_LOCAL,
1734 GR_COMBINE_LOCAL_ITERATED,
1735 GR_COMBINE_OTHER_TEXTURE);
1736 if (cmb.combine_ext)
1737 {
1738 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1739 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
1740 GR_CMBX_ZERO, 1,
1741 GR_CMBX_ZERO, 0);
1742 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1743 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1744 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1745 GR_CMBX_B, 0);
1746 cmb.tex_ccolor = rdp.env_color;
1747 cmb.tex |= 3;
1748 }
1749 else
1750 {
1751 MOD_1 (TMOD_TEX_SUB_COL);
1752 MOD_1_COL (rdp.env_color & 0xFFFFFF00);
1753 T0_MUL_T1_ADD_T0 ();
1754 }
1755}
1756
1757static void cc__t0_mul_prima_add_prim_mul__shade ()
1758{
1759 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1760 GR_COMBINE_FACTOR_LOCAL,
1761 GR_COMBINE_LOCAL_ITERATED,
1762 GR_COMBINE_OTHER_TEXTURE);
1763 if (cmb.combine_ext)
1764 {
1765 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1766 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
1767 GR_CMBX_TMU_CALPHA, 0,
1768 GR_CMBX_B, 0);
1769 cmb.tex_ccolor = rdp.prim_color;
1770 cmb.tex |= 1;
1771 }
1772 else
1773 {
1774 MOD_0 (TMOD_TEX_SCALE_FAC_ADD_COL);
1775 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1776 MOD_0_FAC (rdp.prim_color & 0xFF);
1777 USE_T0 ();
1778 }
1779}
1780
1781static void cc__t0_inter_prim_using_prima__inter_env_using_enva ()
1782{
1783 if (cmb.combine_ext)
1784 {
1785 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1786 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1787 GR_CMBX_TMU_CALPHA, 0,
1788 GR_CMBX_B, 0);
1789 cmb.tex_ccolor = rdp.prim_color;
1790 cmb.tex |= 1;
1791 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
1792 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1793 GR_CMBX_CONSTANT_COLOR, 0,
1794 GR_CMBX_B, 0);
1795 CC_ENVA ();
1796 SETSHADE_ENV ();
1797 }
1798 else
1799 {
1800 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1801 GR_COMBINE_FACTOR_TEXTURE_RGB,
1802 GR_COMBINE_LOCAL_ITERATED,
1803 GR_COMBINE_OTHER_CONSTANT);
1804 CC_1SUBENVA ();
1805 SETSHADE_ENV ();
1806 SETSHADE_ENVA ();
1807 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1808 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1809 MOD_0_FAC (rdp.prim_color & 0xFF);
1810 USE_T0 ();
1811 }
1812}
1813
1814static void cc_prim_inter_t1_mul_shade_using_texa ()
1815{
1816 if (cmb.combine_ext)
1817 {
1818 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1819 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1820 GR_CMBX_ZERO, 0,
1821 GR_CMBX_B, 0);
1822 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1823 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1824 GR_CMBX_ITRGB, 0,
1825 GR_CMBX_ZERO, 0);
1826 cmb.tex |= 3;
1827 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1828 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
1829 GR_CMBX_TEXTURE_ALPHA, 0,
1830 GR_CMBX_B, 0);
1831 }
1832 else
1833 {
1834 cc_t1_mul_shade ();
1835 }
1836}
1837
1838static void cc__prim_inter_t0_using_t0a__mul_shade ()
1839{
1840 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1841 GR_COMBINE_FACTOR_LOCAL,
1842 GR_COMBINE_LOCAL_ITERATED,
1843 GR_COMBINE_OTHER_TEXTURE);
1844 if (cmb.combine_ext)
1845 {
1846 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1847 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
1848 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
1849 GR_CMBX_B, 0);
1850 cmb.tex_ccolor = rdp.prim_color;
1851 cmb.tex |= 1;
1852 }
1853 else
1854 {
1855 MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);
1856 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1857 USE_T0 ();
1858 }
1859}
1860
1861static void cc__prim_inter_t0_using_t0a__inter_env_using_enva ()
1862{
1863 if (cmb.combine_ext)
1864 {
1865 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1866 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
1867 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
1868 GR_CMBX_B, 0);
1869 cmb.tex_ccolor = rdp.prim_color;
1870 cmb.tex |= 1;
1871 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
1872 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1873 GR_CMBX_CONSTANT_COLOR, 0,
1874 GR_CMBX_B, 0);
1875 CC_ENVA ();
1876 SETSHADE_ENV ();
1877 }
1878 else
1879 {
1880 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1881 GR_COMBINE_FACTOR_TEXTURE_RGB,
1882 GR_COMBINE_LOCAL_ITERATED,
1883 GR_COMBINE_OTHER_CONSTANT);
1884 CC_1SUBENVA ();
1885 SETSHADE_ENV ();
1886 SETSHADE_ENVA ();
1887 MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);
1888 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1889 USE_T0 ();
1890 }
1891}
1892
1893// ** A*B **
1894
1895static void cc__prim_inter_t0_using_shadea__mul_shade ()
1896{
1897 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1898 GR_COMBINE_FACTOR_LOCAL,
1899 GR_COMBINE_LOCAL_ITERATED,
1900 GR_COMBINE_OTHER_TEXTURE);
1901 PRIM_INTER_T0_USING_SHADEA ();
1902}
1903
1904static void cc_t0_sub_shade_mul_shadea_add_shade ();
1905static void cc__shade_inter_t0_using_shadea__mul_shade ()
1906{
1907 if (cmb.combine_ext)
1908 {
1909 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1910 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
1911 GR_CMBX_ITALPHA, 0,
1912 GR_CMBX_B, 0);
1913 cmb.tex |= 1;
1914 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1915 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
1916 GR_CMBX_ITRGB, 0,
1917 GR_CMBX_ZERO, 0);
1918 }
1919 else
1920 {
1921 cc_t0_sub_shade_mul_shadea_add_shade ();
1922 }
1923}
1924
1925static void cc__prim_inter_env_using_enva__mul_shade ()
1926{
1927 const float ea = ((float)(rdp.env_color&0xFF)) / 255.0f;
1928 const float ea_i = 1.0f - ea;
1929 wxUint32 pr = (rdp.prim_color >> 24)&0xFF;
1930 wxUint32 pg = (rdp.prim_color >> 16)&0xFF;
1931 wxUint32 pb = (rdp.prim_color >> 8)&0xFF;
1932 wxUint32 er = (rdp.env_color >> 24)&0xFF;
1933 wxUint32 eg = (rdp.env_color >> 16)&0xFF;
1934 wxUint32 eb = (rdp.env_color >> 8)&0xFF;
1935 wxUint32 r = min(255, (wxUint32)(er*ea + pr*ea_i));
1936 wxUint32 g = min(255, (wxUint32)(eg*ea + pg*ea_i));
1937 wxUint32 b = min(255, (wxUint32)(eb*ea + pb*ea_i));
1938 wxUint32 col = (r << 24) | (g << 16) | (b << 8) | 0xFF;
1939 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1940 GR_COMBINE_FACTOR_LOCAL,
1941 GR_COMBINE_LOCAL_ITERATED,
1942 GR_COMBINE_OTHER_CONSTANT);
1943 CC (col);
1944}
1945
1946//Added by Gonetz
1947static void cc_prim_mul_env ()
1948{
1949 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1950 GR_COMBINE_FACTOR_LOCAL,
1951 GR_COMBINE_LOCAL_ITERATED,
1952 GR_COMBINE_OTHER_CONSTANT);
1953 CC_PRIM ();
1954 SETSHADE_ENV ();
1955}
1956
1957static void cc_prim_mul_shade ()
1958{
1959 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1960 GR_COMBINE_FACTOR_LOCAL,
1961 GR_COMBINE_LOCAL_ITERATED,
1962 GR_COMBINE_OTHER_CONSTANT);
1963 CC_PRIM ();
1964}
1965
1966static void cc_prim_mul_shadea ()
1967{
1968 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1969 GR_COMBINE_FACTOR_LOCAL,
1970 GR_COMBINE_LOCAL_ITERATED,
1971 GR_COMBINE_OTHER_CONSTANT);
1972 SETSHADE_SHADE_A ();
1973 CC_PRIM ();
1974}
1975
1976static void cc_env_mul_shade ()
1977{
1978 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1979 GR_COMBINE_FACTOR_LOCAL,
1980 GR_COMBINE_LOCAL_ITERATED,
1981 GR_COMBINE_OTHER_CONSTANT);
1982 CC_ENV ();
1983}
1984
1985static void cc_env_mul_enva ()
1986{
1987 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1988 GR_COMBINE_FACTOR_OTHER_ALPHA,
1989 GR_COMBINE_LOCAL_NONE,
1990 GR_COMBINE_OTHER_CONSTANT);
1991 CC_ENV ();
1992 CA_ENV ();
1993}
1994
1995static void cc_scale_mul_shade ()
1996{
1997 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1998 GR_COMBINE_FACTOR_LOCAL,
1999 GR_COMBINE_LOCAL_ITERATED,
2000 GR_COMBINE_OTHER_CONSTANT);
2001 CC (rdp.SCALE);
2002}
2003
2004// ** A+B **
2005
2006static void cc_t0_add_prim () //Aded by Gonetz
2007{
2008 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2009 GR_COMBINE_FACTOR_ONE,
2010 GR_COMBINE_LOCAL_CONSTANT,
2011 GR_COMBINE_OTHER_TEXTURE);
2012 CC_PRIM ();
2013 USE_T0 ();
2014}
2015
2016static void cc__t0_mul_t1__add_prim () //Aded by Gonetz
2017{
2018 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2019 GR_COMBINE_FACTOR_ONE,
2020 GR_COMBINE_LOCAL_CONSTANT,
2021 GR_COMBINE_OTHER_TEXTURE);
2022 CC_PRIM ();
2023 T0_MUL_T1 ();
2024}
2025
2026static void cc_t0_add_env ()
2027{
2028 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2029 GR_COMBINE_FACTOR_ONE,
2030 GR_COMBINE_LOCAL_CONSTANT,
2031 GR_COMBINE_OTHER_TEXTURE);
2032 CC_ENV ();
2033 USE_T0 ();
2034}
2035
2036//Added by Gonetz
2037static void cc__t0_mul_t1__add_env ()
2038{
2039 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2040 GR_COMBINE_FACTOR_ONE,
2041 GR_COMBINE_LOCAL_CONSTANT,
2042 GR_COMBINE_OTHER_TEXTURE);
2043 CC_ENV ();
2044 T0_MUL_T1 ();
2045}
2046
2047static void cc__t0_mul_t1__add_env_mul__t0_mul_t1__add_env ()
2048{
2049 if (cmb.combine_ext)
2050 {
2051 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2052 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2053 GR_CMBX_ZERO, 0,
2054 GR_CMBX_B, 0);
2055 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2056 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
2057 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
2058 GR_CMBX_B, 0);
2059 cmb.tex_ccolor = rdp.env_color;
2060 cmb.tex |= 3;
2061 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2062 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
2063 GR_CMBX_TEXTURE_RGB, 0,
2064 GR_CMBX_ZERO, 0);
2065 }
2066 else
2067 cc__t0_mul_t1__add_env();
2068}
2069
2070static void cc_t0_add_shade () //Aded by Gonetz
2071{
2072 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2073 GR_COMBINE_FACTOR_ONE,
2074 GR_COMBINE_LOCAL_ITERATED,
2075 GR_COMBINE_OTHER_TEXTURE);
2076 USE_T0 ();
2077}
2078
2079static void cc__t0_mul_t1__add_shade () //Aded by Gonetz
2080{
2081 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2082 GR_COMBINE_FACTOR_ONE,
2083 GR_COMBINE_LOCAL_ITERATED,
2084 GR_COMBINE_OTHER_TEXTURE);
2085 T0_MUL_T1 ();
2086}
2087
2088static void cc_prim_add_env ()
2089{
2090 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2091 GR_COMBINE_FACTOR_ONE,
2092 GR_COMBINE_LOCAL_CONSTANT,
2093 GR_COMBINE_OTHER_ITERATED);
2094 CC_ENV ();
2095 SETSHADE_PRIM ();
2096}
2097
2098static void cc_t0_add_prim_mul_one_sub_t0_add_t0 () //Aded by Gonetz
2099{
2100 if (cmb.combine_ext)
2101 {
2102 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
2103 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2104 GR_CMBX_LOCAL_TEXTURE_RGB, 1,
2105 GR_CMBX_B, 0);
2106 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2107 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
2108 GR_CMBX_ZERO, 1,
2109 GR_CMBX_ZERO, 0);
2110 cmb.tex_ccolor = rdp.prim_color;
2111 cmb.tex |= 1;
2112 }
2113 else
2114 {
2115 cc_t0_add_prim ();
2116 }
2117}
2118
2119static void cc_one_sub_prim_mul_t0_add_prim();
2120static void cc__one_sub_prim_mul_t0_add_prim__mul_prima_add__one_sub_prim_mul_t0_add_prim () //Aded by Gonetz
2121{
2122 if (cmb.combine_ext)
2123 {
2124 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2125 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
2126 GR_CMBX_TMU_CCOLOR, 1,
2127 GR_CMBX_B, 0);
2128 CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
2129 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2130 GR_CMBX_CONSTANT_COLOR, 0,
2131 GR_CMBX_B, 0);
2132 cmb.tex_ccolor = rdp.prim_color;
2133 CC_PRIMA();
2134 cmb.tex |= 3; //hw frame buffer allocated as tile1, but not used in combiner
2135 }
2136 else
2137 {
2138 cc_one_sub_prim_mul_t0_add_prim();
2139 // cc_t0 ();
2140 }
2141}
2142
2143static void cc_prim_add_shade () //Aded by Gonetz
2144{
2145 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2146 GR_COMBINE_FACTOR_ONE,
2147 GR_COMBINE_LOCAL_ITERATED,
2148 GR_COMBINE_OTHER_CONSTANT);
2149 CC_PRIM ();
2150}
2151
2152static void cc_env_add_shade () //Aded by Gonetz
2153{
2154 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2155 GR_COMBINE_FACTOR_ONE,
2156 GR_COMBINE_LOCAL_ITERATED,
2157 GR_COMBINE_OTHER_CONSTANT);
2158 CC_ENV ();
2159}
2160
2161static void cc_shade_add_shade () //Aded by Gonetz
2162{
2163 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2164 GR_COMBINE_FACTOR_ONE,
2165 GR_COMBINE_LOCAL_ITERATED,
2166 GR_COMBINE_OTHER_ITERATED);
2167}
2168
2169// ** A-B **
2170static void cc__t0_inter_t1_using_enva__sub_env () //Aded by Gonetz
2171{
2172 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
2173 GR_COMBINE_FACTOR_ONE,
2174 GR_COMBINE_LOCAL_CONSTANT,
2175 GR_COMBINE_OTHER_TEXTURE);
2176 CC_ENV ();
2177 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
2178 T0_INTER_T1_USING_FACTOR (factor);
2179}
2180
2181static void cc_t0_sub__shade_mul_center ()
2182{
2183 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
2184 GR_COMBINE_FACTOR_ONE,
2185 GR_COMBINE_LOCAL_ITERATED,
2186 GR_COMBINE_OTHER_TEXTURE);
2187 MULSHADE(rdp.CENTER);
2188 USE_T0 ();
2189}
2190
2191// ** A-B*C **
2192static void cc_env_sub__t0_sub_t1_mul_primlod__mul_prim () //Aded by Gonetz
2193{
2194 if (cmb.combine_ext)
2195 {
2196 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2197 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2198 GR_CMBX_ZERO, 0,
2199 GR_CMBX_B, 0);
2200 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2201 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2202 GR_CMBX_ITRGB, 0,
2203 GR_CMBX_ZERO, 0);
2204 cmb.tex |= 3;
2205 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
2206 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2207 GR_CMBX_ZERO, 1,
2208 GR_CMBX_ZERO, 0);
2209 SETSHADE_PRIM ();
2210 SETSHADE_PRIMLOD ();
2211 CC_ENV ();
2212 }
2213 else
2214 {
2215 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2216 GR_COMBINE_FACTOR_TEXTURE_RGB,
2217 GR_COMBINE_LOCAL_CONSTANT,
2218 GR_COMBINE_OTHER_ITERATED);
2219 SETSHADE_PRIM ();
2220 CC_ENV ();
2221 T1_INTER_T0_USING_FACTOR (lod_frac);
2222 }
2223}
2224
2225static void cc_env_sub__t0_mul_scale_add_env__mul_prim ()
2226{
2227 if (cmb.combine_ext)
2228 {
2229 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2230 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
2231 GR_CMBX_TMU_CCOLOR, 0,
2232 GR_CMBX_B, 0);
2233 cmb.tex_ccolor = rdp.SCALE;
2234 cmb.tex |= 1;
2235 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2236 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
2237 GR_CMBX_CONSTANT_COLOR, 0,
2238 GR_CMBX_B, 0);
2239 SETSHADE_ENV ();
2240 CC_PRIM ();
2241 }
2242 else
2243 cc_t0_add_env ();
2244}
2245
2246static void cc_one_sub__one_sub_t0_mul_enva_add_prim__mul_prim () //Aded by Gonetz
2247{
2248 if (cmb.combine_ext)
2249 {
2250 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
2251 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
2252 GR_CMBX_DETAIL_FACTOR, 0,
2253 GR_CMBX_B, 0);
2254 cmb.tex_ccolor = rdp.prim_color;
2255 cmb.tex |= 1;
2256 percent = (float)(rdp.env_color&0xFF) / 255.0f;
2257 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
2258 CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_X,
2259 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2260 GR_CMBX_CONSTANT_COLOR, 0,
2261 GR_CMBX_ZERO, 1);
2262 CC_PRIM ();
2263 }
2264 else
2265 {
2266 cc_one ();
2267 }
2268}
2269
2270// ** A+B*C **
2271//Aded by Gonetz
2272static void cc_t0_add_env_mul_k5 ()
2273{
2274 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2275 GR_COMBINE_FACTOR_ONE,
2276 GR_COMBINE_LOCAL_CONSTANT,
2277 GR_COMBINE_OTHER_TEXTURE);
2278 float scale = rdp.K5 / 255.0f;
2279 wxUint8 r = (wxUint8)(rdp.env_color >> 24) & 0xFF;
2280 r = (wxUint8)(r*scale);
2281 wxUint8 g = (wxUint8)(rdp.env_color >> 16) & 0xFF;
2282 g = (wxUint8)(g*scale);
2283 wxUint8 b = (wxUint8)(rdp.env_color >> 8) & 0xFF;
2284 b = (wxUint8)(b*scale);
2285 CC((r<<24)|(g<<16)|(b<<8));
2286 USE_T0 ();
2287}
2288
2289static void cc_t0_add_shade_mul_env ()
2290{
2291 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2292 GR_COMBINE_FACTOR_ONE,
2293 GR_COMBINE_LOCAL_ITERATED,
2294 GR_COMBINE_OTHER_TEXTURE);
2295 MULSHADE_ENV ();
2296 USE_T0 ();
2297}
2298
2299static void cc__t1_mul_t0_add_t0__add_prim_mul_shade () //Aded by Gonetz
2300{
2301 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2302 GR_COMBINE_FACTOR_ONE,
2303 GR_COMBINE_LOCAL_ITERATED,
2304 GR_COMBINE_OTHER_TEXTURE);
2305 MULSHADE_PRIM ();
2306 rdp.best_tex = 0;
2307 cmb.tex |= 3;
2308 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;
2309 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
2310 cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL;
2311}
2312
2313static void cc__t0_sub_env_mul_enva__add_prim_mul_shade ()
2314{
2315 if (cmb.combine_ext)
2316 {
2317 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2318 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
2319 GR_CMBX_DETAIL_FACTOR, 0,
2320 GR_CMBX_ZERO, 0);
2321 cmb.tex_ccolor = rdp.env_color;
2322 cmb.tex |= 1;
2323 percent = (float)(rdp.env_color&0xFF) / 255.0f;
2324 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
2325
2326 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
2327 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2328 GR_CMBX_CONSTANT_COLOR, 0,
2329 GR_CMBX_B, 0);
2330 CC_PRIM ();
2331 }
2332 else {
2333 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2334 GR_COMBINE_FACTOR_ONE,
2335 GR_COMBINE_LOCAL_ITERATED,
2336 GR_COMBINE_OTHER_TEXTURE);
2337 MULSHADE_PRIM ();
2338 MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
2339 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
2340 MOD_0_FAC (rdp.env_color & 0xFF);
2341 USE_T0 ();
2342 }
2343}
2344
2345// ** A*B+C **
2346//Added by Gonetz
2347static void cc_t0_mul_prim_add_t1 ()
2348{
2349 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2350 GR_COMBINE_FACTOR_ONE,
2351 GR_COMBINE_LOCAL_NONE,
2352 GR_COMBINE_OTHER_TEXTURE);
2353 if (cmb.combine_ext)
2354 {
2355 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2356 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2357 GR_CMBX_ZERO, 0,
2358 GR_CMBX_B, 0);
2359 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2360 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2361 GR_CMBX_TMU_CCOLOR, 0,
2362 GR_CMBX_B, 0);
2363 cmb.tex |= 3;
2364 cmb.tex_ccolor = rdp.prim_color;
2365 }
2366 else
2367 {
2368 MOD_0 (TMOD_TEX_MUL_COL);
2369 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
2370 T0_ADD_T1 ();
2371 }
2372}
2373
2374static void cc_shirt ()
2375{
2376 // (t1-0)*prim+0, (1-t0)*t1+cmb
2377 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2378 GR_COMBINE_FACTOR_ONE,
2379 GR_COMBINE_LOCAL_NONE,
2380 GR_COMBINE_OTHER_TEXTURE);
2381 if (cmb.combine_ext)
2382 {
2383 /*
2384 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2385 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2386 GR_CMBX_TMU_CCOLOR, 0,
2387 GR_CMBX_ZERO, 0);
2388 //*/
2389 //*
2390 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2391 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2392 GR_CMBX_ZERO, 0,
2393 GR_CMBX_B, 0);
2394 //*/
2395 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2396 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2397 GR_CMBX_LOCAL_TEXTURE_RGB, 1,
2398 GR_CMBX_B, 0);
2399 cmb.tex |= 3;
2400 cmb.tex_ccolor = rdp.prim_color;
2401 }
2402 else
2403 {
2404 MOD_1 (TMOD_TEX_MUL_COL);
2405 MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
2406 T0_ADD_T1 ();
2407 }
2408}
2409
2410static void cc_t1_mul_prim_add_prim ()
2411{
2412 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2413 GR_COMBINE_FACTOR_TEXTURE_RGB,
2414 GR_COMBINE_LOCAL_CONSTANT,
2415 GR_COMBINE_OTHER_ITERATED);
2416 SETSHADE_PRIM ();
2417 CC_PRIM ();
2418 USE_T0 ();
2419}
2420
2421//Added by Gonetz
2422static void cc_t0_mul_prim_add_env ()
2423{
2424 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2425 GR_COMBINE_FACTOR_TEXTURE_RGB,
2426 GR_COMBINE_LOCAL_CONSTANT,
2427 GR_COMBINE_OTHER_ITERATED);
2428 SETSHADE_PRIM ();
2429 CC_ENV ();
2430 USE_T0 ();
2431}
2432
2433//Added by Gonetz
2434static void cc_t1_mul_prim_add_env ()
2435{
2436 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2437 GR_COMBINE_FACTOR_TEXTURE_RGB,
2438 GR_COMBINE_LOCAL_CONSTANT,
2439 GR_COMBINE_OTHER_ITERATED);
2440 SETSHADE_PRIM ();
2441 CC_ENV ();
2442 USE_T1 ();
2443}
2444
2445static void cc__t0_add_primlod__mul_prim_add_env ()
2446{
2447 if (cmb.combine_ext)
2448 {
2449 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2450 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
2451 GR_CMBX_ZERO, 1,
2452 GR_CMBX_ZERO, 0);
2453 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2454 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
2455 GR_CMBX_ITRGB, 0,
2456 GR_CMBX_B, 0);
2457 CC_PRIMLOD ();
2458 cmb.tex_ccolor = cmb.ccolor;
2459 CC_ENV ();
2460 SETSHADE_PRIM ();
2461 cmb.tex |= 1;
2462 }
2463 else
2464 {
2465 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2466 GR_COMBINE_FACTOR_TEXTURE_RGB,
2467 GR_COMBINE_LOCAL_CONSTANT,
2468 GR_COMBINE_OTHER_ITERATED);
2469 CC_PRIMLOD ();
2470 MOD_0 (TMOD_TEX_ADD_COL);
2471 MOD_0_COL (cmb.ccolor & 0xFFFFFF00);
2472 SETSHADE_PRIM ();
2473 CC_ENV ();
2474 USE_T0 ();
2475 }
2476}
2477
2478//Added by Gonetz
2479static void cc_t0_mul_prim_mul_shade_add_prim_mul_shade ()
2480{
2481 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2482 GR_COMBINE_FACTOR_LOCAL,
2483 GR_COMBINE_LOCAL_ITERATED,
2484 GR_COMBINE_OTHER_TEXTURE);
2485 MULSHADE_PRIM ();
2486 USE_T0 ();
2487}
2488
2489//Added by Gonetz
2490static void cc__t0_inter_t1_using_primlod__mul_prim_add_env ()
2491{
2492 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2493 GR_COMBINE_FACTOR_TEXTURE_RGB,
2494 GR_COMBINE_LOCAL_CONSTANT,
2495 GR_COMBINE_OTHER_ITERATED);
2496 SETSHADE_PRIM ();
2497 CC_ENV ();
2498 T0_INTER_T1_USING_FACTOR (lod_frac);
2499}
2500
2501static void cc__t1_sub_prim_mul_enva_add_t0__mul_prim_add_env ()
2502{
2503 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2504 GR_COMBINE_FACTOR_TEXTURE_RGB,
2505 GR_COMBINE_LOCAL_ITERATED,
2506 GR_COMBINE_OTHER_CONSTANT);
2507 CC_PRIM ();
2508 SETSHADE_ENV ();
2509 if (cmb.combine_ext)
2510 {
2511 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2512 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
2513 GR_CMBX_DETAIL_FACTOR, 0,
2514 GR_CMBX_ZERO, 0);
2515 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2516 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2517 GR_CMBX_ZERO, 1,
2518 GR_CMBX_ZERO, 0);
2519 cmb.tex_ccolor = rdp.prim_color;
2520 cmb.tex |= 3;
2521 percent = (float)(rdp.env_color&0xFF) / 255.0f;
2522 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
2523 }
2524 else
2525 {
2526 MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);
2527 MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
2528 MOD_1_FAC (rdp.env_color & 0xFF);
2529 T0_ADD_T1 ();
2530 }
2531}
2532
2533//Added by Gonetz
2534static void cc__t0_inter_t1_using_primlod__mul_shade_add_env ()
2535{
2536 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2537 GR_COMBINE_FACTOR_TEXTURE_RGB,
2538 GR_COMBINE_LOCAL_CONSTANT,
2539 GR_COMBINE_OTHER_ITERATED);
2540 CC_ENV ();
2541 T0_INTER_T1_USING_FACTOR (lod_frac);
2542}
2543
2544//Added by Gonetz
2545static void cc__t1_sub_prim_mul_primlod_add_t0__mul_prim_add_env ()
2546{
2547 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2548 GR_COMBINE_FACTOR_TEXTURE_RGB,
2549 GR_COMBINE_LOCAL_CONSTANT,
2550 GR_COMBINE_OTHER_ITERATED);
2551 SETSHADE_PRIM ();
2552 CC_ENV ();
2553 T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
2554}
2555
2556//Aded by Gonetz
2557static void cc__t0_mul_t1__mul_prim_add_env ()
2558{
2559 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2560 GR_COMBINE_FACTOR_TEXTURE_RGB,
2561 GR_COMBINE_LOCAL_CONSTANT,
2562 GR_COMBINE_OTHER_ITERATED);
2563 CC_ENV ();
2564 MULSHADE_PRIM ();
2565 T0_MUL_T1 ();
2566}
2567
2568//Aded by Gonetz
2569static void cc__t0_mul_t1__sub_prim_mul_env_add_shade ()
2570{
2571 if (cmb.combine_ext)
2572 {
2573 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2574 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2575 GR_CMBX_TMU_CCOLOR, 0,
2576 GR_CMBX_ZERO, 0);
2577 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2578 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
2579 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
2580 GR_CMBX_B, 0);
2581 cmb.tex_ccolor = rdp.env_color;
2582 cmb.tex |= 3;
2583 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
2584 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
2585 GR_CMBX_ZERO, 1,
2586 GR_CMBX_TEXTURE_RGB, 0);
2587 CC_PRIMMULENV ();
2588 }
2589 else
2590 {
2591 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2592 GR_COMBINE_FACTOR_TEXTURE_RGB,
2593 GR_COMBINE_LOCAL_ITERATED,
2594 GR_COMBINE_OTHER_CONSTANT);
2595 CC_ENV ();
2596 T0_MUL_T1 ();
2597 }
2598}
2599
2600static void cc__t0_sub_prim_mul_t1_add_t1__mul_env_add_shade ()
2601{
2602 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2603 GR_COMBINE_FACTOR_TEXTURE_RGB,
2604 GR_COMBINE_LOCAL_ITERATED,
2605 GR_COMBINE_OTHER_CONSTANT);
2606 CC_ENV ();
2607 if (rdp.prim_color & 0xFFFFFF00)
2608 {
2609 MOD_0 (TMOD_TEX_SUB_COL);
2610 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
2611 }
2612 if (cmb.combine_ext)
2613 {
2614 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2615 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2616 GR_CMBX_ZERO, 0,
2617 GR_CMBX_B, 0);
2618 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2619 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2620 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
2621 GR_CMBX_B, 0);
2622 cmb.tex |= 3;
2623 }
2624 else
2625 {
2626 T0_MUL_T1 ();
2627 }
2628}
2629
2630static void cc__t0_mul_t1__mul_shade_add_prim ()
2631{
2632 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2633 GR_COMBINE_FACTOR_TEXTURE_RGB,
2634 GR_COMBINE_LOCAL_CONSTANT,
2635 GR_COMBINE_OTHER_ITERATED);
2636 CC_PRIM ();
2637 T0_MUL_T1 ();
2638}
2639
2640static void cc__t0_mul_shadea_add_env__mul_shade_add_prim ()
2641{
2642 if (cmb.combine_ext)
2643 {
2644 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2645 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
2646 GR_CMBX_ITALPHA, 0,
2647 GR_CMBX_B, 0);
2648 cmb.tex_ccolor = rdp.env_color;
2649 cmb.tex |= 1;
2650 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2651 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
2652 GR_CMBX_ITRGB, 0,
2653 GR_CMBX_B, 0);
2654 CC_PRIM ();
2655 }
2656 else
2657 {
2658 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2659 GR_COMBINE_FACTOR_TEXTURE_RGB,
2660 GR_COMBINE_LOCAL_CONSTANT,
2661 GR_COMBINE_OTHER_ITERATED);
2662 MULSHADE_SHADEA ();
2663 CC_PRIM ();
2664 USE_T0 ();
2665 }
2666}
2667
2668static void cc__t0_mul_t1__mul_shade_add_env ()
2669{
2670 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2671 GR_COMBINE_FACTOR_TEXTURE_RGB,
2672 GR_COMBINE_LOCAL_CONSTANT,
2673 GR_COMBINE_OTHER_ITERATED);
2674 CC_ENV ();
2675 T0_MUL_T1 ();
2676}
2677
2678//Added by Gonetz
2679static void cc__t0_add_t1__mul_shade_add_env ()
2680{
2681 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2682 GR_COMBINE_FACTOR_TEXTURE_RGB,
2683 GR_COMBINE_LOCAL_CONSTANT,
2684 GR_COMBINE_OTHER_ITERATED);
2685 CC_ENV ();
2686 T0_ADD_T1 ();
2687}
2688
2689static void cc__t1_mul_prima_add_t0__mul_shade_add_env ()
2690{
2691 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2692 GR_COMBINE_FACTOR_TEXTURE_RGB,
2693 GR_COMBINE_LOCAL_CONSTANT,
2694 GR_COMBINE_OTHER_ITERATED);
2695 CC_ENV ();
2696 T1_MUL_PRIMA_ADD_T0 ();
2697}
2698
2699static void cc__t0_inter_t1_using_enva__mul_shade_add_prim ()
2700{
2701 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2702 GR_COMBINE_FACTOR_TEXTURE_RGB,
2703 GR_COMBINE_LOCAL_CONSTANT,
2704 GR_COMBINE_OTHER_ITERATED);
2705 CC_PRIM ();
2706 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
2707 T0_INTER_T1_USING_FACTOR (factor);
2708}
2709
2710static void cc__t0_inter_t1_using_enva__mul_shade_add_env ()
2711{
2712 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2713 GR_COMBINE_FACTOR_TEXTURE_RGB,
2714 GR_COMBINE_LOCAL_CONSTANT,
2715 GR_COMBINE_OTHER_ITERATED);
2716 CC_ENV ();
2717 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
2718 T0_INTER_T1_USING_FACTOR (factor);
2719}
2720
2721//Added by Gonetz
2722static void cc_t0_mul_primlod_add_prim ()
2723{
2724 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2725 GR_COMBINE_FACTOR_TEXTURE_RGB,
2726 GR_COMBINE_LOCAL_ITERATED,
2727 GR_COMBINE_OTHER_CONSTANT);
2728 SETSHADE_PRIM ();
2729 CC_PRIMLOD ();
2730 USE_T0 ();
2731}
2732
2733static void cc__t0_mul_primlod__add__prim_mul_shade ()
2734{
2735 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2736 GR_COMBINE_FACTOR_TEXTURE_RGB,
2737 GR_COMBINE_LOCAL_ITERATED,
2738 GR_COMBINE_OTHER_CONSTANT);
2739 MULSHADE_PRIM ();
2740 CC_PRIMLOD ();
2741 USE_T0 ();
2742}
2743
2744//Added by Gonetz
2745static void cc_t0_mul_primlod_add_prim_mul_shade_add_env ()
2746{
2747 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2748 GR_COMBINE_FACTOR_TEXTURE_RGB,
2749 GR_COMBINE_LOCAL_ITERATED,
2750 GR_COMBINE_OTHER_CONSTANT);
2751 MULSHADE_PRIM ();
2752 ADDSHADE_ENV ();
2753 CC_PRIMLOD ();
2754 USE_T0 ();
2755}
2756
2757//Added by Gonetz
2758static void cc_t1_mul_primlod_add_prim_mul_shade_add_env ()
2759{
2760 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2761 GR_COMBINE_FACTOR_TEXTURE_RGB,
2762 GR_COMBINE_LOCAL_ITERATED,
2763 GR_COMBINE_OTHER_CONSTANT);
2764 MULSHADE_PRIM ();
2765 ADDSHADE_ENV ();
2766 CC_PRIMLOD ();
2767 USE_T1 ();
2768}
2769
2770static void cc__t0_inter_t1_using_primlod__mul_shade_add_prim ()
2771{
2772 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2773 GR_COMBINE_FACTOR_TEXTURE_RGB,
2774 GR_COMBINE_LOCAL_CONSTANT,
2775 GR_COMBINE_OTHER_ITERATED);
2776 CC_PRIM ();
2777 T0_INTER_T1_USING_FACTOR (lod_frac);
2778}
2779
2780static void cc__t1_inter_t0_using_primlod__mul_shade_add_prim ()
2781{
2782 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2783 GR_COMBINE_FACTOR_TEXTURE_RGB,
2784 GR_COMBINE_LOCAL_CONSTANT,
2785 GR_COMBINE_OTHER_ITERATED);
2786 CC_PRIM ();
2787 T1_INTER_T0_USING_FACTOR (lod_frac);
2788}
2789
2790//Added by Gonetz
2791static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade_add_shade ()
2792{
2793 if (cmb.combine_ext)
2794 {
2795 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2796 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2797 GR_CMBX_ZERO, 0,
2798 GR_CMBX_B, 0);
2799 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2800 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2801 GR_CMBX_DETAIL_FACTOR, 0,
2802 GR_CMBX_ZERO, 0);
2803 cmb.tex |= 3;
2804 percent = (float)lod_frac / 255.0f;
2805 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
2806 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2807 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
2808 GR_CMBX_ITRGB, 0,
2809 GR_CMBX_ITRGB, 0);
2810 CC_PRIM ();
2811 }
2812 else
2813 {
2814 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2815 GR_COMBINE_FACTOR_LOCAL,
2816 GR_COMBINE_LOCAL_ITERATED,
2817 GR_COMBINE_OTHER_TEXTURE);
2818 T0_INTER_T1_USING_FACTOR (lod_frac);
2819 }
2820}
2821
2822//Added by Gonetz
2823static void cc__t0_inter_t1_using_half__mul_prim_add_env ()
2824{
2825 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2826 GR_COMBINE_FACTOR_TEXTURE_RGB,
2827 GR_COMBINE_LOCAL_CONSTANT,
2828 GR_COMBINE_OTHER_ITERATED);
2829 SETSHADE_PRIM ();
2830 CC_ENV ();
2831 T0_INTER_T1_USING_FACTOR (0x7F);
2832}
2833
2834//Added by Gonetz
2835static void cc__t0_inter_t1_using_t1__mul_prim_add_shade ()
2836{
2837 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2838 GR_COMBINE_FACTOR_TEXTURE_RGB,
2839 GR_COMBINE_LOCAL_ITERATED,
2840 GR_COMBINE_OTHER_CONSTANT);
2841 CC_PRIM ();
2842 T0_INTER_T1_USING_T1 ();
2843}
2844
2845//Added by Gonetz
2846static void cc_one_sub_t1_mul_t0a_add_t0_mul_env_add_prim ()
2847{
2848 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2849 GR_COMBINE_FACTOR_ONE,
2850 GR_COMBINE_LOCAL_CONSTANT,
2851 GR_COMBINE_OTHER_TEXTURE);
2852 CC_PRIM ();
2853 MOD_0 (TMOD_TEX_MUL_COL);
2854 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
2855 rdp.best_tex = 0;
2856 cmb.tex |= 3;
2857 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;
2858 cmb.tmu1_invert = 1;
2859 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
2860 cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA;
2861}
2862
2863//Added by Gonetz
2864static void cc__t0_inter_t1_using_t1__mul_shade_add_prim ()
2865{
2866 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2867 GR_COMBINE_FACTOR_TEXTURE_RGB,
2868 GR_COMBINE_LOCAL_CONSTANT,
2869 GR_COMBINE_OTHER_ITERATED);
2870 CC_PRIM ();
2871 T0_INTER_T1_USING_T1 ();
2872}
2873
2874//Added by Gonetz
2875static void cc_t0_mul_prim_add_shade ()
2876{
2877 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2878 GR_COMBINE_FACTOR_TEXTURE_RGB,
2879 GR_COMBINE_LOCAL_ITERATED,
2880 GR_COMBINE_OTHER_CONSTANT);
2881 CC_PRIM ();
2882 USE_T0 ();
2883}
2884
2885static void cc_t1_mul_prim_add_shade ()
2886{
2887 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2888 GR_COMBINE_FACTOR_TEXTURE_RGB,
2889 GR_COMBINE_LOCAL_ITERATED,
2890 GR_COMBINE_OTHER_CONSTANT);
2891 CC_PRIM ();
2892 USE_T1 ();
2893}
2894
2895//Added by Gonetz
2896static void cc_t0_mul_env_add_prim ()
2897{
2898 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2899 GR_COMBINE_FACTOR_TEXTURE_RGB,
2900 GR_COMBINE_LOCAL_CONSTANT,
2901 GR_COMBINE_OTHER_ITERATED);
2902 SETSHADE_ENV ();
2903 CC_PRIM ();
2904 USE_T0 ();
2905}
2906
2907//Added by Gonetz
2908static void cc_t1_mul_env_add_prim ()
2909{
2910 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2911 GR_COMBINE_FACTOR_TEXTURE_RGB,
2912 GR_COMBINE_LOCAL_CONSTANT,
2913 GR_COMBINE_OTHER_ITERATED);
2914 SETSHADE_ENV ();
2915 CC_PRIM ();
2916 USE_T1 ();
2917}
2918
2919static void cc_t0_mul_scale_add_prim ()
2920{
2921 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2922 GR_COMBINE_FACTOR_TEXTURE_RGB,
2923 GR_COMBINE_LOCAL_CONSTANT,
2924 GR_COMBINE_OTHER_ITERATED);
2925 SETSHADE (rdp.SCALE);
2926 CC_PRIM ();
2927 USE_T0 ();
2928}
2929
2930//Added by Gonetz
2931static void cc__t0_mul_t1__mul_env_add_prim ()
2932{
2933 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2934 GR_COMBINE_FACTOR_TEXTURE_RGB,
2935 GR_COMBINE_LOCAL_CONSTANT,
2936 GR_COMBINE_OTHER_ITERATED);
2937 SETSHADE_ENV ();
2938 CC_PRIM ();
2939 T0_MUL_T1 ();
2940}
2941
2942//Added by Gonetz
2943static void cc__t0_add__t1_mul_scale__mul_env_sub_center_add_prim ()
2944{
2945 // (t1-0)*scale+t0, (env-center)*cmb+prim
2946 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2947 GR_COMBINE_FACTOR_TEXTURE_RGB,
2948 GR_COMBINE_LOCAL_ITERATED,
2949 GR_COMBINE_OTHER_CONSTANT);
2950 CC_C1SUBC2(rdp.env_color, rdp.CENTER);
2951 SETSHADE_PRIM ();
2952 MOD_1 (TMOD_TEX_MUL_COL);
2953 MOD_1_COL (rdp.SCALE & 0xFFFFFF00);
2954 T0_ADD_T1 ();
2955}
2956
2957//Added by Gonetz
2958static void cc__t1_sub_t0__mul_env_add_prim ()
2959{
2960 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2961 GR_COMBINE_FACTOR_TEXTURE_RGB,
2962 GR_COMBINE_LOCAL_CONSTANT,
2963 GR_COMBINE_OTHER_ITERATED);
2964 SETSHADE_ENV ();
2965 CC_PRIM ();
2966 T1_SUB_T0 ();
2967}
2968
2969//Added by Gonetz
2970static void cc_t0_mul_env_add_shade ()
2971{
2972 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2973 GR_COMBINE_FACTOR_TEXTURE_RGB,
2974 GR_COMBINE_LOCAL_ITERATED,
2975 GR_COMBINE_OTHER_CONSTANT);
2976 CC_ENV ();
2977 USE_T0 ();
2978}
2979
2980static void cc_t0_mul_shade_add_prim ()
2981{
2982 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2983 GR_COMBINE_FACTOR_TEXTURE_RGB,
2984 GR_COMBINE_LOCAL_CONSTANT,
2985 GR_COMBINE_OTHER_ITERATED);
2986 CC_PRIM ();
2987 USE_T0 ();
2988}
2989
2990static void cc__t0_mul_enva_add_t1__mul_shade_add_prim ()
2991{
2992 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2993 GR_COMBINE_FACTOR_TEXTURE_RGB,
2994 GR_COMBINE_LOCAL_CONSTANT,
2995 GR_COMBINE_OTHER_ITERATED);
2996 CC_PRIM ();
2997 if (cmb.combine_ext)
2998 {
2999 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3000 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3001 GR_CMBX_ZERO, 1,
3002 GR_CMBX_ZERO, 0);
3003 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3004 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3005 GR_CMBX_DETAIL_FACTOR, 0,
3006 GR_CMBX_B, 0);
3007 cmb.tex |= 3;
3008 percent = (float)(rdp.env_color&0xFF) / 255.0f;
3009 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
3010 }
3011 else
3012 {
3013 T0_ADD_T1 ();
3014 }
3015}
3016
3017static void cc_t0_mul_shade_add_prima ()
3018{
3019 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3020 GR_COMBINE_FACTOR_TEXTURE_RGB,
3021 GR_COMBINE_LOCAL_CONSTANT,
3022 GR_COMBINE_OTHER_ITERATED);
3023 CC_PRIMA ();
3024 USE_T0 ();
3025}
3026
3027static void cc_t1_mul_shade_add_prim ()
3028{
3029 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3030 GR_COMBINE_FACTOR_TEXTURE_RGB,
3031 GR_COMBINE_LOCAL_CONSTANT,
3032 GR_COMBINE_OTHER_ITERATED);
3033 CC_PRIM ();
3034 USE_T1 ();
3035}
3036
3037static void cc_t0_mul_shade_add_env ()
3038{
3039 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3040 GR_COMBINE_FACTOR_TEXTURE_RGB,
3041 GR_COMBINE_LOCAL_CONSTANT,
3042 GR_COMBINE_OTHER_ITERATED);
3043 CC_ENV ();
3044 USE_T0 ();
3045}
3046
3047static void cc__t0_add_prim__mul_shade_add_t0 ()
3048{
3049 if (cmb.combine_ext)
3050 {
3051 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3052 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3053 GR_CMBX_ITRGB, 0,
3054 GR_CMBX_B, 0);
3055 CC_PRIM ();
3056 }
3057 else
3058 {
3059 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3060 GR_COMBINE_FACTOR_LOCAL,
3061 GR_COMBINE_LOCAL_ITERATED,
3062 GR_COMBINE_OTHER_TEXTURE);
3063 // MOD_0 (TMOD_TEX_ADD_COL);
3064 // MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3065 }
3066 USE_T0 ();
3067}
3068
3069static void cc__t0_add_prim__mul_shade_add_t1 ()
3070{
3071 if (cmb.combine_ext)
3072 {
3073 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3074 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3075 GR_CMBX_ZERO, 0,
3076 GR_CMBX_B, 0);
3077 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3078 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3079 GR_CMBX_ITRGB, 0,
3080 GR_CMBX_B, 0);
3081 cmb.tex |= 3;
3082 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3083 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3084 GR_CMBX_ITRGB, 0,
3085 GR_CMBX_B, 0);
3086 CC_PRIM ();
3087 }
3088 else
3089 {
3090 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3091 GR_COMBINE_FACTOR_ONE,
3092 GR_COMBINE_LOCAL_ITERATED,
3093 GR_COMBINE_OTHER_TEXTURE);
3094 MULSHADE_PRIM ();
3095 T0_ADD_T1 ();
3096 }
3097}
3098
3099static void cc__t0_add_primlod__mul_shade_add_env ()
3100{
3101 if (cmb.combine_ext)
3102 {
3103 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3104 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
3105 GR_CMBX_ZERO, 1,
3106 GR_CMBX_ZERO, 0);
3107 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3108 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
3109 GR_CMBX_ZERO, 1,
3110 GR_CMBX_ZERO, 0);
3111 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3112 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
3113 GR_CMBX_ITRGB, 0,
3114 GR_CMBX_B, 0);
3115 CC_PRIMLOD ();
3116 cmb.tex_ccolor = cmb.ccolor;
3117 CC_ENV ();
3118 cmb.tex |= 1;
3119 }
3120 else
3121 {
3122 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3123 GR_COMBINE_FACTOR_TEXTURE_RGB,
3124 GR_COMBINE_LOCAL_CONSTANT,
3125 GR_COMBINE_OTHER_ITERATED);
3126 wxUint32 color = (lod_frac<<24) | (lod_frac<<16) | (lod_frac<<8);
3127 MOD_0 (TMOD_TEX_ADD_COL);
3128 MOD_0_COL (color & 0xFFFFFF00);
3129 CC_ENV ();
3130 USE_T0 ();
3131 }
3132}
3133
3134static void cc__t0_mul_prima_add_prim_mul__shade_add_env ()
3135{
3136 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3137 GR_COMBINE_FACTOR_TEXTURE_RGB,
3138 GR_COMBINE_LOCAL_CONSTANT,
3139 GR_COMBINE_OTHER_ITERATED);
3140 CC_ENV ();
3141 if (cmb.combine_ext)
3142 {
3143 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3144 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
3145 GR_CMBX_TMU_CALPHA, 0,
3146 GR_CMBX_B, 0);
3147 cmb.tex_ccolor = rdp.prim_color;
3148 cmb.tex |= 1;
3149 }
3150 else
3151 {
3152 MOD_0 (TMOD_TEX_SCALE_FAC_ADD_COL);
3153 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3154 MOD_0_FAC (rdp.prim_color & 0xFF);
3155 USE_T0 ();
3156 }
3157}
3158
3159//Added by Gonetz
3160static void cc_t0_mul_shadea_add_shade ()
3161{
3162 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3163 GR_COMBINE_FACTOR_LOCAL_ALPHA,
3164 GR_COMBINE_LOCAL_ITERATED,
3165 GR_COMBINE_OTHER_TEXTURE);
3166 USE_T0 ();
3167}
3168
3169static void cc_prim_mul_prima_add_prim () //Added by Gonetz
3170{
3171 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3172 GR_COMBINE_FACTOR_LOCAL_ALPHA,
3173 GR_COMBINE_LOCAL_CONSTANT,
3174 GR_COMBINE_OTHER_ITERATED);
3175 CC_PRIM ();
3176 CA_PRIM ();
3177 SETSHADE_PRIM ();
3178}
3179
3180static void cc_prim_mul_prima_add_t0 () //Added by Gonetz
3181{
3182 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3183 GR_COMBINE_FACTOR_ONE,
3184 GR_COMBINE_LOCAL_ITERATED,
3185 GR_COMBINE_OTHER_TEXTURE);
3186 SETSHADE_PRIM ();
3187 SETSHADE_PRIMA ();
3188 USE_T0 ();
3189}
3190
3191static void cc_prim_mul_env_add_t0 () //Added by Gonetz
3192{
3193 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3194 GR_COMBINE_FACTOR_ONE,
3195 GR_COMBINE_LOCAL_ITERATED,
3196 GR_COMBINE_OTHER_TEXTURE);
3197 SETSHADE_PRIM ();
3198 SETSHADE_ENV ();
3199 USE_T0 ();
3200}
3201
3202static void cc_prim_mul_shade_add_t0 ()
3203{
3204 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3205 GR_COMBINE_FACTOR_ONE,
3206 GR_COMBINE_LOCAL_ITERATED,
3207 GR_COMBINE_OTHER_TEXTURE);
3208 MULSHADE_PRIM ();
3209 USE_T0 ();
3210}
3211
3212static void cc_prim_mul_shade_add_env ()
3213{
3214 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3215 GR_COMBINE_FACTOR_ONE,
3216 GR_COMBINE_LOCAL_CONSTANT,
3217 GR_COMBINE_OTHER_ITERATED);
3218 CC_ENV ();
3219 MULSHADE_PRIM ();
3220}
3221
3222static void cc_env_mul_shade_add_env () //Added by Gonetz
3223{
3224 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3225 GR_COMBINE_FACTOR_ONE,
3226 GR_COMBINE_LOCAL_CONSTANT,
3227 GR_COMBINE_OTHER_ITERATED);
3228 CC_ENV ();
3229 MULSHADE_ENV ();
3230}
3231
3232// ** A*B+C*D **
3233static void cc_t0_mul_prim_add_one_sub_prim_mul_shade () //Added by Gonetz
3234{
3235 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3236 GR_COMBINE_FACTOR_TEXTURE_RGB,
3237 GR_COMBINE_LOCAL_ITERATED,
3238 GR_COMBINE_OTHER_CONSTANT);
3239 CC_PRIM ();
3240 MULSHADE_1MPRIM ();
3241 USE_T0 ();
3242}
3243
3244static void cc_t0_mul_prim_add_shade_sub_env_mul_prim () //Added by Gonetz
3245{
3246 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3247 GR_COMBINE_FACTOR_TEXTURE_RGB,
3248 GR_COMBINE_LOCAL_ITERATED,
3249 GR_COMBINE_OTHER_CONSTANT);
3250 CC_PRIM ();
3251 SUBSHADE_ENV ()
3252 MULSHADE_PRIM ();
3253 USE_T0 ();
3254}
3255
3256static void cc_t0_mul_prim_add_shade_mul_shadea_mul_prim ()
3257{
3258 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3259 GR_COMBINE_FACTOR_TEXTURE_RGB,
3260 GR_COMBINE_LOCAL_ITERATED,
3261 GR_COMBINE_OTHER_CONSTANT);
3262 CC_PRIM ();
3263 MULSHADE_PRIM ();
3264 MULSHADE_SHADEA ();
3265 USE_T0 ();
3266}
3267
3268static void cc__t0_mul_t1__mul_prim_add_prim_mul_shade () //Added by Gonetz
3269{
3270 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3271 GR_COMBINE_FACTOR_TEXTURE_RGB,
3272 GR_COMBINE_LOCAL_ITERATED,
3273 GR_COMBINE_OTHER_CONSTANT);
3274 MULSHADE_PRIM ();
3275 CC_PRIM ();
3276 T0_MUL_T1 ();
3277}
3278
3279static void cc_t0_mul_env_add_prim_mul_shade () //Added by Gonetz
3280{
3281 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3282 GR_COMBINE_FACTOR_TEXTURE_RGB,
3283 GR_COMBINE_LOCAL_ITERATED,
3284 GR_COMBINE_OTHER_CONSTANT);
3285 MULSHADE_PRIM ();
3286 CC_ENV ();
3287 USE_T0 ();
3288}
3289
3290static void cc_t0_mul_enva_add_prim_mul_shade () //Added by Gonetz
3291{
3292 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3293 GR_COMBINE_FACTOR_TEXTURE_RGB,
3294 GR_COMBINE_LOCAL_ITERATED,
3295 GR_COMBINE_OTHER_CONSTANT);
3296 MULSHADE_PRIM ();
3297 CC_ENVA ();
3298 USE_T0 ();
3299}
3300
3301static void cc_t0_mul_shade_add_prim_mul_env () //Added by Gonetz
3302{
3303 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3304 GR_COMBINE_FACTOR_TEXTURE_RGB,
3305 GR_COMBINE_LOCAL_CONSTANT,
3306 GR_COMBINE_OTHER_ITERATED);
3307 CC_PRIMMULENV ();
3308 USE_T0 ();
3309}
3310
3311static void cc_prim_mul_env_add_one_sub_prim_mul_shade () //Added by Gonetz
3312{
3313 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3314 GR_COMBINE_FACTOR_ONE,
3315 GR_COMBINE_LOCAL_ITERATED,
3316 GR_COMBINE_OTHER_CONSTANT);
3317 MULSHADE_1MPRIM ();
3318 CC_PRIMMULENV ();
3319}
3320
3321// ** A*B*C **
3322
3323static void cc_t0_mul_prim_mul_prim () //Added by Gonetz
3324{
3325 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3326 GR_COMBINE_FACTOR_LOCAL,
3327 GR_COMBINE_LOCAL_ITERATED,
3328 GR_COMBINE_OTHER_TEXTURE);
3329 SETSHADE_PRIM ();
3330 SETSHADE_PRIM ();
3331 USE_T0 ();
3332}
3333
3334static void cc_t0_mul_prim_mul_prima () //Added by Gonetz
3335{
3336 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3337 GR_COMBINE_FACTOR_LOCAL,
3338 GR_COMBINE_LOCAL_ITERATED,
3339 GR_COMBINE_OTHER_TEXTURE);
3340 SETSHADE_PRIM ();
3341 SETSHADE_PRIMA ();
3342 USE_T0 ();
3343}
3344
3345static void cc_t0_mul_enva_mul_shade ()
3346{
3347 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3348 GR_COMBINE_FACTOR_LOCAL,
3349 GR_COMBINE_LOCAL_ITERATED,
3350 GR_COMBINE_OTHER_TEXTURE);
3351 MULSHADE_ENVA ();
3352 USE_T0 ();
3353}
3354
3355static void cc_t0_mul_primlod_mul_prim () //Added by Gonetz
3356{
3357 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3358 GR_COMBINE_FACTOR_LOCAL,
3359 GR_COMBINE_LOCAL_CONSTANT,
3360 GR_COMBINE_OTHER_TEXTURE);
3361 CC_COLMULBYTE (rdp.prim_color, rdp.prim_lodfrac);
3362 USE_T0 ();
3363}
3364
3365static void cc_t0_mul_primlod_mul_shade () //Added by Gonetz
3366{
3367 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3368 GR_COMBINE_FACTOR_LOCAL,
3369 GR_COMBINE_LOCAL_ITERATED,
3370 GR_COMBINE_OTHER_TEXTURE);
3371 MULSHADE_PRIMLOD ();
3372 USE_T0 ();
3373}
3374
3375static void cc__t0_mul_t1__mul_prim ()
3376{
3377 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3378 GR_COMBINE_FACTOR_LOCAL,
3379 GR_COMBINE_LOCAL_CONSTANT,
3380 GR_COMBINE_OTHER_TEXTURE);
3381 CC_PRIM ();
3382 T0_MUL_T1 ();
3383}
3384
3385static void cc__t1_mul_t1_add_t0__mul_prim ()
3386{
3387 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3388 GR_COMBINE_FACTOR_LOCAL,
3389 GR_COMBINE_LOCAL_CONSTANT,
3390 GR_COMBINE_OTHER_TEXTURE);
3391 CC_PRIM ();
3392 if (cmb.combine_ext)
3393 {
3394 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3395 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3396 GR_CMBX_ZERO, 0,
3397 GR_CMBX_B, 0);
3398 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
3399 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3400 GR_CMBX_OTHER_TEXTURE_RGB, 0,
3401 GR_CMBX_B, 0);
3402 cmb.tex |= 3;
3403 }
3404 else
3405 {
3406 T0_ADD_T1 ();
3407 }
3408}
3409
3410static void cc__t0_mul_t1__mul_prima () //Added by Gonetz
3411{
3412 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3413 GR_COMBINE_FACTOR_LOCAL,
3414 GR_COMBINE_LOCAL_CONSTANT,
3415 GR_COMBINE_OTHER_TEXTURE);
3416 CC_PRIMA ();
3417 T0_MUL_T1 ();
3418}
3419
3420static void cc__t0_mul_t1__mul_env () //Added by Gonetz
3421{
3422 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3423 GR_COMBINE_FACTOR_LOCAL,
3424 GR_COMBINE_LOCAL_CONSTANT,
3425 GR_COMBINE_OTHER_TEXTURE);
3426 CC_ENV ();
3427 T0_MUL_T1 ();
3428}
3429
3430static void cc__t0_mul_t1__mul_enva () //Added by Gonetz
3431{
3432 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3433 GR_COMBINE_FACTOR_LOCAL,
3434 GR_COMBINE_LOCAL_CONSTANT,
3435 GR_COMBINE_OTHER_TEXTURE);
3436 CC_ENVA ();
3437 T0_MUL_T1 ();
3438}
3439
3440static void cc__t0_mul_t1__mul_shade ()
3441{
3442 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3443 GR_COMBINE_FACTOR_LOCAL,
3444 GR_COMBINE_LOCAL_ITERATED,
3445 GR_COMBINE_OTHER_TEXTURE);
3446 T0_MUL_T1 ();
3447}
3448
3449static void cc__t0a_mul_t1__mul_prim () //Added by Gonetz
3450{
3451 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3452 GR_COMBINE_FACTOR_LOCAL,
3453 GR_COMBINE_LOCAL_CONSTANT,
3454 GR_COMBINE_OTHER_TEXTURE);
3455 CC_PRIM ();
3456 T0A_MUL_T1 ();
3457}
3458
3459static void cc__t0_mul_t1a__mul_shade () //Added by Gonetz
3460{
3461 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3462 GR_COMBINE_FACTOR_LOCAL,
3463 GR_COMBINE_LOCAL_ITERATED,
3464 GR_COMBINE_OTHER_TEXTURE);
3465 T0_MUL_T1A ();
3466}
3467
3468static void cc__t0a_mul_t1__mul_shade () //Added by Gonetz
3469{
3470 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3471 GR_COMBINE_FACTOR_LOCAL,
3472 GR_COMBINE_LOCAL_ITERATED,
3473 GR_COMBINE_OTHER_TEXTURE);
3474 T0A_MUL_T1 ();
3475}
3476
3477static void cc_t0_mul_prim_mul_env ()
3478{
3479 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3480 GR_COMBINE_FACTOR_LOCAL,
3481 GR_COMBINE_LOCAL_ITERATED,
3482 GR_COMBINE_OTHER_TEXTURE);
3483 SETSHADE_PRIM ();
3484 SETSHADE_ENV (); // notice that setshade multiplies
3485 USE_T0 ();
3486}
3487
3488static void cc_t0_mul_prim_mul_shade ()
3489{
3490 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3491 GR_COMBINE_FACTOR_LOCAL,
3492 GR_COMBINE_LOCAL_ITERATED,
3493 GR_COMBINE_OTHER_TEXTURE);
3494 MULSHADE_PRIM ();
3495 USE_T0 ();
3496}
3497
3498static void cc_t0_mul_prim_mul_shadea ()
3499{
3500 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3501 GR_COMBINE_FACTOR_LOCAL,
3502 GR_COMBINE_LOCAL_ITERATED,
3503 GR_COMBINE_OTHER_TEXTURE);
3504 SETSHADE_PRIM ();
3505 MULSHADE_SHADEA();
3506 USE_T0 ();
3507}
3508
3509static void cc_t0_mul_prima_mul_shade ()
3510{
3511 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3512 GR_COMBINE_FACTOR_LOCAL,
3513 GR_COMBINE_LOCAL_ITERATED,
3514 GR_COMBINE_OTHER_TEXTURE);
3515 MULSHADE_PRIMA ();
3516 USE_T0 ();
3517}
3518
3519static void cc_t1_mul__one_sub_prim_mul_shade_add_prim ()
3520{
3521 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3522 GR_COMBINE_FACTOR_LOCAL,
3523 GR_COMBINE_LOCAL_ITERATED,
3524 GR_COMBINE_OTHER_TEXTURE);
3525 MULSHADE_1MPRIM ();
3526 ADDSHADE_PRIM ();
3527 USE_T1 ();
3528}
3529
3530static void cc_t0_mul_one_sub_env_mul_shade ()
3531{
3532 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3533 GR_COMBINE_FACTOR_LOCAL,
3534 GR_COMBINE_LOCAL_ITERATED,
3535 GR_COMBINE_OTHER_TEXTURE);
3536 MULSHADE_1MENV ();
3537 USE_T0 ();
3538}
3539
3540static void cc_t1_mul_prim_mul_shade ()
3541{
3542 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3543 GR_COMBINE_FACTOR_LOCAL,
3544 GR_COMBINE_LOCAL_ITERATED,
3545 GR_COMBINE_OTHER_TEXTURE);
3546 MULSHADE_PRIM ();
3547 USE_T1 ();
3548}
3549
3550//Added by Gonetz
3551static void cc_t0_mul_1mprim_mul_shade ()
3552{
3553 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3554 GR_COMBINE_FACTOR_LOCAL,
3555 GR_COMBINE_LOCAL_ITERATED,
3556 GR_COMBINE_OTHER_TEXTURE);
3557 MULSHADE_1MPRIM ();
3558 USE_T0 ();
3559}
3560
3561static void cc_t0_mul_env_mul_shade ()
3562{
3563 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3564 GR_COMBINE_FACTOR_LOCAL,
3565 GR_COMBINE_LOCAL_ITERATED,
3566 GR_COMBINE_OTHER_TEXTURE);
3567 MULSHADE_ENV ();
3568 USE_T0 ();
3569}
3570
3571static void cc_t0_mul_scale_mul_shade ()
3572{
3573 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3574 GR_COMBINE_FACTOR_LOCAL,
3575 GR_COMBINE_LOCAL_ITERATED,
3576 GR_COMBINE_OTHER_TEXTURE);
3577 MULSHADE (rdp.SCALE);
3578 USE_T0 ();
3579}
3580
3581static void cc_t0_mul_shade_mul_shadea ()
3582{
3583 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3584 GR_COMBINE_FACTOR_LOCAL,
3585 GR_COMBINE_LOCAL_ITERATED,
3586 GR_COMBINE_OTHER_TEXTURE);
3587 MULSHADE_SHADEA ();
3588 USE_T0 ();
3589}
3590
3591static void cc_prim_mul_env_mul_shade ()
3592{
3593 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3594 GR_COMBINE_FACTOR_LOCAL,
3595 GR_COMBINE_LOCAL_CONSTANT,
3596 GR_COMBINE_OTHER_ITERATED);
3597 CC_ENV ();
3598 MULSHADE_PRIM ();
3599}
3600
3601static void cc_prim_mul_one_sub_env_mul_shade ()
3602{
3603 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3604 GR_COMBINE_FACTOR_LOCAL,
3605 GR_COMBINE_LOCAL_CONSTANT,
3606 GR_COMBINE_OTHER_ITERATED);
3607 CC_1SUBENV ();
3608 MULSHADE_PRIM ();
3609}
3610
3611// ** A*B*C+D **
3612static void cc_t0_mul_prim_mul_shade_add_env ()
3613{
3614 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3615 GR_COMBINE_FACTOR_TEXTURE_RGB,
3616 GR_COMBINE_LOCAL_CONSTANT,
3617 GR_COMBINE_OTHER_ITERATED);
3618 CC_ENV ();
3619 MULSHADE_PRIM ();
3620 USE_T0 ();
3621}
3622
3623//Added by Gonetz
3624static void cc_t0_mul_prim_mul_shadea_add_env ()
3625{
3626 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3627 GR_COMBINE_FACTOR_LOCAL_ALPHA,
3628 GR_COMBINE_LOCAL_ITERATED,
3629 GR_COMBINE_OTHER_TEXTURE);
3630 CC_ENV ();
3631 SETSHADE_ENV ();
3632 MULSHADE_A_PRIM ();
3633 USE_T0 ();
3634}
3635
3636// (A*B+C)*D
3637static void cc__t0_mul_prim_add_shade__mul_env ()
3638{
3639 if (cmb.combine_ext)
3640 {
3641 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3642 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
3643 GR_CMBX_TMU_CCOLOR, 0,
3644 GR_CMBX_B, 0);
3645 cmb.tex |= 1;
3646 cmb.tex_ccolor = rdp.prim_color;
3647 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3648 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
3649 GR_CMBX_CONSTANT_COLOR, 0,
3650 GR_CMBX_ZERO, 0);
3651 CC_ENV ();
3652 }
3653 else
3654 {
3655 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3656 GR_COMBINE_FACTOR_ONE,
3657 GR_COMBINE_LOCAL_ITERATED,
3658 GR_COMBINE_OTHER_TEXTURE);
3659 MULSHADE_ENV ();
3660 MOD_0 (TMOD_TEX_MUL_COL);
3661 CC_PRIMMULENV ();
3662 MOD_0_COL (cmb.ccolor & 0xFFFFFF00);
3663 USE_T0 ();
3664 }
3665}
3666
3667static void cc__t0a_mul_prim_add_t0__mul_shade ()
3668{
3669 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3670 GR_COMBINE_FACTOR_LOCAL,
3671 GR_COMBINE_LOCAL_ITERATED,
3672 GR_COMBINE_OTHER_TEXTURE);
3673 MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);
3674 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3675 USE_T0 ();
3676}
3677
3678static void cc__t0a_mul_env_add_t0__mul_shade ()
3679{
3680 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3681 GR_COMBINE_FACTOR_LOCAL,
3682 GR_COMBINE_LOCAL_ITERATED,
3683 GR_COMBINE_OTHER_TEXTURE);
3684 MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);
3685 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
3686 USE_T0 ();
3687}
3688
3689static void cc__prim_mul_shade_add_env__mul_shade () //Aded by Gonetz
3690{
3691 if (!cmb.combine_ext)
3692 {
3693 cc_prim_mul_shade_add_env ();
3694 return;
3695 }
3696 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
3697 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3698 GR_CMBX_ITRGB, 0,
3699 GR_CMBX_ZERO, 0);
3700 cmb.tex |= 1;
3701 cmb.tex_ccolor = rdp.prim_color;
3702 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3703 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3704 GR_CMBX_ITRGB, 0,
3705 GR_CMBX_ZERO, 0);
3706 CC_ENV ();
3707}
3708
3709// ** A*B*C+D*E **
3710//Added by Gonetz
3711static void cc__t0_sub_t1__mul_prim_mul_shade_add_prim_mul_env ()
3712{
3713 if (cmb.combine_ext)
3714 {
3715 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3716 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3717 GR_CMBX_ZERO, 0,
3718 GR_CMBX_B, 0);
3719 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3720 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
3721 GR_CMBX_ZERO, 1,
3722 GR_CMBX_ZERO, 0);
3723 cmb.tex |= 3;
3724 }
3725 else
3726 {
3727 USE_T0 ();
3728 }
3729
3730 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3731 GR_COMBINE_FACTOR_TEXTURE_RGB,
3732 GR_COMBINE_LOCAL_CONSTANT,
3733 GR_COMBINE_OTHER_ITERATED);
3734 CC_PRIMMULENV ();
3735 MULSHADE_PRIM ();
3736}
3737
3738static void cc__t0_mul_prim_mul_env__add__prim_mul_shade ()
3739{
3740 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3741 GR_COMBINE_FACTOR_TEXTURE_RGB,
3742 GR_COMBINE_LOCAL_ITERATED,
3743 GR_COMBINE_OTHER_CONSTANT);
3744 CC_PRIMMULENV ();
3745 MULSHADE_PRIM ();
3746 USE_T0 ();
3747}
3748
3749static void cc__t1_mul_prim_mul_env__add__prim_mul_shade ()
3750{
3751 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3752 GR_COMBINE_FACTOR_TEXTURE_RGB,
3753 GR_COMBINE_LOCAL_ITERATED,
3754 GR_COMBINE_OTHER_CONSTANT);
3755 CC_PRIMMULENV ();
3756 MULSHADE_PRIM ();
3757 USE_T1 ();
3758}
3759
3760//Added by Gonetz
3761static void cc_t0_mul_one_sub_prim_mul_shade_add_prim_mul_env ()
3762{
3763 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3764 GR_COMBINE_FACTOR_TEXTURE_RGB,
3765 GR_COMBINE_LOCAL_CONSTANT,
3766 GR_COMBINE_OTHER_ITERATED);
3767 CC_PRIMMULENV ();
3768 MULSHADE_1MPRIM ();
3769 USE_T0 ();
3770}
3771
3772//Added by Gonetz
3773static void cc_t0_mul_one_sub_prim_mul_shadea_add_prim_mul_env ()
3774{
3775 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3776 GR_COMBINE_FACTOR_TEXTURE_RGB,
3777 GR_COMBINE_LOCAL_CONSTANT,
3778 GR_COMBINE_OTHER_ITERATED);
3779 CC_PRIMMULENV ();
3780 SETSHADE_1MPRIM ();
3781 MULSHADE_SHADEA ();
3782 USE_T0 ();
3783}
3784
3785//Added by Gonetz
3786static void cc_t0_mul_one_sub_env_mul_shade_add_env ()
3787{
3788 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3789 GR_COMBINE_FACTOR_TEXTURE_RGB,
3790 GR_COMBINE_LOCAL_CONSTANT,
3791 GR_COMBINE_OTHER_ITERATED);
3792 CC_ENV ();
3793 MULSHADE_1MENV ();
3794 USE_T0 ();
3795}
3796
3797static void cc_t0_mul_prima_mul_shade_add_prim_mul_one_sub_prima () //Aded by Gonetz
3798{
3799 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3800 GR_COMBINE_FACTOR_TEXTURE_RGB,
3801 GR_COMBINE_LOCAL_CONSTANT,
3802 GR_COMBINE_OTHER_ITERATED);
3803 MULSHADE_PRIMA ();
3804 USE_T0 ();
3805 wxUint8 fac = 255 - (wxUint8)(rdp.prim_color&0xFF);
3806 float col[3];
3807 col[0] = (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f;
3808 col[1] = (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f;
3809 col[2] = (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f;
3810 CC ( ((wxUint8)(col[0]*fac))<<24 | ((wxUint8)(col[1]*fac))<<16 | ((wxUint8)(col[2]*fac))<<8 | fac );
3811}
3812
3813// ** A*(1-B)+C **
3814static void cc_t0_mul_1menv_add_prim ()
3815{
3816 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3817 GR_COMBINE_FACTOR_TEXTURE_RGB,
3818 GR_COMBINE_LOCAL_CONSTANT,
3819 GR_COMBINE_OTHER_ITERATED);
3820 CC_PRIM ();
3821 SETSHADE_1MENV ();
3822 USE_T0 ();
3823}
3824
3825// ** (A+B)*C **
3826static void cc_t0_mul_scale_add_prim__mul_shade () //Aded by Gonetz
3827{
3828 if (cmb.combine_ext)
3829 {
3830 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3831 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3832 GR_CMBX_TMU_CCOLOR, 0,
3833 GR_CMBX_ZERO, 0);
3834 cmb.tex |= 1;
3835 cmb.tex_ccolor = rdp.SCALE;
3836 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3837 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3838 GR_CMBX_ITRGB, 0,
3839 GR_CMBX_ZERO, 0);
3840 CC_PRIM ();
3841 }
3842 else
3843 {
3844 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3845 GR_COMBINE_FACTOR_LOCAL,
3846 GR_COMBINE_LOCAL_ITERATED,
3847 GR_COMBINE_OTHER_TEXTURE);
3848 MOD_0 (TMOD_TEX_ADD_COL);
3849 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3850 USE_T0 ();
3851 }
3852}
3853
3854static void cc__t0_mul_t1_add_prim__mul_shade () //Aded by Gonetz
3855{
3856 if (cmb.combine_ext)
3857 {
3858 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3859 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3860 GR_CMBX_ITRGB, 0,
3861 GR_CMBX_ZERO, 0);
3862 CC_PRIM ();
3863 }
3864 else
3865 {
3866 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3867 GR_COMBINE_FACTOR_LOCAL,
3868 GR_COMBINE_LOCAL_ITERATED,
3869 GR_COMBINE_OTHER_TEXTURE);
3870 MULSHADE_PRIM ();
3871 }
3872 T0_MUL_T1 ();
3873}
3874
3875static void cc_t0_mul__prim_add_env ()
3876{
3877 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3878 GR_COMBINE_FACTOR_LOCAL,
3879 GR_COMBINE_LOCAL_ITERATED,
3880 GR_COMBINE_OTHER_TEXTURE);
3881 SETSHADE_PRIM ();
3882 ADDSHADE_ENV ();
3883 USE_T0 ();
3884}
3885
3886static void cc_t0_mul__prim_mul_primlod_add_env () //Aded by Gonetz
3887{
3888 // forest behind window, Dobutsu no Mori.
3889 // (prim-0)*prim_lod+env, (t1-0)*cmb+0
3890 //actually, the game uses t0 instead of t1 here. t1 does not set at all this moment.
3891 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3892 GR_COMBINE_FACTOR_LOCAL,
3893 GR_COMBINE_LOCAL_ITERATED,
3894 GR_COMBINE_OTHER_TEXTURE);
3895 float prim_lod = rdp.prim_lodfrac / 65025.0f;
3896 rdp.col[0] *= ((rdp.prim_color & 0xFF000000) >> 24) * prim_lod;
3897 rdp.col[1] *= ((rdp.prim_color & 0x00FF0000) >> 16) * prim_lod;
3898 rdp.col[2] *= ((rdp.prim_color & 0x0000FF00) >> 8) * prim_lod;
3899 rdp.cmb_flags = CMB_SET;
3900 ADDSHADE_ENV ();
3901 USE_T0 ();
3902}
3903
3904// ** (A-B)*C **
3905static void cc__t0_mul_prim_add_shade__sub_env_mul_shade ()
3906{
3907 if (cmb.combine_ext)
3908 {
3909 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3910 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
3911 GR_CMBX_TMU_CCOLOR, 0,
3912 GR_CMBX_B, 0);
3913 cmb.tex_ccolor = rdp.prim_color;
3914 cmb.tex |= 1;
3915 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3916 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3917 GR_CMBX_ITRGB, 0,
3918 GR_CMBX_ZERO, 0);
3919 CC_ENV ();
3920 }
3921 else
3922 {
3923 cc_t0_mul_prim_mul_shade ();
3924 }
3925}
3926
3927static void cc_t0_sub_prim_mul_shadea () //Aded by Gonetz
3928{
3929 // * not guaranteed to work if another iterated alpha is set
3930 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
3931 GR_COMBINE_FACTOR_LOCAL_ALPHA,
3932 GR_COMBINE_LOCAL_ITERATED,
3933 GR_COMBINE_OTHER_TEXTURE);
3934 SETSHADE_PRIM ();
3935 USE_T0 ();
3936}
3937
3938static void cc__t0_sub_env_mul_shade__sub_prim_mul_shade ()
3939{
3940 if (cmb.combine_ext)
3941 {
3942 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3943 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
3944 GR_CMBX_ITRGB, 0,
3945 GR_CMBX_ZERO, 0);
3946 cmb.tex_ccolor = rdp.env_color;
3947 cmb.tex |= 1;
3948 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3949 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3950 GR_CMBX_ITRGB, 0,
3951 GR_CMBX_ITRGB, 0);
3952 CC_PRIM ();
3953 }
3954 else
3955 {
3956 cc_t0_mul_shade ();
3957 }
3958}
3959
3960static void cc_t0_sub_prim_mul_shade ()
3961{
3962 if (cmb.combine_ext)
3963 {
3964 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3965 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3966 GR_CMBX_ITRGB, 0,
3967 GR_CMBX_ZERO, 0);
3968 CC_PRIM ();
3969 }
3970 else
3971 {
3972 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3973 GR_COMBINE_FACTOR_LOCAL,
3974 GR_COMBINE_LOCAL_ITERATED,
3975 GR_COMBINE_OTHER_TEXTURE);
3976 if (rdp.prim_color & 0xFFFFFF00)
3977 {
3978 MOD_0 (TMOD_TEX_SUB_COL);
3979 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3980 }
3981 }
3982 USE_T0 ();
3983}
3984
3985static void cc__t0_mul_t1__sub_prim_mul_shade ()
3986{
3987 if (cmb.combine_ext)
3988 {
3989 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3990 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3991 GR_CMBX_ITRGB, 0,
3992 GR_CMBX_ZERO, 0);
3993 CC_PRIM ();
3994 }
3995 else
3996 {
3997 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3998 GR_COMBINE_FACTOR_LOCAL,
3999 GR_COMBINE_LOCAL_ITERATED,
4000 GR_COMBINE_OTHER_TEXTURE);
4001 }
4002 T0_MUL_T1 ();
4003}
4004
4005static void cc_t0_sub_env_mul_shade ()
4006{
4007 if (cmb.combine_ext)
4008 {
4009 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4010 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
4011 GR_CMBX_ITRGB, 0,
4012 GR_CMBX_ZERO, 0);
4013 CC_ENV ();
4014 }
4015 else
4016 {
4017 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4018 GR_COMBINE_FACTOR_LOCAL,
4019 GR_COMBINE_LOCAL_ITERATED,
4020 GR_COMBINE_OTHER_TEXTURE);
4021 if (rdp.env_color & 0xFFFFFF00)
4022 {
4023 MOD_0 (TMOD_TEX_SUB_COL);
4024 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4025 }
4026 }
4027 USE_T0 ();
4028}
4029
4030static void cc__t0_mul_prima_add_t0__sub_center_mul_scale ()
4031{
4032 if (cmb.combine_ext)
4033 {
4034 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4035 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4036 GR_CMBX_TMU_CCOLOR, 0,
4037 GR_CMBX_B, 0);
4038 wxUint32 prima = rdp.prim_color&0xFF;
4039 cmb.tex_ccolor = (prima<<24)|(prima<<16)|(prima<<8)|prima;
4040 cmb.tex |= 1;
4041 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4042 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
4043 GR_CMBX_ITRGB, 0,
4044 GR_CMBX_ZERO, 0);
4045 CC(rdp.CENTER);
4046 SETSHADE(rdp.SCALE);
4047 }
4048 else
4049 {
4050 cc_t0_mul_prima();
4051 }
4052}
4053
4054static void cc__t1_inter_t0_using_primlod__sub_shade_mul_prim ()
4055{
4056 if (cmb.combine_ext)
4057 {
4058 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4059 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4060 GR_CMBX_CONSTANT_COLOR, 0,
4061 GR_CMBX_ZERO, 0);
4062 CC_PRIM ();
4063 }
4064 else
4065 {
4066 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4067 GR_COMBINE_FACTOR_ONE,
4068 GR_COMBINE_LOCAL_ITERATED,
4069 GR_COMBINE_OTHER_TEXTURE);
4070 MULSHADE_PRIM ();
4071 }
4072 T1_INTER_T0_USING_FACTOR (lod_frac);
4073}
4074
4075static void cc__t0_inter_t1_using_enva__sub_shade_mul_prim ()
4076{
4077 if (cmb.combine_ext)
4078 {
4079 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4080 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4081 GR_CMBX_CONSTANT_COLOR, 0,
4082 GR_CMBX_ZERO, 0);
4083 CC_PRIM ();
4084 }
4085 else
4086 {
4087 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4088 GR_COMBINE_FACTOR_ONE,
4089 GR_COMBINE_LOCAL_ITERATED,
4090 GR_COMBINE_OTHER_TEXTURE);
4091 MULSHADE_PRIM ();
4092 }
4093 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
4094 T0_INTER_T1_USING_FACTOR (factor);
4095}
4096
4097static void cc_t0_sub_shade_mul_shadea () //Aded by Gonetz
4098{
4099 // * not guaranteed to work if another iterated alpha is set
4100 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4101 GR_COMBINE_FACTOR_LOCAL_ALPHA,
4102 GR_COMBINE_LOCAL_ITERATED,
4103 GR_COMBINE_OTHER_TEXTURE);
4104 USE_T0 ();
4105}
4106
4107static void cc_one_sub_t0_mul_prim () //Added by Gonetz
4108{
4109 CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
4110 GR_COMBINE_FACTOR_TEXTURE_RGB,
4111 GR_COMBINE_LOCAL_CONSTANT,
4112 GR_COMBINE_OTHER_NONE);
4113 CC_PRIM ();
4114 USE_T0 ();
4115}
4116
4117static void cc_one_sub_prim_mul_prima () //Added by Gonetz
4118{
4119 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4120 GR_COMBINE_FACTOR_LOCAL,
4121 GR_COMBINE_LOCAL_ITERATED,
4122 GR_COMBINE_OTHER_CONSTANT);
4123 CC (~rdp.prim_color);
4124 SETSHADE_PRIMA ();
4125}
4126
4127static void cc_shade_sub_prim_mul_t0 () //Aded by Gonetz
4128{
4129 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4130 GR_COMBINE_FACTOR_TEXTURE_RGB,
4131 GR_COMBINE_LOCAL_CONSTANT,
4132 GR_COMBINE_OTHER_ITERATED);
4133 CC_PRIM ();
4134 USE_T0 ();
4135}
4136
4137static void cc_shade_sub_prim_mul_env () //Aded by Gonetz
4138{
4139 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4140 GR_COMBINE_FACTOR_LOCAL,
4141 GR_COMBINE_LOCAL_CONSTANT,
4142 GR_COMBINE_OTHER_ITERATED);
4143 CC_ENV ();
4144 SUBSHADE_PRIM ();
4145}
4146
4147static void cc_shade_sub_env_mul_t0 () //Aded by Gonetz
4148{
4149 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4150 GR_COMBINE_FACTOR_TEXTURE_RGB,
4151 GR_COMBINE_LOCAL_CONSTANT,
4152 GR_COMBINE_OTHER_ITERATED);
4153 CC_ENV ();
4154 USE_T0 ();
4155}
4156
4157static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
4158{
4159 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4160 GR_COMBINE_FACTOR_TEXTURE_RGB,
4161 GR_COMBINE_LOCAL_CONSTANT,
4162 GR_COMBINE_OTHER_ITERATED);
4163 CC_PRIM ();
4164 T0_INTER_T1_USING_FACTOR (lod_frac);
4165}
4166
4167static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
4168{
4169 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4170 GR_COMBINE_FACTOR_TEXTURE_RGB,
4171 GR_COMBINE_LOCAL_CONSTANT,
4172 GR_COMBINE_OTHER_ITERATED);
4173 CC_ENV ();
4174 T0_INTER_T1_USING_FACTOR (lod_frac);
4175}
4176
4177static void cc_shade_sub_env_mul_prim () //Aded by Gonetz
4178{
4179 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4180 GR_COMBINE_FACTOR_LOCAL,
4181 GR_COMBINE_LOCAL_CONSTANT,
4182 GR_COMBINE_OTHER_ITERATED);
4183 CC_PRIM();
4184 SUBSHADE_ENV ();
4185}
4186
4187static void cc_shade_sub__prim_mul_prima () //Aded by Gonetz
4188{
4189 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4190 GR_COMBINE_FACTOR_ONE,
4191 GR_COMBINE_LOCAL_CONSTANT,
4192 GR_COMBINE_OTHER_ITERATED);
4193 CC_C1MULC2 (rdp.prim_color, (rdp.prim_color&0xFF));
4194}
4195
4196static void cc_one_sub__t0_mul_t1__mul_shade () //Aded by Gonetz
4197{
4198 CCMB (GR_COMBINE_FUNCTION_BLEND,
4199 GR_COMBINE_FACTOR_TEXTURE_RGB,
4200 GR_COMBINE_LOCAL_ITERATED,
4201 GR_COMBINE_OTHER_CONSTANT);
4202 CC (0);
4203 T0_MUL_T1 ();
4204}
4205
4206static void cc_one_sub__t0_mul_shadea__mul_shade () //Aded by Gonetz
4207{
4208 if (cmb.combine_ext)
4209 {
4210 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4211 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4212 GR_CMBX_ITALPHA, 0,
4213 GR_CMBX_ZERO, 0);
4214 cmb.tex |= 1;
4215
4216 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
4217 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
4218 GR_CMBX_ITRGB, 0,
4219 GR_CMBX_ZERO, 0);
4220 }
4221 else
4222 {
4223 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4224 GR_COMBINE_FACTOR_LOCAL,
4225 GR_COMBINE_LOCAL_ITERATED,
4226 GR_COMBINE_OTHER_TEXTURE);
4227 USE_T0 ();
4228 cmb.tmu0_invert = TRUE;
4229 }
4230}
4231
4232static void cc_one_sub_env_mul_t0 () //Aded by Gonetz
4233{
4234 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4235 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4236 GR_COMBINE_LOCAL_CONSTANT,
4237 GR_COMBINE_OTHER_TEXTURE);
4238 CC_ENV ();
4239 USE_T0 ();
4240}
4241
4242static void cc_one_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
4243{
4244 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4245 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4246 GR_COMBINE_LOCAL_CONSTANT,
4247 GR_COMBINE_OTHER_TEXTURE);
4248 CC_ENV ();
4249 T0_INTER_T1_USING_FACTOR (lod_frac);
4250}
4251
4252static void cc_one_sub_env_mul_prim () //Aded by Gonetz
4253{
4254 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4255 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4256 GR_COMBINE_LOCAL_CONSTANT,
4257 GR_COMBINE_OTHER_ITERATED);
4258 CC_ENV ();
4259 SETSHADE_PRIM ();
4260}
4261
4262static void cc_one_sub_env_mul_shade () //Aded by Gonetz
4263{
4264 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4265 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4266 GR_COMBINE_LOCAL_CONSTANT,
4267 GR_COMBINE_OTHER_ITERATED);
4268 CC_ENV ();
4269}
4270
4271// ** (1-A)*B + A*C **
4272static void cc_t0_mul_env_add_1mt0_mul_shade ()
4273{
4274 CCMB (GR_COMBINE_FUNCTION_BLEND,
4275 GR_COMBINE_FACTOR_TEXTURE_RGB,
4276 GR_COMBINE_LOCAL_ITERATED,
4277 GR_COMBINE_OTHER_CONSTANT);
4278 CC_ENV ();
4279 USE_T0 ();
4280}
4281
4282// ** (1-A)*B+C **
4283static void cc_one_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade () //Added by Gonetz
4284{
4285 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4286 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4287 GR_COMBINE_LOCAL_ITERATED,
4288 GR_COMBINE_OTHER_TEXTURE);
4289 T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
4290}
4291
4292// ** (1-A)*B*C **
4293static void cc_one_sub_t0_mul_prim_mul_shade () //Added by Gonetz
4294{
4295 CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
4296 GR_COMBINE_FACTOR_TEXTURE_RGB,
4297 GR_COMBINE_LOCAL_ITERATED,
4298 GR_COMBINE_OTHER_NONE);
4299 MULSHADE_PRIM ();
4300 USE_T0 ();
4301}
4302
4303// ** (A-B)*C*D **
4304static void cc_prim_sub_env_mul_t0_mul_shade ()
4305{
4306 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4307 GR_COMBINE_FACTOR_TEXTURE_RGB,
4308 GR_COMBINE_LOCAL_NONE,
4309 GR_COMBINE_OTHER_ITERATED);
4310 MULSHADE_PRIMSUBENV ();
4311 USE_T0 ();
4312}
4313
4314// ** (A-B)*C+D **
4315static void cc_t0_sub_t1_mul_prim_mul_shade_add_t1 () //Aded by Gonetz
4316{
4317 if (cmb.combine_ext)
4318 {
4319 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4320 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4321 GR_CMBX_ZERO, 0,
4322 GR_CMBX_B, 0);
4323 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4324 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
4325 GR_CMBX_ITRGB, 0,
4326 GR_CMBX_B, 0);
4327 cmb.tex |= 3;
4328 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4329 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4330 GR_CMBX_ZERO, 1,
4331 GR_CMBX_ZERO, 0);
4332 MULSHADE_PRIM ();
4333 }
4334 else
4335 {
4336 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4337 GR_COMBINE_FACTOR_LOCAL,
4338 GR_COMBINE_LOCAL_CONSTANT,
4339 GR_COMBINE_OTHER_TEXTURE);
4340 CC_PRIM ();
4341 T0_ADD_T1 ();
4342 }
4343}
4344
4345static void cc_t0_sub_prim_mul_t0a_add_prim () //Aded by Gonetz
4346{
4347 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4348 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
4349 GR_COMBINE_LOCAL_CONSTANT,
4350 GR_COMBINE_OTHER_TEXTURE);
4351 CC_PRIM ();
4352 USE_T0 ();
4353}
4354
4355static void cc_t0_sub_prim_mul_t1_add_shade () //Aded by Gonetz
4356{
4357 if (cmb.combine_ext)
4358 {
4359 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4360 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4361 GR_CMBX_ZERO, 0,
4362 GR_CMBX_B, 0);
4363 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4364 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4365 GR_CMBX_OTHER_TEXTURE_RGB, 0,
4366 GR_CMBX_ZERO, 0);
4367 cmb.tex |= 3;
4368 cmb.tex_ccolor = rdp.prim_color;
4369 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4370 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4371 GR_CMBX_ZERO, 1,
4372 GR_CMBX_B, 0);
4373 }
4374 else
4375 {
4376 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4377 GR_COMBINE_FACTOR_ONE,
4378 GR_COMBINE_LOCAL_ITERATED,
4379 GR_COMBINE_OTHER_TEXTURE);
4380 MOD_0 (TMOD_TEX_SUB_COL);
4381 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4382 T0_MUL_T1 ();
4383 }
4384}
4385
4386static void cc_t0_sub_prim_mul_primlod_add_prim () //Aded by Gonetz
4387{
4388 if (cmb.combine_ext)
4389 {
4390 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4391 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4392 GR_CMBX_CONSTANT_COLOR, 0,
4393 GR_CMBX_B, 0);
4394 SETSHADE_PRIM ();
4395 CC_PRIMLOD ();
4396 }
4397 else
4398 {
4399 // * not guaranteed to work if another iterated alpha is set
4400 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4401 GR_COMBINE_FACTOR_TEXTURE_RGB,
4402 GR_COMBINE_LOCAL_ITERATED,
4403 GR_COMBINE_OTHER_CONSTANT);
4404 SETSHADE_PRIM ();
4405 SETSHADE_1MPRIMLOD ();
4406 CC_PRIMLOD ();
4407 }
4408 USE_T0 ();
4409}
4410
4411static void cc_t0_sub_prim_mul_prima_add_prim () //Aded by Gonetz
4412{
4413 // * not guaranteed to work if another iterated alpha is set
4414 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4415 GR_COMBINE_FACTOR_TEXTURE_RGB,
4416 GR_COMBINE_LOCAL_ITERATED,
4417 GR_COMBINE_OTHER_CONSTANT);
4418 SETSHADE_PRIM ();
4419 SETSHADE_1MPRIMA ();
4420 CC_PRIMA ();
4421 USE_T0 ();
4422}
4423
4424static void cc_t0_sub_prim_mul_shadea_add_prim () //Aded by Gonetz
4425{
4426 // * not guaranteed to work if another iterated alpha is set
4427 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4428 GR_COMBINE_FACTOR_LOCAL_ALPHA,
4429 GR_COMBINE_LOCAL_ITERATED,
4430 GR_COMBINE_OTHER_TEXTURE);
4431 SETSHADE_PRIM ();
4432 USE_T0 ();
4433}
4434
4435static void cc_t0_sub_prim_mul_env_add_shade () //Aded by Gonetz
4436{
4437 if (cmb.combine_ext)
4438 {
4439 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4440 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4441 GR_CMBX_ZERO, 1,
4442 GR_CMBX_ZERO, 0);
4443 cmb.tex |= 1;
4444 cmb.tex_ccolor = rdp.prim_color;
4445 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4446 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4447 GR_CMBX_CONSTANT_COLOR, 0,
4448 GR_CMBX_B, 0);
4449 CC_ENV ();
4450 }
4451 else
4452 {
4453 cc_t0_mul_env_add_shade ();
4454 }
4455}
4456
4457static void cc__t0_inter_t1_using_shadea__sub_prim_mul_env_add_shade () //Aded by Gonetz
4458{
4459 if (cmb.combine_ext)
4460 {
4461 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4462 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4463 GR_CMBX_CONSTANT_COLOR, 0,
4464 GR_CMBX_B, 0);
4465 //have to pass shade alpha to combiner
4466 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
4467 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
4468 GR_CMBX_ZERO, 0,
4469 GR_CMBX_ZERO, 0);
4470 }
4471 else
4472 {
4473 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4474 GR_COMBINE_FACTOR_TEXTURE_RGB,
4475 GR_COMBINE_LOCAL_ITERATED,
4476 GR_COMBINE_OTHER_CONSTANT);
4477 }
4478 CC_ENV ();
4479 SUBSHADE_PRIMMULENV ();
4480 T0_INTER_T1_USING_SHADEA ();
4481}
4482
4483
4484static void cc_t0_sub_prim_mul_env_add_prim () //Aded by Gonetz
4485{
4486 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4487 GR_COMBINE_FACTOR_TEXTURE_RGB,
4488 GR_COMBINE_LOCAL_ITERATED,
4489 GR_COMBINE_OTHER_CONSTANT);
4490 CC_ENV ();
4491 SETSHADE_PRIM ();
4492 SETSHADE_1MENV ();
4493 USE_T0 ();
4494}
4495
4496static void cc_t0_sub_prim_mul_enva_add_prim () //Aded by Gonetz41
4497{
4498 if (cmb.combine_ext)
4499 {
4500 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4501 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4502 GR_CMBX_CONSTANT_COLOR, 0,
4503 GR_CMBX_B, 0);
4504 SETSHADE_PRIM ();
4505 CC_ENVA ();
4506 }
4507 else
4508 {
4509 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4510 GR_COMBINE_FACTOR_ONE,
4511 GR_COMBINE_LOCAL_CONSTANT,
4512 GR_COMBINE_OTHER_TEXTURE);
4513 CC_PRIM ();
4514 MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
4515 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4516 MOD_0_FAC (rdp.env_color & 0xFF);
4517 }
4518 USE_T0 ();
4519}
4520
4521static void cc_t0_sub_prim_mul_primlod_add_env () //Aded by Gonetz
4522{
4523 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4524 GR_COMBINE_FACTOR_ONE,
4525 GR_COMBINE_LOCAL_CONSTANT,
4526 GR_COMBINE_OTHER_TEXTURE);
4527 CC_ENV ();
4528 MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
4529 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4530 MOD_0_FAC (lod_frac & 0xFF);
4531 USE_T0 ();
4532}
4533
4534static void cc_t0_sub__prim_mul_env () //Aded by Gonetz
4535{
4536 if ( (rdp.prim_color & 0xFFFFFF00) == 0xFFFFFF00 && (rdp.env_color & 0xFFFFFF00) == 0xFFFFFF00)
4537 {
4538 CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
4539 GR_COMBINE_FACTOR_TEXTURE_RGB,
4540 GR_COMBINE_LOCAL_CONSTANT,
4541 GR_COMBINE_OTHER_NONE);
4542 CC_PRIM ();
4543 }
4544 else
4545 {
4546 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4547 GR_COMBINE_FACTOR_ONE,
4548 GR_COMBINE_LOCAL_ITERATED,
4549 GR_COMBINE_OTHER_TEXTURE);
4550 SETSHADE_PRIM ();
4551 SETSHADE_ENV ();
4552 }
4553 USE_T0 ();
4554}
4555
4556static void cc__t0_mul_t1__sub_prim_mul__t0t1a__add_prim () //Aded by Gonetz
4557{
4558 // * not guaranteed to work if another iterated alpha is set
4559 CCMB (GR_COMBINE_FUNCTION_BLEND,
4560 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
4561 GR_COMBINE_LOCAL_CONSTANT,
4562 GR_COMBINE_OTHER_TEXTURE);
4563 CC_PRIM ();
4564 T0_MUL_T1 ();
4565 A_T0_MUL_T1 ();
4566}
4567
4568static void cc__t1_inter_t0_using_enva__sub_prim_mul_prima_add_prim () //Aded by Gonetz
4569{
4570 // * not guaranteed to work if another iterated alpha is set
4571 CCMB (GR_COMBINE_FUNCTION_BLEND,
4572 GR_COMBINE_FACTOR_LOCAL_ALPHA,
4573 GR_COMBINE_LOCAL_CONSTANT,
4574 GR_COMBINE_OTHER_TEXTURE);
4575 CC_PRIM ();
4576 CA_PRIM ();
4577 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
4578 T1_INTER_T0_USING_FACTOR (factor);
4579}
4580
4581static void cc_t0_sub_prim_mul_shade_add_env ()
4582{
4583 if (cmb.combine_ext)
4584 {
4585 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4586 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4587 GR_CMBX_ZERO, 1,
4588 GR_CMBX_ZERO, 0);
4589 cmb.tex |= 1;
4590 cmb.tex_ccolor = rdp.prim_color;
4591 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4592 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
4593 GR_CMBX_ITRGB, 0,
4594 GR_CMBX_B, 0);
4595 CC_ENV ();
4596 }
4597 else
4598 {
4599 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4600 GR_COMBINE_FACTOR_TEXTURE_RGB,
4601 GR_COMBINE_LOCAL_CONSTANT,
4602 GR_COMBINE_OTHER_ITERATED);
4603 CC_ENV ();
4604 MOD_0 (TMOD_TEX_SUB_COL);
4605 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4606 USE_T0 ();
4607 }
4608}
4609
4610static void cc_t1_sub_prim_mul_shade_add_env ()
4611{
4612 if (cmb.combine_ext)
4613 {
4614 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4615 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4616 GR_CMBX_ZERO, 1,
4617 GR_CMBX_ZERO, 0);
4618 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
4619 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4620 GR_CMBX_ZERO, 1,
4621 GR_CMBX_ZERO, 0);
4622 cmb.tex |= 2;
4623 cmb.tex_ccolor = rdp.prim_color;
4624 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4625 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
4626 GR_CMBX_ITRGB, 0,
4627 GR_CMBX_B, 0);
4628 CC_ENV ();
4629 }
4630 else
4631 {
4632 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4633 GR_COMBINE_FACTOR_TEXTURE_RGB,
4634 GR_COMBINE_LOCAL_CONSTANT,
4635 GR_COMBINE_OTHER_ITERATED);
4636 CC_ENV ();
4637 MOD_1 (TMOD_TEX_SUB_COL);
4638 MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
4639 USE_T1 ();
4640 }
4641}
4642
4643static void cc_t1_sub_k4_mul_prima_add_t0 ()
4644{
4645 if (cmb.combine_ext)
4646 {
4647 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4648 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4649 GR_CMBX_DETAIL_FACTOR, 1,
4650 GR_CMBX_ZERO, 0);
4651 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
4652 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4653 GR_CMBX_ZERO, 1,
4654 GR_CMBX_ZERO, 0);
4655 cmb.tex |= 3;
4656 CC_BYTE (rdp.K4);
4657 cmb.tex_ccolor = cmb.ccolor;
4658 percent = (float)(rdp.prim_color&0xFF) / 255.0f;
4659 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
4660 CCMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
4661 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4662 GR_CMBX_CONSTANT_COLOR, 0,
4663 GR_CMBX_B, 0);
4664 }
4665 else
4666 {
4667 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4668 GR_COMBINE_FACTOR_ONE,
4669 GR_COMBINE_LOCAL_NONE,
4670 GR_COMBINE_OTHER_TEXTURE);
4671 T0_ADD_T1 ();
4672 }
4673}
4674
4675static void cc__t0_sub_prim_mul_shade_add_env__mul_shade ()
4676{
4677 if (cmb.combine_ext)
4678 {
4679 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4680 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4681 GR_CMBX_ITRGB, 0,
4682 GR_CMBX_ZERO, 0);
4683 cmb.tex |= 1;
4684 cmb.tex_ccolor = rdp.prim_color;
4685 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4686 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4687 GR_CMBX_ITRGB, 0,
4688 GR_CMBX_ZERO, 0);
4689 CC_ENV ();
4690 }
4691 else
4692 {
4693 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4694 GR_COMBINE_FACTOR_TEXTURE_RGB,
4695 GR_COMBINE_LOCAL_CONSTANT,
4696 GR_COMBINE_OTHER_ITERATED);
4697 CC_ENV ();
4698 MOD_0 (TMOD_TEX_SUB_COL);
4699 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4700 USE_T0 ();
4701 }
4702}
4703
4704static void cc__t0_sub_prim_mul_shade_add_env__mul_shadea ()
4705{
4706 if (cmb.combine_ext)
4707 {
4708 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4709 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4710 GR_CMBX_ITRGB, 0,
4711 GR_CMBX_ZERO, 0);
4712 cmb.tex |= 1;
4713 cmb.tex_ccolor = rdp.prim_color;
4714 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4715 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4716 GR_CMBX_ITALPHA, 0,
4717 GR_CMBX_ZERO, 0);
4718 CC_ENV ();
4719 }
4720 else
4721 {
4722 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4723 GR_COMBINE_FACTOR_TEXTURE_RGB,
4724 GR_COMBINE_LOCAL_CONSTANT,
4725 GR_COMBINE_OTHER_ITERATED);
4726 MULSHADE_SHADEA();
4727 CC_ENV ();
4728 MOD_0 (TMOD_TEX_SUB_COL);
4729 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4730 USE_T0 ();
4731 }
4732}
4733
4734static void cc__t0_mul_shade__sub_env_mul_shadea_add_env () //Aded by Gonetz
4735{
4736 if (rdp.tiles[rdp.cur_tile].format == 4)
4737 {
4738 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4739 GR_COMBINE_FACTOR_OTHER_ALPHA,
4740 GR_COMBINE_LOCAL_CONSTANT,
4741 GR_COMBINE_OTHER_ITERATED);
4742 CC_ENV ();
4743 }
4744 else if (rdp.tiles[rdp.cur_tile].format == 2)
4745 {
4746 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4747 GR_COMBINE_FACTOR_LOCAL,
4748 GR_COMBINE_LOCAL_ITERATED,
4749 GR_COMBINE_OTHER_TEXTURE);
4750 USE_T0 ();
4751 }
4752 else
4753 {
4754 cc_t0 ();
4755 }
4756}
4757
4758static void cc_t0_sub_env_mul_k5_add_prim () //Aded by Gonetz
4759{
4760 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4761 GR_COMBINE_FACTOR_ONE,
4762 GR_COMBINE_LOCAL_CONSTANT,
4763 GR_COMBINE_OTHER_TEXTURE);
4764 CC_PRIM ();
4765 MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
4766 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4767 MOD_0_FAC (rdp.K5);
4768 USE_T0 ();
4769}
4770
4771static void cc_t0_sub_k4_mul_k5_add_t0 () //Aded by Gonetz
4772{
4773 if (cmb.combine_ext)
4774 {
4775 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4776 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4777 GR_CMBX_CONSTANT_COLOR, 0,
4778 GR_CMBX_B, 0);
4779 wxUint32 temp = rdp.prim_lodfrac;
4780 rdp.prim_lodfrac = rdp.K4;
4781 SETSHADE_PRIMLOD ();
4782 rdp.prim_lodfrac = temp;
4783 CC_K5 ();
4784 USE_T0 ();
4785 }
4786 else
4787 {
4788 cc_t0 ();
4789 }
4790}
4791
4792static void cc__t0_inter_t1_using_t0__sub_shade_mul_prima_add_shade () //Aded by Gonetz
4793{
4794 if (cmb.combine_ext)
4795 {
4796 cmb.tex |= 3;
4797 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4798 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4799 GR_CMBX_CONSTANT_COLOR, 0,
4800 GR_CMBX_B, 0);
4801 CC_PRIMA();
4802 T0_INTER_T1_USING_T0 ();
4803 }
4804 else
4805 {
4806 // * not guaranteed to work if another iterated alpha is set
4807 CCMB (GR_COMBINE_FUNCTION_BLEND,
4808 GR_COMBINE_FACTOR_LOCAL_ALPHA,
4809 GR_COMBINE_LOCAL_ITERATED,
4810 GR_COMBINE_OTHER_TEXTURE);
4811 SETSHADE_A_PRIM ();
4812 T1_INTER_T0_USING_T0 (); //strange, but this one looks better
4813 }
4814}
4815
4816static void cc_t0_sub__prim_mul_shade__mul_enva_add__prim_mul_shade () //Aded by Gonetz
4817{
4818 // * not guaranteed to work if another iterated alpha is set
4819 CCMB (GR_COMBINE_FUNCTION_BLEND,
4820 GR_COMBINE_FACTOR_LOCAL_ALPHA,
4821 GR_COMBINE_LOCAL_ITERATED,
4822 GR_COMBINE_OTHER_TEXTURE);
4823 MULSHADE_PRIM ();
4824 SETSHADE_A_ENV ();
4825 USE_T0 ();
4826}
4827
4828static void cc_t0_sub_env_mul_t0_add_env () //Aded by Gonetz
4829{
4830 CCMB (GR_COMBINE_FUNCTION_BLEND,
4831 GR_COMBINE_FACTOR_TEXTURE_RGB,
4832 GR_COMBINE_LOCAL_CONSTANT,
4833 GR_COMBINE_OTHER_TEXTURE);
4834 CC_ENV ();
4835 USE_T0 ();
4836 //(t0-env)*t0+env = t0*t0 + (1-t0)*env
4837}
4838
4839static void cc_t0_sub_env_mul_prima_add_env () //Aded by Gonetz
4840{
4841 if (cmb.combine_ext)
4842 {
4843 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4844 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4845 GR_CMBX_DETAIL_FACTOR, 0,
4846 GR_CMBX_B, 0);
4847 cmb.tex |= 1;
4848 percent = (rdp.prim_color&0xFF) / 255.0f;
4849 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
4850 }
4851 else
4852 {
4853 MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
4854 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4855 wxUint32 prima = rdp.prim_color & 0xFF;
4856 MOD_0_COL1 ((prima<<24)|(prima|16)|(prima<<8));
4857 USE_T0 ();
4858 }
4859 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4860 GR_COMBINE_FACTOR_ONE,
4861 GR_COMBINE_LOCAL_NONE,
4862 GR_COMBINE_OTHER_TEXTURE);
4863}
4864
4865static void cc_t0_sub_env_mul_k5_add_env () //Aded by Gonetz
4866{
4867 CCMB (GR_COMBINE_FUNCTION_BLEND,
4868 GR_COMBINE_FACTOR_LOCAL_ALPHA,
4869 GR_COMBINE_LOCAL_CONSTANT,
4870 GR_COMBINE_OTHER_TEXTURE);
4871 cmb.ccolor = (rdp.env_color&0xFFFFFF00) | rdp.K5;
4872 USE_T0 ();
4873}
4874
4875static void cc_t0_sub_env_mul_prim_add_shade () //Aded by Gonetz
4876{
4877 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4878 GR_COMBINE_FACTOR_TEXTURE_RGB,
4879 GR_COMBINE_LOCAL_ITERATED,
4880 GR_COMBINE_OTHER_CONSTANT);
4881 CC_PRIM ();
4882 MOD_0 (TMOD_TEX_SUB_COL);
4883 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4884 USE_T0 ();
4885}
4886
4887static void cc_t0_sub_env_mul_shade_add_prim () //Aded by Gonetz
4888{
4889 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4890 GR_COMBINE_FACTOR_TEXTURE_RGB,
4891 GR_COMBINE_LOCAL_CONSTANT,
4892 GR_COMBINE_OTHER_ITERATED);
4893 CC_PRIM ();
4894 if (cmb.combine_ext)
4895 {
4896 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4897 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4898 GR_CMBX_ZERO, 1,
4899 GR_CMBX_ZERO, 0);
4900 cmb.tex |= 1;
4901 cmb.tex_ccolor = rdp.env_color;
4902 }
4903 else
4904 {
4905 MOD_0 (TMOD_TEX_SUB_COL);
4906 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4907 USE_T0 ();
4908 }
4909}
4910
4911static void cc__t0_sub_t1_mul_enva_add_shade__sub_env_mul_prim ()
4912// (t0-t1)*env_a+shade, (cmb-env)*prim+0
4913{
4914 if (cmb.combine_ext)
4915 {
4916 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4917 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4918 GR_CMBX_ZERO, 0,
4919 GR_CMBX_B, 0);
4920 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4921 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
4922 GR_CMBX_TMU_CCOLOR, 0,
4923 GR_CMBX_ITRGB, 0);
4924 cmb.tex |= 3;
4925 CC_COLMULBYTE(rdp.prim_color, (rdp.env_color&0xFF));
4926 cmb.tex_ccolor = cmb.ccolor;
4927 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
4928 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4929 GR_CMBX_ZERO, 1,
4930 GR_CMBX_TEXTURE_RGB, 0);
4931 MULSHADE_PRIM ();
4932 CC_PRIMMULENV ();
4933 }
4934 else
4935 {
4936 cc_t0_sub_env_mul_prim_add_shade();
4937 }
4938}
4939
4940static void cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_prim () //Aded by Gonetz
4941{
4942 if (!(rdp.env_color&0xFFFFFF00))
4943 {
4944 cc__t0_inter_t1_using_primlod__mul_shade_add_prim ();
4945 return;
4946 }
4947 if (!(rdp.prim_color&0xFFFFFF00))
4948 {
4949 if (!cmb.combine_ext)
4950 {
4951 cc_t0_sub_env_mul_shade ();
4952 return;
4953 }
4954 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4955 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
4956 GR_CMBX_ITRGB, 0,
4957 GR_CMBX_ZERO, 0);
4958 CC_ENV ();
4959 T0_INTER_T1_USING_FACTOR (lod_frac);
4960 return;
4961 }
4962 cc__t0_inter_t1_using_primlod__mul_shade_add_prim ();
4963}
4964
4965static void cc__t0_sub_env_mul_shade_add_prim__mul_shade () //Aded by Gonetz
4966{
4967 if (!cmb.combine_ext)
4968 {
4969 cc_t0_sub_env_mul_shade_add_prim ();
4970 return;
4971 }
4972 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4973 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4974 GR_CMBX_ITRGB, 0,
4975 GR_CMBX_ZERO, 0);
4976 cmb.tex_ccolor = rdp.env_color;
4977 cmb.tex |= 1;
4978 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4979 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4980 GR_CMBX_ITRGB, 0,
4981 GR_CMBX_ZERO, 0);
4982 CC_PRIM ();
4983}
4984
4985static void cc__t0_sub_env_mul_shade_add_prim__mul_shadea () //Aded by Gonetz
4986{
4987 if (!cmb.combine_ext)
4988 {
4989 cc_t0_sub_env_mul_shade_add_prim ();
4990 return;
4991 }
4992 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4993 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
4994 GR_CMBX_ITRGB, 0,
4995 GR_CMBX_B, 0);
4996 cmb.tex_ccolor = rdp.prim_color;
4997 cmb.tex |= 1;
4998 MOD_0 (TMOD_TEX_SUB_COL);
4999 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5000
5001 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5002 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
5003 GR_CMBX_ITALPHA, 0,
5004 GR_CMBX_ZERO, 0);
5005}
5006
5007static void cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_env ()
5008{
5009 // (t1-t0)*primlod+t0, (cmb-env)*shade+env
5010 if (cmb.combine_ext)
5011 {
5012 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5013 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5014 GR_CMBX_ITRGB, 0,
5015 GR_CMBX_B, 0);
5016 }
5017 else
5018 {
5019 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5020 GR_COMBINE_FACTOR_TEXTURE_RGB,
5021 GR_COMBINE_LOCAL_CONSTANT,
5022 GR_COMBINE_OTHER_ITERATED);
5023 }
5024 CC_ENV ();
5025 T0_INTER_T1_USING_FACTOR (lod_frac);
5026}
5027
5028
5029static void cc_t0_sub_env_mul_enva_add_prim () //Aded by Gonetz
5030{
5031 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5032 GR_COMBINE_FACTOR_ONE,
5033 GR_COMBINE_LOCAL_CONSTANT,
5034 GR_COMBINE_OTHER_TEXTURE);
5035 CC_PRIM ();
5036 MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
5037 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5038 MOD_0_FAC (rdp.env_color & 0xFF);
5039 USE_T0 ();
5040}
5041
5042static void cc_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz
5043{
5044 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5045 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5046 GR_COMBINE_LOCAL_CONSTANT,
5047 GR_COMBINE_OTHER_TEXTURE);
5048 CC_PRIM ();
5049 USE_T0 ();
5050 //(1-t)*prim+t == (1-prim)*t+prim
5051}
5052
5053static void cc_one_sub_t1_mul_prim_add_t1 () //Aded by Gonetz
5054{
5055 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5056 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5057 GR_COMBINE_LOCAL_CONSTANT,
5058 GR_COMBINE_OTHER_TEXTURE);
5059 CC_PRIM ();
5060 USE_T1 ();
5061 //(1-t)*prim+t == (1-prim)*t+prim
5062}
5063
5064static void cc_one_sub_t1_mul_env_add_t1 () //Aded by Gonetz
5065{
5066 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5067 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5068 GR_COMBINE_LOCAL_CONSTANT,
5069 GR_COMBINE_OTHER_TEXTURE);
5070 CC_ENV ();
5071 USE_T1 ();
5072 //(1-t)*env+t == (1-env)*t+env
5073}
5074
5075static void cc_one_sub_t0_mul_primlod_add_t0 () //Aded by Gonetz
5076{
5077 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5078 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5079 GR_COMBINE_LOCAL_CONSTANT,
5080 GR_COMBINE_OTHER_TEXTURE);
5081 CC_PRIMLOD ();
5082 USE_T0 ();
5083 //(1-t)*primlod+t == (1-primlod)*t+primlod
5084}
5085
5086static void cc_one_sub_t0_mul_prima_add_t0 () //Aded by Gonetz
5087{
5088 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5089 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
5090 GR_COMBINE_LOCAL_CONSTANT,
5091 GR_COMBINE_OTHER_TEXTURE);
5092 CA_PRIM ();
5093 USE_T0 ();
5094 //(1-t)*prima+t == (1-prima)*t+prima
5095}
5096
5097static void cc_one_sub__t0_inter_t1_using_enva__mul_prim_add__t0_inter_t1_using_enva () //Aded by Gonetz
5098{
5099 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5100 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5101 GR_COMBINE_LOCAL_CONSTANT,
5102 GR_COMBINE_OTHER_TEXTURE);
5103 CC_PRIM ();
5104 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
5105 T0_INTER_T1_USING_FACTOR (factor);
5106 //(1-t)*prim+t == (1-prim)*t+prim
5107}
5108
5109static void cc_one_sub_t0_mul_shade_add_t0 ()
5110{
5111 CCMB (GR_COMBINE_FUNCTION_BLEND,
5112 GR_COMBINE_FACTOR_TEXTURE_RGB,
5113 GR_COMBINE_LOCAL_ITERATED,
5114 GR_COMBINE_OTHER_CONSTANT);
5115 CC (0xFFFFFFFF);
5116 USE_T0 ();
5117}
5118
5119static void cc_one_sub_prim_mul_t0_add_prim () //Aded by Gonetz
5120{
5121 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5122 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5123 GR_COMBINE_LOCAL_CONSTANT,
5124 GR_COMBINE_OTHER_TEXTURE);
5125 CC_PRIM ();
5126 USE_T0 ();
5127}
5128
5129static void cc_one_sub_prim_mul_t0a_add_prim ()
5130{
5131 if (cmb.combine_ext)
5132 {
5133 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ONE_MINUS_X,
5134 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
5135 GR_CMBX_TEXTURE_ALPHA, 0,
5136 GR_CMBX_B, 0);
5137 CC_PRIM ();
5138 } else {
5139 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5140 GR_COMBINE_FACTOR_ONE,
5141 GR_COMBINE_LOCAL_NONE,
5142 GR_COMBINE_OTHER_TEXTURE);
5143 MOD_0 (TMOD_COL_INTER_COL1_USING_TEXA);
5144 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5145 MOD_0_COL1 (0xFFFFFF00);
5146 }
5147 USE_T0 ();
5148}
5149
5150static void cc_one_sub_prim_mul__t0_inter_t1_using_primlod__add_prim () //Aded by Gonetz
5151{
5152 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5153 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5154 GR_COMBINE_LOCAL_CONSTANT,
5155 GR_COMBINE_OTHER_TEXTURE);
5156 CC_PRIM ();
5157 T0_INTER_T1_USING_FACTOR (lod_frac);
5158}
5159
5160static void cc__one_sub_prim_mul_shade__mul_t0_add__prim_mul_shade () //Aded by Gonetz
5161{
5162 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5163 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5164 GR_COMBINE_LOCAL_ITERATED,
5165 GR_COMBINE_OTHER_TEXTURE);
5166 MULSHADE_PRIM ();
5167 USE_T0 ();
5168}
5169
5170static void cc_one_sub_shade_mul__t0_inter_t1_using_primlod__add_shade () //Aded by Gonetz
5171{
5172 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5173 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5174 GR_COMBINE_LOCAL_ITERATED,
5175 GR_COMBINE_OTHER_TEXTURE);
5176 T0_INTER_T1_USING_FACTOR (lod_frac);
5177}
5178
5179static void cc_one_sub_prim_mul_t1_add_prim () //Aded by Gonetz
5180{
5181 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5182 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5183 GR_COMBINE_LOCAL_CONSTANT,
5184 GR_COMBINE_OTHER_TEXTURE);
5185 CC_PRIM ();
5186 USE_T1 ();
5187}
5188
5189static void cc_one_sub_prim_mul_env_add_prim () //Aded by Gonetz
5190{
5191 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5192 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5193 GR_COMBINE_LOCAL_CONSTANT,
5194 GR_COMBINE_OTHER_ITERATED);
5195 CC_PRIM ();
5196 SETSHADE_ENV ();
5197}
5198
5199static void cc_t0_sub_prim_mul_shade_add_shade () //Aded by Gonetz
5200{
5201 if (cmb.combine_ext)
5202 {
5203 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5204 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5205 GR_CMBX_ITRGB, 0,
5206 GR_CMBX_ITRGB, 0);
5207 CC_PRIM ();
5208 }
5209 else
5210 {
5211 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5212 GR_COMBINE_FACTOR_LOCAL,
5213 GR_COMBINE_LOCAL_ITERATED,
5214 GR_COMBINE_OTHER_TEXTURE);
5215 if (rdp.prim_color & 0xFFFFFF00)
5216 {
5217 MOD_0 (TMOD_TEX_SUB_COL);
5218 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5219 }
5220 }
5221 USE_T0 ();
5222}
5223
5224static void cc__t0_mul_t0__sub_prim_mul_shade_add_shade () //Aded by Gonetz
5225{
5226 if (cmb.combine_ext)
5227 {
5228 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5229 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5230 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
5231 GR_CMBX_ZERO, 0);
5232 cmb.tex |= 1;
5233 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5234 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5235 GR_CMBX_ITRGB, 0,
5236 GR_CMBX_ITRGB, 0);
5237 CC_PRIM ();
5238 }
5239 else
5240 cc_t0_sub_prim_mul_shade_add_shade();
5241}
5242
5243static void cc__t0_mul_t1__sub_prim_mul_shade_add_shade () //Aded by Gonetz
5244{
5245 if (cmb.combine_ext)
5246 {
5247 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5248 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5249 GR_CMBX_ITRGB, 0,
5250 GR_CMBX_ITRGB, 0);
5251 CC_PRIM ();
5252 }
5253 else
5254 {
5255 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5256 GR_COMBINE_FACTOR_LOCAL,
5257 GR_COMBINE_LOCAL_ITERATED,
5258 GR_COMBINE_OTHER_TEXTURE);
5259 }
5260 T0_MUL_T1 ();
5261}
5262
5263static void cc__t0_mul_t1__sub_env_mul_shade_add_shade () //Aded by Gonetz
5264{
5265 if (cmb.combine_ext)
5266 {
5267 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5268 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5269 GR_CMBX_ITRGB, 0,
5270 GR_CMBX_ITRGB, 0);
5271 CC_ENV ();
5272 }
5273 else
5274 {
5275 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5276 GR_COMBINE_FACTOR_LOCAL,
5277 GR_COMBINE_LOCAL_ITERATED,
5278 GR_COMBINE_OTHER_TEXTURE);
5279 }
5280 T0_MUL_T1 ();
5281}
5282
5283static void cc_one_sub_prim_mul_shade_add_shade () //Aded by Gonetz
5284{
5285 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5286 GR_COMBINE_FACTOR_LOCAL,
5287 GR_COMBINE_LOCAL_ITERATED,
5288 GR_COMBINE_OTHER_CONSTANT);
5289 CC_1SUBPRIM ();
5290}
5291
5292static void cc_t0_inter_env_using_prima ()
5293{
5294 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5295 GR_COMBINE_FACTOR_ONE,
5296 GR_COMBINE_LOCAL_NONE,
5297 GR_COMBINE_OTHER_TEXTURE);
5298 USE_T0 ();
5299
5300 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
5301 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5302 MOD_0_FAC (rdp.prim_color & 0xFF);
5303}
5304
5305static void cc_t0_inter_env_using_enva ()
5306{
5307 //(env-t0)*env_a+t0
5308 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5309 GR_COMBINE_FACTOR_ONE,
5310 GR_COMBINE_LOCAL_NONE,
5311 GR_COMBINE_OTHER_TEXTURE);
5312 if (cmb.combine_ext)
5313 {
5314 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
5315 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5316 GR_CMBX_TMU_CALPHA, 0,
5317 GR_CMBX_B, 0);
5318 cmb.tex_ccolor = rdp.env_color;
5319 cmb.tex |= 1;
5320 }
5321 else
5322 {
5323 USE_T0 ();
5324 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
5325 MOD_0_COL (rdp.env_color & 0xFFFFFFFF);
5326 MOD_0_FAC (rdp.env_color & 0xFF);
5327 }
5328}
5329
5330static void cc_t0_inter_noise_using_prim ()
5331{
5332 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5333 GR_COMBINE_FACTOR_ONE,
5334 GR_COMBINE_LOCAL_NONE,
5335 GR_COMBINE_OTHER_TEXTURE);
5336 USE_T0 ();
5337
5338 MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);
5339 MOD_0_COL (rdp.prim_color);
5340 rdp.noise = RDP::noise_texture;
5341}
5342
5343static void cc_t0_inter_noise_using_env ()
5344{
5345 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5346 GR_COMBINE_FACTOR_ONE,
5347 GR_COMBINE_LOCAL_NONE,
5348 GR_COMBINE_OTHER_TEXTURE);
5349 USE_T0 ();
5350
5351 MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);
5352 MOD_0_COL (rdp.env_color);
5353 rdp.noise = RDP::noise_texture;
5354}
5355
5356static void cc_t0_sub_env_mul_enva_add_env ()
5357{
5358 CCMB (GR_COMBINE_FUNCTION_BLEND,
5359 GR_COMBINE_FACTOR_LOCAL_ALPHA,
5360 GR_COMBINE_LOCAL_CONSTANT,
5361 GR_COMBINE_OTHER_TEXTURE);
5362 CC_ENV ();
5363 CA_ENV ();
5364 USE_T0 ();
5365}
5366
5367//Added by Gonetz
5368static void cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_env ()
5369{
5370 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5371 GR_COMBINE_FACTOR_TEXTURE_RGB,
5372 GR_COMBINE_LOCAL_ITERATED,
5373 GR_COMBINE_OTHER_CONSTANT);
5374 CC_1SUBPRIM ();
5375 SETSHADE_PRIM ();
5376 SETSHADE_ENV ();
5377 T0_MUL_T1 ();
5378}
5379
5380//Added by Gonetz
5381static void cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade ()
5382{
5383 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5384 GR_COMBINE_FACTOR_TEXTURE_RGB,
5385 GR_COMBINE_LOCAL_ITERATED,
5386 GR_COMBINE_OTHER_CONSTANT);
5387 CC_1SUBPRIM ();
5388 MULSHADE_PRIM ();
5389 T0_MUL_T1 ();
5390}
5391
5392//Added by Gonetz
5393static void cc_one_sub_prim_mul__t0_inter_t1_using_enva__add_prim ()
5394{
5395 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5396 GR_COMBINE_FACTOR_TEXTURE_RGB,
5397 GR_COMBINE_LOCAL_ITERATED,
5398 GR_COMBINE_OTHER_CONSTANT);
5399 CC_1SUBPRIM ();
5400 SETSHADE_PRIM ();
5401 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
5402 T0_INTER_T1_USING_FACTOR (factor);
5403}
5404
5405static void cc_one_sub_env_mul__t0_inter_t1_using_primlod__add_env () //Aded by Gonetz
5406{
5407 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5408 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5409 GR_COMBINE_LOCAL_CONSTANT,
5410 GR_COMBINE_OTHER_TEXTURE);
5411 CC_ENV ();
5412 T0_INTER_T1_USING_FACTOR (lod_frac);
5413}
5414
5415static void cc_one_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env () //Aded by Gonetz
5416{
5417 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5418 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5419 GR_COMBINE_LOCAL_CONSTANT,
5420 GR_COMBINE_OTHER_TEXTURE);
5421 CC_ENV ();
5422 T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
5423}
5424
5425static void cc_one_sub_env_mul_t0_add_prim_mul_env () //Aded by Gonetz
5426{
5427 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5428 GR_COMBINE_FACTOR_TEXTURE_RGB,
5429 GR_COMBINE_LOCAL_ITERATED,
5430 GR_COMBINE_OTHER_CONSTANT);
5431 CC_1SUBENV ();
5432 SETSHADE_PRIM ();
5433 SETSHADE_ENV ();
5434 USE_T0 ();
5435}
5436
5437static void cc_one_sub_env_mul_t0_add_env () //Aded by Gonetz
5438{
5439 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5440 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5441 GR_COMBINE_LOCAL_CONSTANT,
5442 GR_COMBINE_OTHER_TEXTURE);
5443 CC_ENV ();
5444 USE_T0 ();
5445}
5446
5447static void cc_one_sub_env_mul_t0_add_shade () //Aded by Gonetz
5448{
5449 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5450 GR_COMBINE_FACTOR_TEXTURE_RGB,
5451 GR_COMBINE_LOCAL_ITERATED,
5452 GR_COMBINE_OTHER_CONSTANT);
5453 CC_1SUBENV ();
5454 USE_T0 ();
5455}
5456
5457static void cc_one_sub_env_mul_prim_add_env () //Aded by Gonetz
5458{
5459 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5460 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5461 GR_COMBINE_LOCAL_CONSTANT,
5462 GR_COMBINE_OTHER_ITERATED);
5463 CC_ENV ();
5464 SETSHADE_PRIM ();
5465}
5466
5467static void cc_one_sub_env_mul_prim_add_shade () //Aded by Gonetz
5468{
5469 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5470 GR_COMBINE_FACTOR_ONE,
5471 GR_COMBINE_LOCAL_ITERATED,
5472 GR_COMBINE_OTHER_CONSTANT);
5473 CC_1SUBENV ();
5474 CC_C1MULC2 (rdp.prim_color, cmb.ccolor);
5475}
5476
5477static void cc_one_sub_env_mul_shade_add_env () //Aded by Gonetz
5478{
5479 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5480 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5481 GR_COMBINE_LOCAL_CONSTANT,
5482 GR_COMBINE_OTHER_ITERATED);
5483 CC_ENV ();
5484}
5485
5486static void cc_one_sub_env_mul_prim_add__t0_inter_t1_using_env () //Aded by Gonetz
5487{
5488 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5489 GR_COMBINE_FACTOR_ONE,
5490 GR_COMBINE_LOCAL_ITERATED,
5491 GR_COMBINE_OTHER_TEXTURE);
5492 SETSHADE_PRIM ();
5493 SETSHADE_1MENV ();
5494 T0_INTER_T1_USING_ENV ();
5495}
5496
5497static void cc_one_sub_shade_mul_t0_add_shade ()
5498{
5499 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5500 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5501 GR_COMBINE_LOCAL_ITERATED,
5502 GR_COMBINE_OTHER_TEXTURE);
5503 USE_T0 ();
5504}
5505
5506static void cc_one_sub_shade_mul__t0_mul_shadea__add_shade ()
5507{
5508 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5509 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5510 GR_COMBINE_LOCAL_ITERATED,
5511 GR_COMBINE_OTHER_TEXTURE);
5512 if (cmb.combine_ext)
5513 {
5514 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5515 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5516 GR_CMBX_ITALPHA, 0,
5517 GR_CMBX_ZERO, 0);
5518 cmb.tex |= 1;
5519 }
5520 else
5521 {
5522 USE_T0 ();
5523 }
5524}
5525
5526static void cc_one_sub_shade_mul_env_add_shade ()
5527{
5528 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5529 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5530 GR_COMBINE_LOCAL_ITERATED,
5531 GR_COMBINE_OTHER_CONSTANT);
5532 CC_ENV ();
5533}
5534
5535static void cc_one_sub_shade_mul_shadea_add_shade ()
5536{
5537 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5538 GR_COMBINE_FACTOR_LOCAL_ALPHA,
5539 GR_COMBINE_LOCAL_ITERATED,
5540 GR_COMBINE_OTHER_CONSTANT);
5541 CC (0xFFFFFFFF);
5542}
5543
5544///*
5545static void cc_t0_sub_env_mul_prim_add_env () //Aded by Gonetz
5546{
5547 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5548 GR_COMBINE_FACTOR_TEXTURE_RGB,
5549 GR_COMBINE_LOCAL_ITERATED,
5550 GR_COMBINE_OTHER_CONSTANT);
5551 SETSHADE_1MPRIM();
5552 SETSHADE_ENV();
5553 CC_PRIM ();
5554 USE_T0 ();
5555 //(t0-env)*prim+env == t0*prim + env*(1-prim)
5556}
5557//*/
5558static void cc__t0_inter_t1_using_t1a__sub_env_mul_enva_add_env () //Aded by Gonetz
5559{
5560 CCMB (GR_COMBINE_FUNCTION_BLEND,
5561 GR_COMBINE_FACTOR_LOCAL_ALPHA,
5562 GR_COMBINE_LOCAL_CONSTANT,
5563 GR_COMBINE_OTHER_TEXTURE);
5564 cmb.ccolor = rdp.env_color;
5565 T0_INTER_T1_USING_T1A ();
5566}
5567
5568static void cc_t0_sub_shade_mul_t0a_add_shade ()
5569{
5570 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5571 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
5572 GR_COMBINE_LOCAL_ITERATED,
5573 GR_COMBINE_OTHER_TEXTURE);
5574 USE_T0 ();
5575 A_USE_T0 ();
5576}
5577
5578static void cc_t0_sub_shade_mul_prima_add_shade () //Aded by Gonetz
5579{
5580 // * not guaranteed to work if another iterated alpha is set
5581 CCMB (GR_COMBINE_FUNCTION_BLEND,
5582 GR_COMBINE_FACTOR_LOCAL_ALPHA,
5583 GR_COMBINE_LOCAL_ITERATED,
5584 GR_COMBINE_OTHER_TEXTURE);
5585 SETSHADE_A_PRIM ();
5586 USE_T0 ();
5587}
5588
5589static void cc_t0_sub_shade_mul_shadea_add_shade () //Aded by Gonetz
5590{
5591 // * not guaranteed to work if another iterated alpha is set
5592 CCMB (GR_COMBINE_FUNCTION_BLEND,
5593 GR_COMBINE_FACTOR_LOCAL_ALPHA,
5594 GR_COMBINE_LOCAL_ITERATED,
5595 GR_COMBINE_OTHER_TEXTURE);
5596 USE_T0 ();
5597}
5598
5599static void cc__t0_mul_t1_add_env__mul_shadea_add_shade ()
5600{
5601 if (cmb.combine_ext)
5602 {
5603 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5604 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5605 GR_CMBX_ZERO, 0,
5606 GR_CMBX_B, 0);
5607 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
5608 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
5609 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
5610 GR_CMBX_B, 0);
5611 cmb.tex_ccolor = rdp.env_color;
5612 cmb.tex |= 3;
5613 }
5614 else
5615 {
5616 T0_MUL_T1 ();
5617 }
5618 // * not guaranteed to work if another iterated alpha is set
5619 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5620 GR_COMBINE_FACTOR_LOCAL_ALPHA,
5621 GR_COMBINE_LOCAL_ITERATED,
5622 GR_COMBINE_OTHER_TEXTURE);
5623}
5624
5625static void cc_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz
5626{
5627 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5628 GR_COMBINE_FACTOR_TEXTURE_RGB,
5629 GR_COMBINE_LOCAL_ITERATED,
5630 GR_COMBINE_OTHER_CONSTANT);
5631 CC_1SUBENV ();
5632 SETSHADE_PRIM ();
5633 SETSHADE_ENV ();
5634 USE_T0 ();
5635 //(prim-t0)*env+t0 == prim*env + t0*(1-env)
5636}
5637
5638static void cc_prim_sub_t0_mul_t1_add_t0 () //Aded by Gonetz
5639{
5640 if (!cmb.combine_ext)
5641 {
5642 cc_t0_mul_t1 ();
5643 return;
5644 }
5645 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5646 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5647 GR_CMBX_ZERO, 0,
5648 GR_CMBX_B, 0);
5649 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
5650 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5651 GR_CMBX_OTHER_TEXTURE_RGB, 0,
5652 GR_CMBX_B, 0);
5653 cmb.tex_ccolor = rdp.prim_color;
5654 cmb.tex |= 3;
5655 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5656 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5657 GR_CMBX_ZERO, 0,
5658 GR_CMBX_B, 0);
5659}
5660
5661static void cc_env_sub_t0_mul_prim_add_t0 () //Aded by Gonetz
5662{
5663 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5664 GR_COMBINE_FACTOR_TEXTURE_RGB,
5665 GR_COMBINE_LOCAL_ITERATED,
5666 GR_COMBINE_OTHER_CONSTANT);
5667 CC_1SUBPRIM ();
5668 SETSHADE_PRIM ();
5669 SETSHADE_ENV ();
5670 USE_T0 ();
5671 //(env-t0)*prim+t0 == prim*env + t0*(1-prim)
5672}
5673
5674static void cc_env_sub_t0_mul_shade_add_t0 () //Aded by Gonetz
5675{
5676 if (!cmb.combine_ext)
5677 {
5678 cc_t0_mul_shade ();
5679 return;
5680 }
5681 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
5682 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5683 GR_CMBX_ITRGB, 0,
5684 GR_CMBX_B, 0);
5685 CC_ENV ();
5686 USE_T0 ();
5687}
5688
5689static void cc_prim_sub_env_mul_t0_add_prim ()
5690{
5691 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5692 GR_COMBINE_FACTOR_TEXTURE_RGB,
5693 GR_COMBINE_LOCAL_CONSTANT,
5694 GR_COMBINE_OTHER_ITERATED);
5695 CC_PRIM ();
5696 SETSHADE_PRIMSUBENV ();
5697 USE_T0 ();
5698}
5699
5700static void cc_prim_sub_env_mul_t0_add_env ()
5701{
5702 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5703 GR_COMBINE_FACTOR_TEXTURE_RGB,
5704 GR_COMBINE_LOCAL_ITERATED,
5705 GR_COMBINE_OTHER_CONSTANT);
5706 CC_PRIM ();
5707 SETSHADE_ENV ();
5708 USE_T0 ();
5709}
5710
5711static void cc__prim_sub_env_mul_t0_add_env__add_primlod ()
5712{
5713 if (!cmb.combine_ext)
5714 {
5715 cc_prim_sub_env_mul_t0_add_env ();
5716 return;
5717 }
5718 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5719 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
5720 GR_CMBX_ITRGB, 0,
5721 GR_CMBX_B, 0);
5722 cmb.tex_ccolor = rdp.env_color;
5723 cmb.tex |= 1;
5724 SETSHADE_PRIMSUBENV ();
5725 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
5726 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
5727 GR_CMBX_ZERO, 1,
5728 GR_CMBX_TEXTURE_RGB, 0);
5729 CC_PRIMLOD ();
5730}
5731
5732static void cc__prim_sub_env_mul_t0_add_env__add_shadea ()
5733{
5734 if (!cmb.combine_ext)
5735 {
5736 cc_prim_sub_env_mul_t0_add_env ();
5737 return;
5738 }
5739 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5740 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
5741 GR_CMBX_ITRGB, 0,
5742 GR_CMBX_B, 0);
5743 cmb.tex_ccolor = rdp.env_color;
5744 cmb.tex |= 1;
5745 SETSHADE_PRIMSUBENV ();
5746 CCMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
5747 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
5748 GR_CMBX_ZERO, 1,
5749 GR_CMBX_TEXTURE_RGB, 0);
5750}
5751
5752static void cc_prim_sub_env_mul__t0_mul_t1a__add_env ()
5753{
5754 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5755 GR_COMBINE_FACTOR_TEXTURE_RGB,
5756 GR_COMBINE_LOCAL_ITERATED,
5757 GR_COMBINE_OTHER_CONSTANT);
5758 CC_PRIM ();
5759 SETSHADE_ENV ();
5760 T0_MUL_T1A ();
5761}
5762
5763static void cc_prim_sub_env_mul__t0_mul_prim__add_env ()
5764{
5765 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5766 GR_COMBINE_FACTOR_TEXTURE_RGB,
5767 GR_COMBINE_LOCAL_ITERATED,
5768 GR_COMBINE_OTHER_CONSTANT);
5769 CC_PRIM ();
5770 SETSHADE_ENV ();
5771 if (cmb.combine_ext)
5772 {
5773 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5774 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5775 GR_CMBX_TMU_CCOLOR, 0,
5776 GR_CMBX_ZERO, 0);
5777 cmb.tex_ccolor = rdp.prim_color;
5778 cmb.tex |= 1;
5779 }
5780 else
5781 {
5782 USE_T0 ();
5783 }
5784}
5785
5786static void cc_prim_sub_env_mul_t0_mul_shade_add_env ()
5787{
5788 if (cmb.combine_ext)
5789 {
5790 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5791 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5792 GR_CMBX_TMU_CCOLOR, 0,
5793 GR_CMBX_ZERO, 0);
5794 CC_PRIMSUBENV ();
5795 cmb.tex_ccolor = cmb.ccolor;
5796 cmb.tex |= 1;
5797 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5798 GR_COMBINE_FACTOR_TEXTURE_RGB,
5799 GR_COMBINE_LOCAL_CONSTANT,
5800 GR_COMBINE_OTHER_ITERATED);
5801 CC_ENV ();
5802 }
5803 else
5804 {
5805 cc_t0_mul_prim_mul_shade ();
5806 }
5807}
5808
5809static void cc_prim_sub_env_mul__t0_sub_t0_mul_prima__add_env ()
5810{
5811 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5812 GR_COMBINE_FACTOR_TEXTURE_RGB,
5813 GR_COMBINE_LOCAL_ITERATED,
5814 GR_COMBINE_OTHER_CONSTANT);
5815 CC_PRIM ();
5816 SETSHADE_ENV ();
5817 rdp.best_tex = 0;
5818 cmb.tex |= 1;
5819 cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
5820 cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
5821 percent = (float)(rdp.prim_color&0xFF) / 255.0f;
5822 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
5823}
5824
5825static void cc_prim_sub_env_mul__one_sub_t0_mul_primlod_add_prim__add_env ()
5826{
5827 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5828 GR_COMBINE_FACTOR_TEXTURE_RGB,
5829 GR_COMBINE_LOCAL_CONSTANT,
5830 GR_COMBINE_OTHER_ITERATED);
5831 CC_ENV ();
5832 SETSHADE_PRIM ();
5833 if (cmb.combine_ext)
5834 {
5835 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
5836 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
5837 GR_CMBX_DETAIL_FACTOR, 0,
5838 GR_CMBX_B, 0);
5839 cmb.tex_ccolor = rdp.prim_color;
5840 cmb.tex |= 1;
5841 cmb.dc0_detailmax = cmb.dc1_detailmax = (float)lod_frac / 255.0f;
5842 }
5843 else
5844 {
5845 USE_T0 ();
5846 }
5847}
5848
5849static void cc_prim_sub_env_mul__t0_add_t1a__add_env ()
5850{
5851 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5852 GR_COMBINE_FACTOR_TEXTURE_RGB,
5853 GR_COMBINE_LOCAL_ITERATED,
5854 GR_COMBINE_OTHER_CONSTANT);
5855 CC_PRIM ();
5856 SETSHADE_ENV ();
5857 rdp.best_tex = 0;
5858 cmb.tex |= 3;
5859 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;
5860 cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
5861 cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE;
5862}
5863
5864static void cc_prim_sub_env_mul__t0_sub_prim_mul_enva_add_t0__add_env ()
5865{
5866 // (t0-prim)*env_a+t0, (prim-env)*cmb+env
5867 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5868 GR_COMBINE_FACTOR_TEXTURE_RGB,
5869 GR_COMBINE_LOCAL_CONSTANT,
5870 GR_COMBINE_OTHER_ITERATED);
5871 CC_ENV ();
5872 SETSHADE_PRIM ();
5873 USE_T0 ();
5874
5875 MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC_ADD_TEX);
5876 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5877 MOD_0_FAC (rdp.env_color & 0xFF);
5878}
5879
5880static void cc_prim_sub_env_mul__t1_sub_prim_mul_enva_add_t0__add_env ()
5881{
5882 //(t1-prim)*env_a+t0, (prim-env)*cmb+env
5883 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5884 GR_COMBINE_FACTOR_TEXTURE_RGB,
5885 GR_COMBINE_LOCAL_CONSTANT,
5886 GR_COMBINE_OTHER_ITERATED);
5887 CC_ENV ();
5888 SETSHADE_PRIM ();
5889 if (cmb.combine_ext)
5890 {
5891 if (rdp.tiles[rdp.cur_tile].format > 2)
5892 {
5893 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5894 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5895 GR_CMBX_ZERO, 0,
5896 GR_CMBX_B, 0);
5897 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
5898 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
5899 GR_CMBX_DETAIL_FACTOR, 0,
5900 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
5901 }
5902 else
5903 {
5904 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5905 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
5906 GR_CMBX_DETAIL_FACTOR, 0,
5907 GR_CMBX_ZERO, 0);
5908 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
5909 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5910 GR_CMBX_ZERO, 1,
5911 GR_CMBX_ZERO, 0);
5912 }
5913 cmb.tex_ccolor = rdp.prim_color;
5914 cmb.tex |= 3;
5915 cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;
5916 }
5917 else
5918 {
5919 MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);
5920 MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
5921 MOD_1_FAC (rdp.env_color & 0xFF);
5922 T0_ADD_T1 ();
5923 }
5924}
5925
5926static void cc_prim_sub_env_mul__t1_sub_prim_mul_prima_add_t0__add_env ()
5927{
5928 // (t1-prim)*prim_a+t0, (prim-env)*cmb+env
5929 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5930 GR_COMBINE_FACTOR_TEXTURE_RGB,
5931 GR_COMBINE_LOCAL_CONSTANT,
5932 GR_COMBINE_OTHER_ITERATED);
5933 CC_ENV ();
5934 SETSHADE_PRIM ();
5935 if (cmb.combine_ext)
5936 {
5937 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5938 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
5939 GR_CMBX_ZERO, 1,
5940 GR_CMBX_ZERO, 0);
5941 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
5942 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5943 GR_CMBX_DETAIL_FACTOR, 0,
5944 GR_CMBX_B, 0);
5945 cmb.tex_ccolor = rdp.prim_color;
5946 cmb.tex |= 3;
5947 cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.prim_color&0xFF) / 255.0f;
5948 }
5949 else
5950 {
5951 MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);
5952 MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
5953 MOD_1_FAC (rdp.prim_color & 0xFF);
5954 T0_ADD_T1 ();
5955 }
5956}
5957
5958static void cc__prim_sub_env_mul_t0_add_env__mul_primlod ()
5959{
5960 CCMB (GR_COMBINE_FUNCTION_BLEND,
5961 GR_COMBINE_FACTOR_TEXTURE_RGB,
5962 GR_COMBINE_LOCAL_ITERATED,
5963 GR_COMBINE_OTHER_CONSTANT);
5964 float factor = (float)rdp.prim_lodfrac / 255.0f;
5965 wxUint8 r = (wxUint8)((rdp.prim_color >> 24) & 0xFF);
5966 r = (wxUint8)((float)r * factor);
5967 wxUint8 g = (wxUint8)((rdp.prim_color >> 16) & 0xFF);
5968 g = (wxUint8)((float)g * factor);
5969 wxUint8 b = (wxUint8)((rdp.prim_color >> 8) & 0xFF);
5970 b = (wxUint8)((float)b * factor);
5971 CC ((r<<24) | (g<<16) | (b<<8));
5972 SETSHADE_ENV ();
5973 MULSHADE_PRIMLOD ();
5974 USE_T0 ();
5975}
5976
5977static void cc__prim_sub_env_mul_t0_add_env__mul_k5 ()
5978{
5979 CCMB (GR_COMBINE_FUNCTION_BLEND,
5980 GR_COMBINE_FACTOR_TEXTURE_RGB,
5981 GR_COMBINE_LOCAL_ITERATED,
5982 GR_COMBINE_OTHER_CONSTANT);
5983 float factor = (float)rdp.K5 / 255.0f;
5984 wxUint8 r = (wxUint8)((rdp.prim_color >> 24) & 0xFF);
5985 r = (wxUint8)((float)r * factor);
5986 wxUint8 g = (wxUint8)((rdp.prim_color >> 16) & 0xFF);
5987 g = (wxUint8)((float)g * factor);
5988 wxUint8 b = (wxUint8)((rdp.prim_color >> 8) & 0xFF);
5989 b = (wxUint8)((float)b * factor);
5990 CC ((r<<24) | (g<<16) | (b<<8));
5991 SETSHADE_ENV ();
5992 MULSHADE_K5 ();
5993 USE_T0 ();
5994}
5995
5996static void cc_prim_sub_env_mul_t1_add_env ()
5997{
5998 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5999 GR_COMBINE_FACTOR_TEXTURE_RGB,
6000 GR_COMBINE_LOCAL_ITERATED,
6001 GR_COMBINE_OTHER_CONSTANT);
6002 CC_PRIM ();
6003 SETSHADE_ENV ();
6004 if (rdp.cycle_mode == 0 || ((settings.hacks&hack_KI) && (rdp.cycle2 & 0x0FFFFFFF) == 0x01FF1FFF))
6005 {
6006 USE_T0 ();
6007 }
6008 else
6009 {
6010 USE_T1 ();
6011 }
6012}
6013
6014static void cc_prim_sub_env_mul_t1_add_env_mul_t0 ()
6015{
6016 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6017 GR_COMBINE_FACTOR_ONE,
6018 GR_COMBINE_LOCAL_NONE,
6019 GR_COMBINE_OTHER_TEXTURE);
6020 MOD_1 (TMOD_COL_INTER_COL1_USING_TEX);
6021 MOD_1_COL (rdp.env_color & 0xFFFFFF00);
6022 MOD_1_COL1 (rdp.prim_color & 0xFFFFFF00);
6023 T0_MUL_T1 ();
6024}
6025
6026static void cc_prim_sub_env_mul_t0a_add_t0 ()
6027{
6028 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6029 GR_COMBINE_FACTOR_ONE,
6030 GR_COMBINE_LOCAL_NONE,
6031 GR_COMBINE_OTHER_TEXTURE);
6032 CC_PRIMSUBENV ();
6033 if (cmb.combine_ext)
6034 {
6035 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
6036 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6037 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
6038 GR_CMBX_B, 0);
6039 cmb.tex_ccolor = cmb.ccolor;
6040 cmb.tex |= 1;
6041 }
6042 else
6043 {
6044 MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);
6045 MOD_0_COL (cmb.ccolor & 0xFFFFFF00);
6046 USE_T0 ();
6047 }
6048}
6049
6050//Added by Gonetz
6051static void cc_prim_sub_env_mul_t0a_add_env ()
6052{
6053 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6054 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6055 GR_COMBINE_LOCAL_CONSTANT,
6056 GR_COMBINE_OTHER_ITERATED);
6057 CC_ENV ();
6058 SETSHADE_PRIM ();
6059 USE_T0 ();
6060}
6061
6062//Added by Gonetz
6063static void cc_prim_sub_env_mul_t1a_add_env ()
6064{
6065 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6066 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6067 GR_COMBINE_LOCAL_CONSTANT,
6068 GR_COMBINE_OTHER_ITERATED);
6069 CC_ENV ();
6070 SETSHADE_PRIM ();
6071 USE_T1 ();
6072}
6073
6074//Added by Gonetz
6075static void cc_prim_sub_env_mul__t0_mul_t1__add_env ()
6076{
6077 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6078 GR_COMBINE_FACTOR_TEXTURE_RGB,
6079 GR_COMBINE_LOCAL_ITERATED,
6080 GR_COMBINE_OTHER_CONSTANT);
6081 CC_PRIM ();
6082 SETSHADE_ENV ();
6083 T0_MUL_T1 ();
6084}
6085
6086//Added by Gonetz
6087static void cc_prim_sub_env_mul__t0_add_t1__add_env ()
6088{
6089 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6090 GR_COMBINE_FACTOR_TEXTURE_RGB,
6091 GR_COMBINE_LOCAL_ITERATED,
6092 GR_COMBINE_OTHER_CONSTANT);
6093 CC_PRIM ();
6094 SETSHADE_ENV ();
6095 T0_ADD_T1 ();
6096}
6097
6098//Added by Gonetz
6099static void cc_prim_sub_env_mul__t0_mul_enva__add_env ()
6100{
6101 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6102 GR_COMBINE_FACTOR_TEXTURE_RGB,
6103 GR_COMBINE_LOCAL_CONSTANT,
6104 GR_COMBINE_OTHER_ITERATED);
6105 CC_ENV ();
6106 SETSHADE_PRIMSUBENV ();
6107 SETSHADE_ENVA ();
6108 USE_T0 ();
6109}
6110
6111//Added by Gonetz
6112static void cc_prim_sub_env_mul__t0_mul_shade__add_env ()
6113{
6114 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6115 GR_COMBINE_FACTOR_TEXTURE_RGB,
6116 GR_COMBINE_LOCAL_CONSTANT,
6117 GR_COMBINE_OTHER_ITERATED);
6118 CC_ENV ();
6119 MULSHADE_PRIMSUBENV ();
6120 USE_T0 ();
6121}
6122
6123//Added by Gonetz
6124static void cc_prim_sub_env_mul__prim_inter_t0_using_shadea__add_env ()
6125{
6126 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6127 GR_COMBINE_FACTOR_TEXTURE_RGB,
6128 GR_COMBINE_LOCAL_CONSTANT,
6129 GR_COMBINE_OTHER_ITERATED);
6130 CC_ENV ();
6131 if (cmb.combine_ext)
6132 {
6133 SETSHADE_PRIM ();
6134 PRIM_INTER_T0_USING_SHADEA ();
6135 }
6136 else
6137 {
6138 SETSHADE_PRIMSUBENV ();
6139 MULSHADE_SHADEA ();
6140 USE_T0 ();
6141 }
6142}
6143
6144//Added by Gonetz
6145static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t0__add_env ()
6146{
6147 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6148 GR_COMBINE_FACTOR_TEXTURE_RGB,
6149 GR_COMBINE_LOCAL_ITERATED,
6150 GR_COMBINE_OTHER_CONSTANT);
6151 CC_PRIM ();
6152 SETSHADE_ENV ();
6153 if (cmb.combine_ext)
6154 {
6155 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
6156 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6157 GR_CMBX_DETAIL_FACTOR, 0,
6158 GR_CMBX_B, 0);
6159 cmb.tex_ccolor = rdp.prim_color;
6160 cmb.tex |= 1;
6161 percent = (float)(lod_frac) / 255.0f;
6162 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6163 }
6164 else
6165 {
6166 USE_T0 ();
6167 MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC_ADD_TEX);
6168 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
6169 MOD_0_FAC (lod_frac & 0xFF);
6170 }
6171}
6172
6173static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_shade__add_env ()
6174{
6175 if (!cmb.combine_ext)
6176 {
6177 cc_prim_sub_env_mul_t0_add_env ();
6178 return;
6179 }
6180 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6181 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
6182 GR_CMBX_DETAIL_FACTOR, 0,
6183 GR_CMBX_ITRGB, 0);
6184 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
6185 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6186 GR_CMBX_TEXTURE_RGB, 0,
6187 GR_CMBX_B, 0);
6188 cmb.tex_ccolor = rdp.prim_color;
6189 CC_PRIM ();
6190 SETSHADE_ENV ();
6191 cmb.tex |= 1;
6192 percent = (float)(lod_frac) / 255.0f;
6193 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6194}
6195
6196static void cc_prim_sub_env_mul__t0_sub_shade_mul_primlod_add_shade__add_env ()
6197{
6198 if (!cmb.combine_ext)
6199 {
6200 cc_prim_sub_env_mul_t0_add_env ();
6201 return;
6202 }
6203 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6204 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6205 GR_CMBX_DETAIL_FACTOR, 0,
6206 GR_CMBX_B, 0);
6207 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
6208 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6209 GR_CMBX_TEXTURE_RGB, 0,
6210 GR_CMBX_B, 0);
6211 CC_PRIM ();
6212 SETSHADE_ENV ();
6213 cmb.tex |= 1;
6214 percent = (float)(lod_frac) / 255.0f;
6215 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6216}
6217
6218//Added by Gonetz
6219static void cc_lavatex_sub_prim_mul_shade_add_lavatex ()
6220{
6221 if (cmb.combine_ext)
6222 {
6223 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
6224 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
6225 GR_CMBX_ITRGB, 0,
6226 GR_CMBX_B, 0);
6227 CC_PRIM ();
6228 T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();
6229 }
6230 else
6231 {
6232 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6233 GR_COMBINE_FACTOR_ONE,
6234 GR_COMBINE_LOCAL_NONE,
6235 GR_COMBINE_OTHER_TEXTURE);
6236 T0_ADD_T1 ();
6237 }
6238}
6239
6240//Added by Gonetz
6241static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t1__add_env ()
6242{
6243 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6244 GR_COMBINE_FACTOR_TEXTURE_RGB,
6245 GR_COMBINE_LOCAL_ITERATED,
6246 GR_COMBINE_OTHER_CONSTANT);
6247 CC_PRIM ();
6248 SETSHADE_ENV ();
6249 T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();
6250}
6251
6252//Added by Gonetz
6253static void cc_prim_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()
6254{
6255 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6256 GR_COMBINE_FACTOR_TEXTURE_RGB,
6257 GR_COMBINE_LOCAL_ITERATED,
6258 GR_COMBINE_OTHER_CONSTANT);
6259 CC_PRIM ();
6260 SETSHADE_ENV ();
6261 T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
6262}
6263
6264//Added by Gonetz
6265static void cc_prim_sub_env_mul__t0_inter_t1_using_t1__add_env ()
6266{
6267 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6268 GR_COMBINE_FACTOR_TEXTURE_RGB,
6269 GR_COMBINE_LOCAL_ITERATED,
6270 GR_COMBINE_OTHER_CONSTANT);
6271 CC_PRIM ();
6272 SETSHADE_ENV ();
6273 T0_INTER_T1_USING_T1 ();
6274}
6275
6276//Added by Gonetz
6277static void cc_prim_sub_env_mul__t0_inter_t1_using_enva_alpha__add_env ()
6278{
6279 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6280 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6281 GR_COMBINE_LOCAL_ITERATED,
6282 GR_COMBINE_OTHER_CONSTANT);
6283 CC_PRIM ();
6284 SETSHADE_ENV ();
6285 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6286 T0_INTER_T1_USING_FACTOR (factor);
6287 A_T0_INTER_T1_USING_FACTOR (factor);
6288}
6289
6290//Added by Gonetz
6291static void cc__env_inter_prim_using_t0__sub_shade_mul_t0a_add_shade ()
6292{
6293 if (!cmb.combine_ext)
6294 {
6295 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6296 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6297 GR_COMBINE_LOCAL_ITERATED,
6298 GR_COMBINE_OTHER_TEXTURE);
6299 MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
6300 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
6301 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
6302 USE_T0 ();
6303 A_USE_T0 ();
6304 }
6305 else
6306 {
6307 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6308 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
6309 GR_CMBX_DETAIL_FACTOR, 0,
6310 GR_CMBX_B, 0);
6311 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
6312 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6313 GR_CMBX_TEXTURE_ALPHA, 0,
6314 GR_CMBX_B, 0);
6315 cmb.tex_ccolor = rdp.env_color;
6316 cmb.tex |= 1;
6317 wxUint32 pse = (rdp.prim_color>>24) - (rdp.env_color>>24);
6318 percent = (float)(pse) / 255.0f;
6319 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6320 }
6321}
6322
6323//Added by Gonetz
6324static void cc_prim_sub_env_mul_shade_add_t0 ()
6325{
6326 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6327 GR_COMBINE_FACTOR_ONE,
6328 GR_COMBINE_LOCAL_ITERATED,
6329 GR_COMBINE_OTHER_TEXTURE);
6330 MULSHADE_PRIMSUBENV ();
6331 USE_T0 ();
6332}
6333
6334//Added by Gonetz
6335static void cc_prim_sub_env_mul_prima_add_t0 ()
6336{
6337 if (rdp.prim_color != 0x000000ff)
6338 {
6339 if (cmb.combine_ext)
6340 {
6341 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
6342 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6343 GR_CMBX_CONSTANT_ALPHA, 0,
6344 GR_CMBX_TEXTURE_RGB, 0);
6345 CC_PRIM ();
6346 SETSHADE_ENV ();
6347 }
6348 else
6349 {
6350 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6351 GR_COMBINE_FACTOR_ONE,
6352 GR_COMBINE_LOCAL_ITERATED,
6353 GR_COMBINE_OTHER_TEXTURE);
6354 SETSHADE_PRIMSUBENV ();
6355 SETSHADE_PRIMA ();
6356 }
6357 }
6358 else if ((rdp.prim_color&0xFFFFFF00) - (rdp.env_color&0xFFFFFF00) == 0)
6359 {
6360 cc_t0 ();
6361 return;
6362 }
6363 else
6364 {
6365 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
6366 GR_COMBINE_FACTOR_ONE,
6367 GR_COMBINE_LOCAL_CONSTANT,
6368 GR_COMBINE_OTHER_TEXTURE);
6369 CC_ENV ();
6370 }
6371 USE_T0 ();
6372}
6373
6374//Added by Gonetz
6375static void cc_prim_sub_env_mul_shade_add_env ()
6376{
6377 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6378 GR_COMBINE_FACTOR_ONE,
6379 GR_COMBINE_LOCAL_CONSTANT,
6380 GR_COMBINE_OTHER_ITERATED);
6381 CC_ENV ();
6382 MULSHADE_PRIMSUBENV ();
6383}
6384
6385static void cc_prim_sub_env_mul_shadea_add_env ()
6386{
6387 // * not guaranteed to work if another iterated alpha is set
6388 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6389 GR_COMBINE_FACTOR_OTHER_ALPHA,
6390 GR_COMBINE_LOCAL_CONSTANT,
6391 GR_COMBINE_OTHER_ITERATED);
6392 CC_ENV ();
6393 SETSHADE_PRIM ();
6394}
6395
6396//Added by Gonetz
6397static void cc_prim_sub_env_mul__t0_inter_t1_using_prima__add_env ()
6398{
6399 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6400 GR_COMBINE_FACTOR_TEXTURE_RGB,
6401 GR_COMBINE_LOCAL_CONSTANT,
6402 GR_COMBINE_OTHER_ITERATED);
6403 CC_ENV ();
6404 SETSHADE_PRIM ();
6405 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
6406 T0_INTER_T1_USING_FACTOR (factor);
6407}
6408
6409//Added by Gonetz
6410static void cc_prim_sub_env_mul__t1_inter_t0_using_prima__add_env ()
6411{
6412 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6413 GR_COMBINE_FACTOR_TEXTURE_RGB,
6414 GR_COMBINE_LOCAL_CONSTANT,
6415 GR_COMBINE_OTHER_ITERATED);
6416 CC_ENV ();
6417 SETSHADE_PRIM ();
6418 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
6419 T1_INTER_T0_USING_FACTOR (factor);
6420}
6421
6422static void cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env ()
6423{
6424 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6425 GR_COMBINE_FACTOR_TEXTURE_RGB,
6426 GR_COMBINE_LOCAL_CONSTANT,
6427 GR_COMBINE_OTHER_ITERATED);
6428 CC_ENV ();
6429 SETSHADE_PRIM ();
6430 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6431 T0_INTER_T1_USING_FACTOR (factor);
6432}
6433
6434static void cc_prim_sub_center_mul__t0_inter_t1_using_enva__add_env ()
6435{
6436 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6437 GR_COMBINE_FACTOR_TEXTURE_RGB,
6438 GR_COMBINE_LOCAL_ITERATED,
6439 GR_COMBINE_OTHER_CONSTANT);
6440 CC_C1SUBC2 (rdp.prim_color, rdp.CENTER);
6441 SETSHADE_ENV ();
6442 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6443 T0_INTER_T1_USING_FACTOR (factor);
6444}
6445
6446static void cc_prim_sub_env_mul__t1_inter_t0_using_enva__add_env ()
6447{
6448 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6449 GR_COMBINE_FACTOR_TEXTURE_RGB,
6450 GR_COMBINE_LOCAL_CONSTANT,
6451 GR_COMBINE_OTHER_ITERATED);
6452 CC_ENV ();
6453 SETSHADE_PRIM ();
6454 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6455 T1_INTER_T0_USING_FACTOR (factor);
6456}
6457
6458static void cc_prim_sub_env_mul__t0_mul_enva_add_t1__add_env ()
6459{
6460 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6461 GR_COMBINE_FACTOR_TEXTURE_RGB,
6462 GR_COMBINE_LOCAL_CONSTANT,
6463 GR_COMBINE_OTHER_ITERATED);
6464 CC_ENV ();
6465 SETSHADE_PRIM ();
6466 if (cmb.combine_ext)
6467 {
6468 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6469 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6470 GR_CMBX_ZERO, 1,
6471 GR_CMBX_ZERO, 0);
6472 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6473 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6474 GR_CMBX_DETAIL_FACTOR, 0,
6475 GR_CMBX_B, 0);
6476 cmb.tex |= 3;
6477 percent = (float)(rdp.env_color&0xFF) / 255.0f;
6478 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6479 }
6480 else
6481 {
6482 T0_ADD_T1 ();
6483 }
6484}
6485
6486static void cc_prim_sub_env_mul__t1_mul_enva_add_t0__add_env ()
6487{
6488 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6489 GR_COMBINE_FACTOR_TEXTURE_RGB,
6490 GR_COMBINE_LOCAL_CONSTANT,
6491 GR_COMBINE_OTHER_ITERATED);
6492 CC_ENV ();
6493 SETSHADE_PRIM ();
6494 T1_MUL_ENVA_ADD_T0 ();
6495}
6496
6497//Added by Gonetz
6498static void cc_prim_sub_env_mul_primlod_add__t0_inter_t1_using_primlod ()
6499{
6500 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6501 GR_COMBINE_FACTOR_ONE,
6502 GR_COMBINE_LOCAL_CONSTANT,
6503 GR_COMBINE_OTHER_TEXTURE);
6504 CC_PRIMSUBENV();
6505 CC_COLMULBYTE(cmb.ccolor, rdp.prim_lodfrac);
6506 T0_INTER_T1_USING_FACTOR (lod_frac);
6507}
6508
6509static void cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env ()
6510{
6511 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6512 GR_COMBINE_FACTOR_TEXTURE_RGB,
6513 GR_COMBINE_LOCAL_CONSTANT,
6514 GR_COMBINE_OTHER_ITERATED);
6515 CC_ENV ();
6516 SETSHADE_PRIM ();
6517 T0_INTER_T1_USING_FACTOR (lod_frac);
6518}
6519
6520static void cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env ()
6521{
6522 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6523 GR_COMBINE_FACTOR_TEXTURE_RGB,
6524 GR_COMBINE_LOCAL_CONSTANT,
6525 GR_COMBINE_OTHER_ITERATED);
6526 CC_ENV ();
6527 SETSHADE_PRIM ();
6528 T1_INTER_T0_USING_FACTOR (lod_frac);
6529}
6530
6531static void cc_prim_sub_env_mul__t1_mul_primlod_add_t0__add_env ()
6532{
6533 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6534 GR_COMBINE_FACTOR_TEXTURE_RGB,
6535 GR_COMBINE_LOCAL_CONSTANT,
6536 GR_COMBINE_OTHER_ITERATED);
6537 CC_ENV ();
6538 SETSHADE_PRIM ();
6539 T1_MUL_PRIMLOD_ADD_T0 ();
6540}
6541
6542static void cc_prim_sub_env_mul__t1_sub_prim_mul_t0_add_t0__add_env ()
6543{
6544 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6545 GR_COMBINE_FACTOR_TEXTURE_RGB,
6546 GR_COMBINE_LOCAL_CONSTANT,
6547 GR_COMBINE_OTHER_ITERATED);
6548 CC_ENV ();
6549 SETSHADE_PRIM ();
6550 if (cmb.combine_ext)
6551 {
6552 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6553 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
6554 GR_CMBX_ZERO, 1,
6555 GR_CMBX_ZERO, 0);
6556 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
6557 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6558 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
6559 GR_CMBX_B, 0);
6560 cmb.tex_ccolor = rdp.prim_color;
6561 cmb.tex |= 3;
6562 }
6563 else
6564 {
6565 MOD_1 (TMOD_TEX_SUB_COL);
6566 MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
6567 T0_MUL_T1_ADD_T0 ();
6568 }
6569}
6570
6571//Added by Gonetz
6572static void cc__prim_sub_env_mul_prim_add_t0__mul_prim ()
6573{
6574 if (cmb.combine_ext)
6575 {
6576 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6577 GR_CMBX_ITRGB, GR_FUNC_MODE_X,
6578 GR_CMBX_ZERO, 1,
6579 GR_CMBX_ZERO, 0);
6580 cmb.tex |= 1;
6581 SETSHADE_PRIMSUBENV ();
6582 SETSHADE_PRIM ();
6583 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
6584 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
6585 GR_CMBX_CONSTANT_COLOR, 0,
6586 GR_CMBX_ZERO, 0);
6587 CC_PRIM() ;
6588 }
6589 else
6590 {
6591 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6592 GR_COMBINE_FACTOR_ONE,
6593 GR_COMBINE_LOCAL_ITERATED,
6594 GR_COMBINE_OTHER_TEXTURE);
6595 SETSHADE_PRIMSUBENV ();
6596 SETSHADE_PRIM ();
6597 USE_T0 ();
6598 }
6599}
6600
6601//Added by Gonetz
6602static void cc_prim_sub_env_mul_prim_add_env ()
6603{
6604 if (cmb.combine_ext)
6605 {
6606 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
6607 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6608 GR_CMBX_CONSTANT_COLOR, 0,
6609 GR_CMBX_B, 0);
6610 SETSHADE_ENV();
6611 CC_PRIM ();
6612 }
6613 else
6614 {
6615 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6616 GR_COMBINE_FACTOR_ONE,
6617 GR_COMBINE_LOCAL_CONSTANT,
6618 GR_COMBINE_OTHER_ITERATED);
6619 SETSHADE_PRIMSUBENV ();
6620 SETSHADE_PRIM ();
6621 CC_ENV ();
6622 }
6623}
6624
6625static void cc_prim_sub_env_mul_primlod_add_env ()
6626{
6627 if (cmb.combine_ext)
6628 {
6629 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6630 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
6631 GR_CMBX_ZERO, 0,
6632 GR_CMBX_B, 0);
6633 cmb.tex |= 1;
6634 CC_PRIMLOD ();
6635 cmb.tex_ccolor = cmb.ccolor;
6636 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
6637 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
6638 GR_CMBX_TEXTURE_RGB, 0,
6639 GR_CMBX_B, 0);
6640 SETSHADE_PRIM();
6641 CC_ENV ();
6642 }
6643 else
6644 {
6645 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6646 GR_COMBINE_FACTOR_ONE,
6647 GR_COMBINE_LOCAL_CONSTANT,
6648 GR_COMBINE_OTHER_ITERATED);
6649 SETSHADE_PRIMSUBENV ();
6650 SETSHADE_PRIMLOD ();
6651 CC_ENV ();
6652 }
6653}
6654
6655//Added by Gonetz
6656static void cc_prim_sub_env_mul_enva_add_t0 ()
6657{
6658 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6659 GR_COMBINE_FACTOR_ONE,
6660 GR_COMBINE_LOCAL_ITERATED,
6661 GR_COMBINE_OTHER_TEXTURE);
6662 SETSHADE_PRIMSUBENV ();
6663 SETSHADE_ENVA ();
6664 USE_T0 ();
6665}
6666
6667static void cc_prim_sub_env_mul_enva_add_env ()
6668{
6669 if (cmb.combine_ext)
6670 {
6671 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6672 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
6673 GR_CMBX_ZERO, 0,
6674 GR_CMBX_B, 0);
6675 cmb.tex |= 1;
6676 CC_ENVA ();
6677 cmb.tex_ccolor = cmb.ccolor;
6678 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
6679 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
6680 GR_CMBX_TEXTURE_RGB, 0,
6681 GR_CMBX_B, 0);
6682 SETSHADE_PRIM();
6683 CC_ENV ();
6684 }
6685 else
6686 {
6687 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6688 GR_COMBINE_FACTOR_ONE,
6689 GR_COMBINE_LOCAL_CONSTANT,
6690 GR_COMBINE_OTHER_ITERATED);
6691 SETSHADE_PRIMSUBENV ();
6692 SETSHADE_ENVA ();
6693 CC_ENV ();
6694 }
6695}
6696
6697//Added by Gonetz
6698static void cc_prim_sub_shade_mul_t0_add_env ()
6699{
6700 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6701 GR_COMBINE_FACTOR_TEXTURE_RGB,
6702 GR_COMBINE_LOCAL_CONSTANT,
6703 GR_COMBINE_OTHER_ITERATED);
6704 CC_ENV ();
6705 COLSUBSHADE_PRIM ();
6706 USE_T0 ();
6707}
6708
6709//Added by Gonetz
6710static void cc_prim_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade ()
6711{
6712 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6713 GR_COMBINE_FACTOR_TEXTURE_RGB,
6714 GR_COMBINE_LOCAL_ITERATED,
6715 GR_COMBINE_OTHER_CONSTANT);
6716 CC_PRIM ();
6717 T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
6718}
6719
6720static void cc_prim_sub_shade_mul_t1a_add_shade ()
6721{
6722 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6723 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6724 GR_COMBINE_LOCAL_ITERATED,
6725 GR_COMBINE_OTHER_CONSTANT);
6726 CC_PRIM ();
6727 USE_T1 ();
6728}
6729
6730//Added by Gonetz
6731static void cc_prim_sub_shade_mul_t0_add_shade ()
6732{
6733 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6734 GR_COMBINE_FACTOR_TEXTURE_RGB,
6735 GR_COMBINE_LOCAL_ITERATED,
6736 GR_COMBINE_OTHER_CONSTANT);
6737 CC_PRIM ();
6738 USE_T0 ();
6739}
6740
6741//Added by Gonetz
6742static void cc_prim_sub_shade_mul_t1_add_shade ()
6743{
6744 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6745 GR_COMBINE_FACTOR_TEXTURE_RGB,
6746 GR_COMBINE_LOCAL_ITERATED,
6747 GR_COMBINE_OTHER_CONSTANT);
6748 CC_PRIM ();
6749 USE_T1 ();
6750}
6751
6752//Added by Gonetz
6753static void cc_prim_sub_shade_mul__t0a_mul_t1__add_shade ()
6754{
6755 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6756 GR_COMBINE_FACTOR_TEXTURE_RGB,
6757 GR_COMBINE_LOCAL_ITERATED,
6758 GR_COMBINE_OTHER_CONSTANT);
6759 CC_PRIM ();
6760 T0A_MUL_T1();
6761}
6762
6763//Added by Gonetz
6764static void cc_prim_sub_shade_mul__t0_inter_t1_using_enva__add_shade ()
6765{
6766 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6767 GR_COMBINE_FACTOR_TEXTURE_RGB,
6768 GR_COMBINE_LOCAL_ITERATED,
6769 GR_COMBINE_OTHER_CONSTANT);
6770 CC_PRIM ();
6771 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6772 T0_INTER_T1_USING_FACTOR (factor);
6773}
6774
6775//Added by Gonetz
6776static void cc_prim_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()
6777{
6778 if (cmb.combine_ext)
6779 {
6780 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
6781 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6782 GR_CMBX_TEXTURE_RGB, 0,
6783 GR_CMBX_B, 0);
6784 }
6785 else
6786 {
6787 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6788 GR_COMBINE_FACTOR_TEXTURE_RGB,
6789 GR_COMBINE_LOCAL_ITERATED,
6790 GR_COMBINE_OTHER_CONSTANT);
6791 }
6792 CC_PRIM ();
6793 T0_INTER_T1_USING_SHADEA ();
6794}
6795
6796//Added by Gonetz
6797static void cc_prim_sub_shade_mul_prima_add_shade ()
6798{
6799 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6800 GR_COMBINE_FACTOR_OTHER_ALPHA,
6801 GR_COMBINE_LOCAL_ITERATED,
6802 GR_COMBINE_OTHER_CONSTANT);
6803 CC_PRIM ();
6804 CA_PRIM ();
6805}
6806
6807//Added by Gonetz
6808static void cc_prim_sub_shade_mul_env_add_shade ()
6809{
6810 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6811 GR_COMBINE_FACTOR_ONE,
6812 GR_COMBINE_LOCAL_ITERATED,
6813 GR_COMBINE_OTHER_CONSTANT);
6814 CC_PRIMMULENV ();
6815 MULSHADE_1MENV ();
6816}
6817
6818//Added by Gonetz
6819static void cc_prim_sub_shade_mul_shadea_add_shade ()
6820{
6821 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6822 GR_COMBINE_FACTOR_LOCAL_ALPHA,
6823 GR_COMBINE_LOCAL_ITERATED,
6824 GR_COMBINE_OTHER_CONSTANT);
6825 CC_PRIM ();
6826}
6827
6828static void cc_env_sub_prim_mul_t0_add_prim ()
6829{
6830 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6831 GR_COMBINE_FACTOR_TEXTURE_RGB,
6832 GR_COMBINE_LOCAL_ITERATED,
6833 GR_COMBINE_OTHER_CONSTANT);
6834 CC_ENV ();
6835 SETSHADE_PRIM ();
6836 USE_T0 ();
6837}
6838
6839static void cc_env_sub_prim_mul_t1_add_prim ()
6840{
6841 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6842 GR_COMBINE_FACTOR_TEXTURE_RGB,
6843 GR_COMBINE_LOCAL_ITERATED,
6844 GR_COMBINE_OTHER_CONSTANT);
6845 CC_ENV ();
6846 SETSHADE_PRIM ();
6847 USE_T1 ();
6848}
6849
6850static void cc_env_sub_prim_mul_t0a_add_prim ()
6851{
6852 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6853 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6854 GR_COMBINE_LOCAL_ITERATED,
6855 GR_COMBINE_OTHER_CONSTANT);
6856 CC_ENV ();
6857 SETSHADE_PRIM ();
6858 A_USE_T0 ();
6859}
6860
6861static void cc_env_sub_prim_mul_t1a_add_prim ()
6862{
6863 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6864 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6865 GR_COMBINE_LOCAL_ITERATED,
6866 GR_COMBINE_OTHER_CONSTANT);
6867 CC_ENV ();
6868 SETSHADE_PRIM ();
6869 A_USE_T1 ();
6870}
6871
6872static void cc_env_sub_prim_mul__t0_add_t1__add_prim ()
6873{
6874 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6875 GR_COMBINE_FACTOR_TEXTURE_RGB,
6876 GR_COMBINE_LOCAL_ITERATED,
6877 GR_COMBINE_OTHER_CONSTANT);
6878 CC_ENV ();
6879 SETSHADE_PRIM ();
6880 T0_ADD_T1 ();
6881}
6882
6883static void cc_env_sub_prim_mul__t0_mul_t1__add_prim () //Added by Gonetz
6884{
6885 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6886 GR_COMBINE_FACTOR_TEXTURE_RGB,
6887 GR_COMBINE_LOCAL_ITERATED,
6888 GR_COMBINE_OTHER_CONSTANT);
6889 CC_ENV ();
6890 SETSHADE_PRIM ();
6891 T0_MUL_T1 ();
6892}
6893
6894static void cc_env_sub_prim_mul__t0t1a__add_prim () //Added by Gonetz
6895{
6896 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6897 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6898 GR_COMBINE_LOCAL_ITERATED,
6899 GR_COMBINE_OTHER_CONSTANT);
6900 CC_ENV ();
6901 SETSHADE_PRIM ();
6902 A_T0_MUL_T1 ();
6903}
6904
6905static void cc_env_sub_prim_mul__t0_inter_t1_using_t1__add_prim () //Added by Gonetz
6906{
6907 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6908 GR_COMBINE_FACTOR_TEXTURE_RGB,
6909 GR_COMBINE_LOCAL_ITERATED,
6910 GR_COMBINE_OTHER_CONSTANT);
6911 CC_ENV ();
6912 SETSHADE_PRIM ();
6913 T0_INTER_T1_USING_T1 ();
6914}
6915
6916static void cc_env_sub_prim_mul__t0_inter_t1_using_half__add_prim () //Added by Gonetz
6917{
6918 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6919 GR_COMBINE_FACTOR_TEXTURE_RGB,
6920 GR_COMBINE_LOCAL_ITERATED,
6921 GR_COMBINE_OTHER_CONSTANT);
6922 CC_ENV ();
6923 SETSHADE_PRIM ();
6924 T0_INTER_T1_USING_FACTOR (0x7F);
6925}
6926
6927static void cc_env_sub_prim_mul__t1_inter_t0_using_t0__add_prim () //Added by Gonetz
6928{
6929 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6930 GR_COMBINE_FACTOR_TEXTURE_RGB,
6931 GR_COMBINE_LOCAL_ITERATED,
6932 GR_COMBINE_OTHER_CONSTANT);
6933 CC_ENV ();
6934 SETSHADE_PRIM ();
6935 T1_INTER_T0_USING_T0 ();
6936}
6937
6938static void cc_env_sub_shade_mul__t0_mul_t1__add_shade () //Added by Gonetz
6939{
6940 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6941 GR_COMBINE_FACTOR_TEXTURE_RGB,
6942 GR_COMBINE_LOCAL_ITERATED,
6943 GR_COMBINE_OTHER_CONSTANT);
6944 CC_ENV ();
6945 T0_MUL_T1 ();
6946}
6947
6948static void cc_env_sub_prim_mul__t0a_mul_t1a__add_prim ()
6949{
6950 CCMB (GR_COMBINE_FUNCTION_BLEND,
6951 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6952 GR_COMBINE_LOCAL_CONSTANT,
6953 GR_COMBINE_OTHER_ITERATED);
6954 CC_PRIM ();
6955 SETSHADE_ENV ();
6956 A_T0_MUL_T1 ();
6957}
6958
6959
6960static void cc_env_sub_prim_mul_prima_add_prim () //Aded by Gonetz
6961{
6962 // * not guaranteed to work if another iterated alpha is set
6963 CCMB (GR_COMBINE_FUNCTION_BLEND,
6964 GR_COMBINE_FACTOR_LOCAL_ALPHA,
6965 GR_COMBINE_LOCAL_CONSTANT,
6966 GR_COMBINE_OTHER_ITERATED);
6967 CC_PRIM ();
6968 CA_PRIM ();
6969 SETSHADE_ENV ();
6970}
6971
6972static void cc_env_sub_prim_mul_enva_add_prim () //Aded by Gonetz
6973{
6974 // * not guaranteed to work if another iterated alpha is set
6975 CCMB (GR_COMBINE_FUNCTION_BLEND,
6976 GR_COMBINE_FACTOR_OTHER_ALPHA,
6977 GR_COMBINE_LOCAL_ITERATED,
6978 GR_COMBINE_OTHER_CONSTANT);
6979 CC_ENV ();
6980 CA_ENV ();
6981 SETSHADE_PRIM ();
6982}
6983
6984static void cc__t0_sub_env_mul_shade__sub_prim_mul_shade_add_prim ()
6985{
6986 if (cmb.combine_ext)
6987 {
6988 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6989 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
6990 GR_CMBX_ITRGB, 0,
6991 GR_CMBX_ZERO, 0);
6992 cmb.tex_ccolor = rdp.env_color;
6993 cmb.tex |= 1;
6994 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
6995 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
6996 GR_CMBX_ITRGB, 0,
6997 GR_CMBX_B, 0);
6998 CC_PRIM ();
6999 }
7000 else
7001 {
7002 cc_t0_mul_shade ();
7003 }
7004}
7005
7006static void cc_env_sub_prim_mul_shade_add_prim () //Added by Gonetz
7007{
7008 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7009 GR_COMBINE_FACTOR_ONE,
7010 GR_COMBINE_LOCAL_CONSTANT,
7011 GR_COMBINE_OTHER_ITERATED);
7012 CC_PRIM ();
7013 MULSHADE_ENVSUBPRIM ();
7014}
7015
7016static void cc_env_sub_prim_mul_shadea_add_prim () //Added by Gonetz
7017{
7018 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7019 GR_COMBINE_FACTOR_ONE,
7020 GR_COMBINE_LOCAL_CONSTANT,
7021 GR_COMBINE_OTHER_ITERATED);
7022 CC_PRIM ();
7023 SETSHADE_ENVSUBPRIM ();
7024 MULSHADE_SHADEA ();
7025}
7026
7027static void cc_env_sub_prim_mul__t0_inter_t1_using_prima__add_prim ()
7028{
7029 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7030 GR_COMBINE_FACTOR_TEXTURE_RGB,
7031 GR_COMBINE_LOCAL_ITERATED,
7032 GR_COMBINE_OTHER_CONSTANT);
7033 CC_ENV ();
7034 SETSHADE_PRIM ();
7035 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7036 T0_INTER_T1_USING_FACTOR (factor);
7037}
7038
7039static void cc_env_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()
7040{
7041 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7042 GR_COMBINE_FACTOR_TEXTURE_RGB,
7043 GR_COMBINE_LOCAL_ITERATED,
7044 GR_COMBINE_OTHER_CONSTANT);
7045 CC_ENV ();
7046 SETSHADE_PRIM ();
7047 T0_INTER_T1_USING_FACTOR (lod_frac);
7048}
7049
7050static void cc_env_sub_primshade_mul_t0_add_primshade ()
7051{
7052 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7053 GR_COMBINE_FACTOR_TEXTURE_RGB,
7054 GR_COMBINE_LOCAL_ITERATED,
7055 GR_COMBINE_OTHER_CONSTANT);
7056 CC_ENV ();
7057 MULSHADE_PRIM ();
7058 USE_T0 ();
7059}
7060
7061static void cc_env_sub_primshade_mul_t1_add_primshade ()
7062{
7063 // cc_prim_mul_shade();
7064 // return;
7065 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7066 GR_COMBINE_FACTOR_TEXTURE_RGB,
7067 GR_COMBINE_LOCAL_ITERATED,
7068 GR_COMBINE_OTHER_CONSTANT);
7069 CC_ENV ();
7070 MULSHADE_PRIM ();
7071 USE_T0 ();
7072}
7073
7074static void cc_env_sub_shade_mul_t0_add_shade ()
7075{
7076 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7077 GR_COMBINE_FACTOR_TEXTURE_RGB,
7078 GR_COMBINE_LOCAL_ITERATED,
7079 GR_COMBINE_OTHER_CONSTANT);
7080 CC_ENV ();
7081 USE_T0 ();
7082}
7083
7084static void cc__env_sub_shade_mul_t0_add_shade__mul_prim ()
7085{
7086 if (cmb.combine_ext)
7087 {
7088 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
7089 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
7090 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
7091 GR_CMBX_B, 0);
7092 cmb.tex |= 1;
7093 cmb.tex_ccolor = rdp.prim_color;
7094 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7095 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
7096 GR_CMBX_CONSTANT_COLOR, 0,
7097 GR_CMBX_ZERO, 0);
7098 CC_PRIM() ;
7099 }
7100 else
7101 {
7102 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7103 GR_COMBINE_FACTOR_TEXTURE_RGB,
7104 GR_COMBINE_LOCAL_ITERATED,
7105 GR_COMBINE_OTHER_CONSTANT);
7106 CC_ENV ();
7107 MULSHADE_PRIM ();
7108 USE_T0 ();
7109 }
7110}
7111
7112static void cc_env_sub_shade_mul_t1_add_shade ()
7113{
7114 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7115 GR_COMBINE_FACTOR_TEXTURE_RGB,
7116 GR_COMBINE_LOCAL_ITERATED,
7117 GR_COMBINE_OTHER_CONSTANT);
7118 CC_ENV ();
7119 USE_T1 ();
7120}
7121
7122//Added by Gonetz
7123static void cc_env_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()
7124{
7125 if (cmb.combine_ext)
7126 {
7127 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
7128 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
7129 GR_CMBX_TEXTURE_RGB, 0,
7130 GR_CMBX_B, 0);
7131 }
7132 else
7133 {
7134 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7135 GR_COMBINE_FACTOR_TEXTURE_RGB,
7136 GR_COMBINE_LOCAL_ITERATED,
7137 GR_COMBINE_OTHER_CONSTANT);
7138 }
7139 CC_ENV ();
7140 T0_INTER_T1_USING_SHADEA ();
7141}
7142
7143//Added by Gonetz
7144static void cc_env_sub_shade_mul_enva_add_shade ()
7145{
7146 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7147 GR_COMBINE_FACTOR_OTHER_ALPHA,
7148 GR_COMBINE_LOCAL_ITERATED,
7149 GR_COMBINE_OTHER_CONSTANT);
7150 cmb.ccolor = rdp.env_color;
7151}
7152
7153//Added by Gonetz
7154static void cc_shade_sub_t0_mul_shadea_add_t0 ()
7155{
7156 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7157 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
7158 GR_COMBINE_LOCAL_ITERATED,
7159 GR_COMBINE_OTHER_TEXTURE);
7160 MULSHADE_SHADEA ();
7161 USE_T0 ();
7162}
7163
7164
7165static void cc__t0_mul_shade_mul_shadea__add__t1_mul_one_sub_shadea ()
7166{
7167 // (t0-0)*shade+0, (cmb-t0)*shadea+t0
7168 if (cmb.combine_ext)
7169 {
7170 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7171 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7172 GR_CMBX_ITALPHA, 1,
7173 GR_CMBX_ZERO, 0);
7174 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7175 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7176 GR_CMBX_ITRGB, 0,
7177 GR_CMBX_B, 0);
7178 MULSHADE_SHADEA ();
7179 cmb.tex |= 3;
7180 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
7181 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
7182 GR_CMBX_ZERO, 0,
7183 GR_CMBX_TEXTURE_RGB, 0);
7184 }
7185 else
7186 {
7187 cc_t0_mul_shade ();
7188 }
7189}
7190
7191static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()
7192{
7193 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7194 GR_COMBINE_FACTOR_TEXTURE_RGB,
7195 GR_COMBINE_LOCAL_CONSTANT,
7196 GR_COMBINE_OTHER_ITERATED);
7197 CC_PRIM ();
7198 T0_INTER_T1_USING_FACTOR (lod_frac);
7199}
7200
7201static void cc_shade_sub_prim_mul_t0_add_prim ()
7202{
7203 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7204 GR_COMBINE_FACTOR_TEXTURE_RGB,
7205 GR_COMBINE_LOCAL_CONSTANT,
7206 GR_COMBINE_OTHER_ITERATED);
7207 CC_PRIM ();
7208 USE_T0 ();
7209}
7210
7211//Added by Gonetz
7212static void cc_shade_sub_prim_mul_t1_add_prim ()
7213{
7214 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7215 GR_COMBINE_FACTOR_TEXTURE_RGB,
7216 GR_COMBINE_LOCAL_CONSTANT,
7217 GR_COMBINE_OTHER_ITERATED);
7218 CC_PRIM ();
7219 USE_T1 ();
7220}
7221
7222//Added by Gonetz
7223static void cc_shade_sub_env_mul__t0_mul_t1__add__t0_mul_t1 ()
7224{
7225 if (cmb.combine_ext)
7226 {
7227 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
7228 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
7229 GR_CMBX_TEXTURE_RGB, 0,
7230 GR_CMBX_TEXTURE_RGB, 0);
7231 CC_ENV ();
7232 T0_MUL_T1 ();
7233 }
7234 else
7235 {
7236 cc_t0_mul_t1 ();
7237 }
7238}
7239
7240//Added by Gonetz
7241static void cc_shade_sub_env_mul_t0_add_prim ()
7242{
7243 if (rdp.cur_image && (rdp.cur_image->format != 0))
7244 {
7245 cc_prim ();
7246 return;
7247 }
7248
7249 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7250 GR_COMBINE_FACTOR_TEXTURE_RGB,
7251 GR_COMBINE_LOCAL_CONSTANT,
7252 GR_COMBINE_OTHER_ITERATED);
7253 CC_PRIM ();
7254 SUBSHADE_ENV ();
7255 USE_T0 ();
7256}
7257
7258//Added by Gonetz
7259static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_prim ()
7260{
7261 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7262 GR_COMBINE_FACTOR_TEXTURE_RGB,
7263 GR_COMBINE_LOCAL_CONSTANT,
7264 GR_COMBINE_OTHER_ITERATED);
7265 CC_PRIM ();
7266 SUBSHADE_ENV ();
7267 T0_INTER_T1_USING_FACTOR (lod_frac);
7268}
7269
7270//Added by Gonetz
7271static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_env ()
7272{
7273 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7274 GR_COMBINE_FACTOR_TEXTURE_RGB,
7275 GR_COMBINE_LOCAL_CONSTANT,
7276 GR_COMBINE_OTHER_ITERATED);
7277 CC_ENV ();
7278 T0_INTER_T1_USING_FACTOR (lod_frac);
7279}
7280
7281//Added by Gonetz
7282static void cc_shade_sub_env_mul__t0_mul_t1__add_env ()
7283{
7284 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7285 GR_COMBINE_FACTOR_TEXTURE_RGB,
7286 GR_COMBINE_LOCAL_CONSTANT,
7287 GR_COMBINE_OTHER_ITERATED);
7288 CC_ENV ();
7289 T0_MUL_T1 ();
7290}
7291
7292//Added by Gonetz
7293static void cc_shade_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()
7294{
7295 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7296 GR_COMBINE_FACTOR_TEXTURE_RGB,
7297 GR_COMBINE_LOCAL_CONSTANT,
7298 GR_COMBINE_OTHER_ITERATED);
7299 CC_ENV ();
7300 SETSHADE_ENV ();
7301 T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
7302}
7303
7304//Added by Gonetz
7305static void cc_shade_sub_env_mul_t0_add_env ()
7306{
7307 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7308 GR_COMBINE_FACTOR_TEXTURE_RGB,
7309 GR_COMBINE_LOCAL_CONSTANT,
7310 GR_COMBINE_OTHER_ITERATED);
7311 CC_ENV ();
7312 USE_T0 ();
7313}
7314
7315//Added by Gonetz
7316static void cc_shade_sub_env_mul_t0_mul_prim_add_prim_mul_env ()
7317{
7318 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7319 GR_COMBINE_FACTOR_TEXTURE_RGB,
7320 GR_COMBINE_LOCAL_CONSTANT,
7321 GR_COMBINE_OTHER_ITERATED);
7322 CC_PRIMMULENV ();
7323 SUBSHADE_ENV ();
7324 MULSHADE_PRIM()
7325 USE_T0 ();
7326}
7327
7328//Added by Gonetz
7329static void cc_shade_sub_env_mul_t1_add_env ()
7330{
7331 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7332 GR_COMBINE_FACTOR_TEXTURE_RGB,
7333 GR_COMBINE_LOCAL_CONSTANT,
7334 GR_COMBINE_OTHER_ITERATED);
7335 CC_ENV ();
7336 USE_T1 ();
7337}
7338
7339//Added by Gonetz
7340static void cc_shade_sub_env_mul_prim_add_t0 ()
7341{
7342 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7343 GR_COMBINE_FACTOR_ONE,
7344 GR_COMBINE_LOCAL_ITERATED,
7345 GR_COMBINE_OTHER_TEXTURE);
7346 SUBSHADE_ENV ();
7347 MULSHADE_PRIM ();
7348 USE_T0 ();
7349}
7350
7351static void cc__t0_add_prim_mul_shade__mul_shade_add_env ()
7352{
7353 if (!cmb.combine_ext)
7354 {
7355 cc_shade_sub_env_mul_prim_add_t0 ();
7356 return;
7357 }
7358 T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
7359 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7360 GR_CMBX_ITRGB, 0,
7361 GR_CMBX_B, 0);
7362 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
7363 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7364 GR_CMBX_ITRGB, 0,
7365 GR_CMBX_B, 0);
7366 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7367 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
7368 GR_CMBX_ITRGB, 0,
7369 GR_CMBX_B, 0);
7370 cmb.tex_ccolor = rdp.prim_color;
7371 CC_ENV ();
7372 cmb.tex |= 1;
7373}
7374
7375static void cc__t0_add_prim_mul_shade__mul_shade ()
7376{
7377 if (!cmb.combine_ext)
7378 {
7379 cc_shade_sub_env_mul_prim_add_t0 ();
7380 return;
7381 }
7382 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
7383 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7384 GR_CMBX_ITRGB, 0,
7385 GR_CMBX_B, 0);
7386 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7387 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
7388 GR_CMBX_ITRGB, 0,
7389 GR_CMBX_ZERO, 0);
7390 cmb.tex_ccolor = rdp.prim_color;
7391 cmb.tex |= 1;
7392}
7393
7394//Added by Gonetz
7395static void cc_shade_sub_env_mul_prim_add_env ()
7396{
7397 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7398 GR_COMBINE_FACTOR_ONE,
7399 GR_COMBINE_LOCAL_CONSTANT,
7400 GR_COMBINE_OTHER_ITERATED);
7401 SUBSHADE_ENV ();
7402 MULSHADE_PRIM ();
7403 CC_ENV ();
7404}
7405
7406//Added by Gonetz
7407static void cc_shade_sub_env_mul_prima_add_prim ()
7408{
7409 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7410 GR_COMBINE_FACTOR_ONE,
7411 GR_COMBINE_LOCAL_CONSTANT,
7412 GR_COMBINE_OTHER_ITERATED);
7413 SUBSHADE_ENV ();
7414 MULSHADE_PRIMA ();
7415 CC_PRIM ();
7416}
7417
7418static void cc_shade_sub_env_mul_k5_add_prim ()
7419{
7420 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7421 GR_COMBINE_FACTOR_ONE,
7422 GR_COMBINE_LOCAL_CONSTANT,
7423 GR_COMBINE_OTHER_ITERATED);
7424 SUBSHADE_ENV ();
7425 wxUint32 temp = rdp.prim_color;
7426 rdp.prim_color = rdp.K5;
7427 MULSHADE_PRIMA ();
7428 rdp.prim_color = temp;
7429 CC_PRIM ();
7430}
7431
7432// ** A inter B using C **
7433static void cc_t0_inter_t1_using_t1a ()
7434{
7435 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7436 GR_COMBINE_FACTOR_ONE,
7437 GR_COMBINE_LOCAL_NONE,
7438 GR_COMBINE_OTHER_TEXTURE);
7439 T0_INTER_T1_USING_T1A ();
7440}
7441
7442static void cc_t0_inter_t1_using_prima ()
7443{
7444 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7445 GR_COMBINE_FACTOR_ONE,
7446 GR_COMBINE_LOCAL_NONE,
7447 GR_COMBINE_OTHER_TEXTURE);
7448 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7449 T0_INTER_T1_USING_FACTOR (factor);
7450}
7451
7452static void cc_t1_inter_t0_using_prima ()
7453{
7454 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7455 GR_COMBINE_FACTOR_ONE,
7456 GR_COMBINE_LOCAL_NONE,
7457 GR_COMBINE_OTHER_TEXTURE);
7458 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7459 T1_INTER_T0_USING_FACTOR (factor);
7460}
7461
7462static void cc_t1_inter_t0_using_prim ()
7463{
7464 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7465 GR_COMBINE_FACTOR_ONE,
7466 GR_COMBINE_LOCAL_NONE,
7467 GR_COMBINE_OTHER_TEXTURE);
7468 T1_INTER_T0_USING_PRIM ();
7469}
7470
7471static void cc_t0_inter_t1_using_env ()
7472{
7473 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7474 GR_COMBINE_FACTOR_ONE,
7475 GR_COMBINE_LOCAL_NONE,
7476 GR_COMBINE_OTHER_TEXTURE);
7477 T0_INTER_T1_USING_ENV ();
7478}
7479
7480static void cc_t0_inter_t1_using_enva ()
7481{
7482 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7483 GR_COMBINE_FACTOR_ONE,
7484 GR_COMBINE_LOCAL_NONE,
7485 GR_COMBINE_OTHER_TEXTURE);
7486 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
7487 T0_INTER_T1_USING_FACTOR (factor);
7488}
7489
7490static void cc__t0_inter_t1_using_prim__inter_env_using_enva ()
7491{
7492 // (t1-t0)*prim+t0, (env-cmb)*env_a+cmb
7493 if (!cmb.combine_ext)
7494 {
7495 cc_t0_inter_t1_using_prima ();
7496 return;
7497 }
7498 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7499 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7500 GR_CMBX_ZERO, 0,
7501 GR_CMBX_B, 0);
7502 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7503 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7504 GR_CMBX_TMU_CCOLOR, 0,
7505 GR_CMBX_B, 0);
7506 cmb.tex_ccolor = rdp.prim_color;
7507 cmb.tex |= 3;
7508 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
7509 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7510 GR_CMBX_CONSTANT_ALPHA, 0,
7511 GR_CMBX_B, 0);
7512 cmb.ccolor = rdp.env_color;
7513}
7514
7515static void cc__t0_inter_t1_using_shade__inter_env_using_enva ()
7516{
7517 // (t1-t0)*shade+t0, (env-cmb)*env_a+cmb
7518 if (!cmb.combine_ext)
7519 {
7520 cc_t0_inter_t1_using_enva ();
7521 return;
7522 }
7523 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7524 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7525 GR_CMBX_ZERO, 0,
7526 GR_CMBX_B, 0);
7527 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7528 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7529 GR_CMBX_ITRGB, 0,
7530 GR_CMBX_B, 0);
7531 cmb.tex |= 3;
7532 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
7533 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7534 GR_CMBX_CONSTANT_ALPHA, 0,
7535 GR_CMBX_B, 0);
7536 cmb.ccolor = rdp.env_color;
7537}
7538
7539//Added by Gonetz
7540static void cc_t0_inter_t1_using_shade ()
7541{
7542 if (cmb.combine_ext)
7543 {
7544 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7545 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7546 GR_CMBX_ZERO, 0,
7547 GR_CMBX_B, 0);
7548 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7549 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7550 GR_CMBX_ITRGB, 0,
7551 GR_CMBX_B, 0);
7552 cmb.tex |= 3;
7553 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7554 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
7555 GR_CMBX_ZERO, 1,
7556 GR_CMBX_ZERO, 0);
7557 }
7558 else
7559 {
7560 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7561 GR_COMBINE_FACTOR_ONE,
7562 GR_COMBINE_LOCAL_NONE,
7563 GR_COMBINE_OTHER_TEXTURE);
7564 T0_INTER_T1_USING_FACTOR (0x7F);
7565 }
7566}
7567
7568//Added by Gonetz
7569static void cc_t1_inter_t0_using_shade ()
7570{
7571 if (cmb.combine_ext)
7572 {
7573 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7574 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7575 GR_CMBX_ZERO, 0,
7576 GR_CMBX_B, 0);
7577 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7578 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7579 GR_CMBX_ITRGB, 0,
7580 GR_CMBX_B, 0);
7581 cmb.tex |= 3;
7582 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7583 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
7584 GR_CMBX_ZERO, 1,
7585 GR_CMBX_ZERO, 0);
7586 }
7587 else
7588 {
7589 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7590 GR_COMBINE_FACTOR_ONE,
7591 GR_COMBINE_LOCAL_NONE,
7592 GR_COMBINE_OTHER_TEXTURE);
7593 T0_INTER_T1_USING_FACTOR (0x7F);
7594 }
7595}
7596
7597//Added by Gonetz
7598static void cc_t1_inter_t0_using_shadea ()
7599{
7600 if (cmb.combine_ext)
7601 {
7602 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7603 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
7604 GR_CMBX_ZERO, 1,
7605 GR_CMBX_ZERO, 0);
7606 }
7607 else
7608 {
7609 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7610 GR_COMBINE_FACTOR_ONE,
7611 GR_COMBINE_LOCAL_NONE,
7612 GR_COMBINE_OTHER_TEXTURE);
7613 }
7614 T1_INTER_T0_USING_SHADEA ();
7615}
7616
7617//Added by Gonetz
7618static void cc_t0_inter_t1_using_primlod ()
7619{
7620 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7621 GR_COMBINE_FACTOR_ONE,
7622 GR_COMBINE_LOCAL_NONE,
7623 GR_COMBINE_OTHER_TEXTURE);
7624 T0_INTER_T1_USING_FACTOR (lod_frac);
7625}
7626
7627//Added by Gonetz
7628static void cc_t1_inter_t0_using_primlod ()
7629{
7630 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7631 GR_COMBINE_FACTOR_ONE,
7632 GR_COMBINE_LOCAL_NONE,
7633 GR_COMBINE_OTHER_TEXTURE);
7634 T1_INTER_T0_USING_FACTOR (lod_frac);
7635}
7636
7637//Added by Gonetz
7638static void cc_t1_inter_t0_using_t0 ()
7639{
7640 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7641 GR_COMBINE_FACTOR_ONE,
7642 GR_COMBINE_LOCAL_NONE,
7643 GR_COMBINE_OTHER_TEXTURE);
7644 T1_INTER_T0_USING_T0 ();
7645}
7646
7647//Added by Gonetz
7648static void cc_t0_inter_t1_using_k5 ()
7649{
7650 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7651 GR_COMBINE_FACTOR_ONE,
7652 GR_COMBINE_LOCAL_NONE,
7653 GR_COMBINE_OTHER_TEXTURE);
7654 T0_INTER_T1_USING_FACTOR (rdp.K5);
7655}
7656
7657static void cc_t0_inter_env_using_prim ()
7658{
7659 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7660 GR_COMBINE_FACTOR_ONE,
7661 GR_COMBINE_LOCAL_NONE,
7662 GR_COMBINE_OTHER_TEXTURE);
7663 USE_T0 ();
7664
7665 MOD_0 (TMOD_TEX_INTER_COL_USING_COL1);
7666 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
7667 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
7668}
7669
7670//Added by Gonetz
7671static void cc_t0_inter_prim_using_primlod ()
7672{
7673 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7674 GR_COMBINE_FACTOR_ONE,
7675 GR_COMBINE_LOCAL_NONE,
7676 GR_COMBINE_OTHER_TEXTURE);
7677 USE_T0 ();
7678
7679 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
7680 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
7681 MOD_0_FAC (lod_frac & 0xFF);
7682}
7683
7684static void cc_t0_inter_shade_using_t0a ()
7685{
7686 if (cmb.combine_ext)
7687 {
7688 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
7689 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7690 GR_CMBX_TEXTURE_ALPHA, 0,
7691 GR_CMBX_B, 0);
7692 USE_T0();
7693 A_USE_T0();
7694 }
7695 else
7696 {
7697 //(shade-t0)*t0a+t0 = t0*(1-t0a)+shade*t0a
7698 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7699 GR_COMBINE_FACTOR_ONE,
7700 GR_COMBINE_LOCAL_ITERATED,
7701 GR_COMBINE_OTHER_TEXTURE);
7702 rdp.best_tex = 1;
7703 cmb.tex = 1;
7704 cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
7705 cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA;
7706 }
7707}
7708
7709static void cc_t0_inter_shade_using_primlod ()
7710{
7711 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7712 GR_COMBINE_FACTOR_TEXTURE_RGB,
7713 GR_COMBINE_LOCAL_ITERATED,
7714 GR_COMBINE_OTHER_CONSTANT);
7715 CC_PRIMLOD();
7716 cmb.ccolor=(~cmb.ccolor)&0xFFFFFF00;
7717 MULSHADE_PRIMLOD ();
7718 USE_T0 ();
7719 //(shade-t0)*primlod+t0 = t0*(1-primlod)+shade*primlod
7720}
7721
7722//Added by Gonetz
7723static void cc__env_inter_t0_using_primlod__mul_prim ()
7724{
7725 //((t0-env)*primlod+env)*prim = t0*prim*primlod+env*prim*(1-primlod);
7726 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7727 GR_COMBINE_FACTOR_TEXTURE_RGB,
7728 GR_COMBINE_LOCAL_ITERATED,
7729 GR_COMBINE_OTHER_CONSTANT);
7730 CC_PRIM ();
7731 cmb.ccolor = ((((cmb.ccolor & 0xFF000000) >> 24) * (lod_frac & 0xFF))<<24) | ((((cmb.ccolor & 0x00FF0000) >> 16) * (lod_frac & 0xFF))<<16) | ((((cmb.ccolor & 0x0000FF00) >> 8) * (lod_frac & 0xFF))<<8);
7732 SETSHADE_PRIM ();
7733 SETSHADE_ENV ();
7734 SETSHADE_1MPRIMLOD ();
7735 USE_T0 ();
7736}
7737
7738//Added by Gonetz
7739static void cc__env_inter_t0_using_shadea__mul_shade ()
7740{
7741 //((t0-env)*shadea+env)*shade
7742 if (!cmb.combine_ext)
7743 {
7744 cc_t0_mul_shade ();
7745 return;
7746 }
7747 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7748 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7749 GR_CMBX_ITALPHA, 0,
7750 GR_CMBX_B, 0);
7751 cmb.tex_ccolor = rdp.env_color;
7752 cmb.tex |= 1;
7753 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7754 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
7755 GR_CMBX_ITRGB, 0,
7756 GR_CMBX_ZERO, 0);
7757}
7758
7759//Added by Gonetz
7760static void cc_env_inter_prim_using_primlod ()
7761{
7762 if (rdp.prim_color&0xFFFFFF00)
7763 {
7764 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7765 GR_COMBINE_FACTOR_ONE,
7766 GR_COMBINE_LOCAL_CONSTANT,
7767 GR_COMBINE_OTHER_ITERATED);
7768 SETSHADE_PRIMSUBENV ();
7769 SETSHADE_PRIMLOD ();
7770 CC_ENV ();
7771 }
7772 else
7773 {
7774 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
7775 GR_COMBINE_FACTOR_ONE,
7776 GR_COMBINE_LOCAL_ITERATED,
7777 GR_COMBINE_OTHER_CONSTANT);
7778 SETSHADE_ENV ();
7779 SETSHADE_PRIMLOD ();
7780 CC_ENV ();
7781 }
7782}
7783
7784static void cc_prim_inter__t0_mul_t1_add_env__using_shadea ()
7785{
7786 if (cmb.combine_ext)
7787 {
7788 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7789 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7790 GR_CMBX_ZERO, 0,
7791 GR_CMBX_B, 0);
7792 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7793 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
7794 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
7795 GR_CMBX_B, 0);
7796 cmb.tex_ccolor = rdp.env_color;
7797 cmb.tex |= 3;
7798 }
7799 else
7800 {
7801 T0_MUL_T1 ();
7802 }
7803 // * not guaranteed to work if another iterated alpha is set
7804 CCMB (GR_COMBINE_FUNCTION_BLEND,
7805 GR_COMBINE_FACTOR_LOCAL_ALPHA,
7806 GR_COMBINE_LOCAL_ITERATED,
7807 GR_COMBINE_OTHER_TEXTURE);
7808 SETSHADE_PRIM ();
7809}
7810
7811static void cc_env_inter__prim_inter_shade_using_t0__using_shadea ()
7812{
7813 if (!cmb.combine_ext)
7814 {
7815 cc_shade_sub_prim_mul_t0_add_prim ();
7816 return;
7817 }
7818 T0CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
7819 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7820 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
7821 GR_CMBX_B, 0);
7822 cmb.tex_ccolor = rdp.prim_color;
7823 cmb.tex |= 1;
7824 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7825 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
7826 GR_CMBX_ITALPHA, 0,
7827 GR_CMBX_B, 0);
7828 CC_ENV ();
7829}
7830
7831static void cc_shade_inter__prim_inter_shade_using_t0__using_shadea ()
7832{
7833 if (!cmb.combine_ext)
7834 {
7835 cc_shade_sub_prim_mul_t0_add_prim ();
7836 return;
7837 }
7838 T0CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
7839 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7840 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
7841 GR_CMBX_B, 0);
7842 cmb.tex_ccolor = rdp.prim_color;
7843 cmb.tex |= 1;
7844 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7845 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
7846 GR_CMBX_ITALPHA, 0,
7847 GR_CMBX_B, 0);
7848}
7849
7850// ** (A-B)*C+D*E **
7851static void cc_one_sub_env_mul_prim_add__t0_mul_env () //Aded by Gonetz
7852{
7853 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7854 GR_COMBINE_FACTOR_TEXTURE_RGB,
7855 GR_COMBINE_LOCAL_ITERATED,
7856 GR_COMBINE_OTHER_CONSTANT);
7857 CC_ENV ();
7858 SETSHADE_1MENV ();
7859 SETSHADE_PRIM ();
7860 USE_T0 ();
7861}
7862
7863// ** ((A-B)*C+D)*E **
7864static void cc_t0_sub_env_mul_prim_mul_shade_add_prim_mul_shade () //Aded by Gonetz
7865{
7866 //(t0-env)*shade+shade, (cmb-0)*prim+0
7867 if (cmb.combine_ext)
7868 {
7869 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7870 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7871 GR_CMBX_ITRGB, 0,
7872 GR_CMBX_ZERO, 0);
7873 cmb.tex_ccolor = rdp.env_color;
7874 cmb.tex |= 1;
7875 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7876 GR_CMBX_ITRGB, GR_FUNC_MODE_X,
7877 GR_CMBX_CONSTANT_COLOR, 0,
7878 GR_CMBX_ZERO, 0);
7879 CC_PRIM ();
7880 }
7881 else
7882 {
7883 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7884 GR_COMBINE_FACTOR_LOCAL,
7885 GR_COMBINE_LOCAL_ITERATED,
7886 GR_COMBINE_OTHER_TEXTURE);
7887 if (rdp.env_color & 0xFFFFFF00)
7888 {
7889 MOD_0 (TMOD_TEX_SUB_COL);
7890 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
7891 }
7892 MULSHADE_PRIM ();
7893 USE_T0 ();
7894 }
7895}
7896
7897static void cc__t1_sub_prim_mul_t0_add_env__mul_shade () //Aded by Gonetz
7898{
7899 // (t1-prim)*t0+env, (cmb-0)*shade+0
7900 if (cmb.combine_ext)
7901 {
7902 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7903 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7904 GR_CMBX_ZERO, 0,
7905 GR_CMBX_B, 0);
7906 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7907 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7908 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
7909 GR_CMBX_ZERO, 0);
7910 cmb.tex_ccolor = rdp.prim_color;
7911 cmb.tex |= 3;
7912 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7913 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
7914 GR_CMBX_ITRGB, 0,
7915 GR_CMBX_ZERO, 0);
7916 CC_ENV ();
7917 }
7918 else
7919 {
7920 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7921 GR_COMBINE_FACTOR_LOCAL,
7922 GR_COMBINE_LOCAL_ITERATED,
7923 GR_COMBINE_OTHER_TEXTURE);
7924 if (rdp.prim_color & 0xFFFFFF00)
7925 {
7926 MOD_1 (TMOD_TEX_SUB_COL);
7927 MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
7928 }
7929 T0_MUL_T1 ();
7930 }
7931}
7932
7933// ** (A inter B using C) * D **
7934//Added by Gonetz
7935static void cc__t0_inter_t1_using_prima__mul_prim ()
7936{
7937 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7938 GR_COMBINE_FACTOR_LOCAL,
7939 GR_COMBINE_LOCAL_CONSTANT,
7940 GR_COMBINE_OTHER_TEXTURE);
7941 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7942 T0_INTER_T1_USING_FACTOR (factor);
7943 CC_PRIM ();
7944}
7945
7946//Added by Gonetz
7947static void cc__t1_inter_t0_using_prima__mul_prim ()
7948{
7949 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7950 GR_COMBINE_FACTOR_LOCAL,
7951 GR_COMBINE_LOCAL_CONSTANT,
7952 GR_COMBINE_OTHER_TEXTURE);
7953 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7954 T1_INTER_T0_USING_FACTOR (factor);
7955 CC_PRIM ();
7956}
7957
7958//Added by Gonetz
7959static void cc__t0_inter_t1_using_prim__mul_shade ()
7960{
7961 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7962 GR_COMBINE_FACTOR_LOCAL,
7963 GR_COMBINE_LOCAL_ITERATED,
7964 GR_COMBINE_OTHER_TEXTURE);
7965 T0_INTER_T1_USING_PRIM ();
7966}
7967
7968//Added by Gonetz
7969static void cc__t0_inter_t1_using_prima__mul_shade ()
7970{
7971 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7972 GR_COMBINE_FACTOR_LOCAL,
7973 GR_COMBINE_LOCAL_ITERATED,
7974 GR_COMBINE_OTHER_TEXTURE);
7975 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7976 T0_INTER_T1_USING_FACTOR (factor);
7977}
7978
7979//Added by Gonetz
7980static void cc__t1_inter_t0_using_prima__mul_shade ()
7981{
7982 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7983 GR_COMBINE_FACTOR_LOCAL,
7984 GR_COMBINE_LOCAL_ITERATED,
7985 GR_COMBINE_OTHER_TEXTURE);
7986 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7987 T1_INTER_T0_USING_FACTOR (factor);
7988}
7989
7990static void cc__t0_inter_t1_using_env__mul_shade ()
7991{
7992 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7993 GR_COMBINE_FACTOR_LOCAL,
7994 GR_COMBINE_LOCAL_ITERATED,
7995 GR_COMBINE_OTHER_TEXTURE);
7996 T0_INTER_T1_USING_ENV ();
7997}
7998
7999static void cc__t0_inter_t1_using_enva__mul_shade ()
8000{
8001 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8002 GR_COMBINE_FACTOR_LOCAL,
8003 GR_COMBINE_LOCAL_ITERATED,
8004 GR_COMBINE_OTHER_TEXTURE);
8005 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
8006 T0_INTER_T1_USING_FACTOR (factor);
8007}
8008
8009static void cc__t0_inter_t1_using_enva__mul_prim ()
8010{
8011 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8012 GR_COMBINE_FACTOR_LOCAL,
8013 GR_COMBINE_LOCAL_CONSTANT,
8014 GR_COMBINE_OTHER_TEXTURE);
8015 CC_PRIM ();
8016 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
8017 T0_INTER_T1_USING_FACTOR (factor);
8018}
8019
8020//Added by Gonetz
8021static void cc__t0_inter_t1_using_enva__mul_env ()
8022{
8023 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8024 GR_COMBINE_FACTOR_LOCAL,
8025 GR_COMBINE_LOCAL_CONSTANT,
8026 GR_COMBINE_OTHER_TEXTURE);
8027 CC_ENV ();
8028 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
8029 T0_INTER_T1_USING_FACTOR (factor);
8030}
8031
8032//Added by Gonetz
8033static void cc__t0_inter_t1_using_primlod__mul_prim ()
8034{
8035 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8036 GR_COMBINE_FACTOR_LOCAL,
8037 GR_COMBINE_LOCAL_CONSTANT,
8038 GR_COMBINE_OTHER_TEXTURE);
8039 CC_PRIM ();
8040 T0_INTER_T1_USING_FACTOR (lod_frac);
8041}
8042
8043//Added by Gonetz
8044static void cc__t0_inter_t1_using_primlod__mul_prima ()
8045{
8046 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8047 GR_COMBINE_FACTOR_LOCAL,
8048 GR_COMBINE_LOCAL_CONSTANT,
8049 GR_COMBINE_OTHER_TEXTURE);
8050 CC_PRIMA ();
8051 T0_INTER_T1_USING_FACTOR (lod_frac);
8052}
8053
8054//Added by Gonetz
8055static void cc__t1_mul_primlod_add_t0__mul_prim ()
8056{
8057 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8058 GR_COMBINE_FACTOR_LOCAL,
8059 GR_COMBINE_LOCAL_CONSTANT,
8060 GR_COMBINE_OTHER_TEXTURE);
8061 CC_PRIM ();
8062 T1_MUL_PRIMLOD_ADD_T0 ();
8063}
8064
8065//Added by Gonetz
8066static void cc__t0_inter_t1_using_primlod__mul_env ()
8067{
8068 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8069 GR_COMBINE_FACTOR_LOCAL,
8070 GR_COMBINE_LOCAL_CONSTANT,
8071 GR_COMBINE_OTHER_TEXTURE);
8072 CC_ENV ();
8073 T0_INTER_T1_USING_FACTOR (lod_frac);
8074}
8075
8076//Added by Gonetz
8077static void cc__t1_mul_primlod_add_t0__mul_env ()
8078{
8079 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8080 GR_COMBINE_FACTOR_LOCAL,
8081 GR_COMBINE_LOCAL_CONSTANT,
8082 GR_COMBINE_OTHER_TEXTURE);
8083 CC_ENV ();
8084 T1_MUL_PRIMLOD_ADD_T0 ();
8085}
8086
8087//Added by Gonetz
8088static void cc__t1_inter_t0_using_prim__mul_env ()
8089{
8090 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8091 GR_COMBINE_FACTOR_LOCAL,
8092 GR_COMBINE_LOCAL_CONSTANT,
8093 GR_COMBINE_OTHER_TEXTURE);
8094 CC_ENV ();
8095 T1_INTER_T0_USING_PRIM ();
8096}
8097
8098static void cc__one_sub_shade_mul_t0_add_shade__mul_prim ()
8099{
8100 if (cmb.combine_ext)
8101 {
8102 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8103 GR_CMBX_ITRGB, GR_FUNC_MODE_ONE_MINUS_X,
8104 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
8105 GR_CMBX_B, 0);
8106 cmb.tex |= 1;
8107 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8108 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
8109 GR_CMBX_CONSTANT_COLOR, 0,
8110 GR_CMBX_ZERO, 0);
8111 CC_PRIM ();
8112 }
8113 else
8114 {
8115 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8116 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
8117 GR_COMBINE_LOCAL_ITERATED,
8118 GR_COMBINE_OTHER_TEXTURE);
8119 USE_T0 ();
8120 }
8121}
8122
8123static void cc__one_sub_shade_mul_t0_add_shade__mul_env ()
8124{
8125 if (cmb.combine_ext)
8126 {
8127 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8128 GR_CMBX_ITRGB, GR_FUNC_MODE_ONE_MINUS_X,
8129 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
8130 GR_CMBX_B, 0);
8131 cmb.tex |= 1;
8132 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8133 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
8134 GR_CMBX_CONSTANT_COLOR, 0,
8135 GR_CMBX_ZERO, 0);
8136 CC_ENV ();
8137 }
8138 else
8139 {
8140 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8141 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
8142 GR_COMBINE_LOCAL_ITERATED,
8143 GR_COMBINE_OTHER_TEXTURE);
8144 USE_T0 ();
8145 }
8146}
8147
8148static void cc__t1_inter_t0_using_prim__mul_shade ()
8149{
8150 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8151 GR_COMBINE_FACTOR_LOCAL,
8152 GR_COMBINE_LOCAL_ITERATED,
8153 GR_COMBINE_OTHER_TEXTURE);
8154 T1_INTER_T0_USING_PRIM ();
8155}
8156
8157static void cc__t0_inter_t1_using_primlod__mul_shade ()
8158{
8159 //*
8160 if (rdp.LOD_en && (rdp.mipmap_level == 0) && !(settings.hacks&hack_Fifa98))
8161 {
8162 cc_t0_mul_shade ();
8163 return;
8164 }
8165 //*/
8166 if (settings.ucode == 7)
8167 lod_frac = rdp.prim_lodfrac;
8168 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8169 GR_COMBINE_FACTOR_LOCAL,
8170 GR_COMBINE_LOCAL_ITERATED,
8171 GR_COMBINE_OTHER_TEXTURE);
8172 T0_INTER_T1_USING_FACTOR (lod_frac);
8173}
8174
8175static void cc__t1_inter_t0_using_primlod__mul_shade ()
8176{
8177 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8178 GR_COMBINE_FACTOR_LOCAL,
8179 GR_COMBINE_LOCAL_ITERATED,
8180 GR_COMBINE_OTHER_TEXTURE);
8181 T1_INTER_T0_USING_FACTOR (lod_frac);
8182}
8183
8184static void cc__t0_inter_t1_using_half__mul_shade ()
8185{
8186 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8187 GR_COMBINE_FACTOR_LOCAL,
8188 GR_COMBINE_LOCAL_ITERATED,
8189 GR_COMBINE_OTHER_TEXTURE);
8190 T0_INTER_T1_USING_FACTOR (0x7F);
8191}
8192
8193static void cc__t0_inter_t1_using_t0__mul_shade ()
8194{
8195 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8196 GR_COMBINE_FACTOR_LOCAL,
8197 GR_COMBINE_LOCAL_ITERATED,
8198 GR_COMBINE_OTHER_TEXTURE);
8199 T0_INTER_T1_USING_T0();
8200}
8201
8202static void cc__t0_inter_t1_using_t1a__mul_shade ()
8203{
8204 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8205 GR_COMBINE_FACTOR_LOCAL,
8206 GR_COMBINE_LOCAL_ITERATED,
8207 GR_COMBINE_OTHER_TEXTURE);
8208 T0_INTER_T1_USING_T1A();
8209}
8210
8211static void cc__t0_inter_t1_using_shadea__mul_shade ()
8212{
8213 if (cmb.combine_ext)
8214 {
8215 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8216 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
8217 GR_CMBX_ITRGB, 0,
8218 GR_CMBX_ZERO, 0);
8219 }
8220 else
8221 {
8222 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8223 GR_COMBINE_FACTOR_LOCAL,
8224 GR_COMBINE_LOCAL_ITERATED,
8225 GR_COMBINE_OTHER_TEXTURE);
8226 }
8227 T0_INTER_T1_USING_SHADEA ();
8228}
8229
8230static void cc__t0_inter_t1_using_k5__mul_shade ()
8231{
8232 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8233 GR_COMBINE_FACTOR_LOCAL,
8234 GR_COMBINE_LOCAL_ITERATED,
8235 GR_COMBINE_OTHER_TEXTURE);
8236 T0_INTER_T1_USING_FACTOR (rdp.K5);
8237}
8238
8239static void cc__t1_inter_t0_using_k5__mul_shade ()
8240{
8241 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8242 GR_COMBINE_FACTOR_LOCAL,
8243 GR_COMBINE_LOCAL_ITERATED,
8244 GR_COMBINE_OTHER_TEXTURE);
8245 T1_INTER_T0_USING_FACTOR (rdp.K5);
8246}
8247
8248static void cc_t0_inter_prim_using_prima ()
8249{
8250 if (cmb.combine_ext)
8251 {
8252 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
8253 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
8254 GR_CMBX_TMU_CALPHA, 0,
8255 GR_CMBX_B, 0);
8256 cmb.tex_ccolor = rdp.prim_color;
8257 cmb.tex |= 1;
8258 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8259 GR_COMBINE_FACTOR_ONE,
8260 GR_COMBINE_LOCAL_NONE,
8261 GR_COMBINE_OTHER_TEXTURE);
8262 }
8263 else
8264 {
8265 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8266 GR_COMBINE_FACTOR_TEXTURE_RGB,
8267 GR_COMBINE_LOCAL_ITERATED,
8268 GR_COMBINE_OTHER_CONSTANT);
8269 CC_1SUBPRIMA ();
8270 SETSHADE_PRIM ();
8271 SETSHADE_PRIMA ();
8272 USE_T0 ();
8273 }
8274}
8275
8276static void cc__t0_inter_prim_using_t0a__mul_shade ()
8277{
8278 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8279 GR_COMBINE_FACTOR_LOCAL,
8280 GR_COMBINE_LOCAL_ITERATED,
8281 GR_COMBINE_OTHER_TEXTURE);
8282 MOD_0 (TMOD_TEX_INTER_COL_USING_TEXA);
8283 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
8284 USE_T0 ();
8285}
8286
8287static void cc__env_inter_prim_using_t0__mul_prim ()
8288{
8289 // (prim-env)*t0+env, (cmb-0)*prim+0
8290 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8291 GR_COMBINE_FACTOR_LOCAL,
8292 GR_COMBINE_LOCAL_CONSTANT,
8293 GR_COMBINE_OTHER_TEXTURE);
8294 CC_PRIM ();
8295 MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8296 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8297 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8298 USE_T0 ();
8299}
8300
8301static void cc__env_inter_prim_using_t0__mul_shade ()
8302{
8303 // amazing... mace actually uses the blender as part of the combine
8304 if ((rdp.othermode_l & 0xFFFF0000) == 0x03820000 ||
8305 (rdp.othermode_l & 0xFFFF0000) == 0x00910000)
8306 {
8307 // blender:
8308 // 1ST = CLR_IN * A_IN + CLR_BL * 1MA
8309 // OUT = 1ST * 0 + 1ST * 1
8310
8311 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8312 GR_COMBINE_FACTOR_LOCAL,
8313 GR_COMBINE_LOCAL_ITERATED,
8314 GR_COMBINE_OTHER_TEXTURE);
8315 MOD_0 (TMOD_COL2_INTER__COL_INTER_COL1_USING_TEX__USING_TEXA);
8316 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8317 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8318 MOD_0_COL2 (rdp.blend_color & 0xFFFFFF00);
8319 USE_T0 ();
8320 return;
8321 }
8322 //(prim-env)*t0+env, (shade-0)*cmb+0
8323 MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8324 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8325 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8326 USE_T0 ();
8327 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8328 GR_COMBINE_FACTOR_LOCAL,
8329 GR_COMBINE_LOCAL_ITERATED,
8330 GR_COMBINE_OTHER_TEXTURE);
8331}
8332
8333static void cc__env_inter_one_using_t0__mul_shade ()
8334{
8335 //(one-env)*t0+env, (cmb-0)*shade+0
8336 if (cmb.combine_ext)
8337 {
8338 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8339 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ONE_MINUS_X,
8340 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
8341 GR_CMBX_B, 0);
8342 cmb.tex_ccolor = rdp.env_color&0xFFFFFF00;
8343 cmb.tex |= 1;
8344 }
8345 else
8346 {
8347 MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8348 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8349 MOD_0_COL1 (0xFFFFFF00);
8350 USE_T0 ();
8351 }
8352 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8353 GR_COMBINE_FACTOR_LOCAL,
8354 GR_COMBINE_LOCAL_ITERATED,
8355 GR_COMBINE_OTHER_TEXTURE);
8356}
8357
8358static void cc_env_inter_one_using__one_sub_t0_mul_primlod ()
8359{
8360 if (cmb.combine_ext)
8361 {
8362 // (noise-t0)*primlod+0, (1-env)*cmb+env
8363 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
8364 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
8365 GR_CMBX_DETAIL_FACTOR, 0,
8366 GR_CMBX_ZERO, 0);
8367 cmb.tex_ccolor = rand()&0xFFFFFF00;
8368 cmb.tex |= 1;
8369 percent = (float)(lod_frac) / 255.0f;
8370 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
8371 cmb.tex |= 1;
8372 }
8373 else
8374 {
8375 USE_T0 ();
8376 }
8377 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8378 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
8379 GR_COMBINE_LOCAL_CONSTANT,
8380 GR_COMBINE_OTHER_TEXTURE);
8381 CC_ENV ();
8382}
8383
8384static void cc__env_inter_prim_using_prima__mul_shade ()
8385{
8386 int primr = (rdp.prim_color>>24)&0xFF;
8387 int primg = (rdp.prim_color>>16)&0xFF;
8388 int primb = (rdp.prim_color>>8)&0xFF;
8389 int prima = rdp.prim_color&0xFF;
8390 int envr = (rdp.env_color>>24)&0xFF;
8391 int envg = (rdp.env_color>>16)&0xFF;
8392 int envb = (rdp.env_color>>8)&0xFF;
8393 int r = (((primr-envr)*prima)/256)+envr;
8394 int g = (((primg-envg)*prima)/256)+envg;
8395 int b = (((primb-envb)*prima)/256)+envb;
8396 cmb.ccolor = (r<<24) | (g<<16) | (b<<8);
8397 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8398 GR_COMBINE_FACTOR_LOCAL,
8399 GR_COMBINE_LOCAL_ITERATED,
8400 GR_COMBINE_OTHER_CONSTANT);
8401}
8402
8403static void cc__prim_inter_t0_using_env__mul_shade ()
8404{
8405 // (t0-prim)*env+prim, (cmb-0)*shade+0
8406 if ((rdp.prim_color & 0xFFFFFF00) == 0)
8407 {
8408 cc_t0_mul_env_mul_shade ();
8409 }
8410 else if (cmb.combine_ext)
8411 {
8412 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
8413 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8414 GR_CMBX_TMU_CCOLOR, 0,
8415 GR_CMBX_ZERO, 0);
8416 cmb.tex_ccolor = rdp.env_color & 0xFFFFFF00;
8417 cmb.tex |= 1;
8418 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8419 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
8420 GR_CMBX_ITRGB, 0,
8421 GR_CMBX_ZERO, 0);
8422 wxUint32 onesubenv = ~rdp.env_color;
8423 CC_C1MULC2(rdp.prim_color, onesubenv);
8424 }
8425 else
8426 {
8427 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8428 GR_COMBINE_FACTOR_LOCAL,
8429 GR_COMBINE_LOCAL_ITERATED,
8430 GR_COMBINE_OTHER_TEXTURE);
8431 MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
8432 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
8433 MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);
8434 USE_T0 ();
8435 }
8436}
8437
8438static void cc__one_inter_prim_using_t1__mul_shade ()
8439{
8440 if (cmb.combine_ext)
8441 {
8442 if ((settings.hacks&hack_BAR) && rdp.cur_tile == 1)
8443 {
8444 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
8445 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
8446 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
8447 GR_CMBX_ZERO, 1);
8448 cmb.tex |= 1;
8449 }
8450 else
8451 {
8452 T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
8453 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
8454 GR_CMBX_LOCAL_TEXTURE_RGB, 0,
8455 GR_CMBX_ZERO, 1);
8456 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8457 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8458 GR_CMBX_ZERO, 0,
8459 GR_CMBX_B, 0);
8460 cmb.tex |= 2;
8461 }
8462 cmb.tex_ccolor = rdp.prim_color | 0xFF;
8463 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8464 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
8465 GR_CMBX_ITRGB, 0,
8466 GR_CMBX_ZERO, 0);
8467 }
8468 else
8469 {
8470 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8471 GR_COMBINE_FACTOR_LOCAL,
8472 GR_COMBINE_LOCAL_ITERATED,
8473 GR_COMBINE_OTHER_TEXTURE);
8474 if ((settings.hacks&hack_BAR) && rdp.cur_tile == 1)
8475 {
8476 MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8477 MOD_0_COL (0xFFFFFF00);
8478 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8479 USE_T0 ();
8480 }
8481 else
8482 {
8483 MOD_1 (TMOD_COL_INTER_COL1_USING_TEX);
8484 MOD_1_COL (0xFFFFFF00);
8485 MOD_1_COL1 (rdp.prim_color & 0xFFFFFF00);
8486 USE_T1 ();
8487 }
8488 }
8489}
8490
8491static void cc_prim_sub__prim_sub_t0_mul_prima__mul_shade ()
8492{
8493 // (prim-t0)*prim_a+0, (prim-cmb)*shade+0
8494 if (cmb.combine_ext)
8495 {
8496 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
8497 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
8498 GR_CMBX_TMU_CALPHA, 0,
8499 GR_CMBX_ZERO, 0);
8500 cmb.tex_ccolor = rdp.prim_color;
8501 cmb.tex |= 1;
8502 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
8503 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
8504 GR_CMBX_ITRGB, 0,
8505 GR_CMBX_ZERO, 0);
8506 CC_PRIM();
8507 }
8508 else
8509 {
8510 if ((rdp.prim_color & 0xFFFFFF00) == 0)
8511 {
8512 cc_t0_mul_prima_mul_shade ();
8513 return;
8514 }
8515 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8516 GR_COMBINE_FACTOR_LOCAL,
8517 GR_COMBINE_LOCAL_ITERATED,
8518 GR_COMBINE_OTHER_TEXTURE);
8519 MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
8520 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
8521 wxUint8 prima = (wxUint8)(rdp.prim_color&0xFF);
8522 MOD_0_COL1 ((prima<<24)|(prima<<16)|(prima<<8));
8523 USE_T0 ();
8524 }
8525}
8526
8527static void cc__prim_inter_env_using_t0__mul_shade ()
8528{
8529 // (env-prim)*t0+prim, (cmb-0)*shade+0
8530 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8531 GR_COMBINE_FACTOR_LOCAL,
8532 GR_COMBINE_LOCAL_ITERATED,
8533 GR_COMBINE_OTHER_TEXTURE);
8534 MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8535 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
8536 MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);
8537 USE_T0 ();
8538}
8539
8540static void cc__prim_inter_one_using_env__mul_shade ()
8541{
8542 // (one-prim)*env+prim, (cmb-0)*shade+0
8543 if ((rdp.prim_color&0xFFFFFF00) == 0)
8544 {
8545 cc_env_mul_shade ();
8546 return;
8547 }
8548 if ((rdp.env_color&0xFFFFFF00) == 0)
8549 {
8550 cc_prim_mul_shade ();
8551 return;
8552 }
8553 if ((rdp.prim_color&0xFFFFFF00) == 0xFFFFFF00 || (rdp.env_color&0xFFFFFF00) == 0xFFFFFF00)
8554 {
8555 cc_shade ();
8556 return;
8557 }
8558 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8559 GR_COMBINE_FACTOR_LOCAL,
8560 GR_COMBINE_LOCAL_ITERATED,
8561 GR_COMBINE_OTHER_CONSTANT);
8562 CC_1SUBPRIM ();
8563 CC_C1MULC2 (cmb.ccolor, rdp.env_color);
8564 cmb.ccolor=(wxUint8)( min(255, (int)((cmb.ccolor & 0xFF000000) >> 24) + (int)((rdp.prim_color & 0xFF000000) >> 24)) ) << 24 |
8565 (wxUint8)( min(255, (int)((cmb.ccolor & 0x00FF0000) >> 16) + (int)((rdp.prim_color & 0x00FF0000) >> 16)) ) << 16 |
8566 (wxUint8)( min(255, (int)((cmb.ccolor & 0x0000FF00) >> 8) + (int)((rdp.prim_color & 0x0000FF00) >> 8)) ) << 8 ;
8567}
8568
8569static void cc__env_inter_prim_using_t0a__mul_t0 ()
8570{
8571 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8572 GR_COMBINE_FACTOR_ONE,
8573 GR_COMBINE_LOCAL_NONE,
8574 GR_COMBINE_OTHER_TEXTURE);
8575 MOD_0 (TMOD_COL_INTER_COL1_USING_TEXA__MUL_TEX);
8576 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8577 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8578 USE_T0 ();
8579}
8580
8581static void cc__env_inter_prim_using_t0a__mul_prim ()
8582{
8583 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8584 GR_COMBINE_FACTOR_LOCAL,
8585 GR_COMBINE_LOCAL_CONSTANT,
8586 GR_COMBINE_OTHER_TEXTURE);
8587 CC_PRIM ();
8588 MOD_0 (TMOD_COL_INTER_COL1_USING_TEXA);
8589 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8590 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8591 USE_T0 ();
8592}
8593
8594static void cc__env_inter_prim_using__t0_sub_shade_mul_primlod_add_env ()
8595{
8596 // (t0-shade)*lodf+env, (prim-env)*cmb+env
8597 if (cmb.combine_ext)
8598 {
8599 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
8600 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
8601 GR_CMBX_DETAIL_FACTOR, 0,
8602 GR_CMBX_B, 0);
8603 cmb.tex_ccolor = rdp.env_color;
8604 percent = (float)lod_frac / 255.0f;
8605 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
8606 cmb.tex |= 1;
8607 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
8608 GR_COMBINE_FACTOR_TEXTURE_RGB,
8609 GR_COMBINE_LOCAL_ITERATED,
8610 GR_COMBINE_OTHER_CONSTANT);
8611 CC_PRIM ();
8612 SETSHADE_ENV ();
8613 }
8614 else
8615 {
8616 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
8617 GR_COMBINE_FACTOR_ONE,//TEXTURE_RGB,
8618 GR_COMBINE_LOCAL_ITERATED,
8619 GR_COMBINE_OTHER_TEXTURE);//CONSTANT);
8620 MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8621 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8622 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8623 USE_T0 ();
8624 MULSHADE_PRIMSUBENV ();
8625 MULSHADE_PRIMLOD();
8626 SUBSHADE_PRIMSUBENV ();
8627 }
8628}
8629
8630static void cc__prim_inter_t0_using_t0__mul_shade ()
8631{
8632 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8633 GR_COMBINE_FACTOR_LOCAL,
8634 GR_COMBINE_LOCAL_ITERATED,
8635 GR_COMBINE_OTHER_TEXTURE);
8636 MOD_0 (TMOD_COL_INTER_TEX_USING_TEX);
8637 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
8638 USE_T0 ();
8639}
8640
8641static void cc__env_inter_t0_using_t0a__mul_shade ()
8642{
8643 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8644 GR_COMBINE_FACTOR_LOCAL,
8645 GR_COMBINE_LOCAL_ITERATED,
8646 GR_COMBINE_OTHER_TEXTURE);
8647 MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);
8648 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8649 USE_T0 ();
8650}
8651
8652static void cc__env_inter_t0_using_prima__mul_shade ()
8653{
8654 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8655 GR_COMBINE_FACTOR_LOCAL,
8656 GR_COMBINE_LOCAL_ITERATED,
8657 GR_COMBINE_OTHER_TEXTURE);
8658 MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
8659 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8660 wxUint32 prima = rdp.prim_color & 0xFF;
8661 MOD_0_COL1 ((prima<<24)|(prima|16)|(prima<<8));
8662 USE_T0 ();
8663}
8664
8665static void cc_shade_mul_prima ()
8666{
8667 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8668 GR_COMBINE_FACTOR_ONE,
8669 GR_COMBINE_LOCAL_NONE,
8670 GR_COMBINE_OTHER_ITERATED);
8671 MULSHADE_PRIMA ();
8672}
8673
8674static void cc_shade_mul_shadea ()
8675{
8676 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8677 GR_COMBINE_FACTOR_ONE,
8678 GR_COMBINE_LOCAL_NONE,
8679 GR_COMBINE_OTHER_ITERATED);
8680 MULSHADE_SHADEA ();
8681}
8682
8683static void cc__t0_mul_shade__inter_env_using_enva ()
8684{
8685 // (t0-0)*shade+0, (env-cmb)*env_a+cmb ** INC **
8686 wxUint32 enva = rdp.env_color&0xFF;
8687 if (enva == 0xFF)
8688 cc_env ();
8689 else if (enva == 0)
8690 cc_t0_mul_shade ();
8691 else if (cmb.combine_ext)
8692 {
8693 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
8694 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
8695 GR_CMBX_ITRGB, 0,
8696 GR_CMBX_B, 0);
8697 cmb.tex |= 1;
8698 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8699 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
8700 GR_CMBX_ZERO, 1,
8701 GR_CMBX_ZERO, 0);
8702 MULSHADE_1MENVA ();
8703 CC_COLMULBYTE(rdp.env_color, (rdp.env_color&0xFF));
8704 cmb.tex_ccolor = cmb.ccolor;
8705 }
8706 else
8707 {
8708 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8709 GR_COMBINE_FACTOR_LOCAL,
8710 GR_COMBINE_LOCAL_ITERATED,
8711 GR_COMBINE_OTHER_TEXTURE);
8712 INTERSHADE_2 (rdp.env_color & 0xFFFFFF00, rdp.env_color & 0xFF);
8713 USE_T0 ();
8714 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
8715 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8716 MOD_0_FAC (rdp.env_color & 0xFF);
8717 }
8718}
8719
8720static void cc__t0_mul_shade__inter_one_using_enva ()
8721{
8722 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8723 GR_COMBINE_FACTOR_TEXTURE_RGB,
8724 GR_COMBINE_LOCAL_CONSTANT,
8725 GR_COMBINE_OTHER_ITERATED);
8726 CC_ENVA ();
8727 MULSHADE_1MENVA ();
8728 USE_T0 ();
8729}
8730
8731static void cc__t0_mul_shade__inter_one_using_shadea ()
8732{
8733 if (cmb.combine_ext)
8734 {
8735 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8736 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
8737 GR_CMBX_ITRGB, 0,
8738 GR_CMBX_ZERO, 0);
8739 cmb.tex |= 1;
8740 CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_X,
8741 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
8742 GR_CMBX_ITALPHA, 0,
8743 GR_CMBX_B, 0);
8744 }
8745 else
8746 {
8747 cc_t0_mul_shade ();
8748 }
8749}
8750
8751static void cc__prim_mul_shade__inter_env_using_enva ()
8752{
8753 CCMB (GR_COMBINE_FUNCTION_BLEND,
8754 GR_COMBINE_FACTOR_LOCAL_ALPHA,
8755 GR_COMBINE_LOCAL_ITERATED,
8756 GR_COMBINE_OTHER_CONSTANT);
8757 CC_ENV ();
8758 MULSHADE_PRIM ();
8759 SETSHADE_A_ENV ();
8760}
8761
8762static void cc__prim_mul_shade__inter_env_using__prim_mul_shade_alpha ()
8763{
8764 CCMB (GR_COMBINE_FUNCTION_BLEND,
8765 GR_COMBINE_FACTOR_LOCAL_ALPHA,
8766 GR_COMBINE_LOCAL_ITERATED,
8767 GR_COMBINE_OTHER_CONSTANT);
8768 CC_ENV ();
8769 MULSHADE_PRIM ();
8770 MULSHADE_A_PRIM ();
8771}
8772
8773
8774//****************************************************************
8775
8776static void ac_one ()
8777{
8778 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8779 GR_COMBINE_FACTOR_NONE,
8780 GR_COMBINE_LOCAL_CONSTANT,
8781 GR_COMBINE_OTHER_NONE);
8782 cmb.ccolor |= 0xFF;
8783}
8784
8785static void ac_t0 ()
8786{
8787 if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))
8788 {
8789 wxUint32 blend_mode = (rdp.othermode_l >> 16);
8790 if (blend_mode == 0x0550)
8791 {
8792 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8793 GR_COMBINE_FACTOR_LOCAL,
8794 GR_COMBINE_LOCAL_CONSTANT,
8795 GR_COMBINE_OTHER_TEXTURE);
8796 CA(rdp.fog_color);
8797 }
8798 else if (blend_mode == 0x55f0) //cmem*afog + cfog*1ma
8799 {
8800 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8801 GR_COMBINE_FACTOR_ONE,
8802 GR_COMBINE_LOCAL_CONSTANT,
8803 GR_COMBINE_OTHER_NONE);
8804 CA(~rdp.fog_color);
8805 }
8806 else
8807 {
8808 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8809 GR_COMBINE_FACTOR_ONE,
8810 GR_COMBINE_LOCAL_NONE,
8811 GR_COMBINE_OTHER_TEXTURE);
8812 }
8813 }
8814 else
8815 {
8816 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8817 GR_COMBINE_FACTOR_ONE,
8818 GR_COMBINE_LOCAL_NONE,
8819 GR_COMBINE_OTHER_TEXTURE);
8820 }
8821 A_USE_T0 ();
8822}
8823
8824static void ac_zero ()
8825{
8826 if (cmb.tex > 0)
8827 {
8828 ac_t0 ();
8829 return;
8830 }
8831 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8832 GR_COMBINE_FACTOR_NONE,
8833 GR_COMBINE_LOCAL_CONSTANT,
8834 GR_COMBINE_OTHER_NONE);
8835 cmb.ccolor &= 0xFFFFFF00;
8836}
8837
8838static void ac_t1 ()
8839{
8840 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8841 GR_COMBINE_FACTOR_ONE,
8842 GR_COMBINE_LOCAL_NONE,
8843 GR_COMBINE_OTHER_TEXTURE);
8844 if ((settings.hacks&hack_BAR) && rdp.tiles[rdp.cur_tile].format == 3)
8845 A_USE_T0 ();
8846 else
8847 A_USE_T1 ();
8848}
8849
8850static void ac_prim ()
8851{
8852 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8853 GR_COMBINE_FACTOR_NONE,
8854 GR_COMBINE_LOCAL_CONSTANT,
8855 GR_COMBINE_OTHER_NONE);
8856 CA_PRIM ();
8857}
8858
8859static void ac_primlod ()
8860{
8861 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8862 GR_COMBINE_FACTOR_NONE,
8863 GR_COMBINE_LOCAL_CONSTANT,
8864 GR_COMBINE_OTHER_NONE);
8865 CA_PRIMLOD ();
8866}
8867
8868static void ac_one_sub_t0 ()
8869{
8870 ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
8871 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
8872 GR_COMBINE_LOCAL_CONSTANT,
8873 GR_COMBINE_OTHER_NONE);
8874 CA (0xFF);
8875 A_USE_T0 ();
8876}
8877
8878static void ac_one_sub_prim ()
8879{
8880 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8881 GR_COMBINE_FACTOR_NONE,
8882 GR_COMBINE_LOCAL_CONSTANT,
8883 GR_COMBINE_OTHER_NONE);
8884 CA_INVPRIM ();
8885}
8886
8887static void ac_env ()
8888{
8889 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8890 GR_COMBINE_FACTOR_NONE,
8891 GR_COMBINE_LOCAL_CONSTANT,
8892 GR_COMBINE_OTHER_NONE);
8893 CA_ENV ();
8894}
8895
8896static void ac_shade ()
8897{
8898 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8899 GR_COMBINE_FACTOR_NONE,
8900 GR_COMBINE_LOCAL_ITERATED,
8901 GR_COMBINE_OTHER_NONE);
8902}
8903
8904// ** A+B **
8905static void ac_t0_add_t1 () //Aded by Gonetz
8906{
8907 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8908 GR_COMBINE_FACTOR_ONE,
8909 GR_COMBINE_LOCAL_NONE,
8910 GR_COMBINE_OTHER_TEXTURE);
8911 A_T0_ADD_T1 ();
8912}
8913
8914static void ac__t0_mul_prim__add__t1_mul_primlod () //Aded by Gonetz
8915{
8916 if (lod_frac == 0)
8917 {
8918 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8919 GR_COMBINE_FACTOR_LOCAL,
8920 GR_COMBINE_LOCAL_CONSTANT,
8921 GR_COMBINE_OTHER_TEXTURE);
8922 CA_PRIM ();
8923 A_USE_T0 ();
8924 }
8925 else if ((rdp.prim_color&0xFF) == 0)
8926 {
8927 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8928 GR_COMBINE_FACTOR_LOCAL,
8929 GR_COMBINE_LOCAL_CONSTANT,
8930 GR_COMBINE_OTHER_TEXTURE);
8931 CA_PRIMLOD ();
8932 A_USE_T1 ();
8933 }
8934 else if ((rdp.prim_color&0xFF) == 0xFF)
8935 {
8936 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8937 GR_COMBINE_FACTOR_ONE,
8938 GR_COMBINE_LOCAL_NONE,
8939 GR_COMBINE_OTHER_TEXTURE);
8940 A_T1_MUL_PRIMLOD_ADD_T0();
8941 }
8942 else
8943 {
8944 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8945 GR_COMBINE_FACTOR_LOCAL,
8946 GR_COMBINE_LOCAL_CONSTANT,
8947 GR_COMBINE_OTHER_TEXTURE);
8948 CA_PRIM ();
8949 A_T0_ADD_T1 ();
8950 }
8951}
8952
8953static void ac_t0_add_prim () //Aded by Gonetz
8954{
8955 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8956 GR_COMBINE_FACTOR_ONE,
8957 GR_COMBINE_LOCAL_CONSTANT,
8958 GR_COMBINE_OTHER_TEXTURE);
8959 CA_PRIM ();
8960 A_USE_T0 ();
8961}
8962
8963static void ac_t0_add_env () //Aded by Gonetz
8964{
8965 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8966 GR_COMBINE_FACTOR_ONE,
8967 GR_COMBINE_LOCAL_CONSTANT,
8968 GR_COMBINE_OTHER_TEXTURE);
8969 CA_ENV ();
8970 A_USE_T0 ();
8971}
8972
8973static void ac_t1_add_env () //Added by Gonetz
8974{
8975ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8976GR_COMBINE_FACTOR_ONE,
8977GR_COMBINE_LOCAL_CONSTANT,
8978GR_COMBINE_OTHER_TEXTURE);
8979CA_ENV ();
8980A_USE_T1 ();
8981}
8982
8983static void ac__t0_add_t1__add_prim () //Aded by Gonetz
8984{
8985 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8986 GR_COMBINE_FACTOR_ONE,
8987 GR_COMBINE_LOCAL_CONSTANT,
8988 GR_COMBINE_OTHER_TEXTURE);
8989 CA_PRIM ();
8990 A_T0_ADD_T1 ();
8991}
8992
8993static void ac_prim_add_shade () //Aded by Gonetz
8994{
8995 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8996 GR_COMBINE_FACTOR_ONE,
8997 GR_COMBINE_LOCAL_ITERATED,
8998 GR_COMBINE_OTHER_CONSTANT);
8999 CA_PRIM ();
9000}
9001
9002static void ac_env_add_shade () //Aded by Gonetz
9003{
9004 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9005 GR_COMBINE_FACTOR_ONE,
9006 GR_COMBINE_LOCAL_ITERATED,
9007 GR_COMBINE_OTHER_CONSTANT);
9008 CA_ENV ();
9009}
9010
9011// ** A*B **
9012static void ac_t0_mul_t0 () //Added by Gonetz
9013{
9014 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9015 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9016 GR_COMBINE_LOCAL_NONE,
9017 GR_COMBINE_OTHER_TEXTURE);
9018 A_USE_T0 ();
9019}
9020
9021static void ac_t0_mul_t1 ()
9022{
9023 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9024 GR_COMBINE_FACTOR_ONE,
9025 GR_COMBINE_LOCAL_NONE,
9026 GR_COMBINE_OTHER_TEXTURE);
9027 A_T0_MUL_T1 ();
9028}
9029
9030static void ac_t0_mul_t1_add_t1 ()
9031{
9032 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9033 GR_COMBINE_FACTOR_ONE,
9034 GR_COMBINE_LOCAL_NONE,
9035 GR_COMBINE_OTHER_TEXTURE);
9036 if (cmb.combine_ext)
9037 {
9038 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9039 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9040 GR_CMBX_ZERO, 0,
9041 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9042 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9043 GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9044 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
9045 GR_CMBX_B, 0);
9046 cmb.tex |= 3;
9047 }
9048 else
9049 {
9050 A_T0_MUL_T1 ();
9051 }
9052}
9053
9054static void ac_t0_mul_t1_add_prim ()
9055{
9056 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9057 GR_COMBINE_FACTOR_ONE,
9058 GR_COMBINE_LOCAL_CONSTANT,
9059 GR_COMBINE_OTHER_TEXTURE);
9060 CA_PRIM ();
9061 A_T0_MUL_T1 ();
9062}
9063
9064static void ac_t0_mul_prim ()
9065{
9066 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9067 GR_COMBINE_FACTOR_LOCAL,
9068 GR_COMBINE_LOCAL_CONSTANT,
9069 GR_COMBINE_OTHER_TEXTURE);
9070 CA_PRIM ();
9071 A_USE_T0 ();
9072}
9073
9074static void ac_t0_mul_prim_mul_primlod ()
9075{
9076 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9077 GR_COMBINE_FACTOR_LOCAL,
9078 GR_COMBINE_LOCAL_CONSTANT,
9079 GR_COMBINE_OTHER_TEXTURE);
9080 CA_PRIM_MUL_PRIMLOD ();
9081 A_USE_T0 ();
9082}
9083
9084static void ac_t1_mul_prim ()
9085{
9086 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9087 GR_COMBINE_FACTOR_LOCAL,
9088 GR_COMBINE_LOCAL_CONSTANT,
9089 GR_COMBINE_OTHER_TEXTURE);
9090 CA_PRIM ();
9091 if (rdp.cycle_mode == 0)
9092 A_USE_T0 ();
9093 else
9094 A_USE_T1 ();
9095}
9096
9097//Added by Gonetz
9098static void ac__t1_sub_one_mul_primlod_add_t0__mul_prim ()
9099{
9100 if (cmb.combine_ext)
9101 {
9102 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9103 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9104 GR_CMBX_ZERO, 0,
9105 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9106 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9107 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
9108 GR_CMBX_DETAIL_FACTOR, 0,
9109 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9110 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
9111 percent = (float)lod_frac / 255.0f;
9112 }
9113 else
9114 {
9115 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
9116 cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
9117 percent = (255 - lod_frac) / 255.0f;
9118 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
9119 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
9120 }
9121 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9122 GR_COMBINE_FACTOR_LOCAL,
9123 GR_COMBINE_LOCAL_CONSTANT,
9124 GR_COMBINE_OTHER_TEXTURE);
9125 CA_PRIM ();
9126 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9127 cmb.tex |= 3;
9128}
9129
9130static void ac__t0_sub_t1_mul_enva_add_t0__mul_prim ()
9131{
9132 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9133 GR_COMBINE_FACTOR_LOCAL,
9134 GR_COMBINE_LOCAL_CONSTANT,
9135 GR_COMBINE_OTHER_TEXTURE);
9136 CA_PRIM ();
9137 if (cmb.combine_ext)
9138 {
9139 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9140 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9141 GR_CMBX_ZERO, 0,
9142 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9143 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9144 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9145 GR_CMBX_TMU_CALPHA, 0,
9146 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9147 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
9148 cmb.tex |= 3;
9149 }
9150 else
9151 {
9152 A_T0_MUL_T1 ();
9153 }
9154}
9155
9156static void ac__t0_sub_one_mul_enva_add_t0__mul_prim ()
9157{
9158 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9159 GR_COMBINE_FACTOR_LOCAL,
9160 GR_COMBINE_LOCAL_CONSTANT,
9161 GR_COMBINE_OTHER_TEXTURE);
9162 CA_PRIM ();
9163 if (cmb.combine_ext)
9164 {
9165 T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
9166 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9167 GR_CMBX_TMU_CALPHA, 0,
9168 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9169 SETSHADE_A(0xFF);
9170 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
9171 cmb.tex |= 1;
9172 }
9173 else
9174 {
9175 A_USE_T0 ();
9176 }
9177}
9178
9179static void ac__t0_sub_t1_mul_primlod_add_t0__mul_prim ()
9180{
9181 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9182 GR_COMBINE_FACTOR_LOCAL,
9183 GR_COMBINE_LOCAL_CONSTANT,
9184 GR_COMBINE_OTHER_TEXTURE);
9185 CA_PRIM ();
9186 if (cmb.combine_ext)
9187 {
9188 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9189 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9190 GR_CMBX_ZERO, 0,
9191 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9192 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9193 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9194 GR_CMBX_DETAIL_FACTOR, 0,
9195 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9196 cmb.tex |= 3;
9197 percent = (float)lod_frac / 255.0f;
9198 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9199 }
9200 else
9201 {
9202 A_T0_INTER_T1_USING_FACTOR (lod_frac);
9203 }
9204}
9205
9206static void ac__t1_sub_prim_mul_primlod_add_t0__mul_prim ()
9207{
9208 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9209 GR_COMBINE_FACTOR_LOCAL,
9210 GR_COMBINE_LOCAL_CONSTANT,
9211 GR_COMBINE_OTHER_TEXTURE);
9212 CA_PRIM ();
9213 if (cmb.combine_ext)
9214 {
9215 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9216 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9217 GR_CMBX_ZERO, 0,
9218 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9219 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9220 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
9221 GR_CMBX_DETAIL_FACTOR, 0,
9222 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9223 cmb.tex |= 3;
9224 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
9225 percent = (float)lod_frac / 255.0f;
9226 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9227 }
9228 else
9229 {
9230 A_T0_INTER_T1_USING_FACTOR (lod_frac);
9231 }
9232}
9233
9234static void ac__t1_sub_t0_mul_enva_add_t1__mul_prim ()
9235{
9236 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9237 GR_COMBINE_FACTOR_LOCAL,
9238 GR_COMBINE_LOCAL_CONSTANT,
9239 GR_COMBINE_OTHER_TEXTURE);
9240 CA_PRIM ();
9241 if (cmb.combine_ext)
9242 {
9243 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9244 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9245 GR_CMBX_ZERO, 0,
9246 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9247 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9248 GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9249 GR_CMBX_TMU_CALPHA, 0,
9250 GR_CMBX_B, 0);
9251 cmb.tex |= 3;
9252 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF);
9253 }
9254 else
9255 {
9256 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
9257 A_T0_INTER_T1_USING_FACTOR (factor);
9258 }
9259}
9260
9261static void ac__t1_sub_t0_mul_primlod__mul_env_add_prim ()
9262{
9263 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9264 GR_COMBINE_FACTOR_ONE,
9265 GR_COMBINE_LOCAL_CONSTANT,
9266 GR_COMBINE_OTHER_TEXTURE);
9267 CA_PRIM ();
9268 if (cmb.combine_ext)
9269 {
9270 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9271 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9272 GR_CMBX_ZERO, 0,
9273 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9274 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9275 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9276 GR_CMBX_TMU_CALPHA, 0,
9277 GR_CMBX_ZERO, 0);
9278 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (wxUint32)((float)(rdp.env_color&0xFF)*(float)rdp.prim_lodfrac/255.0f);
9279 }
9280 else
9281 {
9282 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL;
9283 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL;
9284 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
9285 percent = (rdp.prim_lodfrac * (rdp.env_color&0xFF)) / 65025.0f;
9286 cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
9287 }
9288 cmb.tex |= 3;
9289}
9290
9291static void ac__t0_sub_one_mul_enva_add_t1__mul_prim ()
9292{
9293 if (cmb.combine_ext)
9294 {
9295 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9296 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9297 GR_CMBX_ZERO, 0,
9298 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9299 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9300 GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9301 GR_CMBX_TMU_CALPHA, 0,
9302 GR_CMBX_B, 0);
9303 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
9304 cmb.tex |= 3;
9305 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9306 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9307 GR_CMBX_ITALPHA, 0,
9308 GR_CMBX_ZERO, 0);
9309 CA_ENV ();
9310 SETSHADE_A_PRIM ();
9311 }
9312 else
9313 {
9314 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9315 GR_COMBINE_FACTOR_LOCAL,
9316 GR_COMBINE_LOCAL_ITERATED,
9317 GR_COMBINE_OTHER_TEXTURE);
9318 SETSHADE_A_PRIM ();
9319 SETSHADE_A_ENV ();
9320 A_T0_MUL_T1 ();
9321 }
9322}
9323
9324static void ac__t1_mul_prima_add_t0__mul_env ()
9325{
9326 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9327 GR_COMBINE_FACTOR_LOCAL,
9328 GR_COMBINE_LOCAL_CONSTANT,
9329 GR_COMBINE_OTHER_TEXTURE);
9330 CA_ENV ();
9331 A_T1_MUL_PRIMA_ADD_T0 ();
9332}
9333
9334static void ac__t1_mul_enva_add_t0__mul_prim ()
9335{
9336 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9337 GR_COMBINE_FACTOR_LOCAL,
9338 GR_COMBINE_LOCAL_CONSTANT,
9339 GR_COMBINE_OTHER_TEXTURE);
9340 CA_PRIM ();
9341 A_T1_MUL_ENVA_ADD_T0 ();
9342}
9343
9344static void ac_t0_mul_primlod ()
9345{
9346 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9347 GR_COMBINE_FACTOR_LOCAL,
9348 GR_COMBINE_LOCAL_CONSTANT,
9349 GR_COMBINE_OTHER_TEXTURE);
9350 CA_PRIMLOD ();
9351 A_USE_T0 ();
9352}
9353
9354static void ac_t1_mul_primlod ()
9355{
9356 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9357 GR_COMBINE_FACTOR_LOCAL,
9358 GR_COMBINE_LOCAL_CONSTANT,
9359 GR_COMBINE_OTHER_TEXTURE);
9360 CA_PRIMLOD ();
9361 A_USE_T1 ();
9362}
9363
9364//Added by Gonetz
9365static void ac__t0_add_t1__mul_prim ()
9366{
9367 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9368 GR_COMBINE_FACTOR_LOCAL,
9369 GR_COMBINE_LOCAL_CONSTANT,
9370 GR_COMBINE_OTHER_TEXTURE);
9371 CA_PRIM ();
9372 A_T0_ADD_T1 ();
9373}
9374
9375//Added by Gonetz
9376static void ac__t0_add_t1__mul_primlod ()
9377{
9378 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9379 GR_COMBINE_FACTOR_LOCAL,
9380 GR_COMBINE_LOCAL_CONSTANT,
9381 GR_COMBINE_OTHER_TEXTURE);
9382 CA_PRIMLOD ();
9383 A_T0_ADD_T1 ();
9384}
9385
9386//Added by Gonetz
9387static void ac__t0_mul_t1__mul_primlod ()
9388{
9389 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9390 GR_COMBINE_FACTOR_LOCAL,
9391 GR_COMBINE_LOCAL_CONSTANT,
9392 GR_COMBINE_OTHER_TEXTURE);
9393 CA_PRIMLOD ();
9394 A_T0_MUL_T1 ();
9395}
9396
9397static void ac_t0_mul_env ()
9398{
9399 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9400 GR_COMBINE_FACTOR_LOCAL,
9401 GR_COMBINE_LOCAL_CONSTANT,
9402 GR_COMBINE_OTHER_TEXTURE);
9403 CA_ENV ();
9404 A_USE_T0 ();
9405}
9406
9407static void ac_t0_mul_env_mul_primlod ()
9408{
9409 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9410 GR_COMBINE_FACTOR_LOCAL,
9411 GR_COMBINE_LOCAL_CONSTANT,
9412 GR_COMBINE_OTHER_TEXTURE);
9413 CA_ENV_MUL_PRIMLOD ();
9414 A_USE_T0 ();
9415}
9416
9417static void ac_t1_mul_env () //Added by Gonetz
9418{
9419 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9420 GR_COMBINE_FACTOR_LOCAL,
9421 GR_COMBINE_LOCAL_CONSTANT,
9422 GR_COMBINE_OTHER_TEXTURE);
9423 CA_ENV ();
9424 // if ((settings.hacks&hack_Powerpuff) && (rdp.last_tile == 0))
9425 if (rdp.cycle_mode == 0)
9426 A_USE_T0 ();
9427 else
9428 A_USE_T1 ();
9429}
9430
9431static void ac__t1_sub_one_mul_primlod_add_t0__mul_env ()
9432{
9433 if (cmb.combine_ext)
9434 {
9435 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9436 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9437 GR_CMBX_ZERO, 0,
9438 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9439 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9440 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
9441 GR_CMBX_DETAIL_FACTOR, 0,
9442 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9443 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
9444 percent = (float)lod_frac / 255.0f;
9445 }
9446 else
9447 {
9448 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
9449 cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
9450 percent = (255 - lod_frac) / 255.0f;
9451 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
9452 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
9453 }
9454 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9455 GR_COMBINE_FACTOR_LOCAL,
9456 GR_COMBINE_LOCAL_CONSTANT,
9457 GR_COMBINE_OTHER_TEXTURE);
9458 CA_ENV ();
9459 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9460 cmb.tex |= 3;
9461}
9462
9463static void ac_t0_mul_shade ()
9464{
9465 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9466 GR_COMBINE_FACTOR_LOCAL,
9467 GR_COMBINE_LOCAL_ITERATED,
9468 GR_COMBINE_OTHER_TEXTURE);
9469 A_USE_T0 ();
9470}
9471
9472static void ac_t1_mul_shade ()
9473{
9474 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9475 GR_COMBINE_FACTOR_LOCAL,
9476 GR_COMBINE_LOCAL_ITERATED,
9477 GR_COMBINE_OTHER_TEXTURE);
9478 A_USE_T1 ();
9479}
9480
9481//Added by Gonetz
9482static void ac__t0_add_t1__mul_shade ()
9483{
9484 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9485 GR_COMBINE_FACTOR_LOCAL,
9486 GR_COMBINE_LOCAL_ITERATED,
9487 GR_COMBINE_OTHER_TEXTURE);
9488 A_T0_ADD_T1 ();
9489}
9490
9491static void ac__t0_mul_primlod_add_t0__mul_shade ()
9492{
9493 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9494 GR_COMBINE_FACTOR_LOCAL,
9495 GR_COMBINE_LOCAL_ITERATED,
9496 GR_COMBINE_OTHER_TEXTURE);
9497 if (cmb.combine_ext)
9498 {
9499 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9500 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9501 GR_CMBX_DETAIL_FACTOR, 0,
9502 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9503 cmb.tex |= 1;
9504 percent = (float)lod_frac / 255.0f;
9505 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9506 }
9507 else
9508 {
9509 A_USE_T0 ();
9510 }
9511}
9512
9513static void ac__t1_mul_prima_add_t0__mul_shade ()
9514{
9515 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9516 GR_COMBINE_FACTOR_LOCAL,
9517 GR_COMBINE_LOCAL_ITERATED,
9518 GR_COMBINE_OTHER_TEXTURE);
9519 A_T1_MUL_PRIMA_ADD_T0 ();
9520}
9521
9522//Added by Gonetz
9523static void ac__t0_sub_t1__mul_shade ()
9524{
9525 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9526 GR_COMBINE_FACTOR_LOCAL,
9527 GR_COMBINE_LOCAL_ITERATED,
9528 GR_COMBINE_OTHER_TEXTURE);
9529 if (cmb.combine_ext)
9530 {
9531 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9532 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9533 GR_CMBX_ZERO, 0,
9534 GR_CMBX_B, 0);
9535 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9536 GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9537 GR_CMBX_ZERO, 1,
9538 GR_CMBX_ZERO, 0);
9539 cmb.tex |= 3;
9540 }
9541 else
9542 {
9543 A_T0_SUB_T1 ();
9544 }
9545}
9546
9547static void ac__t1_mul_t1_add_t1__mul_shade ()
9548{
9549 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9550 GR_COMBINE_FACTOR_LOCAL,
9551 GR_COMBINE_LOCAL_ITERATED,
9552 GR_COMBINE_OTHER_TEXTURE);
9553 if (cmb.combine_ext)
9554 {
9555 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9556 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9557 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
9558 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9559 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9560 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9561 GR_CMBX_ZERO, 1,
9562 GR_CMBX_ZERO, 0);
9563 cmb.tex |= 2;
9564 }
9565 else
9566 {
9567 A_USE_T1 ();
9568 }
9569}
9570
9571static void ac__t1_mul_enva_add_t0__mul_shade ()
9572{
9573 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9574 GR_COMBINE_FACTOR_LOCAL,
9575 GR_COMBINE_LOCAL_ITERATED,
9576 GR_COMBINE_OTHER_TEXTURE);
9577 A_T1_MUL_ENVA_ADD_T0 ();
9578}
9579
9580static void ac__t1_sub_one_mul_primlod_add_t0__mul_shade ()
9581{
9582 if (cmb.combine_ext)
9583 {
9584 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9585 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9586 GR_CMBX_ZERO, 0,
9587 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9588 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9589 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
9590 GR_CMBX_DETAIL_FACTOR, 0,
9591 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9592 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
9593 percent = (float)lod_frac / 255.0f;
9594 }
9595 else
9596 {
9597 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
9598 cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
9599 percent = (255 - lod_frac) / 255.0f;
9600 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
9601 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
9602 }
9603 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9604 GR_COMBINE_FACTOR_LOCAL,
9605 GR_COMBINE_LOCAL_ITERATED,
9606 GR_COMBINE_OTHER_TEXTURE);
9607 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9608 cmb.tex |= 3;
9609}
9610
9611static void ac__t1_sub_shade_mul_primlod_add_t0__mul_shade ()
9612{
9613 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9614 GR_COMBINE_FACTOR_LOCAL,
9615 GR_COMBINE_LOCAL_CONSTANT,
9616 GR_COMBINE_OTHER_TEXTURE);
9617 CA_PRIM ();
9618 if (cmb.combine_ext)
9619 {
9620 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9621 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9622 GR_CMBX_ZERO, 0,
9623 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9624 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9625 GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
9626 GR_CMBX_DETAIL_FACTOR, 0,
9627 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9628 cmb.tex |= 3;
9629 percent = (float)lod_frac / 255.0f;
9630 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9631 }
9632 else
9633 {
9634 A_T0_INTER_T1_USING_FACTOR (lod_frac);
9635 }
9636}
9637
9638//Added by Gonetz
9639static void ac_prim_mul_prim ()
9640{
9641 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9642 GR_COMBINE_FACTOR_LOCAL,
9643 GR_COMBINE_LOCAL_CONSTANT,
9644 GR_COMBINE_OTHER_ITERATED);
9645 CA_PRIM ();
9646 SETSHADE_A_PRIM ();
9647}
9648
9649//Added by Gonetz
9650static void ac_prim_mul_primlod ()
9651{
9652 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9653 GR_COMBINE_FACTOR_LOCAL,
9654 GR_COMBINE_LOCAL_CONSTANT,
9655 GR_COMBINE_OTHER_ITERATED);
9656 CA_PRIMLOD ();
9657 SETSHADE_A_PRIM ();
9658}
9659
9660static void ac_prim_mul_env ()
9661{
9662 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9663 GR_COMBINE_FACTOR_LOCAL,
9664 GR_COMBINE_LOCAL_CONSTANT,
9665 GR_COMBINE_OTHER_ITERATED);
9666 CA_ENV ();
9667 SETSHADE_A_PRIM ();
9668}
9669
9670static void ac__prim_sub_one_mul_primlod_add_t0__mul_env ()
9671{
9672 if (cmb.combine_ext)
9673 {
9674 T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
9675 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
9676 GR_CMBX_DETAIL_FACTOR, 0,
9677 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9678 SETSHADE_A_PRIM ();
9679 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
9680 percent = (float)lod_frac / 255.0f;
9681 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9682 cmb.tex |= 1;
9683 }
9684 else
9685 {
9686 A_USE_T0 ();
9687 }
9688 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9689 GR_COMBINE_FACTOR_LOCAL,
9690 GR_COMBINE_LOCAL_CONSTANT,
9691 GR_COMBINE_OTHER_TEXTURE);
9692 CA_ENV ();
9693}
9694
9695static void ac_prim_mul_shade ()
9696{
9697 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9698 GR_COMBINE_FACTOR_LOCAL,
9699 GR_COMBINE_LOCAL_CONSTANT,
9700 GR_COMBINE_OTHER_ITERATED);
9701 CA_PRIM ();
9702}
9703
9704static void ac_env_mul_shade ()
9705{
9706 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9707 GR_COMBINE_FACTOR_LOCAL,
9708 GR_COMBINE_LOCAL_CONSTANT,
9709 GR_COMBINE_OTHER_ITERATED);
9710 CA_ENV ();
9711}
9712
9713static void ac_primlod_mul_shade ()
9714{
9715 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9716 GR_COMBINE_FACTOR_LOCAL,
9717 GR_COMBINE_LOCAL_CONSTANT,
9718 GR_COMBINE_OTHER_ITERATED);
9719 CA_PRIMLOD ();
9720}
9721
9722// ** A-B **
9723static void ac_prim_sub_t0 ()
9724{
9725 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9726 GR_COMBINE_FACTOR_ONE,
9727 GR_COMBINE_LOCAL_NONE,
9728 GR_COMBINE_OTHER_TEXTURE);
9729 A_USE_T0 ();
9730
9731 MOD_0 (TMOD_FULL_COLOR_SUB_TEX);
9732 MOD_0_COL (rdp.prim_color);
9733}
9734
9735// ** A*B+C **
9736static void ac_t0_mul_prim_add_t0 ()
9737{
9738 if (cmb.combine_ext)
9739 {
9740 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9741 GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9742 GR_CMBX_CONSTANT_ALPHA, 0,
9743 GR_CMBX_B, 0);
9744 CA_PRIM ();
9745 A_USE_T0 ();
9746 }
9747 else
9748 ac_t0();
9749}
9750
9751static void ac_t1_mul_prim_add_t0 ()
9752{
9753 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9754 GR_COMBINE_FACTOR_ONE,
9755 GR_COMBINE_LOCAL_NONE,
9756 GR_COMBINE_OTHER_TEXTURE);
9757 A_T1_MUL_PRIMA_ADD_T0 ();
9758}
9759
9760static void ac__t0_inter_t1_using_t1a__mul_prim_add__t0_inter_t1_using_t1a ()
9761{
9762 if (cmb.combine_ext)
9763 {
9764 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9765 GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9766 GR_CMBX_CONSTANT_ALPHA, 0,
9767 GR_CMBX_B, 0);
9768 CA_PRIM ();
9769 }
9770 else
9771 {
9772 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9773 GR_COMBINE_FACTOR_LOCAL,
9774 GR_COMBINE_LOCAL_CONSTANT,
9775 GR_COMBINE_OTHER_TEXTURE);
9776 CA_PRIM ();
9777 }
9778 A_T0_INTER_T1_USING_T1A ();
9779}
9780
9781static void ac__t1_inter_t0_using_t0a__mul_prim_add__t1_inter_t0_using_t0a ()
9782{
9783 if (cmb.combine_ext)
9784 {
9785 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9786 GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9787 GR_CMBX_CONSTANT_ALPHA, 0,
9788 GR_CMBX_B, 0);
9789 CA_PRIM ();
9790 }
9791 else
9792 {
9793 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9794 GR_COMBINE_FACTOR_LOCAL,
9795 GR_COMBINE_LOCAL_CONSTANT,
9796 GR_COMBINE_OTHER_TEXTURE);
9797 CA_PRIM ();
9798 }
9799 A_T1_INTER_T0_USING_T0A ();
9800}
9801
9802//Added by Gonetz
9803static void ac_t0_mul_prim_add_env ()
9804{
9805 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9806 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9807 GR_COMBINE_LOCAL_CONSTANT,
9808 GR_COMBINE_OTHER_ITERATED);
9809 SETSHADE_A_PRIM ();
9810 CA_ENV ();
9811 A_USE_T0 ();
9812}
9813
9814//Added by Gonetz
9815static void ac__t0_add_t1__mul_prim_add_env ()
9816{
9817 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9818 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9819 GR_COMBINE_LOCAL_CONSTANT,
9820 GR_COMBINE_OTHER_ITERATED);
9821 SETSHADE_A_PRIM ();
9822 CA_ENV ();
9823 A_T0_ADD_T1 ();
9824}
9825
9826//Aded by Gonetz
9827static void ac__t0_inter_t1_using_enva__mul_prim_add_env ()
9828{
9829 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9830 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9831 GR_COMBINE_LOCAL_CONSTANT,
9832 GR_COMBINE_OTHER_ITERATED);
9833 SETSHADE_A_PRIM ();
9834 CA_ENV ();
9835 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
9836 A_T0_INTER_T1_USING_FACTOR (factor);
9837}
9838
9839//Aded by Gonetz
9840static void ac_t0_mul_primlod_add_t0 ()
9841{
9842 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9843 GR_COMBINE_FACTOR_ONE,
9844 GR_COMBINE_LOCAL_NONE,
9845 GR_COMBINE_OTHER_TEXTURE);
9846 if (cmb.combine_ext)
9847 {
9848 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9849 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9850 GR_CMBX_DETAIL_FACTOR, 0,
9851 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9852 cmb.tex |= 1;
9853 percent = (float)lod_frac / 255.0f;
9854 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9855 }
9856 else
9857 {
9858 A_USE_T0 ();
9859 }
9860}
9861
9862//Aded by Gonetz
9863static void ac_t1_mul_primlod_add_t0 ()
9864{
9865 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9866 GR_COMBINE_FACTOR_ONE,
9867 GR_COMBINE_LOCAL_NONE,
9868 GR_COMBINE_OTHER_TEXTURE);
9869 A_T1_MUL_PRIMLOD_ADD_T0 ();
9870}
9871
9872//Aded by Gonetz
9873static void ac_t0_mul_primlod_add_prim ()
9874{
9875 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9876 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9877 GR_COMBINE_LOCAL_ITERATED,
9878 GR_COMBINE_OTHER_CONSTANT);
9879 CA_PRIMLOD ();
9880 SETSHADE_A_PRIM ();
9881 A_USE_T0 ();
9882}
9883
9884static void ac_t0_mul_primlod_add_env ()
9885{
9886 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9887 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9888 GR_COMBINE_LOCAL_ITERATED,
9889 GR_COMBINE_OTHER_CONSTANT);
9890 CA_PRIMLOD ();
9891 SETSHADE_A_ENV ();
9892 A_USE_T0 ();
9893}
9894
9895//Aded by Gonetz
9896static void ac__t0_add_t1__mul_primlod_add_prim ()
9897{
9898 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9899 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9900 GR_COMBINE_LOCAL_ITERATED,
9901 GR_COMBINE_OTHER_CONSTANT);
9902 CA_PRIMLOD ();
9903 SETSHADE_A_PRIM ();
9904 A_T0_ADD_T1 ();
9905}
9906
9907//Added by Gonetz
9908static void ac_t0_mul_env_add_prim ()
9909{
9910 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9911 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9912 GR_COMBINE_LOCAL_CONSTANT,
9913 GR_COMBINE_OTHER_ITERATED);
9914 SETSHADE_A_ENV ();
9915 CA_PRIM ();
9916 A_USE_T0 ();
9917}
9918
9919//Added by Gonetz
9920static void ac_t1_mul_prim_add_prim ()
9921{
9922 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9923 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9924 GR_COMBINE_LOCAL_CONSTANT,
9925 GR_COMBINE_OTHER_ITERATED);
9926 SETSHADE_A_PRIM ();
9927 CA_PRIM ();
9928 A_USE_T1 ();
9929}
9930
9931//Added by Gonetz
9932static void ac_prim_mul_shade_add_shade ()
9933{
9934 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9935 GR_COMBINE_FACTOR_LOCAL,
9936 GR_COMBINE_LOCAL_ITERATED,
9937 GR_COMBINE_OTHER_CONSTANT);
9938 CA_PRIM ();
9939}
9940
9941//Added by Gonetz
9942static void ac_t0_mul_shade_add_prim ()
9943{
9944 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9945 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9946 GR_COMBINE_LOCAL_CONSTANT,
9947 GR_COMBINE_OTHER_ITERATED);
9948 CA_PRIM ();
9949 A_USE_T0 ();
9950}
9951
9952static void ac_t0_mul_shade_add_env ()
9953{
9954 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9955 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9956 GR_COMBINE_LOCAL_CONSTANT,
9957 GR_COMBINE_OTHER_ITERATED);
9958 CA_ENV ();
9959 A_USE_T0 ();
9960}
9961
9962static void ac_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade ()
9963{
9964 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9965 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9966 GR_COMBINE_LOCAL_ITERATED,
9967 GR_COMBINE_OTHER_CONSTANT);
9968 CA_INVPRIM ();
9969 MULSHADE_A_PRIM ();
9970 A_T0_MUL_T1 ();
9971}
9972
9973// ** A*B+C*D **
9974static void ac_t0_mul_prim_add_shade_mul_one_minus_prim ()
9975{
9976 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9977 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9978 GR_COMBINE_LOCAL_ITERATED,
9979 GR_COMBINE_OTHER_CONSTANT);
9980 MULSHADE_A_1MPRIM ();
9981 CA_PRIM ();
9982 A_USE_T0 ();
9983}
9984
9985// ** (A*B+C)*D **
9986static void ac__t0_mul_primlod_add_shade__mul_shade ()
9987{
9988 if (cmb.combine_ext)
9989 {
9990 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9991 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
9992 GR_CMBX_DETAIL_FACTOR, 0,
9993 GR_CMBX_B, 0);
9994 cmb.tex |= 1;
9995 percent = (float)lod_frac / 255.0f;
9996 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9997 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9998 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
9999 GR_CMBX_ITALPHA, 0,
10000 GR_CMBX_ZERO, 0);
10001 }
10002 else
10003 {
10004 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10005 GR_COMBINE_FACTOR_LOCAL,
10006 GR_COMBINE_LOCAL_ITERATED,
10007 GR_COMBINE_OTHER_TEXTURE);
10008 A_USE_T0 ();
10009 }
10010}
10011
10012static void ac__t1_mul_primlod_add_shade__mul_shade ()
10013{
10014 if (cmb.combine_ext)
10015 {
10016 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10017 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10018 GR_CMBX_ZERO, 0,
10019 GR_CMBX_B, 0);
10020 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10021 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10022 GR_CMBX_DETAIL_FACTOR, 0,
10023 GR_CMBX_B, 0);
10024 cmb.tex |= 2;
10025 percent = (float)lod_frac / 255.0f;
10026 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
10027 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10028 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
10029 GR_CMBX_ITALPHA, 0,
10030 GR_CMBX_ZERO, 0);
10031 }
10032 else
10033 {
10034 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10035 GR_COMBINE_FACTOR_LOCAL,
10036 GR_COMBINE_LOCAL_ITERATED,
10037 GR_COMBINE_OTHER_TEXTURE);
10038 A_USE_T1 ();
10039 }
10040}
10041
10042// ** ((A-B)*C+D)+E **
10043static void ac__t0_sub_t1_mul_prim_add_shade__mul_shade ()
10044 //(t0-t1)*prim+shade, (cmb-0)*shade+0
10045{
10046 if (cmb.combine_ext)
10047 {
10048 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10049 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10050 GR_CMBX_ZERO, 0,
10051 GR_CMBX_B, 0);
10052 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10053 GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10054 GR_CMBX_TMU_CALPHA, 0,
10055 GR_CMBX_ZERO, 0);
10056 cmb.tex |= 3;
10057 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10058 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10059 GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
10060 GR_CMBX_ITALPHA, 0,
10061 GR_CMBX_ZERO, 0);
10062 }
10063 else
10064 {
10065 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA,
10066 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10067 GR_COMBINE_LOCAL_ITERATED,
10068 GR_COMBINE_OTHER_CONSTANT);
10069 CA_PRIM ();
10070 A_T1_SUB_T0 ();
10071 }
10072}
10073
10074static void ac__t1_sub_t0_mul_prim_add_shade__mul_shade ()
10075 //(t1-t0)*prim+shade, (cmb-0)*shade+0
10076{
10077 if (cmb.combine_ext)
10078 {
10079 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10080 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10081 GR_CMBX_ZERO, 0,
10082 GR_CMBX_B, 0);
10083 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10084 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10085 GR_CMBX_TMU_CALPHA, 0,
10086 GR_CMBX_ZERO, 0);
10087 cmb.tex |= 3;
10088 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10089 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10090 GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
10091 GR_CMBX_ITALPHA, 0,
10092 GR_CMBX_ZERO, 0);
10093 }
10094 else
10095 {
10096 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA,
10097 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10098 GR_COMBINE_LOCAL_ITERATED,
10099 GR_COMBINE_OTHER_CONSTANT);
10100 CA_PRIM ();
10101 A_T1_SUB_T0 ();
10102 }
10103}
10104
10105// ** A*B*C **
10106static void ac__t0_mul_t1__mul_prim ()
10107{
10108 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10109 GR_COMBINE_FACTOR_LOCAL,
10110 GR_COMBINE_LOCAL_CONSTANT,
10111 GR_COMBINE_OTHER_TEXTURE);
10112 CA_PRIM ();
10113 if (voodoo.sup_large_tex || rdp.tiles[1].lr_s < 256) //hack for RR64 pause screen
10114 {
10115 A_T0_MUL_T1 ();
10116 }
10117 else
10118 {
10119 A_USE_T0 ();
10120 }
10121}
10122
10123static void ac__t0_mul_t1__mul_env ()
10124{
10125 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10126 GR_COMBINE_FACTOR_LOCAL,
10127 GR_COMBINE_LOCAL_CONSTANT,
10128 GR_COMBINE_OTHER_TEXTURE);
10129 CA_ENV ();
10130 A_T0_MUL_T1 ();
10131}
10132
10133static void ac__t0_mul_t1__mul_env_mul_shade ()
10134{
10135 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10136 GR_COMBINE_FACTOR_LOCAL,
10137 GR_COMBINE_LOCAL_ITERATED,
10138 GR_COMBINE_OTHER_TEXTURE);
10139 MULSHADE_A_ENV ();
10140 A_T0_MUL_T1 ();
10141}
10142
10143static void ac__t0_mul_t1__mul_prim_mul_shade ()
10144{
10145 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10146 GR_COMBINE_FACTOR_LOCAL,
10147 GR_COMBINE_LOCAL_ITERATED,
10148 GR_COMBINE_OTHER_TEXTURE);
10149 MULSHADE_A_PRIM ();
10150 A_T0_MUL_T1 ();
10151}
10152
10153static void ac__t0_mul_t1__mul_shade ()
10154{
10155 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10156 GR_COMBINE_FACTOR_LOCAL,
10157 GR_COMBINE_LOCAL_ITERATED,
10158 GR_COMBINE_OTHER_TEXTURE);
10159 A_T0_MUL_T1 ();
10160}
10161
10162static void ac__t0_add_prim_mul_shade__mul_shade ()
10163{
10164 // (shade-0)*prim+t0, (cmb-0)*shade+0
10165 if (cmb.combine_ext)
10166 {
10167 T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
10168 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10169 GR_CMBX_TMU_CALPHA, 0,
10170 GR_CMBX_B, 0);
10171 cmb.tex |= 1;
10172 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10173 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10174 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
10175 GR_CMBX_ITALPHA, 0,
10176 GR_CMBX_ZERO, 0);
10177 }
10178 else
10179 {
10180 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10181 GR_COMBINE_FACTOR_ONE,
10182 GR_COMBINE_LOCAL_ITERATED,
10183 GR_COMBINE_OTHER_TEXTURE);
10184 MULSHADE_A_PRIM ();
10185 A_USE_T0();
10186 }
10187}
10188
10189//Added by Gonetz
10190static void ac_t0_mul_prim_mul_prim ()
10191{
10192 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10193 GR_COMBINE_FACTOR_LOCAL,
10194 GR_COMBINE_LOCAL_ITERATED,
10195 GR_COMBINE_OTHER_TEXTURE);
10196 SETSHADE_A_PRIM ();
10197 SETSHADE_A_PRIM ();
10198 A_USE_T0 ();
10199}
10200
10201static void ac_t0_mul_prim_mul_env ()
10202{
10203 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10204 GR_COMBINE_FACTOR_LOCAL,
10205 GR_COMBINE_LOCAL_CONSTANT,
10206 GR_COMBINE_OTHER_TEXTURE);
10207 CA_PRIMENV();
10208 A_USE_T0 ();
10209}
10210
10211static void ac_t0_mul_prim_mul_shade ()
10212{
10213 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10214 GR_COMBINE_FACTOR_LOCAL,
10215 GR_COMBINE_LOCAL_ITERATED,
10216 GR_COMBINE_OTHER_TEXTURE);
10217 MULSHADE_A_PRIM ();
10218 A_USE_T0 ();
10219}
10220
10221static void ac_t1_mul_prim_mul_shade ()
10222{
10223 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10224 GR_COMBINE_FACTOR_LOCAL,
10225 GR_COMBINE_LOCAL_ITERATED,
10226 GR_COMBINE_OTHER_TEXTURE);
10227 MULSHADE_A_PRIM ();
10228 A_USE_T1 ();
10229}
10230
10231static void ac_t0_mul_env_mul_shade ()
10232{
10233 if (rdp.cur_image && (rdp.cur_image->format != 0))
10234 {
10235 ac_shade ();
10236 return;
10237 }
10238
10239 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10240 GR_COMBINE_FACTOR_LOCAL,
10241 GR_COMBINE_LOCAL_ITERATED,
10242 GR_COMBINE_OTHER_TEXTURE);
10243 MULSHADE_A_ENV ();
10244 A_USE_T0 ();
10245}
10246
10247static void ac_t1_mul_env_mul_shade ()
10248{
10249 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10250 GR_COMBINE_FACTOR_LOCAL,
10251 GR_COMBINE_LOCAL_ITERATED,
10252 GR_COMBINE_OTHER_TEXTURE);
10253 MULSHADE_A_ENV ();
10254 A_USE_T1 ();
10255}
10256
10257static void ac_t0_mul_primlod_mul_prim () //Aded by Gonetz
10258{
10259 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10260 GR_COMBINE_FACTOR_LOCAL,
10261 GR_COMBINE_LOCAL_CONSTANT,
10262 GR_COMBINE_OTHER_TEXTURE);
10263 cmb.ccolor |= (wxUint32)(lod_frac * (rdp.prim_color&0xFF) / 255);
10264 A_USE_T0 ();
10265}
10266
10267// ** (A+B)*C **
10268static void ac_prim_add_env_mul_t0 () //Aded by Gonetz
10269{
10270 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10271 GR_COMBINE_FACTOR_LOCAL,
10272 GR_COMBINE_LOCAL_ITERATED,
10273 GR_COMBINE_OTHER_TEXTURE);
10274 SETSHADE_A_PRIM ();
10275 ADDSHADE_A_ENV ();
10276 A_USE_T0 ();
10277}
10278
10279static void ac_t1_add_prim_mul_env () //Aded by Gonetz
10280{
10281 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10282 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10283 GR_COMBINE_LOCAL_ITERATED,
10284 GR_COMBINE_OTHER_CONSTANT);
10285 CA_ENV ();
10286 SETSHADE_A_PRIM ();
10287 SETSHADE_A_ENV ();
10288 A_USE_T1 ();
10289 //(t1+prim)*env = t1*env + prim*env
10290}
10291
10292// ** (A-B)*C **
10293static void ac_t0_sub_prim_mul_shade ()
10294{
10295 if (cmb.combine_ext)
10296 {
10297 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10298 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
10299 GR_CMBX_ITALPHA, 0,
10300 GR_CMBX_ZERO, 0);
10301 cmb.tex |= 1;
10302 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10303 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10304 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10305 GR_CMBX_ZERO, 1,
10306 GR_CMBX_ZERO, 0);
10307 } else {
10308 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10309 GR_COMBINE_FACTOR_ONE,
10310 GR_COMBINE_LOCAL_ITERATED,
10311 GR_COMBINE_OTHER_TEXTURE);
10312 MULSHADE_A_PRIM ();
10313 A_USE_T0 ();
10314 }
10315}
10316
10317static void ac_t0_sub_prim_mul_shade_mul_env ()
10318{
10319 if (cmb.combine_ext)
10320 {
10321 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10322 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
10323 GR_CMBX_ITALPHA, 0,
10324 GR_CMBX_ZERO, 0);
10325 cmb.tex |= 1;
10326 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10327 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10328 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10329 GR_CMBX_CONSTANT_ALPHA, 0,
10330 GR_CMBX_ZERO, 0);
10331 CA_ENV ();
10332 } else {
10333 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10334 GR_COMBINE_FACTOR_ONE,
10335 GR_COMBINE_LOCAL_ITERATED,
10336 GR_COMBINE_OTHER_TEXTURE);
10337 MULSHADE_A_PRIM ();
10338 MULSHADE_A_ENV ();
10339 A_USE_T0 ();
10340 }
10341}
10342
10343static void ac_t0_sub_shade_mul_prim ()
10344{
10345 if (cmb.combine_ext)
10346 {
10347 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10348 GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
10349 GR_CMBX_TMU_CALPHA, 0,
10350 GR_CMBX_ZERO, 0);
10351 cmb.tex |= 1;
10352 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10353 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10354 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10355 GR_CMBX_ZERO, 1,
10356 GR_CMBX_ZERO, 0);
10357 } else {
10358 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10359 GR_COMBINE_FACTOR_ONE,
10360 GR_COMBINE_LOCAL_ITERATED,
10361 GR_COMBINE_OTHER_TEXTURE);
10362 MULSHADE_A_PRIM ();
10363 A_USE_T0 ();
10364 }
10365}
10366
10367static void ac__t0_mul_t1__sub_prim_mul_shade () //Aded by Gonetz
10368{
10369 if (cmb.combine_ext)
10370 {
10371 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10372 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10373 GR_CMBX_ITALPHA, 0,
10374 GR_CMBX_ZERO, 0);
10375 CA_PRIM();
10376 }
10377 else
10378 {
10379 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10380 GR_COMBINE_FACTOR_LOCAL,
10381 GR_COMBINE_LOCAL_ITERATED,
10382 GR_COMBINE_OTHER_TEXTURE);
10383 }
10384 A_T0_MUL_T1 ();
10385}
10386
10387static void ac__one_sub_t1_mul_t0_add_shade__sub_prim_mul_shade () //Aded by Gonetz
10388{
10389 // (1-t1)*t0+shade, (cmb-prim)*shade+0
10390 if (cmb.combine_ext)
10391 {
10392 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10393 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10394 GR_CMBX_ZERO, 0,
10395 GR_CMBX_B, 0);
10396 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ONE_MINUS_X,
10397 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10398 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
10399 GR_CMBX_B, 0);
10400 cmb.tex |= 3;
10401 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10402 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10403 GR_CMBX_ITALPHA, 0,
10404 GR_CMBX_ZERO, 0);
10405 CA_PRIM();
10406 }
10407 else
10408 {
10409 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10410 GR_COMBINE_FACTOR_LOCAL,
10411 GR_COMBINE_LOCAL_ITERATED,
10412 GR_COMBINE_OTHER_TEXTURE);
10413 A_T0_MUL_T1 ();
10414 }
10415}
10416
10417static void ac__t1_mul_primlod_add_t0__sub_prim_mul_shade ()
10418{
10419 if (cmb.combine_ext)
10420 {
10421 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10422 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10423 GR_CMBX_ITALPHA, 0,
10424 GR_CMBX_ZERO, 0);
10425 CA_PRIM ();
10426 }
10427 else
10428 {
10429 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10430 GR_COMBINE_FACTOR_LOCAL,
10431 GR_COMBINE_LOCAL_ITERATED,
10432 GR_COMBINE_OTHER_TEXTURE);
10433 }
10434 A_T1_MUL_PRIMLOD_ADD_T0 ();
10435}
10436
10437static void ac__t1_mul_primlod_add_t0__sub_env_mul_prim () //Aded by Gonetz
10438{
10439 if (cmb.combine_ext)
10440 {
10441 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10442 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10443 GR_CMBX_ITALPHA, 0,
10444 GR_CMBX_ZERO, 0);
10445 CA_ENV ();
10446 SETSHADE_A_PRIM ();
10447 }
10448 else
10449 {
10450 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10451 GR_COMBINE_FACTOR_LOCAL,
10452 GR_COMBINE_LOCAL_CONSTANT,
10453 GR_COMBINE_OTHER_TEXTURE);
10454 CA_PRIM ();
10455 }
10456 A_T1_MUL_PRIMLOD_ADD_T0 ();
10457}
10458
10459static void ac__t1_mul_prima_add_t0__sub_env_mul_shade () //Aded by Gonetz
10460{
10461 if (cmb.combine_ext)
10462 {
10463 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10464 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10465 GR_CMBX_ITALPHA, 0,
10466 GR_CMBX_ZERO, 0);
10467 CA_ENV ();
10468 }
10469 else
10470 {
10471 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10472 GR_COMBINE_FACTOR_LOCAL,
10473 GR_COMBINE_LOCAL_ITERATED,
10474 GR_COMBINE_OTHER_TEXTURE);
10475 }
10476 A_T1_MUL_PRIMA_ADD_T0 ();
10477}
10478
10479static void ac_one_sub_t0_mul_prim () //Aded by Gonetz
10480{
10481 ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
10482 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10483 GR_COMBINE_LOCAL_CONSTANT,
10484 GR_COMBINE_OTHER_NONE);
10485 CA_PRIM ();
10486 A_USE_T0 ();
10487}
10488
10489static void ac_one_sub_t0_mul_shade () //Aded by Gonetz
10490{
10491 if (rdp.aTBuffTex[0] || rdp.aTBuffTex[1])
10492 {
10493 ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
10494 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10495 GR_COMBINE_LOCAL_ITERATED,
10496 GR_COMBINE_OTHER_NONE);
10497 A_USE_T0 ();
10498 }
10499 else
10500 ac_zero();
10501}
10502
10503static void ac_one_sub_prim_mul_t0 () //Aded by Gonetz
10504{
10505 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10506 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10507 GR_COMBINE_LOCAL_CONSTANT,
10508 GR_COMBINE_OTHER_TEXTURE);
10509 CA_PRIM ();
10510 A_USE_T0 ();
10511}
10512
10513static void ac_one_sub_env_mul_t0 () //Aded by Gonetz
10514{
10515 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10516 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10517 GR_COMBINE_LOCAL_CONSTANT,
10518 GR_COMBINE_OTHER_TEXTURE);
10519 CA_ENV ();
10520 A_USE_T0 ();
10521}
10522
10523static void ac_one_sub_shade_mul_t0 () //Aded by Gonetz
10524{
10525 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10526 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10527 GR_COMBINE_LOCAL_ITERATED,
10528 GR_COMBINE_OTHER_TEXTURE);
10529 A_USE_T0 ();
10530}
10531
10532static void ac_one_sub_shade_mul_env () //Aded by Gonetz
10533{
10534 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10535 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10536 GR_COMBINE_LOCAL_ITERATED,
10537 GR_COMBINE_OTHER_CONSTANT);
10538 CA_ENV ();
10539}
10540
10541static void ac_prim_sub_shade_mul_t0 () //Aded by Gonetz
10542{
10543 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10544 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10545 GR_COMBINE_LOCAL_ITERATED,
10546 GR_COMBINE_OTHER_CONSTANT);
10547 CA_PRIM ();
10548 A_USE_T0 ();
10549}
10550
10551static void ac_prim_sub_shade_mul_prim () //Aded by Gonetz
10552{
10553 if (cmb.combine_ext)
10554 {
10555 ACMBEXT(GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_X,
10556 GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
10557 GR_CMBX_CONSTANT_ALPHA, 0,
10558 GR_CMBX_ZERO, 0);
10559 CA_PRIM();
10560 }
10561 else
10562 {
10563 if (!(rdp.prim_color & 0xFF))
10564 {
10565 ac_zero();
10566 }
10567 else
10568 {
10569 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10570 GR_COMBINE_FACTOR_ONE,
10571 GR_COMBINE_LOCAL_ITERATED,
10572 GR_COMBINE_OTHER_CONSTANT);
10573 CA_PRIM();
10574 }
10575 }
10576}
10577
10578static void ac_shade_sub_env_mul_t0 () //Aded by Gonetz
10579{
10580 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10581 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10582 GR_COMBINE_LOCAL_CONSTANT,
10583 GR_COMBINE_OTHER_ITERATED);
10584 CA_ENV ();
10585 A_USE_T0 ();
10586}
10587
10588// ** (A-B)*C*D **
10589static void ac_one_sub_t0_mul_prim_mul_shade () //Aded by Gonetz
10590{
10591 ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
10592 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10593 GR_COMBINE_LOCAL_ITERATED,
10594 GR_COMBINE_OTHER_NONE);
10595 MULSHADE_A_PRIM ();
10596 A_USE_T0 ();
10597}
10598
10599// ** (A+B)*C*D **
10600static void ac_one_plus_env_mul_prim_mul_shade ()
10601{
10602 if (cmb.combine_ext)
10603 {
10604 ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ONE_MINUS_X,
10605 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_X,
10606 GR_CMBX_ITALPHA, 0,
10607 GR_CMBX_ZERO, 0);
10608 MULSHADE_A_PRIM ();
10609 CA_ENV();
10610 }
10611 else
10612 ac_prim_mul_shade ();
10613}
10614
10615// ** (A-B)*C+A **
10616static void ac__t0_mul_t1__sub_env_mul_prim_add__t0_mul_t1 () //Aded by Gonetz
10617{
10618 if (cmb.combine_ext)
10619 {
10620 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10621 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10622 GR_CMBX_ITALPHA, 0,
10623 GR_CMBX_TEXTURE_ALPHA, 0);
10624 CA_ENV();
10625 SETSHADE_A_PRIM ();
10626 }
10627 else
10628 {
10629 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10630 GR_COMBINE_FACTOR_ONE,
10631 GR_COMBINE_LOCAL_NONE,
10632 GR_COMBINE_OTHER_TEXTURE);
10633 }
10634 A_T0_MUL_T1 ();
10635}
10636
10637// ** (A-B)*C+D **
10638static void ac__t0_sub_prim_mul_shade_add_shade__mul_env () //Aded by Gonetz
10639{
10640 if (cmb.combine_ext)
10641 {
10642 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10643 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
10644 GR_CMBX_ITALPHA, 0,
10645 GR_CMBX_ITALPHA, 0);
10646 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF) ;
10647 cmb.tex |= 1;
10648 ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
10649 GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10650 GR_CMBX_CONSTANT_ALPHA, 0,
10651 GR_CMBX_ZERO, 0);
10652 CA_ENV();
10653 }
10654 else
10655 {
10656 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10657 GR_COMBINE_FACTOR_LOCAL,
10658 GR_COMBINE_LOCAL_ITERATED,
10659 GR_COMBINE_OTHER_TEXTURE);
10660 MULSHADE_A_ENV ();
10661 MOD_0 (TMOD_TEX_SUB_COL);
10662 MOD_0_COL (rdp.prim_color & 0xFF);
10663 A_USE_T0 ();
10664 }
10665}
10666
10667static void ac_t0_sub_t1_mul_env_add_env () //Aded by Gonetz
10668{
10669 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10670 GR_COMBINE_FACTOR_LOCAL,
10671 GR_COMBINE_LOCAL_CONSTANT,
10672 GR_COMBINE_OTHER_TEXTURE);
10673 CA_ENV();
10674 A_T0_SUB_T1 ();
10675}
10676
10677static void ac_t0_sub_one_mul_enva_add_t1 () //Aded by Gonetz
10678{
10679 if (cmb.combine_ext)
10680 {
10681 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10682 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10683 GR_CMBX_ZERO, 0,
10684 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
10685 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10686 GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10687 GR_CMBX_TMU_CALPHA, 0,
10688 GR_CMBX_B, 0);
10689 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
10690 cmb.tex |= 3;
10691 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10692 GR_COMBINE_FACTOR_ONE,
10693 GR_COMBINE_LOCAL_CONSTANT,
10694 GR_COMBINE_OTHER_TEXTURE);
10695 CA_ENV();
10696 }
10697 else
10698 {
10699 ac__t0_mul_t1__mul_env ();
10700 }
10701}
10702
10703static void ac_t1_sub_one_mul_enva_add_t0 () //Aded by Gonetz
10704{
10705 if (cmb.combine_ext)
10706 {
10707 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10708 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10709 GR_CMBX_ZERO, 0,
10710 GR_CMBX_B, 0);
10711 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10712 GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
10713 GR_CMBX_TMU_CALPHA, 0,
10714 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
10715 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
10716 SETSHADE_A (0xFF);
10717 cmb.tex |= 3;
10718 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10719 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10720 GR_CMBX_ZERO, 1,
10721 GR_CMBX_ZERO, 0);
10722 }
10723 else
10724 {
10725 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10726 GR_COMBINE_FACTOR_ONE,
10727 GR_COMBINE_LOCAL_NONE,
10728 GR_COMBINE_OTHER_TEXTURE);
10729 A_USE_T0 ();
10730 }
10731}
10732
10733static void ac_t1_sub_one_mul_primlod_add_t0 () //Aded by Gonetz
10734{
10735 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10736 GR_COMBINE_FACTOR_ONE,
10737 GR_COMBINE_LOCAL_NONE,
10738 GR_COMBINE_OTHER_TEXTURE);
10739 if (cmb.combine_ext)
10740 {
10741 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10742 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10743 GR_CMBX_ZERO, 0,
10744 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
10745 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10746 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
10747 GR_CMBX_DETAIL_FACTOR, 0,
10748 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
10749 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
10750 percent = (float)lod_frac / 255.0f;
10751 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
10752 cmb.tex |= 3;
10753 }
10754 else
10755 {
10756 // A_T0_MUL_T1 ();
10757 // A_T1_MUL_PRIMLOD_ADD_T0 ();
10758 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
10759 cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
10760 percent = (255 - lod_frac) / 255.0f;
10761 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
10762 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
10763 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
10764 cmb.tex |= 3;
10765 }
10766}
10767
10768static void ac_t1_sub_prim_mul_shade_add_prim () //Aded by Gonetz
10769{
10770 if (cmb.combine_ext)
10771 {
10772 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10773 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
10774 GR_CMBX_ITALPHA, 0,
10775 GR_CMBX_B, 0);
10776 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10777 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10778 GR_CMBX_ZERO, 1,
10779 GR_CMBX_ZERO, 0);
10780 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF) ;
10781 cmb.tex |= 2;
10782 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10783 GR_CMBX_ZERO, GR_FUNC_MODE_X,
10784 GR_CMBX_ZERO, 1,
10785 GR_CMBX_ZERO, 0);
10786 }
10787 else
10788 {
10789 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10790 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10791 GR_COMBINE_LOCAL_CONSTANT,
10792 GR_COMBINE_OTHER_ITERATED);
10793 CA_PRIM ();
10794 MOD_1 (TMOD_TEX_SUB_COL);
10795 MOD_1_COL (rdp.prim_color & 0xFF);
10796 A_USE_T1 ();
10797 }
10798}
10799
10800static void ac_t0_sub_env_mul_prim_add_env () //Aded by Gonetz
10801{
10802 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10803 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10804 GR_COMBINE_LOCAL_CONSTANT,
10805 GR_COMBINE_OTHER_ITERATED);
10806 SETSHADE_A_PRIM ();
10807 CA_ENV1MPRIM ();
10808 A_USE_T0 ();
10809 //(t0-env)*prim+env == t0*prim + env*(1-prim)
10810}
10811
10812static void ac_t0_sub_env_mul_shadea_add_env () //Aded by Gonetz
10813{
10814 if (!cmb.combine_ext)
10815 {
10816 ac_t0_mul_shade ();
10817 return;
10818 }
10819 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10820 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10821 GR_CMBX_ZERO, 1,
10822 GR_CMBX_ZERO, 0);
10823 cmb.tex |= 1;
10824 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10825 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10826 GR_CMBX_ITALPHA, 0,
10827 GR_CMBX_B, 0);
10828 CA_ENV ();
10829}
10830
10831static void ac__one_sub_t0_mul_t1_add_t0__mul_prim () //Aded by Gonetz
10832{
10833 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10834 GR_COMBINE_FACTOR_LOCAL,
10835 GR_COMBINE_LOCAL_CONSTANT,
10836 GR_COMBINE_OTHER_TEXTURE);
10837 CA_PRIM ();
10838 rdp.best_tex = 0;
10839 cmb.tex |= 3;
10840 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL;
10841 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
10842 cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA;
10843}
10844
10845static void ac_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz
10846{
10847 ACMB (GR_COMBINE_FUNCTION_BLEND,
10848 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10849 GR_COMBINE_LOCAL_ITERATED,
10850 GR_COMBINE_OTHER_CONSTANT);
10851 SETSHADE_A_PRIM ();
10852 CA (0xFF);
10853 A_USE_T0 ();
10854}
10855
10856static void ac_one_sub_t0_mul_env_add_t0 () //Aded by Gonetz
10857{
10858 ACMB (GR_COMBINE_FUNCTION_BLEND,
10859 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10860 GR_COMBINE_LOCAL_ITERATED,
10861 GR_COMBINE_OTHER_CONSTANT);
10862 SETSHADE_A_ENV ();
10863 CA (0xFF);
10864 A_USE_T0 ();
10865}
10866
10867static void ac_one_sub_t0_mul_primlod_add_prim () //Aded by Gonetz
10868{
10869 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10870 GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA,
10871 GR_COMBINE_LOCAL_ITERATED,
10872 GR_COMBINE_OTHER_CONSTANT);
10873 SETSHADE_A_PRIM ();
10874 CA_PRIMLOD();
10875 A_USE_T0 ();
10876}
10877
10878static void ac_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz
10879{
10880 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10881 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10882 GR_COMBINE_LOCAL_ITERATED,
10883 GR_COMBINE_OTHER_CONSTANT);
10884 CA_INVENV ();
10885 SETSHADE_A_PRIM ();
10886 SETSHADE_A_ENV ();
10887 A_USE_T0 ();
10888 //(prim-t0)*env+t0 = prim*env + t0*(1-env)
10889}
10890
10891static void ac_prim_sub_env_mul_t0_add_env ()
10892{
10893 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
10894 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10895 GR_COMBINE_LOCAL_ITERATED,
10896 GR_COMBINE_OTHER_CONSTANT);
10897 CA_PRIM ();
10898 SETSHADE_A_ENV ();
10899 A_USE_T0 ();
10900}
10901
10902static void ac_prim_sub_env_mul_t1_add_env ()
10903{
10904 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
10905 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10906 GR_COMBINE_LOCAL_ITERATED,
10907 GR_COMBINE_OTHER_CONSTANT);
10908 CA_PRIM ();
10909 SETSHADE_A_ENV ();
10910 A_USE_T1 ();
10911}
10912
10913static void ac_prim_sub_env_mul_t0_add_one ()
10914{
10915 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10916 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10917 GR_COMBINE_LOCAL_CONSTANT,
10918 GR_COMBINE_OTHER_ITERATED);
10919 CA (0xFF);
10920 SETSHADE_A_PRIMSUBENV ();
10921 A_USE_T0 ();
10922}
10923
10924//Added by Gonetz
10925static void ac_prim_sub_env_mul_shade_add_env ()
10926{
10927 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10928 GR_COMBINE_FACTOR_ONE,
10929 GR_COMBINE_LOCAL_CONSTANT,
10930 GR_COMBINE_OTHER_ITERATED);
10931 CA_ENV ();
10932 MULSHADE_A_PRIMSUBENV ();
10933}
10934
10935//Added by Gonetz
10936static void ac_prim_sub_env_mul_shade_add_env_mul_t1 ()
10937{
10938 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10939 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10940 GR_COMBINE_LOCAL_CONSTANT,
10941 GR_COMBINE_OTHER_ITERATED);
10942 CA_ENV ();
10943 MULSHADE_A_PRIMSUBENV ();
10944 A_USE_T1 ();
10945}
10946
10947//Added by Gonetz
10948static void ac_prim_sub_shade_mul_t0_add_shade ()
10949{
10950 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
10951 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10952 GR_COMBINE_LOCAL_ITERATED,
10953 GR_COMBINE_OTHER_CONSTANT);
10954 CA_PRIM ();
10955 A_USE_T0 ();
10956}
10957
10958//Added by Gonetz
10959static void ac_one_sub_shade_mul_t1_add_shade ()
10960{
10961 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10962 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
10963 GR_COMBINE_LOCAL_ITERATED,
10964 GR_COMBINE_OTHER_TEXTURE);
10965 A_USE_T1 ();
10966}
10967
10968//Added by Gonetz
10969static void ac_one_sub_env_mul_shade_add_env ()
10970{
10971 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10972 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
10973 GR_COMBINE_LOCAL_CONSTANT,
10974 GR_COMBINE_OTHER_ITERATED);
10975 CA_ENV ();
10976}
10977
10978//Added by Gonetz
10979static void ac_env_sub_prim_mul_t0_add_prim ()
10980{
10981 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
10982 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10983 GR_COMBINE_LOCAL_ITERATED,
10984 GR_COMBINE_OTHER_CONSTANT);
10985 CA_ENV ();
10986 SETSHADE_A_PRIM ();
10987 A_USE_T0 ();
10988}
10989
10990static void ac_one_sub_t1_add_t0_mul_env ()
10991{
10992 if (cmb.combine_ext)
10993 {
10994 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10995 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10996 GR_CMBX_ZERO, 0,
10997 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
10998 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10999 GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11000 GR_CMBX_TMU_CALPHA, 0,
11001 GR_CMBX_B, 1);
11002 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF);
11003 cmb.tex |= 3;
11004 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11005 GR_COMBINE_FACTOR_ONE,
11006 GR_COMBINE_LOCAL_NONE,
11007 GR_COMBINE_OTHER_TEXTURE);
11008 }
11009 else
11010 {
11011 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11012 GR_COMBINE_FACTOR_LOCAL,
11013 GR_COMBINE_LOCAL_CONSTANT,
11014 GR_COMBINE_OTHER_TEXTURE);
11015 CA_ENV ();
11016 A_T0_ADD_T1();
11017 cmb.tmu1_a_invert = FXTRUE;
11018 }
11019}
11020
11021static void ac_env_sub_prim_mul_shade_add_prim () //Added by Gonetz
11022{
11023 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
11024 GR_COMBINE_FACTOR_ONE,
11025 GR_COMBINE_LOCAL_CONSTANT,
11026 GR_COMBINE_OTHER_ITERATED);
11027 CA_PRIM ();
11028 MULSHADE_A_ENVSUBPRIM ();
11029}
11030
11031static void ac_env_sub_primshade_mul_t1_add_primshade ()
11032{
11033 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
11034 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11035 GR_COMBINE_LOCAL_ITERATED,
11036 GR_COMBINE_OTHER_CONSTANT);
11037 CA_ENV ();
11038 MULSHADE_A_PRIM ();
11039 A_USE_T1 ();
11040}
11041
11042static void ac_one_sub_prim_mul_t0_add_prim ()
11043{
11044 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
11045 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11046 GR_COMBINE_LOCAL_ITERATED,
11047 GR_COMBINE_OTHER_CONSTANT);
11048 CA (0xFF);
11049 SETSHADE_A_PRIM ();
11050 A_USE_T0 ();
11051}
11052
11053static void ac_one_sub_prim_mul_t0_add__prim_mul_env ()
11054{
11055 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
11056 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11057 GR_COMBINE_LOCAL_ITERATED,
11058 GR_COMBINE_OTHER_CONSTANT);
11059 CA_INVPRIM ();
11060 SETSHADE_A_PRIM ();
11061 SETSHADE_A_ENV ();
11062 A_USE_T0 ();
11063}
11064
11065static void ac_shade_sub_t0_mul_primlod_add_prim ()
11066{
11067 if (cmb.combine_ext)
11068 {
11069 T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
11070 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
11071 GR_CMBX_TMU_CALPHA, 0,
11072 GR_CMBX_ZERO, 0);
11073 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (lod_frac&0xFF);
11074 cmb.tex |= 1;
11075 ACMBEXT(GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_X,
11076 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11077 GR_CMBX_ZERO, 1,
11078 GR_CMBX_TEXTURE_ALPHA, 0);
11079 CA_PRIM ();
11080 }
11081 else
11082 ac_t0();
11083}
11084
11085static void ac_shade_sub_env_mul_t0_add_prim ()
11086{
11087 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
11088 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11089 GR_COMBINE_LOCAL_CONSTANT,
11090 GR_COMBINE_OTHER_ITERATED);
11091 SUBSHADE_A_ENV ();
11092 CA_PRIM ();
11093 A_USE_T0 ();
11094}
11095
11096// ** A inter B using C **
11097static void ac_t0_inter_t1_using_prima ()
11098{
11099 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11100 GR_COMBINE_FACTOR_ONE,
11101 GR_COMBINE_LOCAL_NONE,
11102 GR_COMBINE_OTHER_TEXTURE);
11103 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11104 A_T0_INTER_T1_USING_FACTOR (factor);
11105}
11106
11107static void ac_t1_inter_t0_using_prima ()
11108{
11109 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11110 GR_COMBINE_FACTOR_ONE,
11111 GR_COMBINE_LOCAL_NONE,
11112 GR_COMBINE_OTHER_TEXTURE);
11113 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11114 A_T1_INTER_T0_USING_FACTOR (factor);
11115}
11116
11117static void ac_t0_inter_t1_using_primlod ()
11118{
11119 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11120 GR_COMBINE_FACTOR_ONE,
11121 GR_COMBINE_LOCAL_NONE,
11122 GR_COMBINE_OTHER_TEXTURE);
11123 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11124}
11125
11126static void ac_t0_inter_t1_using_enva ()
11127{
11128 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11129 GR_COMBINE_FACTOR_ONE,
11130 GR_COMBINE_LOCAL_NONE,
11131 GR_COMBINE_OTHER_TEXTURE);
11132 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11133 A_T0_INTER_T1_USING_FACTOR (factor);
11134}
11135
11136static void ac_t1_inter_t0_using_enva ()
11137{
11138 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11139 GR_COMBINE_FACTOR_ONE,
11140 GR_COMBINE_LOCAL_NONE,
11141 GR_COMBINE_OTHER_TEXTURE);
11142 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11143 A_T1_INTER_T0_USING_FACTOR (factor);
11144}
11145
11146//Added by Gonetz
11147static void ac_t0_inter_t1_using_t0a ()
11148{
11149 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11150 GR_COMBINE_FACTOR_ONE,
11151 GR_COMBINE_LOCAL_NONE,
11152 GR_COMBINE_OTHER_TEXTURE);
11153 A_T0_INTER_T1_USING_T0A ();
11154}
11155
11156//Added by Gonetz
11157static void ac_t0_inter_t1_using_t1a ()
11158{
11159 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11160 GR_COMBINE_FACTOR_ONE,
11161 GR_COMBINE_LOCAL_NONE,
11162 GR_COMBINE_OTHER_TEXTURE);
11163 A_T0_INTER_T1_USING_T1A ();
11164}
11165
11166//Added by Gonetz
11167static void ac_t0_inter_t1_using_shadea ()
11168{
11169 if (cmb.combine_ext)
11170 {
11171 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11172 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11173 GR_CMBX_ZERO, 1,
11174 GR_CMBX_ZERO, 0);
11175 }
11176 else
11177 {
11178 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11179 GR_COMBINE_FACTOR_ONE,
11180 GR_COMBINE_LOCAL_NONE,
11181 GR_COMBINE_OTHER_TEXTURE);
11182 }
11183 A_T0_INTER_T1_USING_SHADEA ();
11184}
11185
11186// ** (A inter B using C) * D **
11187
11188static void ac__t0_inter_t1_using_primlod__mul_prim ()
11189{
11190 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11191 GR_COMBINE_FACTOR_LOCAL,
11192 GR_COMBINE_LOCAL_CONSTANT,
11193 GR_COMBINE_OTHER_TEXTURE);
11194 CA_PRIM ();
11195 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11196}
11197
11198static void ac__t1_mul_primlod_add_t0__mul_prim ()
11199{
11200 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11201 GR_COMBINE_FACTOR_LOCAL,
11202 GR_COMBINE_LOCAL_CONSTANT,
11203 GR_COMBINE_OTHER_TEXTURE);
11204 CA_PRIM ();
11205 A_T1_MUL_PRIMLOD_ADD_T0 ();
11206}
11207
11208static void ac__t0_inter_t1_using_primlod__mul_env ()
11209{
11210 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11211 GR_COMBINE_FACTOR_LOCAL,
11212 GR_COMBINE_LOCAL_CONSTANT,
11213 GR_COMBINE_OTHER_TEXTURE);
11214 CA_ENV ();
11215 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11216}
11217
11218static void ac__t1_mul_primlod_add_t0__mul_env ()
11219{
11220 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11221 GR_COMBINE_FACTOR_LOCAL,
11222 GR_COMBINE_LOCAL_CONSTANT,
11223 GR_COMBINE_OTHER_TEXTURE);
11224 CA_ENV ();
11225 A_T1_MUL_PRIMLOD_ADD_T0 ();
11226}
11227
11228static void ac__t0_inter_t1_using_primlod__mul_shade ()
11229{
11230 if (settings.hacks & hack_Makers)
11231 {
11232 //rolling rock issue - it has zero shade alpha and thus rejected by alpha compare
11233 ac_t0_inter_t1_using_primlod();
11234 return;
11235 }
11236 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11237 GR_COMBINE_FACTOR_LOCAL,
11238 GR_COMBINE_LOCAL_ITERATED,
11239 GR_COMBINE_OTHER_TEXTURE);
11240 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11241}
11242
11243static void ac__t1_mul_primlod_add_t0__mul_shade ()
11244{
11245 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11246 GR_COMBINE_FACTOR_LOCAL,
11247 GR_COMBINE_LOCAL_ITERATED,
11248 GR_COMBINE_OTHER_TEXTURE);
11249 A_T1_MUL_PRIMLOD_ADD_T0 ();
11250}
11251
11252//Added by Gonetz
11253static void ac__t0_inter_t1_using_prima__mul_env ()
11254{
11255 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11256 GR_COMBINE_FACTOR_LOCAL,
11257 GR_COMBINE_LOCAL_CONSTANT,
11258 GR_COMBINE_OTHER_TEXTURE);
11259 CA_ENV ();
11260 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11261 A_T0_INTER_T1_USING_FACTOR (factor);
11262}
11263
11264//Added by Gonetz
11265static void ac__t1_inter_t0_using_t0a__mul_prim ()
11266{
11267 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11268 GR_COMBINE_FACTOR_LOCAL,
11269 GR_COMBINE_LOCAL_CONSTANT,
11270 GR_COMBINE_OTHER_TEXTURE);
11271 CA_PRIM ();
11272 A_T1_INTER_T0_USING_T0A ();
11273}
11274
11275static void ac__t1_inter_t0_using_primlod__mul_prim ()
11276{
11277 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11278 GR_COMBINE_FACTOR_LOCAL,
11279 GR_COMBINE_LOCAL_CONSTANT,
11280 GR_COMBINE_OTHER_TEXTURE);
11281 CA_PRIM ();
11282 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11283}
11284
11285static void ac__t1_inter_t0_using_prima__mul_env ()
11286{
11287 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11288 GR_COMBINE_FACTOR_LOCAL,
11289 GR_COMBINE_LOCAL_CONSTANT,
11290 GR_COMBINE_OTHER_TEXTURE);
11291 CA_ENV ();
11292 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11293 A_T1_INTER_T0_USING_FACTOR (factor);
11294}
11295
11296//Added by Gonetz
11297static void ac__t0_inter_t1_using_prima__mul_shade ()
11298{
11299 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11300 GR_COMBINE_FACTOR_LOCAL,
11301 GR_COMBINE_LOCAL_ITERATED,
11302 GR_COMBINE_OTHER_TEXTURE);
11303 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11304 A_T0_INTER_T1_USING_FACTOR (factor);
11305}
11306
11307static void ac__t1_inter_t0_using_prima__mul_shade ()
11308{
11309 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11310 GR_COMBINE_FACTOR_LOCAL,
11311 GR_COMBINE_LOCAL_ITERATED,
11312 GR_COMBINE_OTHER_TEXTURE);
11313 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11314 A_T1_INTER_T0_USING_FACTOR (factor);
11315}
11316
11317static void ac__t0_inter_t1_using_enva__mul_prim ()
11318{
11319 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11320 GR_COMBINE_FACTOR_LOCAL,
11321 GR_COMBINE_LOCAL_CONSTANT,
11322 GR_COMBINE_OTHER_TEXTURE);
11323 CA_PRIM ();
11324 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11325 A_T0_INTER_T1_USING_FACTOR (factor);
11326}
11327
11328static void ac__env_sub_one_mul_t1_add_t0__mul_prim ()
11329{
11330 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11331 GR_COMBINE_FACTOR_LOCAL,
11332 GR_COMBINE_LOCAL_CONSTANT,
11333 GR_COMBINE_OTHER_TEXTURE);
11334 CA_PRIM ();
11335 if (cmb.combine_ext)
11336 {
11337 T1ACMBEXT(GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_X,
11338 GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
11339 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
11340 GR_CMBX_ZERO, 0);
11341 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11342 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11343 GR_CMBX_ZERO, 1,
11344 GR_CMBX_ZERO, 0);
11345 SETSHADE_A(0xFF);
11346 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
11347 cmb.tex |= 3;
11348 }
11349 else
11350 {
11351 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11352 A_T0_INTER_T1_USING_FACTOR (factor);
11353 }
11354}
11355
11356static void ac__t0_inter_t1_using_enva__mul_primlod ()
11357{
11358 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11359 GR_COMBINE_FACTOR_LOCAL,
11360 GR_COMBINE_LOCAL_CONSTANT,
11361 GR_COMBINE_OTHER_TEXTURE);
11362 CA_PRIMLOD ();
11363 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11364 A_T0_INTER_T1_USING_FACTOR (factor);
11365}
11366
11367static void ac__t1_mul_enva_add_t0__sub_prim_mul_shade ()
11368{
11369 if (cmb.combine_ext)
11370 {
11371 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11372 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
11373 GR_CMBX_ITALPHA, 0,
11374 GR_CMBX_ZERO, 0);
11375 CA_PRIM ();
11376 }
11377 else
11378 {
11379 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
11380 GR_COMBINE_FACTOR_LOCAL,
11381 GR_COMBINE_LOCAL_ITERATED,
11382 GR_COMBINE_OTHER_TEXTURE);
11383 MULSHADE_A_PRIM ();
11384 }
11385 A_T1_MUL_ENVA_ADD_T0 ();
11386}
11387
11388//Added by Gonetz
11389static void ac__t0_inter_t1_using_t0a__mul_prim ()
11390{
11391 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11392 GR_COMBINE_FACTOR_LOCAL,
11393 GR_COMBINE_LOCAL_CONSTANT,
11394 GR_COMBINE_OTHER_TEXTURE);
11395 CA_PRIM ();
11396 A_T0_INTER_T1_USING_T0A ();
11397}
11398
11399//Added by Gonetz
11400static void ac__t0_inter_t1_using_t1a__mul_prim ()
11401{
11402 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11403 GR_COMBINE_FACTOR_LOCAL,
11404 GR_COMBINE_LOCAL_CONSTANT,
11405 GR_COMBINE_OTHER_TEXTURE);
11406 CA_PRIM ();
11407 A_T0_INTER_T1_USING_T1A ();
11408}
11409
11410static void ac__t0_inter_t1_using_t1a__mul_shade ()
11411{
11412 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11413 GR_COMBINE_FACTOR_LOCAL,
11414 GR_COMBINE_LOCAL_ITERATED,
11415 GR_COMBINE_OTHER_TEXTURE);
11416 A_T0_INTER_T1_USING_T1A ();
11417}
11418
11419//Added by Gonetz
11420static void ac__t0_inter_t1_using_shadea__mul_prim ()
11421{
11422 if (cmb.combine_ext)
11423 {
11424 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11425 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11426 GR_CMBX_CONSTANT_ALPHA, 0,
11427 GR_CMBX_ZERO, 0);
11428 A_T0_INTER_T1_USING_SHADEA ();
11429 }
11430 else
11431 {
11432 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11433 GR_COMBINE_FACTOR_LOCAL,
11434 GR_COMBINE_LOCAL_CONSTANT,
11435 GR_COMBINE_OTHER_TEXTURE);
11436 A_T0_INTER_T1_USING_FACTOR (0x7F);
11437 }
11438 CA_PRIM ();
11439}
11440
11441//Added by Gonetz
11442static void ac__t0_inter_t1_using_shadea__mul_env ()
11443{
11444 if (cmb.combine_ext)
11445 {
11446 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11447 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11448 GR_CMBX_CONSTANT_ALPHA, 0,
11449 GR_CMBX_ZERO, 0);
11450 A_T0_INTER_T1_USING_SHADEA ();
11451 }
11452 else
11453 {
11454 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11455 GR_COMBINE_FACTOR_LOCAL,
11456 GR_COMBINE_LOCAL_CONSTANT,
11457 GR_COMBINE_OTHER_TEXTURE);
11458 A_T0_INTER_T1_USING_FACTOR (0x7F);
11459 }
11460 CA_ENV ();
11461}
11462
11463static void ac__t0_inter_t1_using_primlod__sub_env_mul_shade_add_shade ()
11464{
11465 if (cmb.combine_ext)
11466 {
11467 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11468 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
11469 GR_CMBX_ITALPHA, 0,
11470 GR_CMBX_ALOCAL, 0);
11471 CA_ENV ();
11472 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11473 }
11474 else
11475 ac__t0_inter_t1_using_primlod__mul_shade ();
11476}
11477
11478//Added by Gonetz
11479static void ac__t0_inter_t1_using_enva__mul_shade ()
11480{
11481 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11482 GR_COMBINE_FACTOR_LOCAL,
11483 GR_COMBINE_LOCAL_ITERATED,
11484 GR_COMBINE_OTHER_TEXTURE);
11485 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11486 A_T0_INTER_T1_USING_FACTOR (factor);
11487}
11488
11489static void ac__t0_inter_t1_using_primlod__mul_prim_add_env ()
11490{
11491 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
11492 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11493 GR_COMBINE_LOCAL_CONSTANT,
11494 GR_COMBINE_OTHER_ITERATED);
11495 CA_ENV ();
11496 SETSHADE_A_PRIM ();
11497 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11498}
11499
11500//Added by Gonetz
11501static void ac__t0_inter_t1_using_primlod__mul_shade_add_prim ()
11502{
11503 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
11504 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11505 GR_COMBINE_LOCAL_CONSTANT,
11506 GR_COMBINE_OTHER_ITERATED);
11507 CA_PRIM ();
11508 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11509}
11510
11511//Added by Gonetz
11512static void ac__t0_inter_t1_using_primlod__mul_env_add__t0_inter_t1_using_primlod ()
11513{
11514 if (cmb.combine_ext)
11515 {
11516 ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
11517 GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11518 GR_CMBX_CONSTANT_ALPHA, 0,
11519 GR_CMBX_B, 0);
11520 CA_ENV ();
11521 }
11522 else
11523 {
11524 ACMB (GR_COMBINE_FUNCTION_BLEND,
11525 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11526 GR_COMBINE_LOCAL_CONSTANT,
11527 GR_COMBINE_OTHER_ITERATED);
11528 SETSHADE_A_ENV ();
11529 CA (0xFF);
11530 }
11531 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11532}
11533
11534static void ac__t1_sub_one_mul_enva_add_t0__mul_prim ()
11535{
11536 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11537 GR_COMBINE_FACTOR_LOCAL,
11538 GR_COMBINE_LOCAL_CONSTANT,
11539 GR_COMBINE_OTHER_TEXTURE);
11540 CA_PRIM ();
11541 if (cmb.combine_ext)
11542 {
11543 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11544 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11545 GR_CMBX_ZERO, 0,
11546 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
11547 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11548 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
11549 GR_CMBX_DETAIL_FACTOR, 0,
11550 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
11551 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
11552 cmb.tex |= 3;
11553 cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;
11554 }
11555 else
11556 {
11557 // (t1-1)*env+t0, (cmb-0)*prim+0
11558 A_T0_MUL_T1 ();
11559
11560 MOD_1 (TMOD_TEX_SCALE_FAC_ADD_FAC);
11561 MOD_1_FAC (rdp.env_color & 0xFF);
11562 }
11563}
11564
11565static void ac__one_inter_t0_using_prim__mul_env ()
11566{
11567 if (cmb.combine_ext)
11568 {
11569 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11570 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
11571 GR_CMBX_DETAIL_FACTOR, 0,
11572 GR_CMBX_B, 0);
11573 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
11574 cmb.tex |= 1;
11575 cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.prim_color&0xFF) / 255.0f;
11576 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11577 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_ZERO,
11578 GR_CMBX_CONSTANT_ALPHA, 0,
11579 GR_CMBX_ZERO, 0);
11580 CA_ENV ();
11581 }
11582 else
11583 {
11584 ac_t0_mul_prim_add_env ();
11585 }
11586}
11587
11588static void ac__t1_sub_one_mul_enva_add_t0__mul_shade ()
11589{
11590 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11591 GR_COMBINE_FACTOR_LOCAL,
11592 GR_COMBINE_LOCAL_ITERATED,
11593 GR_COMBINE_OTHER_TEXTURE);
11594 CA_PRIM ();
11595 if (cmb.combine_ext)
11596 {
11597 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11598 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11599 GR_CMBX_ZERO, 0,
11600 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
11601 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11602 GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
11603 GR_CMBX_DETAIL_FACTOR, 0,
11604 GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
11605 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | 0xFF ;
11606 percent = (rdp.env_color&0xFF) / 255.0f;
11607 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
11608 cmb.tex |= 3;
11609 }
11610 else
11611 {
11612 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11613 A_T0_INTER_T1_USING_FACTOR (factor);
11614 }
11615}
11616
11617static void ac_zero_sub_prim_mul_t0_add_prim ()
11618{
11619 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
11620 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11621 GR_COMBINE_LOCAL_CONSTANT,
11622 GR_COMBINE_OTHER_ITERATED);
11623 SETSHADE_A (0);
11624 CA_PRIM ();
11625 A_USE_T0 ();
11626}
11627
11628static void ac_one_sub_t0_mul_primshade ()
11629{
11630 ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
11631 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11632 GR_COMBINE_LOCAL_ITERATED,
11633 GR_COMBINE_OTHER_NONE);
11634 MULSHADE_A_PRIM ();
11635 A_USE_T0 ();
11636}
11637
11638//****************************************************************
11639// Combine List
11640//
11641// 3/13/02: I have converted the combine descriptions, now using
11642// the correct values for each slot, instead of a one-for-all-
11643// slot version. All of the descriptions marked with 'z' have
11644// not yet been converted or checked. I have not totally redone
11645// the modes, because they should be for the most part correct
11646// as they are, even with the wrong descriptions. [Dave2001]
11647//****************************************************************
11648
11649typedef void (*cmb_func)();
11650typedef struct {
11651 wxUint32 key;
11652 cmb_func func;
11653} COMBINER;
11654
11655static COMBINER color_cmb_list[] = {
11656 // { #CCSTART }
11657 // intro, Aidyn Chronicles. Added by Gonetz
11658 // (0-cmb)*env+cmb, (t1-t0)*0+t0
11659 {0x05083812, cc_t0},
11660 //terminal, Spacestation Silicon Valley. Added by Gonetz
11661 // (0-0)*0+cmb, (0-0)*0+prim
11662 {0x1fff7fff, cc_prim},
11663 //chip in Spacestation Silicon Valley intro. Added by Gonetz
11664 // (0-0)*0+cmb, (prim-0)*shade+0
11665 {0x1fffe4f3, cc_prim_mul_shade},
11666 // car, beetle adventure racing. Added by Gonetz
11667 // (t1-t0)*t0+t0, (cmb-shade)*prima+shade **can work incorrect**
11668 {0x21128a40, cc__t0_inter_t1_using_t0__sub_shade_mul_prima_add_shade},
11669 // Treasure opening, zelda
11670 // (t1-prim)*t0+t0, (prim-env)*cmb+env
11671 {0x2132a053, cc_prim_sub_env_mul__t1_sub_prim_mul_t0_add_t0__add_env},
11672 // yellow carpet, Pokemon Stadium 2
11673 // (t1-env)*t0+t0, (cmb-0)*shade+0
11674 {0x2152e4f0, cc__t1_sub_env_mul_t0_add_t0__mul_shade},
11675 // Water, doubut no mori
11676 // (t1-0)*t0+t0, (prim-0)*shade+cmb
11677 {0x21f204f3, cc__t1_mul_t0_add_t0__add_prim_mul_shade},
11678 // enemy transparent, paper mario. Addd by Gonetz
11679 // (t1-t0)*t1+t0, (env-prim)*cmb+prim
11680 {0x22126035, cc_env_sub_prim_mul__t0_inter_t1_using_t1__add_prim},
11681 // snowhead temple, zelda 2. Addd by Gonetz
11682 // (t1-t0)*t1+t0, (cmb-0)*shade+prim
11683 {0x221264f0, cc__t0_inter_t1_using_t1__mul_shade_add_prim},
11684 // snowhead temple entrance, zelda 2. Addd by Gonetz
11685 // (t1-t0)*t1+t0, (cmb-0)*prim+shade
11686 {0x221283f0, cc__t0_inter_t1_using_t1__mul_prim_add_shade},
11687 // teleportation, Spacestation Silicon Valley. Added by Gonetz
11688 // (t1-t0)*t1+t0, (prim-env)*cmb+env
11689 {0x2212a053, cc_prim_sub_env_mul__t0_inter_t1_using_t1__add_env},
11690 // pokemon fainted, Pokemon Stadium 2
11691 // (prim-t0)*t1+t0
11692 {0x22132213, cc_prim_sub_t0_mul_t1_add_t0},
11693 // attack, Ogre Battle 64
11694 // (1-t0)*t1+t0, (cmb-0)*prim+0
11695 {0x2216e3f0, cc__t0_inter_one_using_t1__mul_prim},
11696 // Some gannon spell, zelda
11697 // (t1-0)*t1+t0, (prim-0)*cmb+0
11698 {0x22f2e0f3, cc__t1_mul_t1_add_t0__mul_prim},
11699 // battle tanks 2 [Ogy]
11700 // (1-0)*t1+t0, (env-prim)*cmb+prim
11701 {0x22f66035, cc_env_sub_prim_mul__t0_add_t1__add_prim},
11702 // GASP Fighters
11703 // (1-0)*t1+t0, (shade-0)*cmb+0
11704 {0x22f6e0f4, cc__t0_add_t1__mul_shade},
11705 // parts of a car, F1 World Grand Prix. Added by Gonetz
11706 // (1-0)*t1+t0, (cmb-0)*shade+0
11707 {0x22f6e4f0, cc__t0_add_t1__mul_shade},
11708 // ???, zelda
11709 // (noise-0)*t1+t0, (prim-env)*cmb+env
11710 {0x22f7a053, cc_prim_sub_env_mul__t0_add_t1__add_env},
11711 // flashing arrow over buoy, wave race. Added by Gonetz
11712 // (t1-t0)*prim+t0, (env-cmb)*enva+cmb ** INC **
11713 {0x23120c05, cc__t0_inter_t1_using_prim__inter_env_using_enva},
11714 // ground, zelda2. Added by Gonetz
11715 // (t1-t0)*prim+t0, (cmb-0)*shade+0
11716 {0x2312e4f0, cc__t0_inter_t1_using_prim__mul_shade},
11717 // wwf rules
11718 // (env-t0)*prim+t0
11719 {0x23152315, cc_t0_inter_env_using_prim},
11720 // Paper Mario
11721 // (1-t0)*prim+t0, (1-t0)*t0+cmb ** INC **
11722 {0x23160116, cc_t0_add_prim_mul_one_sub_t0_add_t0},
11723 // intro, castlevania. Added by Gonetz
11724 // (1-t0)*prim+t0
11725 {0x23162316, cc_one_sub_t0_mul_prim_add_t0},
11726 // Explosions, aerofighter's assault
11727 // (1-t0)*prim+t0, (shade-0)*cmb+0
11728 {0x2316e0f4, cc_t0_mul_shade},
11729 //beetle adventure racing. Added by Gonetz
11730 // (1-t0)*prim+t0, (cmb-0)*shade+0 **INC**
11731 {0x2316e4f0, cc__t0_inter_one_using_prim__mul_shade},
11732 // Unknown player background, smash bros
11733 // (noise-t0)*prim+t0 ** INC **
11734 // {0x23172317, cc_t0},
11735 {0x23172317, cc_t0_inter_noise_using_prim},
11736 // paper mario. Added by Gonetz
11737 // (noise-prim)*prim+t0 ** INC **
11738 {0x23372337, cc_t0_add_prim},
11739 // strange mirror in stone temple, zelda 2. Added by Gonetz
11740 // (prim-env)*prim+t0, (cmb-0)*prim+0 ** INC **
11741 {0x2353e3f0, cc__prim_sub_env_mul_prim_add_t0__mul_prim},
11742 // Gilded sword, zelda 2. Added by Gonetz
11743 // (shade-env)*prim+t0, (cmb-0)*shade+env ** INC **
11744 {0x2354a4f0, cc__t0_add_prim_mul_shade__mul_shade_add_env},
11745 // Razor sword, zelda 2. Added by Gonetz
11746 // (shade-env)*prim+t0, (cmb-0)*shade+0 ** INC **
11747 {0x2354e4f0, cc__t0_add_prim_mul_shade__mul_shade},
11748 // menu, Mischief Makers. Added by Gonetz
11749 // (0-env)*prim+t0, (cmb-0)*shade+0
11750 {0x235f235f, cc_t0_sub__prim_mul_env},
11751 // Deadly Arts logo. Added by Gonetz
11752 // (t0-0)*prim+t0
11753 {0x23f123f1, cc_t0_mul_prim},
11754 // pokemon attack, Pokemon Stadium 2. Added by Gonetz
11755 // (shade-0)*prim+t0, (cmb-0)*shade+0 ** INC **
11756 {0x23f4e4f0, cc_t0_mul_shade},
11757 // Mischief Makers logo. Added by Gonetz
11758 // (env-0)*prim+t0
11759 {0x23f523f5, cc_prim_mul_env_add_t0},
11760 // Taken out bomb, zelda
11761 // (1-0)*prim+t0
11762 {0x23f623f6, cc_t0_add_prim},
11763 // waterfall, Dobutsu_no_Mori
11764 // (1-0)*prim+t0, (cmb-0)*shade+t0
11765 {0x23f624f0, cc__t0_add_prim__mul_shade_add_t0},
11766 // waterfall, Dobutsu_no_Mori
11767 // (1-0)*prim+t0, (cmb-0)*shade+t1
11768 {0x23f644f0, cc__t0_add_prim__mul_shade_add_t1},
11769 // Jabu-Jabu's Belly, zelda
11770 // (noise-0)*prim+t0
11771 {0x23f723f7, cc_t0_add_prim},
11772 // carmagedon
11773 // (0-0)*prim+t0
11774 {0x23ff23ff, cc_t0},
11775 // water, diddy kong racing. Added by Gonetz
11776 // (t1-t0)*shade+t0, (env-cmb)*env_a+cmb **INC**
11777 {0x24120c05, cc__t0_inter_t1_using_shade__inter_env_using_enva},
11778 // Advertisement hoarding, Mia Soccer. Added by Gonetz
11779 // (t1-t0)*shade+t0, (1-0)*cmb+0
11780 {0x2412e0f6, cc_t0_inter_t1_using_shade},
11781 // ground, f-zero x
11782 // (prim-t0)*shade+t0 ** INC **
11783 {0x24132413, cc__one_sub_prim_mul_shade__mul_t0_add__prim_mul_shade},
11784 // intro, F1 Racing Championship. Added by Gonetz
11785 // (env-t0)*shade+t0 ** INC *
11786 {0x24152415, cc_one_sub_t0_mul_shade_add_t0},
11787 // Sky, pilotwings
11788 // (1-t0)*shade+t0
11789 {0x24162416, cc_one_sub_t0_mul_shade_add_t0},
11790 // zelda 2 [Ogy]. Added by Gonetz
11791 // (prim-env)*shade+t0, (prim-prim)*shade+cmb ** INC ** ?
11792 {0x24530433, cc_prim_sub_env_mul_shade_add_t0},
11793 // waves, Dr. Mario
11794 // (0-center)*shade+t0
11795 {0x246f246f, cc_t0_sub__shade_mul_center},
11796 // lums, Rayman2. Added by Gonetz
11797 // (t0-0)*shade+t0 ** INC **
11798 {0x24f124f1, cc_t0}, //this one works better
11799 // {0x24f124f1, cc_t0_mul_shade},
11800 // Goemon, mystical ninja. Added by Gonetz
11801 // (prim-0)*shade+t0
11802 {0x24f324f3, cc_prim_mul_shade_add_t0},
11803 // Sky, waverace
11804 //z (t1-t0)*env+t0 ** INC **
11805 {0x25122512, cc_t0_inter_t1_using_env},
11806 // Rare logo, Jet Force. Added by Gonetz
11807 // (t1-t0)*env+t0, (cmb-0)*prim+0 ** INC **
11808 {0x2512e3f0, cc__t0_inter_t1_using_enva__mul_prim},
11809 // ridge recer, unimp log. Added by Gonetz
11810 // (t1-t0)*env+t0, (cmb-0)*shade+0 ** INC **
11811 {0x2512e4f0, cc__t0_inter_t1_using_env__mul_shade},
11812 // menu, Mischief Makers. Added by Gonetz
11813 //(prim-t0)*env+t0 ** INC **
11814 {0x25132513, cc_one_sub_env_mul_t0_add_prim_mul_env},
11815 // Battle border, quest64
11816 // (1-t0)*env+t0
11817 {0x25162516, cc_one_sub_env_mul_t0_add_env},
11818 // Paper Mario
11819 // (noise-t0)*env+t0
11820 {0x25172517, cc_t0_inter_noise_using_env},
11821 // the lamp in the bomb shop in town, zelda 2 [Ogy]. Added by Gonetz
11822 // (t0-t1)*env+t0, (1-env)*prim+cmb ** INC **
11823 {0x25210356, cc_one_sub_env_mul_prim_add__t0_inter_t1_using_env},
11824 // Darmani's necklace, zelda 2 [Ogy]. Added by Gonetz
11825 // (prim-shade)*env+t0, (cmb-0)*shade+0 ** INC **
11826 {0x2543e4f0, cc_t0_mul_shade_add_prim_mul_env},
11827 // {0x2543e4f0, cc_t0_mul_shade},
11828 // mystical ninja. Added by Gonetz
11829 // (1-0)*env+t0
11830 {0x25f625f6, cc_t0_add_env},
11831 // smoke, Starshot. Added by Gonetz
11832 // (1-0)*env+t0, (1-0)*cmb+0
11833 {0x25f6e0f6, cc_t0_add_env},
11834 // mega shock, Paper Mario. Added by Gonetz
11835 // (t1-0)*scale+t0, (env-center)*cmb+prim
11836 {0x26f26065, cc__t0_add__t1_mul_scale__mul_env_sub_center_add_prim},
11837 // character select, Duck Dodgers. Added by Gonetz
11838 // (prim-t0)*t0_alpha+t0, (cmb-0)*shade+0 **INC**
11839 {0x2813e4f0, cc__t0_inter_prim_using_t0a__mul_shade},
11840 // intro, Duck Dodgers. Added by Gonetz
11841 // (shade-t0)*t0_alpha+t0 **INC**
11842 {0x28142814, cc_t0_inter_shade_using_t0a},
11843 // vermilion gym torches, Pokemon Stadium 2.
11844 // (prim-env)*t0_a+t0, (cmb-cmb)*cmb+cmb
11845 {0x28530000, cc_prim_sub_env_mul_t0a_add_t0},
11846 // F1 World Grand Prix. Added by Gonetz
11847 // (prim-0)*t0_a+t0, (cmb-0)*shade+0 ** INC **
11848 {0x28f3e4f0, cc__t0a_mul_prim_add_t0__mul_shade},
11849 // battle tanks 2 [Ogy]
11850 // (env-0)*t0_a+t0, (cmb-0)*shade+0
11851 {0x28f5e4f0, cc__t0a_mul_env_add_t0__mul_shade},
11852 // blastcorps, unimp log. Added by Gonetz
11853 // (t1-t0)*t1_alpha+t0
11854 {0x29122912, cc_t0_inter_t1_using_t1a},
11855 // paper mario. Added by Gonetz
11856 // (t1-t0)*t1_alpha+t0, (cmb-env)*env_a+env
11857 {0x2912ac50, cc__t0_inter_t1_using_t1a__sub_env_mul_enva_add_env},
11858 // Rally 2000. Added by Gonetz
11859 // (t1-t0)*t1_alpha+t0, (cmb-0)*shade+0
11860 {0x2912e4f0, cc__t0_inter_t1_using_t1a__mul_shade},
11861 // ??? in zelda ending, zelda
11862 // (1-0)*t1_alpha+t0, (prim-env)*cmb+env
11863 {0x29f6a053, cc_prim_sub_env_mul__t0_add_t1a__add_env},
11864 // Sky, zelda
11865 //z (t1-t0)*prim_a+t0
11866 {0x2a122a12, cc_t0_inter_t1_using_prima},
11867 // battle tanks [Ogy]
11868 // (t1-t0)*prim_a+t0, (env-prim)*cmb+prim
11869 {0x2a126035, cc_env_sub_prim_mul__t0_inter_t1_using_prima__add_prim},
11870 // clothes, zelda 2. Added by Gonetz
11871 // (t1-t0)*prim_a+t0, (prim-env)*cmb+env
11872 {0x2a12a053, cc_prim_sub_env_mul__t0_inter_t1_using_prima__add_env},
11873 // N64 BIOS
11874 // (t1-t0)*prim_a+t0, (cmb-0)*shade+0
11875 {0x2a12e0f4, cc__t0_inter_t1_using_prima__mul_shade},
11876 // flame, Doraemon 2. Added by Gonetz
11877 // (t1-t0)*prim_a+t0, (cmb-0)*prim+0
11878 {0x2a12e3f0, cc__t0_inter_t1_using_prima__mul_prim},
11879 // logo, PD. Added by Gonetz
11880 // (t1-t0)*prim_a+t0, (cmb-0)*shade+0
11881 {0x2a12e4f0, cc__t0_inter_t1_using_prima__mul_shade},
11882 // Pikachu
11883 // (prim-t0)*prim_a+t0, (env-cmb)*enva+cmb
11884 {0x2a130c05, cc__t0_inter_prim_using_prima__inter_env_using_enva},
11885 // 1080 snowboarding [Ogy] - 7/03/02 fixed by Dave2001. 15 Mar 2005 fixed by Gonetz.
11886 // (prim-t0)*prim_a+t0
11887 {0x2a132a13, cc_t0_inter_prim_using_prima},
11888 // menu background, Paper Mario
11889 // (prim-t0)*prim_a+t0, (prim-t1)*prim_a+t1
11890 {0x2a134a23, cc_t0_inter_prim_using_prima},
11891 // {0x2a134a23, cc_t0},
11892 // Mickey USA
11893 // (prim-t0)*prim_a+t0, (cmb-0)*shade+0 ** INC **
11894 {0x2a13e4f0, cc_t0_mul_shade},
11895 // gunfire, Sin and Punishmen. Added by Gonetz
11896 // (env-t0)*prima+t0 **INC**
11897 {0x2a152a15, cc_t0_inter_env_using_prima},
11898 // Mystical Ninja
11899 // (0-t0)*prima+t0, (prim-env)*cmb+env ** INC **
11900 {0x2a1fa053, cc_prim_sub_env_mul__t0_sub_t0_mul_prima__add_env},
11901 // foresight attack, Pokemon Stadium 2.
11902 // (t1-prim)*prim_a+t0, (prim-env)*cmb+env
11903 {0x2a32a053, cc_prim_sub_env_mul__t1_sub_prim_mul_prima_add_t0__add_env},
11904 // arena, Pokemon Stadium 2. Added by Gonetz
11905 // (shade-prim)*prim_a+t0 ** INC **
11906 {0x2a342a34, cc_t0_mul_shade},
11907 // Torches, Paper Mario
11908 // (t1-k4)*prim_a+t0, (t1-k4)*cmb_a+cmb ** INC **
11909 {0x2a720772, cc_t1_sub_k4_mul_prima_add_t0},
11910 // GASP Fighters. Added by Gonetz
11911 // (t0-0)*prim_a+t0, (cmb-center)*scale+0 ** INC **
11912 {0x2af1e660, cc__t0_mul_prima_add_t0__sub_center_mul_scale},
11913 // F1 World Grand Prix. Added by Gonetz
11914 // (t1-0)*prim_a+t0, (cmb-0)*shade+env
11915 {0x2af2a4f0, cc__t1_mul_prima_add_t0__mul_shade_add_env},
11916 // tidal wave, Paper Mario. Added by Gonetz
11917 // (prim-0)*prim_a+t0
11918 {0x2af32af3, cc_prim_mul_prima_add_t0},
11919 //Spacestation Silicon Valley intro. Added by Gonetz
11920 // (t1-t0)*shade_alpha+t0, (prim-shade)*cmb+shade ** INC **
11921 {0x2b128043, cc_prim_sub_shade_mul__t0_inter_t1_using_shadea__add_shade},
11922 // water, Rocket Robot in Wheels
11923 // (t1-t0)*shade_alpha+t0, (env-shade)*cmb+shade ** INC **
11924 {0x2b128045, cc_env_sub_shade_mul__t0_inter_t1_using_shadea__add_shade},
11925 // arena, Pokemon Stadium 2
11926 // (t1-t0)*shade_alpha+t0, (cmb-prim)*env+shade ** INC **
11927 {0x2b128530, cc__t0_inter_t1_using_shadea__sub_prim_mul_env_add_shade},
11928 // Rocket Robot in Wheels intro
11929 // (t1-t0)*shade_a+t0, (shade-0)*cmb+0 ** INC **
11930 {0x2b12e0f4, cc__t0_inter_t1_using_shadea__mul_shade},
11931 // water, Mickey USA
11932 // (t1-t0)*shade_a+t0, (cmb-0)*shade+0 ** INC **
11933 {0x2b12e4f0, cc__t0_inter_t1_using_shadea__mul_shade},
11934 // Extreme G. Added by Gonetz
11935 // (shade-t0)*shade_alpha+t0
11936 {0x2b142b14, cc_shade_sub_t0_mul_shadea_add_t0},
11937 // Jet Force Gemini. Added by Gonetz
11938 // (shade-t0)*shade_alpha+t0, (cmb-0)*prim+0 ** INC **
11939 {0x2b14e3f0, cc_t0_mul_prim_add_shade_mul_shadea_mul_prim},
11940 // V8-2
11941 // (env-t0)*shade_alpha+t0, (cmb-0)*shade+0 ** INC **
11942 {0x2b15e4f0, cc__t0_inter_env_using_shadea__mul_shade},
11943 // Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
11944 // (t1-0)*shade_alpha+t0, (prim-env)*cmb+env ** INC **
11945 {0x2bf2a053, cc_prim_sub_env_mul__t0_add_t1__add_env},
11946 // pads, Pokemon Stadium 2. Added by Gonetz
11947 // (0-0)*shade_alpha+t0, (prim-env)*cmba+env
11948 {0x2bffa753, cc_prim_sub_env_mul_t0a_add_env},
11949 // paper mario. Added by Gonetz
11950 // (t1-t0)*env_a+t0, (1-cmb)*prim+cmb
11951 {0x2c120306, cc_one_sub__t0_inter_t1_using_enva__mul_prim_add__t0_inter_t1_using_enva},
11952 // Amoeba boss, water temple, zelda
11953 // (t1-t0)*env_a+t0, (cmb-env)*prim+t0 ** INC **
11954 {0x2c122350, cc__t0_inter_t1_using_enva__sub_env},
11955 // paper mario. Added by Gonetz
11956 // (t1-t0)*env_a+t0
11957 {0x2c122c12, cc_t0_inter_t1_using_enva},
11958 // paper mario. Added by Gonetz
11959 // (t1-t0)*env_a+t0, (1-prim)*cmb+prim
11960 {0x2c126036, cc_one_sub_prim_mul__t0_inter_t1_using_enva__add_prim},
11961 //Arena, Pokemon Stadium 2
11962 // (t1-t0)*env_a+t0, (cmb-0)*shade+prim
11963 {0x2c1264f0, cc__t0_inter_t1_using_enva__mul_shade_add_prim},
11964 // water, jet force. Added by Gonetz
11965 // (t1-t0)*env_a+t0, (prim-shade)*cmb+shade
11966 {0x2c128043, cc_prim_sub_shade_mul__t0_inter_t1_using_enva__add_shade},
11967 // Faries, zelda
11968 //z (t1-t0)*env_a+t0, (prim-env)*cmb+env
11969 {0x2c12a053, cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env},
11970 // paper mario. Added by Gonetz
11971 // (t1-t0)*env_a+t0, (prim-center)*cmb+env
11972 {0x2c12a063, cc_prim_sub_center_mul__t0_inter_t1_using_enva__add_env},
11973 // pads, Pokemon Stadium 2. Added by Gonetz
11974 // (t1-t0)*env_a+t0, (cmb-prim)*shade+env ** INC **
11975 {0x2c12a430, cc__t0_inter_t1_using_enva__mul_shade_add_env},
11976 // Scary dead thing boss, zelda
11977 // (t1-t0)*env_a+t0, (cmb-t1)*cmb_a+env
11978 {0x2c12a720, cc__t0_inter_t1_using_enva__mul_env},
11979 // something in a menu, PokemonStadium2, [Raziel64]
11980 // (t1-t0)*env_a+t0, (prim-env)*cmb_a+env
11981 {0x2c12a753, cc_prim_sub_env_mul__t0_inter_t1_using_enva_alpha__add_env},
11982 // Arena, pokemon Stadium
11983 // (t1-t0)*env_a+t0, (cmb-shade)*prim+0
11984 {0x2c12e340, cc__t0_inter_t1_using_enva__sub_shade_mul_prim},
11985 // Water in zora's place, zelda
11986 // (t1-t0)*env_a+t0, (cmb-0)*prim+0
11987 {0x2c12e3f0, cc__t0_inter_t1_using_enva__mul_prim},
11988 // Ground, zelda
11989 //z (t1-t0)*env_a+t0, (cmb-k5)*shade+cmb_a
11990 {0x2c12e4f0, cc__t0_inter_t1_using_enva__mul_shade},
11991 // zelda, uninmp log. Added by Gonetz
11992 //(t1-t0)*env_a+t0, (cmb-0)*env+0
11993 {0x2c12e5f0, cc__t0_inter_t1_using_enva__mul_env},
11994 // Spheres, waverace
11995 //z (env-t0)*env_a+t0
11996 {0x2c152c15, cc_t0_inter_env_using_enva},//cc_t0},
11997 // backgrounds, Mario Golf. Added by Gonetz
11998 // (env-t0)*env_a+t0, (shade-0)*cmb+0
11999 {0x2c15e0f4, cc__t0_inter_env_using_enva__mul_shade},
12000 // ground on Volcano level, DKR, [Raziel64]
12001 // (env-t0)*env_a+t0, (cmb-0)*shade+0
12002 {0x2c15e4f0, cc__t0_inter_env_using_enva__mul_shade},
12003 // Nintendo 'N', zelda
12004 //z (t0-prim)*env_a+t0, (prim-env)*cmb+env
12005 {0x2c31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_enva_add_t0__add_env},
12006 // Nintendo title & saria's song, zelda
12007 //z (t1-prim)*env_a+t0, (prim-env)*cmb+env
12008 {0x2c32a053, cc_prim_sub_env_mul__t1_sub_prim_mul_enva_add_t0__add_env},
12009 // Hover boots flying, zelda
12010 // (t1-prim)*env_a+t0, (prim-0)*cmb+env
12011 {0x2c32a0f3, cc__t1_sub_prim_mul_enva_add_t0__mul_prim_add_env},
12012 // star beam, paper mario
12013 // (prim-env)*env_a+t0
12014 {0x2c532c53, cc_prim_sub_env_mul_enva_add_t0},
12015 // Kotake & koume's hair, zelda
12016 // (t1-0)*env_a+t0, (prim-env)*cmb+env
12017 {0x2cf2a053, cc_prim_sub_env_mul__t1_mul_enva_add_t0__add_env},
12018 //Goldeneye, [Jeremy]. Added by Gonetz
12019 // (t0-t0)*lodf+t0, (cmb-0)*prim+0
12020 {0x2d11e3f0, cc_t0_mul_prim},
12021 // Pilot wings
12022 // (t1-t0)*lodf+t0, (one-cmb)*prim+cmb
12023 {0x2d120306, cc_one_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},
12024 // Pilot wings
12025 // (t1-t0)*lodf+t0, (one-cmb)*shade+cmb
12026 {0x2d120406, cc_one_sub_shade_mul__t0_inter_t1_using_primlod__add_shade},
12027 // Indy Racing 2000. Added by Gonetz
12028 // (t1-t0)*lodf+t0, (env-cmb)*prima+cmb ** INC **
12029 {0x2d120a05, cc_t0_inter_t1_using_primlod},
12030 // (t1-t0)*lodf+t0
12031 {0x2d122d12, cc_t0_inter_t1_using_primlod},
12032 //broken wall, beetle adventure racing. Added by Gonetz
12033 // (t1-t0)*lodf+t0, (shade-prim)*cmb+prim
12034 {0x2d126034, cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},
12035 //Intro, CBFD. Added by Gonetz
12036 // (t1-t0)*lodf+t0, (shade-env)*cmb+prim
12037 // {0x2d126054, cc_shade_sub_env_mul_t0_add_prim},
12038 {0x2d126054, cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_prim},
12039 // bassmasters 2000 [Ogy]
12040 // (t1-t0)*lodf+t0, (env-0)*cmb+prim ** INC **
12041 {0x2d1260f5, cc_t0_mul_env_add_prim},
12042 // sign, CBFD. Added by Gonetz
12043 // (t1-t0)*lodf+t0, (cmb-env)*shade+prim ** INC **
12044 {0x2d126450, cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_prim},
12045 // {0x2d126450, cc_t0_sub_env_mul_shade_add_prim},
12046 // landscape, Cruis'n Exotica. Added by Gonetz
12047 // (t1-t0)*lodf+t0, (cmb-0)*shade+prim
12048 {0x2d1264f0, cc__t0_inter_t1_using_primlod__mul_shade_add_prim},
12049 // blast corps [Ogy]
12050 // (t1-t0)*lodf+t0, (0-0)*0+shade
12051 {0x2d129fff, cc__t0_inter_t1_using_primlod__mul_shade},
12052 // End of level, zelda
12053 // (t1-t0)*lodf+t0, (prim-env)*cmb+env
12054 {0x2d12a053, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12055 // Rocket Robot in Wheels intro
12056 // (t1-t0)*lodf+t0, (shade-env)*cmb+env
12057 {0x2d12a054, cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12058 // basket, Fox Sport
12059 // (t1-t0)*lodf+t0, (prim-env)*t0+env
12060 {0x2d12a153, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12061 // paper mario. Added by Gonetz
12062 // (t1-t0)*lodf+t0, (cmb-0)*prim+env ** INC **
12063 {0x2d12a3f0, cc__t0_inter_t1_using_primlod__mul_prim_add_env},
12064 // Tony Hawk Pro Skater
12065 // (t1-t0)*lodf+t0, (cmb-0)*shade+env
12066 {0x2d12a4f0, cc__t0_inter_t1_using_primlod__mul_shade_add_env},
12067 // part of a building, Spiderman. Added by Gonetz
12068 // (t1-t0)*lodf+t0, (cmb-env)*cmba+env ** INC **
12069 {0x2d12a750, cc_t0_inter_t1_using_primlod},
12070 // Mike Piazza's Strike Zone
12071 // (t1-t0)*lodf+t0, (shade-prim)*cmb+0
12072 {0x2d12e034, cc_shade_sub_prim_mul__t0_inter_t1_using_primlod},
12073 // intro, F1 Racing Championship. Added by Gonetz
12074 // (t1-t0)*lodf+t0, (shade-env)*cmb+0
12075 {0x2d12e054, cc_shade_sub_env_mul__t0_inter_t1_using_primlod},
12076 // stands, F1 Racing Championship. Added by Gonetz
12077 // (t1-t0)*lodf+t0, (1-env)*cmb+0
12078 {0x2d12e056, cc_one_sub_env_mul__t0_inter_t1_using_primlod},
12079 // court, Mario Tennis. Added by Gonetz
12080 // (t1-t0)*lodf+t0, (prim-0)*cmb+0
12081 {0x2d12e0f3, cc__t0_inter_t1_using_primlod__mul_prim},
12082 // Rocket Robot in Wheels intro
12083 // (t1-t0)*lodf+t0, (shade-0)*cmb+0
12084 {0x2d12e0f4, cc__t0_inter_t1_using_primlod__mul_shade},
12085 // Pilot wings
12086 // (t1-t0)*lodf+t0, (cmb-0)*t0+0 ** INC **
12087 {0x2d12e1f0, cc_t0_inter_t1_using_primlod},
12088 // cars wheels, SF Rush 2049. Added by Gonetz
12089 // (t1-t0)*lodf+t0, (cmb-0)*prim+0
12090 {0x2d12e3f0, cc__t0_inter_t1_using_primlod__mul_prim},
12091 // Bridge, sf rush
12092 // (t1-t0)*lodf+t0, (cmb-0)*shade+0
12093 // {0x2d12e4f0, cc_t0_mul_shade},
12094 {0x2d12e4f0, cc__t0_inter_t1_using_primlod__mul_shade},
12095 // blast corps [Ogy]
12096 // (t1-t0)*lodf+t0, (t0-0)*shade+0
12097 {0x2d12e4f1, cc_t0_mul_shade},
12098 // field, Mike Piazza's Strike Zone
12099 // (t1-t0)*lodf+t0, (cmb-prim)*env+0 ** INC **
12100 {0x2d12e530, cc__t0_inter_t1_using_primlod__mul_env},
12101 // radar, Perfect Dark
12102 // (t1-t0)*lodf+t0, (cmb-0)*env+0
12103 {0x2d12e5f0, cc__t0_inter_t1_using_primlod__mul_env},
12104 // planet, Blast Corps
12105 // (t1-t0)*lodf+t0, (cmb-0)*prima+0
12106 {0x2d12eaf0, cc__t0_inter_t1_using_primlod__mul_prima},
12107 // zelda 2. Added by Gonetz
12108 // (t0-t0)*primlod+t0, (prim-env)*cmb+env
12109 {0x2e11a053, cc_prim_sub_env_mul_t0_add_env},
12110 // zelda 2. Added by Gonetz
12111 // (t1-t0)*primlod+t0, (0-0)*shade+cmb
12112 {0x2e1204ff, cc_t0_inter_t1_using_primlod},
12113 // zelda 2. Added by Gonetz
12114 // (t1-t0)*primlod+t0, (env-prim)*primlod+cmb
12115 {0x2e120d35, cc_prim_sub_env_mul_primlod_add__t0_inter_t1_using_primlod},
12116 // lamppost, Ridge Racer. Added by Gonetz
12117 // (t1-t0)*primlod+t0
12118 {0x2e122e12, cc_t0_inter_t1_using_primlod},
12119 // Hearts, zelda
12120 //z (t1-t0)*primlod+t0, (shade-prim)*cmb+prim
12121 {0x2e126034, cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},
12122 // Sunny Day, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12123 // (t1-t0)*primlod+t0, (env-prim)*cmb+prim
12124 {0x2e126035, cc_env_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},
12125 // snowhead temple, zelda 2. Added by Gonetz
12126 // (t1-t0)*primlod+t0, (cmb-env)*shade+prim ** INC **
12127 {0x2e126450, cc__t0_inter_t1_using_primlod__mul_shade_add_prim},
12128 // snow on a wall, snowhead temple, zelda 2. Added by Gonetz
12129 // (t1-t0)*primlod+t0, (cmb-0)*shade+prim
12130 {0x2e1264f0, cc__t0_inter_t1_using_primlod__mul_shade_add_prim},
12131 // Morning Sun, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12132 // (t1-t0)*primlod+t0, (cmb-0)*0+prim
12133 {0x2e127ff0, cc_prim},
12134 // arena, Pokemon Stadium 2. Added by Gonetz
12135 // (t1-t0)*primlod+t0, (cmb-prim)*shade+shade ** INC **
12136 {0x2e128430, cc__t0_inter_t1_using_primlod__mul_shade},
12137 // Pokemon Stadium 2. Added by Gonetz
12138 // (t1-t0)*primlod+t0, (cmb-env)*cmb+env ** INC **
12139 {0x2e12a050, cc_t0_inter_t1_using_primlod},
12140 // End of level heart, zelda
12141 // (t1-t0)*primlod+t0, (prim-env)*cmb+env
12142 {0x2e12a053, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12143 // Huge turtle appearance, zelda 2. Added by Gonetz
12144 // (t1-t0)*primlod+t0, (1-env)*cmb+env
12145 {0x2e12a056, cc_one_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12146 // frozen octorok, zelda 2. Added by Gonetz
12147 // (t1-t0)*primlod+t0, (prim-env)*t1+env
12148 {0x2e12a253, cc_prim_sub_env_mul_t1_add_env},
12149 // fall headwaters, zelda 2. Added by Gonetz
12150 // (t1-t0)*primlod+t0, (cmb-env)*shade+env ** INC **
12151 {0x2e12a450, cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_env},
12152 // Fissure attack, pokemon stadium 2
12153 // (t1-t0)*primlod+t0, (prim-env)*cmb_a+env
12154 {0x2e12a753, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12155 // zelda 2. Added by Gonetz
12156 // (t1-t0)*primlod+t0, (cmb-0)*t1+0 ** INC ** ?
12157 {0x2e12e2f0, cc_t0_inter_t1_using_primlod},
12158 // zelda 2. Added by Gonetz
12159 // (t1-t0)*primlod+t0, (cmb-0)*prim+0
12160 {0x2e12e3f0, cc__t0_inter_t1_using_primlod__mul_prim},
12161 // sky, PGA European Tour
12162 // (t1-t0)*primlod+t0, (cmb-env)*shade+0 ** INC **
12163 {0x2e12e450, cc__t0_inter_t1_using_primlod__mul_shade},
12164 // Kirby's pool, smash bros
12165 // (t1-t0)*primlod+t0, (cmb-0)*shade+0
12166 {0x2e12e4f0, cc__t0_inter_t1_using_primlod__mul_shade},
12167 //Spacestation Silicon Valley intro. Added by Gonetz
12168 // (prim-t0)*primlod+t0, (cmb-0)*shade+0 **INC**
12169 {0x2e132e13, cc_t0_inter_prim_using_primlod},
12170 // explosions, daikatana. Added by Gonetz
12171 // (prim-t0)*primlod+t0, (cmb-0)*shade+0 **INC**
12172 {0x2e13e4f0, cc_t0_mul_shade},
12173 //Mike Piazza's Strike Zone logo. Added by Gonetz
12174 // (shade-t0)*primlod+t0
12175 {0x2e142e14, cc_t0_inter_shade_using_primlod},
12176 // Cartridge color (transfer pak}, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12177 // (1-t0)*primlod+t0
12178 {0x2e162e16, cc_one_sub_t0_mul_primlod_add_t0},
12179 // pokemon attack, Pokemon Stadium 2. Added by Gonetz
12180 // (1-t0)*primlod+t0, (prim-0)*cmb+0
12181 {0x2e16e0f3, cc__t0_inter_one_using_primlod__mul_prim},
12182 // Spider Web attack, Pokemon Stadium 2.
12183 // (1-t0)*primlod+t0, (cmb-0)*prim+0
12184 {0x2e16e3f0, cc__t0_inter_one_using_primlod__mul_prim},
12185 // pokemon attack, Pokemon Stadium 2. Added by Gonetz
12186 // (1-t0)*primlod+t0, (cmb-0)*shade+0
12187 {0x2e16e4f0, cc__t0_inter_one_using_primlod__mul_shade},
12188 // zelda 2. Added by Gonetz
12189 // (t1-t1)*primlod+t0, (prim-env)*cmb+env
12190 {0x2e22a053, cc_prim_sub_env_mul_t0_add_env},
12191 // Shadow Ball, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12192 // (0-t1)*primlod+t0, (prim-env)*cmb+env ** INC **
12193 {0x2e2fa053, cc_prim_sub_env_mul_t0_add_env},
12194 // Skulltula coin solid, zelda
12195 // (t0-prim)*primlod+t0, (prim-env)*cmb+env
12196 {0x2e31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t0__add_env},
12197 // Triforce lines, zelda
12198 // (t1-prim)*primlod+t0, (prim-shade)*cmb+shade
12199 {0x2e328043, cc_prim_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade},
12200 // moon when majora defeated, zelda 2. Added by Gonetz
12201 // (t1-prim)*primlod+t0, (1-shade)*cmb+shade
12202 {0x2e328046, cc_one_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade},
12203 // Fire, zelda
12204 //z (t1-prim)*primlod+t0, (prim-env)*cmb+env ** INC **
12205 {0x2e32a053, cc_prim_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env},
12206 // zelda 2 [Ogy]. Added by Gonetz
12207 // (t1-prim)*primlod+t0, (shade-env)*cmb+env
12208 {0x2e32a054, cc_shade_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env},
12209 // Scary face, pokemon stadium 2
12210 // (t1-prim)*primlod+t0, (1-env)*cmb+env
12211 {0x2e32a056, cc_one_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env},
12212 // zelda 2. Added by Gonetz
12213 // (t1-prim)*primlod+t0, (prim-0)*cmb+env
12214 {0x2e32a0f3, cc__t1_sub_prim_mul_primlod_add_t0__mul_prim_add_env},
12215 // zelda 2. Added by Gonetz
12216 // (t1-0)*primlod+t0, (prim-env)*cmb+env
12217 {0x2ef2a053, cc_prim_sub_env_mul__t1_mul_primlod_add_t0__add_env},
12218 // zelda 2. Added by Gonetz
12219 // (t1-0)*primlod+t0, (cmb-0)*prim+0
12220 {0x2ef2e3f0, cc__t1_mul_primlod_add_t0__mul_prim},
12221 // zelda 2. Added by Gonetz
12222 // (t1-0)*primlod+t0, (cmb-0)*env+0
12223 {0x2ef2e5f0, cc__t1_mul_primlod_add_t0__mul_env},
12224 // gun, Doom64. Added by Gonetz
12225 // (1-0)*primlod+t0, (cmb-0)*prim+env
12226 {0x2ef6a3f0, cc__t0_add_primlod__mul_prim_add_env},
12227 // walls, Doom64. Added by Gonetz
12228 // (1-0)*primlod+t0, (cmb-0)*shade+env
12229 {0x2ef6a4f0, cc__t0_add_primlod__mul_shade_add_env},
12230 // Pokemon Stadium 2. Added by Gonetz
12231 // (noise-0)*primlod+t0, (prim-env)*cmb+env ** INC **
12232 {0x2ef7a053, cc_prim_sub_env_mul_t0_add_env},
12233 // Tony Hawk's Pro Skater. Added by Gonetz
12234 // (t1-t0)*k5+t0
12235 {0x2f122f12, cc_t0_inter_t1_using_k5},
12236 // F1 World Grand Prix. Added by Gonetz
12237 // (t1-t0)*k5+t0, (cmb-0)*shade+0 **INC**
12238 {0x2f12e4f0, cc__t0_inter_t1_using_k5__mul_shade},
12239 // Turok 3 [scorpiove]. Added by Gonetz
12240 // (t0-k4)*k5+t0
12241 {0x2f712f71, cc_t0},
12242 // THPS 3
12243 // (env-0)*k5+t0,
12244 {0x2ff52ff5, cc_t0_add_env_mul_k5},
12245 // super bowling
12246 // (0-0)*k5+t0,
12247 {0x2fff0000, cc_t0},
12248 // super bowling
12249 // (0-0)*k5+t0
12250 {0x2fff2fff, cc_t0},
12251 // Moonlight attack, pokemon stadium 2
12252 // (t1-t0)*0+t0, (prim-env)*cmb+env
12253 {0x3f12a053, cc_prim_sub_env_mul_t0_add_env},
12254 //C&C shadows
12255 //(1-env)*0+t0
12256 {0x3f563f56, cc_t0},
12257 // RARE logo, blast corps. Added by Gonetz
12258 // (t0-0)*0+t0
12259 {0x3ff13ff1, cc_t0},
12260 // the ground below the scarecrow in the trading post in town, zelda 2 [Ogy]. Added by Gonetz
12261 // (t1-0)*0+t0, (cmb-0)*shade+0
12262 {0x3ff2e4f0, cc_t0_mul_shade},
12263 // intro, background, Dezaemon 3D
12264 // (1-0)*0+t0
12265 {0x3ff63ff6, cc_t0},
12266 // intro of WWF WrestleMania 2000
12267 // ((0-0)*0+t0, (env-cmb)*prim+cmb
12268 {0x3fff0305, cc_env_sub_t0_mul_prim_add_t0},
12269 // pistol fire, Turok
12270 // ((0-0)*0+t0, (env-cmb)*shade+cmb
12271 {0x3fff0405, cc_env_sub_t0_mul_shade_add_t0},
12272 // Tony Hawk's Pro Skater. Added by Gonetz
12273 // ((0-0)*0+t0, (t1-0)*shade+cmb ** INC **
12274 {0x3fff04f2, cc_t0},
12275 // Dr. Mario [Ogy]. Added by Gonetz
12276 // ((0-0)*0+t0, (prim-cmb)*env+cmb
12277 {0x3fff0503, cc_prim_sub_t0_mul_env_add_t0},
12278 // Stained glass, quest64
12279 // (0-0)*0+t0, (1-0)*env+cmb
12280 {0x3fff05f6, cc_t0_add_env},
12281 // Health bar, killer instinct gold
12282 // (0-0)*0+t0, (prim-env)*prim_a+cmb
12283 {0x3fff0a53, cc_prim_sub_env_mul_prima_add_t0},
12284 // Runes, Turok - Dinosaur Hunter. Added by Gonetz
12285 // (0-0)*0+t0, (env-cmb)*env_a+cmb
12286 {0x3fff0c05, cc_t0_inter_env_using_enva},
12287 // intro, Mission Impossible. Added by Gonetz
12288 // (k5-k5)*0+t0, (0-0)*scale+t0
12289 {0x3fff26ff, cc_t0},
12290 // V8-2
12291 // (0-0)*0+t0, (t0-k4)*k5+t0
12292 {0x3fff2f71, cc_t0_sub_k4_mul_k5_add_t0},
12293 // TM, mario
12294 //z (k5-k5)*0+t0
12295 {0x3fff3fff, cc_t0},
12296 // Intro, CBFD. Added by Gonetz
12297 // ((0-0)*0+t0, (shade-env)*cmb+prim
12298 {0x3fff6054, cc_shade_sub_env_mul_t0_add_prim},
12299 // Text, Mia Soccer. Added by Gonetz
12300 // ((0-0)*0+t0, (0-0)*0+prim
12301 {0x3fff7fff, cc_t0},
12302 // paper mario. Added by Gonetz
12303 // ((0-0)*0+t0, (prim-env)*cmb+env
12304 {0x3fffa053, cc_prim_sub_env_mul_t0_add_env},
12305 // Objects in arena, pokemon stadium 2
12306 // (0-0)*0+t0, (cmb-prim)*shade+env
12307 {0x3fffa430, cc_t0_mul_prim},
12308 // intro, F1 Racing Championship. Added by Gonetz
12309 // (0-0)*0+t0, (shade-env)*cmb+0
12310 {0x3fffe054, cc_shade_sub_env_mul_t0},
12311 // stands, F1 Racing Championship. Added by Gonetz
12312 // (0-0)*0+t0, (1-env)*cmb+0
12313 {0x3fffe056, cc_one_sub_env_mul_t0},
12314 // ? (from log)
12315 // (0-0)*0+t0, (prim-0)*cmb+0
12316 {0x3fffe0f3, cc_t0_mul_prim},
12317 // background, GASP Fighters
12318 // (0-0)*0+t0, (shade-0)*cmb+0
12319 {0x3fffe0f4, cc_t0_mul_shade},
12320 // zelda 2 [Ogy]. Added by Gonetz
12321 // (0-0)*0+t0, (env-0)*cmb+0
12322 {0x3fffe0f5, cc_t0_mul_env},
12323 // logo, v-rally 99
12324 // (0-0)*0+t0, (prim-0)*t0+0
12325 {0x3fffe1f3, cc_t0_mul_prim},
12326 // target hit, zelda 2. Added by Gonetz
12327 // (0-0)*0+t0, (cmb-0)*prim+0
12328 {0x3fffe3f0, cc_t0_mul_prim},
12329 // Ms. Pac-Man intro background. Added by Gonetz
12330 // (0-0)*0+t0, (cmb-0)*shade+0
12331 {0x3fffe4f0, cc_t0_mul_shade},
12332 // Wonder Project J2 logo. Added by Gonetz
12333 // (0-0)*0+t0, (t0-0)*shade+0
12334 {0x3fffe4f1, cc_t0_mul_shade},
12335 // tire trace, Monster truck madness. Added by Gonetz
12336 // (0-0)*0+t0, (cmb-0)*env+0
12337 {0x3fffe5f0, cc_t0_mul_env},
12338 // Gauntlet Legends intro. Added by Gonetz
12339 // (0-0)*0+t0, (cmb-0)*ecale+0
12340 {0x3fffe6f0, cc_t0},
12341 // tire trace, beetle adventure racing. Added by Gonetz
12342 // (t1-t0)*t0+t1, (cmb-t0)*shade+t1 **INC**
12343 {0x41124410, cc__t0_inter_t1_using_t0__mul_shade},
12344 // Paper Mario. Added by Gonetz
12345 // (t0-t1)*t0+t1 **INC**
12346 {0x41214121, cc_t1_inter_t0_using_t0},
12347 // Powered Star Beam, Paper Mario. Added by Gonetz
12348 // (t0-t1)*t0+t1, (env-prim)*cmb+prim **INC**
12349 {0x41216035, cc_env_sub_prim_mul__t1_inter_t0_using_t0__add_prim},
12350 // wetrix raiseland [Raziel64]. Added by Gonetz
12351 // (prim-t1)*t0+t1, (env-t0)*cmb+cmb **INC**
12352 {0x41230015, cc_env_sub_prim_mul__t0_mul_t1__add_prim},
12353 // SCARS. Added by Gonetz
12354 // (t1-t0)*t0+t1, (cmb-t0)*shade+t1 **INC**
12355 {0x41250b03, cc__t0_inter_t1_using_half__mul_shade},
12356 //beetle adventure racing. Added by Gonetz
12357 //(t0-t1)*t1+t1, (cmb-0)*shade+0 **INC**
12358 {0x4221e4f0, cc__t1_inter_t0_using_t1__mul_shade},
12359 // cianwood gym walls, pokemon stadium 2
12360 //(t0-prim)*t1+t1, (cmb-0)*env+shade
12361 {0x423185f0, cc__t0_sub_prim_mul_t1_add_t1__mul_env_add_shade},
12362 // cianwood gym walls, pokemon stadium 2
12363 //(t0-prim)*t1+t1, (cmb-0)*shade+0
12364 {0x4231e4f0, cc__t0_sub_prim_mul_t1_add_t1__mul_shade},
12365 // paper mario. Added by Gonetz
12366 // (t0-t0)*prim+t1, (t1-cmb)*cmb+env **INC** weird
12367 {0x4311a002, cc_env},
12368 // background, Wetrix level 1, [Raziel64]. Added by Gonetz
12369 // (t0-t1)*prim+t1
12370 {0x43214321, cc_t1_inter_t0_using_prim},
12371 // Mario Party3 Tidal Toss
12372 // (t0-t1)*prim+t1, (cmb-0)*shade+0 **INC**
12373 {0x4321e4f0, cc__t1_inter_t0_using_prim__mul_shade},
12374 // grass, ISS 2k. Added by Gonetz
12375 // (t0-t1)*prim+t1, (cmb-0)*env+0 **INC**
12376 {0x4321e5f0, cc__t1_inter_t0_using_prim__mul_env},
12377 // intro, Paper Mario
12378 // (t0-0)*prim+t1
12379 {0x43f143f1, cc_t0_mul_prim_add_t1},
12380 // F1 World Grand Prix. Added by Gonetz
12381 // (t0-0)*prim+t1, (cmb-0)*shade+env **INC**
12382 {0x43f1a4f0, cc__t0_add_t1__mul_shade_add_env},
12383 // field, ISS64. Added by Gonetz
12384 // (t0-t1)*shade+t1, (cmb-t1)*prim+t1 ** INC **
12385 {0x44214320, cc_t0_sub_t1_mul_prim_mul_shade_add_t1},
12386 // {0x44214320, cc__t0_add_t1__mul_prim},
12387 // field, Top gear hyper-bike
12388 // (t0-t1)*shade+t1
12389 {0x44214421, cc_t1_inter_t0_using_shade},
12390 // water, goemon great adventure
12391 // (t0-t1)*env+t1 ** INC **
12392 {0x45214521, cc_t1_inter_t0_using_env},
12393 // characters, Ogre Battle. Added by Gonetz
12394 // (1-t1)*env+t1, (1-cmb)*prim+cmb ** INC **
12395 {0x45260306, cc_one_sub_t1_mul_prim_add_t1},
12396 // characters, Ogre Battle. Added by Gonetz
12397 // (1-t1)*env+t1
12398 {0x45264526, cc_one_sub_t1_mul_env_add_t1},
12399 // characters, Ogre Battle. Added by Gonetz
12400 // (1-t1)*env+t1, (cmb-0)*prim+0 ** INC **
12401 {0x4526e3f0, cc__t1_inter_one_using_env__mul_prim},
12402 // explosion, body harvest. Added by Gonetz
12403 // (t0-t1)*scale+t1, (env-prim)*cmb+prim ** INC **
12404 {0x46216035, cc_env_sub_prim_mul__t0_inter_t1_using_half__add_prim},
12405 // Water, AeroGauge. Added by Gonetz
12406 // (t0-t1)*prima+t1, (0-0)*0+cmb
12407 {0x4a214a21, cc_t1_inter_t0_using_prima},
12408 // flame, castlevania 2. Added by Gonetz
12409 // (t0-t1)*prima+t1, (prim-env)*cmb+env
12410 {0x4a21a053, cc_prim_sub_env_mul__t1_inter_t0_using_prima__add_env},
12411 // shadows, Mario Tennis. Added by Gonetz
12412 // (t0-t1)*prima+t1, (prim-0)*cmb+0
12413 {0x4a21e0f3, cc__t1_inter_t0_using_prima__mul_prim},
12414 // menu, Mario Golf. Added by Gonetz
12415 // (t0-t1)*prima+t1, (shade-0)*cmb+0
12416 {0x4a21e0f4, cc__t1_inter_t0_using_prima__mul_shade},
12417 // intro, castlevania 2. Added by Gonetz
12418 // (t0-t1)*prima+t1, (cmb-0)*prim+0
12419 {0x4a21e3f0, cc__t1_inter_t0_using_prima__mul_prim},
12420 // water on map, Ogre Battle64. Added by Gonetz
12421 // (t0-t1)*prima+t1, (cmb-0)*shade+0
12422 {0x4a21e4f0, cc__t1_inter_t0_using_prima__mul_shade},
12423 // Ice, Paper Mario
12424 // (t0-t1)*shade_a+t1
12425 {0x4b214b21, cc_t1_inter_t0_using_shadea},
12426 // Grass, Beetle Adventure Racing
12427 // (t0-t1)*shade_a+t1, (cmb-0)*shade+0
12428 {0x4b21e4f0, cc__t1_inter_t0_using_shadea__mul_shade},
12429 // Ground at kotake & koume, zelda
12430 // (t1-t0)*env_a+t0, (prim-env)*cmb+env
12431 {0x4c12a053, cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env},
12432 // Tony Hawk's Pro Skater. Added by Gonetz
12433 // (t0-t1)*env_a+t1, (cmb-0)*shade+cmb ** INC **
12434 {0x4c2104f0, cc__t1_inter_t0_using_enva__mul_shade},
12435 // bikes, xg2. Added by Gonetz
12436 // (t0-t1)*env_a+t1, (cmb-prim)*prima+prim
12437 {0x4c216a30, cc__t1_inter_t0_using_enva__sub_prim_mul_prima_add_prim},
12438 // Yoshi Story
12439 // (t0-t1)*env_a+t1, (prim-env)*cmb+env
12440 {0x4c21a053, cc_prim_sub_env_mul__t1_inter_t0_using_enva__add_env},
12441 // arena, Pokemon Stadium 1. Added by Gonetz
12442 // (t0-t1)*env_a+t1, (cmb-0)*prim+0
12443 {0x4c21e3f0, cc__t1_inter_t0_using_enva__mul_prim},
12444 // "end of chapter" text, paper mario. Added by Gonetz
12445 // (1-t1)*env_a+t1, (cmb-0)*t1+0
12446 {0x4c26e2f0, cc__t1_inter_one_using_enva__mul_t0},
12447 // Zelda opening door, zelda
12448 // (t0-prim)*env_a+t1, (prim-env)*t0+env
12449 {0x4c31a053, cc_prim_sub_env_mul_t0_add_env},
12450 // arena, Pokemon Stadium 2
12451 // (t0-0)*env_a+t1, (cmb-0)*shade+prim
12452 {0x4cf164f0, cc__t0_mul_enva_add_t1__mul_shade_add_prim},
12453 // Kotake & koume magic poof, zelda
12454 // (t0-0)*env_a+t1, (prim-env)*cmb+env
12455 {0x4cf1a053, cc_prim_sub_env_mul__t0_mul_enva_add_t1__add_env},
12456 // ground in stone temple, zelda 2. Added by Gonetz
12457 // (t1-t0)*primlod+t1, (cmb-0)*prim+0
12458 {0x4e12e3f0, cc__t0_inter_t1_using_primlod__mul_prim},
12459 // pokemon attack, Pokemon Stadium 2. Added by Gonetz
12460 // (noise-t0)*primlod+t1, (prim-env)*cmb+env ** INC **
12461 {0x4e17a053, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12462 // menu, pokemon stadium 1, [Raziel64]
12463 // (t0-t1)*lodf+t1, (prim-env)*cmb+env
12464 {0x4e214e21, cc_t1_inter_t0_using_primlod},
12465 // Pokemon backgrounds, pokemon stadium 2
12466 // (t0-t1)*primlod+t1, (cmb-0)*shade+prim
12467 {0x4e2164f0, cc__t1_inter_t0_using_primlod__mul_shade_add_prim},
12468 // Pokemon backgrounds, pokemon stadium 2
12469 // (t0-t1)*lodf+t1, (prim-env)*cmb+env
12470 {0x4e21a053, cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env},
12471 // zelda 2 [Ogy]. Added by Gonetz
12472 // (t0-t1)*primlod+t1, (t1-cmb)*prim+env ** INC **
12473 {0x4e21a302, cc_env_sub__t0_sub_t1_mul_primlod__mul_prim},
12474 // Magnitude, pokemon stadium 2
12475 // (t0-t1)*primlod+t1, (prim-env)*cmb_a+env
12476 {0x4e21a753, cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env},
12477 // Arena, pokemon stadium 2
12478 // (t0-t1)*primlod+t1, (cmb-shade)*prim+0
12479 {0x4e21e340, cc__t1_inter_t0_using_primlod__sub_shade_mul_prim},
12480 // zelda 2 [Ogy]. Added by Gonetz
12481 // (t0-t1)*primlod+t1, (cmb-0)*shade+0
12482 {0x4e21e4f0, cc__t1_inter_t0_using_primlod__mul_shade},
12483 // lava in snowhead temple, zelda 2. Added by Gonetz
12484 // (t0-prim)*primlod+t1, (cmb-prim)*shade+cmb ** INC **
12485 {0x4e310430, cc_lavatex_sub_prim_mul_shade_add_lavatex},
12486 // Skulltula coin, zelda
12487 // (t0-prim)*primlod+t1, (prim-env)*cmb+env
12488 {0x4e31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t1__add_env},
12489 // Pokemon background, pokemon stadium 2
12490 // (noise-shade)*primlod+t1, (prim-env)*cmb+env
12491 {0x4e47a053, cc_prim_sub_env_mul_t1_add_env},
12492 // Reflect, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12493 // (t0-0)*primlod+t1, (prim-env)*cmb+env
12494 {0x4ef1a053, cc_prim_sub_env_mul__t0_add_t1__add_env},
12495 //beetle adventure racing. Added by Gonetz
12496 //(t0-t1)*k5+t1, (cmb-0)*shade+0
12497 {0x4f21e4f0, cc__t1_inter_t0_using_k5__mul_shade},
12498 // Spiderman. Added by Gonetz
12499 //(t0-t1)*k5+t1, (cmb-0)*env+0
12500 {0x4f21e5f0, cc_t1_mul_env},
12501 // N64 logo, Ogre Battle. Added by Gonetz
12502 //(0-0)*0+t1
12503 {0x5fff5fff, cc_t1},
12504 // reversing light, Monster truck madness. Added by Gonetz
12505 //(0-0)*0+t0, (0-0)*0+prim
12506 {0x5fff7fff, cc_prim},
12507 // battle tanks [Ogy]
12508 // (0-0)*0+t1, (env-shade)*cmb+shade
12509 {0x5fff8045, cc_env_sub_shade_mul_t1_add_shade},
12510 // minigame, pokemon stadium 1. Added by Gonetz
12511 // (0-0)*0+t1, (prim-env)*cmb+env
12512 {0x5fffa053, cc_prim_sub_env_mul_t1_add_env},
12513 // F1 World Grand Prix. Added by Gonetz
12514 // (t0-prim)*t0+prim, (cmb-0)*shade
12515 {0x6131e4f0, cc__prim_inter_t0_using_t0__mul_shade},
12516 // aerofighter's assault [Ogy]
12517 // (shade-prim)*t0+prim
12518 {0x61346134, cc_shade_sub_prim_mul_t0_add_prim},
12519 // pilot wings
12520 // (shade-prim)*t0+prim, (cmb-shade)*shadea+shade
12521 {0x61348b40, cc_shade_inter__prim_inter_shade_using_t0__using_shadea},
12522 // club blow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
12523 // (shade-prim)*t0+prim, (cmb-env)*cmb_a+env ** INC **
12524 {0x6134a750, cc_shade_sub_prim_mul_t0_add_prim},
12525 // sky, Killer Instinct
12526 // (shade-prim)*t0+prim, (cmb-env)*shade_a+env ** INC **
12527 {0x6134ab50, cc_env_inter__prim_inter_shade_using_t0__using_shadea},
12528 // lava, beetle adventure racing
12529 // (shade-prim)*t0+prim, (cmb-0)*t1+0 ** INC **
12530 {0x6134e2f0, cc_shade_sub_prim_mul_t0_add_prim},
12531 // Monster truck madness intro. Added by Gonetz
12532 // (env-prim)*t0+prim, (cmb-0)*scale+cmb ** INC **
12533 {0x613506f0, cc_env_sub_prim_mul_t0_add_prim},
12534 // pokemon attack, Pokemon stadium 1
12535 // (env-prim)*t0+prim, (cmb-0)*0+cmb
12536 {0x61351ff0, cc_env_sub_prim_mul_t0_add_prim},
12537 // Paper Mario, fortune teller spheres
12538 // (env-prim)*t0+prim, (cmb-0)*t1+t0 ** INC **
12539 {0x613522f0, cc_t0_mul_t1_add_t0},
12540 // Later hearts, zelda
12541 // (env-prim)*t0+prim
12542 {0x61356135, cc_env_sub_prim_mul_t0_add_prim},
12543 // Mission Impossible. Added by Gonetz
12544 // (env-prim)*t0+prim, (shade-0)*cmb+0 ** INC **
12545 {0x6135e0f4, cc__prim_inter_env_using_t0__mul_shade},
12546 // crashing other vehicle, Monster truck madness [Raziel64]. Added by Gonetz
12547 // (env-prim)*t0+prim, (cmb-0)*t0+0 ** INC **
12548 {0x6135e1f0, cc_env_sub_prim_mul_t0_add_prim},
12549 // Tony Hawk's Pro Skater. Added by Gonetz
12550 // (env-prim)*t0+prim, (cmb-0)*t1+0 ** INC **
12551 {0x6135e2f0, cc_env_sub_prim_mul_t0_add_prim},
12552 // aerofighter's assault [Ogy]
12553 // (env-prim)*t0+prim, (cmb-0)*shade+0 ** INC **
12554 {0x6135e4f0, cc__prim_inter_env_using_t0__mul_shade},
12555 // "time out", paper mario. Added by Gonetz
12556 // (1-prim)*t0+prim, (1-cmb)*enva+cmb ** INC **
12557 {0x61360c06, cc_one_sub_prim_mul_t0_add_prim},
12558 // intro, paper mario. Added by Gonetz
12559 // (1-prim)*t0+prim, (cmb-0)*prima+t0 ** INC **
12560 {0x61362af0, cc__one_sub_prim_mul_t0_add_prim__mul_prima_add__one_sub_prim_mul_t0_add_prim},
12561 // paper mario. Added by Gonetz
12562 // (1-prim)*t0+prim
12563 {0x61366136, cc_one_sub_prim_mul_t0_add_prim},
12564 // arena, Pokemon Stadium 2. Added by Gonetz
12565 // (1-prim)*t0+prim, (cmb-env)*shade+shade ** INC **
12566 {0x61368450, cc_t0_mul_shade},
12567 // F1 World Grand Prix. Added by Gonetz
12568 // (1-prim)*t0+prim, (cmb-0)*shade+0 ** INC **
12569 {0x6136e4f0, cc_t0_mul_shade},
12570 // Xena. Added by Gonetz
12571 // (0-prim)*t0+prim
12572 {0x613f613f, cc_one_sub_t0_mul_prim},
12573 // Kirby64 end [Raziel64]. Added by Gonetz
12574 // (prim-env)*t0+prim
12575 {0x61536153, cc_prim_sub_env_mul_t0_add_prim},
12576 // Xena. Added by Gonetz
12577 // (shade-env)*t0+prim
12578 {0x61546154, cc_shade_sub_env_mul_t0_add_prim},
12579 // Karts, mario kart
12580 //z (one-env)*t0+prim
12581 {0x61566156, cc_t0_mul_1menv_add_prim},
12582 // Famista64. Added by Gonetz
12583 //(t0-0)*t0+prim
12584 {0x61f161f1, cc_t0_mul_prim},
12585 // Pokemon Stadium 2. Added by Gonetz
12586 //(shade-0)*t0+prim
12587 {0x61f461f4, cc_t0_mul_shade_add_prim},
12588 // Doom. Added by Gonetz
12589 //(1-0)*t0+prim
12590 {0x61f661f6, cc_t0_add_prim},
12591 // tire trace, beetle adventure racing. Added by Gonetz
12592 // (shade-prim)*t1+prim, (cmb-0)*t1+0 **INC**
12593 {0x6234e2f0, cc_shade_sub_prim_mul_t1_add_prim},
12594 // Text, turok
12595 // (env-prim)*t1+prim
12596 {0x62356235, cc_env_sub_prim_mul_t1_add_prim},
12597 // Pokemon Stadium 2, [gokuss4]. Added by Gonetz
12598 // (env-prim)*t1+prim, (cmb-0)*t1+0
12599 // Hack alert!
12600 {0x6235e2f0, cc_t1},
12601 // bike trace, xg2 intro. Added by Gonetz
12602 // (1-prim)*t1+prim
12603 {0x62366236, cc_one_sub_prim_mul_t1_add_prim},
12604 // aerofighter's assault [Ogy]
12605 // (1-prim)*t1+prim, (cmb-0)*0+env
12606 {0x6236bff0, cc_one_sub_prim_mul_t1_add_prim},
12607 // Tennis court, mario tennis
12608 // (t0-0)*t1+prim
12609 {0x62f162f1, cc__t0_mul_t1__add_prim},
12610 // Arena, Pokemon Stadium 2
12611 // (t0-0)*t1+prim, (cmb-0)*shade+0
12612 {0x62f1e4f0, cc__t0_mul_t1_add_prim__mul_shade},
12613 // Rush2. Added by Gonetz
12614 // (prim-prim)*prim+prim
12615 {0x63336333, cc_prim},
12616 //Bowser in final battle, Paper Mario. Added by Gonetz
12617 // (t1-0)*prim+prim
12618 {0x63f263f2, cc_t1_mul_prim_add_prim},
12619 // wetrix, icelayer, [Raziel64]. Added by Gonetz
12620 // (t0-prim)*shade+prim ** INC **
12621 {0x64316431, cc_t0_mul_shade},
12622 // KI. Added by Gonetz
12623 // (env-prim)*shade+prim
12624 {0x64356435, cc_env_sub_prim_mul_shade_add_prim},
12625 // xg2. Added by Gonetz
12626 // (1-prim)*shade+prim, (t0-0)*cmb+0 ** INC **
12627 {0x6436e0f1, cc_t1_mul__one_sub_prim_mul_shade_add_prim},
12628 // Intro, CBFD. Added by Gonetz
12629 // (t0-env)*shade+prim
12630 {0x64516451, cc_t0_sub_env_mul_shade_add_prim},
12631 // sword in final battle, zelda 2. Added by Gonetz
12632 // (t0-env)*shade+prim, (cmb-0)*shade+0 ** INC **
12633 {0x6451e4f0, cc__t0_sub_env_mul_shade_add_prim__mul_shade},
12634 // attack, Pokemon Stadium 2.
12635 // (t0-env)*shade+prim, (cmb-0)*shade_a+0 ** INC **
12636 {0x6451ebf0, cc__t0_sub_env_mul_shade_add_prim__mul_shadea},
12637 // Road Rush. Added by Gonetz
12638 // (t0-0)*shade+prim
12639 {0x64f164f1, cc_t0_mul_shade_add_prim},
12640 // paper mario. Added by Gonetz
12641 // (1-0)*shade+prim
12642 {0x64f664f6, cc_prim_add_shade},
12643 // Character select, smash bros
12644 // (t0-prim)*env+prim
12645 {0x65316531, cc_t0_sub_prim_mul_env_add_prim},
12646 // Clear screen intro, banjo kazooie
12647 // (t0-prim)*env+prim, (cmb-0)*shade+0
12648 // {0x6531e4f0, cc_t0_mul_env_mul_shade},
12649 {0x6531e4f0, cc__prim_inter_t0_using_env__mul_shade},
12650 // Dragonfly feet, banjo kazooie
12651 // (1-prim)*env+prim, (cmb-0)*shade+0
12652 {0x6536e4f0, cc__prim_inter_one_using_env__mul_shade},
12653 // Lava piranha atack, Paper Mario
12654 // (t1-k4)*env+prim ** INC **
12655 {0x65726572, cc_t1_mul_env_add_prim},
12656 // zelda 2 [Ogy]. Added by Gonetz
12657 // (t0-0)*env+prim, (1-t1)*t0a+cmb ** INC **
12658 {0x65f10826, cc_one_sub_t1_mul_t0a_add_t0_mul_env_add_prim},
12659 // clocks while warping through time, zelda 2
12660 // (t0-0)*env+prim, (cmb-0)*0+cmb
12661 {0x65f11ff0, cc_t0_mul_env_add_prim},
12662 // Helicopter, Nuclear Strike. Added by Gonetz
12663 // (t0-0)*env+prim
12664 {0x65f165f1, cc_t0_mul_env_add_prim},
12665 // Mystical Ninja
12666 // (1-0)*env+prim
12667 {0x65f665f6, cc_prim_add_env},
12668 // duke nukem: zero hour [Ogy]
12669 // (noise-0)*env+prim ** INC **
12670 {0x65f765f7, cc_prim_add_env},
12671 // "terminator", CBFD
12672 // (0-0)*env+prim
12673 {0x65ff65ff, cc_prim},
12674 // Cliffs, Taz express. Added by Gonetz
12675 // (t0-0)*scale+prim
12676 {0x66f166f1, cc_t0_mul_scale_add_prim},
12677 // Taz express. Added by Gonetz
12678 // (t0-0)*scale+prim, (cmb-0)*shade+0
12679 {0x66f1e4f0, cc_t0_mul_scale_add_prim__mul_shade},
12680 // NFL Quarterback Club 98 Menu [CpUMasteR]
12681 // (prim-0)*scale+prim
12682 {0x66f366f3, cc_prim},
12683 // Pikachu
12684 // (t0-prim)*t0_a+prim, (env-cmb)*enva+cmb
12685 {0x68310c05, cc__prim_inter_t0_using_t0a__inter_env_using_enva},
12686 // Character, dual heroes
12687 // (t0-prim)*t0_a+prim
12688 {0x68316831, cc_t0_sub_prim_mul_t0a_add_prim},
12689 // Indy Racing 2000. Added by Gonetz
12690 // (t0-prim)*t0_a+prim, (cmb-0)*shade+0 ** INC **
12691 {0x6831e4f0, cc__prim_inter_t0_using_t0a__mul_shade},
12692 // text, Sin and Punishmen. Added by Gonetz
12693 // (env-prim)*t0_a+prim ** INC **
12694 {0x68356835, cc_env_sub_prim_mul_t0a_add_prim},
12695 // arena, Pokemon Stadium 2
12696 // (1-prim)*t0_a+prim
12697 {0x68366836, cc_one_sub_prim_mul_t0a_add_prim},
12698 // menu, PD. Added by Gonetz
12699 // (env-prim)*t1_a+prim
12700 {0x69356935, cc_env_sub_prim_mul_t1a_add_prim},
12701 // {0x69356935, cc_t1},
12702 //xg2. Added by Gonetz
12703 // (t0-prim)*prima+prim
12704 {0x6a316a31, cc_t0_sub_prim_mul_prima_add_prim},
12705 // menu, battle phoenix 64. Added by Gonetz
12706 // (env-prim)*prima+prim
12707 {0x6a356a35, cc_env_sub_prim_mul_prima_add_prim},
12708 // ground, KI. Added by Gonetz
12709 // (shade-env)*prima+prim
12710 {0x6a546a54, cc_shade_sub_env_mul_prima_add_prim},
12711 // F1 World Grand Prix. Added by Gonetz
12712 // (t0-0)*prima+prim, (shade-0)*cmb+env **INC**
12713 {0x6af1a0f4, cc__t0_mul_prima_add_prim_mul__shade_add_env},
12714 //broken wall, beetle adventure racing. Added by Gonetz
12715 // (t0-0)*prima+prim, (cmb-0)*shade+0 **INC**
12716 {0x6af1e4f0, cc__t0_mul_prima_add_prim_mul__shade},
12717 // Genie, diddy kong racing
12718 // (t0-prim)*shade_alpha+prim, (env-cmb)*shade+cmb
12719 // {0x6b310405, cc_env_sub__prim_inter_t0_using_shadea__mul_shade_add_env},
12720 {0x6b310405, cc_t0_mul_shadea},
12721 // Extreme G. Added by Gonetz
12722 // (t0-prim)*shade_alpha+prim ** INC **
12723 {0x6b316b31, cc_t0_sub_prim_mul_shadea_add_prim},
12724 // water block, Paper Mario. Added by Gonetz
12725 // (t0-prim)*shade_alpha+prim, (prim-env)*cmb+env ** INC **
12726 {0x6b31a053, cc_prim_sub_env_mul__prim_inter_t0_using_shadea__add_env},
12727 // water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
12728 // (t0-prim)*shade_alpha+prim, (cmb-0)*shade+0 ** INC **
12729 {0x6b31e4f0, cc__prim_inter_t0_using_shadea__mul_shade},
12730 // F1 World Grand Prix sky. Added by Gonetz
12731 // (env-prim)*shade_alpha+prim, (shade-cmb)*cmb_a+cmb ** INC **
12732 {0x6b350704, cc_f1_sky},
12733 // lullaby, Paper Mario. Added by Gonetz
12734 // (env-prim)*shade_alpha+prim
12735 {0x6b356b35, cc_env_sub_prim_mul_shadea_add_prim},
12736 // Some gannon spell, zelda
12737 // (noise-t0)*env_a+prim, (0-prim)*cmb+1 ** INC **
12738 {0x6c17c03f, cc_one_sub__one_sub_t0_mul_enva_add_prim__mul_prim},
12739 //Goldeneye, [Jeremy]. Added by Gonetz
12740 // (t0-prim)*env_a+prim
12741 {0x6c316c31, cc_t0_sub_prim_mul_enva_add_prim},
12742 // button, Sin and Punishmen. Added by Gonetz
12743 // (env-prim)*env_a+prim
12744 {0x6c356c35, cc_env_sub_prim_mul_enva_add_prim},
12745 // frame buffer effect, Glover2
12746 // (env-prim)*env_a+prim, (cmb-0)*shade+0
12747 {0x6c35e4f0, cc__prim_inter_env_using_enva__mul_shade},
12748 // fallen stars at star summit, Paper Mario. Added by Gonetz
12749 // (t0-env)*env_a+prim, (1-0)*primlod+cmb
12750 {0x6c510ef6, cc_t0_sub_env_mul_enva_add_prim},
12751 // focus, Paper Mario. Added by Gonetz
12752 // (t0-env)*env_a+prim, (cmb-shade)*shadea+shade ** INC **
12753 {0x6c518b40, cc_t0_sub_shade_mul_shadea_add_shade},
12754 // Ring, pokemon stadium 2
12755 // (t0-0)*env_a+prim, (1-0)*cmb+0
12756 {0x6cf1e0f6, cc_t0_mul_enva_add_prim},
12757 // Jet Force
12758 // (noise-0)*env_a+prim
12759 {0x6cf76cf7, cc_prim},
12760 // snowhead temple, zelda 2. Added by Gonetz
12761 // (t1-t0)*primlod+prim, (cmb-0)*shade+shade
12762 {0x6e1284f0, cc__t1_sub_t0_mul_primlod_add_prim__mul_shade_add_shade},
12763 // zelda 2. Added by Gonetz
12764 // (t1-t0)*primlod+prim, (cmb-0)*shade+0 ** INC **
12765 {0x6e12e4f0, cc__t1_sub_t0_mul_primlod_add_prim__mul_shade},
12766 // mini games quiz monitor backround, Pokemon Stadium 2
12767 // (noise-t0)*primlod+prim, (prim-env)*cmb+env ** INC **
12768 {0x6e17a053, cc_prim_sub_env_mul__one_sub_t0_mul_primlod_add_prim__add_env},
12769 // Morning Sun attack, pokemon stadium 2
12770 // (t0-prim)*primlod+prim, (prim-env)*0+cmb
12771 {0x6e311f53, cc_t0_sub_prim_mul_primlod_add_prim},
12772 // sky, daikatana. Added by Gonetz
12773 // (t0-prim)*primlod+prim, (cmb-0)*shade+0
12774 {0x6e31e4f0, cc_t0_mul_shade},
12775 // ball's track, NFL Blitz. Added by Gonetz
12776 // (t0-0)*primlod+prim
12777 {0x6ef16ef1, cc_t0_mul_primlod_add_prim},
12778 // Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12779 // (t0-0)*primlod+prim, (cmb-env)*cmb_a+env ** INC **
12780 {0x6ef1a750, cc_t0_mul_primlod_add_prim},
12781 // mini games quiz monitor backround, Pokemon Stadium 2
12782 // (noise-0)*primlod+prim, (env-cmb)*cmb_a+cmb ** INC **
12783 // use cmb_a which is ac_t0_mul_t1
12784 {0x6ef70705, cc_env_sub_prim_mul__t0a_mul_t1a__add_prim},
12785 // rope, CBFD
12786 // (t0-env)*k5+prim
12787 {0x6f516f51, cc_t0_sub_env_mul_k5_add_prim},
12788 // super bowling
12789 // (0-0)*k5+prim
12790 {0x6fff6fff, cc_prim},
12791 // intro, Aidyn Chronicles. Added by Gonetz
12792 // (0-0)*0+prim, (0-0)*0+prim
12793 {0x79fb7788, cc_prim},
12794 // Encore attack, Pokemon Stadium 2
12795 // (t0-0)*0+prim, (cmb-0)*shade+0
12796 {0x7ff1e4f0, cc_prim_mul_shade},
12797 // Menu, megaman
12798 // (1-0)*0+prim
12799 {0x7ff67ff6, cc_prim},
12800 // sky, PGA European Tour
12801 // (0-0)*0+prim, (env-0)*t0+cmb
12802 {0x7fff01f5, cc_t1_mul_env_add_prim},
12803 // WWF No Mercy?
12804 // ((0-0)*0+prim, (env-cmb)*shade+cmb
12805 {0x7fff0405, cc_env_sub_prim_mul_shade_add_prim},
12806 // sky, Spiderman. Added by Gonetz
12807 // (0-0)*0+prim, (t1-0)*shade+cmb
12808 {0x7fff04f2, cc_t1_mul_shade_add_prim},
12809 // ball's shadow, ISS 2k. Added by Gonetz
12810 // (0-0)*0+prim, (1-cmb)*env+cmb
12811 {0x7fff0506, cc_one_sub_prim_mul_env_add_prim},
12812 // Necklace, quest64
12813 // (0-0)*0+prim, (1-0)*env+cmb
12814 {0x7fff05f6, cc_prim_add_env},
12815 // Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
12816 // (0-0)*0+prim, (1-cmb)*cmba+cmb ** INC **
12817 {0x7fff0706, cc_prim},
12818 // Dobutsu no Mori. Added by Gonetz
12819 //(k5-k5)*0+prim, (cmb-0)*0+cmb
12820 {0x7fff1ff0, cc_prim},
12821 // Intro background, starfox
12822 //z (k5-k5)*0+prim
12823 {0x7fff7fff, cc_prim},
12824 // train smoke, Dobutsu No Mori. Added by Gonetz
12825 //(0-0)*0+prim, (shade-0)*cmb+0
12826 {0x7fffe0f4, cc_prim_mul_shade},
12827 // Donald Duck intro. Added by Gonetz
12828 //(0-0)*0+prim, (cmb-0)*prim+0
12829 {0x7fffe3f0, cc_prim_mul_prim},
12830 // Ms. Pac-Man intro. Added by Gonetz
12831 //(0-0)*0+prim, (cmb-0)*shade+0
12832 {0x7fffe4f0, cc_prim_mul_shade},
12833 // zelda 2. Added by Gonetz
12834 //(t1-t0)*t0+shade, (cmb-0)*shade+0
12835 {0x8112e4f0, cc__t1_sub_t0_mul_t0_add_shade__mul_shade},
12836 // branches, Beetle Adventure Racing
12837 //(t0-shade)*t0+shade, (t0-cmb)*prim+cmb **INC**
12838 {0x81410301, cc_t0_mul_prim},
12839 // Namco logo, Famista 64
12840 //(prim-shade)*t0+shade, (env-cmb)*t0+cmb **INC**
12841 {0x81430105, cc_prim_sub_shade_mul_t0_add_shade},
12842 // pikachu, hey you pikachu
12843 //(prim-shade)*t0+shade, (env-cmb)*enva+cmb **INC**
12844 {0x81430c05, cc_prim_sub_shade_mul_t0_add_shade},
12845 // Mario's head, mario //Added by Gonetz
12846 //(prim-shade)*t0+shade
12847 {0x81438143, cc_prim_sub_shade_mul_t0_add_shade},
12848 // Iguana background, turok
12849 // (env-shade)*t0+shade
12850 {0x81458145, cc_env_sub_shade_mul_t0_add_shade},
12851 //attack, Pokemon Stadium 2
12852 // (env-shade)*t0+shade, (cmb-0)*prim+0
12853 {0x8145e3f0, cc__env_sub_shade_mul_t0_add_shade__mul_prim},
12854 // Bubbles in Jabu-Jabu's belly, zelda
12855 // (1-shade)*t0+shade
12856 {0x81468146, cc_one_sub_shade_mul_t0_add_shade},
12857 // saffron city, Pokemon Stadium 2
12858 // (1-shade)*t0+shade, (cmb-0)*prim+0
12859 {0x8146e3f0, cc__one_sub_shade_mul_t0_add_shade__mul_prim},
12860 // duck dodgers intro. Added by Gonetz
12861 // (1-shade)*t0+shade, (cmb-0)*shade+0
12862 {0x8146e4f0, cc__one_sub_shade_mul_t0_add_shade__mul_shade},
12863 // saffron city, Pokemon Stadium 2
12864 // (1-shade)*t0+shade, (cmb-0)*prima+0
12865 {0x8146eaf0, cc__one_sub_shade_mul_t0_add_shade__mul_env},
12866 // intro, Madden Footbal
12867 // (1-env)*t0+shade
12868 {0x81568156, cc_one_sub_env_mul_t0_add_shade},
12869 // sky in doom. Added by Gonetz
12870 // (prim-0)*t0+shade, (cmb-0)*primlod+env **INC**
12871 {0x81f3aef0, cc_t0_mul_prim_add_shade},
12872 // commercial? in IIS98. Added by Gonetz
12873 // (1-0)*t0+shade
12874 {0x81f681f6, cc_t0_add_shade},
12875 //attack, Pokemon Stadium 2
12876 //(t0-prim)*t1+shade
12877 {0x82318231, cc_t0_sub_prim_mul_t1_add_shade},
12878 //beetle adventure racing. Added by Gonetz
12879 //(prim-shade)*t1+shade, (cmb-0)*t1+0 **INC**
12880 {0x8243e2f0, cc_prim_sub_shade_mul_t1_add_shade},
12881 //Arena, Pokemon Stadium 2
12882 //(t0-0)*t1+shade
12883 {0x82f182f1, cc__t0_mul_t1__add_shade},
12884 //Arena, Pokemon Stadium 2
12885 //(t0-0)*t1+shade, (cmb-0)*prim+0
12886 {0x82f1e3f0, cc__t0_mul_t1__mul_prim_add_prim_mul_shade},
12887 // Scorpion fire breath, MK4 [Jeremy]. Added by Gonetz
12888 // (t0-shade)*prim+shade
12889 {0x83418341, cc_t0_mul_prim_add_one_sub_prim_mul_shade},
12890 // Menu background, wwf no mercy
12891 // (env-shade)*prim+shade
12892 {0x83458345, cc_prim_mul_env_add_one_sub_prim_mul_shade},
12893 // Pokemon selection window background, pokemon stadium 2
12894 // (noise-shade)*prim+shade
12895 {0x83478347, cc_shade},
12896 // crown of king of ikana, zelda 2. Added by Gonetz
12897 // (t0-env)*prim+shade
12898 {0x83518351, cc_t0_sub_env_mul_prim_add_shade},
12899 // crown of king of ikana, zelda 2. Added by Gonetz
12900 // (t0-env)*prim+shade, (cmb-0)*cmb+0 ** INC **
12901 {0x8351e0f0, cc_t0_sub_env_mul_prim_add_shade},
12902 // salesman's shirt in the bomb shop in town, zelda 2 [Ogy]. Added by Gonetz
12903 // (t0-env)*prim+shade, (cmb-0)*shade+0 ** INC **
12904 {0x8351e4f0, cc_t0_mul_prim_mul_shade},
12905 // intro, Madden Footbal
12906 // (1-env)*prim+shade
12907 {0x83568356, cc_one_sub_env_mul_prim_add_shade},
12908 // Buss hunter 64. Added by Gonetz
12909 // (t0-0)*prim+shade
12910 {0x83f183f1, cc_t0_mul_prim_add_shade},
12911 // huge water lilies, zelda 2 [Ogy]. Added by Gonetz
12912 // (t0-0)*prim+shade, (cmb-env)*shade+0 ** INC **
12913 {0x83f1e450, cc__t0_mul_prim_add_shade__sub_env_mul_shade},
12914 // cynnabar gym fire shield, pokemon stadium 2
12915 // (t0-0)*prim+shade, (cmb-0)*env+0 ** INC **
12916 {0x83f1e5f0, cc__t0_mul_prim_add_shade__mul_env},
12917 // Objects in arena, pokemon stadium 2
12918 // (t1-0)*prim+shade, (cmb-0)*prim_a+0 - not going to bother with prim_a since it is FF
12919 {0x83f2eaf0, cc_t1_mul_prim_add_shade},
12920 // Pokemon Stadium 2. Added by Gonetz
12921 // (t0-prim)*shade+shade ** INC **
12922 {0x84318431, cc_t0_mul_shade},
12923 // big N, Pokemon Stadium 2. Added by Gonetz
12924 // (1-prim)*shade+shade ** INC **
12925 {0x84368436, cc_one_sub_prim_mul_shade_add_shade},
12926 //Arena, Pokemon Stadium 2
12927 //(t0-env)*shade+shade
12928 {0x84518451, cc_t0_sub_prim_mul_shade_add_shade},
12929 //Arena, Pokemon Stadium 2
12930 //(t0-env)*shade+shade, (cmb-0)*prim+0
12931 {0x8451e3f0, cc_t0_sub_env_mul_prim_mul_shade_add_prim_mul_shade},
12932 // arena, PokemonStadium2, [Raziel64]
12933 // (t0-0)*shade+shade, (cmb-0)*prim+0
12934 {0x84f1e3f0, cc_t0_mul_prim_mul_shade_add_prim_mul_shade},
12935 // Spiderman. Added by Gonetz
12936 // (1-0)*shade+shade
12937 {0x84f684f6, cc_shade_add_shade},
12938 // the "gekko" ( a monster in a room above the 3rd room of woodfall temple }, zelda 2 [Ogy]. Added by Gonetz
12939 // (t0-prim)*env+shade ** INC **
12940 {0x85318531, cc_t0_sub_prim_mul_env_add_shade},
12941 // flower, zelda 2. Added by Gonetz
12942 // (t0-prim)*env+shade, (cmb-0)*shade+0 ** INC **
12943 {0x8531e4f0, cc_t0_sub_prim_mul_env_add_shade},
12944 // Robotron 64, [scorpiove]
12945 // (env-shade)*env+shade ** INC **
12946 {0x85458545, cc_one_sub_env_mul_shade_add_env},
12947 // Enemy dying, quest64
12948 // (1-shade)*env+shade **changed by Gonetz
12949 {0x85468546, cc_one_sub_shade_mul_env_add_shade},
12950 // Arena, Pokemon Stadium
12951 // (t0-0)*env+shade, (cmb-0)*prim+0
12952 {0x85f1e3f0, cc__t0_mul_prim_mul_env__add__prim_mul_shade},
12953 // Clouds, Pokemon Stadium
12954 // (t1-0)*env+shade, (cmb-0)*prim+0
12955 {0x85f2e3f0, cc__t1_mul_prim_mul_env__add__prim_mul_shade},
12956 // Sky, Beetle Adventure Racing ** INC **
12957 //(t0-shade)*t0_a+shade, (env-cmb)*enva+cmb
12958 {0x88410c05, cc_t0_sub_shade_mul_t0a_add_shade},
12959 // Mario's eyes, mario
12960 //z (t0-shade)*t0_a+shade
12961 {0x88418841, cc_t0_sub_shade_mul_t0a_add_shade},
12962 //beetle adventure racing. Added by Gonetz
12963 // (prim-shade)*t0_a+shade, (t1-0)*cmb+0 **INC**
12964 {0x8843e0f2, cc_prim_sub_shade_mul__t0a_mul_t1__add_shade},
12965 // blast corps [Ogy]
12966 // (prim-shade)*t1_a+shade
12967 {0x89438943, cc_prim_sub_shade_mul_t1a_add_shade},
12968 //broken wall, beetle adventure racing. Added by Gonetz
12969 // (t0-shade)*prima+shade, (1-0)*0+cmb
12970 {0x8a411ff6, cc_t0_sub_shade_mul_prima_add_shade},
12971 // menu, battle phoenix 64. Added by Gonetz
12972 // (t0-shade)*prima+shade
12973 {0x8a418a41, cc_t0_add_shade},
12974 // intro, castlevania 2. Added by Gonetz
12975 // (prim-shade)*prim_a+shade
12976 {0x8a438a43, cc_prim_sub_shade_mul_prima_add_shade},
12977 // Pilot wings
12978 // (t0-shade)*shade_a+shade, (cmb-0)*shade+0
12979 {0x8b41e4f0, cc__shade_inter_t0_using_shadea__mul_shade},
12980 // ?
12981 // (1-shade)*shade_a+shade
12982 {0x8b468b46, cc_one_sub_shade_mul_shadea_add_shade},
12983 // Pilot wings, sky in congratulations
12984 // (t0-0)*shade_a+shade,
12985 {0x8bf18bf1, cc_t0_mul_shadea_add_shade},
12986 // arena, Pokemon Stadium. Added by Gonetz
12987 // (t0-t1)*env_a+shade, (cmb-env)*prim+0 ** INC **
12988 {0x8c21e350, cc__t0_sub_t1_mul_enva_add_shade__sub_env_mul_prim},
12989 //diddy kong racing background fill. Added by Gonetz ** Modified by Dave2001
12990 // (env-shade)*env_a+shade, (cmb-0)*prim+0
12991 {0x8c458c45, cc_shade}, // note: previous combiner used other_alpha; doesn't work
12992 //diddy kong racing. Added by Gonetz
12993 // (env-shade)*env_a+shade, (cmb-0)*prim+0 ** INC **
12994 {0x8c45e3f0, cc_prim_mul_shade},
12995 // sky, Pokemon Stadium, [Raziel64]
12996 // (t0-0)*env_a+shade, (cmb-env)*prim+0 ** INC **
12997 {0x8cf1e350, cc_t0_mul_prim_add_shade_sub_env_mul_prim},
12998 // zelda 2 [Ogy]. Added by Gonetz
12999 // (t0-prim)*primlod+shade, (prim-env)*cmb+env ** INC **
13000 {0x8e31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_shade__add_env},
13001 // fallen leaves, Dobutsu no Mori. Added by Gonetz
13002 // (t0-shade)*primlod+shade, (prim-env)*cmb+env ** INC **
13003 {0x8e41a053, cc_prim_sub_env_mul__t0_sub_shade_mul_primlod_add_shade__add_env},
13004 // the icicle above the part just before the entrance to the mountain village, zelda 2 [Ogy]. Added by Gonetz
13005 // (t0-prim)*0+shade, (prim-env)*cmb+env ** INC ** ?
13006 {0x9f31a053, cc_prim_sub_env_mul_shade_add_env},
13007 // background on level 3-1, kirby 64 [Raziel64]. Added by Gonetz
13008 // (0-env)*0+shade
13009 {0x9f5f9f5f, cc_shade},
13010 // Spotlight, smash bros
13011 // (1-0)*0+shade
13012 {0x9ff69ff6, cc_shade},
13013 // water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13014 // (0-0)*0+shade, (cmb-cmb)*cmb+cmb
13015 {0x9fff0000, cc_shade},
13016 // menu, Dr.Mario. Added by Gonetz
13017 // (0-0)*0+shade, (prim-cmb)*env+cmb
13018 {0x9fff0503, cc_prim_sub_shade_mul_env_add_shade},
13019 // pikachu, hey you pikachu. Added by Gonetz
13020 // (0-0)*0+shade, (env-cmb)*enva+cmb
13021 {0x9fff0c05, cc_env_sub_shade_mul_enva_add_shade},
13022 // mega shock, paper mario
13023 //(0-0)*0+shade, (env-prim)*cmb+prim
13024 {0x9fff6035, cc_env_sub_prim_mul_shade_add_prim},
13025 // Super Mario 64 logo background
13026 //z (k5-k5)*0+shade
13027 {0x9fff9fff, cc_shade},
13028 // Zelda 2 final movie. Added by Gonetz
13029 // (0-0)*0+shade, (prim-0)*cmb+0
13030 {0x9fffe0f3, cc_prim_mul_shade},
13031 // tree shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13032 // (0-0)*0+shade, (env-0)*cmb+0
13033 {0x9fffe0f5, cc_env_mul_shade},
13034 // N64 logo, Aidyn Chronicles. Added by Gonetz
13035 // (0-0)*0+shade, (cmb-0)*prim+0
13036 {0x9fffe3f0, cc_prim_mul_shade},
13037 // Hand, smash bros
13038 // (0-0)*0+shade, (cmb-0)*env+0
13039 {0x9fffe5f0, cc_env_mul_shade},
13040 // Lave piranha atack, Paper Mario
13041 // (t1-t0)*t0+env, (cmb-t1)*t0+prim ** INC **
13042 {0xa1126120, cc__t0_mul_t1__mul_env_add_prim},
13043 //Arena, Pokemon Stadium 2
13044 // (t1-prim)*t0+env, (cmb-0)*shade+0
13045 {0xa132e4f0, cc__t1_sub_prim_mul_t0_add_env__mul_shade},
13046 // Kirby64 end [Raziel64]. Added by Gonetz
13047 // (prim-shade)*t0+env
13048 {0xa143a143, cc_prim_sub_shade_mul_t0_add_env},
13049 // Superman [scorpiove]. Added by Gonetz
13050 // (t0-env)*t0+env
13051 {0xa151a151, cc_t0_sub_env_mul_t0_add_env},
13052 // powder keg, zelda 2. Added by Gonetz
13053 // (prim-env)*t0+env, (0-0)*shade_a+cmb
13054 {0xa1530bff, cc__prim_sub_env_mul_t0_add_env__add_shadea},
13055 // pokemon attack, Pokemon Stadium 2. Added by Gonetz
13056 // (prim-env)*t0+env, (0-0)*prim_lod+cmb
13057 {0xa1530ef6, cc__prim_sub_env_mul_t0_add_env__add_primlod},
13058 //attack, Pokemon Stadium 2
13059 // (prim-env)*t0+env, (0-0)*prim_lod+cmb
13060 {0xa1530eff, cc_prim_sub_env_mul_t0_add_env},
13061 // Kotake & koume defeated, going into sky, zelda
13062 // (prim-env)*t0+env, (prim-env)*0+cmb
13063 {0xa1531f53, cc_prim_sub_env_mul_t0_add_env},
13064 // water, Dobutsu no Mori. Added by Gonetz
13065 // (prim-env)*t0+env, (cmb-0)*shade+t0
13066 {0xa15324f0, cc_t0_add_shade_mul_env},
13067 //sky, beetle adventure racing. Added by Gonetz
13068 // (prim-env)*t0+env, (cmb-shade)*t1+shade **INC** can't be done in one step
13069 {0xa1538240, cc__env_inter_prim_using_t0__sub_shade_mul_t0a_add_shade},
13070 //couple's mask, zelda2. Added by Gonetz
13071 // (prim-env)*t0+env, (prim-cmb)*shade+shade **INC** can't be done in one step
13072 {0xa1538403, cc_t0_mul_shade},
13073 // stadium, Pokemon Stadium 2. Added by Gonetz
13074 // (prim-env)*t0+env, (cmb-0)*shade+shade **INC** can't be done in one step
13075 {0xa15384f0, cc_t0_mul_shade},
13076 //clothes on girl in inn, zelda2. Added by Gonetz
13077 // (prim-env)*t0+env, (cmb-prim)*env+shade **INC** can't be done in one step
13078 {0xa1538530, cc_t0_mul_env_add_shade},
13079 // Getting light arrows for the first time, zelda
13080 // (prim-env)*t0+env, (prim-env)*cmb+env ** INC **
13081 {0xa153a053, cc_prim_sub_env_mul_t0_add_env},
13082 // Fire, starfox
13083 // (prim-env)*t0+env
13084 {0xa153a153, cc_prim_sub_env_mul_t0_add_env},
13085 // a spell, Fushigi no Dungeon: Fuurai no Shiren 2
13086 // (prim-env)*t0+env, (cmb-env)*enva+env
13087 {0xa153ac50, cc_prim_sub_env_mul__t0_mul_enva__add_env},
13088 // wizrobe's attack, zelda 2. Added by Gonetz.
13089 // (prim-env)*t0+env, (cmb-0)*cmb+0
13090 {0xa153e0f0, cc_prim_sub_env_mul_t0_add_env},
13091 // dress, zelda 2. Added by Gonetz.
13092 // also for Great Farie's hair - changed to use texture mod by Dave2001.
13093 // (prim-env)*t0+env, (shade-0)*cmb+0
13094 {0xa153e0f4, cc__env_inter_prim_using_t0__mul_shade},
13095 // Start menu, paper mario
13096 // (prim-env)*t0+env, (cmb-0)*t0+0
13097 {0xa153e1f0, cc_prim_sub_env_mul_t0_add_env},
13098 // {0xa153e0f4, cc_prim_sub_env_mul_t0_add_env},
13099 // Jellyfish tentacles in Jabu-Jabu's belly, zelda
13100 // (prim-env)*t0+env, (cmb-0)*prim+0
13101 {0xa153e3f0, cc__env_inter_prim_using_t0__mul_prim},
13102 // Dust, zelda
13103 //z (prim-env)*t0+env, (cmb-0)*shade+0 ** INC **
13104 {0xa153e4f0, cc__env_inter_prim_using_t0__mul_shade},
13105 //{0xa153e4f0, cc_prim_sub_env_mul_t0_add_env},
13106 // roof, Kirby 64. Added by Gonetz
13107 // (prim-env)*t0+env, (cmb-0)*env+0 ** INC **
13108 {0xa153e5f0, cc_prim_sub_env_mul_t0_add_env},
13109 // hall of fame, Pokemon Stadium
13110 // (prim-env)*t0+env, (cmb-0)*primlod+0
13111 {0xa153eef0, cc__prim_sub_env_mul_t0_add_env__mul_primlod},
13112 // Something weird in intro, monster truck madness
13113 // (prim-env)*t0+env, (cmb-0)*k5+0
13114 {0xa153eff0, cc__prim_sub_env_mul_t0_add_env__mul_k5},
13115 // clothes, kirby 64. Added by Gonetz
13116 // (shade-env)*t0+env
13117 {0xa154a154, cc_shade_sub_env_mul_t0_add_env},
13118 // field, Derby Stallion
13119 // (shade-env)*t0+env, (cmb-0)*prim+0 ** INC **
13120 {0xa154e3f0, cc_shade_sub_env_mul_t0_mul_prim_add_prim_mul_env},
13121 // background, level 3-5, kirby 64, [Raziel64]
13122 // (shade-env)*t0+env, (cmb-0)*shade+0 ** INC **
13123 {0xa154e4f0, cc_shade_sub_env_mul_t0_add_env},
13124 // pokemon attack, Pokemon Stadium 2. Added by Gonetz
13125 // (one-env)*t0+env
13126 {0xa156a156, cc_one_sub_env_mul_t0_add_env},
13127 // Arena, Pokemon Stadium 2.
13128 // (one-env)*t0+env, (cmb-0)*shade+0
13129 {0xa156e4f0, cc__env_inter_one_using_t0__mul_shade},
13130 //Arena, Pokemon Stadium 2
13131 // (t1-0)*t0+env, (cmb-0)*cmb+0 ** INC **
13132 {0xa1f2e0f0, cc__t0_mul_t1__add_env_mul__t0_mul_t1__add_env},
13133 // quake 2 intro
13134 // (prim-0)*t0+env, (prim-0)*primlod+cmb ** INC **
13135 {0xa1f30ef3, cc_t0_mul_prim_add_env},
13136 // Kotake or koume's hair, zelda
13137 // (prim-0)*t0+env
13138 {0xa1f3a1f3, cc_t0_mul_prim_add_env},
13139 // track, ridge racer. Added by Gonetz
13140 // (t0-env)*t1+env, (cmb-0)*shade+0 ** INC **
13141 {0xa251e4f0, cc__t0_mul_t1__mul_shade},
13142 // lava, beetle adventure racing
13143 // (t0-env)*t1+env, (cmb-0)*enva+0 ** INC **
13144 {0xa251ecf0, cc__t0_mul_t1__mul_enva},
13145 // Ded Moroz, Paper Mario
13146 // (prim-env)*t1+env, (1-cmb)*t1+cmb ** INC **
13147 {0xa2530206, cc_prim_sub_env_mul_t1_add_env},
13148 // text, monster truck madness
13149 // (prim-env)*t1+env
13150 {0xa253a253, cc_prim_sub_env_mul_t1_add_env},
13151 // car position, Top Gear Rally. Added by Gonetz
13152 // (prim-env)*t1+env, (cmb-t0)*t1+0 ** INC **
13153 {0xa253e210, cc_prim_sub_env_mul_t1_add_env_mul_t0},
13154 // text, Top Gear Rally. Added by Gonetz
13155 // (prim-env)*t1+env, (cmb-0)*t1+0 ** INC **
13156 {0xa253e2f0, cc_prim_sub_env_mul_t1_add_env_mul_t0},
13157 // {0xa253e2f0, cc_prim_sub_env_mul_t1_add_env},
13158 // a pole in the cut-scene that appears after you receive odolwa's mask, zelda 2 [Ogy]. Added by Gonetz
13159 // (prim-env)*t1+env, (cmb-0)*shade+0 ** INC **
13160 {0xa253e4f0, cc_t1_mul_prim_mul_shade},
13161 // Quake 2 intro. Added by Gonetz
13162 // (t0-0)*t1+env, (t0-0)*primlod+cmb ** INC **
13163 {0xa2f10ef1, cc__t0_mul_t1__add_env},
13164 // silver cave, pokemon stadium 2
13165 // (t0-0)*t1+env, (cmb-prim)*shadea+prim
13166 {0xa2f16b30, cc_prim_inter__t0_mul_t1_add_env__using_shadea},
13167 // silver cave, pokemon stadium 2
13168 // (t0-0)*t1+env, (cmb-0)*shadea+shade
13169 {0xa2f18bf0, cc__t0_mul_t1_add_env__mul_shadea_add_shade},
13170 // Quake64. Added by Gonetz
13171 // (t0-0)*t1+env
13172 {0xa2f1a2f1, cc__t0_mul_t1__add_env},
13173 // Quake II. Added by Gonetz ** INC **
13174 // (t0-0)*t1+env, (cmb-0)*prim+env
13175 {0xa2f1a3f0, cc__t0_mul_t1__mul_prim_add_env},
13176 // Dr Mario [Ogy]. Added by Gonetz
13177 // (t0-env)*prim+env
13178 // {0xa351a351, cc_t0_mul_prim_add_env},
13179 {0xa351a351, cc_t0_sub_env_mul_prim_add_env},
13180 // menu, Dr.Mario. Added by Gonetz
13181 // (prim-env)*prim+env
13182 {0xa353a353, cc_prim_sub_env_mul_prim_add_env},
13183 // Razor sword, zelda 2. Added by Gonetz
13184 // (shade-env)*prim+env, (cmb-0)*shade+0 ** INC **
13185 {0xa354e4f0, cc_shade_sub_env_mul_prim_add_env},
13186 // bomberman 64-2 intro. Added by Gonetz
13187 // (1-env)*prim+env
13188 {0xa356a356, cc_one_sub_env_mul_prim_add_env},
13189 // thing that escapes from the well, zelda
13190 // (noise-env)*prim+env
13191 {0xa357a357, cc_prim_add_env},
13192 // Bongo Bongo, zelda
13193 // (noise-env)*prim+env, (cmb-0)*shade+0
13194 {0xa357e4f0, cc_env_mul_shade},
13195 // paper mario. Added by Gonetz
13196 // (t0-0)*prim+env
13197 {0xa3f1a3f1, cc_t0_mul_prim_add_env},
13198 // paper mario. Added by Gonetz
13199 // (t0-0)*prim+env, (t0-env)*prim+0
13200 {0xa3f1e351, cc_t0_mul_prim_add_env},
13201 // paper mario. Added by Gonetz
13202 // (t0-0)*prim+env, (t0-0)*prim+0
13203 {0xa3f1e3f1, cc_t0_mul_prim},
13204 // mahogany town statue, Pokemon Stadium 2
13205 // (t0-0)*prim+env, (cmb-0)*shade+0
13206 {0xa3f1e4f0, cc__t0_mul_prim_add_env__mul_shade},
13207 // squirt, paper mario. Added by Gonetz
13208 // (t1-0)*prim+env, (1-cmb)*t1+cmb
13209 {0xa3f20206, cc_t1_mul_prim_add_env},
13210 // paper mario. Added by Gonetz
13211 // (shade-0)*prim+env
13212 {0xa3f4a3f4, cc_prim_mul_shade_add_env},
13213 // Sharpen attack, pokemon stadium 2
13214 // (shade-0)*prim+env, (cmb-0)*shade+0
13215 {0xa3f4e4f0, cc__prim_mul_shade_add_env__mul_shade},
13216 // Doraemon 2. Added by Gonetz
13217 // (1-0)*prim+env
13218 {0xa3f6a3f6, cc_prim_add_env},
13219 // Pokemon Stadium 2, [Jeremy]. Added by Gonetz
13220 // (noise-0)*prim+env ** INC ** ?
13221 {0xa3f7a3f7, cc_prim_add_env},
13222 // monsters, Pokemon Stadium. Added by Gonetz
13223 // (t0-t1)*shade+env, (cmb-0)*prim+0 ** INC **
13224 {0xa421e3f0, cc__t0_sub_t1__mul_prim_mul_shade_add_prim_mul_env},
13225 // background, pokemon stadium 2
13226 // (t0-prim)*shade+env
13227 {0xa431a431, cc_t0_sub_prim_mul_shade_add_env},
13228 // Arena, pokemon stadium 2
13229 // (t0-prim)*shade+env, (cmb-0)*shade+0
13230 {0xa431e4f0, cc__t0_sub_prim_mul_shade_add_env__mul_shade},
13231 // Trophy, pokemon stadium 2
13232 // (t0-prim)*shade+env, (cmb-0)*shade_a+0
13233 {0xa431ebf0, cc__t0_sub_prim_mul_shade_add_env__mul_shadea},
13234 // Buildings, pokemon stadium 2
13235 // (t1-prim)*shade+env
13236 {0xa432a432, cc_t1_sub_prim_mul_shade_add_env},
13237 // bomberman 64 [Ogy]
13238 // (t0-env)*shade+env
13239 {0xa451a451, cc_t0_mul_shade_add_env},
13240 // kirby drill, kirby 64. Added by Gonetz
13241 // (prim-env)*shade+env
13242 {0xa453a453, cc_prim_sub_env_mul_shade_add_env},
13243 // ball, ISS98 intro. Added by Gonetz
13244 // (t0-0)*shade+env
13245 {0xa4f1a4f1, cc_t0_mul_shade_add_env},
13246 // waterfall, Dobutsu_no_Mori
13247 // (prim-0)*shade+env, (t0-0)*primlod+cmb
13248 {0xa4f30ef1, cc_t0_mul_primlod_add_prim_mul_shade_add_env},
13249 // waterfall, Dobutsu_no_Mori
13250 // (prim-0)*shade+env, (t1-0)*primlod+cmb
13251 {0xa4f30ef2, cc_t1_mul_primlod_add_prim_mul_shade_add_env},
13252 // score, ISS98 intro. Added by Gonetz
13253 // (prim-0)*shade+env
13254 {0xa4f3a4f3, cc_prim_mul_shade_add_env},
13255 // magic fist, Rayman2. Added by Gonetz
13256 // (env-0)*shade+env
13257 {0xa4f5a4f5, cc_env_mul_shade_add_env},
13258 // gunfire, Quake64. Added by Gonetz
13259 // (1-0)*shade+env
13260 {0xa4f6a4f6, cc_env_add_shade},
13261 // flame, Paper Mario. Added by Gonetz
13262 // (t0-center)*scale+env, (0-prim)*cmb+env
13263 {0xa661a03f, cc_env_sub__t0_mul_scale_add_env__mul_prim},
13264 // N64 BIOS
13265 // (t0-env)*t0_a+env, cmb*shade
13266 {0xa851e0f4, cc__env_inter_t0_using_t0a__mul_shade},
13267 // pink car, f-zero x
13268 // (t0-env)*t0_a+env, cmb*shade
13269 {0xa851e4f0, cc__env_inter_t0_using_t0a__mul_shade},
13270 // PokemonStadium1, [Raziel64]
13271 // (prim-env)*t0_a+env, (cmb-cmb)*cmb+cmb
13272 {0xa8530000, cc_prim_sub_env_mul_t0a_add_env},
13273 // N64 logo, Ogre Battle
13274 // (prim-env)*t0_a+env
13275 {0xa853a853, cc_prim_sub_env_mul_t0a_add_env},
13276 // Mud Slap, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
13277 // (prim-env)*t0_a+env, (cmb-0)*cmb+0
13278 {0xa853e0f0, cc_prim_sub_env_mul_t0a_add_env},
13279 // Tree background, mace
13280 // (prim-env)*t0_a+env, (cmb-0)*t0+0
13281 {0xa853e1f0, cc__env_inter_prim_using_t0a__mul_t0},
13282 //attack, Pokemon Stadium 2
13283 // (prim-env)*t0_a+env, (cmb-0)*prim+0
13284 {0xa853e3f0, cc__env_inter_prim_using_t0a__mul_prim},
13285 // logo, Deadly Arts. Added by Gonetz
13286 // (prim-env)*t1_a+env
13287 {0xa953a953, cc_prim_sub_env_mul_t1a_add_env},
13288 // MarioGolf text "Birdie Put"
13289 // (t0-env)*prim_a+env
13290 {0xaa51aa51, cc_t0_sub_env_mul_prima_add_env},
13291 // N64 BIOS
13292 // (t0-env)*prim_a+env, (shade-0)*cmb+0
13293 {0xaa51e0f4, cc__env_inter_t0_using_prima__mul_shade},
13294 // N64 BIOS
13295 // (prim-env)*prima+env, (shade-0)*cmb+0
13296 {0xaa53e0f4, cc__env_inter_prim_using_prima__mul_shade},
13297 // Girl, PD intro. Added by Gonetz
13298 // (t0-env)*shade_alpha+env, (cmb-0)*shade+0 ** INC **
13299 {0xab51e4f0, cc__env_inter_t0_using_shadea__mul_shade},
13300 // Some gannon spell, zelda
13301 // (prim-env)*shade_alpha+env
13302 {0xab53ab53, cc_prim_sub_env_mul_shadea_add_env},
13303 //Arena, Pokemon Stadium 2
13304 // (t0-0)*shade_alpha+env, (cmb-0)*shade+prim
13305 {0xabf164f0, cc__t0_mul_shadea_add_env__mul_shade_add_prim},
13306 // Boxes, Taz express. Added by Gonetz
13307 // (t0-env)*env_a+env
13308 {0xac51ac51, cc_t0_sub_env_mul_enva_add_env},
13309 // paper mario. Added by Gonetz
13310 // (t0-env)*env_a+env, (cmb-0)*shade+0 **INC**
13311 {0xac51e4f0, cc_t0_mul_env_mul_shade},
13312 // goal, Monster Truck Madness 64
13313 // (noise-0)*env_a+env, (cmb-0)*t1+0 **INC**
13314 {0xacf7e2f0, cc_t1_mul_env},
13315 // sword on forge, zelda 2. Added by Gonetz
13316 // (t1-t1)*lodf+env, (t1-t0)*cmb+prim
13317 {0xae226012, cc__t1_sub_t0__mul_env_add_prim},
13318 // menu background, Pokemon Stadium 2, [Raziel64]
13319 // (t0-prim)*lodf+env
13320 {0xae31ae31, cc_t0_sub_prim_mul_primlod_add_env},
13321 // odd mushroom, zelda oot. Added by Gonetz
13322 // (t0-shade)*lodf+env, (prim-env)*cmb+env ** INC **
13323 {0xae41a053, cc__env_inter_prim_using__t0_sub_shade_mul_primlod_add_env},
13324 // {0xae41a053, cc_prim_sub_env_mul__t0_mul_shade__add_env},
13325 // Morning Sun, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
13326 // (t0-env)*lodf+env, (cmb-0)*prim+0
13327 {0xae51e3f0, cc__env_inter_t0_using_primlod__mul_prim},
13328 //Spacestation Silicon Valley intro. Added by Gonetz
13329 // (prim-env)*lodf+env
13330 {0xae53ae53, cc_env_inter_prim_using_primlod},
13331 // Doom, intro. Added by Gonetz
13332 // (t0-0)*lodf+env, (t0-0)*lodf+env
13333 {0xaef1aef1, cc_t0_add_env},
13334 // Dobutsu no Mori. Added by Gonetz
13335 // (prim-0)*lodf+env
13336 {0xaef3aef3, cc_prim_add_env},
13337 // forest behind window, Dobutsu no Mori. Added by Gonetz
13338 // (prim-0)*prim_lod+env, (t1-0)*cmb+0
13339 {0xaef3e0f2, cc_t0_mul__prim_mul_primlod_add_env },
13340 // tony hawks 2 menu
13341 // (t0-rnv)*k5+env, (cmb-t1)*t1_a+t1 ** INC ** (correct combiner does not work because of black t1)
13342 {0xaf514920, cc_t0_sub_env_mul_k5_add_env},
13343 // intro, Mission Impossible. Added by Gonetz
13344 // (k5-k5)*0+env, (0-0)*scale+env
13345 {0xbfffa6ff, cc_env},
13346 // Something blocking the screen, waverace
13347 //z (k5-k5)*0+env
13348 {0xbfffbfff, cc_env},
13349 // Derby Stallion . Added by Gonetz
13350 // (0-0)*0+env, (cmb-0)*prim+0
13351 {0xbfffe3f0, cc_prim_mul_env},
13352 // zelda 2 [Ogy]. Added by Gonetz
13353 // (k5-k5)*0+env, ((cmb-0)*shade+0
13354 {0xbfffe4f0, cc_env_mul_shade},
13355 // flame, paper mario. Added by Gonetz
13356 // (t0-t1)*t0+1, (0-prim)*cmb+env **INC** weird
13357 {0xc121a03f, cc__t0_inter_t1_using_half__mul_prim_add_env},
13358 // tube near big monster on level 5, Kirby64 [Raziel64]
13359 // (prim-env)*t0+1, (cmb-0)*shade+0 ** INC **
13360 {0xc153e4f0, cc_prim_sub_env_mul_t0_mul_shade},
13361 // paper mario. Added by Gonetz
13362 // (0-env)*t0+1, (prim-cmb)*t0+prim **INC**
13363 {0xc15f6103, cc_env_sub_prim_mul_t0_add_prim},
13364 // HAL, smash bros
13365 // (0-0)*0+1
13366 {0xdfffdfff, cc_one},
13367 // arena, Pokemon Stadium 1, [Raziel64]
13368 // (0-0)*0+1, (cmb-0)*prim+0
13369 {0xdfffe3f0, cc_prim},
13370 // skis, Spacestation Silicon Valley. Added by Gonetz
13371 // (shade-0)*cmb+0, (t1-t0)*primlod+t0
13372 {0xe0f42d12, cc_t0_inter_t1_using_primlod},
13373 // paper mario. Added by Gonetz
13374 // (1-t1)*t0+0, (env-prim)*cmb+prim ** INC **
13375 {0xe1266035, cc_env_sub_prim_mul__t0_mul_t1__add_prim},
13376 // ground, zelda 2. Added by Gonetz.
13377 // (t1-prim)*t0+0, (cmb-0)*shade+0
13378 {0xe132e4f0, cc__t1_sub_prim_mul_t0__mul_shade},
13379 // carmagedon
13380 // (shade-prim)*t0+0
13381 {0xe134e134, cc_shade_sub_prim_mul_t0},
13382 // skeleton, castlevania 2. Added by Gonetz
13383 // (1-prim)*t0+0, (cmb-0)*shade+0
13384 {0xe136e4f0, cc_t0_mul_1mprim_mul_shade},
13385 // Starshot logo. Added by Gonetz
13386 // (shade-env)*t0+0, (1-0)*cmb+cmb
13387 {0xe15400f6, cc_shade_sub_env_mul_t0},
13388 // Kirby morfing, smash bros. Added by Gonetz
13389 // (shade-env)*t0+0
13390 {0xe154e154, cc_shade_sub_env_mul_t0},
13391 // menu, PGA euro tour. Added by Gonetz
13392 // (1-env)*t0+0
13393 {0xe156e156, cc_one_sub_env_mul_t0},
13394 // paper mario. Added by Gonetz
13395 // (t0-0)*t0+0, (1-cmb)*prim+cmb
13396 {0xe1f10306, cc_one_sub_t0_mul_prim_add_t0},
13397 // F1 World Grand Prix. Added by Gonetz
13398 // (t0-0)*t0+0, (shade-prim)*cmb+prim
13399 {0xe1f16034, cc_shade_sub_prim_mul_t0_add_prim},
13400 // paper mario. Added by Gonetz
13401 // (t0-0)*t0+0, (env-prim)*cmb+prim
13402 {0xe1f16035, cc_env_sub_prim_mul_t0_add_prim},
13403 // sparkles, F1 World Grand Prix. Added by Gonetz
13404 // (t0-0)*t0+0, (1-prim)*cmb+prim
13405 {0xe1f16036, cc_one_sub_prim_mul_t0_add_prim},
13406 // rocket team basket, Pokemon Stadium 2
13407 // (t0-0)*t0+0, (cmb-prim)*shade+shade
13408 {0xe1f18430, cc__t0_mul_t0__sub_prim_mul_shade_add_shade},
13409 // Tony Hawk's Pro Skater. Added by Gonetz
13410 // (t0-0)*t0+0, (cmb-0)*t0+0
13411 {0xe1f1e1f0, cc_t0},
13412 // something in upper left corner, mario tennis
13413 // (t0-0)*t0+0
13414 {0xe1f1e1f1, cc_t0},
13415 // zelda 2. Added by Gonetz
13416 // (t0-0)*t0+0, (cmb-0)*prim+0
13417 {0xe1f1e3f0, cc_t0_mul_prim},
13418 // zelda 2 final movie. Added by Gonetz
13419 // (t0-0)*t0+0, (cmb-0)*shade+0
13420 {0xe1f1e4f0, cc_t0_mul_shade},
13421 // paper mario. Added by Gonetz
13422 // (t0-t1)*t0+1, (env-cmb)*prima+cmb ** INC **
13423 {0xe1f20a05, cc_t1_mul_prima},
13424 // terrain, SCARS. Added by Gonetz
13425 // (t1-0)*t0+0, (env-prim)*cmb+prim
13426 {0xe1f26035, cc_env_sub_prim_mul__t0_mul_t1__add_prim},
13427 // Trees, Zelda 2
13428 // (t1-0)*t0+0, (cmb-0)*shade+prim
13429 {0xe1f264f0, cc__t0_mul_t1__mul_shade_add_prim},
13430 // terrain, SCARS. Added by Gonetz
13431 // (t1-0)*t0+0, (env-shade)*cmb+shade
13432 {0xe1f28045, cc_env_sub_shade_mul__t0_mul_t1__add_shade},
13433 // arena, Pokemon Stadium 2. Added by Gonetz
13434 // (t1-0)*t0+0, (cmb-prim)*shade+shade ** INC **
13435 {0xe1f28430, cc__t0_mul_t1__sub_prim_mul_shade_add_shade},
13436 // arena, Pokemon Stadium 2
13437 // (t1-0)*t0+0, (cmb-env)*shade+shade
13438 {0xe1f28450, cc__t0_mul_t1__sub_env_mul_shade_add_shade},
13439 // Zelda 2, [Ogy]. Added by Gonetz
13440 // (t1-0)*t0+0, (cmb-prim)*env+shade ** INC **
13441 {0xe1f28530, cc__t0_mul_t1__sub_prim_mul_env_add_shade},
13442 // pokemon attack, Pokemon Stadium 2. Added by Gonetz
13443 // (t1-0)*t0+0, (prim-env)*cmb+env
13444 {0xe1f2a053, cc_prim_sub_env_mul__t0_mul_t1__add_env},
13445 // paper mario. Added by Gonetz
13446 // (t1-0)*t0+0, (cmb-0)*prim+env
13447 {0xe1f2a3f0, cc__t0_mul_t1__mul_prim_add_env},
13448 // Sand, pokemon stadium 2
13449 // (t1-0)*t0+0, (cmb-prim)*shade+env ** INC **
13450 {0xe1f2a430, cc__t0_mul_t1__mul_shade},
13451 // grass, Mission Impossible. Added by Gonetz
13452 // (t1-0)*t0+0, (shade-0)*cmb+0
13453 {0xe1f2e0f4, cc__t0_mul_t1__mul_shade},
13454 // flag, Monako Grand Prix
13455 // (t1-0)*t0+0
13456 {0xe1f2e1f2, cc_t0_mul_t1},
13457 // lighthouse's beam, zelda 2. Added by Gonetz
13458 // (t1-0)*t0+0, (cmb-0)*prim+0
13459 {0xe1f2e3f0, cc__t0_mul_t1__mul_prim},
13460 // Bottom of wings, pilotwings
13461 // (t1-0)*t0+0, (cmb-0)*shade+0
13462 {0xe1f2e4f0, cc__t0_mul_t1__mul_shade},
13463 // zelda 2. Added by Gonetz
13464 // (t1-0)*t0+0, (cmb-0)*prima+0
13465 {0xe1f2eaf0, cc__t0_mul_t1__mul_prima},
13466 // lava, Roadsters. Added by Gonetz
13467 // (prim-0)*t0+0, (1-prim)*t0+cmb
13468 {0xe1f30136, cc_t0},
13469 // sky, Pokemon Stadium 2. Added by Gonetz
13470 // (prim-0)*t0+0, (cmb-0)*shadea+env
13471 {0xe1f3abf0, cc_t0_mul_prim_mul_shadea_add_env},
13472 // cars, Indy Racing 2000. Added by Gonetz
13473 // (prim-0)*t0+0, (shade-0)*cmb+0
13474 {0xe1f3e0f4, cc_t0_mul_prim_mul_shade},
13475 // Sign shadows, zelda
13476 //z (prim-k5)*t0+cmb_a
13477 {0xe1f3e1f3, cc_t0_mul_prim},
13478 // Table, mace
13479 // (prim-0)*t0+0, (cmb-0)*shade+0
13480 {0xe1f3e4f0, cc_t0_mul_prim_mul_shade},
13481 // Gauntlet Legends intro
13482 // (prim-0)*t0+0, (cmb-0)*prima+0
13483 {0xe1f3eaf0, cc_t0_mul_prim_mul_prima},
13484 // walls, beetle adventure racing. Added by Gonetz
13485 // (shade-0)*t0+0, (prim-0)*t0+cmb
13486 {0xe1f401f3, cc_t0_mul_shade},
13487 // cars, ridge racer. Added by Gonetz
13488 // (shade-0)*t0+0, (prim-cmb)*cmb_a+cmb **INC**
13489 {0xe1f40703, cc_t0_mul_shade},
13490 // water block, Paper Mario. Added by Gonetz
13491 // (shade-0)*t0+0, (prim-env)*cmb+env
13492 {0xe1f4a053, cc_prim_sub_env_mul__t0_mul_shade__add_env},
13493 // a lot in TWINE. Added by Gonetz
13494 // (shade-0)*t0+0, (cmb-0)*prim+env
13495 {0xe1f4a3f0, cc_t0_mul_prim_mul_shade_add_env},
13496 // Xena. Added by Gonetz
13497 // (shade-0)*t0+0, (env-0)*cmb+0
13498 {0xe1f4e0f5, cc_t0_mul_env_mul_shade},
13499 // Starshot logo. Added by Gonetz
13500 // (shade-0)*t0+0, (1-0)*cmb+0
13501 {0xe1f4e0f6, cc_t0_mul_shade},
13502 // Duck Dodgers intro. Added by Gonetz
13503 // (shade-0)*t0+0
13504 {0xe1f4e1f4, cc_t0_mul_shade},
13505 // shadow, Mission Impossible. Added by Gonetz
13506 // (shade-0)*t0+0, (cmb-0)*prim+0
13507 {0xe1f4e3f0, cc_t0_mul_prim_mul_shade},
13508 // Tony Hawk's Pro Skater 3. Added by Gonetz
13509 // (env-0)*t0+0, (t1-0)*shade+cmb ** INC **
13510 {0xe1f504f2, cc__t0_add_t1__mul_shade},
13511 // text, tonic trouble. Added by Gonetz
13512 // (env-0)*t0+0
13513 {0xe1f5e1f5, cc_t0_mul_env},
13514 // powder keg, zelda 2. Added by Gonetz
13515 // (env-0)*t0+0, (cmb-0)*shade+0
13516 {0xe1f5e4f0, cc_t0_mul_env_mul_shade},
13517 // Buss rush
13518 // (1-0)*t0+0, (0-cmb)*0+cmb
13519 {0xe1f61f0f, cc_t0},
13520 // water, Starshot. Added by Gonetz
13521 // (1-0)*t0+0, (1-0)*cmb+0
13522 {0xe1f6e0f6, cc_t0},
13523 // bomberman 64 [Ogy]
13524 // (1-0)*t0+0
13525 {0xe1f6e1f6, cc_t0},
13526 // Mermaid attack, Mystical Ninja
13527 // (noise-0)*t0+0
13528 {0xe1f7e1f7, cc_t0},
13529 // paper mario. Added by Gonetz * changed because of odd palette copy
13530 // (t0-0)*t1+0, (shade-env)*cmb+cmb **INC** ?
13531 {0xe2f10054, cc_shade_sub_env_mul__t0_mul_t1__add__t0_mul_t1},
13532 // Duck Dodgers Starring Daffy Duck text background
13533 // (t0-0)*t1+0, (shade-cmb)*prim+cmb
13534 {0xe2f10304, cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade},
13535 // water, PGA European Tour
13536 // (t0-0)*t1+0, (env-cmb)*prim+cmb
13537 {0xe2f10305, cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_env},
13538 // Grass, mario golf
13539 // (t0-0)*t1+0, (cmb-t0)*cmb_a+t0
13540 {0xe2f12710, cc_t0_mul_t1},
13541 // xg2, Added by Gonetz
13542 // (t0-0)*t1+0, (env-prim)*cmb+prim
13543 {0xe2f16035, cc_env_sub_prim_mul__t0_mul_t1__add_prim},
13544 // poo, CBFD, Added by Gonetz
13545 // (t0-0)*t1+0, (cmb-env)*shade+prim ** INC **
13546 {0xe2f16450, cc__t0_mul_t1__mul_shade_add_prim},
13547 // the champion stage, Pokemon Stadium 2
13548 // (t0-0)*t1+0, (cmb-0)*shade+prim
13549 {0xe2f164f0, cc__t0_mul_t1__mul_shade_add_prim},
13550 // sky, xg2, Added by Gonetz
13551 // (t0-0)*t1+0, (cmb-prim)*cmb_a+prim
13552 {0xe2f16730, cc__t0_mul_t1__sub_prim_mul__t0t1a__add_prim },
13553 // Sin and Punishment, [scorpiove], Added by Gonetz
13554 // (t0-0)*t1+0, (env-prim)*cmb_a+prim
13555 {0xe2f16735, cc_env_sub_prim_mul__t0t1a__add_prim},
13556 // cianwood gym walls, pokemon stadium 2
13557 // (t0-0)*t1+0, (cmb-prim)*shade+shade
13558 {0xe2f18430, cc__t0_mul_t1__sub_prim_mul_shade_add_shade},
13559 // light, Ridge Racer. Added by Gonetz
13560 // (t0-0)*t1+0, (prim-env)*cmb+env
13561 {0xe2f1a053, cc_prim_sub_env_mul__t0_mul_t1__add_env},
13562 // Waterfall, duck dodgers. Added by Gonetz
13563 // (t0-0)*t1+0, (shade-env)*cmb+env
13564 {0xe2f1a054, cc_shade_sub_env_mul__t0_mul_t1__add_env},
13565 // Arena, Pokemon Stadium 2 ** INC **
13566 // (t0-0)*t1+0, (cmb-prim)*shade+env
13567 {0xe2f1a430, cc__t0_mul_t1__mul_shade_add_env},
13568 // bikes, xg2
13569 // (t0-0)*t1+0, (shade-0)*cmb+0
13570 {0xe2f1e0f4, cc__t0_mul_t1__mul_shade},
13571 // Sky background, xg2
13572 // (t0-0)*t1+0
13573 {0xe2f1e2f1, cc_t0_mul_t1},
13574 // statistics, Banjo 2. Added by Gonetz
13575 // (t0-0)*t1+0, (cmb-0)*prim+0
13576 {0xe2f1e3f0, cc__t0_mul_t1__mul_prim},
13577 // the champion stage, Pokemon Stadium 2
13578 // (t0-0)*t1+0, (cmb-prim)*shade+0
13579 {0xe2f1e430, cc__t0_mul_t1__sub_prim_mul_shade},
13580 // Water, pilotwings
13581 // (t0-0)*t1+0, (cmb-0)*shade+0
13582 {0xe2f1e4f0, cc__t0_mul_t1__mul_shade},
13583 //beetle adventure racing. A dded by Gonetz
13584 // (t0-0)*t1+0, (cmb-0)*env+0
13585 {0xe2f1e5f0, cc__t0_mul_t1__mul_env},
13586 //fall headwaters, zelda 2. Added by Gonetz
13587 // (t1-0)*t1+0, (cmb-0)*shade+0
13588 {0xe2f2e4f0, cc_t1_mul_shade},
13589 //text, Paper Mario
13590 // (prim-0)*t1+0
13591 {0xe2f3e2f3, cc_t1_mul_prim},
13592 //terrain, Beetle Adventure Racing. Added by Gonetz
13593 // (shade-0)*t1+0
13594 {0xe2f4e2f4, cc_t1_mul_shade},
13595 // Transfer pack, Pokemon Stadium 2
13596 // (noise-0)*t1+0, (prim-env)*cmb+env
13597 {0xe2f7a053, cc_prim_sub_env_mul_t1_add_env},
13598 // lens of truth, zelda 2 [Ogy]. Added by Gonetz
13599 // (1-t0)*prim+0
13600 {0xe316e316, cc_one_sub_t0_mul_prim},
13601 //C&C pointer
13602 //(shade-env)*prim+0
13603 {0xe354e354, cc_shade_sub_env_mul_prim},
13604 //C&C shadows
13605 //(1-env)*prim+0
13606 {0xe356e356, cc_one_sub_env_mul_prim},
13607 // Magnitude, pokemon stadium 2
13608 // (t0-0)*prim+0, (t0-0)*env+cmb
13609 {0xe3f105f1, cc_t0_mul__prim_add_env},
13610 // night vision, jet force gemini
13611 // (t0-0)*prim+0, (noise-0)*env+cmb
13612 {0xe3f105f7, cc_t0_mul_prim_add_env},
13613 // Smoke, diddy kong racing
13614 // (t0-0)*prim+0, (env-cmb)*env_alpha+cmb
13615 {0xe3f10c05, cc__t0_mul_prim__inter_env_using_enva},
13616 // battle menu, Paper Mario. Added by Gonetz
13617 // (t0-0)*prim+0, (t0-env)*env_alpha+cmb ** INC **
13618 {0xe3f10c51, cc_t0_mul_prim},
13619 // stalactites, Beetle adventure Racing. Added by Gonetz
13620 // (t0-0)*prim+0, (cmb-shade)*t1_alpha+shade ** INC **
13621 {0xe3f18940, cc_t0_mul_prim_add_shade },
13622 // ? in Jabu-Jabu's belly, submitted by gokuss4
13623 // {0xe4f1a053, (t0-0)*prim+0, (prim-env)*cmb+env
13624 {0xe3f1a053, cc_prim_sub_env_mul__t0_mul_prim__add_env},
13625 // kirby drill, kirby 64. Added by Gonetz
13626 // (t0-0)*prim+0, (cmb-env)*shade+env **INC**
13627 {0xe3f1a450, cc_t0_mul_prim_mul_shade_add_env},
13628 // ? sign, zelda 2. Added by Gonetz
13629 // (t0-0)*prim+0, (cmb-0)*cmb+0 ** INC **
13630 {0xe3f1e0f0, cc_t0_mul_prim},
13631 // vehicle, Star Wars Ep.1 Racer, [Raziel64]. Added by Gonetz
13632 // (t0-0)*prim+0, (shade-0)*cmb+0
13633 {0xe3f1e0f4, cc_t0_mul_prim_mul_shade},
13634 // mini game, Pokemon Stadium 2
13635 // (t0-0)*prim+0, (1-0)*cmb+0
13636 {0xe3f1e0f6, cc_t0_mul_prim},
13637 // magic stuff, buck bumble. Added by Gonetz
13638 // (t0-0)*prim+0, (cmb-0)*prim+0
13639 {0xe3f1e3f0, cc_t0_mul_prim_mul_prim},
13640 // The mario face, mario
13641 //z (t0-k5)*prim+cmb_a
13642 {0xe3f1e3f1, cc_t0_mul_prim},
13643 // Butterflies at Jabu-Jabu's lake, zelda
13644 // (t0-0)*prim+0, (cmb-0)*shade+0
13645 {0xe3f1e4f0, cc_t0_mul_prim_mul_shade},
13646 // Sports shirt, Mia Soccer. Added by Gonetz
13647 // (t1-0)*prim+0, (1-t0)*t1+cmb **INC**
13648 // {0xe3f20216, cc_t0_mul_prim_add_t1},
13649 {0xe3f20216, cc_shirt},
13650 // Sprites, Ogre Battle. Added by Gonetz
13651 // (t1-0)*prim+0
13652 {0xe3f2e3f2, cc_t1_mul_prim},
13653 // F1 World Grand Prix. Added by Gonetz
13654 // (t1-0)*prim+0, (cmb-0)*shade+0
13655 {0xe3f2e4f0, cc_t1_mul_prim_mul_shade},
13656 // intro background, bio freaks. Added by Gonetz
13657 // (prim-0)*prim+0
13658 {0xe3f3e3f3, cc_prim_mul_prim},
13659 // player, Ohzumou2
13660 // (shade-0)*prim+0, (env-cmb)*t0+cmb
13661 {0xe3f40105, cc_env_sub_primshade_mul_t0_add_primshade},
13662 // floor in pyramides, beetle adventure racing.
13663 // (shade-0)*prim+0, (t1-0)*cmb+0
13664 {0xe3f4e0f2, cc_t1_mul_prim_mul_shade},
13665 // Slingshot string, zelda
13666 // (shade-0)*prim+0
13667 {0xe3f4e3f4, cc_prim_mul_shade},
13668 // ?
13669 // (shade-0)*prim+0, (cmb-0)*shade+0 ** INC **
13670 {0xe3f4e4f0, cc_prim_mul_shade},
13671 // ???, zelda
13672 // (env-0)*prim+0, (0-0)*0+cmb
13673 {0xe3f5e3f5, cc_prim_mul_env},
13674 // Option selection, zelda
13675 //z (1-0)*prim+0
13676 {0xe3f6e3f6, cc_prim},
13677 // ranco monster, zelda 2. Added by Gonetz
13678 // (noise-0)*prim+0, (cmb-0)*prim_a+prim
13679 {0xe3f76af0, cc_prim_mul_prima_add_prim},
13680 // F-1_World_Grand_Prix_II, olivieryuyu
13681 // (noise-0)*prim+0, (0-cmb)*prim_a+shade
13682 {0xe3f78a0f, cc_shade_sub__prim_mul_prima},
13683 // zelda 2 [Ogy]. Added by Gonetz
13684 // (noise-0)*prim+0
13685 {0xe3f7e3f7, cc_prim},
13686 // Road rush. Added by Gonetz
13687 // (0-0)*prim+0 ** INC ** ?
13688 {0xe3ffe3ff, cc_prim},
13689 // Letter to Kafei's mom, zelda 2. Added by Gonetz
13690 // (0-0)*prim+0, (cmb-0)*shade+0
13691 {0xe3ffe4f0, cc_prim_mul_shade},
13692 // Jabu-Jabu's Belly, zelda. Added by Gonetz
13693 // (1-t0)*shade+0, (cmb-0)*prim+0
13694 {0xe416e3f0, cc_one_sub_t0_mul_prim_mul_shade},
13695 // Arena, Pokemon Stadium 2
13696 // (t0-prim)*shade+0
13697 {0xe431e431, cc_t0_sub_prim_mul_shade},
13698 // silver cave, pokemon stadium 2
13699 // (t0-env)*shade+0, (cmb-prim)*shade+prim
13700 {0xe4516430, cc__t0_sub_env_mul_shade__sub_prim_mul_shade_add_prim},
13701 // bomb mask, zelda 2. Added by Gonetz
13702 // (t0-env)*shade+0, (cmb-prim)*shade+shade ** INC **
13703 {0xe4518430, cc__t0_sub_env_mul_shade__sub_prim_mul_shade},
13704 // terrain, Top Gear Rally 2. Added by Gonetz
13705 // (t0-env)*shade+0
13706 {0xe451e451, cc_t0_sub_env_mul_shade},
13707 // closes, Nightmire Creatures
13708 // (1-env)*shade+0
13709 {0xe456e456, cc_one_sub_env_mul_shade},
13710 // water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13711 // (t0-0)*shade+0, (cmb-cmb)*cmb+cmb
13712 {0xe4f10000, cc_t0_mul_shade},
13713 // Monster truck madness intro. Added by Gonetz
13714 // (t0-0)*shade+0, (1-0)*cmb+cmb ** INC **
13715 {0xe4f100f6, cc_t0_mul_shade},
13716 // terrain, SCARS. Added by Gonetz
13717 // (t0-0)*shade+0, (prim-cmb)*t0+cmb ** INC **
13718 {0xe4f10103, cc_t0_mul_shade},
13719 // Boomerang circle, zelda
13720 // (t0-0)*shade+0, (1-cmb)*t0+cmb
13721 {0xe4f10106, cc_t0_mul_shade},
13722 // THPS3.
13723 // (t0-0)*shade+0, (1-0)*t0+cmb
13724 {0xe4f101f6, cc_t0_mul_shade},
13725 // ???, WWF No Mercy [CpuMaster]
13726 // (t0-0)*shade+0, (env-cmb)*prim+cmb
13727 {0xe4f10305, cc_t0_mul_one_sub_prim_mul_shade_add_prim_mul_env},
13728 // magic bubble, zelda2. Added by Gonetz
13729 // (t0-0)*shade+0, (t1-0)*shade+cmb
13730 {0xe4f104f2, cc__t0_mul_shade__add__t1_mul_shade},
13731 // bike select, xg2. Added by Gonetz
13732 // (t0-0)*shade+0, (1-cmb)*env+cmb ** INC **
13733 {0xe4f10506, cc_t0_mul_shade},
13734 // a bugs life [Ogy]
13735 // (t0-0)*shade+0, (cmb-0)*env+cmb
13736 // {0xe4f105f0, cc_t0_mul_env_mul_shade},
13737 {0xe4f105f0, cc_t0_mul_shade},
13738 // Wall, quest64
13739 // (t0-0)*shade+0, (1-0)*env+cmb
13740 {0xe4f105f6, cc_t0_mul_shade_add_env},
13741 //lava, beetle adventure racing. Added by Gonetz
13742 // (t0-0)*shade+0, (prim-cmb)*cmb_a+cmb **INC**
13743 {0xe4f10703, cc_t0_mul_shade},
13744 // course map, Ridge Racer. Added by Gonetz
13745 // (t0-0)*shade+0, (prim-cmb)*prima+cmb **INC**
13746 {0xe4f10a03, cc_t0_mul_shade},
13747 // arena, custom robo. Added by Gonetz
13748 // (t0-0)*shade+0, (noise-cmb)*prima+cmb **INC**
13749 {0xe4f10a07, cc_t0_mul_shade},
13750 // arena, custom robo 2. Added by Gonetz
13751 // (t0-0)*shade+0, (0-cmb)*prima+cmb **INC**
13752 {0xe4f10a0f, cc_t0_mul_shade},
13753 //floor in a cave, Paper mario. Added by Gonetz
13754 // (t0-0)*shade+0, (cmb-prim)*prima+cmb **INC**
13755 {0xe4f10a30, cc_t0_mul_shade},
13756 //beetle adventure racing. Added by Gonetz
13757 // (t0-0)*shade+0, (t1-prim)*prima+cmb **INC**
13758 {0xe4f10a32, cc_t0_mul_shade},
13759 // Monster truck madness intro. Added by Gonetz
13760 // (t0-0)*shade+0, (shade-cmb)*shade_a+cmb ** INC **
13761 {0xe4f10b04, cc_t0_mul_shade},
13762 // xg2 intro. Added by Gonetz
13763 // (t0-0)*shade+0, (1-cmb)*shade_a+cmb ** INC **
13764 {0xe4f10b06, cc__t0_mul_shade__inter_one_using_shadea},
13765 // Link's bomb, smash bros
13766 // (t0-0)*shade+0, (env-cmb)*env_a+cmb ** INC **
13767 {0xe4f10c05, cc__t0_mul_shade__inter_env_using_enva},
13768 // language selection, Extreme-G XG2 (E)
13769 // (t0-0)*shade+0, (1-cmb)*env_a+cmb
13770 {0xe4f10c06, cc__t0_mul_shade__inter_one_using_enva},
13771 // A Bugs Life, [Raziel64]
13772 // (t0-0)*shade+0, (cmb-0)*k5+cmb
13773 {0xe4f10ff0, cc_t0_mul_shade},
13774 // Bass Rush
13775 // (t0-0)*shade+0, (cmb-0)*0+cmb
13776 {0xe4f11f0f, cc_t0_mul_shade},
13777 // car, Top Gear Rally. Added by Gonetz
13778 // (t0-0)*shade+0, (cmb-t0)*t0a+t0 **INC**
13779 {0xe4f12810, cc_t0_mul_shade},
13780 // logo, SCARS. Added by Gonetz
13781 // (t0-0)*shade+0, (cmb-t0)*shadea+t0 **INC**
13782 {0xe4f12b10, cc__t0_mul_shade_mul_shadea__add__t1_mul_one_sub_shadea},
13783 // ? sign, Spiderman. Added by Gonetz
13784 // (t0-0)*shade+0, (0-0)*0+t1
13785 {0xe4f15fff, cc_t0_mul_shade},
13786 // Major League Baseball Featuring Ken Griffey Jr.
13787 // (t0-0)*shade+0, (1-0)*cmb+prim ** INC **
13788 {0xe4f160f6, cc_t0_mul_shade_add_prim},
13789 // plants, CBFD. Added by Gonetz
13790 // (t0-0)*shade+0, (cmb-env)*shade+prim ** INC **
13791 {0xe4f16450, cc_t0_sub_env_mul_shade_add_prim},
13792 // Kirby64. Added by Gonetz
13793 // (t0-0)*shade+0, (cmb-prim)*prima+prim
13794 {0xe4f16a30, cc_t0_mul_prima_mul_shade_add_prim_mul_one_sub_prima},
13795 // building shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13796 // (t0-0)*shade+0, (0-0)*0+prim
13797 {0xe4f17fff, cc_prim},
13798 // tire trace, beetle adventure racing. Added by Gonetz
13799 // (t0-0)*shade+0, (env-cmb)*t1+shade **INC**
13800 {0xe4f18205, cc_env_sub_shade_mul_t0_add_shade},
13801 // Gold Skulltula, zelda
13802 // (t0-0)*shade+0, (prim-env)*cmb+env
13803 {0xe4f1a053, cc_prim_sub_env_mul_t0_mul_shade_add_env},
13804 // {0xe4f1a053, cc_t0_mul_prim_mul_shade},
13805 // fighters, GASP Fighters
13806 // (t0-0)*shade+0, (1-env)*cmb+env
13807 {0xe4f1a056, cc_t0_mul_one_sub_env_mul_shade_add_env},
13808 // Brian, quest64
13809 // (t0-0)*shade+0, (cmb-0)*prim+env
13810 {0xe4f1a3f0, cc_t0_mul_prim_mul_shade_add_env},
13811 // Objects in arena, pokemon stadium 2
13812 // (t0-0)*shade+0
13813 // (cmb-prim)*shade+env
13814 {0xe4f1a430, cc_t0_mul_shade},
13815 // Monster truck madness intro. Added by Gonetz
13816 // (t0-0)*shade+0, (cmb-env)*shadea+env **INC**
13817 // {0xe4f1ab50, cc_t0_mul_shade_add_env},
13818 {0xe4f1ab50, cc__t0_mul_shade__sub_env_mul_shadea_add_env},
13819 // Taz express. Added by Gonetz
13820 // (t0-0)*shade+0, (cmb-env)*enva+env **INC**
13821 {0xe4f1ac50, cc_t0_mul_shade_add_env},
13822 // sky in doom. Added by Gonetz
13823 // (t0-0)*shade+0, (cmb-0)*primlod+env **INC**
13824 {0xe4f1aef0, cc_t0_mul_shade_add_env},
13825 // fighters, GASP Fighters
13826 // (t0-0)*shade+0, (1-env)*cmb+0
13827 {0xe4f1e056, cc_t0_mul_one_sub_env_mul_shade},
13828 // walls, beetle adventure racing. Added by Gonetz
13829 // (t0-0)*shade+0, (t0-0)*cmb+0 **INC**
13830 {0xe4f1e0f1, cc_t0_mul_shade},
13831 // Link's face, zelda
13832 //z (t0-k5)*shade+cmb_a, (prim-k5)*cmb+cmb_a
13833 {0xe4f1e0f3, cc_t0_mul_prim_mul_shade},
13834 // Link's suit, zelda
13835 //z (t0-k5)*shade+cmb_a, (env-k5)*cmb+cmb_a
13836 {0xe4f1e0f5, cc_t0_mul_env_mul_shade},
13837 // Window, starfox
13838 //z (t0-k5)*shade+cmb_a, (cmb-k5)*prim+cmb_a
13839 {0xe4f1e3f0, cc_t0_mul_prim_mul_shade},
13840 // crystal, Doraemon 2
13841 //(t0-0)*shade+0, (t0-0)*prim+0
13842 {0xe4f1e3f1, cc_t0_mul_prim},
13843 // Characters, mace
13844 // (t0-0)*shade+0, (cmb-0)*shade+0
13845 {0xe4f1e4f0, cc_t0_mul_shade},
13846 // Super Mario 64 logo
13847 //z (t0-k5)*shade+cmb_a
13848 {0xe4f1e4f1, cc_t0_mul_shade},
13849 // Kokiri's hat, zelda
13850 // (t0-0)*shade+0, (cmb-0)*env+0
13851 {0xe4f1e5f0, cc_t0_mul_env_mul_shade},
13852 // Gauntlet Legends intro
13853 // (t0-0)*shade+0, (cmb-0)*scale+0
13854 {0xe4f1e6f0, cc_t0_mul_scale_mul_shade},
13855 // Something on a tree, Paper Mario. Added by Gonetz
13856 // (t0-0)*shade+0, (cmb-0)*prima+0
13857 {0xe4f1eaf0, cc_t0_mul_prima_mul_shade},
13858 // Course map, Ridge Racer. Added by Gonetz
13859 // (t0-0)*shade+0, (cmb-0)*shadea+0
13860 {0xe4f1ebf0, cc_t0_mul_shade_mul_shadea},
13861 // Dodongo skull's eyes, zelda
13862 // (t0-0)*shade+0, (cmb-0)*env_alpha+0
13863 {0xe4f1ecf0, cc_t0_mul_enva_mul_shade},
13864 // lava, beetle adventure racing. Added by Gonetz
13865 // (t1-0)*shade+0, (cmb-prim)*cmb_a+prim **INC**
13866 {0xe4f26730, cc_prim_inter_t1_mul_shade_using_texa},
13867 // headlight, beetle adventure racing. Added by Gonetz
13868 // (t1-0)*shade+0, (env-cmb)*t0+shade **INC**
13869 {0xe4f28105, cc_one_sub__t0_mul_t1__mul_shade},
13870 // bubble, Banjo-Kazooie. Added by Gonetz
13871 // (t1-0)*shade+0
13872 {0xe4f2e4f2, cc_t1_mul_shade},
13873 // water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13874 // (prim-0)*shade+0, (cmb-cmb)*cmb+cmb
13875 {0xe4f30000, cc_prim_mul_shade},
13876 // lamp shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13877 // (prim-0)*shade+0, (cmb-cmb)*t0+cmb
13878 {0xe4f30100, cc_prim_mul_shade},
13879 // Yoshi, mario golf
13880 // (prim-0)*shade+0, (env-cmb)*t0+cmb
13881 {0xe4f30105, cc_env_sub_primshade_mul_t0_add_primshade},
13882 //Spacestation Silicon Valley intro. Added by Gonetz
13883 // (prim-0)*shade+0, (env-cmb)*t1+cmb
13884 {0xe4f30205, cc_env_sub_primshade_mul_t1_add_primshade},
13885 // Tip of brian's hair, quest64
13886 // (prim-0)*shade+0, (1-0)*env+cmb
13887 {0xe4f305f6, cc_prim_mul_shade_add_env},
13888 // V8-2 menu
13889 // (prim-0)*shade+0, (env-cmb)*cmb_a+cmb
13890 {0xe4f30705, cc__prim_mul_shade__inter_env_using__prim_mul_shade_alpha},
13891 // Background circle, xg2
13892 // (prim-0)*shade+0, (1-cmb)*shade_a+cmb
13893 {0xe4f30b06, cc_prim_mul_shade},
13894 // circle, waverace. Added by Gonetz
13895 // (prim-0)*shade+0, (t0-cmb)*enva+cmb
13896 {0xe4f30c01, cc_t0_sub__prim_mul_shade__mul_enva_add__prim_mul_shade},
13897 // enemy hit, Glover2
13898 // (prim-0)*shade+0, (env-cmb)*enva+cmb
13899 {0xe4f30c05, cc__prim_mul_shade__inter_env_using_enva},
13900 // player, super bowling
13901 // (prim-0)*shade+0, (0-0)*k5+cmb
13902 {0xe4f30fff, cc_prim_mul_shade},
13903 //Lure, bass rush
13904 // (prim-0)*shade+0, (0-cmb)*0+cmb
13905 {0xe4f31f0f, cc_prim_mul_shade},
13906 // walls, beetle adventure racing. Added by Gonetz
13907 // (prim-0)*shade+0, (cmb-shade)*t1+shade **INC**
13908 {0xe4f38240, cc__one_inter_prim_using_t1__mul_shade},
13909 // GASP fighters
13910 //(prim-0)*shade+0, (1-env)*cmb+0
13911 {0xe4f3e056, cc_prim_mul_one_sub_env_mul_shade},
13912 // Flag, mario kart
13913 //z (prim-k5)*shade+cmb_a
13914 {0xe4f3e4f3, cc_prim_mul_shade},
13915 // Characters, smash bros
13916 // (prim-0)*shade+0, (cmb-0)*env+0
13917 {0xe4f3e5f0, cc_prim_mul_env_mul_shade},
13918 // N64 logo, ridge race. Added by Gonetz
13919 // (shade-0)*shade+0, (prim-cmb)*prima+cmb **INC**
13920 {0xe4f40a03, cc_shade},
13921 // fighter, shield mode, bio freaks. Added by Gonetz
13922 // (shade-0)*shade+0
13923 {0xe4f4e4f4, cc_shade},
13924 // truck crush, Monster truck madness. Added by Gonetz
13925 // (env-0)*shade+0, (env-0)*shade+cmb
13926 {0xe4f504f5, cc_env_mul_shade},
13927 // Course map, Ridge Racer. Added by Gonetz
13928 // (env-0)*shade+0
13929 {0xe4f5e4f5, cc_env_mul_shade},
13930 // lava, beetle adventure racing
13931 // (1-0)*shade+0, (prim-cmb)*cmb_a+cmb
13932 {0xe4f60703, cc_prim_sub_shade_mul_shadea_add_shade},
13933 // the wings in the song of soaring cut-scene, zelda2 [Ogy]. Added by Gonetz
13934 // (1-0)*shade+0, (prim-0)*cmb+0
13935 {0xe4f6e0f3, cc_prim_mul_shade},
13936 // parts of vehicle, Star Wars Ep.I Racer. Added by Gonetz
13937 // (1-0)*shade+0, (cmb-0)*prim+0
13938 {0xe4f6e3f0, cc_prim_mul_shade},
13939 // Snowflakes???, mario kart. Boxer shadow (fb effect}, Knockout Kings 2000
13940 // (1-0)*shade+0, (1-0)*shade+0
13941 {0xe4f6e4f6, cc_one_mul_shade},
13942 // ???
13943 // (noise-0)*shade+0
13944 {0xe4f7e4f7, cc_shade},
13945 // quest64 [Ogy]
13946 // (prim-t0)*env+0, (0-0)*0+prim
13947 {0xe5137fff, cc_prim},
13948 // field, Mike Piazza's Strike Zone
13949 // (t0-prim)*env+0 ** INC **
13950 {0xe531e531, cc_t0_mul_env},
13951 // Mike Piazza's Strike Zone
13952 // (shade-prim)*env+0
13953 {0xe534e534, cc_shade_sub_prim_mul_env},
13954 // rope, CBFD. Added by Gonetz
13955 // (t0-0)*env+0, (1-env)*prim+cmb
13956 {0xe5f10356, cc_one_sub_env_mul_prim_add__t0_mul_env},
13957 // Bell, Pokemon Stadium 2. Added by Gonetz
13958 // (t0-0)*env+0, (shade-0)*prim+cmb
13959 {0xe5f103f4, cc_t0_mul_env_add_prim_mul_shade},
13960 // aerofighter's assault [Ogy]
13961 // (t0-0)*env+0, (1-t0)*shade+cmb
13962 {0xe5f10416, cc_t0_mul_env_add_1mt0_mul_shade},
13963 // foto, Armorines - Project S.W.A.R.M. Added by Gonetz
13964 // (t0-0)*env+0, (noise-0)*scale+cmb
13965 {0xe5f106f7, cc_t0_mul_env},
13966 // Extreme G2, score. Added by Gonetz
13967 // (t0-0)*env+0, (1-cmb)*enva+cmb ** INC **
13968 {0xe5f10c06, cc_t0_mul_env},
13969 // many objects in Tonic Trouble
13970 // (t0-0)*env+0, (shade-0)*cmb+0
13971 {0xe5f1e0f4, cc_t0_mul_env_mul_shade},
13972 // Flying skull's eyes, zelda
13973 // (t0-0)*env+0, (cmb-0)*prim+0
13974 {0xe5f1e3f0, cc_t0_mul_prim_mul_env},
13975 // Rock spell, quest64
13976 // (t0-0)*env+0, (cmb-0)*shade+0
13977 {0xe5f1e4f0, cc_t0_mul_env_mul_shade},
13978 // Text, mario
13979 //z (t0-k5)*env+cmb_a
13980 {0xe5f1e5f1, cc_t0_mul_env},
13981 // kirby 64. Added by Gonetz
13982 // (prim-0)*env+0, (cmb-0)*shade+0
13983 {0xe5f3e4f0, cc_prim_mul_env_mul_shade},
13984 // wings, kirby 64. Added by Gonetz
13985 // (prim-0)*env+0
13986 {0xe5f3e5f3, cc_prim_mul_env},
13987 // Text, xg2
13988 // (shade-0)*env+0, (1-cmb)*env_a+cmb
13989 {0xe5f40c06, cc_env_mul_shade},
13990 // Text box, mario
13991 //z (shade-k5)*env+cmb_a
13992 {0xe5f4e5f4, cc_env_mul_shade},
13993 // bomberman 64 [Ogy]
13994 // (1-0)*env+0
13995 {0xe5f6e5f6, cc_env},
13996 // Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13997 // (1-t0)*scale+0
13998 {0xe616e616, cc_zero},
13999 // Gauntlet Legends intro. Added by Gonetz
14000 // (t0-0)*scale+0, (cmb-0)*shade+0
14001 {0xe6f1e4f0, cc_t0_mul_scale_mul_shade},
14002 // shadows, Taz express. Added by Gonetz
14003 // (t0-0)*scale+0
14004 {0xe6f1e6f1, cc_t0_mul_scale},
14005 // shadows, Knockout Kings 2000. Added by Gonetz
14006 // (shade-0)*scale+0
14007 {0xe6f4e6f4, cc_scale_mul_shade},
14008 // bomberman 64 2 [Ogy]. Added by Gonetz
14009 // (1-0)*scale+0
14010 {0xe6f6e6f6, cc_scale},
14011 // walls, beetle adventure racing. Added by Gonetz
14012 // (t1-0)*t0_a+0, (1-t1)*cmb+t1 **INC**
14013 {0xe8f24026, cc_t1},
14014 // house on rancho, zelda2. Added by Gonetz
14015 // (t1-0)*t0_a+0, (cmb-0)*prim+0
14016 {0xe8f2e3f0, cc__t0a_mul_t1__mul_prim},
14017 // zelda2 [Ogy]. Added by Gonetz
14018 // (t1-0)*t0_a+0, (cmb-0)*shade+0
14019 {0xe8f2e4f0, cc__t0a_mul_t1__mul_shade},
14020 // mini quiz, Pokemon Stadium 2
14021 // (prim-0)*t0_a+0, (cmb-t1)*primlod+t1 ** INC **
14022 {0xe8f34e20, cc_t0},
14023 // Major League Baseball Featuring Ken Griffey Jr.
14024 // (prim-0)*t0_a+0
14025 {0xe8f3e8f3, cc_t0a_mul_prim},
14026 // Top Gear Hyper-Bike
14027 // (1-0)*t0_a+0
14028 {0xe8f6e8f6, cc_t0a},
14029 // waterfall, Dobutsu_no_Mori
14030 // (t0-0)*t1_a+0, (prim-env)*cmb+env
14031 {0xe9f1a053, cc_prim_sub_env_mul__t0_mul_t1a__add_env},
14032 // logo, Deadly Arts. Added by Gonetz
14033 // (t0-0)*t1_a+0, (cmb-0)*shade+0
14034 {0xe9f1e4f0, cc__t0_mul_t1a__mul_shade},
14035 // car, Roadsters. Added by Gonetz
14036 // (prim-t0)*prim_a+0, (prim-cmb)*shade+0 ** INC **
14037 {0xea13e403, cc_prim_sub__prim_sub_t0_mul_prima__mul_shade},
14038 // arena, Pokemon Stadium 2. Added by Gonetz
14039 // (1-t0)*prim_a+0, (0-prim)*cmb+prim ** INC **
14040 {0xea16603f, cc_t0_mul_prim},
14041 // V8-2
14042 // (1-prim)*prim_a+0
14043 {0xea36ea36, cc_one_sub_prim_mul_prima},
14044 // match start, Mario Tennis. Added by Gonetz
14045 // (t0-0)*prim_a+0, (1-t0)*cmb+t0 ** INC **
14046 {0xeaf12016, cc_one_sub_t0_mul_prima_add_t0},
14047 // blast corps [Ogy]
14048 // (t0-0)*prim_a+0
14049 {0xeaf1eaf1, cc_t0_mul_prima},
14050 // final battle, CBFD. Added by Gonetz
14051 // (prim-0)*prim_a+0
14052 {0xeaf3eaf3, cc_prim_mul_prima},
14053 // flower's stalk, Paper Mario. Added by Gonetz
14054 // (shade-0)*prim_a+0
14055 {0xeaf4eaf4, cc_shade_mul_prima},
14056 // blast corps [Ogy]
14057 // (noise-0)*prim_a+0, (t1-0)*shade+cmb ** INC **
14058 {0xeaf704f2, cc_t0_mul_shade_add_prima},
14059 // F1 World Grand Prix. Added by Gonetz
14060 // (noise-0)*prim_a+0, (t1-0)*env_a+cmb ** INC **
14061 {0xeaf70cf2, cc_t1_mul_enva},
14062 // shadows, killer instinct gold
14063 // (0-0)*prim_a+0
14064 {0xeaffeaff, cc_zero},
14065 // background, killer instinct gold
14066 // (t0-prim)*shade_a+0
14067 {0xeb31eb31, cc_t0_sub_prim_mul_shadea},
14068 // ground, C&C
14069 // (t0-shade)*shade_a+0
14070 {0xeb41eb41, cc_t0_sub_shade_mul_shadea},
14071 // Wreslters, WWF No Mercy, [CpUMasteR]
14072 // (t0-0)*shade_alpha+0, (env-cmb)*prim+cmb
14073 {0xebf10305, cc_t0_mul_one_sub_prim_mul_shadea_add_prim_mul_env},
14074 // map, Pilot wings. Added by Gonetz
14075 // (t0-0)*shade_alpha+0, (1-cmb)*shade+cmb
14076 {0xebf10406, cc_one_sub_shade_mul__t0_mul_shadea__add_shade},
14077 // Indy Racing 2000. Added by Gonetz
14078 // (t0-0)*shade_alpha+0, (1-0)*shade+cmb
14079 {0xebf104f6, cc_t0_mul_shadea_add_shade},
14080 // logo, WCW-nWo Revenge
14081 // (t0-0)*shade_alpha+0, (cmb-0)*prim+0
14082 {0xebf1e3f0, cc_t0_mul_prim_mul_shadea},
14083 // sky, pilot wings
14084 // (t0-0)*shade_alpha+0, (1-cmb)*shade+0
14085 {0xebf1e406, cc_one_sub__t0_mul_shadea__mul_shade},
14086 // Wrestlers in Game, WWF No mercy [CpUMasteR]
14087 // (t0-0)*shade_alpha+0
14088 {0xebf1ebf1, cc_t0_mul_shadea},
14089 // flag, top gear overdrive
14090 // (prim-0)*shade_alpha+0
14091 {0xebf3ebf3, cc_prim_mul_shadea},
14092 // Ropes, WWF games
14093 // (shade-0)*shade_alpha+0, (env-cmb)*prim+cmb
14094 {0xebf40305, cc_shade_mul_shadea},
14095 // Ropes, WWF games
14096 // (shade-0)*shade_alpha+0
14097 {0xebf4ebf4, cc_shade_mul_shadea},
14098 // arena, custom robo 2
14099 // (noise-0)*shade_alpha+0
14100 {0xebf7ebf7, cc_shadea},
14101 // Baton Pass attack, Pokemon Stadium 2
14102 // (t0-env)*enva+0, (shade-0)*prim+cmb
14103 {0xec5103f4, cc__t0_sub_env_mul_enva__add_prim_mul_shade},
14104 // Bell, Pokemon Stadium 2. Added by Gonetz
14105 // (t0-0)*enva+0, (shade-0)*prim+cmb
14106 {0xecf103f4, cc_t0_mul_enva_add_prim_mul_shade},
14107 // blastcorps, unimp log. Added by Gonetz
14108 // (t0-0)*enva+0
14109 {0xecf1ecf1, cc_t0_mul_enva},
14110 // car, Top Gear Rally. Added by Gonetz
14111 // (env-0)*enva+0
14112 {0xecf5ecf5, cc_env_mul_enva},
14113 // Sand attack, pokemon Stadium (J)
14114 // (noise-0)*enva+0, (prim-env)*cmb+env
14115 {0xecf7a053, cc_prim_sub_env_mul_enva_add_env},
14116 // Walls of well through lens of truth, zelda
14117 // (prim-t0)*primlod+0 ** INC **
14118 {0xee13ee13, cc_t0}, // JUST t0 b/c the other combiner handles the subtraction
14119 // Pokemon attack, Pokemon Stadium 2
14120 // (noise-t0)*primlod+0, (1-env)*cmb+env ** INC **
14121 {0xee17a056, cc_env_inter_one_using__one_sub_t0_mul_primlod},
14122 // barrage attack, Pokemon Stadium 2
14123 // (t0-0)*primlod+0, (prim-0)*shade+cmb
14124 {0xeef104f3, cc__t0_mul_primlod__add__prim_mul_shade},
14125 // something on a flor in stone temple, zelda 2. Added by Gonetz
14126 // (t0-0)*primlod+0, (cmb-0)*prim+0
14127 {0xeef1e3f0, cc_t0_mul_primlod_mul_prim},
14128 // entrance to oceanside spider house, zelda 2. Added by Gonetz
14129 // (t0-0)*primlod+0, (cmb-0)*shade+0
14130 {0xeef1e4f0, cc_t0_mul_primlod_mul_shade},
14131 // Haze/(all powder status changers}, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14132 // (noise-0)*primlod+0, (prim-env)*cmb+env ** INC **
14133 {0xeef7a053, cc_prim_sub_env_mul_primlod_add_env},
14134 // pokemon attack, Pokemon Stadium 2. Added by Gonetz
14135 // (noise-0)*primlod+0, (prim-cmb)*cmb+0 ** INC **
14136 {0xeef7e003, cc_zero},
14137 // Night trees, Monster truck madness. Added by Gonetz
14138 // (t0-0)*k5+0
14139 {0xeff1eff1, cc_t0_mul_k5},
14140 // submitted by gokuss4
14141 // (0-0)*0+0, (0-0)*0+prim
14142 {0xfffd5fe6, cc_prim},
14143 // intro, Bettle Adventure Racing, [Raziel64]
14144 // (0-0)*0+0, (0-0)*0+t0
14145 {0xffff3fff, cc_t0},
14146 // Conker's face, CBFD
14147 // (0-0)*0+0, (shade-env)*k5+prim
14148 {0xffff6f54, cc_shade_sub_env_mul_k5_add_prim},
14149 // Boost, Beetle Adventure Racing. Added by Gonetz
14150 // (0-0)*0+0, (0-0)*0+prim
14151 {0xffff7fff, cc_prim},
14152 // headlight, beetle adventure racing. Added by Gonetz
14153 // (0-0)*0+0, (0-0)*0+shade
14154 {0xffff9fff, cc_shade},
14155 // intro, Bettle Adventure Racing, [Raziel64]
14156 // (0-0)*0+0, (shade-env)*t1+env
14157 {0xffffa254, cc_shade_sub_env_mul_t1_add_env},
14158 // Fly Swooping in, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14159 // (0-0)*0+0, (1-env)*cmb_a+env
14160 {0xffffa756, cc_env},
14161 // Waterfall, Donkey Kong 64
14162 // (0-0)*0+0, (t0-0)*t1+0
14163 {0xffffe1f2, cc_t0_mul_t1},
14164 // Screen clear, banjo kazooie
14165 // (0-0)*0+0
14166 {0xffffffff, cc_zero},
14167 // { #CCEND }
14168};
14169
14170static COMBINER alpha_cmb_list[] = {
14171 // { #ACSTART }
14172 //Tony Hawk's Pro Skater. Added by Gonetz
14173 // (0-0)*0+0
14174 {0x01ff01ff, ac_zero},
14175 //terminal, Spacestation Silicon Valley. Added by Gonetz
14176 // (0-0)*0+0, (0-0)*0+prim
14177 {0x01ff07ff, ac_prim},
14178 // kirby drill, kirby 64. Added by Gonetz
14179 // (0-0)*0+cmb, (0-0)*0+1
14180 {0x01ff0dff, ac_one},
14181 //chip in Spacestation Silicon Valley intro. Added by Gonetz
14182 // (0-0)*0+cmb, (prim-0)*shade+0
14183 {0x01ff0f3b, ac_prim_mul_shade},
14184 //Goldeneye, [Jeremy]. Added by Gonetz
14185 // (t0-t0)*lodf+t0, (cmb-0)*prim+0
14186 {0x02090ef8, ac_t0_mul_prim},
14187 // Indy Racing 2000. Added by Gonetz
14188 // (t1-t0)*lodf+t0, (env-cmb)*prim+cmb ** INC **
14189 {0x020a00c5, ac_t0_inter_t1_using_primlod},
14190 // water, Spacestation Silicon Valley. Added by Gonetz
14191 // (t1-t0)*lodf+t0, (0-shade)*0+cmb
14192 {0x020a01e7, ac_t0_inter_t1_using_primlod},
14193 // Bridge, sf rush
14194 //z (t1-t0)*lodf+t0
14195 {0x020a020a, ac_t0_inter_t1_using_primlod},
14196 // explosion, body harvest. Added by Gonetz
14197 //(t1-t0)*lodf+t0, (0-0)*0+t0
14198 {0x020a03ff, ac_t0},
14199 // cars, PD intro. Added by Gonetz
14200 // (t1-t0)*lodf+t0, (cmb-0)*shade+prim
14201 {0x020a0738, ac__t0_inter_t1_using_primlod__mul_shade_add_prim},
14202 // Rocket Robot in Wheels intro
14203 //(t1-t0)*lodf+t0, (0-0)*0+prim
14204 {0x020a07ff, ac_prim},
14205 // Iguana background ground, turok
14206 // (t1-t0)*lodf+t0, (0-0)*0+shade
14207 {0x020a09ff, ac_shade},
14208 // Ground, monster truck madness
14209 // (t1-t0)*lodf+t0, (0-0)*0+env
14210 {0x020a0bff, ac_env},
14211 // Taz express. Added by Gonetz
14212 // (t1-t0)*lodf+t0, (0-0)*0+1
14213 {0x020a0dff, ac_one},
14214 // Mike Piazza's Strike Zone
14215 // (t1-t0)*lodf+t0, (cmb-0)*t0+0
14216 {0x020a0e78, ac_t0_inter_t1_using_primlod},
14217 // N64 logo, tetrisphere. Added by Gonetz
14218 // (t1-t0)*lodf+t0, (cmb-0)*prim+0
14219 {0x020a0ef8, ac__t0_inter_t1_using_primlod__mul_prim},
14220 // Ground, mace
14221 // (t1-t0)*lodf+t0, (cmb-0)*shade+0
14222 // {0x020a0f38, ac_t0_mul_shade},
14223 {0x020a0f38, ac__t0_inter_t1_using_primlod__mul_shade},
14224 // blast corps [Ogy]
14225 // (t1-t0)*lodf+t0, (cmb-0)*env+0
14226 {0x020a0f78, ac__t0_inter_t1_using_primlod__mul_env},
14227 // blast corps [Ogy]
14228 // (t1-t0)*lodf+t0, (t0-0)*env+0
14229 {0x020a0f79, ac_t0_mul_env},
14230 // blast corps. Added by Gonetz
14231 // (t1-t0)*lodf+t0, (shade-0)*env+0
14232 {0x020a0f7c, ac_env_mul_shade},
14233 // field, Mike Piazza's Strike Zone
14234 // (t1-t0)*lodf+t0, (0-0)*0+0
14235 {0x020a0fff, ac_t0_inter_t1_using_primlod},
14236 // blast corps, unimp log. Added by Gonetz
14237 // (t1-t0)*t0+t0
14238 {0x024a024a, ac_t0_inter_t1_using_t0a},
14239 // zelda 2 [Ogy]. Added by Gonetz
14240 // (t1-t0)*t0+t0, (cmb-0)*prim+0 **INC**
14241 {0x024a0ef8, ac__t0_inter_t1_using_t0a__mul_prim},
14242 // text in a menu, Twisted_Edge_Extreme_Snowboarding [Razeil64]. Added by Gonetz
14243 // (prim-t0)*t0+t0 **INC**
14244 {0x024b024b, ac_t0},
14245 // enemy's shot, battle tanks 2
14246 // (env-prim)*t0+t0 **INC**
14247 {0x025d025d, ac_t0},
14248 //Bowser in final battle, Paper Mario. Added by Gonetz
14249 // (t1-env)*t0+t0, (cmb-env)*prim+0 ** INC **
14250 {0x026a0ee8, ac__t0_mul_t1__mul_prim},
14251 // paper mario. Added by Gonetz
14252 // (t1-env)*t0+t0, (cmb-0)*prim+0 ** INC **
14253 {0x026a0ef8, ac__t0_mul_t1__mul_prim},
14254 // V8-2
14255 // (prim-0)*t0+t0
14256 {0x027b027b, ac_t0_mul_prim_add_t0},
14257 // THPS3. Added by Gonetz
14258 // (0-0)*t0+t0
14259 {0x027f027f, ac_t0},
14260 // zelda 2. Added by Gonetz
14261 // (0-0)*t0+t0, (cmb-0)*prim+0
14262 {0x027f0ef8, ac_t0_mul_prim},
14263 // Spider Web attack, Pokemon Stadium 2.
14264 // (t1-t0)*t1+t0, (cmb-0)*prim+cmb
14265 {0x028a00f8, ac__t0_inter_t1_using_t1a__mul_prim_add__t0_inter_t1_using_t1a},
14266 // teleportation, Spacestation Silicon Valley. Added by Gonetz
14267 // (t1-t0)*t1+t0
14268 {0x028a028a, ac_t0_inter_t1_using_t1a},
14269 // mega shock, paper mario. Added by Gonetz
14270 // (t1-t0)*t1+t0, (cmb-0)*prim+0
14271 {0x028a0ef8, ac__t0_inter_t1_using_t1a__mul_prim},
14272 // mini game, Pokemon Stadium 2
14273 // (t1-t0)*t1+t0, (cmb-0)*shade+0
14274 {0x028a0f38, ac__t0_inter_t1_using_t1a__mul_shade},
14275 // Magnitude, pokemon stadium 2
14276 // (shade-t0)*t1+t0, (cmb-0)*shade+env
14277 {0x028c0b38, ac__t0_mul_t1__mul_shade},
14278 // paper mario. Added by Gonetz
14279 // (1-t0)*t1+t0, (t1-0)*prim+0 ** INC **
14280 {0x028e0efa, ac__one_sub_t0_mul_t1_add_t0__mul_prim},
14281 // {0x028e0efa, ac_t1_mul_prim},
14282 // Spider Web attack, Pokemon Stadium 2.
14283 // (1-t0)*t1+t0, (cmb-0)*shade+0 ** INC **
14284 {0x028e0f38, ac__one_sub_t0_mul_t1_add_t0__mul_prim},
14285 // paper mario. Added by Gonetz
14286 // (t1-env)*t1+t0, (cmb-0)*shade+0
14287 {0x02aa0f38, ac__t0_inter_t1_using_enva__mul_shade},
14288 // Scary dead boss thing, zelda
14289 // (env-1)*t1+t0, (cmb-0)*prim+0 * MAY need t1_inter_t0 instead...
14290 {0x02b50ef8, ac__env_sub_one_mul_t1_add_t0__mul_prim},
14291 // first screen, castlevania. Added by Gonetz
14292 // (env-0)*t1+t0 **INC**
14293 {0x02bd02bd, ac_t0},
14294 // enemy's shot, battle tanks 2 [Flash]
14295 // (1-0)*t1+t0, (0-0)*0+env
14296 {0x02be0bff, ac_env},
14297 // battle tanks 2 [Ogy]
14298 // (1-0)*t1+t0, (0-0)*0+1
14299 {0x02be0dff, ac_one},
14300 // menu screen, Rayman2. Added by Gonetz
14301 // (1-0)*t1+t0, (cmb-0)*shade+0
14302 {0x02be0f38, ac__t0_add_t1__mul_shade},
14303 // Sky, zelda
14304 //z (t1-t0)*prim+t0
14305 {0x02ca02ca, ac_t0_inter_t1_using_prima},
14306 // F1 World Grand Prix. Added by Gonetz
14307 // (t1-t0)*prim+t0, (0-0)*0+1
14308 {0x02ca0dff, ac_t0_inter_t1_using_prima},
14309 // logo, PD. Added by Gonetz
14310 // (t1-t0)*prim+t0, (cmb-0)*shade+0
14311 {0x02ca0f38, ac__t0_inter_t1_using_prima__mul_shade},
14312 // battle tanks [Ogy]
14313 // (t1-t0)*prim+t0, (cmb-0)*env+0
14314 {0x02ca0f78, ac__t0_inter_t1_using_prima__mul_env},
14315 // logo, Deadly Arts. Added by Gonetz
14316 // (env-t0)*prim+t0
14317 {0x02cd02cd, ac_one_sub_prim_mul_t0_add__prim_mul_env},
14318 // intro, castlevania 2. Added by Gonetz
14319 // (1-t0)*prim+t0
14320 {0x02ce02ce, ac_one_sub_t0_mul_prim_add_t0},
14321 // intro, diddy kong racing. Added by Gonetz
14322 // (1-t0)*prim+t0, (cmb-0)*shade+0 **INC**
14323 {0x02ce0f38, ac_t0_mul_shade},
14324 // submitted by Scorpiove, mario party 1
14325 // (0-t0)*prim+t0
14326 {0x02cf02cf, ac_one_sub_prim_mul_t0},
14327 // Pokemon attack, pokemon Stadium (J)
14328 // (t1-t1)*prim+t0, (prim-0)*lod_f+env **INC**
14329 {0x02d20a3b, ac_env},
14330 // Ground, pokemon stadium 2
14331 // (t0-0)*prim+t0
14332 {0x02f902f9, ac_t0_mul_prim},
14333 // GASP Fighters
14334 // (t1-0)*prim+t0, ** INC **
14335 {0x02fa02fa, ac_t1_mul_prim_add_t0},
14336 // foresight attack, Pokemon Stadium 2
14337 // (t1-0)*prim+t0, (cmb-env)*shade+0
14338 {0x02fa0f28, ac__t1_mul_prima_add_t0__sub_env_mul_shade},
14339 // Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14340 // (t1-0)*prim+t0, (cmb-0)*shade+0
14341 {0x02fa0f38, ac__t1_mul_prima_add_t0__mul_shade},
14342 // Paper Mario, fortune teller
14343 // (t1-0)*prim+t0, (cmb-0)*env+0
14344 {0x02fa0f78, ac__t1_mul_prima_add_t0__mul_env},
14345 // Hydro Pump Attack, Pokemon Stadium.
14346 // (shade-0)*prim+t0, (cmb-0)*shade+0
14347 {0x02fc0f38, ac__t0_add_prim_mul_shade__mul_shade},
14348 // map, Ogre Battle 64. Added by Gonetz
14349 // (1-0)*prim+t0
14350 {0x02fe02fe, ac_t0_add_prim},
14351 // borders, Tony Hawk's Pro Skater 2. Added by Gonetz
14352 // (t1-t0)*shade+t0 ** INC **
14353 {0x030a030a, ac_t0_inter_t1_using_shadea},
14354 // Mickey USA
14355 // (t1-t0)*shade+t0, (cmb-0)*prim+0 ** INC **
14356 {0x030a0ef8, ac__t0_inter_t1_using_shadea__mul_prim},
14357 // Rocket Robot in Wheels intro
14358 // (t1-t0)*shade+t0, (cmb-0)*env+0 ** INC **
14359 {0x030a0f78, ac__t0_inter_t1_using_shadea__mul_env},
14360 // water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
14361 // (1-t0)*shade+t0, (cmb-0)*shade+0 ** INC **
14362 {0x030e0f38, ac_t0_mul_shade},
14363 // sky, f-zero x
14364 // (0-t0)*shade+t0
14365 {0x030f030f, ac_one_sub_shade_mul_t0},
14366 // Deku tree from kokiri villiage, zelda
14367 //z (t1-t0)*env+t0, (t1-0)*primlod+cmb
14368 {0x034a01ba, ac_t0_inter_t1_using_enva},
14369 // Hearts, zelda
14370 //z (t1-t0)*env+t0
14371 {0x034a034a, ac_t0_inter_t1_using_enva},
14372 // Faries, zelda
14373 //z (t1-t0)*env+t0, (cmb-0)*prim+0
14374 {0x034a0ef8, ac__t0_inter_t1_using_enva__mul_prim},
14375 // zelda, waterfall. Added by Gonetz
14376 //z (t1-t0)*env+t0, (cmb-0)*shade+0
14377 {0x034a0f38, ac__t0_inter_t1_using_enva__mul_shade},
14378 // pokemon stadium 1. Added by Gonetz
14379 //(t1-t0)*env+t0, (cmb-0)*primlod+0
14380 {0x034a0fb8, ac__t0_inter_t1_using_enva__mul_primlod},
14381 // fruits, Yoshi Story. Added by Gonetz
14382 //(prim-t0)*env+t0
14383 {0x034b034b, ac_prim_sub_t0_mul_env_add_t0},
14384 // window, Rayman2. Added by Gonetz
14385 //(1-t0)*env+t0
14386 {0x034e034e, ac_one_sub_t0_mul_env_add_t0},
14387 // menu, PokemonStadium1, [Raziel64]
14388 //(1-t0)*env+t0, (cmb-0)*shade+0 ** INC **
14389 {0x034e0f38, ac_t0_mul_shade},
14390 // Ganon's sword swinging, zelda
14391 // (t0-t1)*env+t0, (cmb-0)*prim+0 ** INC **
14392 {0x03510ef8, ac__t0_sub_t1_mul_enva_add_t0__mul_prim},
14393 // Lave piranha atack, Paper Mario
14394 // (t1-prim)*env+t0, (0-cmb)*t1+0 ** INC **
14395 {0x035a0e87, ac_t0_mul_t1},
14396 // Reflected fire at kotake & koume's, zelda
14397 // (t0-1)*env+t0, (cmb-0)*prim+0 ** INC **
14398 {0x03710ef8, ac__t0_sub_one_mul_enva_add_t0__mul_prim},
14399 // thing that escapes from the well, zelda
14400 // (t1-1)*env+t0 ** INC **
14401 {0x03720372, ac_t1_sub_one_mul_enva_add_t0},
14402 // Sword charge, zelda
14403 // (t1-1)*env+t0, (cmb-0)*prim+0
14404 {0x03720ef8, ac__t1_sub_one_mul_enva_add_t0__mul_prim},
14405 // Gannon hitting the ground, zelda
14406 // (t1-1)*env+t0, (cmb-0)*shade+0 ** INC **
14407 {0x03720f38, ac__t1_sub_one_mul_enva_add_t0__mul_shade},
14408 // Tony Hawk's Pro Skater 3. Added by Gonetz
14409 // (t0-0)*env+t0
14410 {0x03790379, ac_t0_mul_env},
14411 // paper mario. Added by Gonetz
14412 // (t0-0)*env+t0, (cmb-0)*prim+0
14413 {0x03790ef8, ac_t0_mul_prim},
14414 // pads, Pokemon Stadium 2. Added by Gonetz
14415 // (t1-0)*env+t0, (cmb-0)*prim+env ** INC **
14416 {0x037a0af8, ac__t0_inter_t1_using_enva__mul_prim_add_env},
14417 // attack, Pokemon Stadium 2
14418 // (t1-0)*env+t0, (cmb-t0)*prim+0 ** INC **
14419 {0x037a0ec8, ac__t1_mul_enva_add_t0__mul_prim},
14420 // Ice arrow gfx, zelda
14421 // (t1-0)*env+t0, (cmb-0)*prim+0
14422 {0x037a0ef8, ac__t1_mul_enva_add_t0__mul_prim},
14423 // Scary face move, pokemon stadium 2
14424 // (t1-0)*env+t0, (cmb-prim)*shade+0
14425 {0x037a0f18, ac__t1_mul_enva_add_t0__sub_prim_mul_shade},
14426 // Saria's song, zelda
14427 // (t1-0)*env+t0, (cmb-0)*shade+0
14428 {0x037a0f38, ac__t1_mul_enva_add_t0__mul_shade},
14429 // eye drops bottle, zelda
14430 // (t0-t0)*prim_lodfrac+t0
14431 {0x03890389, ac_t0},
14432 // lighthouse's beam, zelda 2. Added by Gonetz
14433 // (t0-t0)*prim_lodfrac+t0, (cmb-0)*prim+0
14434 {0x03890ef8, ac_t0_mul_prim},
14435 // zelda 2. Added by Gonetz
14436 // (t1-t0)*primlod+t0, (cmb-0)*env+cmb ** INC **
14437 {0x038a0178, ac__t0_inter_t1_using_primlod__mul_env_add__t0_inter_t1_using_primlod},
14438 // Enter name letter background, zelda
14439 //z (t1-t0)*primlod+t0
14440 {0x038a038a, ac_t0_inter_t1_using_primlod},
14441 // Sunny Day, Pokemon Stadium 2
14442 // (t1-t0)*primlod+t0, (cmb-0)*0+prim
14443 {0x038a07f8, ac_prim},
14444 //attack, Pokemon Stadium 2
14445 // (t1-t0)*primlod+t0, (cmb-env)*shade+shade ** INC **
14446 {0x038a0928, ac__t0_inter_t1_using_primlod__sub_env_mul_shade_add_shade},
14447 // blastcorps, unimp log. Added by Gonetz
14448 // (t1-t0)*primlod+t0, (0-0)*0+shade **INC**?
14449 {0x038a09ff, ac_t0_inter_t1_using_primlod},
14450 // pokemon attack, pokemon monsters (J)
14451 // (t1-t0)*primlod+t0, (cmb-0)*prim+env
14452 {0x038a0af8, ac__t0_inter_t1_using_primlod__mul_prim_add_env},
14453 // sky, PGA European Tour
14454 // (t1-t0)*primlod+t0, (0-0)*0+1
14455 {0x038a0dff, ac_one},
14456 // Ice surrounding enemy, zelda
14457 // (t1-t0)*primlod+t0, (env-0)*lodf+0
14458 {0x038a0e3d, ac__t0_inter_t1_using_primlod__mul_env},
14459 // the bridge out side the mountain smithy shop, zelda 2 [Ogy]. Added by Gonetz
14460 // (t1-t0)*primlod+t0, (cmb-0)*t0+0
14461 {0x038a0e78, ac_t0_inter_t1_using_primlod},
14462 // zelda 2, [Ogy]. Added by Gonetz
14463 // (t1-t0)*primlod+t0, (cmb-0)*t1+0
14464 {0x038a0eb8, ac_t0_inter_t1_using_primlod},
14465 // Kirby's pool, smash bros
14466 // (t1-t0)*primlod+t0, (cmb-0)*prim+0
14467 {0x038a0ef8, ac__t0_inter_t1_using_primlod__mul_prim},
14468 // Samus stage fire, smash bros
14469 // (t1-t0)*primlod+t0, (cmb-0)*shade+0
14470 {0x038a0f38, ac__t0_inter_t1_using_primlod__mul_shade},
14471 // something about ice, zelda
14472 // (t1-t0)*primlod+t0, (cmb-0)*env+0
14473 {0x038a0f78, ac__t0_inter_t1_using_primlod__mul_env},
14474 // Blast Corps. Added by Gonetz
14475 // (t1-t0)*primlod+t0, (shade-0)*env+0
14476 {0x038a0f7c, ac_env_mul_shade},
14477 // goals, J. League Tactics Soccer. Added by Gonetz
14478 // (prim-t0)*primlod+t0 ** INC **
14479 {0x038b038b, ac_t0},
14480 // zelda 2, [Ogy]. Added by Gonetz
14481 // (t0-t1)*primlod+t0, (cmb-0)*prim+0
14482 {0x03910ef8, ac__t0_sub_t1_mul_primlod_add_t0__mul_prim},
14483 // a plane in the entrance to the mountain village zelda 2, [Ogy]. Added by Gonetz
14484 // (t1-t1)*primlod+t0, (cmb-0)*prim+0 ** INC **?
14485 {0x03920ef8, ac_t0_mul_prim},
14486 // zelda 2. Added by Gonetz
14487 // (t1-prim)*primlod+t0, (cmb-0)*prim+0 ** INC **
14488 {0x039a0ef8, ac__t1_sub_prim_mul_primlod_add_t0__mul_prim},
14489 // zelda 2. Added by Gonetz
14490 // (t1-shade)*primlod+t0, (cmb-0)*shade+0 ** INC **
14491 {0x03a20f38, ac__t1_sub_shade_mul_primlod_add_t0__mul_shade},
14492 // saffron city, Pokemon Stadium 2
14493 // (t1-1)*primlod+t0, (cmb-0)*0+cmb
14494 {0x03b201f8, ac_t1_sub_one_mul_primlod_add_t0},
14495 // Candle flame in ganon's castle, zelda
14496 // (t1-1)*primlod+t0
14497 {0x03b203b2, ac_t1_sub_one_mul_primlod_add_t0},
14498 // Fire, zelda
14499 //z (t1-1)*primlod+t0, (cmb-0)*prim+0 ** INC **
14500 {0x03b20ef8, ac__t1_sub_one_mul_primlod_add_t0__mul_prim},
14501 // explosion, zelda 2. Added by Gonetz
14502 // (t1-1)*primlod+t0, (t0-0)*prim+0 ** INC **
14503 {0x03b20ef9, ac_t0_mul_prim},
14504 // Din's fire, zelda
14505 // (t1-1)*prim_lodfrac+t0, (cmb-0)*shade+0 ** INC **
14506 {0x03b20f38, ac__t1_sub_one_mul_primlod_add_t0__mul_shade},
14507 // Fire cloud, zelda
14508 // (t1-1)*prim_lodfrac+t0, (cmb-0)*env+0 ** INC **
14509 {0x03b20f78, ac__t1_sub_one_mul_primlod_add_t0__mul_env},
14510 // zelda 2 [Ogy]. Added by Gonetz
14511 // (prim-1)*prim_lodfrac+t0, (cmb-0)*env+0 ** INC **
14512 {0x03b30f78, ac__prim_sub_one_mul_primlod_add_t0__mul_env},
14513 // fairy's spirit, zelda oot
14514 // (t0-0)*primlod+t0
14515 {0x03b903b9, ac_t0_mul_primlod_add_t0},
14516 // Scary face, pokemon stadium 2
14517 // (t0-0)*primlod+t0, (cmb-0)*prim+0
14518 {0x03b90ef8, ac_t0_mul_prim},
14519 // Magnitude attack, Pokemon Stadium 2
14520 // (t0-0)*primlod+t0, (cmb-0)*shade+0
14521 {0x03b90f38, ac__t0_mul_primlod_add_t0__mul_shade},
14522 // Leftovers Recovery, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14523 // (t1-0)*prim_lodfrac+t0, (cmb-env)*prim+0 ** INC **
14524 {0x03ba0ee8, ac__t1_mul_primlod_add_t0__sub_env_mul_prim},
14525 // zelda 2 [Ogy]. Added by Gonetz
14526 // (t1-0)*prim_lodfrac+t0, (cmb-0)*prim+0
14527 {0x03ba0ef8, ac__t1_mul_primlod_add_t0__mul_prim},
14528 // Mega punch attack, Pokemon Stadium 2
14529 // (t1-0)*prim_lodfrac+t0, (cmb-prim)*shade+0
14530 {0x03ba0f18, ac__t1_mul_primlod_add_t0__sub_prim_mul_shade},
14531 // zelda 2 [Ogy]. Added by Gonetz
14532 // (t1-0)*prim_lodfrac+t0, (cmb-0)*shade+0
14533 {0x03ba0f38, ac__t1_mul_primlod_add_t0__mul_shade},
14534 // chuchu monsters, zelda 2 [Ogy]. Added by Gonetz
14535 // (t1-0)*prim_lodfrac+t0, (cmb-0)*env+0
14536 {0x03ba0f78, ac__t1_mul_primlod_add_t0__mul_env},
14537 // Scary face, pokemon stadium 2
14538 // (env-0)*primlod+t0, (cmb-0)*prim+0
14539 {0x03bd0ef8, ac_t0_mul_prim},
14540 // ground, zelda 2. Added by Gonetz
14541 // (t1-t0)*0+t0, (cmb-0)*0+cmb
14542 {0x03ca01f8, ac_t0},
14543 // zelda 2. Added by Gonetz
14544 // (t1-t0)*0+t0, (cmb-0)*prim+0
14545 {0x03ca0ef8, ac_t0_mul_prim},
14546 // smoke in a night, zelda 2. Added by Gonetz
14547 // (t1-t0)*0+t0, (cmb-0)*shade+0
14548 {0x03ca0f38, ac_t0_mul_shade},
14549 //the ice plane out side the mountain smithy shop, zelda 2 [Ogy]. Added by Gonetz
14550 //(t1-1)*0+t0, (cmb-0)*env+0
14551 {0x03f20f78, ac_t0_mul_env},
14552 //something on level 5, Kirby64 [Raziel64]
14553 //(t0-0)*0+t0
14554 {0x03f903f9, ac_t0},
14555 //spider house, zelda 2 [Ogy]. Added by Gonetz
14556 //(t0-0)*0+t0, (cmb-0)*prim+0
14557 {0x03f90ef8, ac_t0_mul_prim},
14558 //Darmani's fire spin, zelda 2 [Ogy]. Added by Gonetz
14559 //(t1-0)*0+t0, (cmb-0)*prim+0
14560 {0x03fa0ef8, ac_t0_mul_prim},
14561 // headlight, beetle adventure racing. Added by Gonetz
14562 //(1-0)*0+t0
14563 {0x03fe03fe, ac_t0},
14564 // player, super bowling
14565 // (0-0)*0+t0,
14566 {0x03ff0000, ac_t0},
14567 // Ghost's lantern, zelda
14568 // (0-0)*0+t0, (t1-0)*prim_lod+cmb
14569 {0x03ff01ba, ac_t1_mul_primlod_add_t0},
14570 // Hand cursor, mario
14571 //z (0-0)*0+t0
14572 {0x03ff03ff, ac_t0},
14573 // Taz express. Added by Gonetz
14574 // (0-0)*0+t0, (0-0)*0+t1
14575 {0x03ff05ff, ac_t0},
14576 // powder keg, zelda2. Added by Gonetz
14577 // (0-0)*0+t0, (0-0)*0+prim
14578 {0x03ff07ff, ac_t0},
14579 // water, Spacestation Silicon Valley. Added by Gonetz
14580 // (0-0)*0+t0, (0-0)*0+shade
14581 {0x03ff09ff, ac_t0},
14582 // Characters, Ogre Battle. Added by Gonetz.
14583 // (0-0)*0+t0, (cmb-0)*prim+env
14584 {0x03ff0af8, ac_t0_mul_prim_add_env},
14585 // Monster truck madness intro. Added by Gonetz
14586 // (0-0)*0+t0, (0-0)*0+env
14587 {0x03ff0bff, ac_t0},
14588 // Battlezone
14589 // (0-0)*0+t0, (0-0)*0+1
14590 {0x03ff0dff, ac_t0},
14591 // Zoras, zelda
14592 // (0-0)*0+t0, (env-0)*lodf+0
14593 {0x03ff0e3d, ac_env},
14594 // logo, v-rally 99
14595 // (0-0)*0+t0, (prim-0)*t0+0
14596 {0x03ff0e7b, ac_t0_mul_prim},
14597 // intro, WWF-War Zone
14598 // (0-0)*0+t0, (env-0)*t0+0
14599 {0x03ff0e7d, ac_t0_mul_env},
14600 // Window, starfox
14601 //z (0-0)*0+t0, (cmb-0)*prim+0
14602 {0x03ff0ef8, ac_t0_mul_prim},
14603 //beetle adventure racing. Added by Gonetz
14604 // (0-0)*0+t0, (cmb-0)*shade+0
14605 {0x03ff0f38, ac_t0_mul_shade},
14606 // Wonder Project J2 logo. Added by Gonetz
14607 // (0-0)*0+t0, (t0-0)*shade+0
14608 {0x03ff0f39, ac_t0_mul_shade},
14609 // Saria's suit, zelda
14610 // (0-0)*0+t0, (cmb-0)*env+0
14611 {0x03ff0f78, ac_t0_mul_env},
14612 // Pokemon Stadium 2, [Jeremy]. Added by Gonetz
14613 // (0-0)*0+t0, (cmb-0)*primlod+0
14614 {0x03ff0fb8, ac_t0_mul_primlod},
14615 // Tony Hawk's Pro Skater. Added by Gonetz
14616 // (0-0)*0+t0, (0-0)*0+0
14617 {0x03ff0fff, ac_zero},
14618 // Spider Web attack, Pokemon Stadium 2.
14619 // (t0-t1)*t0+t1, (cmb-0)*prim+cmb **INC**
14620 {0x045100f8, ac__t1_inter_t0_using_t0a__mul_prim_add__t1_inter_t0_using_t0a},
14621 // Powered Star Beam, Paper Mario. Added by Gonetz
14622 // (t0-t1)*t0+t1, (cmb-0)*prim+0 **INC**
14623 {0x04510ef8, ac__t1_inter_t0_using_t0a__mul_prim},
14624 // Deadly Arts logo. Added by Gonetz
14625 // (1-0)*t0+t1, (1-0)*prim+cmb
14626 {0x047e00fe, ac__t0_add_t1__add_prim},
14627 // Spiderman. Added by Gonetz
14628 // (1-0)*t0+t1
14629 {0x047e047e, ac_t0_add_t1},
14630 // water, Dobutsu no Mori. Added by Gonetz
14631 // (1-0)*t0+t1, (cmb-0)*primlod+prim
14632 {0x047e07b8, ac__t0_add_t1__mul_primlod_add_prim},
14633 // paper mario. Added by Gonetz
14634 // (1-t0)*t1+t1, (cmb-0)*t1+0 **INC**
14635 {0x048e0eb8, ac_t0_mul_t1},
14636 // Pokemon Stadium 2. Added by Gonetz
14637 // (t0-prim)*t1+t1, (cmb-0)*shade+0 **INC**
14638 {0x04990f38, ac_t1_mul_shade},
14639 // waterfall, Dobutsu no Mori. Added by Gonetz
14640 // (t0-0)*t1+t1
14641 {0x04b904b9, ac_t0_mul_t1_add_t1},
14642 // light, Dobutsu no Mori. Added by Gonetz
14643 // (t0-0)*t1+t1, (cmb-0)*primlod+0 ** INC **
14644 {0x04b90fb8, ac__t0_add_t1__mul_primlod},
14645 // lava, beetle adventure racing
14646 // (t1-0)*t1+t1, (cmb-0)*shade+0 ** INC **
14647 {0x04ba0f38, ac__t1_mul_t1_add_t1__mul_shade},
14648 // wheels, F1 World Grand Prix. Added by Gonetz
14649 // (t0-t1)*prim+t1
14650 {0x04d104d1, ac_t1_inter_t0_using_prima},
14651 // intro, castlevania 2. Added by Gonetz
14652 // (t0-t1)*prim+t1, (cmb-0)*shade+0
14653 {0x04d10f38, ac__t1_inter_t0_using_prima__mul_shade},
14654 // flame, castlevania 2. Added by Gonetz
14655 // (t0-t1)*prim+t1, (cmb-0)*env+0
14656 {0x04d10f78, ac__t1_inter_t0_using_prima__mul_env},
14657 // walls, beetle adventure racing. Added by Gonetz
14658 // (t0-0)*prim+t1 **INC**
14659 {0x04f904f9, ac_t0_mul_prim},
14660 // Reflect pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14661 // (t0-0)*prim+t1, (cmb-0)*prim+env **INC**
14662 {0x04f90af8, ac__t0_add_t1__mul_prim_add_env},
14663 // Psychic pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14664 // (t0-0)*prim+t1, (cmb-0)*shade+0 **INC**
14665 {0x04f90f38, ac__t0_add_t1__mul_shade},
14666 // Rayman2. Added by Gonetz
14667 // (0-0)*shade+t1, (cmb-0)*env+0
14668 {0x053f0f78, ac_t1_mul_env},
14669 // Ground at kotake & koume, zelda
14670 // (t1-t0)*env+t1, (cmb-0)*prim+0 ** INC **
14671 {0x054a0ef8, ac__t1_sub_t0_mul_enva_add_t1__mul_prim},
14672 // Tony Hawk's Pro Skater. Added by Gonetz
14673 // (t0-t1)*env+t1
14674 {0x05510551, ac_t1_inter_t0_using_enva},
14675 // Shiek's disappearance, zelda
14676 // (t0-1)*env+t1
14677 {0x05710571, ac_t0_sub_one_mul_enva_add_t1},
14678 // Kotake or koume's magic poof, zelda
14679 // (t0-1)*env+t1, (cmb-0)*prim+0 ** INC **
14680 {0x05710ef8, ac__t0_sub_one_mul_enva_add_t1__mul_prim},
14681 // Gauntlet Legends intro
14682 // (t0-0)*env+t1, (cmb-0)*prim+0 ** INC **
14683 {0x05790ef8, ac__t0_add_t1__mul_prim},
14684 // Zelda opening door, zelda
14685 // (t0-0)*env+t1, (cmb-0)*shade+0
14686 {0x05790f38, ac_t1_mul_shade},
14687 // paper mario. Added by Gonetz
14688 // (t1-0)*env+t1, (cmb-0)*prim+0 ** INC **
14689 {0x057a0ef8, ac_t1_mul_prim},
14690 // pokemon attack, Pokemon Stadium 2. Added by Gonetz
14691 // (t0-t1)*prim_lod+t1, (cmb-0)*prim+0
14692 {0x05910ef8, ac__t1_inter_t0_using_primlod__mul_prim},
14693 // Skulltula coin, zelda
14694 // (t0-1)*primlod+t1 ** INC **
14695 {0x05b105b1, ac_t0_mul_t1},
14696 // Bell, Pokemon Stadium 2. Added by Gonetz
14697 // (t0-0)*primlod+t1, (cmb-env)*prim ** INC **
14698 {0x05b90ee8, ac__t0_add_t1__mul_prim},
14699 // intro, Aidyn Chronicles. Added by Gonetz
14700 // (0-cmb)*0+t1, (t1-1)*0+cmb
14701 {0x05c701f2, ac_t1},
14702 // zelda 2 [Ogy]. Added by Gonetz
14703 // (t1-t0)*0+t1, (cmb-0)*prim+0
14704 {0x05ca0ef8, ac_t1_mul_prim},
14705 // beaver's river, zelda 2. Added by Gonetz
14706 // (t1-0)*0+t1, (cmb-0)*prim+0
14707 {0x05fa0ef8, ac_t1_mul_prim},
14708 // Arena, pokemon stadium 2
14709 // (0-0)*0+t1, (0-0)*t0+cmb
14710 {0x05ff007f, ac_t1},
14711 // Ogre Battle, unimp log. Added by Gonetz
14712 // (0-0)*0+t1, (0-0)*0+cmb
14713 {0x05ff05ff, ac_t1},
14714 // lullaby, Paper Mario. Added by Gonetz
14715 // (0-0)*0+t1, (cmb-0)*prim+0
14716 {0x05ff0ef8, ac_t1_mul_prim},
14717 // aerofighter's assault [Ogy]
14718 // (0-0)*0+t1, (cmb-0)*shade+0
14719 {0x05ff0f38, ac_t1_mul_shade},
14720 // magic fist, Rayman2. Added by Gonetz
14721 // (0-0)*0+t1, (cmb-0)*env+0
14722 {0x05ff0f78, ac_t1_mul_env},
14723 // Pokemon selection background, Pokemon stadium 2
14724 // (env-prim)*t0+prim
14725 {0x065d065d, ac_env_sub_prim_mul_t0_add_prim},
14726 // text background, Ganbare Goemon - Mononoke Sugoroku
14727 // (1-prim)*t0+prim
14728 {0x065e065e, ac_one_sub_prim_mul_t0_add_prim},
14729 // shadows, star wars: ep1 racer
14730 // (0-prim)*t0+prim
14731 {0x065f065f, ac_zero_sub_prim_mul_t0_add_prim},
14732 // lava, beetle adventure racing
14733 // (0-1)*t0+prim, (cmb-0)*prim+0 ** INC **
14734 {0x06770ef8, ac_t0_mul_prim},
14735 // menu, Ganbare Goemon - Mononoke Sugoroku
14736 // (t0-0)*t0+prim
14737 {0x06790679, ac_t0_add_prim},
14738 // Water, pokemon stadium 2
14739 // (t1-0)*t0+prim
14740 {0x067a067a, ac_t0_mul_t1_add_prim},
14741 // Smackdown Mall Menu, WWF No Mercy
14742 // (shade-0)*t0+prim
14743 {0x067c067c, ac_t0_mul_shade_add_prim},
14744 // flag, Top Gear Rally 2. Added by Gonetz
14745 // (env-0)*t0+prim
14746 {0x067d067d, ac_t0_mul_env_add_prim},
14747 // Mario Tennis. Added by Gonetz
14748 // (1-0)*t0+prim
14749 {0x067e067e, ac_t0_add_prim},
14750 // sky, PGA European Tour
14751 // (t0-0)*t1+prim
14752 {0x06b906b9, ac_t0_mul_t1_add_prim},
14753 // lava, beetle adventure racing
14754 // (t0-0)*t1+prim, (0-0)*0+1 **INC**?
14755 {0x06b90dff, ac_one},
14756 // Pokemon Stadium 2, [Jeremy]. Added by Gonetz
14757 // (prim-0)*t1+prim
14758 {0x06bb06bb, ac_t1_mul_prim_add_prim},
14759 // pokemon psyattack, Pokemon Stadium 2. Added by Gonetz
14760 // (1-0)*t1+prim, (cmb-0)*env+0
14761 {0x06be0f78, ac_t1_add_prim_mul_env},
14762 // Rush2 2. Added by Gonetz
14763 // (prim-prim)*prim+prim
14764 {0x06db06db, ac_prim},
14765 //Spacestation Silicon Valley intro. Added by Gonetz
14766 // (t1-prim)*shade+prim
14767 // {0x071a071a, ac_t1_mul_shade},
14768 {0x071a071a, ac_t1_sub_prim_mul_shade_add_prim},
14769 //KI logos. Added by Gonetz
14770 // (env-prim)*shade+prim
14771 {0x071d071d, ac_env_sub_prim_mul_shade_add_prim},
14772 // Deadly Arts, arena. Added by Gonetz
14773 // (1-0)*shade+prim
14774 {0x073e073e, ac_prim_add_shade},
14775 // Phantom Gannon's portal, zelda
14776 // (t1-t0)*env+prim, (cmb-0)*shade+0 ** INC **
14777 {0x074a0f38, ac__t0_mul_t1__mul_prim_mul_shade},
14778 // Road rush. Added by Gonetz
14779 // (t0-0)*env+prim
14780 {0x07790779, ac_t0_mul_env_add_prim},
14781 // arena, Pokemon Stadium 2
14782 // (shade-t0)*primlod+prim, (cmb-t0)*shade ** INC **
14783 {0x078c0f08, ac_shade_sub_t0_mul_primlod_add_prim},
14784 // telescope, zelda 2. Added by Gonetz
14785 // (1-t0)*primlod+prim
14786 {0x078e078e, ac_one_sub_t0_mul_primlod_add_prim},
14787 // zelda 2 [Ogy]. Added by Gonetz
14788 // (t0-t1)*primlod+prim, (cmb-0)*t0+0
14789 {0x07910e78, ac_t0_inter_t1_using_primlod},
14790 // Dobutsu no Mori. Added by Gonetz
14791 // (t0-0)*primlod+prim
14792 {0x07b907b9, ac_t0_mul_primlod_add_prim},
14793 // Lock-On attack, Pokemon Stadium 2
14794 // (t1-t0)*0+prim, (cmb-0)*0+cmb
14795 {0x07ca01f8, ac_prim},
14796 // water, DK64
14797 // (0-0)*0+0, (0-t1)*0+prim
14798 {0x07d707d7, ac_prim},
14799 // Menu, megaman
14800 // (1-0)*0+prim
14801 {0x07fe07fe, ac_prim},
14802 // super bowling
14803 //(0-0)*0+prim,
14804 {0x07ff0000, ac_prim},
14805 // menu, Ganbare Goemon - Mononoke Sugoroku
14806 // (0-0)*0+prim, (0-0)*0+t0
14807 {0x07ff03ff, ac_t0},
14808 // Intro background, starfox
14809 //z (0-0)*0+prim
14810 {0x07ff07ff, ac_prim},
14811 // velva boss, JFG
14812 //(0-0)*0+prim, (0-0)*0+env
14813 {0x07ff0bff, ac_env},
14814 // gem, castlevania 2. Added by Gonetz
14815 // (0-0)*0+prim, (cmb-0)*t0+0
14816 {0x07ff0e78, ac_t0_mul_prim},
14817 // text, Tony Hawk's Pro Skater. Added by Gonetz
14818 // (0-0)*0+prim, (cmb-0)*t1+0
14819 {0x07ff0eb8, ac_t1_mul_prim}, //weird, but implementing this makes text unreadable
14820 // zelda 2. Added by Gonetz
14821 // (0-0)*0+prim, (cmb-0)*prim+0
14822 {0x07ff0ef8, ac_prim_mul_prim},
14823 // explosion, Blast Corps. Added by Gonetz
14824 // (0-0)*0+prim, (t0-0)*prim+0
14825 {0x07ff0ef9, ac_t0_mul_prim},
14826 // zelda 2, [Ogy]. Added by Gonetz
14827 // (0-0)*0+prim, (cmb-0)*shade+0
14828 {0x07ff0f38, ac_prim_mul_shade},
14829 // Fox's ears and arms, smash bros
14830 // (0-0)*0+prim, (cmb-0)*env+0
14831 {0x07ff0f78, ac_prim_mul_env},
14832 // monsters, Pokemon Stadium. Added by Gonetz
14833 // (0-0)*0+prim, (cmb-0)*primlod+0
14834 {0x07ff0fb8, ac_prim_mul_primlod},
14835 // Hydro Pump Attack, Pokemon Stadium.
14836 // (1-t1)*t0+shade, (cmb-prim)*shade+0
14837 {0x08560f18, ac__one_sub_t1_mul_t0_add_shade__sub_prim_mul_shade},
14838 // focus, Paper Mario. Added by Gonetz
14839 //(t0-shade)*t0+shade, (cmb-0)*prim+0 * INC **
14840 {0x08610ef8, ac_t0_mul_prim},
14841 // Mario's head, mario //Added by Gonetz
14842 //(prim-shade)*t0+shade
14843 {0x08630863, ac_prim_sub_shade_mul_t0_add_shade},
14844 // Fissure attack, pokemon stadium 2
14845 //(t1-t0)*prim+shade, (cmb-0)*shade+0
14846 {0x08ca0f38, ac__t1_sub_t0_mul_prim_add_shade__mul_shade},
14847 // Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14848 //(t0-t1)*prim+shade, (cmb-0)*shade+0 ** INC **
14849 {0x08d10f38, ac__t0_sub_t1_mul_prim_add_shade__mul_shade},
14850 // ?
14851 //(t0-shade)*prim+shade
14852 {0x08e108e1, ac_t0_mul_prim_add_shade_mul_one_minus_prim},
14853 // Paper Mario
14854 // (t0-prim)*shade+shade, (cmb-0)*env+0
14855 {0x09190f78, ac__t0_sub_prim_mul_shade_add_shade__mul_env},
14856 // pads, Pokemon Stadium 2. Added by Gonetz
14857 // (0-t0)*env+shade, (cmb-0)*prim+0 ** INC **
14858 {0x094f0ef8, ac_one_sub_t0_mul_prim_mul_shade},
14859 // sun rays, Pokemon Stadium 2.
14860 // (shade-0)*env+shade, (cmb-0)*prim+0
14861 {0x097c0ef8, ac_one_plus_env_mul_prim_mul_shade},
14862 // attack, Pokemon Stadium 2.
14863 // (t0-0)*primlod+shade, (cmb-0)*shade+0
14864 {0x09b90f38, ac__t0_mul_primlod_add_shade__mul_shade},
14865 // Huge turtle appearance, zelda 2. Added by Gonetz
14866 // (t1-0)*primlod+shade, (cmb-0)*shade+0 ** INC **
14867 {0x09ba0f38, ac__t1_mul_primlod_add_shade__mul_shade},
14868 // roof, Kirby 64. Added by Gonetz
14869 // (t0-0)*0+shade
14870 {0x09f909f9, ac_shade},
14871 // water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
14872 // (0-0)*0+shade, (cmb-cmb)*lodf+cmb
14873 {0x09ff0000, ac_shade},
14874 // water temple, zelda 2. Added by Gonetz
14875 // (0-0)*0+shade, (cmb-0)*prim+cmb
14876 {0x09ff00f8, ac_prim_mul_shade_add_shade},
14877 // damaged car, SCARS. Added by Gonetz
14878 // (0-0)*0+shade, (t0-t1)*primlod+prim ** INC **
14879 {0x09ff0791, ac_t0_mul_primlod_add_prim},
14880 // Hyrule castle gate, zelda
14881 //z (0-0)*0+shade, (0-0)*0+prim
14882 {0x09ff07ff, ac_prim},
14883 // Super Mario 64 logo
14884 //z (0-0)*0+shade
14885 {0x09ff09ff, ac_shade},
14886 // terrain, SCARS. Added by Gonetz
14887 // (0-0)*0+shade, (0-0)*0+1
14888 {0x09ff0dff, ac_one},
14889 // terrain, SCARS. Added by Gonetz
14890 // (0-0)*0+shade, (t0-0)*t1+0
14891 {0x09ff0eb9, ac_t0_mul_t1},
14892 // N64 logo, Aidyn Chronicles. Added by Gonetz
14893 // (0-0)*0+shade, (cmb-0)*prim+0
14894 {0x09ff0ef8, ac_prim_mul_shade},
14895 // birds?, custom robo. Added by Gonetz
14896 // (0-0)*0+shade, (cmb-0)*shade+0
14897 {0x09ff0f38, ac_shade},
14898 // sky, Glover, [Raziel64]. Added by Gonetz
14899 // (0-0)*0+shade, (t0-0)*shade+0
14900 {0x09ff0f39, ac_t0_mul_shade},
14901 // Hand, smash bros
14902 // (0-0)*0+shade, (cmb-0)*env+0
14903 {0x09ff0f78, ac_env_mul_shade},
14904 // Conker's helicopter tail, CBFD
14905 // (0-0)*0+shade, (shade-0)*env+0
14906 {0x09ff0f7c, ac_env_mul_shade},
14907 // menu, PokemonStadium1, [Raziel64]
14908 // (0-0)*0+shade, (cmb-0)*primlod+0
14909 {0x09ff0fb8, ac_primlod_mul_shade},
14910 // Link's sword slashing, smash bros
14911 // (prim-env)*t0+env
14912 {0x0a6b0a6b, ac_prim_sub_env_mul_t0_add_env},
14913 // Reflected beam at kotake & koume's, zelda
14914 // (prim-env)*t0+env, (cmb-0)*prim+0 ** INC **
14915 {0x0a6b0ef8, ac_t0_mul_prim},
14916 // teleporter, Spacestation Silicon Valley. Added by Gonetz
14917 // (prim-env)*t0+env, (cmb-0)*shade+0 ** INC **
14918 {0x0a6b0f38, ac_t0_mul_shade},
14919 // Ridge Racer, unimp log. Added by Gonetz
14920 // (prim-env)*t0+env, (cmb-0)*primlod+0
14921 {0x0a6b0fb8, ac_prim_sub_env_mul_t0_add_env},
14922 // Kotake or koume's hair, zelda
14923 // (prim-0)*t0+env
14924 {0x0a7b0a7b, ac_t0_mul_prim_add_env},
14925 // menu, doubut no mori
14926 // (1-0)*t0+env
14927 {0x0a7e0a7e, ac_t0_add_env},
14928 // Grass, mario golf
14929 // (env-shade)*t1+env, (0-0)*0+1
14930 {0x0aa50dff, ac_one},
14931 // Ridge Racer, cars select. Added by Gonetz
14932 // (prim-env)*t1+env
14933 {0x0aab0aab, ac_prim_sub_env_mul_t1_add_env},
14934 // text, monster truck madness
14935 // (prim-env)*t1+env, (cmb-0)*t1+0
14936 {0x0aab0eb8, ac_t1_mul_env},
14937 // zelda 2 [Ogy]. Added by Gonetz
14938 // (1-0)*t1+env, (0-0)*0+cmb
14939 //{0x0abe0abe, ac_one},
14940 {0x0abe0abe, ac_t1_add_env},
14941 // arena, Pokemon Stadium 2. Added by Gonetz
14942 // (1-t0)*prim+env, (cmb-0)*shade+0
14943 {0x0ace0f38, ac_one_sub_t0_mul_prim_mul_shade},
14944 // intro, Bomberman 64 - 2. Added by Gonetz
14945 // (t0-env)*prim+env
14946 {0x0ae90ae9, ac_t0_sub_env_mul_prim_add_env},
14947 // N64 logo, Ogre Battle. Added by Gonetz
14948 // (t0-0)*prim+env
14949 {0x0af90af9, ac_t0_mul_prim_add_env},
14950 // girls, PD intro. Added by Gonetz
14951 // (t0-env)*shade+env ** INC **
14952 {0x0b290b29, ac_t0_sub_env_mul_shadea_add_env},
14953 // Text, Mia Soccer. Added by Gonetz
14954 // (t0-env)*shade+env, (cmb-0)*lod_fraction+0 ** INC **
14955 {0x0b290e38, ac_t0_sub_env_mul_shadea_add_env},
14956 // shadows, Mario Tennis. Added by Gonetz
14957 // (prim-env)*shade+env, (0-cmb)*t1+cmb ** INC **
14958 {0x0b2b0087, ac_prim_sub_env_mul_shade_add_env_mul_t1},
14959 // lamppost?, Ridge Racer. Added by Gonetz
14960 // (prim-env)*shade+env, (0-0)*0+cmb
14961 {0x0b2b0b2b, ac_prim_sub_env_mul_shade_add_env},
14962 // ground, zelda2. Added by Gonetz
14963 // (1-env)*shade+env, (t1-0)*prim+0
14964 {0x0b2e0efa, ac_t1_mul_prim},
14965 // GASP Fighters
14966 // (t0-0)*shade+env
14967 {0x0b390b39, ac_t0_mul_shade_add_env},
14968 // destroying stuff, golden eye
14969 // (1-0)*shade+env
14970 {0x0b3e0b3e, ac_env_add_shade},
14971 // Torches, Paper Mario. Added by Gonetz
14972 // (t0-t1)*env+env, (0-0)*0+1
14973 {0x0b510dff, ac_t0_sub_t1_mul_env_add_env},
14974 // Mini Racers
14975 // (t0-0)*primlod+env
14976 {0x0bb90bb9, ac_t0_mul_primlod_add_env},
14977 // International Track and Field 2000. Added by Gonetz
14978 // (t0-0)*0+env
14979 {0x0bf90bf9, ac_env},
14980 // TM, mario
14981 //z (0-0)*0+env
14982 {0x0bff0bff, ac_env},
14983 // rancho monster, zelda2. Added by Gonetz
14984 // (0-0)*0+env, (cmb-0)*t1+0
14985 {0x0bff0eb8, ac_t1_mul_env},
14986 // Rocket Robot in Wheels intro
14987 // (0-0)*0+env, (cmb-0)*prim+0
14988 {0x0bff0ef8, ac_prim_mul_env},
14989 // Background, Pokemon Snap
14990 // (prim-env)*t0+1
14991 {0x0c6b0c6b, ac_prim_sub_env_mul_t0_add_one},
14992 // Mario Golf
14993 // (0-1)*t0+1
14994 {0x0c770c77, ac_one_sub_t0},
14995 // flame, paper mario. Added by Gonetz
14996 // (1-t0)*t1+1, (cmb-t1)*t1+t1
14997 {0x0c8e0490, ac_t0_mul_t1},
14998 // hall of fame, Pokemon Stadium
14999 // (t0-1)*prim+1, (cmb-0)*env+0
15000 {0x0cf10f78, ac__one_inter_t0_using_prim__mul_env},
15001 // Ring boundary, dual heroes
15002 // (0-1)*prim+1
15003 {0x0cf70cf7, ac_one_sub_prim},
15004 // Kirby64, level 6, [Raziel64]
15005 // (0-0)*prim+1
15006 {0x0cff0cff, ac_one},
15007 // Mystical Ninja
15008 // (0-1)*env+1
15009 {0x0d770d77, ac_one},
15010 // Deku shield in shop, zelda
15011 // (1-1)*primlod+1
15012 {0x0db60db6, ac_one},
15013 // water near gorons willage. Added by Gonetz
15014 // (t1-t0)*0+1, (cmb-0)*prim+0
15015 {0x0dca0ef8, ac_prim},
15016 // background, kirby 64. Added by Gonetz
15017 // (t0-0)*0+1
15018 {0x0df90df9, ac_one},
15019 // kirby 64. Added by Gonetz
15020 // (1-0)*0+1
15021 {0x0dfe0dfe, ac_one},
15022 // background on level 2-1, kirby 64 [Raziel64]. Added by Gonetz
15023 // (1-0)*0+1, (0-0)*0+1
15024 {0x0dfe0dff, ac_one},
15025 // duck dodgers intro. Added by Gonetz
15026 // (0-0)*0+1, (cmb-cmb)*primlod+cmb
15027 {0x0dff0000, ac_one},
15028 // duck dodgers intro. Added by Gonetz
15029 // (0-0)*0+1, (0-0)*0+t1 **INC**?
15030 {0x0dff05ff, ac_t1},
15031 // ?
15032 // (0-0)*0+1, (0-0)*0+prim
15033 {0x0dff07ff, ac_prim},
15034 // arena, custom robo. Added by Gonetz
15035 // (0-0)*0+1, (0-0)*0+shade
15036 {0x0dff09ff, ac_shade},
15037 // field, Mario Golf
15038 // (0-0)*0+1, (1-env)*shade+env
15039 {0x0dff0b2e, ac_one_sub_env_mul_shade_add_env},
15040 // battle tanks 2 [Ogy]
15041 // (0-0)*0+1, (0-0)*0+env
15042 {0x0dff0bff, ac_env},
15043 // helmet, F1 World Grand Prix. Added by Gonetz
15044 // (0-0)*0+1, (0-1)*0+1
15045 {0x0dff0df7, ac_one},
15046 // secret in level 3-4, Kirby64, [Raziel64]
15047 // (0-0)*0+1, (cmb-0)*0+1
15048 {0x0dff0df8, ac_one},
15049 // Menu options, starfox
15050 // (0-0)*0+1
15051 {0x0dff0dff, ac_one},
15052 // Water, zelda
15053 //z (0-0)*0+primlod, (cmb-0)*prim+0
15054 {0x0dff0ef8, ac_prim},
15055 // Desert ground, zelda
15056 // (0-0)*0+1, (cmb-0)*shade+0
15057 {0x0dff0f38, ac_shade},
15058 // Characters, smash bros
15059 // (0-0)*0+1, (cmb-0)*env+0
15060 {0x0dff0f78, ac_env},
15061 // end of level 3-4, Kirby64, [Raziel64]
15062 // (0-0)*0+1, (cmb-0)*0+0
15063 {0x0dff0ff8, ac_zero},
15064 // Kirby64
15065 // (0-0)*0+1, (0-0)*0+0
15066 {0x0dff0fff, ac_zero},
15067 // floor, Spiderman [Raziel64]. Added by Gonetz
15068 // (env-t1)*t0+0 ** INC **
15069 {0x0e550e55, ac_t0_mul_env},
15070 // skeleton, castlevania 2. Added by Gonetz
15071 // (1-prim)*t0+0
15072 {0x0e5e0e5e, ac_one_sub_prim_mul_t0},
15073 // player select, Forsaken [Raziel64]. Added by Gonetz
15074 // (prim-shade)*t0+0
15075 {0x0e630e63, ac_prim_sub_shade_mul_t0},
15076 // castlevania 2 [Ogy]. Added by Gonetz
15077 // (1-shade)*t0+0
15078 {0x0e660e66, ac_one_sub_shade_mul_t0},
15079 // GoldenEye: Helicopter rotors
15080 // (shade-env)*t0+0, (1-0)*prim+cmb
15081 {0x0e6c00fe, ac_shade_sub_env_mul_t0_add_prim},
15082 // background, level3-4, Kirby64, [Raziel64]
15083 // (shade-env)*t0+0
15084 {0x0e6c0e6c, ac_shade_sub_env_mul_t0},
15085 // Goemon, mystical ninja. Added by Gonetz
15086 // (1-env)*t0+0
15087 {0x0e6e0e6e, ac_one_sub_env_mul_t0},
15088 // fist attack, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
15089 // (t0-0)*t0+0, (t1-cmb)*prim+cmb
15090 {0x0e7900c2, ac_t0_inter_t1_using_prima},
15091 // Clay Fighter [Ogy]. Added by Gonetz
15092 // (t0-0)*t0+0
15093 {0x0e790e79, ac_t0_mul_t0},
15094 // Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
15095 // (t0-0)*t0+0, (prim-0)*t1+0
15096 {0x0e790ebb, ac_t1_mul_prim},
15097 // zelda 2 [Ogy]. Added by Gonetz
15098 // (t0-0)*t0+0, (cmb-0)*prim+0
15099 {0x0e790ef8, ac_t0_mul_prim},
15100 // zelda 2. Added by Gonetz
15101 // (t0-0)*t0+0, (cmb-0)*shade+0
15102 {0x0e790f38, ac_t0_mul_shade},
15103 // zelda 2. Added by Gonetz
15104 // (t0-0)*t0+0, (cmb-0)*env+0
15105 {0x0e790f78, ac_t0_mul_env},
15106 // the ice plane just before the entrance to gorons village (where tingle is}, zelda 2 [Ogy]. Added by Gonetz
15107 // (t1-0)*t0+0, (cmb-0)*0+cmb
15108 {0x0e7a01f8, ac_t0_mul_t1},
15109 // paper mario. Added by Gonetz
15110 // (t1-0)*t0+0, (cmb-env)*prim+env ** INC **
15111 {0x0e7a0ae8, ac_t1_mul_prim},
15112 // mini games quiz monitor backround, Pokemon Stadium 2
15113 // (t1-0)*t0+0, (0-0)*0+1
15114 {0x0e7a0dff, ac_one},
15115 // Tony Hawk's Pro Skater. Added by Gonetz
15116 // (t1-0)*t0+0, (cmb-0)*t0+0
15117 {0x0e7a0e78, ac_t0_mul_t1},
15118 // bike trace, xg2. Added by Gonetz
15119 // (t1-0)*t0+0
15120 {0x0e7a0e7a, ac_t0_mul_t1},
15121 // Kotake & koume defeated, zelda
15122 // (t1-0)*t0+0, (cmb-0)*prim+0
15123 {0x0e7a0ef8, ac__t0_mul_t1__mul_prim},
15124 // Magnitude, pokemon stadium 2
15125 // (t1-0)*t0+0, (cmb-env)*shade+0
15126 {0x0e7a0f28, ac__t0_mul_t1__mul_env_mul_shade},
15127 // Bongo Bongo, zelda
15128 // (t1-0)*t0+0, (cmb-0)*shade+0
15129 {0x0e7a0f38, ac__t0_mul_t1__mul_shade},
15130 // Dobutsu_no_Mori, waterfall
15131 // (t1-0)*t0+0, (cmb-0)*prim_lod+0
15132 {0x0e7a0fb8, ac__t0_mul_t1__mul_primlod},
15133 // Back of doors, megaman
15134 // (prim-0)*t0+0, (cmb-0)*lodfrac+0
15135 {0x0e7b0e38, ac_t0_mul_prim},
15136 // Karts, mario kart
15137 //z (prim-0)*t0+0
15138 {0x0e7b0e7b, ac_t0_mul_prim},
15139 // paper mario. Added by Gonetz
15140 // (prim-0)*t0+0, (t0-0)*prim+0
15141 {0x0e7b0ef9, ac_t0_mul_prim},
15142 // Table, mace
15143 // (prim-0)*t0+0, (cmb-0)*shade+0
15144 {0x0e7b0f38, ac_t0_mul_prim_mul_shade},
15145 // lamp shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
15146 // (shade-0)*t0+0, (cmb-cmb)*lodf+cmb
15147 {0x0e7c0000, ac_t0_mul_shade},
15148 // Game logo, Aerofighters Assault [Raziel64]
15149 //(shade-0)*t0+0, (0-0)*0+1
15150 {0x0e7c0dff, ac_one},
15151 // Higher sky, waverace
15152 //z (shade-0)*t0+0
15153 {0x0e7c0e7c, ac_t0_mul_shade},
15154 // duck dodgers, intro. Added by Gonetz
15155 // (shade-0)*t0+0, (cmb-0)*prim+0
15156 {0x0e7c0ef8, ac_t0_mul_prim_mul_shade},
15157 // waterwheel in water temple, zelda 2. Added by Gonetz
15158 // (shade-0)*t0+0, (cmb-0)*env+0
15159 {0x0e7c0f78, ac_t0_mul_env_mul_shade},
15160 // Blowing up mine at bowser's, mario
15161 // (env-0)*t0+0
15162 {0x0e7d0e7d, ac_t0_mul_env},
15163 // castlevania 2, intro. Added by Gonetz
15164 // (1-0)*t0+0
15165 {0x0e7e0e7e, ac_t0},
15166 // moon, castlevania 2. Added by Gonetz
15167 // (1-0)*t0+0, (cmb-0)*prim+0
15168 {0x0e7e0ef8, ac_t0_mul_prim},
15169 //beetle adventure racing. Added by Gonetz
15170 // (1-0)*t0+0, (cmb-0)*shade+0
15171 {0x0e7e0f38, ac_t0_mul_shade},
15172 // lava, beetle adventure racing
15173 // (t0-prim)*t1+0, (0-0)*0+shade ** INC **
15174 {0x0e9909ff, ac_shade},
15175 // Rain Dance, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
15176 // (t0-env)*t1+0, (cmb-0)*0+prim ** INC **
15177 {0x0ea90ef8, ac__t0_mul_t1__mul_prim},
15178 // Duck Dodgers Starring Daffy Duck text background
15179 // (t0-0)*t1+0, (shade-cmb)*prim+cmb
15180 {0x0eb900c4, ac_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade},
15181 // torches, pokemon stadium 2
15182 // (t0-0)*t1+0, (cmb-env)*prim+cmb
15183 {0x0eb900e8, ac__t0_mul_t1__sub_env_mul_prim_add__t0_mul_t1},
15184 // airboarder 64 [Ogy]
15185 // (t0-0)*t1+0, (0-0)*0+prim
15186 {0x0eb907ff, ac_prim},
15187 // explosion, body harvest. Added by Gonetz
15188 // (t0-0)*t1+0, (0-0)*0+shade
15189 {0x0eb909ff, ac_shade},
15190 // Text off top, banjo kazooie
15191 // (t0-0)*t1+0
15192 {0x0eb90eb9, ac_t0_mul_t1},
15193 // smoke, daikatana. Added by Gonetz
15194 // (t0-0)*t1+0, (cmb-0)*prim+0
15195 {0x0eb90ef8, ac__t0_mul_t1__mul_prim},
15196 // Arena, Pokemon Stadium 2.
15197 // (t0-0)*t1+0, (cmb-prim)*shade+0
15198 {0x0eb90f18, ac__t0_mul_t1__sub_prim_mul_shade},
15199 // Water, pilotwings
15200 // (t0-0)*t1+0, (cmb-0)*shade+0
15201 {0x0eb90f38, ac__t0_mul_t1__mul_shade},
15202 // Tony Hawk's Pro Skater. Added by Gonetz
15203 // (t0-0)*t1+0, (cmb-0)*env+0
15204 {0x0eb90f78, ac__t0_mul_t1__mul_env},
15205 // light from window, Dobutsu no Mori. Added by Gonetz
15206 // (t0-0)*t1+0, (cmb-0)*primlod+0
15207 {0x0eb90fb8, ac__t0_mul_t1__mul_primlod},
15208 // chandelier in spider house, zelda 2. Added by Gonetz
15209 // (t1-0)*t1+0, (cmb-0)*prim+0
15210 {0x0eba0ef8, ac_t1_mul_prim},
15211 // cars, ridge racer. Added by Gonetz
15212 // (prim-0)*t1+0, (0-0)*0+1
15213 {0x0ebb0dff, ac_t1_mul_prim},
15214 // aerofighter's assault [Ogy]
15215 // (prim-0)*t1+0
15216 {0x0ebb0ebb, ac_t1_mul_prim},
15217 // tire trace, beetle adventure racing. Added by Gonetz
15218 // (shade-0)*t1+0
15219 {0x0ebc0ebc, ac_t1_mul_shade},
15220 // smoke, Starshot. Added by Gonetz
15221 // (env-0)*t1+0
15222 {0x0ebd0ebd, ac_t1_mul_env},
15223 // lots of things, goldeneye
15224 // (1-0)*t1+0, (0-0)*0+shade
15225 {0x0ebe09ff, ac_shade},
15226 // zelda 2 [Ogy]. Added by Gonetz
15227 // (1-0)*t1+0, (cmb-0)*prim+0
15228 {0x0ebe0ef8, ac_t1_mul_prim},
15229 // walls, perfect dark. Added by Gonetz
15230 // (1-0)*t1+0, (cmb-0)*shade+0
15231 {0x0ebe0f38, ac_t1_mul_shade},
15232 // sand, perfect dark. Added by Gonetz
15233 // (1-0)*t1+0, (cmb-0)*env+0
15234 {0x0ebe0f78, ac_t1_mul_env},
15235 // light, Ridge Racer. Added by Gonetz
15236 // (1-t0)*prim+0
15237 {0x0ece0ece, ac_one_sub_t0_mul_prim},
15238 // exaust, star wars ep1 racer
15239 // (1-t0)*prim+0, (cmb-0)*shade+0
15240 {0x0ece0f38, ac_one_sub_t0_mul_primshade},
15241 // iguana, Forsaken, [Raziel64]. Added by Gonetz
15242 // (t0-shade)*prim+0
15243 {0x0ee10ee1, ac_t0_sub_shade_mul_prim},
15244 // stands, NASCAR 2000
15245 // (prim-shade)*prim+0
15246 {0x0ee30ee3, ac_prim_sub_shade_mul_prim},
15247 // arena, Pokemon Stadium 2. Added by Gonetz
15248 // (t0-env)*prim+0 ** INC **
15249 {0x0ee90ee9, ac_t0_mul_prim},
15250 // lure, bass rush
15251 // (t0-0)*prim+0, (cmb-cmb)*lodf+cmb
15252 {0x0ef90000, ac_t0_mul_prim},
15253 // explosion, body harvest. Added by Gonetz
15254 // (t0-0)*prim+0, (t0-0)*env+cmb
15255 {0x0ef90179, ac_prim_add_env_mul_t0},
15256 // frog's eyes, zelda
15257 // (t0-0)*prim+0, (1-1)*prim_lod+cmb
15258 {0x0ef901b6, ac_t0_mul_prim},
15259 // Monster truck madness intro. Added by Gonetz
15260 // (t0-0)*prim+0, (cmb-0)*prim_lod+cmb ** INC **
15261 {0x0ef901b8, ac_t0_mul_prim},
15262 // Road, zelda
15263 //z (t0-0)*prim+0, (t1-0)*primlod+cmb
15264 {0x0ef901ba, ac__t0_mul_prim__add__t1_mul_primlod},
15265 // Track, wipeout. Addded by Gonetz
15266 // (t0-0)*prim+0, (0-0)*0+prim
15267 {0x0ef907ff, ac_t0_mul_prim},
15268 // magic stuff, buck bumble. Added by Gonetz
15269 // (t0-0)*prim+0, (cmb-0)*prim+0
15270 {0x0ef90ef8, ac_t0_mul_prim_mul_prim},
15271 // The mario face, mario
15272 //z (t0-0)*prim+0
15273 {0x0ef90ef9, ac_t0_mul_prim},
15274 // paper mario. Added by Gonetz
15275 // (t0-0)*prim+0, (cmb-0)*shade+0
15276 {0x0ef90f38, ac_t0_mul_prim_mul_shade},
15277 // Pikachu's mouth, smash bros
15278 // (t0-0)*prim+0, (cmb-0)*env+0
15279 {0x0ef90f78, ac_t0_mul_prim_mul_env},
15280 // bomb mask, zelda 2. Added by Gonetz
15281 // (t0-0)*prim+0, (1-0)*env+0
15282 {0x0ef90f7e, ac_t0_mul_prim},
15283 // Charmander's tail, pokemon stadium 2
15284 // (t0-0)*prim+0, (cmb-0)*primlod+0
15285 {0x0ef90fb8, ac_t0_mul_prim_mul_primlod},
15286 // stalactites, Beetle adventure Racing. Added by Gonetz
15287 // (t1-0)*prim+0, (1-cmb)*shade+cmb
15288 {0x0efa0106, ac_one_sub_shade_mul_t1_add_shade},
15289 // Sprites, Ogre Battle. Added by Gonetz
15290 // (t1-0)*prim+0, (0-0)*0+cmb
15291 {0x0efa0efa, ac_t1_mul_prim},
15292 // Something about kotake & koume's combined attack, zelda
15293 // (t1-0)*prim+0, (cmb-0)*shade+0
15294 {0x0efa0f38, ac_t1_mul_prim_mul_shade},
15295 // intro background, bio freaks. Added by Gonetz
15296 // (prim-0)*prim+0
15297 {0x0efb0efb, ac_prim_mul_prim},
15298 // sky, xg2. Added by Gonetz
15299 // (shade-0)*prim+0, (0-0)*0+1
15300 {0x0efc0dff, ac_one},
15301 // Zelda, unimp log. Added by Gonetz
15302 // (shade-0)*prim+0
15303 {0x0efc0efc, ac_prim_mul_shade},
15304 // ?
15305 // (shade-0)*prim+0, (cmb-0)*shade+0 ** INC **
15306 {0x0efc0f38, ac_prim_mul_shade},
15307 // Baby mario's hat shadow, mario golf
15308 // (env-0)*prim+0
15309 {0x0efd0efd, ac_prim_mul_env},
15310 // Menu, doom
15311 // (1-0)*prim+0
15312 {0x0efe0efe, ac_prim},
15313 // Peris Song attack, Pokemin Stadium 2
15314 // (1-0)*prim+0, (cmb-0)*shade+0
15315 {0x0efe0f38, ac_prim_mul_shade},
15316 // Conker's shadow, CBFD. Added by Gonetz
15317 // (1-t0)*shade+0
15318 {0x0f0e0f0e, ac_one_sub_t0_mul_shade},
15319 // Rock smash, pokemon stadium 2
15320 // (1-t0)*shade+0
15321 {0x0f0f0ee8, ac_one_sub_t0_mul_shade},
15322 //waterfall, Paper Mario
15323 // (t0-t1)*shade+0
15324 {0x0f110f11, ac__t0_sub_t1__mul_shade},
15325 // mahogany town statue, Pokemon Stadium 2
15326 // (t0-prim)*shade+0
15327 {0x0f190f19, ac_t0_sub_prim_mul_shade},
15328 // silver cave, pokemon stadium 2
15329 // (t0-prim)*shade+0, (cmb-0)*env+0
15330 {0x0f190f78, ac_t0_sub_prim_mul_shade_mul_env},
15331 // Boomerang circle, zelda
15332 // (t0-0)*shade+0, (1-cmb)*t0+cmb
15333 {0x0f390046, ac_t0_mul_shade},
15334 // THPS3
15335 // (t0-0)*shade+0, (1-0)*t0+cmb
15336 {0x0f39007e, ac_t0_mul_shade},
15337 // ???
15338 // (t0-0)*shade+0, (env-0)*t1+cmb
15339 {0x0f3900bd, ac_t0_mul_shade},
15340 // Forest temple doorway, zelda
15341 // (t0-0)*shade+0, (t1-0)*primlod+cmb
15342 {0x0f3901ba, ac_t0_mul_shade},
15343 // skis, Spacestation Silicon Valley. Added by Gonetz
15344 // (t0-0)*shade+0, (0-0)*0+t0
15345 {0x0f3903ff, ac_t0},
15346 // paper mario. Added by Gonetz
15347 // (t0-0)*shade+0, (cmb-t0)*prim+0
15348 {0x0f390ec8, ac_t0_mul_prim_mul_shade},
15349 // House windows, zelda intro
15350 //z (t0-0)*shade+0, (cmb-0)*prim+0
15351 {0x0f390ef8, ac_t0_mul_prim_mul_shade},
15352 // Characters, mace
15353 // (t0-0)*shade+0, (cmb-0)*shade+0
15354 {0x0f390f38, ac_t0_mul_shade},
15355 // Shadows, mario
15356 //z (t0-0)*shade+0
15357 {0x0f390f39, ac_t0_mul_shade},
15358 // Clear screen intro, banjo kazooie
15359 // (t0-0)*shade+0, (cmb-0)*env+0
15360 {0x0f390f78, ac_t0_mul_env_mul_shade},
15361 // ridge racer, unimp log. Added by Gonetz
15362 // (t0-0)*shade+0, (cmb-0)*primlod+0 **INC**?
15363 {0x0f390fb8, ac_t0_mul_shade},
15364 // Reflecting combined attack at kotake & koume's, zelda
15365 // (t1-0)*shade+0, (cmb-0)*prim+0
15366 {0x0f3a0ef8, ac_t1_mul_prim_mul_shade},
15367 // aerofighter's assault [Ogy]
15368 // (t1-0)*shade+0
15369 {0x0f3a0f3a, ac_t1_mul_shade},
15370 //beetle adventure racing. Added by Gonetz
15371 //(t1-0)*shade+0, (cmb-0)*env+0
15372 {0x0f3a0f78, ac_t1_mul_env_mul_shade},
15373 // building shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
15374 // (prim-0)*shade+0, (cmb-cmb)*lodf+cmb
15375 {0x0f3b0000, ac_prim_mul_shade},
15376 //chip in Spacestation Silicon Valley intro. Added by Gonetz
15377 // (prim-0)*shade+0, (env-cmb)*t1+cmb
15378 {0x0f3b0085, ac_env_sub_primshade_mul_t1_add_primshade},
15379 // N64 logo, tetrisphere. Added by Gonetz
15380 // (prim-0)*shade+0, (prim-0)*shade+0
15381 {0x0f3b0f3b, ac_prim_mul_shade},
15382 // rays, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
15383 // (shade-0)*shade+0, (cmb-0)*prim+0
15384 {0x0f3c0ef8, ac_prim_mul_shade},
15385 // light, dracula resurrection, castlevania 2. Added by Gonetz
15386 // (env-0)*shade+0
15387 {0x0f3d0f3d, ac_env_mul_shade},
15388 // zelda 2 [Ogy]. Added by Gonetz
15389 // (1-0)*shade+0
15390 {0x0f3e0f3e, ac_shade},
15391 // surf pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
15392 // (1-t0)*env+0, (1-cmb)*shade+0 ** INC **
15393 {0x0f4e0f06, ac_t0_mul_shade},
15394 // GE, boxes
15395 // (1-shade)*env+0, (cmb-0)*shade+0 ** INC **
15396 {0x0f660f38, ac_one_sub_shade_mul_env},
15397 //beetle adventure racing. Added by Gonetz
15398 //(t0-0)*env+0, (1-t0)*prim+cmb
15399 //{0x0f7900ce, ac_t0_mul_env}, //this one looks better
15400 //{0x0f7900ce, ac_env_sub_prim_mul_t0_add_prim},
15401 {0x0f7900ce, ac_one_sub_t1_add_t0_mul_env},
15402 //Zelda, logo ? Added by Gonetz
15403 //(t0-0)*env+0, (t1-0)*primlod+0 **INC** changed to mul_env for gannon's organ disappearing [Dave2001]
15404 {0x0f7901ba, ac__t0_inter_t1_using_primlod__mul_env},
15405 // V8-2 menu
15406 // (t0-0)*env+0, (0-0)*0+prim
15407 {0x0f7907ff, ac_prim},
15408 // Skeleton guy's eyes, zelda
15409 // (t0-0)*env+0, (cmb-0)*prim+0
15410 {0x0f790ef8, ac_t0_mul_prim_mul_env},
15411 // Dust from rock spell, quest64
15412 // (t0-0)*env+0, (cmb-0)*shade+0
15413 {0x0f790f38, ac_t0_mul_env_mul_shade},
15414 // eyes of poe, zelda
15415 // (t0-0)*env+0, (cmb-0)*env+0
15416 {0x0f790f78, ac_t0_mul_env},
15417 // Text, mario
15418 //z (t0-0)*env+0
15419 {0x0f790f79, ac_t0_mul_env},
15420 // Shadows, pokemon stadeom 2
15421 // (t0-0)*env+0, (cmb-0)*primlod+0
15422 {0x0f790fb8, ac_t0_mul_env_mul_primlod},
15423 //gauge, PGA
15424 // (t1-0)*env+0, (cmb-0)*t1+0 ** INC **
15425 {0x0f7a0eb8, ac_t1_mul_env},
15426 //text and shadows, Rayman2. Added by Gonetz
15427 // (t1-0)*env+0, (cmb-0)*shade+0
15428 {0x0f7a0f38, ac_t1_mul_env_mul_shade},
15429 // shadows, tom and jerry. Added by Gonetz
15430 // (t1-0)*env+0
15431 {0x0f7a0f7a, ac_t1_mul_env},
15432 // Bomberman64-2 intro. Added by Gonetz
15433 // (prim-0)*env+0
15434 {0x0f7b0f7b, ac_prim_mul_env},
15435 // Text box, mario
15436 //z (shade-0)*env+0
15437 {0x0f7c0f7c, ac_env_mul_shade},
15438 // Ogre battle 64
15439 // (env-0)*env+0
15440 {0x0f7d0f7d, ac_env},
15441 //Goldeneye, [Jeremy]. Added by Gonetz
15442 // (1-0)*env+0, (cmb-0)*shade+0
15443 {0x0f7e0f38, ac_env_mul_shade},
15444 // Status items, megaman
15445 // (1-0)*env+0
15446 {0x0f7e0f7e, ac_env},
15447 // gun fire, Beast_Wars_Transmetal [Raziel64]
15448 // (0-0)*env+0
15449 {0x0f7f0f7f, ac_zero},
15450 // Pokemon attack, Pokemon stadium (J). Added by Gonetz
15451 // (t1-t0)*primlod+0, (cmb-0)*env+prim ** INC **
15452 {0x0f8a0778, ac__t1_sub_t0_mul_primlod__mul_env_add_prim},
15453 // Shadow Ball, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
15454 // (t1-t0)*primlod+0, (t1-cmb)*prim+0 ** INC **
15455 {0x0f8a0ec2, ac_t0_mul_prim},
15456 // Walls of well through lens of truth, zelda
15457 // (prim-t0)*primlod+0
15458 {0x0f8b0f8b, ac_prim_sub_t0},
15459 // N64 logo, ridge racer. Added by Gonetz
15460 // (1-prim)*primlod+0 **INC**
15461 {0x0f9e0f9e, ac_zero},
15462 // Vines that covers a door in the third room of woodfall temple, zelda 2 [Ogy]. Added by Gonetz
15463 // (t0-0)*primlod+0, (cmb-0)*prim+0
15464 {0x0fb90ef8, ac_t0_mul_primlod_mul_prim},
15465 // zelda 2. Added by Gonetz
15466 // (t0-0)*primlod+0
15467 {0x0fb90fb9, ac_t0_mul_primlod},
15468 // NFL Blitz logo. Added by Gonetz
15469 // (t1-0)*primlod+0
15470 {0x0fba0fba, ac_t1_mul_primlod}, //causes issues
15471 // fallen stars at star summit, Paper Mario. Added by Gonetz
15472 // (shade-0)*primlod+0
15473 {0x0fbc0fbc, ac_primlod_mul_shade},
15474 // expansion pack, Jeremy McGrath Supercross 2000. Added by Gonetz
15475 // (1-0)*primlod+0
15476 {0x0fbe0fbe, ac_primlod},
15477 // intro, Aidyn Chronicles. Added by Gonetz
15478 // (0-0)*primlod+0, (prim-env)*t0+prim **INC**
15479 {0x0fbf066b, ac_t0_mul_prim},
15480 // sky, Rayman2. Added by Gonetz
15481 // (0-shade)*0+0
15482 {0x0fe70fe7, ac_zero},
15483 // flame, PokemonStadium1 [Raziel64]
15484 // (t0-0)*0+0
15485 {0x0ff90ff9, ac_zero},
15486 //BAR
15487 // (0-0)*0+0, (0-0)*0+TEXEL1
15488 {0x0fff05ff, ac_t0},
15489 // Screen clear, banjo kazooie
15490 // (0-0)*0+0
15491 {0x0fff0fff, ac_zero},
15492 // { #ACEND }
15493};
15494
15495// CountCombine - count the # of entries in the combine lists
15496void CountCombine ()
15497{
15498 int size = sizeof(color_cmb_list) / sizeof(COMBINER);
15499 int i=0, index=0, a, b;
15500 do {
15501 a = color_cmb_list[index].key >> 24;
15502 for (; i<=a; i++)
15503 cc_lookup[i] = index;
15504
15505 while (index < size)
15506 {
15507 b = color_cmb_list[index].key >> 24;
15508 if (b != a) break;
15509 index ++;
15510 }
15511 } while (index < size);
15512 for (; i<257; i++) cc_lookup[i] = index;
15513
15514 size = sizeof(alpha_cmb_list) / sizeof(COMBINER);
15515 i=0, index=0;
15516 do {
15517 a = (alpha_cmb_list[index].key >> 20) & 0xFF;
15518 for (; i<=a; i++)
15519 ac_lookup[i] = index;
15520
15521 while (index < size)
15522 {
15523 b = (alpha_cmb_list[index].key >> 20) & 0xFF;
15524 if (b != a) break;
15525 index ++;
15526 }
15527 } while (index < size);
15528 for (; i<257; i++) ac_lookup[i] = index;
15529
15530 //color_cmb_list_count = sizeof(color_cmb_list) >> 3; // #bytes/4/2
15531 //alpha_cmb_list_count = sizeof(alpha_cmb_list) >> 3;
15532}
15533
15534//****************************************************************
15535// Main Combine
15536//****************************************************************
15537
15538void Combine ()
15539{
15540 FRDP (" | |- color combine: %08lx, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
15541 ((rdp.cycle1 & 0xFFFF) << 16) | (rdp.cycle2 & 0xFFFF),
15542 Mode0[rdp.cycle1&0xF], Mode1[(rdp.cycle1>>4)&0xF], Mode2[(rdp.cycle1>>8)&0x1F], Mode3[(rdp.cycle1>>13)&7],
15543 Mode0[rdp.cycle2&0xF], Mode1[(rdp.cycle2>>4)&0xF], Mode2[(rdp.cycle2>>8)&0x1F], Mode3[(rdp.cycle2>>13)&7]);
15544 FRDP (" | |- alpha combine: %08lx, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
15545 (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 & 0x0FFF0000) >> 16),
15546 Alpha0[(rdp.cycle1>>16)&7], Alpha1[(rdp.cycle1>>19)&7], Alpha2[(rdp.cycle1>>22)&7], Alpha3[(rdp.cycle1>>25)&7],
15547 Alpha0[(rdp.cycle2>>16)&7], Alpha1[(rdp.cycle2>>19)&7], Alpha2[(rdp.cycle2>>22)&7], Alpha3[(rdp.cycle2>>25)&7]);
15548 if (!rdp.LOD_en || rdp.cur_tile == rdp.mipmap_level)
15549 lod_frac = rdp.prim_lodfrac;
15550 else if (settings.lodmode == 0)
15551 lod_frac = 0;
15552 else
15553 lod_frac = 10;
15554
15555 rdp.noise = RDP::noise_none;
15556
15557 wxUint32 found = TRUE;
15558
15559 rdp.col[0] = rdp.col[1] = rdp.col[2] = rdp.col[3] =
15560 rdp.coladd[0] = rdp.coladd[1] = rdp.coladd[2] = rdp.coladd[3] = 1.0f;
15561 rdp.cmb_flags = rdp.cmb_flags_2 = 0;
15562
15563 rdp.uncombined = 0;
15564
15565 cmb.tex = 0;
15566 cmb.tmu0_func = cmb.tmu1_func = cmb.tmu0_a_func = cmb.tmu1_a_func = GR_COMBINE_FUNCTION_ZERO;
15567 cmb.tmu0_fac = cmb.tmu1_fac = cmb.tmu0_a_fac = cmb.tmu1_a_fac = GR_COMBINE_FACTOR_NONE;
15568 cmb.tmu0_invert = cmb.tmu0_a_invert = cmb.tmu1_invert = cmb.tmu1_a_invert = FXFALSE;
15569
15570 cmb.dc0_detailmax = cmb.dc1_detailmax = 0;
15571
15572 cmb.mod_0 = cmb.mod_1 = 0; // remove all modifications
15573 cmb.modcolor_0 = cmb.modcolor1_0 = cmb.modcolor2_0 = cmb.modcolor_1 = cmb.modcolor1_1 = cmb.modcolor2_1
15574 = cmb.modfactor_0 = cmb.modfactor_1 = 0;
15575
15576 cmb.ccolor = cmb.tex_ccolor = 0;
15577 if (cmb.cmb_ext_use || cmb.tex_cmb_ext_use)
15578 {
15579 //have to draw something to allow use of standard combine functions
15580 if (fullscreen)
15581 {
15582 VERTEX v;
15583 memset(&v,0,sizeof(v));
15584 grDrawPoint(&v);
15585 }
15586 cmb.cmb_ext_use = 0;
15587 cmb.tex_cmb_ext_use = 0;
15588 }
15589
15590 wxUint32 cmb_mode_c = (rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF);
15591 wxUint32 cmb_mode_a = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF);
15592
15593 cmb.abf1 = GR_BLEND_SRC_ALPHA;
15594 cmb.abf2 = GR_BLEND_ONE_MINUS_SRC_ALPHA;
15595
15596#ifdef FASTSEARCH
15597 // Fast, ordered search
15598 int current=0x7FFFFFFF, last;
15599 wxUint32 actual_combine, current_combine, color_combine, alpha_combine;
15600 int left, right;
15601
15602 actual_combine = current_combine = cmb_mode_c;
15603 color_combine = actual_combine;
15604 if ((rdp.cycle2 & 0xFFFF) == 0x1FFF)
15605 actual_combine = (rdp.cycle1 << 16) | (rdp.cycle1 & 0xFFFF);
15606
15607 left = cc_lookup[actual_combine>>24];
15608 right = cc_lookup[(actual_combine>>24)+1];
15609
15610 while (1)
15611 {
15612 last = current;
15613 current = left + ((right-left) >> 1);
15614 if (current == last)
15615 break; // can't be found!
15616
15617 current_combine = color_cmb_list[current].key;
15618 if (current_combine < actual_combine)
15619 left = current;
15620 else if (current_combine > actual_combine)
15621 right = current;
15622 else
15623 break; // found it!
15624 }
15625
15626 // Check if we didn't find it
15627 if (actual_combine != current_combine)
15628 {
15629 rdp.uncombined |= 1;
15630#ifdef UNIMP_LOG
15631 if (settings.log_unk)
15632 {
15633 sprintf (out_buf, "COLOR combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
15634 actual_combine,
15635 Mode0[rdp.cycle1&0xF], Mode1[(rdp.cycle1>>4)&0xF], Mode2[(rdp.cycle1>>8)&0x1F], Mode3[(rdp.cycle1>>13)&7],
15636 Mode0[rdp.cycle2&0xF], Mode1[(rdp.cycle2>>4)&0xF], Mode2[(rdp.cycle2>>8)&0x1F], Mode3[(rdp.cycle2>>13)&7]);
15637 UNIMPMODE();
15638 }
15639#endif
15640 found = FALSE;
15641 //tex |= 3;
15642
15643 // use t0 as default
15644 cc_t0 ();
15645 }
15646 else
15647 color_cmb_list[current].func();
15648
15649 LRDP(" | |- Color done\n");
15650
15651 // Now again for alpha
15652 current = 0x7FFFFFFF;
15653 actual_combine = cmb_mode_a;
15654 alpha_combine = actual_combine;
15655 if ((rdp.cycle2 & 0x0FFF0000) == 0x01FF0000)
15656 actual_combine = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle1 >> 16) & 0x00000FFF);
15657 if ((rdp.cycle1 & 0x0FFF0000) == 0x0FFF0000)
15658 actual_combine = (rdp.cycle2 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF);
15659
15660 left = ac_lookup[(actual_combine>>20)&0xFF];
15661 right = ac_lookup[((actual_combine>>20)&0xFF)+1];
15662
15663 while (1)
15664 {
15665 last = current;
15666 current = left + ((right-left) >> 1);
15667 if (current == last)
15668 break; // can't be found!
15669
15670 current_combine = alpha_cmb_list[current].key;
15671 if (current_combine < actual_combine)
15672 left = current;
15673 else if (current_combine > actual_combine)
15674 right = current;
15675 else
15676 break; // found it!
15677 }
15678
15679 // Check if we didn't find it
15680 if (actual_combine != current_combine || !found)
15681 {
15682 if (actual_combine != current_combine)
15683 {
15684 rdp.uncombined |= 2;
15685#ifdef UNIMP_LOG
15686 if (settings.log_unk)
15687 {
15688 sprintf (out_buf, "ALPHA combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
15689 actual_combine,
15690 Alpha0[(rdp.cycle1>>16)&7], Alpha1[(rdp.cycle1>>19)&7], Alpha2[(rdp.cycle1>>22)&7], Alpha3[(rdp.cycle1>>25)&7],
15691 Alpha0[(rdp.cycle2>>16)&7], Alpha1[(rdp.cycle2>>19)&7], Alpha2[(rdp.cycle2>>22)&7], Alpha3[(rdp.cycle2>>25)&7]);
15692 UNIMPMODE();
15693 }
15694#endif
15695 }
15696 if (settings.unk_as_red)
15697 {
15698 BrightRed ();
15699 }
15700 else
15701 {
15702 // use full alpha as default
15703 ac_t0 ();
15704 }
15705 //tex |= 3;
15706 }
15707 else
15708 alpha_cmb_list[current].func();
15709
15710
15711 if (color_combine == 0x69351fff) //text, PD, need to change texture alpha
15712 {
15713 A_USE_T1();
15714 }
15715 else if ((color_combine == 0x3fff1fff) && (alpha_combine == 0x03ff03ff) && (rdp.last_tile > rdp.cur_tile))//Dr. Mario
15716 {
15717 cc_t0();
15718 ac_t1();
15719 }
15720 else if (color_combine == 0x613522f0 && (settings.hacks&hack_PMario)) //Paper Mario fortune teller spheres
15721 {
15722 ac_t0();
15723 }
15724
15725 LRDP(" | |- Alpha done\n");
15726#endif // FASTSEARCH
15727
15728 CombineBlender ();
15729 //*
15730 // Update textures?
15731 // if (tex == 2 && rdp.texrecting && (cmb.tmu1_func != GR_COMBINE_FUNCTION_ZERO) && (rdp.last_tile_size == 0))
15732 if (cmb.tex == 2 && rdp.texrecting && (rdp.cur_tile == rdp.last_tile_size))
15733 {
15734 cmb.tex = 0;
15735 USE_T0();
15736 A_USE_T0();
15737 }
15738 //*/
15739 rdp.tex = cmb.tex;
15740
15741 if (fullscreen)
15742 {
15743 TBUFF_COLOR_IMAGE * aTBuff[2] = {0, 0};
15744 if (rdp.aTBuffTex[0])
15745 aTBuff[rdp.aTBuffTex[0]->tile] = rdp.aTBuffTex[0];
15746 if (rdp.aTBuffTex[1])
15747 aTBuff[rdp.aTBuffTex[1]->tile] = rdp.aTBuffTex[1];
15748 if (cmb.tex && (aTBuff[0] || aTBuff[1]))
15749 {
15750 if (aTBuff[0] && (settings.frame_buffer&fb_read_alpha))
15751 {
15752 if ((settings.hacks&hack_PMario) && aTBuff[0]->width == rdp.ci_width)
15753 ;
15754 else
15755 {
15756 grChromakeyValue(0);
15757 grChromakeyMode(GR_CHROMAKEY_ENABLE);
15758 }
15759 }
15760 else
15761 grChromakeyMode(GR_CHROMAKEY_DISABLE);
15762
15763 if (aTBuff[0] && aTBuff[0]->info.format == GR_TEXFMT_ALPHA_INTENSITY_88)
15764 {
15765 if (cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_COLOR)
15766 {
15767 if (cmb.t0c_ext_a == GR_CMBX_LOCAL_TEXTURE_RGB)
15768 cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15769 if (cmb.t0c_ext_b == GR_CMBX_LOCAL_TEXTURE_RGB)
15770 cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15771 if (cmb.t0c_ext_c == GR_CMBX_LOCAL_TEXTURE_RGB)
15772 cmb.t0c_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15773 }
15774 else
15775 cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;
15776 }
15777
15778 if (aTBuff[1] && aTBuff[1]->info.format == GR_TEXFMT_ALPHA_INTENSITY_88)
15779 {
15780 if (cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_COLOR)
15781 {
15782 if (cmb.t1c_ext_a == GR_CMBX_LOCAL_TEXTURE_RGB)
15783 cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15784 if (cmb.t1c_ext_b == GR_CMBX_LOCAL_TEXTURE_RGB)
15785 cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15786 if (cmb.t1c_ext_c == GR_CMBX_LOCAL_TEXTURE_RGB)
15787 cmb.t1c_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15788 }
15789 else
15790 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;
15791 }
15792 }
15793 else
15794 grChromakeyMode(GR_CHROMAKEY_DISABLE);
15795 }
15796 cmb.shade_mod_hash = (rdp.cmb_flags + rdp.cmb_flags_2) * (rdp.prim_color + rdp.env_color + rdp.K5);
15797
15798 LRDP(" | + Combine end\n");
15799}
15800
15801void CombineBlender ()
15802{
15803 wxUint32 blendmode = rdp.othermode_l >> 16;
15804 // Check force-blending
15805 if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))
15806 {
15807 switch (blendmode)
15808 {
15809 // Mace objects
15810 case 0x0382:
15811 case 0x0091:
15812 // 1080 sky
15813 case 0x0c08:
15814 // Mario kart player select
15815 // clr_in * 0 + clr_in * 1
15816 // - or just clr_in, no matter what alpha
15817 case 0x0f0a:
15818 //DK64 blue prints
15819 case 0x0302:
15820 //Sin and Punishment
15821 case 0xcb02:
15822 // Battlezone
15823 // clr_in * a + clr_in * (1-a)
15824 case 0xc800:
15825 case 0x00c0:
15826 //ISS64
15827 case 0xc302:
15828 A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
15829 break;
15830
15831 //Space Invaders
15832 case 0x0448:
15833 case 0x055a:
15834 A_BLEND (GR_BLEND_ONE, GR_BLEND_ONE);
15835 break;
15836
15837 // LOT in Zelda: MM
15838 case 0xaf50:
15839 case 0x0f5a: //clr_in * 0 + clr_mem * 1
15840 A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15841 break;
15842
15843 case 0x5f50: //clr_mem * 0 + clr_mem * (1-a)
15844 A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15845 break;
15846
15847 /*
15848 case 0xc410: // Perfect Dark Mauler
15849 {
15850 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
15851 MOD_0_COL (rdp.fog_color & 0xFFFFFF00);
15852 MOD_0_FAC (rdp.fog_color & 0xFF);
15853 INTERSHADE_2 (rdp.fog_color & 0xFFFFFF00, rdp.fog_color & 0xFF);
15854
15855 float percent = (rdp.fog_color & 0xFF) / 255.0f;
15856 cmb.ccolor =
15857 ((wxUint32)(((cmb.ccolor >> 24) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) * percent) << 24) |
15858 ((wxUint32)(((cmb.ccolor >> 16) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) * percent) << 16) |
15859 ((wxUint32)(((cmb.ccolor >> 8) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) * percent) << 8) |
15860 (cmb.ccolor & 0xFF);
15861
15862 rdp.col[0] = rdp.col[0] * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) / 255.0f * percent;
15863 rdp.col[1] = rdp.col[1] * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) / 255.0f * percent;
15864 rdp.col[2] = rdp.col[2] * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) / 255.0f * percent;
15865 A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15866 }
15867 break;
15868 */
15869 case 0xf550: //clr_fog * a_fog + clr_mem * (1-a)
15870 A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15871 {
15872 wxUint32 prim = rdp.prim_color;
15873 rdp.prim_color = rdp.fog_color;
15874 cc_prim();
15875 ac_prim();
15876 rdp.prim_color = prim;
15877 }
15878 break;
15879
15880 case 0x0150: //spiderman
15881 case 0x0d18: //clr_in * a_fog + clr_mem * (1-a)
15882 A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15883 if (rdp.cycle_mode == 1 && rdp.cycle2 != 0x01ff1fff)
15884 {
15885 wxUint32 prim = rdp.prim_color;
15886 rdp.prim_color = rdp.fog_color;
15887 ac_prim();
15888 rdp.prim_color = prim;
15889 }
15890 break;
15891
15892 case 0xc912: //40 winks, clr_in * a_fog + clr_mem * 1
15893 {
15894 wxUint32 prim = rdp.prim_color;
15895 rdp.prim_color = rdp.fog_color;
15896 ac_prim();
15897 rdp.prim_color = prim;
15898 }
15899 A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE);
15900 break;
15901
15902 default:
15903 A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15904 }
15905 }
15906 /*
15907 else if (blendmode == 0xc411) // Super Smash Bros, faked fog for flashing characters
15908 {
15909 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
15910 MOD_0_COL (rdp.fog_color & 0xFFFFFF00);
15911 MOD_0_FAC (rdp.fog_color & 0xFF);
15912 INTERSHADE_2 (rdp.fog_color & 0xFFFFFF00, rdp.fog_color & 0xFF);
15913
15914 float percent = (rdp.fog_color & 0xFF) / 255.0f;
15915 cmb.ccolor =
15916 ((wxUint32)(((cmb.ccolor >> 24) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) * percent) << 24) |
15917 ((wxUint32)(((cmb.ccolor >> 16) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) * percent) << 16) |
15918 ((wxUint32)(((cmb.ccolor >> 8) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) * percent) << 8) |
15919 (cmb.ccolor & 0xFF);
15920
15921 rdp.col[0] = rdp.col[0] * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) / 255.0f * percent;
15922 rdp.col[1] = rdp.col[1] * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) / 255.0f * percent;
15923 rdp.col[2] = rdp.col[2] * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) / 255.0f * percent;
15924 A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
15925 }
15926 */
15927 else if (blendmode == 0x0040) // Mia Soccer Lights
15928 A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15929 else if ((settings.hacks&hack_Pilotwings) && (rdp.othermode_l & 0x80)) //CLR_ON_CVG without FORCE_BL
15930 A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15931 else
15932 A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
15933
15934 // ALPHA_CVG_SEL means full alpha
15935 // The reason it wasn't working before was because I wasn't handling rdp:setothermode
15936 // if (rdp.othermode_l & 0x2000)
15937 if ((rdp.othermode_l & 0x2000) && ((rdp.othermode_l & 0x7000) != 0x7000))
15938 {
15939 if ((settings.hacks&hack_PMario) && (blendmode == 0x5055))
15940 {
15941 A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15942 }
15943 else if (blendmode == 0x4055) // Mario Golf
15944 {
15945 A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15946 }
15947 else
15948 {
15949 A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
15950 }
15951 }
15952
15953 //hack
15954 //*
15955 if (settings.hacks&hack_ISS64)
15956 {
15957 if (rdp.othermode_l == 0xff5a6379)
15958 {
15959 A_BLEND (GR_BLEND_ZERO, GR_BLEND_SRC_ALPHA);
15960 }
15961 else if (rdp.othermode_l == 0x00504dd9) //players shadows. CVG_DST_WRAP
15962 {
15963 A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15964 }
15965 }
15966 else if (settings.hacks&hack_TGR)
15967 {
15968 if (rdp.othermode_l == 0x0f0a0235)
15969 {
15970 A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15971 }
15972 }
15973 //*/
15974}
15975
15976void InitCombine ()
15977{
15978 LOG ("InitCombine() ");
15979 memset(&cmb, 0, sizeof(cmb));
15980 const char *extensions = grGetString (GR_EXTENSION);
15981 if (const char * extstr = strstr(extensions, "COMBINE")) {
15982 if (!strncmp(extstr, "COMBINE", 7)) {
15983 LOG ("extensions ");
15984 char strColorCombineExt[] = "grColorCombineExt";
15985 cmb.grColorCombineExt = (GRCOLORCOMBINEEXT) grGetProcAddress(strColorCombineExt);
15986 char strAlphaCombineExt[] = "grAlphaCombineExt";
15987 cmb.grAlphaCombineExt = (GRCOLORCOMBINEEXT) grGetProcAddress(strAlphaCombineExt);
15988 char strTexColorCombineExt[] = "grTexColorCombineExt";
15989 cmb.grTexColorCombineExt = (GRTEXCOLORCOMBINEEXT) grGetProcAddress(strTexColorCombineExt);
15990 char strTexAlphaCombineExt[] = "grTexAlphaCombineExt";
15991 cmb.grTexAlphaCombineExt = (GRTEXCOLORCOMBINEEXT) grGetProcAddress(strTexAlphaCombineExt);
15992 char strConstantColorValueExt[] = "grConstantColorValueExt";
15993 cmb.grConstantColorValueExt = (GRCONSTANTCOLORVALUEEXT) grGetProcAddress(strConstantColorValueExt);
15994 if (cmb.grColorCombineExt && cmb.grAlphaCombineExt &&
15995 cmb.grTexColorCombineExt && cmb.grTexAlphaCombineExt)
15996 {
15997 cmb.combine_ext = TRUE;
15998 LOG ("initialized.");
15999 }
16000 else
16001 {
16002 cmb.combine_ext = FALSE;
16003 }
16004 }
16005 }
16006 cmb.dc0_lodbias = cmb.dc1_lodbias = 31;
16007 cmb.dc0_detailscale = cmb.dc1_detailscale = 7;
16008 cmb.lodbias0 = cmb.lodbias1 = 1.0f;
16009 LOG ("\n");
16010}
16011
16012void ColorCombinerToExtension ()
16013{
16014 wxUint32 ext_local, ext_local_a, ext_other, ext_other_a;
16015 switch (cmb.c_loc)
16016 {
16017 case GR_COMBINE_LOCAL_ITERATED:
16018 ext_local = GR_CMBX_ITRGB;
16019 ext_local_a = GR_CMBX_ITALPHA;
16020 break;
16021 case GR_COMBINE_LOCAL_CONSTANT:
16022 ext_local = GR_CMBX_CONSTANT_COLOR;
16023 ext_local_a = GR_CMBX_CONSTANT_ALPHA;
16024 break;
16025 default:
16026 ext_local = GR_CMBX_ZERO;
16027 ext_local_a = GR_CMBX_ZERO;
16028 };
16029 switch (cmb.c_oth)
16030 {
16031 case GR_COMBINE_OTHER_ITERATED:
16032 ext_other = GR_CMBX_ITRGB;
16033 ext_other_a = GR_CMBX_ITALPHA;
16034 break;
16035 case GR_COMBINE_OTHER_TEXTURE:
16036 ext_other = GR_CMBX_TEXTURE_RGB;
16037 ext_other_a = GR_CMBX_TEXTURE_ALPHA;
16038 break;
16039 case GR_COMBINE_OTHER_CONSTANT:
16040 ext_other = GR_CMBX_CONSTANT_COLOR;
16041 ext_other_a = GR_CMBX_CONSTANT_ALPHA;
16042 break;
16043 default:
16044 ext_other = GR_CMBX_ZERO;
16045 ext_other_a = GR_CMBX_ZERO;
16046 };
16047 switch (cmb.c_fac)
16048 {
16049 case GR_COMBINE_FACTOR_ZERO:
16050 cmb.c_ext_c = GR_CMBX_ZERO;
16051 cmb.c_ext_c_invert = 0;
16052 break;
16053 case GR_COMBINE_FACTOR_ONE:
16054 cmb.c_ext_c = GR_CMBX_ZERO;
16055 cmb.c_ext_c_invert = 1;
16056 break;
16057 case GR_COMBINE_FACTOR_LOCAL:
16058 cmb.c_ext_c = ext_local;
16059 cmb.c_ext_c_invert = 0;
16060 break;
16061 case GR_COMBINE_FACTOR_LOCAL_ALPHA:
16062 cmb.c_ext_c = ext_local_a;
16063 cmb.c_ext_c_invert = 0;
16064 break;
16065 case GR_COMBINE_FACTOR_OTHER_ALPHA:
16066 cmb.c_ext_c = ext_other_a;
16067 cmb.c_ext_c_invert = 0;
16068 break;
16069 case GR_COMBINE_FACTOR_TEXTURE_RGB:
16070 cmb.c_ext_c = GR_CMBX_TEXTURE_RGB;
16071 cmb.c_ext_c_invert = 0;
16072 break;
16073 case GR_COMBINE_FACTOR_TEXTURE_ALPHA:
16074 cmb.c_ext_c = GR_CMBX_TEXTURE_ALPHA;
16075 cmb.c_ext_c_invert = 0;
16076 break;
16077 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
16078 cmb.c_ext_c = ext_local;
16079 cmb.c_ext_c_invert = 1;
16080 break;
16081 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
16082 cmb.c_ext_c = ext_local_a;
16083 cmb.c_ext_c_invert = 1;
16084 break;
16085 case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16086 cmb.c_ext_c = ext_other_a;
16087 cmb.c_ext_c_invert = 1;
16088 break;
16089 case GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA:
16090 cmb.c_ext_c = GR_CMBX_TEXTURE_ALPHA;
16091 cmb.c_ext_c_invert = 1;
16092 break;
16093 default:
16094 cmb.c_ext_c = GR_CMBX_ZERO;
16095 cmb.c_ext_c_invert = 0;
16096 }
16097
16098 switch (cmb.c_fnc)
16099 {
16100 case GR_COMBINE_FUNCTION_ZERO:
16101 cmb.c_ext_a = GR_CMBX_ZERO;
16102 cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16103 cmb.c_ext_b = GR_CMBX_ZERO;
16104 cmb.c_ext_b_mode = GR_FUNC_MODE_X;
16105 cmb.c_ext_c = GR_CMBX_ZERO;
16106 cmb.c_ext_c_invert = 0;
16107 cmb.c_ext_d = GR_CMBX_ZERO;
16108 cmb.c_ext_d_invert = 0;
16109 break;
16110 case GR_COMBINE_FUNCTION_LOCAL:
16111 cmb.c_ext_a = ext_local;
16112 cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16113 cmb.c_ext_b = GR_CMBX_ZERO;
16114 cmb.c_ext_b_mode = GR_FUNC_MODE_X;
16115 cmb.c_ext_c = GR_CMBX_ZERO;
16116 cmb.c_ext_c_invert = 1;
16117 cmb.c_ext_d = GR_CMBX_ZERO;
16118 cmb.c_ext_d_invert = 0;
16119 break;
16120 case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
16121 cmb.c_ext_a = ext_local_a;
16122 cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16123 cmb.c_ext_b = GR_CMBX_ZERO;
16124 cmb.c_ext_b_mode = GR_FUNC_MODE_X;
16125 cmb.c_ext_c = GR_CMBX_ZERO;
16126 cmb.c_ext_c_invert = 1;
16127 cmb.c_ext_d = GR_CMBX_ZERO;
16128 cmb.c_ext_d_invert = 0;
16129 break;
16130 case GR_COMBINE_FUNCTION_SCALE_OTHER:
16131 cmb.c_ext_a = ext_other;
16132 cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16133 cmb.c_ext_b = GR_CMBX_ZERO;
16134 cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;
16135 cmb.c_ext_d = GR_CMBX_ZERO;
16136 cmb.c_ext_d_invert = 0;
16137 break;
16138 case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
16139 cmb.c_ext_a = ext_other;
16140 cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16141 cmb.c_ext_b = ext_local;
16142 cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;
16143 cmb.c_ext_d = GR_CMBX_B;
16144 cmb.c_ext_d_invert = 0;
16145 break;
16146 case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
16147 cmb.c_ext_a = ext_other;
16148 cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16149 cmb.c_ext_b = ext_local_a;
16150 cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;
16151 cmb.c_ext_d = GR_CMBX_B;
16152 cmb.c_ext_d_invert = 0;
16153 break;
16154 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
16155 cmb.c_ext_a = ext_other;
16156 cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16157 cmb.c_ext_b = ext_local;
16158 cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16159 cmb.c_ext_d = GR_CMBX_ZERO;
16160 cmb.c_ext_d_invert = 0;
16161 break;
16162 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
16163 cmb.c_ext_a = ext_other;
16164 cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16165 cmb.c_ext_b = ext_local;
16166 cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16167 cmb.c_ext_d = GR_CMBX_B;
16168 cmb.c_ext_d_invert = 0;
16169 break;
16170 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16171 cmb.c_ext_a = ext_other;
16172 cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16173 cmb.c_ext_b = ext_local;
16174 cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16175 cmb.c_ext_d = GR_CMBX_ALOCAL;
16176 cmb.c_ext_d_invert = 0;
16177 break;
16178 case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
16179 cmb.c_ext_a = GR_CMBX_ZERO;
16180 cmb.c_ext_a_mode = GR_FUNC_MODE_ZERO;
16181 cmb.c_ext_b = ext_local;
16182 cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16183 cmb.c_ext_d = GR_CMBX_B;
16184 cmb.c_ext_d_invert = 0;
16185 break;
16186 case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16187 default:
16188 cmb.c_ext_a = GR_CMBX_ZERO;
16189 cmb.c_ext_a_mode = GR_FUNC_MODE_ZERO;
16190 cmb.c_ext_b = ext_local;
16191 cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16192 cmb.c_ext_d = GR_CMBX_ALOCAL;
16193 cmb.c_ext_d_invert = 0;
16194 break;
16195 }
16196}
16197
16198void AlphaCombinerToExtension ()
16199{
16200 wxUint32 ext_local, ext_other;
16201 switch (cmb.a_loc)
16202 {
16203 case GR_COMBINE_LOCAL_ITERATED:
16204 ext_local = GR_CMBX_ITALPHA;
16205 break;
16206 case GR_COMBINE_LOCAL_CONSTANT:
16207 ext_local = GR_CMBX_CONSTANT_ALPHA;
16208 break;
16209 default:
16210 ext_local = GR_CMBX_ZERO;
16211 };
16212 switch (cmb.a_oth)
16213 {
16214 case GR_COMBINE_OTHER_ITERATED:
16215 ext_other = GR_CMBX_ITALPHA;
16216 break;
16217 case GR_COMBINE_OTHER_TEXTURE:
16218 ext_other = GR_CMBX_TEXTURE_ALPHA;
16219 break;
16220 case GR_COMBINE_OTHER_CONSTANT:
16221 ext_other = GR_CMBX_CONSTANT_ALPHA;
16222 break;
16223 default:
16224 ext_other = GR_CMBX_ZERO;
16225 };
16226 switch (cmb.a_fac)
16227 {
16228 case GR_COMBINE_FACTOR_ZERO:
16229 cmb.a_ext_c = GR_CMBX_ZERO;
16230 cmb.a_ext_c_invert = 0;
16231 break;
16232 case GR_COMBINE_FACTOR_ONE:
16233 cmb.a_ext_c = GR_CMBX_ZERO;
16234 cmb.a_ext_c_invert = 1;
16235 break;
16236 case GR_COMBINE_FACTOR_LOCAL:
16237 case GR_COMBINE_FACTOR_LOCAL_ALPHA:
16238 cmb.a_ext_c = ext_local;
16239 cmb.a_ext_c_invert = 0;
16240 break;
16241 case GR_COMBINE_FACTOR_OTHER_ALPHA:
16242 cmb.a_ext_c = ext_other;
16243 cmb.a_ext_c_invert = 0;
16244 break;
16245 case GR_COMBINE_FACTOR_TEXTURE_ALPHA:
16246 cmb.a_ext_c = GR_CMBX_TEXTURE_ALPHA;
16247 cmb.a_ext_c_invert = 0;
16248 break;
16249 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
16250 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
16251 cmb.a_ext_c = ext_local;
16252 cmb.a_ext_c_invert = 1;
16253 break;
16254 case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16255 cmb.a_ext_c = ext_other;
16256 cmb.a_ext_c_invert = 1;
16257 break;
16258 case GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA:
16259 cmb.a_ext_c = GR_CMBX_TEXTURE_ALPHA;
16260 cmb.a_ext_c_invert = 1;
16261 break;
16262 default:
16263 cmb.a_ext_c = GR_CMBX_ZERO;
16264 cmb.a_ext_c_invert = 0;
16265 }
16266
16267 switch (cmb.a_fnc)
16268 {
16269 case GR_COMBINE_FUNCTION_ZERO:
16270 cmb.a_ext_a = GR_CMBX_ZERO;
16271 cmb.a_ext_a_mode = GR_FUNC_MODE_X;
16272 cmb.a_ext_b = GR_CMBX_ZERO;
16273 cmb.a_ext_b_mode = GR_FUNC_MODE_X;
16274 cmb.a_ext_c = GR_CMBX_ZERO;
16275 cmb.a_ext_c_invert = 0;
16276 cmb.a_ext_d = GR_CMBX_ZERO;
16277 cmb.a_ext_d_invert = 0;
16278 break;
16279 case GR_COMBINE_FUNCTION_LOCAL:
16280 case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
16281 cmb.a_ext_a = GR_CMBX_ZERO;
16282 cmb.a_ext_a_mode = GR_FUNC_MODE_ZERO;
16283 cmb.a_ext_b = ext_local;
16284 cmb.a_ext_b_mode = GR_FUNC_MODE_X;
16285 cmb.a_ext_c = GR_CMBX_ZERO;
16286 cmb.a_ext_c_invert = 1;
16287 cmb.a_ext_d = GR_CMBX_ZERO;
16288 cmb.a_ext_d_invert = 0;
16289 break;
16290 case GR_COMBINE_FUNCTION_SCALE_OTHER:
16291 cmb.a_ext_a = ext_other;
16292 cmb.a_ext_a_mode = GR_FUNC_MODE_X;
16293 cmb.a_ext_b = GR_CMBX_ZERO;
16294 cmb.a_ext_b_mode = GR_FUNC_MODE_ZERO;
16295 cmb.a_ext_d = GR_CMBX_ZERO;
16296 cmb.a_ext_d_invert = 0;
16297 break;
16298 case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
16299 case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
16300 cmb.a_ext_a = ext_other;
16301 cmb.a_ext_a_mode = GR_FUNC_MODE_X;
16302 cmb.a_ext_b = ext_local;
16303 cmb.a_ext_b_mode = GR_FUNC_MODE_ZERO;
16304 cmb.a_ext_d = GR_CMBX_B;
16305 cmb.a_ext_d_invert = 0;
16306 break;
16307 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
16308 cmb.a_ext_a = ext_other;
16309 cmb.a_ext_a_mode = GR_FUNC_MODE_X;
16310 cmb.a_ext_b = ext_local;
16311 cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16312 cmb.a_ext_d = GR_CMBX_ZERO;
16313 cmb.a_ext_d_invert = 0;
16314 break;
16315 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
16316 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16317 cmb.a_ext_a = ext_other;
16318 cmb.a_ext_a_mode = GR_FUNC_MODE_X;
16319 cmb.a_ext_b = ext_local;
16320 cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16321 cmb.a_ext_d = GR_CMBX_B;
16322 cmb.a_ext_d_invert = 0;
16323 break;
16324 case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
16325 case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16326 cmb.a_ext_a = GR_CMBX_ZERO;
16327 cmb.a_ext_a_mode = GR_FUNC_MODE_ZERO;
16328 cmb.a_ext_b = ext_local;
16329 cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16330 cmb.a_ext_d = GR_CMBX_B;
16331 cmb.a_ext_d_invert = 0;
16332 break;
16333 }
16334}
16335
16336void TexColorCombinerToExtension (GrChipID_t tmu)
16337{
16338 wxUint32 tc_ext_a, tc_ext_a_mode, tc_ext_b, tc_ext_b_mode, tc_ext_c, tc_ext_d;
16339 int tc_ext_c_invert, tc_ext_d_invert;
16340 wxUint32 tmu_func, tmu_fac;
16341
16342 if (tmu == GR_TMU0)
16343 {
16344 tmu_func = cmb.tmu0_func;
16345 tmu_fac = cmb.tmu0_fac;
16346 }
16347 else
16348 {
16349 tmu_func = cmb.tmu1_func;
16350 tmu_fac = cmb.tmu1_fac;
16351 }
16352
16353 switch (tmu_fac)
16354 {
16355 case GR_COMBINE_FACTOR_ZERO:
16356 tc_ext_c = GR_CMBX_ZERO;
16357 tc_ext_c_invert = 0;
16358 break;
16359 case GR_COMBINE_FACTOR_LOCAL:
16360 tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;
16361 tc_ext_c_invert = 0;
16362 break;
16363 case GR_COMBINE_FACTOR_LOCAL_ALPHA:
16364 tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16365 tc_ext_c_invert = 0;
16366 break;
16367 case GR_COMBINE_FACTOR_OTHER_ALPHA:
16368 tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16369 tc_ext_c_invert = 0;
16370 break;
16371 case GR_COMBINE_FACTOR_DETAIL_FACTOR:
16372 tc_ext_c = GR_CMBX_DETAIL_FACTOR;
16373 tc_ext_c_invert = 0;
16374 break;
16375 case GR_COMBINE_FACTOR_ONE:
16376 tc_ext_c = GR_CMBX_ZERO;
16377 tc_ext_c_invert = 1;
16378 break;
16379 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
16380 tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;
16381 tc_ext_c_invert = 1;
16382 break;
16383 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
16384 tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16385 tc_ext_c_invert = 1;
16386 break;
16387 case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16388 tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16389 tc_ext_c_invert = 1;
16390 break;
16391 case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:
16392 tc_ext_c = GR_CMBX_DETAIL_FACTOR;
16393 tc_ext_c_invert = 1;
16394 break;
16395 default:
16396 tc_ext_c = GR_CMBX_ZERO;
16397 tc_ext_c_invert = 0;
16398 break;
16399 }
16400
16401 switch (tmu_func)
16402 {
16403 case GR_COMBINE_FUNCTION_ZERO:
16404 tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
16405 tc_ext_a_mode = GR_FUNC_MODE_ZERO;
16406 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16407 tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16408 tc_ext_c = GR_CMBX_ZERO;
16409 tc_ext_c_invert = 0;
16410 tc_ext_d = GR_CMBX_ZERO;
16411 tc_ext_d_invert = 0;
16412 break;
16413 case GR_COMBINE_FUNCTION_LOCAL:
16414 tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
16415 tc_ext_a_mode = GR_FUNC_MODE_X;
16416 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16417 tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16418 tc_ext_c = GR_CMBX_ZERO;
16419 tc_ext_c_invert = 1;
16420 tc_ext_d = GR_CMBX_ZERO;
16421 tc_ext_d_invert = 0;
16422 break;
16423 case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
16424 tc_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16425 tc_ext_a_mode = GR_FUNC_MODE_X;
16426 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16427 tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16428 tc_ext_c = GR_CMBX_ZERO;
16429 tc_ext_c_invert = 1;
16430 tc_ext_d = GR_CMBX_ZERO;
16431 tc_ext_d_invert = 0;
16432 break;
16433 case GR_COMBINE_FUNCTION_SCALE_OTHER:
16434 tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16435 tc_ext_a_mode = GR_FUNC_MODE_X;
16436 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16437 tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16438 tc_ext_d = GR_CMBX_ZERO;
16439 tc_ext_d_invert = 0;
16440 break;
16441 case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
16442 tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16443 tc_ext_a_mode = GR_FUNC_MODE_X;
16444 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16445 tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16446 tc_ext_d = GR_CMBX_B;
16447 tc_ext_d_invert = 0;
16448 break;
16449 case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
16450 tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16451 tc_ext_a_mode = GR_FUNC_MODE_X;
16452 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16453 tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16454 tc_ext_d = GR_CMBX_B;
16455 tc_ext_d_invert = 0;
16456 break;
16457 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
16458 tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16459 tc_ext_a_mode = GR_FUNC_MODE_X;
16460 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16461 tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16462 tc_ext_d = GR_CMBX_ZERO;
16463 tc_ext_d_invert = 0;
16464 break;
16465 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
16466 tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16467 tc_ext_a_mode = GR_FUNC_MODE_X;
16468 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16469 tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16470 tc_ext_d = GR_CMBX_B;
16471 tc_ext_d_invert = 0;
16472 break;
16473 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16474 tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16475 tc_ext_a_mode = GR_FUNC_MODE_X;
16476 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16477 tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16478 tc_ext_d = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16479 tc_ext_d_invert = 0;
16480 break;
16481 case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
16482 tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
16483 tc_ext_a_mode = GR_FUNC_MODE_ZERO;
16484 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16485 tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16486 tc_ext_d = GR_CMBX_B;
16487 tc_ext_d_invert = 0;
16488 break;
16489 case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16490 tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
16491 tc_ext_a_mode = GR_FUNC_MODE_ZERO;
16492 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16493 tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16494 tc_ext_d = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16495 tc_ext_d_invert = 0;
16496 break;
16497 default:
16498 tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
16499 tc_ext_a_mode = GR_FUNC_MODE_ZERO;
16500 tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16501 tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16502 tc_ext_c = GR_CMBX_ZERO;
16503 tc_ext_c_invert = 0;
16504 tc_ext_d = GR_CMBX_ZERO;
16505 tc_ext_d_invert = 0;
16506 break;
16507 }
16508
16509 if (tmu == GR_TMU0)
16510 {
16511 cmb.t0c_ext_a = tc_ext_a;
16512 cmb.t0c_ext_a_mode = tc_ext_a_mode;
16513 cmb.t0c_ext_b = tc_ext_b;
16514 cmb.t0c_ext_b_mode = tc_ext_b_mode;
16515 cmb.t0c_ext_c = tc_ext_c;
16516 cmb.t0c_ext_c_invert = tc_ext_c_invert;
16517 cmb.t0c_ext_d = tc_ext_d;
16518 cmb.t0c_ext_d_invert = tc_ext_d_invert;
16519 }
16520 else
16521 {
16522 cmb.t1c_ext_a = tc_ext_a;
16523 cmb.t1c_ext_a_mode = tc_ext_a_mode;
16524 cmb.t1c_ext_b = tc_ext_b;
16525 cmb.t1c_ext_b_mode = tc_ext_b_mode;
16526 cmb.t1c_ext_c = tc_ext_c;
16527 cmb.t1c_ext_c_invert = tc_ext_c_invert;
16528 cmb.t1c_ext_d = tc_ext_d;
16529 cmb.t1c_ext_d_invert = tc_ext_d_invert;
16530 }
16531}
16532
16533void TexAlphaCombinerToExtension (GrChipID_t tmu)
16534{
16535 wxUint32 ta_ext_a, ta_ext_a_mode, ta_ext_b, ta_ext_b_mode, ta_ext_c, ta_ext_d;
16536 int ta_ext_c_invert, ta_ext_d_invert;
16537 wxUint32 tmu_a_func, tmu_a_fac;
16538
16539 if (tmu == GR_TMU0)
16540 {
16541 tmu_a_func = cmb.tmu0_a_func;
16542 tmu_a_fac = cmb.tmu0_a_fac;
16543 }
16544 else
16545 {
16546 tmu_a_func = cmb.tmu1_a_func;
16547 tmu_a_fac = cmb.tmu1_a_fac;
16548 }
16549
16550 switch (tmu_a_fac)
16551 {
16552 case GR_COMBINE_FACTOR_ZERO:
16553 ta_ext_c = GR_CMBX_ZERO;
16554 ta_ext_c_invert = 0;
16555 break;
16556 case GR_COMBINE_FACTOR_LOCAL:
16557 case GR_COMBINE_FACTOR_LOCAL_ALPHA:
16558 ta_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16559 ta_ext_c_invert = 0;
16560 break;
16561 case GR_COMBINE_FACTOR_OTHER_ALPHA:
16562 ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16563 ta_ext_c_invert = 0;
16564 break;
16565 case GR_COMBINE_FACTOR_DETAIL_FACTOR:
16566 ta_ext_c = GR_CMBX_DETAIL_FACTOR;
16567 ta_ext_c_invert = 0;
16568 break;
16569 case GR_COMBINE_FACTOR_ONE:
16570 ta_ext_c = GR_CMBX_ZERO;
16571 ta_ext_c_invert = 1;
16572 break;
16573 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
16574 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
16575 ta_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16576 ta_ext_c_invert = 1;
16577 break;
16578 case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16579 ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16580 ta_ext_c_invert = 1;
16581 break;
16582 case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:
16583 ta_ext_c = GR_CMBX_DETAIL_FACTOR;
16584 ta_ext_c_invert = 1;
16585 break;
16586 default:
16587 ta_ext_c = GR_CMBX_ZERO;
16588 ta_ext_c_invert = 0;
16589 break;
16590 }
16591
16592 switch (tmu_a_func)
16593 {
16594 case GR_COMBINE_FUNCTION_ZERO:
16595 ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16596 ta_ext_a_mode = GR_FUNC_MODE_ZERO;
16597 ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16598 ta_ext_b_mode = GR_FUNC_MODE_ZERO;
16599 ta_ext_c = GR_CMBX_ZERO;
16600 ta_ext_c_invert = 0;
16601 ta_ext_d = GR_CMBX_ZERO;
16602 ta_ext_d_invert = 0;
16603 break;
16604 case GR_COMBINE_FUNCTION_LOCAL:
16605 case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
16606 ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16607 ta_ext_a_mode = GR_FUNC_MODE_X;
16608 ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16609 ta_ext_b_mode = GR_FUNC_MODE_ZERO;
16610 ta_ext_c = GR_CMBX_ZERO;
16611 ta_ext_c_invert = 1;
16612 ta_ext_d = GR_CMBX_ZERO;
16613 ta_ext_d_invert = 0;
16614 break;
16615 case GR_COMBINE_FUNCTION_SCALE_OTHER:
16616 ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
16617 ta_ext_a_mode = GR_FUNC_MODE_X;
16618 ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16619 ta_ext_b_mode = GR_FUNC_MODE_ZERO;
16620 ta_ext_d = GR_CMBX_ZERO;
16621 ta_ext_d_invert = 0;
16622 break;
16623 case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
16624 case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
16625 ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
16626 ta_ext_a_mode = GR_FUNC_MODE_X;
16627 ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16628 ta_ext_b_mode = GR_FUNC_MODE_ZERO;
16629 ta_ext_d = GR_CMBX_B;
16630 ta_ext_d_invert = 0;
16631 break;
16632 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
16633 ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
16634 ta_ext_a_mode = GR_FUNC_MODE_X;
16635 ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16636 ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16637 ta_ext_d = GR_CMBX_ZERO;
16638 ta_ext_d_invert = 0;
16639 break;
16640 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
16641 case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16642 ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
16643 ta_ext_a_mode = GR_FUNC_MODE_X;
16644 ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16645 ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16646 ta_ext_d = GR_CMBX_B;
16647 ta_ext_d_invert = 0;
16648 break;
16649 case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
16650 case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16651 ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16652 ta_ext_a_mode = GR_FUNC_MODE_ZERO;
16653 ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16654 ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16655 ta_ext_d = GR_CMBX_B;
16656 ta_ext_d_invert = 0;
16657 break;
16658 default:
16659 ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16660 ta_ext_a_mode = GR_FUNC_MODE_ZERO;
16661 ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16662 ta_ext_b_mode = GR_FUNC_MODE_ZERO;
16663 ta_ext_c = GR_CMBX_ZERO;
16664 ta_ext_c_invert = 0;
16665 ta_ext_d = GR_CMBX_ZERO;
16666 ta_ext_d_invert = 0;
16667 break;
16668 }
16669
16670 if (tmu == GR_TMU0)
16671 {
16672 cmb.t0a_ext_a = ta_ext_a;
16673 cmb.t0a_ext_a_mode = ta_ext_a_mode;
16674 cmb.t0a_ext_b = ta_ext_b;
16675 cmb.t0a_ext_b_mode = ta_ext_b_mode;
16676 cmb.t0a_ext_c = ta_ext_c;
16677 cmb.t0a_ext_c_invert = ta_ext_c_invert;
16678 cmb.t0a_ext_d = ta_ext_d;
16679 cmb.t0a_ext_d_invert = ta_ext_d_invert;
16680 }
16681 else
16682 {
16683 cmb.t1a_ext_a = ta_ext_a;
16684 cmb.t1a_ext_a_mode = ta_ext_a_mode;
16685 cmb.t1a_ext_b = ta_ext_b;
16686 cmb.t1a_ext_b_mode = ta_ext_b_mode;
16687 cmb.t1a_ext_c = ta_ext_c;
16688 cmb.t1a_ext_c_invert = ta_ext_c_invert;
16689 cmb.t1a_ext_d = ta_ext_d;
16690 cmb.t1a_ext_d_invert = ta_ext_d_invert;
16691 }
16692}