2 * Glide64 - Glide video plugin for Nintendo 64 emulators.
3 * Copyright (c) 2002 Dave2001
4 * Copyright (c) 2003-2009 Sergey 'Gonetz' Lipski
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
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.
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
21 //****************************************************************
23 // Glide64 - Glide Plugin for Nintendo 64 emulators
24 // Project started on December 29th, 2001
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
32 //****************************************************************
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.
38 //****************************************************************
44 #define FASTSEARCH // Enable fast combine mode searching algorithm
46 float percent_org, percent, r, g, b;
49 wxUint32 cc_lookup[257];
50 wxUint32 ac_lookup[257];
53 //****************************************************************
55 //****************************************************************
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
68 #define A_BLEND(f1,f2) cmb.abf1=f1,cmb.abf2=f2
70 // To make a color or alpha combine
71 #define CCMB(fnc,fac,loc,oth) \
76 #define ACMB(fnc,fac,loc,oth) \
81 #define CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
83 cmb.c_ext_a_mode = a_mode, \
85 cmb.c_ext_b_mode = b_mode, \
87 cmb.c_ext_c_invert = c_invert, \
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) \
93 cmb.a_ext_a_mode = a_mode, \
95 cmb.a_ext_b_mode = b_mode, \
97 cmb.a_ext_c_invert = c_invert, \
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) \
103 cmb.t0c_ext_a_mode = a_mode, \
105 cmb.t0c_ext_b_mode = b_mode, \
107 cmb.t0c_ext_c_invert = c_invert, \
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) \
113 cmb.t0a_ext_a_mode = a_mode, \
115 cmb.t0a_ext_b_mode = b_mode, \
117 cmb.t0a_ext_c_invert = c_invert, \
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) \
123 cmb.t1c_ext_a_mode = a_mode, \
125 cmb.t1c_ext_b_mode = b_mode, \
127 cmb.t1c_ext_c_invert = c_invert, \
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) \
133 cmb.t1a_ext_a_mode = a_mode, \
135 cmb.t1a_ext_b_mode = b_mode, \
137 cmb.t1a_ext_c_invert = c_invert, \
139 cmb.t1a_ext_d_invert = d_invert, \
140 cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA
146 cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL
148 if (voodoo.num_tmu > 1) { \
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; \
158 #define T0_ADD_T1() \
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() \
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() \
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() \
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() \
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) { \
192 else if (factor == 0x00) { \
196 if (factor <= 0x80) rdp.best_tex = 0; \
197 else rdp.best_tex = 1; \
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; \
205 #define T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\
206 if (factor == 0xFF) { \
209 else if (factor == 0x00) { \
213 if (factor <= 0x80) rdp.best_tex = 0; \
214 else rdp.best_tex = 1; \
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; \
222 #define T0_INTER_T1_USING_T0() \
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() \
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); \
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; \
259 #define T0_INTER_T1_USING_T1A() \
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)); \
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; \
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)); \
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; \
317 #define T0_INTER_T1_USING_ENV() \
318 if (!cmb.combine_ext) { \
319 T0_INTER_T1_USING_FACTOR ((rdp.env_color&0xFF)); \
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; \
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)); \
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; \
369 #define T0_INTER_T1_USING_SHADEA() \
370 if (!cmb.combine_ext) { \
371 T0_INTER_T1_USING_FACTOR (0x7F); \
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; \
394 #define T1_INTER_T0_USING_SHADEA() \
395 if (!cmb.combine_ext) { \
396 T0_INTER_T1_USING_FACTOR (0x7F); \
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; \
419 #define T1_SUB_T0() \
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() \
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() \
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() \
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() \
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() \
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) \
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, \
467 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X, \
468 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X, \
471 cmb.tex_ccolor = rdp.prim_color; \
473 percent = (float)(lod_frac) / 255.0f; \
474 cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
479 MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC); \
480 MOD_1_COL (rdp.prim_color & 0xFFFFFF00); \
481 MOD_1_FAC (lod_frac & 0xFF); \
483 #define PRIM_INTER_T0_USING_SHADEA() \
484 if (!cmb.combine_ext) { \
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; \
504 cmb.tmu0_a_func = GR_COMBINE_FUNCTION_LOCAL
506 if (voodoo.num_tmu > 1) { \
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; \
515 #define A_T0_ADD_T1() \
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() \
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() \
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() \
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() \
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() \
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() \
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) { \
557 else if (factor == 0x00) { \
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; \
568 #define A_T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\
569 if (factor == 0xFF) { \
572 else if (factor == 0x00) { \
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; \
583 #define A_T0_INTER_T1_USING_SHADEA() \
584 if (!cmb.combine_ext) { \
585 A_T0_INTER_T1_USING_FACTOR (0x7F); \
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; \
608 #define A_T1_MUL_PRIMLOD_ADD_T0() \
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() \
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() \
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
634 // UNIMP - writes to the unimplemented log, if it's enabled
636 #define UNIMPMODE() { \
637 std::ofstream unimp; \
638 unimp.open("unimp.txt", std::ios::app); \
646 // Bright red, sets up a bright red combine
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; \
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 ; \
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 ; \
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 ; \
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)
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; \
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; \
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; \
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; \
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)
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))
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; \
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; \
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; \
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; \
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; \
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; \
792 #define MULSHADE_SHADEA() rdp.cmb_flags |= CMB_MULT_OWN_ALPHA;
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);
805 #define XSHADE_A(color, flag) { \
806 rdp.col[3] *= (float)(color & 0xFF) / 255.0f; \
807 rdp.cmb_flags |= flag; \
809 #define XSHADE1M_A(color, flag) { \
810 rdp.col[3] *= 1.0f-((float)(color & 0xFF) / 255.0f); \
811 rdp.cmb_flags |= flag; \
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; \
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)
828 #define XSHADEADD_A(color, flag) { \
829 rdp.coladd[3] *= (float)(color & 0xFF) / 255.0f; \
830 rdp.cmb_flags |= flag; \
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)
837 //****************************************************************
839 //****************************************************************
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
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
850 // New version ordered by:
856 static void cc_one ()
858 CCMB (GR_COMBINE_FUNCTION_LOCAL,
859 GR_COMBINE_FACTOR_NONE,
860 GR_COMBINE_LOCAL_CONSTANT,
861 GR_COMBINE_OTHER_NONE);
866 static void cc_zero ()
868 CCMB (GR_COMBINE_FUNCTION_LOCAL,
869 GR_COMBINE_FACTOR_NONE,
870 GR_COMBINE_LOCAL_CONSTANT,
871 GR_COMBINE_OTHER_NONE);
877 if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))
879 wxUint32 blend_mode = (rdp.othermode_l >> 16);
880 if (blend_mode == 0xa500)
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));
892 else if (blend_mode == 0x55f0) //cmem*afog + cfog*1ma
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);
903 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
904 GR_COMBINE_FACTOR_ONE,
905 GR_COMBINE_LOCAL_NONE,
906 GR_COMBINE_OTHER_TEXTURE);
911 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
912 GR_COMBINE_FACTOR_ONE,
913 GR_COMBINE_LOCAL_NONE,
914 GR_COMBINE_OTHER_TEXTURE);
919 static void cc_t0a ()
921 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
922 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
923 GR_COMBINE_LOCAL_NONE,
924 GR_COMBINE_OTHER_CONSTANT);
930 static void cc_t1 () //Added by Gonetz
932 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
933 GR_COMBINE_FACTOR_ONE,
934 GR_COMBINE_LOCAL_NONE,
935 GR_COMBINE_OTHER_TEXTURE);
939 static void cc_t0_mul_t1 ()
941 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
942 GR_COMBINE_FACTOR_ONE,
943 GR_COMBINE_LOCAL_NONE,
944 GR_COMBINE_OTHER_TEXTURE);
948 static void cc_t0_mul_t1_add_t0 () //Added by Gonetz
950 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
951 GR_COMBINE_FACTOR_ONE,
952 GR_COMBINE_LOCAL_NONE,
953 GR_COMBINE_OTHER_TEXTURE);
958 static void cc_t1_inter__env_inter_t0_using_k5__using_t1a ()
960 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
961 GR_COMBINE_FACTOR_ONE,
962 GR_COMBINE_LOCAL_NONE,
963 GR_COMBINE_OTHER_TEXTURE);
964 wxUint32 col1 = (rdp.K5<<24) | (rdp.K5<<16) | (rdp.K5<<8);
965 MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
966 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
967 MOD_0_COL1 (col1 & 0xFFFFFF00);
970 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;
971 cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL;
972 cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND;
973 cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA;
977 static void cc_t1_inter_t0_using_env ()
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 ();
986 static void cc_prim ()
988 CCMB (GR_COMBINE_FUNCTION_LOCAL,
989 GR_COMBINE_FACTOR_NONE,
990 GR_COMBINE_LOCAL_CONSTANT,
991 GR_COMBINE_OTHER_NONE);
995 static void cc_env ()
997 CCMB (GR_COMBINE_FUNCTION_LOCAL,
998 GR_COMBINE_FACTOR_NONE,
999 GR_COMBINE_LOCAL_CONSTANT,
1000 GR_COMBINE_OTHER_NONE);
1004 static void cc_scale ()
1006 CCMB (GR_COMBINE_FUNCTION_LOCAL,
1007 GR_COMBINE_FACTOR_NONE,
1008 GR_COMBINE_LOCAL_CONSTANT,
1009 GR_COMBINE_OTHER_NONE);
1013 static void cc_shade ()
1015 CCMB (GR_COMBINE_FUNCTION_LOCAL,
1016 GR_COMBINE_FACTOR_NONE,
1017 GR_COMBINE_LOCAL_ITERATED,
1018 GR_COMBINE_OTHER_NONE);
1021 static void cc_one_mul_shade ()
1023 if ((settings.hacks&hack_Knockout) && (rdp.aTBuffTex[0] || rdp.aTBuffTex[1] || rdp.cur_image)) //hack for boxer shadow
1025 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1026 GR_COMBINE_FACTOR_LOCAL,
1027 GR_COMBINE_LOCAL_CONSTANT,
1028 GR_COMBINE_OTHER_TEXTURE);
1038 static void cc_shadea ()
1040 CCMB (GR_COMBINE_FUNCTION_LOCAL_ALPHA,
1041 GR_COMBINE_FACTOR_NONE,
1042 GR_COMBINE_LOCAL_ITERATED,
1043 GR_COMBINE_OTHER_NONE);
1046 static void cc_t0_mul_prim ()
1048 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1049 GR_COMBINE_FACTOR_LOCAL,
1050 GR_COMBINE_LOCAL_CONSTANT,
1051 GR_COMBINE_OTHER_TEXTURE);
1056 static void cc_t0_mul_prima ()
1058 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1059 GR_COMBINE_FACTOR_LOCAL,
1060 GR_COMBINE_LOCAL_CONSTANT,
1061 GR_COMBINE_OTHER_TEXTURE);
1066 static void cc_t1_mul_prim ()
1068 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1069 GR_COMBINE_FACTOR_LOCAL,
1070 GR_COMBINE_LOCAL_CONSTANT,
1071 GR_COMBINE_OTHER_TEXTURE);
1073 if ((rdp.cycle1 & 0xFFFF) == (rdp.cycle2 & 0xFFFF)) // 1 cycle, use t0
1083 static void cc_t0a_mul_prim ()
1085 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1086 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
1087 GR_COMBINE_LOCAL_NONE,
1088 GR_COMBINE_OTHER_CONSTANT);
1094 static void cc__t1_inter_t0_using_enva__mul_prim ()
1096 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1097 GR_COMBINE_FACTOR_LOCAL,
1098 GR_COMBINE_LOCAL_CONSTANT,
1099 GR_COMBINE_OTHER_TEXTURE);
1101 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
1102 T1_INTER_T0_USING_FACTOR (factor);
1105 static void cc__t0_inter_one_using_t1__mul_prim ()
1107 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1108 GR_COMBINE_FACTOR_LOCAL,
1109 GR_COMBINE_LOCAL_CONSTANT,
1110 GR_COMBINE_OTHER_TEXTURE);
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;
1119 static void cc__t0_inter_one_using_primlod__mul_prim ()
1121 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1122 GR_COMBINE_FACTOR_LOCAL,
1123 GR_COMBINE_LOCAL_CONSTANT,
1124 GR_COMBINE_OTHER_TEXTURE);
1126 if (cmb.combine_ext)
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,
1133 percent = (float)lod_frac / 255.0f;
1134 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
1138 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1139 MOD_0_COL (0xFFFFFF00);
1140 MOD_0_FAC (lod_frac);
1145 static void cc__t1_inter_one_using_env__mul_prim ()
1147 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1148 GR_COMBINE_FACTOR_LOCAL,
1149 GR_COMBINE_LOCAL_CONSTANT,
1150 GR_COMBINE_OTHER_TEXTURE);
1152 if (cmb.combine_ext)
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,
1158 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1159 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1163 cmb.tex_ccolor = rdp.env_color;
1171 static void cc__t1_inter_one_using_enva__mul_t0 ()
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)
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,
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,
1188 cmb.tex_ccolor = 0xFFFFFF00 | (rdp.env_color&0xFF);
1192 if ((rdp.env_color&0xFF) == 0xFF)
1204 static void cc_prim_mul_prim ()
1206 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1207 GR_COMBINE_FACTOR_LOCAL,
1208 GR_COMBINE_LOCAL_ITERATED,
1209 GR_COMBINE_OTHER_CONSTANT);
1214 static void cc_prim_mul_prima ()
1216 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1217 GR_COMBINE_FACTOR_LOCAL,
1218 GR_COMBINE_LOCAL_CONSTANT,
1219 GR_COMBINE_OTHER_ITERATED);
1224 static void cc_t1_mul_prima ()
1226 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1227 GR_COMBINE_FACTOR_LOCAL,
1228 GR_COMBINE_LOCAL_CONSTANT,
1229 GR_COMBINE_OTHER_TEXTURE);
1234 static void cc_t1_mul_enva ()
1236 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1237 GR_COMBINE_FACTOR_LOCAL,
1238 GR_COMBINE_LOCAL_CONSTANT,
1239 GR_COMBINE_OTHER_TEXTURE);
1244 static void cc_t0_mul_env ()
1246 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1247 GR_COMBINE_FACTOR_LOCAL,
1248 GR_COMBINE_LOCAL_CONSTANT,
1249 GR_COMBINE_OTHER_TEXTURE);
1254 static void cc_t1_mul_env ()
1256 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1257 GR_COMBINE_FACTOR_LOCAL,
1258 GR_COMBINE_LOCAL_CONSTANT,
1259 GR_COMBINE_OTHER_TEXTURE);
1265 static void cc_t0_mul_enva ()
1267 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1268 GR_COMBINE_FACTOR_LOCAL,
1269 GR_COMBINE_LOCAL_CONSTANT,
1270 GR_COMBINE_OTHER_TEXTURE);
1275 static void cc_t0_mul_scale ()
1277 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1278 GR_COMBINE_FACTOR_LOCAL,
1279 GR_COMBINE_LOCAL_CONSTANT,
1280 GR_COMBINE_OTHER_TEXTURE);
1285 static void cc_t0_mul_enva_add_prim ()
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);
1296 static void cc_t0_mul_shade ()
1298 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1299 GR_COMBINE_FACTOR_LOCAL,
1300 GR_COMBINE_LOCAL_ITERATED,
1301 GR_COMBINE_OTHER_TEXTURE);
1305 static void cc_f1_sky ()
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);
1312 MULSHADE_ENVSUBPRIM ();
1317 static void cc_t0_mul_shadea ()
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 ();
1327 static void cc_t0_mul_k5 ()
1329 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1330 GR_COMBINE_FACTOR_LOCAL,
1331 GR_COMBINE_LOCAL_CONSTANT,
1332 GR_COMBINE_OTHER_TEXTURE);
1337 static void cc_t1_mul_shade ()
1339 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1340 GR_COMBINE_FACTOR_LOCAL,
1341 GR_COMBINE_LOCAL_ITERATED,
1342 GR_COMBINE_OTHER_TEXTURE);
1347 static void cc__t0_add_t1__mul_shade ()
1349 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1350 GR_COMBINE_FACTOR_LOCAL,
1351 GR_COMBINE_LOCAL_ITERATED,
1352 GR_COMBINE_OTHER_TEXTURE);
1356 static void cc__t0_mul_shade__add__t1_mul_shade ()
1358 //combiner is used in Spiderman. It seems that t0 is used instead of t1
1359 if (cmb.combine_ext)
1361 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1362 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1366 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
1367 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1373 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1374 GR_COMBINE_FACTOR_LOCAL,
1375 GR_COMBINE_LOCAL_ITERATED,
1376 GR_COMBINE_OTHER_TEXTURE);
1381 static void cc__t0_mul_prim__inter_env_using_enva ()
1383 wxUint32 enva = rdp.env_color&0xFF;
1388 else if (cmb.combine_ext)
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,
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,
1405 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1406 GR_COMBINE_FACTOR_LOCAL,
1407 GR_COMBINE_LOCAL_ITERATED,
1408 GR_COMBINE_OTHER_TEXTURE);
1410 INTERSHADE_2 (rdp.env_color & 0xFFFFFF00, rdp.env_color & 0xFF);
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);
1419 static void cc__t1_inter_t0_using_t1__mul_shade ()
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)
1427 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1428 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1431 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1432 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1439 T0_INTER_T1_USING_FACTOR (0x7F);
1444 static void cc__t1_inter_t0_using_enva__mul_shade ()
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);
1455 static void cc__t1_inter_t0_using_shadea__mul_shade ()
1457 if (!cmb.combine_ext) {
1461 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1462 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
1465 T1_INTER_T0_USING_SHADEA ();
1469 static void cc__t0_inter_one_using_prim__mul_shade ()
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)
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,
1483 cmb.tex_ccolor = rdp.prim_color;
1488 MOD_0 (TMOD_TEX_INTER_COL_USING_COL1);
1489 MOD_0_COL (0xFFFFFF00);
1490 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
1494 static void cc__t0_inter_one_using_primlod__mul_shade ()
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)
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,
1507 percent = (float)lod_frac / 255.0f;
1508 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
1512 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1513 MOD_0_COL (0xFFFFFF00);
1514 MOD_0_FAC (lod_frac);
1520 static void cc__t0_inter_env_using_enva__mul_shade ()
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)
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,
1534 cmb.tex_ccolor = rdp.env_color;
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);
1546 static void cc__t0_inter_env_using_shadea__mul_shade ()
1548 // (env-t0)*shade_a+t0, (cmb-0)*shade+0
1549 if (cmb.combine_ext)
1551 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1552 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
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,
1568 static void cc__t0_mul_prim_add_env__mul_shade ()
1570 if (cmb.combine_ext)
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,
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,
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);
1597 static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade ()
1599 if (cmb.combine_ext)
1601 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1602 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
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,
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);
1628 static void cc__t1_sub_prim_mul_t0__mul_shade ()
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)
1636 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1637 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
1644 cmb.tex_ccolor = rdp.prim_color;
1653 static void cc__t1_sub_t0_mul_t0_add_shade__mul_shade () //Aded by Gonetz
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)
1661 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1662 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
1673 T1_SUB_T0_MUL_T0 ();
1677 static void cc__one_sub_shade_mul_t0_add_shade__mul_shade ()
1679 if (cmb.combine_ext)
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,
1686 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1687 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
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);
1701 static void cc__t0_sub_prim_mul_t1_add_t1__mul_shade ()
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)
1709 MOD_0 (TMOD_TEX_SUB_COL);
1710 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1712 if (cmb.combine_ext)
1714 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1715 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
1730 static void cc__t1_sub_env_mul_t0_add_t0__mul_shade ()
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)
1738 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1739 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
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,
1746 cmb.tex_ccolor = rdp.env_color;
1751 MOD_1 (TMOD_TEX_SUB_COL);
1752 MOD_1_COL (rdp.env_color & 0xFFFFFF00);
1753 T0_MUL_T1_ADD_T0 ();
1757 static void cc__t0_mul_prima_add_prim_mul__shade ()
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)
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,
1769 cmb.tex_ccolor = rdp.prim_color;
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);
1781 static void cc__t0_inter_prim_using_prima__inter_env_using_enva ()
1783 if (cmb.combine_ext)
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,
1789 cmb.tex_ccolor = rdp.prim_color;
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,
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);
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);
1814 static void cc_prim_inter_t1_mul_shade_using_texa ()
1816 if (cmb.combine_ext)
1818 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1819 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1822 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1823 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
1838 static void cc__prim_inter_t0_using_t0a__mul_shade ()
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)
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,
1850 cmb.tex_ccolor = rdp.prim_color;
1855 MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);
1856 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1861 static void cc__prim_inter_t0_using_t0a__inter_env_using_enva ()
1863 if (cmb.combine_ext)
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,
1869 cmb.tex_ccolor = rdp.prim_color;
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,
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);
1887 MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);
1888 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1895 static void cc__prim_inter_t0_using_shadea__mul_shade ()
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 ();
1904 static void cc_t0_sub_shade_mul_shadea_add_shade ();
1905 static void cc__shade_inter_t0_using_shadea__mul_shade ()
1907 if (cmb.combine_ext)
1909 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1910 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
1914 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1915 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
1921 cc_t0_sub_shade_mul_shadea_add_shade ();
1925 static void cc__prim_inter_env_using_enva__mul_shade ()
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);
1947 static void cc_prim_mul_env ()
1949 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1950 GR_COMBINE_FACTOR_LOCAL,
1951 GR_COMBINE_LOCAL_ITERATED,
1952 GR_COMBINE_OTHER_CONSTANT);
1957 static void cc_prim_mul_shade ()
1959 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1960 GR_COMBINE_FACTOR_LOCAL,
1961 GR_COMBINE_LOCAL_ITERATED,
1962 GR_COMBINE_OTHER_CONSTANT);
1966 static void cc_prim_mul_shadea ()
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 ();
1976 static void cc_env_mul_shade ()
1978 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1979 GR_COMBINE_FACTOR_LOCAL,
1980 GR_COMBINE_LOCAL_ITERATED,
1981 GR_COMBINE_OTHER_CONSTANT);
1985 static void cc_env_mul_enva ()
1987 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1988 GR_COMBINE_FACTOR_OTHER_ALPHA,
1989 GR_COMBINE_LOCAL_NONE,
1990 GR_COMBINE_OTHER_CONSTANT);
1995 static void cc_scale_mul_shade ()
1997 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1998 GR_COMBINE_FACTOR_LOCAL,
1999 GR_COMBINE_LOCAL_ITERATED,
2000 GR_COMBINE_OTHER_CONSTANT);
2006 static void cc_t0_add_prim () //Aded by Gonetz
2008 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2009 GR_COMBINE_FACTOR_ONE,
2010 GR_COMBINE_LOCAL_CONSTANT,
2011 GR_COMBINE_OTHER_TEXTURE);
2016 static void cc__t0_mul_t1__add_prim () //Aded by Gonetz
2018 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2019 GR_COMBINE_FACTOR_ONE,
2020 GR_COMBINE_LOCAL_CONSTANT,
2021 GR_COMBINE_OTHER_TEXTURE);
2026 static void cc_t0_add_env ()
2028 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2029 GR_COMBINE_FACTOR_ONE,
2030 GR_COMBINE_LOCAL_CONSTANT,
2031 GR_COMBINE_OTHER_TEXTURE);
2037 static void cc__t0_mul_t1__add_env ()
2039 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2040 GR_COMBINE_FACTOR_ONE,
2041 GR_COMBINE_LOCAL_CONSTANT,
2042 GR_COMBINE_OTHER_TEXTURE);
2047 static void cc__t0_mul_t1__add_env_mul__t0_mul_t1__add_env ()
2049 if (cmb.combine_ext)
2051 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2052 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
2059 cmb.tex_ccolor = rdp.env_color;
2061 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2062 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
2063 GR_CMBX_TEXTURE_RGB, 0,
2067 cc__t0_mul_t1__add_env();
2070 static void cc_t0_add_shade () //Aded by Gonetz
2072 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2073 GR_COMBINE_FACTOR_ONE,
2074 GR_COMBINE_LOCAL_ITERATED,
2075 GR_COMBINE_OTHER_TEXTURE);
2079 static void cc__t0_mul_t1__add_shade () //Aded by Gonetz
2081 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2082 GR_COMBINE_FACTOR_ONE,
2083 GR_COMBINE_LOCAL_ITERATED,
2084 GR_COMBINE_OTHER_TEXTURE);
2088 static void cc_prim_add_env ()
2090 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2091 GR_COMBINE_FACTOR_ONE,
2092 GR_COMBINE_LOCAL_CONSTANT,
2093 GR_COMBINE_OTHER_ITERATED);
2098 static void cc_t0_add_prim_mul_one_sub_t0_add_t0 () //Aded by Gonetz
2100 if (cmb.combine_ext)
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,
2106 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2107 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
2110 cmb.tex_ccolor = rdp.prim_color;
2119 static void cc_one_sub_prim_mul_t0_add_prim();
2120 static void cc__one_sub_prim_mul_t0_add_prim__mul_prima_add__one_sub_prim_mul_t0_add_prim () //Aded by Gonetz
2122 if (cmb.combine_ext)
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,
2128 CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
2129 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2130 GR_CMBX_CONSTANT_COLOR, 0,
2132 cmb.tex_ccolor = rdp.prim_color;
2134 cmb.tex |= 3; //hw frame buffer allocated as tile1, but not used in combiner
2138 cc_one_sub_prim_mul_t0_add_prim();
2143 static void cc_prim_add_shade () //Aded by Gonetz
2145 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2146 GR_COMBINE_FACTOR_ONE,
2147 GR_COMBINE_LOCAL_ITERATED,
2148 GR_COMBINE_OTHER_CONSTANT);
2152 static void cc_env_add_shade () //Aded by Gonetz
2154 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2155 GR_COMBINE_FACTOR_ONE,
2156 GR_COMBINE_LOCAL_ITERATED,
2157 GR_COMBINE_OTHER_CONSTANT);
2161 static void cc_shade_add_shade () //Aded by Gonetz
2163 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2164 GR_COMBINE_FACTOR_ONE,
2165 GR_COMBINE_LOCAL_ITERATED,
2166 GR_COMBINE_OTHER_ITERATED);
2170 static void cc__t0_inter_t1_using_enva__sub_env () //Aded by Gonetz
2172 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
2173 GR_COMBINE_FACTOR_ONE,
2174 GR_COMBINE_LOCAL_CONSTANT,
2175 GR_COMBINE_OTHER_TEXTURE);
2177 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
2178 T0_INTER_T1_USING_FACTOR (factor);
2181 static void cc_t0_sub__shade_mul_center ()
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);
2192 static void cc_env_sub__t0_sub_t1_mul_primlod__mul_prim () //Aded by Gonetz
2194 if (cmb.combine_ext)
2196 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2197 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2200 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2201 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2205 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
2206 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2210 SETSHADE_PRIMLOD ();
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);
2221 T1_INTER_T0_USING_FACTOR (lod_frac);
2225 static void cc_env_sub__t0_mul_scale_add_env__mul_prim ()
2227 if (cmb.combine_ext)
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,
2233 cmb.tex_ccolor = rdp.SCALE;
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,
2246 static void cc_one_sub__one_sub_t0_mul_enva_add_prim__mul_prim () //Aded by Gonetz
2248 if (cmb.combine_ext)
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,
2254 cmb.tex_ccolor = rdp.prim_color;
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,
2272 static void cc_t0_add_env_mul_k5 ()
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));
2289 static void cc_t0_add_shade_mul_env ()
2291 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2292 GR_COMBINE_FACTOR_ONE,
2293 GR_COMBINE_LOCAL_ITERATED,
2294 GR_COMBINE_OTHER_TEXTURE);
2299 static void cc__t1_mul_t0_add_t0__add_prim_mul_shade () //Aded by Gonetz
2301 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2302 GR_COMBINE_FACTOR_ONE,
2303 GR_COMBINE_LOCAL_ITERATED,
2304 GR_COMBINE_OTHER_TEXTURE);
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;
2313 static void cc__t0_sub_env_mul_enva__add_prim_mul_shade ()
2315 if (cmb.combine_ext)
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,
2321 cmb.tex_ccolor = rdp.env_color;
2323 percent = (float)(rdp.env_color&0xFF) / 255.0f;
2324 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
2326 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
2327 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2328 GR_CMBX_CONSTANT_COLOR, 0,
2333 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2334 GR_COMBINE_FACTOR_ONE,
2335 GR_COMBINE_LOCAL_ITERATED,
2336 GR_COMBINE_OTHER_TEXTURE);
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);
2347 static void cc_t0_mul_prim_add_t1 ()
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)
2355 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2356 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
2364 cmb.tex_ccolor = rdp.prim_color;
2368 MOD_0 (TMOD_TEX_MUL_COL);
2369 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
2374 static void cc_shirt ()
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)
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,
2390 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2391 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
2400 cmb.tex_ccolor = rdp.prim_color;
2404 MOD_1 (TMOD_TEX_MUL_COL);
2405 MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
2410 static void cc_t1_mul_prim_add_prim ()
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);
2422 static void cc_t0_mul_prim_add_env ()
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);
2434 static void cc_t1_mul_prim_add_env ()
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);
2445 static void cc__t0_add_primlod__mul_prim_add_env ()
2447 if (cmb.combine_ext)
2449 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2450 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
2453 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2454 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
2458 cmb.tex_ccolor = cmb.ccolor;
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);
2470 MOD_0 (TMOD_TEX_ADD_COL);
2471 MOD_0_COL (cmb.ccolor & 0xFFFFFF00);
2479 static void cc_t0_mul_prim_mul_shade_add_prim_mul_shade ()
2481 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2482 GR_COMBINE_FACTOR_LOCAL,
2483 GR_COMBINE_LOCAL_ITERATED,
2484 GR_COMBINE_OTHER_TEXTURE);
2490 static void cc__t0_inter_t1_using_primlod__mul_prim_add_env ()
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);
2498 T0_INTER_T1_USING_FACTOR (lod_frac);
2501 static void cc__t1_sub_prim_mul_enva_add_t0__mul_prim_add_env ()
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);
2509 if (cmb.combine_ext)
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,
2515 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2516 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2519 cmb.tex_ccolor = rdp.prim_color;
2521 percent = (float)(rdp.env_color&0xFF) / 255.0f;
2522 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
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);
2534 static void cc__t0_inter_t1_using_primlod__mul_shade_add_env ()
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);
2541 T0_INTER_T1_USING_FACTOR (lod_frac);
2545 static void cc__t1_sub_prim_mul_primlod_add_t0__mul_prim_add_env ()
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);
2553 T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
2557 static void cc__t0_mul_t1__mul_prim_add_env ()
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);
2569 static void cc__t0_mul_t1__sub_prim_mul_env_add_shade ()
2571 if (cmb.combine_ext)
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,
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,
2581 cmb.tex_ccolor = rdp.env_color;
2583 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
2584 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
2586 GR_CMBX_TEXTURE_RGB, 0);
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);
2600 static void cc__t0_sub_prim_mul_t1_add_t1__mul_env_add_shade ()
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);
2607 if (rdp.prim_color & 0xFFFFFF00)
2609 MOD_0 (TMOD_TEX_SUB_COL);
2610 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
2612 if (cmb.combine_ext)
2614 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2615 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
2630 static void cc__t0_mul_t1__mul_shade_add_prim ()
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);
2640 static void cc__t0_mul_shadea_add_env__mul_shade_add_prim ()
2642 if (cmb.combine_ext)
2644 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2645 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
2648 cmb.tex_ccolor = rdp.env_color;
2650 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2651 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
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);
2668 static void cc__t0_mul_t1__mul_shade_add_env ()
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);
2679 static void cc__t0_add_t1__mul_shade_add_env ()
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);
2689 static void cc__t1_mul_prima_add_t0__mul_shade_add_env ()
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);
2696 T1_MUL_PRIMA_ADD_T0 ();
2699 static void cc__t0_inter_t1_using_enva__mul_shade_add_prim ()
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);
2706 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
2707 T0_INTER_T1_USING_FACTOR (factor);
2710 static void cc__t0_inter_t1_using_enva__mul_shade_add_env ()
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);
2717 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
2718 T0_INTER_T1_USING_FACTOR (factor);
2722 static void cc_t0_mul_primlod_add_prim ()
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);
2733 static void cc__t0_mul_primlod__add__prim_mul_shade ()
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);
2745 static void cc_t0_mul_primlod_add_prim_mul_shade_add_env ()
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);
2758 static void cc_t1_mul_primlod_add_prim_mul_shade_add_env ()
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);
2770 static void cc__t0_inter_t1_using_primlod__mul_shade_add_prim ()
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);
2777 T0_INTER_T1_USING_FACTOR (lod_frac);
2780 static void cc__t1_inter_t0_using_primlod__mul_shade_add_prim ()
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);
2787 T1_INTER_T0_USING_FACTOR (lod_frac);
2791 static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade_add_shade ()
2793 if (cmb.combine_ext)
2795 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2796 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
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,
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);
2823 static void cc__t0_inter_t1_using_half__mul_prim_add_env ()
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);
2831 T0_INTER_T1_USING_FACTOR (0x7F);
2835 static void cc__t0_inter_t1_using_t1__mul_prim_add_shade ()
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);
2842 T0_INTER_T1_USING_T1 ();
2846 static void cc_one_sub_t1_mul_t0a_add_t0_mul_env_add_prim ()
2848 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2849 GR_COMBINE_FACTOR_ONE,
2850 GR_COMBINE_LOCAL_CONSTANT,
2851 GR_COMBINE_OTHER_TEXTURE);
2853 MOD_0 (TMOD_TEX_MUL_COL);
2854 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
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;
2864 static void cc__t0_inter_t1_using_t1__mul_shade_add_prim ()
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);
2871 T0_INTER_T1_USING_T1 ();
2875 static void cc_t0_mul_prim_add_shade ()
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);
2885 static void cc_t1_mul_prim_add_shade ()
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);
2896 static void cc_t0_mul_env_add_prim ()
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);
2908 static void cc_t1_mul_env_add_prim ()
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);
2919 static void cc_t0_mul_scale_add_prim ()
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);
2931 static void cc__t0_mul_t1__mul_env_add_prim ()
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);
2943 static void cc__t0_add__t1_mul_scale__mul_env_sub_center_add_prim ()
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);
2952 MOD_1 (TMOD_TEX_MUL_COL);
2953 MOD_1_COL (rdp.SCALE & 0xFFFFFF00);
2958 static void cc__t1_sub_t0__mul_env_add_prim ()
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);
2970 static void cc_t0_mul_env_add_shade ()
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);
2980 static void cc_t0_mul_shade_add_prim ()
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);
2990 static void cc__t0_mul_enva_add_t1__mul_shade_add_prim ()
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);
2997 if (cmb.combine_ext)
2999 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3000 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
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,
3008 percent = (float)(rdp.env_color&0xFF) / 255.0f;
3009 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
3017 static void cc_t0_mul_shade_add_prima ()
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);
3027 static void cc_t1_mul_shade_add_prim ()
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);
3037 static void cc_t0_mul_shade_add_env ()
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);
3047 static void cc__t0_add_prim__mul_shade_add_t0 ()
3049 if (cmb.combine_ext)
3051 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3052 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
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);
3069 static void cc__t0_add_prim__mul_shade_add_t1 ()
3071 if (cmb.combine_ext)
3073 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3074 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3077 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3078 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3082 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3083 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3090 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3091 GR_COMBINE_FACTOR_ONE,
3092 GR_COMBINE_LOCAL_ITERATED,
3093 GR_COMBINE_OTHER_TEXTURE);
3099 static void cc__t0_add_primlod__mul_shade_add_env ()
3101 if (cmb.combine_ext)
3103 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3104 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
3107 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3108 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
3111 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3112 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
3116 cmb.tex_ccolor = cmb.ccolor;
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);
3134 static void cc__t0_mul_prima_add_prim_mul__shade_add_env ()
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);
3141 if (cmb.combine_ext)
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,
3147 cmb.tex_ccolor = rdp.prim_color;
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);
3160 static void cc_t0_mul_shadea_add_shade ()
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);
3169 static void cc_prim_mul_prima_add_prim () //Added by Gonetz
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);
3180 static void cc_prim_mul_prima_add_t0 () //Added by Gonetz
3182 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3183 GR_COMBINE_FACTOR_ONE,
3184 GR_COMBINE_LOCAL_ITERATED,
3185 GR_COMBINE_OTHER_TEXTURE);
3191 static void cc_prim_mul_env_add_t0 () //Added by Gonetz
3193 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3194 GR_COMBINE_FACTOR_ONE,
3195 GR_COMBINE_LOCAL_ITERATED,
3196 GR_COMBINE_OTHER_TEXTURE);
3202 static void cc_prim_mul_shade_add_t0 ()
3204 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3205 GR_COMBINE_FACTOR_ONE,
3206 GR_COMBINE_LOCAL_ITERATED,
3207 GR_COMBINE_OTHER_TEXTURE);
3212 static void cc_prim_mul_shade_add_env ()
3214 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3215 GR_COMBINE_FACTOR_ONE,
3216 GR_COMBINE_LOCAL_CONSTANT,
3217 GR_COMBINE_OTHER_ITERATED);
3222 static void cc_env_mul_shade_add_env () //Added by Gonetz
3224 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3225 GR_COMBINE_FACTOR_ONE,
3226 GR_COMBINE_LOCAL_CONSTANT,
3227 GR_COMBINE_OTHER_ITERATED);
3233 static void cc_t0_mul_prim_add_one_sub_prim_mul_shade () //Added by Gonetz
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);
3244 static void cc_t0_mul_prim_add_shade_sub_env_mul_prim () //Added by Gonetz
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);
3256 static void cc_t0_mul_prim_add_shade_mul_shadea_mul_prim ()
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);
3268 static void cc__t0_mul_t1__mul_prim_add_prim_mul_shade () //Added by Gonetz
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);
3279 static void cc_t0_mul_env_add_prim_mul_shade () //Added by Gonetz
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);
3290 static void cc_t0_mul_enva_add_prim_mul_shade () //Added by Gonetz
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);
3301 static void cc_t0_mul_shade_add_prim_mul_env () //Added by Gonetz
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);
3311 static void cc_prim_mul_env_add_one_sub_prim_mul_shade () //Added by Gonetz
3313 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3314 GR_COMBINE_FACTOR_ONE,
3315 GR_COMBINE_LOCAL_ITERATED,
3316 GR_COMBINE_OTHER_CONSTANT);
3323 static void cc_t0_mul_prim_mul_prim () //Added by Gonetz
3325 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3326 GR_COMBINE_FACTOR_LOCAL,
3327 GR_COMBINE_LOCAL_ITERATED,
3328 GR_COMBINE_OTHER_TEXTURE);
3334 static void cc_t0_mul_prim_mul_prima () //Added by Gonetz
3336 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3337 GR_COMBINE_FACTOR_LOCAL,
3338 GR_COMBINE_LOCAL_ITERATED,
3339 GR_COMBINE_OTHER_TEXTURE);
3345 static void cc_t0_mul_enva_mul_shade ()
3347 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3348 GR_COMBINE_FACTOR_LOCAL,
3349 GR_COMBINE_LOCAL_ITERATED,
3350 GR_COMBINE_OTHER_TEXTURE);
3355 static void cc_t0_mul_primlod_mul_prim () //Added by Gonetz
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);
3365 static void cc_t0_mul_primlod_mul_shade () //Added by Gonetz
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 ();
3375 static void cc__t0_mul_t1__mul_prim ()
3377 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3378 GR_COMBINE_FACTOR_LOCAL,
3379 GR_COMBINE_LOCAL_CONSTANT,
3380 GR_COMBINE_OTHER_TEXTURE);
3385 static void cc__t1_mul_t1_add_t0__mul_prim ()
3387 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3388 GR_COMBINE_FACTOR_LOCAL,
3389 GR_COMBINE_LOCAL_CONSTANT,
3390 GR_COMBINE_OTHER_TEXTURE);
3392 if (cmb.combine_ext)
3394 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3395 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
3410 static void cc__t0_mul_t1__mul_prima () //Added by Gonetz
3412 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3413 GR_COMBINE_FACTOR_LOCAL,
3414 GR_COMBINE_LOCAL_CONSTANT,
3415 GR_COMBINE_OTHER_TEXTURE);
3420 static void cc__t0_mul_t1__mul_env () //Added by Gonetz
3422 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3423 GR_COMBINE_FACTOR_LOCAL,
3424 GR_COMBINE_LOCAL_CONSTANT,
3425 GR_COMBINE_OTHER_TEXTURE);
3430 static void cc__t0_mul_t1__mul_enva () //Added by Gonetz
3432 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3433 GR_COMBINE_FACTOR_LOCAL,
3434 GR_COMBINE_LOCAL_CONSTANT,
3435 GR_COMBINE_OTHER_TEXTURE);
3440 static void cc__t0_mul_t1__mul_shade ()
3442 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3443 GR_COMBINE_FACTOR_LOCAL,
3444 GR_COMBINE_LOCAL_ITERATED,
3445 GR_COMBINE_OTHER_TEXTURE);
3449 static void cc__t0a_mul_t1__mul_prim () //Added by Gonetz
3451 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3452 GR_COMBINE_FACTOR_LOCAL,
3453 GR_COMBINE_LOCAL_CONSTANT,
3454 GR_COMBINE_OTHER_TEXTURE);
3459 static void cc__t0_mul_t1a__mul_shade () //Added by Gonetz
3461 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3462 GR_COMBINE_FACTOR_LOCAL,
3463 GR_COMBINE_LOCAL_ITERATED,
3464 GR_COMBINE_OTHER_TEXTURE);
3468 static void cc__t0a_mul_t1__mul_shade () //Added by Gonetz
3470 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3471 GR_COMBINE_FACTOR_LOCAL,
3472 GR_COMBINE_LOCAL_ITERATED,
3473 GR_COMBINE_OTHER_TEXTURE);
3477 static void cc_t0_mul_prim_mul_env ()
3479 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3480 GR_COMBINE_FACTOR_LOCAL,
3481 GR_COMBINE_LOCAL_ITERATED,
3482 GR_COMBINE_OTHER_TEXTURE);
3484 SETSHADE_ENV (); // notice that setshade multiplies
3488 static void cc_t0_mul_prim_mul_shade ()
3490 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3491 GR_COMBINE_FACTOR_LOCAL,
3492 GR_COMBINE_LOCAL_ITERATED,
3493 GR_COMBINE_OTHER_TEXTURE);
3498 static void cc_t0_mul_prim_mul_shadea ()
3500 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3501 GR_COMBINE_FACTOR_LOCAL,
3502 GR_COMBINE_LOCAL_ITERATED,
3503 GR_COMBINE_OTHER_TEXTURE);
3509 static void cc_t0_mul_prima_mul_shade ()
3511 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3512 GR_COMBINE_FACTOR_LOCAL,
3513 GR_COMBINE_LOCAL_ITERATED,
3514 GR_COMBINE_OTHER_TEXTURE);
3519 static void cc_t1_mul__one_sub_prim_mul_shade_add_prim ()
3521 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3522 GR_COMBINE_FACTOR_LOCAL,
3523 GR_COMBINE_LOCAL_ITERATED,
3524 GR_COMBINE_OTHER_TEXTURE);
3530 static void cc_t0_mul_one_sub_env_mul_shade ()
3532 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3533 GR_COMBINE_FACTOR_LOCAL,
3534 GR_COMBINE_LOCAL_ITERATED,
3535 GR_COMBINE_OTHER_TEXTURE);
3540 static void cc_t1_mul_prim_mul_shade ()
3542 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3543 GR_COMBINE_FACTOR_LOCAL,
3544 GR_COMBINE_LOCAL_ITERATED,
3545 GR_COMBINE_OTHER_TEXTURE);
3551 static void cc_t0_mul_1mprim_mul_shade ()
3553 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3554 GR_COMBINE_FACTOR_LOCAL,
3555 GR_COMBINE_LOCAL_ITERATED,
3556 GR_COMBINE_OTHER_TEXTURE);
3561 static void cc_t0_mul_env_mul_shade ()
3563 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3564 GR_COMBINE_FACTOR_LOCAL,
3565 GR_COMBINE_LOCAL_ITERATED,
3566 GR_COMBINE_OTHER_TEXTURE);
3571 static void cc_t0_mul_scale_mul_shade ()
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);
3581 static void cc_t0_mul_shade_mul_shadea ()
3583 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3584 GR_COMBINE_FACTOR_LOCAL,
3585 GR_COMBINE_LOCAL_ITERATED,
3586 GR_COMBINE_OTHER_TEXTURE);
3591 static void cc_prim_mul_env_mul_shade ()
3593 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3594 GR_COMBINE_FACTOR_LOCAL,
3595 GR_COMBINE_LOCAL_CONSTANT,
3596 GR_COMBINE_OTHER_ITERATED);
3601 static void cc_prim_mul_one_sub_env_mul_shade ()
3603 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3604 GR_COMBINE_FACTOR_LOCAL,
3605 GR_COMBINE_LOCAL_CONSTANT,
3606 GR_COMBINE_OTHER_ITERATED);
3612 static void cc_t0_mul_prim_mul_shade_add_env ()
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);
3624 static void cc_t0_mul_prim_mul_shadea_add_env ()
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);
3637 static void cc__t0_mul_prim_add_shade__mul_env ()
3639 if (cmb.combine_ext)
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,
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,
3655 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3656 GR_COMBINE_FACTOR_ONE,
3657 GR_COMBINE_LOCAL_ITERATED,
3658 GR_COMBINE_OTHER_TEXTURE);
3660 MOD_0 (TMOD_TEX_MUL_COL);
3662 MOD_0_COL (cmb.ccolor & 0xFFFFFF00);
3667 static void cc__t0a_mul_prim_add_t0__mul_shade ()
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);
3678 static void cc__t0a_mul_env_add_t0__mul_shade ()
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);
3689 static void cc__prim_mul_shade_add_env__mul_shade () //Aded by Gonetz
3691 if (!cmb.combine_ext)
3693 cc_prim_mul_shade_add_env ();
3696 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
3697 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
3711 static void cc__t0_sub_t1__mul_prim_mul_shade_add_prim_mul_env ()
3713 if (cmb.combine_ext)
3715 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3716 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3719 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3720 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
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);
3738 static void cc__t0_mul_prim_mul_env__add__prim_mul_shade ()
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);
3749 static void cc__t1_mul_prim_mul_env__add__prim_mul_shade ()
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);
3761 static void cc_t0_mul_one_sub_prim_mul_shade_add_prim_mul_env ()
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);
3773 static void cc_t0_mul_one_sub_prim_mul_shadea_add_prim_mul_env ()
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);
3786 static void cc_t0_mul_one_sub_env_mul_shade_add_env ()
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);
3797 static void cc_t0_mul_prima_mul_shade_add_prim_mul_one_sub_prima () //Aded by Gonetz
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);
3805 wxUint8 fac = 255 - (wxUint8)(rdp.prim_color&0xFF);
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 );
3814 static void cc_t0_mul_1menv_add_prim ()
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);
3826 static void cc_t0_mul_scale_add_prim__mul_shade () //Aded by Gonetz
3828 if (cmb.combine_ext)
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,
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,
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);
3854 static void cc__t0_mul_t1_add_prim__mul_shade () //Aded by Gonetz
3856 if (cmb.combine_ext)
3858 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3859 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3866 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3867 GR_COMBINE_FACTOR_LOCAL,
3868 GR_COMBINE_LOCAL_ITERATED,
3869 GR_COMBINE_OTHER_TEXTURE);
3875 static void cc_t0_mul__prim_add_env ()
3877 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3878 GR_COMBINE_FACTOR_LOCAL,
3879 GR_COMBINE_LOCAL_ITERATED,
3880 GR_COMBINE_OTHER_TEXTURE);
3886 static void cc_t0_mul__prim_mul_primlod_add_env () //Aded by Gonetz
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;
3905 static void cc__t0_mul_prim_add_shade__sub_env_mul_shade ()
3907 if (cmb.combine_ext)
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,
3913 cmb.tex_ccolor = rdp.prim_color;
3915 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3916 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3923 cc_t0_mul_prim_mul_shade ();
3927 static void cc_t0_sub_prim_mul_shadea () //Aded by Gonetz
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);
3938 static void cc__t0_sub_env_mul_shade__sub_prim_mul_shade ()
3940 if (cmb.combine_ext)
3942 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3943 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
3946 cmb.tex_ccolor = rdp.env_color;
3948 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3949 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3960 static void cc_t0_sub_prim_mul_shade ()
3962 if (cmb.combine_ext)
3964 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3965 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
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)
3978 MOD_0 (TMOD_TEX_SUB_COL);
3979 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3985 static void cc__t0_mul_t1__sub_prim_mul_shade ()
3987 if (cmb.combine_ext)
3989 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3990 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3997 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3998 GR_COMBINE_FACTOR_LOCAL,
3999 GR_COMBINE_LOCAL_ITERATED,
4000 GR_COMBINE_OTHER_TEXTURE);
4005 static void cc_t0_sub_env_mul_shade ()
4007 if (cmb.combine_ext)
4009 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4010 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
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)
4023 MOD_0 (TMOD_TEX_SUB_COL);
4024 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4030 static void cc__t0_mul_prima_add_t0__sub_center_mul_scale ()
4032 if (cmb.combine_ext)
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,
4038 wxUint32 prima = rdp.prim_color&0xFF;
4039 cmb.tex_ccolor = (prima<<24)|(prima<<16)|(prima<<8)|prima;
4041 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4042 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
4046 SETSHADE(rdp.SCALE);
4054 static void cc__t1_inter_t0_using_primlod__sub_shade_mul_prim ()
4056 if (cmb.combine_ext)
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,
4066 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4067 GR_COMBINE_FACTOR_ONE,
4068 GR_COMBINE_LOCAL_ITERATED,
4069 GR_COMBINE_OTHER_TEXTURE);
4072 T1_INTER_T0_USING_FACTOR (lod_frac);
4075 static void cc__t0_inter_t1_using_enva__sub_shade_mul_prim ()
4077 if (cmb.combine_ext)
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,
4087 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4088 GR_COMBINE_FACTOR_ONE,
4089 GR_COMBINE_LOCAL_ITERATED,
4090 GR_COMBINE_OTHER_TEXTURE);
4093 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
4094 T0_INTER_T1_USING_FACTOR (factor);
4097 static void cc_t0_sub_shade_mul_shadea () //Aded by Gonetz
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);
4107 static void cc_one_sub_t0_mul_prim () //Added by Gonetz
4109 CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
4110 GR_COMBINE_FACTOR_TEXTURE_RGB,
4111 GR_COMBINE_LOCAL_CONSTANT,
4112 GR_COMBINE_OTHER_NONE);
4117 static void cc_one_sub_prim_mul_prima () //Added by Gonetz
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);
4127 static void cc_shade_sub_prim_mul_t0 () //Aded by Gonetz
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);
4137 static void cc_shade_sub_prim_mul_env () //Aded by Gonetz
4139 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4140 GR_COMBINE_FACTOR_LOCAL,
4141 GR_COMBINE_LOCAL_CONSTANT,
4142 GR_COMBINE_OTHER_ITERATED);
4147 static void cc_shade_sub_env_mul_t0 () //Aded by Gonetz
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);
4157 static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
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);
4164 T0_INTER_T1_USING_FACTOR (lod_frac);
4167 static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
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);
4174 T0_INTER_T1_USING_FACTOR (lod_frac);
4177 static void cc_shade_sub_env_mul_prim () //Aded by Gonetz
4179 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4180 GR_COMBINE_FACTOR_LOCAL,
4181 GR_COMBINE_LOCAL_CONSTANT,
4182 GR_COMBINE_OTHER_ITERATED);
4187 static void cc_shade_sub__prim_mul_prima () //Aded by Gonetz
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));
4196 static void cc_one_sub__t0_mul_t1__mul_shade () //Aded by Gonetz
4198 CCMB (GR_COMBINE_FUNCTION_BLEND,
4199 GR_COMBINE_FACTOR_TEXTURE_RGB,
4200 GR_COMBINE_LOCAL_ITERATED,
4201 GR_COMBINE_OTHER_CONSTANT);
4206 static void cc_one_sub__t0_mul_shadea__mul_shade () //Aded by Gonetz
4208 if (cmb.combine_ext)
4210 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4211 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4216 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
4217 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
4223 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4224 GR_COMBINE_FACTOR_LOCAL,
4225 GR_COMBINE_LOCAL_ITERATED,
4226 GR_COMBINE_OTHER_TEXTURE);
4228 cmb.tmu0_invert = TRUE;
4232 static void cc_one_sub_env_mul_t0 () //Aded by Gonetz
4234 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4235 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4236 GR_COMBINE_LOCAL_CONSTANT,
4237 GR_COMBINE_OTHER_TEXTURE);
4242 static void cc_one_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
4244 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4245 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4246 GR_COMBINE_LOCAL_CONSTANT,
4247 GR_COMBINE_OTHER_TEXTURE);
4249 T0_INTER_T1_USING_FACTOR (lod_frac);
4252 static void cc_one_sub_env_mul_prim () //Aded by Gonetz
4254 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4255 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4256 GR_COMBINE_LOCAL_CONSTANT,
4257 GR_COMBINE_OTHER_ITERATED);
4262 static void cc_one_sub_env_mul_shade () //Aded by Gonetz
4264 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4265 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4266 GR_COMBINE_LOCAL_CONSTANT,
4267 GR_COMBINE_OTHER_ITERATED);
4271 // ** (1-A)*B + A*C **
4272 static void cc_t0_mul_env_add_1mt0_mul_shade ()
4274 CCMB (GR_COMBINE_FUNCTION_BLEND,
4275 GR_COMBINE_FACTOR_TEXTURE_RGB,
4276 GR_COMBINE_LOCAL_ITERATED,
4277 GR_COMBINE_OTHER_CONSTANT);
4283 static void cc_one_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade () //Added by Gonetz
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 ();
4293 static void cc_one_sub_t0_mul_prim_mul_shade () //Added by Gonetz
4295 CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
4296 GR_COMBINE_FACTOR_TEXTURE_RGB,
4297 GR_COMBINE_LOCAL_ITERATED,
4298 GR_COMBINE_OTHER_NONE);
4304 static void cc_prim_sub_env_mul_t0_mul_shade ()
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 ();
4315 static void cc_t0_sub_t1_mul_prim_mul_shade_add_t1 () //Aded by Gonetz
4317 if (cmb.combine_ext)
4319 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4320 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4323 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4324 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
4328 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4329 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4336 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4337 GR_COMBINE_FACTOR_LOCAL,
4338 GR_COMBINE_LOCAL_CONSTANT,
4339 GR_COMBINE_OTHER_TEXTURE);
4345 static void cc_t0_sub_prim_mul_t0a_add_prim () //Aded by Gonetz
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);
4355 static void cc_t0_sub_prim_mul_t1_add_shade () //Aded by Gonetz
4357 if (cmb.combine_ext)
4359 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4360 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
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,
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);
4386 static void cc_t0_sub_prim_mul_primlod_add_prim () //Aded by Gonetz
4388 if (cmb.combine_ext)
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,
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);
4405 SETSHADE_1MPRIMLOD ();
4411 static void cc_t0_sub_prim_mul_prima_add_prim () //Aded by Gonetz
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);
4419 SETSHADE_1MPRIMA ();
4424 static void cc_t0_sub_prim_mul_shadea_add_prim () //Aded by Gonetz
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);
4435 static void cc_t0_sub_prim_mul_env_add_shade () //Aded by Gonetz
4437 if (cmb.combine_ext)
4439 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4440 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
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,
4453 cc_t0_mul_env_add_shade ();
4457 static void cc__t0_inter_t1_using_shadea__sub_prim_mul_env_add_shade () //Aded by Gonetz
4459 if (cmb.combine_ext)
4461 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4462 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4463 GR_CMBX_CONSTANT_COLOR, 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,
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);
4479 SUBSHADE_PRIMMULENV ();
4480 T0_INTER_T1_USING_SHADEA ();
4484 static void cc_t0_sub_prim_mul_env_add_prim () //Aded by Gonetz
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);
4496 static void cc_t0_sub_prim_mul_enva_add_prim () //Aded by Gonetz41
4498 if (cmb.combine_ext)
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,
4509 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4510 GR_COMBINE_FACTOR_ONE,
4511 GR_COMBINE_LOCAL_CONSTANT,
4512 GR_COMBINE_OTHER_TEXTURE);
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);
4521 static void cc_t0_sub_prim_mul_primlod_add_env () //Aded by Gonetz
4523 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4524 GR_COMBINE_FACTOR_ONE,
4525 GR_COMBINE_LOCAL_CONSTANT,
4526 GR_COMBINE_OTHER_TEXTURE);
4528 MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
4529 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4530 MOD_0_FAC (lod_frac & 0xFF);
4534 static void cc_t0_sub__prim_mul_env () //Aded by Gonetz
4536 if ( (rdp.prim_color & 0xFFFFFF00) == 0xFFFFFF00 && (rdp.env_color & 0xFFFFFF00) == 0xFFFFFF00)
4538 CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
4539 GR_COMBINE_FACTOR_TEXTURE_RGB,
4540 GR_COMBINE_LOCAL_CONSTANT,
4541 GR_COMBINE_OTHER_NONE);
4546 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4547 GR_COMBINE_FACTOR_ONE,
4548 GR_COMBINE_LOCAL_ITERATED,
4549 GR_COMBINE_OTHER_TEXTURE);
4556 static void cc__t0_mul_t1__sub_prim_mul__t0t1a__add_prim () //Aded by Gonetz
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);
4568 static void cc__t1_inter_t0_using_enva__sub_prim_mul_prima_add_prim () //Aded by Gonetz
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);
4577 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
4578 T1_INTER_T0_USING_FACTOR (factor);
4581 static void cc_t0_sub_prim_mul_shade_add_env ()
4583 if (cmb.combine_ext)
4585 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4586 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
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,
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);
4604 MOD_0 (TMOD_TEX_SUB_COL);
4605 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4610 static void cc_t1_sub_prim_mul_shade_add_env ()
4612 if (cmb.combine_ext)
4614 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4615 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4618 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
4619 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
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,
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);
4637 MOD_1 (TMOD_TEX_SUB_COL);
4638 MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
4643 static void cc_t1_sub_k4_mul_prima_add_t0 ()
4645 if (cmb.combine_ext)
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,
4651 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
4652 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
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,
4667 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4668 GR_COMBINE_FACTOR_ONE,
4669 GR_COMBINE_LOCAL_NONE,
4670 GR_COMBINE_OTHER_TEXTURE);
4675 static void cc__t0_sub_prim_mul_shade_add_env__mul_shade ()
4677 if (cmb.combine_ext)
4679 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4680 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
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,
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);
4698 MOD_0 (TMOD_TEX_SUB_COL);
4699 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4704 static void cc__t0_sub_prim_mul_shade_add_env__mul_shadea ()
4706 if (cmb.combine_ext)
4708 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4709 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
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,
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);
4728 MOD_0 (TMOD_TEX_SUB_COL);
4729 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4734 static void cc__t0_mul_shade__sub_env_mul_shadea_add_env () //Aded by Gonetz
4736 if (rdp.tiles[rdp.cur_tile].format == 4)
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);
4744 else if (rdp.tiles[rdp.cur_tile].format == 2)
4746 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4747 GR_COMBINE_FACTOR_LOCAL,
4748 GR_COMBINE_LOCAL_ITERATED,
4749 GR_COMBINE_OTHER_TEXTURE);
4758 static void cc_t0_sub_env_mul_k5_add_prim () //Aded by Gonetz
4760 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4761 GR_COMBINE_FACTOR_ONE,
4762 GR_COMBINE_LOCAL_CONSTANT,
4763 GR_COMBINE_OTHER_TEXTURE);
4765 MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
4766 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4771 static void cc_t0_sub_k4_mul_k5_add_t0 () //Aded by Gonetz
4773 if (cmb.combine_ext)
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,
4779 wxUint32 temp = rdp.prim_lodfrac;
4780 rdp.prim_lodfrac = rdp.K4;
4781 SETSHADE_PRIMLOD ();
4782 rdp.prim_lodfrac = temp;
4792 static void cc__t0_inter_t1_using_t0__sub_shade_mul_prima_add_shade () //Aded by Gonetz
4794 if (cmb.combine_ext)
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,
4802 T0_INTER_T1_USING_T0 ();
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);
4812 T1_INTER_T0_USING_T0 (); //strange, but this one looks better
4816 static void cc_t0_sub__prim_mul_shade__mul_enva_add__prim_mul_shade () //Aded by Gonetz
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);
4828 static void cc_t0_sub_env_mul_t0_add_env () //Aded by Gonetz
4830 CCMB (GR_COMBINE_FUNCTION_BLEND,
4831 GR_COMBINE_FACTOR_TEXTURE_RGB,
4832 GR_COMBINE_LOCAL_CONSTANT,
4833 GR_COMBINE_OTHER_TEXTURE);
4836 //(t0-env)*t0+env = t0*t0 + (1-t0)*env
4839 static void cc_t0_sub_env_mul_prima_add_env () //Aded by Gonetz
4841 if (cmb.combine_ext)
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,
4848 percent = (rdp.prim_color&0xFF) / 255.0f;
4849 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
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));
4859 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4860 GR_COMBINE_FACTOR_ONE,
4861 GR_COMBINE_LOCAL_NONE,
4862 GR_COMBINE_OTHER_TEXTURE);
4865 static void cc_t0_sub_env_mul_k5_add_env () //Aded by Gonetz
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;
4875 static void cc_t0_sub_env_mul_prim_add_shade () //Aded by Gonetz
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);
4882 MOD_0 (TMOD_TEX_SUB_COL);
4883 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4887 static void cc_t0_sub_env_mul_shade_add_prim () //Aded by Gonetz
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);
4894 if (cmb.combine_ext)
4896 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4897 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4901 cmb.tex_ccolor = rdp.env_color;
4905 MOD_0 (TMOD_TEX_SUB_COL);
4906 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4911 static void cc__t0_sub_t1_mul_enva_add_shade__sub_env_mul_prim ()
4912 // (t0-t1)*env_a+shade, (cmb-env)*prim+0
4914 if (cmb.combine_ext)
4916 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4917 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
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,
4930 GR_CMBX_TEXTURE_RGB, 0);
4936 cc_t0_sub_env_mul_prim_add_shade();
4940 static void cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_prim () //Aded by Gonetz
4942 if (!(rdp.env_color&0xFFFFFF00))
4944 cc__t0_inter_t1_using_primlod__mul_shade_add_prim ();
4947 if (!(rdp.prim_color&0xFFFFFF00))
4949 if (!cmb.combine_ext)
4951 cc_t0_sub_env_mul_shade ();
4954 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4955 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
4959 T0_INTER_T1_USING_FACTOR (lod_frac);
4962 cc__t0_inter_t1_using_primlod__mul_shade_add_prim ();
4965 static void cc__t0_sub_env_mul_shade_add_prim__mul_shade () //Aded by Gonetz
4967 if (!cmb.combine_ext)
4969 cc_t0_sub_env_mul_shade_add_prim ();
4972 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4973 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4976 cmb.tex_ccolor = rdp.env_color;
4978 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4979 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4985 static void cc__t0_sub_env_mul_shade_add_prim__mul_shadea () //Aded by Gonetz
4987 if (!cmb.combine_ext)
4989 cc_t0_sub_env_mul_shade_add_prim ();
4992 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4993 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
4996 cmb.tex_ccolor = rdp.prim_color;
4998 MOD_0 (TMOD_TEX_SUB_COL);
4999 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5001 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5002 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
5007 static void cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_env ()
5009 // (t1-t0)*primlod+t0, (cmb-env)*shade+env
5010 if (cmb.combine_ext)
5012 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5013 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
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);
5025 T0_INTER_T1_USING_FACTOR (lod_frac);
5029 static void cc_t0_sub_env_mul_enva_add_prim () //Aded by Gonetz
5031 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5032 GR_COMBINE_FACTOR_ONE,
5033 GR_COMBINE_LOCAL_CONSTANT,
5034 GR_COMBINE_OTHER_TEXTURE);
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);
5042 static void cc_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz
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);
5050 //(1-t)*prim+t == (1-prim)*t+prim
5053 static void cc_one_sub_t1_mul_prim_add_t1 () //Aded by Gonetz
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);
5061 //(1-t)*prim+t == (1-prim)*t+prim
5064 static void cc_one_sub_t1_mul_env_add_t1 () //Aded by Gonetz
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);
5072 //(1-t)*env+t == (1-env)*t+env
5075 static void cc_one_sub_t0_mul_primlod_add_t0 () //Aded by Gonetz
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);
5083 //(1-t)*primlod+t == (1-primlod)*t+primlod
5086 static void cc_one_sub_t0_mul_prima_add_t0 () //Aded by Gonetz
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);
5094 //(1-t)*prima+t == (1-prima)*t+prima
5097 static void cc_one_sub__t0_inter_t1_using_enva__mul_prim_add__t0_inter_t1_using_enva () //Aded by Gonetz
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);
5104 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
5105 T0_INTER_T1_USING_FACTOR (factor);
5106 //(1-t)*prim+t == (1-prim)*t+prim
5109 static void cc_one_sub_t0_mul_shade_add_t0 ()
5111 CCMB (GR_COMBINE_FUNCTION_BLEND,
5112 GR_COMBINE_FACTOR_TEXTURE_RGB,
5113 GR_COMBINE_LOCAL_ITERATED,
5114 GR_COMBINE_OTHER_CONSTANT);
5119 static void cc_one_sub_prim_mul_t0_add_prim () //Aded by Gonetz
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);
5129 static void cc_one_sub_prim_mul_t0a_add_prim ()
5131 if (cmb.combine_ext)
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,
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);
5150 static void cc_one_sub_prim_mul__t0_inter_t1_using_primlod__add_prim () //Aded by Gonetz
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);
5157 T0_INTER_T1_USING_FACTOR (lod_frac);
5160 static void cc__one_sub_prim_mul_shade__mul_t0_add__prim_mul_shade () //Aded by Gonetz
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);
5170 static void cc_one_sub_shade_mul__t0_inter_t1_using_primlod__add_shade () //Aded by Gonetz
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);
5179 static void cc_one_sub_prim_mul_t1_add_prim () //Aded by Gonetz
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);
5189 static void cc_one_sub_prim_mul_env_add_prim () //Aded by Gonetz
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);
5199 static void cc_t0_sub_prim_mul_shade_add_shade () //Aded by Gonetz
5201 if (cmb.combine_ext)
5203 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5204 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
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)
5217 MOD_0 (TMOD_TEX_SUB_COL);
5218 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5224 static void cc__t0_mul_t0__sub_prim_mul_shade_add_shade () //Aded by Gonetz
5226 if (cmb.combine_ext)
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,
5233 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5234 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5240 cc_t0_sub_prim_mul_shade_add_shade();
5243 static void cc__t0_mul_t1__sub_prim_mul_shade_add_shade () //Aded by Gonetz
5245 if (cmb.combine_ext)
5247 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5248 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5255 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5256 GR_COMBINE_FACTOR_LOCAL,
5257 GR_COMBINE_LOCAL_ITERATED,
5258 GR_COMBINE_OTHER_TEXTURE);
5263 static void cc__t0_mul_t1__sub_env_mul_shade_add_shade () //Aded by Gonetz
5265 if (cmb.combine_ext)
5267 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5268 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5275 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5276 GR_COMBINE_FACTOR_LOCAL,
5277 GR_COMBINE_LOCAL_ITERATED,
5278 GR_COMBINE_OTHER_TEXTURE);
5283 static void cc_one_sub_prim_mul_shade_add_shade () //Aded by Gonetz
5285 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5286 GR_COMBINE_FACTOR_LOCAL,
5287 GR_COMBINE_LOCAL_ITERATED,
5288 GR_COMBINE_OTHER_CONSTANT);
5292 static void cc_t0_inter_env_using_prima ()
5294 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5295 GR_COMBINE_FACTOR_ONE,
5296 GR_COMBINE_LOCAL_NONE,
5297 GR_COMBINE_OTHER_TEXTURE);
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);
5305 static void cc_t0_inter_env_using_enva ()
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)
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,
5318 cmb.tex_ccolor = rdp.env_color;
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);
5330 static void cc_t0_inter_noise_using_prim ()
5332 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5333 GR_COMBINE_FACTOR_ONE,
5334 GR_COMBINE_LOCAL_NONE,
5335 GR_COMBINE_OTHER_TEXTURE);
5338 MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);
5339 MOD_0_COL (rdp.prim_color);
5340 rdp.noise = RDP::noise_texture;
5343 static void cc_t0_inter_noise_using_env ()
5345 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5346 GR_COMBINE_FACTOR_ONE,
5347 GR_COMBINE_LOCAL_NONE,
5348 GR_COMBINE_OTHER_TEXTURE);
5351 MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);
5352 MOD_0_COL (rdp.env_color);
5353 rdp.noise = RDP::noise_texture;
5356 static void cc_t0_sub_env_mul_enva_add_env ()
5358 CCMB (GR_COMBINE_FUNCTION_BLEND,
5359 GR_COMBINE_FACTOR_LOCAL_ALPHA,
5360 GR_COMBINE_LOCAL_CONSTANT,
5361 GR_COMBINE_OTHER_TEXTURE);
5368 static void cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_env ()
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);
5381 static void cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade ()
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);
5393 static void cc_one_sub_prim_mul__t0_inter_t1_using_enva__add_prim ()
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);
5401 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
5402 T0_INTER_T1_USING_FACTOR (factor);
5405 static void cc_one_sub_env_mul__t0_inter_t1_using_primlod__add_env () //Aded by Gonetz
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);
5412 T0_INTER_T1_USING_FACTOR (lod_frac);
5415 static void cc_one_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env () //Aded by Gonetz
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);
5422 T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
5425 static void cc_one_sub_env_mul_t0_add_prim_mul_env () //Aded by Gonetz
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);
5437 static void cc_one_sub_env_mul_t0_add_env () //Aded by Gonetz
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);
5447 static void cc_one_sub_env_mul_t0_add_shade () //Aded by Gonetz
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);
5457 static void cc_one_sub_env_mul_prim_add_env () //Aded by Gonetz
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);
5467 static void cc_one_sub_env_mul_prim_add_shade () //Aded by Gonetz
5469 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5470 GR_COMBINE_FACTOR_ONE,
5471 GR_COMBINE_LOCAL_ITERATED,
5472 GR_COMBINE_OTHER_CONSTANT);
5474 CC_C1MULC2 (rdp.prim_color, cmb.ccolor);
5477 static void cc_one_sub_env_mul_shade_add_env () //Aded by Gonetz
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);
5486 static void cc_one_sub_env_mul_prim_add__t0_inter_t1_using_env () //Aded by Gonetz
5488 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5489 GR_COMBINE_FACTOR_ONE,
5490 GR_COMBINE_LOCAL_ITERATED,
5491 GR_COMBINE_OTHER_TEXTURE);
5494 T0_INTER_T1_USING_ENV ();
5497 static void cc_one_sub_shade_mul_t0_add_shade ()
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);
5506 static void cc_one_sub_shade_mul__t0_mul_shadea__add_shade ()
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)
5514 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5515 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5526 static void cc_one_sub_shade_mul_env_add_shade ()
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);
5535 static void cc_one_sub_shade_mul_shadea_add_shade ()
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);
5545 static void cc_t0_sub_env_mul_prim_add_env () //Aded by Gonetz
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);
5555 //(t0-env)*prim+env == t0*prim + env*(1-prim)
5558 static void cc__t0_inter_t1_using_t1a__sub_env_mul_enva_add_env () //Aded by Gonetz
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 ();
5568 static void cc_t0_sub_shade_mul_t0a_add_shade ()
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);
5578 static void cc_t0_sub_shade_mul_prima_add_shade () //Aded by Gonetz
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);
5589 static void cc_t0_sub_shade_mul_shadea_add_shade () //Aded by Gonetz
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);
5599 static void cc__t0_mul_t1_add_env__mul_shadea_add_shade ()
5601 if (cmb.combine_ext)
5603 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5604 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
5611 cmb.tex_ccolor = rdp.env_color;
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);
5625 static void cc_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz
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);
5635 //(prim-t0)*env+t0 == prim*env + t0*(1-env)
5638 static void cc_prim_sub_t0_mul_t1_add_t0 () //Aded by Gonetz
5640 if (!cmb.combine_ext)
5645 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5646 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
5653 cmb.tex_ccolor = rdp.prim_color;
5655 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5656 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5661 static void cc_env_sub_t0_mul_prim_add_t0 () //Aded by Gonetz
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);
5671 //(env-t0)*prim+t0 == prim*env + t0*(1-prim)
5674 static void cc_env_sub_t0_mul_shade_add_t0 () //Aded by Gonetz
5676 if (!cmb.combine_ext)
5681 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
5682 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5689 static void cc_prim_sub_env_mul_t0_add_prim ()
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);
5696 SETSHADE_PRIMSUBENV ();
5700 static void cc_prim_sub_env_mul_t0_add_env ()
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);
5711 static void cc__prim_sub_env_mul_t0_add_env__add_primlod ()
5713 if (!cmb.combine_ext)
5715 cc_prim_sub_env_mul_t0_add_env ();
5718 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5719 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
5722 cmb.tex_ccolor = rdp.env_color;
5724 SETSHADE_PRIMSUBENV ();
5725 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
5726 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
5728 GR_CMBX_TEXTURE_RGB, 0);
5732 static void cc__prim_sub_env_mul_t0_add_env__add_shadea ()
5734 if (!cmb.combine_ext)
5736 cc_prim_sub_env_mul_t0_add_env ();
5739 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5740 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
5743 cmb.tex_ccolor = rdp.env_color;
5745 SETSHADE_PRIMSUBENV ();
5746 CCMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
5747 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
5749 GR_CMBX_TEXTURE_RGB, 0);
5752 static void cc_prim_sub_env_mul__t0_mul_t1a__add_env ()
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);
5763 static void cc_prim_sub_env_mul__t0_mul_prim__add_env ()
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);
5771 if (cmb.combine_ext)
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,
5777 cmb.tex_ccolor = rdp.prim_color;
5786 static void cc_prim_sub_env_mul_t0_mul_shade_add_env ()
5788 if (cmb.combine_ext)
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,
5795 cmb.tex_ccolor = cmb.ccolor;
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);
5805 cc_t0_mul_prim_mul_shade ();
5809 static void cc_prim_sub_env_mul__t0_sub_t0_mul_prima__add_env ()
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);
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;
5825 static void cc_prim_sub_env_mul__one_sub_t0_mul_primlod_add_prim__add_env ()
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);
5833 if (cmb.combine_ext)
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,
5839 cmb.tex_ccolor = rdp.prim_color;
5841 cmb.dc0_detailmax = cmb.dc1_detailmax = (float)lod_frac / 255.0f;
5849 static void cc_prim_sub_env_mul__t0_add_t1a__add_env ()
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);
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;
5864 static void cc_prim_sub_env_mul__t0_sub_prim_mul_enva_add_t0__add_env ()
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);
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);
5880 static void cc_prim_sub_env_mul__t1_sub_prim_mul_enva_add_t0__add_env ()
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);
5889 if (cmb.combine_ext)
5891 if (rdp.tiles[rdp.cur_tile].format > 2)
5893 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5894 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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);
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,
5908 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
5909 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5913 cmb.tex_ccolor = rdp.prim_color;
5915 cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;
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);
5926 static void cc_prim_sub_env_mul__t1_sub_prim_mul_prima_add_t0__add_env ()
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);
5935 if (cmb.combine_ext)
5937 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5938 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
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,
5945 cmb.tex_ccolor = rdp.prim_color;
5947 cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.prim_color&0xFF) / 255.0f;
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);
5958 static void cc__prim_sub_env_mul_t0_add_env__mul_primlod ()
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));
5973 MULSHADE_PRIMLOD ();
5977 static void cc__prim_sub_env_mul_t0_add_env__mul_k5 ()
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));
5996 static void cc_prim_sub_env_mul_t1_add_env ()
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);
6004 if (rdp.cycle_mode == 0 || ((settings.hacks&hack_KI) && (rdp.cycle2 & 0x0FFFFFFF) == 0x01FF1FFF))
6014 static void cc_prim_sub_env_mul_t1_add_env_mul_t0 ()
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);
6026 static void cc_prim_sub_env_mul_t0a_add_t0 ()
6028 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6029 GR_COMBINE_FACTOR_ONE,
6030 GR_COMBINE_LOCAL_NONE,
6031 GR_COMBINE_OTHER_TEXTURE);
6033 if (cmb.combine_ext)
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,
6039 cmb.tex_ccolor = cmb.ccolor;
6044 MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);
6045 MOD_0_COL (cmb.ccolor & 0xFFFFFF00);
6051 static void cc_prim_sub_env_mul_t0a_add_env ()
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);
6063 static void cc_prim_sub_env_mul_t1a_add_env ()
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);
6075 static void cc_prim_sub_env_mul__t0_mul_t1__add_env ()
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);
6087 static void cc_prim_sub_env_mul__t0_add_t1__add_env ()
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);
6099 static void cc_prim_sub_env_mul__t0_mul_enva__add_env ()
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);
6106 SETSHADE_PRIMSUBENV ();
6112 static void cc_prim_sub_env_mul__t0_mul_shade__add_env ()
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);
6119 MULSHADE_PRIMSUBENV ();
6124 static void cc_prim_sub_env_mul__prim_inter_t0_using_shadea__add_env ()
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);
6131 if (cmb.combine_ext)
6134 PRIM_INTER_T0_USING_SHADEA ();
6138 SETSHADE_PRIMSUBENV ();
6145 static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t0__add_env ()
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);
6153 if (cmb.combine_ext)
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,
6159 cmb.tex_ccolor = rdp.prim_color;
6161 percent = (float)(lod_frac) / 255.0f;
6162 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
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);
6173 static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_shade__add_env ()
6175 if (!cmb.combine_ext)
6177 cc_prim_sub_env_mul_t0_add_env ();
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,
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,
6188 cmb.tex_ccolor = rdp.prim_color;
6192 percent = (float)(lod_frac) / 255.0f;
6193 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6196 static void cc_prim_sub_env_mul__t0_sub_shade_mul_primlod_add_shade__add_env ()
6198 if (!cmb.combine_ext)
6200 cc_prim_sub_env_mul_t0_add_env ();
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,
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,
6214 percent = (float)(lod_frac) / 255.0f;
6215 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6219 static void cc_lavatex_sub_prim_mul_shade_add_lavatex ()
6221 if (cmb.combine_ext)
6223 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
6224 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
6228 T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();
6232 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6233 GR_COMBINE_FACTOR_ONE,
6234 GR_COMBINE_LOCAL_NONE,
6235 GR_COMBINE_OTHER_TEXTURE);
6241 static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t1__add_env ()
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);
6249 T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();
6253 static void cc_prim_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()
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);
6261 T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
6265 static void cc_prim_sub_env_mul__t0_inter_t1_using_t1__add_env ()
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);
6273 T0_INTER_T1_USING_T1 ();
6277 static void cc_prim_sub_env_mul__t0_inter_t1_using_enva_alpha__add_env ()
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);
6285 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6286 T0_INTER_T1_USING_FACTOR (factor);
6287 A_T0_INTER_T1_USING_FACTOR (factor);
6291 static void cc__env_inter_prim_using_t0__sub_shade_mul_t0a_add_shade ()
6293 if (!cmb.combine_ext)
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);
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,
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,
6315 cmb.tex_ccolor = rdp.env_color;
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;
6324 static void cc_prim_sub_env_mul_shade_add_t0 ()
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 ();
6335 static void cc_prim_sub_env_mul_prima_add_t0 ()
6337 if (rdp.prim_color != 0x000000ff)
6339 if (cmb.combine_ext)
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);
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 ();
6358 else if ((rdp.prim_color&0xFFFFFF00) - (rdp.env_color&0xFFFFFF00) == 0)
6365 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
6366 GR_COMBINE_FACTOR_ONE,
6367 GR_COMBINE_LOCAL_CONSTANT,
6368 GR_COMBINE_OTHER_TEXTURE);
6375 static void cc_prim_sub_env_mul_shade_add_env ()
6377 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6378 GR_COMBINE_FACTOR_ONE,
6379 GR_COMBINE_LOCAL_CONSTANT,
6380 GR_COMBINE_OTHER_ITERATED);
6382 MULSHADE_PRIMSUBENV ();
6385 static void cc_prim_sub_env_mul_shadea_add_env ()
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);
6397 static void cc_prim_sub_env_mul__t0_inter_t1_using_prima__add_env ()
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);
6405 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
6406 T0_INTER_T1_USING_FACTOR (factor);
6410 static void cc_prim_sub_env_mul__t1_inter_t0_using_prima__add_env ()
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);
6418 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
6419 T1_INTER_T0_USING_FACTOR (factor);
6422 static void cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env ()
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);
6430 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6431 T0_INTER_T1_USING_FACTOR (factor);
6434 static void cc_prim_sub_center_mul__t0_inter_t1_using_enva__add_env ()
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);
6442 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6443 T0_INTER_T1_USING_FACTOR (factor);
6446 static void cc_prim_sub_env_mul__t1_inter_t0_using_enva__add_env ()
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);
6454 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6455 T1_INTER_T0_USING_FACTOR (factor);
6458 static void cc_prim_sub_env_mul__t0_mul_enva_add_t1__add_env ()
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);
6466 if (cmb.combine_ext)
6468 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6469 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
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,
6477 percent = (float)(rdp.env_color&0xFF) / 255.0f;
6478 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6486 static void cc_prim_sub_env_mul__t1_mul_enva_add_t0__add_env ()
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);
6494 T1_MUL_ENVA_ADD_T0 ();
6498 static void cc_prim_sub_env_mul_primlod_add__t0_inter_t1_using_primlod ()
6500 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6501 GR_COMBINE_FACTOR_ONE,
6502 GR_COMBINE_LOCAL_CONSTANT,
6503 GR_COMBINE_OTHER_TEXTURE);
6505 CC_COLMULBYTE(cmb.ccolor, rdp.prim_lodfrac);
6506 T0_INTER_T1_USING_FACTOR (lod_frac);
6509 static void cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env ()
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);
6517 T0_INTER_T1_USING_FACTOR (lod_frac);
6520 static void cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env ()
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);
6528 T1_INTER_T0_USING_FACTOR (lod_frac);
6531 static void cc_prim_sub_env_mul__t1_mul_primlod_add_t0__add_env ()
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);
6539 T1_MUL_PRIMLOD_ADD_T0 ();
6542 static void cc_prim_sub_env_mul__t1_sub_prim_mul_t0_add_t0__add_env ()
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);
6550 if (cmb.combine_ext)
6552 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6553 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
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,
6560 cmb.tex_ccolor = rdp.prim_color;
6565 MOD_1 (TMOD_TEX_SUB_COL);
6566 MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
6567 T0_MUL_T1_ADD_T0 ();
6572 static void cc__prim_sub_env_mul_prim_add_t0__mul_prim ()
6574 if (cmb.combine_ext)
6576 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6577 GR_CMBX_ITRGB, GR_FUNC_MODE_X,
6581 SETSHADE_PRIMSUBENV ();
6583 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
6584 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
6585 GR_CMBX_CONSTANT_COLOR, 0,
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 ();
6602 static void cc_prim_sub_env_mul_prim_add_env ()
6604 if (cmb.combine_ext)
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,
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 ();
6625 static void cc_prim_sub_env_mul_primlod_add_env ()
6627 if (cmb.combine_ext)
6629 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6630 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
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,
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 ();
6656 static void cc_prim_sub_env_mul_enva_add_t0 ()
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 ();
6667 static void cc_prim_sub_env_mul_enva_add_env ()
6669 if (cmb.combine_ext)
6671 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6672 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
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,
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 ();
6698 static void cc_prim_sub_shade_mul_t0_add_env ()
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);
6705 COLSUBSHADE_PRIM ();
6710 static void cc_prim_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade ()
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);
6717 T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
6720 static void cc_prim_sub_shade_mul_t1a_add_shade ()
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);
6731 static void cc_prim_sub_shade_mul_t0_add_shade ()
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);
6742 static void cc_prim_sub_shade_mul_t1_add_shade ()
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);
6753 static void cc_prim_sub_shade_mul__t0a_mul_t1__add_shade ()
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);
6764 static void cc_prim_sub_shade_mul__t0_inter_t1_using_enva__add_shade ()
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);
6771 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6772 T0_INTER_T1_USING_FACTOR (factor);
6776 static void cc_prim_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()
6778 if (cmb.combine_ext)
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,
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);
6793 T0_INTER_T1_USING_SHADEA ();
6797 static void cc_prim_sub_shade_mul_prima_add_shade ()
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);
6808 static void cc_prim_sub_shade_mul_env_add_shade ()
6810 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6811 GR_COMBINE_FACTOR_ONE,
6812 GR_COMBINE_LOCAL_ITERATED,
6813 GR_COMBINE_OTHER_CONSTANT);
6819 static void cc_prim_sub_shade_mul_shadea_add_shade ()
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);
6828 static void cc_env_sub_prim_mul_t0_add_prim ()
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);
6839 static void cc_env_sub_prim_mul_t1_add_prim ()
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);
6850 static void cc_env_sub_prim_mul_t0a_add_prim ()
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);
6861 static void cc_env_sub_prim_mul_t1a_add_prim ()
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);
6872 static void cc_env_sub_prim_mul__t0_add_t1__add_prim ()
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);
6883 static void cc_env_sub_prim_mul__t0_mul_t1__add_prim () //Added by Gonetz
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);
6894 static void cc_env_sub_prim_mul__t0t1a__add_prim () //Added by Gonetz
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);
6905 static void cc_env_sub_prim_mul__t0_inter_t1_using_t1__add_prim () //Added by Gonetz
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);
6913 T0_INTER_T1_USING_T1 ();
6916 static void cc_env_sub_prim_mul__t0_inter_t1_using_half__add_prim () //Added by Gonetz
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);
6924 T0_INTER_T1_USING_FACTOR (0x7F);
6927 static void cc_env_sub_prim_mul__t1_inter_t0_using_t0__add_prim () //Added by Gonetz
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);
6935 T1_INTER_T0_USING_T0 ();
6938 static void cc_env_sub_shade_mul__t0_mul_t1__add_shade () //Added by Gonetz
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);
6948 static void cc_env_sub_prim_mul__t0a_mul_t1a__add_prim ()
6950 CCMB (GR_COMBINE_FUNCTION_BLEND,
6951 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6952 GR_COMBINE_LOCAL_CONSTANT,
6953 GR_COMBINE_OTHER_ITERATED);
6960 static void cc_env_sub_prim_mul_prima_add_prim () //Aded by Gonetz
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);
6972 static void cc_env_sub_prim_mul_enva_add_prim () //Aded by Gonetz
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);
6984 static void cc__t0_sub_env_mul_shade__sub_prim_mul_shade_add_prim ()
6986 if (cmb.combine_ext)
6988 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6989 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
6992 cmb.tex_ccolor = rdp.env_color;
6994 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
6995 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
7006 static void cc_env_sub_prim_mul_shade_add_prim () //Added by Gonetz
7008 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7009 GR_COMBINE_FACTOR_ONE,
7010 GR_COMBINE_LOCAL_CONSTANT,
7011 GR_COMBINE_OTHER_ITERATED);
7013 MULSHADE_ENVSUBPRIM ();
7016 static void cc_env_sub_prim_mul_shadea_add_prim () //Added by Gonetz
7018 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7019 GR_COMBINE_FACTOR_ONE,
7020 GR_COMBINE_LOCAL_CONSTANT,
7021 GR_COMBINE_OTHER_ITERATED);
7023 SETSHADE_ENVSUBPRIM ();
7027 static void cc_env_sub_prim_mul__t0_inter_t1_using_prima__add_prim ()
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);
7035 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7036 T0_INTER_T1_USING_FACTOR (factor);
7039 static void cc_env_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()
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);
7047 T0_INTER_T1_USING_FACTOR (lod_frac);
7050 static void cc_env_sub_primshade_mul_t0_add_primshade ()
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);
7061 static void cc_env_sub_primshade_mul_t1_add_primshade ()
7063 // cc_prim_mul_shade();
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);
7074 static void cc_env_sub_shade_mul_t0_add_shade ()
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);
7084 static void cc__env_sub_shade_mul_t0_add_shade__mul_prim ()
7086 if (cmb.combine_ext)
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,
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,
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);
7112 static void cc_env_sub_shade_mul_t1_add_shade ()
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);
7123 static void cc_env_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()
7125 if (cmb.combine_ext)
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,
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);
7140 T0_INTER_T1_USING_SHADEA ();
7144 static void cc_env_sub_shade_mul_enva_add_shade ()
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;
7154 static void cc_shade_sub_t0_mul_shadea_add_t0 ()
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);
7165 static void cc__t0_mul_shade_mul_shadea__add__t1_mul_one_sub_shadea ()
7167 // (t0-0)*shade+0, (cmb-t0)*shadea+t0
7168 if (cmb.combine_ext)
7170 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7171 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7174 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7175 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7180 CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
7181 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
7183 GR_CMBX_TEXTURE_RGB, 0);
7191 static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()
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);
7198 T0_INTER_T1_USING_FACTOR (lod_frac);
7201 static void cc_shade_sub_prim_mul_t0_add_prim ()
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);
7212 static void cc_shade_sub_prim_mul_t1_add_prim ()
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);
7223 static void cc_shade_sub_env_mul__t0_mul_t1__add__t0_mul_t1 ()
7225 if (cmb.combine_ext)
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);
7241 static void cc_shade_sub_env_mul_t0_add_prim ()
7243 if (rdp.cur_image && (rdp.cur_image->format != 0))
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);
7259 static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_prim ()
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);
7267 T0_INTER_T1_USING_FACTOR (lod_frac);
7271 static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_env ()
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);
7278 T0_INTER_T1_USING_FACTOR (lod_frac);
7282 static void cc_shade_sub_env_mul__t0_mul_t1__add_env ()
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);
7293 static void cc_shade_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()
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);
7301 T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
7305 static void cc_shade_sub_env_mul_t0_add_env ()
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);
7316 static void cc_shade_sub_env_mul_t0_mul_prim_add_prim_mul_env ()
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);
7329 static void cc_shade_sub_env_mul_t1_add_env ()
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);
7340 static void cc_shade_sub_env_mul_prim_add_t0 ()
7342 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7343 GR_COMBINE_FACTOR_ONE,
7344 GR_COMBINE_LOCAL_ITERATED,
7345 GR_COMBINE_OTHER_TEXTURE);
7351 static void cc__t0_add_prim_mul_shade__mul_shade_add_env ()
7353 if (!cmb.combine_ext)
7355 cc_shade_sub_env_mul_prim_add_t0 ();
7358 T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
7359 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7362 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
7363 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7366 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7367 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
7370 cmb.tex_ccolor = rdp.prim_color;
7375 static void cc__t0_add_prim_mul_shade__mul_shade ()
7377 if (!cmb.combine_ext)
7379 cc_shade_sub_env_mul_prim_add_t0 ();
7382 T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
7383 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7386 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7387 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
7390 cmb.tex_ccolor = rdp.prim_color;
7395 static void cc_shade_sub_env_mul_prim_add_env ()
7397 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7398 GR_COMBINE_FACTOR_ONE,
7399 GR_COMBINE_LOCAL_CONSTANT,
7400 GR_COMBINE_OTHER_ITERATED);
7407 static void cc_shade_sub_env_mul_prima_add_prim ()
7409 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7410 GR_COMBINE_FACTOR_ONE,
7411 GR_COMBINE_LOCAL_CONSTANT,
7412 GR_COMBINE_OTHER_ITERATED);
7418 static void cc_shade_sub_env_mul_k5_add_prim ()
7420 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7421 GR_COMBINE_FACTOR_ONE,
7422 GR_COMBINE_LOCAL_CONSTANT,
7423 GR_COMBINE_OTHER_ITERATED);
7425 wxUint32 temp = rdp.prim_color;
7426 rdp.prim_color = rdp.K5;
7428 rdp.prim_color = temp;
7432 // ** A inter B using C **
7433 static void cc_t0_inter_t1_using_t1a ()
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 ();
7442 static void cc_t0_inter_t1_using_prima ()
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);
7452 static void cc_t1_inter_t0_using_prima ()
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);
7462 static void cc_t1_inter_t0_using_prim ()
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 ();
7471 static void cc_t0_inter_t1_using_env ()
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 ();
7480 static void cc_t0_inter_t1_using_enva ()
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);
7490 static void cc__t0_inter_t1_using_prim__inter_env_using_enva ()
7492 // (t1-t0)*prim+t0, (env-cmb)*env_a+cmb
7493 if (!cmb.combine_ext)
7495 cc_t0_inter_t1_using_prima ();
7498 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7499 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
7506 cmb.tex_ccolor = rdp.prim_color;
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,
7512 cmb.ccolor = rdp.env_color;
7515 static void cc__t0_inter_t1_using_shade__inter_env_using_enva ()
7517 // (t1-t0)*shade+t0, (env-cmb)*env_a+cmb
7518 if (!cmb.combine_ext)
7520 cc_t0_inter_t1_using_enva ();
7523 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7524 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7527 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7528 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
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,
7536 cmb.ccolor = rdp.env_color;
7540 static void cc_t0_inter_t1_using_shade ()
7542 if (cmb.combine_ext)
7544 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7545 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7548 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7549 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7553 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7554 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
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);
7569 static void cc_t1_inter_t0_using_shade ()
7571 if (cmb.combine_ext)
7573 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7574 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7577 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7578 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7582 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7583 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
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);
7598 static void cc_t1_inter_t0_using_shadea ()
7600 if (cmb.combine_ext)
7602 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7603 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
7609 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7610 GR_COMBINE_FACTOR_ONE,
7611 GR_COMBINE_LOCAL_NONE,
7612 GR_COMBINE_OTHER_TEXTURE);
7614 T1_INTER_T0_USING_SHADEA ();
7618 static void cc_t0_inter_t1_using_primlod ()
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);
7628 static void cc_t1_inter_t0_using_primlod ()
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);
7638 static void cc_t1_inter_t0_using_t0 ()
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 ();
7648 static void cc_t0_inter_t1_using_k5 ()
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);
7657 static void cc_t0_inter_env_using_prim ()
7659 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7660 GR_COMBINE_FACTOR_ONE,
7661 GR_COMBINE_LOCAL_NONE,
7662 GR_COMBINE_OTHER_TEXTURE);
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);
7671 static void cc_t0_inter_prim_using_primlod ()
7673 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7674 GR_COMBINE_FACTOR_ONE,
7675 GR_COMBINE_LOCAL_NONE,
7676 GR_COMBINE_OTHER_TEXTURE);
7679 MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
7680 MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
7681 MOD_0_FAC (lod_frac & 0xFF);
7684 static void cc_t0_inter_shade_using_t0a ()
7686 if (cmb.combine_ext)
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,
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);
7704 cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
7705 cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA;
7709 static void cc_t0_inter_shade_using_primlod ()
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);
7716 cmb.ccolor=(~cmb.ccolor)&0xFFFFFF00;
7717 MULSHADE_PRIMLOD ();
7719 //(shade-t0)*primlod+t0 = t0*(1-primlod)+shade*primlod
7723 static void cc__env_inter_t0_using_primlod__mul_prim ()
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);
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);
7734 SETSHADE_1MPRIMLOD ();
7739 static void cc__env_inter_t0_using_shadea__mul_shade ()
7741 //((t0-env)*shadea+env)*shade
7742 if (!cmb.combine_ext)
7747 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7748 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7751 cmb.tex_ccolor = rdp.env_color;
7753 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7754 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
7760 static void cc_env_inter_prim_using_primlod ()
7762 if (rdp.prim_color&0xFFFFFF00)
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 ();
7774 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
7775 GR_COMBINE_FACTOR_ONE,
7776 GR_COMBINE_LOCAL_ITERATED,
7777 GR_COMBINE_OTHER_CONSTANT);
7779 SETSHADE_PRIMLOD ();
7784 static void cc_prim_inter__t0_mul_t1_add_env__using_shadea ()
7786 if (cmb.combine_ext)
7788 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7789 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
7796 cmb.tex_ccolor = rdp.env_color;
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);
7811 static void cc_env_inter__prim_inter_shade_using_t0__using_shadea ()
7813 if (!cmb.combine_ext)
7815 cc_shade_sub_prim_mul_t0_add_prim ();
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,
7822 cmb.tex_ccolor = rdp.prim_color;
7824 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7825 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
7831 static void cc_shade_inter__prim_inter_shade_using_t0__using_shadea ()
7833 if (!cmb.combine_ext)
7835 cc_shade_sub_prim_mul_t0_add_prim ();
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,
7842 cmb.tex_ccolor = rdp.prim_color;
7844 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7845 GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
7850 // ** (A-B)*C+D*E **
7851 static void cc_one_sub_env_mul_prim_add__t0_mul_env () //Aded by Gonetz
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);
7863 // ** ((A-B)*C+D)*E **
7864 static void cc_t0_sub_env_mul_prim_mul_shade_add_prim_mul_shade () //Aded by Gonetz
7866 //(t0-env)*shade+shade, (cmb-0)*prim+0
7867 if (cmb.combine_ext)
7869 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7870 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7873 cmb.tex_ccolor = rdp.env_color;
7875 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7876 GR_CMBX_ITRGB, GR_FUNC_MODE_X,
7877 GR_CMBX_CONSTANT_COLOR, 0,
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)
7889 MOD_0 (TMOD_TEX_SUB_COL);
7890 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
7897 static void cc__t1_sub_prim_mul_t0_add_env__mul_shade () //Aded by Gonetz
7899 // (t1-prim)*t0+env, (cmb-0)*shade+0
7900 if (cmb.combine_ext)
7902 T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7903 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
7910 cmb.tex_ccolor = rdp.prim_color;
7912 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7913 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
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)
7926 MOD_1 (TMOD_TEX_SUB_COL);
7927 MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
7933 // ** (A inter B using C) * D **
7935 static void cc__t0_inter_t1_using_prima__mul_prim ()
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);
7947 static void cc__t1_inter_t0_using_prima__mul_prim ()
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);
7959 static void cc__t0_inter_t1_using_prim__mul_shade ()
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 ();
7969 static void cc__t0_inter_t1_using_prima__mul_shade ()
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);
7980 static void cc__t1_inter_t0_using_prima__mul_shade ()
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);
7990 static void cc__t0_inter_t1_using_env__mul_shade ()
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 ();
7999 static void cc__t0_inter_t1_using_enva__mul_shade ()
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);
8009 static void cc__t0_inter_t1_using_enva__mul_prim ()
8011 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8012 GR_COMBINE_FACTOR_LOCAL,
8013 GR_COMBINE_LOCAL_CONSTANT,
8014 GR_COMBINE_OTHER_TEXTURE);
8016 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
8017 T0_INTER_T1_USING_FACTOR (factor);
8021 static void cc__t0_inter_t1_using_enva__mul_env ()
8023 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8024 GR_COMBINE_FACTOR_LOCAL,
8025 GR_COMBINE_LOCAL_CONSTANT,
8026 GR_COMBINE_OTHER_TEXTURE);
8028 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
8029 T0_INTER_T1_USING_FACTOR (factor);
8033 static void cc__t0_inter_t1_using_primlod__mul_prim ()
8035 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8036 GR_COMBINE_FACTOR_LOCAL,
8037 GR_COMBINE_LOCAL_CONSTANT,
8038 GR_COMBINE_OTHER_TEXTURE);
8040 T0_INTER_T1_USING_FACTOR (lod_frac);
8044 static void cc__t0_inter_t1_using_primlod__mul_prima ()
8046 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8047 GR_COMBINE_FACTOR_LOCAL,
8048 GR_COMBINE_LOCAL_CONSTANT,
8049 GR_COMBINE_OTHER_TEXTURE);
8051 T0_INTER_T1_USING_FACTOR (lod_frac);
8055 static void cc__t1_mul_primlod_add_t0__mul_prim ()
8057 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8058 GR_COMBINE_FACTOR_LOCAL,
8059 GR_COMBINE_LOCAL_CONSTANT,
8060 GR_COMBINE_OTHER_TEXTURE);
8062 T1_MUL_PRIMLOD_ADD_T0 ();
8066 static void cc__t0_inter_t1_using_primlod__mul_env ()
8068 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8069 GR_COMBINE_FACTOR_LOCAL,
8070 GR_COMBINE_LOCAL_CONSTANT,
8071 GR_COMBINE_OTHER_TEXTURE);
8073 T0_INTER_T1_USING_FACTOR (lod_frac);
8077 static void cc__t1_mul_primlod_add_t0__mul_env ()
8079 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8080 GR_COMBINE_FACTOR_LOCAL,
8081 GR_COMBINE_LOCAL_CONSTANT,
8082 GR_COMBINE_OTHER_TEXTURE);
8084 T1_MUL_PRIMLOD_ADD_T0 ();
8088 static void cc__t1_inter_t0_using_prim__mul_env ()
8090 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8091 GR_COMBINE_FACTOR_LOCAL,
8092 GR_COMBINE_LOCAL_CONSTANT,
8093 GR_COMBINE_OTHER_TEXTURE);
8095 T1_INTER_T0_USING_PRIM ();
8098 static void cc__one_sub_shade_mul_t0_add_shade__mul_prim ()
8100 if (cmb.combine_ext)
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,
8107 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8108 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
8109 GR_CMBX_CONSTANT_COLOR, 0,
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);
8123 static void cc__one_sub_shade_mul_t0_add_shade__mul_env ()
8125 if (cmb.combine_ext)
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,
8132 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8133 GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
8134 GR_CMBX_CONSTANT_COLOR, 0,
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);
8148 static void cc__t1_inter_t0_using_prim__mul_shade ()
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 ();
8157 static void cc__t0_inter_t1_using_primlod__mul_shade ()
8160 if (rdp.LOD_en && (rdp.mipmap_level == 0) && !(settings.hacks&hack_Fifa98))
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);
8175 static void cc__t1_inter_t0_using_primlod__mul_shade ()
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);
8184 static void cc__t0_inter_t1_using_half__mul_shade ()
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);
8193 static void cc__t0_inter_t1_using_t0__mul_shade ()
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();
8202 static void cc__t0_inter_t1_using_t1a__mul_shade ()
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();
8211 static void cc__t0_inter_t1_using_shadea__mul_shade ()
8213 if (cmb.combine_ext)
8215 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8216 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
8222 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8223 GR_COMBINE_FACTOR_LOCAL,
8224 GR_COMBINE_LOCAL_ITERATED,
8225 GR_COMBINE_OTHER_TEXTURE);
8227 T0_INTER_T1_USING_SHADEA ();
8230 static void cc__t0_inter_t1_using_k5__mul_shade ()
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);
8239 static void cc__t1_inter_t0_using_k5__mul_shade ()
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);
8248 static void cc_t0_inter_prim_using_prima ()
8250 if (cmb.combine_ext)
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,
8256 cmb.tex_ccolor = rdp.prim_color;
8258 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8259 GR_COMBINE_FACTOR_ONE,
8260 GR_COMBINE_LOCAL_NONE,
8261 GR_COMBINE_OTHER_TEXTURE);
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);
8276 static void cc__t0_inter_prim_using_t0a__mul_shade ()
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);
8287 static void cc__env_inter_prim_using_t0__mul_prim ()
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);
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);
8301 static void cc__env_inter_prim_using_t0__mul_shade ()
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)
8308 // 1ST = CLR_IN * A_IN + CLR_BL * 1MA
8309 // OUT = 1ST * 0 + 1ST * 1
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);
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);
8327 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8328 GR_COMBINE_FACTOR_LOCAL,
8329 GR_COMBINE_LOCAL_ITERATED,
8330 GR_COMBINE_OTHER_TEXTURE);
8333 static void cc__env_inter_one_using_t0__mul_shade ()
8335 //(one-env)*t0+env, (cmb-0)*shade+0
8336 if (cmb.combine_ext)
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,
8342 cmb.tex_ccolor = rdp.env_color&0xFFFFFF00;
8347 MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8348 MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8349 MOD_0_COL1 (0xFFFFFF00);
8352 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8353 GR_COMBINE_FACTOR_LOCAL,
8354 GR_COMBINE_LOCAL_ITERATED,
8355 GR_COMBINE_OTHER_TEXTURE);
8358 static void cc_env_inter_one_using__one_sub_t0_mul_primlod ()
8360 if (cmb.combine_ext)
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,
8367 cmb.tex_ccolor = rand()&0xFFFFFF00;
8369 percent = (float)(lod_frac) / 255.0f;
8370 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
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);
8384 static void cc__env_inter_prim_using_prima__mul_shade ()
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);
8403 static void cc__prim_inter_t0_using_env__mul_shade ()
8405 // (t0-prim)*env+prim, (cmb-0)*shade+0
8406 if ((rdp.prim_color & 0xFFFFFF00) == 0)
8408 cc_t0_mul_env_mul_shade ();
8410 else if (cmb.combine_ext)
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,
8416 cmb.tex_ccolor = rdp.env_color & 0xFFFFFF00;
8418 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8419 GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
8422 wxUint32 onesubenv = ~rdp.env_color;
8423 CC_C1MULC2(rdp.prim_color, onesubenv);
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);
8438 static void cc__one_inter_prim_using_t1__mul_shade ()
8440 if (cmb.combine_ext)
8442 if ((settings.hacks&hack_BAR) && rdp.cur_tile == 1)
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,
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,
8456 T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8457 GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
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,
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)
8476 MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8477 MOD_0_COL (0xFFFFFF00);
8478 MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8483 MOD_1 (TMOD_COL_INTER_COL1_USING_TEX);
8484 MOD_1_COL (0xFFFFFF00);
8485 MOD_1_COL1 (rdp.prim_color & 0xFFFFFF00);
8491 static void cc_prim_sub__prim_sub_t0_mul_prima__mul_shade ()
8493 // (prim-t0)*prim_a+0, (prim-cmb)*shade+0
8494 if (cmb.combine_ext)
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,
8500 cmb.tex_ccolor = rdp.prim_color;
8502 CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
8503 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
8510 if ((rdp.prim_color & 0xFFFFFF00) == 0)
8512 cc_t0_mul_prima_mul_shade ();
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));
8527 static void cc__prim_inter_env_using_t0__mul_shade ()
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);
8540 static void cc__prim_inter_one_using_env__mul_shade ()
8542 // (one-prim)*env+prim, (cmb-0)*shade+0
8543 if ((rdp.prim_color&0xFFFFFF00) == 0)
8545 cc_env_mul_shade ();
8548 if ((rdp.env_color&0xFFFFFF00) == 0)
8550 cc_prim_mul_shade ();
8553 if ((rdp.prim_color&0xFFFFFF00) == 0xFFFFFF00 || (rdp.env_color&0xFFFFFF00) == 0xFFFFFF00)
8558 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8559 GR_COMBINE_FACTOR_LOCAL,
8560 GR_COMBINE_LOCAL_ITERATED,
8561 GR_COMBINE_OTHER_CONSTANT);
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 ;
8569 static void cc__env_inter_prim_using_t0a__mul_t0 ()
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);
8581 static void cc__env_inter_prim_using_t0a__mul_prim ()
8583 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8584 GR_COMBINE_FACTOR_LOCAL,
8585 GR_COMBINE_LOCAL_CONSTANT,
8586 GR_COMBINE_OTHER_TEXTURE);
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);
8594 static void cc__env_inter_prim_using__t0_sub_shade_mul_primlod_add_env ()
8596 // (t0-shade)*lodf+env, (prim-env)*cmb+env
8597 if (cmb.combine_ext)
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,
8603 cmb.tex_ccolor = rdp.env_color;
8604 percent = (float)lod_frac / 255.0f;
8605 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
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);
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);
8624 MULSHADE_PRIMSUBENV ();
8626 SUBSHADE_PRIMSUBENV ();
8630 static void cc__prim_inter_t0_using_t0__mul_shade ()
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);
8641 static void cc__env_inter_t0_using_t0a__mul_shade ()
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);
8652 static void cc__env_inter_t0_using_prima__mul_shade ()
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));
8665 static void cc_shade_mul_prima ()
8667 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8668 GR_COMBINE_FACTOR_ONE,
8669 GR_COMBINE_LOCAL_NONE,
8670 GR_COMBINE_OTHER_ITERATED);
8674 static void cc_shade_mul_shadea ()
8676 CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8677 GR_COMBINE_FACTOR_ONE,
8678 GR_COMBINE_LOCAL_NONE,
8679 GR_COMBINE_OTHER_ITERATED);
8683 static void cc__t0_mul_shade__inter_env_using_enva ()
8685 // (t0-0)*shade+0, (env-cmb)*env_a+cmb ** INC **
8686 wxUint32 enva = rdp.env_color&0xFF;
8691 else if (cmb.combine_ext)
8693 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
8694 GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
8698 CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8699 GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
8703 CC_COLMULBYTE(rdp.env_color, (rdp.env_color&0xFF));
8704 cmb.tex_ccolor = cmb.ccolor;
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);
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);
8720 static void cc__t0_mul_shade__inter_one_using_enva ()
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);
8731 static void cc__t0_mul_shade__inter_one_using_shadea ()
8733 if (cmb.combine_ext)
8735 T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8736 GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
8740 CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_X,
8741 GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
8751 static void cc__prim_mul_shade__inter_env_using_enva ()
8753 CCMB (GR_COMBINE_FUNCTION_BLEND,
8754 GR_COMBINE_FACTOR_LOCAL_ALPHA,
8755 GR_COMBINE_LOCAL_ITERATED,
8756 GR_COMBINE_OTHER_CONSTANT);
8762 static void cc__prim_mul_shade__inter_env_using__prim_mul_shade_alpha ()
8764 CCMB (GR_COMBINE_FUNCTION_BLEND,
8765 GR_COMBINE_FACTOR_LOCAL_ALPHA,
8766 GR_COMBINE_LOCAL_ITERATED,
8767 GR_COMBINE_OTHER_CONSTANT);
8774 //****************************************************************
8776 static void ac_one ()
8778 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8779 GR_COMBINE_FACTOR_NONE,
8780 GR_COMBINE_LOCAL_CONSTANT,
8781 GR_COMBINE_OTHER_NONE);
8785 static void ac_t0 ()
8787 if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))
8789 wxUint32 blend_mode = (rdp.othermode_l >> 16);
8790 if (blend_mode == 0x0550)
8792 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8793 GR_COMBINE_FACTOR_LOCAL,
8794 GR_COMBINE_LOCAL_CONSTANT,
8795 GR_COMBINE_OTHER_TEXTURE);
8798 else if (blend_mode == 0x55f0) //cmem*afog + cfog*1ma
8800 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8801 GR_COMBINE_FACTOR_ONE,
8802 GR_COMBINE_LOCAL_CONSTANT,
8803 GR_COMBINE_OTHER_NONE);
8808 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8809 GR_COMBINE_FACTOR_ONE,
8810 GR_COMBINE_LOCAL_NONE,
8811 GR_COMBINE_OTHER_TEXTURE);
8816 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8817 GR_COMBINE_FACTOR_ONE,
8818 GR_COMBINE_LOCAL_NONE,
8819 GR_COMBINE_OTHER_TEXTURE);
8824 static void ac_zero ()
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;
8838 static void ac_t1 ()
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)
8850 static void ac_prim ()
8852 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8853 GR_COMBINE_FACTOR_NONE,
8854 GR_COMBINE_LOCAL_CONSTANT,
8855 GR_COMBINE_OTHER_NONE);
8859 static void ac_primlod ()
8861 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8862 GR_COMBINE_FACTOR_NONE,
8863 GR_COMBINE_LOCAL_CONSTANT,
8864 GR_COMBINE_OTHER_NONE);
8868 static void ac_one_sub_t0 ()
8870 ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
8871 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
8872 GR_COMBINE_LOCAL_CONSTANT,
8873 GR_COMBINE_OTHER_NONE);
8878 static void ac_one_sub_prim ()
8880 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8881 GR_COMBINE_FACTOR_NONE,
8882 GR_COMBINE_LOCAL_CONSTANT,
8883 GR_COMBINE_OTHER_NONE);
8887 static void ac_env ()
8889 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8890 GR_COMBINE_FACTOR_NONE,
8891 GR_COMBINE_LOCAL_CONSTANT,
8892 GR_COMBINE_OTHER_NONE);
8896 static void ac_shade ()
8898 ACMB (GR_COMBINE_FUNCTION_LOCAL,
8899 GR_COMBINE_FACTOR_NONE,
8900 GR_COMBINE_LOCAL_ITERATED,
8901 GR_COMBINE_OTHER_NONE);
8905 static void ac_t0_add_t1 () //Aded by Gonetz
8907 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8908 GR_COMBINE_FACTOR_ONE,
8909 GR_COMBINE_LOCAL_NONE,
8910 GR_COMBINE_OTHER_TEXTURE);
8914 static void ac__t0_mul_prim__add__t1_mul_primlod () //Aded by Gonetz
8918 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8919 GR_COMBINE_FACTOR_LOCAL,
8920 GR_COMBINE_LOCAL_CONSTANT,
8921 GR_COMBINE_OTHER_TEXTURE);
8925 else if ((rdp.prim_color&0xFF) == 0)
8927 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8928 GR_COMBINE_FACTOR_LOCAL,
8929 GR_COMBINE_LOCAL_CONSTANT,
8930 GR_COMBINE_OTHER_TEXTURE);
8934 else if ((rdp.prim_color&0xFF) == 0xFF)
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();
8944 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8945 GR_COMBINE_FACTOR_LOCAL,
8946 GR_COMBINE_LOCAL_CONSTANT,
8947 GR_COMBINE_OTHER_TEXTURE);
8953 static void ac_t0_add_prim () //Aded by Gonetz
8955 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8956 GR_COMBINE_FACTOR_ONE,
8957 GR_COMBINE_LOCAL_CONSTANT,
8958 GR_COMBINE_OTHER_TEXTURE);
8963 static void ac_t0_add_env () //Aded by Gonetz
8965 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8966 GR_COMBINE_FACTOR_ONE,
8967 GR_COMBINE_LOCAL_CONSTANT,
8968 GR_COMBINE_OTHER_TEXTURE);
8973 static void ac_t1_add_env () //Added by Gonetz
8975 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8976 GR_COMBINE_FACTOR_ONE,
8977 GR_COMBINE_LOCAL_CONSTANT,
8978 GR_COMBINE_OTHER_TEXTURE);
8983 static void ac__t0_add_t1__add_prim () //Aded by Gonetz
8985 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8986 GR_COMBINE_FACTOR_ONE,
8987 GR_COMBINE_LOCAL_CONSTANT,
8988 GR_COMBINE_OTHER_TEXTURE);
8993 static void ac_prim_add_shade () //Aded by Gonetz
8995 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8996 GR_COMBINE_FACTOR_ONE,
8997 GR_COMBINE_LOCAL_ITERATED,
8998 GR_COMBINE_OTHER_CONSTANT);
9002 static void ac_env_add_shade () //Aded by Gonetz
9004 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9005 GR_COMBINE_FACTOR_ONE,
9006 GR_COMBINE_LOCAL_ITERATED,
9007 GR_COMBINE_OTHER_CONSTANT);
9012 static void ac_t0_mul_t0 () //Added by Gonetz
9014 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9015 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9016 GR_COMBINE_LOCAL_NONE,
9017 GR_COMBINE_OTHER_TEXTURE);
9021 static void ac_t0_mul_t1 ()
9023 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9024 GR_COMBINE_FACTOR_ONE,
9025 GR_COMBINE_LOCAL_NONE,
9026 GR_COMBINE_OTHER_TEXTURE);
9030 static void ac_t0_mul_t1_add_t1 ()
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)
9038 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9039 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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,
9054 static void ac_t0_mul_t1_add_prim ()
9056 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9057 GR_COMBINE_FACTOR_ONE,
9058 GR_COMBINE_LOCAL_CONSTANT,
9059 GR_COMBINE_OTHER_TEXTURE);
9064 static void ac_t0_mul_prim ()
9066 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9067 GR_COMBINE_FACTOR_LOCAL,
9068 GR_COMBINE_LOCAL_CONSTANT,
9069 GR_COMBINE_OTHER_TEXTURE);
9074 static void ac_t0_mul_prim_mul_primlod ()
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 ();
9084 static void ac_t1_mul_prim ()
9086 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9087 GR_COMBINE_FACTOR_LOCAL,
9088 GR_COMBINE_LOCAL_CONSTANT,
9089 GR_COMBINE_OTHER_TEXTURE);
9091 if (rdp.cycle_mode == 0)
9098 static void ac__t1_sub_one_mul_primlod_add_t0__mul_prim ()
9100 if (cmb.combine_ext)
9102 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9103 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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;
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;
9121 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9122 GR_COMBINE_FACTOR_LOCAL,
9123 GR_COMBINE_LOCAL_CONSTANT,
9124 GR_COMBINE_OTHER_TEXTURE);
9126 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9130 static void ac__t0_sub_t1_mul_enva_add_t0__mul_prim ()
9132 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9133 GR_COMBINE_FACTOR_LOCAL,
9134 GR_COMBINE_LOCAL_CONSTANT,
9135 GR_COMBINE_OTHER_TEXTURE);
9137 if (cmb.combine_ext)
9139 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9140 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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) ;
9156 static void ac__t0_sub_one_mul_enva_add_t0__mul_prim ()
9158 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9159 GR_COMBINE_FACTOR_LOCAL,
9160 GR_COMBINE_LOCAL_CONSTANT,
9161 GR_COMBINE_OTHER_TEXTURE);
9163 if (cmb.combine_ext)
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);
9170 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
9179 static void ac__t0_sub_t1_mul_primlod_add_t0__mul_prim ()
9181 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9182 GR_COMBINE_FACTOR_LOCAL,
9183 GR_COMBINE_LOCAL_CONSTANT,
9184 GR_COMBINE_OTHER_TEXTURE);
9186 if (cmb.combine_ext)
9188 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9189 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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);
9197 percent = (float)lod_frac / 255.0f;
9198 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9202 A_T0_INTER_T1_USING_FACTOR (lod_frac);
9206 static void ac__t1_sub_prim_mul_primlod_add_t0__mul_prim ()
9208 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9209 GR_COMBINE_FACTOR_LOCAL,
9210 GR_COMBINE_LOCAL_CONSTANT,
9211 GR_COMBINE_OTHER_TEXTURE);
9213 if (cmb.combine_ext)
9215 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9216 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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);
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;
9230 A_T0_INTER_T1_USING_FACTOR (lod_frac);
9234 static void ac__t1_sub_t0_mul_enva_add_t1__mul_prim ()
9236 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9237 GR_COMBINE_FACTOR_LOCAL,
9238 GR_COMBINE_LOCAL_CONSTANT,
9239 GR_COMBINE_OTHER_TEXTURE);
9241 if (cmb.combine_ext)
9243 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9244 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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,
9252 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF);
9256 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
9257 A_T0_INTER_T1_USING_FACTOR (factor);
9261 static void ac__t1_sub_t0_mul_primlod__mul_env_add_prim ()
9263 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9264 GR_COMBINE_FACTOR_ONE,
9265 GR_COMBINE_LOCAL_CONSTANT,
9266 GR_COMBINE_OTHER_TEXTURE);
9268 if (cmb.combine_ext)
9270 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9271 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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,
9278 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (wxUint32)((float)(rdp.env_color&0xFF)*(float)rdp.prim_lodfrac/255.0f);
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; \
9291 static void ac__t0_sub_one_mul_enva_add_t1__mul_prim ()
9293 if (cmb.combine_ext)
9295 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9296 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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,
9303 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
9305 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9306 GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9314 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9315 GR_COMBINE_FACTOR_LOCAL,
9316 GR_COMBINE_LOCAL_ITERATED,
9317 GR_COMBINE_OTHER_TEXTURE);
9324 static void ac__t1_mul_prima_add_t0__mul_env ()
9326 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9327 GR_COMBINE_FACTOR_LOCAL,
9328 GR_COMBINE_LOCAL_CONSTANT,
9329 GR_COMBINE_OTHER_TEXTURE);
9331 A_T1_MUL_PRIMA_ADD_T0 ();
9334 static void ac__t1_mul_enva_add_t0__mul_prim ()
9336 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9337 GR_COMBINE_FACTOR_LOCAL,
9338 GR_COMBINE_LOCAL_CONSTANT,
9339 GR_COMBINE_OTHER_TEXTURE);
9341 A_T1_MUL_ENVA_ADD_T0 ();
9344 static void ac_t0_mul_primlod ()
9346 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9347 GR_COMBINE_FACTOR_LOCAL,
9348 GR_COMBINE_LOCAL_CONSTANT,
9349 GR_COMBINE_OTHER_TEXTURE);
9354 static void ac_t1_mul_primlod ()
9356 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9357 GR_COMBINE_FACTOR_LOCAL,
9358 GR_COMBINE_LOCAL_CONSTANT,
9359 GR_COMBINE_OTHER_TEXTURE);
9365 static void ac__t0_add_t1__mul_prim ()
9367 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9368 GR_COMBINE_FACTOR_LOCAL,
9369 GR_COMBINE_LOCAL_CONSTANT,
9370 GR_COMBINE_OTHER_TEXTURE);
9376 static void ac__t0_add_t1__mul_primlod ()
9378 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9379 GR_COMBINE_FACTOR_LOCAL,
9380 GR_COMBINE_LOCAL_CONSTANT,
9381 GR_COMBINE_OTHER_TEXTURE);
9387 static void ac__t0_mul_t1__mul_primlod ()
9389 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9390 GR_COMBINE_FACTOR_LOCAL,
9391 GR_COMBINE_LOCAL_CONSTANT,
9392 GR_COMBINE_OTHER_TEXTURE);
9397 static void ac_t0_mul_env ()
9399 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9400 GR_COMBINE_FACTOR_LOCAL,
9401 GR_COMBINE_LOCAL_CONSTANT,
9402 GR_COMBINE_OTHER_TEXTURE);
9407 static void ac_t0_mul_env_mul_primlod ()
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 ();
9417 static void ac_t1_mul_env () //Added by Gonetz
9419 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9420 GR_COMBINE_FACTOR_LOCAL,
9421 GR_COMBINE_LOCAL_CONSTANT,
9422 GR_COMBINE_OTHER_TEXTURE);
9424 // if ((settings.hacks&hack_Powerpuff) && (rdp.last_tile == 0))
9425 if (rdp.cycle_mode == 0)
9431 static void ac__t1_sub_one_mul_primlod_add_t0__mul_env ()
9433 if (cmb.combine_ext)
9435 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9436 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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;
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;
9454 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9455 GR_COMBINE_FACTOR_LOCAL,
9456 GR_COMBINE_LOCAL_CONSTANT,
9457 GR_COMBINE_OTHER_TEXTURE);
9459 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9463 static void ac_t0_mul_shade ()
9465 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9466 GR_COMBINE_FACTOR_LOCAL,
9467 GR_COMBINE_LOCAL_ITERATED,
9468 GR_COMBINE_OTHER_TEXTURE);
9472 static void ac_t1_mul_shade ()
9474 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9475 GR_COMBINE_FACTOR_LOCAL,
9476 GR_COMBINE_LOCAL_ITERATED,
9477 GR_COMBINE_OTHER_TEXTURE);
9482 static void ac__t0_add_t1__mul_shade ()
9484 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9485 GR_COMBINE_FACTOR_LOCAL,
9486 GR_COMBINE_LOCAL_ITERATED,
9487 GR_COMBINE_OTHER_TEXTURE);
9491 static void ac__t0_mul_primlod_add_t0__mul_shade ()
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)
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);
9504 percent = (float)lod_frac / 255.0f;
9505 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9513 static void ac__t1_mul_prima_add_t0__mul_shade ()
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 ();
9523 static void ac__t0_sub_t1__mul_shade ()
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)
9531 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9532 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9535 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9536 GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9547 static void ac__t1_mul_t1_add_t1__mul_shade ()
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)
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,
9571 static void ac__t1_mul_enva_add_t0__mul_shade ()
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 ();
9580 static void ac__t1_sub_one_mul_primlod_add_t0__mul_shade ()
9582 if (cmb.combine_ext)
9584 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9585 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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;
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;
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;
9611 static void ac__t1_sub_shade_mul_primlod_add_t0__mul_shade ()
9613 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9614 GR_COMBINE_FACTOR_LOCAL,
9615 GR_COMBINE_LOCAL_CONSTANT,
9616 GR_COMBINE_OTHER_TEXTURE);
9618 if (cmb.combine_ext)
9620 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9621 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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);
9629 percent = (float)lod_frac / 255.0f;
9630 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9634 A_T0_INTER_T1_USING_FACTOR (lod_frac);
9639 static void ac_prim_mul_prim ()
9641 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9642 GR_COMBINE_FACTOR_LOCAL,
9643 GR_COMBINE_LOCAL_CONSTANT,
9644 GR_COMBINE_OTHER_ITERATED);
9650 static void ac_prim_mul_primlod ()
9652 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9653 GR_COMBINE_FACTOR_LOCAL,
9654 GR_COMBINE_LOCAL_CONSTANT,
9655 GR_COMBINE_OTHER_ITERATED);
9660 static void ac_prim_mul_env ()
9662 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9663 GR_COMBINE_FACTOR_LOCAL,
9664 GR_COMBINE_LOCAL_CONSTANT,
9665 GR_COMBINE_OTHER_ITERATED);
9670 static void ac__prim_sub_one_mul_primlod_add_t0__mul_env ()
9672 if (cmb.combine_ext)
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);
9679 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
9680 percent = (float)lod_frac / 255.0f;
9681 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9688 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9689 GR_COMBINE_FACTOR_LOCAL,
9690 GR_COMBINE_LOCAL_CONSTANT,
9691 GR_COMBINE_OTHER_TEXTURE);
9695 static void ac_prim_mul_shade ()
9697 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9698 GR_COMBINE_FACTOR_LOCAL,
9699 GR_COMBINE_LOCAL_CONSTANT,
9700 GR_COMBINE_OTHER_ITERATED);
9704 static void ac_env_mul_shade ()
9706 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9707 GR_COMBINE_FACTOR_LOCAL,
9708 GR_COMBINE_LOCAL_CONSTANT,
9709 GR_COMBINE_OTHER_ITERATED);
9713 static void ac_primlod_mul_shade ()
9715 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9716 GR_COMBINE_FACTOR_LOCAL,
9717 GR_COMBINE_LOCAL_CONSTANT,
9718 GR_COMBINE_OTHER_ITERATED);
9723 static void ac_prim_sub_t0 ()
9725 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9726 GR_COMBINE_FACTOR_ONE,
9727 GR_COMBINE_LOCAL_NONE,
9728 GR_COMBINE_OTHER_TEXTURE);
9731 MOD_0 (TMOD_FULL_COLOR_SUB_TEX);
9732 MOD_0_COL (rdp.prim_color);
9736 static void ac_t0_mul_prim_add_t0 ()
9738 if (cmb.combine_ext)
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,
9751 static void ac_t1_mul_prim_add_t0 ()
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 ();
9760 static void ac__t0_inter_t1_using_t1a__mul_prim_add__t0_inter_t1_using_t1a ()
9762 if (cmb.combine_ext)
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,
9772 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9773 GR_COMBINE_FACTOR_LOCAL,
9774 GR_COMBINE_LOCAL_CONSTANT,
9775 GR_COMBINE_OTHER_TEXTURE);
9778 A_T0_INTER_T1_USING_T1A ();
9781 static void ac__t1_inter_t0_using_t0a__mul_prim_add__t1_inter_t0_using_t0a ()
9783 if (cmb.combine_ext)
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,
9793 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9794 GR_COMBINE_FACTOR_LOCAL,
9795 GR_COMBINE_LOCAL_CONSTANT,
9796 GR_COMBINE_OTHER_TEXTURE);
9799 A_T1_INTER_T0_USING_T0A ();
9803 static void ac_t0_mul_prim_add_env ()
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);
9815 static void ac__t0_add_t1__mul_prim_add_env ()
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);
9827 static void ac__t0_inter_t1_using_enva__mul_prim_add_env ()
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);
9835 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
9836 A_T0_INTER_T1_USING_FACTOR (factor);
9840 static void ac_t0_mul_primlod_add_t0 ()
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)
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);
9853 percent = (float)lod_frac / 255.0f;
9854 cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9863 static void ac_t1_mul_primlod_add_t0 ()
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 ();
9873 static void ac_t0_mul_primlod_add_prim ()
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);
9884 static void ac_t0_mul_primlod_add_env ()
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);
9896 static void ac__t0_add_t1__mul_primlod_add_prim ()
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);
9908 static void ac_t0_mul_env_add_prim ()
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);
9920 static void ac_t1_mul_prim_add_prim ()
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);
9932 static void ac_prim_mul_shade_add_shade ()
9934 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9935 GR_COMBINE_FACTOR_LOCAL,
9936 GR_COMBINE_LOCAL_ITERATED,
9937 GR_COMBINE_OTHER_CONSTANT);
9942 static void ac_t0_mul_shade_add_prim ()
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);
9952 static void ac_t0_mul_shade_add_env ()
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);
9962 static void ac_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade ()
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);
9974 static void ac_t0_mul_prim_add_shade_mul_one_minus_prim ()
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 ();
9986 static void ac__t0_mul_primlod_add_shade__mul_shade ()
9988 if (cmb.combine_ext)
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,
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,
10004 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10005 GR_COMBINE_FACTOR_LOCAL,
10006 GR_COMBINE_LOCAL_ITERATED,
10007 GR_COMBINE_OTHER_TEXTURE);
10012 static void ac__t1_mul_primlod_add_shade__mul_shade ()
10014 if (cmb.combine_ext)
10016 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10017 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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,
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,
10034 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10035 GR_COMBINE_FACTOR_LOCAL,
10036 GR_COMBINE_LOCAL_ITERATED,
10037 GR_COMBINE_OTHER_TEXTURE);
10042 // ** ((A-B)*C+D)+E **
10043 static void ac__t0_sub_t1_mul_prim_add_shade__mul_shade ()
10044 //(t0-t1)*prim+shade, (cmb-0)*shade+0
10046 if (cmb.combine_ext)
10048 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10049 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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,
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,
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);
10074 static void ac__t1_sub_t0_mul_prim_add_shade__mul_shade ()
10075 //(t1-t0)*prim+shade, (cmb-0)*shade+0
10077 if (cmb.combine_ext)
10079 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10080 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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,
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,
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);
10106 static void ac__t0_mul_t1__mul_prim ()
10108 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10109 GR_COMBINE_FACTOR_LOCAL,
10110 GR_COMBINE_LOCAL_CONSTANT,
10111 GR_COMBINE_OTHER_TEXTURE);
10113 if (voodoo.sup_large_tex || rdp.tiles[1].lr_s < 256) //hack for RR64 pause screen
10123 static void ac__t0_mul_t1__mul_env ()
10125 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10126 GR_COMBINE_FACTOR_LOCAL,
10127 GR_COMBINE_LOCAL_CONSTANT,
10128 GR_COMBINE_OTHER_TEXTURE);
10133 static void ac__t0_mul_t1__mul_env_mul_shade ()
10135 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10136 GR_COMBINE_FACTOR_LOCAL,
10137 GR_COMBINE_LOCAL_ITERATED,
10138 GR_COMBINE_OTHER_TEXTURE);
10143 static void ac__t0_mul_t1__mul_prim_mul_shade ()
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 ();
10153 static void ac__t0_mul_t1__mul_shade ()
10155 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10156 GR_COMBINE_FACTOR_LOCAL,
10157 GR_COMBINE_LOCAL_ITERATED,
10158 GR_COMBINE_OTHER_TEXTURE);
10162 static void ac__t0_add_prim_mul_shade__mul_shade ()
10164 // (shade-0)*prim+t0, (cmb-0)*shade+0
10165 if (cmb.combine_ext)
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,
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,
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 ();
10190 static void ac_t0_mul_prim_mul_prim ()
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 ();
10201 static void ac_t0_mul_prim_mul_env ()
10203 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10204 GR_COMBINE_FACTOR_LOCAL,
10205 GR_COMBINE_LOCAL_CONSTANT,
10206 GR_COMBINE_OTHER_TEXTURE);
10211 static void ac_t0_mul_prim_mul_shade ()
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 ();
10221 static void ac_t1_mul_prim_mul_shade ()
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 ();
10231 static void ac_t0_mul_env_mul_shade ()
10233 if (rdp.cur_image && (rdp.cur_image->format != 0))
10239 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10240 GR_COMBINE_FACTOR_LOCAL,
10241 GR_COMBINE_LOCAL_ITERATED,
10242 GR_COMBINE_OTHER_TEXTURE);
10247 static void ac_t1_mul_env_mul_shade ()
10249 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10250 GR_COMBINE_FACTOR_LOCAL,
10251 GR_COMBINE_LOCAL_ITERATED,
10252 GR_COMBINE_OTHER_TEXTURE);
10257 static void ac_t0_mul_primlod_mul_prim () //Aded by Gonetz
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);
10268 static void ac_prim_add_env_mul_t0 () //Aded by Gonetz
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 ();
10279 static void ac_t1_add_prim_mul_env () //Aded by Gonetz
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);
10286 SETSHADE_A_PRIM ();
10289 //(t1+prim)*env = t1*env + prim*env
10293 static void ac_t0_sub_prim_mul_shade ()
10295 if (cmb.combine_ext)
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,
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,
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 ();
10317 static void ac_t0_sub_prim_mul_shade_mul_env ()
10319 if (cmb.combine_ext)
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,
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,
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 ();
10343 static void ac_t0_sub_shade_mul_prim ()
10345 if (cmb.combine_ext)
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,
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,
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 ();
10367 static void ac__t0_mul_t1__sub_prim_mul_shade () //Aded by Gonetz
10369 if (cmb.combine_ext)
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,
10379 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10380 GR_COMBINE_FACTOR_LOCAL,
10381 GR_COMBINE_LOCAL_ITERATED,
10382 GR_COMBINE_OTHER_TEXTURE);
10387 static void ac__one_sub_t1_mul_t0_add_shade__sub_prim_mul_shade () //Aded by Gonetz
10389 // (1-t1)*t0+shade, (cmb-prim)*shade+0
10390 if (cmb.combine_ext)
10392 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10393 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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,
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,
10409 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10410 GR_COMBINE_FACTOR_LOCAL,
10411 GR_COMBINE_LOCAL_ITERATED,
10412 GR_COMBINE_OTHER_TEXTURE);
10417 static void ac__t1_mul_primlod_add_t0__sub_prim_mul_shade ()
10419 if (cmb.combine_ext)
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,
10429 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10430 GR_COMBINE_FACTOR_LOCAL,
10431 GR_COMBINE_LOCAL_ITERATED,
10432 GR_COMBINE_OTHER_TEXTURE);
10434 A_T1_MUL_PRIMLOD_ADD_T0 ();
10437 static void ac__t1_mul_primlod_add_t0__sub_env_mul_prim () //Aded by Gonetz
10439 if (cmb.combine_ext)
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,
10446 SETSHADE_A_PRIM ();
10450 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10451 GR_COMBINE_FACTOR_LOCAL,
10452 GR_COMBINE_LOCAL_CONSTANT,
10453 GR_COMBINE_OTHER_TEXTURE);
10456 A_T1_MUL_PRIMLOD_ADD_T0 ();
10459 static void ac__t1_mul_prima_add_t0__sub_env_mul_shade () //Aded by Gonetz
10461 if (cmb.combine_ext)
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,
10471 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10472 GR_COMBINE_FACTOR_LOCAL,
10473 GR_COMBINE_LOCAL_ITERATED,
10474 GR_COMBINE_OTHER_TEXTURE);
10476 A_T1_MUL_PRIMA_ADD_T0 ();
10479 static void ac_one_sub_t0_mul_prim () //Aded by Gonetz
10481 ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
10482 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10483 GR_COMBINE_LOCAL_CONSTANT,
10484 GR_COMBINE_OTHER_NONE);
10489 static void ac_one_sub_t0_mul_shade () //Aded by Gonetz
10491 if (rdp.aTBuffTex[0] || rdp.aTBuffTex[1])
10493 ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
10494 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10495 GR_COMBINE_LOCAL_ITERATED,
10496 GR_COMBINE_OTHER_NONE);
10503 static void ac_one_sub_prim_mul_t0 () //Aded by Gonetz
10505 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10506 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10507 GR_COMBINE_LOCAL_CONSTANT,
10508 GR_COMBINE_OTHER_TEXTURE);
10513 static void ac_one_sub_env_mul_t0 () //Aded by Gonetz
10515 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10516 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10517 GR_COMBINE_LOCAL_CONSTANT,
10518 GR_COMBINE_OTHER_TEXTURE);
10523 static void ac_one_sub_shade_mul_t0 () //Aded by Gonetz
10525 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10526 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10527 GR_COMBINE_LOCAL_ITERATED,
10528 GR_COMBINE_OTHER_TEXTURE);
10532 static void ac_one_sub_shade_mul_env () //Aded by Gonetz
10534 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10535 GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10536 GR_COMBINE_LOCAL_ITERATED,
10537 GR_COMBINE_OTHER_CONSTANT);
10541 static void ac_prim_sub_shade_mul_t0 () //Aded by Gonetz
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);
10551 static void ac_prim_sub_shade_mul_prim () //Aded by Gonetz
10553 if (cmb.combine_ext)
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,
10563 if (!(rdp.prim_color & 0xFF))
10569 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10570 GR_COMBINE_FACTOR_ONE,
10571 GR_COMBINE_LOCAL_ITERATED,
10572 GR_COMBINE_OTHER_CONSTANT);
10578 static void ac_shade_sub_env_mul_t0 () //Aded by Gonetz
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);
10589 static void ac_one_sub_t0_mul_prim_mul_shade () //Aded by Gonetz
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 ();
10600 static void ac_one_plus_env_mul_prim_mul_shade ()
10602 if (cmb.combine_ext)
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,
10608 MULSHADE_A_PRIM ();
10612 ac_prim_mul_shade ();
10616 static void ac__t0_mul_t1__sub_env_mul_prim_add__t0_mul_t1 () //Aded by Gonetz
10618 if (cmb.combine_ext)
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);
10625 SETSHADE_A_PRIM ();
10629 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10630 GR_COMBINE_FACTOR_ONE,
10631 GR_COMBINE_LOCAL_NONE,
10632 GR_COMBINE_OTHER_TEXTURE);
10638 static void ac__t0_sub_prim_mul_shade_add_shade__mul_env () //Aded by Gonetz
10640 if (cmb.combine_ext)
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) ;
10648 ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
10649 GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10650 GR_CMBX_CONSTANT_ALPHA, 0,
10656 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10657 GR_COMBINE_FACTOR_LOCAL,
10658 GR_COMBINE_LOCAL_ITERATED,
10659 GR_COMBINE_OTHER_TEXTURE);
10661 MOD_0 (TMOD_TEX_SUB_COL);
10662 MOD_0_COL (rdp.prim_color & 0xFF);
10667 static void ac_t0_sub_t1_mul_env_add_env () //Aded by Gonetz
10669 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10670 GR_COMBINE_FACTOR_LOCAL,
10671 GR_COMBINE_LOCAL_CONSTANT,
10672 GR_COMBINE_OTHER_TEXTURE);
10677 static void ac_t0_sub_one_mul_enva_add_t1 () //Aded by Gonetz
10679 if (cmb.combine_ext)
10681 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10682 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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,
10689 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
10691 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10692 GR_COMBINE_FACTOR_ONE,
10693 GR_COMBINE_LOCAL_CONSTANT,
10694 GR_COMBINE_OTHER_TEXTURE);
10699 ac__t0_mul_t1__mul_env ();
10703 static void ac_t1_sub_one_mul_enva_add_t0 () //Aded by Gonetz
10705 if (cmb.combine_ext)
10707 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10708 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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) ;
10718 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10719 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10725 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10726 GR_COMBINE_FACTOR_ONE,
10727 GR_COMBINE_LOCAL_NONE,
10728 GR_COMBINE_OTHER_TEXTURE);
10733 static void ac_t1_sub_one_mul_primlod_add_t0 () //Aded by Gonetz
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)
10741 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10742 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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;
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;
10768 static void ac_t1_sub_prim_mul_shade_add_prim () //Aded by Gonetz
10770 if (cmb.combine_ext)
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,
10776 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10777 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10780 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF) ;
10782 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10783 GR_CMBX_ZERO, GR_FUNC_MODE_X,
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);
10794 MOD_1 (TMOD_TEX_SUB_COL);
10795 MOD_1_COL (rdp.prim_color & 0xFF);
10800 static void ac_t0_sub_env_mul_prim_add_env () //Aded by Gonetz
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 ();
10809 //(t0-env)*prim+env == t0*prim + env*(1-prim)
10812 static void ac_t0_sub_env_mul_shadea_add_env () //Aded by Gonetz
10814 if (!cmb.combine_ext)
10816 ac_t0_mul_shade ();
10819 T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10820 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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,
10831 static void ac__one_sub_t0_mul_t1_add_t0__mul_prim () //Aded by Gonetz
10833 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10834 GR_COMBINE_FACTOR_LOCAL,
10835 GR_COMBINE_LOCAL_CONSTANT,
10836 GR_COMBINE_OTHER_TEXTURE);
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;
10845 static void ac_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz
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 ();
10856 static void ac_one_sub_t0_mul_env_add_t0 () //Aded by Gonetz
10858 ACMB (GR_COMBINE_FUNCTION_BLEND,
10859 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10860 GR_COMBINE_LOCAL_ITERATED,
10861 GR_COMBINE_OTHER_CONSTANT);
10867 static void ac_one_sub_t0_mul_primlod_add_prim () //Aded by Gonetz
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 ();
10878 static void ac_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz
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);
10885 SETSHADE_A_PRIM ();
10888 //(prim-t0)*env+t0 = prim*env + t0*(1-env)
10891 static void ac_prim_sub_env_mul_t0_add_env ()
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);
10902 static void ac_prim_sub_env_mul_t1_add_env ()
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);
10913 static void ac_prim_sub_env_mul_t0_add_one ()
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);
10920 SETSHADE_A_PRIMSUBENV ();
10925 static void ac_prim_sub_env_mul_shade_add_env ()
10927 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10928 GR_COMBINE_FACTOR_ONE,
10929 GR_COMBINE_LOCAL_CONSTANT,
10930 GR_COMBINE_OTHER_ITERATED);
10932 MULSHADE_A_PRIMSUBENV ();
10936 static void ac_prim_sub_env_mul_shade_add_env_mul_t1 ()
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);
10943 MULSHADE_A_PRIMSUBENV ();
10948 static void ac_prim_sub_shade_mul_t0_add_shade ()
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);
10959 static void ac_one_sub_shade_mul_t1_add_shade ()
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);
10969 static void ac_one_sub_env_mul_shade_add_env ()
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);
10979 static void ac_env_sub_prim_mul_t0_add_prim ()
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);
10986 SETSHADE_A_PRIM ();
10990 static void ac_one_sub_t1_add_t0_mul_env ()
10992 if (cmb.combine_ext)
10994 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10995 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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,
11002 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF);
11004 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11005 GR_COMBINE_FACTOR_ONE,
11006 GR_COMBINE_LOCAL_NONE,
11007 GR_COMBINE_OTHER_TEXTURE);
11011 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11012 GR_COMBINE_FACTOR_LOCAL,
11013 GR_COMBINE_LOCAL_CONSTANT,
11014 GR_COMBINE_OTHER_TEXTURE);
11017 cmb.tmu1_a_invert = FXTRUE;
11021 static void ac_env_sub_prim_mul_shade_add_prim () //Added by Gonetz
11023 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
11024 GR_COMBINE_FACTOR_ONE,
11025 GR_COMBINE_LOCAL_CONSTANT,
11026 GR_COMBINE_OTHER_ITERATED);
11028 MULSHADE_A_ENVSUBPRIM ();
11031 static void ac_env_sub_primshade_mul_t1_add_primshade ()
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);
11038 MULSHADE_A_PRIM ();
11042 static void ac_one_sub_prim_mul_t0_add_prim ()
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);
11049 SETSHADE_A_PRIM ();
11053 static void ac_one_sub_prim_mul_t0_add__prim_mul_env ()
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);
11060 SETSHADE_A_PRIM ();
11065 static void ac_shade_sub_t0_mul_primlod_add_prim ()
11067 if (cmb.combine_ext)
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,
11073 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (lod_frac&0xFF);
11075 ACMBEXT(GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_X,
11076 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11078 GR_CMBX_TEXTURE_ALPHA, 0);
11085 static void ac_shade_sub_env_mul_t0_add_prim ()
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);
11096 // ** A inter B using C **
11097 static void ac_t0_inter_t1_using_prima ()
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);
11107 static void ac_t1_inter_t0_using_prima ()
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);
11117 static void ac_t0_inter_t1_using_primlod ()
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);
11126 static void ac_t0_inter_t1_using_enva ()
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);
11136 static void ac_t1_inter_t0_using_enva ()
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);
11147 static void ac_t0_inter_t1_using_t0a ()
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 ();
11157 static void ac_t0_inter_t1_using_t1a ()
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 ();
11167 static void ac_t0_inter_t1_using_shadea ()
11169 if (cmb.combine_ext)
11171 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11172 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11178 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11179 GR_COMBINE_FACTOR_ONE,
11180 GR_COMBINE_LOCAL_NONE,
11181 GR_COMBINE_OTHER_TEXTURE);
11183 A_T0_INTER_T1_USING_SHADEA ();
11186 // ** (A inter B using C) * D **
11188 static void ac__t0_inter_t1_using_primlod__mul_prim ()
11190 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11191 GR_COMBINE_FACTOR_LOCAL,
11192 GR_COMBINE_LOCAL_CONSTANT,
11193 GR_COMBINE_OTHER_TEXTURE);
11195 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11198 static void ac__t1_mul_primlod_add_t0__mul_prim ()
11200 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11201 GR_COMBINE_FACTOR_LOCAL,
11202 GR_COMBINE_LOCAL_CONSTANT,
11203 GR_COMBINE_OTHER_TEXTURE);
11205 A_T1_MUL_PRIMLOD_ADD_T0 ();
11208 static void ac__t0_inter_t1_using_primlod__mul_env ()
11210 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11211 GR_COMBINE_FACTOR_LOCAL,
11212 GR_COMBINE_LOCAL_CONSTANT,
11213 GR_COMBINE_OTHER_TEXTURE);
11215 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11218 static void ac__t1_mul_primlod_add_t0__mul_env ()
11220 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11221 GR_COMBINE_FACTOR_LOCAL,
11222 GR_COMBINE_LOCAL_CONSTANT,
11223 GR_COMBINE_OTHER_TEXTURE);
11225 A_T1_MUL_PRIMLOD_ADD_T0 ();
11228 static void ac__t0_inter_t1_using_primlod__mul_shade ()
11230 if (settings.hacks & hack_Makers)
11232 //rolling rock issue - it has zero shade alpha and thus rejected by alpha compare
11233 ac_t0_inter_t1_using_primlod();
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);
11243 static void ac__t1_mul_primlod_add_t0__mul_shade ()
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 ();
11253 static void ac__t0_inter_t1_using_prima__mul_env ()
11255 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11256 GR_COMBINE_FACTOR_LOCAL,
11257 GR_COMBINE_LOCAL_CONSTANT,
11258 GR_COMBINE_OTHER_TEXTURE);
11260 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11261 A_T0_INTER_T1_USING_FACTOR (factor);
11265 static void ac__t1_inter_t0_using_t0a__mul_prim ()
11267 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11268 GR_COMBINE_FACTOR_LOCAL,
11269 GR_COMBINE_LOCAL_CONSTANT,
11270 GR_COMBINE_OTHER_TEXTURE);
11272 A_T1_INTER_T0_USING_T0A ();
11275 static void ac__t1_inter_t0_using_primlod__mul_prim ()
11277 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11278 GR_COMBINE_FACTOR_LOCAL,
11279 GR_COMBINE_LOCAL_CONSTANT,
11280 GR_COMBINE_OTHER_TEXTURE);
11282 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11285 static void ac__t1_inter_t0_using_prima__mul_env ()
11287 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11288 GR_COMBINE_FACTOR_LOCAL,
11289 GR_COMBINE_LOCAL_CONSTANT,
11290 GR_COMBINE_OTHER_TEXTURE);
11292 wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11293 A_T1_INTER_T0_USING_FACTOR (factor);
11297 static void ac__t0_inter_t1_using_prima__mul_shade ()
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);
11307 static void ac__t1_inter_t0_using_prima__mul_shade ()
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);
11317 static void ac__t0_inter_t1_using_enva__mul_prim ()
11319 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11320 GR_COMBINE_FACTOR_LOCAL,
11321 GR_COMBINE_LOCAL_CONSTANT,
11322 GR_COMBINE_OTHER_TEXTURE);
11324 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11325 A_T0_INTER_T1_USING_FACTOR (factor);
11328 static void ac__env_sub_one_mul_t1_add_t0__mul_prim ()
11330 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11331 GR_COMBINE_FACTOR_LOCAL,
11332 GR_COMBINE_LOCAL_CONSTANT,
11333 GR_COMBINE_OTHER_TEXTURE);
11335 if (cmb.combine_ext)
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,
11341 T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11342 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11346 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
11351 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11352 A_T0_INTER_T1_USING_FACTOR (factor);
11356 static void ac__t0_inter_t1_using_enva__mul_primlod ()
11358 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11359 GR_COMBINE_FACTOR_LOCAL,
11360 GR_COMBINE_LOCAL_CONSTANT,
11361 GR_COMBINE_OTHER_TEXTURE);
11363 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11364 A_T0_INTER_T1_USING_FACTOR (factor);
11367 static void ac__t1_mul_enva_add_t0__sub_prim_mul_shade ()
11369 if (cmb.combine_ext)
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,
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 ();
11385 A_T1_MUL_ENVA_ADD_T0 ();
11389 static void ac__t0_inter_t1_using_t0a__mul_prim ()
11391 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11392 GR_COMBINE_FACTOR_LOCAL,
11393 GR_COMBINE_LOCAL_CONSTANT,
11394 GR_COMBINE_OTHER_TEXTURE);
11396 A_T0_INTER_T1_USING_T0A ();
11400 static void ac__t0_inter_t1_using_t1a__mul_prim ()
11402 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11403 GR_COMBINE_FACTOR_LOCAL,
11404 GR_COMBINE_LOCAL_CONSTANT,
11405 GR_COMBINE_OTHER_TEXTURE);
11407 A_T0_INTER_T1_USING_T1A ();
11410 static void ac__t0_inter_t1_using_t1a__mul_shade ()
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 ();
11420 static void ac__t0_inter_t1_using_shadea__mul_prim ()
11422 if (cmb.combine_ext)
11424 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11425 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11426 GR_CMBX_CONSTANT_ALPHA, 0,
11428 A_T0_INTER_T1_USING_SHADEA ();
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);
11442 static void ac__t0_inter_t1_using_shadea__mul_env ()
11444 if (cmb.combine_ext)
11446 ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11447 GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11448 GR_CMBX_CONSTANT_ALPHA, 0,
11450 A_T0_INTER_T1_USING_SHADEA ();
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);
11463 static void ac__t0_inter_t1_using_primlod__sub_env_mul_shade_add_shade ()
11465 if (cmb.combine_ext)
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);
11472 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11475 ac__t0_inter_t1_using_primlod__mul_shade ();
11479 static void ac__t0_inter_t1_using_enva__mul_shade ()
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);
11489 static void ac__t0_inter_t1_using_primlod__mul_prim_add_env ()
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);
11496 SETSHADE_A_PRIM ();
11497 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11501 static void ac__t0_inter_t1_using_primlod__mul_shade_add_prim ()
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);
11508 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11512 static void ac__t0_inter_t1_using_primlod__mul_env_add__t0_inter_t1_using_primlod ()
11514 if (cmb.combine_ext)
11516 ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
11517 GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11518 GR_CMBX_CONSTANT_ALPHA, 0,
11524 ACMB (GR_COMBINE_FUNCTION_BLEND,
11525 GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11526 GR_COMBINE_LOCAL_CONSTANT,
11527 GR_COMBINE_OTHER_ITERATED);
11531 A_T0_INTER_T1_USING_FACTOR (lod_frac);
11534 static void ac__t1_sub_one_mul_enva_add_t0__mul_prim ()
11536 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11537 GR_COMBINE_FACTOR_LOCAL,
11538 GR_COMBINE_LOCAL_CONSTANT,
11539 GR_COMBINE_OTHER_TEXTURE);
11541 if (cmb.combine_ext)
11543 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11544 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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) ;
11553 cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;
11557 // (t1-1)*env+t0, (cmb-0)*prim+0
11560 MOD_1 (TMOD_TEX_SCALE_FAC_ADD_FAC);
11561 MOD_1_FAC (rdp.env_color & 0xFF);
11565 static void ac__one_inter_t0_using_prim__mul_env ()
11567 if (cmb.combine_ext)
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,
11573 cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
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,
11584 ac_t0_mul_prim_add_env ();
11588 static void ac__t1_sub_one_mul_enva_add_t0__mul_shade ()
11590 ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11591 GR_COMBINE_FACTOR_LOCAL,
11592 GR_COMBINE_LOCAL_ITERATED,
11593 GR_COMBINE_OTHER_TEXTURE);
11595 if (cmb.combine_ext)
11597 T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11598 GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
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;
11612 wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11613 A_T0_INTER_T1_USING_FACTOR (factor);
11617 static void ac_zero_sub_prim_mul_t0_add_prim ()
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);
11628 static void ac_one_sub_t0_mul_primshade ()
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 ();
11638 //****************************************************************
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 //****************************************************************
11649 typedef void (*cmb_func)();
11655 static COMBINER color_cmb_list[] = {
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
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},
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},
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},
11718 // (env-t0)*prim+t0
11719 {0x23152315, cc_t0_inter_env_using_prim},
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
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
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
11759 {0x23f523f5, cc_prim_mul_env_add_t0},
11760 // Taken out bomb, zelda
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},
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},
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},
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
11817 {0x25162516, cc_one_sub_env_mul_t0_add_env},
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
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},
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},
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},
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},
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},
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},
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},
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},
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},
12022 // (t1-t0)*lodf+t0, (one-cmb)*prim+cmb
12023 {0x2d120306, cc_one_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},
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},
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},
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},
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},
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},
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
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
12241 {0x2f712f71, cc_t0},
12244 {0x2ff52ff5, cc_t0_add_env_mul_k5},
12247 {0x2fff0000, cc_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},
12256 {0x3f563f56, cc_t0},
12257 // RARE logo, blast corps. Added by Gonetz
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
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},
12291 // (0-0)*0+t0, (t0-k4)*k5+t0
12292 {0x3fff2f71, cc_t0_sub_k4_mul_k5_add_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},
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
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
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
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},
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
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},
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
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
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},
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
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
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
12664 {0x65f165f1, cc_t0_mul_env_add_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
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},
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},
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},
12786 // (t0-env)*k5+prim
12787 {0x6f516f51, cc_t0_sub_env_mul_k5_add_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},
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},
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
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
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
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},
12978 // (t0-shade)*shade_a+shade, (cmb-0)*shade+0
12979 {0x8b41e4f0, cc__shade_inter_t0_using_shadea__mul_shade},
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
13009 {0x9f5f9f5f, cc_shade},
13010 // Spotlight, smash bros
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
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},
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},
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},
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
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
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
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
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
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},
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},
13292 // (t0-env)*prim_a+env, (shade-0)*cmb+0
13293 {0xaa51e0f4, cc__env_inter_t0_using_prima__mul_shade},
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
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},
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},
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
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
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},
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
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},
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
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
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},
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]
13525 {0xe1f6e1f6, cc_t0},
13526 // Mermaid attack, Mystical Ninja
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},
13569 // (t0-0)*t1+0, (shade-0)*cmb+0
13570 {0xe2f1e0f4, cc__t0_mul_t1__mul_shade},
13571 // Sky background, xg2
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
13591 {0xe2f3e2f3, cc_t1_mul_prim},
13592 //terrain, Beetle Adventure Racing. Added by Gonetz
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
13600 {0xe316e316, cc_one_sub_t0_mul_prim},
13602 //(shade-env)*prim+0
13603 {0xe354e354, cc_shade_sub_env_mul_prim},
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
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
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},
13669 // (shade-0)*prim+0, (cmb-0)*shade+0 ** INC **
13670 {0xe3f4e4f0, cc_prim_mul_shade},
13672 // (env-0)*prim+0, (0-0)*0+cmb
13673 {0xe3f5e3f5, cc_prim_mul_env},
13674 // Option selection, zelda
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
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},
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},
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},
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},
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
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},
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
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},
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},
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},
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
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},
13943 // (noise-0)*shade+0
13944 {0xe4f7e4f7, cc_shade},
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},
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
13986 {0xe5f3e5f3, cc_prim_mul_env},
13988 // (shade-0)*env+0, (1-cmb)*env_a+cmb
13989 {0xe5f40c06, cc_env_mul_shade},
13991 //z (shade-k5)*env+cmb_a
13992 {0xe5f4e5f4, cc_env_mul_shade},
13993 // bomberman 64 [Ogy]
13995 {0xe5f6e5f6, cc_env},
13996 // Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
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
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
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.
14025 {0xe8f3e8f3, cc_t0a_mul_prim},
14026 // Top Gear Hyper-Bike
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},
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]
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
14064 {0xeaffeaff, cc_zero},
14065 // background, killer instinct gold
14066 // (t0-prim)*shade_a+0
14067 {0xeb31eb31, cc_t0_sub_prim_mul_shadea},
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
14109 {0xecf1ecf1, cc_t0_mul_enva},
14110 // car, Top Gear Rally. Added by Gonetz
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
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
14166 {0xffffffff, cc_zero},
14170 static COMBINER alpha_cmb_list[] = {
14172 //Tony Hawk's Pro Skater. Added by Gonetz
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},
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},
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
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},
14256 {0x027b027b, ac_t0_mul_prim_add_t0},
14257 // THPS3. Added by Gonetz
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
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},
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
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
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
14332 {0x02f902f9, ac_t0_mul_prim},
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
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},
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},
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},
14371 {0x034a034a, ac_t0_inter_t1_using_enva},
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
14383 {0x034b034b, ac_prim_sub_t0_mul_env_add_t0},
14384 // window, Rayman2. Added by Gonetz
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
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},
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]
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
14563 {0x03fe03fe, ac_t0},
14564 // player, super bowling
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
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},
14589 // (0-0)*0+t0, (0-0)*0+1
14590 {0x03ff0dff, ac_t0},
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},
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
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
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
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
14674 {0x05510551, ac_t1_inter_t0_using_enva},
14675 // Shiek's disappearance, zelda
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
14737 {0x06790679, ac_t0_add_prim},
14738 // Water, pokemon stadium 2
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
14746 {0x067d067d, ac_t0_mul_env_add_prim},
14747 // Mario Tennis. Added by Gonetz
14749 {0x067e067e, ac_t0_add_prim},
14750 // sky, PGA European Tour
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
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},
14797 // (0-0)*0+0, (0-t1)*0+prim
14798 {0x07d707d7, ac_prim},
14801 {0x07fe07fe, ac_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
14810 {0x07ff07ff, ac_prim},
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},
14851 //(t0-shade)*prim+shade
14852 {0x08e108e1, ac_t0_mul_prim_add_shade_mul_one_minus_prim},
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
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
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
14924 {0x0a7b0a7b, ac_t0_mul_prim_add_env},
14925 // menu, doubut no mori
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
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},
14966 // (t0-0)*shade+env
14967 {0x0b390b39, ac_t0_mul_shade_add_env},
14968 // destroying stuff, golden eye
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},
14975 // (t0-0)*primlod+env
14976 {0x0bb90bb9, ac_t0_mul_primlod_add_env},
14977 // International Track and Field 2000. Added by Gonetz
14979 {0x0bf90bf9, ac_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
14991 {0x0c6b0c6b, ac_prim_sub_env_mul_t0_add_one},
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
15003 {0x0cf70cf7, ac_one_sub_prim},
15004 // Kirby64, level 6, [Raziel64]
15006 {0x0cff0cff, ac_one},
15009 {0x0d770d77, ac_one},
15010 // Deku shield in shop, zelda
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
15018 {0x0df90df9, ac_one},
15019 // kirby 64. Added by Gonetz
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},
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
15051 {0x0dff0dff, ac_one},
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},
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
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
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
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
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
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
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},
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
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
15162 {0x0e7d0e7d, ac_t0_mul_env},
15163 // castlevania 2, intro. Added by Gonetz
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
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]
15216 {0x0ebb0ebb, ac_t1_mul_prim},
15217 // tire trace, beetle adventure racing. Added by Gonetz
15219 {0x0ebc0ebc, ac_t1_mul_shade},
15220 // smoke, Starshot. Added by Gonetz
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
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},
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},
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
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
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},
15305 // (shade-0)*prim+0, (cmb-0)*shade+0 ** INC **
15306 {0x0efc0f38, ac_prim_mul_shade},
15307 // Baby mario's hat shadow, mario golf
15309 {0x0efd0efd, ac_prim_mul_env},
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
15318 {0x0f0e0f0e, ac_one_sub_t0_mul_shade},
15319 // Rock smash, pokemon stadium 2
15321 {0x0f0f0ee8, ac_one_sub_t0_mul_shade},
15322 //waterfall, Paper Mario
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},
15335 // (t0-0)*shade+0, (1-0)*t0+cmb
15336 {0x0f39007e, ac_t0_mul_shade},
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},
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]
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
15387 {0x0f3d0f3d, ac_env_mul_shade},
15388 // zelda 2 [Ogy]. Added by Gonetz
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},
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},
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},
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},
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
15431 {0x0f7a0f7a, ac_t1_mul_env},
15432 // Bomberman64-2 intro. Added by Gonetz
15434 {0x0f7b0f7b, ac_prim_mul_env},
15436 //z (shade-0)*env+0
15437 {0x0f7c0f7c, ac_env_mul_shade},
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
15446 {0x0f7e0f7e, ac_env},
15447 // gun fire, Beast_Wars_Transmetal [Raziel64]
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
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
15482 {0x0fe70fe7, ac_zero},
15483 // flame, PokemonStadium1 [Raziel64]
15485 {0x0ff90ff9, ac_zero},
15487 // (0-0)*0+0, (0-0)*0+TEXEL1
15488 {0x0fff05ff, ac_t0},
15489 // Screen clear, banjo kazooie
15491 {0x0fff0fff, ac_zero},
15495 // CountCombine - count the # of entries in the combine lists
15496 void CountCombine ()
15498 int size = sizeof(color_cmb_list) / sizeof(COMBINER);
15499 int i=0, index=0, a, b;
15501 a = color_cmb_list[index].key >> 24;
15503 cc_lookup[i] = index;
15505 while (index < size)
15507 b = color_cmb_list[index].key >> 24;
15511 } while (index < size);
15512 for (; i<257; i++) cc_lookup[i] = index;
15514 size = sizeof(alpha_cmb_list) / sizeof(COMBINER);
15517 a = (alpha_cmb_list[index].key >> 20) & 0xFF;
15519 ac_lookup[i] = index;
15521 while (index < size)
15523 b = (alpha_cmb_list[index].key >> 20) & 0xFF;
15527 } while (index < size);
15528 for (; i<257; i++) ac_lookup[i] = index;
15530 //color_cmb_list_count = sizeof(color_cmb_list) >> 3; // #bytes/4/2
15531 //alpha_cmb_list_count = sizeof(alpha_cmb_list) >> 3;
15534 //****************************************************************
15536 //****************************************************************
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)
15555 rdp.noise = RDP::noise_none;
15557 wxUint32 found = TRUE;
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;
15563 rdp.uncombined = 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;
15570 cmb.dc0_detailmax = cmb.dc1_detailmax = 0;
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;
15576 cmb.ccolor = cmb.tex_ccolor = 0;
15577 if (cmb.cmb_ext_use || cmb.tex_cmb_ext_use)
15579 //have to draw something to allow use of standard combine functions
15583 memset(&v,0,sizeof(v));
15586 cmb.cmb_ext_use = 0;
15587 cmb.tex_cmb_ext_use = 0;
15590 wxUint32 cmb_mode_c = (rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF);
15591 wxUint32 cmb_mode_a = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF);
15593 cmb.abf1 = GR_BLEND_SRC_ALPHA;
15594 cmb.abf2 = GR_BLEND_ONE_MINUS_SRC_ALPHA;
15597 // Fast, ordered search
15598 int current=0x7FFFFFFF, last;
15599 wxUint32 actual_combine, current_combine, color_combine, alpha_combine;
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);
15607 left = cc_lookup[actual_combine>>24];
15608 right = cc_lookup[(actual_combine>>24)+1];
15613 current = left + ((right-left) >> 1);
15614 if (current == last)
15615 break; // can't be found!
15617 current_combine = color_cmb_list[current].key;
15618 if (current_combine < actual_combine)
15620 else if (current_combine > actual_combine)
15623 break; // found it!
15626 // Check if we didn't find it
15627 if (actual_combine != current_combine)
15629 rdp.uncombined |= 1;
15631 if (settings.log_unk)
15633 sprintf (out_buf, "COLOR combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
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]);
15643 // use t0 as default
15647 color_cmb_list[current].func();
15649 LRDP(" | |- Color done\n");
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);
15660 left = ac_lookup[(actual_combine>>20)&0xFF];
15661 right = ac_lookup[((actual_combine>>20)&0xFF)+1];
15666 current = left + ((right-left) >> 1);
15667 if (current == last)
15668 break; // can't be found!
15670 current_combine = alpha_cmb_list[current].key;
15671 if (current_combine < actual_combine)
15673 else if (current_combine > actual_combine)
15676 break; // found it!
15679 // Check if we didn't find it
15680 if (actual_combine != current_combine || !found)
15682 if (actual_combine != current_combine)
15684 rdp.uncombined |= 2;
15686 if (settings.log_unk)
15688 sprintf (out_buf, "ALPHA combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
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]);
15696 if (settings.unk_as_red)
15702 // use full alpha as default
15708 alpha_cmb_list[current].func();
15711 if (color_combine == 0x69351fff) //text, PD, need to change texture alpha
15715 else if ((color_combine == 0x3fff1fff) && (alpha_combine == 0x03ff03ff) && (rdp.last_tile > rdp.cur_tile))//Dr. Mario
15720 else if (color_combine == 0x613522f0 && (settings.hacks&hack_PMario)) //Paper Mario fortune teller spheres
15725 LRDP(" | |- Alpha done\n");
15726 #endif // FASTSEARCH
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))
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]))
15750 if (aTBuff[0] && (settings.frame_buffer&fb_read_alpha))
15752 if ((settings.hacks&hack_PMario) && aTBuff[0]->width == rdp.ci_width)
15756 grChromakeyValue(0);
15757 grChromakeyMode(GR_CHROMAKEY_ENABLE);
15761 grChromakeyMode(GR_CHROMAKEY_DISABLE);
15763 if (aTBuff[0] && aTBuff[0]->info.format == GR_TEXFMT_ALPHA_INTENSITY_88)
15765 if (cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_COLOR)
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;
15775 cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;
15778 if (aTBuff[1] && aTBuff[1]->info.format == GR_TEXFMT_ALPHA_INTENSITY_88)
15780 if (cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_COLOR)
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;
15790 cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;
15794 grChromakeyMode(GR_CHROMAKEY_DISABLE);
15796 cmb.shade_mod_hash = (rdp.cmb_flags + rdp.cmb_flags_2) * (rdp.prim_color + rdp.env_color + rdp.K5);
15798 LRDP(" | + Combine end\n");
15801 void CombineBlender ()
15803 wxUint32 blendmode = rdp.othermode_l >> 16;
15804 // Check force-blending
15805 if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))
15814 // Mario kart player select
15815 // clr_in * 0 + clr_in * 1
15816 // - or just clr_in, no matter what alpha
15820 //Sin and Punishment
15823 // clr_in * a + clr_in * (1-a)
15828 A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
15834 A_BLEND (GR_BLEND_ONE, GR_BLEND_ONE);
15837 // LOT in Zelda: MM
15839 case 0x0f5a: //clr_in * 0 + clr_mem * 1
15840 A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15843 case 0x5f50: //clr_mem * 0 + clr_mem * (1-a)
15844 A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15848 case 0xc410: // Perfect Dark Mauler
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);
15855 float percent = (rdp.fog_color & 0xFF) / 255.0f;
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);
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);
15869 case 0xf550: //clr_fog * a_fog + clr_mem * (1-a)
15870 A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15872 wxUint32 prim = rdp.prim_color;
15873 rdp.prim_color = rdp.fog_color;
15876 rdp.prim_color = prim;
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)
15885 wxUint32 prim = rdp.prim_color;
15886 rdp.prim_color = rdp.fog_color;
15888 rdp.prim_color = prim;
15892 case 0xc912: //40 winks, clr_in * a_fog + clr_mem * 1
15894 wxUint32 prim = rdp.prim_color;
15895 rdp.prim_color = rdp.fog_color;
15897 rdp.prim_color = prim;
15899 A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE);
15903 A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15907 else if (blendmode == 0xc411) // Super Smash Bros, faked fog for flashing characters
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);
15914 float percent = (rdp.fog_color & 0xFF) / 255.0f;
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);
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);
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);
15932 A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
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))
15939 if ((settings.hacks&hack_PMario) && (blendmode == 0x5055))
15941 A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15943 else if (blendmode == 0x4055) // Mario Golf
15945 A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15949 A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
15955 if (settings.hacks&hack_ISS64)
15957 if (rdp.othermode_l == 0xff5a6379)
15959 A_BLEND (GR_BLEND_ZERO, GR_BLEND_SRC_ALPHA);
15961 else if (rdp.othermode_l == 0x00504dd9) //players shadows. CVG_DST_WRAP
15963 A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15966 else if (settings.hacks&hack_TGR)
15968 if (rdp.othermode_l == 0x0f0a0235)
15970 A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15976 void InitCombine ()
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)
15997 cmb.combine_ext = TRUE;
15998 LOG ("initialized.");
16002 cmb.combine_ext = FALSE;
16006 cmb.dc0_lodbias = cmb.dc1_lodbias = 31;
16007 cmb.dc0_detailscale = cmb.dc1_detailscale = 7;
16008 cmb.lodbias0 = cmb.lodbias1 = 1.0f;
16012 void ColorCombinerToExtension ()
16014 wxUint32 ext_local, ext_local_a, ext_other, ext_other_a;
16017 case GR_COMBINE_LOCAL_ITERATED:
16018 ext_local = GR_CMBX_ITRGB;
16019 ext_local_a = GR_CMBX_ITALPHA;
16021 case GR_COMBINE_LOCAL_CONSTANT:
16022 ext_local = GR_CMBX_CONSTANT_COLOR;
16023 ext_local_a = GR_CMBX_CONSTANT_ALPHA;
16026 ext_local = GR_CMBX_ZERO;
16027 ext_local_a = GR_CMBX_ZERO;
16031 case GR_COMBINE_OTHER_ITERATED:
16032 ext_other = GR_CMBX_ITRGB;
16033 ext_other_a = GR_CMBX_ITALPHA;
16035 case GR_COMBINE_OTHER_TEXTURE:
16036 ext_other = GR_CMBX_TEXTURE_RGB;
16037 ext_other_a = GR_CMBX_TEXTURE_ALPHA;
16039 case GR_COMBINE_OTHER_CONSTANT:
16040 ext_other = GR_CMBX_CONSTANT_COLOR;
16041 ext_other_a = GR_CMBX_CONSTANT_ALPHA;
16044 ext_other = GR_CMBX_ZERO;
16045 ext_other_a = GR_CMBX_ZERO;
16049 case GR_COMBINE_FACTOR_ZERO:
16050 cmb.c_ext_c = GR_CMBX_ZERO;
16051 cmb.c_ext_c_invert = 0;
16053 case GR_COMBINE_FACTOR_ONE:
16054 cmb.c_ext_c = GR_CMBX_ZERO;
16055 cmb.c_ext_c_invert = 1;
16057 case GR_COMBINE_FACTOR_LOCAL:
16058 cmb.c_ext_c = ext_local;
16059 cmb.c_ext_c_invert = 0;
16061 case GR_COMBINE_FACTOR_LOCAL_ALPHA:
16062 cmb.c_ext_c = ext_local_a;
16063 cmb.c_ext_c_invert = 0;
16065 case GR_COMBINE_FACTOR_OTHER_ALPHA:
16066 cmb.c_ext_c = ext_other_a;
16067 cmb.c_ext_c_invert = 0;
16069 case GR_COMBINE_FACTOR_TEXTURE_RGB:
16070 cmb.c_ext_c = GR_CMBX_TEXTURE_RGB;
16071 cmb.c_ext_c_invert = 0;
16073 case GR_COMBINE_FACTOR_TEXTURE_ALPHA:
16074 cmb.c_ext_c = GR_CMBX_TEXTURE_ALPHA;
16075 cmb.c_ext_c_invert = 0;
16077 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
16078 cmb.c_ext_c = ext_local;
16079 cmb.c_ext_c_invert = 1;
16081 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
16082 cmb.c_ext_c = ext_local_a;
16083 cmb.c_ext_c_invert = 1;
16085 case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16086 cmb.c_ext_c = ext_other_a;
16087 cmb.c_ext_c_invert = 1;
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;
16094 cmb.c_ext_c = GR_CMBX_ZERO;
16095 cmb.c_ext_c_invert = 0;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
16186 case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
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;
16198 void AlphaCombinerToExtension ()
16200 wxUint32 ext_local, ext_other;
16203 case GR_COMBINE_LOCAL_ITERATED:
16204 ext_local = GR_CMBX_ITALPHA;
16206 case GR_COMBINE_LOCAL_CONSTANT:
16207 ext_local = GR_CMBX_CONSTANT_ALPHA;
16210 ext_local = GR_CMBX_ZERO;
16214 case GR_COMBINE_OTHER_ITERATED:
16215 ext_other = GR_CMBX_ITALPHA;
16217 case GR_COMBINE_OTHER_TEXTURE:
16218 ext_other = GR_CMBX_TEXTURE_ALPHA;
16220 case GR_COMBINE_OTHER_CONSTANT:
16221 ext_other = GR_CMBX_CONSTANT_ALPHA;
16224 ext_other = GR_CMBX_ZERO;
16228 case GR_COMBINE_FACTOR_ZERO:
16229 cmb.a_ext_c = GR_CMBX_ZERO;
16230 cmb.a_ext_c_invert = 0;
16232 case GR_COMBINE_FACTOR_ONE:
16233 cmb.a_ext_c = GR_CMBX_ZERO;
16234 cmb.a_ext_c_invert = 1;
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;
16241 case GR_COMBINE_FACTOR_OTHER_ALPHA:
16242 cmb.a_ext_c = ext_other;
16243 cmb.a_ext_c_invert = 0;
16245 case GR_COMBINE_FACTOR_TEXTURE_ALPHA:
16246 cmb.a_ext_c = GR_CMBX_TEXTURE_ALPHA;
16247 cmb.a_ext_c_invert = 0;
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;
16254 case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16255 cmb.a_ext_c = ext_other;
16256 cmb.a_ext_c_invert = 1;
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;
16263 cmb.a_ext_c = GR_CMBX_ZERO;
16264 cmb.a_ext_c_invert = 0;
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;
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;
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;
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;
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;
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;
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;
16336 void TexColorCombinerToExtension (GrChipID_t tmu)
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;
16342 if (tmu == GR_TMU0)
16344 tmu_func = cmb.tmu0_func;
16345 tmu_fac = cmb.tmu0_fac;
16349 tmu_func = cmb.tmu1_func;
16350 tmu_fac = cmb.tmu1_fac;
16355 case GR_COMBINE_FACTOR_ZERO:
16356 tc_ext_c = GR_CMBX_ZERO;
16357 tc_ext_c_invert = 0;
16359 case GR_COMBINE_FACTOR_LOCAL:
16360 tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;
16361 tc_ext_c_invert = 0;
16363 case GR_COMBINE_FACTOR_LOCAL_ALPHA:
16364 tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16365 tc_ext_c_invert = 0;
16367 case GR_COMBINE_FACTOR_OTHER_ALPHA:
16368 tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16369 tc_ext_c_invert = 0;
16371 case GR_COMBINE_FACTOR_DETAIL_FACTOR:
16372 tc_ext_c = GR_CMBX_DETAIL_FACTOR;
16373 tc_ext_c_invert = 0;
16375 case GR_COMBINE_FACTOR_ONE:
16376 tc_ext_c = GR_CMBX_ZERO;
16377 tc_ext_c_invert = 1;
16379 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
16380 tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;
16381 tc_ext_c_invert = 1;
16383 case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
16384 tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16385 tc_ext_c_invert = 1;
16387 case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16388 tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16389 tc_ext_c_invert = 1;
16391 case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:
16392 tc_ext_c = GR_CMBX_DETAIL_FACTOR;
16393 tc_ext_c_invert = 1;
16396 tc_ext_c = GR_CMBX_ZERO;
16397 tc_ext_c_invert = 0;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
16509 if (tmu == GR_TMU0)
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;
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;
16533 void TexAlphaCombinerToExtension (GrChipID_t tmu)
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;
16539 if (tmu == GR_TMU0)
16541 tmu_a_func = cmb.tmu0_a_func;
16542 tmu_a_fac = cmb.tmu0_a_fac;
16546 tmu_a_func = cmb.tmu1_a_func;
16547 tmu_a_fac = cmb.tmu1_a_fac;
16552 case GR_COMBINE_FACTOR_ZERO:
16553 ta_ext_c = GR_CMBX_ZERO;
16554 ta_ext_c_invert = 0;
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;
16561 case GR_COMBINE_FACTOR_OTHER_ALPHA:
16562 ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16563 ta_ext_c_invert = 0;
16565 case GR_COMBINE_FACTOR_DETAIL_FACTOR:
16566 ta_ext_c = GR_CMBX_DETAIL_FACTOR;
16567 ta_ext_c_invert = 0;
16569 case GR_COMBINE_FACTOR_ONE:
16570 ta_ext_c = GR_CMBX_ZERO;
16571 ta_ext_c_invert = 1;
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;
16578 case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16579 ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16580 ta_ext_c_invert = 1;
16582 case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:
16583 ta_ext_c = GR_CMBX_DETAIL_FACTOR;
16584 ta_ext_c_invert = 1;
16587 ta_ext_c = GR_CMBX_ZERO;
16588 ta_ext_c_invert = 0;
16592 switch (tmu_a_func)
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;
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;
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;
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;
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;
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;
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;
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;
16670 if (tmu == GR_TMU0)
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;
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;