Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libmupen64plus/mupen64plus-video-glide64mk2/src/Glide64/Combine.cpp
2 views
1
/*
2
* Glide64 - Glide video plugin for Nintendo 64 emulators.
3
* Copyright (c) 2002 Dave2001
4
* Copyright (c) 2003-2009 Sergey 'Gonetz' Lipski
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
*/
20
21
//****************************************************************
22
//
23
// Glide64 - Glide Plugin for Nintendo 64 emulators
24
// Project started on December 29th, 2001
25
//
26
// Authors:
27
// Dave2001, original author, founded the project in 2001, left it in 2002
28
// Gugaman, joined the project in 2002, left it in 2002
29
// Sergey 'Gonetz' Lipski, joined the project in 2002, main author since fall of 2002
30
// Hiroshi 'KoolSmoky' Morii, joined the project in 2007
31
//
32
//****************************************************************
33
//
34
// To modify Glide64:
35
// * Write your name and (optional)email, commented by your work, so I know who did it, and so that you can find which parts you modified when it comes time to send it to me.
36
// * Do NOT send me the whole project or file that you modified. Take out your modified code sections, and tell me where to put them. If people sent the whole thing, I would have many different versions, but no idea how to combine them all.
37
//
38
//****************************************************************
39
40
#include "Gfx_1.3.h"
41
#include "Util.h"
42
#include "Combine.h"
43
44
#define FASTSEARCH // Enable fast combine mode searching algorithm
45
46
float percent_org, percent, r, g, b;
47
wxUint32 lod_frac;
48
49
wxUint32 cc_lookup[257];
50
wxUint32 ac_lookup[257];
51
COMBINE cmb;
52
53
//****************************************************************
54
// Macros
55
//****************************************************************
56
57
#define MOD_0(mode) cmb.mod_0 = mode
58
#define MOD_0_COL(color) cmb.modcolor_0 = color
59
#define MOD_0_COL1(color) cmb.modcolor1_0 = color
60
#define MOD_0_COL2(color) cmb.modcolor2_0 = color
61
#define MOD_0_FAC(factor) cmb.modfactor_0 = factor
62
#define MOD_1(mode) cmb.mod_1 = mode
63
#define MOD_1_COL(color) cmb.modcolor_1 = color
64
#define MOD_1_COL1(color) cmb.modcolor1_1 = color
65
#define MOD_1_COL2(color) cmb.modcolor2_1 = color
66
#define MOD_1_FAC(factor) cmb.modfactor_1 = factor
67
68
#define A_BLEND(f1,f2) cmb.abf1=f1,cmb.abf2=f2
69
70
// To make a color or alpha combine
71
#define CCMB(fnc,fac,loc,oth) \
72
cmb.c_fnc = fnc, \
73
cmb.c_fac = fac, \
74
cmb.c_loc = loc, \
75
cmb.c_oth = oth
76
#define ACMB(fnc,fac,loc,oth) \
77
cmb.a_fnc = fnc, \
78
cmb.a_fac = fac, \
79
cmb.a_loc = loc, \
80
cmb.a_oth = oth
81
#define CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
82
cmb.c_ext_a = a, \
83
cmb.c_ext_a_mode = a_mode, \
84
cmb.c_ext_b = b, \
85
cmb.c_ext_b_mode = b_mode, \
86
cmb.c_ext_c = c, \
87
cmb.c_ext_c_invert = c_invert, \
88
cmb.c_ext_d= d, \
89
cmb.c_ext_d_invert = d_invert, \
90
cmb.cmb_ext_use |= COMBINE_EXT_COLOR
91
#define ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
92
cmb.a_ext_a = a, \
93
cmb.a_ext_a_mode = a_mode, \
94
cmb.a_ext_b = b, \
95
cmb.a_ext_b_mode = b_mode, \
96
cmb.a_ext_c = c, \
97
cmb.a_ext_c_invert = c_invert, \
98
cmb.a_ext_d= d, \
99
cmb.a_ext_d_invert = d_invert, \
100
cmb.cmb_ext_use |= COMBINE_EXT_ALPHA
101
#define T0CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
102
cmb.t0c_ext_a = a, \
103
cmb.t0c_ext_a_mode = a_mode, \
104
cmb.t0c_ext_b = b, \
105
cmb.t0c_ext_b_mode = b_mode, \
106
cmb.t0c_ext_c = c, \
107
cmb.t0c_ext_c_invert = c_invert, \
108
cmb.t0c_ext_d= d, \
109
cmb.t0c_ext_d_invert = d_invert, \
110
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR
111
#define T0ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
112
cmb.t0a_ext_a = a, \
113
cmb.t0a_ext_a_mode = a_mode, \
114
cmb.t0a_ext_b = b, \
115
cmb.t0a_ext_b_mode = b_mode, \
116
cmb.t0a_ext_c = c, \
117
cmb.t0a_ext_c_invert = c_invert, \
118
cmb.t0a_ext_d= d, \
119
cmb.t0a_ext_d_invert = d_invert, \
120
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA
121
#define T1CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
122
cmb.t1c_ext_a = a, \
123
cmb.t1c_ext_a_mode = a_mode, \
124
cmb.t1c_ext_b = b, \
125
cmb.t1c_ext_b_mode = b_mode, \
126
cmb.t1c_ext_c = c, \
127
cmb.t1c_ext_c_invert = c_invert, \
128
cmb.t1c_ext_d= d, \
129
cmb.t1c_ext_d_invert = d_invert, \
130
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR
131
#define T1ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
132
cmb.t1a_ext_a = a, \
133
cmb.t1a_ext_a_mode = a_mode, \
134
cmb.t1a_ext_b = b, \
135
cmb.t1a_ext_b_mode = b_mode, \
136
cmb.t1a_ext_c = c, \
137
cmb.t1a_ext_c_invert = c_invert, \
138
cmb.t1a_ext_d= d, \
139
cmb.t1a_ext_d_invert = d_invert, \
140
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA
141
142
// To use textures
143
#define USE_T0() \
144
rdp.best_tex = 0; \
145
cmb.tex |= 1, \
146
cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL
147
#define USE_T1() \
148
if (voodoo.num_tmu > 1) { \
149
rdp.best_tex = 1; \
150
cmb.tex |= 2, \
151
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
152
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
153
cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE; \
154
} \
155
else { \
156
USE_T0(); \
157
}
158
#define T0_ADD_T1() \
159
rdp.best_tex = 0; \
160
cmb.tex |= 3, \
161
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
162
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
163
cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE
164
#define T0_MUL_T1() \
165
rdp.best_tex = 0; \
166
cmb.tex |= 3, \
167
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
168
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
169
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
170
#define T0_MUL_T1_ADD_T0() \
171
rdp.best_tex = 0; \
172
cmb.tex |= 3, \
173
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
174
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
175
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
176
#define T0A_MUL_T1() \
177
rdp.best_tex = 1; \
178
cmb.tex |= 3, \
179
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
180
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
181
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA
182
#define T0_MUL_T1A() \
183
rdp.best_tex = 1; \
184
cmb.tex |= 3, \
185
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA, \
186
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
187
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
188
#define T0_INTER_T1_USING_FACTOR(factor) \
189
if (factor == 0xFF) { \
190
USE_T1(); \
191
} \
192
else if (factor == 0x00) { \
193
USE_T0(); \
194
}\
195
else {\
196
if (factor <= 0x80) rdp.best_tex = 0; \
197
else rdp.best_tex = 1; \
198
cmb.tex |= 3, \
199
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
200
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
201
cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
202
percent = (float)factor / 255.0f, \
203
cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
204
}
205
#define T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\
206
if (factor == 0xFF) { \
207
USE_T0(); \
208
} \
209
else if (factor == 0x00) { \
210
USE_T1(); \
211
}\
212
else {\
213
if (factor <= 0x80) rdp.best_tex = 0; \
214
else rdp.best_tex = 1; \
215
cmb.tex |= 3, \
216
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
217
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
218
cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
219
percent = (255 - factor) / 255.0f, \
220
cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
221
}
222
#define T0_INTER_T1_USING_T0() \
223
rdp.best_tex = 0; \
224
cmb.tex |= 3, \
225
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
226
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
227
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
228
#define T1_INTER_T0_USING_T0() \
229
rdp.best_tex = 0; \
230
cmb.tex |= 3, \
231
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
232
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
233
cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL
234
#define T0_INTER_T1_USING_T1() \
235
if (!cmb.combine_ext) { \
236
T0_INTER_T1_USING_FACTOR(0x7F); \
237
}\
238
else {\
239
rdp.best_tex = 0; \
240
cmb.tex |= 3, \
241
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
242
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
243
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
244
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
245
cmb.t1c_ext_c = GR_CMBX_ZERO, \
246
cmb.t1c_ext_c_invert = 0, \
247
cmb.t1c_ext_d= GR_CMBX_B, \
248
cmb.t1c_ext_d_invert = 0, \
249
cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
250
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
251
cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
252
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
253
cmb.t0c_ext_c = GR_CMBX_OTHER_TEXTURE_RGB, \
254
cmb.t0c_ext_c_invert = 0, \
255
cmb.t0c_ext_d= GR_CMBX_B, \
256
cmb.t0c_ext_d_invert = 0, \
257
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
258
}
259
#define T0_INTER_T1_USING_T1A() \
260
rdp.best_tex = 0; \
261
cmb.tex |= 3, \
262
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
263
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
264
cmb.tmu0_fac = GR_COMBINE_FACTOR_OTHER_ALPHA
265
#define T0_INTER_T1_USING_PRIM() \
266
if (!cmb.combine_ext) { \
267
T0_INTER_T1_USING_FACTOR ((rdp.prim_color&0xFF)); \
268
}\
269
else {\
270
rdp.best_tex = 0; \
271
cmb.tex |= 3, \
272
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
273
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
274
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
275
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
276
cmb.t1c_ext_c = GR_CMBX_ZERO, \
277
cmb.t1c_ext_c_invert = 0, \
278
cmb.t1c_ext_d= GR_CMBX_B, \
279
cmb.t1c_ext_d_invert = 0, \
280
cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
281
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
282
cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
283
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
284
cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
285
cmb.t0c_ext_c_invert = 0, \
286
cmb.t0c_ext_d= GR_CMBX_B, \
287
cmb.t0c_ext_d_invert = 0, \
288
cmb.tex_ccolor = rdp.prim_color, \
289
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
290
}
291
#define T1_INTER_T0_USING_PRIM() /* inverse of above */\
292
if (!cmb.combine_ext) { \
293
T1_INTER_T0_USING_FACTOR ((rdp.prim_color&0xFF)); \
294
}\
295
else {\
296
rdp.best_tex = 0; \
297
cmb.tex |= 3, \
298
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
299
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
300
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
301
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
302
cmb.t1c_ext_c = GR_CMBX_ZERO, \
303
cmb.t1c_ext_c_invert = 0, \
304
cmb.t1c_ext_d= GR_CMBX_B, \
305
cmb.t1c_ext_d_invert = 0, \
306
cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
307
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
308
cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \
309
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
310
cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
311
cmb.t0c_ext_c_invert = 0, \
312
cmb.t0c_ext_d= GR_CMBX_B, \
313
cmb.t0c_ext_d_invert = 0, \
314
cmb.tex_ccolor = rdp.prim_color, \
315
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
316
}
317
#define T0_INTER_T1_USING_ENV() \
318
if (!cmb.combine_ext) { \
319
T0_INTER_T1_USING_FACTOR ((rdp.env_color&0xFF)); \
320
}\
321
else {\
322
rdp.best_tex = 0; \
323
cmb.tex |= 3, \
324
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
325
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
326
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
327
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
328
cmb.t1c_ext_c = GR_CMBX_ZERO, \
329
cmb.t1c_ext_c_invert = 0, \
330
cmb.t1c_ext_d= GR_CMBX_B, \
331
cmb.t1c_ext_d_invert = 0, \
332
cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
333
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
334
cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
335
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
336
cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
337
cmb.t0c_ext_c_invert = 0, \
338
cmb.t0c_ext_d= GR_CMBX_B, \
339
cmb.t0c_ext_d_invert = 0, \
340
cmb.tex_ccolor = rdp.env_color, \
341
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
342
}
343
#define T1_INTER_T0_USING_ENV() /* inverse of above */\
344
if (!cmb.combine_ext) { \
345
T1_INTER_T0_USING_FACTOR ((rdp.env_color&0xFF)); \
346
}\
347
else {\
348
rdp.best_tex = 0; \
349
cmb.tex |= 3, \
350
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
351
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
352
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
353
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
354
cmb.t1c_ext_c = GR_CMBX_ZERO, \
355
cmb.t1c_ext_c_invert = 0, \
356
cmb.t1c_ext_d= GR_CMBX_B, \
357
cmb.t1c_ext_d_invert = 0, \
358
cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
359
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
360
cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \
361
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
362
cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
363
cmb.t0c_ext_c_invert = 0, \
364
cmb.t0c_ext_d= GR_CMBX_B, \
365
cmb.t0c_ext_d_invert = 0, \
366
cmb.tex_ccolor = rdp.env_color, \
367
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
368
}
369
#define T0_INTER_T1_USING_SHADEA() \
370
if (!cmb.combine_ext) { \
371
T0_INTER_T1_USING_FACTOR (0x7F); \
372
}\
373
else {\
374
rdp.best_tex = 0; \
375
cmb.tex |= 3, \
376
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
377
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
378
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
379
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
380
cmb.t1c_ext_c = GR_CMBX_ZERO, \
381
cmb.t1c_ext_c_invert = 0, \
382
cmb.t1c_ext_d= GR_CMBX_B, \
383
cmb.t1c_ext_d_invert = 0, \
384
cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
385
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
386
cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
387
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
388
cmb.t0c_ext_c = GR_CMBX_ITALPHA, \
389
cmb.t0c_ext_c_invert = 0, \
390
cmb.t0c_ext_d= GR_CMBX_B, \
391
cmb.t0c_ext_d_invert = 0, \
392
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
393
}
394
#define T1_INTER_T0_USING_SHADEA() \
395
if (!cmb.combine_ext) { \
396
T0_INTER_T1_USING_FACTOR (0x7F); \
397
}\
398
else {\
399
rdp.best_tex = 0; \
400
cmb.tex |= 3, \
401
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
402
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
403
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
404
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
405
cmb.t1c_ext_c = GR_CMBX_ZERO, \
406
cmb.t1c_ext_c_invert = 0, \
407
cmb.t1c_ext_d= GR_CMBX_B, \
408
cmb.t1c_ext_d_invert = 0, \
409
cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
410
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
411
cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \
412
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
413
cmb.t0c_ext_c = GR_CMBX_ITALPHA, \
414
cmb.t0c_ext_c_invert = 0, \
415
cmb.t0c_ext_d= GR_CMBX_B, \
416
cmb.t0c_ext_d_invert = 0, \
417
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
418
}
419
#define T1_SUB_T0() \
420
rdp.best_tex = 0; \
421
cmb.tex |= 3, \
422
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
423
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \
424
cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE
425
#define T1_SUB_T0_MUL_T0() \
426
rdp.best_tex = 0; \
427
cmb.tex |= 3, \
428
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
429
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \
430
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
431
#define T1_MUL_PRIMLOD_ADD_T0() \
432
rdp.best_tex = 0; \
433
cmb.tex |= 3, \
434
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
435
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
436
cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
437
percent = (float)(lod_frac) / 255.0f, \
438
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
439
#define T1_MUL_PRIMA_ADD_T0() \
440
rdp.best_tex = 0; \
441
cmb.tex |= 3, \
442
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
443
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
444
cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
445
percent = (float)(rdp.prim_color&0xFF) / 255.0f, \
446
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
447
#define T1_MUL_ENVA_ADD_T0() \
448
rdp.best_tex = 0; \
449
cmb.tex |= 3, \
450
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
451
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
452
cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
453
percent = (float)(rdp.env_color&0xFF) / 255.0f, \
454
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
455
#define T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1() \
456
T0_ADD_T1 (); \
457
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC); \
458
MOD_0_COL (rdp.prim_color & 0xFFFFFF00); \
459
MOD_0_FAC (lod_frac & 0xFF);
460
#define T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0() \
461
if (cmb.combine_ext) \
462
{ \
463
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X, \
464
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X, \
465
GR_CMBX_DETAIL_FACTOR, 0, \
466
GR_CMBX_ZERO, 0); \
467
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X, \
468
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X, \
469
GR_CMBX_ZERO, 1, \
470
GR_CMBX_ZERO, 0); \
471
cmb.tex_ccolor = rdp.prim_color; \
472
cmb.tex |= 3; \
473
percent = (float)(lod_frac) / 255.0f; \
474
cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
475
} \
476
else \
477
{ \
478
T0_ADD_T1 (); \
479
MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC); \
480
MOD_1_COL (rdp.prim_color & 0xFFFFFF00); \
481
MOD_1_FAC (lod_frac & 0xFF); \
482
}
483
#define PRIM_INTER_T0_USING_SHADEA() \
484
if (!cmb.combine_ext) { \
485
USE_T0 (); \
486
}\
487
else {\
488
rdp.best_tex = 0; \
489
cmb.tex |= 1, \
490
cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
491
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
492
cmb.t0c_ext_b = GR_CMBX_TMU_CCOLOR, \
493
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
494
cmb.t0c_ext_c = GR_CMBX_ITALPHA, \
495
cmb.t0c_ext_c_invert = 0, \
496
cmb.t0c_ext_d= GR_CMBX_B, \
497
cmb.t0c_ext_d_invert = 0, \
498
cmb.tex_ccolor = rdp.prim_color, \
499
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
500
}
501
502
#define A_USE_T0() \
503
cmb.tex |= 1, \
504
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_LOCAL
505
#define A_USE_T1() \
506
if (voodoo.num_tmu > 1) { \
507
cmb.tex |= 2, \
508
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
509
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
510
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE; \
511
} \
512
else { \
513
A_USE_T0(); \
514
}
515
#define A_T0_ADD_T1() \
516
cmb.tex |= 3, \
517
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
518
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
519
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE
520
#define A_T1_SUB_T0() \
521
cmb.tex |= 3, \
522
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
523
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \
524
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE
525
#define A_T0_SUB_T1() \
526
cmb.tex |= 3, \
527
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
528
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL, \
529
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA
530
#define A_T0_MUL_T1() \
531
cmb.tex |= 3, \
532
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
533
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
534
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_LOCAL
535
#define A_T0_INTER_T1_USING_T0A() \
536
rdp.best_tex = 0; \
537
cmb.tex |= 3, \
538
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
539
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
540
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA
541
#define A_T1_INTER_T0_USING_T0A() \
542
rdp.best_tex = 0; \
543
cmb.tex |= 3, \
544
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
545
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
546
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA
547
#define A_T0_INTER_T1_USING_T1A() \
548
rdp.best_tex = 0; \
549
cmb.tex |= 3, \
550
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
551
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
552
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA
553
#define A_T0_INTER_T1_USING_FACTOR(factor) \
554
if (factor == 0xFF) { \
555
A_USE_T1(); \
556
} \
557
else if (factor == 0x00) { \
558
A_USE_T0(); \
559
}\
560
else { \
561
cmb.tex |= 3, \
562
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
563
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
564
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
565
percent = (float)factor / 255.0f, \
566
cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
567
}
568
#define A_T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\
569
if (factor == 0xFF) { \
570
A_USE_T0(); \
571
} \
572
else if (factor == 0x00) { \
573
A_USE_T1(); \
574
}\
575
else { \
576
cmb.tex |= 3, \
577
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
578
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
579
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
580
percent = (255 - factor) / 255.0f, \
581
cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
582
}
583
#define A_T0_INTER_T1_USING_SHADEA() \
584
if (!cmb.combine_ext) { \
585
A_T0_INTER_T1_USING_FACTOR (0x7F); \
586
}\
587
else {\
588
rdp.best_tex = 0; \
589
cmb.tex |= 3, \
590
cmb.t1a_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA, \
591
cmb.t1a_ext_a_mode = GR_FUNC_MODE_ZERO, \
592
cmb.t1a_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA, \
593
cmb.t1a_ext_b_mode = GR_FUNC_MODE_ZERO, \
594
cmb.t1a_ext_c = GR_CMBX_ZERO, \
595
cmb.t1a_ext_c_invert = 0, \
596
cmb.t1a_ext_d= GR_CMBX_B, \
597
cmb.t1a_ext_d_invert = 0, \
598
cmb.t0a_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA, \
599
cmb.t0a_ext_a_mode = GR_FUNC_MODE_X, \
600
cmb.t0a_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA, \
601
cmb.t0a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
602
cmb.t0a_ext_c = GR_CMBX_ITALPHA, \
603
cmb.t0a_ext_c_invert = 0, \
604
cmb.t0a_ext_d= GR_CMBX_B, \
605
cmb.t0a_ext_d_invert = 0, \
606
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA; \
607
}
608
#define A_T1_MUL_PRIMLOD_ADD_T0() \
609
rdp.best_tex = 0; \
610
cmb.tex |= 3, \
611
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
612
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
613
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
614
percent = (float)(lod_frac) / 255.0f, \
615
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
616
#define A_T1_MUL_PRIMA_ADD_T0() \
617
rdp.best_tex = 0; \
618
cmb.tex |= 3, \
619
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
620
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
621
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
622
percent = (float)(rdp.prim_color&0xFF) / 255.0f, \
623
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
624
#define A_T1_MUL_ENVA_ADD_T0() \
625
rdp.best_tex = 0; \
626
cmb.tex |= 3, \
627
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
628
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
629
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
630
percent = (float)(rdp.env_color&0xFF) / 255.0f, \
631
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
632
633
634
// UNIMP - writes to the unimplemented log, if it's enabled
635
#ifdef UNIMP_LOG
636
#define UNIMPMODE() { \
637
std::ofstream unimp; \
638
unimp.open("unimp.txt", std::ios::app); \
639
unimp << out_buf; \
640
unimp.close(); \
641
}
642
#else
643
#define UNIMPMODE()
644
#endif
645
646
// Bright red, sets up a bright red combine
647
#ifdef BRIGHT_RED
648
// Bright red, sets up a bright red combine during the alpha stage
649
#define BrightRed() { \
650
CCMB (GR_COMBINE_FUNCTION_LOCAL, \
651
GR_COMBINE_FACTOR_NONE, \
652
GR_COMBINE_LOCAL_CONSTANT, \
653
GR_COMBINE_OTHER_NONE); \
654
ACMB (GR_COMBINE_FUNCTION_LOCAL, \
655
GR_COMBINE_FACTOR_NONE, \
656
GR_COMBINE_LOCAL_CONSTANT, \
657
GR_COMBINE_OTHER_NONE); \
658
cmb.ccolor = 0xFF0000FF; \
659
}
660
#else
661
#define BrightRed()
662
#endif
663
664
#define CC(color) cmb.ccolor=(color)&0xFFFFFF00
665
#define CC_BYTE(byte) { cmb.ccolor=(byte<<8)|(byte<<16)|(byte<<24); }
666
#define CC_C1MULC2(color1, color2) { \
667
cmb.ccolor=(wxUint8)( ((color1 & 0xFF000000) >> 24) * (((color2 & 0xFF000000) >> 24) /255.0f) ) << 24 | \
668
(wxUint8)( ((color1 & 0x00FF0000) >> 16) * (((color2 & 0x00FF0000) >> 16) /255.0f) ) << 16 | \
669
(wxUint8)( ((color1 & 0x0000FF00) >> 8) * (((color2 & 0x0000FF00) >> 8) /255.0f) ) << 8 ; \
670
}
671
#define CC_C1SUBC2(color1, color2) { \
672
cmb.ccolor=(wxUint8)( max(0, (int)((color1 & 0xFF000000) >> 24) - (int)((color2 & 0xFF000000) >> 24)) ) << 24 | \
673
(wxUint8)( max(0, (int)((color1 & 0x00FF0000) >> 16) - (int)((color2 & 0x00FF0000) >> 16)) ) << 16 | \
674
(wxUint8)( max(0, (int)((color1 & 0x0000FF00) >> 8) - (int)((color2 & 0x0000FF00) >> 8)) ) << 8 ; \
675
}
676
#define CC_COLMULBYTE(color, byte) { \
677
float factor = byte/255.0f; \
678
cmb.ccolor = (wxUint8)( ((color & 0xFF000000) >> 24) * factor ) << 24 | \
679
(wxUint8)( ((color & 0x00FF0000) >> 16) * factor ) << 16 | \
680
(wxUint8)( ((color & 0x0000FF00) >> 8) * factor ) << 8 ; \
681
}
682
#define CC_PRIM() CC(rdp.prim_color)
683
#define CC_ENV() CC(rdp.env_color)
684
#define CC_1SUBPRIM() CC((~rdp.prim_color))
685
#define CC_1SUBENV() CC((~rdp.env_color))
686
#define CC_PRIMA() CC_BYTE((rdp.prim_color&0xFF))
687
#define CC_ENVA() CC_BYTE((rdp.env_color&0xFF))
688
#define CC_1SUBPRIMA() CC_BYTE(((~rdp.prim_color)&0xFF))
689
#define CC_1SUBENVA() CC_BYTE(((~rdp.env_color)&0xFF))
690
#define CC_PRIMLOD() CC_BYTE(rdp.prim_lodfrac)
691
#define CC_K5() CC_BYTE(rdp.K5)
692
#define CC_PRIMMULENV() CC_C1MULC2(rdp.prim_color, rdp.env_color)
693
#define CC_PRIMSUBENV() CC_C1SUBC2(rdp.prim_color, rdp.env_color)
694
695
#define XSHADE(color, flag) { \
696
rdp.col[0] *= (float)((color & 0xFF000000) >> 24) / 255.0f; \
697
rdp.col[1] *= (float)((color & 0x00FF0000) >> 16) / 255.0f; \
698
rdp.col[2] *= (float)((color & 0x0000FF00) >> 8) / 255.0f; \
699
rdp.cmb_flags |= flag; \
700
}
701
#define XSHADE1M(color, flag) { \
702
rdp.col[0] *= 1.0f-((float)((color & 0xFF000000) >> 24)/255.0f); \
703
rdp.col[1] *= 1.0f-((float)((color & 0x00FF0000) >> 16)/255.0f); \
704
rdp.col[2] *= 1.0f-((float)((color & 0x0000FF00) >> 8)/255.0f); \
705
rdp.cmb_flags |= flag; \
706
}
707
#define XSHADEC1MC2(color1, color2, flag) { \
708
rdp.col[0] *= (float)( max(0, (int)((color1 & 0xFF000000) >> 24) - (int)((color2 & 0xFF000000) >> 24)) )/255.0f; \
709
rdp.col[1] *= (float)( max(0, (int)((color1 & 0x00FF0000) >> 16) - (int)((color2 & 0x00FF0000) >> 16)) )/255.0f; \
710
rdp.col[2] *= (float)( max(0, (int)((color1 & 0x0000FF00) >> 8) - (int)((color2 & 0x0000FF00) >> 8)) )/255.0f; \
711
rdp.cmb_flags |= flag; \
712
}
713
#define XSHADE_BYTE(byte, flag) { \
714
float tmpcol = (float)byte / 255.0f; \
715
rdp.col[0] *= tmpcol; \
716
rdp.col[1] *= tmpcol; \
717
rdp.col[2] *= tmpcol; \
718
rdp.cmb_flags |= flag; \
719
}
720
#define MULSHADE(color) XSHADE(color, CMB_MULT)
721
#define MULSHADE_PRIM() MULSHADE(rdp.prim_color)
722
#define MULSHADE_ENV() MULSHADE(rdp.env_color)
723
#define MULSHADE_1MPRIM() XSHADE1M(rdp.prim_color, CMB_MULT)
724
#define MULSHADE_1MENV() XSHADE1M(rdp.env_color, CMB_MULT)
725
#define MULSHADE_PRIMSUBENV() XSHADEC1MC2(rdp.prim_color, rdp.env_color, CMB_MULT)
726
#define MULSHADE_ENVSUBPRIM() XSHADEC1MC2(rdp.env_color, rdp.prim_color, CMB_MULT)
727
#define MULSHADE_BYTE(byte) XSHADE_BYTE(byte, CMB_MULT)
728
#define MULSHADE_PRIMA() MULSHADE_BYTE((rdp.prim_color & 0xFF))
729
#define MULSHADE_ENVA() MULSHADE_BYTE((rdp.env_color & 0xFF))
730
#define MULSHADE_1MENVA() MULSHADE_BYTE(((~rdp.env_color) & 0xFF))
731
#define MULSHADE_PRIMLOD() MULSHADE_BYTE((rdp.prim_lodfrac & 0xFF))
732
#define MULSHADE_K5() MULSHADE_BYTE(rdp.K5)
733
734
#define SETSHADE(color) XSHADE(color, CMB_SET)
735
#define SETSHADE_PRIM() SETSHADE(rdp.prim_color)
736
#define SETSHADE_ENV() SETSHADE(rdp.env_color)
737
#define SETSHADE_BYTE(byte) XSHADE_BYTE(byte, CMB_SET)
738
#define SETSHADE_PRIMA() SETSHADE_BYTE((rdp.prim_color & 0xFF))
739
#define SETSHADE_ENVA() SETSHADE_BYTE((rdp.env_color & 0xFF))
740
#define SETSHADE_1MPRIMA() SETSHADE_BYTE(((~rdp.prim_color) & 0xFF))
741
#define SETSHADE_PRIMLOD() SETSHADE_BYTE((rdp.prim_lodfrac & 0xFF))
742
#define SETSHADE_1MPRIMLOD() SETSHADE_BYTE(((~rdp.prim_lodfrac) & 0xFF))
743
744
#define SETSHADE_1MPRIM() XSHADE1M(rdp.prim_color, CMB_SET)
745
#define SETSHADE_1MENV() XSHADE1M(rdp.env_color, CMB_SET)
746
#define SETSHADE_PRIMSUBENV() XSHADEC1MC2(rdp.prim_color, rdp.env_color, CMB_SET)
747
#define SETSHADE_ENVSUBPRIM() XSHADEC1MC2(rdp.env_color, rdp.prim_color, CMB_SET)
748
#define SETSHADE_SHADE_A() { \
749
rdp.cmb_flags = CMB_SETSHADE_SHADEALPHA; \
750
}
751
752
#define XSHADEADD(color, flag) { \
753
rdp.coladd[0] *= (float)((color & 0xFF000000) >> 24) / 255.0f; \
754
rdp.coladd[1] *= (float)((color & 0x00FF0000) >> 16) / 255.0f; \
755
rdp.coladd[2] *= (float)((color & 0x0000FF00) >> 8) / 255.0f; \
756
rdp.cmb_flags |= flag; \
757
}
758
#define XSHADEC1MC2ADD(color1, color2, flag) { \
759
rdp.coladd[0] *= (float)( max(0, (int)((color1 & 0xFF000000) >> 24) - (int)((color2 & 0xFF000000) >> 24)) )/255.0f; \
760
rdp.coladd[1] *= (float)( max(0, (int)((color1 & 0x00FF0000) >> 16) - (int)((color2 & 0x00FF0000) >> 16)) )/255.0f; \
761
rdp.coladd[2] *= (float)( max(0, (int)((color1 & 0x0000FF00) >> 8) - (int)((color2 & 0x0000FF00) >> 8)) )/255.0f; \
762
rdp.cmb_flags |= flag; \
763
}
764
#define SUBSHADE_PRIM() XSHADEADD(rdp.prim_color, CMB_SUB)
765
#define SUBSHADE_ENV() XSHADEADD(rdp.env_color, CMB_SUB)
766
#define SUBSHADE_PRIMSUBENV() XSHADEC1MC2ADD(rdp.prim_color, rdp.env_color, CMB_SUB)
767
#define ADDSHADE_PRIM() XSHADEADD(rdp.prim_color, CMB_ADD)
768
#define ADDSHADE_ENV() XSHADEADD(rdp.env_color, CMB_ADD)
769
#define ADDSHADE_PRIMSUBENV() XSHADEC1MC2ADD(rdp.prim_color, rdp.env_color, CMB_ADD)
770
#define SUBSHADE_PRIMMULENV() { \
771
rdp.coladd[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) * ((rdp.env_color & 0xFF000000) >> 24) )/255.0f/255.0f; \
772
rdp.coladd[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) * ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f/255.0f; \
773
rdp.coladd[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) * ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f/255.0f; \
774
rdp.cmb_flags |= CMB_SUB; \
775
}
776
777
#define COLSUBSHADE_PRIM() { \
778
rdp.coladd[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \
779
rdp.coladd[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \
780
rdp.coladd[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \
781
rdp.cmb_flags |= CMB_COL_SUB_OWN; \
782
}
783
784
#define INTERSHADE_2(color,factor) { \
785
rdp.col_2[0] = (((color) >> 24) & 0xFF) / 255.0f; \
786
rdp.col_2[1] = (((color) >> 16) & 0xFF) / 255.0f; \
787
rdp.col_2[2] = (((color) >> 8) & 0xFF) / 255.0f; \
788
rdp.shade_factor = (factor) / 255.0f; \
789
rdp.cmb_flags_2 = CMB_INTER; \
790
}
791
792
#define MULSHADE_SHADEA() rdp.cmb_flags |= CMB_MULT_OWN_ALPHA;
793
794
#define CA(color) cmb.ccolor|=(color)&0xFF
795
#define CA_PRIM() CA(rdp.prim_color)
796
#define CA_ENV() CA(rdp.env_color)
797
#define CA_INVPRIM() cmb.ccolor|=0xFF-(rdp.prim_color&0xFF)
798
#define CA_INVENV() cmb.ccolor|=0xFF-(rdp.env_color&0xFF)
799
#define CA_ENV1MPRIM() cmb.ccolor|= (wxUint32)(((rdp.env_color&0xFF)/255.0f) * (((~(rdp.prim_color&0xFF)) & 0xff)/255.0f) * 255.0f);
800
#define CA_PRIMENV() cmb.ccolor |= (wxUint32)(((rdp.env_color&0xFF)/255.0f) * ((rdp.prim_color&0xFF)/255.0f) * 255.0f);
801
#define CA_PRIMLOD() cmb.ccolor |= rdp.prim_lodfrac;
802
#define CA_PRIM_MUL_PRIMLOD() cmb.ccolor |= (int)(((rdp.prim_color&0xFF) * rdp.prim_lodfrac) / 255.0f);
803
#define CA_ENV_MUL_PRIMLOD() cmb.ccolor |= (int)(((rdp.env_color&0xFF) * rdp.prim_lodfrac) / 255.0f);
804
805
#define XSHADE_A(color, flag) { \
806
rdp.col[3] *= (float)(color & 0xFF) / 255.0f; \
807
rdp.cmb_flags |= flag; \
808
}
809
#define XSHADE1M_A(color, flag) { \
810
rdp.col[3] *= 1.0f-((float)(color & 0xFF) / 255.0f); \
811
rdp.cmb_flags |= flag; \
812
}
813
#define XSHADEC1MC2_A(color1, color2, flag) { \
814
rdp.col[3] *= (float)( max(0, (int)(color1 & 0xFF) - (int)(color2 & 0xFF)) ) / 255.0f; \
815
rdp.cmb_flags |= flag; \
816
}
817
#define MULSHADE_A_PRIM() XSHADE_A(rdp.prim_color, CMB_A_MULT)
818
#define MULSHADE_A_1MPRIM() XSHADE1M_A(rdp.prim_color, CMB_A_MULT)
819
#define MULSHADE_A_ENV() XSHADE_A(rdp.env_color, CMB_A_MULT)
820
#define MULSHADE_A_PRIMSUBENV() XSHADEC1MC2_A(rdp.prim_color, rdp.env_color, CMB_A_MULT)
821
#define MULSHADE_A_ENVSUBPRIM() XSHADEC1MC2_A(rdp.env_color, rdp.prim_color, CMB_A_MULT)
822
#define SETSHADE_A(color) XSHADE_A(color, CMB_A_SET)
823
#define SETSHADE_A_PRIM() SETSHADE_A(rdp.prim_color)
824
#define SETSHADE_A_ENV() SETSHADE_A(rdp.env_color)
825
#define SETSHADE_A_PRIMSUBENV() XSHADEC1MC2_A(rdp.prim_color, rdp.env_color, CMB_A_SET)
826
#define SETSHADE_A_INVENV() XSHADE1M_A(rdp.env_color, CMB_A_SET)
827
828
#define XSHADEADD_A(color, flag) { \
829
rdp.coladd[3] *= (float)(color & 0xFF) / 255.0f; \
830
rdp.cmb_flags |= flag; \
831
}
832
#define SUBSHADE_A_PRIM() XSHADEADD_A(rdp.prim_color, CMB_A_SUB)
833
#define SUBSHADE_A_ENV() XSHADEADD_A(rdp.env_color, CMB_A_SUB)
834
#define ADDSHADE_A_PRIM() XSHADEADD_A(rdp.prim_color, CMB_A_ADD)
835
#define ADDSHADE_A_ENV() XSHADEADD_A(rdp.env_color, CMB_A_ADD)
836
837
//****************************************************************
838
// Combine Functions
839
//****************************************************************
840
841
// These are in a somewhat ordered way, using the A constants below. T0 comes before
842
// T1 comes before PRIM, ... except for CMB, which always comes at the end, where
843
// the CMB comes first in the name. T0 and T1 are always interleaved, because they use the
844
// same function.
845
// Keep going in alphabetical order, but do not break the order of variables!
846
// ex: A*C + B*C -> T0_MUL_PRIM_ADD_ENV_MUL_PRIM,
847
// Although prim comes before env, we have already used prim as C, so it must stay as C
848
// and would NOT become T0_MUL_PRIM_ADD_PRIM_MUL_ENV
849
//
850
// New version ordered by:
851
// t0
852
// prim
853
// env
854
// shade
855
856
static void cc_one ()
857
{
858
CCMB (GR_COMBINE_FUNCTION_LOCAL,
859
GR_COMBINE_FACTOR_NONE,
860
GR_COMBINE_LOCAL_CONSTANT,
861
GR_COMBINE_OTHER_NONE);
862
// CC (0xFFFFFF00);
863
CC (0xFFFFFF00);
864
}
865
866
static void cc_zero ()
867
{
868
CCMB (GR_COMBINE_FUNCTION_LOCAL,
869
GR_COMBINE_FACTOR_NONE,
870
GR_COMBINE_LOCAL_CONSTANT,
871
GR_COMBINE_OTHER_NONE);
872
CC (0x00000000);
873
}
874
875
static void cc_t0 ()
876
{
877
if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))
878
{
879
wxUint32 blend_mode = (rdp.othermode_l >> 16);
880
if (blend_mode == 0xa500)
881
{
882
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
883
GR_COMBINE_FACTOR_ONE,
884
GR_COMBINE_LOCAL_CONSTANT,
885
GR_COMBINE_OTHER_TEXTURE);
886
float fog = (rdp.fog_color&0xFF)/255.0f;
887
wxUint32 R = (wxUint32)(((rdp.blend_color>>24)&0xFF)*fog);
888
wxUint32 G = (wxUint32)(((rdp.blend_color>>16)&0xFF)*fog);
889
wxUint32 B = (wxUint32)(((rdp.blend_color>> 8)&0xFF)*fog);
890
CC((R<<24)|(G<<16)|(B<<8));
891
}
892
else if (blend_mode == 0x55f0) //cmem*afog + cfog*1ma
893
{
894
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
895
GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA,
896
GR_COMBINE_LOCAL_NONE,
897
GR_COMBINE_OTHER_CONSTANT);
898
CC(rdp.fog_color);
899
A_USE_T0 ();
900
}
901
else
902
{
903
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
904
GR_COMBINE_FACTOR_ONE,
905
GR_COMBINE_LOCAL_NONE,
906
GR_COMBINE_OTHER_TEXTURE);
907
}
908
}
909
else
910
{
911
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
912
GR_COMBINE_FACTOR_ONE,
913
GR_COMBINE_LOCAL_NONE,
914
GR_COMBINE_OTHER_TEXTURE);
915
}
916
USE_T0 ();
917
}
918
919
static void cc_t0a ()
920
{
921
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
922
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
923
GR_COMBINE_LOCAL_NONE,
924
GR_COMBINE_OTHER_CONSTANT);
925
USE_T0 ();
926
A_USE_T0 ();
927
CC (0xFFFFFF00);
928
}
929
930
static void cc_t1 () //Added by Gonetz
931
{
932
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
933
GR_COMBINE_FACTOR_ONE,
934
GR_COMBINE_LOCAL_NONE,
935
GR_COMBINE_OTHER_TEXTURE);
936
USE_T1 ();
937
}
938
939
static void cc_t0_mul_t1 ()
940
{
941
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
942
GR_COMBINE_FACTOR_ONE,
943
GR_COMBINE_LOCAL_NONE,
944
GR_COMBINE_OTHER_TEXTURE);
945
T0_MUL_T1 ();
946
}
947
948
static void cc_t0_mul_t1_add_t0 () //Added by Gonetz
949
{
950
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
951
GR_COMBINE_FACTOR_ONE,
952
GR_COMBINE_LOCAL_NONE,
953
GR_COMBINE_OTHER_TEXTURE);
954
T0_MUL_T1_ADD_T0 ();
955
}
956
957
/*
958
static void cc_t1_inter__env_inter_t0_using_k5__using_t1a ()
959
{
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);
968
rdp.best_tex = 0;
969
cmb.tex |= 3;
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;
974
}
975
*/
976
977
static void cc_t1_inter_t0_using_env ()
978
{
979
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
980
GR_COMBINE_FACTOR_ONE,
981
GR_COMBINE_LOCAL_NONE,
982
GR_COMBINE_OTHER_TEXTURE);
983
T1_INTER_T0_USING_ENV ();
984
}
985
986
static void cc_prim ()
987
{
988
CCMB (GR_COMBINE_FUNCTION_LOCAL,
989
GR_COMBINE_FACTOR_NONE,
990
GR_COMBINE_LOCAL_CONSTANT,
991
GR_COMBINE_OTHER_NONE);
992
CC_PRIM ();
993
}
994
995
static void cc_env ()
996
{
997
CCMB (GR_COMBINE_FUNCTION_LOCAL,
998
GR_COMBINE_FACTOR_NONE,
999
GR_COMBINE_LOCAL_CONSTANT,
1000
GR_COMBINE_OTHER_NONE);
1001
CC_ENV ();
1002
}
1003
1004
static void cc_scale ()
1005
{
1006
CCMB (GR_COMBINE_FUNCTION_LOCAL,
1007
GR_COMBINE_FACTOR_NONE,
1008
GR_COMBINE_LOCAL_CONSTANT,
1009
GR_COMBINE_OTHER_NONE);
1010
CC (rdp.SCALE);
1011
}
1012
1013
static void cc_shade ()
1014
{
1015
CCMB (GR_COMBINE_FUNCTION_LOCAL,
1016
GR_COMBINE_FACTOR_NONE,
1017
GR_COMBINE_LOCAL_ITERATED,
1018
GR_COMBINE_OTHER_NONE);
1019
}
1020
1021
static void cc_one_mul_shade ()
1022
{
1023
if ((settings.hacks&hack_Knockout) && (rdp.aTBuffTex[0] || rdp.aTBuffTex[1] || rdp.cur_image)) //hack for boxer shadow
1024
{
1025
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1026
GR_COMBINE_FACTOR_LOCAL,
1027
GR_COMBINE_LOCAL_CONSTANT,
1028
GR_COMBINE_OTHER_TEXTURE);
1029
CC (0x20202000);
1030
USE_T0 ();
1031
}
1032
else
1033
{
1034
cc_shade ();
1035
}
1036
}
1037
1038
static void cc_shadea ()
1039
{
1040
CCMB (GR_COMBINE_FUNCTION_LOCAL_ALPHA,
1041
GR_COMBINE_FACTOR_NONE,
1042
GR_COMBINE_LOCAL_ITERATED,
1043
GR_COMBINE_OTHER_NONE);
1044
}
1045
1046
static void cc_t0_mul_prim ()
1047
{
1048
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1049
GR_COMBINE_FACTOR_LOCAL,
1050
GR_COMBINE_LOCAL_CONSTANT,
1051
GR_COMBINE_OTHER_TEXTURE);
1052
CC_PRIM ();
1053
USE_T0 ();
1054
}
1055
1056
static void cc_t0_mul_prima ()
1057
{
1058
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1059
GR_COMBINE_FACTOR_LOCAL,
1060
GR_COMBINE_LOCAL_CONSTANT,
1061
GR_COMBINE_OTHER_TEXTURE);
1062
CC_PRIMA ();
1063
USE_T0 ();
1064
}
1065
1066
static void cc_t1_mul_prim ()
1067
{
1068
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1069
GR_COMBINE_FACTOR_LOCAL,
1070
GR_COMBINE_LOCAL_CONSTANT,
1071
GR_COMBINE_OTHER_TEXTURE);
1072
CC_PRIM ();
1073
if ((rdp.cycle1 & 0xFFFF) == (rdp.cycle2 & 0xFFFF)) // 1 cycle, use t0
1074
{
1075
USE_T0 ();
1076
}
1077
else
1078
{
1079
USE_T1 ();
1080
}
1081
}
1082
1083
static void cc_t0a_mul_prim ()
1084
{
1085
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1086
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
1087
GR_COMBINE_LOCAL_NONE,
1088
GR_COMBINE_OTHER_CONSTANT);
1089
CC_PRIM ();
1090
A_USE_T0 ();
1091
}
1092
1093
//Added by Gonetz
1094
static void cc__t1_inter_t0_using_enva__mul_prim ()
1095
{
1096
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1097
GR_COMBINE_FACTOR_LOCAL,
1098
GR_COMBINE_LOCAL_CONSTANT,
1099
GR_COMBINE_OTHER_TEXTURE);
1100
CC_PRIM ();
1101
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
1102
T1_INTER_T0_USING_FACTOR (factor);
1103
}
1104
1105
static void cc__t0_inter_one_using_t1__mul_prim ()
1106
{
1107
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1108
GR_COMBINE_FACTOR_LOCAL,
1109
GR_COMBINE_LOCAL_CONSTANT,
1110
GR_COMBINE_OTHER_TEXTURE);
1111
CC_PRIM ();
1112
rdp.best_tex = 0;
1113
cmb.tex |= 3;
1114
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;
1115
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
1116
cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL;
1117
}
1118
1119
static void cc__t0_inter_one_using_primlod__mul_prim ()
1120
{
1121
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1122
GR_COMBINE_FACTOR_LOCAL,
1123
GR_COMBINE_LOCAL_CONSTANT,
1124
GR_COMBINE_OTHER_TEXTURE);
1125
CC_PRIM ();
1126
if (cmb.combine_ext)
1127
{
1128
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1129
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
1130
GR_CMBX_DETAIL_FACTOR, 0,
1131
GR_CMBX_B, 0);
1132
cmb.tex |= 1;
1133
percent = (float)lod_frac / 255.0f;
1134
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
1135
}
1136
else
1137
{
1138
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1139
MOD_0_COL (0xFFFFFF00);
1140
MOD_0_FAC (lod_frac);
1141
USE_T0 ();
1142
}
1143
}
1144
1145
static void cc__t1_inter_one_using_env__mul_prim ()
1146
{
1147
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1148
GR_COMBINE_FACTOR_LOCAL,
1149
GR_COMBINE_LOCAL_CONSTANT,
1150
GR_COMBINE_OTHER_TEXTURE);
1151
CC_PRIM ();
1152
if (cmb.combine_ext)
1153
{
1154
T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1155
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1156
GR_CMBX_LOCAL_TEXTURE_RGB, 1,
1157
GR_CMBX_B, 0);
1158
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1159
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1160
GR_CMBX_ZERO, 1,
1161
GR_CMBX_ZERO, 0);
1162
cmb.tex |= 2;
1163
cmb.tex_ccolor = rdp.env_color;
1164
}
1165
else
1166
{
1167
USE_T1 ();
1168
}
1169
}
1170
1171
static void cc__t1_inter_one_using_enva__mul_t0 ()
1172
{
1173
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1174
GR_COMBINE_FACTOR_ONE,
1175
GR_COMBINE_LOCAL_NONE,
1176
GR_COMBINE_OTHER_TEXTURE);
1177
if (cmb.combine_ext)
1178
{
1179
T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1180
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1181
GR_CMBX_TMU_CALPHA, 0,
1182
GR_CMBX_B, 0);
1183
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1184
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1185
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1186
GR_CMBX_ZERO, 0);
1187
cmb.tex |= 3;
1188
cmb.tex_ccolor = 0xFFFFFF00 | (rdp.env_color&0xFF);
1189
}
1190
else
1191
{
1192
if ((rdp.env_color&0xFF) == 0xFF)
1193
{
1194
USE_T0 ();
1195
}
1196
else
1197
{
1198
T0_MUL_T1 ();
1199
}
1200
}
1201
}
1202
1203
//Added by Gonetz
1204
static void cc_prim_mul_prim ()
1205
{
1206
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1207
GR_COMBINE_FACTOR_LOCAL,
1208
GR_COMBINE_LOCAL_ITERATED,
1209
GR_COMBINE_OTHER_CONSTANT);
1210
CC_PRIM ();
1211
SETSHADE_PRIM ();
1212
}
1213
1214
static void cc_prim_mul_prima ()
1215
{
1216
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1217
GR_COMBINE_FACTOR_LOCAL,
1218
GR_COMBINE_LOCAL_CONSTANT,
1219
GR_COMBINE_OTHER_ITERATED);
1220
CC_PRIM ();
1221
SETSHADE_PRIMA ();
1222
}
1223
1224
static void cc_t1_mul_prima ()
1225
{
1226
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1227
GR_COMBINE_FACTOR_LOCAL,
1228
GR_COMBINE_LOCAL_CONSTANT,
1229
GR_COMBINE_OTHER_TEXTURE);
1230
CC_PRIMA ();
1231
USE_T1 ();
1232
}
1233
1234
static void cc_t1_mul_enva ()
1235
{
1236
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1237
GR_COMBINE_FACTOR_LOCAL,
1238
GR_COMBINE_LOCAL_CONSTANT,
1239
GR_COMBINE_OTHER_TEXTURE);
1240
CC_ENVA ();
1241
USE_T1 ();
1242
}
1243
1244
static void cc_t0_mul_env ()
1245
{
1246
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1247
GR_COMBINE_FACTOR_LOCAL,
1248
GR_COMBINE_LOCAL_CONSTANT,
1249
GR_COMBINE_OTHER_TEXTURE);
1250
CC_ENV ();
1251
USE_T0 ();
1252
}
1253
1254
static void cc_t1_mul_env ()
1255
{
1256
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1257
GR_COMBINE_FACTOR_LOCAL,
1258
GR_COMBINE_LOCAL_CONSTANT,
1259
GR_COMBINE_OTHER_TEXTURE);
1260
CC_ENV ();
1261
USE_T1 ();
1262
}
1263
1264
//Added by Gonetz
1265
static void cc_t0_mul_enva ()
1266
{
1267
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1268
GR_COMBINE_FACTOR_LOCAL,
1269
GR_COMBINE_LOCAL_CONSTANT,
1270
GR_COMBINE_OTHER_TEXTURE);
1271
CC_ENVA ();
1272
USE_T0 ();
1273
}
1274
1275
static void cc_t0_mul_scale ()
1276
{
1277
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1278
GR_COMBINE_FACTOR_LOCAL,
1279
GR_COMBINE_LOCAL_CONSTANT,
1280
GR_COMBINE_OTHER_TEXTURE);
1281
CC (rdp.SCALE);
1282
USE_T0 ();
1283
}
1284
1285
static void cc_t0_mul_enva_add_prim ()
1286
{
1287
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1288
GR_COMBINE_FACTOR_TEXTURE_RGB,
1289
GR_COMBINE_LOCAL_ITERATED,
1290
GR_COMBINE_OTHER_CONSTANT);
1291
SETSHADE_PRIM ();
1292
CC_ENVA ();
1293
USE_T0 ();
1294
}
1295
1296
static void cc_t0_mul_shade ()
1297
{
1298
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1299
GR_COMBINE_FACTOR_LOCAL,
1300
GR_COMBINE_LOCAL_ITERATED,
1301
GR_COMBINE_OTHER_TEXTURE);
1302
USE_T0 ();
1303
}
1304
1305
static void cc_f1_sky ()
1306
{
1307
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
1308
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
1309
GR_COMBINE_LOCAL_ITERATED,
1310
GR_COMBINE_OTHER_CONSTANT);
1311
MULSHADE_SHADEA ();
1312
MULSHADE_ENVSUBPRIM ();
1313
ADDSHADE_PRIM();
1314
CC(0xFFFFFFFF);
1315
}
1316
1317
static void cc_t0_mul_shadea ()
1318
{
1319
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1320
GR_COMBINE_FACTOR_LOCAL,
1321
GR_COMBINE_LOCAL_ITERATED,
1322
GR_COMBINE_OTHER_TEXTURE);
1323
SETSHADE_SHADE_A ();
1324
USE_T0 ();
1325
}
1326
1327
static void cc_t0_mul_k5 ()
1328
{
1329
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1330
GR_COMBINE_FACTOR_LOCAL,
1331
GR_COMBINE_LOCAL_CONSTANT,
1332
GR_COMBINE_OTHER_TEXTURE);
1333
CC_K5 ();
1334
USE_T0 ();
1335
}
1336
1337
static void cc_t1_mul_shade ()
1338
{
1339
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1340
GR_COMBINE_FACTOR_LOCAL,
1341
GR_COMBINE_LOCAL_ITERATED,
1342
GR_COMBINE_OTHER_TEXTURE);
1343
USE_T1 ();
1344
}
1345
1346
//Added by Gonetz
1347
static void cc__t0_add_t1__mul_shade ()
1348
{
1349
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1350
GR_COMBINE_FACTOR_LOCAL,
1351
GR_COMBINE_LOCAL_ITERATED,
1352
GR_COMBINE_OTHER_TEXTURE);
1353
T0_ADD_T1 ();
1354
}
1355
1356
static void cc__t0_mul_shade__add__t1_mul_shade ()
1357
{
1358
//combiner is used in Spiderman. It seems that t0 is used instead of t1
1359
if (cmb.combine_ext)
1360
{
1361
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1362
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1363
GR_CMBX_ITRGB, 0,
1364
GR_CMBX_ZERO, 0);
1365
cmb.tex |= 1;
1366
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
1367
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1368
GR_CMBX_ZERO, 1,
1369
GR_CMBX_B, 0);
1370
}
1371
else
1372
{
1373
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1374
GR_COMBINE_FACTOR_LOCAL,
1375
GR_COMBINE_LOCAL_ITERATED,
1376
GR_COMBINE_OTHER_TEXTURE);
1377
USE_T0 ();
1378
}
1379
}
1380
1381
static void cc__t0_mul_prim__inter_env_using_enva ()
1382
{
1383
wxUint32 enva = rdp.env_color&0xFF;
1384
if (enva == 0xFF)
1385
cc_env ();
1386
else if (enva == 0)
1387
cc_t0_mul_prim ();
1388
else if (cmb.combine_ext)
1389
{
1390
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1391
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
1392
GR_CMBX_TMU_CCOLOR, 0,
1393
GR_CMBX_ZERO, 0);
1394
cmb.tex |= 1;
1395
cmb.tex_ccolor = rdp.prim_color;
1396
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
1397
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1398
GR_CMBX_CONSTANT_COLOR, 0,
1399
GR_CMBX_B, 0);
1400
SETSHADE_ENV();
1401
CC_ENVA();
1402
}
1403
else
1404
{
1405
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1406
GR_COMBINE_FACTOR_LOCAL,
1407
GR_COMBINE_LOCAL_ITERATED,
1408
GR_COMBINE_OTHER_TEXTURE);
1409
SETSHADE_PRIM();
1410
INTERSHADE_2 (rdp.env_color & 0xFFFFFF00, rdp.env_color & 0xFF);
1411
USE_T0 ();
1412
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1413
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
1414
MOD_0_FAC (rdp.env_color & 0xFF);
1415
}
1416
}
1417
1418
1419
static void cc__t1_inter_t0_using_t1__mul_shade ()
1420
{
1421
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1422
GR_COMBINE_FACTOR_LOCAL,
1423
GR_COMBINE_LOCAL_ITERATED,
1424
GR_COMBINE_OTHER_TEXTURE);
1425
if (cmb.combine_ext)
1426
{
1427
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1428
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1429
GR_CMBX_ZERO, 0,
1430
GR_CMBX_B, 0);
1431
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1432
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1433
GR_CMBX_B, 0,
1434
GR_CMBX_B, 0);
1435
cmb.tex |= 3;
1436
}
1437
else
1438
{
1439
T0_INTER_T1_USING_FACTOR (0x7F);
1440
}
1441
}
1442
1443
//Added by Gonetz
1444
static void cc__t1_inter_t0_using_enva__mul_shade ()
1445
{
1446
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1447
GR_COMBINE_FACTOR_LOCAL,
1448
GR_COMBINE_LOCAL_ITERATED,
1449
GR_COMBINE_OTHER_TEXTURE);
1450
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
1451
T1_INTER_T0_USING_FACTOR (factor);
1452
}
1453
1454
//Added by Gonetz
1455
static void cc__t1_inter_t0_using_shadea__mul_shade ()
1456
{
1457
if (!cmb.combine_ext) {
1458
cc_t0_mul_shade ();
1459
return;
1460
}
1461
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1462
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
1463
GR_CMBX_ITRGB, 0,
1464
GR_CMBX_ZERO, 0);
1465
T1_INTER_T0_USING_SHADEA ();
1466
}
1467
1468
//Added by Gonetz
1469
static void cc__t0_inter_one_using_prim__mul_shade ()
1470
{
1471
// (1-t0)*prim+t0, (cmb-0)*shade+0
1472
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1473
GR_COMBINE_FACTOR_LOCAL,
1474
GR_COMBINE_LOCAL_ITERATED,
1475
GR_COMBINE_OTHER_TEXTURE);
1476
if (cmb.combine_ext)
1477
{
1478
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
1479
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ONE_MINUS_X,
1480
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1481
GR_CMBX_B, 0);
1482
cmb.tex |= 1;
1483
cmb.tex_ccolor = rdp.prim_color;
1484
}
1485
else
1486
{
1487
USE_T0 ();
1488
MOD_0 (TMOD_TEX_INTER_COL_USING_COL1);
1489
MOD_0_COL (0xFFFFFF00);
1490
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
1491
}
1492
}
1493
1494
static void cc__t0_inter_one_using_primlod__mul_shade ()
1495
{
1496
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1497
GR_COMBINE_FACTOR_LOCAL,
1498
GR_COMBINE_LOCAL_ITERATED,
1499
GR_COMBINE_OTHER_TEXTURE);
1500
if (cmb.combine_ext)
1501
{
1502
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1503
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
1504
GR_CMBX_DETAIL_FACTOR, 0,
1505
GR_CMBX_B, 0);
1506
cmb.tex |= 1;
1507
percent = (float)lod_frac / 255.0f;
1508
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
1509
}
1510
else
1511
{
1512
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1513
MOD_0_COL (0xFFFFFF00);
1514
MOD_0_FAC (lod_frac);
1515
USE_T0 ();
1516
}
1517
}
1518
1519
//Added by Gonetz
1520
static void cc__t0_inter_env_using_enva__mul_shade ()
1521
{
1522
// (env-t0)*env_a+t0, (cmb-0)*shade+0
1523
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1524
GR_COMBINE_FACTOR_LOCAL,
1525
GR_COMBINE_LOCAL_ITERATED,
1526
GR_COMBINE_OTHER_TEXTURE);
1527
if (cmb.combine_ext)
1528
{
1529
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1530
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1531
GR_CMBX_TMU_CALPHA, 0,
1532
GR_CMBX_B, 0);
1533
cmb.tex |= 1;
1534
cmb.tex_ccolor = rdp.env_color;
1535
}
1536
else
1537
{
1538
USE_T0 ();
1539
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1540
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
1541
MOD_0_FAC (rdp.env_color&0xFF);
1542
}
1543
}
1544
1545
//Added by Gonetz
1546
static void cc__t0_inter_env_using_shadea__mul_shade ()
1547
{
1548
// (env-t0)*shade_a+t0, (cmb-0)*shade+0
1549
if (cmb.combine_ext)
1550
{
1551
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1552
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1553
GR_CMBX_ITALPHA, 0,
1554
GR_CMBX_B, 0);
1555
cmb.tex |= 1;
1556
cmb.tex_ccolor = rdp.env_color;
1557
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1558
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
1559
GR_CMBX_ITRGB, 0,
1560
GR_CMBX_ZERO, 0);
1561
}
1562
else
1563
{
1564
cc_t0_mul_shade ();
1565
}
1566
}
1567
1568
static void cc__t0_mul_prim_add_env__mul_shade ()
1569
{
1570
if (cmb.combine_ext)
1571
{
1572
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1573
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1574
GR_CMBX_TMU_CCOLOR, 0,
1575
GR_CMBX_ZERO, 0);
1576
cmb.tex |= 1;
1577
cmb.tex_ccolor = rdp.prim_color;
1578
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1579
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
1580
GR_CMBX_ITRGB, 0,
1581
GR_CMBX_ZERO, 0);
1582
CC_ENV ();
1583
}
1584
else
1585
{
1586
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1587
GR_COMBINE_FACTOR_LOCAL,
1588
GR_COMBINE_LOCAL_ITERATED,
1589
GR_COMBINE_OTHER_TEXTURE);
1590
MOD_0 (TMOD_TEX_SCALE_COL_ADD_COL);
1591
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1592
MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);
1593
USE_T0 ();
1594
}
1595
}
1596
1597
static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade ()
1598
{
1599
if (cmb.combine_ext)
1600
{
1601
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1602
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1603
GR_CMBX_ZERO, 0,
1604
GR_CMBX_B, 0);
1605
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1606
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1607
GR_CMBX_DETAIL_FACTOR, 0,
1608
GR_CMBX_ZERO, 0);
1609
cmb.tex |= 3;
1610
percent = (float)lod_frac / 255.0f;
1611
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
1612
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1613
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
1614
GR_CMBX_ITRGB, 0,
1615
GR_CMBX_ZERO, 0);
1616
CC_PRIM ();
1617
}
1618
else
1619
{
1620
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1621
GR_COMBINE_FACTOR_LOCAL,
1622
GR_COMBINE_LOCAL_ITERATED,
1623
GR_COMBINE_OTHER_TEXTURE);
1624
T0_INTER_T1_USING_FACTOR (lod_frac);
1625
}
1626
}
1627
1628
static void cc__t1_sub_prim_mul_t0__mul_shade ()
1629
{
1630
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1631
GR_COMBINE_FACTOR_LOCAL,
1632
GR_COMBINE_LOCAL_ITERATED,
1633
GR_COMBINE_OTHER_TEXTURE);
1634
if (cmb.combine_ext)
1635
{
1636
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1637
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1638
GR_CMBX_ZERO, 0,
1639
GR_CMBX_B, 0);
1640
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1641
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
1642
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1643
GR_CMBX_ZERO, 0);
1644
cmb.tex_ccolor = rdp.prim_color;
1645
cmb.tex |= 3;
1646
}
1647
else
1648
{
1649
T0_MUL_T1 ();
1650
}
1651
}
1652
1653
static void cc__t1_sub_t0_mul_t0_add_shade__mul_shade () //Aded by Gonetz
1654
{
1655
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1656
GR_COMBINE_FACTOR_ONE,
1657
GR_COMBINE_LOCAL_ITERATED,
1658
GR_COMBINE_OTHER_TEXTURE);
1659
if (cmb.combine_ext)
1660
{
1661
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1662
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1663
GR_CMBX_ZERO, 0,
1664
GR_CMBX_B, 0);
1665
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1666
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1667
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1668
GR_CMBX_ITRGB, 0);
1669
cmb.tex |= 3;
1670
}
1671
else
1672
{
1673
T1_SUB_T0_MUL_T0 ();
1674
}
1675
}
1676
1677
static void cc__one_sub_shade_mul_t0_add_shade__mul_shade ()
1678
{
1679
if (cmb.combine_ext)
1680
{
1681
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1682
GR_CMBX_ITRGB, GR_FUNC_MODE_ONE_MINUS_X,
1683
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1684
GR_CMBX_B, 0);
1685
cmb.tex |= 1;
1686
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1687
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
1688
GR_CMBX_ITRGB, 0,
1689
GR_CMBX_ZERO, 0);
1690
}
1691
else
1692
{
1693
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1694
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
1695
GR_COMBINE_LOCAL_ITERATED,
1696
GR_COMBINE_OTHER_TEXTURE);
1697
USE_T0 ();
1698
}
1699
}
1700
1701
static void cc__t0_sub_prim_mul_t1_add_t1__mul_shade ()
1702
{
1703
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1704
GR_COMBINE_FACTOR_LOCAL,
1705
GR_COMBINE_LOCAL_ITERATED,
1706
GR_COMBINE_OTHER_TEXTURE);
1707
if (rdp.prim_color & 0xFFFFFF00)
1708
{
1709
MOD_0 (TMOD_TEX_SUB_COL);
1710
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1711
}
1712
if (cmb.combine_ext)
1713
{
1714
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1715
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1716
GR_CMBX_ZERO, 0,
1717
GR_CMBX_B, 0);
1718
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1719
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1720
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1721
GR_CMBX_B, 0);
1722
cmb.tex |= 3;
1723
}
1724
else
1725
{
1726
T0_MUL_T1 ();
1727
}
1728
}
1729
1730
static void cc__t1_sub_env_mul_t0_add_t0__mul_shade ()
1731
{
1732
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1733
GR_COMBINE_FACTOR_LOCAL,
1734
GR_COMBINE_LOCAL_ITERATED,
1735
GR_COMBINE_OTHER_TEXTURE);
1736
if (cmb.combine_ext)
1737
{
1738
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1739
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
1740
GR_CMBX_ZERO, 1,
1741
GR_CMBX_ZERO, 0);
1742
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1743
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1744
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1745
GR_CMBX_B, 0);
1746
cmb.tex_ccolor = rdp.env_color;
1747
cmb.tex |= 3;
1748
}
1749
else
1750
{
1751
MOD_1 (TMOD_TEX_SUB_COL);
1752
MOD_1_COL (rdp.env_color & 0xFFFFFF00);
1753
T0_MUL_T1_ADD_T0 ();
1754
}
1755
}
1756
1757
static void cc__t0_mul_prima_add_prim_mul__shade ()
1758
{
1759
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1760
GR_COMBINE_FACTOR_LOCAL,
1761
GR_COMBINE_LOCAL_ITERATED,
1762
GR_COMBINE_OTHER_TEXTURE);
1763
if (cmb.combine_ext)
1764
{
1765
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1766
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
1767
GR_CMBX_TMU_CALPHA, 0,
1768
GR_CMBX_B, 0);
1769
cmb.tex_ccolor = rdp.prim_color;
1770
cmb.tex |= 1;
1771
}
1772
else
1773
{
1774
MOD_0 (TMOD_TEX_SCALE_FAC_ADD_COL);
1775
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1776
MOD_0_FAC (rdp.prim_color & 0xFF);
1777
USE_T0 ();
1778
}
1779
}
1780
1781
static void cc__t0_inter_prim_using_prima__inter_env_using_enva ()
1782
{
1783
if (cmb.combine_ext)
1784
{
1785
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1786
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1787
GR_CMBX_TMU_CALPHA, 0,
1788
GR_CMBX_B, 0);
1789
cmb.tex_ccolor = rdp.prim_color;
1790
cmb.tex |= 1;
1791
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
1792
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1793
GR_CMBX_CONSTANT_COLOR, 0,
1794
GR_CMBX_B, 0);
1795
CC_ENVA ();
1796
SETSHADE_ENV ();
1797
}
1798
else
1799
{
1800
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1801
GR_COMBINE_FACTOR_TEXTURE_RGB,
1802
GR_COMBINE_LOCAL_ITERATED,
1803
GR_COMBINE_OTHER_CONSTANT);
1804
CC_1SUBENVA ();
1805
SETSHADE_ENV ();
1806
SETSHADE_ENVA ();
1807
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1808
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1809
MOD_0_FAC (rdp.prim_color & 0xFF);
1810
USE_T0 ();
1811
}
1812
}
1813
1814
static void cc_prim_inter_t1_mul_shade_using_texa ()
1815
{
1816
if (cmb.combine_ext)
1817
{
1818
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1819
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1820
GR_CMBX_ZERO, 0,
1821
GR_CMBX_B, 0);
1822
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1823
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1824
GR_CMBX_ITRGB, 0,
1825
GR_CMBX_ZERO, 0);
1826
cmb.tex |= 3;
1827
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1828
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
1829
GR_CMBX_TEXTURE_ALPHA, 0,
1830
GR_CMBX_B, 0);
1831
}
1832
else
1833
{
1834
cc_t1_mul_shade ();
1835
}
1836
}
1837
1838
static void cc__prim_inter_t0_using_t0a__mul_shade ()
1839
{
1840
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1841
GR_COMBINE_FACTOR_LOCAL,
1842
GR_COMBINE_LOCAL_ITERATED,
1843
GR_COMBINE_OTHER_TEXTURE);
1844
if (cmb.combine_ext)
1845
{
1846
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1847
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
1848
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
1849
GR_CMBX_B, 0);
1850
cmb.tex_ccolor = rdp.prim_color;
1851
cmb.tex |= 1;
1852
}
1853
else
1854
{
1855
MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);
1856
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1857
USE_T0 ();
1858
}
1859
}
1860
1861
static void cc__prim_inter_t0_using_t0a__inter_env_using_enva ()
1862
{
1863
if (cmb.combine_ext)
1864
{
1865
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1866
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
1867
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
1868
GR_CMBX_B, 0);
1869
cmb.tex_ccolor = rdp.prim_color;
1870
cmb.tex |= 1;
1871
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
1872
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1873
GR_CMBX_CONSTANT_COLOR, 0,
1874
GR_CMBX_B, 0);
1875
CC_ENVA ();
1876
SETSHADE_ENV ();
1877
}
1878
else
1879
{
1880
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1881
GR_COMBINE_FACTOR_TEXTURE_RGB,
1882
GR_COMBINE_LOCAL_ITERATED,
1883
GR_COMBINE_OTHER_CONSTANT);
1884
CC_1SUBENVA ();
1885
SETSHADE_ENV ();
1886
SETSHADE_ENVA ();
1887
MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);
1888
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1889
USE_T0 ();
1890
}
1891
}
1892
1893
// ** A*B **
1894
1895
static void cc__prim_inter_t0_using_shadea__mul_shade ()
1896
{
1897
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1898
GR_COMBINE_FACTOR_LOCAL,
1899
GR_COMBINE_LOCAL_ITERATED,
1900
GR_COMBINE_OTHER_TEXTURE);
1901
PRIM_INTER_T0_USING_SHADEA ();
1902
}
1903
1904
static void cc_t0_sub_shade_mul_shadea_add_shade ();
1905
static void cc__shade_inter_t0_using_shadea__mul_shade ()
1906
{
1907
if (cmb.combine_ext)
1908
{
1909
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1910
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
1911
GR_CMBX_ITALPHA, 0,
1912
GR_CMBX_B, 0);
1913
cmb.tex |= 1;
1914
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1915
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
1916
GR_CMBX_ITRGB, 0,
1917
GR_CMBX_ZERO, 0);
1918
}
1919
else
1920
{
1921
cc_t0_sub_shade_mul_shadea_add_shade ();
1922
}
1923
}
1924
1925
static void cc__prim_inter_env_using_enva__mul_shade ()
1926
{
1927
const float ea = ((float)(rdp.env_color&0xFF)) / 255.0f;
1928
const float ea_i = 1.0f - ea;
1929
wxUint32 pr = (rdp.prim_color >> 24)&0xFF;
1930
wxUint32 pg = (rdp.prim_color >> 16)&0xFF;
1931
wxUint32 pb = (rdp.prim_color >> 8)&0xFF;
1932
wxUint32 er = (rdp.env_color >> 24)&0xFF;
1933
wxUint32 eg = (rdp.env_color >> 16)&0xFF;
1934
wxUint32 eb = (rdp.env_color >> 8)&0xFF;
1935
wxUint32 r = min(255, (wxUint32)(er*ea + pr*ea_i));
1936
wxUint32 g = min(255, (wxUint32)(eg*ea + pg*ea_i));
1937
wxUint32 b = min(255, (wxUint32)(eb*ea + pb*ea_i));
1938
wxUint32 col = (r << 24) | (g << 16) | (b << 8) | 0xFF;
1939
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1940
GR_COMBINE_FACTOR_LOCAL,
1941
GR_COMBINE_LOCAL_ITERATED,
1942
GR_COMBINE_OTHER_CONSTANT);
1943
CC (col);
1944
}
1945
1946
//Added by Gonetz
1947
static void cc_prim_mul_env ()
1948
{
1949
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1950
GR_COMBINE_FACTOR_LOCAL,
1951
GR_COMBINE_LOCAL_ITERATED,
1952
GR_COMBINE_OTHER_CONSTANT);
1953
CC_PRIM ();
1954
SETSHADE_ENV ();
1955
}
1956
1957
static void cc_prim_mul_shade ()
1958
{
1959
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1960
GR_COMBINE_FACTOR_LOCAL,
1961
GR_COMBINE_LOCAL_ITERATED,
1962
GR_COMBINE_OTHER_CONSTANT);
1963
CC_PRIM ();
1964
}
1965
1966
static void cc_prim_mul_shadea ()
1967
{
1968
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1969
GR_COMBINE_FACTOR_LOCAL,
1970
GR_COMBINE_LOCAL_ITERATED,
1971
GR_COMBINE_OTHER_CONSTANT);
1972
SETSHADE_SHADE_A ();
1973
CC_PRIM ();
1974
}
1975
1976
static void cc_env_mul_shade ()
1977
{
1978
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1979
GR_COMBINE_FACTOR_LOCAL,
1980
GR_COMBINE_LOCAL_ITERATED,
1981
GR_COMBINE_OTHER_CONSTANT);
1982
CC_ENV ();
1983
}
1984
1985
static void cc_env_mul_enva ()
1986
{
1987
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1988
GR_COMBINE_FACTOR_OTHER_ALPHA,
1989
GR_COMBINE_LOCAL_NONE,
1990
GR_COMBINE_OTHER_CONSTANT);
1991
CC_ENV ();
1992
CA_ENV ();
1993
}
1994
1995
static void cc_scale_mul_shade ()
1996
{
1997
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1998
GR_COMBINE_FACTOR_LOCAL,
1999
GR_COMBINE_LOCAL_ITERATED,
2000
GR_COMBINE_OTHER_CONSTANT);
2001
CC (rdp.SCALE);
2002
}
2003
2004
// ** A+B **
2005
2006
static void cc_t0_add_prim () //Aded by Gonetz
2007
{
2008
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2009
GR_COMBINE_FACTOR_ONE,
2010
GR_COMBINE_LOCAL_CONSTANT,
2011
GR_COMBINE_OTHER_TEXTURE);
2012
CC_PRIM ();
2013
USE_T0 ();
2014
}
2015
2016
static void cc__t0_mul_t1__add_prim () //Aded by Gonetz
2017
{
2018
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2019
GR_COMBINE_FACTOR_ONE,
2020
GR_COMBINE_LOCAL_CONSTANT,
2021
GR_COMBINE_OTHER_TEXTURE);
2022
CC_PRIM ();
2023
T0_MUL_T1 ();
2024
}
2025
2026
static void cc_t0_add_env ()
2027
{
2028
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2029
GR_COMBINE_FACTOR_ONE,
2030
GR_COMBINE_LOCAL_CONSTANT,
2031
GR_COMBINE_OTHER_TEXTURE);
2032
CC_ENV ();
2033
USE_T0 ();
2034
}
2035
2036
//Added by Gonetz
2037
static void cc__t0_mul_t1__add_env ()
2038
{
2039
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2040
GR_COMBINE_FACTOR_ONE,
2041
GR_COMBINE_LOCAL_CONSTANT,
2042
GR_COMBINE_OTHER_TEXTURE);
2043
CC_ENV ();
2044
T0_MUL_T1 ();
2045
}
2046
2047
static void cc__t0_mul_t1__add_env_mul__t0_mul_t1__add_env ()
2048
{
2049
if (cmb.combine_ext)
2050
{
2051
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2052
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2053
GR_CMBX_ZERO, 0,
2054
GR_CMBX_B, 0);
2055
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2056
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
2057
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
2058
GR_CMBX_B, 0);
2059
cmb.tex_ccolor = rdp.env_color;
2060
cmb.tex |= 3;
2061
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2062
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
2063
GR_CMBX_TEXTURE_RGB, 0,
2064
GR_CMBX_ZERO, 0);
2065
}
2066
else
2067
cc__t0_mul_t1__add_env();
2068
}
2069
2070
static void cc_t0_add_shade () //Aded by Gonetz
2071
{
2072
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2073
GR_COMBINE_FACTOR_ONE,
2074
GR_COMBINE_LOCAL_ITERATED,
2075
GR_COMBINE_OTHER_TEXTURE);
2076
USE_T0 ();
2077
}
2078
2079
static void cc__t0_mul_t1__add_shade () //Aded by Gonetz
2080
{
2081
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2082
GR_COMBINE_FACTOR_ONE,
2083
GR_COMBINE_LOCAL_ITERATED,
2084
GR_COMBINE_OTHER_TEXTURE);
2085
T0_MUL_T1 ();
2086
}
2087
2088
static void cc_prim_add_env ()
2089
{
2090
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2091
GR_COMBINE_FACTOR_ONE,
2092
GR_COMBINE_LOCAL_CONSTANT,
2093
GR_COMBINE_OTHER_ITERATED);
2094
CC_ENV ();
2095
SETSHADE_PRIM ();
2096
}
2097
2098
static void cc_t0_add_prim_mul_one_sub_t0_add_t0 () //Aded by Gonetz
2099
{
2100
if (cmb.combine_ext)
2101
{
2102
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
2103
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2104
GR_CMBX_LOCAL_TEXTURE_RGB, 1,
2105
GR_CMBX_B, 0);
2106
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2107
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
2108
GR_CMBX_ZERO, 1,
2109
GR_CMBX_ZERO, 0);
2110
cmb.tex_ccolor = rdp.prim_color;
2111
cmb.tex |= 1;
2112
}
2113
else
2114
{
2115
cc_t0_add_prim ();
2116
}
2117
}
2118
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
2121
{
2122
if (cmb.combine_ext)
2123
{
2124
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2125
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
2126
GR_CMBX_TMU_CCOLOR, 1,
2127
GR_CMBX_B, 0);
2128
CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
2129
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2130
GR_CMBX_CONSTANT_COLOR, 0,
2131
GR_CMBX_B, 0);
2132
cmb.tex_ccolor = rdp.prim_color;
2133
CC_PRIMA();
2134
cmb.tex |= 3; //hw frame buffer allocated as tile1, but not used in combiner
2135
}
2136
else
2137
{
2138
cc_one_sub_prim_mul_t0_add_prim();
2139
// cc_t0 ();
2140
}
2141
}
2142
2143
static void cc_prim_add_shade () //Aded by Gonetz
2144
{
2145
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2146
GR_COMBINE_FACTOR_ONE,
2147
GR_COMBINE_LOCAL_ITERATED,
2148
GR_COMBINE_OTHER_CONSTANT);
2149
CC_PRIM ();
2150
}
2151
2152
static void cc_env_add_shade () //Aded by Gonetz
2153
{
2154
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2155
GR_COMBINE_FACTOR_ONE,
2156
GR_COMBINE_LOCAL_ITERATED,
2157
GR_COMBINE_OTHER_CONSTANT);
2158
CC_ENV ();
2159
}
2160
2161
static void cc_shade_add_shade () //Aded by Gonetz
2162
{
2163
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2164
GR_COMBINE_FACTOR_ONE,
2165
GR_COMBINE_LOCAL_ITERATED,
2166
GR_COMBINE_OTHER_ITERATED);
2167
}
2168
2169
// ** A-B **
2170
static void cc__t0_inter_t1_using_enva__sub_env () //Aded by Gonetz
2171
{
2172
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
2173
GR_COMBINE_FACTOR_ONE,
2174
GR_COMBINE_LOCAL_CONSTANT,
2175
GR_COMBINE_OTHER_TEXTURE);
2176
CC_ENV ();
2177
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
2178
T0_INTER_T1_USING_FACTOR (factor);
2179
}
2180
2181
static void cc_t0_sub__shade_mul_center ()
2182
{
2183
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
2184
GR_COMBINE_FACTOR_ONE,
2185
GR_COMBINE_LOCAL_ITERATED,
2186
GR_COMBINE_OTHER_TEXTURE);
2187
MULSHADE(rdp.CENTER);
2188
USE_T0 ();
2189
}
2190
2191
// ** A-B*C **
2192
static void cc_env_sub__t0_sub_t1_mul_primlod__mul_prim () //Aded by Gonetz
2193
{
2194
if (cmb.combine_ext)
2195
{
2196
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2197
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2198
GR_CMBX_ZERO, 0,
2199
GR_CMBX_B, 0);
2200
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2201
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2202
GR_CMBX_ITRGB, 0,
2203
GR_CMBX_ZERO, 0);
2204
cmb.tex |= 3;
2205
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
2206
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2207
GR_CMBX_ZERO, 1,
2208
GR_CMBX_ZERO, 0);
2209
SETSHADE_PRIM ();
2210
SETSHADE_PRIMLOD ();
2211
CC_ENV ();
2212
}
2213
else
2214
{
2215
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2216
GR_COMBINE_FACTOR_TEXTURE_RGB,
2217
GR_COMBINE_LOCAL_CONSTANT,
2218
GR_COMBINE_OTHER_ITERATED);
2219
SETSHADE_PRIM ();
2220
CC_ENV ();
2221
T1_INTER_T0_USING_FACTOR (lod_frac);
2222
}
2223
}
2224
2225
static void cc_env_sub__t0_mul_scale_add_env__mul_prim ()
2226
{
2227
if (cmb.combine_ext)
2228
{
2229
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2230
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
2231
GR_CMBX_TMU_CCOLOR, 0,
2232
GR_CMBX_B, 0);
2233
cmb.tex_ccolor = rdp.SCALE;
2234
cmb.tex |= 1;
2235
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2236
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
2237
GR_CMBX_CONSTANT_COLOR, 0,
2238
GR_CMBX_B, 0);
2239
SETSHADE_ENV ();
2240
CC_PRIM ();
2241
}
2242
else
2243
cc_t0_add_env ();
2244
}
2245
2246
static void cc_one_sub__one_sub_t0_mul_enva_add_prim__mul_prim () //Aded by Gonetz
2247
{
2248
if (cmb.combine_ext)
2249
{
2250
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
2251
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
2252
GR_CMBX_DETAIL_FACTOR, 0,
2253
GR_CMBX_B, 0);
2254
cmb.tex_ccolor = rdp.prim_color;
2255
cmb.tex |= 1;
2256
percent = (float)(rdp.env_color&0xFF) / 255.0f;
2257
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
2258
CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_X,
2259
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2260
GR_CMBX_CONSTANT_COLOR, 0,
2261
GR_CMBX_ZERO, 1);
2262
CC_PRIM ();
2263
}
2264
else
2265
{
2266
cc_one ();
2267
}
2268
}
2269
2270
// ** A+B*C **
2271
//Aded by Gonetz
2272
static void cc_t0_add_env_mul_k5 ()
2273
{
2274
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2275
GR_COMBINE_FACTOR_ONE,
2276
GR_COMBINE_LOCAL_CONSTANT,
2277
GR_COMBINE_OTHER_TEXTURE);
2278
float scale = rdp.K5 / 255.0f;
2279
wxUint8 r = (wxUint8)(rdp.env_color >> 24) & 0xFF;
2280
r = (wxUint8)(r*scale);
2281
wxUint8 g = (wxUint8)(rdp.env_color >> 16) & 0xFF;
2282
g = (wxUint8)(g*scale);
2283
wxUint8 b = (wxUint8)(rdp.env_color >> 8) & 0xFF;
2284
b = (wxUint8)(b*scale);
2285
CC((r<<24)|(g<<16)|(b<<8));
2286
USE_T0 ();
2287
}
2288
2289
static void cc_t0_add_shade_mul_env ()
2290
{
2291
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2292
GR_COMBINE_FACTOR_ONE,
2293
GR_COMBINE_LOCAL_ITERATED,
2294
GR_COMBINE_OTHER_TEXTURE);
2295
MULSHADE_ENV ();
2296
USE_T0 ();
2297
}
2298
2299
static void cc__t1_mul_t0_add_t0__add_prim_mul_shade () //Aded by Gonetz
2300
{
2301
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2302
GR_COMBINE_FACTOR_ONE,
2303
GR_COMBINE_LOCAL_ITERATED,
2304
GR_COMBINE_OTHER_TEXTURE);
2305
MULSHADE_PRIM ();
2306
rdp.best_tex = 0;
2307
cmb.tex |= 3;
2308
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;
2309
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
2310
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL;
2311
}
2312
2313
static void cc__t0_sub_env_mul_enva__add_prim_mul_shade ()
2314
{
2315
if (cmb.combine_ext)
2316
{
2317
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2318
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
2319
GR_CMBX_DETAIL_FACTOR, 0,
2320
GR_CMBX_ZERO, 0);
2321
cmb.tex_ccolor = rdp.env_color;
2322
cmb.tex |= 1;
2323
percent = (float)(rdp.env_color&0xFF) / 255.0f;
2324
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
2325
2326
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
2327
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2328
GR_CMBX_CONSTANT_COLOR, 0,
2329
GR_CMBX_B, 0);
2330
CC_PRIM ();
2331
}
2332
else {
2333
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2334
GR_COMBINE_FACTOR_ONE,
2335
GR_COMBINE_LOCAL_ITERATED,
2336
GR_COMBINE_OTHER_TEXTURE);
2337
MULSHADE_PRIM ();
2338
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
2339
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
2340
MOD_0_FAC (rdp.env_color & 0xFF);
2341
USE_T0 ();
2342
}
2343
}
2344
2345
// ** A*B+C **
2346
//Added by Gonetz
2347
static void cc_t0_mul_prim_add_t1 ()
2348
{
2349
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2350
GR_COMBINE_FACTOR_ONE,
2351
GR_COMBINE_LOCAL_NONE,
2352
GR_COMBINE_OTHER_TEXTURE);
2353
if (cmb.combine_ext)
2354
{
2355
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2356
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2357
GR_CMBX_ZERO, 0,
2358
GR_CMBX_B, 0);
2359
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2360
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2361
GR_CMBX_TMU_CCOLOR, 0,
2362
GR_CMBX_B, 0);
2363
cmb.tex |= 3;
2364
cmb.tex_ccolor = rdp.prim_color;
2365
}
2366
else
2367
{
2368
MOD_0 (TMOD_TEX_MUL_COL);
2369
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
2370
T0_ADD_T1 ();
2371
}
2372
}
2373
2374
static void cc_shirt ()
2375
{
2376
// (t1-0)*prim+0, (1-t0)*t1+cmb
2377
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2378
GR_COMBINE_FACTOR_ONE,
2379
GR_COMBINE_LOCAL_NONE,
2380
GR_COMBINE_OTHER_TEXTURE);
2381
if (cmb.combine_ext)
2382
{
2383
/*
2384
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2385
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2386
GR_CMBX_TMU_CCOLOR, 0,
2387
GR_CMBX_ZERO, 0);
2388
//*/
2389
//*
2390
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2391
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2392
GR_CMBX_ZERO, 0,
2393
GR_CMBX_B, 0);
2394
//*/
2395
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2396
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2397
GR_CMBX_LOCAL_TEXTURE_RGB, 1,
2398
GR_CMBX_B, 0);
2399
cmb.tex |= 3;
2400
cmb.tex_ccolor = rdp.prim_color;
2401
}
2402
else
2403
{
2404
MOD_1 (TMOD_TEX_MUL_COL);
2405
MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
2406
T0_ADD_T1 ();
2407
}
2408
}
2409
2410
static void cc_t1_mul_prim_add_prim ()
2411
{
2412
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2413
GR_COMBINE_FACTOR_TEXTURE_RGB,
2414
GR_COMBINE_LOCAL_CONSTANT,
2415
GR_COMBINE_OTHER_ITERATED);
2416
SETSHADE_PRIM ();
2417
CC_PRIM ();
2418
USE_T0 ();
2419
}
2420
2421
//Added by Gonetz
2422
static void cc_t0_mul_prim_add_env ()
2423
{
2424
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2425
GR_COMBINE_FACTOR_TEXTURE_RGB,
2426
GR_COMBINE_LOCAL_CONSTANT,
2427
GR_COMBINE_OTHER_ITERATED);
2428
SETSHADE_PRIM ();
2429
CC_ENV ();
2430
USE_T0 ();
2431
}
2432
2433
//Added by Gonetz
2434
static void cc_t1_mul_prim_add_env ()
2435
{
2436
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2437
GR_COMBINE_FACTOR_TEXTURE_RGB,
2438
GR_COMBINE_LOCAL_CONSTANT,
2439
GR_COMBINE_OTHER_ITERATED);
2440
SETSHADE_PRIM ();
2441
CC_ENV ();
2442
USE_T1 ();
2443
}
2444
2445
static void cc__t0_add_primlod__mul_prim_add_env ()
2446
{
2447
if (cmb.combine_ext)
2448
{
2449
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2450
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
2451
GR_CMBX_ZERO, 1,
2452
GR_CMBX_ZERO, 0);
2453
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2454
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
2455
GR_CMBX_ITRGB, 0,
2456
GR_CMBX_B, 0);
2457
CC_PRIMLOD ();
2458
cmb.tex_ccolor = cmb.ccolor;
2459
CC_ENV ();
2460
SETSHADE_PRIM ();
2461
cmb.tex |= 1;
2462
}
2463
else
2464
{
2465
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2466
GR_COMBINE_FACTOR_TEXTURE_RGB,
2467
GR_COMBINE_LOCAL_CONSTANT,
2468
GR_COMBINE_OTHER_ITERATED);
2469
CC_PRIMLOD ();
2470
MOD_0 (TMOD_TEX_ADD_COL);
2471
MOD_0_COL (cmb.ccolor & 0xFFFFFF00);
2472
SETSHADE_PRIM ();
2473
CC_ENV ();
2474
USE_T0 ();
2475
}
2476
}
2477
2478
//Added by Gonetz
2479
static void cc_t0_mul_prim_mul_shade_add_prim_mul_shade ()
2480
{
2481
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2482
GR_COMBINE_FACTOR_LOCAL,
2483
GR_COMBINE_LOCAL_ITERATED,
2484
GR_COMBINE_OTHER_TEXTURE);
2485
MULSHADE_PRIM ();
2486
USE_T0 ();
2487
}
2488
2489
//Added by Gonetz
2490
static void cc__t0_inter_t1_using_primlod__mul_prim_add_env ()
2491
{
2492
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2493
GR_COMBINE_FACTOR_TEXTURE_RGB,
2494
GR_COMBINE_LOCAL_CONSTANT,
2495
GR_COMBINE_OTHER_ITERATED);
2496
SETSHADE_PRIM ();
2497
CC_ENV ();
2498
T0_INTER_T1_USING_FACTOR (lod_frac);
2499
}
2500
2501
static void cc__t1_sub_prim_mul_enva_add_t0__mul_prim_add_env ()
2502
{
2503
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2504
GR_COMBINE_FACTOR_TEXTURE_RGB,
2505
GR_COMBINE_LOCAL_ITERATED,
2506
GR_COMBINE_OTHER_CONSTANT);
2507
CC_PRIM ();
2508
SETSHADE_ENV ();
2509
if (cmb.combine_ext)
2510
{
2511
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2512
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
2513
GR_CMBX_DETAIL_FACTOR, 0,
2514
GR_CMBX_ZERO, 0);
2515
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2516
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2517
GR_CMBX_ZERO, 1,
2518
GR_CMBX_ZERO, 0);
2519
cmb.tex_ccolor = rdp.prim_color;
2520
cmb.tex |= 3;
2521
percent = (float)(rdp.env_color&0xFF) / 255.0f;
2522
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
2523
}
2524
else
2525
{
2526
MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);
2527
MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
2528
MOD_1_FAC (rdp.env_color & 0xFF);
2529
T0_ADD_T1 ();
2530
}
2531
}
2532
2533
//Added by Gonetz
2534
static void cc__t0_inter_t1_using_primlod__mul_shade_add_env ()
2535
{
2536
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2537
GR_COMBINE_FACTOR_TEXTURE_RGB,
2538
GR_COMBINE_LOCAL_CONSTANT,
2539
GR_COMBINE_OTHER_ITERATED);
2540
CC_ENV ();
2541
T0_INTER_T1_USING_FACTOR (lod_frac);
2542
}
2543
2544
//Added by Gonetz
2545
static void cc__t1_sub_prim_mul_primlod_add_t0__mul_prim_add_env ()
2546
{
2547
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2548
GR_COMBINE_FACTOR_TEXTURE_RGB,
2549
GR_COMBINE_LOCAL_CONSTANT,
2550
GR_COMBINE_OTHER_ITERATED);
2551
SETSHADE_PRIM ();
2552
CC_ENV ();
2553
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
2554
}
2555
2556
//Aded by Gonetz
2557
static void cc__t0_mul_t1__mul_prim_add_env ()
2558
{
2559
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2560
GR_COMBINE_FACTOR_TEXTURE_RGB,
2561
GR_COMBINE_LOCAL_CONSTANT,
2562
GR_COMBINE_OTHER_ITERATED);
2563
CC_ENV ();
2564
MULSHADE_PRIM ();
2565
T0_MUL_T1 ();
2566
}
2567
2568
//Aded by Gonetz
2569
static void cc__t0_mul_t1__sub_prim_mul_env_add_shade ()
2570
{
2571
if (cmb.combine_ext)
2572
{
2573
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2574
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2575
GR_CMBX_TMU_CCOLOR, 0,
2576
GR_CMBX_ZERO, 0);
2577
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2578
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
2579
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
2580
GR_CMBX_B, 0);
2581
cmb.tex_ccolor = rdp.env_color;
2582
cmb.tex |= 3;
2583
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
2584
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
2585
GR_CMBX_ZERO, 1,
2586
GR_CMBX_TEXTURE_RGB, 0);
2587
CC_PRIMMULENV ();
2588
}
2589
else
2590
{
2591
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2592
GR_COMBINE_FACTOR_TEXTURE_RGB,
2593
GR_COMBINE_LOCAL_ITERATED,
2594
GR_COMBINE_OTHER_CONSTANT);
2595
CC_ENV ();
2596
T0_MUL_T1 ();
2597
}
2598
}
2599
2600
static void cc__t0_sub_prim_mul_t1_add_t1__mul_env_add_shade ()
2601
{
2602
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2603
GR_COMBINE_FACTOR_TEXTURE_RGB,
2604
GR_COMBINE_LOCAL_ITERATED,
2605
GR_COMBINE_OTHER_CONSTANT);
2606
CC_ENV ();
2607
if (rdp.prim_color & 0xFFFFFF00)
2608
{
2609
MOD_0 (TMOD_TEX_SUB_COL);
2610
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
2611
}
2612
if (cmb.combine_ext)
2613
{
2614
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2615
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2616
GR_CMBX_ZERO, 0,
2617
GR_CMBX_B, 0);
2618
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2619
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2620
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
2621
GR_CMBX_B, 0);
2622
cmb.tex |= 3;
2623
}
2624
else
2625
{
2626
T0_MUL_T1 ();
2627
}
2628
}
2629
2630
static void cc__t0_mul_t1__mul_shade_add_prim ()
2631
{
2632
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2633
GR_COMBINE_FACTOR_TEXTURE_RGB,
2634
GR_COMBINE_LOCAL_CONSTANT,
2635
GR_COMBINE_OTHER_ITERATED);
2636
CC_PRIM ();
2637
T0_MUL_T1 ();
2638
}
2639
2640
static void cc__t0_mul_shadea_add_env__mul_shade_add_prim ()
2641
{
2642
if (cmb.combine_ext)
2643
{
2644
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2645
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
2646
GR_CMBX_ITALPHA, 0,
2647
GR_CMBX_B, 0);
2648
cmb.tex_ccolor = rdp.env_color;
2649
cmb.tex |= 1;
2650
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2651
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
2652
GR_CMBX_ITRGB, 0,
2653
GR_CMBX_B, 0);
2654
CC_PRIM ();
2655
}
2656
else
2657
{
2658
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2659
GR_COMBINE_FACTOR_TEXTURE_RGB,
2660
GR_COMBINE_LOCAL_CONSTANT,
2661
GR_COMBINE_OTHER_ITERATED);
2662
MULSHADE_SHADEA ();
2663
CC_PRIM ();
2664
USE_T0 ();
2665
}
2666
}
2667
2668
static void cc__t0_mul_t1__mul_shade_add_env ()
2669
{
2670
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2671
GR_COMBINE_FACTOR_TEXTURE_RGB,
2672
GR_COMBINE_LOCAL_CONSTANT,
2673
GR_COMBINE_OTHER_ITERATED);
2674
CC_ENV ();
2675
T0_MUL_T1 ();
2676
}
2677
2678
//Added by Gonetz
2679
static void cc__t0_add_t1__mul_shade_add_env ()
2680
{
2681
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2682
GR_COMBINE_FACTOR_TEXTURE_RGB,
2683
GR_COMBINE_LOCAL_CONSTANT,
2684
GR_COMBINE_OTHER_ITERATED);
2685
CC_ENV ();
2686
T0_ADD_T1 ();
2687
}
2688
2689
static void cc__t1_mul_prima_add_t0__mul_shade_add_env ()
2690
{
2691
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2692
GR_COMBINE_FACTOR_TEXTURE_RGB,
2693
GR_COMBINE_LOCAL_CONSTANT,
2694
GR_COMBINE_OTHER_ITERATED);
2695
CC_ENV ();
2696
T1_MUL_PRIMA_ADD_T0 ();
2697
}
2698
2699
static void cc__t0_inter_t1_using_enva__mul_shade_add_prim ()
2700
{
2701
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2702
GR_COMBINE_FACTOR_TEXTURE_RGB,
2703
GR_COMBINE_LOCAL_CONSTANT,
2704
GR_COMBINE_OTHER_ITERATED);
2705
CC_PRIM ();
2706
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
2707
T0_INTER_T1_USING_FACTOR (factor);
2708
}
2709
2710
static void cc__t0_inter_t1_using_enva__mul_shade_add_env ()
2711
{
2712
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2713
GR_COMBINE_FACTOR_TEXTURE_RGB,
2714
GR_COMBINE_LOCAL_CONSTANT,
2715
GR_COMBINE_OTHER_ITERATED);
2716
CC_ENV ();
2717
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
2718
T0_INTER_T1_USING_FACTOR (factor);
2719
}
2720
2721
//Added by Gonetz
2722
static void cc_t0_mul_primlod_add_prim ()
2723
{
2724
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2725
GR_COMBINE_FACTOR_TEXTURE_RGB,
2726
GR_COMBINE_LOCAL_ITERATED,
2727
GR_COMBINE_OTHER_CONSTANT);
2728
SETSHADE_PRIM ();
2729
CC_PRIMLOD ();
2730
USE_T0 ();
2731
}
2732
2733
static void cc__t0_mul_primlod__add__prim_mul_shade ()
2734
{
2735
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2736
GR_COMBINE_FACTOR_TEXTURE_RGB,
2737
GR_COMBINE_LOCAL_ITERATED,
2738
GR_COMBINE_OTHER_CONSTANT);
2739
MULSHADE_PRIM ();
2740
CC_PRIMLOD ();
2741
USE_T0 ();
2742
}
2743
2744
//Added by Gonetz
2745
static void cc_t0_mul_primlod_add_prim_mul_shade_add_env ()
2746
{
2747
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2748
GR_COMBINE_FACTOR_TEXTURE_RGB,
2749
GR_COMBINE_LOCAL_ITERATED,
2750
GR_COMBINE_OTHER_CONSTANT);
2751
MULSHADE_PRIM ();
2752
ADDSHADE_ENV ();
2753
CC_PRIMLOD ();
2754
USE_T0 ();
2755
}
2756
2757
//Added by Gonetz
2758
static void cc_t1_mul_primlod_add_prim_mul_shade_add_env ()
2759
{
2760
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2761
GR_COMBINE_FACTOR_TEXTURE_RGB,
2762
GR_COMBINE_LOCAL_ITERATED,
2763
GR_COMBINE_OTHER_CONSTANT);
2764
MULSHADE_PRIM ();
2765
ADDSHADE_ENV ();
2766
CC_PRIMLOD ();
2767
USE_T1 ();
2768
}
2769
2770
static void cc__t0_inter_t1_using_primlod__mul_shade_add_prim ()
2771
{
2772
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2773
GR_COMBINE_FACTOR_TEXTURE_RGB,
2774
GR_COMBINE_LOCAL_CONSTANT,
2775
GR_COMBINE_OTHER_ITERATED);
2776
CC_PRIM ();
2777
T0_INTER_T1_USING_FACTOR (lod_frac);
2778
}
2779
2780
static void cc__t1_inter_t0_using_primlod__mul_shade_add_prim ()
2781
{
2782
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2783
GR_COMBINE_FACTOR_TEXTURE_RGB,
2784
GR_COMBINE_LOCAL_CONSTANT,
2785
GR_COMBINE_OTHER_ITERATED);
2786
CC_PRIM ();
2787
T1_INTER_T0_USING_FACTOR (lod_frac);
2788
}
2789
2790
//Added by Gonetz
2791
static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade_add_shade ()
2792
{
2793
if (cmb.combine_ext)
2794
{
2795
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2796
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2797
GR_CMBX_ZERO, 0,
2798
GR_CMBX_B, 0);
2799
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2800
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2801
GR_CMBX_DETAIL_FACTOR, 0,
2802
GR_CMBX_ZERO, 0);
2803
cmb.tex |= 3;
2804
percent = (float)lod_frac / 255.0f;
2805
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
2806
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2807
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
2808
GR_CMBX_ITRGB, 0,
2809
GR_CMBX_ITRGB, 0);
2810
CC_PRIM ();
2811
}
2812
else
2813
{
2814
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2815
GR_COMBINE_FACTOR_LOCAL,
2816
GR_COMBINE_LOCAL_ITERATED,
2817
GR_COMBINE_OTHER_TEXTURE);
2818
T0_INTER_T1_USING_FACTOR (lod_frac);
2819
}
2820
}
2821
2822
//Added by Gonetz
2823
static void cc__t0_inter_t1_using_half__mul_prim_add_env ()
2824
{
2825
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2826
GR_COMBINE_FACTOR_TEXTURE_RGB,
2827
GR_COMBINE_LOCAL_CONSTANT,
2828
GR_COMBINE_OTHER_ITERATED);
2829
SETSHADE_PRIM ();
2830
CC_ENV ();
2831
T0_INTER_T1_USING_FACTOR (0x7F);
2832
}
2833
2834
//Added by Gonetz
2835
static void cc__t0_inter_t1_using_t1__mul_prim_add_shade ()
2836
{
2837
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2838
GR_COMBINE_FACTOR_TEXTURE_RGB,
2839
GR_COMBINE_LOCAL_ITERATED,
2840
GR_COMBINE_OTHER_CONSTANT);
2841
CC_PRIM ();
2842
T0_INTER_T1_USING_T1 ();
2843
}
2844
2845
//Added by Gonetz
2846
static void cc_one_sub_t1_mul_t0a_add_t0_mul_env_add_prim ()
2847
{
2848
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2849
GR_COMBINE_FACTOR_ONE,
2850
GR_COMBINE_LOCAL_CONSTANT,
2851
GR_COMBINE_OTHER_TEXTURE);
2852
CC_PRIM ();
2853
MOD_0 (TMOD_TEX_MUL_COL);
2854
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
2855
rdp.best_tex = 0;
2856
cmb.tex |= 3;
2857
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;
2858
cmb.tmu1_invert = 1;
2859
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
2860
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA;
2861
}
2862
2863
//Added by Gonetz
2864
static void cc__t0_inter_t1_using_t1__mul_shade_add_prim ()
2865
{
2866
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2867
GR_COMBINE_FACTOR_TEXTURE_RGB,
2868
GR_COMBINE_LOCAL_CONSTANT,
2869
GR_COMBINE_OTHER_ITERATED);
2870
CC_PRIM ();
2871
T0_INTER_T1_USING_T1 ();
2872
}
2873
2874
//Added by Gonetz
2875
static void cc_t0_mul_prim_add_shade ()
2876
{
2877
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2878
GR_COMBINE_FACTOR_TEXTURE_RGB,
2879
GR_COMBINE_LOCAL_ITERATED,
2880
GR_COMBINE_OTHER_CONSTANT);
2881
CC_PRIM ();
2882
USE_T0 ();
2883
}
2884
2885
static void cc_t1_mul_prim_add_shade ()
2886
{
2887
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2888
GR_COMBINE_FACTOR_TEXTURE_RGB,
2889
GR_COMBINE_LOCAL_ITERATED,
2890
GR_COMBINE_OTHER_CONSTANT);
2891
CC_PRIM ();
2892
USE_T1 ();
2893
}
2894
2895
//Added by Gonetz
2896
static void cc_t0_mul_env_add_prim ()
2897
{
2898
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2899
GR_COMBINE_FACTOR_TEXTURE_RGB,
2900
GR_COMBINE_LOCAL_CONSTANT,
2901
GR_COMBINE_OTHER_ITERATED);
2902
SETSHADE_ENV ();
2903
CC_PRIM ();
2904
USE_T0 ();
2905
}
2906
2907
//Added by Gonetz
2908
static void cc_t1_mul_env_add_prim ()
2909
{
2910
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2911
GR_COMBINE_FACTOR_TEXTURE_RGB,
2912
GR_COMBINE_LOCAL_CONSTANT,
2913
GR_COMBINE_OTHER_ITERATED);
2914
SETSHADE_ENV ();
2915
CC_PRIM ();
2916
USE_T1 ();
2917
}
2918
2919
static void cc_t0_mul_scale_add_prim ()
2920
{
2921
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2922
GR_COMBINE_FACTOR_TEXTURE_RGB,
2923
GR_COMBINE_LOCAL_CONSTANT,
2924
GR_COMBINE_OTHER_ITERATED);
2925
SETSHADE (rdp.SCALE);
2926
CC_PRIM ();
2927
USE_T0 ();
2928
}
2929
2930
//Added by Gonetz
2931
static void cc__t0_mul_t1__mul_env_add_prim ()
2932
{
2933
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2934
GR_COMBINE_FACTOR_TEXTURE_RGB,
2935
GR_COMBINE_LOCAL_CONSTANT,
2936
GR_COMBINE_OTHER_ITERATED);
2937
SETSHADE_ENV ();
2938
CC_PRIM ();
2939
T0_MUL_T1 ();
2940
}
2941
2942
//Added by Gonetz
2943
static void cc__t0_add__t1_mul_scale__mul_env_sub_center_add_prim ()
2944
{
2945
// (t1-0)*scale+t0, (env-center)*cmb+prim
2946
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2947
GR_COMBINE_FACTOR_TEXTURE_RGB,
2948
GR_COMBINE_LOCAL_ITERATED,
2949
GR_COMBINE_OTHER_CONSTANT);
2950
CC_C1SUBC2(rdp.env_color, rdp.CENTER);
2951
SETSHADE_PRIM ();
2952
MOD_1 (TMOD_TEX_MUL_COL);
2953
MOD_1_COL (rdp.SCALE & 0xFFFFFF00);
2954
T0_ADD_T1 ();
2955
}
2956
2957
//Added by Gonetz
2958
static void cc__t1_sub_t0__mul_env_add_prim ()
2959
{
2960
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2961
GR_COMBINE_FACTOR_TEXTURE_RGB,
2962
GR_COMBINE_LOCAL_CONSTANT,
2963
GR_COMBINE_OTHER_ITERATED);
2964
SETSHADE_ENV ();
2965
CC_PRIM ();
2966
T1_SUB_T0 ();
2967
}
2968
2969
//Added by Gonetz
2970
static void cc_t0_mul_env_add_shade ()
2971
{
2972
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2973
GR_COMBINE_FACTOR_TEXTURE_RGB,
2974
GR_COMBINE_LOCAL_ITERATED,
2975
GR_COMBINE_OTHER_CONSTANT);
2976
CC_ENV ();
2977
USE_T0 ();
2978
}
2979
2980
static void cc_t0_mul_shade_add_prim ()
2981
{
2982
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2983
GR_COMBINE_FACTOR_TEXTURE_RGB,
2984
GR_COMBINE_LOCAL_CONSTANT,
2985
GR_COMBINE_OTHER_ITERATED);
2986
CC_PRIM ();
2987
USE_T0 ();
2988
}
2989
2990
static void cc__t0_mul_enva_add_t1__mul_shade_add_prim ()
2991
{
2992
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2993
GR_COMBINE_FACTOR_TEXTURE_RGB,
2994
GR_COMBINE_LOCAL_CONSTANT,
2995
GR_COMBINE_OTHER_ITERATED);
2996
CC_PRIM ();
2997
if (cmb.combine_ext)
2998
{
2999
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3000
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3001
GR_CMBX_ZERO, 1,
3002
GR_CMBX_ZERO, 0);
3003
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3004
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3005
GR_CMBX_DETAIL_FACTOR, 0,
3006
GR_CMBX_B, 0);
3007
cmb.tex |= 3;
3008
percent = (float)(rdp.env_color&0xFF) / 255.0f;
3009
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
3010
}
3011
else
3012
{
3013
T0_ADD_T1 ();
3014
}
3015
}
3016
3017
static void cc_t0_mul_shade_add_prima ()
3018
{
3019
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3020
GR_COMBINE_FACTOR_TEXTURE_RGB,
3021
GR_COMBINE_LOCAL_CONSTANT,
3022
GR_COMBINE_OTHER_ITERATED);
3023
CC_PRIMA ();
3024
USE_T0 ();
3025
}
3026
3027
static void cc_t1_mul_shade_add_prim ()
3028
{
3029
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3030
GR_COMBINE_FACTOR_TEXTURE_RGB,
3031
GR_COMBINE_LOCAL_CONSTANT,
3032
GR_COMBINE_OTHER_ITERATED);
3033
CC_PRIM ();
3034
USE_T1 ();
3035
}
3036
3037
static void cc_t0_mul_shade_add_env ()
3038
{
3039
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3040
GR_COMBINE_FACTOR_TEXTURE_RGB,
3041
GR_COMBINE_LOCAL_CONSTANT,
3042
GR_COMBINE_OTHER_ITERATED);
3043
CC_ENV ();
3044
USE_T0 ();
3045
}
3046
3047
static void cc__t0_add_prim__mul_shade_add_t0 ()
3048
{
3049
if (cmb.combine_ext)
3050
{
3051
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3052
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3053
GR_CMBX_ITRGB, 0,
3054
GR_CMBX_B, 0);
3055
CC_PRIM ();
3056
}
3057
else
3058
{
3059
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3060
GR_COMBINE_FACTOR_LOCAL,
3061
GR_COMBINE_LOCAL_ITERATED,
3062
GR_COMBINE_OTHER_TEXTURE);
3063
// MOD_0 (TMOD_TEX_ADD_COL);
3064
// MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3065
}
3066
USE_T0 ();
3067
}
3068
3069
static void cc__t0_add_prim__mul_shade_add_t1 ()
3070
{
3071
if (cmb.combine_ext)
3072
{
3073
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3074
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3075
GR_CMBX_ZERO, 0,
3076
GR_CMBX_B, 0);
3077
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3078
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3079
GR_CMBX_ITRGB, 0,
3080
GR_CMBX_B, 0);
3081
cmb.tex |= 3;
3082
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3083
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3084
GR_CMBX_ITRGB, 0,
3085
GR_CMBX_B, 0);
3086
CC_PRIM ();
3087
}
3088
else
3089
{
3090
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3091
GR_COMBINE_FACTOR_ONE,
3092
GR_COMBINE_LOCAL_ITERATED,
3093
GR_COMBINE_OTHER_TEXTURE);
3094
MULSHADE_PRIM ();
3095
T0_ADD_T1 ();
3096
}
3097
}
3098
3099
static void cc__t0_add_primlod__mul_shade_add_env ()
3100
{
3101
if (cmb.combine_ext)
3102
{
3103
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3104
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
3105
GR_CMBX_ZERO, 1,
3106
GR_CMBX_ZERO, 0);
3107
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3108
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
3109
GR_CMBX_ZERO, 1,
3110
GR_CMBX_ZERO, 0);
3111
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3112
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
3113
GR_CMBX_ITRGB, 0,
3114
GR_CMBX_B, 0);
3115
CC_PRIMLOD ();
3116
cmb.tex_ccolor = cmb.ccolor;
3117
CC_ENV ();
3118
cmb.tex |= 1;
3119
}
3120
else
3121
{
3122
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3123
GR_COMBINE_FACTOR_TEXTURE_RGB,
3124
GR_COMBINE_LOCAL_CONSTANT,
3125
GR_COMBINE_OTHER_ITERATED);
3126
wxUint32 color = (lod_frac<<24) | (lod_frac<<16) | (lod_frac<<8);
3127
MOD_0 (TMOD_TEX_ADD_COL);
3128
MOD_0_COL (color & 0xFFFFFF00);
3129
CC_ENV ();
3130
USE_T0 ();
3131
}
3132
}
3133
3134
static void cc__t0_mul_prima_add_prim_mul__shade_add_env ()
3135
{
3136
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3137
GR_COMBINE_FACTOR_TEXTURE_RGB,
3138
GR_COMBINE_LOCAL_CONSTANT,
3139
GR_COMBINE_OTHER_ITERATED);
3140
CC_ENV ();
3141
if (cmb.combine_ext)
3142
{
3143
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3144
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
3145
GR_CMBX_TMU_CALPHA, 0,
3146
GR_CMBX_B, 0);
3147
cmb.tex_ccolor = rdp.prim_color;
3148
cmb.tex |= 1;
3149
}
3150
else
3151
{
3152
MOD_0 (TMOD_TEX_SCALE_FAC_ADD_COL);
3153
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3154
MOD_0_FAC (rdp.prim_color & 0xFF);
3155
USE_T0 ();
3156
}
3157
}
3158
3159
//Added by Gonetz
3160
static void cc_t0_mul_shadea_add_shade ()
3161
{
3162
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3163
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3164
GR_COMBINE_LOCAL_ITERATED,
3165
GR_COMBINE_OTHER_TEXTURE);
3166
USE_T0 ();
3167
}
3168
3169
static void cc_prim_mul_prima_add_prim () //Added by Gonetz
3170
{
3171
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3172
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3173
GR_COMBINE_LOCAL_CONSTANT,
3174
GR_COMBINE_OTHER_ITERATED);
3175
CC_PRIM ();
3176
CA_PRIM ();
3177
SETSHADE_PRIM ();
3178
}
3179
3180
static void cc_prim_mul_prima_add_t0 () //Added by Gonetz
3181
{
3182
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3183
GR_COMBINE_FACTOR_ONE,
3184
GR_COMBINE_LOCAL_ITERATED,
3185
GR_COMBINE_OTHER_TEXTURE);
3186
SETSHADE_PRIM ();
3187
SETSHADE_PRIMA ();
3188
USE_T0 ();
3189
}
3190
3191
static void cc_prim_mul_env_add_t0 () //Added by Gonetz
3192
{
3193
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3194
GR_COMBINE_FACTOR_ONE,
3195
GR_COMBINE_LOCAL_ITERATED,
3196
GR_COMBINE_OTHER_TEXTURE);
3197
SETSHADE_PRIM ();
3198
SETSHADE_ENV ();
3199
USE_T0 ();
3200
}
3201
3202
static void cc_prim_mul_shade_add_t0 ()
3203
{
3204
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3205
GR_COMBINE_FACTOR_ONE,
3206
GR_COMBINE_LOCAL_ITERATED,
3207
GR_COMBINE_OTHER_TEXTURE);
3208
MULSHADE_PRIM ();
3209
USE_T0 ();
3210
}
3211
3212
static void cc_prim_mul_shade_add_env ()
3213
{
3214
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3215
GR_COMBINE_FACTOR_ONE,
3216
GR_COMBINE_LOCAL_CONSTANT,
3217
GR_COMBINE_OTHER_ITERATED);
3218
CC_ENV ();
3219
MULSHADE_PRIM ();
3220
}
3221
3222
static void cc_env_mul_shade_add_env () //Added by Gonetz
3223
{
3224
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3225
GR_COMBINE_FACTOR_ONE,
3226
GR_COMBINE_LOCAL_CONSTANT,
3227
GR_COMBINE_OTHER_ITERATED);
3228
CC_ENV ();
3229
MULSHADE_ENV ();
3230
}
3231
3232
// ** A*B+C*D **
3233
static void cc_t0_mul_prim_add_one_sub_prim_mul_shade () //Added by Gonetz
3234
{
3235
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3236
GR_COMBINE_FACTOR_TEXTURE_RGB,
3237
GR_COMBINE_LOCAL_ITERATED,
3238
GR_COMBINE_OTHER_CONSTANT);
3239
CC_PRIM ();
3240
MULSHADE_1MPRIM ();
3241
USE_T0 ();
3242
}
3243
3244
static void cc_t0_mul_prim_add_shade_sub_env_mul_prim () //Added by Gonetz
3245
{
3246
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3247
GR_COMBINE_FACTOR_TEXTURE_RGB,
3248
GR_COMBINE_LOCAL_ITERATED,
3249
GR_COMBINE_OTHER_CONSTANT);
3250
CC_PRIM ();
3251
SUBSHADE_ENV ()
3252
MULSHADE_PRIM ();
3253
USE_T0 ();
3254
}
3255
3256
static void cc_t0_mul_prim_add_shade_mul_shadea_mul_prim ()
3257
{
3258
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3259
GR_COMBINE_FACTOR_TEXTURE_RGB,
3260
GR_COMBINE_LOCAL_ITERATED,
3261
GR_COMBINE_OTHER_CONSTANT);
3262
CC_PRIM ();
3263
MULSHADE_PRIM ();
3264
MULSHADE_SHADEA ();
3265
USE_T0 ();
3266
}
3267
3268
static void cc__t0_mul_t1__mul_prim_add_prim_mul_shade () //Added by Gonetz
3269
{
3270
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3271
GR_COMBINE_FACTOR_TEXTURE_RGB,
3272
GR_COMBINE_LOCAL_ITERATED,
3273
GR_COMBINE_OTHER_CONSTANT);
3274
MULSHADE_PRIM ();
3275
CC_PRIM ();
3276
T0_MUL_T1 ();
3277
}
3278
3279
static void cc_t0_mul_env_add_prim_mul_shade () //Added by Gonetz
3280
{
3281
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3282
GR_COMBINE_FACTOR_TEXTURE_RGB,
3283
GR_COMBINE_LOCAL_ITERATED,
3284
GR_COMBINE_OTHER_CONSTANT);
3285
MULSHADE_PRIM ();
3286
CC_ENV ();
3287
USE_T0 ();
3288
}
3289
3290
static void cc_t0_mul_enva_add_prim_mul_shade () //Added by Gonetz
3291
{
3292
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3293
GR_COMBINE_FACTOR_TEXTURE_RGB,
3294
GR_COMBINE_LOCAL_ITERATED,
3295
GR_COMBINE_OTHER_CONSTANT);
3296
MULSHADE_PRIM ();
3297
CC_ENVA ();
3298
USE_T0 ();
3299
}
3300
3301
static void cc_t0_mul_shade_add_prim_mul_env () //Added by Gonetz
3302
{
3303
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3304
GR_COMBINE_FACTOR_TEXTURE_RGB,
3305
GR_COMBINE_LOCAL_CONSTANT,
3306
GR_COMBINE_OTHER_ITERATED);
3307
CC_PRIMMULENV ();
3308
USE_T0 ();
3309
}
3310
3311
static void cc_prim_mul_env_add_one_sub_prim_mul_shade () //Added by Gonetz
3312
{
3313
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3314
GR_COMBINE_FACTOR_ONE,
3315
GR_COMBINE_LOCAL_ITERATED,
3316
GR_COMBINE_OTHER_CONSTANT);
3317
MULSHADE_1MPRIM ();
3318
CC_PRIMMULENV ();
3319
}
3320
3321
// ** A*B*C **
3322
3323
static void cc_t0_mul_prim_mul_prim () //Added by Gonetz
3324
{
3325
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3326
GR_COMBINE_FACTOR_LOCAL,
3327
GR_COMBINE_LOCAL_ITERATED,
3328
GR_COMBINE_OTHER_TEXTURE);
3329
SETSHADE_PRIM ();
3330
SETSHADE_PRIM ();
3331
USE_T0 ();
3332
}
3333
3334
static void cc_t0_mul_prim_mul_prima () //Added by Gonetz
3335
{
3336
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3337
GR_COMBINE_FACTOR_LOCAL,
3338
GR_COMBINE_LOCAL_ITERATED,
3339
GR_COMBINE_OTHER_TEXTURE);
3340
SETSHADE_PRIM ();
3341
SETSHADE_PRIMA ();
3342
USE_T0 ();
3343
}
3344
3345
static void cc_t0_mul_enva_mul_shade ()
3346
{
3347
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3348
GR_COMBINE_FACTOR_LOCAL,
3349
GR_COMBINE_LOCAL_ITERATED,
3350
GR_COMBINE_OTHER_TEXTURE);
3351
MULSHADE_ENVA ();
3352
USE_T0 ();
3353
}
3354
3355
static void cc_t0_mul_primlod_mul_prim () //Added by Gonetz
3356
{
3357
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3358
GR_COMBINE_FACTOR_LOCAL,
3359
GR_COMBINE_LOCAL_CONSTANT,
3360
GR_COMBINE_OTHER_TEXTURE);
3361
CC_COLMULBYTE (rdp.prim_color, rdp.prim_lodfrac);
3362
USE_T0 ();
3363
}
3364
3365
static void cc_t0_mul_primlod_mul_shade () //Added by Gonetz
3366
{
3367
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3368
GR_COMBINE_FACTOR_LOCAL,
3369
GR_COMBINE_LOCAL_ITERATED,
3370
GR_COMBINE_OTHER_TEXTURE);
3371
MULSHADE_PRIMLOD ();
3372
USE_T0 ();
3373
}
3374
3375
static void cc__t0_mul_t1__mul_prim ()
3376
{
3377
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3378
GR_COMBINE_FACTOR_LOCAL,
3379
GR_COMBINE_LOCAL_CONSTANT,
3380
GR_COMBINE_OTHER_TEXTURE);
3381
CC_PRIM ();
3382
T0_MUL_T1 ();
3383
}
3384
3385
static void cc__t1_mul_t1_add_t0__mul_prim ()
3386
{
3387
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3388
GR_COMBINE_FACTOR_LOCAL,
3389
GR_COMBINE_LOCAL_CONSTANT,
3390
GR_COMBINE_OTHER_TEXTURE);
3391
CC_PRIM ();
3392
if (cmb.combine_ext)
3393
{
3394
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3395
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3396
GR_CMBX_ZERO, 0,
3397
GR_CMBX_B, 0);
3398
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
3399
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3400
GR_CMBX_OTHER_TEXTURE_RGB, 0,
3401
GR_CMBX_B, 0);
3402
cmb.tex |= 3;
3403
}
3404
else
3405
{
3406
T0_ADD_T1 ();
3407
}
3408
}
3409
3410
static void cc__t0_mul_t1__mul_prima () //Added by Gonetz
3411
{
3412
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3413
GR_COMBINE_FACTOR_LOCAL,
3414
GR_COMBINE_LOCAL_CONSTANT,
3415
GR_COMBINE_OTHER_TEXTURE);
3416
CC_PRIMA ();
3417
T0_MUL_T1 ();
3418
}
3419
3420
static void cc__t0_mul_t1__mul_env () //Added by Gonetz
3421
{
3422
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3423
GR_COMBINE_FACTOR_LOCAL,
3424
GR_COMBINE_LOCAL_CONSTANT,
3425
GR_COMBINE_OTHER_TEXTURE);
3426
CC_ENV ();
3427
T0_MUL_T1 ();
3428
}
3429
3430
static void cc__t0_mul_t1__mul_enva () //Added by Gonetz
3431
{
3432
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3433
GR_COMBINE_FACTOR_LOCAL,
3434
GR_COMBINE_LOCAL_CONSTANT,
3435
GR_COMBINE_OTHER_TEXTURE);
3436
CC_ENVA ();
3437
T0_MUL_T1 ();
3438
}
3439
3440
static void cc__t0_mul_t1__mul_shade ()
3441
{
3442
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3443
GR_COMBINE_FACTOR_LOCAL,
3444
GR_COMBINE_LOCAL_ITERATED,
3445
GR_COMBINE_OTHER_TEXTURE);
3446
T0_MUL_T1 ();
3447
}
3448
3449
static void cc__t0a_mul_t1__mul_prim () //Added by Gonetz
3450
{
3451
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3452
GR_COMBINE_FACTOR_LOCAL,
3453
GR_COMBINE_LOCAL_CONSTANT,
3454
GR_COMBINE_OTHER_TEXTURE);
3455
CC_PRIM ();
3456
T0A_MUL_T1 ();
3457
}
3458
3459
static void cc__t0_mul_t1a__mul_shade () //Added by Gonetz
3460
{
3461
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3462
GR_COMBINE_FACTOR_LOCAL,
3463
GR_COMBINE_LOCAL_ITERATED,
3464
GR_COMBINE_OTHER_TEXTURE);
3465
T0_MUL_T1A ();
3466
}
3467
3468
static void cc__t0a_mul_t1__mul_shade () //Added by Gonetz
3469
{
3470
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3471
GR_COMBINE_FACTOR_LOCAL,
3472
GR_COMBINE_LOCAL_ITERATED,
3473
GR_COMBINE_OTHER_TEXTURE);
3474
T0A_MUL_T1 ();
3475
}
3476
3477
static void cc_t0_mul_prim_mul_env ()
3478
{
3479
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3480
GR_COMBINE_FACTOR_LOCAL,
3481
GR_COMBINE_LOCAL_ITERATED,
3482
GR_COMBINE_OTHER_TEXTURE);
3483
SETSHADE_PRIM ();
3484
SETSHADE_ENV (); // notice that setshade multiplies
3485
USE_T0 ();
3486
}
3487
3488
static void cc_t0_mul_prim_mul_shade ()
3489
{
3490
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3491
GR_COMBINE_FACTOR_LOCAL,
3492
GR_COMBINE_LOCAL_ITERATED,
3493
GR_COMBINE_OTHER_TEXTURE);
3494
MULSHADE_PRIM ();
3495
USE_T0 ();
3496
}
3497
3498
static void cc_t0_mul_prim_mul_shadea ()
3499
{
3500
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3501
GR_COMBINE_FACTOR_LOCAL,
3502
GR_COMBINE_LOCAL_ITERATED,
3503
GR_COMBINE_OTHER_TEXTURE);
3504
SETSHADE_PRIM ();
3505
MULSHADE_SHADEA();
3506
USE_T0 ();
3507
}
3508
3509
static void cc_t0_mul_prima_mul_shade ()
3510
{
3511
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3512
GR_COMBINE_FACTOR_LOCAL,
3513
GR_COMBINE_LOCAL_ITERATED,
3514
GR_COMBINE_OTHER_TEXTURE);
3515
MULSHADE_PRIMA ();
3516
USE_T0 ();
3517
}
3518
3519
static void cc_t1_mul__one_sub_prim_mul_shade_add_prim ()
3520
{
3521
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3522
GR_COMBINE_FACTOR_LOCAL,
3523
GR_COMBINE_LOCAL_ITERATED,
3524
GR_COMBINE_OTHER_TEXTURE);
3525
MULSHADE_1MPRIM ();
3526
ADDSHADE_PRIM ();
3527
USE_T1 ();
3528
}
3529
3530
static void cc_t0_mul_one_sub_env_mul_shade ()
3531
{
3532
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3533
GR_COMBINE_FACTOR_LOCAL,
3534
GR_COMBINE_LOCAL_ITERATED,
3535
GR_COMBINE_OTHER_TEXTURE);
3536
MULSHADE_1MENV ();
3537
USE_T0 ();
3538
}
3539
3540
static void cc_t1_mul_prim_mul_shade ()
3541
{
3542
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3543
GR_COMBINE_FACTOR_LOCAL,
3544
GR_COMBINE_LOCAL_ITERATED,
3545
GR_COMBINE_OTHER_TEXTURE);
3546
MULSHADE_PRIM ();
3547
USE_T1 ();
3548
}
3549
3550
//Added by Gonetz
3551
static void cc_t0_mul_1mprim_mul_shade ()
3552
{
3553
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3554
GR_COMBINE_FACTOR_LOCAL,
3555
GR_COMBINE_LOCAL_ITERATED,
3556
GR_COMBINE_OTHER_TEXTURE);
3557
MULSHADE_1MPRIM ();
3558
USE_T0 ();
3559
}
3560
3561
static void cc_t0_mul_env_mul_shade ()
3562
{
3563
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3564
GR_COMBINE_FACTOR_LOCAL,
3565
GR_COMBINE_LOCAL_ITERATED,
3566
GR_COMBINE_OTHER_TEXTURE);
3567
MULSHADE_ENV ();
3568
USE_T0 ();
3569
}
3570
3571
static void cc_t0_mul_scale_mul_shade ()
3572
{
3573
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3574
GR_COMBINE_FACTOR_LOCAL,
3575
GR_COMBINE_LOCAL_ITERATED,
3576
GR_COMBINE_OTHER_TEXTURE);
3577
MULSHADE (rdp.SCALE);
3578
USE_T0 ();
3579
}
3580
3581
static void cc_t0_mul_shade_mul_shadea ()
3582
{
3583
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3584
GR_COMBINE_FACTOR_LOCAL,
3585
GR_COMBINE_LOCAL_ITERATED,
3586
GR_COMBINE_OTHER_TEXTURE);
3587
MULSHADE_SHADEA ();
3588
USE_T0 ();
3589
}
3590
3591
static void cc_prim_mul_env_mul_shade ()
3592
{
3593
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3594
GR_COMBINE_FACTOR_LOCAL,
3595
GR_COMBINE_LOCAL_CONSTANT,
3596
GR_COMBINE_OTHER_ITERATED);
3597
CC_ENV ();
3598
MULSHADE_PRIM ();
3599
}
3600
3601
static void cc_prim_mul_one_sub_env_mul_shade ()
3602
{
3603
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3604
GR_COMBINE_FACTOR_LOCAL,
3605
GR_COMBINE_LOCAL_CONSTANT,
3606
GR_COMBINE_OTHER_ITERATED);
3607
CC_1SUBENV ();
3608
MULSHADE_PRIM ();
3609
}
3610
3611
// ** A*B*C+D **
3612
static void cc_t0_mul_prim_mul_shade_add_env ()
3613
{
3614
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3615
GR_COMBINE_FACTOR_TEXTURE_RGB,
3616
GR_COMBINE_LOCAL_CONSTANT,
3617
GR_COMBINE_OTHER_ITERATED);
3618
CC_ENV ();
3619
MULSHADE_PRIM ();
3620
USE_T0 ();
3621
}
3622
3623
//Added by Gonetz
3624
static void cc_t0_mul_prim_mul_shadea_add_env ()
3625
{
3626
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3627
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3628
GR_COMBINE_LOCAL_ITERATED,
3629
GR_COMBINE_OTHER_TEXTURE);
3630
CC_ENV ();
3631
SETSHADE_ENV ();
3632
MULSHADE_A_PRIM ();
3633
USE_T0 ();
3634
}
3635
3636
// (A*B+C)*D
3637
static void cc__t0_mul_prim_add_shade__mul_env ()
3638
{
3639
if (cmb.combine_ext)
3640
{
3641
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3642
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
3643
GR_CMBX_TMU_CCOLOR, 0,
3644
GR_CMBX_B, 0);
3645
cmb.tex |= 1;
3646
cmb.tex_ccolor = rdp.prim_color;
3647
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3648
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
3649
GR_CMBX_CONSTANT_COLOR, 0,
3650
GR_CMBX_ZERO, 0);
3651
CC_ENV ();
3652
}
3653
else
3654
{
3655
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3656
GR_COMBINE_FACTOR_ONE,
3657
GR_COMBINE_LOCAL_ITERATED,
3658
GR_COMBINE_OTHER_TEXTURE);
3659
MULSHADE_ENV ();
3660
MOD_0 (TMOD_TEX_MUL_COL);
3661
CC_PRIMMULENV ();
3662
MOD_0_COL (cmb.ccolor & 0xFFFFFF00);
3663
USE_T0 ();
3664
}
3665
}
3666
3667
static void cc__t0a_mul_prim_add_t0__mul_shade ()
3668
{
3669
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3670
GR_COMBINE_FACTOR_LOCAL,
3671
GR_COMBINE_LOCAL_ITERATED,
3672
GR_COMBINE_OTHER_TEXTURE);
3673
MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);
3674
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3675
USE_T0 ();
3676
}
3677
3678
static void cc__t0a_mul_env_add_t0__mul_shade ()
3679
{
3680
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3681
GR_COMBINE_FACTOR_LOCAL,
3682
GR_COMBINE_LOCAL_ITERATED,
3683
GR_COMBINE_OTHER_TEXTURE);
3684
MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);
3685
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
3686
USE_T0 ();
3687
}
3688
3689
static void cc__prim_mul_shade_add_env__mul_shade () //Aded by Gonetz
3690
{
3691
if (!cmb.combine_ext)
3692
{
3693
cc_prim_mul_shade_add_env ();
3694
return;
3695
}
3696
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
3697
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3698
GR_CMBX_ITRGB, 0,
3699
GR_CMBX_ZERO, 0);
3700
cmb.tex |= 1;
3701
cmb.tex_ccolor = rdp.prim_color;
3702
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3703
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3704
GR_CMBX_ITRGB, 0,
3705
GR_CMBX_ZERO, 0);
3706
CC_ENV ();
3707
}
3708
3709
// ** A*B*C+D*E **
3710
//Added by Gonetz
3711
static void cc__t0_sub_t1__mul_prim_mul_shade_add_prim_mul_env ()
3712
{
3713
if (cmb.combine_ext)
3714
{
3715
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3716
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3717
GR_CMBX_ZERO, 0,
3718
GR_CMBX_B, 0);
3719
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3720
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
3721
GR_CMBX_ZERO, 1,
3722
GR_CMBX_ZERO, 0);
3723
cmb.tex |= 3;
3724
}
3725
else
3726
{
3727
USE_T0 ();
3728
}
3729
3730
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3731
GR_COMBINE_FACTOR_TEXTURE_RGB,
3732
GR_COMBINE_LOCAL_CONSTANT,
3733
GR_COMBINE_OTHER_ITERATED);
3734
CC_PRIMMULENV ();
3735
MULSHADE_PRIM ();
3736
}
3737
3738
static void cc__t0_mul_prim_mul_env__add__prim_mul_shade ()
3739
{
3740
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3741
GR_COMBINE_FACTOR_TEXTURE_RGB,
3742
GR_COMBINE_LOCAL_ITERATED,
3743
GR_COMBINE_OTHER_CONSTANT);
3744
CC_PRIMMULENV ();
3745
MULSHADE_PRIM ();
3746
USE_T0 ();
3747
}
3748
3749
static void cc__t1_mul_prim_mul_env__add__prim_mul_shade ()
3750
{
3751
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3752
GR_COMBINE_FACTOR_TEXTURE_RGB,
3753
GR_COMBINE_LOCAL_ITERATED,
3754
GR_COMBINE_OTHER_CONSTANT);
3755
CC_PRIMMULENV ();
3756
MULSHADE_PRIM ();
3757
USE_T1 ();
3758
}
3759
3760
//Added by Gonetz
3761
static void cc_t0_mul_one_sub_prim_mul_shade_add_prim_mul_env ()
3762
{
3763
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3764
GR_COMBINE_FACTOR_TEXTURE_RGB,
3765
GR_COMBINE_LOCAL_CONSTANT,
3766
GR_COMBINE_OTHER_ITERATED);
3767
CC_PRIMMULENV ();
3768
MULSHADE_1MPRIM ();
3769
USE_T0 ();
3770
}
3771
3772
//Added by Gonetz
3773
static void cc_t0_mul_one_sub_prim_mul_shadea_add_prim_mul_env ()
3774
{
3775
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3776
GR_COMBINE_FACTOR_TEXTURE_RGB,
3777
GR_COMBINE_LOCAL_CONSTANT,
3778
GR_COMBINE_OTHER_ITERATED);
3779
CC_PRIMMULENV ();
3780
SETSHADE_1MPRIM ();
3781
MULSHADE_SHADEA ();
3782
USE_T0 ();
3783
}
3784
3785
//Added by Gonetz
3786
static void cc_t0_mul_one_sub_env_mul_shade_add_env ()
3787
{
3788
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3789
GR_COMBINE_FACTOR_TEXTURE_RGB,
3790
GR_COMBINE_LOCAL_CONSTANT,
3791
GR_COMBINE_OTHER_ITERATED);
3792
CC_ENV ();
3793
MULSHADE_1MENV ();
3794
USE_T0 ();
3795
}
3796
3797
static void cc_t0_mul_prima_mul_shade_add_prim_mul_one_sub_prima () //Aded by Gonetz
3798
{
3799
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3800
GR_COMBINE_FACTOR_TEXTURE_RGB,
3801
GR_COMBINE_LOCAL_CONSTANT,
3802
GR_COMBINE_OTHER_ITERATED);
3803
MULSHADE_PRIMA ();
3804
USE_T0 ();
3805
wxUint8 fac = 255 - (wxUint8)(rdp.prim_color&0xFF);
3806
float col[3];
3807
col[0] = (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f;
3808
col[1] = (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f;
3809
col[2] = (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f;
3810
CC ( ((wxUint8)(col[0]*fac))<<24 | ((wxUint8)(col[1]*fac))<<16 | ((wxUint8)(col[2]*fac))<<8 | fac );
3811
}
3812
3813
// ** A*(1-B)+C **
3814
static void cc_t0_mul_1menv_add_prim ()
3815
{
3816
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3817
GR_COMBINE_FACTOR_TEXTURE_RGB,
3818
GR_COMBINE_LOCAL_CONSTANT,
3819
GR_COMBINE_OTHER_ITERATED);
3820
CC_PRIM ();
3821
SETSHADE_1MENV ();
3822
USE_T0 ();
3823
}
3824
3825
// ** (A+B)*C **
3826
static void cc_t0_mul_scale_add_prim__mul_shade () //Aded by Gonetz
3827
{
3828
if (cmb.combine_ext)
3829
{
3830
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3831
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3832
GR_CMBX_TMU_CCOLOR, 0,
3833
GR_CMBX_ZERO, 0);
3834
cmb.tex |= 1;
3835
cmb.tex_ccolor = rdp.SCALE;
3836
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3837
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3838
GR_CMBX_ITRGB, 0,
3839
GR_CMBX_ZERO, 0);
3840
CC_PRIM ();
3841
}
3842
else
3843
{
3844
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3845
GR_COMBINE_FACTOR_LOCAL,
3846
GR_COMBINE_LOCAL_ITERATED,
3847
GR_COMBINE_OTHER_TEXTURE);
3848
MOD_0 (TMOD_TEX_ADD_COL);
3849
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3850
USE_T0 ();
3851
}
3852
}
3853
3854
static void cc__t0_mul_t1_add_prim__mul_shade () //Aded by Gonetz
3855
{
3856
if (cmb.combine_ext)
3857
{
3858
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3859
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3860
GR_CMBX_ITRGB, 0,
3861
GR_CMBX_ZERO, 0);
3862
CC_PRIM ();
3863
}
3864
else
3865
{
3866
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3867
GR_COMBINE_FACTOR_LOCAL,
3868
GR_COMBINE_LOCAL_ITERATED,
3869
GR_COMBINE_OTHER_TEXTURE);
3870
MULSHADE_PRIM ();
3871
}
3872
T0_MUL_T1 ();
3873
}
3874
3875
static void cc_t0_mul__prim_add_env ()
3876
{
3877
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3878
GR_COMBINE_FACTOR_LOCAL,
3879
GR_COMBINE_LOCAL_ITERATED,
3880
GR_COMBINE_OTHER_TEXTURE);
3881
SETSHADE_PRIM ();
3882
ADDSHADE_ENV ();
3883
USE_T0 ();
3884
}
3885
3886
static void cc_t0_mul__prim_mul_primlod_add_env () //Aded by Gonetz
3887
{
3888
// forest behind window, Dobutsu no Mori.
3889
// (prim-0)*prim_lod+env, (t1-0)*cmb+0
3890
//actually, the game uses t0 instead of t1 here. t1 does not set at all this moment.
3891
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3892
GR_COMBINE_FACTOR_LOCAL,
3893
GR_COMBINE_LOCAL_ITERATED,
3894
GR_COMBINE_OTHER_TEXTURE);
3895
float prim_lod = rdp.prim_lodfrac / 65025.0f;
3896
rdp.col[0] *= ((rdp.prim_color & 0xFF000000) >> 24) * prim_lod;
3897
rdp.col[1] *= ((rdp.prim_color & 0x00FF0000) >> 16) * prim_lod;
3898
rdp.col[2] *= ((rdp.prim_color & 0x0000FF00) >> 8) * prim_lod;
3899
rdp.cmb_flags = CMB_SET;
3900
ADDSHADE_ENV ();
3901
USE_T0 ();
3902
}
3903
3904
// ** (A-B)*C **
3905
static void cc__t0_mul_prim_add_shade__sub_env_mul_shade ()
3906
{
3907
if (cmb.combine_ext)
3908
{
3909
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3910
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
3911
GR_CMBX_TMU_CCOLOR, 0,
3912
GR_CMBX_B, 0);
3913
cmb.tex_ccolor = rdp.prim_color;
3914
cmb.tex |= 1;
3915
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3916
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3917
GR_CMBX_ITRGB, 0,
3918
GR_CMBX_ZERO, 0);
3919
CC_ENV ();
3920
}
3921
else
3922
{
3923
cc_t0_mul_prim_mul_shade ();
3924
}
3925
}
3926
3927
static void cc_t0_sub_prim_mul_shadea () //Aded by Gonetz
3928
{
3929
// * not guaranteed to work if another iterated alpha is set
3930
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
3931
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3932
GR_COMBINE_LOCAL_ITERATED,
3933
GR_COMBINE_OTHER_TEXTURE);
3934
SETSHADE_PRIM ();
3935
USE_T0 ();
3936
}
3937
3938
static void cc__t0_sub_env_mul_shade__sub_prim_mul_shade ()
3939
{
3940
if (cmb.combine_ext)
3941
{
3942
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3943
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
3944
GR_CMBX_ITRGB, 0,
3945
GR_CMBX_ZERO, 0);
3946
cmb.tex_ccolor = rdp.env_color;
3947
cmb.tex |= 1;
3948
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3949
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3950
GR_CMBX_ITRGB, 0,
3951
GR_CMBX_ITRGB, 0);
3952
CC_PRIM ();
3953
}
3954
else
3955
{
3956
cc_t0_mul_shade ();
3957
}
3958
}
3959
3960
static void cc_t0_sub_prim_mul_shade ()
3961
{
3962
if (cmb.combine_ext)
3963
{
3964
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3965
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3966
GR_CMBX_ITRGB, 0,
3967
GR_CMBX_ZERO, 0);
3968
CC_PRIM ();
3969
}
3970
else
3971
{
3972
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3973
GR_COMBINE_FACTOR_LOCAL,
3974
GR_COMBINE_LOCAL_ITERATED,
3975
GR_COMBINE_OTHER_TEXTURE);
3976
if (rdp.prim_color & 0xFFFFFF00)
3977
{
3978
MOD_0 (TMOD_TEX_SUB_COL);
3979
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3980
}
3981
}
3982
USE_T0 ();
3983
}
3984
3985
static void cc__t0_mul_t1__sub_prim_mul_shade ()
3986
{
3987
if (cmb.combine_ext)
3988
{
3989
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3990
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3991
GR_CMBX_ITRGB, 0,
3992
GR_CMBX_ZERO, 0);
3993
CC_PRIM ();
3994
}
3995
else
3996
{
3997
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3998
GR_COMBINE_FACTOR_LOCAL,
3999
GR_COMBINE_LOCAL_ITERATED,
4000
GR_COMBINE_OTHER_TEXTURE);
4001
}
4002
T0_MUL_T1 ();
4003
}
4004
4005
static void cc_t0_sub_env_mul_shade ()
4006
{
4007
if (cmb.combine_ext)
4008
{
4009
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4010
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
4011
GR_CMBX_ITRGB, 0,
4012
GR_CMBX_ZERO, 0);
4013
CC_ENV ();
4014
}
4015
else
4016
{
4017
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4018
GR_COMBINE_FACTOR_LOCAL,
4019
GR_COMBINE_LOCAL_ITERATED,
4020
GR_COMBINE_OTHER_TEXTURE);
4021
if (rdp.env_color & 0xFFFFFF00)
4022
{
4023
MOD_0 (TMOD_TEX_SUB_COL);
4024
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4025
}
4026
}
4027
USE_T0 ();
4028
}
4029
4030
static void cc__t0_mul_prima_add_t0__sub_center_mul_scale ()
4031
{
4032
if (cmb.combine_ext)
4033
{
4034
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4035
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4036
GR_CMBX_TMU_CCOLOR, 0,
4037
GR_CMBX_B, 0);
4038
wxUint32 prima = rdp.prim_color&0xFF;
4039
cmb.tex_ccolor = (prima<<24)|(prima<<16)|(prima<<8)|prima;
4040
cmb.tex |= 1;
4041
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4042
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
4043
GR_CMBX_ITRGB, 0,
4044
GR_CMBX_ZERO, 0);
4045
CC(rdp.CENTER);
4046
SETSHADE(rdp.SCALE);
4047
}
4048
else
4049
{
4050
cc_t0_mul_prima();
4051
}
4052
}
4053
4054
static void cc__t1_inter_t0_using_primlod__sub_shade_mul_prim ()
4055
{
4056
if (cmb.combine_ext)
4057
{
4058
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4059
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4060
GR_CMBX_CONSTANT_COLOR, 0,
4061
GR_CMBX_ZERO, 0);
4062
CC_PRIM ();
4063
}
4064
else
4065
{
4066
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4067
GR_COMBINE_FACTOR_ONE,
4068
GR_COMBINE_LOCAL_ITERATED,
4069
GR_COMBINE_OTHER_TEXTURE);
4070
MULSHADE_PRIM ();
4071
}
4072
T1_INTER_T0_USING_FACTOR (lod_frac);
4073
}
4074
4075
static void cc__t0_inter_t1_using_enva__sub_shade_mul_prim ()
4076
{
4077
if (cmb.combine_ext)
4078
{
4079
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4080
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4081
GR_CMBX_CONSTANT_COLOR, 0,
4082
GR_CMBX_ZERO, 0);
4083
CC_PRIM ();
4084
}
4085
else
4086
{
4087
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4088
GR_COMBINE_FACTOR_ONE,
4089
GR_COMBINE_LOCAL_ITERATED,
4090
GR_COMBINE_OTHER_TEXTURE);
4091
MULSHADE_PRIM ();
4092
}
4093
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
4094
T0_INTER_T1_USING_FACTOR (factor);
4095
}
4096
4097
static void cc_t0_sub_shade_mul_shadea () //Aded by Gonetz
4098
{
4099
// * not guaranteed to work if another iterated alpha is set
4100
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4101
GR_COMBINE_FACTOR_LOCAL_ALPHA,
4102
GR_COMBINE_LOCAL_ITERATED,
4103
GR_COMBINE_OTHER_TEXTURE);
4104
USE_T0 ();
4105
}
4106
4107
static void cc_one_sub_t0_mul_prim () //Added by Gonetz
4108
{
4109
CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
4110
GR_COMBINE_FACTOR_TEXTURE_RGB,
4111
GR_COMBINE_LOCAL_CONSTANT,
4112
GR_COMBINE_OTHER_NONE);
4113
CC_PRIM ();
4114
USE_T0 ();
4115
}
4116
4117
static void cc_one_sub_prim_mul_prima () //Added by Gonetz
4118
{
4119
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4120
GR_COMBINE_FACTOR_LOCAL,
4121
GR_COMBINE_LOCAL_ITERATED,
4122
GR_COMBINE_OTHER_CONSTANT);
4123
CC (~rdp.prim_color);
4124
SETSHADE_PRIMA ();
4125
}
4126
4127
static void cc_shade_sub_prim_mul_t0 () //Aded by Gonetz
4128
{
4129
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4130
GR_COMBINE_FACTOR_TEXTURE_RGB,
4131
GR_COMBINE_LOCAL_CONSTANT,
4132
GR_COMBINE_OTHER_ITERATED);
4133
CC_PRIM ();
4134
USE_T0 ();
4135
}
4136
4137
static void cc_shade_sub_prim_mul_env () //Aded by Gonetz
4138
{
4139
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4140
GR_COMBINE_FACTOR_LOCAL,
4141
GR_COMBINE_LOCAL_CONSTANT,
4142
GR_COMBINE_OTHER_ITERATED);
4143
CC_ENV ();
4144
SUBSHADE_PRIM ();
4145
}
4146
4147
static void cc_shade_sub_env_mul_t0 () //Aded by Gonetz
4148
{
4149
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4150
GR_COMBINE_FACTOR_TEXTURE_RGB,
4151
GR_COMBINE_LOCAL_CONSTANT,
4152
GR_COMBINE_OTHER_ITERATED);
4153
CC_ENV ();
4154
USE_T0 ();
4155
}
4156
4157
static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
4158
{
4159
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4160
GR_COMBINE_FACTOR_TEXTURE_RGB,
4161
GR_COMBINE_LOCAL_CONSTANT,
4162
GR_COMBINE_OTHER_ITERATED);
4163
CC_PRIM ();
4164
T0_INTER_T1_USING_FACTOR (lod_frac);
4165
}
4166
4167
static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
4168
{
4169
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4170
GR_COMBINE_FACTOR_TEXTURE_RGB,
4171
GR_COMBINE_LOCAL_CONSTANT,
4172
GR_COMBINE_OTHER_ITERATED);
4173
CC_ENV ();
4174
T0_INTER_T1_USING_FACTOR (lod_frac);
4175
}
4176
4177
static void cc_shade_sub_env_mul_prim () //Aded by Gonetz
4178
{
4179
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4180
GR_COMBINE_FACTOR_LOCAL,
4181
GR_COMBINE_LOCAL_CONSTANT,
4182
GR_COMBINE_OTHER_ITERATED);
4183
CC_PRIM();
4184
SUBSHADE_ENV ();
4185
}
4186
4187
static void cc_shade_sub__prim_mul_prima () //Aded by Gonetz
4188
{
4189
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4190
GR_COMBINE_FACTOR_ONE,
4191
GR_COMBINE_LOCAL_CONSTANT,
4192
GR_COMBINE_OTHER_ITERATED);
4193
CC_C1MULC2 (rdp.prim_color, (rdp.prim_color&0xFF));
4194
}
4195
4196
static void cc_one_sub__t0_mul_t1__mul_shade () //Aded by Gonetz
4197
{
4198
CCMB (GR_COMBINE_FUNCTION_BLEND,
4199
GR_COMBINE_FACTOR_TEXTURE_RGB,
4200
GR_COMBINE_LOCAL_ITERATED,
4201
GR_COMBINE_OTHER_CONSTANT);
4202
CC (0);
4203
T0_MUL_T1 ();
4204
}
4205
4206
static void cc_one_sub__t0_mul_shadea__mul_shade () //Aded by Gonetz
4207
{
4208
if (cmb.combine_ext)
4209
{
4210
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4211
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4212
GR_CMBX_ITALPHA, 0,
4213
GR_CMBX_ZERO, 0);
4214
cmb.tex |= 1;
4215
4216
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
4217
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
4218
GR_CMBX_ITRGB, 0,
4219
GR_CMBX_ZERO, 0);
4220
}
4221
else
4222
{
4223
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4224
GR_COMBINE_FACTOR_LOCAL,
4225
GR_COMBINE_LOCAL_ITERATED,
4226
GR_COMBINE_OTHER_TEXTURE);
4227
USE_T0 ();
4228
cmb.tmu0_invert = TRUE;
4229
}
4230
}
4231
4232
static void cc_one_sub_env_mul_t0 () //Aded by Gonetz
4233
{
4234
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4235
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4236
GR_COMBINE_LOCAL_CONSTANT,
4237
GR_COMBINE_OTHER_TEXTURE);
4238
CC_ENV ();
4239
USE_T0 ();
4240
}
4241
4242
static void cc_one_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
4243
{
4244
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4245
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4246
GR_COMBINE_LOCAL_CONSTANT,
4247
GR_COMBINE_OTHER_TEXTURE);
4248
CC_ENV ();
4249
T0_INTER_T1_USING_FACTOR (lod_frac);
4250
}
4251
4252
static void cc_one_sub_env_mul_prim () //Aded by Gonetz
4253
{
4254
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4255
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4256
GR_COMBINE_LOCAL_CONSTANT,
4257
GR_COMBINE_OTHER_ITERATED);
4258
CC_ENV ();
4259
SETSHADE_PRIM ();
4260
}
4261
4262
static void cc_one_sub_env_mul_shade () //Aded by Gonetz
4263
{
4264
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4265
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4266
GR_COMBINE_LOCAL_CONSTANT,
4267
GR_COMBINE_OTHER_ITERATED);
4268
CC_ENV ();
4269
}
4270
4271
// ** (1-A)*B + A*C **
4272
static void cc_t0_mul_env_add_1mt0_mul_shade ()
4273
{
4274
CCMB (GR_COMBINE_FUNCTION_BLEND,
4275
GR_COMBINE_FACTOR_TEXTURE_RGB,
4276
GR_COMBINE_LOCAL_ITERATED,
4277
GR_COMBINE_OTHER_CONSTANT);
4278
CC_ENV ();
4279
USE_T0 ();
4280
}
4281
4282
// ** (1-A)*B+C **
4283
static void cc_one_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade () //Added by Gonetz
4284
{
4285
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4286
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
4287
GR_COMBINE_LOCAL_ITERATED,
4288
GR_COMBINE_OTHER_TEXTURE);
4289
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
4290
}
4291
4292
// ** (1-A)*B*C **
4293
static void cc_one_sub_t0_mul_prim_mul_shade () //Added by Gonetz
4294
{
4295
CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
4296
GR_COMBINE_FACTOR_TEXTURE_RGB,
4297
GR_COMBINE_LOCAL_ITERATED,
4298
GR_COMBINE_OTHER_NONE);
4299
MULSHADE_PRIM ();
4300
USE_T0 ();
4301
}
4302
4303
// ** (A-B)*C*D **
4304
static void cc_prim_sub_env_mul_t0_mul_shade ()
4305
{
4306
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4307
GR_COMBINE_FACTOR_TEXTURE_RGB,
4308
GR_COMBINE_LOCAL_NONE,
4309
GR_COMBINE_OTHER_ITERATED);
4310
MULSHADE_PRIMSUBENV ();
4311
USE_T0 ();
4312
}
4313
4314
// ** (A-B)*C+D **
4315
static void cc_t0_sub_t1_mul_prim_mul_shade_add_t1 () //Aded by Gonetz
4316
{
4317
if (cmb.combine_ext)
4318
{
4319
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4320
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4321
GR_CMBX_ZERO, 0,
4322
GR_CMBX_B, 0);
4323
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4324
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
4325
GR_CMBX_ITRGB, 0,
4326
GR_CMBX_B, 0);
4327
cmb.tex |= 3;
4328
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4329
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4330
GR_CMBX_ZERO, 1,
4331
GR_CMBX_ZERO, 0);
4332
MULSHADE_PRIM ();
4333
}
4334
else
4335
{
4336
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4337
GR_COMBINE_FACTOR_LOCAL,
4338
GR_COMBINE_LOCAL_CONSTANT,
4339
GR_COMBINE_OTHER_TEXTURE);
4340
CC_PRIM ();
4341
T0_ADD_T1 ();
4342
}
4343
}
4344
4345
static void cc_t0_sub_prim_mul_t0a_add_prim () //Aded by Gonetz
4346
{
4347
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4348
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
4349
GR_COMBINE_LOCAL_CONSTANT,
4350
GR_COMBINE_OTHER_TEXTURE);
4351
CC_PRIM ();
4352
USE_T0 ();
4353
}
4354
4355
static void cc_t0_sub_prim_mul_t1_add_shade () //Aded by Gonetz
4356
{
4357
if (cmb.combine_ext)
4358
{
4359
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4360
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4361
GR_CMBX_ZERO, 0,
4362
GR_CMBX_B, 0);
4363
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4364
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4365
GR_CMBX_OTHER_TEXTURE_RGB, 0,
4366
GR_CMBX_ZERO, 0);
4367
cmb.tex |= 3;
4368
cmb.tex_ccolor = rdp.prim_color;
4369
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4370
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4371
GR_CMBX_ZERO, 1,
4372
GR_CMBX_B, 0);
4373
}
4374
else
4375
{
4376
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4377
GR_COMBINE_FACTOR_ONE,
4378
GR_COMBINE_LOCAL_ITERATED,
4379
GR_COMBINE_OTHER_TEXTURE);
4380
MOD_0 (TMOD_TEX_SUB_COL);
4381
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4382
T0_MUL_T1 ();
4383
}
4384
}
4385
4386
static void cc_t0_sub_prim_mul_primlod_add_prim () //Aded by Gonetz
4387
{
4388
if (cmb.combine_ext)
4389
{
4390
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4391
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4392
GR_CMBX_CONSTANT_COLOR, 0,
4393
GR_CMBX_B, 0);
4394
SETSHADE_PRIM ();
4395
CC_PRIMLOD ();
4396
}
4397
else
4398
{
4399
// * not guaranteed to work if another iterated alpha is set
4400
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4401
GR_COMBINE_FACTOR_TEXTURE_RGB,
4402
GR_COMBINE_LOCAL_ITERATED,
4403
GR_COMBINE_OTHER_CONSTANT);
4404
SETSHADE_PRIM ();
4405
SETSHADE_1MPRIMLOD ();
4406
CC_PRIMLOD ();
4407
}
4408
USE_T0 ();
4409
}
4410
4411
static void cc_t0_sub_prim_mul_prima_add_prim () //Aded by Gonetz
4412
{
4413
// * not guaranteed to work if another iterated alpha is set
4414
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4415
GR_COMBINE_FACTOR_TEXTURE_RGB,
4416
GR_COMBINE_LOCAL_ITERATED,
4417
GR_COMBINE_OTHER_CONSTANT);
4418
SETSHADE_PRIM ();
4419
SETSHADE_1MPRIMA ();
4420
CC_PRIMA ();
4421
USE_T0 ();
4422
}
4423
4424
static void cc_t0_sub_prim_mul_shadea_add_prim () //Aded by Gonetz
4425
{
4426
// * not guaranteed to work if another iterated alpha is set
4427
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4428
GR_COMBINE_FACTOR_LOCAL_ALPHA,
4429
GR_COMBINE_LOCAL_ITERATED,
4430
GR_COMBINE_OTHER_TEXTURE);
4431
SETSHADE_PRIM ();
4432
USE_T0 ();
4433
}
4434
4435
static void cc_t0_sub_prim_mul_env_add_shade () //Aded by Gonetz
4436
{
4437
if (cmb.combine_ext)
4438
{
4439
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4440
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4441
GR_CMBX_ZERO, 1,
4442
GR_CMBX_ZERO, 0);
4443
cmb.tex |= 1;
4444
cmb.tex_ccolor = rdp.prim_color;
4445
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4446
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4447
GR_CMBX_CONSTANT_COLOR, 0,
4448
GR_CMBX_B, 0);
4449
CC_ENV ();
4450
}
4451
else
4452
{
4453
cc_t0_mul_env_add_shade ();
4454
}
4455
}
4456
4457
static void cc__t0_inter_t1_using_shadea__sub_prim_mul_env_add_shade () //Aded by Gonetz
4458
{
4459
if (cmb.combine_ext)
4460
{
4461
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4462
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4463
GR_CMBX_CONSTANT_COLOR, 0,
4464
GR_CMBX_B, 0);
4465
//have to pass shade alpha to combiner
4466
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
4467
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
4468
GR_CMBX_ZERO, 0,
4469
GR_CMBX_ZERO, 0);
4470
}
4471
else
4472
{
4473
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4474
GR_COMBINE_FACTOR_TEXTURE_RGB,
4475
GR_COMBINE_LOCAL_ITERATED,
4476
GR_COMBINE_OTHER_CONSTANT);
4477
}
4478
CC_ENV ();
4479
SUBSHADE_PRIMMULENV ();
4480
T0_INTER_T1_USING_SHADEA ();
4481
}
4482
4483
4484
static void cc_t0_sub_prim_mul_env_add_prim () //Aded by Gonetz
4485
{
4486
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4487
GR_COMBINE_FACTOR_TEXTURE_RGB,
4488
GR_COMBINE_LOCAL_ITERATED,
4489
GR_COMBINE_OTHER_CONSTANT);
4490
CC_ENV ();
4491
SETSHADE_PRIM ();
4492
SETSHADE_1MENV ();
4493
USE_T0 ();
4494
}
4495
4496
static void cc_t0_sub_prim_mul_enva_add_prim () //Aded by Gonetz41
4497
{
4498
if (cmb.combine_ext)
4499
{
4500
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4501
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4502
GR_CMBX_CONSTANT_COLOR, 0,
4503
GR_CMBX_B, 0);
4504
SETSHADE_PRIM ();
4505
CC_ENVA ();
4506
}
4507
else
4508
{
4509
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4510
GR_COMBINE_FACTOR_ONE,
4511
GR_COMBINE_LOCAL_CONSTANT,
4512
GR_COMBINE_OTHER_TEXTURE);
4513
CC_PRIM ();
4514
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
4515
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4516
MOD_0_FAC (rdp.env_color & 0xFF);
4517
}
4518
USE_T0 ();
4519
}
4520
4521
static void cc_t0_sub_prim_mul_primlod_add_env () //Aded by Gonetz
4522
{
4523
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4524
GR_COMBINE_FACTOR_ONE,
4525
GR_COMBINE_LOCAL_CONSTANT,
4526
GR_COMBINE_OTHER_TEXTURE);
4527
CC_ENV ();
4528
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
4529
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4530
MOD_0_FAC (lod_frac & 0xFF);
4531
USE_T0 ();
4532
}
4533
4534
static void cc_t0_sub__prim_mul_env () //Aded by Gonetz
4535
{
4536
if ( (rdp.prim_color & 0xFFFFFF00) == 0xFFFFFF00 && (rdp.env_color & 0xFFFFFF00) == 0xFFFFFF00)
4537
{
4538
CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
4539
GR_COMBINE_FACTOR_TEXTURE_RGB,
4540
GR_COMBINE_LOCAL_CONSTANT,
4541
GR_COMBINE_OTHER_NONE);
4542
CC_PRIM ();
4543
}
4544
else
4545
{
4546
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
4547
GR_COMBINE_FACTOR_ONE,
4548
GR_COMBINE_LOCAL_ITERATED,
4549
GR_COMBINE_OTHER_TEXTURE);
4550
SETSHADE_PRIM ();
4551
SETSHADE_ENV ();
4552
}
4553
USE_T0 ();
4554
}
4555
4556
static void cc__t0_mul_t1__sub_prim_mul__t0t1a__add_prim () //Aded by Gonetz
4557
{
4558
// * not guaranteed to work if another iterated alpha is set
4559
CCMB (GR_COMBINE_FUNCTION_BLEND,
4560
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
4561
GR_COMBINE_LOCAL_CONSTANT,
4562
GR_COMBINE_OTHER_TEXTURE);
4563
CC_PRIM ();
4564
T0_MUL_T1 ();
4565
A_T0_MUL_T1 ();
4566
}
4567
4568
static void cc__t1_inter_t0_using_enva__sub_prim_mul_prima_add_prim () //Aded by Gonetz
4569
{
4570
// * not guaranteed to work if another iterated alpha is set
4571
CCMB (GR_COMBINE_FUNCTION_BLEND,
4572
GR_COMBINE_FACTOR_LOCAL_ALPHA,
4573
GR_COMBINE_LOCAL_CONSTANT,
4574
GR_COMBINE_OTHER_TEXTURE);
4575
CC_PRIM ();
4576
CA_PRIM ();
4577
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
4578
T1_INTER_T0_USING_FACTOR (factor);
4579
}
4580
4581
static void cc_t0_sub_prim_mul_shade_add_env ()
4582
{
4583
if (cmb.combine_ext)
4584
{
4585
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4586
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4587
GR_CMBX_ZERO, 1,
4588
GR_CMBX_ZERO, 0);
4589
cmb.tex |= 1;
4590
cmb.tex_ccolor = rdp.prim_color;
4591
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4592
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
4593
GR_CMBX_ITRGB, 0,
4594
GR_CMBX_B, 0);
4595
CC_ENV ();
4596
}
4597
else
4598
{
4599
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4600
GR_COMBINE_FACTOR_TEXTURE_RGB,
4601
GR_COMBINE_LOCAL_CONSTANT,
4602
GR_COMBINE_OTHER_ITERATED);
4603
CC_ENV ();
4604
MOD_0 (TMOD_TEX_SUB_COL);
4605
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4606
USE_T0 ();
4607
}
4608
}
4609
4610
static void cc_t1_sub_prim_mul_shade_add_env ()
4611
{
4612
if (cmb.combine_ext)
4613
{
4614
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4615
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4616
GR_CMBX_ZERO, 1,
4617
GR_CMBX_ZERO, 0);
4618
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
4619
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4620
GR_CMBX_ZERO, 1,
4621
GR_CMBX_ZERO, 0);
4622
cmb.tex |= 2;
4623
cmb.tex_ccolor = rdp.prim_color;
4624
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4625
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
4626
GR_CMBX_ITRGB, 0,
4627
GR_CMBX_B, 0);
4628
CC_ENV ();
4629
}
4630
else
4631
{
4632
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4633
GR_COMBINE_FACTOR_TEXTURE_RGB,
4634
GR_COMBINE_LOCAL_CONSTANT,
4635
GR_COMBINE_OTHER_ITERATED);
4636
CC_ENV ();
4637
MOD_1 (TMOD_TEX_SUB_COL);
4638
MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
4639
USE_T1 ();
4640
}
4641
}
4642
4643
static void cc_t1_sub_k4_mul_prima_add_t0 ()
4644
{
4645
if (cmb.combine_ext)
4646
{
4647
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4648
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4649
GR_CMBX_DETAIL_FACTOR, 1,
4650
GR_CMBX_ZERO, 0);
4651
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
4652
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4653
GR_CMBX_ZERO, 1,
4654
GR_CMBX_ZERO, 0);
4655
cmb.tex |= 3;
4656
CC_BYTE (rdp.K4);
4657
cmb.tex_ccolor = cmb.ccolor;
4658
percent = (float)(rdp.prim_color&0xFF) / 255.0f;
4659
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
4660
CCMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
4661
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4662
GR_CMBX_CONSTANT_COLOR, 0,
4663
GR_CMBX_B, 0);
4664
}
4665
else
4666
{
4667
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4668
GR_COMBINE_FACTOR_ONE,
4669
GR_COMBINE_LOCAL_NONE,
4670
GR_COMBINE_OTHER_TEXTURE);
4671
T0_ADD_T1 ();
4672
}
4673
}
4674
4675
static void cc__t0_sub_prim_mul_shade_add_env__mul_shade ()
4676
{
4677
if (cmb.combine_ext)
4678
{
4679
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4680
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4681
GR_CMBX_ITRGB, 0,
4682
GR_CMBX_ZERO, 0);
4683
cmb.tex |= 1;
4684
cmb.tex_ccolor = rdp.prim_color;
4685
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4686
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4687
GR_CMBX_ITRGB, 0,
4688
GR_CMBX_ZERO, 0);
4689
CC_ENV ();
4690
}
4691
else
4692
{
4693
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4694
GR_COMBINE_FACTOR_TEXTURE_RGB,
4695
GR_COMBINE_LOCAL_CONSTANT,
4696
GR_COMBINE_OTHER_ITERATED);
4697
CC_ENV ();
4698
MOD_0 (TMOD_TEX_SUB_COL);
4699
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4700
USE_T0 ();
4701
}
4702
}
4703
4704
static void cc__t0_sub_prim_mul_shade_add_env__mul_shadea ()
4705
{
4706
if (cmb.combine_ext)
4707
{
4708
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4709
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4710
GR_CMBX_ITRGB, 0,
4711
GR_CMBX_ZERO, 0);
4712
cmb.tex |= 1;
4713
cmb.tex_ccolor = rdp.prim_color;
4714
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4715
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4716
GR_CMBX_ITALPHA, 0,
4717
GR_CMBX_ZERO, 0);
4718
CC_ENV ();
4719
}
4720
else
4721
{
4722
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4723
GR_COMBINE_FACTOR_TEXTURE_RGB,
4724
GR_COMBINE_LOCAL_CONSTANT,
4725
GR_COMBINE_OTHER_ITERATED);
4726
MULSHADE_SHADEA();
4727
CC_ENV ();
4728
MOD_0 (TMOD_TEX_SUB_COL);
4729
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4730
USE_T0 ();
4731
}
4732
}
4733
4734
static void cc__t0_mul_shade__sub_env_mul_shadea_add_env () //Aded by Gonetz
4735
{
4736
if (rdp.tiles[rdp.cur_tile].format == 4)
4737
{
4738
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4739
GR_COMBINE_FACTOR_OTHER_ALPHA,
4740
GR_COMBINE_LOCAL_CONSTANT,
4741
GR_COMBINE_OTHER_ITERATED);
4742
CC_ENV ();
4743
}
4744
else if (rdp.tiles[rdp.cur_tile].format == 2)
4745
{
4746
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4747
GR_COMBINE_FACTOR_LOCAL,
4748
GR_COMBINE_LOCAL_ITERATED,
4749
GR_COMBINE_OTHER_TEXTURE);
4750
USE_T0 ();
4751
}
4752
else
4753
{
4754
cc_t0 ();
4755
}
4756
}
4757
4758
static void cc_t0_sub_env_mul_k5_add_prim () //Aded by Gonetz
4759
{
4760
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4761
GR_COMBINE_FACTOR_ONE,
4762
GR_COMBINE_LOCAL_CONSTANT,
4763
GR_COMBINE_OTHER_TEXTURE);
4764
CC_PRIM ();
4765
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
4766
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4767
MOD_0_FAC (rdp.K5);
4768
USE_T0 ();
4769
}
4770
4771
static void cc_t0_sub_k4_mul_k5_add_t0 () //Aded by Gonetz
4772
{
4773
if (cmb.combine_ext)
4774
{
4775
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4776
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4777
GR_CMBX_CONSTANT_COLOR, 0,
4778
GR_CMBX_B, 0);
4779
wxUint32 temp = rdp.prim_lodfrac;
4780
rdp.prim_lodfrac = rdp.K4;
4781
SETSHADE_PRIMLOD ();
4782
rdp.prim_lodfrac = temp;
4783
CC_K5 ();
4784
USE_T0 ();
4785
}
4786
else
4787
{
4788
cc_t0 ();
4789
}
4790
}
4791
4792
static void cc__t0_inter_t1_using_t0__sub_shade_mul_prima_add_shade () //Aded by Gonetz
4793
{
4794
if (cmb.combine_ext)
4795
{
4796
cmb.tex |= 3;
4797
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4798
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4799
GR_CMBX_CONSTANT_COLOR, 0,
4800
GR_CMBX_B, 0);
4801
CC_PRIMA();
4802
T0_INTER_T1_USING_T0 ();
4803
}
4804
else
4805
{
4806
// * not guaranteed to work if another iterated alpha is set
4807
CCMB (GR_COMBINE_FUNCTION_BLEND,
4808
GR_COMBINE_FACTOR_LOCAL_ALPHA,
4809
GR_COMBINE_LOCAL_ITERATED,
4810
GR_COMBINE_OTHER_TEXTURE);
4811
SETSHADE_A_PRIM ();
4812
T1_INTER_T0_USING_T0 (); //strange, but this one looks better
4813
}
4814
}
4815
4816
static void cc_t0_sub__prim_mul_shade__mul_enva_add__prim_mul_shade () //Aded by Gonetz
4817
{
4818
// * not guaranteed to work if another iterated alpha is set
4819
CCMB (GR_COMBINE_FUNCTION_BLEND,
4820
GR_COMBINE_FACTOR_LOCAL_ALPHA,
4821
GR_COMBINE_LOCAL_ITERATED,
4822
GR_COMBINE_OTHER_TEXTURE);
4823
MULSHADE_PRIM ();
4824
SETSHADE_A_ENV ();
4825
USE_T0 ();
4826
}
4827
4828
static void cc_t0_sub_env_mul_t0_add_env () //Aded by Gonetz
4829
{
4830
CCMB (GR_COMBINE_FUNCTION_BLEND,
4831
GR_COMBINE_FACTOR_TEXTURE_RGB,
4832
GR_COMBINE_LOCAL_CONSTANT,
4833
GR_COMBINE_OTHER_TEXTURE);
4834
CC_ENV ();
4835
USE_T0 ();
4836
//(t0-env)*t0+env = t0*t0 + (1-t0)*env
4837
}
4838
4839
static void cc_t0_sub_env_mul_prima_add_env () //Aded by Gonetz
4840
{
4841
if (cmb.combine_ext)
4842
{
4843
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4844
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4845
GR_CMBX_DETAIL_FACTOR, 0,
4846
GR_CMBX_B, 0);
4847
cmb.tex |= 1;
4848
percent = (rdp.prim_color&0xFF) / 255.0f;
4849
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
4850
}
4851
else
4852
{
4853
MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
4854
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4855
wxUint32 prima = rdp.prim_color & 0xFF;
4856
MOD_0_COL1 ((prima<<24)|(prima|16)|(prima<<8));
4857
USE_T0 ();
4858
}
4859
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4860
GR_COMBINE_FACTOR_ONE,
4861
GR_COMBINE_LOCAL_NONE,
4862
GR_COMBINE_OTHER_TEXTURE);
4863
}
4864
4865
static void cc_t0_sub_env_mul_k5_add_env () //Aded by Gonetz
4866
{
4867
CCMB (GR_COMBINE_FUNCTION_BLEND,
4868
GR_COMBINE_FACTOR_LOCAL_ALPHA,
4869
GR_COMBINE_LOCAL_CONSTANT,
4870
GR_COMBINE_OTHER_TEXTURE);
4871
cmb.ccolor = (rdp.env_color&0xFFFFFF00) | rdp.K5;
4872
USE_T0 ();
4873
}
4874
4875
static void cc_t0_sub_env_mul_prim_add_shade () //Aded by Gonetz
4876
{
4877
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4878
GR_COMBINE_FACTOR_TEXTURE_RGB,
4879
GR_COMBINE_LOCAL_ITERATED,
4880
GR_COMBINE_OTHER_CONSTANT);
4881
CC_PRIM ();
4882
MOD_0 (TMOD_TEX_SUB_COL);
4883
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4884
USE_T0 ();
4885
}
4886
4887
static void cc_t0_sub_env_mul_shade_add_prim () //Aded by Gonetz
4888
{
4889
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4890
GR_COMBINE_FACTOR_TEXTURE_RGB,
4891
GR_COMBINE_LOCAL_CONSTANT,
4892
GR_COMBINE_OTHER_ITERATED);
4893
CC_PRIM ();
4894
if (cmb.combine_ext)
4895
{
4896
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4897
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4898
GR_CMBX_ZERO, 1,
4899
GR_CMBX_ZERO, 0);
4900
cmb.tex |= 1;
4901
cmb.tex_ccolor = rdp.env_color;
4902
}
4903
else
4904
{
4905
MOD_0 (TMOD_TEX_SUB_COL);
4906
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
4907
USE_T0 ();
4908
}
4909
}
4910
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
4913
{
4914
if (cmb.combine_ext)
4915
{
4916
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4917
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4918
GR_CMBX_ZERO, 0,
4919
GR_CMBX_B, 0);
4920
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4921
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
4922
GR_CMBX_TMU_CCOLOR, 0,
4923
GR_CMBX_ITRGB, 0);
4924
cmb.tex |= 3;
4925
CC_COLMULBYTE(rdp.prim_color, (rdp.env_color&0xFF));
4926
cmb.tex_ccolor = cmb.ccolor;
4927
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
4928
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4929
GR_CMBX_ZERO, 1,
4930
GR_CMBX_TEXTURE_RGB, 0);
4931
MULSHADE_PRIM ();
4932
CC_PRIMMULENV ();
4933
}
4934
else
4935
{
4936
cc_t0_sub_env_mul_prim_add_shade();
4937
}
4938
}
4939
4940
static void cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_prim () //Aded by Gonetz
4941
{
4942
if (!(rdp.env_color&0xFFFFFF00))
4943
{
4944
cc__t0_inter_t1_using_primlod__mul_shade_add_prim ();
4945
return;
4946
}
4947
if (!(rdp.prim_color&0xFFFFFF00))
4948
{
4949
if (!cmb.combine_ext)
4950
{
4951
cc_t0_sub_env_mul_shade ();
4952
return;
4953
}
4954
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4955
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
4956
GR_CMBX_ITRGB, 0,
4957
GR_CMBX_ZERO, 0);
4958
CC_ENV ();
4959
T0_INTER_T1_USING_FACTOR (lod_frac);
4960
return;
4961
}
4962
cc__t0_inter_t1_using_primlod__mul_shade_add_prim ();
4963
}
4964
4965
static void cc__t0_sub_env_mul_shade_add_prim__mul_shade () //Aded by Gonetz
4966
{
4967
if (!cmb.combine_ext)
4968
{
4969
cc_t0_sub_env_mul_shade_add_prim ();
4970
return;
4971
}
4972
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4973
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4974
GR_CMBX_ITRGB, 0,
4975
GR_CMBX_ZERO, 0);
4976
cmb.tex_ccolor = rdp.env_color;
4977
cmb.tex |= 1;
4978
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4979
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4980
GR_CMBX_ITRGB, 0,
4981
GR_CMBX_ZERO, 0);
4982
CC_PRIM ();
4983
}
4984
4985
static void cc__t0_sub_env_mul_shade_add_prim__mul_shadea () //Aded by Gonetz
4986
{
4987
if (!cmb.combine_ext)
4988
{
4989
cc_t0_sub_env_mul_shade_add_prim ();
4990
return;
4991
}
4992
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4993
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
4994
GR_CMBX_ITRGB, 0,
4995
GR_CMBX_B, 0);
4996
cmb.tex_ccolor = rdp.prim_color;
4997
cmb.tex |= 1;
4998
MOD_0 (TMOD_TEX_SUB_COL);
4999
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5000
5001
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5002
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
5003
GR_CMBX_ITALPHA, 0,
5004
GR_CMBX_ZERO, 0);
5005
}
5006
5007
static void cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_env ()
5008
{
5009
// (t1-t0)*primlod+t0, (cmb-env)*shade+env
5010
if (cmb.combine_ext)
5011
{
5012
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5013
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5014
GR_CMBX_ITRGB, 0,
5015
GR_CMBX_B, 0);
5016
}
5017
else
5018
{
5019
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5020
GR_COMBINE_FACTOR_TEXTURE_RGB,
5021
GR_COMBINE_LOCAL_CONSTANT,
5022
GR_COMBINE_OTHER_ITERATED);
5023
}
5024
CC_ENV ();
5025
T0_INTER_T1_USING_FACTOR (lod_frac);
5026
}
5027
5028
5029
static void cc_t0_sub_env_mul_enva_add_prim () //Aded by Gonetz
5030
{
5031
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5032
GR_COMBINE_FACTOR_ONE,
5033
GR_COMBINE_LOCAL_CONSTANT,
5034
GR_COMBINE_OTHER_TEXTURE);
5035
CC_PRIM ();
5036
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
5037
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5038
MOD_0_FAC (rdp.env_color & 0xFF);
5039
USE_T0 ();
5040
}
5041
5042
static void cc_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz
5043
{
5044
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5045
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5046
GR_COMBINE_LOCAL_CONSTANT,
5047
GR_COMBINE_OTHER_TEXTURE);
5048
CC_PRIM ();
5049
USE_T0 ();
5050
//(1-t)*prim+t == (1-prim)*t+prim
5051
}
5052
5053
static void cc_one_sub_t1_mul_prim_add_t1 () //Aded by Gonetz
5054
{
5055
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5056
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5057
GR_COMBINE_LOCAL_CONSTANT,
5058
GR_COMBINE_OTHER_TEXTURE);
5059
CC_PRIM ();
5060
USE_T1 ();
5061
//(1-t)*prim+t == (1-prim)*t+prim
5062
}
5063
5064
static void cc_one_sub_t1_mul_env_add_t1 () //Aded by Gonetz
5065
{
5066
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5067
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5068
GR_COMBINE_LOCAL_CONSTANT,
5069
GR_COMBINE_OTHER_TEXTURE);
5070
CC_ENV ();
5071
USE_T1 ();
5072
//(1-t)*env+t == (1-env)*t+env
5073
}
5074
5075
static void cc_one_sub_t0_mul_primlod_add_t0 () //Aded by Gonetz
5076
{
5077
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5078
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5079
GR_COMBINE_LOCAL_CONSTANT,
5080
GR_COMBINE_OTHER_TEXTURE);
5081
CC_PRIMLOD ();
5082
USE_T0 ();
5083
//(1-t)*primlod+t == (1-primlod)*t+primlod
5084
}
5085
5086
static void cc_one_sub_t0_mul_prima_add_t0 () //Aded by Gonetz
5087
{
5088
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5089
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
5090
GR_COMBINE_LOCAL_CONSTANT,
5091
GR_COMBINE_OTHER_TEXTURE);
5092
CA_PRIM ();
5093
USE_T0 ();
5094
//(1-t)*prima+t == (1-prima)*t+prima
5095
}
5096
5097
static void cc_one_sub__t0_inter_t1_using_enva__mul_prim_add__t0_inter_t1_using_enva () //Aded by Gonetz
5098
{
5099
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5100
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5101
GR_COMBINE_LOCAL_CONSTANT,
5102
GR_COMBINE_OTHER_TEXTURE);
5103
CC_PRIM ();
5104
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
5105
T0_INTER_T1_USING_FACTOR (factor);
5106
//(1-t)*prim+t == (1-prim)*t+prim
5107
}
5108
5109
static void cc_one_sub_t0_mul_shade_add_t0 ()
5110
{
5111
CCMB (GR_COMBINE_FUNCTION_BLEND,
5112
GR_COMBINE_FACTOR_TEXTURE_RGB,
5113
GR_COMBINE_LOCAL_ITERATED,
5114
GR_COMBINE_OTHER_CONSTANT);
5115
CC (0xFFFFFFFF);
5116
USE_T0 ();
5117
}
5118
5119
static void cc_one_sub_prim_mul_t0_add_prim () //Aded by Gonetz
5120
{
5121
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5122
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5123
GR_COMBINE_LOCAL_CONSTANT,
5124
GR_COMBINE_OTHER_TEXTURE);
5125
CC_PRIM ();
5126
USE_T0 ();
5127
}
5128
5129
static void cc_one_sub_prim_mul_t0a_add_prim ()
5130
{
5131
if (cmb.combine_ext)
5132
{
5133
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ONE_MINUS_X,
5134
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
5135
GR_CMBX_TEXTURE_ALPHA, 0,
5136
GR_CMBX_B, 0);
5137
CC_PRIM ();
5138
} else {
5139
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5140
GR_COMBINE_FACTOR_ONE,
5141
GR_COMBINE_LOCAL_NONE,
5142
GR_COMBINE_OTHER_TEXTURE);
5143
MOD_0 (TMOD_COL_INTER_COL1_USING_TEXA);
5144
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5145
MOD_0_COL1 (0xFFFFFF00);
5146
}
5147
USE_T0 ();
5148
}
5149
5150
static void cc_one_sub_prim_mul__t0_inter_t1_using_primlod__add_prim () //Aded by Gonetz
5151
{
5152
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5153
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5154
GR_COMBINE_LOCAL_CONSTANT,
5155
GR_COMBINE_OTHER_TEXTURE);
5156
CC_PRIM ();
5157
T0_INTER_T1_USING_FACTOR (lod_frac);
5158
}
5159
5160
static void cc__one_sub_prim_mul_shade__mul_t0_add__prim_mul_shade () //Aded by Gonetz
5161
{
5162
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5163
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5164
GR_COMBINE_LOCAL_ITERATED,
5165
GR_COMBINE_OTHER_TEXTURE);
5166
MULSHADE_PRIM ();
5167
USE_T0 ();
5168
}
5169
5170
static void cc_one_sub_shade_mul__t0_inter_t1_using_primlod__add_shade () //Aded by Gonetz
5171
{
5172
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5173
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5174
GR_COMBINE_LOCAL_ITERATED,
5175
GR_COMBINE_OTHER_TEXTURE);
5176
T0_INTER_T1_USING_FACTOR (lod_frac);
5177
}
5178
5179
static void cc_one_sub_prim_mul_t1_add_prim () //Aded by Gonetz
5180
{
5181
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5182
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5183
GR_COMBINE_LOCAL_CONSTANT,
5184
GR_COMBINE_OTHER_TEXTURE);
5185
CC_PRIM ();
5186
USE_T1 ();
5187
}
5188
5189
static void cc_one_sub_prim_mul_env_add_prim () //Aded by Gonetz
5190
{
5191
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5192
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5193
GR_COMBINE_LOCAL_CONSTANT,
5194
GR_COMBINE_OTHER_ITERATED);
5195
CC_PRIM ();
5196
SETSHADE_ENV ();
5197
}
5198
5199
static void cc_t0_sub_prim_mul_shade_add_shade () //Aded by Gonetz
5200
{
5201
if (cmb.combine_ext)
5202
{
5203
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5204
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5205
GR_CMBX_ITRGB, 0,
5206
GR_CMBX_ITRGB, 0);
5207
CC_PRIM ();
5208
}
5209
else
5210
{
5211
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5212
GR_COMBINE_FACTOR_LOCAL,
5213
GR_COMBINE_LOCAL_ITERATED,
5214
GR_COMBINE_OTHER_TEXTURE);
5215
if (rdp.prim_color & 0xFFFFFF00)
5216
{
5217
MOD_0 (TMOD_TEX_SUB_COL);
5218
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5219
}
5220
}
5221
USE_T0 ();
5222
}
5223
5224
static void cc__t0_mul_t0__sub_prim_mul_shade_add_shade () //Aded by Gonetz
5225
{
5226
if (cmb.combine_ext)
5227
{
5228
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5229
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5230
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
5231
GR_CMBX_ZERO, 0);
5232
cmb.tex |= 1;
5233
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5234
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5235
GR_CMBX_ITRGB, 0,
5236
GR_CMBX_ITRGB, 0);
5237
CC_PRIM ();
5238
}
5239
else
5240
cc_t0_sub_prim_mul_shade_add_shade();
5241
}
5242
5243
static void cc__t0_mul_t1__sub_prim_mul_shade_add_shade () //Aded by Gonetz
5244
{
5245
if (cmb.combine_ext)
5246
{
5247
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5248
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5249
GR_CMBX_ITRGB, 0,
5250
GR_CMBX_ITRGB, 0);
5251
CC_PRIM ();
5252
}
5253
else
5254
{
5255
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5256
GR_COMBINE_FACTOR_LOCAL,
5257
GR_COMBINE_LOCAL_ITERATED,
5258
GR_COMBINE_OTHER_TEXTURE);
5259
}
5260
T0_MUL_T1 ();
5261
}
5262
5263
static void cc__t0_mul_t1__sub_env_mul_shade_add_shade () //Aded by Gonetz
5264
{
5265
if (cmb.combine_ext)
5266
{
5267
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5268
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5269
GR_CMBX_ITRGB, 0,
5270
GR_CMBX_ITRGB, 0);
5271
CC_ENV ();
5272
}
5273
else
5274
{
5275
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5276
GR_COMBINE_FACTOR_LOCAL,
5277
GR_COMBINE_LOCAL_ITERATED,
5278
GR_COMBINE_OTHER_TEXTURE);
5279
}
5280
T0_MUL_T1 ();
5281
}
5282
5283
static void cc_one_sub_prim_mul_shade_add_shade () //Aded by Gonetz
5284
{
5285
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5286
GR_COMBINE_FACTOR_LOCAL,
5287
GR_COMBINE_LOCAL_ITERATED,
5288
GR_COMBINE_OTHER_CONSTANT);
5289
CC_1SUBPRIM ();
5290
}
5291
5292
static void cc_t0_inter_env_using_prima ()
5293
{
5294
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5295
GR_COMBINE_FACTOR_ONE,
5296
GR_COMBINE_LOCAL_NONE,
5297
GR_COMBINE_OTHER_TEXTURE);
5298
USE_T0 ();
5299
5300
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
5301
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5302
MOD_0_FAC (rdp.prim_color & 0xFF);
5303
}
5304
5305
static void cc_t0_inter_env_using_enva ()
5306
{
5307
//(env-t0)*env_a+t0
5308
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5309
GR_COMBINE_FACTOR_ONE,
5310
GR_COMBINE_LOCAL_NONE,
5311
GR_COMBINE_OTHER_TEXTURE);
5312
if (cmb.combine_ext)
5313
{
5314
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
5315
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5316
GR_CMBX_TMU_CALPHA, 0,
5317
GR_CMBX_B, 0);
5318
cmb.tex_ccolor = rdp.env_color;
5319
cmb.tex |= 1;
5320
}
5321
else
5322
{
5323
USE_T0 ();
5324
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
5325
MOD_0_COL (rdp.env_color & 0xFFFFFFFF);
5326
MOD_0_FAC (rdp.env_color & 0xFF);
5327
}
5328
}
5329
5330
static void cc_t0_inter_noise_using_prim ()
5331
{
5332
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5333
GR_COMBINE_FACTOR_ONE,
5334
GR_COMBINE_LOCAL_NONE,
5335
GR_COMBINE_OTHER_TEXTURE);
5336
USE_T0 ();
5337
5338
MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);
5339
MOD_0_COL (rdp.prim_color);
5340
rdp.noise = RDP::noise_texture;
5341
}
5342
5343
static void cc_t0_inter_noise_using_env ()
5344
{
5345
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5346
GR_COMBINE_FACTOR_ONE,
5347
GR_COMBINE_LOCAL_NONE,
5348
GR_COMBINE_OTHER_TEXTURE);
5349
USE_T0 ();
5350
5351
MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);
5352
MOD_0_COL (rdp.env_color);
5353
rdp.noise = RDP::noise_texture;
5354
}
5355
5356
static void cc_t0_sub_env_mul_enva_add_env ()
5357
{
5358
CCMB (GR_COMBINE_FUNCTION_BLEND,
5359
GR_COMBINE_FACTOR_LOCAL_ALPHA,
5360
GR_COMBINE_LOCAL_CONSTANT,
5361
GR_COMBINE_OTHER_TEXTURE);
5362
CC_ENV ();
5363
CA_ENV ();
5364
USE_T0 ();
5365
}
5366
5367
//Added by Gonetz
5368
static void cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_env ()
5369
{
5370
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5371
GR_COMBINE_FACTOR_TEXTURE_RGB,
5372
GR_COMBINE_LOCAL_ITERATED,
5373
GR_COMBINE_OTHER_CONSTANT);
5374
CC_1SUBPRIM ();
5375
SETSHADE_PRIM ();
5376
SETSHADE_ENV ();
5377
T0_MUL_T1 ();
5378
}
5379
5380
//Added by Gonetz
5381
static void cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade ()
5382
{
5383
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5384
GR_COMBINE_FACTOR_TEXTURE_RGB,
5385
GR_COMBINE_LOCAL_ITERATED,
5386
GR_COMBINE_OTHER_CONSTANT);
5387
CC_1SUBPRIM ();
5388
MULSHADE_PRIM ();
5389
T0_MUL_T1 ();
5390
}
5391
5392
//Added by Gonetz
5393
static void cc_one_sub_prim_mul__t0_inter_t1_using_enva__add_prim ()
5394
{
5395
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5396
GR_COMBINE_FACTOR_TEXTURE_RGB,
5397
GR_COMBINE_LOCAL_ITERATED,
5398
GR_COMBINE_OTHER_CONSTANT);
5399
CC_1SUBPRIM ();
5400
SETSHADE_PRIM ();
5401
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
5402
T0_INTER_T1_USING_FACTOR (factor);
5403
}
5404
5405
static void cc_one_sub_env_mul__t0_inter_t1_using_primlod__add_env () //Aded by Gonetz
5406
{
5407
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5408
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5409
GR_COMBINE_LOCAL_CONSTANT,
5410
GR_COMBINE_OTHER_TEXTURE);
5411
CC_ENV ();
5412
T0_INTER_T1_USING_FACTOR (lod_frac);
5413
}
5414
5415
static void cc_one_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env () //Aded by Gonetz
5416
{
5417
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5418
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5419
GR_COMBINE_LOCAL_CONSTANT,
5420
GR_COMBINE_OTHER_TEXTURE);
5421
CC_ENV ();
5422
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
5423
}
5424
5425
static void cc_one_sub_env_mul_t0_add_prim_mul_env () //Aded by Gonetz
5426
{
5427
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5428
GR_COMBINE_FACTOR_TEXTURE_RGB,
5429
GR_COMBINE_LOCAL_ITERATED,
5430
GR_COMBINE_OTHER_CONSTANT);
5431
CC_1SUBENV ();
5432
SETSHADE_PRIM ();
5433
SETSHADE_ENV ();
5434
USE_T0 ();
5435
}
5436
5437
static void cc_one_sub_env_mul_t0_add_env () //Aded by Gonetz
5438
{
5439
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5440
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5441
GR_COMBINE_LOCAL_CONSTANT,
5442
GR_COMBINE_OTHER_TEXTURE);
5443
CC_ENV ();
5444
USE_T0 ();
5445
}
5446
5447
static void cc_one_sub_env_mul_t0_add_shade () //Aded by Gonetz
5448
{
5449
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5450
GR_COMBINE_FACTOR_TEXTURE_RGB,
5451
GR_COMBINE_LOCAL_ITERATED,
5452
GR_COMBINE_OTHER_CONSTANT);
5453
CC_1SUBENV ();
5454
USE_T0 ();
5455
}
5456
5457
static void cc_one_sub_env_mul_prim_add_env () //Aded by Gonetz
5458
{
5459
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5460
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5461
GR_COMBINE_LOCAL_CONSTANT,
5462
GR_COMBINE_OTHER_ITERATED);
5463
CC_ENV ();
5464
SETSHADE_PRIM ();
5465
}
5466
5467
static void cc_one_sub_env_mul_prim_add_shade () //Aded by Gonetz
5468
{
5469
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5470
GR_COMBINE_FACTOR_ONE,
5471
GR_COMBINE_LOCAL_ITERATED,
5472
GR_COMBINE_OTHER_CONSTANT);
5473
CC_1SUBENV ();
5474
CC_C1MULC2 (rdp.prim_color, cmb.ccolor);
5475
}
5476
5477
static void cc_one_sub_env_mul_shade_add_env () //Aded by Gonetz
5478
{
5479
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5480
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5481
GR_COMBINE_LOCAL_CONSTANT,
5482
GR_COMBINE_OTHER_ITERATED);
5483
CC_ENV ();
5484
}
5485
5486
static void cc_one_sub_env_mul_prim_add__t0_inter_t1_using_env () //Aded by Gonetz
5487
{
5488
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5489
GR_COMBINE_FACTOR_ONE,
5490
GR_COMBINE_LOCAL_ITERATED,
5491
GR_COMBINE_OTHER_TEXTURE);
5492
SETSHADE_PRIM ();
5493
SETSHADE_1MENV ();
5494
T0_INTER_T1_USING_ENV ();
5495
}
5496
5497
static void cc_one_sub_shade_mul_t0_add_shade ()
5498
{
5499
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5500
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5501
GR_COMBINE_LOCAL_ITERATED,
5502
GR_COMBINE_OTHER_TEXTURE);
5503
USE_T0 ();
5504
}
5505
5506
static void cc_one_sub_shade_mul__t0_mul_shadea__add_shade ()
5507
{
5508
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5509
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5510
GR_COMBINE_LOCAL_ITERATED,
5511
GR_COMBINE_OTHER_TEXTURE);
5512
if (cmb.combine_ext)
5513
{
5514
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5515
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5516
GR_CMBX_ITALPHA, 0,
5517
GR_CMBX_ZERO, 0);
5518
cmb.tex |= 1;
5519
}
5520
else
5521
{
5522
USE_T0 ();
5523
}
5524
}
5525
5526
static void cc_one_sub_shade_mul_env_add_shade ()
5527
{
5528
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5529
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
5530
GR_COMBINE_LOCAL_ITERATED,
5531
GR_COMBINE_OTHER_CONSTANT);
5532
CC_ENV ();
5533
}
5534
5535
static void cc_one_sub_shade_mul_shadea_add_shade ()
5536
{
5537
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5538
GR_COMBINE_FACTOR_LOCAL_ALPHA,
5539
GR_COMBINE_LOCAL_ITERATED,
5540
GR_COMBINE_OTHER_CONSTANT);
5541
CC (0xFFFFFFFF);
5542
}
5543
5544
///*
5545
static void cc_t0_sub_env_mul_prim_add_env () //Aded by Gonetz
5546
{
5547
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5548
GR_COMBINE_FACTOR_TEXTURE_RGB,
5549
GR_COMBINE_LOCAL_ITERATED,
5550
GR_COMBINE_OTHER_CONSTANT);
5551
SETSHADE_1MPRIM();
5552
SETSHADE_ENV();
5553
CC_PRIM ();
5554
USE_T0 ();
5555
//(t0-env)*prim+env == t0*prim + env*(1-prim)
5556
}
5557
//*/
5558
static void cc__t0_inter_t1_using_t1a__sub_env_mul_enva_add_env () //Aded by Gonetz
5559
{
5560
CCMB (GR_COMBINE_FUNCTION_BLEND,
5561
GR_COMBINE_FACTOR_LOCAL_ALPHA,
5562
GR_COMBINE_LOCAL_CONSTANT,
5563
GR_COMBINE_OTHER_TEXTURE);
5564
cmb.ccolor = rdp.env_color;
5565
T0_INTER_T1_USING_T1A ();
5566
}
5567
5568
static void cc_t0_sub_shade_mul_t0a_add_shade ()
5569
{
5570
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5571
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
5572
GR_COMBINE_LOCAL_ITERATED,
5573
GR_COMBINE_OTHER_TEXTURE);
5574
USE_T0 ();
5575
A_USE_T0 ();
5576
}
5577
5578
static void cc_t0_sub_shade_mul_prima_add_shade () //Aded by Gonetz
5579
{
5580
// * not guaranteed to work if another iterated alpha is set
5581
CCMB (GR_COMBINE_FUNCTION_BLEND,
5582
GR_COMBINE_FACTOR_LOCAL_ALPHA,
5583
GR_COMBINE_LOCAL_ITERATED,
5584
GR_COMBINE_OTHER_TEXTURE);
5585
SETSHADE_A_PRIM ();
5586
USE_T0 ();
5587
}
5588
5589
static void cc_t0_sub_shade_mul_shadea_add_shade () //Aded by Gonetz
5590
{
5591
// * not guaranteed to work if another iterated alpha is set
5592
CCMB (GR_COMBINE_FUNCTION_BLEND,
5593
GR_COMBINE_FACTOR_LOCAL_ALPHA,
5594
GR_COMBINE_LOCAL_ITERATED,
5595
GR_COMBINE_OTHER_TEXTURE);
5596
USE_T0 ();
5597
}
5598
5599
static void cc__t0_mul_t1_add_env__mul_shadea_add_shade ()
5600
{
5601
if (cmb.combine_ext)
5602
{
5603
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5604
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5605
GR_CMBX_ZERO, 0,
5606
GR_CMBX_B, 0);
5607
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
5608
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
5609
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
5610
GR_CMBX_B, 0);
5611
cmb.tex_ccolor = rdp.env_color;
5612
cmb.tex |= 3;
5613
}
5614
else
5615
{
5616
T0_MUL_T1 ();
5617
}
5618
// * not guaranteed to work if another iterated alpha is set
5619
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5620
GR_COMBINE_FACTOR_LOCAL_ALPHA,
5621
GR_COMBINE_LOCAL_ITERATED,
5622
GR_COMBINE_OTHER_TEXTURE);
5623
}
5624
5625
static void cc_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz
5626
{
5627
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5628
GR_COMBINE_FACTOR_TEXTURE_RGB,
5629
GR_COMBINE_LOCAL_ITERATED,
5630
GR_COMBINE_OTHER_CONSTANT);
5631
CC_1SUBENV ();
5632
SETSHADE_PRIM ();
5633
SETSHADE_ENV ();
5634
USE_T0 ();
5635
//(prim-t0)*env+t0 == prim*env + t0*(1-env)
5636
}
5637
5638
static void cc_prim_sub_t0_mul_t1_add_t0 () //Aded by Gonetz
5639
{
5640
if (!cmb.combine_ext)
5641
{
5642
cc_t0_mul_t1 ();
5643
return;
5644
}
5645
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5646
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5647
GR_CMBX_ZERO, 0,
5648
GR_CMBX_B, 0);
5649
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
5650
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5651
GR_CMBX_OTHER_TEXTURE_RGB, 0,
5652
GR_CMBX_B, 0);
5653
cmb.tex_ccolor = rdp.prim_color;
5654
cmb.tex |= 3;
5655
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5656
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5657
GR_CMBX_ZERO, 0,
5658
GR_CMBX_B, 0);
5659
}
5660
5661
static void cc_env_sub_t0_mul_prim_add_t0 () //Aded by Gonetz
5662
{
5663
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5664
GR_COMBINE_FACTOR_TEXTURE_RGB,
5665
GR_COMBINE_LOCAL_ITERATED,
5666
GR_COMBINE_OTHER_CONSTANT);
5667
CC_1SUBPRIM ();
5668
SETSHADE_PRIM ();
5669
SETSHADE_ENV ();
5670
USE_T0 ();
5671
//(env-t0)*prim+t0 == prim*env + t0*(1-prim)
5672
}
5673
5674
static void cc_env_sub_t0_mul_shade_add_t0 () //Aded by Gonetz
5675
{
5676
if (!cmb.combine_ext)
5677
{
5678
cc_t0_mul_shade ();
5679
return;
5680
}
5681
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
5682
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5683
GR_CMBX_ITRGB, 0,
5684
GR_CMBX_B, 0);
5685
CC_ENV ();
5686
USE_T0 ();
5687
}
5688
5689
static void cc_prim_sub_env_mul_t0_add_prim ()
5690
{
5691
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5692
GR_COMBINE_FACTOR_TEXTURE_RGB,
5693
GR_COMBINE_LOCAL_CONSTANT,
5694
GR_COMBINE_OTHER_ITERATED);
5695
CC_PRIM ();
5696
SETSHADE_PRIMSUBENV ();
5697
USE_T0 ();
5698
}
5699
5700
static void cc_prim_sub_env_mul_t0_add_env ()
5701
{
5702
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5703
GR_COMBINE_FACTOR_TEXTURE_RGB,
5704
GR_COMBINE_LOCAL_ITERATED,
5705
GR_COMBINE_OTHER_CONSTANT);
5706
CC_PRIM ();
5707
SETSHADE_ENV ();
5708
USE_T0 ();
5709
}
5710
5711
static void cc__prim_sub_env_mul_t0_add_env__add_primlod ()
5712
{
5713
if (!cmb.combine_ext)
5714
{
5715
cc_prim_sub_env_mul_t0_add_env ();
5716
return;
5717
}
5718
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5719
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
5720
GR_CMBX_ITRGB, 0,
5721
GR_CMBX_B, 0);
5722
cmb.tex_ccolor = rdp.env_color;
5723
cmb.tex |= 1;
5724
SETSHADE_PRIMSUBENV ();
5725
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
5726
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
5727
GR_CMBX_ZERO, 1,
5728
GR_CMBX_TEXTURE_RGB, 0);
5729
CC_PRIMLOD ();
5730
}
5731
5732
static void cc__prim_sub_env_mul_t0_add_env__add_shadea ()
5733
{
5734
if (!cmb.combine_ext)
5735
{
5736
cc_prim_sub_env_mul_t0_add_env ();
5737
return;
5738
}
5739
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5740
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
5741
GR_CMBX_ITRGB, 0,
5742
GR_CMBX_B, 0);
5743
cmb.tex_ccolor = rdp.env_color;
5744
cmb.tex |= 1;
5745
SETSHADE_PRIMSUBENV ();
5746
CCMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
5747
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
5748
GR_CMBX_ZERO, 1,
5749
GR_CMBX_TEXTURE_RGB, 0);
5750
}
5751
5752
static void cc_prim_sub_env_mul__t0_mul_t1a__add_env ()
5753
{
5754
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5755
GR_COMBINE_FACTOR_TEXTURE_RGB,
5756
GR_COMBINE_LOCAL_ITERATED,
5757
GR_COMBINE_OTHER_CONSTANT);
5758
CC_PRIM ();
5759
SETSHADE_ENV ();
5760
T0_MUL_T1A ();
5761
}
5762
5763
static void cc_prim_sub_env_mul__t0_mul_prim__add_env ()
5764
{
5765
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5766
GR_COMBINE_FACTOR_TEXTURE_RGB,
5767
GR_COMBINE_LOCAL_ITERATED,
5768
GR_COMBINE_OTHER_CONSTANT);
5769
CC_PRIM ();
5770
SETSHADE_ENV ();
5771
if (cmb.combine_ext)
5772
{
5773
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5774
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5775
GR_CMBX_TMU_CCOLOR, 0,
5776
GR_CMBX_ZERO, 0);
5777
cmb.tex_ccolor = rdp.prim_color;
5778
cmb.tex |= 1;
5779
}
5780
else
5781
{
5782
USE_T0 ();
5783
}
5784
}
5785
5786
static void cc_prim_sub_env_mul_t0_mul_shade_add_env ()
5787
{
5788
if (cmb.combine_ext)
5789
{
5790
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5791
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5792
GR_CMBX_TMU_CCOLOR, 0,
5793
GR_CMBX_ZERO, 0);
5794
CC_PRIMSUBENV ();
5795
cmb.tex_ccolor = cmb.ccolor;
5796
cmb.tex |= 1;
5797
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5798
GR_COMBINE_FACTOR_TEXTURE_RGB,
5799
GR_COMBINE_LOCAL_CONSTANT,
5800
GR_COMBINE_OTHER_ITERATED);
5801
CC_ENV ();
5802
}
5803
else
5804
{
5805
cc_t0_mul_prim_mul_shade ();
5806
}
5807
}
5808
5809
static void cc_prim_sub_env_mul__t0_sub_t0_mul_prima__add_env ()
5810
{
5811
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5812
GR_COMBINE_FACTOR_TEXTURE_RGB,
5813
GR_COMBINE_LOCAL_ITERATED,
5814
GR_COMBINE_OTHER_CONSTANT);
5815
CC_PRIM ();
5816
SETSHADE_ENV ();
5817
rdp.best_tex = 0;
5818
cmb.tex |= 1;
5819
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
5820
cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
5821
percent = (float)(rdp.prim_color&0xFF) / 255.0f;
5822
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
5823
}
5824
5825
static void cc_prim_sub_env_mul__one_sub_t0_mul_primlod_add_prim__add_env ()
5826
{
5827
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5828
GR_COMBINE_FACTOR_TEXTURE_RGB,
5829
GR_COMBINE_LOCAL_CONSTANT,
5830
GR_COMBINE_OTHER_ITERATED);
5831
CC_ENV ();
5832
SETSHADE_PRIM ();
5833
if (cmb.combine_ext)
5834
{
5835
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
5836
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
5837
GR_CMBX_DETAIL_FACTOR, 0,
5838
GR_CMBX_B, 0);
5839
cmb.tex_ccolor = rdp.prim_color;
5840
cmb.tex |= 1;
5841
cmb.dc0_detailmax = cmb.dc1_detailmax = (float)lod_frac / 255.0f;
5842
}
5843
else
5844
{
5845
USE_T0 ();
5846
}
5847
}
5848
5849
static void cc_prim_sub_env_mul__t0_add_t1a__add_env ()
5850
{
5851
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5852
GR_COMBINE_FACTOR_TEXTURE_RGB,
5853
GR_COMBINE_LOCAL_ITERATED,
5854
GR_COMBINE_OTHER_CONSTANT);
5855
CC_PRIM ();
5856
SETSHADE_ENV ();
5857
rdp.best_tex = 0;
5858
cmb.tex |= 3;
5859
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;
5860
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
5861
cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE;
5862
}
5863
5864
static void cc_prim_sub_env_mul__t0_sub_prim_mul_enva_add_t0__add_env ()
5865
{
5866
// (t0-prim)*env_a+t0, (prim-env)*cmb+env
5867
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5868
GR_COMBINE_FACTOR_TEXTURE_RGB,
5869
GR_COMBINE_LOCAL_CONSTANT,
5870
GR_COMBINE_OTHER_ITERATED);
5871
CC_ENV ();
5872
SETSHADE_PRIM ();
5873
USE_T0 ();
5874
5875
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC_ADD_TEX);
5876
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5877
MOD_0_FAC (rdp.env_color & 0xFF);
5878
}
5879
5880
static void cc_prim_sub_env_mul__t1_sub_prim_mul_enva_add_t0__add_env ()
5881
{
5882
//(t1-prim)*env_a+t0, (prim-env)*cmb+env
5883
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5884
GR_COMBINE_FACTOR_TEXTURE_RGB,
5885
GR_COMBINE_LOCAL_CONSTANT,
5886
GR_COMBINE_OTHER_ITERATED);
5887
CC_ENV ();
5888
SETSHADE_PRIM ();
5889
if (cmb.combine_ext)
5890
{
5891
if (rdp.tiles[rdp.cur_tile].format > 2)
5892
{
5893
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5894
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5895
GR_CMBX_ZERO, 0,
5896
GR_CMBX_B, 0);
5897
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
5898
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
5899
GR_CMBX_DETAIL_FACTOR, 0,
5900
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
5901
}
5902
else
5903
{
5904
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5905
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
5906
GR_CMBX_DETAIL_FACTOR, 0,
5907
GR_CMBX_ZERO, 0);
5908
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
5909
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5910
GR_CMBX_ZERO, 1,
5911
GR_CMBX_ZERO, 0);
5912
}
5913
cmb.tex_ccolor = rdp.prim_color;
5914
cmb.tex |= 3;
5915
cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;
5916
}
5917
else
5918
{
5919
MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);
5920
MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
5921
MOD_1_FAC (rdp.env_color & 0xFF);
5922
T0_ADD_T1 ();
5923
}
5924
}
5925
5926
static void cc_prim_sub_env_mul__t1_sub_prim_mul_prima_add_t0__add_env ()
5927
{
5928
// (t1-prim)*prim_a+t0, (prim-env)*cmb+env
5929
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5930
GR_COMBINE_FACTOR_TEXTURE_RGB,
5931
GR_COMBINE_LOCAL_CONSTANT,
5932
GR_COMBINE_OTHER_ITERATED);
5933
CC_ENV ();
5934
SETSHADE_PRIM ();
5935
if (cmb.combine_ext)
5936
{
5937
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5938
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
5939
GR_CMBX_ZERO, 1,
5940
GR_CMBX_ZERO, 0);
5941
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
5942
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5943
GR_CMBX_DETAIL_FACTOR, 0,
5944
GR_CMBX_B, 0);
5945
cmb.tex_ccolor = rdp.prim_color;
5946
cmb.tex |= 3;
5947
cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.prim_color&0xFF) / 255.0f;
5948
}
5949
else
5950
{
5951
MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);
5952
MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
5953
MOD_1_FAC (rdp.prim_color & 0xFF);
5954
T0_ADD_T1 ();
5955
}
5956
}
5957
5958
static void cc__prim_sub_env_mul_t0_add_env__mul_primlod ()
5959
{
5960
CCMB (GR_COMBINE_FUNCTION_BLEND,
5961
GR_COMBINE_FACTOR_TEXTURE_RGB,
5962
GR_COMBINE_LOCAL_ITERATED,
5963
GR_COMBINE_OTHER_CONSTANT);
5964
float factor = (float)rdp.prim_lodfrac / 255.0f;
5965
wxUint8 r = (wxUint8)((rdp.prim_color >> 24) & 0xFF);
5966
r = (wxUint8)((float)r * factor);
5967
wxUint8 g = (wxUint8)((rdp.prim_color >> 16) & 0xFF);
5968
g = (wxUint8)((float)g * factor);
5969
wxUint8 b = (wxUint8)((rdp.prim_color >> 8) & 0xFF);
5970
b = (wxUint8)((float)b * factor);
5971
CC ((r<<24) | (g<<16) | (b<<8));
5972
SETSHADE_ENV ();
5973
MULSHADE_PRIMLOD ();
5974
USE_T0 ();
5975
}
5976
5977
static void cc__prim_sub_env_mul_t0_add_env__mul_k5 ()
5978
{
5979
CCMB (GR_COMBINE_FUNCTION_BLEND,
5980
GR_COMBINE_FACTOR_TEXTURE_RGB,
5981
GR_COMBINE_LOCAL_ITERATED,
5982
GR_COMBINE_OTHER_CONSTANT);
5983
float factor = (float)rdp.K5 / 255.0f;
5984
wxUint8 r = (wxUint8)((rdp.prim_color >> 24) & 0xFF);
5985
r = (wxUint8)((float)r * factor);
5986
wxUint8 g = (wxUint8)((rdp.prim_color >> 16) & 0xFF);
5987
g = (wxUint8)((float)g * factor);
5988
wxUint8 b = (wxUint8)((rdp.prim_color >> 8) & 0xFF);
5989
b = (wxUint8)((float)b * factor);
5990
CC ((r<<24) | (g<<16) | (b<<8));
5991
SETSHADE_ENV ();
5992
MULSHADE_K5 ();
5993
USE_T0 ();
5994
}
5995
5996
static void cc_prim_sub_env_mul_t1_add_env ()
5997
{
5998
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5999
GR_COMBINE_FACTOR_TEXTURE_RGB,
6000
GR_COMBINE_LOCAL_ITERATED,
6001
GR_COMBINE_OTHER_CONSTANT);
6002
CC_PRIM ();
6003
SETSHADE_ENV ();
6004
if (rdp.cycle_mode == 0 || ((settings.hacks&hack_KI) && (rdp.cycle2 & 0x0FFFFFFF) == 0x01FF1FFF))
6005
{
6006
USE_T0 ();
6007
}
6008
else
6009
{
6010
USE_T1 ();
6011
}
6012
}
6013
6014
static void cc_prim_sub_env_mul_t1_add_env_mul_t0 ()
6015
{
6016
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6017
GR_COMBINE_FACTOR_ONE,
6018
GR_COMBINE_LOCAL_NONE,
6019
GR_COMBINE_OTHER_TEXTURE);
6020
MOD_1 (TMOD_COL_INTER_COL1_USING_TEX);
6021
MOD_1_COL (rdp.env_color & 0xFFFFFF00);
6022
MOD_1_COL1 (rdp.prim_color & 0xFFFFFF00);
6023
T0_MUL_T1 ();
6024
}
6025
6026
static void cc_prim_sub_env_mul_t0a_add_t0 ()
6027
{
6028
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6029
GR_COMBINE_FACTOR_ONE,
6030
GR_COMBINE_LOCAL_NONE,
6031
GR_COMBINE_OTHER_TEXTURE);
6032
CC_PRIMSUBENV ();
6033
if (cmb.combine_ext)
6034
{
6035
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
6036
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6037
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
6038
GR_CMBX_B, 0);
6039
cmb.tex_ccolor = cmb.ccolor;
6040
cmb.tex |= 1;
6041
}
6042
else
6043
{
6044
MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);
6045
MOD_0_COL (cmb.ccolor & 0xFFFFFF00);
6046
USE_T0 ();
6047
}
6048
}
6049
6050
//Added by Gonetz
6051
static void cc_prim_sub_env_mul_t0a_add_env ()
6052
{
6053
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6054
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6055
GR_COMBINE_LOCAL_CONSTANT,
6056
GR_COMBINE_OTHER_ITERATED);
6057
CC_ENV ();
6058
SETSHADE_PRIM ();
6059
USE_T0 ();
6060
}
6061
6062
//Added by Gonetz
6063
static void cc_prim_sub_env_mul_t1a_add_env ()
6064
{
6065
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6066
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6067
GR_COMBINE_LOCAL_CONSTANT,
6068
GR_COMBINE_OTHER_ITERATED);
6069
CC_ENV ();
6070
SETSHADE_PRIM ();
6071
USE_T1 ();
6072
}
6073
6074
//Added by Gonetz
6075
static void cc_prim_sub_env_mul__t0_mul_t1__add_env ()
6076
{
6077
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6078
GR_COMBINE_FACTOR_TEXTURE_RGB,
6079
GR_COMBINE_LOCAL_ITERATED,
6080
GR_COMBINE_OTHER_CONSTANT);
6081
CC_PRIM ();
6082
SETSHADE_ENV ();
6083
T0_MUL_T1 ();
6084
}
6085
6086
//Added by Gonetz
6087
static void cc_prim_sub_env_mul__t0_add_t1__add_env ()
6088
{
6089
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6090
GR_COMBINE_FACTOR_TEXTURE_RGB,
6091
GR_COMBINE_LOCAL_ITERATED,
6092
GR_COMBINE_OTHER_CONSTANT);
6093
CC_PRIM ();
6094
SETSHADE_ENV ();
6095
T0_ADD_T1 ();
6096
}
6097
6098
//Added by Gonetz
6099
static void cc_prim_sub_env_mul__t0_mul_enva__add_env ()
6100
{
6101
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6102
GR_COMBINE_FACTOR_TEXTURE_RGB,
6103
GR_COMBINE_LOCAL_CONSTANT,
6104
GR_COMBINE_OTHER_ITERATED);
6105
CC_ENV ();
6106
SETSHADE_PRIMSUBENV ();
6107
SETSHADE_ENVA ();
6108
USE_T0 ();
6109
}
6110
6111
//Added by Gonetz
6112
static void cc_prim_sub_env_mul__t0_mul_shade__add_env ()
6113
{
6114
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6115
GR_COMBINE_FACTOR_TEXTURE_RGB,
6116
GR_COMBINE_LOCAL_CONSTANT,
6117
GR_COMBINE_OTHER_ITERATED);
6118
CC_ENV ();
6119
MULSHADE_PRIMSUBENV ();
6120
USE_T0 ();
6121
}
6122
6123
//Added by Gonetz
6124
static void cc_prim_sub_env_mul__prim_inter_t0_using_shadea__add_env ()
6125
{
6126
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6127
GR_COMBINE_FACTOR_TEXTURE_RGB,
6128
GR_COMBINE_LOCAL_CONSTANT,
6129
GR_COMBINE_OTHER_ITERATED);
6130
CC_ENV ();
6131
if (cmb.combine_ext)
6132
{
6133
SETSHADE_PRIM ();
6134
PRIM_INTER_T0_USING_SHADEA ();
6135
}
6136
else
6137
{
6138
SETSHADE_PRIMSUBENV ();
6139
MULSHADE_SHADEA ();
6140
USE_T0 ();
6141
}
6142
}
6143
6144
//Added by Gonetz
6145
static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t0__add_env ()
6146
{
6147
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6148
GR_COMBINE_FACTOR_TEXTURE_RGB,
6149
GR_COMBINE_LOCAL_ITERATED,
6150
GR_COMBINE_OTHER_CONSTANT);
6151
CC_PRIM ();
6152
SETSHADE_ENV ();
6153
if (cmb.combine_ext)
6154
{
6155
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
6156
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6157
GR_CMBX_DETAIL_FACTOR, 0,
6158
GR_CMBX_B, 0);
6159
cmb.tex_ccolor = rdp.prim_color;
6160
cmb.tex |= 1;
6161
percent = (float)(lod_frac) / 255.0f;
6162
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6163
}
6164
else
6165
{
6166
USE_T0 ();
6167
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC_ADD_TEX);
6168
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
6169
MOD_0_FAC (lod_frac & 0xFF);
6170
}
6171
}
6172
6173
static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_shade__add_env ()
6174
{
6175
if (!cmb.combine_ext)
6176
{
6177
cc_prim_sub_env_mul_t0_add_env ();
6178
return;
6179
}
6180
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6181
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
6182
GR_CMBX_DETAIL_FACTOR, 0,
6183
GR_CMBX_ITRGB, 0);
6184
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
6185
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6186
GR_CMBX_TEXTURE_RGB, 0,
6187
GR_CMBX_B, 0);
6188
cmb.tex_ccolor = rdp.prim_color;
6189
CC_PRIM ();
6190
SETSHADE_ENV ();
6191
cmb.tex |= 1;
6192
percent = (float)(lod_frac) / 255.0f;
6193
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6194
}
6195
6196
static void cc_prim_sub_env_mul__t0_sub_shade_mul_primlod_add_shade__add_env ()
6197
{
6198
if (!cmb.combine_ext)
6199
{
6200
cc_prim_sub_env_mul_t0_add_env ();
6201
return;
6202
}
6203
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6204
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6205
GR_CMBX_DETAIL_FACTOR, 0,
6206
GR_CMBX_B, 0);
6207
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
6208
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6209
GR_CMBX_TEXTURE_RGB, 0,
6210
GR_CMBX_B, 0);
6211
CC_PRIM ();
6212
SETSHADE_ENV ();
6213
cmb.tex |= 1;
6214
percent = (float)(lod_frac) / 255.0f;
6215
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6216
}
6217
6218
//Added by Gonetz
6219
static void cc_lavatex_sub_prim_mul_shade_add_lavatex ()
6220
{
6221
if (cmb.combine_ext)
6222
{
6223
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
6224
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
6225
GR_CMBX_ITRGB, 0,
6226
GR_CMBX_B, 0);
6227
CC_PRIM ();
6228
T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();
6229
}
6230
else
6231
{
6232
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6233
GR_COMBINE_FACTOR_ONE,
6234
GR_COMBINE_LOCAL_NONE,
6235
GR_COMBINE_OTHER_TEXTURE);
6236
T0_ADD_T1 ();
6237
}
6238
}
6239
6240
//Added by Gonetz
6241
static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t1__add_env ()
6242
{
6243
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6244
GR_COMBINE_FACTOR_TEXTURE_RGB,
6245
GR_COMBINE_LOCAL_ITERATED,
6246
GR_COMBINE_OTHER_CONSTANT);
6247
CC_PRIM ();
6248
SETSHADE_ENV ();
6249
T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();
6250
}
6251
6252
//Added by Gonetz
6253
static void cc_prim_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()
6254
{
6255
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6256
GR_COMBINE_FACTOR_TEXTURE_RGB,
6257
GR_COMBINE_LOCAL_ITERATED,
6258
GR_COMBINE_OTHER_CONSTANT);
6259
CC_PRIM ();
6260
SETSHADE_ENV ();
6261
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
6262
}
6263
6264
//Added by Gonetz
6265
static void cc_prim_sub_env_mul__t0_inter_t1_using_t1__add_env ()
6266
{
6267
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6268
GR_COMBINE_FACTOR_TEXTURE_RGB,
6269
GR_COMBINE_LOCAL_ITERATED,
6270
GR_COMBINE_OTHER_CONSTANT);
6271
CC_PRIM ();
6272
SETSHADE_ENV ();
6273
T0_INTER_T1_USING_T1 ();
6274
}
6275
6276
//Added by Gonetz
6277
static void cc_prim_sub_env_mul__t0_inter_t1_using_enva_alpha__add_env ()
6278
{
6279
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6280
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6281
GR_COMBINE_LOCAL_ITERATED,
6282
GR_COMBINE_OTHER_CONSTANT);
6283
CC_PRIM ();
6284
SETSHADE_ENV ();
6285
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6286
T0_INTER_T1_USING_FACTOR (factor);
6287
A_T0_INTER_T1_USING_FACTOR (factor);
6288
}
6289
6290
//Added by Gonetz
6291
static void cc__env_inter_prim_using_t0__sub_shade_mul_t0a_add_shade ()
6292
{
6293
if (!cmb.combine_ext)
6294
{
6295
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6296
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6297
GR_COMBINE_LOCAL_ITERATED,
6298
GR_COMBINE_OTHER_TEXTURE);
6299
MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
6300
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
6301
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
6302
USE_T0 ();
6303
A_USE_T0 ();
6304
}
6305
else
6306
{
6307
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6308
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
6309
GR_CMBX_DETAIL_FACTOR, 0,
6310
GR_CMBX_B, 0);
6311
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
6312
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6313
GR_CMBX_TEXTURE_ALPHA, 0,
6314
GR_CMBX_B, 0);
6315
cmb.tex_ccolor = rdp.env_color;
6316
cmb.tex |= 1;
6317
wxUint32 pse = (rdp.prim_color>>24) - (rdp.env_color>>24);
6318
percent = (float)(pse) / 255.0f;
6319
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6320
}
6321
}
6322
6323
//Added by Gonetz
6324
static void cc_prim_sub_env_mul_shade_add_t0 ()
6325
{
6326
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6327
GR_COMBINE_FACTOR_ONE,
6328
GR_COMBINE_LOCAL_ITERATED,
6329
GR_COMBINE_OTHER_TEXTURE);
6330
MULSHADE_PRIMSUBENV ();
6331
USE_T0 ();
6332
}
6333
6334
//Added by Gonetz
6335
static void cc_prim_sub_env_mul_prima_add_t0 ()
6336
{
6337
if (rdp.prim_color != 0x000000ff)
6338
{
6339
if (cmb.combine_ext)
6340
{
6341
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
6342
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6343
GR_CMBX_CONSTANT_ALPHA, 0,
6344
GR_CMBX_TEXTURE_RGB, 0);
6345
CC_PRIM ();
6346
SETSHADE_ENV ();
6347
}
6348
else
6349
{
6350
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6351
GR_COMBINE_FACTOR_ONE,
6352
GR_COMBINE_LOCAL_ITERATED,
6353
GR_COMBINE_OTHER_TEXTURE);
6354
SETSHADE_PRIMSUBENV ();
6355
SETSHADE_PRIMA ();
6356
}
6357
}
6358
else if ((rdp.prim_color&0xFFFFFF00) - (rdp.env_color&0xFFFFFF00) == 0)
6359
{
6360
cc_t0 ();
6361
return;
6362
}
6363
else
6364
{
6365
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
6366
GR_COMBINE_FACTOR_ONE,
6367
GR_COMBINE_LOCAL_CONSTANT,
6368
GR_COMBINE_OTHER_TEXTURE);
6369
CC_ENV ();
6370
}
6371
USE_T0 ();
6372
}
6373
6374
//Added by Gonetz
6375
static void cc_prim_sub_env_mul_shade_add_env ()
6376
{
6377
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6378
GR_COMBINE_FACTOR_ONE,
6379
GR_COMBINE_LOCAL_CONSTANT,
6380
GR_COMBINE_OTHER_ITERATED);
6381
CC_ENV ();
6382
MULSHADE_PRIMSUBENV ();
6383
}
6384
6385
static void cc_prim_sub_env_mul_shadea_add_env ()
6386
{
6387
// * not guaranteed to work if another iterated alpha is set
6388
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6389
GR_COMBINE_FACTOR_OTHER_ALPHA,
6390
GR_COMBINE_LOCAL_CONSTANT,
6391
GR_COMBINE_OTHER_ITERATED);
6392
CC_ENV ();
6393
SETSHADE_PRIM ();
6394
}
6395
6396
//Added by Gonetz
6397
static void cc_prim_sub_env_mul__t0_inter_t1_using_prima__add_env ()
6398
{
6399
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6400
GR_COMBINE_FACTOR_TEXTURE_RGB,
6401
GR_COMBINE_LOCAL_CONSTANT,
6402
GR_COMBINE_OTHER_ITERATED);
6403
CC_ENV ();
6404
SETSHADE_PRIM ();
6405
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
6406
T0_INTER_T1_USING_FACTOR (factor);
6407
}
6408
6409
//Added by Gonetz
6410
static void cc_prim_sub_env_mul__t1_inter_t0_using_prima__add_env ()
6411
{
6412
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6413
GR_COMBINE_FACTOR_TEXTURE_RGB,
6414
GR_COMBINE_LOCAL_CONSTANT,
6415
GR_COMBINE_OTHER_ITERATED);
6416
CC_ENV ();
6417
SETSHADE_PRIM ();
6418
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
6419
T1_INTER_T0_USING_FACTOR (factor);
6420
}
6421
6422
static void cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env ()
6423
{
6424
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6425
GR_COMBINE_FACTOR_TEXTURE_RGB,
6426
GR_COMBINE_LOCAL_CONSTANT,
6427
GR_COMBINE_OTHER_ITERATED);
6428
CC_ENV ();
6429
SETSHADE_PRIM ();
6430
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6431
T0_INTER_T1_USING_FACTOR (factor);
6432
}
6433
6434
static void cc_prim_sub_center_mul__t0_inter_t1_using_enva__add_env ()
6435
{
6436
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6437
GR_COMBINE_FACTOR_TEXTURE_RGB,
6438
GR_COMBINE_LOCAL_ITERATED,
6439
GR_COMBINE_OTHER_CONSTANT);
6440
CC_C1SUBC2 (rdp.prim_color, rdp.CENTER);
6441
SETSHADE_ENV ();
6442
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6443
T0_INTER_T1_USING_FACTOR (factor);
6444
}
6445
6446
static void cc_prim_sub_env_mul__t1_inter_t0_using_enva__add_env ()
6447
{
6448
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6449
GR_COMBINE_FACTOR_TEXTURE_RGB,
6450
GR_COMBINE_LOCAL_CONSTANT,
6451
GR_COMBINE_OTHER_ITERATED);
6452
CC_ENV ();
6453
SETSHADE_PRIM ();
6454
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6455
T1_INTER_T0_USING_FACTOR (factor);
6456
}
6457
6458
static void cc_prim_sub_env_mul__t0_mul_enva_add_t1__add_env ()
6459
{
6460
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6461
GR_COMBINE_FACTOR_TEXTURE_RGB,
6462
GR_COMBINE_LOCAL_CONSTANT,
6463
GR_COMBINE_OTHER_ITERATED);
6464
CC_ENV ();
6465
SETSHADE_PRIM ();
6466
if (cmb.combine_ext)
6467
{
6468
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6469
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6470
GR_CMBX_ZERO, 1,
6471
GR_CMBX_ZERO, 0);
6472
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6473
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6474
GR_CMBX_DETAIL_FACTOR, 0,
6475
GR_CMBX_B, 0);
6476
cmb.tex |= 3;
6477
percent = (float)(rdp.env_color&0xFF) / 255.0f;
6478
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6479
}
6480
else
6481
{
6482
T0_ADD_T1 ();
6483
}
6484
}
6485
6486
static void cc_prim_sub_env_mul__t1_mul_enva_add_t0__add_env ()
6487
{
6488
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6489
GR_COMBINE_FACTOR_TEXTURE_RGB,
6490
GR_COMBINE_LOCAL_CONSTANT,
6491
GR_COMBINE_OTHER_ITERATED);
6492
CC_ENV ();
6493
SETSHADE_PRIM ();
6494
T1_MUL_ENVA_ADD_T0 ();
6495
}
6496
6497
//Added by Gonetz
6498
static void cc_prim_sub_env_mul_primlod_add__t0_inter_t1_using_primlod ()
6499
{
6500
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6501
GR_COMBINE_FACTOR_ONE,
6502
GR_COMBINE_LOCAL_CONSTANT,
6503
GR_COMBINE_OTHER_TEXTURE);
6504
CC_PRIMSUBENV();
6505
CC_COLMULBYTE(cmb.ccolor, rdp.prim_lodfrac);
6506
T0_INTER_T1_USING_FACTOR (lod_frac);
6507
}
6508
6509
static void cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env ()
6510
{
6511
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6512
GR_COMBINE_FACTOR_TEXTURE_RGB,
6513
GR_COMBINE_LOCAL_CONSTANT,
6514
GR_COMBINE_OTHER_ITERATED);
6515
CC_ENV ();
6516
SETSHADE_PRIM ();
6517
T0_INTER_T1_USING_FACTOR (lod_frac);
6518
}
6519
6520
static void cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env ()
6521
{
6522
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6523
GR_COMBINE_FACTOR_TEXTURE_RGB,
6524
GR_COMBINE_LOCAL_CONSTANT,
6525
GR_COMBINE_OTHER_ITERATED);
6526
CC_ENV ();
6527
SETSHADE_PRIM ();
6528
T1_INTER_T0_USING_FACTOR (lod_frac);
6529
}
6530
6531
static void cc_prim_sub_env_mul__t1_mul_primlod_add_t0__add_env ()
6532
{
6533
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6534
GR_COMBINE_FACTOR_TEXTURE_RGB,
6535
GR_COMBINE_LOCAL_CONSTANT,
6536
GR_COMBINE_OTHER_ITERATED);
6537
CC_ENV ();
6538
SETSHADE_PRIM ();
6539
T1_MUL_PRIMLOD_ADD_T0 ();
6540
}
6541
6542
static void cc_prim_sub_env_mul__t1_sub_prim_mul_t0_add_t0__add_env ()
6543
{
6544
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6545
GR_COMBINE_FACTOR_TEXTURE_RGB,
6546
GR_COMBINE_LOCAL_CONSTANT,
6547
GR_COMBINE_OTHER_ITERATED);
6548
CC_ENV ();
6549
SETSHADE_PRIM ();
6550
if (cmb.combine_ext)
6551
{
6552
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6553
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
6554
GR_CMBX_ZERO, 1,
6555
GR_CMBX_ZERO, 0);
6556
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
6557
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6558
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
6559
GR_CMBX_B, 0);
6560
cmb.tex_ccolor = rdp.prim_color;
6561
cmb.tex |= 3;
6562
}
6563
else
6564
{
6565
MOD_1 (TMOD_TEX_SUB_COL);
6566
MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
6567
T0_MUL_T1_ADD_T0 ();
6568
}
6569
}
6570
6571
//Added by Gonetz
6572
static void cc__prim_sub_env_mul_prim_add_t0__mul_prim ()
6573
{
6574
if (cmb.combine_ext)
6575
{
6576
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6577
GR_CMBX_ITRGB, GR_FUNC_MODE_X,
6578
GR_CMBX_ZERO, 1,
6579
GR_CMBX_ZERO, 0);
6580
cmb.tex |= 1;
6581
SETSHADE_PRIMSUBENV ();
6582
SETSHADE_PRIM ();
6583
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
6584
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
6585
GR_CMBX_CONSTANT_COLOR, 0,
6586
GR_CMBX_ZERO, 0);
6587
CC_PRIM() ;
6588
}
6589
else
6590
{
6591
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6592
GR_COMBINE_FACTOR_ONE,
6593
GR_COMBINE_LOCAL_ITERATED,
6594
GR_COMBINE_OTHER_TEXTURE);
6595
SETSHADE_PRIMSUBENV ();
6596
SETSHADE_PRIM ();
6597
USE_T0 ();
6598
}
6599
}
6600
6601
//Added by Gonetz
6602
static void cc_prim_sub_env_mul_prim_add_env ()
6603
{
6604
if (cmb.combine_ext)
6605
{
6606
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
6607
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6608
GR_CMBX_CONSTANT_COLOR, 0,
6609
GR_CMBX_B, 0);
6610
SETSHADE_ENV();
6611
CC_PRIM ();
6612
}
6613
else
6614
{
6615
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6616
GR_COMBINE_FACTOR_ONE,
6617
GR_COMBINE_LOCAL_CONSTANT,
6618
GR_COMBINE_OTHER_ITERATED);
6619
SETSHADE_PRIMSUBENV ();
6620
SETSHADE_PRIM ();
6621
CC_ENV ();
6622
}
6623
}
6624
6625
static void cc_prim_sub_env_mul_primlod_add_env ()
6626
{
6627
if (cmb.combine_ext)
6628
{
6629
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6630
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
6631
GR_CMBX_ZERO, 0,
6632
GR_CMBX_B, 0);
6633
cmb.tex |= 1;
6634
CC_PRIMLOD ();
6635
cmb.tex_ccolor = cmb.ccolor;
6636
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
6637
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
6638
GR_CMBX_TEXTURE_RGB, 0,
6639
GR_CMBX_B, 0);
6640
SETSHADE_PRIM();
6641
CC_ENV ();
6642
}
6643
else
6644
{
6645
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6646
GR_COMBINE_FACTOR_ONE,
6647
GR_COMBINE_LOCAL_CONSTANT,
6648
GR_COMBINE_OTHER_ITERATED);
6649
SETSHADE_PRIMSUBENV ();
6650
SETSHADE_PRIMLOD ();
6651
CC_ENV ();
6652
}
6653
}
6654
6655
//Added by Gonetz
6656
static void cc_prim_sub_env_mul_enva_add_t0 ()
6657
{
6658
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6659
GR_COMBINE_FACTOR_ONE,
6660
GR_COMBINE_LOCAL_ITERATED,
6661
GR_COMBINE_OTHER_TEXTURE);
6662
SETSHADE_PRIMSUBENV ();
6663
SETSHADE_ENVA ();
6664
USE_T0 ();
6665
}
6666
6667
static void cc_prim_sub_env_mul_enva_add_env ()
6668
{
6669
if (cmb.combine_ext)
6670
{
6671
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6672
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
6673
GR_CMBX_ZERO, 0,
6674
GR_CMBX_B, 0);
6675
cmb.tex |= 1;
6676
CC_ENVA ();
6677
cmb.tex_ccolor = cmb.ccolor;
6678
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
6679
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
6680
GR_CMBX_TEXTURE_RGB, 0,
6681
GR_CMBX_B, 0);
6682
SETSHADE_PRIM();
6683
CC_ENV ();
6684
}
6685
else
6686
{
6687
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6688
GR_COMBINE_FACTOR_ONE,
6689
GR_COMBINE_LOCAL_CONSTANT,
6690
GR_COMBINE_OTHER_ITERATED);
6691
SETSHADE_PRIMSUBENV ();
6692
SETSHADE_ENVA ();
6693
CC_ENV ();
6694
}
6695
}
6696
6697
//Added by Gonetz
6698
static void cc_prim_sub_shade_mul_t0_add_env ()
6699
{
6700
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6701
GR_COMBINE_FACTOR_TEXTURE_RGB,
6702
GR_COMBINE_LOCAL_CONSTANT,
6703
GR_COMBINE_OTHER_ITERATED);
6704
CC_ENV ();
6705
COLSUBSHADE_PRIM ();
6706
USE_T0 ();
6707
}
6708
6709
//Added by Gonetz
6710
static void cc_prim_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade ()
6711
{
6712
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6713
GR_COMBINE_FACTOR_TEXTURE_RGB,
6714
GR_COMBINE_LOCAL_ITERATED,
6715
GR_COMBINE_OTHER_CONSTANT);
6716
CC_PRIM ();
6717
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
6718
}
6719
6720
static void cc_prim_sub_shade_mul_t1a_add_shade ()
6721
{
6722
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6723
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6724
GR_COMBINE_LOCAL_ITERATED,
6725
GR_COMBINE_OTHER_CONSTANT);
6726
CC_PRIM ();
6727
USE_T1 ();
6728
}
6729
6730
//Added by Gonetz
6731
static void cc_prim_sub_shade_mul_t0_add_shade ()
6732
{
6733
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6734
GR_COMBINE_FACTOR_TEXTURE_RGB,
6735
GR_COMBINE_LOCAL_ITERATED,
6736
GR_COMBINE_OTHER_CONSTANT);
6737
CC_PRIM ();
6738
USE_T0 ();
6739
}
6740
6741
//Added by Gonetz
6742
static void cc_prim_sub_shade_mul_t1_add_shade ()
6743
{
6744
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6745
GR_COMBINE_FACTOR_TEXTURE_RGB,
6746
GR_COMBINE_LOCAL_ITERATED,
6747
GR_COMBINE_OTHER_CONSTANT);
6748
CC_PRIM ();
6749
USE_T1 ();
6750
}
6751
6752
//Added by Gonetz
6753
static void cc_prim_sub_shade_mul__t0a_mul_t1__add_shade ()
6754
{
6755
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6756
GR_COMBINE_FACTOR_TEXTURE_RGB,
6757
GR_COMBINE_LOCAL_ITERATED,
6758
GR_COMBINE_OTHER_CONSTANT);
6759
CC_PRIM ();
6760
T0A_MUL_T1();
6761
}
6762
6763
//Added by Gonetz
6764
static void cc_prim_sub_shade_mul__t0_inter_t1_using_enva__add_shade ()
6765
{
6766
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6767
GR_COMBINE_FACTOR_TEXTURE_RGB,
6768
GR_COMBINE_LOCAL_ITERATED,
6769
GR_COMBINE_OTHER_CONSTANT);
6770
CC_PRIM ();
6771
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
6772
T0_INTER_T1_USING_FACTOR (factor);
6773
}
6774
6775
//Added by Gonetz
6776
static void cc_prim_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()
6777
{
6778
if (cmb.combine_ext)
6779
{
6780
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
6781
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
6782
GR_CMBX_TEXTURE_RGB, 0,
6783
GR_CMBX_B, 0);
6784
}
6785
else
6786
{
6787
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6788
GR_COMBINE_FACTOR_TEXTURE_RGB,
6789
GR_COMBINE_LOCAL_ITERATED,
6790
GR_COMBINE_OTHER_CONSTANT);
6791
}
6792
CC_PRIM ();
6793
T0_INTER_T1_USING_SHADEA ();
6794
}
6795
6796
//Added by Gonetz
6797
static void cc_prim_sub_shade_mul_prima_add_shade ()
6798
{
6799
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6800
GR_COMBINE_FACTOR_OTHER_ALPHA,
6801
GR_COMBINE_LOCAL_ITERATED,
6802
GR_COMBINE_OTHER_CONSTANT);
6803
CC_PRIM ();
6804
CA_PRIM ();
6805
}
6806
6807
//Added by Gonetz
6808
static void cc_prim_sub_shade_mul_env_add_shade ()
6809
{
6810
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6811
GR_COMBINE_FACTOR_ONE,
6812
GR_COMBINE_LOCAL_ITERATED,
6813
GR_COMBINE_OTHER_CONSTANT);
6814
CC_PRIMMULENV ();
6815
MULSHADE_1MENV ();
6816
}
6817
6818
//Added by Gonetz
6819
static void cc_prim_sub_shade_mul_shadea_add_shade ()
6820
{
6821
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6822
GR_COMBINE_FACTOR_LOCAL_ALPHA,
6823
GR_COMBINE_LOCAL_ITERATED,
6824
GR_COMBINE_OTHER_CONSTANT);
6825
CC_PRIM ();
6826
}
6827
6828
static void cc_env_sub_prim_mul_t0_add_prim ()
6829
{
6830
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6831
GR_COMBINE_FACTOR_TEXTURE_RGB,
6832
GR_COMBINE_LOCAL_ITERATED,
6833
GR_COMBINE_OTHER_CONSTANT);
6834
CC_ENV ();
6835
SETSHADE_PRIM ();
6836
USE_T0 ();
6837
}
6838
6839
static void cc_env_sub_prim_mul_t1_add_prim ()
6840
{
6841
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6842
GR_COMBINE_FACTOR_TEXTURE_RGB,
6843
GR_COMBINE_LOCAL_ITERATED,
6844
GR_COMBINE_OTHER_CONSTANT);
6845
CC_ENV ();
6846
SETSHADE_PRIM ();
6847
USE_T1 ();
6848
}
6849
6850
static void cc_env_sub_prim_mul_t0a_add_prim ()
6851
{
6852
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6853
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6854
GR_COMBINE_LOCAL_ITERATED,
6855
GR_COMBINE_OTHER_CONSTANT);
6856
CC_ENV ();
6857
SETSHADE_PRIM ();
6858
A_USE_T0 ();
6859
}
6860
6861
static void cc_env_sub_prim_mul_t1a_add_prim ()
6862
{
6863
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6864
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6865
GR_COMBINE_LOCAL_ITERATED,
6866
GR_COMBINE_OTHER_CONSTANT);
6867
CC_ENV ();
6868
SETSHADE_PRIM ();
6869
A_USE_T1 ();
6870
}
6871
6872
static void cc_env_sub_prim_mul__t0_add_t1__add_prim ()
6873
{
6874
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6875
GR_COMBINE_FACTOR_TEXTURE_RGB,
6876
GR_COMBINE_LOCAL_ITERATED,
6877
GR_COMBINE_OTHER_CONSTANT);
6878
CC_ENV ();
6879
SETSHADE_PRIM ();
6880
T0_ADD_T1 ();
6881
}
6882
6883
static void cc_env_sub_prim_mul__t0_mul_t1__add_prim () //Added by Gonetz
6884
{
6885
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6886
GR_COMBINE_FACTOR_TEXTURE_RGB,
6887
GR_COMBINE_LOCAL_ITERATED,
6888
GR_COMBINE_OTHER_CONSTANT);
6889
CC_ENV ();
6890
SETSHADE_PRIM ();
6891
T0_MUL_T1 ();
6892
}
6893
6894
static void cc_env_sub_prim_mul__t0t1a__add_prim () //Added by Gonetz
6895
{
6896
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6897
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6898
GR_COMBINE_LOCAL_ITERATED,
6899
GR_COMBINE_OTHER_CONSTANT);
6900
CC_ENV ();
6901
SETSHADE_PRIM ();
6902
A_T0_MUL_T1 ();
6903
}
6904
6905
static void cc_env_sub_prim_mul__t0_inter_t1_using_t1__add_prim () //Added by Gonetz
6906
{
6907
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6908
GR_COMBINE_FACTOR_TEXTURE_RGB,
6909
GR_COMBINE_LOCAL_ITERATED,
6910
GR_COMBINE_OTHER_CONSTANT);
6911
CC_ENV ();
6912
SETSHADE_PRIM ();
6913
T0_INTER_T1_USING_T1 ();
6914
}
6915
6916
static void cc_env_sub_prim_mul__t0_inter_t1_using_half__add_prim () //Added by Gonetz
6917
{
6918
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6919
GR_COMBINE_FACTOR_TEXTURE_RGB,
6920
GR_COMBINE_LOCAL_ITERATED,
6921
GR_COMBINE_OTHER_CONSTANT);
6922
CC_ENV ();
6923
SETSHADE_PRIM ();
6924
T0_INTER_T1_USING_FACTOR (0x7F);
6925
}
6926
6927
static void cc_env_sub_prim_mul__t1_inter_t0_using_t0__add_prim () //Added by Gonetz
6928
{
6929
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6930
GR_COMBINE_FACTOR_TEXTURE_RGB,
6931
GR_COMBINE_LOCAL_ITERATED,
6932
GR_COMBINE_OTHER_CONSTANT);
6933
CC_ENV ();
6934
SETSHADE_PRIM ();
6935
T1_INTER_T0_USING_T0 ();
6936
}
6937
6938
static void cc_env_sub_shade_mul__t0_mul_t1__add_shade () //Added by Gonetz
6939
{
6940
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
6941
GR_COMBINE_FACTOR_TEXTURE_RGB,
6942
GR_COMBINE_LOCAL_ITERATED,
6943
GR_COMBINE_OTHER_CONSTANT);
6944
CC_ENV ();
6945
T0_MUL_T1 ();
6946
}
6947
6948
static void cc_env_sub_prim_mul__t0a_mul_t1a__add_prim ()
6949
{
6950
CCMB (GR_COMBINE_FUNCTION_BLEND,
6951
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6952
GR_COMBINE_LOCAL_CONSTANT,
6953
GR_COMBINE_OTHER_ITERATED);
6954
CC_PRIM ();
6955
SETSHADE_ENV ();
6956
A_T0_MUL_T1 ();
6957
}
6958
6959
6960
static void cc_env_sub_prim_mul_prima_add_prim () //Aded by Gonetz
6961
{
6962
// * not guaranteed to work if another iterated alpha is set
6963
CCMB (GR_COMBINE_FUNCTION_BLEND,
6964
GR_COMBINE_FACTOR_LOCAL_ALPHA,
6965
GR_COMBINE_LOCAL_CONSTANT,
6966
GR_COMBINE_OTHER_ITERATED);
6967
CC_PRIM ();
6968
CA_PRIM ();
6969
SETSHADE_ENV ();
6970
}
6971
6972
static void cc_env_sub_prim_mul_enva_add_prim () //Aded by Gonetz
6973
{
6974
// * not guaranteed to work if another iterated alpha is set
6975
CCMB (GR_COMBINE_FUNCTION_BLEND,
6976
GR_COMBINE_FACTOR_OTHER_ALPHA,
6977
GR_COMBINE_LOCAL_ITERATED,
6978
GR_COMBINE_OTHER_CONSTANT);
6979
CC_ENV ();
6980
CA_ENV ();
6981
SETSHADE_PRIM ();
6982
}
6983
6984
static void cc__t0_sub_env_mul_shade__sub_prim_mul_shade_add_prim ()
6985
{
6986
if (cmb.combine_ext)
6987
{
6988
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6989
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
6990
GR_CMBX_ITRGB, 0,
6991
GR_CMBX_ZERO, 0);
6992
cmb.tex_ccolor = rdp.env_color;
6993
cmb.tex |= 1;
6994
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
6995
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
6996
GR_CMBX_ITRGB, 0,
6997
GR_CMBX_B, 0);
6998
CC_PRIM ();
6999
}
7000
else
7001
{
7002
cc_t0_mul_shade ();
7003
}
7004
}
7005
7006
static void cc_env_sub_prim_mul_shade_add_prim () //Added by Gonetz
7007
{
7008
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7009
GR_COMBINE_FACTOR_ONE,
7010
GR_COMBINE_LOCAL_CONSTANT,
7011
GR_COMBINE_OTHER_ITERATED);
7012
CC_PRIM ();
7013
MULSHADE_ENVSUBPRIM ();
7014
}
7015
7016
static void cc_env_sub_prim_mul_shadea_add_prim () //Added by Gonetz
7017
{
7018
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7019
GR_COMBINE_FACTOR_ONE,
7020
GR_COMBINE_LOCAL_CONSTANT,
7021
GR_COMBINE_OTHER_ITERATED);
7022
CC_PRIM ();
7023
SETSHADE_ENVSUBPRIM ();
7024
MULSHADE_SHADEA ();
7025
}
7026
7027
static void cc_env_sub_prim_mul__t0_inter_t1_using_prima__add_prim ()
7028
{
7029
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7030
GR_COMBINE_FACTOR_TEXTURE_RGB,
7031
GR_COMBINE_LOCAL_ITERATED,
7032
GR_COMBINE_OTHER_CONSTANT);
7033
CC_ENV ();
7034
SETSHADE_PRIM ();
7035
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7036
T0_INTER_T1_USING_FACTOR (factor);
7037
}
7038
7039
static void cc_env_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()
7040
{
7041
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7042
GR_COMBINE_FACTOR_TEXTURE_RGB,
7043
GR_COMBINE_LOCAL_ITERATED,
7044
GR_COMBINE_OTHER_CONSTANT);
7045
CC_ENV ();
7046
SETSHADE_PRIM ();
7047
T0_INTER_T1_USING_FACTOR (lod_frac);
7048
}
7049
7050
static void cc_env_sub_primshade_mul_t0_add_primshade ()
7051
{
7052
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7053
GR_COMBINE_FACTOR_TEXTURE_RGB,
7054
GR_COMBINE_LOCAL_ITERATED,
7055
GR_COMBINE_OTHER_CONSTANT);
7056
CC_ENV ();
7057
MULSHADE_PRIM ();
7058
USE_T0 ();
7059
}
7060
7061
static void cc_env_sub_primshade_mul_t1_add_primshade ()
7062
{
7063
// cc_prim_mul_shade();
7064
// return;
7065
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7066
GR_COMBINE_FACTOR_TEXTURE_RGB,
7067
GR_COMBINE_LOCAL_ITERATED,
7068
GR_COMBINE_OTHER_CONSTANT);
7069
CC_ENV ();
7070
MULSHADE_PRIM ();
7071
USE_T0 ();
7072
}
7073
7074
static void cc_env_sub_shade_mul_t0_add_shade ()
7075
{
7076
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7077
GR_COMBINE_FACTOR_TEXTURE_RGB,
7078
GR_COMBINE_LOCAL_ITERATED,
7079
GR_COMBINE_OTHER_CONSTANT);
7080
CC_ENV ();
7081
USE_T0 ();
7082
}
7083
7084
static void cc__env_sub_shade_mul_t0_add_shade__mul_prim ()
7085
{
7086
if (cmb.combine_ext)
7087
{
7088
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
7089
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
7090
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
7091
GR_CMBX_B, 0);
7092
cmb.tex |= 1;
7093
cmb.tex_ccolor = rdp.prim_color;
7094
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7095
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
7096
GR_CMBX_CONSTANT_COLOR, 0,
7097
GR_CMBX_ZERO, 0);
7098
CC_PRIM() ;
7099
}
7100
else
7101
{
7102
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7103
GR_COMBINE_FACTOR_TEXTURE_RGB,
7104
GR_COMBINE_LOCAL_ITERATED,
7105
GR_COMBINE_OTHER_CONSTANT);
7106
CC_ENV ();
7107
MULSHADE_PRIM ();
7108
USE_T0 ();
7109
}
7110
}
7111
7112
static void cc_env_sub_shade_mul_t1_add_shade ()
7113
{
7114
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7115
GR_COMBINE_FACTOR_TEXTURE_RGB,
7116
GR_COMBINE_LOCAL_ITERATED,
7117
GR_COMBINE_OTHER_CONSTANT);
7118
CC_ENV ();
7119
USE_T1 ();
7120
}
7121
7122
//Added by Gonetz
7123
static void cc_env_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()
7124
{
7125
if (cmb.combine_ext)
7126
{
7127
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
7128
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
7129
GR_CMBX_TEXTURE_RGB, 0,
7130
GR_CMBX_B, 0);
7131
}
7132
else
7133
{
7134
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7135
GR_COMBINE_FACTOR_TEXTURE_RGB,
7136
GR_COMBINE_LOCAL_ITERATED,
7137
GR_COMBINE_OTHER_CONSTANT);
7138
}
7139
CC_ENV ();
7140
T0_INTER_T1_USING_SHADEA ();
7141
}
7142
7143
//Added by Gonetz
7144
static void cc_env_sub_shade_mul_enva_add_shade ()
7145
{
7146
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7147
GR_COMBINE_FACTOR_OTHER_ALPHA,
7148
GR_COMBINE_LOCAL_ITERATED,
7149
GR_COMBINE_OTHER_CONSTANT);
7150
cmb.ccolor = rdp.env_color;
7151
}
7152
7153
//Added by Gonetz
7154
static void cc_shade_sub_t0_mul_shadea_add_t0 ()
7155
{
7156
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7157
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
7158
GR_COMBINE_LOCAL_ITERATED,
7159
GR_COMBINE_OTHER_TEXTURE);
7160
MULSHADE_SHADEA ();
7161
USE_T0 ();
7162
}
7163
7164
7165
static void cc__t0_mul_shade_mul_shadea__add__t1_mul_one_sub_shadea ()
7166
{
7167
// (t0-0)*shade+0, (cmb-t0)*shadea+t0
7168
if (cmb.combine_ext)
7169
{
7170
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7171
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7172
GR_CMBX_ITALPHA, 1,
7173
GR_CMBX_ZERO, 0);
7174
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7175
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7176
GR_CMBX_ITRGB, 0,
7177
GR_CMBX_B, 0);
7178
MULSHADE_SHADEA ();
7179
cmb.tex |= 3;
7180
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
7181
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
7182
GR_CMBX_ZERO, 0,
7183
GR_CMBX_TEXTURE_RGB, 0);
7184
}
7185
else
7186
{
7187
cc_t0_mul_shade ();
7188
}
7189
}
7190
7191
static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()
7192
{
7193
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7194
GR_COMBINE_FACTOR_TEXTURE_RGB,
7195
GR_COMBINE_LOCAL_CONSTANT,
7196
GR_COMBINE_OTHER_ITERATED);
7197
CC_PRIM ();
7198
T0_INTER_T1_USING_FACTOR (lod_frac);
7199
}
7200
7201
static void cc_shade_sub_prim_mul_t0_add_prim ()
7202
{
7203
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7204
GR_COMBINE_FACTOR_TEXTURE_RGB,
7205
GR_COMBINE_LOCAL_CONSTANT,
7206
GR_COMBINE_OTHER_ITERATED);
7207
CC_PRIM ();
7208
USE_T0 ();
7209
}
7210
7211
//Added by Gonetz
7212
static void cc_shade_sub_prim_mul_t1_add_prim ()
7213
{
7214
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7215
GR_COMBINE_FACTOR_TEXTURE_RGB,
7216
GR_COMBINE_LOCAL_CONSTANT,
7217
GR_COMBINE_OTHER_ITERATED);
7218
CC_PRIM ();
7219
USE_T1 ();
7220
}
7221
7222
//Added by Gonetz
7223
static void cc_shade_sub_env_mul__t0_mul_t1__add__t0_mul_t1 ()
7224
{
7225
if (cmb.combine_ext)
7226
{
7227
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
7228
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
7229
GR_CMBX_TEXTURE_RGB, 0,
7230
GR_CMBX_TEXTURE_RGB, 0);
7231
CC_ENV ();
7232
T0_MUL_T1 ();
7233
}
7234
else
7235
{
7236
cc_t0_mul_t1 ();
7237
}
7238
}
7239
7240
//Added by Gonetz
7241
static void cc_shade_sub_env_mul_t0_add_prim ()
7242
{
7243
if (rdp.cur_image && (rdp.cur_image->format != 0))
7244
{
7245
cc_prim ();
7246
return;
7247
}
7248
7249
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7250
GR_COMBINE_FACTOR_TEXTURE_RGB,
7251
GR_COMBINE_LOCAL_CONSTANT,
7252
GR_COMBINE_OTHER_ITERATED);
7253
CC_PRIM ();
7254
SUBSHADE_ENV ();
7255
USE_T0 ();
7256
}
7257
7258
//Added by Gonetz
7259
static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_prim ()
7260
{
7261
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7262
GR_COMBINE_FACTOR_TEXTURE_RGB,
7263
GR_COMBINE_LOCAL_CONSTANT,
7264
GR_COMBINE_OTHER_ITERATED);
7265
CC_PRIM ();
7266
SUBSHADE_ENV ();
7267
T0_INTER_T1_USING_FACTOR (lod_frac);
7268
}
7269
7270
//Added by Gonetz
7271
static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_env ()
7272
{
7273
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7274
GR_COMBINE_FACTOR_TEXTURE_RGB,
7275
GR_COMBINE_LOCAL_CONSTANT,
7276
GR_COMBINE_OTHER_ITERATED);
7277
CC_ENV ();
7278
T0_INTER_T1_USING_FACTOR (lod_frac);
7279
}
7280
7281
//Added by Gonetz
7282
static void cc_shade_sub_env_mul__t0_mul_t1__add_env ()
7283
{
7284
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7285
GR_COMBINE_FACTOR_TEXTURE_RGB,
7286
GR_COMBINE_LOCAL_CONSTANT,
7287
GR_COMBINE_OTHER_ITERATED);
7288
CC_ENV ();
7289
T0_MUL_T1 ();
7290
}
7291
7292
//Added by Gonetz
7293
static void cc_shade_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()
7294
{
7295
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7296
GR_COMBINE_FACTOR_TEXTURE_RGB,
7297
GR_COMBINE_LOCAL_CONSTANT,
7298
GR_COMBINE_OTHER_ITERATED);
7299
CC_ENV ();
7300
SETSHADE_ENV ();
7301
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
7302
}
7303
7304
//Added by Gonetz
7305
static void cc_shade_sub_env_mul_t0_add_env ()
7306
{
7307
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7308
GR_COMBINE_FACTOR_TEXTURE_RGB,
7309
GR_COMBINE_LOCAL_CONSTANT,
7310
GR_COMBINE_OTHER_ITERATED);
7311
CC_ENV ();
7312
USE_T0 ();
7313
}
7314
7315
//Added by Gonetz
7316
static void cc_shade_sub_env_mul_t0_mul_prim_add_prim_mul_env ()
7317
{
7318
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7319
GR_COMBINE_FACTOR_TEXTURE_RGB,
7320
GR_COMBINE_LOCAL_CONSTANT,
7321
GR_COMBINE_OTHER_ITERATED);
7322
CC_PRIMMULENV ();
7323
SUBSHADE_ENV ();
7324
MULSHADE_PRIM()
7325
USE_T0 ();
7326
}
7327
7328
//Added by Gonetz
7329
static void cc_shade_sub_env_mul_t1_add_env ()
7330
{
7331
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7332
GR_COMBINE_FACTOR_TEXTURE_RGB,
7333
GR_COMBINE_LOCAL_CONSTANT,
7334
GR_COMBINE_OTHER_ITERATED);
7335
CC_ENV ();
7336
USE_T1 ();
7337
}
7338
7339
//Added by Gonetz
7340
static void cc_shade_sub_env_mul_prim_add_t0 ()
7341
{
7342
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7343
GR_COMBINE_FACTOR_ONE,
7344
GR_COMBINE_LOCAL_ITERATED,
7345
GR_COMBINE_OTHER_TEXTURE);
7346
SUBSHADE_ENV ();
7347
MULSHADE_PRIM ();
7348
USE_T0 ();
7349
}
7350
7351
static void cc__t0_add_prim_mul_shade__mul_shade_add_env ()
7352
{
7353
if (!cmb.combine_ext)
7354
{
7355
cc_shade_sub_env_mul_prim_add_t0 ();
7356
return;
7357
}
7358
T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
7359
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7360
GR_CMBX_ITRGB, 0,
7361
GR_CMBX_B, 0);
7362
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
7363
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7364
GR_CMBX_ITRGB, 0,
7365
GR_CMBX_B, 0);
7366
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7367
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
7368
GR_CMBX_ITRGB, 0,
7369
GR_CMBX_B, 0);
7370
cmb.tex_ccolor = rdp.prim_color;
7371
CC_ENV ();
7372
cmb.tex |= 1;
7373
}
7374
7375
static void cc__t0_add_prim_mul_shade__mul_shade ()
7376
{
7377
if (!cmb.combine_ext)
7378
{
7379
cc_shade_sub_env_mul_prim_add_t0 ();
7380
return;
7381
}
7382
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
7383
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7384
GR_CMBX_ITRGB, 0,
7385
GR_CMBX_B, 0);
7386
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7387
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
7388
GR_CMBX_ITRGB, 0,
7389
GR_CMBX_ZERO, 0);
7390
cmb.tex_ccolor = rdp.prim_color;
7391
cmb.tex |= 1;
7392
}
7393
7394
//Added by Gonetz
7395
static void cc_shade_sub_env_mul_prim_add_env ()
7396
{
7397
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7398
GR_COMBINE_FACTOR_ONE,
7399
GR_COMBINE_LOCAL_CONSTANT,
7400
GR_COMBINE_OTHER_ITERATED);
7401
SUBSHADE_ENV ();
7402
MULSHADE_PRIM ();
7403
CC_ENV ();
7404
}
7405
7406
//Added by Gonetz
7407
static void cc_shade_sub_env_mul_prima_add_prim ()
7408
{
7409
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7410
GR_COMBINE_FACTOR_ONE,
7411
GR_COMBINE_LOCAL_CONSTANT,
7412
GR_COMBINE_OTHER_ITERATED);
7413
SUBSHADE_ENV ();
7414
MULSHADE_PRIMA ();
7415
CC_PRIM ();
7416
}
7417
7418
static void cc_shade_sub_env_mul_k5_add_prim ()
7419
{
7420
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7421
GR_COMBINE_FACTOR_ONE,
7422
GR_COMBINE_LOCAL_CONSTANT,
7423
GR_COMBINE_OTHER_ITERATED);
7424
SUBSHADE_ENV ();
7425
wxUint32 temp = rdp.prim_color;
7426
rdp.prim_color = rdp.K5;
7427
MULSHADE_PRIMA ();
7428
rdp.prim_color = temp;
7429
CC_PRIM ();
7430
}
7431
7432
// ** A inter B using C **
7433
static void cc_t0_inter_t1_using_t1a ()
7434
{
7435
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7436
GR_COMBINE_FACTOR_ONE,
7437
GR_COMBINE_LOCAL_NONE,
7438
GR_COMBINE_OTHER_TEXTURE);
7439
T0_INTER_T1_USING_T1A ();
7440
}
7441
7442
static void cc_t0_inter_t1_using_prima ()
7443
{
7444
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7445
GR_COMBINE_FACTOR_ONE,
7446
GR_COMBINE_LOCAL_NONE,
7447
GR_COMBINE_OTHER_TEXTURE);
7448
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7449
T0_INTER_T1_USING_FACTOR (factor);
7450
}
7451
7452
static void cc_t1_inter_t0_using_prima ()
7453
{
7454
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7455
GR_COMBINE_FACTOR_ONE,
7456
GR_COMBINE_LOCAL_NONE,
7457
GR_COMBINE_OTHER_TEXTURE);
7458
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7459
T1_INTER_T0_USING_FACTOR (factor);
7460
}
7461
7462
static void cc_t1_inter_t0_using_prim ()
7463
{
7464
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7465
GR_COMBINE_FACTOR_ONE,
7466
GR_COMBINE_LOCAL_NONE,
7467
GR_COMBINE_OTHER_TEXTURE);
7468
T1_INTER_T0_USING_PRIM ();
7469
}
7470
7471
static void cc_t0_inter_t1_using_env ()
7472
{
7473
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7474
GR_COMBINE_FACTOR_ONE,
7475
GR_COMBINE_LOCAL_NONE,
7476
GR_COMBINE_OTHER_TEXTURE);
7477
T0_INTER_T1_USING_ENV ();
7478
}
7479
7480
static void cc_t0_inter_t1_using_enva ()
7481
{
7482
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7483
GR_COMBINE_FACTOR_ONE,
7484
GR_COMBINE_LOCAL_NONE,
7485
GR_COMBINE_OTHER_TEXTURE);
7486
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
7487
T0_INTER_T1_USING_FACTOR (factor);
7488
}
7489
7490
static void cc__t0_inter_t1_using_prim__inter_env_using_enva ()
7491
{
7492
// (t1-t0)*prim+t0, (env-cmb)*env_a+cmb
7493
if (!cmb.combine_ext)
7494
{
7495
cc_t0_inter_t1_using_prima ();
7496
return;
7497
}
7498
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7499
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7500
GR_CMBX_ZERO, 0,
7501
GR_CMBX_B, 0);
7502
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7503
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7504
GR_CMBX_TMU_CCOLOR, 0,
7505
GR_CMBX_B, 0);
7506
cmb.tex_ccolor = rdp.prim_color;
7507
cmb.tex |= 3;
7508
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
7509
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7510
GR_CMBX_CONSTANT_ALPHA, 0,
7511
GR_CMBX_B, 0);
7512
cmb.ccolor = rdp.env_color;
7513
}
7514
7515
static void cc__t0_inter_t1_using_shade__inter_env_using_enva ()
7516
{
7517
// (t1-t0)*shade+t0, (env-cmb)*env_a+cmb
7518
if (!cmb.combine_ext)
7519
{
7520
cc_t0_inter_t1_using_enva ();
7521
return;
7522
}
7523
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7524
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7525
GR_CMBX_ZERO, 0,
7526
GR_CMBX_B, 0);
7527
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7528
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7529
GR_CMBX_ITRGB, 0,
7530
GR_CMBX_B, 0);
7531
cmb.tex |= 3;
7532
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
7533
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7534
GR_CMBX_CONSTANT_ALPHA, 0,
7535
GR_CMBX_B, 0);
7536
cmb.ccolor = rdp.env_color;
7537
}
7538
7539
//Added by Gonetz
7540
static void cc_t0_inter_t1_using_shade ()
7541
{
7542
if (cmb.combine_ext)
7543
{
7544
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7545
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7546
GR_CMBX_ZERO, 0,
7547
GR_CMBX_B, 0);
7548
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7549
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7550
GR_CMBX_ITRGB, 0,
7551
GR_CMBX_B, 0);
7552
cmb.tex |= 3;
7553
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7554
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
7555
GR_CMBX_ZERO, 1,
7556
GR_CMBX_ZERO, 0);
7557
}
7558
else
7559
{
7560
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7561
GR_COMBINE_FACTOR_ONE,
7562
GR_COMBINE_LOCAL_NONE,
7563
GR_COMBINE_OTHER_TEXTURE);
7564
T0_INTER_T1_USING_FACTOR (0x7F);
7565
}
7566
}
7567
7568
//Added by Gonetz
7569
static void cc_t1_inter_t0_using_shade ()
7570
{
7571
if (cmb.combine_ext)
7572
{
7573
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7574
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7575
GR_CMBX_ZERO, 0,
7576
GR_CMBX_B, 0);
7577
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7578
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7579
GR_CMBX_ITRGB, 0,
7580
GR_CMBX_B, 0);
7581
cmb.tex |= 3;
7582
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7583
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
7584
GR_CMBX_ZERO, 1,
7585
GR_CMBX_ZERO, 0);
7586
}
7587
else
7588
{
7589
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7590
GR_COMBINE_FACTOR_ONE,
7591
GR_COMBINE_LOCAL_NONE,
7592
GR_COMBINE_OTHER_TEXTURE);
7593
T0_INTER_T1_USING_FACTOR (0x7F);
7594
}
7595
}
7596
7597
//Added by Gonetz
7598
static void cc_t1_inter_t0_using_shadea ()
7599
{
7600
if (cmb.combine_ext)
7601
{
7602
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7603
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
7604
GR_CMBX_ZERO, 1,
7605
GR_CMBX_ZERO, 0);
7606
}
7607
else
7608
{
7609
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7610
GR_COMBINE_FACTOR_ONE,
7611
GR_COMBINE_LOCAL_NONE,
7612
GR_COMBINE_OTHER_TEXTURE);
7613
}
7614
T1_INTER_T0_USING_SHADEA ();
7615
}
7616
7617
//Added by Gonetz
7618
static void cc_t0_inter_t1_using_primlod ()
7619
{
7620
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7621
GR_COMBINE_FACTOR_ONE,
7622
GR_COMBINE_LOCAL_NONE,
7623
GR_COMBINE_OTHER_TEXTURE);
7624
T0_INTER_T1_USING_FACTOR (lod_frac);
7625
}
7626
7627
//Added by Gonetz
7628
static void cc_t1_inter_t0_using_primlod ()
7629
{
7630
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7631
GR_COMBINE_FACTOR_ONE,
7632
GR_COMBINE_LOCAL_NONE,
7633
GR_COMBINE_OTHER_TEXTURE);
7634
T1_INTER_T0_USING_FACTOR (lod_frac);
7635
}
7636
7637
//Added by Gonetz
7638
static void cc_t1_inter_t0_using_t0 ()
7639
{
7640
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7641
GR_COMBINE_FACTOR_ONE,
7642
GR_COMBINE_LOCAL_NONE,
7643
GR_COMBINE_OTHER_TEXTURE);
7644
T1_INTER_T0_USING_T0 ();
7645
}
7646
7647
//Added by Gonetz
7648
static void cc_t0_inter_t1_using_k5 ()
7649
{
7650
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7651
GR_COMBINE_FACTOR_ONE,
7652
GR_COMBINE_LOCAL_NONE,
7653
GR_COMBINE_OTHER_TEXTURE);
7654
T0_INTER_T1_USING_FACTOR (rdp.K5);
7655
}
7656
7657
static void cc_t0_inter_env_using_prim ()
7658
{
7659
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7660
GR_COMBINE_FACTOR_ONE,
7661
GR_COMBINE_LOCAL_NONE,
7662
GR_COMBINE_OTHER_TEXTURE);
7663
USE_T0 ();
7664
7665
MOD_0 (TMOD_TEX_INTER_COL_USING_COL1);
7666
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
7667
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
7668
}
7669
7670
//Added by Gonetz
7671
static void cc_t0_inter_prim_using_primlod ()
7672
{
7673
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7674
GR_COMBINE_FACTOR_ONE,
7675
GR_COMBINE_LOCAL_NONE,
7676
GR_COMBINE_OTHER_TEXTURE);
7677
USE_T0 ();
7678
7679
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
7680
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
7681
MOD_0_FAC (lod_frac & 0xFF);
7682
}
7683
7684
static void cc_t0_inter_shade_using_t0a ()
7685
{
7686
if (cmb.combine_ext)
7687
{
7688
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
7689
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
7690
GR_CMBX_TEXTURE_ALPHA, 0,
7691
GR_CMBX_B, 0);
7692
USE_T0();
7693
A_USE_T0();
7694
}
7695
else
7696
{
7697
//(shade-t0)*t0a+t0 = t0*(1-t0a)+shade*t0a
7698
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7699
GR_COMBINE_FACTOR_ONE,
7700
GR_COMBINE_LOCAL_ITERATED,
7701
GR_COMBINE_OTHER_TEXTURE);
7702
rdp.best_tex = 1;
7703
cmb.tex = 1;
7704
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
7705
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA;
7706
}
7707
}
7708
7709
static void cc_t0_inter_shade_using_primlod ()
7710
{
7711
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7712
GR_COMBINE_FACTOR_TEXTURE_RGB,
7713
GR_COMBINE_LOCAL_ITERATED,
7714
GR_COMBINE_OTHER_CONSTANT);
7715
CC_PRIMLOD();
7716
cmb.ccolor=(~cmb.ccolor)&0xFFFFFF00;
7717
MULSHADE_PRIMLOD ();
7718
USE_T0 ();
7719
//(shade-t0)*primlod+t0 = t0*(1-primlod)+shade*primlod
7720
}
7721
7722
//Added by Gonetz
7723
static void cc__env_inter_t0_using_primlod__mul_prim ()
7724
{
7725
//((t0-env)*primlod+env)*prim = t0*prim*primlod+env*prim*(1-primlod);
7726
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7727
GR_COMBINE_FACTOR_TEXTURE_RGB,
7728
GR_COMBINE_LOCAL_ITERATED,
7729
GR_COMBINE_OTHER_CONSTANT);
7730
CC_PRIM ();
7731
cmb.ccolor = ((((cmb.ccolor & 0xFF000000) >> 24) * (lod_frac & 0xFF))<<24) | ((((cmb.ccolor & 0x00FF0000) >> 16) * (lod_frac & 0xFF))<<16) | ((((cmb.ccolor & 0x0000FF00) >> 8) * (lod_frac & 0xFF))<<8);
7732
SETSHADE_PRIM ();
7733
SETSHADE_ENV ();
7734
SETSHADE_1MPRIMLOD ();
7735
USE_T0 ();
7736
}
7737
7738
//Added by Gonetz
7739
static void cc__env_inter_t0_using_shadea__mul_shade ()
7740
{
7741
//((t0-env)*shadea+env)*shade
7742
if (!cmb.combine_ext)
7743
{
7744
cc_t0_mul_shade ();
7745
return;
7746
}
7747
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7748
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7749
GR_CMBX_ITALPHA, 0,
7750
GR_CMBX_B, 0);
7751
cmb.tex_ccolor = rdp.env_color;
7752
cmb.tex |= 1;
7753
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7754
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
7755
GR_CMBX_ITRGB, 0,
7756
GR_CMBX_ZERO, 0);
7757
}
7758
7759
//Added by Gonetz
7760
static void cc_env_inter_prim_using_primlod ()
7761
{
7762
if (rdp.prim_color&0xFFFFFF00)
7763
{
7764
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7765
GR_COMBINE_FACTOR_ONE,
7766
GR_COMBINE_LOCAL_CONSTANT,
7767
GR_COMBINE_OTHER_ITERATED);
7768
SETSHADE_PRIMSUBENV ();
7769
SETSHADE_PRIMLOD ();
7770
CC_ENV ();
7771
}
7772
else
7773
{
7774
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
7775
GR_COMBINE_FACTOR_ONE,
7776
GR_COMBINE_LOCAL_ITERATED,
7777
GR_COMBINE_OTHER_CONSTANT);
7778
SETSHADE_ENV ();
7779
SETSHADE_PRIMLOD ();
7780
CC_ENV ();
7781
}
7782
}
7783
7784
static void cc_prim_inter__t0_mul_t1_add_env__using_shadea ()
7785
{
7786
if (cmb.combine_ext)
7787
{
7788
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7789
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7790
GR_CMBX_ZERO, 0,
7791
GR_CMBX_B, 0);
7792
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7793
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
7794
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
7795
GR_CMBX_B, 0);
7796
cmb.tex_ccolor = rdp.env_color;
7797
cmb.tex |= 3;
7798
}
7799
else
7800
{
7801
T0_MUL_T1 ();
7802
}
7803
// * not guaranteed to work if another iterated alpha is set
7804
CCMB (GR_COMBINE_FUNCTION_BLEND,
7805
GR_COMBINE_FACTOR_LOCAL_ALPHA,
7806
GR_COMBINE_LOCAL_ITERATED,
7807
GR_COMBINE_OTHER_TEXTURE);
7808
SETSHADE_PRIM ();
7809
}
7810
7811
static void cc_env_inter__prim_inter_shade_using_t0__using_shadea ()
7812
{
7813
if (!cmb.combine_ext)
7814
{
7815
cc_shade_sub_prim_mul_t0_add_prim ();
7816
return;
7817
}
7818
T0CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
7819
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7820
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
7821
GR_CMBX_B, 0);
7822
cmb.tex_ccolor = rdp.prim_color;
7823
cmb.tex |= 1;
7824
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7825
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
7826
GR_CMBX_ITALPHA, 0,
7827
GR_CMBX_B, 0);
7828
CC_ENV ();
7829
}
7830
7831
static void cc_shade_inter__prim_inter_shade_using_t0__using_shadea ()
7832
{
7833
if (!cmb.combine_ext)
7834
{
7835
cc_shade_sub_prim_mul_t0_add_prim ();
7836
return;
7837
}
7838
T0CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
7839
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7840
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
7841
GR_CMBX_B, 0);
7842
cmb.tex_ccolor = rdp.prim_color;
7843
cmb.tex |= 1;
7844
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7845
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
7846
GR_CMBX_ITALPHA, 0,
7847
GR_CMBX_B, 0);
7848
}
7849
7850
// ** (A-B)*C+D*E **
7851
static void cc_one_sub_env_mul_prim_add__t0_mul_env () //Aded by Gonetz
7852
{
7853
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7854
GR_COMBINE_FACTOR_TEXTURE_RGB,
7855
GR_COMBINE_LOCAL_ITERATED,
7856
GR_COMBINE_OTHER_CONSTANT);
7857
CC_ENV ();
7858
SETSHADE_1MENV ();
7859
SETSHADE_PRIM ();
7860
USE_T0 ();
7861
}
7862
7863
// ** ((A-B)*C+D)*E **
7864
static void cc_t0_sub_env_mul_prim_mul_shade_add_prim_mul_shade () //Aded by Gonetz
7865
{
7866
//(t0-env)*shade+shade, (cmb-0)*prim+0
7867
if (cmb.combine_ext)
7868
{
7869
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
7870
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7871
GR_CMBX_ITRGB, 0,
7872
GR_CMBX_ZERO, 0);
7873
cmb.tex_ccolor = rdp.env_color;
7874
cmb.tex |= 1;
7875
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7876
GR_CMBX_ITRGB, GR_FUNC_MODE_X,
7877
GR_CMBX_CONSTANT_COLOR, 0,
7878
GR_CMBX_ZERO, 0);
7879
CC_PRIM ();
7880
}
7881
else
7882
{
7883
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7884
GR_COMBINE_FACTOR_LOCAL,
7885
GR_COMBINE_LOCAL_ITERATED,
7886
GR_COMBINE_OTHER_TEXTURE);
7887
if (rdp.env_color & 0xFFFFFF00)
7888
{
7889
MOD_0 (TMOD_TEX_SUB_COL);
7890
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
7891
}
7892
MULSHADE_PRIM ();
7893
USE_T0 ();
7894
}
7895
}
7896
7897
static void cc__t1_sub_prim_mul_t0_add_env__mul_shade () //Aded by Gonetz
7898
{
7899
// (t1-prim)*t0+env, (cmb-0)*shade+0
7900
if (cmb.combine_ext)
7901
{
7902
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7903
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
7904
GR_CMBX_ZERO, 0,
7905
GR_CMBX_B, 0);
7906
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
7907
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
7908
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
7909
GR_CMBX_ZERO, 0);
7910
cmb.tex_ccolor = rdp.prim_color;
7911
cmb.tex |= 3;
7912
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
7913
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
7914
GR_CMBX_ITRGB, 0,
7915
GR_CMBX_ZERO, 0);
7916
CC_ENV ();
7917
}
7918
else
7919
{
7920
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7921
GR_COMBINE_FACTOR_LOCAL,
7922
GR_COMBINE_LOCAL_ITERATED,
7923
GR_COMBINE_OTHER_TEXTURE);
7924
if (rdp.prim_color & 0xFFFFFF00)
7925
{
7926
MOD_1 (TMOD_TEX_SUB_COL);
7927
MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
7928
}
7929
T0_MUL_T1 ();
7930
}
7931
}
7932
7933
// ** (A inter B using C) * D **
7934
//Added by Gonetz
7935
static void cc__t0_inter_t1_using_prima__mul_prim ()
7936
{
7937
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7938
GR_COMBINE_FACTOR_LOCAL,
7939
GR_COMBINE_LOCAL_CONSTANT,
7940
GR_COMBINE_OTHER_TEXTURE);
7941
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7942
T0_INTER_T1_USING_FACTOR (factor);
7943
CC_PRIM ();
7944
}
7945
7946
//Added by Gonetz
7947
static void cc__t1_inter_t0_using_prima__mul_prim ()
7948
{
7949
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7950
GR_COMBINE_FACTOR_LOCAL,
7951
GR_COMBINE_LOCAL_CONSTANT,
7952
GR_COMBINE_OTHER_TEXTURE);
7953
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7954
T1_INTER_T0_USING_FACTOR (factor);
7955
CC_PRIM ();
7956
}
7957
7958
//Added by Gonetz
7959
static void cc__t0_inter_t1_using_prim__mul_shade ()
7960
{
7961
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7962
GR_COMBINE_FACTOR_LOCAL,
7963
GR_COMBINE_LOCAL_ITERATED,
7964
GR_COMBINE_OTHER_TEXTURE);
7965
T0_INTER_T1_USING_PRIM ();
7966
}
7967
7968
//Added by Gonetz
7969
static void cc__t0_inter_t1_using_prima__mul_shade ()
7970
{
7971
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7972
GR_COMBINE_FACTOR_LOCAL,
7973
GR_COMBINE_LOCAL_ITERATED,
7974
GR_COMBINE_OTHER_TEXTURE);
7975
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7976
T0_INTER_T1_USING_FACTOR (factor);
7977
}
7978
7979
//Added by Gonetz
7980
static void cc__t1_inter_t0_using_prima__mul_shade ()
7981
{
7982
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7983
GR_COMBINE_FACTOR_LOCAL,
7984
GR_COMBINE_LOCAL_ITERATED,
7985
GR_COMBINE_OTHER_TEXTURE);
7986
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
7987
T1_INTER_T0_USING_FACTOR (factor);
7988
}
7989
7990
static void cc__t0_inter_t1_using_env__mul_shade ()
7991
{
7992
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7993
GR_COMBINE_FACTOR_LOCAL,
7994
GR_COMBINE_LOCAL_ITERATED,
7995
GR_COMBINE_OTHER_TEXTURE);
7996
T0_INTER_T1_USING_ENV ();
7997
}
7998
7999
static void cc__t0_inter_t1_using_enva__mul_shade ()
8000
{
8001
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8002
GR_COMBINE_FACTOR_LOCAL,
8003
GR_COMBINE_LOCAL_ITERATED,
8004
GR_COMBINE_OTHER_TEXTURE);
8005
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
8006
T0_INTER_T1_USING_FACTOR (factor);
8007
}
8008
8009
static void cc__t0_inter_t1_using_enva__mul_prim ()
8010
{
8011
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8012
GR_COMBINE_FACTOR_LOCAL,
8013
GR_COMBINE_LOCAL_CONSTANT,
8014
GR_COMBINE_OTHER_TEXTURE);
8015
CC_PRIM ();
8016
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
8017
T0_INTER_T1_USING_FACTOR (factor);
8018
}
8019
8020
//Added by Gonetz
8021
static void cc__t0_inter_t1_using_enva__mul_env ()
8022
{
8023
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8024
GR_COMBINE_FACTOR_LOCAL,
8025
GR_COMBINE_LOCAL_CONSTANT,
8026
GR_COMBINE_OTHER_TEXTURE);
8027
CC_ENV ();
8028
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
8029
T0_INTER_T1_USING_FACTOR (factor);
8030
}
8031
8032
//Added by Gonetz
8033
static void cc__t0_inter_t1_using_primlod__mul_prim ()
8034
{
8035
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8036
GR_COMBINE_FACTOR_LOCAL,
8037
GR_COMBINE_LOCAL_CONSTANT,
8038
GR_COMBINE_OTHER_TEXTURE);
8039
CC_PRIM ();
8040
T0_INTER_T1_USING_FACTOR (lod_frac);
8041
}
8042
8043
//Added by Gonetz
8044
static void cc__t0_inter_t1_using_primlod__mul_prima ()
8045
{
8046
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8047
GR_COMBINE_FACTOR_LOCAL,
8048
GR_COMBINE_LOCAL_CONSTANT,
8049
GR_COMBINE_OTHER_TEXTURE);
8050
CC_PRIMA ();
8051
T0_INTER_T1_USING_FACTOR (lod_frac);
8052
}
8053
8054
//Added by Gonetz
8055
static void cc__t1_mul_primlod_add_t0__mul_prim ()
8056
{
8057
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8058
GR_COMBINE_FACTOR_LOCAL,
8059
GR_COMBINE_LOCAL_CONSTANT,
8060
GR_COMBINE_OTHER_TEXTURE);
8061
CC_PRIM ();
8062
T1_MUL_PRIMLOD_ADD_T0 ();
8063
}
8064
8065
//Added by Gonetz
8066
static void cc__t0_inter_t1_using_primlod__mul_env ()
8067
{
8068
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8069
GR_COMBINE_FACTOR_LOCAL,
8070
GR_COMBINE_LOCAL_CONSTANT,
8071
GR_COMBINE_OTHER_TEXTURE);
8072
CC_ENV ();
8073
T0_INTER_T1_USING_FACTOR (lod_frac);
8074
}
8075
8076
//Added by Gonetz
8077
static void cc__t1_mul_primlod_add_t0__mul_env ()
8078
{
8079
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8080
GR_COMBINE_FACTOR_LOCAL,
8081
GR_COMBINE_LOCAL_CONSTANT,
8082
GR_COMBINE_OTHER_TEXTURE);
8083
CC_ENV ();
8084
T1_MUL_PRIMLOD_ADD_T0 ();
8085
}
8086
8087
//Added by Gonetz
8088
static void cc__t1_inter_t0_using_prim__mul_env ()
8089
{
8090
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8091
GR_COMBINE_FACTOR_LOCAL,
8092
GR_COMBINE_LOCAL_CONSTANT,
8093
GR_COMBINE_OTHER_TEXTURE);
8094
CC_ENV ();
8095
T1_INTER_T0_USING_PRIM ();
8096
}
8097
8098
static void cc__one_sub_shade_mul_t0_add_shade__mul_prim ()
8099
{
8100
if (cmb.combine_ext)
8101
{
8102
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8103
GR_CMBX_ITRGB, GR_FUNC_MODE_ONE_MINUS_X,
8104
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
8105
GR_CMBX_B, 0);
8106
cmb.tex |= 1;
8107
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8108
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
8109
GR_CMBX_CONSTANT_COLOR, 0,
8110
GR_CMBX_ZERO, 0);
8111
CC_PRIM ();
8112
}
8113
else
8114
{
8115
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8116
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
8117
GR_COMBINE_LOCAL_ITERATED,
8118
GR_COMBINE_OTHER_TEXTURE);
8119
USE_T0 ();
8120
}
8121
}
8122
8123
static void cc__one_sub_shade_mul_t0_add_shade__mul_env ()
8124
{
8125
if (cmb.combine_ext)
8126
{
8127
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8128
GR_CMBX_ITRGB, GR_FUNC_MODE_ONE_MINUS_X,
8129
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
8130
GR_CMBX_B, 0);
8131
cmb.tex |= 1;
8132
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8133
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
8134
GR_CMBX_CONSTANT_COLOR, 0,
8135
GR_CMBX_ZERO, 0);
8136
CC_ENV ();
8137
}
8138
else
8139
{
8140
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8141
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
8142
GR_COMBINE_LOCAL_ITERATED,
8143
GR_COMBINE_OTHER_TEXTURE);
8144
USE_T0 ();
8145
}
8146
}
8147
8148
static void cc__t1_inter_t0_using_prim__mul_shade ()
8149
{
8150
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8151
GR_COMBINE_FACTOR_LOCAL,
8152
GR_COMBINE_LOCAL_ITERATED,
8153
GR_COMBINE_OTHER_TEXTURE);
8154
T1_INTER_T0_USING_PRIM ();
8155
}
8156
8157
static void cc__t0_inter_t1_using_primlod__mul_shade ()
8158
{
8159
//*
8160
if (rdp.LOD_en && (rdp.mipmap_level == 0) && !(settings.hacks&hack_Fifa98))
8161
{
8162
cc_t0_mul_shade ();
8163
return;
8164
}
8165
//*/
8166
if (settings.ucode == 7)
8167
lod_frac = rdp.prim_lodfrac;
8168
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8169
GR_COMBINE_FACTOR_LOCAL,
8170
GR_COMBINE_LOCAL_ITERATED,
8171
GR_COMBINE_OTHER_TEXTURE);
8172
T0_INTER_T1_USING_FACTOR (lod_frac);
8173
}
8174
8175
static void cc__t1_inter_t0_using_primlod__mul_shade ()
8176
{
8177
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8178
GR_COMBINE_FACTOR_LOCAL,
8179
GR_COMBINE_LOCAL_ITERATED,
8180
GR_COMBINE_OTHER_TEXTURE);
8181
T1_INTER_T0_USING_FACTOR (lod_frac);
8182
}
8183
8184
static void cc__t0_inter_t1_using_half__mul_shade ()
8185
{
8186
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8187
GR_COMBINE_FACTOR_LOCAL,
8188
GR_COMBINE_LOCAL_ITERATED,
8189
GR_COMBINE_OTHER_TEXTURE);
8190
T0_INTER_T1_USING_FACTOR (0x7F);
8191
}
8192
8193
static void cc__t0_inter_t1_using_t0__mul_shade ()
8194
{
8195
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8196
GR_COMBINE_FACTOR_LOCAL,
8197
GR_COMBINE_LOCAL_ITERATED,
8198
GR_COMBINE_OTHER_TEXTURE);
8199
T0_INTER_T1_USING_T0();
8200
}
8201
8202
static void cc__t0_inter_t1_using_t1a__mul_shade ()
8203
{
8204
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8205
GR_COMBINE_FACTOR_LOCAL,
8206
GR_COMBINE_LOCAL_ITERATED,
8207
GR_COMBINE_OTHER_TEXTURE);
8208
T0_INTER_T1_USING_T1A();
8209
}
8210
8211
static void cc__t0_inter_t1_using_shadea__mul_shade ()
8212
{
8213
if (cmb.combine_ext)
8214
{
8215
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8216
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
8217
GR_CMBX_ITRGB, 0,
8218
GR_CMBX_ZERO, 0);
8219
}
8220
else
8221
{
8222
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8223
GR_COMBINE_FACTOR_LOCAL,
8224
GR_COMBINE_LOCAL_ITERATED,
8225
GR_COMBINE_OTHER_TEXTURE);
8226
}
8227
T0_INTER_T1_USING_SHADEA ();
8228
}
8229
8230
static void cc__t0_inter_t1_using_k5__mul_shade ()
8231
{
8232
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8233
GR_COMBINE_FACTOR_LOCAL,
8234
GR_COMBINE_LOCAL_ITERATED,
8235
GR_COMBINE_OTHER_TEXTURE);
8236
T0_INTER_T1_USING_FACTOR (rdp.K5);
8237
}
8238
8239
static void cc__t1_inter_t0_using_k5__mul_shade ()
8240
{
8241
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8242
GR_COMBINE_FACTOR_LOCAL,
8243
GR_COMBINE_LOCAL_ITERATED,
8244
GR_COMBINE_OTHER_TEXTURE);
8245
T1_INTER_T0_USING_FACTOR (rdp.K5);
8246
}
8247
8248
static void cc_t0_inter_prim_using_prima ()
8249
{
8250
if (cmb.combine_ext)
8251
{
8252
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
8253
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
8254
GR_CMBX_TMU_CALPHA, 0,
8255
GR_CMBX_B, 0);
8256
cmb.tex_ccolor = rdp.prim_color;
8257
cmb.tex |= 1;
8258
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8259
GR_COMBINE_FACTOR_ONE,
8260
GR_COMBINE_LOCAL_NONE,
8261
GR_COMBINE_OTHER_TEXTURE);
8262
}
8263
else
8264
{
8265
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8266
GR_COMBINE_FACTOR_TEXTURE_RGB,
8267
GR_COMBINE_LOCAL_ITERATED,
8268
GR_COMBINE_OTHER_CONSTANT);
8269
CC_1SUBPRIMA ();
8270
SETSHADE_PRIM ();
8271
SETSHADE_PRIMA ();
8272
USE_T0 ();
8273
}
8274
}
8275
8276
static void cc__t0_inter_prim_using_t0a__mul_shade ()
8277
{
8278
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8279
GR_COMBINE_FACTOR_LOCAL,
8280
GR_COMBINE_LOCAL_ITERATED,
8281
GR_COMBINE_OTHER_TEXTURE);
8282
MOD_0 (TMOD_TEX_INTER_COL_USING_TEXA);
8283
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
8284
USE_T0 ();
8285
}
8286
8287
static void cc__env_inter_prim_using_t0__mul_prim ()
8288
{
8289
// (prim-env)*t0+env, (cmb-0)*prim+0
8290
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8291
GR_COMBINE_FACTOR_LOCAL,
8292
GR_COMBINE_LOCAL_CONSTANT,
8293
GR_COMBINE_OTHER_TEXTURE);
8294
CC_PRIM ();
8295
MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8296
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8297
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8298
USE_T0 ();
8299
}
8300
8301
static void cc__env_inter_prim_using_t0__mul_shade ()
8302
{
8303
// amazing... mace actually uses the blender as part of the combine
8304
if ((rdp.othermode_l & 0xFFFF0000) == 0x03820000 ||
8305
(rdp.othermode_l & 0xFFFF0000) == 0x00910000)
8306
{
8307
// blender:
8308
// 1ST = CLR_IN * A_IN + CLR_BL * 1MA
8309
// OUT = 1ST * 0 + 1ST * 1
8310
8311
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8312
GR_COMBINE_FACTOR_LOCAL,
8313
GR_COMBINE_LOCAL_ITERATED,
8314
GR_COMBINE_OTHER_TEXTURE);
8315
MOD_0 (TMOD_COL2_INTER__COL_INTER_COL1_USING_TEX__USING_TEXA);
8316
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8317
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8318
MOD_0_COL2 (rdp.blend_color & 0xFFFFFF00);
8319
USE_T0 ();
8320
return;
8321
}
8322
//(prim-env)*t0+env, (shade-0)*cmb+0
8323
MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8324
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8325
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8326
USE_T0 ();
8327
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8328
GR_COMBINE_FACTOR_LOCAL,
8329
GR_COMBINE_LOCAL_ITERATED,
8330
GR_COMBINE_OTHER_TEXTURE);
8331
}
8332
8333
static void cc__env_inter_one_using_t0__mul_shade ()
8334
{
8335
//(one-env)*t0+env, (cmb-0)*shade+0
8336
if (cmb.combine_ext)
8337
{
8338
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8339
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ONE_MINUS_X,
8340
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
8341
GR_CMBX_B, 0);
8342
cmb.tex_ccolor = rdp.env_color&0xFFFFFF00;
8343
cmb.tex |= 1;
8344
}
8345
else
8346
{
8347
MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8348
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8349
MOD_0_COL1 (0xFFFFFF00);
8350
USE_T0 ();
8351
}
8352
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8353
GR_COMBINE_FACTOR_LOCAL,
8354
GR_COMBINE_LOCAL_ITERATED,
8355
GR_COMBINE_OTHER_TEXTURE);
8356
}
8357
8358
static void cc_env_inter_one_using__one_sub_t0_mul_primlod ()
8359
{
8360
if (cmb.combine_ext)
8361
{
8362
// (noise-t0)*primlod+0, (1-env)*cmb+env
8363
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
8364
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
8365
GR_CMBX_DETAIL_FACTOR, 0,
8366
GR_CMBX_ZERO, 0);
8367
cmb.tex_ccolor = rand()&0xFFFFFF00;
8368
cmb.tex |= 1;
8369
percent = (float)(lod_frac) / 255.0f;
8370
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
8371
cmb.tex |= 1;
8372
}
8373
else
8374
{
8375
USE_T0 ();
8376
}
8377
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8378
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
8379
GR_COMBINE_LOCAL_CONSTANT,
8380
GR_COMBINE_OTHER_TEXTURE);
8381
CC_ENV ();
8382
}
8383
8384
static void cc__env_inter_prim_using_prima__mul_shade ()
8385
{
8386
int primr = (rdp.prim_color>>24)&0xFF;
8387
int primg = (rdp.prim_color>>16)&0xFF;
8388
int primb = (rdp.prim_color>>8)&0xFF;
8389
int prima = rdp.prim_color&0xFF;
8390
int envr = (rdp.env_color>>24)&0xFF;
8391
int envg = (rdp.env_color>>16)&0xFF;
8392
int envb = (rdp.env_color>>8)&0xFF;
8393
int r = (((primr-envr)*prima)/256)+envr;
8394
int g = (((primg-envg)*prima)/256)+envg;
8395
int b = (((primb-envb)*prima)/256)+envb;
8396
cmb.ccolor = (r<<24) | (g<<16) | (b<<8);
8397
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8398
GR_COMBINE_FACTOR_LOCAL,
8399
GR_COMBINE_LOCAL_ITERATED,
8400
GR_COMBINE_OTHER_CONSTANT);
8401
}
8402
8403
static void cc__prim_inter_t0_using_env__mul_shade ()
8404
{
8405
// (t0-prim)*env+prim, (cmb-0)*shade+0
8406
if ((rdp.prim_color & 0xFFFFFF00) == 0)
8407
{
8408
cc_t0_mul_env_mul_shade ();
8409
}
8410
else if (cmb.combine_ext)
8411
{
8412
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
8413
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8414
GR_CMBX_TMU_CCOLOR, 0,
8415
GR_CMBX_ZERO, 0);
8416
cmb.tex_ccolor = rdp.env_color & 0xFFFFFF00;
8417
cmb.tex |= 1;
8418
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8419
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
8420
GR_CMBX_ITRGB, 0,
8421
GR_CMBX_ZERO, 0);
8422
wxUint32 onesubenv = ~rdp.env_color;
8423
CC_C1MULC2(rdp.prim_color, onesubenv);
8424
}
8425
else
8426
{
8427
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8428
GR_COMBINE_FACTOR_LOCAL,
8429
GR_COMBINE_LOCAL_ITERATED,
8430
GR_COMBINE_OTHER_TEXTURE);
8431
MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
8432
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
8433
MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);
8434
USE_T0 ();
8435
}
8436
}
8437
8438
static void cc__one_inter_prim_using_t1__mul_shade ()
8439
{
8440
if (cmb.combine_ext)
8441
{
8442
if ((settings.hacks&hack_BAR) && rdp.cur_tile == 1)
8443
{
8444
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
8445
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
8446
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
8447
GR_CMBX_ZERO, 1);
8448
cmb.tex |= 1;
8449
}
8450
else
8451
{
8452
T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
8453
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
8454
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
8455
GR_CMBX_ZERO, 1);
8456
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8457
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8458
GR_CMBX_ZERO, 0,
8459
GR_CMBX_B, 0);
8460
cmb.tex |= 2;
8461
}
8462
cmb.tex_ccolor = rdp.prim_color | 0xFF;
8463
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8464
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
8465
GR_CMBX_ITRGB, 0,
8466
GR_CMBX_ZERO, 0);
8467
}
8468
else
8469
{
8470
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8471
GR_COMBINE_FACTOR_LOCAL,
8472
GR_COMBINE_LOCAL_ITERATED,
8473
GR_COMBINE_OTHER_TEXTURE);
8474
if ((settings.hacks&hack_BAR) && rdp.cur_tile == 1)
8475
{
8476
MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8477
MOD_0_COL (0xFFFFFF00);
8478
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8479
USE_T0 ();
8480
}
8481
else
8482
{
8483
MOD_1 (TMOD_COL_INTER_COL1_USING_TEX);
8484
MOD_1_COL (0xFFFFFF00);
8485
MOD_1_COL1 (rdp.prim_color & 0xFFFFFF00);
8486
USE_T1 ();
8487
}
8488
}
8489
}
8490
8491
static void cc_prim_sub__prim_sub_t0_mul_prima__mul_shade ()
8492
{
8493
// (prim-t0)*prim_a+0, (prim-cmb)*shade+0
8494
if (cmb.combine_ext)
8495
{
8496
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
8497
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
8498
GR_CMBX_TMU_CALPHA, 0,
8499
GR_CMBX_ZERO, 0);
8500
cmb.tex_ccolor = rdp.prim_color;
8501
cmb.tex |= 1;
8502
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
8503
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
8504
GR_CMBX_ITRGB, 0,
8505
GR_CMBX_ZERO, 0);
8506
CC_PRIM();
8507
}
8508
else
8509
{
8510
if ((rdp.prim_color & 0xFFFFFF00) == 0)
8511
{
8512
cc_t0_mul_prima_mul_shade ();
8513
return;
8514
}
8515
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8516
GR_COMBINE_FACTOR_LOCAL,
8517
GR_COMBINE_LOCAL_ITERATED,
8518
GR_COMBINE_OTHER_TEXTURE);
8519
MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
8520
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
8521
wxUint8 prima = (wxUint8)(rdp.prim_color&0xFF);
8522
MOD_0_COL1 ((prima<<24)|(prima<<16)|(prima<<8));
8523
USE_T0 ();
8524
}
8525
}
8526
8527
static void cc__prim_inter_env_using_t0__mul_shade ()
8528
{
8529
// (env-prim)*t0+prim, (cmb-0)*shade+0
8530
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8531
GR_COMBINE_FACTOR_LOCAL,
8532
GR_COMBINE_LOCAL_ITERATED,
8533
GR_COMBINE_OTHER_TEXTURE);
8534
MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8535
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
8536
MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);
8537
USE_T0 ();
8538
}
8539
8540
static void cc__prim_inter_one_using_env__mul_shade ()
8541
{
8542
// (one-prim)*env+prim, (cmb-0)*shade+0
8543
if ((rdp.prim_color&0xFFFFFF00) == 0)
8544
{
8545
cc_env_mul_shade ();
8546
return;
8547
}
8548
if ((rdp.env_color&0xFFFFFF00) == 0)
8549
{
8550
cc_prim_mul_shade ();
8551
return;
8552
}
8553
if ((rdp.prim_color&0xFFFFFF00) == 0xFFFFFF00 || (rdp.env_color&0xFFFFFF00) == 0xFFFFFF00)
8554
{
8555
cc_shade ();
8556
return;
8557
}
8558
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8559
GR_COMBINE_FACTOR_LOCAL,
8560
GR_COMBINE_LOCAL_ITERATED,
8561
GR_COMBINE_OTHER_CONSTANT);
8562
CC_1SUBPRIM ();
8563
CC_C1MULC2 (cmb.ccolor, rdp.env_color);
8564
cmb.ccolor=(wxUint8)( min(255, (int)((cmb.ccolor & 0xFF000000) >> 24) + (int)((rdp.prim_color & 0xFF000000) >> 24)) ) << 24 |
8565
(wxUint8)( min(255, (int)((cmb.ccolor & 0x00FF0000) >> 16) + (int)((rdp.prim_color & 0x00FF0000) >> 16)) ) << 16 |
8566
(wxUint8)( min(255, (int)((cmb.ccolor & 0x0000FF00) >> 8) + (int)((rdp.prim_color & 0x0000FF00) >> 8)) ) << 8 ;
8567
}
8568
8569
static void cc__env_inter_prim_using_t0a__mul_t0 ()
8570
{
8571
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8572
GR_COMBINE_FACTOR_ONE,
8573
GR_COMBINE_LOCAL_NONE,
8574
GR_COMBINE_OTHER_TEXTURE);
8575
MOD_0 (TMOD_COL_INTER_COL1_USING_TEXA__MUL_TEX);
8576
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8577
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8578
USE_T0 ();
8579
}
8580
8581
static void cc__env_inter_prim_using_t0a__mul_prim ()
8582
{
8583
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8584
GR_COMBINE_FACTOR_LOCAL,
8585
GR_COMBINE_LOCAL_CONSTANT,
8586
GR_COMBINE_OTHER_TEXTURE);
8587
CC_PRIM ();
8588
MOD_0 (TMOD_COL_INTER_COL1_USING_TEXA);
8589
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8590
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8591
USE_T0 ();
8592
}
8593
8594
static void cc__env_inter_prim_using__t0_sub_shade_mul_primlod_add_env ()
8595
{
8596
// (t0-shade)*lodf+env, (prim-env)*cmb+env
8597
if (cmb.combine_ext)
8598
{
8599
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
8600
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
8601
GR_CMBX_DETAIL_FACTOR, 0,
8602
GR_CMBX_B, 0);
8603
cmb.tex_ccolor = rdp.env_color;
8604
percent = (float)lod_frac / 255.0f;
8605
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
8606
cmb.tex |= 1;
8607
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
8608
GR_COMBINE_FACTOR_TEXTURE_RGB,
8609
GR_COMBINE_LOCAL_ITERATED,
8610
GR_COMBINE_OTHER_CONSTANT);
8611
CC_PRIM ();
8612
SETSHADE_ENV ();
8613
}
8614
else
8615
{
8616
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
8617
GR_COMBINE_FACTOR_ONE,//TEXTURE_RGB,
8618
GR_COMBINE_LOCAL_ITERATED,
8619
GR_COMBINE_OTHER_TEXTURE);//CONSTANT);
8620
MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
8621
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8622
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
8623
USE_T0 ();
8624
MULSHADE_PRIMSUBENV ();
8625
MULSHADE_PRIMLOD();
8626
SUBSHADE_PRIMSUBENV ();
8627
}
8628
}
8629
8630
static void cc__prim_inter_t0_using_t0__mul_shade ()
8631
{
8632
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8633
GR_COMBINE_FACTOR_LOCAL,
8634
GR_COMBINE_LOCAL_ITERATED,
8635
GR_COMBINE_OTHER_TEXTURE);
8636
MOD_0 (TMOD_COL_INTER_TEX_USING_TEX);
8637
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
8638
USE_T0 ();
8639
}
8640
8641
static void cc__env_inter_t0_using_t0a__mul_shade ()
8642
{
8643
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8644
GR_COMBINE_FACTOR_LOCAL,
8645
GR_COMBINE_LOCAL_ITERATED,
8646
GR_COMBINE_OTHER_TEXTURE);
8647
MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);
8648
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8649
USE_T0 ();
8650
}
8651
8652
static void cc__env_inter_t0_using_prima__mul_shade ()
8653
{
8654
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8655
GR_COMBINE_FACTOR_LOCAL,
8656
GR_COMBINE_LOCAL_ITERATED,
8657
GR_COMBINE_OTHER_TEXTURE);
8658
MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
8659
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8660
wxUint32 prima = rdp.prim_color & 0xFF;
8661
MOD_0_COL1 ((prima<<24)|(prima|16)|(prima<<8));
8662
USE_T0 ();
8663
}
8664
8665
static void cc_shade_mul_prima ()
8666
{
8667
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8668
GR_COMBINE_FACTOR_ONE,
8669
GR_COMBINE_LOCAL_NONE,
8670
GR_COMBINE_OTHER_ITERATED);
8671
MULSHADE_PRIMA ();
8672
}
8673
8674
static void cc_shade_mul_shadea ()
8675
{
8676
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8677
GR_COMBINE_FACTOR_ONE,
8678
GR_COMBINE_LOCAL_NONE,
8679
GR_COMBINE_OTHER_ITERATED);
8680
MULSHADE_SHADEA ();
8681
}
8682
8683
static void cc__t0_mul_shade__inter_env_using_enva ()
8684
{
8685
// (t0-0)*shade+0, (env-cmb)*env_a+cmb ** INC **
8686
wxUint32 enva = rdp.env_color&0xFF;
8687
if (enva == 0xFF)
8688
cc_env ();
8689
else if (enva == 0)
8690
cc_t0_mul_shade ();
8691
else if (cmb.combine_ext)
8692
{
8693
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
8694
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
8695
GR_CMBX_ITRGB, 0,
8696
GR_CMBX_B, 0);
8697
cmb.tex |= 1;
8698
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
8699
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
8700
GR_CMBX_ZERO, 1,
8701
GR_CMBX_ZERO, 0);
8702
MULSHADE_1MENVA ();
8703
CC_COLMULBYTE(rdp.env_color, (rdp.env_color&0xFF));
8704
cmb.tex_ccolor = cmb.ccolor;
8705
}
8706
else
8707
{
8708
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8709
GR_COMBINE_FACTOR_LOCAL,
8710
GR_COMBINE_LOCAL_ITERATED,
8711
GR_COMBINE_OTHER_TEXTURE);
8712
INTERSHADE_2 (rdp.env_color & 0xFFFFFF00, rdp.env_color & 0xFF);
8713
USE_T0 ();
8714
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
8715
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
8716
MOD_0_FAC (rdp.env_color & 0xFF);
8717
}
8718
}
8719
8720
static void cc__t0_mul_shade__inter_one_using_enva ()
8721
{
8722
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8723
GR_COMBINE_FACTOR_TEXTURE_RGB,
8724
GR_COMBINE_LOCAL_CONSTANT,
8725
GR_COMBINE_OTHER_ITERATED);
8726
CC_ENVA ();
8727
MULSHADE_1MENVA ();
8728
USE_T0 ();
8729
}
8730
8731
static void cc__t0_mul_shade__inter_one_using_shadea ()
8732
{
8733
if (cmb.combine_ext)
8734
{
8735
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
8736
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
8737
GR_CMBX_ITRGB, 0,
8738
GR_CMBX_ZERO, 0);
8739
cmb.tex |= 1;
8740
CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_X,
8741
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
8742
GR_CMBX_ITALPHA, 0,
8743
GR_CMBX_B, 0);
8744
}
8745
else
8746
{
8747
cc_t0_mul_shade ();
8748
}
8749
}
8750
8751
static void cc__prim_mul_shade__inter_env_using_enva ()
8752
{
8753
CCMB (GR_COMBINE_FUNCTION_BLEND,
8754
GR_COMBINE_FACTOR_LOCAL_ALPHA,
8755
GR_COMBINE_LOCAL_ITERATED,
8756
GR_COMBINE_OTHER_CONSTANT);
8757
CC_ENV ();
8758
MULSHADE_PRIM ();
8759
SETSHADE_A_ENV ();
8760
}
8761
8762
static void cc__prim_mul_shade__inter_env_using__prim_mul_shade_alpha ()
8763
{
8764
CCMB (GR_COMBINE_FUNCTION_BLEND,
8765
GR_COMBINE_FACTOR_LOCAL_ALPHA,
8766
GR_COMBINE_LOCAL_ITERATED,
8767
GR_COMBINE_OTHER_CONSTANT);
8768
CC_ENV ();
8769
MULSHADE_PRIM ();
8770
MULSHADE_A_PRIM ();
8771
}
8772
8773
8774
//****************************************************************
8775
8776
static void ac_one ()
8777
{
8778
ACMB (GR_COMBINE_FUNCTION_LOCAL,
8779
GR_COMBINE_FACTOR_NONE,
8780
GR_COMBINE_LOCAL_CONSTANT,
8781
GR_COMBINE_OTHER_NONE);
8782
cmb.ccolor |= 0xFF;
8783
}
8784
8785
static void ac_t0 ()
8786
{
8787
if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))
8788
{
8789
wxUint32 blend_mode = (rdp.othermode_l >> 16);
8790
if (blend_mode == 0x0550)
8791
{
8792
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8793
GR_COMBINE_FACTOR_LOCAL,
8794
GR_COMBINE_LOCAL_CONSTANT,
8795
GR_COMBINE_OTHER_TEXTURE);
8796
CA(rdp.fog_color);
8797
}
8798
else if (blend_mode == 0x55f0) //cmem*afog + cfog*1ma
8799
{
8800
ACMB (GR_COMBINE_FUNCTION_LOCAL,
8801
GR_COMBINE_FACTOR_ONE,
8802
GR_COMBINE_LOCAL_CONSTANT,
8803
GR_COMBINE_OTHER_NONE);
8804
CA(~rdp.fog_color);
8805
}
8806
else
8807
{
8808
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8809
GR_COMBINE_FACTOR_ONE,
8810
GR_COMBINE_LOCAL_NONE,
8811
GR_COMBINE_OTHER_TEXTURE);
8812
}
8813
}
8814
else
8815
{
8816
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8817
GR_COMBINE_FACTOR_ONE,
8818
GR_COMBINE_LOCAL_NONE,
8819
GR_COMBINE_OTHER_TEXTURE);
8820
}
8821
A_USE_T0 ();
8822
}
8823
8824
static void ac_zero ()
8825
{
8826
if (cmb.tex > 0)
8827
{
8828
ac_t0 ();
8829
return;
8830
}
8831
ACMB (GR_COMBINE_FUNCTION_LOCAL,
8832
GR_COMBINE_FACTOR_NONE,
8833
GR_COMBINE_LOCAL_CONSTANT,
8834
GR_COMBINE_OTHER_NONE);
8835
cmb.ccolor &= 0xFFFFFF00;
8836
}
8837
8838
static void ac_t1 ()
8839
{
8840
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8841
GR_COMBINE_FACTOR_ONE,
8842
GR_COMBINE_LOCAL_NONE,
8843
GR_COMBINE_OTHER_TEXTURE);
8844
if ((settings.hacks&hack_BAR) && rdp.tiles[rdp.cur_tile].format == 3)
8845
A_USE_T0 ();
8846
else
8847
A_USE_T1 ();
8848
}
8849
8850
static void ac_prim ()
8851
{
8852
ACMB (GR_COMBINE_FUNCTION_LOCAL,
8853
GR_COMBINE_FACTOR_NONE,
8854
GR_COMBINE_LOCAL_CONSTANT,
8855
GR_COMBINE_OTHER_NONE);
8856
CA_PRIM ();
8857
}
8858
8859
static void ac_primlod ()
8860
{
8861
ACMB (GR_COMBINE_FUNCTION_LOCAL,
8862
GR_COMBINE_FACTOR_NONE,
8863
GR_COMBINE_LOCAL_CONSTANT,
8864
GR_COMBINE_OTHER_NONE);
8865
CA_PRIMLOD ();
8866
}
8867
8868
static void ac_one_sub_t0 ()
8869
{
8870
ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
8871
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
8872
GR_COMBINE_LOCAL_CONSTANT,
8873
GR_COMBINE_OTHER_NONE);
8874
CA (0xFF);
8875
A_USE_T0 ();
8876
}
8877
8878
static void ac_one_sub_prim ()
8879
{
8880
ACMB (GR_COMBINE_FUNCTION_LOCAL,
8881
GR_COMBINE_FACTOR_NONE,
8882
GR_COMBINE_LOCAL_CONSTANT,
8883
GR_COMBINE_OTHER_NONE);
8884
CA_INVPRIM ();
8885
}
8886
8887
static void ac_env ()
8888
{
8889
ACMB (GR_COMBINE_FUNCTION_LOCAL,
8890
GR_COMBINE_FACTOR_NONE,
8891
GR_COMBINE_LOCAL_CONSTANT,
8892
GR_COMBINE_OTHER_NONE);
8893
CA_ENV ();
8894
}
8895
8896
static void ac_shade ()
8897
{
8898
ACMB (GR_COMBINE_FUNCTION_LOCAL,
8899
GR_COMBINE_FACTOR_NONE,
8900
GR_COMBINE_LOCAL_ITERATED,
8901
GR_COMBINE_OTHER_NONE);
8902
}
8903
8904
// ** A+B **
8905
static void ac_t0_add_t1 () //Aded by Gonetz
8906
{
8907
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8908
GR_COMBINE_FACTOR_ONE,
8909
GR_COMBINE_LOCAL_NONE,
8910
GR_COMBINE_OTHER_TEXTURE);
8911
A_T0_ADD_T1 ();
8912
}
8913
8914
static void ac__t0_mul_prim__add__t1_mul_primlod () //Aded by Gonetz
8915
{
8916
if (lod_frac == 0)
8917
{
8918
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8919
GR_COMBINE_FACTOR_LOCAL,
8920
GR_COMBINE_LOCAL_CONSTANT,
8921
GR_COMBINE_OTHER_TEXTURE);
8922
CA_PRIM ();
8923
A_USE_T0 ();
8924
}
8925
else if ((rdp.prim_color&0xFF) == 0)
8926
{
8927
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8928
GR_COMBINE_FACTOR_LOCAL,
8929
GR_COMBINE_LOCAL_CONSTANT,
8930
GR_COMBINE_OTHER_TEXTURE);
8931
CA_PRIMLOD ();
8932
A_USE_T1 ();
8933
}
8934
else if ((rdp.prim_color&0xFF) == 0xFF)
8935
{
8936
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8937
GR_COMBINE_FACTOR_ONE,
8938
GR_COMBINE_LOCAL_NONE,
8939
GR_COMBINE_OTHER_TEXTURE);
8940
A_T1_MUL_PRIMLOD_ADD_T0();
8941
}
8942
else
8943
{
8944
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8945
GR_COMBINE_FACTOR_LOCAL,
8946
GR_COMBINE_LOCAL_CONSTANT,
8947
GR_COMBINE_OTHER_TEXTURE);
8948
CA_PRIM ();
8949
A_T0_ADD_T1 ();
8950
}
8951
}
8952
8953
static void ac_t0_add_prim () //Aded by Gonetz
8954
{
8955
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8956
GR_COMBINE_FACTOR_ONE,
8957
GR_COMBINE_LOCAL_CONSTANT,
8958
GR_COMBINE_OTHER_TEXTURE);
8959
CA_PRIM ();
8960
A_USE_T0 ();
8961
}
8962
8963
static void ac_t0_add_env () //Aded by Gonetz
8964
{
8965
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8966
GR_COMBINE_FACTOR_ONE,
8967
GR_COMBINE_LOCAL_CONSTANT,
8968
GR_COMBINE_OTHER_TEXTURE);
8969
CA_ENV ();
8970
A_USE_T0 ();
8971
}
8972
8973
static void ac_t1_add_env () //Added by Gonetz
8974
{
8975
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8976
GR_COMBINE_FACTOR_ONE,
8977
GR_COMBINE_LOCAL_CONSTANT,
8978
GR_COMBINE_OTHER_TEXTURE);
8979
CA_ENV ();
8980
A_USE_T1 ();
8981
}
8982
8983
static void ac__t0_add_t1__add_prim () //Aded by Gonetz
8984
{
8985
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8986
GR_COMBINE_FACTOR_ONE,
8987
GR_COMBINE_LOCAL_CONSTANT,
8988
GR_COMBINE_OTHER_TEXTURE);
8989
CA_PRIM ();
8990
A_T0_ADD_T1 ();
8991
}
8992
8993
static void ac_prim_add_shade () //Aded by Gonetz
8994
{
8995
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8996
GR_COMBINE_FACTOR_ONE,
8997
GR_COMBINE_LOCAL_ITERATED,
8998
GR_COMBINE_OTHER_CONSTANT);
8999
CA_PRIM ();
9000
}
9001
9002
static void ac_env_add_shade () //Aded by Gonetz
9003
{
9004
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9005
GR_COMBINE_FACTOR_ONE,
9006
GR_COMBINE_LOCAL_ITERATED,
9007
GR_COMBINE_OTHER_CONSTANT);
9008
CA_ENV ();
9009
}
9010
9011
// ** A*B **
9012
static void ac_t0_mul_t0 () //Added by Gonetz
9013
{
9014
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9015
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9016
GR_COMBINE_LOCAL_NONE,
9017
GR_COMBINE_OTHER_TEXTURE);
9018
A_USE_T0 ();
9019
}
9020
9021
static void ac_t0_mul_t1 ()
9022
{
9023
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9024
GR_COMBINE_FACTOR_ONE,
9025
GR_COMBINE_LOCAL_NONE,
9026
GR_COMBINE_OTHER_TEXTURE);
9027
A_T0_MUL_T1 ();
9028
}
9029
9030
static void ac_t0_mul_t1_add_t1 ()
9031
{
9032
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9033
GR_COMBINE_FACTOR_ONE,
9034
GR_COMBINE_LOCAL_NONE,
9035
GR_COMBINE_OTHER_TEXTURE);
9036
if (cmb.combine_ext)
9037
{
9038
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9039
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9040
GR_CMBX_ZERO, 0,
9041
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9042
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9043
GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9044
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
9045
GR_CMBX_B, 0);
9046
cmb.tex |= 3;
9047
}
9048
else
9049
{
9050
A_T0_MUL_T1 ();
9051
}
9052
}
9053
9054
static void ac_t0_mul_t1_add_prim ()
9055
{
9056
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9057
GR_COMBINE_FACTOR_ONE,
9058
GR_COMBINE_LOCAL_CONSTANT,
9059
GR_COMBINE_OTHER_TEXTURE);
9060
CA_PRIM ();
9061
A_T0_MUL_T1 ();
9062
}
9063
9064
static void ac_t0_mul_prim ()
9065
{
9066
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9067
GR_COMBINE_FACTOR_LOCAL,
9068
GR_COMBINE_LOCAL_CONSTANT,
9069
GR_COMBINE_OTHER_TEXTURE);
9070
CA_PRIM ();
9071
A_USE_T0 ();
9072
}
9073
9074
static void ac_t0_mul_prim_mul_primlod ()
9075
{
9076
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9077
GR_COMBINE_FACTOR_LOCAL,
9078
GR_COMBINE_LOCAL_CONSTANT,
9079
GR_COMBINE_OTHER_TEXTURE);
9080
CA_PRIM_MUL_PRIMLOD ();
9081
A_USE_T0 ();
9082
}
9083
9084
static void ac_t1_mul_prim ()
9085
{
9086
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9087
GR_COMBINE_FACTOR_LOCAL,
9088
GR_COMBINE_LOCAL_CONSTANT,
9089
GR_COMBINE_OTHER_TEXTURE);
9090
CA_PRIM ();
9091
if (rdp.cycle_mode == 0)
9092
A_USE_T0 ();
9093
else
9094
A_USE_T1 ();
9095
}
9096
9097
//Added by Gonetz
9098
static void ac__t1_sub_one_mul_primlod_add_t0__mul_prim ()
9099
{
9100
if (cmb.combine_ext)
9101
{
9102
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9103
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9104
GR_CMBX_ZERO, 0,
9105
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9106
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9107
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
9108
GR_CMBX_DETAIL_FACTOR, 0,
9109
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9110
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
9111
percent = (float)lod_frac / 255.0f;
9112
}
9113
else
9114
{
9115
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
9116
cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
9117
percent = (255 - lod_frac) / 255.0f;
9118
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
9119
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
9120
}
9121
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9122
GR_COMBINE_FACTOR_LOCAL,
9123
GR_COMBINE_LOCAL_CONSTANT,
9124
GR_COMBINE_OTHER_TEXTURE);
9125
CA_PRIM ();
9126
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9127
cmb.tex |= 3;
9128
}
9129
9130
static void ac__t0_sub_t1_mul_enva_add_t0__mul_prim ()
9131
{
9132
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9133
GR_COMBINE_FACTOR_LOCAL,
9134
GR_COMBINE_LOCAL_CONSTANT,
9135
GR_COMBINE_OTHER_TEXTURE);
9136
CA_PRIM ();
9137
if (cmb.combine_ext)
9138
{
9139
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9140
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9141
GR_CMBX_ZERO, 0,
9142
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9143
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9144
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9145
GR_CMBX_TMU_CALPHA, 0,
9146
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9147
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
9148
cmb.tex |= 3;
9149
}
9150
else
9151
{
9152
A_T0_MUL_T1 ();
9153
}
9154
}
9155
9156
static void ac__t0_sub_one_mul_enva_add_t0__mul_prim ()
9157
{
9158
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9159
GR_COMBINE_FACTOR_LOCAL,
9160
GR_COMBINE_LOCAL_CONSTANT,
9161
GR_COMBINE_OTHER_TEXTURE);
9162
CA_PRIM ();
9163
if (cmb.combine_ext)
9164
{
9165
T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
9166
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9167
GR_CMBX_TMU_CALPHA, 0,
9168
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9169
SETSHADE_A(0xFF);
9170
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
9171
cmb.tex |= 1;
9172
}
9173
else
9174
{
9175
A_USE_T0 ();
9176
}
9177
}
9178
9179
static void ac__t0_sub_t1_mul_primlod_add_t0__mul_prim ()
9180
{
9181
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9182
GR_COMBINE_FACTOR_LOCAL,
9183
GR_COMBINE_LOCAL_CONSTANT,
9184
GR_COMBINE_OTHER_TEXTURE);
9185
CA_PRIM ();
9186
if (cmb.combine_ext)
9187
{
9188
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9189
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9190
GR_CMBX_ZERO, 0,
9191
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9192
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9193
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9194
GR_CMBX_DETAIL_FACTOR, 0,
9195
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9196
cmb.tex |= 3;
9197
percent = (float)lod_frac / 255.0f;
9198
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9199
}
9200
else
9201
{
9202
A_T0_INTER_T1_USING_FACTOR (lod_frac);
9203
}
9204
}
9205
9206
static void ac__t1_sub_prim_mul_primlod_add_t0__mul_prim ()
9207
{
9208
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9209
GR_COMBINE_FACTOR_LOCAL,
9210
GR_COMBINE_LOCAL_CONSTANT,
9211
GR_COMBINE_OTHER_TEXTURE);
9212
CA_PRIM ();
9213
if (cmb.combine_ext)
9214
{
9215
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9216
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9217
GR_CMBX_ZERO, 0,
9218
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9219
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9220
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
9221
GR_CMBX_DETAIL_FACTOR, 0,
9222
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9223
cmb.tex |= 3;
9224
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
9225
percent = (float)lod_frac / 255.0f;
9226
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9227
}
9228
else
9229
{
9230
A_T0_INTER_T1_USING_FACTOR (lod_frac);
9231
}
9232
}
9233
9234
static void ac__t1_sub_t0_mul_enva_add_t1__mul_prim ()
9235
{
9236
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9237
GR_COMBINE_FACTOR_LOCAL,
9238
GR_COMBINE_LOCAL_CONSTANT,
9239
GR_COMBINE_OTHER_TEXTURE);
9240
CA_PRIM ();
9241
if (cmb.combine_ext)
9242
{
9243
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9244
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9245
GR_CMBX_ZERO, 0,
9246
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9247
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9248
GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9249
GR_CMBX_TMU_CALPHA, 0,
9250
GR_CMBX_B, 0);
9251
cmb.tex |= 3;
9252
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF);
9253
}
9254
else
9255
{
9256
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
9257
A_T0_INTER_T1_USING_FACTOR (factor);
9258
}
9259
}
9260
9261
static void ac__t1_sub_t0_mul_primlod__mul_env_add_prim ()
9262
{
9263
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9264
GR_COMBINE_FACTOR_ONE,
9265
GR_COMBINE_LOCAL_CONSTANT,
9266
GR_COMBINE_OTHER_TEXTURE);
9267
CA_PRIM ();
9268
if (cmb.combine_ext)
9269
{
9270
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9271
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9272
GR_CMBX_ZERO, 0,
9273
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9274
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9275
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9276
GR_CMBX_TMU_CALPHA, 0,
9277
GR_CMBX_ZERO, 0);
9278
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (wxUint32)((float)(rdp.env_color&0xFF)*(float)rdp.prim_lodfrac/255.0f);
9279
}
9280
else
9281
{
9282
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL;
9283
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL;
9284
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
9285
percent = (rdp.prim_lodfrac * (rdp.env_color&0xFF)) / 65025.0f;
9286
cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
9287
}
9288
cmb.tex |= 3;
9289
}
9290
9291
static void ac__t0_sub_one_mul_enva_add_t1__mul_prim ()
9292
{
9293
if (cmb.combine_ext)
9294
{
9295
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9296
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9297
GR_CMBX_ZERO, 0,
9298
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9299
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9300
GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9301
GR_CMBX_TMU_CALPHA, 0,
9302
GR_CMBX_B, 0);
9303
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
9304
cmb.tex |= 3;
9305
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9306
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9307
GR_CMBX_ITALPHA, 0,
9308
GR_CMBX_ZERO, 0);
9309
CA_ENV ();
9310
SETSHADE_A_PRIM ();
9311
}
9312
else
9313
{
9314
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9315
GR_COMBINE_FACTOR_LOCAL,
9316
GR_COMBINE_LOCAL_ITERATED,
9317
GR_COMBINE_OTHER_TEXTURE);
9318
SETSHADE_A_PRIM ();
9319
SETSHADE_A_ENV ();
9320
A_T0_MUL_T1 ();
9321
}
9322
}
9323
9324
static void ac__t1_mul_prima_add_t0__mul_env ()
9325
{
9326
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9327
GR_COMBINE_FACTOR_LOCAL,
9328
GR_COMBINE_LOCAL_CONSTANT,
9329
GR_COMBINE_OTHER_TEXTURE);
9330
CA_ENV ();
9331
A_T1_MUL_PRIMA_ADD_T0 ();
9332
}
9333
9334
static void ac__t1_mul_enva_add_t0__mul_prim ()
9335
{
9336
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9337
GR_COMBINE_FACTOR_LOCAL,
9338
GR_COMBINE_LOCAL_CONSTANT,
9339
GR_COMBINE_OTHER_TEXTURE);
9340
CA_PRIM ();
9341
A_T1_MUL_ENVA_ADD_T0 ();
9342
}
9343
9344
static void ac_t0_mul_primlod ()
9345
{
9346
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9347
GR_COMBINE_FACTOR_LOCAL,
9348
GR_COMBINE_LOCAL_CONSTANT,
9349
GR_COMBINE_OTHER_TEXTURE);
9350
CA_PRIMLOD ();
9351
A_USE_T0 ();
9352
}
9353
9354
static void ac_t1_mul_primlod ()
9355
{
9356
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9357
GR_COMBINE_FACTOR_LOCAL,
9358
GR_COMBINE_LOCAL_CONSTANT,
9359
GR_COMBINE_OTHER_TEXTURE);
9360
CA_PRIMLOD ();
9361
A_USE_T1 ();
9362
}
9363
9364
//Added by Gonetz
9365
static void ac__t0_add_t1__mul_prim ()
9366
{
9367
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9368
GR_COMBINE_FACTOR_LOCAL,
9369
GR_COMBINE_LOCAL_CONSTANT,
9370
GR_COMBINE_OTHER_TEXTURE);
9371
CA_PRIM ();
9372
A_T0_ADD_T1 ();
9373
}
9374
9375
//Added by Gonetz
9376
static void ac__t0_add_t1__mul_primlod ()
9377
{
9378
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9379
GR_COMBINE_FACTOR_LOCAL,
9380
GR_COMBINE_LOCAL_CONSTANT,
9381
GR_COMBINE_OTHER_TEXTURE);
9382
CA_PRIMLOD ();
9383
A_T0_ADD_T1 ();
9384
}
9385
9386
//Added by Gonetz
9387
static void ac__t0_mul_t1__mul_primlod ()
9388
{
9389
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9390
GR_COMBINE_FACTOR_LOCAL,
9391
GR_COMBINE_LOCAL_CONSTANT,
9392
GR_COMBINE_OTHER_TEXTURE);
9393
CA_PRIMLOD ();
9394
A_T0_MUL_T1 ();
9395
}
9396
9397
static void ac_t0_mul_env ()
9398
{
9399
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9400
GR_COMBINE_FACTOR_LOCAL,
9401
GR_COMBINE_LOCAL_CONSTANT,
9402
GR_COMBINE_OTHER_TEXTURE);
9403
CA_ENV ();
9404
A_USE_T0 ();
9405
}
9406
9407
static void ac_t0_mul_env_mul_primlod ()
9408
{
9409
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9410
GR_COMBINE_FACTOR_LOCAL,
9411
GR_COMBINE_LOCAL_CONSTANT,
9412
GR_COMBINE_OTHER_TEXTURE);
9413
CA_ENV_MUL_PRIMLOD ();
9414
A_USE_T0 ();
9415
}
9416
9417
static void ac_t1_mul_env () //Added by Gonetz
9418
{
9419
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9420
GR_COMBINE_FACTOR_LOCAL,
9421
GR_COMBINE_LOCAL_CONSTANT,
9422
GR_COMBINE_OTHER_TEXTURE);
9423
CA_ENV ();
9424
// if ((settings.hacks&hack_Powerpuff) && (rdp.last_tile == 0))
9425
if (rdp.cycle_mode == 0)
9426
A_USE_T0 ();
9427
else
9428
A_USE_T1 ();
9429
}
9430
9431
static void ac__t1_sub_one_mul_primlod_add_t0__mul_env ()
9432
{
9433
if (cmb.combine_ext)
9434
{
9435
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9436
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9437
GR_CMBX_ZERO, 0,
9438
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9439
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9440
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
9441
GR_CMBX_DETAIL_FACTOR, 0,
9442
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9443
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
9444
percent = (float)lod_frac / 255.0f;
9445
}
9446
else
9447
{
9448
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
9449
cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
9450
percent = (255 - lod_frac) / 255.0f;
9451
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
9452
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
9453
}
9454
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9455
GR_COMBINE_FACTOR_LOCAL,
9456
GR_COMBINE_LOCAL_CONSTANT,
9457
GR_COMBINE_OTHER_TEXTURE);
9458
CA_ENV ();
9459
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9460
cmb.tex |= 3;
9461
}
9462
9463
static void ac_t0_mul_shade ()
9464
{
9465
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9466
GR_COMBINE_FACTOR_LOCAL,
9467
GR_COMBINE_LOCAL_ITERATED,
9468
GR_COMBINE_OTHER_TEXTURE);
9469
A_USE_T0 ();
9470
}
9471
9472
static void ac_t1_mul_shade ()
9473
{
9474
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9475
GR_COMBINE_FACTOR_LOCAL,
9476
GR_COMBINE_LOCAL_ITERATED,
9477
GR_COMBINE_OTHER_TEXTURE);
9478
A_USE_T1 ();
9479
}
9480
9481
//Added by Gonetz
9482
static void ac__t0_add_t1__mul_shade ()
9483
{
9484
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9485
GR_COMBINE_FACTOR_LOCAL,
9486
GR_COMBINE_LOCAL_ITERATED,
9487
GR_COMBINE_OTHER_TEXTURE);
9488
A_T0_ADD_T1 ();
9489
}
9490
9491
static void ac__t0_mul_primlod_add_t0__mul_shade ()
9492
{
9493
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9494
GR_COMBINE_FACTOR_LOCAL,
9495
GR_COMBINE_LOCAL_ITERATED,
9496
GR_COMBINE_OTHER_TEXTURE);
9497
if (cmb.combine_ext)
9498
{
9499
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9500
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9501
GR_CMBX_DETAIL_FACTOR, 0,
9502
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9503
cmb.tex |= 1;
9504
percent = (float)lod_frac / 255.0f;
9505
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9506
}
9507
else
9508
{
9509
A_USE_T0 ();
9510
}
9511
}
9512
9513
static void ac__t1_mul_prima_add_t0__mul_shade ()
9514
{
9515
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9516
GR_COMBINE_FACTOR_LOCAL,
9517
GR_COMBINE_LOCAL_ITERATED,
9518
GR_COMBINE_OTHER_TEXTURE);
9519
A_T1_MUL_PRIMA_ADD_T0 ();
9520
}
9521
9522
//Added by Gonetz
9523
static void ac__t0_sub_t1__mul_shade ()
9524
{
9525
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9526
GR_COMBINE_FACTOR_LOCAL,
9527
GR_COMBINE_LOCAL_ITERATED,
9528
GR_COMBINE_OTHER_TEXTURE);
9529
if (cmb.combine_ext)
9530
{
9531
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9532
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9533
GR_CMBX_ZERO, 0,
9534
GR_CMBX_B, 0);
9535
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9536
GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
9537
GR_CMBX_ZERO, 1,
9538
GR_CMBX_ZERO, 0);
9539
cmb.tex |= 3;
9540
}
9541
else
9542
{
9543
A_T0_SUB_T1 ();
9544
}
9545
}
9546
9547
static void ac__t1_mul_t1_add_t1__mul_shade ()
9548
{
9549
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9550
GR_COMBINE_FACTOR_LOCAL,
9551
GR_COMBINE_LOCAL_ITERATED,
9552
GR_COMBINE_OTHER_TEXTURE);
9553
if (cmb.combine_ext)
9554
{
9555
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9556
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9557
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
9558
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9559
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9560
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9561
GR_CMBX_ZERO, 1,
9562
GR_CMBX_ZERO, 0);
9563
cmb.tex |= 2;
9564
}
9565
else
9566
{
9567
A_USE_T1 ();
9568
}
9569
}
9570
9571
static void ac__t1_mul_enva_add_t0__mul_shade ()
9572
{
9573
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9574
GR_COMBINE_FACTOR_LOCAL,
9575
GR_COMBINE_LOCAL_ITERATED,
9576
GR_COMBINE_OTHER_TEXTURE);
9577
A_T1_MUL_ENVA_ADD_T0 ();
9578
}
9579
9580
static void ac__t1_sub_one_mul_primlod_add_t0__mul_shade ()
9581
{
9582
if (cmb.combine_ext)
9583
{
9584
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9585
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9586
GR_CMBX_ZERO, 0,
9587
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9588
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9589
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
9590
GR_CMBX_DETAIL_FACTOR, 0,
9591
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9592
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
9593
percent = (float)lod_frac / 255.0f;
9594
}
9595
else
9596
{
9597
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
9598
cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
9599
percent = (255 - lod_frac) / 255.0f;
9600
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
9601
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
9602
}
9603
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9604
GR_COMBINE_FACTOR_LOCAL,
9605
GR_COMBINE_LOCAL_ITERATED,
9606
GR_COMBINE_OTHER_TEXTURE);
9607
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9608
cmb.tex |= 3;
9609
}
9610
9611
static void ac__t1_sub_shade_mul_primlod_add_t0__mul_shade ()
9612
{
9613
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9614
GR_COMBINE_FACTOR_LOCAL,
9615
GR_COMBINE_LOCAL_CONSTANT,
9616
GR_COMBINE_OTHER_TEXTURE);
9617
CA_PRIM ();
9618
if (cmb.combine_ext)
9619
{
9620
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9621
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9622
GR_CMBX_ZERO, 0,
9623
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9624
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9625
GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
9626
GR_CMBX_DETAIL_FACTOR, 0,
9627
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9628
cmb.tex |= 3;
9629
percent = (float)lod_frac / 255.0f;
9630
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9631
}
9632
else
9633
{
9634
A_T0_INTER_T1_USING_FACTOR (lod_frac);
9635
}
9636
}
9637
9638
//Added by Gonetz
9639
static void ac_prim_mul_prim ()
9640
{
9641
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9642
GR_COMBINE_FACTOR_LOCAL,
9643
GR_COMBINE_LOCAL_CONSTANT,
9644
GR_COMBINE_OTHER_ITERATED);
9645
CA_PRIM ();
9646
SETSHADE_A_PRIM ();
9647
}
9648
9649
//Added by Gonetz
9650
static void ac_prim_mul_primlod ()
9651
{
9652
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9653
GR_COMBINE_FACTOR_LOCAL,
9654
GR_COMBINE_LOCAL_CONSTANT,
9655
GR_COMBINE_OTHER_ITERATED);
9656
CA_PRIMLOD ();
9657
SETSHADE_A_PRIM ();
9658
}
9659
9660
static void ac_prim_mul_env ()
9661
{
9662
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9663
GR_COMBINE_FACTOR_LOCAL,
9664
GR_COMBINE_LOCAL_CONSTANT,
9665
GR_COMBINE_OTHER_ITERATED);
9666
CA_ENV ();
9667
SETSHADE_A_PRIM ();
9668
}
9669
9670
static void ac__prim_sub_one_mul_primlod_add_t0__mul_env ()
9671
{
9672
if (cmb.combine_ext)
9673
{
9674
T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
9675
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
9676
GR_CMBX_DETAIL_FACTOR, 0,
9677
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9678
SETSHADE_A_PRIM ();
9679
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
9680
percent = (float)lod_frac / 255.0f;
9681
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9682
cmb.tex |= 1;
9683
}
9684
else
9685
{
9686
A_USE_T0 ();
9687
}
9688
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9689
GR_COMBINE_FACTOR_LOCAL,
9690
GR_COMBINE_LOCAL_CONSTANT,
9691
GR_COMBINE_OTHER_TEXTURE);
9692
CA_ENV ();
9693
}
9694
9695
static void ac_prim_mul_shade ()
9696
{
9697
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9698
GR_COMBINE_FACTOR_LOCAL,
9699
GR_COMBINE_LOCAL_CONSTANT,
9700
GR_COMBINE_OTHER_ITERATED);
9701
CA_PRIM ();
9702
}
9703
9704
static void ac_env_mul_shade ()
9705
{
9706
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9707
GR_COMBINE_FACTOR_LOCAL,
9708
GR_COMBINE_LOCAL_CONSTANT,
9709
GR_COMBINE_OTHER_ITERATED);
9710
CA_ENV ();
9711
}
9712
9713
static void ac_primlod_mul_shade ()
9714
{
9715
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9716
GR_COMBINE_FACTOR_LOCAL,
9717
GR_COMBINE_LOCAL_CONSTANT,
9718
GR_COMBINE_OTHER_ITERATED);
9719
CA_PRIMLOD ();
9720
}
9721
9722
// ** A-B **
9723
static void ac_prim_sub_t0 ()
9724
{
9725
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9726
GR_COMBINE_FACTOR_ONE,
9727
GR_COMBINE_LOCAL_NONE,
9728
GR_COMBINE_OTHER_TEXTURE);
9729
A_USE_T0 ();
9730
9731
MOD_0 (TMOD_FULL_COLOR_SUB_TEX);
9732
MOD_0_COL (rdp.prim_color);
9733
}
9734
9735
// ** A*B+C **
9736
static void ac_t0_mul_prim_add_t0 ()
9737
{
9738
if (cmb.combine_ext)
9739
{
9740
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9741
GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9742
GR_CMBX_CONSTANT_ALPHA, 0,
9743
GR_CMBX_B, 0);
9744
CA_PRIM ();
9745
A_USE_T0 ();
9746
}
9747
else
9748
ac_t0();
9749
}
9750
9751
static void ac_t1_mul_prim_add_t0 ()
9752
{
9753
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9754
GR_COMBINE_FACTOR_ONE,
9755
GR_COMBINE_LOCAL_NONE,
9756
GR_COMBINE_OTHER_TEXTURE);
9757
A_T1_MUL_PRIMA_ADD_T0 ();
9758
}
9759
9760
static void ac__t0_inter_t1_using_t1a__mul_prim_add__t0_inter_t1_using_t1a ()
9761
{
9762
if (cmb.combine_ext)
9763
{
9764
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9765
GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9766
GR_CMBX_CONSTANT_ALPHA, 0,
9767
GR_CMBX_B, 0);
9768
CA_PRIM ();
9769
}
9770
else
9771
{
9772
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9773
GR_COMBINE_FACTOR_LOCAL,
9774
GR_COMBINE_LOCAL_CONSTANT,
9775
GR_COMBINE_OTHER_TEXTURE);
9776
CA_PRIM ();
9777
}
9778
A_T0_INTER_T1_USING_T1A ();
9779
}
9780
9781
static void ac__t1_inter_t0_using_t0a__mul_prim_add__t1_inter_t0_using_t0a ()
9782
{
9783
if (cmb.combine_ext)
9784
{
9785
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9786
GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9787
GR_CMBX_CONSTANT_ALPHA, 0,
9788
GR_CMBX_B, 0);
9789
CA_PRIM ();
9790
}
9791
else
9792
{
9793
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9794
GR_COMBINE_FACTOR_LOCAL,
9795
GR_COMBINE_LOCAL_CONSTANT,
9796
GR_COMBINE_OTHER_TEXTURE);
9797
CA_PRIM ();
9798
}
9799
A_T1_INTER_T0_USING_T0A ();
9800
}
9801
9802
//Added by Gonetz
9803
static void ac_t0_mul_prim_add_env ()
9804
{
9805
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9806
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9807
GR_COMBINE_LOCAL_CONSTANT,
9808
GR_COMBINE_OTHER_ITERATED);
9809
SETSHADE_A_PRIM ();
9810
CA_ENV ();
9811
A_USE_T0 ();
9812
}
9813
9814
//Added by Gonetz
9815
static void ac__t0_add_t1__mul_prim_add_env ()
9816
{
9817
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9818
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9819
GR_COMBINE_LOCAL_CONSTANT,
9820
GR_COMBINE_OTHER_ITERATED);
9821
SETSHADE_A_PRIM ();
9822
CA_ENV ();
9823
A_T0_ADD_T1 ();
9824
}
9825
9826
//Aded by Gonetz
9827
static void ac__t0_inter_t1_using_enva__mul_prim_add_env ()
9828
{
9829
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9830
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9831
GR_COMBINE_LOCAL_CONSTANT,
9832
GR_COMBINE_OTHER_ITERATED);
9833
SETSHADE_A_PRIM ();
9834
CA_ENV ();
9835
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
9836
A_T0_INTER_T1_USING_FACTOR (factor);
9837
}
9838
9839
//Aded by Gonetz
9840
static void ac_t0_mul_primlod_add_t0 ()
9841
{
9842
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9843
GR_COMBINE_FACTOR_ONE,
9844
GR_COMBINE_LOCAL_NONE,
9845
GR_COMBINE_OTHER_TEXTURE);
9846
if (cmb.combine_ext)
9847
{
9848
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
9849
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9850
GR_CMBX_DETAIL_FACTOR, 0,
9851
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
9852
cmb.tex |= 1;
9853
percent = (float)lod_frac / 255.0f;
9854
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9855
}
9856
else
9857
{
9858
A_USE_T0 ();
9859
}
9860
}
9861
9862
//Aded by Gonetz
9863
static void ac_t1_mul_primlod_add_t0 ()
9864
{
9865
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
9866
GR_COMBINE_FACTOR_ONE,
9867
GR_COMBINE_LOCAL_NONE,
9868
GR_COMBINE_OTHER_TEXTURE);
9869
A_T1_MUL_PRIMLOD_ADD_T0 ();
9870
}
9871
9872
//Aded by Gonetz
9873
static void ac_t0_mul_primlod_add_prim ()
9874
{
9875
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9876
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9877
GR_COMBINE_LOCAL_ITERATED,
9878
GR_COMBINE_OTHER_CONSTANT);
9879
CA_PRIMLOD ();
9880
SETSHADE_A_PRIM ();
9881
A_USE_T0 ();
9882
}
9883
9884
static void ac_t0_mul_primlod_add_env ()
9885
{
9886
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9887
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9888
GR_COMBINE_LOCAL_ITERATED,
9889
GR_COMBINE_OTHER_CONSTANT);
9890
CA_PRIMLOD ();
9891
SETSHADE_A_ENV ();
9892
A_USE_T0 ();
9893
}
9894
9895
//Aded by Gonetz
9896
static void ac__t0_add_t1__mul_primlod_add_prim ()
9897
{
9898
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9899
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9900
GR_COMBINE_LOCAL_ITERATED,
9901
GR_COMBINE_OTHER_CONSTANT);
9902
CA_PRIMLOD ();
9903
SETSHADE_A_PRIM ();
9904
A_T0_ADD_T1 ();
9905
}
9906
9907
//Added by Gonetz
9908
static void ac_t0_mul_env_add_prim ()
9909
{
9910
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9911
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9912
GR_COMBINE_LOCAL_CONSTANT,
9913
GR_COMBINE_OTHER_ITERATED);
9914
SETSHADE_A_ENV ();
9915
CA_PRIM ();
9916
A_USE_T0 ();
9917
}
9918
9919
//Added by Gonetz
9920
static void ac_t1_mul_prim_add_prim ()
9921
{
9922
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9923
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9924
GR_COMBINE_LOCAL_CONSTANT,
9925
GR_COMBINE_OTHER_ITERATED);
9926
SETSHADE_A_PRIM ();
9927
CA_PRIM ();
9928
A_USE_T1 ();
9929
}
9930
9931
//Added by Gonetz
9932
static void ac_prim_mul_shade_add_shade ()
9933
{
9934
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9935
GR_COMBINE_FACTOR_LOCAL,
9936
GR_COMBINE_LOCAL_ITERATED,
9937
GR_COMBINE_OTHER_CONSTANT);
9938
CA_PRIM ();
9939
}
9940
9941
//Added by Gonetz
9942
static void ac_t0_mul_shade_add_prim ()
9943
{
9944
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9945
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9946
GR_COMBINE_LOCAL_CONSTANT,
9947
GR_COMBINE_OTHER_ITERATED);
9948
CA_PRIM ();
9949
A_USE_T0 ();
9950
}
9951
9952
static void ac_t0_mul_shade_add_env ()
9953
{
9954
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9955
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9956
GR_COMBINE_LOCAL_CONSTANT,
9957
GR_COMBINE_OTHER_ITERATED);
9958
CA_ENV ();
9959
A_USE_T0 ();
9960
}
9961
9962
static void ac_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade ()
9963
{
9964
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9965
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9966
GR_COMBINE_LOCAL_ITERATED,
9967
GR_COMBINE_OTHER_CONSTANT);
9968
CA_INVPRIM ();
9969
MULSHADE_A_PRIM ();
9970
A_T0_MUL_T1 ();
9971
}
9972
9973
// ** A*B+C*D **
9974
static void ac_t0_mul_prim_add_shade_mul_one_minus_prim ()
9975
{
9976
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
9977
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
9978
GR_COMBINE_LOCAL_ITERATED,
9979
GR_COMBINE_OTHER_CONSTANT);
9980
MULSHADE_A_1MPRIM ();
9981
CA_PRIM ();
9982
A_USE_T0 ();
9983
}
9984
9985
// ** (A*B+C)*D **
9986
static void ac__t0_mul_primlod_add_shade__mul_shade ()
9987
{
9988
if (cmb.combine_ext)
9989
{
9990
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9991
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
9992
GR_CMBX_DETAIL_FACTOR, 0,
9993
GR_CMBX_B, 0);
9994
cmb.tex |= 1;
9995
percent = (float)lod_frac / 255.0f;
9996
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
9997
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
9998
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
9999
GR_CMBX_ITALPHA, 0,
10000
GR_CMBX_ZERO, 0);
10001
}
10002
else
10003
{
10004
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10005
GR_COMBINE_FACTOR_LOCAL,
10006
GR_COMBINE_LOCAL_ITERATED,
10007
GR_COMBINE_OTHER_TEXTURE);
10008
A_USE_T0 ();
10009
}
10010
}
10011
10012
static void ac__t1_mul_primlod_add_shade__mul_shade ()
10013
{
10014
if (cmb.combine_ext)
10015
{
10016
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10017
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10018
GR_CMBX_ZERO, 0,
10019
GR_CMBX_B, 0);
10020
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10021
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10022
GR_CMBX_DETAIL_FACTOR, 0,
10023
GR_CMBX_B, 0);
10024
cmb.tex |= 2;
10025
percent = (float)lod_frac / 255.0f;
10026
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
10027
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10028
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
10029
GR_CMBX_ITALPHA, 0,
10030
GR_CMBX_ZERO, 0);
10031
}
10032
else
10033
{
10034
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10035
GR_COMBINE_FACTOR_LOCAL,
10036
GR_COMBINE_LOCAL_ITERATED,
10037
GR_COMBINE_OTHER_TEXTURE);
10038
A_USE_T1 ();
10039
}
10040
}
10041
10042
// ** ((A-B)*C+D)+E **
10043
static void ac__t0_sub_t1_mul_prim_add_shade__mul_shade ()
10044
//(t0-t1)*prim+shade, (cmb-0)*shade+0
10045
{
10046
if (cmb.combine_ext)
10047
{
10048
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10049
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10050
GR_CMBX_ZERO, 0,
10051
GR_CMBX_B, 0);
10052
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10053
GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10054
GR_CMBX_TMU_CALPHA, 0,
10055
GR_CMBX_ZERO, 0);
10056
cmb.tex |= 3;
10057
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10058
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10059
GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
10060
GR_CMBX_ITALPHA, 0,
10061
GR_CMBX_ZERO, 0);
10062
}
10063
else
10064
{
10065
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA,
10066
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10067
GR_COMBINE_LOCAL_ITERATED,
10068
GR_COMBINE_OTHER_CONSTANT);
10069
CA_PRIM ();
10070
A_T1_SUB_T0 ();
10071
}
10072
}
10073
10074
static void ac__t1_sub_t0_mul_prim_add_shade__mul_shade ()
10075
//(t1-t0)*prim+shade, (cmb-0)*shade+0
10076
{
10077
if (cmb.combine_ext)
10078
{
10079
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10080
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10081
GR_CMBX_ZERO, 0,
10082
GR_CMBX_B, 0);
10083
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10084
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10085
GR_CMBX_TMU_CALPHA, 0,
10086
GR_CMBX_ZERO, 0);
10087
cmb.tex |= 3;
10088
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10089
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10090
GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
10091
GR_CMBX_ITALPHA, 0,
10092
GR_CMBX_ZERO, 0);
10093
}
10094
else
10095
{
10096
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA,
10097
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10098
GR_COMBINE_LOCAL_ITERATED,
10099
GR_COMBINE_OTHER_CONSTANT);
10100
CA_PRIM ();
10101
A_T1_SUB_T0 ();
10102
}
10103
}
10104
10105
// ** A*B*C **
10106
static void ac__t0_mul_t1__mul_prim ()
10107
{
10108
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10109
GR_COMBINE_FACTOR_LOCAL,
10110
GR_COMBINE_LOCAL_CONSTANT,
10111
GR_COMBINE_OTHER_TEXTURE);
10112
CA_PRIM ();
10113
if (voodoo.sup_large_tex || rdp.tiles[1].lr_s < 256) //hack for RR64 pause screen
10114
{
10115
A_T0_MUL_T1 ();
10116
}
10117
else
10118
{
10119
A_USE_T0 ();
10120
}
10121
}
10122
10123
static void ac__t0_mul_t1__mul_env ()
10124
{
10125
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10126
GR_COMBINE_FACTOR_LOCAL,
10127
GR_COMBINE_LOCAL_CONSTANT,
10128
GR_COMBINE_OTHER_TEXTURE);
10129
CA_ENV ();
10130
A_T0_MUL_T1 ();
10131
}
10132
10133
static void ac__t0_mul_t1__mul_env_mul_shade ()
10134
{
10135
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10136
GR_COMBINE_FACTOR_LOCAL,
10137
GR_COMBINE_LOCAL_ITERATED,
10138
GR_COMBINE_OTHER_TEXTURE);
10139
MULSHADE_A_ENV ();
10140
A_T0_MUL_T1 ();
10141
}
10142
10143
static void ac__t0_mul_t1__mul_prim_mul_shade ()
10144
{
10145
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10146
GR_COMBINE_FACTOR_LOCAL,
10147
GR_COMBINE_LOCAL_ITERATED,
10148
GR_COMBINE_OTHER_TEXTURE);
10149
MULSHADE_A_PRIM ();
10150
A_T0_MUL_T1 ();
10151
}
10152
10153
static void ac__t0_mul_t1__mul_shade ()
10154
{
10155
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10156
GR_COMBINE_FACTOR_LOCAL,
10157
GR_COMBINE_LOCAL_ITERATED,
10158
GR_COMBINE_OTHER_TEXTURE);
10159
A_T0_MUL_T1 ();
10160
}
10161
10162
static void ac__t0_add_prim_mul_shade__mul_shade ()
10163
{
10164
// (shade-0)*prim+t0, (cmb-0)*shade+0
10165
if (cmb.combine_ext)
10166
{
10167
T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
10168
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10169
GR_CMBX_TMU_CALPHA, 0,
10170
GR_CMBX_B, 0);
10171
cmb.tex |= 1;
10172
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10173
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10174
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
10175
GR_CMBX_ITALPHA, 0,
10176
GR_CMBX_ZERO, 0);
10177
}
10178
else
10179
{
10180
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10181
GR_COMBINE_FACTOR_ONE,
10182
GR_COMBINE_LOCAL_ITERATED,
10183
GR_COMBINE_OTHER_TEXTURE);
10184
MULSHADE_A_PRIM ();
10185
A_USE_T0();
10186
}
10187
}
10188
10189
//Added by Gonetz
10190
static void ac_t0_mul_prim_mul_prim ()
10191
{
10192
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10193
GR_COMBINE_FACTOR_LOCAL,
10194
GR_COMBINE_LOCAL_ITERATED,
10195
GR_COMBINE_OTHER_TEXTURE);
10196
SETSHADE_A_PRIM ();
10197
SETSHADE_A_PRIM ();
10198
A_USE_T0 ();
10199
}
10200
10201
static void ac_t0_mul_prim_mul_env ()
10202
{
10203
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10204
GR_COMBINE_FACTOR_LOCAL,
10205
GR_COMBINE_LOCAL_CONSTANT,
10206
GR_COMBINE_OTHER_TEXTURE);
10207
CA_PRIMENV();
10208
A_USE_T0 ();
10209
}
10210
10211
static void ac_t0_mul_prim_mul_shade ()
10212
{
10213
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10214
GR_COMBINE_FACTOR_LOCAL,
10215
GR_COMBINE_LOCAL_ITERATED,
10216
GR_COMBINE_OTHER_TEXTURE);
10217
MULSHADE_A_PRIM ();
10218
A_USE_T0 ();
10219
}
10220
10221
static void ac_t1_mul_prim_mul_shade ()
10222
{
10223
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10224
GR_COMBINE_FACTOR_LOCAL,
10225
GR_COMBINE_LOCAL_ITERATED,
10226
GR_COMBINE_OTHER_TEXTURE);
10227
MULSHADE_A_PRIM ();
10228
A_USE_T1 ();
10229
}
10230
10231
static void ac_t0_mul_env_mul_shade ()
10232
{
10233
if (rdp.cur_image && (rdp.cur_image->format != 0))
10234
{
10235
ac_shade ();
10236
return;
10237
}
10238
10239
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10240
GR_COMBINE_FACTOR_LOCAL,
10241
GR_COMBINE_LOCAL_ITERATED,
10242
GR_COMBINE_OTHER_TEXTURE);
10243
MULSHADE_A_ENV ();
10244
A_USE_T0 ();
10245
}
10246
10247
static void ac_t1_mul_env_mul_shade ()
10248
{
10249
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10250
GR_COMBINE_FACTOR_LOCAL,
10251
GR_COMBINE_LOCAL_ITERATED,
10252
GR_COMBINE_OTHER_TEXTURE);
10253
MULSHADE_A_ENV ();
10254
A_USE_T1 ();
10255
}
10256
10257
static void ac_t0_mul_primlod_mul_prim () //Aded by Gonetz
10258
{
10259
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10260
GR_COMBINE_FACTOR_LOCAL,
10261
GR_COMBINE_LOCAL_CONSTANT,
10262
GR_COMBINE_OTHER_TEXTURE);
10263
cmb.ccolor |= (wxUint32)(lod_frac * (rdp.prim_color&0xFF) / 255);
10264
A_USE_T0 ();
10265
}
10266
10267
// ** (A+B)*C **
10268
static void ac_prim_add_env_mul_t0 () //Aded by Gonetz
10269
{
10270
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10271
GR_COMBINE_FACTOR_LOCAL,
10272
GR_COMBINE_LOCAL_ITERATED,
10273
GR_COMBINE_OTHER_TEXTURE);
10274
SETSHADE_A_PRIM ();
10275
ADDSHADE_A_ENV ();
10276
A_USE_T0 ();
10277
}
10278
10279
static void ac_t1_add_prim_mul_env () //Aded by Gonetz
10280
{
10281
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10282
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10283
GR_COMBINE_LOCAL_ITERATED,
10284
GR_COMBINE_OTHER_CONSTANT);
10285
CA_ENV ();
10286
SETSHADE_A_PRIM ();
10287
SETSHADE_A_ENV ();
10288
A_USE_T1 ();
10289
//(t1+prim)*env = t1*env + prim*env
10290
}
10291
10292
// ** (A-B)*C **
10293
static void ac_t0_sub_prim_mul_shade ()
10294
{
10295
if (cmb.combine_ext)
10296
{
10297
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10298
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
10299
GR_CMBX_ITALPHA, 0,
10300
GR_CMBX_ZERO, 0);
10301
cmb.tex |= 1;
10302
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10303
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10304
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10305
GR_CMBX_ZERO, 1,
10306
GR_CMBX_ZERO, 0);
10307
} else {
10308
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10309
GR_COMBINE_FACTOR_ONE,
10310
GR_COMBINE_LOCAL_ITERATED,
10311
GR_COMBINE_OTHER_TEXTURE);
10312
MULSHADE_A_PRIM ();
10313
A_USE_T0 ();
10314
}
10315
}
10316
10317
static void ac_t0_sub_prim_mul_shade_mul_env ()
10318
{
10319
if (cmb.combine_ext)
10320
{
10321
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10322
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
10323
GR_CMBX_ITALPHA, 0,
10324
GR_CMBX_ZERO, 0);
10325
cmb.tex |= 1;
10326
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10327
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10328
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10329
GR_CMBX_CONSTANT_ALPHA, 0,
10330
GR_CMBX_ZERO, 0);
10331
CA_ENV ();
10332
} else {
10333
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10334
GR_COMBINE_FACTOR_ONE,
10335
GR_COMBINE_LOCAL_ITERATED,
10336
GR_COMBINE_OTHER_TEXTURE);
10337
MULSHADE_A_PRIM ();
10338
MULSHADE_A_ENV ();
10339
A_USE_T0 ();
10340
}
10341
}
10342
10343
static void ac_t0_sub_shade_mul_prim ()
10344
{
10345
if (cmb.combine_ext)
10346
{
10347
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10348
GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
10349
GR_CMBX_TMU_CALPHA, 0,
10350
GR_CMBX_ZERO, 0);
10351
cmb.tex |= 1;
10352
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
10353
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10354
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10355
GR_CMBX_ZERO, 1,
10356
GR_CMBX_ZERO, 0);
10357
} else {
10358
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10359
GR_COMBINE_FACTOR_ONE,
10360
GR_COMBINE_LOCAL_ITERATED,
10361
GR_COMBINE_OTHER_TEXTURE);
10362
MULSHADE_A_PRIM ();
10363
A_USE_T0 ();
10364
}
10365
}
10366
10367
static void ac__t0_mul_t1__sub_prim_mul_shade () //Aded by Gonetz
10368
{
10369
if (cmb.combine_ext)
10370
{
10371
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10372
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10373
GR_CMBX_ITALPHA, 0,
10374
GR_CMBX_ZERO, 0);
10375
CA_PRIM();
10376
}
10377
else
10378
{
10379
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10380
GR_COMBINE_FACTOR_LOCAL,
10381
GR_COMBINE_LOCAL_ITERATED,
10382
GR_COMBINE_OTHER_TEXTURE);
10383
}
10384
A_T0_MUL_T1 ();
10385
}
10386
10387
static void ac__one_sub_t1_mul_t0_add_shade__sub_prim_mul_shade () //Aded by Gonetz
10388
{
10389
// (1-t1)*t0+shade, (cmb-prim)*shade+0
10390
if (cmb.combine_ext)
10391
{
10392
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10393
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10394
GR_CMBX_ZERO, 0,
10395
GR_CMBX_B, 0);
10396
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ONE_MINUS_X,
10397
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10398
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
10399
GR_CMBX_B, 0);
10400
cmb.tex |= 3;
10401
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10402
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10403
GR_CMBX_ITALPHA, 0,
10404
GR_CMBX_ZERO, 0);
10405
CA_PRIM();
10406
}
10407
else
10408
{
10409
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10410
GR_COMBINE_FACTOR_LOCAL,
10411
GR_COMBINE_LOCAL_ITERATED,
10412
GR_COMBINE_OTHER_TEXTURE);
10413
A_T0_MUL_T1 ();
10414
}
10415
}
10416
10417
static void ac__t1_mul_primlod_add_t0__sub_prim_mul_shade ()
10418
{
10419
if (cmb.combine_ext)
10420
{
10421
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10422
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10423
GR_CMBX_ITALPHA, 0,
10424
GR_CMBX_ZERO, 0);
10425
CA_PRIM ();
10426
}
10427
else
10428
{
10429
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10430
GR_COMBINE_FACTOR_LOCAL,
10431
GR_COMBINE_LOCAL_ITERATED,
10432
GR_COMBINE_OTHER_TEXTURE);
10433
}
10434
A_T1_MUL_PRIMLOD_ADD_T0 ();
10435
}
10436
10437
static void ac__t1_mul_primlod_add_t0__sub_env_mul_prim () //Aded by Gonetz
10438
{
10439
if (cmb.combine_ext)
10440
{
10441
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10442
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10443
GR_CMBX_ITALPHA, 0,
10444
GR_CMBX_ZERO, 0);
10445
CA_ENV ();
10446
SETSHADE_A_PRIM ();
10447
}
10448
else
10449
{
10450
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10451
GR_COMBINE_FACTOR_LOCAL,
10452
GR_COMBINE_LOCAL_CONSTANT,
10453
GR_COMBINE_OTHER_TEXTURE);
10454
CA_PRIM ();
10455
}
10456
A_T1_MUL_PRIMLOD_ADD_T0 ();
10457
}
10458
10459
static void ac__t1_mul_prima_add_t0__sub_env_mul_shade () //Aded by Gonetz
10460
{
10461
if (cmb.combine_ext)
10462
{
10463
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10464
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10465
GR_CMBX_ITALPHA, 0,
10466
GR_CMBX_ZERO, 0);
10467
CA_ENV ();
10468
}
10469
else
10470
{
10471
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10472
GR_COMBINE_FACTOR_LOCAL,
10473
GR_COMBINE_LOCAL_ITERATED,
10474
GR_COMBINE_OTHER_TEXTURE);
10475
}
10476
A_T1_MUL_PRIMA_ADD_T0 ();
10477
}
10478
10479
static void ac_one_sub_t0_mul_prim () //Aded by Gonetz
10480
{
10481
ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
10482
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10483
GR_COMBINE_LOCAL_CONSTANT,
10484
GR_COMBINE_OTHER_NONE);
10485
CA_PRIM ();
10486
A_USE_T0 ();
10487
}
10488
10489
static void ac_one_sub_t0_mul_shade () //Aded by Gonetz
10490
{
10491
if (rdp.aTBuffTex[0] || rdp.aTBuffTex[1])
10492
{
10493
ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
10494
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10495
GR_COMBINE_LOCAL_ITERATED,
10496
GR_COMBINE_OTHER_NONE);
10497
A_USE_T0 ();
10498
}
10499
else
10500
ac_zero();
10501
}
10502
10503
static void ac_one_sub_prim_mul_t0 () //Aded by Gonetz
10504
{
10505
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10506
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10507
GR_COMBINE_LOCAL_CONSTANT,
10508
GR_COMBINE_OTHER_TEXTURE);
10509
CA_PRIM ();
10510
A_USE_T0 ();
10511
}
10512
10513
static void ac_one_sub_env_mul_t0 () //Aded by Gonetz
10514
{
10515
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10516
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10517
GR_COMBINE_LOCAL_CONSTANT,
10518
GR_COMBINE_OTHER_TEXTURE);
10519
CA_ENV ();
10520
A_USE_T0 ();
10521
}
10522
10523
static void ac_one_sub_shade_mul_t0 () //Aded by Gonetz
10524
{
10525
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10526
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10527
GR_COMBINE_LOCAL_ITERATED,
10528
GR_COMBINE_OTHER_TEXTURE);
10529
A_USE_T0 ();
10530
}
10531
10532
static void ac_one_sub_shade_mul_env () //Aded by Gonetz
10533
{
10534
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10535
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
10536
GR_COMBINE_LOCAL_ITERATED,
10537
GR_COMBINE_OTHER_CONSTANT);
10538
CA_ENV ();
10539
}
10540
10541
static void ac_prim_sub_shade_mul_t0 () //Aded by Gonetz
10542
{
10543
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10544
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10545
GR_COMBINE_LOCAL_ITERATED,
10546
GR_COMBINE_OTHER_CONSTANT);
10547
CA_PRIM ();
10548
A_USE_T0 ();
10549
}
10550
10551
static void ac_prim_sub_shade_mul_prim () //Aded by Gonetz
10552
{
10553
if (cmb.combine_ext)
10554
{
10555
ACMBEXT(GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_X,
10556
GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
10557
GR_CMBX_CONSTANT_ALPHA, 0,
10558
GR_CMBX_ZERO, 0);
10559
CA_PRIM();
10560
}
10561
else
10562
{
10563
if (!(rdp.prim_color & 0xFF))
10564
{
10565
ac_zero();
10566
}
10567
else
10568
{
10569
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10570
GR_COMBINE_FACTOR_ONE,
10571
GR_COMBINE_LOCAL_ITERATED,
10572
GR_COMBINE_OTHER_CONSTANT);
10573
CA_PRIM();
10574
}
10575
}
10576
}
10577
10578
static void ac_shade_sub_env_mul_t0 () //Aded by Gonetz
10579
{
10580
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10581
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10582
GR_COMBINE_LOCAL_CONSTANT,
10583
GR_COMBINE_OTHER_ITERATED);
10584
CA_ENV ();
10585
A_USE_T0 ();
10586
}
10587
10588
// ** (A-B)*C*D **
10589
static void ac_one_sub_t0_mul_prim_mul_shade () //Aded by Gonetz
10590
{
10591
ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
10592
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10593
GR_COMBINE_LOCAL_ITERATED,
10594
GR_COMBINE_OTHER_NONE);
10595
MULSHADE_A_PRIM ();
10596
A_USE_T0 ();
10597
}
10598
10599
// ** (A+B)*C*D **
10600
static void ac_one_plus_env_mul_prim_mul_shade ()
10601
{
10602
if (cmb.combine_ext)
10603
{
10604
ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ONE_MINUS_X,
10605
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_X,
10606
GR_CMBX_ITALPHA, 0,
10607
GR_CMBX_ZERO, 0);
10608
MULSHADE_A_PRIM ();
10609
CA_ENV();
10610
}
10611
else
10612
ac_prim_mul_shade ();
10613
}
10614
10615
// ** (A-B)*C+A **
10616
static void ac__t0_mul_t1__sub_env_mul_prim_add__t0_mul_t1 () //Aded by Gonetz
10617
{
10618
if (cmb.combine_ext)
10619
{
10620
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10621
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10622
GR_CMBX_ITALPHA, 0,
10623
GR_CMBX_TEXTURE_ALPHA, 0);
10624
CA_ENV();
10625
SETSHADE_A_PRIM ();
10626
}
10627
else
10628
{
10629
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10630
GR_COMBINE_FACTOR_ONE,
10631
GR_COMBINE_LOCAL_NONE,
10632
GR_COMBINE_OTHER_TEXTURE);
10633
}
10634
A_T0_MUL_T1 ();
10635
}
10636
10637
// ** (A-B)*C+D **
10638
static void ac__t0_sub_prim_mul_shade_add_shade__mul_env () //Aded by Gonetz
10639
{
10640
if (cmb.combine_ext)
10641
{
10642
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10643
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
10644
GR_CMBX_ITALPHA, 0,
10645
GR_CMBX_ITALPHA, 0);
10646
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF) ;
10647
cmb.tex |= 1;
10648
ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
10649
GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10650
GR_CMBX_CONSTANT_ALPHA, 0,
10651
GR_CMBX_ZERO, 0);
10652
CA_ENV();
10653
}
10654
else
10655
{
10656
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10657
GR_COMBINE_FACTOR_LOCAL,
10658
GR_COMBINE_LOCAL_ITERATED,
10659
GR_COMBINE_OTHER_TEXTURE);
10660
MULSHADE_A_ENV ();
10661
MOD_0 (TMOD_TEX_SUB_COL);
10662
MOD_0_COL (rdp.prim_color & 0xFF);
10663
A_USE_T0 ();
10664
}
10665
}
10666
10667
static void ac_t0_sub_t1_mul_env_add_env () //Aded by Gonetz
10668
{
10669
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10670
GR_COMBINE_FACTOR_LOCAL,
10671
GR_COMBINE_LOCAL_CONSTANT,
10672
GR_COMBINE_OTHER_TEXTURE);
10673
CA_ENV();
10674
A_T0_SUB_T1 ();
10675
}
10676
10677
static void ac_t0_sub_one_mul_enva_add_t1 () //Aded by Gonetz
10678
{
10679
if (cmb.combine_ext)
10680
{
10681
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10682
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10683
GR_CMBX_ZERO, 0,
10684
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
10685
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10686
GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10687
GR_CMBX_TMU_CALPHA, 0,
10688
GR_CMBX_B, 0);
10689
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
10690
cmb.tex |= 3;
10691
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
10692
GR_COMBINE_FACTOR_ONE,
10693
GR_COMBINE_LOCAL_CONSTANT,
10694
GR_COMBINE_OTHER_TEXTURE);
10695
CA_ENV();
10696
}
10697
else
10698
{
10699
ac__t0_mul_t1__mul_env ();
10700
}
10701
}
10702
10703
static void ac_t1_sub_one_mul_enva_add_t0 () //Aded by Gonetz
10704
{
10705
if (cmb.combine_ext)
10706
{
10707
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10708
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10709
GR_CMBX_ZERO, 0,
10710
GR_CMBX_B, 0);
10711
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10712
GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
10713
GR_CMBX_TMU_CALPHA, 0,
10714
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
10715
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
10716
SETSHADE_A (0xFF);
10717
cmb.tex |= 3;
10718
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10719
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
10720
GR_CMBX_ZERO, 1,
10721
GR_CMBX_ZERO, 0);
10722
}
10723
else
10724
{
10725
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10726
GR_COMBINE_FACTOR_ONE,
10727
GR_COMBINE_LOCAL_NONE,
10728
GR_COMBINE_OTHER_TEXTURE);
10729
A_USE_T0 ();
10730
}
10731
}
10732
10733
static void ac_t1_sub_one_mul_primlod_add_t0 () //Aded by Gonetz
10734
{
10735
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10736
GR_COMBINE_FACTOR_ONE,
10737
GR_COMBINE_LOCAL_NONE,
10738
GR_COMBINE_OTHER_TEXTURE);
10739
if (cmb.combine_ext)
10740
{
10741
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10742
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10743
GR_CMBX_ZERO, 0,
10744
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
10745
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10746
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
10747
GR_CMBX_DETAIL_FACTOR, 0,
10748
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
10749
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
10750
percent = (float)lod_frac / 255.0f;
10751
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
10752
cmb.tex |= 3;
10753
}
10754
else
10755
{
10756
// A_T0_MUL_T1 ();
10757
// A_T1_MUL_PRIMLOD_ADD_T0 ();
10758
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
10759
cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
10760
percent = (255 - lod_frac) / 255.0f;
10761
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
10762
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
10763
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
10764
cmb.tex |= 3;
10765
}
10766
}
10767
10768
static void ac_t1_sub_prim_mul_shade_add_prim () //Aded by Gonetz
10769
{
10770
if (cmb.combine_ext)
10771
{
10772
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10773
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
10774
GR_CMBX_ITALPHA, 0,
10775
GR_CMBX_B, 0);
10776
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10777
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10778
GR_CMBX_ZERO, 1,
10779
GR_CMBX_ZERO, 0);
10780
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF) ;
10781
cmb.tex |= 2;
10782
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10783
GR_CMBX_ZERO, GR_FUNC_MODE_X,
10784
GR_CMBX_ZERO, 1,
10785
GR_CMBX_ZERO, 0);
10786
}
10787
else
10788
{
10789
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10790
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10791
GR_COMBINE_LOCAL_CONSTANT,
10792
GR_COMBINE_OTHER_ITERATED);
10793
CA_PRIM ();
10794
MOD_1 (TMOD_TEX_SUB_COL);
10795
MOD_1_COL (rdp.prim_color & 0xFF);
10796
A_USE_T1 ();
10797
}
10798
}
10799
10800
static void ac_t0_sub_env_mul_prim_add_env () //Aded by Gonetz
10801
{
10802
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10803
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10804
GR_COMBINE_LOCAL_CONSTANT,
10805
GR_COMBINE_OTHER_ITERATED);
10806
SETSHADE_A_PRIM ();
10807
CA_ENV1MPRIM ();
10808
A_USE_T0 ();
10809
//(t0-env)*prim+env == t0*prim + env*(1-prim)
10810
}
10811
10812
static void ac_t0_sub_env_mul_shadea_add_env () //Aded by Gonetz
10813
{
10814
if (!cmb.combine_ext)
10815
{
10816
ac_t0_mul_shade ();
10817
return;
10818
}
10819
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10820
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10821
GR_CMBX_ZERO, 1,
10822
GR_CMBX_ZERO, 0);
10823
cmb.tex |= 1;
10824
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10825
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
10826
GR_CMBX_ITALPHA, 0,
10827
GR_CMBX_B, 0);
10828
CA_ENV ();
10829
}
10830
10831
static void ac__one_sub_t0_mul_t1_add_t0__mul_prim () //Aded by Gonetz
10832
{
10833
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
10834
GR_COMBINE_FACTOR_LOCAL,
10835
GR_COMBINE_LOCAL_CONSTANT,
10836
GR_COMBINE_OTHER_TEXTURE);
10837
CA_PRIM ();
10838
rdp.best_tex = 0;
10839
cmb.tex |= 3;
10840
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL;
10841
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
10842
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA;
10843
}
10844
10845
static void ac_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz
10846
{
10847
ACMB (GR_COMBINE_FUNCTION_BLEND,
10848
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10849
GR_COMBINE_LOCAL_ITERATED,
10850
GR_COMBINE_OTHER_CONSTANT);
10851
SETSHADE_A_PRIM ();
10852
CA (0xFF);
10853
A_USE_T0 ();
10854
}
10855
10856
static void ac_one_sub_t0_mul_env_add_t0 () //Aded by Gonetz
10857
{
10858
ACMB (GR_COMBINE_FUNCTION_BLEND,
10859
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10860
GR_COMBINE_LOCAL_ITERATED,
10861
GR_COMBINE_OTHER_CONSTANT);
10862
SETSHADE_A_ENV ();
10863
CA (0xFF);
10864
A_USE_T0 ();
10865
}
10866
10867
static void ac_one_sub_t0_mul_primlod_add_prim () //Aded by Gonetz
10868
{
10869
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10870
GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA,
10871
GR_COMBINE_LOCAL_ITERATED,
10872
GR_COMBINE_OTHER_CONSTANT);
10873
SETSHADE_A_PRIM ();
10874
CA_PRIMLOD();
10875
A_USE_T0 ();
10876
}
10877
10878
static void ac_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz
10879
{
10880
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10881
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10882
GR_COMBINE_LOCAL_ITERATED,
10883
GR_COMBINE_OTHER_CONSTANT);
10884
CA_INVENV ();
10885
SETSHADE_A_PRIM ();
10886
SETSHADE_A_ENV ();
10887
A_USE_T0 ();
10888
//(prim-t0)*env+t0 = prim*env + t0*(1-env)
10889
}
10890
10891
static void ac_prim_sub_env_mul_t0_add_env ()
10892
{
10893
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
10894
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10895
GR_COMBINE_LOCAL_ITERATED,
10896
GR_COMBINE_OTHER_CONSTANT);
10897
CA_PRIM ();
10898
SETSHADE_A_ENV ();
10899
A_USE_T0 ();
10900
}
10901
10902
static void ac_prim_sub_env_mul_t1_add_env ()
10903
{
10904
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
10905
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10906
GR_COMBINE_LOCAL_ITERATED,
10907
GR_COMBINE_OTHER_CONSTANT);
10908
CA_PRIM ();
10909
SETSHADE_A_ENV ();
10910
A_USE_T1 ();
10911
}
10912
10913
static void ac_prim_sub_env_mul_t0_add_one ()
10914
{
10915
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10916
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10917
GR_COMBINE_LOCAL_CONSTANT,
10918
GR_COMBINE_OTHER_ITERATED);
10919
CA (0xFF);
10920
SETSHADE_A_PRIMSUBENV ();
10921
A_USE_T0 ();
10922
}
10923
10924
//Added by Gonetz
10925
static void ac_prim_sub_env_mul_shade_add_env ()
10926
{
10927
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10928
GR_COMBINE_FACTOR_ONE,
10929
GR_COMBINE_LOCAL_CONSTANT,
10930
GR_COMBINE_OTHER_ITERATED);
10931
CA_ENV ();
10932
MULSHADE_A_PRIMSUBENV ();
10933
}
10934
10935
//Added by Gonetz
10936
static void ac_prim_sub_env_mul_shade_add_env_mul_t1 ()
10937
{
10938
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10939
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10940
GR_COMBINE_LOCAL_CONSTANT,
10941
GR_COMBINE_OTHER_ITERATED);
10942
CA_ENV ();
10943
MULSHADE_A_PRIMSUBENV ();
10944
A_USE_T1 ();
10945
}
10946
10947
//Added by Gonetz
10948
static void ac_prim_sub_shade_mul_t0_add_shade ()
10949
{
10950
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
10951
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10952
GR_COMBINE_LOCAL_ITERATED,
10953
GR_COMBINE_OTHER_CONSTANT);
10954
CA_PRIM ();
10955
A_USE_T0 ();
10956
}
10957
10958
//Added by Gonetz
10959
static void ac_one_sub_shade_mul_t1_add_shade ()
10960
{
10961
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10962
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
10963
GR_COMBINE_LOCAL_ITERATED,
10964
GR_COMBINE_OTHER_TEXTURE);
10965
A_USE_T1 ();
10966
}
10967
10968
//Added by Gonetz
10969
static void ac_one_sub_env_mul_shade_add_env ()
10970
{
10971
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
10972
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
10973
GR_COMBINE_LOCAL_CONSTANT,
10974
GR_COMBINE_OTHER_ITERATED);
10975
CA_ENV ();
10976
}
10977
10978
//Added by Gonetz
10979
static void ac_env_sub_prim_mul_t0_add_prim ()
10980
{
10981
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
10982
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
10983
GR_COMBINE_LOCAL_ITERATED,
10984
GR_COMBINE_OTHER_CONSTANT);
10985
CA_ENV ();
10986
SETSHADE_A_PRIM ();
10987
A_USE_T0 ();
10988
}
10989
10990
static void ac_one_sub_t1_add_t0_mul_env ()
10991
{
10992
if (cmb.combine_ext)
10993
{
10994
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10995
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
10996
GR_CMBX_ZERO, 0,
10997
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
10998
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
10999
GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11000
GR_CMBX_TMU_CALPHA, 0,
11001
GR_CMBX_B, 1);
11002
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF);
11003
cmb.tex |= 3;
11004
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11005
GR_COMBINE_FACTOR_ONE,
11006
GR_COMBINE_LOCAL_NONE,
11007
GR_COMBINE_OTHER_TEXTURE);
11008
}
11009
else
11010
{
11011
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11012
GR_COMBINE_FACTOR_LOCAL,
11013
GR_COMBINE_LOCAL_CONSTANT,
11014
GR_COMBINE_OTHER_TEXTURE);
11015
CA_ENV ();
11016
A_T0_ADD_T1();
11017
cmb.tmu1_a_invert = FXTRUE;
11018
}
11019
}
11020
11021
static void ac_env_sub_prim_mul_shade_add_prim () //Added by Gonetz
11022
{
11023
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
11024
GR_COMBINE_FACTOR_ONE,
11025
GR_COMBINE_LOCAL_CONSTANT,
11026
GR_COMBINE_OTHER_ITERATED);
11027
CA_PRIM ();
11028
MULSHADE_A_ENVSUBPRIM ();
11029
}
11030
11031
static void ac_env_sub_primshade_mul_t1_add_primshade ()
11032
{
11033
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
11034
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11035
GR_COMBINE_LOCAL_ITERATED,
11036
GR_COMBINE_OTHER_CONSTANT);
11037
CA_ENV ();
11038
MULSHADE_A_PRIM ();
11039
A_USE_T1 ();
11040
}
11041
11042
static void ac_one_sub_prim_mul_t0_add_prim ()
11043
{
11044
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
11045
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11046
GR_COMBINE_LOCAL_ITERATED,
11047
GR_COMBINE_OTHER_CONSTANT);
11048
CA (0xFF);
11049
SETSHADE_A_PRIM ();
11050
A_USE_T0 ();
11051
}
11052
11053
static void ac_one_sub_prim_mul_t0_add__prim_mul_env ()
11054
{
11055
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
11056
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11057
GR_COMBINE_LOCAL_ITERATED,
11058
GR_COMBINE_OTHER_CONSTANT);
11059
CA_INVPRIM ();
11060
SETSHADE_A_PRIM ();
11061
SETSHADE_A_ENV ();
11062
A_USE_T0 ();
11063
}
11064
11065
static void ac_shade_sub_t0_mul_primlod_add_prim ()
11066
{
11067
if (cmb.combine_ext)
11068
{
11069
T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
11070
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
11071
GR_CMBX_TMU_CALPHA, 0,
11072
GR_CMBX_ZERO, 0);
11073
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (lod_frac&0xFF);
11074
cmb.tex |= 1;
11075
ACMBEXT(GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_X,
11076
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11077
GR_CMBX_ZERO, 1,
11078
GR_CMBX_TEXTURE_ALPHA, 0);
11079
CA_PRIM ();
11080
}
11081
else
11082
ac_t0();
11083
}
11084
11085
static void ac_shade_sub_env_mul_t0_add_prim ()
11086
{
11087
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
11088
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11089
GR_COMBINE_LOCAL_CONSTANT,
11090
GR_COMBINE_OTHER_ITERATED);
11091
SUBSHADE_A_ENV ();
11092
CA_PRIM ();
11093
A_USE_T0 ();
11094
}
11095
11096
// ** A inter B using C **
11097
static void ac_t0_inter_t1_using_prima ()
11098
{
11099
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11100
GR_COMBINE_FACTOR_ONE,
11101
GR_COMBINE_LOCAL_NONE,
11102
GR_COMBINE_OTHER_TEXTURE);
11103
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11104
A_T0_INTER_T1_USING_FACTOR (factor);
11105
}
11106
11107
static void ac_t1_inter_t0_using_prima ()
11108
{
11109
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11110
GR_COMBINE_FACTOR_ONE,
11111
GR_COMBINE_LOCAL_NONE,
11112
GR_COMBINE_OTHER_TEXTURE);
11113
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11114
A_T1_INTER_T0_USING_FACTOR (factor);
11115
}
11116
11117
static void ac_t0_inter_t1_using_primlod ()
11118
{
11119
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11120
GR_COMBINE_FACTOR_ONE,
11121
GR_COMBINE_LOCAL_NONE,
11122
GR_COMBINE_OTHER_TEXTURE);
11123
A_T0_INTER_T1_USING_FACTOR (lod_frac);
11124
}
11125
11126
static void ac_t0_inter_t1_using_enva ()
11127
{
11128
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11129
GR_COMBINE_FACTOR_ONE,
11130
GR_COMBINE_LOCAL_NONE,
11131
GR_COMBINE_OTHER_TEXTURE);
11132
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11133
A_T0_INTER_T1_USING_FACTOR (factor);
11134
}
11135
11136
static void ac_t1_inter_t0_using_enva ()
11137
{
11138
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11139
GR_COMBINE_FACTOR_ONE,
11140
GR_COMBINE_LOCAL_NONE,
11141
GR_COMBINE_OTHER_TEXTURE);
11142
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11143
A_T1_INTER_T0_USING_FACTOR (factor);
11144
}
11145
11146
//Added by Gonetz
11147
static void ac_t0_inter_t1_using_t0a ()
11148
{
11149
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11150
GR_COMBINE_FACTOR_ONE,
11151
GR_COMBINE_LOCAL_NONE,
11152
GR_COMBINE_OTHER_TEXTURE);
11153
A_T0_INTER_T1_USING_T0A ();
11154
}
11155
11156
//Added by Gonetz
11157
static void ac_t0_inter_t1_using_t1a ()
11158
{
11159
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11160
GR_COMBINE_FACTOR_ONE,
11161
GR_COMBINE_LOCAL_NONE,
11162
GR_COMBINE_OTHER_TEXTURE);
11163
A_T0_INTER_T1_USING_T1A ();
11164
}
11165
11166
//Added by Gonetz
11167
static void ac_t0_inter_t1_using_shadea ()
11168
{
11169
if (cmb.combine_ext)
11170
{
11171
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11172
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11173
GR_CMBX_ZERO, 1,
11174
GR_CMBX_ZERO, 0);
11175
}
11176
else
11177
{
11178
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11179
GR_COMBINE_FACTOR_ONE,
11180
GR_COMBINE_LOCAL_NONE,
11181
GR_COMBINE_OTHER_TEXTURE);
11182
}
11183
A_T0_INTER_T1_USING_SHADEA ();
11184
}
11185
11186
// ** (A inter B using C) * D **
11187
11188
static void ac__t0_inter_t1_using_primlod__mul_prim ()
11189
{
11190
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11191
GR_COMBINE_FACTOR_LOCAL,
11192
GR_COMBINE_LOCAL_CONSTANT,
11193
GR_COMBINE_OTHER_TEXTURE);
11194
CA_PRIM ();
11195
A_T0_INTER_T1_USING_FACTOR (lod_frac);
11196
}
11197
11198
static void ac__t1_mul_primlod_add_t0__mul_prim ()
11199
{
11200
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11201
GR_COMBINE_FACTOR_LOCAL,
11202
GR_COMBINE_LOCAL_CONSTANT,
11203
GR_COMBINE_OTHER_TEXTURE);
11204
CA_PRIM ();
11205
A_T1_MUL_PRIMLOD_ADD_T0 ();
11206
}
11207
11208
static void ac__t0_inter_t1_using_primlod__mul_env ()
11209
{
11210
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11211
GR_COMBINE_FACTOR_LOCAL,
11212
GR_COMBINE_LOCAL_CONSTANT,
11213
GR_COMBINE_OTHER_TEXTURE);
11214
CA_ENV ();
11215
A_T0_INTER_T1_USING_FACTOR (lod_frac);
11216
}
11217
11218
static void ac__t1_mul_primlod_add_t0__mul_env ()
11219
{
11220
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11221
GR_COMBINE_FACTOR_LOCAL,
11222
GR_COMBINE_LOCAL_CONSTANT,
11223
GR_COMBINE_OTHER_TEXTURE);
11224
CA_ENV ();
11225
A_T1_MUL_PRIMLOD_ADD_T0 ();
11226
}
11227
11228
static void ac__t0_inter_t1_using_primlod__mul_shade ()
11229
{
11230
if (settings.hacks & hack_Makers)
11231
{
11232
//rolling rock issue - it has zero shade alpha and thus rejected by alpha compare
11233
ac_t0_inter_t1_using_primlod();
11234
return;
11235
}
11236
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11237
GR_COMBINE_FACTOR_LOCAL,
11238
GR_COMBINE_LOCAL_ITERATED,
11239
GR_COMBINE_OTHER_TEXTURE);
11240
A_T0_INTER_T1_USING_FACTOR (lod_frac);
11241
}
11242
11243
static void ac__t1_mul_primlod_add_t0__mul_shade ()
11244
{
11245
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11246
GR_COMBINE_FACTOR_LOCAL,
11247
GR_COMBINE_LOCAL_ITERATED,
11248
GR_COMBINE_OTHER_TEXTURE);
11249
A_T1_MUL_PRIMLOD_ADD_T0 ();
11250
}
11251
11252
//Added by Gonetz
11253
static void ac__t0_inter_t1_using_prima__mul_env ()
11254
{
11255
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11256
GR_COMBINE_FACTOR_LOCAL,
11257
GR_COMBINE_LOCAL_CONSTANT,
11258
GR_COMBINE_OTHER_TEXTURE);
11259
CA_ENV ();
11260
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11261
A_T0_INTER_T1_USING_FACTOR (factor);
11262
}
11263
11264
//Added by Gonetz
11265
static void ac__t1_inter_t0_using_t0a__mul_prim ()
11266
{
11267
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11268
GR_COMBINE_FACTOR_LOCAL,
11269
GR_COMBINE_LOCAL_CONSTANT,
11270
GR_COMBINE_OTHER_TEXTURE);
11271
CA_PRIM ();
11272
A_T1_INTER_T0_USING_T0A ();
11273
}
11274
11275
static void ac__t1_inter_t0_using_primlod__mul_prim ()
11276
{
11277
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11278
GR_COMBINE_FACTOR_LOCAL,
11279
GR_COMBINE_LOCAL_CONSTANT,
11280
GR_COMBINE_OTHER_TEXTURE);
11281
CA_PRIM ();
11282
A_T0_INTER_T1_USING_FACTOR (lod_frac);
11283
}
11284
11285
static void ac__t1_inter_t0_using_prima__mul_env ()
11286
{
11287
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11288
GR_COMBINE_FACTOR_LOCAL,
11289
GR_COMBINE_LOCAL_CONSTANT,
11290
GR_COMBINE_OTHER_TEXTURE);
11291
CA_ENV ();
11292
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11293
A_T1_INTER_T0_USING_FACTOR (factor);
11294
}
11295
11296
//Added by Gonetz
11297
static void ac__t0_inter_t1_using_prima__mul_shade ()
11298
{
11299
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11300
GR_COMBINE_FACTOR_LOCAL,
11301
GR_COMBINE_LOCAL_ITERATED,
11302
GR_COMBINE_OTHER_TEXTURE);
11303
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11304
A_T0_INTER_T1_USING_FACTOR (factor);
11305
}
11306
11307
static void ac__t1_inter_t0_using_prima__mul_shade ()
11308
{
11309
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11310
GR_COMBINE_FACTOR_LOCAL,
11311
GR_COMBINE_LOCAL_ITERATED,
11312
GR_COMBINE_OTHER_TEXTURE);
11313
wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);
11314
A_T1_INTER_T0_USING_FACTOR (factor);
11315
}
11316
11317
static void ac__t0_inter_t1_using_enva__mul_prim ()
11318
{
11319
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11320
GR_COMBINE_FACTOR_LOCAL,
11321
GR_COMBINE_LOCAL_CONSTANT,
11322
GR_COMBINE_OTHER_TEXTURE);
11323
CA_PRIM ();
11324
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11325
A_T0_INTER_T1_USING_FACTOR (factor);
11326
}
11327
11328
static void ac__env_sub_one_mul_t1_add_t0__mul_prim ()
11329
{
11330
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11331
GR_COMBINE_FACTOR_LOCAL,
11332
GR_COMBINE_LOCAL_CONSTANT,
11333
GR_COMBINE_OTHER_TEXTURE);
11334
CA_PRIM ();
11335
if (cmb.combine_ext)
11336
{
11337
T1ACMBEXT(GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_X,
11338
GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
11339
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
11340
GR_CMBX_ZERO, 0);
11341
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11342
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11343
GR_CMBX_ZERO, 1,
11344
GR_CMBX_ZERO, 0);
11345
SETSHADE_A(0xFF);
11346
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
11347
cmb.tex |= 3;
11348
}
11349
else
11350
{
11351
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11352
A_T0_INTER_T1_USING_FACTOR (factor);
11353
}
11354
}
11355
11356
static void ac__t0_inter_t1_using_enva__mul_primlod ()
11357
{
11358
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11359
GR_COMBINE_FACTOR_LOCAL,
11360
GR_COMBINE_LOCAL_CONSTANT,
11361
GR_COMBINE_OTHER_TEXTURE);
11362
CA_PRIMLOD ();
11363
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11364
A_T0_INTER_T1_USING_FACTOR (factor);
11365
}
11366
11367
static void ac__t1_mul_enva_add_t0__sub_prim_mul_shade ()
11368
{
11369
if (cmb.combine_ext)
11370
{
11371
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11372
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
11373
GR_CMBX_ITALPHA, 0,
11374
GR_CMBX_ZERO, 0);
11375
CA_PRIM ();
11376
}
11377
else
11378
{
11379
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
11380
GR_COMBINE_FACTOR_LOCAL,
11381
GR_COMBINE_LOCAL_ITERATED,
11382
GR_COMBINE_OTHER_TEXTURE);
11383
MULSHADE_A_PRIM ();
11384
}
11385
A_T1_MUL_ENVA_ADD_T0 ();
11386
}
11387
11388
//Added by Gonetz
11389
static void ac__t0_inter_t1_using_t0a__mul_prim ()
11390
{
11391
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11392
GR_COMBINE_FACTOR_LOCAL,
11393
GR_COMBINE_LOCAL_CONSTANT,
11394
GR_COMBINE_OTHER_TEXTURE);
11395
CA_PRIM ();
11396
A_T0_INTER_T1_USING_T0A ();
11397
}
11398
11399
//Added by Gonetz
11400
static void ac__t0_inter_t1_using_t1a__mul_prim ()
11401
{
11402
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11403
GR_COMBINE_FACTOR_LOCAL,
11404
GR_COMBINE_LOCAL_CONSTANT,
11405
GR_COMBINE_OTHER_TEXTURE);
11406
CA_PRIM ();
11407
A_T0_INTER_T1_USING_T1A ();
11408
}
11409
11410
static void ac__t0_inter_t1_using_t1a__mul_shade ()
11411
{
11412
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11413
GR_COMBINE_FACTOR_LOCAL,
11414
GR_COMBINE_LOCAL_ITERATED,
11415
GR_COMBINE_OTHER_TEXTURE);
11416
A_T0_INTER_T1_USING_T1A ();
11417
}
11418
11419
//Added by Gonetz
11420
static void ac__t0_inter_t1_using_shadea__mul_prim ()
11421
{
11422
if (cmb.combine_ext)
11423
{
11424
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11425
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11426
GR_CMBX_CONSTANT_ALPHA, 0,
11427
GR_CMBX_ZERO, 0);
11428
A_T0_INTER_T1_USING_SHADEA ();
11429
}
11430
else
11431
{
11432
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11433
GR_COMBINE_FACTOR_LOCAL,
11434
GR_COMBINE_LOCAL_CONSTANT,
11435
GR_COMBINE_OTHER_TEXTURE);
11436
A_T0_INTER_T1_USING_FACTOR (0x7F);
11437
}
11438
CA_PRIM ();
11439
}
11440
11441
//Added by Gonetz
11442
static void ac__t0_inter_t1_using_shadea__mul_env ()
11443
{
11444
if (cmb.combine_ext)
11445
{
11446
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11447
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
11448
GR_CMBX_CONSTANT_ALPHA, 0,
11449
GR_CMBX_ZERO, 0);
11450
A_T0_INTER_T1_USING_SHADEA ();
11451
}
11452
else
11453
{
11454
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11455
GR_COMBINE_FACTOR_LOCAL,
11456
GR_COMBINE_LOCAL_CONSTANT,
11457
GR_COMBINE_OTHER_TEXTURE);
11458
A_T0_INTER_T1_USING_FACTOR (0x7F);
11459
}
11460
CA_ENV ();
11461
}
11462
11463
static void ac__t0_inter_t1_using_primlod__sub_env_mul_shade_add_shade ()
11464
{
11465
if (cmb.combine_ext)
11466
{
11467
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11468
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
11469
GR_CMBX_ITALPHA, 0,
11470
GR_CMBX_ALOCAL, 0);
11471
CA_ENV ();
11472
A_T0_INTER_T1_USING_FACTOR (lod_frac);
11473
}
11474
else
11475
ac__t0_inter_t1_using_primlod__mul_shade ();
11476
}
11477
11478
//Added by Gonetz
11479
static void ac__t0_inter_t1_using_enva__mul_shade ()
11480
{
11481
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11482
GR_COMBINE_FACTOR_LOCAL,
11483
GR_COMBINE_LOCAL_ITERATED,
11484
GR_COMBINE_OTHER_TEXTURE);
11485
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11486
A_T0_INTER_T1_USING_FACTOR (factor);
11487
}
11488
11489
static void ac__t0_inter_t1_using_primlod__mul_prim_add_env ()
11490
{
11491
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
11492
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11493
GR_COMBINE_LOCAL_CONSTANT,
11494
GR_COMBINE_OTHER_ITERATED);
11495
CA_ENV ();
11496
SETSHADE_A_PRIM ();
11497
A_T0_INTER_T1_USING_FACTOR (lod_frac);
11498
}
11499
11500
//Added by Gonetz
11501
static void ac__t0_inter_t1_using_primlod__mul_shade_add_prim ()
11502
{
11503
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
11504
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11505
GR_COMBINE_LOCAL_CONSTANT,
11506
GR_COMBINE_OTHER_ITERATED);
11507
CA_PRIM ();
11508
A_T0_INTER_T1_USING_FACTOR (lod_frac);
11509
}
11510
11511
//Added by Gonetz
11512
static void ac__t0_inter_t1_using_primlod__mul_env_add__t0_inter_t1_using_primlod ()
11513
{
11514
if (cmb.combine_ext)
11515
{
11516
ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
11517
GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11518
GR_CMBX_CONSTANT_ALPHA, 0,
11519
GR_CMBX_B, 0);
11520
CA_ENV ();
11521
}
11522
else
11523
{
11524
ACMB (GR_COMBINE_FUNCTION_BLEND,
11525
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11526
GR_COMBINE_LOCAL_CONSTANT,
11527
GR_COMBINE_OTHER_ITERATED);
11528
SETSHADE_A_ENV ();
11529
CA (0xFF);
11530
}
11531
A_T0_INTER_T1_USING_FACTOR (lod_frac);
11532
}
11533
11534
static void ac__t1_sub_one_mul_enva_add_t0__mul_prim ()
11535
{
11536
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11537
GR_COMBINE_FACTOR_LOCAL,
11538
GR_COMBINE_LOCAL_CONSTANT,
11539
GR_COMBINE_OTHER_TEXTURE);
11540
CA_PRIM ();
11541
if (cmb.combine_ext)
11542
{
11543
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11544
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11545
GR_CMBX_ZERO, 0,
11546
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
11547
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11548
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
11549
GR_CMBX_DETAIL_FACTOR, 0,
11550
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
11551
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
11552
cmb.tex |= 3;
11553
cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;
11554
}
11555
else
11556
{
11557
// (t1-1)*env+t0, (cmb-0)*prim+0
11558
A_T0_MUL_T1 ();
11559
11560
MOD_1 (TMOD_TEX_SCALE_FAC_ADD_FAC);
11561
MOD_1_FAC (rdp.env_color & 0xFF);
11562
}
11563
}
11564
11565
static void ac__one_inter_t0_using_prim__mul_env ()
11566
{
11567
if (cmb.combine_ext)
11568
{
11569
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11570
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
11571
GR_CMBX_DETAIL_FACTOR, 0,
11572
GR_CMBX_B, 0);
11573
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
11574
cmb.tex |= 1;
11575
cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.prim_color&0xFF) / 255.0f;
11576
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11577
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_ZERO,
11578
GR_CMBX_CONSTANT_ALPHA, 0,
11579
GR_CMBX_ZERO, 0);
11580
CA_ENV ();
11581
}
11582
else
11583
{
11584
ac_t0_mul_prim_add_env ();
11585
}
11586
}
11587
11588
static void ac__t1_sub_one_mul_enva_add_t0__mul_shade ()
11589
{
11590
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
11591
GR_COMBINE_FACTOR_LOCAL,
11592
GR_COMBINE_LOCAL_ITERATED,
11593
GR_COMBINE_OTHER_TEXTURE);
11594
CA_PRIM ();
11595
if (cmb.combine_ext)
11596
{
11597
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11598
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
11599
GR_CMBX_ZERO, 0,
11600
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
11601
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
11602
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
11603
GR_CMBX_DETAIL_FACTOR, 0,
11604
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
11605
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | 0xFF ;
11606
percent = (rdp.env_color&0xFF) / 255.0f;
11607
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
11608
cmb.tex |= 3;
11609
}
11610
else
11611
{
11612
wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);
11613
A_T0_INTER_T1_USING_FACTOR (factor);
11614
}
11615
}
11616
11617
static void ac_zero_sub_prim_mul_t0_add_prim ()
11618
{
11619
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
11620
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11621
GR_COMBINE_LOCAL_CONSTANT,
11622
GR_COMBINE_OTHER_ITERATED);
11623
SETSHADE_A (0);
11624
CA_PRIM ();
11625
A_USE_T0 ();
11626
}
11627
11628
static void ac_one_sub_t0_mul_primshade ()
11629
{
11630
ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
11631
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
11632
GR_COMBINE_LOCAL_ITERATED,
11633
GR_COMBINE_OTHER_NONE);
11634
MULSHADE_A_PRIM ();
11635
A_USE_T0 ();
11636
}
11637
11638
//****************************************************************
11639
// Combine List
11640
//
11641
// 3/13/02: I have converted the combine descriptions, now using
11642
// the correct values for each slot, instead of a one-for-all-
11643
// slot version. All of the descriptions marked with 'z' have
11644
// not yet been converted or checked. I have not totally redone
11645
// the modes, because they should be for the most part correct
11646
// as they are, even with the wrong descriptions. [Dave2001]
11647
//****************************************************************
11648
11649
typedef void (*cmb_func)();
11650
typedef struct {
11651
wxUint32 key;
11652
cmb_func func;
11653
} COMBINER;
11654
11655
static COMBINER color_cmb_list[] = {
11656
// { #CCSTART }
11657
// intro, Aidyn Chronicles. Added by Gonetz
11658
// (0-cmb)*env+cmb, (t1-t0)*0+t0
11659
{0x05083812, cc_t0},
11660
//terminal, Spacestation Silicon Valley. Added by Gonetz
11661
// (0-0)*0+cmb, (0-0)*0+prim
11662
{0x1fff7fff, cc_prim},
11663
//chip in Spacestation Silicon Valley intro. Added by Gonetz
11664
// (0-0)*0+cmb, (prim-0)*shade+0
11665
{0x1fffe4f3, cc_prim_mul_shade},
11666
// car, beetle adventure racing. Added by Gonetz
11667
// (t1-t0)*t0+t0, (cmb-shade)*prima+shade **can work incorrect**
11668
{0x21128a40, cc__t0_inter_t1_using_t0__sub_shade_mul_prima_add_shade},
11669
// Treasure opening, zelda
11670
// (t1-prim)*t0+t0, (prim-env)*cmb+env
11671
{0x2132a053, cc_prim_sub_env_mul__t1_sub_prim_mul_t0_add_t0__add_env},
11672
// yellow carpet, Pokemon Stadium 2
11673
// (t1-env)*t0+t0, (cmb-0)*shade+0
11674
{0x2152e4f0, cc__t1_sub_env_mul_t0_add_t0__mul_shade},
11675
// Water, doubut no mori
11676
// (t1-0)*t0+t0, (prim-0)*shade+cmb
11677
{0x21f204f3, cc__t1_mul_t0_add_t0__add_prim_mul_shade},
11678
// enemy transparent, paper mario. Addd by Gonetz
11679
// (t1-t0)*t1+t0, (env-prim)*cmb+prim
11680
{0x22126035, cc_env_sub_prim_mul__t0_inter_t1_using_t1__add_prim},
11681
// snowhead temple, zelda 2. Addd by Gonetz
11682
// (t1-t0)*t1+t0, (cmb-0)*shade+prim
11683
{0x221264f0, cc__t0_inter_t1_using_t1__mul_shade_add_prim},
11684
// snowhead temple entrance, zelda 2. Addd by Gonetz
11685
// (t1-t0)*t1+t0, (cmb-0)*prim+shade
11686
{0x221283f0, cc__t0_inter_t1_using_t1__mul_prim_add_shade},
11687
// teleportation, Spacestation Silicon Valley. Added by Gonetz
11688
// (t1-t0)*t1+t0, (prim-env)*cmb+env
11689
{0x2212a053, cc_prim_sub_env_mul__t0_inter_t1_using_t1__add_env},
11690
// pokemon fainted, Pokemon Stadium 2
11691
// (prim-t0)*t1+t0
11692
{0x22132213, cc_prim_sub_t0_mul_t1_add_t0},
11693
// attack, Ogre Battle 64
11694
// (1-t0)*t1+t0, (cmb-0)*prim+0
11695
{0x2216e3f0, cc__t0_inter_one_using_t1__mul_prim},
11696
// Some gannon spell, zelda
11697
// (t1-0)*t1+t0, (prim-0)*cmb+0
11698
{0x22f2e0f3, cc__t1_mul_t1_add_t0__mul_prim},
11699
// battle tanks 2 [Ogy]
11700
// (1-0)*t1+t0, (env-prim)*cmb+prim
11701
{0x22f66035, cc_env_sub_prim_mul__t0_add_t1__add_prim},
11702
// GASP Fighters
11703
// (1-0)*t1+t0, (shade-0)*cmb+0
11704
{0x22f6e0f4, cc__t0_add_t1__mul_shade},
11705
// parts of a car, F1 World Grand Prix. Added by Gonetz
11706
// (1-0)*t1+t0, (cmb-0)*shade+0
11707
{0x22f6e4f0, cc__t0_add_t1__mul_shade},
11708
// ???, zelda
11709
// (noise-0)*t1+t0, (prim-env)*cmb+env
11710
{0x22f7a053, cc_prim_sub_env_mul__t0_add_t1__add_env},
11711
// flashing arrow over buoy, wave race. Added by Gonetz
11712
// (t1-t0)*prim+t0, (env-cmb)*enva+cmb ** INC **
11713
{0x23120c05, cc__t0_inter_t1_using_prim__inter_env_using_enva},
11714
// ground, zelda2. Added by Gonetz
11715
// (t1-t0)*prim+t0, (cmb-0)*shade+0
11716
{0x2312e4f0, cc__t0_inter_t1_using_prim__mul_shade},
11717
// wwf rules
11718
// (env-t0)*prim+t0
11719
{0x23152315, cc_t0_inter_env_using_prim},
11720
// Paper Mario
11721
// (1-t0)*prim+t0, (1-t0)*t0+cmb ** INC **
11722
{0x23160116, cc_t0_add_prim_mul_one_sub_t0_add_t0},
11723
// intro, castlevania. Added by Gonetz
11724
// (1-t0)*prim+t0
11725
{0x23162316, cc_one_sub_t0_mul_prim_add_t0},
11726
// Explosions, aerofighter's assault
11727
// (1-t0)*prim+t0, (shade-0)*cmb+0
11728
{0x2316e0f4, cc_t0_mul_shade},
11729
//beetle adventure racing. Added by Gonetz
11730
// (1-t0)*prim+t0, (cmb-0)*shade+0 **INC**
11731
{0x2316e4f0, cc__t0_inter_one_using_prim__mul_shade},
11732
// Unknown player background, smash bros
11733
// (noise-t0)*prim+t0 ** INC **
11734
// {0x23172317, cc_t0},
11735
{0x23172317, cc_t0_inter_noise_using_prim},
11736
// paper mario. Added by Gonetz
11737
// (noise-prim)*prim+t0 ** INC **
11738
{0x23372337, cc_t0_add_prim},
11739
// strange mirror in stone temple, zelda 2. Added by Gonetz
11740
// (prim-env)*prim+t0, (cmb-0)*prim+0 ** INC **
11741
{0x2353e3f0, cc__prim_sub_env_mul_prim_add_t0__mul_prim},
11742
// Gilded sword, zelda 2. Added by Gonetz
11743
// (shade-env)*prim+t0, (cmb-0)*shade+env ** INC **
11744
{0x2354a4f0, cc__t0_add_prim_mul_shade__mul_shade_add_env},
11745
// Razor sword, zelda 2. Added by Gonetz
11746
// (shade-env)*prim+t0, (cmb-0)*shade+0 ** INC **
11747
{0x2354e4f0, cc__t0_add_prim_mul_shade__mul_shade},
11748
// menu, Mischief Makers. Added by Gonetz
11749
// (0-env)*prim+t0, (cmb-0)*shade+0
11750
{0x235f235f, cc_t0_sub__prim_mul_env},
11751
// Deadly Arts logo. Added by Gonetz
11752
// (t0-0)*prim+t0
11753
{0x23f123f1, cc_t0_mul_prim},
11754
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
11755
// (shade-0)*prim+t0, (cmb-0)*shade+0 ** INC **
11756
{0x23f4e4f0, cc_t0_mul_shade},
11757
// Mischief Makers logo. Added by Gonetz
11758
// (env-0)*prim+t0
11759
{0x23f523f5, cc_prim_mul_env_add_t0},
11760
// Taken out bomb, zelda
11761
// (1-0)*prim+t0
11762
{0x23f623f6, cc_t0_add_prim},
11763
// waterfall, Dobutsu_no_Mori
11764
// (1-0)*prim+t0, (cmb-0)*shade+t0
11765
{0x23f624f0, cc__t0_add_prim__mul_shade_add_t0},
11766
// waterfall, Dobutsu_no_Mori
11767
// (1-0)*prim+t0, (cmb-0)*shade+t1
11768
{0x23f644f0, cc__t0_add_prim__mul_shade_add_t1},
11769
// Jabu-Jabu's Belly, zelda
11770
// (noise-0)*prim+t0
11771
{0x23f723f7, cc_t0_add_prim},
11772
// carmagedon
11773
// (0-0)*prim+t0
11774
{0x23ff23ff, cc_t0},
11775
// water, diddy kong racing. Added by Gonetz
11776
// (t1-t0)*shade+t0, (env-cmb)*env_a+cmb **INC**
11777
{0x24120c05, cc__t0_inter_t1_using_shade__inter_env_using_enva},
11778
// Advertisement hoarding, Mia Soccer. Added by Gonetz
11779
// (t1-t0)*shade+t0, (1-0)*cmb+0
11780
{0x2412e0f6, cc_t0_inter_t1_using_shade},
11781
// ground, f-zero x
11782
// (prim-t0)*shade+t0 ** INC **
11783
{0x24132413, cc__one_sub_prim_mul_shade__mul_t0_add__prim_mul_shade},
11784
// intro, F1 Racing Championship. Added by Gonetz
11785
// (env-t0)*shade+t0 ** INC *
11786
{0x24152415, cc_one_sub_t0_mul_shade_add_t0},
11787
// Sky, pilotwings
11788
// (1-t0)*shade+t0
11789
{0x24162416, cc_one_sub_t0_mul_shade_add_t0},
11790
// zelda 2 [Ogy]. Added by Gonetz
11791
// (prim-env)*shade+t0, (prim-prim)*shade+cmb ** INC ** ?
11792
{0x24530433, cc_prim_sub_env_mul_shade_add_t0},
11793
// waves, Dr. Mario
11794
// (0-center)*shade+t0
11795
{0x246f246f, cc_t0_sub__shade_mul_center},
11796
// lums, Rayman2. Added by Gonetz
11797
// (t0-0)*shade+t0 ** INC **
11798
{0x24f124f1, cc_t0}, //this one works better
11799
// {0x24f124f1, cc_t0_mul_shade},
11800
// Goemon, mystical ninja. Added by Gonetz
11801
// (prim-0)*shade+t0
11802
{0x24f324f3, cc_prim_mul_shade_add_t0},
11803
// Sky, waverace
11804
//z (t1-t0)*env+t0 ** INC **
11805
{0x25122512, cc_t0_inter_t1_using_env},
11806
// Rare logo, Jet Force. Added by Gonetz
11807
// (t1-t0)*env+t0, (cmb-0)*prim+0 ** INC **
11808
{0x2512e3f0, cc__t0_inter_t1_using_enva__mul_prim},
11809
// ridge recer, unimp log. Added by Gonetz
11810
// (t1-t0)*env+t0, (cmb-0)*shade+0 ** INC **
11811
{0x2512e4f0, cc__t0_inter_t1_using_env__mul_shade},
11812
// menu, Mischief Makers. Added by Gonetz
11813
//(prim-t0)*env+t0 ** INC **
11814
{0x25132513, cc_one_sub_env_mul_t0_add_prim_mul_env},
11815
// Battle border, quest64
11816
// (1-t0)*env+t0
11817
{0x25162516, cc_one_sub_env_mul_t0_add_env},
11818
// Paper Mario
11819
// (noise-t0)*env+t0
11820
{0x25172517, cc_t0_inter_noise_using_env},
11821
// the lamp in the bomb shop in town, zelda 2 [Ogy]. Added by Gonetz
11822
// (t0-t1)*env+t0, (1-env)*prim+cmb ** INC **
11823
{0x25210356, cc_one_sub_env_mul_prim_add__t0_inter_t1_using_env},
11824
// Darmani's necklace, zelda 2 [Ogy]. Added by Gonetz
11825
// (prim-shade)*env+t0, (cmb-0)*shade+0 ** INC **
11826
{0x2543e4f0, cc_t0_mul_shade_add_prim_mul_env},
11827
// {0x2543e4f0, cc_t0_mul_shade},
11828
// mystical ninja. Added by Gonetz
11829
// (1-0)*env+t0
11830
{0x25f625f6, cc_t0_add_env},
11831
// smoke, Starshot. Added by Gonetz
11832
// (1-0)*env+t0, (1-0)*cmb+0
11833
{0x25f6e0f6, cc_t0_add_env},
11834
// mega shock, Paper Mario. Added by Gonetz
11835
// (t1-0)*scale+t0, (env-center)*cmb+prim
11836
{0x26f26065, cc__t0_add__t1_mul_scale__mul_env_sub_center_add_prim},
11837
// character select, Duck Dodgers. Added by Gonetz
11838
// (prim-t0)*t0_alpha+t0, (cmb-0)*shade+0 **INC**
11839
{0x2813e4f0, cc__t0_inter_prim_using_t0a__mul_shade},
11840
// intro, Duck Dodgers. Added by Gonetz
11841
// (shade-t0)*t0_alpha+t0 **INC**
11842
{0x28142814, cc_t0_inter_shade_using_t0a},
11843
// vermilion gym torches, Pokemon Stadium 2.
11844
// (prim-env)*t0_a+t0, (cmb-cmb)*cmb+cmb
11845
{0x28530000, cc_prim_sub_env_mul_t0a_add_t0},
11846
// F1 World Grand Prix. Added by Gonetz
11847
// (prim-0)*t0_a+t0, (cmb-0)*shade+0 ** INC **
11848
{0x28f3e4f0, cc__t0a_mul_prim_add_t0__mul_shade},
11849
// battle tanks 2 [Ogy]
11850
// (env-0)*t0_a+t0, (cmb-0)*shade+0
11851
{0x28f5e4f0, cc__t0a_mul_env_add_t0__mul_shade},
11852
// blastcorps, unimp log. Added by Gonetz
11853
// (t1-t0)*t1_alpha+t0
11854
{0x29122912, cc_t0_inter_t1_using_t1a},
11855
// paper mario. Added by Gonetz
11856
// (t1-t0)*t1_alpha+t0, (cmb-env)*env_a+env
11857
{0x2912ac50, cc__t0_inter_t1_using_t1a__sub_env_mul_enva_add_env},
11858
// Rally 2000. Added by Gonetz
11859
// (t1-t0)*t1_alpha+t0, (cmb-0)*shade+0
11860
{0x2912e4f0, cc__t0_inter_t1_using_t1a__mul_shade},
11861
// ??? in zelda ending, zelda
11862
// (1-0)*t1_alpha+t0, (prim-env)*cmb+env
11863
{0x29f6a053, cc_prim_sub_env_mul__t0_add_t1a__add_env},
11864
// Sky, zelda
11865
//z (t1-t0)*prim_a+t0
11866
{0x2a122a12, cc_t0_inter_t1_using_prima},
11867
// battle tanks [Ogy]
11868
// (t1-t0)*prim_a+t0, (env-prim)*cmb+prim
11869
{0x2a126035, cc_env_sub_prim_mul__t0_inter_t1_using_prima__add_prim},
11870
// clothes, zelda 2. Added by Gonetz
11871
// (t1-t0)*prim_a+t0, (prim-env)*cmb+env
11872
{0x2a12a053, cc_prim_sub_env_mul__t0_inter_t1_using_prima__add_env},
11873
// N64 BIOS
11874
// (t1-t0)*prim_a+t0, (cmb-0)*shade+0
11875
{0x2a12e0f4, cc__t0_inter_t1_using_prima__mul_shade},
11876
// flame, Doraemon 2. Added by Gonetz
11877
// (t1-t0)*prim_a+t0, (cmb-0)*prim+0
11878
{0x2a12e3f0, cc__t0_inter_t1_using_prima__mul_prim},
11879
// logo, PD. Added by Gonetz
11880
// (t1-t0)*prim_a+t0, (cmb-0)*shade+0
11881
{0x2a12e4f0, cc__t0_inter_t1_using_prima__mul_shade},
11882
// Pikachu
11883
// (prim-t0)*prim_a+t0, (env-cmb)*enva+cmb
11884
{0x2a130c05, cc__t0_inter_prim_using_prima__inter_env_using_enva},
11885
// 1080 snowboarding [Ogy] - 7/03/02 fixed by Dave2001. 15 Mar 2005 fixed by Gonetz.
11886
// (prim-t0)*prim_a+t0
11887
{0x2a132a13, cc_t0_inter_prim_using_prima},
11888
// menu background, Paper Mario
11889
// (prim-t0)*prim_a+t0, (prim-t1)*prim_a+t1
11890
{0x2a134a23, cc_t0_inter_prim_using_prima},
11891
// {0x2a134a23, cc_t0},
11892
// Mickey USA
11893
// (prim-t0)*prim_a+t0, (cmb-0)*shade+0 ** INC **
11894
{0x2a13e4f0, cc_t0_mul_shade},
11895
// gunfire, Sin and Punishmen. Added by Gonetz
11896
// (env-t0)*prima+t0 **INC**
11897
{0x2a152a15, cc_t0_inter_env_using_prima},
11898
// Mystical Ninja
11899
// (0-t0)*prima+t0, (prim-env)*cmb+env ** INC **
11900
{0x2a1fa053, cc_prim_sub_env_mul__t0_sub_t0_mul_prima__add_env},
11901
// foresight attack, Pokemon Stadium 2.
11902
// (t1-prim)*prim_a+t0, (prim-env)*cmb+env
11903
{0x2a32a053, cc_prim_sub_env_mul__t1_sub_prim_mul_prima_add_t0__add_env},
11904
// arena, Pokemon Stadium 2. Added by Gonetz
11905
// (shade-prim)*prim_a+t0 ** INC **
11906
{0x2a342a34, cc_t0_mul_shade},
11907
// Torches, Paper Mario
11908
// (t1-k4)*prim_a+t0, (t1-k4)*cmb_a+cmb ** INC **
11909
{0x2a720772, cc_t1_sub_k4_mul_prima_add_t0},
11910
// GASP Fighters. Added by Gonetz
11911
// (t0-0)*prim_a+t0, (cmb-center)*scale+0 ** INC **
11912
{0x2af1e660, cc__t0_mul_prima_add_t0__sub_center_mul_scale},
11913
// F1 World Grand Prix. Added by Gonetz
11914
// (t1-0)*prim_a+t0, (cmb-0)*shade+env
11915
{0x2af2a4f0, cc__t1_mul_prima_add_t0__mul_shade_add_env},
11916
// tidal wave, Paper Mario. Added by Gonetz
11917
// (prim-0)*prim_a+t0
11918
{0x2af32af3, cc_prim_mul_prima_add_t0},
11919
//Spacestation Silicon Valley intro. Added by Gonetz
11920
// (t1-t0)*shade_alpha+t0, (prim-shade)*cmb+shade ** INC **
11921
{0x2b128043, cc_prim_sub_shade_mul__t0_inter_t1_using_shadea__add_shade},
11922
// water, Rocket Robot in Wheels
11923
// (t1-t0)*shade_alpha+t0, (env-shade)*cmb+shade ** INC **
11924
{0x2b128045, cc_env_sub_shade_mul__t0_inter_t1_using_shadea__add_shade},
11925
// arena, Pokemon Stadium 2
11926
// (t1-t0)*shade_alpha+t0, (cmb-prim)*env+shade ** INC **
11927
{0x2b128530, cc__t0_inter_t1_using_shadea__sub_prim_mul_env_add_shade},
11928
// Rocket Robot in Wheels intro
11929
// (t1-t0)*shade_a+t0, (shade-0)*cmb+0 ** INC **
11930
{0x2b12e0f4, cc__t0_inter_t1_using_shadea__mul_shade},
11931
// water, Mickey USA
11932
// (t1-t0)*shade_a+t0, (cmb-0)*shade+0 ** INC **
11933
{0x2b12e4f0, cc__t0_inter_t1_using_shadea__mul_shade},
11934
// Extreme G. Added by Gonetz
11935
// (shade-t0)*shade_alpha+t0
11936
{0x2b142b14, cc_shade_sub_t0_mul_shadea_add_t0},
11937
// Jet Force Gemini. Added by Gonetz
11938
// (shade-t0)*shade_alpha+t0, (cmb-0)*prim+0 ** INC **
11939
{0x2b14e3f0, cc_t0_mul_prim_add_shade_mul_shadea_mul_prim},
11940
// V8-2
11941
// (env-t0)*shade_alpha+t0, (cmb-0)*shade+0 ** INC **
11942
{0x2b15e4f0, cc__t0_inter_env_using_shadea__mul_shade},
11943
// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
11944
// (t1-0)*shade_alpha+t0, (prim-env)*cmb+env ** INC **
11945
{0x2bf2a053, cc_prim_sub_env_mul__t0_add_t1__add_env},
11946
// pads, Pokemon Stadium 2. Added by Gonetz
11947
// (0-0)*shade_alpha+t0, (prim-env)*cmba+env
11948
{0x2bffa753, cc_prim_sub_env_mul_t0a_add_env},
11949
// paper mario. Added by Gonetz
11950
// (t1-t0)*env_a+t0, (1-cmb)*prim+cmb
11951
{0x2c120306, cc_one_sub__t0_inter_t1_using_enva__mul_prim_add__t0_inter_t1_using_enva},
11952
// Amoeba boss, water temple, zelda
11953
// (t1-t0)*env_a+t0, (cmb-env)*prim+t0 ** INC **
11954
{0x2c122350, cc__t0_inter_t1_using_enva__sub_env},
11955
// paper mario. Added by Gonetz
11956
// (t1-t0)*env_a+t0
11957
{0x2c122c12, cc_t0_inter_t1_using_enva},
11958
// paper mario. Added by Gonetz
11959
// (t1-t0)*env_a+t0, (1-prim)*cmb+prim
11960
{0x2c126036, cc_one_sub_prim_mul__t0_inter_t1_using_enva__add_prim},
11961
//Arena, Pokemon Stadium 2
11962
// (t1-t0)*env_a+t0, (cmb-0)*shade+prim
11963
{0x2c1264f0, cc__t0_inter_t1_using_enva__mul_shade_add_prim},
11964
// water, jet force. Added by Gonetz
11965
// (t1-t0)*env_a+t0, (prim-shade)*cmb+shade
11966
{0x2c128043, cc_prim_sub_shade_mul__t0_inter_t1_using_enva__add_shade},
11967
// Faries, zelda
11968
//z (t1-t0)*env_a+t0, (prim-env)*cmb+env
11969
{0x2c12a053, cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env},
11970
// paper mario. Added by Gonetz
11971
// (t1-t0)*env_a+t0, (prim-center)*cmb+env
11972
{0x2c12a063, cc_prim_sub_center_mul__t0_inter_t1_using_enva__add_env},
11973
// pads, Pokemon Stadium 2. Added by Gonetz
11974
// (t1-t0)*env_a+t0, (cmb-prim)*shade+env ** INC **
11975
{0x2c12a430, cc__t0_inter_t1_using_enva__mul_shade_add_env},
11976
// Scary dead thing boss, zelda
11977
// (t1-t0)*env_a+t0, (cmb-t1)*cmb_a+env
11978
{0x2c12a720, cc__t0_inter_t1_using_enva__mul_env},
11979
// something in a menu, PokemonStadium2, [Raziel64]
11980
// (t1-t0)*env_a+t0, (prim-env)*cmb_a+env
11981
{0x2c12a753, cc_prim_sub_env_mul__t0_inter_t1_using_enva_alpha__add_env},
11982
// Arena, pokemon Stadium
11983
// (t1-t0)*env_a+t0, (cmb-shade)*prim+0
11984
{0x2c12e340, cc__t0_inter_t1_using_enva__sub_shade_mul_prim},
11985
// Water in zora's place, zelda
11986
// (t1-t0)*env_a+t0, (cmb-0)*prim+0
11987
{0x2c12e3f0, cc__t0_inter_t1_using_enva__mul_prim},
11988
// Ground, zelda
11989
//z (t1-t0)*env_a+t0, (cmb-k5)*shade+cmb_a
11990
{0x2c12e4f0, cc__t0_inter_t1_using_enva__mul_shade},
11991
// zelda, uninmp log. Added by Gonetz
11992
//(t1-t0)*env_a+t0, (cmb-0)*env+0
11993
{0x2c12e5f0, cc__t0_inter_t1_using_enva__mul_env},
11994
// Spheres, waverace
11995
//z (env-t0)*env_a+t0
11996
{0x2c152c15, cc_t0_inter_env_using_enva},//cc_t0},
11997
// backgrounds, Mario Golf. Added by Gonetz
11998
// (env-t0)*env_a+t0, (shade-0)*cmb+0
11999
{0x2c15e0f4, cc__t0_inter_env_using_enva__mul_shade},
12000
// ground on Volcano level, DKR, [Raziel64]
12001
// (env-t0)*env_a+t0, (cmb-0)*shade+0
12002
{0x2c15e4f0, cc__t0_inter_env_using_enva__mul_shade},
12003
// Nintendo 'N', zelda
12004
//z (t0-prim)*env_a+t0, (prim-env)*cmb+env
12005
{0x2c31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_enva_add_t0__add_env},
12006
// Nintendo title & saria's song, zelda
12007
//z (t1-prim)*env_a+t0, (prim-env)*cmb+env
12008
{0x2c32a053, cc_prim_sub_env_mul__t1_sub_prim_mul_enva_add_t0__add_env},
12009
// Hover boots flying, zelda
12010
// (t1-prim)*env_a+t0, (prim-0)*cmb+env
12011
{0x2c32a0f3, cc__t1_sub_prim_mul_enva_add_t0__mul_prim_add_env},
12012
// star beam, paper mario
12013
// (prim-env)*env_a+t0
12014
{0x2c532c53, cc_prim_sub_env_mul_enva_add_t0},
12015
// Kotake & koume's hair, zelda
12016
// (t1-0)*env_a+t0, (prim-env)*cmb+env
12017
{0x2cf2a053, cc_prim_sub_env_mul__t1_mul_enva_add_t0__add_env},
12018
//Goldeneye, [Jeremy]. Added by Gonetz
12019
// (t0-t0)*lodf+t0, (cmb-0)*prim+0
12020
{0x2d11e3f0, cc_t0_mul_prim},
12021
// Pilot wings
12022
// (t1-t0)*lodf+t0, (one-cmb)*prim+cmb
12023
{0x2d120306, cc_one_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},
12024
// Pilot wings
12025
// (t1-t0)*lodf+t0, (one-cmb)*shade+cmb
12026
{0x2d120406, cc_one_sub_shade_mul__t0_inter_t1_using_primlod__add_shade},
12027
// Indy Racing 2000. Added by Gonetz
12028
// (t1-t0)*lodf+t0, (env-cmb)*prima+cmb ** INC **
12029
{0x2d120a05, cc_t0_inter_t1_using_primlod},
12030
// (t1-t0)*lodf+t0
12031
{0x2d122d12, cc_t0_inter_t1_using_primlod},
12032
//broken wall, beetle adventure racing. Added by Gonetz
12033
// (t1-t0)*lodf+t0, (shade-prim)*cmb+prim
12034
{0x2d126034, cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},
12035
//Intro, CBFD. Added by Gonetz
12036
// (t1-t0)*lodf+t0, (shade-env)*cmb+prim
12037
// {0x2d126054, cc_shade_sub_env_mul_t0_add_prim},
12038
{0x2d126054, cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_prim},
12039
// bassmasters 2000 [Ogy]
12040
// (t1-t0)*lodf+t0, (env-0)*cmb+prim ** INC **
12041
{0x2d1260f5, cc_t0_mul_env_add_prim},
12042
// sign, CBFD. Added by Gonetz
12043
// (t1-t0)*lodf+t0, (cmb-env)*shade+prim ** INC **
12044
{0x2d126450, cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_prim},
12045
// {0x2d126450, cc_t0_sub_env_mul_shade_add_prim},
12046
// landscape, Cruis'n Exotica. Added by Gonetz
12047
// (t1-t0)*lodf+t0, (cmb-0)*shade+prim
12048
{0x2d1264f0, cc__t0_inter_t1_using_primlod__mul_shade_add_prim},
12049
// blast corps [Ogy]
12050
// (t1-t0)*lodf+t0, (0-0)*0+shade
12051
{0x2d129fff, cc__t0_inter_t1_using_primlod__mul_shade},
12052
// End of level, zelda
12053
// (t1-t0)*lodf+t0, (prim-env)*cmb+env
12054
{0x2d12a053, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12055
// Rocket Robot in Wheels intro
12056
// (t1-t0)*lodf+t0, (shade-env)*cmb+env
12057
{0x2d12a054, cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12058
// basket, Fox Sport
12059
// (t1-t0)*lodf+t0, (prim-env)*t0+env
12060
{0x2d12a153, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12061
// paper mario. Added by Gonetz
12062
// (t1-t0)*lodf+t0, (cmb-0)*prim+env ** INC **
12063
{0x2d12a3f0, cc__t0_inter_t1_using_primlod__mul_prim_add_env},
12064
// Tony Hawk Pro Skater
12065
// (t1-t0)*lodf+t0, (cmb-0)*shade+env
12066
{0x2d12a4f0, cc__t0_inter_t1_using_primlod__mul_shade_add_env},
12067
// part of a building, Spiderman. Added by Gonetz
12068
// (t1-t0)*lodf+t0, (cmb-env)*cmba+env ** INC **
12069
{0x2d12a750, cc_t0_inter_t1_using_primlod},
12070
// Mike Piazza's Strike Zone
12071
// (t1-t0)*lodf+t0, (shade-prim)*cmb+0
12072
{0x2d12e034, cc_shade_sub_prim_mul__t0_inter_t1_using_primlod},
12073
// intro, F1 Racing Championship. Added by Gonetz
12074
// (t1-t0)*lodf+t0, (shade-env)*cmb+0
12075
{0x2d12e054, cc_shade_sub_env_mul__t0_inter_t1_using_primlod},
12076
// stands, F1 Racing Championship. Added by Gonetz
12077
// (t1-t0)*lodf+t0, (1-env)*cmb+0
12078
{0x2d12e056, cc_one_sub_env_mul__t0_inter_t1_using_primlod},
12079
// court, Mario Tennis. Added by Gonetz
12080
// (t1-t0)*lodf+t0, (prim-0)*cmb+0
12081
{0x2d12e0f3, cc__t0_inter_t1_using_primlod__mul_prim},
12082
// Rocket Robot in Wheels intro
12083
// (t1-t0)*lodf+t0, (shade-0)*cmb+0
12084
{0x2d12e0f4, cc__t0_inter_t1_using_primlod__mul_shade},
12085
// Pilot wings
12086
// (t1-t0)*lodf+t0, (cmb-0)*t0+0 ** INC **
12087
{0x2d12e1f0, cc_t0_inter_t1_using_primlod},
12088
// cars wheels, SF Rush 2049. Added by Gonetz
12089
// (t1-t0)*lodf+t0, (cmb-0)*prim+0
12090
{0x2d12e3f0, cc__t0_inter_t1_using_primlod__mul_prim},
12091
// Bridge, sf rush
12092
// (t1-t0)*lodf+t0, (cmb-0)*shade+0
12093
// {0x2d12e4f0, cc_t0_mul_shade},
12094
{0x2d12e4f0, cc__t0_inter_t1_using_primlod__mul_shade},
12095
// blast corps [Ogy]
12096
// (t1-t0)*lodf+t0, (t0-0)*shade+0
12097
{0x2d12e4f1, cc_t0_mul_shade},
12098
// field, Mike Piazza's Strike Zone
12099
// (t1-t0)*lodf+t0, (cmb-prim)*env+0 ** INC **
12100
{0x2d12e530, cc__t0_inter_t1_using_primlod__mul_env},
12101
// radar, Perfect Dark
12102
// (t1-t0)*lodf+t0, (cmb-0)*env+0
12103
{0x2d12e5f0, cc__t0_inter_t1_using_primlod__mul_env},
12104
// planet, Blast Corps
12105
// (t1-t0)*lodf+t0, (cmb-0)*prima+0
12106
{0x2d12eaf0, cc__t0_inter_t1_using_primlod__mul_prima},
12107
// zelda 2. Added by Gonetz
12108
// (t0-t0)*primlod+t0, (prim-env)*cmb+env
12109
{0x2e11a053, cc_prim_sub_env_mul_t0_add_env},
12110
// zelda 2. Added by Gonetz
12111
// (t1-t0)*primlod+t0, (0-0)*shade+cmb
12112
{0x2e1204ff, cc_t0_inter_t1_using_primlod},
12113
// zelda 2. Added by Gonetz
12114
// (t1-t0)*primlod+t0, (env-prim)*primlod+cmb
12115
{0x2e120d35, cc_prim_sub_env_mul_primlod_add__t0_inter_t1_using_primlod},
12116
// lamppost, Ridge Racer. Added by Gonetz
12117
// (t1-t0)*primlod+t0
12118
{0x2e122e12, cc_t0_inter_t1_using_primlod},
12119
// Hearts, zelda
12120
//z (t1-t0)*primlod+t0, (shade-prim)*cmb+prim
12121
{0x2e126034, cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},
12122
// Sunny Day, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12123
// (t1-t0)*primlod+t0, (env-prim)*cmb+prim
12124
{0x2e126035, cc_env_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},
12125
// snowhead temple, zelda 2. Added by Gonetz
12126
// (t1-t0)*primlod+t0, (cmb-env)*shade+prim ** INC **
12127
{0x2e126450, cc__t0_inter_t1_using_primlod__mul_shade_add_prim},
12128
// snow on a wall, snowhead temple, zelda 2. Added by Gonetz
12129
// (t1-t0)*primlod+t0, (cmb-0)*shade+prim
12130
{0x2e1264f0, cc__t0_inter_t1_using_primlod__mul_shade_add_prim},
12131
// Morning Sun, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12132
// (t1-t0)*primlod+t0, (cmb-0)*0+prim
12133
{0x2e127ff0, cc_prim},
12134
// arena, Pokemon Stadium 2. Added by Gonetz
12135
// (t1-t0)*primlod+t0, (cmb-prim)*shade+shade ** INC **
12136
{0x2e128430, cc__t0_inter_t1_using_primlod__mul_shade},
12137
// Pokemon Stadium 2. Added by Gonetz
12138
// (t1-t0)*primlod+t0, (cmb-env)*cmb+env ** INC **
12139
{0x2e12a050, cc_t0_inter_t1_using_primlod},
12140
// End of level heart, zelda
12141
// (t1-t0)*primlod+t0, (prim-env)*cmb+env
12142
{0x2e12a053, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12143
// Huge turtle appearance, zelda 2. Added by Gonetz
12144
// (t1-t0)*primlod+t0, (1-env)*cmb+env
12145
{0x2e12a056, cc_one_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12146
// frozen octorok, zelda 2. Added by Gonetz
12147
// (t1-t0)*primlod+t0, (prim-env)*t1+env
12148
{0x2e12a253, cc_prim_sub_env_mul_t1_add_env},
12149
// fall headwaters, zelda 2. Added by Gonetz
12150
// (t1-t0)*primlod+t0, (cmb-env)*shade+env ** INC **
12151
{0x2e12a450, cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_env},
12152
// Fissure attack, pokemon stadium 2
12153
// (t1-t0)*primlod+t0, (prim-env)*cmb_a+env
12154
{0x2e12a753, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12155
// zelda 2. Added by Gonetz
12156
// (t1-t0)*primlod+t0, (cmb-0)*t1+0 ** INC ** ?
12157
{0x2e12e2f0, cc_t0_inter_t1_using_primlod},
12158
// zelda 2. Added by Gonetz
12159
// (t1-t0)*primlod+t0, (cmb-0)*prim+0
12160
{0x2e12e3f0, cc__t0_inter_t1_using_primlod__mul_prim},
12161
// sky, PGA European Tour
12162
// (t1-t0)*primlod+t0, (cmb-env)*shade+0 ** INC **
12163
{0x2e12e450, cc__t0_inter_t1_using_primlod__mul_shade},
12164
// Kirby's pool, smash bros
12165
// (t1-t0)*primlod+t0, (cmb-0)*shade+0
12166
{0x2e12e4f0, cc__t0_inter_t1_using_primlod__mul_shade},
12167
//Spacestation Silicon Valley intro. Added by Gonetz
12168
// (prim-t0)*primlod+t0, (cmb-0)*shade+0 **INC**
12169
{0x2e132e13, cc_t0_inter_prim_using_primlod},
12170
// explosions, daikatana. Added by Gonetz
12171
// (prim-t0)*primlod+t0, (cmb-0)*shade+0 **INC**
12172
{0x2e13e4f0, cc_t0_mul_shade},
12173
//Mike Piazza's Strike Zone logo. Added by Gonetz
12174
// (shade-t0)*primlod+t0
12175
{0x2e142e14, cc_t0_inter_shade_using_primlod},
12176
// Cartridge color (transfer pak}, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12177
// (1-t0)*primlod+t0
12178
{0x2e162e16, cc_one_sub_t0_mul_primlod_add_t0},
12179
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
12180
// (1-t0)*primlod+t0, (prim-0)*cmb+0
12181
{0x2e16e0f3, cc__t0_inter_one_using_primlod__mul_prim},
12182
// Spider Web attack, Pokemon Stadium 2.
12183
// (1-t0)*primlod+t0, (cmb-0)*prim+0
12184
{0x2e16e3f0, cc__t0_inter_one_using_primlod__mul_prim},
12185
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
12186
// (1-t0)*primlod+t0, (cmb-0)*shade+0
12187
{0x2e16e4f0, cc__t0_inter_one_using_primlod__mul_shade},
12188
// zelda 2. Added by Gonetz
12189
// (t1-t1)*primlod+t0, (prim-env)*cmb+env
12190
{0x2e22a053, cc_prim_sub_env_mul_t0_add_env},
12191
// Shadow Ball, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12192
// (0-t1)*primlod+t0, (prim-env)*cmb+env ** INC **
12193
{0x2e2fa053, cc_prim_sub_env_mul_t0_add_env},
12194
// Skulltula coin solid, zelda
12195
// (t0-prim)*primlod+t0, (prim-env)*cmb+env
12196
{0x2e31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t0__add_env},
12197
// Triforce lines, zelda
12198
// (t1-prim)*primlod+t0, (prim-shade)*cmb+shade
12199
{0x2e328043, cc_prim_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade},
12200
// moon when majora defeated, zelda 2. Added by Gonetz
12201
// (t1-prim)*primlod+t0, (1-shade)*cmb+shade
12202
{0x2e328046, cc_one_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade},
12203
// Fire, zelda
12204
//z (t1-prim)*primlod+t0, (prim-env)*cmb+env ** INC **
12205
{0x2e32a053, cc_prim_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env},
12206
// zelda 2 [Ogy]. Added by Gonetz
12207
// (t1-prim)*primlod+t0, (shade-env)*cmb+env
12208
{0x2e32a054, cc_shade_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env},
12209
// Scary face, pokemon stadium 2
12210
// (t1-prim)*primlod+t0, (1-env)*cmb+env
12211
{0x2e32a056, cc_one_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env},
12212
// zelda 2. Added by Gonetz
12213
// (t1-prim)*primlod+t0, (prim-0)*cmb+env
12214
{0x2e32a0f3, cc__t1_sub_prim_mul_primlod_add_t0__mul_prim_add_env},
12215
// zelda 2. Added by Gonetz
12216
// (t1-0)*primlod+t0, (prim-env)*cmb+env
12217
{0x2ef2a053, cc_prim_sub_env_mul__t1_mul_primlod_add_t0__add_env},
12218
// zelda 2. Added by Gonetz
12219
// (t1-0)*primlod+t0, (cmb-0)*prim+0
12220
{0x2ef2e3f0, cc__t1_mul_primlod_add_t0__mul_prim},
12221
// zelda 2. Added by Gonetz
12222
// (t1-0)*primlod+t0, (cmb-0)*env+0
12223
{0x2ef2e5f0, cc__t1_mul_primlod_add_t0__mul_env},
12224
// gun, Doom64. Added by Gonetz
12225
// (1-0)*primlod+t0, (cmb-0)*prim+env
12226
{0x2ef6a3f0, cc__t0_add_primlod__mul_prim_add_env},
12227
// walls, Doom64. Added by Gonetz
12228
// (1-0)*primlod+t0, (cmb-0)*shade+env
12229
{0x2ef6a4f0, cc__t0_add_primlod__mul_shade_add_env},
12230
// Pokemon Stadium 2. Added by Gonetz
12231
// (noise-0)*primlod+t0, (prim-env)*cmb+env ** INC **
12232
{0x2ef7a053, cc_prim_sub_env_mul_t0_add_env},
12233
// Tony Hawk's Pro Skater. Added by Gonetz
12234
// (t1-t0)*k5+t0
12235
{0x2f122f12, cc_t0_inter_t1_using_k5},
12236
// F1 World Grand Prix. Added by Gonetz
12237
// (t1-t0)*k5+t0, (cmb-0)*shade+0 **INC**
12238
{0x2f12e4f0, cc__t0_inter_t1_using_k5__mul_shade},
12239
// Turok 3 [scorpiove]. Added by Gonetz
12240
// (t0-k4)*k5+t0
12241
{0x2f712f71, cc_t0},
12242
// THPS 3
12243
// (env-0)*k5+t0,
12244
{0x2ff52ff5, cc_t0_add_env_mul_k5},
12245
// super bowling
12246
// (0-0)*k5+t0,
12247
{0x2fff0000, cc_t0},
12248
// super bowling
12249
// (0-0)*k5+t0
12250
{0x2fff2fff, cc_t0},
12251
// Moonlight attack, pokemon stadium 2
12252
// (t1-t0)*0+t0, (prim-env)*cmb+env
12253
{0x3f12a053, cc_prim_sub_env_mul_t0_add_env},
12254
//C&C shadows
12255
//(1-env)*0+t0
12256
{0x3f563f56, cc_t0},
12257
// RARE logo, blast corps. Added by Gonetz
12258
// (t0-0)*0+t0
12259
{0x3ff13ff1, cc_t0},
12260
// the ground below the scarecrow in the trading post in town, zelda 2 [Ogy]. Added by Gonetz
12261
// (t1-0)*0+t0, (cmb-0)*shade+0
12262
{0x3ff2e4f0, cc_t0_mul_shade},
12263
// intro, background, Dezaemon 3D
12264
// (1-0)*0+t0
12265
{0x3ff63ff6, cc_t0},
12266
// intro of WWF WrestleMania 2000
12267
// ((0-0)*0+t0, (env-cmb)*prim+cmb
12268
{0x3fff0305, cc_env_sub_t0_mul_prim_add_t0},
12269
// pistol fire, Turok
12270
// ((0-0)*0+t0, (env-cmb)*shade+cmb
12271
{0x3fff0405, cc_env_sub_t0_mul_shade_add_t0},
12272
// Tony Hawk's Pro Skater. Added by Gonetz
12273
// ((0-0)*0+t0, (t1-0)*shade+cmb ** INC **
12274
{0x3fff04f2, cc_t0},
12275
// Dr. Mario [Ogy]. Added by Gonetz
12276
// ((0-0)*0+t0, (prim-cmb)*env+cmb
12277
{0x3fff0503, cc_prim_sub_t0_mul_env_add_t0},
12278
// Stained glass, quest64
12279
// (0-0)*0+t0, (1-0)*env+cmb
12280
{0x3fff05f6, cc_t0_add_env},
12281
// Health bar, killer instinct gold
12282
// (0-0)*0+t0, (prim-env)*prim_a+cmb
12283
{0x3fff0a53, cc_prim_sub_env_mul_prima_add_t0},
12284
// Runes, Turok - Dinosaur Hunter. Added by Gonetz
12285
// (0-0)*0+t0, (env-cmb)*env_a+cmb
12286
{0x3fff0c05, cc_t0_inter_env_using_enva},
12287
// intro, Mission Impossible. Added by Gonetz
12288
// (k5-k5)*0+t0, (0-0)*scale+t0
12289
{0x3fff26ff, cc_t0},
12290
// V8-2
12291
// (0-0)*0+t0, (t0-k4)*k5+t0
12292
{0x3fff2f71, cc_t0_sub_k4_mul_k5_add_t0},
12293
// TM, mario
12294
//z (k5-k5)*0+t0
12295
{0x3fff3fff, cc_t0},
12296
// Intro, CBFD. Added by Gonetz
12297
// ((0-0)*0+t0, (shade-env)*cmb+prim
12298
{0x3fff6054, cc_shade_sub_env_mul_t0_add_prim},
12299
// Text, Mia Soccer. Added by Gonetz
12300
// ((0-0)*0+t0, (0-0)*0+prim
12301
{0x3fff7fff, cc_t0},
12302
// paper mario. Added by Gonetz
12303
// ((0-0)*0+t0, (prim-env)*cmb+env
12304
{0x3fffa053, cc_prim_sub_env_mul_t0_add_env},
12305
// Objects in arena, pokemon stadium 2
12306
// (0-0)*0+t0, (cmb-prim)*shade+env
12307
{0x3fffa430, cc_t0_mul_prim},
12308
// intro, F1 Racing Championship. Added by Gonetz
12309
// (0-0)*0+t0, (shade-env)*cmb+0
12310
{0x3fffe054, cc_shade_sub_env_mul_t0},
12311
// stands, F1 Racing Championship. Added by Gonetz
12312
// (0-0)*0+t0, (1-env)*cmb+0
12313
{0x3fffe056, cc_one_sub_env_mul_t0},
12314
// ? (from log)
12315
// (0-0)*0+t0, (prim-0)*cmb+0
12316
{0x3fffe0f3, cc_t0_mul_prim},
12317
// background, GASP Fighters
12318
// (0-0)*0+t0, (shade-0)*cmb+0
12319
{0x3fffe0f4, cc_t0_mul_shade},
12320
// zelda 2 [Ogy]. Added by Gonetz
12321
// (0-0)*0+t0, (env-0)*cmb+0
12322
{0x3fffe0f5, cc_t0_mul_env},
12323
// logo, v-rally 99
12324
// (0-0)*0+t0, (prim-0)*t0+0
12325
{0x3fffe1f3, cc_t0_mul_prim},
12326
// target hit, zelda 2. Added by Gonetz
12327
// (0-0)*0+t0, (cmb-0)*prim+0
12328
{0x3fffe3f0, cc_t0_mul_prim},
12329
// Ms. Pac-Man intro background. Added by Gonetz
12330
// (0-0)*0+t0, (cmb-0)*shade+0
12331
{0x3fffe4f0, cc_t0_mul_shade},
12332
// Wonder Project J2 logo. Added by Gonetz
12333
// (0-0)*0+t0, (t0-0)*shade+0
12334
{0x3fffe4f1, cc_t0_mul_shade},
12335
// tire trace, Monster truck madness. Added by Gonetz
12336
// (0-0)*0+t0, (cmb-0)*env+0
12337
{0x3fffe5f0, cc_t0_mul_env},
12338
// Gauntlet Legends intro. Added by Gonetz
12339
// (0-0)*0+t0, (cmb-0)*ecale+0
12340
{0x3fffe6f0, cc_t0},
12341
// tire trace, beetle adventure racing. Added by Gonetz
12342
// (t1-t0)*t0+t1, (cmb-t0)*shade+t1 **INC**
12343
{0x41124410, cc__t0_inter_t1_using_t0__mul_shade},
12344
// Paper Mario. Added by Gonetz
12345
// (t0-t1)*t0+t1 **INC**
12346
{0x41214121, cc_t1_inter_t0_using_t0},
12347
// Powered Star Beam, Paper Mario. Added by Gonetz
12348
// (t0-t1)*t0+t1, (env-prim)*cmb+prim **INC**
12349
{0x41216035, cc_env_sub_prim_mul__t1_inter_t0_using_t0__add_prim},
12350
// wetrix raiseland [Raziel64]. Added by Gonetz
12351
// (prim-t1)*t0+t1, (env-t0)*cmb+cmb **INC**
12352
{0x41230015, cc_env_sub_prim_mul__t0_mul_t1__add_prim},
12353
// SCARS. Added by Gonetz
12354
// (t1-t0)*t0+t1, (cmb-t0)*shade+t1 **INC**
12355
{0x41250b03, cc__t0_inter_t1_using_half__mul_shade},
12356
//beetle adventure racing. Added by Gonetz
12357
//(t0-t1)*t1+t1, (cmb-0)*shade+0 **INC**
12358
{0x4221e4f0, cc__t1_inter_t0_using_t1__mul_shade},
12359
// cianwood gym walls, pokemon stadium 2
12360
//(t0-prim)*t1+t1, (cmb-0)*env+shade
12361
{0x423185f0, cc__t0_sub_prim_mul_t1_add_t1__mul_env_add_shade},
12362
// cianwood gym walls, pokemon stadium 2
12363
//(t0-prim)*t1+t1, (cmb-0)*shade+0
12364
{0x4231e4f0, cc__t0_sub_prim_mul_t1_add_t1__mul_shade},
12365
// paper mario. Added by Gonetz
12366
// (t0-t0)*prim+t1, (t1-cmb)*cmb+env **INC** weird
12367
{0x4311a002, cc_env},
12368
// background, Wetrix level 1, [Raziel64]. Added by Gonetz
12369
// (t0-t1)*prim+t1
12370
{0x43214321, cc_t1_inter_t0_using_prim},
12371
// Mario Party3 Tidal Toss
12372
// (t0-t1)*prim+t1, (cmb-0)*shade+0 **INC**
12373
{0x4321e4f0, cc__t1_inter_t0_using_prim__mul_shade},
12374
// grass, ISS 2k. Added by Gonetz
12375
// (t0-t1)*prim+t1, (cmb-0)*env+0 **INC**
12376
{0x4321e5f0, cc__t1_inter_t0_using_prim__mul_env},
12377
// intro, Paper Mario
12378
// (t0-0)*prim+t1
12379
{0x43f143f1, cc_t0_mul_prim_add_t1},
12380
// F1 World Grand Prix. Added by Gonetz
12381
// (t0-0)*prim+t1, (cmb-0)*shade+env **INC**
12382
{0x43f1a4f0, cc__t0_add_t1__mul_shade_add_env},
12383
// field, ISS64. Added by Gonetz
12384
// (t0-t1)*shade+t1, (cmb-t1)*prim+t1 ** INC **
12385
{0x44214320, cc_t0_sub_t1_mul_prim_mul_shade_add_t1},
12386
// {0x44214320, cc__t0_add_t1__mul_prim},
12387
// field, Top gear hyper-bike
12388
// (t0-t1)*shade+t1
12389
{0x44214421, cc_t1_inter_t0_using_shade},
12390
// water, goemon great adventure
12391
// (t0-t1)*env+t1 ** INC **
12392
{0x45214521, cc_t1_inter_t0_using_env},
12393
// characters, Ogre Battle. Added by Gonetz
12394
// (1-t1)*env+t1, (1-cmb)*prim+cmb ** INC **
12395
{0x45260306, cc_one_sub_t1_mul_prim_add_t1},
12396
// characters, Ogre Battle. Added by Gonetz
12397
// (1-t1)*env+t1
12398
{0x45264526, cc_one_sub_t1_mul_env_add_t1},
12399
// characters, Ogre Battle. Added by Gonetz
12400
// (1-t1)*env+t1, (cmb-0)*prim+0 ** INC **
12401
{0x4526e3f0, cc__t1_inter_one_using_env__mul_prim},
12402
// explosion, body harvest. Added by Gonetz
12403
// (t0-t1)*scale+t1, (env-prim)*cmb+prim ** INC **
12404
{0x46216035, cc_env_sub_prim_mul__t0_inter_t1_using_half__add_prim},
12405
// Water, AeroGauge. Added by Gonetz
12406
// (t0-t1)*prima+t1, (0-0)*0+cmb
12407
{0x4a214a21, cc_t1_inter_t0_using_prima},
12408
// flame, castlevania 2. Added by Gonetz
12409
// (t0-t1)*prima+t1, (prim-env)*cmb+env
12410
{0x4a21a053, cc_prim_sub_env_mul__t1_inter_t0_using_prima__add_env},
12411
// shadows, Mario Tennis. Added by Gonetz
12412
// (t0-t1)*prima+t1, (prim-0)*cmb+0
12413
{0x4a21e0f3, cc__t1_inter_t0_using_prima__mul_prim},
12414
// menu, Mario Golf. Added by Gonetz
12415
// (t0-t1)*prima+t1, (shade-0)*cmb+0
12416
{0x4a21e0f4, cc__t1_inter_t0_using_prima__mul_shade},
12417
// intro, castlevania 2. Added by Gonetz
12418
// (t0-t1)*prima+t1, (cmb-0)*prim+0
12419
{0x4a21e3f0, cc__t1_inter_t0_using_prima__mul_prim},
12420
// water on map, Ogre Battle64. Added by Gonetz
12421
// (t0-t1)*prima+t1, (cmb-0)*shade+0
12422
{0x4a21e4f0, cc__t1_inter_t0_using_prima__mul_shade},
12423
// Ice, Paper Mario
12424
// (t0-t1)*shade_a+t1
12425
{0x4b214b21, cc_t1_inter_t0_using_shadea},
12426
// Grass, Beetle Adventure Racing
12427
// (t0-t1)*shade_a+t1, (cmb-0)*shade+0
12428
{0x4b21e4f0, cc__t1_inter_t0_using_shadea__mul_shade},
12429
// Ground at kotake & koume, zelda
12430
// (t1-t0)*env_a+t0, (prim-env)*cmb+env
12431
{0x4c12a053, cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env},
12432
// Tony Hawk's Pro Skater. Added by Gonetz
12433
// (t0-t1)*env_a+t1, (cmb-0)*shade+cmb ** INC **
12434
{0x4c2104f0, cc__t1_inter_t0_using_enva__mul_shade},
12435
// bikes, xg2. Added by Gonetz
12436
// (t0-t1)*env_a+t1, (cmb-prim)*prima+prim
12437
{0x4c216a30, cc__t1_inter_t0_using_enva__sub_prim_mul_prima_add_prim},
12438
// Yoshi Story
12439
// (t0-t1)*env_a+t1, (prim-env)*cmb+env
12440
{0x4c21a053, cc_prim_sub_env_mul__t1_inter_t0_using_enva__add_env},
12441
// arena, Pokemon Stadium 1. Added by Gonetz
12442
// (t0-t1)*env_a+t1, (cmb-0)*prim+0
12443
{0x4c21e3f0, cc__t1_inter_t0_using_enva__mul_prim},
12444
// "end of chapter" text, paper mario. Added by Gonetz
12445
// (1-t1)*env_a+t1, (cmb-0)*t1+0
12446
{0x4c26e2f0, cc__t1_inter_one_using_enva__mul_t0},
12447
// Zelda opening door, zelda
12448
// (t0-prim)*env_a+t1, (prim-env)*t0+env
12449
{0x4c31a053, cc_prim_sub_env_mul_t0_add_env},
12450
// arena, Pokemon Stadium 2
12451
// (t0-0)*env_a+t1, (cmb-0)*shade+prim
12452
{0x4cf164f0, cc__t0_mul_enva_add_t1__mul_shade_add_prim},
12453
// Kotake & koume magic poof, zelda
12454
// (t0-0)*env_a+t1, (prim-env)*cmb+env
12455
{0x4cf1a053, cc_prim_sub_env_mul__t0_mul_enva_add_t1__add_env},
12456
// ground in stone temple, zelda 2. Added by Gonetz
12457
// (t1-t0)*primlod+t1, (cmb-0)*prim+0
12458
{0x4e12e3f0, cc__t0_inter_t1_using_primlod__mul_prim},
12459
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
12460
// (noise-t0)*primlod+t1, (prim-env)*cmb+env ** INC **
12461
{0x4e17a053, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},
12462
// menu, pokemon stadium 1, [Raziel64]
12463
// (t0-t1)*lodf+t1, (prim-env)*cmb+env
12464
{0x4e214e21, cc_t1_inter_t0_using_primlod},
12465
// Pokemon backgrounds, pokemon stadium 2
12466
// (t0-t1)*primlod+t1, (cmb-0)*shade+prim
12467
{0x4e2164f0, cc__t1_inter_t0_using_primlod__mul_shade_add_prim},
12468
// Pokemon backgrounds, pokemon stadium 2
12469
// (t0-t1)*lodf+t1, (prim-env)*cmb+env
12470
{0x4e21a053, cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env},
12471
// zelda 2 [Ogy]. Added by Gonetz
12472
// (t0-t1)*primlod+t1, (t1-cmb)*prim+env ** INC **
12473
{0x4e21a302, cc_env_sub__t0_sub_t1_mul_primlod__mul_prim},
12474
// Magnitude, pokemon stadium 2
12475
// (t0-t1)*primlod+t1, (prim-env)*cmb_a+env
12476
{0x4e21a753, cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env},
12477
// Arena, pokemon stadium 2
12478
// (t0-t1)*primlod+t1, (cmb-shade)*prim+0
12479
{0x4e21e340, cc__t1_inter_t0_using_primlod__sub_shade_mul_prim},
12480
// zelda 2 [Ogy]. Added by Gonetz
12481
// (t0-t1)*primlod+t1, (cmb-0)*shade+0
12482
{0x4e21e4f0, cc__t1_inter_t0_using_primlod__mul_shade},
12483
// lava in snowhead temple, zelda 2. Added by Gonetz
12484
// (t0-prim)*primlod+t1, (cmb-prim)*shade+cmb ** INC **
12485
{0x4e310430, cc_lavatex_sub_prim_mul_shade_add_lavatex},
12486
// Skulltula coin, zelda
12487
// (t0-prim)*primlod+t1, (prim-env)*cmb+env
12488
{0x4e31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t1__add_env},
12489
// Pokemon background, pokemon stadium 2
12490
// (noise-shade)*primlod+t1, (prim-env)*cmb+env
12491
{0x4e47a053, cc_prim_sub_env_mul_t1_add_env},
12492
// Reflect, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12493
// (t0-0)*primlod+t1, (prim-env)*cmb+env
12494
{0x4ef1a053, cc_prim_sub_env_mul__t0_add_t1__add_env},
12495
//beetle adventure racing. Added by Gonetz
12496
//(t0-t1)*k5+t1, (cmb-0)*shade+0
12497
{0x4f21e4f0, cc__t1_inter_t0_using_k5__mul_shade},
12498
// Spiderman. Added by Gonetz
12499
//(t0-t1)*k5+t1, (cmb-0)*env+0
12500
{0x4f21e5f0, cc_t1_mul_env},
12501
// N64 logo, Ogre Battle. Added by Gonetz
12502
//(0-0)*0+t1
12503
{0x5fff5fff, cc_t1},
12504
// reversing light, Monster truck madness. Added by Gonetz
12505
//(0-0)*0+t0, (0-0)*0+prim
12506
{0x5fff7fff, cc_prim},
12507
// battle tanks [Ogy]
12508
// (0-0)*0+t1, (env-shade)*cmb+shade
12509
{0x5fff8045, cc_env_sub_shade_mul_t1_add_shade},
12510
// minigame, pokemon stadium 1. Added by Gonetz
12511
// (0-0)*0+t1, (prim-env)*cmb+env
12512
{0x5fffa053, cc_prim_sub_env_mul_t1_add_env},
12513
// F1 World Grand Prix. Added by Gonetz
12514
// (t0-prim)*t0+prim, (cmb-0)*shade
12515
{0x6131e4f0, cc__prim_inter_t0_using_t0__mul_shade},
12516
// aerofighter's assault [Ogy]
12517
// (shade-prim)*t0+prim
12518
{0x61346134, cc_shade_sub_prim_mul_t0_add_prim},
12519
// pilot wings
12520
// (shade-prim)*t0+prim, (cmb-shade)*shadea+shade
12521
{0x61348b40, cc_shade_inter__prim_inter_shade_using_t0__using_shadea},
12522
// club blow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
12523
// (shade-prim)*t0+prim, (cmb-env)*cmb_a+env ** INC **
12524
{0x6134a750, cc_shade_sub_prim_mul_t0_add_prim},
12525
// sky, Killer Instinct
12526
// (shade-prim)*t0+prim, (cmb-env)*shade_a+env ** INC **
12527
{0x6134ab50, cc_env_inter__prim_inter_shade_using_t0__using_shadea},
12528
// lava, beetle adventure racing
12529
// (shade-prim)*t0+prim, (cmb-0)*t1+0 ** INC **
12530
{0x6134e2f0, cc_shade_sub_prim_mul_t0_add_prim},
12531
// Monster truck madness intro. Added by Gonetz
12532
// (env-prim)*t0+prim, (cmb-0)*scale+cmb ** INC **
12533
{0x613506f0, cc_env_sub_prim_mul_t0_add_prim},
12534
// pokemon attack, Pokemon stadium 1
12535
// (env-prim)*t0+prim, (cmb-0)*0+cmb
12536
{0x61351ff0, cc_env_sub_prim_mul_t0_add_prim},
12537
// Paper Mario, fortune teller spheres
12538
// (env-prim)*t0+prim, (cmb-0)*t1+t0 ** INC **
12539
{0x613522f0, cc_t0_mul_t1_add_t0},
12540
// Later hearts, zelda
12541
// (env-prim)*t0+prim
12542
{0x61356135, cc_env_sub_prim_mul_t0_add_prim},
12543
// Mission Impossible. Added by Gonetz
12544
// (env-prim)*t0+prim, (shade-0)*cmb+0 ** INC **
12545
{0x6135e0f4, cc__prim_inter_env_using_t0__mul_shade},
12546
// crashing other vehicle, Monster truck madness [Raziel64]. Added by Gonetz
12547
// (env-prim)*t0+prim, (cmb-0)*t0+0 ** INC **
12548
{0x6135e1f0, cc_env_sub_prim_mul_t0_add_prim},
12549
// Tony Hawk's Pro Skater. Added by Gonetz
12550
// (env-prim)*t0+prim, (cmb-0)*t1+0 ** INC **
12551
{0x6135e2f0, cc_env_sub_prim_mul_t0_add_prim},
12552
// aerofighter's assault [Ogy]
12553
// (env-prim)*t0+prim, (cmb-0)*shade+0 ** INC **
12554
{0x6135e4f0, cc__prim_inter_env_using_t0__mul_shade},
12555
// "time out", paper mario. Added by Gonetz
12556
// (1-prim)*t0+prim, (1-cmb)*enva+cmb ** INC **
12557
{0x61360c06, cc_one_sub_prim_mul_t0_add_prim},
12558
// intro, paper mario. Added by Gonetz
12559
// (1-prim)*t0+prim, (cmb-0)*prima+t0 ** INC **
12560
{0x61362af0, cc__one_sub_prim_mul_t0_add_prim__mul_prima_add__one_sub_prim_mul_t0_add_prim},
12561
// paper mario. Added by Gonetz
12562
// (1-prim)*t0+prim
12563
{0x61366136, cc_one_sub_prim_mul_t0_add_prim},
12564
// arena, Pokemon Stadium 2. Added by Gonetz
12565
// (1-prim)*t0+prim, (cmb-env)*shade+shade ** INC **
12566
{0x61368450, cc_t0_mul_shade},
12567
// F1 World Grand Prix. Added by Gonetz
12568
// (1-prim)*t0+prim, (cmb-0)*shade+0 ** INC **
12569
{0x6136e4f0, cc_t0_mul_shade},
12570
// Xena. Added by Gonetz
12571
// (0-prim)*t0+prim
12572
{0x613f613f, cc_one_sub_t0_mul_prim},
12573
// Kirby64 end [Raziel64]. Added by Gonetz
12574
// (prim-env)*t0+prim
12575
{0x61536153, cc_prim_sub_env_mul_t0_add_prim},
12576
// Xena. Added by Gonetz
12577
// (shade-env)*t0+prim
12578
{0x61546154, cc_shade_sub_env_mul_t0_add_prim},
12579
// Karts, mario kart
12580
//z (one-env)*t0+prim
12581
{0x61566156, cc_t0_mul_1menv_add_prim},
12582
// Famista64. Added by Gonetz
12583
//(t0-0)*t0+prim
12584
{0x61f161f1, cc_t0_mul_prim},
12585
// Pokemon Stadium 2. Added by Gonetz
12586
//(shade-0)*t0+prim
12587
{0x61f461f4, cc_t0_mul_shade_add_prim},
12588
// Doom. Added by Gonetz
12589
//(1-0)*t0+prim
12590
{0x61f661f6, cc_t0_add_prim},
12591
// tire trace, beetle adventure racing. Added by Gonetz
12592
// (shade-prim)*t1+prim, (cmb-0)*t1+0 **INC**
12593
{0x6234e2f0, cc_shade_sub_prim_mul_t1_add_prim},
12594
// Text, turok
12595
// (env-prim)*t1+prim
12596
{0x62356235, cc_env_sub_prim_mul_t1_add_prim},
12597
// Pokemon Stadium 2, [gokuss4]. Added by Gonetz
12598
// (env-prim)*t1+prim, (cmb-0)*t1+0
12599
// Hack alert!
12600
{0x6235e2f0, cc_t1},
12601
// bike trace, xg2 intro. Added by Gonetz
12602
// (1-prim)*t1+prim
12603
{0x62366236, cc_one_sub_prim_mul_t1_add_prim},
12604
// aerofighter's assault [Ogy]
12605
// (1-prim)*t1+prim, (cmb-0)*0+env
12606
{0x6236bff0, cc_one_sub_prim_mul_t1_add_prim},
12607
// Tennis court, mario tennis
12608
// (t0-0)*t1+prim
12609
{0x62f162f1, cc__t0_mul_t1__add_prim},
12610
// Arena, Pokemon Stadium 2
12611
// (t0-0)*t1+prim, (cmb-0)*shade+0
12612
{0x62f1e4f0, cc__t0_mul_t1_add_prim__mul_shade},
12613
// Rush2. Added by Gonetz
12614
// (prim-prim)*prim+prim
12615
{0x63336333, cc_prim},
12616
//Bowser in final battle, Paper Mario. Added by Gonetz
12617
// (t1-0)*prim+prim
12618
{0x63f263f2, cc_t1_mul_prim_add_prim},
12619
// wetrix, icelayer, [Raziel64]. Added by Gonetz
12620
// (t0-prim)*shade+prim ** INC **
12621
{0x64316431, cc_t0_mul_shade},
12622
// KI. Added by Gonetz
12623
// (env-prim)*shade+prim
12624
{0x64356435, cc_env_sub_prim_mul_shade_add_prim},
12625
// xg2. Added by Gonetz
12626
// (1-prim)*shade+prim, (t0-0)*cmb+0 ** INC **
12627
{0x6436e0f1, cc_t1_mul__one_sub_prim_mul_shade_add_prim},
12628
// Intro, CBFD. Added by Gonetz
12629
// (t0-env)*shade+prim
12630
{0x64516451, cc_t0_sub_env_mul_shade_add_prim},
12631
// sword in final battle, zelda 2. Added by Gonetz
12632
// (t0-env)*shade+prim, (cmb-0)*shade+0 ** INC **
12633
{0x6451e4f0, cc__t0_sub_env_mul_shade_add_prim__mul_shade},
12634
// attack, Pokemon Stadium 2.
12635
// (t0-env)*shade+prim, (cmb-0)*shade_a+0 ** INC **
12636
{0x6451ebf0, cc__t0_sub_env_mul_shade_add_prim__mul_shadea},
12637
// Road Rush. Added by Gonetz
12638
// (t0-0)*shade+prim
12639
{0x64f164f1, cc_t0_mul_shade_add_prim},
12640
// paper mario. Added by Gonetz
12641
// (1-0)*shade+prim
12642
{0x64f664f6, cc_prim_add_shade},
12643
// Character select, smash bros
12644
// (t0-prim)*env+prim
12645
{0x65316531, cc_t0_sub_prim_mul_env_add_prim},
12646
// Clear screen intro, banjo kazooie
12647
// (t0-prim)*env+prim, (cmb-0)*shade+0
12648
// {0x6531e4f0, cc_t0_mul_env_mul_shade},
12649
{0x6531e4f0, cc__prim_inter_t0_using_env__mul_shade},
12650
// Dragonfly feet, banjo kazooie
12651
// (1-prim)*env+prim, (cmb-0)*shade+0
12652
{0x6536e4f0, cc__prim_inter_one_using_env__mul_shade},
12653
// Lava piranha atack, Paper Mario
12654
// (t1-k4)*env+prim ** INC **
12655
{0x65726572, cc_t1_mul_env_add_prim},
12656
// zelda 2 [Ogy]. Added by Gonetz
12657
// (t0-0)*env+prim, (1-t1)*t0a+cmb ** INC **
12658
{0x65f10826, cc_one_sub_t1_mul_t0a_add_t0_mul_env_add_prim},
12659
// clocks while warping through time, zelda 2
12660
// (t0-0)*env+prim, (cmb-0)*0+cmb
12661
{0x65f11ff0, cc_t0_mul_env_add_prim},
12662
// Helicopter, Nuclear Strike. Added by Gonetz
12663
// (t0-0)*env+prim
12664
{0x65f165f1, cc_t0_mul_env_add_prim},
12665
// Mystical Ninja
12666
// (1-0)*env+prim
12667
{0x65f665f6, cc_prim_add_env},
12668
// duke nukem: zero hour [Ogy]
12669
// (noise-0)*env+prim ** INC **
12670
{0x65f765f7, cc_prim_add_env},
12671
// "terminator", CBFD
12672
// (0-0)*env+prim
12673
{0x65ff65ff, cc_prim},
12674
// Cliffs, Taz express. Added by Gonetz
12675
// (t0-0)*scale+prim
12676
{0x66f166f1, cc_t0_mul_scale_add_prim},
12677
// Taz express. Added by Gonetz
12678
// (t0-0)*scale+prim, (cmb-0)*shade+0
12679
{0x66f1e4f0, cc_t0_mul_scale_add_prim__mul_shade},
12680
// NFL Quarterback Club 98 Menu [CpUMasteR]
12681
// (prim-0)*scale+prim
12682
{0x66f366f3, cc_prim},
12683
// Pikachu
12684
// (t0-prim)*t0_a+prim, (env-cmb)*enva+cmb
12685
{0x68310c05, cc__prim_inter_t0_using_t0a__inter_env_using_enva},
12686
// Character, dual heroes
12687
// (t0-prim)*t0_a+prim
12688
{0x68316831, cc_t0_sub_prim_mul_t0a_add_prim},
12689
// Indy Racing 2000. Added by Gonetz
12690
// (t0-prim)*t0_a+prim, (cmb-0)*shade+0 ** INC **
12691
{0x6831e4f0, cc__prim_inter_t0_using_t0a__mul_shade},
12692
// text, Sin and Punishmen. Added by Gonetz
12693
// (env-prim)*t0_a+prim ** INC **
12694
{0x68356835, cc_env_sub_prim_mul_t0a_add_prim},
12695
// arena, Pokemon Stadium 2
12696
// (1-prim)*t0_a+prim
12697
{0x68366836, cc_one_sub_prim_mul_t0a_add_prim},
12698
// menu, PD. Added by Gonetz
12699
// (env-prim)*t1_a+prim
12700
{0x69356935, cc_env_sub_prim_mul_t1a_add_prim},
12701
// {0x69356935, cc_t1},
12702
//xg2. Added by Gonetz
12703
// (t0-prim)*prima+prim
12704
{0x6a316a31, cc_t0_sub_prim_mul_prima_add_prim},
12705
// menu, battle phoenix 64. Added by Gonetz
12706
// (env-prim)*prima+prim
12707
{0x6a356a35, cc_env_sub_prim_mul_prima_add_prim},
12708
// ground, KI. Added by Gonetz
12709
// (shade-env)*prima+prim
12710
{0x6a546a54, cc_shade_sub_env_mul_prima_add_prim},
12711
// F1 World Grand Prix. Added by Gonetz
12712
// (t0-0)*prima+prim, (shade-0)*cmb+env **INC**
12713
{0x6af1a0f4, cc__t0_mul_prima_add_prim_mul__shade_add_env},
12714
//broken wall, beetle adventure racing. Added by Gonetz
12715
// (t0-0)*prima+prim, (cmb-0)*shade+0 **INC**
12716
{0x6af1e4f0, cc__t0_mul_prima_add_prim_mul__shade},
12717
// Genie, diddy kong racing
12718
// (t0-prim)*shade_alpha+prim, (env-cmb)*shade+cmb
12719
// {0x6b310405, cc_env_sub__prim_inter_t0_using_shadea__mul_shade_add_env},
12720
{0x6b310405, cc_t0_mul_shadea},
12721
// Extreme G. Added by Gonetz
12722
// (t0-prim)*shade_alpha+prim ** INC **
12723
{0x6b316b31, cc_t0_sub_prim_mul_shadea_add_prim},
12724
// water block, Paper Mario. Added by Gonetz
12725
// (t0-prim)*shade_alpha+prim, (prim-env)*cmb+env ** INC **
12726
{0x6b31a053, cc_prim_sub_env_mul__prim_inter_t0_using_shadea__add_env},
12727
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
12728
// (t0-prim)*shade_alpha+prim, (cmb-0)*shade+0 ** INC **
12729
{0x6b31e4f0, cc__prim_inter_t0_using_shadea__mul_shade},
12730
// F1 World Grand Prix sky. Added by Gonetz
12731
// (env-prim)*shade_alpha+prim, (shade-cmb)*cmb_a+cmb ** INC **
12732
{0x6b350704, cc_f1_sky},
12733
// lullaby, Paper Mario. Added by Gonetz
12734
// (env-prim)*shade_alpha+prim
12735
{0x6b356b35, cc_env_sub_prim_mul_shadea_add_prim},
12736
// Some gannon spell, zelda
12737
// (noise-t0)*env_a+prim, (0-prim)*cmb+1 ** INC **
12738
{0x6c17c03f, cc_one_sub__one_sub_t0_mul_enva_add_prim__mul_prim},
12739
//Goldeneye, [Jeremy]. Added by Gonetz
12740
// (t0-prim)*env_a+prim
12741
{0x6c316c31, cc_t0_sub_prim_mul_enva_add_prim},
12742
// button, Sin and Punishmen. Added by Gonetz
12743
// (env-prim)*env_a+prim
12744
{0x6c356c35, cc_env_sub_prim_mul_enva_add_prim},
12745
// frame buffer effect, Glover2
12746
// (env-prim)*env_a+prim, (cmb-0)*shade+0
12747
{0x6c35e4f0, cc__prim_inter_env_using_enva__mul_shade},
12748
// fallen stars at star summit, Paper Mario. Added by Gonetz
12749
// (t0-env)*env_a+prim, (1-0)*primlod+cmb
12750
{0x6c510ef6, cc_t0_sub_env_mul_enva_add_prim},
12751
// focus, Paper Mario. Added by Gonetz
12752
// (t0-env)*env_a+prim, (cmb-shade)*shadea+shade ** INC **
12753
{0x6c518b40, cc_t0_sub_shade_mul_shadea_add_shade},
12754
// Ring, pokemon stadium 2
12755
// (t0-0)*env_a+prim, (1-0)*cmb+0
12756
{0x6cf1e0f6, cc_t0_mul_enva_add_prim},
12757
// Jet Force
12758
// (noise-0)*env_a+prim
12759
{0x6cf76cf7, cc_prim},
12760
// snowhead temple, zelda 2. Added by Gonetz
12761
// (t1-t0)*primlod+prim, (cmb-0)*shade+shade
12762
{0x6e1284f0, cc__t1_sub_t0_mul_primlod_add_prim__mul_shade_add_shade},
12763
// zelda 2. Added by Gonetz
12764
// (t1-t0)*primlod+prim, (cmb-0)*shade+0 ** INC **
12765
{0x6e12e4f0, cc__t1_sub_t0_mul_primlod_add_prim__mul_shade},
12766
// mini games quiz monitor backround, Pokemon Stadium 2
12767
// (noise-t0)*primlod+prim, (prim-env)*cmb+env ** INC **
12768
{0x6e17a053, cc_prim_sub_env_mul__one_sub_t0_mul_primlod_add_prim__add_env},
12769
// Morning Sun attack, pokemon stadium 2
12770
// (t0-prim)*primlod+prim, (prim-env)*0+cmb
12771
{0x6e311f53, cc_t0_sub_prim_mul_primlod_add_prim},
12772
// sky, daikatana. Added by Gonetz
12773
// (t0-prim)*primlod+prim, (cmb-0)*shade+0
12774
{0x6e31e4f0, cc_t0_mul_shade},
12775
// ball's track, NFL Blitz. Added by Gonetz
12776
// (t0-0)*primlod+prim
12777
{0x6ef16ef1, cc_t0_mul_primlod_add_prim},
12778
// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
12779
// (t0-0)*primlod+prim, (cmb-env)*cmb_a+env ** INC **
12780
{0x6ef1a750, cc_t0_mul_primlod_add_prim},
12781
// mini games quiz monitor backround, Pokemon Stadium 2
12782
// (noise-0)*primlod+prim, (env-cmb)*cmb_a+cmb ** INC **
12783
// use cmb_a which is ac_t0_mul_t1
12784
{0x6ef70705, cc_env_sub_prim_mul__t0a_mul_t1a__add_prim},
12785
// rope, CBFD
12786
// (t0-env)*k5+prim
12787
{0x6f516f51, cc_t0_sub_env_mul_k5_add_prim},
12788
// super bowling
12789
// (0-0)*k5+prim
12790
{0x6fff6fff, cc_prim},
12791
// intro, Aidyn Chronicles. Added by Gonetz
12792
// (0-0)*0+prim, (0-0)*0+prim
12793
{0x79fb7788, cc_prim},
12794
// Encore attack, Pokemon Stadium 2
12795
// (t0-0)*0+prim, (cmb-0)*shade+0
12796
{0x7ff1e4f0, cc_prim_mul_shade},
12797
// Menu, megaman
12798
// (1-0)*0+prim
12799
{0x7ff67ff6, cc_prim},
12800
// sky, PGA European Tour
12801
// (0-0)*0+prim, (env-0)*t0+cmb
12802
{0x7fff01f5, cc_t1_mul_env_add_prim},
12803
// WWF No Mercy?
12804
// ((0-0)*0+prim, (env-cmb)*shade+cmb
12805
{0x7fff0405, cc_env_sub_prim_mul_shade_add_prim},
12806
// sky, Spiderman. Added by Gonetz
12807
// (0-0)*0+prim, (t1-0)*shade+cmb
12808
{0x7fff04f2, cc_t1_mul_shade_add_prim},
12809
// ball's shadow, ISS 2k. Added by Gonetz
12810
// (0-0)*0+prim, (1-cmb)*env+cmb
12811
{0x7fff0506, cc_one_sub_prim_mul_env_add_prim},
12812
// Necklace, quest64
12813
// (0-0)*0+prim, (1-0)*env+cmb
12814
{0x7fff05f6, cc_prim_add_env},
12815
// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
12816
// (0-0)*0+prim, (1-cmb)*cmba+cmb ** INC **
12817
{0x7fff0706, cc_prim},
12818
// Dobutsu no Mori. Added by Gonetz
12819
//(k5-k5)*0+prim, (cmb-0)*0+cmb
12820
{0x7fff1ff0, cc_prim},
12821
// Intro background, starfox
12822
//z (k5-k5)*0+prim
12823
{0x7fff7fff, cc_prim},
12824
// train smoke, Dobutsu No Mori. Added by Gonetz
12825
//(0-0)*0+prim, (shade-0)*cmb+0
12826
{0x7fffe0f4, cc_prim_mul_shade},
12827
// Donald Duck intro. Added by Gonetz
12828
//(0-0)*0+prim, (cmb-0)*prim+0
12829
{0x7fffe3f0, cc_prim_mul_prim},
12830
// Ms. Pac-Man intro. Added by Gonetz
12831
//(0-0)*0+prim, (cmb-0)*shade+0
12832
{0x7fffe4f0, cc_prim_mul_shade},
12833
// zelda 2. Added by Gonetz
12834
//(t1-t0)*t0+shade, (cmb-0)*shade+0
12835
{0x8112e4f0, cc__t1_sub_t0_mul_t0_add_shade__mul_shade},
12836
// branches, Beetle Adventure Racing
12837
//(t0-shade)*t0+shade, (t0-cmb)*prim+cmb **INC**
12838
{0x81410301, cc_t0_mul_prim},
12839
// Namco logo, Famista 64
12840
//(prim-shade)*t0+shade, (env-cmb)*t0+cmb **INC**
12841
{0x81430105, cc_prim_sub_shade_mul_t0_add_shade},
12842
// pikachu, hey you pikachu
12843
//(prim-shade)*t0+shade, (env-cmb)*enva+cmb **INC**
12844
{0x81430c05, cc_prim_sub_shade_mul_t0_add_shade},
12845
// Mario's head, mario //Added by Gonetz
12846
//(prim-shade)*t0+shade
12847
{0x81438143, cc_prim_sub_shade_mul_t0_add_shade},
12848
// Iguana background, turok
12849
// (env-shade)*t0+shade
12850
{0x81458145, cc_env_sub_shade_mul_t0_add_shade},
12851
//attack, Pokemon Stadium 2
12852
// (env-shade)*t0+shade, (cmb-0)*prim+0
12853
{0x8145e3f0, cc__env_sub_shade_mul_t0_add_shade__mul_prim},
12854
// Bubbles in Jabu-Jabu's belly, zelda
12855
// (1-shade)*t0+shade
12856
{0x81468146, cc_one_sub_shade_mul_t0_add_shade},
12857
// saffron city, Pokemon Stadium 2
12858
// (1-shade)*t0+shade, (cmb-0)*prim+0
12859
{0x8146e3f0, cc__one_sub_shade_mul_t0_add_shade__mul_prim},
12860
// duck dodgers intro. Added by Gonetz
12861
// (1-shade)*t0+shade, (cmb-0)*shade+0
12862
{0x8146e4f0, cc__one_sub_shade_mul_t0_add_shade__mul_shade},
12863
// saffron city, Pokemon Stadium 2
12864
// (1-shade)*t0+shade, (cmb-0)*prima+0
12865
{0x8146eaf0, cc__one_sub_shade_mul_t0_add_shade__mul_env},
12866
// intro, Madden Footbal
12867
// (1-env)*t0+shade
12868
{0x81568156, cc_one_sub_env_mul_t0_add_shade},
12869
// sky in doom. Added by Gonetz
12870
// (prim-0)*t0+shade, (cmb-0)*primlod+env **INC**
12871
{0x81f3aef0, cc_t0_mul_prim_add_shade},
12872
// commercial? in IIS98. Added by Gonetz
12873
// (1-0)*t0+shade
12874
{0x81f681f6, cc_t0_add_shade},
12875
//attack, Pokemon Stadium 2
12876
//(t0-prim)*t1+shade
12877
{0x82318231, cc_t0_sub_prim_mul_t1_add_shade},
12878
//beetle adventure racing. Added by Gonetz
12879
//(prim-shade)*t1+shade, (cmb-0)*t1+0 **INC**
12880
{0x8243e2f0, cc_prim_sub_shade_mul_t1_add_shade},
12881
//Arena, Pokemon Stadium 2
12882
//(t0-0)*t1+shade
12883
{0x82f182f1, cc__t0_mul_t1__add_shade},
12884
//Arena, Pokemon Stadium 2
12885
//(t0-0)*t1+shade, (cmb-0)*prim+0
12886
{0x82f1e3f0, cc__t0_mul_t1__mul_prim_add_prim_mul_shade},
12887
// Scorpion fire breath, MK4 [Jeremy]. Added by Gonetz
12888
// (t0-shade)*prim+shade
12889
{0x83418341, cc_t0_mul_prim_add_one_sub_prim_mul_shade},
12890
// Menu background, wwf no mercy
12891
// (env-shade)*prim+shade
12892
{0x83458345, cc_prim_mul_env_add_one_sub_prim_mul_shade},
12893
// Pokemon selection window background, pokemon stadium 2
12894
// (noise-shade)*prim+shade
12895
{0x83478347, cc_shade},
12896
// crown of king of ikana, zelda 2. Added by Gonetz
12897
// (t0-env)*prim+shade
12898
{0x83518351, cc_t0_sub_env_mul_prim_add_shade},
12899
// crown of king of ikana, zelda 2. Added by Gonetz
12900
// (t0-env)*prim+shade, (cmb-0)*cmb+0 ** INC **
12901
{0x8351e0f0, cc_t0_sub_env_mul_prim_add_shade},
12902
// salesman's shirt in the bomb shop in town, zelda 2 [Ogy]. Added by Gonetz
12903
// (t0-env)*prim+shade, (cmb-0)*shade+0 ** INC **
12904
{0x8351e4f0, cc_t0_mul_prim_mul_shade},
12905
// intro, Madden Footbal
12906
// (1-env)*prim+shade
12907
{0x83568356, cc_one_sub_env_mul_prim_add_shade},
12908
// Buss hunter 64. Added by Gonetz
12909
// (t0-0)*prim+shade
12910
{0x83f183f1, cc_t0_mul_prim_add_shade},
12911
// huge water lilies, zelda 2 [Ogy]. Added by Gonetz
12912
// (t0-0)*prim+shade, (cmb-env)*shade+0 ** INC **
12913
{0x83f1e450, cc__t0_mul_prim_add_shade__sub_env_mul_shade},
12914
// cynnabar gym fire shield, pokemon stadium 2
12915
// (t0-0)*prim+shade, (cmb-0)*env+0 ** INC **
12916
{0x83f1e5f0, cc__t0_mul_prim_add_shade__mul_env},
12917
// Objects in arena, pokemon stadium 2
12918
// (t1-0)*prim+shade, (cmb-0)*prim_a+0 - not going to bother with prim_a since it is FF
12919
{0x83f2eaf0, cc_t1_mul_prim_add_shade},
12920
// Pokemon Stadium 2. Added by Gonetz
12921
// (t0-prim)*shade+shade ** INC **
12922
{0x84318431, cc_t0_mul_shade},
12923
// big N, Pokemon Stadium 2. Added by Gonetz
12924
// (1-prim)*shade+shade ** INC **
12925
{0x84368436, cc_one_sub_prim_mul_shade_add_shade},
12926
//Arena, Pokemon Stadium 2
12927
//(t0-env)*shade+shade
12928
{0x84518451, cc_t0_sub_prim_mul_shade_add_shade},
12929
//Arena, Pokemon Stadium 2
12930
//(t0-env)*shade+shade, (cmb-0)*prim+0
12931
{0x8451e3f0, cc_t0_sub_env_mul_prim_mul_shade_add_prim_mul_shade},
12932
// arena, PokemonStadium2, [Raziel64]
12933
// (t0-0)*shade+shade, (cmb-0)*prim+0
12934
{0x84f1e3f0, cc_t0_mul_prim_mul_shade_add_prim_mul_shade},
12935
// Spiderman. Added by Gonetz
12936
// (1-0)*shade+shade
12937
{0x84f684f6, cc_shade_add_shade},
12938
// the "gekko" ( a monster in a room above the 3rd room of woodfall temple }, zelda 2 [Ogy]. Added by Gonetz
12939
// (t0-prim)*env+shade ** INC **
12940
{0x85318531, cc_t0_sub_prim_mul_env_add_shade},
12941
// flower, zelda 2. Added by Gonetz
12942
// (t0-prim)*env+shade, (cmb-0)*shade+0 ** INC **
12943
{0x8531e4f0, cc_t0_sub_prim_mul_env_add_shade},
12944
// Robotron 64, [scorpiove]
12945
// (env-shade)*env+shade ** INC **
12946
{0x85458545, cc_one_sub_env_mul_shade_add_env},
12947
// Enemy dying, quest64
12948
// (1-shade)*env+shade **changed by Gonetz
12949
{0x85468546, cc_one_sub_shade_mul_env_add_shade},
12950
// Arena, Pokemon Stadium
12951
// (t0-0)*env+shade, (cmb-0)*prim+0
12952
{0x85f1e3f0, cc__t0_mul_prim_mul_env__add__prim_mul_shade},
12953
// Clouds, Pokemon Stadium
12954
// (t1-0)*env+shade, (cmb-0)*prim+0
12955
{0x85f2e3f0, cc__t1_mul_prim_mul_env__add__prim_mul_shade},
12956
// Sky, Beetle Adventure Racing ** INC **
12957
//(t0-shade)*t0_a+shade, (env-cmb)*enva+cmb
12958
{0x88410c05, cc_t0_sub_shade_mul_t0a_add_shade},
12959
// Mario's eyes, mario
12960
//z (t0-shade)*t0_a+shade
12961
{0x88418841, cc_t0_sub_shade_mul_t0a_add_shade},
12962
//beetle adventure racing. Added by Gonetz
12963
// (prim-shade)*t0_a+shade, (t1-0)*cmb+0 **INC**
12964
{0x8843e0f2, cc_prim_sub_shade_mul__t0a_mul_t1__add_shade},
12965
// blast corps [Ogy]
12966
// (prim-shade)*t1_a+shade
12967
{0x89438943, cc_prim_sub_shade_mul_t1a_add_shade},
12968
//broken wall, beetle adventure racing. Added by Gonetz
12969
// (t0-shade)*prima+shade, (1-0)*0+cmb
12970
{0x8a411ff6, cc_t0_sub_shade_mul_prima_add_shade},
12971
// menu, battle phoenix 64. Added by Gonetz
12972
// (t0-shade)*prima+shade
12973
{0x8a418a41, cc_t0_add_shade},
12974
// intro, castlevania 2. Added by Gonetz
12975
// (prim-shade)*prim_a+shade
12976
{0x8a438a43, cc_prim_sub_shade_mul_prima_add_shade},
12977
// Pilot wings
12978
// (t0-shade)*shade_a+shade, (cmb-0)*shade+0
12979
{0x8b41e4f0, cc__shade_inter_t0_using_shadea__mul_shade},
12980
// ?
12981
// (1-shade)*shade_a+shade
12982
{0x8b468b46, cc_one_sub_shade_mul_shadea_add_shade},
12983
// Pilot wings, sky in congratulations
12984
// (t0-0)*shade_a+shade,
12985
{0x8bf18bf1, cc_t0_mul_shadea_add_shade},
12986
// arena, Pokemon Stadium. Added by Gonetz
12987
// (t0-t1)*env_a+shade, (cmb-env)*prim+0 ** INC **
12988
{0x8c21e350, cc__t0_sub_t1_mul_enva_add_shade__sub_env_mul_prim},
12989
//diddy kong racing background fill. Added by Gonetz ** Modified by Dave2001
12990
// (env-shade)*env_a+shade, (cmb-0)*prim+0
12991
{0x8c458c45, cc_shade}, // note: previous combiner used other_alpha; doesn't work
12992
//diddy kong racing. Added by Gonetz
12993
// (env-shade)*env_a+shade, (cmb-0)*prim+0 ** INC **
12994
{0x8c45e3f0, cc_prim_mul_shade},
12995
// sky, Pokemon Stadium, [Raziel64]
12996
// (t0-0)*env_a+shade, (cmb-env)*prim+0 ** INC **
12997
{0x8cf1e350, cc_t0_mul_prim_add_shade_sub_env_mul_prim},
12998
// zelda 2 [Ogy]. Added by Gonetz
12999
// (t0-prim)*primlod+shade, (prim-env)*cmb+env ** INC **
13000
{0x8e31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_shade__add_env},
13001
// fallen leaves, Dobutsu no Mori. Added by Gonetz
13002
// (t0-shade)*primlod+shade, (prim-env)*cmb+env ** INC **
13003
{0x8e41a053, cc_prim_sub_env_mul__t0_sub_shade_mul_primlod_add_shade__add_env},
13004
// the icicle above the part just before the entrance to the mountain village, zelda 2 [Ogy]. Added by Gonetz
13005
// (t0-prim)*0+shade, (prim-env)*cmb+env ** INC ** ?
13006
{0x9f31a053, cc_prim_sub_env_mul_shade_add_env},
13007
// background on level 3-1, kirby 64 [Raziel64]. Added by Gonetz
13008
// (0-env)*0+shade
13009
{0x9f5f9f5f, cc_shade},
13010
// Spotlight, smash bros
13011
// (1-0)*0+shade
13012
{0x9ff69ff6, cc_shade},
13013
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13014
// (0-0)*0+shade, (cmb-cmb)*cmb+cmb
13015
{0x9fff0000, cc_shade},
13016
// menu, Dr.Mario. Added by Gonetz
13017
// (0-0)*0+shade, (prim-cmb)*env+cmb
13018
{0x9fff0503, cc_prim_sub_shade_mul_env_add_shade},
13019
// pikachu, hey you pikachu. Added by Gonetz
13020
// (0-0)*0+shade, (env-cmb)*enva+cmb
13021
{0x9fff0c05, cc_env_sub_shade_mul_enva_add_shade},
13022
// mega shock, paper mario
13023
//(0-0)*0+shade, (env-prim)*cmb+prim
13024
{0x9fff6035, cc_env_sub_prim_mul_shade_add_prim},
13025
// Super Mario 64 logo background
13026
//z (k5-k5)*0+shade
13027
{0x9fff9fff, cc_shade},
13028
// Zelda 2 final movie. Added by Gonetz
13029
// (0-0)*0+shade, (prim-0)*cmb+0
13030
{0x9fffe0f3, cc_prim_mul_shade},
13031
// tree shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13032
// (0-0)*0+shade, (env-0)*cmb+0
13033
{0x9fffe0f5, cc_env_mul_shade},
13034
// N64 logo, Aidyn Chronicles. Added by Gonetz
13035
// (0-0)*0+shade, (cmb-0)*prim+0
13036
{0x9fffe3f0, cc_prim_mul_shade},
13037
// Hand, smash bros
13038
// (0-0)*0+shade, (cmb-0)*env+0
13039
{0x9fffe5f0, cc_env_mul_shade},
13040
// Lave piranha atack, Paper Mario
13041
// (t1-t0)*t0+env, (cmb-t1)*t0+prim ** INC **
13042
{0xa1126120, cc__t0_mul_t1__mul_env_add_prim},
13043
//Arena, Pokemon Stadium 2
13044
// (t1-prim)*t0+env, (cmb-0)*shade+0
13045
{0xa132e4f0, cc__t1_sub_prim_mul_t0_add_env__mul_shade},
13046
// Kirby64 end [Raziel64]. Added by Gonetz
13047
// (prim-shade)*t0+env
13048
{0xa143a143, cc_prim_sub_shade_mul_t0_add_env},
13049
// Superman [scorpiove]. Added by Gonetz
13050
// (t0-env)*t0+env
13051
{0xa151a151, cc_t0_sub_env_mul_t0_add_env},
13052
// powder keg, zelda 2. Added by Gonetz
13053
// (prim-env)*t0+env, (0-0)*shade_a+cmb
13054
{0xa1530bff, cc__prim_sub_env_mul_t0_add_env__add_shadea},
13055
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
13056
// (prim-env)*t0+env, (0-0)*prim_lod+cmb
13057
{0xa1530ef6, cc__prim_sub_env_mul_t0_add_env__add_primlod},
13058
//attack, Pokemon Stadium 2
13059
// (prim-env)*t0+env, (0-0)*prim_lod+cmb
13060
{0xa1530eff, cc_prim_sub_env_mul_t0_add_env},
13061
// Kotake & koume defeated, going into sky, zelda
13062
// (prim-env)*t0+env, (prim-env)*0+cmb
13063
{0xa1531f53, cc_prim_sub_env_mul_t0_add_env},
13064
// water, Dobutsu no Mori. Added by Gonetz
13065
// (prim-env)*t0+env, (cmb-0)*shade+t0
13066
{0xa15324f0, cc_t0_add_shade_mul_env},
13067
//sky, beetle adventure racing. Added by Gonetz
13068
// (prim-env)*t0+env, (cmb-shade)*t1+shade **INC** can't be done in one step
13069
{0xa1538240, cc__env_inter_prim_using_t0__sub_shade_mul_t0a_add_shade},
13070
//couple's mask, zelda2. Added by Gonetz
13071
// (prim-env)*t0+env, (prim-cmb)*shade+shade **INC** can't be done in one step
13072
{0xa1538403, cc_t0_mul_shade},
13073
// stadium, Pokemon Stadium 2. Added by Gonetz
13074
// (prim-env)*t0+env, (cmb-0)*shade+shade **INC** can't be done in one step
13075
{0xa15384f0, cc_t0_mul_shade},
13076
//clothes on girl in inn, zelda2. Added by Gonetz
13077
// (prim-env)*t0+env, (cmb-prim)*env+shade **INC** can't be done in one step
13078
{0xa1538530, cc_t0_mul_env_add_shade},
13079
// Getting light arrows for the first time, zelda
13080
// (prim-env)*t0+env, (prim-env)*cmb+env ** INC **
13081
{0xa153a053, cc_prim_sub_env_mul_t0_add_env},
13082
// Fire, starfox
13083
// (prim-env)*t0+env
13084
{0xa153a153, cc_prim_sub_env_mul_t0_add_env},
13085
// a spell, Fushigi no Dungeon: Fuurai no Shiren 2
13086
// (prim-env)*t0+env, (cmb-env)*enva+env
13087
{0xa153ac50, cc_prim_sub_env_mul__t0_mul_enva__add_env},
13088
// wizrobe's attack, zelda 2. Added by Gonetz.
13089
// (prim-env)*t0+env, (cmb-0)*cmb+0
13090
{0xa153e0f0, cc_prim_sub_env_mul_t0_add_env},
13091
// dress, zelda 2. Added by Gonetz.
13092
// also for Great Farie's hair - changed to use texture mod by Dave2001.
13093
// (prim-env)*t0+env, (shade-0)*cmb+0
13094
{0xa153e0f4, cc__env_inter_prim_using_t0__mul_shade},
13095
// Start menu, paper mario
13096
// (prim-env)*t0+env, (cmb-0)*t0+0
13097
{0xa153e1f0, cc_prim_sub_env_mul_t0_add_env},
13098
// {0xa153e0f4, cc_prim_sub_env_mul_t0_add_env},
13099
// Jellyfish tentacles in Jabu-Jabu's belly, zelda
13100
// (prim-env)*t0+env, (cmb-0)*prim+0
13101
{0xa153e3f0, cc__env_inter_prim_using_t0__mul_prim},
13102
// Dust, zelda
13103
//z (prim-env)*t0+env, (cmb-0)*shade+0 ** INC **
13104
{0xa153e4f0, cc__env_inter_prim_using_t0__mul_shade},
13105
//{0xa153e4f0, cc_prim_sub_env_mul_t0_add_env},
13106
// roof, Kirby 64. Added by Gonetz
13107
// (prim-env)*t0+env, (cmb-0)*env+0 ** INC **
13108
{0xa153e5f0, cc_prim_sub_env_mul_t0_add_env},
13109
// hall of fame, Pokemon Stadium
13110
// (prim-env)*t0+env, (cmb-0)*primlod+0
13111
{0xa153eef0, cc__prim_sub_env_mul_t0_add_env__mul_primlod},
13112
// Something weird in intro, monster truck madness
13113
// (prim-env)*t0+env, (cmb-0)*k5+0
13114
{0xa153eff0, cc__prim_sub_env_mul_t0_add_env__mul_k5},
13115
// clothes, kirby 64. Added by Gonetz
13116
// (shade-env)*t0+env
13117
{0xa154a154, cc_shade_sub_env_mul_t0_add_env},
13118
// field, Derby Stallion
13119
// (shade-env)*t0+env, (cmb-0)*prim+0 ** INC **
13120
{0xa154e3f0, cc_shade_sub_env_mul_t0_mul_prim_add_prim_mul_env},
13121
// background, level 3-5, kirby 64, [Raziel64]
13122
// (shade-env)*t0+env, (cmb-0)*shade+0 ** INC **
13123
{0xa154e4f0, cc_shade_sub_env_mul_t0_add_env},
13124
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
13125
// (one-env)*t0+env
13126
{0xa156a156, cc_one_sub_env_mul_t0_add_env},
13127
// Arena, Pokemon Stadium 2.
13128
// (one-env)*t0+env, (cmb-0)*shade+0
13129
{0xa156e4f0, cc__env_inter_one_using_t0__mul_shade},
13130
//Arena, Pokemon Stadium 2
13131
// (t1-0)*t0+env, (cmb-0)*cmb+0 ** INC **
13132
{0xa1f2e0f0, cc__t0_mul_t1__add_env_mul__t0_mul_t1__add_env},
13133
// quake 2 intro
13134
// (prim-0)*t0+env, (prim-0)*primlod+cmb ** INC **
13135
{0xa1f30ef3, cc_t0_mul_prim_add_env},
13136
// Kotake or koume's hair, zelda
13137
// (prim-0)*t0+env
13138
{0xa1f3a1f3, cc_t0_mul_prim_add_env},
13139
// track, ridge racer. Added by Gonetz
13140
// (t0-env)*t1+env, (cmb-0)*shade+0 ** INC **
13141
{0xa251e4f0, cc__t0_mul_t1__mul_shade},
13142
// lava, beetle adventure racing
13143
// (t0-env)*t1+env, (cmb-0)*enva+0 ** INC **
13144
{0xa251ecf0, cc__t0_mul_t1__mul_enva},
13145
// Ded Moroz, Paper Mario
13146
// (prim-env)*t1+env, (1-cmb)*t1+cmb ** INC **
13147
{0xa2530206, cc_prim_sub_env_mul_t1_add_env},
13148
// text, monster truck madness
13149
// (prim-env)*t1+env
13150
{0xa253a253, cc_prim_sub_env_mul_t1_add_env},
13151
// car position, Top Gear Rally. Added by Gonetz
13152
// (prim-env)*t1+env, (cmb-t0)*t1+0 ** INC **
13153
{0xa253e210, cc_prim_sub_env_mul_t1_add_env_mul_t0},
13154
// text, Top Gear Rally. Added by Gonetz
13155
// (prim-env)*t1+env, (cmb-0)*t1+0 ** INC **
13156
{0xa253e2f0, cc_prim_sub_env_mul_t1_add_env_mul_t0},
13157
// {0xa253e2f0, cc_prim_sub_env_mul_t1_add_env},
13158
// a pole in the cut-scene that appears after you receive odolwa's mask, zelda 2 [Ogy]. Added by Gonetz
13159
// (prim-env)*t1+env, (cmb-0)*shade+0 ** INC **
13160
{0xa253e4f0, cc_t1_mul_prim_mul_shade},
13161
// Quake 2 intro. Added by Gonetz
13162
// (t0-0)*t1+env, (t0-0)*primlod+cmb ** INC **
13163
{0xa2f10ef1, cc__t0_mul_t1__add_env},
13164
// silver cave, pokemon stadium 2
13165
// (t0-0)*t1+env, (cmb-prim)*shadea+prim
13166
{0xa2f16b30, cc_prim_inter__t0_mul_t1_add_env__using_shadea},
13167
// silver cave, pokemon stadium 2
13168
// (t0-0)*t1+env, (cmb-0)*shadea+shade
13169
{0xa2f18bf0, cc__t0_mul_t1_add_env__mul_shadea_add_shade},
13170
// Quake64. Added by Gonetz
13171
// (t0-0)*t1+env
13172
{0xa2f1a2f1, cc__t0_mul_t1__add_env},
13173
// Quake II. Added by Gonetz ** INC **
13174
// (t0-0)*t1+env, (cmb-0)*prim+env
13175
{0xa2f1a3f0, cc__t0_mul_t1__mul_prim_add_env},
13176
// Dr Mario [Ogy]. Added by Gonetz
13177
// (t0-env)*prim+env
13178
// {0xa351a351, cc_t0_mul_prim_add_env},
13179
{0xa351a351, cc_t0_sub_env_mul_prim_add_env},
13180
// menu, Dr.Mario. Added by Gonetz
13181
// (prim-env)*prim+env
13182
{0xa353a353, cc_prim_sub_env_mul_prim_add_env},
13183
// Razor sword, zelda 2. Added by Gonetz
13184
// (shade-env)*prim+env, (cmb-0)*shade+0 ** INC **
13185
{0xa354e4f0, cc_shade_sub_env_mul_prim_add_env},
13186
// bomberman 64-2 intro. Added by Gonetz
13187
// (1-env)*prim+env
13188
{0xa356a356, cc_one_sub_env_mul_prim_add_env},
13189
// thing that escapes from the well, zelda
13190
// (noise-env)*prim+env
13191
{0xa357a357, cc_prim_add_env},
13192
// Bongo Bongo, zelda
13193
// (noise-env)*prim+env, (cmb-0)*shade+0
13194
{0xa357e4f0, cc_env_mul_shade},
13195
// paper mario. Added by Gonetz
13196
// (t0-0)*prim+env
13197
{0xa3f1a3f1, cc_t0_mul_prim_add_env},
13198
// paper mario. Added by Gonetz
13199
// (t0-0)*prim+env, (t0-env)*prim+0
13200
{0xa3f1e351, cc_t0_mul_prim_add_env},
13201
// paper mario. Added by Gonetz
13202
// (t0-0)*prim+env, (t0-0)*prim+0
13203
{0xa3f1e3f1, cc_t0_mul_prim},
13204
// mahogany town statue, Pokemon Stadium 2
13205
// (t0-0)*prim+env, (cmb-0)*shade+0
13206
{0xa3f1e4f0, cc__t0_mul_prim_add_env__mul_shade},
13207
// squirt, paper mario. Added by Gonetz
13208
// (t1-0)*prim+env, (1-cmb)*t1+cmb
13209
{0xa3f20206, cc_t1_mul_prim_add_env},
13210
// paper mario. Added by Gonetz
13211
// (shade-0)*prim+env
13212
{0xa3f4a3f4, cc_prim_mul_shade_add_env},
13213
// Sharpen attack, pokemon stadium 2
13214
// (shade-0)*prim+env, (cmb-0)*shade+0
13215
{0xa3f4e4f0, cc__prim_mul_shade_add_env__mul_shade},
13216
// Doraemon 2. Added by Gonetz
13217
// (1-0)*prim+env
13218
{0xa3f6a3f6, cc_prim_add_env},
13219
// Pokemon Stadium 2, [Jeremy]. Added by Gonetz
13220
// (noise-0)*prim+env ** INC ** ?
13221
{0xa3f7a3f7, cc_prim_add_env},
13222
// monsters, Pokemon Stadium. Added by Gonetz
13223
// (t0-t1)*shade+env, (cmb-0)*prim+0 ** INC **
13224
{0xa421e3f0, cc__t0_sub_t1__mul_prim_mul_shade_add_prim_mul_env},
13225
// background, pokemon stadium 2
13226
// (t0-prim)*shade+env
13227
{0xa431a431, cc_t0_sub_prim_mul_shade_add_env},
13228
// Arena, pokemon stadium 2
13229
// (t0-prim)*shade+env, (cmb-0)*shade+0
13230
{0xa431e4f0, cc__t0_sub_prim_mul_shade_add_env__mul_shade},
13231
// Trophy, pokemon stadium 2
13232
// (t0-prim)*shade+env, (cmb-0)*shade_a+0
13233
{0xa431ebf0, cc__t0_sub_prim_mul_shade_add_env__mul_shadea},
13234
// Buildings, pokemon stadium 2
13235
// (t1-prim)*shade+env
13236
{0xa432a432, cc_t1_sub_prim_mul_shade_add_env},
13237
// bomberman 64 [Ogy]
13238
// (t0-env)*shade+env
13239
{0xa451a451, cc_t0_mul_shade_add_env},
13240
// kirby drill, kirby 64. Added by Gonetz
13241
// (prim-env)*shade+env
13242
{0xa453a453, cc_prim_sub_env_mul_shade_add_env},
13243
// ball, ISS98 intro. Added by Gonetz
13244
// (t0-0)*shade+env
13245
{0xa4f1a4f1, cc_t0_mul_shade_add_env},
13246
// waterfall, Dobutsu_no_Mori
13247
// (prim-0)*shade+env, (t0-0)*primlod+cmb
13248
{0xa4f30ef1, cc_t0_mul_primlod_add_prim_mul_shade_add_env},
13249
// waterfall, Dobutsu_no_Mori
13250
// (prim-0)*shade+env, (t1-0)*primlod+cmb
13251
{0xa4f30ef2, cc_t1_mul_primlod_add_prim_mul_shade_add_env},
13252
// score, ISS98 intro. Added by Gonetz
13253
// (prim-0)*shade+env
13254
{0xa4f3a4f3, cc_prim_mul_shade_add_env},
13255
// magic fist, Rayman2. Added by Gonetz
13256
// (env-0)*shade+env
13257
{0xa4f5a4f5, cc_env_mul_shade_add_env},
13258
// gunfire, Quake64. Added by Gonetz
13259
// (1-0)*shade+env
13260
{0xa4f6a4f6, cc_env_add_shade},
13261
// flame, Paper Mario. Added by Gonetz
13262
// (t0-center)*scale+env, (0-prim)*cmb+env
13263
{0xa661a03f, cc_env_sub__t0_mul_scale_add_env__mul_prim},
13264
// N64 BIOS
13265
// (t0-env)*t0_a+env, cmb*shade
13266
{0xa851e0f4, cc__env_inter_t0_using_t0a__mul_shade},
13267
// pink car, f-zero x
13268
// (t0-env)*t0_a+env, cmb*shade
13269
{0xa851e4f0, cc__env_inter_t0_using_t0a__mul_shade},
13270
// PokemonStadium1, [Raziel64]
13271
// (prim-env)*t0_a+env, (cmb-cmb)*cmb+cmb
13272
{0xa8530000, cc_prim_sub_env_mul_t0a_add_env},
13273
// N64 logo, Ogre Battle
13274
// (prim-env)*t0_a+env
13275
{0xa853a853, cc_prim_sub_env_mul_t0a_add_env},
13276
// Mud Slap, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
13277
// (prim-env)*t0_a+env, (cmb-0)*cmb+0
13278
{0xa853e0f0, cc_prim_sub_env_mul_t0a_add_env},
13279
// Tree background, mace
13280
// (prim-env)*t0_a+env, (cmb-0)*t0+0
13281
{0xa853e1f0, cc__env_inter_prim_using_t0a__mul_t0},
13282
//attack, Pokemon Stadium 2
13283
// (prim-env)*t0_a+env, (cmb-0)*prim+0
13284
{0xa853e3f0, cc__env_inter_prim_using_t0a__mul_prim},
13285
// logo, Deadly Arts. Added by Gonetz
13286
// (prim-env)*t1_a+env
13287
{0xa953a953, cc_prim_sub_env_mul_t1a_add_env},
13288
// MarioGolf text "Birdie Put"
13289
// (t0-env)*prim_a+env
13290
{0xaa51aa51, cc_t0_sub_env_mul_prima_add_env},
13291
// N64 BIOS
13292
// (t0-env)*prim_a+env, (shade-0)*cmb+0
13293
{0xaa51e0f4, cc__env_inter_t0_using_prima__mul_shade},
13294
// N64 BIOS
13295
// (prim-env)*prima+env, (shade-0)*cmb+0
13296
{0xaa53e0f4, cc__env_inter_prim_using_prima__mul_shade},
13297
// Girl, PD intro. Added by Gonetz
13298
// (t0-env)*shade_alpha+env, (cmb-0)*shade+0 ** INC **
13299
{0xab51e4f0, cc__env_inter_t0_using_shadea__mul_shade},
13300
// Some gannon spell, zelda
13301
// (prim-env)*shade_alpha+env
13302
{0xab53ab53, cc_prim_sub_env_mul_shadea_add_env},
13303
//Arena, Pokemon Stadium 2
13304
// (t0-0)*shade_alpha+env, (cmb-0)*shade+prim
13305
{0xabf164f0, cc__t0_mul_shadea_add_env__mul_shade_add_prim},
13306
// Boxes, Taz express. Added by Gonetz
13307
// (t0-env)*env_a+env
13308
{0xac51ac51, cc_t0_sub_env_mul_enva_add_env},
13309
// paper mario. Added by Gonetz
13310
// (t0-env)*env_a+env, (cmb-0)*shade+0 **INC**
13311
{0xac51e4f0, cc_t0_mul_env_mul_shade},
13312
// goal, Monster Truck Madness 64
13313
// (noise-0)*env_a+env, (cmb-0)*t1+0 **INC**
13314
{0xacf7e2f0, cc_t1_mul_env},
13315
// sword on forge, zelda 2. Added by Gonetz
13316
// (t1-t1)*lodf+env, (t1-t0)*cmb+prim
13317
{0xae226012, cc__t1_sub_t0__mul_env_add_prim},
13318
// menu background, Pokemon Stadium 2, [Raziel64]
13319
// (t0-prim)*lodf+env
13320
{0xae31ae31, cc_t0_sub_prim_mul_primlod_add_env},
13321
// odd mushroom, zelda oot. Added by Gonetz
13322
// (t0-shade)*lodf+env, (prim-env)*cmb+env ** INC **
13323
{0xae41a053, cc__env_inter_prim_using__t0_sub_shade_mul_primlod_add_env},
13324
// {0xae41a053, cc_prim_sub_env_mul__t0_mul_shade__add_env},
13325
// Morning Sun, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
13326
// (t0-env)*lodf+env, (cmb-0)*prim+0
13327
{0xae51e3f0, cc__env_inter_t0_using_primlod__mul_prim},
13328
//Spacestation Silicon Valley intro. Added by Gonetz
13329
// (prim-env)*lodf+env
13330
{0xae53ae53, cc_env_inter_prim_using_primlod},
13331
// Doom, intro. Added by Gonetz
13332
// (t0-0)*lodf+env, (t0-0)*lodf+env
13333
{0xaef1aef1, cc_t0_add_env},
13334
// Dobutsu no Mori. Added by Gonetz
13335
// (prim-0)*lodf+env
13336
{0xaef3aef3, cc_prim_add_env},
13337
// forest behind window, Dobutsu no Mori. Added by Gonetz
13338
// (prim-0)*prim_lod+env, (t1-0)*cmb+0
13339
{0xaef3e0f2, cc_t0_mul__prim_mul_primlod_add_env },
13340
// tony hawks 2 menu
13341
// (t0-rnv)*k5+env, (cmb-t1)*t1_a+t1 ** INC ** (correct combiner does not work because of black t1)
13342
{0xaf514920, cc_t0_sub_env_mul_k5_add_env},
13343
// intro, Mission Impossible. Added by Gonetz
13344
// (k5-k5)*0+env, (0-0)*scale+env
13345
{0xbfffa6ff, cc_env},
13346
// Something blocking the screen, waverace
13347
//z (k5-k5)*0+env
13348
{0xbfffbfff, cc_env},
13349
// Derby Stallion . Added by Gonetz
13350
// (0-0)*0+env, (cmb-0)*prim+0
13351
{0xbfffe3f0, cc_prim_mul_env},
13352
// zelda 2 [Ogy]. Added by Gonetz
13353
// (k5-k5)*0+env, ((cmb-0)*shade+0
13354
{0xbfffe4f0, cc_env_mul_shade},
13355
// flame, paper mario. Added by Gonetz
13356
// (t0-t1)*t0+1, (0-prim)*cmb+env **INC** weird
13357
{0xc121a03f, cc__t0_inter_t1_using_half__mul_prim_add_env},
13358
// tube near big monster on level 5, Kirby64 [Raziel64]
13359
// (prim-env)*t0+1, (cmb-0)*shade+0 ** INC **
13360
{0xc153e4f0, cc_prim_sub_env_mul_t0_mul_shade},
13361
// paper mario. Added by Gonetz
13362
// (0-env)*t0+1, (prim-cmb)*t0+prim **INC**
13363
{0xc15f6103, cc_env_sub_prim_mul_t0_add_prim},
13364
// HAL, smash bros
13365
// (0-0)*0+1
13366
{0xdfffdfff, cc_one},
13367
// arena, Pokemon Stadium 1, [Raziel64]
13368
// (0-0)*0+1, (cmb-0)*prim+0
13369
{0xdfffe3f0, cc_prim},
13370
// skis, Spacestation Silicon Valley. Added by Gonetz
13371
// (shade-0)*cmb+0, (t1-t0)*primlod+t0
13372
{0xe0f42d12, cc_t0_inter_t1_using_primlod},
13373
// paper mario. Added by Gonetz
13374
// (1-t1)*t0+0, (env-prim)*cmb+prim ** INC **
13375
{0xe1266035, cc_env_sub_prim_mul__t0_mul_t1__add_prim},
13376
// ground, zelda 2. Added by Gonetz.
13377
// (t1-prim)*t0+0, (cmb-0)*shade+0
13378
{0xe132e4f0, cc__t1_sub_prim_mul_t0__mul_shade},
13379
// carmagedon
13380
// (shade-prim)*t0+0
13381
{0xe134e134, cc_shade_sub_prim_mul_t0},
13382
// skeleton, castlevania 2. Added by Gonetz
13383
// (1-prim)*t0+0, (cmb-0)*shade+0
13384
{0xe136e4f0, cc_t0_mul_1mprim_mul_shade},
13385
// Starshot logo. Added by Gonetz
13386
// (shade-env)*t0+0, (1-0)*cmb+cmb
13387
{0xe15400f6, cc_shade_sub_env_mul_t0},
13388
// Kirby morfing, smash bros. Added by Gonetz
13389
// (shade-env)*t0+0
13390
{0xe154e154, cc_shade_sub_env_mul_t0},
13391
// menu, PGA euro tour. Added by Gonetz
13392
// (1-env)*t0+0
13393
{0xe156e156, cc_one_sub_env_mul_t0},
13394
// paper mario. Added by Gonetz
13395
// (t0-0)*t0+0, (1-cmb)*prim+cmb
13396
{0xe1f10306, cc_one_sub_t0_mul_prim_add_t0},
13397
// F1 World Grand Prix. Added by Gonetz
13398
// (t0-0)*t0+0, (shade-prim)*cmb+prim
13399
{0xe1f16034, cc_shade_sub_prim_mul_t0_add_prim},
13400
// paper mario. Added by Gonetz
13401
// (t0-0)*t0+0, (env-prim)*cmb+prim
13402
{0xe1f16035, cc_env_sub_prim_mul_t0_add_prim},
13403
// sparkles, F1 World Grand Prix. Added by Gonetz
13404
// (t0-0)*t0+0, (1-prim)*cmb+prim
13405
{0xe1f16036, cc_one_sub_prim_mul_t0_add_prim},
13406
// rocket team basket, Pokemon Stadium 2
13407
// (t0-0)*t0+0, (cmb-prim)*shade+shade
13408
{0xe1f18430, cc__t0_mul_t0__sub_prim_mul_shade_add_shade},
13409
// Tony Hawk's Pro Skater. Added by Gonetz
13410
// (t0-0)*t0+0, (cmb-0)*t0+0
13411
{0xe1f1e1f0, cc_t0},
13412
// something in upper left corner, mario tennis
13413
// (t0-0)*t0+0
13414
{0xe1f1e1f1, cc_t0},
13415
// zelda 2. Added by Gonetz
13416
// (t0-0)*t0+0, (cmb-0)*prim+0
13417
{0xe1f1e3f0, cc_t0_mul_prim},
13418
// zelda 2 final movie. Added by Gonetz
13419
// (t0-0)*t0+0, (cmb-0)*shade+0
13420
{0xe1f1e4f0, cc_t0_mul_shade},
13421
// paper mario. Added by Gonetz
13422
// (t0-t1)*t0+1, (env-cmb)*prima+cmb ** INC **
13423
{0xe1f20a05, cc_t1_mul_prima},
13424
// terrain, SCARS. Added by Gonetz
13425
// (t1-0)*t0+0, (env-prim)*cmb+prim
13426
{0xe1f26035, cc_env_sub_prim_mul__t0_mul_t1__add_prim},
13427
// Trees, Zelda 2
13428
// (t1-0)*t0+0, (cmb-0)*shade+prim
13429
{0xe1f264f0, cc__t0_mul_t1__mul_shade_add_prim},
13430
// terrain, SCARS. Added by Gonetz
13431
// (t1-0)*t0+0, (env-shade)*cmb+shade
13432
{0xe1f28045, cc_env_sub_shade_mul__t0_mul_t1__add_shade},
13433
// arena, Pokemon Stadium 2. Added by Gonetz
13434
// (t1-0)*t0+0, (cmb-prim)*shade+shade ** INC **
13435
{0xe1f28430, cc__t0_mul_t1__sub_prim_mul_shade_add_shade},
13436
// arena, Pokemon Stadium 2
13437
// (t1-0)*t0+0, (cmb-env)*shade+shade
13438
{0xe1f28450, cc__t0_mul_t1__sub_env_mul_shade_add_shade},
13439
// Zelda 2, [Ogy]. Added by Gonetz
13440
// (t1-0)*t0+0, (cmb-prim)*env+shade ** INC **
13441
{0xe1f28530, cc__t0_mul_t1__sub_prim_mul_env_add_shade},
13442
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
13443
// (t1-0)*t0+0, (prim-env)*cmb+env
13444
{0xe1f2a053, cc_prim_sub_env_mul__t0_mul_t1__add_env},
13445
// paper mario. Added by Gonetz
13446
// (t1-0)*t0+0, (cmb-0)*prim+env
13447
{0xe1f2a3f0, cc__t0_mul_t1__mul_prim_add_env},
13448
// Sand, pokemon stadium 2
13449
// (t1-0)*t0+0, (cmb-prim)*shade+env ** INC **
13450
{0xe1f2a430, cc__t0_mul_t1__mul_shade},
13451
// grass, Mission Impossible. Added by Gonetz
13452
// (t1-0)*t0+0, (shade-0)*cmb+0
13453
{0xe1f2e0f4, cc__t0_mul_t1__mul_shade},
13454
// flag, Monako Grand Prix
13455
// (t1-0)*t0+0
13456
{0xe1f2e1f2, cc_t0_mul_t1},
13457
// lighthouse's beam, zelda 2. Added by Gonetz
13458
// (t1-0)*t0+0, (cmb-0)*prim+0
13459
{0xe1f2e3f0, cc__t0_mul_t1__mul_prim},
13460
// Bottom of wings, pilotwings
13461
// (t1-0)*t0+0, (cmb-0)*shade+0
13462
{0xe1f2e4f0, cc__t0_mul_t1__mul_shade},
13463
// zelda 2. Added by Gonetz
13464
// (t1-0)*t0+0, (cmb-0)*prima+0
13465
{0xe1f2eaf0, cc__t0_mul_t1__mul_prima},
13466
// lava, Roadsters. Added by Gonetz
13467
// (prim-0)*t0+0, (1-prim)*t0+cmb
13468
{0xe1f30136, cc_t0},
13469
// sky, Pokemon Stadium 2. Added by Gonetz
13470
// (prim-0)*t0+0, (cmb-0)*shadea+env
13471
{0xe1f3abf0, cc_t0_mul_prim_mul_shadea_add_env},
13472
// cars, Indy Racing 2000. Added by Gonetz
13473
// (prim-0)*t0+0, (shade-0)*cmb+0
13474
{0xe1f3e0f4, cc_t0_mul_prim_mul_shade},
13475
// Sign shadows, zelda
13476
//z (prim-k5)*t0+cmb_a
13477
{0xe1f3e1f3, cc_t0_mul_prim},
13478
// Table, mace
13479
// (prim-0)*t0+0, (cmb-0)*shade+0
13480
{0xe1f3e4f0, cc_t0_mul_prim_mul_shade},
13481
// Gauntlet Legends intro
13482
// (prim-0)*t0+0, (cmb-0)*prima+0
13483
{0xe1f3eaf0, cc_t0_mul_prim_mul_prima},
13484
// walls, beetle adventure racing. Added by Gonetz
13485
// (shade-0)*t0+0, (prim-0)*t0+cmb
13486
{0xe1f401f3, cc_t0_mul_shade},
13487
// cars, ridge racer. Added by Gonetz
13488
// (shade-0)*t0+0, (prim-cmb)*cmb_a+cmb **INC**
13489
{0xe1f40703, cc_t0_mul_shade},
13490
// water block, Paper Mario. Added by Gonetz
13491
// (shade-0)*t0+0, (prim-env)*cmb+env
13492
{0xe1f4a053, cc_prim_sub_env_mul__t0_mul_shade__add_env},
13493
// a lot in TWINE. Added by Gonetz
13494
// (shade-0)*t0+0, (cmb-0)*prim+env
13495
{0xe1f4a3f0, cc_t0_mul_prim_mul_shade_add_env},
13496
// Xena. Added by Gonetz
13497
// (shade-0)*t0+0, (env-0)*cmb+0
13498
{0xe1f4e0f5, cc_t0_mul_env_mul_shade},
13499
// Starshot logo. Added by Gonetz
13500
// (shade-0)*t0+0, (1-0)*cmb+0
13501
{0xe1f4e0f6, cc_t0_mul_shade},
13502
// Duck Dodgers intro. Added by Gonetz
13503
// (shade-0)*t0+0
13504
{0xe1f4e1f4, cc_t0_mul_shade},
13505
// shadow, Mission Impossible. Added by Gonetz
13506
// (shade-0)*t0+0, (cmb-0)*prim+0
13507
{0xe1f4e3f0, cc_t0_mul_prim_mul_shade},
13508
// Tony Hawk's Pro Skater 3. Added by Gonetz
13509
// (env-0)*t0+0, (t1-0)*shade+cmb ** INC **
13510
{0xe1f504f2, cc__t0_add_t1__mul_shade},
13511
// text, tonic trouble. Added by Gonetz
13512
// (env-0)*t0+0
13513
{0xe1f5e1f5, cc_t0_mul_env},
13514
// powder keg, zelda 2. Added by Gonetz
13515
// (env-0)*t0+0, (cmb-0)*shade+0
13516
{0xe1f5e4f0, cc_t0_mul_env_mul_shade},
13517
// Buss rush
13518
// (1-0)*t0+0, (0-cmb)*0+cmb
13519
{0xe1f61f0f, cc_t0},
13520
// water, Starshot. Added by Gonetz
13521
// (1-0)*t0+0, (1-0)*cmb+0
13522
{0xe1f6e0f6, cc_t0},
13523
// bomberman 64 [Ogy]
13524
// (1-0)*t0+0
13525
{0xe1f6e1f6, cc_t0},
13526
// Mermaid attack, Mystical Ninja
13527
// (noise-0)*t0+0
13528
{0xe1f7e1f7, cc_t0},
13529
// paper mario. Added by Gonetz * changed because of odd palette copy
13530
// (t0-0)*t1+0, (shade-env)*cmb+cmb **INC** ?
13531
{0xe2f10054, cc_shade_sub_env_mul__t0_mul_t1__add__t0_mul_t1},
13532
// Duck Dodgers Starring Daffy Duck text background
13533
// (t0-0)*t1+0, (shade-cmb)*prim+cmb
13534
{0xe2f10304, cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade},
13535
// water, PGA European Tour
13536
// (t0-0)*t1+0, (env-cmb)*prim+cmb
13537
{0xe2f10305, cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_env},
13538
// Grass, mario golf
13539
// (t0-0)*t1+0, (cmb-t0)*cmb_a+t0
13540
{0xe2f12710, cc_t0_mul_t1},
13541
// xg2, Added by Gonetz
13542
// (t0-0)*t1+0, (env-prim)*cmb+prim
13543
{0xe2f16035, cc_env_sub_prim_mul__t0_mul_t1__add_prim},
13544
// poo, CBFD, Added by Gonetz
13545
// (t0-0)*t1+0, (cmb-env)*shade+prim ** INC **
13546
{0xe2f16450, cc__t0_mul_t1__mul_shade_add_prim},
13547
// the champion stage, Pokemon Stadium 2
13548
// (t0-0)*t1+0, (cmb-0)*shade+prim
13549
{0xe2f164f0, cc__t0_mul_t1__mul_shade_add_prim},
13550
// sky, xg2, Added by Gonetz
13551
// (t0-0)*t1+0, (cmb-prim)*cmb_a+prim
13552
{0xe2f16730, cc__t0_mul_t1__sub_prim_mul__t0t1a__add_prim },
13553
// Sin and Punishment, [scorpiove], Added by Gonetz
13554
// (t0-0)*t1+0, (env-prim)*cmb_a+prim
13555
{0xe2f16735, cc_env_sub_prim_mul__t0t1a__add_prim},
13556
// cianwood gym walls, pokemon stadium 2
13557
// (t0-0)*t1+0, (cmb-prim)*shade+shade
13558
{0xe2f18430, cc__t0_mul_t1__sub_prim_mul_shade_add_shade},
13559
// light, Ridge Racer. Added by Gonetz
13560
// (t0-0)*t1+0, (prim-env)*cmb+env
13561
{0xe2f1a053, cc_prim_sub_env_mul__t0_mul_t1__add_env},
13562
// Waterfall, duck dodgers. Added by Gonetz
13563
// (t0-0)*t1+0, (shade-env)*cmb+env
13564
{0xe2f1a054, cc_shade_sub_env_mul__t0_mul_t1__add_env},
13565
// Arena, Pokemon Stadium 2 ** INC **
13566
// (t0-0)*t1+0, (cmb-prim)*shade+env
13567
{0xe2f1a430, cc__t0_mul_t1__mul_shade_add_env},
13568
// bikes, xg2
13569
// (t0-0)*t1+0, (shade-0)*cmb+0
13570
{0xe2f1e0f4, cc__t0_mul_t1__mul_shade},
13571
// Sky background, xg2
13572
// (t0-0)*t1+0
13573
{0xe2f1e2f1, cc_t0_mul_t1},
13574
// statistics, Banjo 2. Added by Gonetz
13575
// (t0-0)*t1+0, (cmb-0)*prim+0
13576
{0xe2f1e3f0, cc__t0_mul_t1__mul_prim},
13577
// the champion stage, Pokemon Stadium 2
13578
// (t0-0)*t1+0, (cmb-prim)*shade+0
13579
{0xe2f1e430, cc__t0_mul_t1__sub_prim_mul_shade},
13580
// Water, pilotwings
13581
// (t0-0)*t1+0, (cmb-0)*shade+0
13582
{0xe2f1e4f0, cc__t0_mul_t1__mul_shade},
13583
//beetle adventure racing. A dded by Gonetz
13584
// (t0-0)*t1+0, (cmb-0)*env+0
13585
{0xe2f1e5f0, cc__t0_mul_t1__mul_env},
13586
//fall headwaters, zelda 2. Added by Gonetz
13587
// (t1-0)*t1+0, (cmb-0)*shade+0
13588
{0xe2f2e4f0, cc_t1_mul_shade},
13589
//text, Paper Mario
13590
// (prim-0)*t1+0
13591
{0xe2f3e2f3, cc_t1_mul_prim},
13592
//terrain, Beetle Adventure Racing. Added by Gonetz
13593
// (shade-0)*t1+0
13594
{0xe2f4e2f4, cc_t1_mul_shade},
13595
// Transfer pack, Pokemon Stadium 2
13596
// (noise-0)*t1+0, (prim-env)*cmb+env
13597
{0xe2f7a053, cc_prim_sub_env_mul_t1_add_env},
13598
// lens of truth, zelda 2 [Ogy]. Added by Gonetz
13599
// (1-t0)*prim+0
13600
{0xe316e316, cc_one_sub_t0_mul_prim},
13601
//C&C pointer
13602
//(shade-env)*prim+0
13603
{0xe354e354, cc_shade_sub_env_mul_prim},
13604
//C&C shadows
13605
//(1-env)*prim+0
13606
{0xe356e356, cc_one_sub_env_mul_prim},
13607
// Magnitude, pokemon stadium 2
13608
// (t0-0)*prim+0, (t0-0)*env+cmb
13609
{0xe3f105f1, cc_t0_mul__prim_add_env},
13610
// night vision, jet force gemini
13611
// (t0-0)*prim+0, (noise-0)*env+cmb
13612
{0xe3f105f7, cc_t0_mul_prim_add_env},
13613
// Smoke, diddy kong racing
13614
// (t0-0)*prim+0, (env-cmb)*env_alpha+cmb
13615
{0xe3f10c05, cc__t0_mul_prim__inter_env_using_enva},
13616
// battle menu, Paper Mario. Added by Gonetz
13617
// (t0-0)*prim+0, (t0-env)*env_alpha+cmb ** INC **
13618
{0xe3f10c51, cc_t0_mul_prim},
13619
// stalactites, Beetle adventure Racing. Added by Gonetz
13620
// (t0-0)*prim+0, (cmb-shade)*t1_alpha+shade ** INC **
13621
{0xe3f18940, cc_t0_mul_prim_add_shade },
13622
// ? in Jabu-Jabu's belly, submitted by gokuss4
13623
// {0xe4f1a053, (t0-0)*prim+0, (prim-env)*cmb+env
13624
{0xe3f1a053, cc_prim_sub_env_mul__t0_mul_prim__add_env},
13625
// kirby drill, kirby 64. Added by Gonetz
13626
// (t0-0)*prim+0, (cmb-env)*shade+env **INC**
13627
{0xe3f1a450, cc_t0_mul_prim_mul_shade_add_env},
13628
// ? sign, zelda 2. Added by Gonetz
13629
// (t0-0)*prim+0, (cmb-0)*cmb+0 ** INC **
13630
{0xe3f1e0f0, cc_t0_mul_prim},
13631
// vehicle, Star Wars Ep.1 Racer, [Raziel64]. Added by Gonetz
13632
// (t0-0)*prim+0, (shade-0)*cmb+0
13633
{0xe3f1e0f4, cc_t0_mul_prim_mul_shade},
13634
// mini game, Pokemon Stadium 2
13635
// (t0-0)*prim+0, (1-0)*cmb+0
13636
{0xe3f1e0f6, cc_t0_mul_prim},
13637
// magic stuff, buck bumble. Added by Gonetz
13638
// (t0-0)*prim+0, (cmb-0)*prim+0
13639
{0xe3f1e3f0, cc_t0_mul_prim_mul_prim},
13640
// The mario face, mario
13641
//z (t0-k5)*prim+cmb_a
13642
{0xe3f1e3f1, cc_t0_mul_prim},
13643
// Butterflies at Jabu-Jabu's lake, zelda
13644
// (t0-0)*prim+0, (cmb-0)*shade+0
13645
{0xe3f1e4f0, cc_t0_mul_prim_mul_shade},
13646
// Sports shirt, Mia Soccer. Added by Gonetz
13647
// (t1-0)*prim+0, (1-t0)*t1+cmb **INC**
13648
// {0xe3f20216, cc_t0_mul_prim_add_t1},
13649
{0xe3f20216, cc_shirt},
13650
// Sprites, Ogre Battle. Added by Gonetz
13651
// (t1-0)*prim+0
13652
{0xe3f2e3f2, cc_t1_mul_prim},
13653
// F1 World Grand Prix. Added by Gonetz
13654
// (t1-0)*prim+0, (cmb-0)*shade+0
13655
{0xe3f2e4f0, cc_t1_mul_prim_mul_shade},
13656
// intro background, bio freaks. Added by Gonetz
13657
// (prim-0)*prim+0
13658
{0xe3f3e3f3, cc_prim_mul_prim},
13659
// player, Ohzumou2
13660
// (shade-0)*prim+0, (env-cmb)*t0+cmb
13661
{0xe3f40105, cc_env_sub_primshade_mul_t0_add_primshade},
13662
// floor in pyramides, beetle adventure racing.
13663
// (shade-0)*prim+0, (t1-0)*cmb+0
13664
{0xe3f4e0f2, cc_t1_mul_prim_mul_shade},
13665
// Slingshot string, zelda
13666
// (shade-0)*prim+0
13667
{0xe3f4e3f4, cc_prim_mul_shade},
13668
// ?
13669
// (shade-0)*prim+0, (cmb-0)*shade+0 ** INC **
13670
{0xe3f4e4f0, cc_prim_mul_shade},
13671
// ???, zelda
13672
// (env-0)*prim+0, (0-0)*0+cmb
13673
{0xe3f5e3f5, cc_prim_mul_env},
13674
// Option selection, zelda
13675
//z (1-0)*prim+0
13676
{0xe3f6e3f6, cc_prim},
13677
// ranco monster, zelda 2. Added by Gonetz
13678
// (noise-0)*prim+0, (cmb-0)*prim_a+prim
13679
{0xe3f76af0, cc_prim_mul_prima_add_prim},
13680
// F-1_World_Grand_Prix_II, olivieryuyu
13681
// (noise-0)*prim+0, (0-cmb)*prim_a+shade
13682
{0xe3f78a0f, cc_shade_sub__prim_mul_prima},
13683
// zelda 2 [Ogy]. Added by Gonetz
13684
// (noise-0)*prim+0
13685
{0xe3f7e3f7, cc_prim},
13686
// Road rush. Added by Gonetz
13687
// (0-0)*prim+0 ** INC ** ?
13688
{0xe3ffe3ff, cc_prim},
13689
// Letter to Kafei's mom, zelda 2. Added by Gonetz
13690
// (0-0)*prim+0, (cmb-0)*shade+0
13691
{0xe3ffe4f0, cc_prim_mul_shade},
13692
// Jabu-Jabu's Belly, zelda. Added by Gonetz
13693
// (1-t0)*shade+0, (cmb-0)*prim+0
13694
{0xe416e3f0, cc_one_sub_t0_mul_prim_mul_shade},
13695
// Arena, Pokemon Stadium 2
13696
// (t0-prim)*shade+0
13697
{0xe431e431, cc_t0_sub_prim_mul_shade},
13698
// silver cave, pokemon stadium 2
13699
// (t0-env)*shade+0, (cmb-prim)*shade+prim
13700
{0xe4516430, cc__t0_sub_env_mul_shade__sub_prim_mul_shade_add_prim},
13701
// bomb mask, zelda 2. Added by Gonetz
13702
// (t0-env)*shade+0, (cmb-prim)*shade+shade ** INC **
13703
{0xe4518430, cc__t0_sub_env_mul_shade__sub_prim_mul_shade},
13704
// terrain, Top Gear Rally 2. Added by Gonetz
13705
// (t0-env)*shade+0
13706
{0xe451e451, cc_t0_sub_env_mul_shade},
13707
// closes, Nightmire Creatures
13708
// (1-env)*shade+0
13709
{0xe456e456, cc_one_sub_env_mul_shade},
13710
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13711
// (t0-0)*shade+0, (cmb-cmb)*cmb+cmb
13712
{0xe4f10000, cc_t0_mul_shade},
13713
// Monster truck madness intro. Added by Gonetz
13714
// (t0-0)*shade+0, (1-0)*cmb+cmb ** INC **
13715
{0xe4f100f6, cc_t0_mul_shade},
13716
// terrain, SCARS. Added by Gonetz
13717
// (t0-0)*shade+0, (prim-cmb)*t0+cmb ** INC **
13718
{0xe4f10103, cc_t0_mul_shade},
13719
// Boomerang circle, zelda
13720
// (t0-0)*shade+0, (1-cmb)*t0+cmb
13721
{0xe4f10106, cc_t0_mul_shade},
13722
// THPS3.
13723
// (t0-0)*shade+0, (1-0)*t0+cmb
13724
{0xe4f101f6, cc_t0_mul_shade},
13725
// ???, WWF No Mercy [CpuMaster]
13726
// (t0-0)*shade+0, (env-cmb)*prim+cmb
13727
{0xe4f10305, cc_t0_mul_one_sub_prim_mul_shade_add_prim_mul_env},
13728
// magic bubble, zelda2. Added by Gonetz
13729
// (t0-0)*shade+0, (t1-0)*shade+cmb
13730
{0xe4f104f2, cc__t0_mul_shade__add__t1_mul_shade},
13731
// bike select, xg2. Added by Gonetz
13732
// (t0-0)*shade+0, (1-cmb)*env+cmb ** INC **
13733
{0xe4f10506, cc_t0_mul_shade},
13734
// a bugs life [Ogy]
13735
// (t0-0)*shade+0, (cmb-0)*env+cmb
13736
// {0xe4f105f0, cc_t0_mul_env_mul_shade},
13737
{0xe4f105f0, cc_t0_mul_shade},
13738
// Wall, quest64
13739
// (t0-0)*shade+0, (1-0)*env+cmb
13740
{0xe4f105f6, cc_t0_mul_shade_add_env},
13741
//lava, beetle adventure racing. Added by Gonetz
13742
// (t0-0)*shade+0, (prim-cmb)*cmb_a+cmb **INC**
13743
{0xe4f10703, cc_t0_mul_shade},
13744
// course map, Ridge Racer. Added by Gonetz
13745
// (t0-0)*shade+0, (prim-cmb)*prima+cmb **INC**
13746
{0xe4f10a03, cc_t0_mul_shade},
13747
// arena, custom robo. Added by Gonetz
13748
// (t0-0)*shade+0, (noise-cmb)*prima+cmb **INC**
13749
{0xe4f10a07, cc_t0_mul_shade},
13750
// arena, custom robo 2. Added by Gonetz
13751
// (t0-0)*shade+0, (0-cmb)*prima+cmb **INC**
13752
{0xe4f10a0f, cc_t0_mul_shade},
13753
//floor in a cave, Paper mario. Added by Gonetz
13754
// (t0-0)*shade+0, (cmb-prim)*prima+cmb **INC**
13755
{0xe4f10a30, cc_t0_mul_shade},
13756
//beetle adventure racing. Added by Gonetz
13757
// (t0-0)*shade+0, (t1-prim)*prima+cmb **INC**
13758
{0xe4f10a32, cc_t0_mul_shade},
13759
// Monster truck madness intro. Added by Gonetz
13760
// (t0-0)*shade+0, (shade-cmb)*shade_a+cmb ** INC **
13761
{0xe4f10b04, cc_t0_mul_shade},
13762
// xg2 intro. Added by Gonetz
13763
// (t0-0)*shade+0, (1-cmb)*shade_a+cmb ** INC **
13764
{0xe4f10b06, cc__t0_mul_shade__inter_one_using_shadea},
13765
// Link's bomb, smash bros
13766
// (t0-0)*shade+0, (env-cmb)*env_a+cmb ** INC **
13767
{0xe4f10c05, cc__t0_mul_shade__inter_env_using_enva},
13768
// language selection, Extreme-G XG2 (E)
13769
// (t0-0)*shade+0, (1-cmb)*env_a+cmb
13770
{0xe4f10c06, cc__t0_mul_shade__inter_one_using_enva},
13771
// A Bugs Life, [Raziel64]
13772
// (t0-0)*shade+0, (cmb-0)*k5+cmb
13773
{0xe4f10ff0, cc_t0_mul_shade},
13774
// Bass Rush
13775
// (t0-0)*shade+0, (cmb-0)*0+cmb
13776
{0xe4f11f0f, cc_t0_mul_shade},
13777
// car, Top Gear Rally. Added by Gonetz
13778
// (t0-0)*shade+0, (cmb-t0)*t0a+t0 **INC**
13779
{0xe4f12810, cc_t0_mul_shade},
13780
// logo, SCARS. Added by Gonetz
13781
// (t0-0)*shade+0, (cmb-t0)*shadea+t0 **INC**
13782
{0xe4f12b10, cc__t0_mul_shade_mul_shadea__add__t1_mul_one_sub_shadea},
13783
// ? sign, Spiderman. Added by Gonetz
13784
// (t0-0)*shade+0, (0-0)*0+t1
13785
{0xe4f15fff, cc_t0_mul_shade},
13786
// Major League Baseball Featuring Ken Griffey Jr.
13787
// (t0-0)*shade+0, (1-0)*cmb+prim ** INC **
13788
{0xe4f160f6, cc_t0_mul_shade_add_prim},
13789
// plants, CBFD. Added by Gonetz
13790
// (t0-0)*shade+0, (cmb-env)*shade+prim ** INC **
13791
{0xe4f16450, cc_t0_sub_env_mul_shade_add_prim},
13792
// Kirby64. Added by Gonetz
13793
// (t0-0)*shade+0, (cmb-prim)*prima+prim
13794
{0xe4f16a30, cc_t0_mul_prima_mul_shade_add_prim_mul_one_sub_prima},
13795
// building shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13796
// (t0-0)*shade+0, (0-0)*0+prim
13797
{0xe4f17fff, cc_prim},
13798
// tire trace, beetle adventure racing. Added by Gonetz
13799
// (t0-0)*shade+0, (env-cmb)*t1+shade **INC**
13800
{0xe4f18205, cc_env_sub_shade_mul_t0_add_shade},
13801
// Gold Skulltula, zelda
13802
// (t0-0)*shade+0, (prim-env)*cmb+env
13803
{0xe4f1a053, cc_prim_sub_env_mul_t0_mul_shade_add_env},
13804
// {0xe4f1a053, cc_t0_mul_prim_mul_shade},
13805
// fighters, GASP Fighters
13806
// (t0-0)*shade+0, (1-env)*cmb+env
13807
{0xe4f1a056, cc_t0_mul_one_sub_env_mul_shade_add_env},
13808
// Brian, quest64
13809
// (t0-0)*shade+0, (cmb-0)*prim+env
13810
{0xe4f1a3f0, cc_t0_mul_prim_mul_shade_add_env},
13811
// Objects in arena, pokemon stadium 2
13812
// (t0-0)*shade+0
13813
// (cmb-prim)*shade+env
13814
{0xe4f1a430, cc_t0_mul_shade},
13815
// Monster truck madness intro. Added by Gonetz
13816
// (t0-0)*shade+0, (cmb-env)*shadea+env **INC**
13817
// {0xe4f1ab50, cc_t0_mul_shade_add_env},
13818
{0xe4f1ab50, cc__t0_mul_shade__sub_env_mul_shadea_add_env},
13819
// Taz express. Added by Gonetz
13820
// (t0-0)*shade+0, (cmb-env)*enva+env **INC**
13821
{0xe4f1ac50, cc_t0_mul_shade_add_env},
13822
// sky in doom. Added by Gonetz
13823
// (t0-0)*shade+0, (cmb-0)*primlod+env **INC**
13824
{0xe4f1aef0, cc_t0_mul_shade_add_env},
13825
// fighters, GASP Fighters
13826
// (t0-0)*shade+0, (1-env)*cmb+0
13827
{0xe4f1e056, cc_t0_mul_one_sub_env_mul_shade},
13828
// walls, beetle adventure racing. Added by Gonetz
13829
// (t0-0)*shade+0, (t0-0)*cmb+0 **INC**
13830
{0xe4f1e0f1, cc_t0_mul_shade},
13831
// Link's face, zelda
13832
//z (t0-k5)*shade+cmb_a, (prim-k5)*cmb+cmb_a
13833
{0xe4f1e0f3, cc_t0_mul_prim_mul_shade},
13834
// Link's suit, zelda
13835
//z (t0-k5)*shade+cmb_a, (env-k5)*cmb+cmb_a
13836
{0xe4f1e0f5, cc_t0_mul_env_mul_shade},
13837
// Window, starfox
13838
//z (t0-k5)*shade+cmb_a, (cmb-k5)*prim+cmb_a
13839
{0xe4f1e3f0, cc_t0_mul_prim_mul_shade},
13840
// crystal, Doraemon 2
13841
//(t0-0)*shade+0, (t0-0)*prim+0
13842
{0xe4f1e3f1, cc_t0_mul_prim},
13843
// Characters, mace
13844
// (t0-0)*shade+0, (cmb-0)*shade+0
13845
{0xe4f1e4f0, cc_t0_mul_shade},
13846
// Super Mario 64 logo
13847
//z (t0-k5)*shade+cmb_a
13848
{0xe4f1e4f1, cc_t0_mul_shade},
13849
// Kokiri's hat, zelda
13850
// (t0-0)*shade+0, (cmb-0)*env+0
13851
{0xe4f1e5f0, cc_t0_mul_env_mul_shade},
13852
// Gauntlet Legends intro
13853
// (t0-0)*shade+0, (cmb-0)*scale+0
13854
{0xe4f1e6f0, cc_t0_mul_scale_mul_shade},
13855
// Something on a tree, Paper Mario. Added by Gonetz
13856
// (t0-0)*shade+0, (cmb-0)*prima+0
13857
{0xe4f1eaf0, cc_t0_mul_prima_mul_shade},
13858
// Course map, Ridge Racer. Added by Gonetz
13859
// (t0-0)*shade+0, (cmb-0)*shadea+0
13860
{0xe4f1ebf0, cc_t0_mul_shade_mul_shadea},
13861
// Dodongo skull's eyes, zelda
13862
// (t0-0)*shade+0, (cmb-0)*env_alpha+0
13863
{0xe4f1ecf0, cc_t0_mul_enva_mul_shade},
13864
// lava, beetle adventure racing. Added by Gonetz
13865
// (t1-0)*shade+0, (cmb-prim)*cmb_a+prim **INC**
13866
{0xe4f26730, cc_prim_inter_t1_mul_shade_using_texa},
13867
// headlight, beetle adventure racing. Added by Gonetz
13868
// (t1-0)*shade+0, (env-cmb)*t0+shade **INC**
13869
{0xe4f28105, cc_one_sub__t0_mul_t1__mul_shade},
13870
// bubble, Banjo-Kazooie. Added by Gonetz
13871
// (t1-0)*shade+0
13872
{0xe4f2e4f2, cc_t1_mul_shade},
13873
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13874
// (prim-0)*shade+0, (cmb-cmb)*cmb+cmb
13875
{0xe4f30000, cc_prim_mul_shade},
13876
// lamp shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13877
// (prim-0)*shade+0, (cmb-cmb)*t0+cmb
13878
{0xe4f30100, cc_prim_mul_shade},
13879
// Yoshi, mario golf
13880
// (prim-0)*shade+0, (env-cmb)*t0+cmb
13881
{0xe4f30105, cc_env_sub_primshade_mul_t0_add_primshade},
13882
//Spacestation Silicon Valley intro. Added by Gonetz
13883
// (prim-0)*shade+0, (env-cmb)*t1+cmb
13884
{0xe4f30205, cc_env_sub_primshade_mul_t1_add_primshade},
13885
// Tip of brian's hair, quest64
13886
// (prim-0)*shade+0, (1-0)*env+cmb
13887
{0xe4f305f6, cc_prim_mul_shade_add_env},
13888
// V8-2 menu
13889
// (prim-0)*shade+0, (env-cmb)*cmb_a+cmb
13890
{0xe4f30705, cc__prim_mul_shade__inter_env_using__prim_mul_shade_alpha},
13891
// Background circle, xg2
13892
// (prim-0)*shade+0, (1-cmb)*shade_a+cmb
13893
{0xe4f30b06, cc_prim_mul_shade},
13894
// circle, waverace. Added by Gonetz
13895
// (prim-0)*shade+0, (t0-cmb)*enva+cmb
13896
{0xe4f30c01, cc_t0_sub__prim_mul_shade__mul_enva_add__prim_mul_shade},
13897
// enemy hit, Glover2
13898
// (prim-0)*shade+0, (env-cmb)*enva+cmb
13899
{0xe4f30c05, cc__prim_mul_shade__inter_env_using_enva},
13900
// player, super bowling
13901
// (prim-0)*shade+0, (0-0)*k5+cmb
13902
{0xe4f30fff, cc_prim_mul_shade},
13903
//Lure, bass rush
13904
// (prim-0)*shade+0, (0-cmb)*0+cmb
13905
{0xe4f31f0f, cc_prim_mul_shade},
13906
// walls, beetle adventure racing. Added by Gonetz
13907
// (prim-0)*shade+0, (cmb-shade)*t1+shade **INC**
13908
{0xe4f38240, cc__one_inter_prim_using_t1__mul_shade},
13909
// GASP fighters
13910
//(prim-0)*shade+0, (1-env)*cmb+0
13911
{0xe4f3e056, cc_prim_mul_one_sub_env_mul_shade},
13912
// Flag, mario kart
13913
//z (prim-k5)*shade+cmb_a
13914
{0xe4f3e4f3, cc_prim_mul_shade},
13915
// Characters, smash bros
13916
// (prim-0)*shade+0, (cmb-0)*env+0
13917
{0xe4f3e5f0, cc_prim_mul_env_mul_shade},
13918
// N64 logo, ridge race. Added by Gonetz
13919
// (shade-0)*shade+0, (prim-cmb)*prima+cmb **INC**
13920
{0xe4f40a03, cc_shade},
13921
// fighter, shield mode, bio freaks. Added by Gonetz
13922
// (shade-0)*shade+0
13923
{0xe4f4e4f4, cc_shade},
13924
// truck crush, Monster truck madness. Added by Gonetz
13925
// (env-0)*shade+0, (env-0)*shade+cmb
13926
{0xe4f504f5, cc_env_mul_shade},
13927
// Course map, Ridge Racer. Added by Gonetz
13928
// (env-0)*shade+0
13929
{0xe4f5e4f5, cc_env_mul_shade},
13930
// lava, beetle adventure racing
13931
// (1-0)*shade+0, (prim-cmb)*cmb_a+cmb
13932
{0xe4f60703, cc_prim_sub_shade_mul_shadea_add_shade},
13933
// the wings in the song of soaring cut-scene, zelda2 [Ogy]. Added by Gonetz
13934
// (1-0)*shade+0, (prim-0)*cmb+0
13935
{0xe4f6e0f3, cc_prim_mul_shade},
13936
// parts of vehicle, Star Wars Ep.I Racer. Added by Gonetz
13937
// (1-0)*shade+0, (cmb-0)*prim+0
13938
{0xe4f6e3f0, cc_prim_mul_shade},
13939
// Snowflakes???, mario kart. Boxer shadow (fb effect}, Knockout Kings 2000
13940
// (1-0)*shade+0, (1-0)*shade+0
13941
{0xe4f6e4f6, cc_one_mul_shade},
13942
// ???
13943
// (noise-0)*shade+0
13944
{0xe4f7e4f7, cc_shade},
13945
// quest64 [Ogy]
13946
// (prim-t0)*env+0, (0-0)*0+prim
13947
{0xe5137fff, cc_prim},
13948
// field, Mike Piazza's Strike Zone
13949
// (t0-prim)*env+0 ** INC **
13950
{0xe531e531, cc_t0_mul_env},
13951
// Mike Piazza's Strike Zone
13952
// (shade-prim)*env+0
13953
{0xe534e534, cc_shade_sub_prim_mul_env},
13954
// rope, CBFD. Added by Gonetz
13955
// (t0-0)*env+0, (1-env)*prim+cmb
13956
{0xe5f10356, cc_one_sub_env_mul_prim_add__t0_mul_env},
13957
// Bell, Pokemon Stadium 2. Added by Gonetz
13958
// (t0-0)*env+0, (shade-0)*prim+cmb
13959
{0xe5f103f4, cc_t0_mul_env_add_prim_mul_shade},
13960
// aerofighter's assault [Ogy]
13961
// (t0-0)*env+0, (1-t0)*shade+cmb
13962
{0xe5f10416, cc_t0_mul_env_add_1mt0_mul_shade},
13963
// foto, Armorines - Project S.W.A.R.M. Added by Gonetz
13964
// (t0-0)*env+0, (noise-0)*scale+cmb
13965
{0xe5f106f7, cc_t0_mul_env},
13966
// Extreme G2, score. Added by Gonetz
13967
// (t0-0)*env+0, (1-cmb)*enva+cmb ** INC **
13968
{0xe5f10c06, cc_t0_mul_env},
13969
// many objects in Tonic Trouble
13970
// (t0-0)*env+0, (shade-0)*cmb+0
13971
{0xe5f1e0f4, cc_t0_mul_env_mul_shade},
13972
// Flying skull's eyes, zelda
13973
// (t0-0)*env+0, (cmb-0)*prim+0
13974
{0xe5f1e3f0, cc_t0_mul_prim_mul_env},
13975
// Rock spell, quest64
13976
// (t0-0)*env+0, (cmb-0)*shade+0
13977
{0xe5f1e4f0, cc_t0_mul_env_mul_shade},
13978
// Text, mario
13979
//z (t0-k5)*env+cmb_a
13980
{0xe5f1e5f1, cc_t0_mul_env},
13981
// kirby 64. Added by Gonetz
13982
// (prim-0)*env+0, (cmb-0)*shade+0
13983
{0xe5f3e4f0, cc_prim_mul_env_mul_shade},
13984
// wings, kirby 64. Added by Gonetz
13985
// (prim-0)*env+0
13986
{0xe5f3e5f3, cc_prim_mul_env},
13987
// Text, xg2
13988
// (shade-0)*env+0, (1-cmb)*env_a+cmb
13989
{0xe5f40c06, cc_env_mul_shade},
13990
// Text box, mario
13991
//z (shade-k5)*env+cmb_a
13992
{0xe5f4e5f4, cc_env_mul_shade},
13993
// bomberman 64 [Ogy]
13994
// (1-0)*env+0
13995
{0xe5f6e5f6, cc_env},
13996
// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
13997
// (1-t0)*scale+0
13998
{0xe616e616, cc_zero},
13999
// Gauntlet Legends intro. Added by Gonetz
14000
// (t0-0)*scale+0, (cmb-0)*shade+0
14001
{0xe6f1e4f0, cc_t0_mul_scale_mul_shade},
14002
// shadows, Taz express. Added by Gonetz
14003
// (t0-0)*scale+0
14004
{0xe6f1e6f1, cc_t0_mul_scale},
14005
// shadows, Knockout Kings 2000. Added by Gonetz
14006
// (shade-0)*scale+0
14007
{0xe6f4e6f4, cc_scale_mul_shade},
14008
// bomberman 64 2 [Ogy]. Added by Gonetz
14009
// (1-0)*scale+0
14010
{0xe6f6e6f6, cc_scale},
14011
// walls, beetle adventure racing. Added by Gonetz
14012
// (t1-0)*t0_a+0, (1-t1)*cmb+t1 **INC**
14013
{0xe8f24026, cc_t1},
14014
// house on rancho, zelda2. Added by Gonetz
14015
// (t1-0)*t0_a+0, (cmb-0)*prim+0
14016
{0xe8f2e3f0, cc__t0a_mul_t1__mul_prim},
14017
// zelda2 [Ogy]. Added by Gonetz
14018
// (t1-0)*t0_a+0, (cmb-0)*shade+0
14019
{0xe8f2e4f0, cc__t0a_mul_t1__mul_shade},
14020
// mini quiz, Pokemon Stadium 2
14021
// (prim-0)*t0_a+0, (cmb-t1)*primlod+t1 ** INC **
14022
{0xe8f34e20, cc_t0},
14023
// Major League Baseball Featuring Ken Griffey Jr.
14024
// (prim-0)*t0_a+0
14025
{0xe8f3e8f3, cc_t0a_mul_prim},
14026
// Top Gear Hyper-Bike
14027
// (1-0)*t0_a+0
14028
{0xe8f6e8f6, cc_t0a},
14029
// waterfall, Dobutsu_no_Mori
14030
// (t0-0)*t1_a+0, (prim-env)*cmb+env
14031
{0xe9f1a053, cc_prim_sub_env_mul__t0_mul_t1a__add_env},
14032
// logo, Deadly Arts. Added by Gonetz
14033
// (t0-0)*t1_a+0, (cmb-0)*shade+0
14034
{0xe9f1e4f0, cc__t0_mul_t1a__mul_shade},
14035
// car, Roadsters. Added by Gonetz
14036
// (prim-t0)*prim_a+0, (prim-cmb)*shade+0 ** INC **
14037
{0xea13e403, cc_prim_sub__prim_sub_t0_mul_prima__mul_shade},
14038
// arena, Pokemon Stadium 2. Added by Gonetz
14039
// (1-t0)*prim_a+0, (0-prim)*cmb+prim ** INC **
14040
{0xea16603f, cc_t0_mul_prim},
14041
// V8-2
14042
// (1-prim)*prim_a+0
14043
{0xea36ea36, cc_one_sub_prim_mul_prima},
14044
// match start, Mario Tennis. Added by Gonetz
14045
// (t0-0)*prim_a+0, (1-t0)*cmb+t0 ** INC **
14046
{0xeaf12016, cc_one_sub_t0_mul_prima_add_t0},
14047
// blast corps [Ogy]
14048
// (t0-0)*prim_a+0
14049
{0xeaf1eaf1, cc_t0_mul_prima},
14050
// final battle, CBFD. Added by Gonetz
14051
// (prim-0)*prim_a+0
14052
{0xeaf3eaf3, cc_prim_mul_prima},
14053
// flower's stalk, Paper Mario. Added by Gonetz
14054
// (shade-0)*prim_a+0
14055
{0xeaf4eaf4, cc_shade_mul_prima},
14056
// blast corps [Ogy]
14057
// (noise-0)*prim_a+0, (t1-0)*shade+cmb ** INC **
14058
{0xeaf704f2, cc_t0_mul_shade_add_prima},
14059
// F1 World Grand Prix. Added by Gonetz
14060
// (noise-0)*prim_a+0, (t1-0)*env_a+cmb ** INC **
14061
{0xeaf70cf2, cc_t1_mul_enva},
14062
// shadows, killer instinct gold
14063
// (0-0)*prim_a+0
14064
{0xeaffeaff, cc_zero},
14065
// background, killer instinct gold
14066
// (t0-prim)*shade_a+0
14067
{0xeb31eb31, cc_t0_sub_prim_mul_shadea},
14068
// ground, C&C
14069
// (t0-shade)*shade_a+0
14070
{0xeb41eb41, cc_t0_sub_shade_mul_shadea},
14071
// Wreslters, WWF No Mercy, [CpUMasteR]
14072
// (t0-0)*shade_alpha+0, (env-cmb)*prim+cmb
14073
{0xebf10305, cc_t0_mul_one_sub_prim_mul_shadea_add_prim_mul_env},
14074
// map, Pilot wings. Added by Gonetz
14075
// (t0-0)*shade_alpha+0, (1-cmb)*shade+cmb
14076
{0xebf10406, cc_one_sub_shade_mul__t0_mul_shadea__add_shade},
14077
// Indy Racing 2000. Added by Gonetz
14078
// (t0-0)*shade_alpha+0, (1-0)*shade+cmb
14079
{0xebf104f6, cc_t0_mul_shadea_add_shade},
14080
// logo, WCW-nWo Revenge
14081
// (t0-0)*shade_alpha+0, (cmb-0)*prim+0
14082
{0xebf1e3f0, cc_t0_mul_prim_mul_shadea},
14083
// sky, pilot wings
14084
// (t0-0)*shade_alpha+0, (1-cmb)*shade+0
14085
{0xebf1e406, cc_one_sub__t0_mul_shadea__mul_shade},
14086
// Wrestlers in Game, WWF No mercy [CpUMasteR]
14087
// (t0-0)*shade_alpha+0
14088
{0xebf1ebf1, cc_t0_mul_shadea},
14089
// flag, top gear overdrive
14090
// (prim-0)*shade_alpha+0
14091
{0xebf3ebf3, cc_prim_mul_shadea},
14092
// Ropes, WWF games
14093
// (shade-0)*shade_alpha+0, (env-cmb)*prim+cmb
14094
{0xebf40305, cc_shade_mul_shadea},
14095
// Ropes, WWF games
14096
// (shade-0)*shade_alpha+0
14097
{0xebf4ebf4, cc_shade_mul_shadea},
14098
// arena, custom robo 2
14099
// (noise-0)*shade_alpha+0
14100
{0xebf7ebf7, cc_shadea},
14101
// Baton Pass attack, Pokemon Stadium 2
14102
// (t0-env)*enva+0, (shade-0)*prim+cmb
14103
{0xec5103f4, cc__t0_sub_env_mul_enva__add_prim_mul_shade},
14104
// Bell, Pokemon Stadium 2. Added by Gonetz
14105
// (t0-0)*enva+0, (shade-0)*prim+cmb
14106
{0xecf103f4, cc_t0_mul_enva_add_prim_mul_shade},
14107
// blastcorps, unimp log. Added by Gonetz
14108
// (t0-0)*enva+0
14109
{0xecf1ecf1, cc_t0_mul_enva},
14110
// car, Top Gear Rally. Added by Gonetz
14111
// (env-0)*enva+0
14112
{0xecf5ecf5, cc_env_mul_enva},
14113
// Sand attack, pokemon Stadium (J)
14114
// (noise-0)*enva+0, (prim-env)*cmb+env
14115
{0xecf7a053, cc_prim_sub_env_mul_enva_add_env},
14116
// Walls of well through lens of truth, zelda
14117
// (prim-t0)*primlod+0 ** INC **
14118
{0xee13ee13, cc_t0}, // JUST t0 b/c the other combiner handles the subtraction
14119
// Pokemon attack, Pokemon Stadium 2
14120
// (noise-t0)*primlod+0, (1-env)*cmb+env ** INC **
14121
{0xee17a056, cc_env_inter_one_using__one_sub_t0_mul_primlod},
14122
// barrage attack, Pokemon Stadium 2
14123
// (t0-0)*primlod+0, (prim-0)*shade+cmb
14124
{0xeef104f3, cc__t0_mul_primlod__add__prim_mul_shade},
14125
// something on a flor in stone temple, zelda 2. Added by Gonetz
14126
// (t0-0)*primlod+0, (cmb-0)*prim+0
14127
{0xeef1e3f0, cc_t0_mul_primlod_mul_prim},
14128
// entrance to oceanside spider house, zelda 2. Added by Gonetz
14129
// (t0-0)*primlod+0, (cmb-0)*shade+0
14130
{0xeef1e4f0, cc_t0_mul_primlod_mul_shade},
14131
// Haze/(all powder status changers}, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14132
// (noise-0)*primlod+0, (prim-env)*cmb+env ** INC **
14133
{0xeef7a053, cc_prim_sub_env_mul_primlod_add_env},
14134
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
14135
// (noise-0)*primlod+0, (prim-cmb)*cmb+0 ** INC **
14136
{0xeef7e003, cc_zero},
14137
// Night trees, Monster truck madness. Added by Gonetz
14138
// (t0-0)*k5+0
14139
{0xeff1eff1, cc_t0_mul_k5},
14140
// submitted by gokuss4
14141
// (0-0)*0+0, (0-0)*0+prim
14142
{0xfffd5fe6, cc_prim},
14143
// intro, Bettle Adventure Racing, [Raziel64]
14144
// (0-0)*0+0, (0-0)*0+t0
14145
{0xffff3fff, cc_t0},
14146
// Conker's face, CBFD
14147
// (0-0)*0+0, (shade-env)*k5+prim
14148
{0xffff6f54, cc_shade_sub_env_mul_k5_add_prim},
14149
// Boost, Beetle Adventure Racing. Added by Gonetz
14150
// (0-0)*0+0, (0-0)*0+prim
14151
{0xffff7fff, cc_prim},
14152
// headlight, beetle adventure racing. Added by Gonetz
14153
// (0-0)*0+0, (0-0)*0+shade
14154
{0xffff9fff, cc_shade},
14155
// intro, Bettle Adventure Racing, [Raziel64]
14156
// (0-0)*0+0, (shade-env)*t1+env
14157
{0xffffa254, cc_shade_sub_env_mul_t1_add_env},
14158
// Fly Swooping in, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14159
// (0-0)*0+0, (1-env)*cmb_a+env
14160
{0xffffa756, cc_env},
14161
// Waterfall, Donkey Kong 64
14162
// (0-0)*0+0, (t0-0)*t1+0
14163
{0xffffe1f2, cc_t0_mul_t1},
14164
// Screen clear, banjo kazooie
14165
// (0-0)*0+0
14166
{0xffffffff, cc_zero},
14167
// { #CCEND }
14168
};
14169
14170
static COMBINER alpha_cmb_list[] = {
14171
// { #ACSTART }
14172
//Tony Hawk's Pro Skater. Added by Gonetz
14173
// (0-0)*0+0
14174
{0x01ff01ff, ac_zero},
14175
//terminal, Spacestation Silicon Valley. Added by Gonetz
14176
// (0-0)*0+0, (0-0)*0+prim
14177
{0x01ff07ff, ac_prim},
14178
// kirby drill, kirby 64. Added by Gonetz
14179
// (0-0)*0+cmb, (0-0)*0+1
14180
{0x01ff0dff, ac_one},
14181
//chip in Spacestation Silicon Valley intro. Added by Gonetz
14182
// (0-0)*0+cmb, (prim-0)*shade+0
14183
{0x01ff0f3b, ac_prim_mul_shade},
14184
//Goldeneye, [Jeremy]. Added by Gonetz
14185
// (t0-t0)*lodf+t0, (cmb-0)*prim+0
14186
{0x02090ef8, ac_t0_mul_prim},
14187
// Indy Racing 2000. Added by Gonetz
14188
// (t1-t0)*lodf+t0, (env-cmb)*prim+cmb ** INC **
14189
{0x020a00c5, ac_t0_inter_t1_using_primlod},
14190
// water, Spacestation Silicon Valley. Added by Gonetz
14191
// (t1-t0)*lodf+t0, (0-shade)*0+cmb
14192
{0x020a01e7, ac_t0_inter_t1_using_primlod},
14193
// Bridge, sf rush
14194
//z (t1-t0)*lodf+t0
14195
{0x020a020a, ac_t0_inter_t1_using_primlod},
14196
// explosion, body harvest. Added by Gonetz
14197
//(t1-t0)*lodf+t0, (0-0)*0+t0
14198
{0x020a03ff, ac_t0},
14199
// cars, PD intro. Added by Gonetz
14200
// (t1-t0)*lodf+t0, (cmb-0)*shade+prim
14201
{0x020a0738, ac__t0_inter_t1_using_primlod__mul_shade_add_prim},
14202
// Rocket Robot in Wheels intro
14203
//(t1-t0)*lodf+t0, (0-0)*0+prim
14204
{0x020a07ff, ac_prim},
14205
// Iguana background ground, turok
14206
// (t1-t0)*lodf+t0, (0-0)*0+shade
14207
{0x020a09ff, ac_shade},
14208
// Ground, monster truck madness
14209
// (t1-t0)*lodf+t0, (0-0)*0+env
14210
{0x020a0bff, ac_env},
14211
// Taz express. Added by Gonetz
14212
// (t1-t0)*lodf+t0, (0-0)*0+1
14213
{0x020a0dff, ac_one},
14214
// Mike Piazza's Strike Zone
14215
// (t1-t0)*lodf+t0, (cmb-0)*t0+0
14216
{0x020a0e78, ac_t0_inter_t1_using_primlod},
14217
// N64 logo, tetrisphere. Added by Gonetz
14218
// (t1-t0)*lodf+t0, (cmb-0)*prim+0
14219
{0x020a0ef8, ac__t0_inter_t1_using_primlod__mul_prim},
14220
// Ground, mace
14221
// (t1-t0)*lodf+t0, (cmb-0)*shade+0
14222
// {0x020a0f38, ac_t0_mul_shade},
14223
{0x020a0f38, ac__t0_inter_t1_using_primlod__mul_shade},
14224
// blast corps [Ogy]
14225
// (t1-t0)*lodf+t0, (cmb-0)*env+0
14226
{0x020a0f78, ac__t0_inter_t1_using_primlod__mul_env},
14227
// blast corps [Ogy]
14228
// (t1-t0)*lodf+t0, (t0-0)*env+0
14229
{0x020a0f79, ac_t0_mul_env},
14230
// blast corps. Added by Gonetz
14231
// (t1-t0)*lodf+t0, (shade-0)*env+0
14232
{0x020a0f7c, ac_env_mul_shade},
14233
// field, Mike Piazza's Strike Zone
14234
// (t1-t0)*lodf+t0, (0-0)*0+0
14235
{0x020a0fff, ac_t0_inter_t1_using_primlod},
14236
// blast corps, unimp log. Added by Gonetz
14237
// (t1-t0)*t0+t0
14238
{0x024a024a, ac_t0_inter_t1_using_t0a},
14239
// zelda 2 [Ogy]. Added by Gonetz
14240
// (t1-t0)*t0+t0, (cmb-0)*prim+0 **INC**
14241
{0x024a0ef8, ac__t0_inter_t1_using_t0a__mul_prim},
14242
// text in a menu, Twisted_Edge_Extreme_Snowboarding [Razeil64]. Added by Gonetz
14243
// (prim-t0)*t0+t0 **INC**
14244
{0x024b024b, ac_t0},
14245
// enemy's shot, battle tanks 2
14246
// (env-prim)*t0+t0 **INC**
14247
{0x025d025d, ac_t0},
14248
//Bowser in final battle, Paper Mario. Added by Gonetz
14249
// (t1-env)*t0+t0, (cmb-env)*prim+0 ** INC **
14250
{0x026a0ee8, ac__t0_mul_t1__mul_prim},
14251
// paper mario. Added by Gonetz
14252
// (t1-env)*t0+t0, (cmb-0)*prim+0 ** INC **
14253
{0x026a0ef8, ac__t0_mul_t1__mul_prim},
14254
// V8-2
14255
// (prim-0)*t0+t0
14256
{0x027b027b, ac_t0_mul_prim_add_t0},
14257
// THPS3. Added by Gonetz
14258
// (0-0)*t0+t0
14259
{0x027f027f, ac_t0},
14260
// zelda 2. Added by Gonetz
14261
// (0-0)*t0+t0, (cmb-0)*prim+0
14262
{0x027f0ef8, ac_t0_mul_prim},
14263
// Spider Web attack, Pokemon Stadium 2.
14264
// (t1-t0)*t1+t0, (cmb-0)*prim+cmb
14265
{0x028a00f8, ac__t0_inter_t1_using_t1a__mul_prim_add__t0_inter_t1_using_t1a},
14266
// teleportation, Spacestation Silicon Valley. Added by Gonetz
14267
// (t1-t0)*t1+t0
14268
{0x028a028a, ac_t0_inter_t1_using_t1a},
14269
// mega shock, paper mario. Added by Gonetz
14270
// (t1-t0)*t1+t0, (cmb-0)*prim+0
14271
{0x028a0ef8, ac__t0_inter_t1_using_t1a__mul_prim},
14272
// mini game, Pokemon Stadium 2
14273
// (t1-t0)*t1+t0, (cmb-0)*shade+0
14274
{0x028a0f38, ac__t0_inter_t1_using_t1a__mul_shade},
14275
// Magnitude, pokemon stadium 2
14276
// (shade-t0)*t1+t0, (cmb-0)*shade+env
14277
{0x028c0b38, ac__t0_mul_t1__mul_shade},
14278
// paper mario. Added by Gonetz
14279
// (1-t0)*t1+t0, (t1-0)*prim+0 ** INC **
14280
{0x028e0efa, ac__one_sub_t0_mul_t1_add_t0__mul_prim},
14281
// {0x028e0efa, ac_t1_mul_prim},
14282
// Spider Web attack, Pokemon Stadium 2.
14283
// (1-t0)*t1+t0, (cmb-0)*shade+0 ** INC **
14284
{0x028e0f38, ac__one_sub_t0_mul_t1_add_t0__mul_prim},
14285
// paper mario. Added by Gonetz
14286
// (t1-env)*t1+t0, (cmb-0)*shade+0
14287
{0x02aa0f38, ac__t0_inter_t1_using_enva__mul_shade},
14288
// Scary dead boss thing, zelda
14289
// (env-1)*t1+t0, (cmb-0)*prim+0 * MAY need t1_inter_t0 instead...
14290
{0x02b50ef8, ac__env_sub_one_mul_t1_add_t0__mul_prim},
14291
// first screen, castlevania. Added by Gonetz
14292
// (env-0)*t1+t0 **INC**
14293
{0x02bd02bd, ac_t0},
14294
// enemy's shot, battle tanks 2 [Flash]
14295
// (1-0)*t1+t0, (0-0)*0+env
14296
{0x02be0bff, ac_env},
14297
// battle tanks 2 [Ogy]
14298
// (1-0)*t1+t0, (0-0)*0+1
14299
{0x02be0dff, ac_one},
14300
// menu screen, Rayman2. Added by Gonetz
14301
// (1-0)*t1+t0, (cmb-0)*shade+0
14302
{0x02be0f38, ac__t0_add_t1__mul_shade},
14303
// Sky, zelda
14304
//z (t1-t0)*prim+t0
14305
{0x02ca02ca, ac_t0_inter_t1_using_prima},
14306
// F1 World Grand Prix. Added by Gonetz
14307
// (t1-t0)*prim+t0, (0-0)*0+1
14308
{0x02ca0dff, ac_t0_inter_t1_using_prima},
14309
// logo, PD. Added by Gonetz
14310
// (t1-t0)*prim+t0, (cmb-0)*shade+0
14311
{0x02ca0f38, ac__t0_inter_t1_using_prima__mul_shade},
14312
// battle tanks [Ogy]
14313
// (t1-t0)*prim+t0, (cmb-0)*env+0
14314
{0x02ca0f78, ac__t0_inter_t1_using_prima__mul_env},
14315
// logo, Deadly Arts. Added by Gonetz
14316
// (env-t0)*prim+t0
14317
{0x02cd02cd, ac_one_sub_prim_mul_t0_add__prim_mul_env},
14318
// intro, castlevania 2. Added by Gonetz
14319
// (1-t0)*prim+t0
14320
{0x02ce02ce, ac_one_sub_t0_mul_prim_add_t0},
14321
// intro, diddy kong racing. Added by Gonetz
14322
// (1-t0)*prim+t0, (cmb-0)*shade+0 **INC**
14323
{0x02ce0f38, ac_t0_mul_shade},
14324
// submitted by Scorpiove, mario party 1
14325
// (0-t0)*prim+t0
14326
{0x02cf02cf, ac_one_sub_prim_mul_t0},
14327
// Pokemon attack, pokemon Stadium (J)
14328
// (t1-t1)*prim+t0, (prim-0)*lod_f+env **INC**
14329
{0x02d20a3b, ac_env},
14330
// Ground, pokemon stadium 2
14331
// (t0-0)*prim+t0
14332
{0x02f902f9, ac_t0_mul_prim},
14333
// GASP Fighters
14334
// (t1-0)*prim+t0, ** INC **
14335
{0x02fa02fa, ac_t1_mul_prim_add_t0},
14336
// foresight attack, Pokemon Stadium 2
14337
// (t1-0)*prim+t0, (cmb-env)*shade+0
14338
{0x02fa0f28, ac__t1_mul_prima_add_t0__sub_env_mul_shade},
14339
// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14340
// (t1-0)*prim+t0, (cmb-0)*shade+0
14341
{0x02fa0f38, ac__t1_mul_prima_add_t0__mul_shade},
14342
// Paper Mario, fortune teller
14343
// (t1-0)*prim+t0, (cmb-0)*env+0
14344
{0x02fa0f78, ac__t1_mul_prima_add_t0__mul_env},
14345
// Hydro Pump Attack, Pokemon Stadium.
14346
// (shade-0)*prim+t0, (cmb-0)*shade+0
14347
{0x02fc0f38, ac__t0_add_prim_mul_shade__mul_shade},
14348
// map, Ogre Battle 64. Added by Gonetz
14349
// (1-0)*prim+t0
14350
{0x02fe02fe, ac_t0_add_prim},
14351
// borders, Tony Hawk's Pro Skater 2. Added by Gonetz
14352
// (t1-t0)*shade+t0 ** INC **
14353
{0x030a030a, ac_t0_inter_t1_using_shadea},
14354
// Mickey USA
14355
// (t1-t0)*shade+t0, (cmb-0)*prim+0 ** INC **
14356
{0x030a0ef8, ac__t0_inter_t1_using_shadea__mul_prim},
14357
// Rocket Robot in Wheels intro
14358
// (t1-t0)*shade+t0, (cmb-0)*env+0 ** INC **
14359
{0x030a0f78, ac__t0_inter_t1_using_shadea__mul_env},
14360
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
14361
// (1-t0)*shade+t0, (cmb-0)*shade+0 ** INC **
14362
{0x030e0f38, ac_t0_mul_shade},
14363
// sky, f-zero x
14364
// (0-t0)*shade+t0
14365
{0x030f030f, ac_one_sub_shade_mul_t0},
14366
// Deku tree from kokiri villiage, zelda
14367
//z (t1-t0)*env+t0, (t1-0)*primlod+cmb
14368
{0x034a01ba, ac_t0_inter_t1_using_enva},
14369
// Hearts, zelda
14370
//z (t1-t0)*env+t0
14371
{0x034a034a, ac_t0_inter_t1_using_enva},
14372
// Faries, zelda
14373
//z (t1-t0)*env+t0, (cmb-0)*prim+0
14374
{0x034a0ef8, ac__t0_inter_t1_using_enva__mul_prim},
14375
// zelda, waterfall. Added by Gonetz
14376
//z (t1-t0)*env+t0, (cmb-0)*shade+0
14377
{0x034a0f38, ac__t0_inter_t1_using_enva__mul_shade},
14378
// pokemon stadium 1. Added by Gonetz
14379
//(t1-t0)*env+t0, (cmb-0)*primlod+0
14380
{0x034a0fb8, ac__t0_inter_t1_using_enva__mul_primlod},
14381
// fruits, Yoshi Story. Added by Gonetz
14382
//(prim-t0)*env+t0
14383
{0x034b034b, ac_prim_sub_t0_mul_env_add_t0},
14384
// window, Rayman2. Added by Gonetz
14385
//(1-t0)*env+t0
14386
{0x034e034e, ac_one_sub_t0_mul_env_add_t0},
14387
// menu, PokemonStadium1, [Raziel64]
14388
//(1-t0)*env+t0, (cmb-0)*shade+0 ** INC **
14389
{0x034e0f38, ac_t0_mul_shade},
14390
// Ganon's sword swinging, zelda
14391
// (t0-t1)*env+t0, (cmb-0)*prim+0 ** INC **
14392
{0x03510ef8, ac__t0_sub_t1_mul_enva_add_t0__mul_prim},
14393
// Lave piranha atack, Paper Mario
14394
// (t1-prim)*env+t0, (0-cmb)*t1+0 ** INC **
14395
{0x035a0e87, ac_t0_mul_t1},
14396
// Reflected fire at kotake & koume's, zelda
14397
// (t0-1)*env+t0, (cmb-0)*prim+0 ** INC **
14398
{0x03710ef8, ac__t0_sub_one_mul_enva_add_t0__mul_prim},
14399
// thing that escapes from the well, zelda
14400
// (t1-1)*env+t0 ** INC **
14401
{0x03720372, ac_t1_sub_one_mul_enva_add_t0},
14402
// Sword charge, zelda
14403
// (t1-1)*env+t0, (cmb-0)*prim+0
14404
{0x03720ef8, ac__t1_sub_one_mul_enva_add_t0__mul_prim},
14405
// Gannon hitting the ground, zelda
14406
// (t1-1)*env+t0, (cmb-0)*shade+0 ** INC **
14407
{0x03720f38, ac__t1_sub_one_mul_enva_add_t0__mul_shade},
14408
// Tony Hawk's Pro Skater 3. Added by Gonetz
14409
// (t0-0)*env+t0
14410
{0x03790379, ac_t0_mul_env},
14411
// paper mario. Added by Gonetz
14412
// (t0-0)*env+t0, (cmb-0)*prim+0
14413
{0x03790ef8, ac_t0_mul_prim},
14414
// pads, Pokemon Stadium 2. Added by Gonetz
14415
// (t1-0)*env+t0, (cmb-0)*prim+env ** INC **
14416
{0x037a0af8, ac__t0_inter_t1_using_enva__mul_prim_add_env},
14417
// attack, Pokemon Stadium 2
14418
// (t1-0)*env+t0, (cmb-t0)*prim+0 ** INC **
14419
{0x037a0ec8, ac__t1_mul_enva_add_t0__mul_prim},
14420
// Ice arrow gfx, zelda
14421
// (t1-0)*env+t0, (cmb-0)*prim+0
14422
{0x037a0ef8, ac__t1_mul_enva_add_t0__mul_prim},
14423
// Scary face move, pokemon stadium 2
14424
// (t1-0)*env+t0, (cmb-prim)*shade+0
14425
{0x037a0f18, ac__t1_mul_enva_add_t0__sub_prim_mul_shade},
14426
// Saria's song, zelda
14427
// (t1-0)*env+t0, (cmb-0)*shade+0
14428
{0x037a0f38, ac__t1_mul_enva_add_t0__mul_shade},
14429
// eye drops bottle, zelda
14430
// (t0-t0)*prim_lodfrac+t0
14431
{0x03890389, ac_t0},
14432
// lighthouse's beam, zelda 2. Added by Gonetz
14433
// (t0-t0)*prim_lodfrac+t0, (cmb-0)*prim+0
14434
{0x03890ef8, ac_t0_mul_prim},
14435
// zelda 2. Added by Gonetz
14436
// (t1-t0)*primlod+t0, (cmb-0)*env+cmb ** INC **
14437
{0x038a0178, ac__t0_inter_t1_using_primlod__mul_env_add__t0_inter_t1_using_primlod},
14438
// Enter name letter background, zelda
14439
//z (t1-t0)*primlod+t0
14440
{0x038a038a, ac_t0_inter_t1_using_primlod},
14441
// Sunny Day, Pokemon Stadium 2
14442
// (t1-t0)*primlod+t0, (cmb-0)*0+prim
14443
{0x038a07f8, ac_prim},
14444
//attack, Pokemon Stadium 2
14445
// (t1-t0)*primlod+t0, (cmb-env)*shade+shade ** INC **
14446
{0x038a0928, ac__t0_inter_t1_using_primlod__sub_env_mul_shade_add_shade},
14447
// blastcorps, unimp log. Added by Gonetz
14448
// (t1-t0)*primlod+t0, (0-0)*0+shade **INC**?
14449
{0x038a09ff, ac_t0_inter_t1_using_primlod},
14450
// pokemon attack, pokemon monsters (J)
14451
// (t1-t0)*primlod+t0, (cmb-0)*prim+env
14452
{0x038a0af8, ac__t0_inter_t1_using_primlod__mul_prim_add_env},
14453
// sky, PGA European Tour
14454
// (t1-t0)*primlod+t0, (0-0)*0+1
14455
{0x038a0dff, ac_one},
14456
// Ice surrounding enemy, zelda
14457
// (t1-t0)*primlod+t0, (env-0)*lodf+0
14458
{0x038a0e3d, ac__t0_inter_t1_using_primlod__mul_env},
14459
// the bridge out side the mountain smithy shop, zelda 2 [Ogy]. Added by Gonetz
14460
// (t1-t0)*primlod+t0, (cmb-0)*t0+0
14461
{0x038a0e78, ac_t0_inter_t1_using_primlod},
14462
// zelda 2, [Ogy]. Added by Gonetz
14463
// (t1-t0)*primlod+t0, (cmb-0)*t1+0
14464
{0x038a0eb8, ac_t0_inter_t1_using_primlod},
14465
// Kirby's pool, smash bros
14466
// (t1-t0)*primlod+t0, (cmb-0)*prim+0
14467
{0x038a0ef8, ac__t0_inter_t1_using_primlod__mul_prim},
14468
// Samus stage fire, smash bros
14469
// (t1-t0)*primlod+t0, (cmb-0)*shade+0
14470
{0x038a0f38, ac__t0_inter_t1_using_primlod__mul_shade},
14471
// something about ice, zelda
14472
// (t1-t0)*primlod+t0, (cmb-0)*env+0
14473
{0x038a0f78, ac__t0_inter_t1_using_primlod__mul_env},
14474
// Blast Corps. Added by Gonetz
14475
// (t1-t0)*primlod+t0, (shade-0)*env+0
14476
{0x038a0f7c, ac_env_mul_shade},
14477
// goals, J. League Tactics Soccer. Added by Gonetz
14478
// (prim-t0)*primlod+t0 ** INC **
14479
{0x038b038b, ac_t0},
14480
// zelda 2, [Ogy]. Added by Gonetz
14481
// (t0-t1)*primlod+t0, (cmb-0)*prim+0
14482
{0x03910ef8, ac__t0_sub_t1_mul_primlod_add_t0__mul_prim},
14483
// a plane in the entrance to the mountain village zelda 2, [Ogy]. Added by Gonetz
14484
// (t1-t1)*primlod+t0, (cmb-0)*prim+0 ** INC **?
14485
{0x03920ef8, ac_t0_mul_prim},
14486
// zelda 2. Added by Gonetz
14487
// (t1-prim)*primlod+t0, (cmb-0)*prim+0 ** INC **
14488
{0x039a0ef8, ac__t1_sub_prim_mul_primlod_add_t0__mul_prim},
14489
// zelda 2. Added by Gonetz
14490
// (t1-shade)*primlod+t0, (cmb-0)*shade+0 ** INC **
14491
{0x03a20f38, ac__t1_sub_shade_mul_primlod_add_t0__mul_shade},
14492
// saffron city, Pokemon Stadium 2
14493
// (t1-1)*primlod+t0, (cmb-0)*0+cmb
14494
{0x03b201f8, ac_t1_sub_one_mul_primlod_add_t0},
14495
// Candle flame in ganon's castle, zelda
14496
// (t1-1)*primlod+t0
14497
{0x03b203b2, ac_t1_sub_one_mul_primlod_add_t0},
14498
// Fire, zelda
14499
//z (t1-1)*primlod+t0, (cmb-0)*prim+0 ** INC **
14500
{0x03b20ef8, ac__t1_sub_one_mul_primlod_add_t0__mul_prim},
14501
// explosion, zelda 2. Added by Gonetz
14502
// (t1-1)*primlod+t0, (t0-0)*prim+0 ** INC **
14503
{0x03b20ef9, ac_t0_mul_prim},
14504
// Din's fire, zelda
14505
// (t1-1)*prim_lodfrac+t0, (cmb-0)*shade+0 ** INC **
14506
{0x03b20f38, ac__t1_sub_one_mul_primlod_add_t0__mul_shade},
14507
// Fire cloud, zelda
14508
// (t1-1)*prim_lodfrac+t0, (cmb-0)*env+0 ** INC **
14509
{0x03b20f78, ac__t1_sub_one_mul_primlod_add_t0__mul_env},
14510
// zelda 2 [Ogy]. Added by Gonetz
14511
// (prim-1)*prim_lodfrac+t0, (cmb-0)*env+0 ** INC **
14512
{0x03b30f78, ac__prim_sub_one_mul_primlod_add_t0__mul_env},
14513
// fairy's spirit, zelda oot
14514
// (t0-0)*primlod+t0
14515
{0x03b903b9, ac_t0_mul_primlod_add_t0},
14516
// Scary face, pokemon stadium 2
14517
// (t0-0)*primlod+t0, (cmb-0)*prim+0
14518
{0x03b90ef8, ac_t0_mul_prim},
14519
// Magnitude attack, Pokemon Stadium 2
14520
// (t0-0)*primlod+t0, (cmb-0)*shade+0
14521
{0x03b90f38, ac__t0_mul_primlod_add_t0__mul_shade},
14522
// Leftovers Recovery, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14523
// (t1-0)*prim_lodfrac+t0, (cmb-env)*prim+0 ** INC **
14524
{0x03ba0ee8, ac__t1_mul_primlod_add_t0__sub_env_mul_prim},
14525
// zelda 2 [Ogy]. Added by Gonetz
14526
// (t1-0)*prim_lodfrac+t0, (cmb-0)*prim+0
14527
{0x03ba0ef8, ac__t1_mul_primlod_add_t0__mul_prim},
14528
// Mega punch attack, Pokemon Stadium 2
14529
// (t1-0)*prim_lodfrac+t0, (cmb-prim)*shade+0
14530
{0x03ba0f18, ac__t1_mul_primlod_add_t0__sub_prim_mul_shade},
14531
// zelda 2 [Ogy]. Added by Gonetz
14532
// (t1-0)*prim_lodfrac+t0, (cmb-0)*shade+0
14533
{0x03ba0f38, ac__t1_mul_primlod_add_t0__mul_shade},
14534
// chuchu monsters, zelda 2 [Ogy]. Added by Gonetz
14535
// (t1-0)*prim_lodfrac+t0, (cmb-0)*env+0
14536
{0x03ba0f78, ac__t1_mul_primlod_add_t0__mul_env},
14537
// Scary face, pokemon stadium 2
14538
// (env-0)*primlod+t0, (cmb-0)*prim+0
14539
{0x03bd0ef8, ac_t0_mul_prim},
14540
// ground, zelda 2. Added by Gonetz
14541
// (t1-t0)*0+t0, (cmb-0)*0+cmb
14542
{0x03ca01f8, ac_t0},
14543
// zelda 2. Added by Gonetz
14544
// (t1-t0)*0+t0, (cmb-0)*prim+0
14545
{0x03ca0ef8, ac_t0_mul_prim},
14546
// smoke in a night, zelda 2. Added by Gonetz
14547
// (t1-t0)*0+t0, (cmb-0)*shade+0
14548
{0x03ca0f38, ac_t0_mul_shade},
14549
//the ice plane out side the mountain smithy shop, zelda 2 [Ogy]. Added by Gonetz
14550
//(t1-1)*0+t0, (cmb-0)*env+0
14551
{0x03f20f78, ac_t0_mul_env},
14552
//something on level 5, Kirby64 [Raziel64]
14553
//(t0-0)*0+t0
14554
{0x03f903f9, ac_t0},
14555
//spider house, zelda 2 [Ogy]. Added by Gonetz
14556
//(t0-0)*0+t0, (cmb-0)*prim+0
14557
{0x03f90ef8, ac_t0_mul_prim},
14558
//Darmani's fire spin, zelda 2 [Ogy]. Added by Gonetz
14559
//(t1-0)*0+t0, (cmb-0)*prim+0
14560
{0x03fa0ef8, ac_t0_mul_prim},
14561
// headlight, beetle adventure racing. Added by Gonetz
14562
//(1-0)*0+t0
14563
{0x03fe03fe, ac_t0},
14564
// player, super bowling
14565
// (0-0)*0+t0,
14566
{0x03ff0000, ac_t0},
14567
// Ghost's lantern, zelda
14568
// (0-0)*0+t0, (t1-0)*prim_lod+cmb
14569
{0x03ff01ba, ac_t1_mul_primlod_add_t0},
14570
// Hand cursor, mario
14571
//z (0-0)*0+t0
14572
{0x03ff03ff, ac_t0},
14573
// Taz express. Added by Gonetz
14574
// (0-0)*0+t0, (0-0)*0+t1
14575
{0x03ff05ff, ac_t0},
14576
// powder keg, zelda2. Added by Gonetz
14577
// (0-0)*0+t0, (0-0)*0+prim
14578
{0x03ff07ff, ac_t0},
14579
// water, Spacestation Silicon Valley. Added by Gonetz
14580
// (0-0)*0+t0, (0-0)*0+shade
14581
{0x03ff09ff, ac_t0},
14582
// Characters, Ogre Battle. Added by Gonetz.
14583
// (0-0)*0+t0, (cmb-0)*prim+env
14584
{0x03ff0af8, ac_t0_mul_prim_add_env},
14585
// Monster truck madness intro. Added by Gonetz
14586
// (0-0)*0+t0, (0-0)*0+env
14587
{0x03ff0bff, ac_t0},
14588
// Battlezone
14589
// (0-0)*0+t0, (0-0)*0+1
14590
{0x03ff0dff, ac_t0},
14591
// Zoras, zelda
14592
// (0-0)*0+t0, (env-0)*lodf+0
14593
{0x03ff0e3d, ac_env},
14594
// logo, v-rally 99
14595
// (0-0)*0+t0, (prim-0)*t0+0
14596
{0x03ff0e7b, ac_t0_mul_prim},
14597
// intro, WWF-War Zone
14598
// (0-0)*0+t0, (env-0)*t0+0
14599
{0x03ff0e7d, ac_t0_mul_env},
14600
// Window, starfox
14601
//z (0-0)*0+t0, (cmb-0)*prim+0
14602
{0x03ff0ef8, ac_t0_mul_prim},
14603
//beetle adventure racing. Added by Gonetz
14604
// (0-0)*0+t0, (cmb-0)*shade+0
14605
{0x03ff0f38, ac_t0_mul_shade},
14606
// Wonder Project J2 logo. Added by Gonetz
14607
// (0-0)*0+t0, (t0-0)*shade+0
14608
{0x03ff0f39, ac_t0_mul_shade},
14609
// Saria's suit, zelda
14610
// (0-0)*0+t0, (cmb-0)*env+0
14611
{0x03ff0f78, ac_t0_mul_env},
14612
// Pokemon Stadium 2, [Jeremy]. Added by Gonetz
14613
// (0-0)*0+t0, (cmb-0)*primlod+0
14614
{0x03ff0fb8, ac_t0_mul_primlod},
14615
// Tony Hawk's Pro Skater. Added by Gonetz
14616
// (0-0)*0+t0, (0-0)*0+0
14617
{0x03ff0fff, ac_zero},
14618
// Spider Web attack, Pokemon Stadium 2.
14619
// (t0-t1)*t0+t1, (cmb-0)*prim+cmb **INC**
14620
{0x045100f8, ac__t1_inter_t0_using_t0a__mul_prim_add__t1_inter_t0_using_t0a},
14621
// Powered Star Beam, Paper Mario. Added by Gonetz
14622
// (t0-t1)*t0+t1, (cmb-0)*prim+0 **INC**
14623
{0x04510ef8, ac__t1_inter_t0_using_t0a__mul_prim},
14624
// Deadly Arts logo. Added by Gonetz
14625
// (1-0)*t0+t1, (1-0)*prim+cmb
14626
{0x047e00fe, ac__t0_add_t1__add_prim},
14627
// Spiderman. Added by Gonetz
14628
// (1-0)*t0+t1
14629
{0x047e047e, ac_t0_add_t1},
14630
// water, Dobutsu no Mori. Added by Gonetz
14631
// (1-0)*t0+t1, (cmb-0)*primlod+prim
14632
{0x047e07b8, ac__t0_add_t1__mul_primlod_add_prim},
14633
// paper mario. Added by Gonetz
14634
// (1-t0)*t1+t1, (cmb-0)*t1+0 **INC**
14635
{0x048e0eb8, ac_t0_mul_t1},
14636
// Pokemon Stadium 2. Added by Gonetz
14637
// (t0-prim)*t1+t1, (cmb-0)*shade+0 **INC**
14638
{0x04990f38, ac_t1_mul_shade},
14639
// waterfall, Dobutsu no Mori. Added by Gonetz
14640
// (t0-0)*t1+t1
14641
{0x04b904b9, ac_t0_mul_t1_add_t1},
14642
// light, Dobutsu no Mori. Added by Gonetz
14643
// (t0-0)*t1+t1, (cmb-0)*primlod+0 ** INC **
14644
{0x04b90fb8, ac__t0_add_t1__mul_primlod},
14645
// lava, beetle adventure racing
14646
// (t1-0)*t1+t1, (cmb-0)*shade+0 ** INC **
14647
{0x04ba0f38, ac__t1_mul_t1_add_t1__mul_shade},
14648
// wheels, F1 World Grand Prix. Added by Gonetz
14649
// (t0-t1)*prim+t1
14650
{0x04d104d1, ac_t1_inter_t0_using_prima},
14651
// intro, castlevania 2. Added by Gonetz
14652
// (t0-t1)*prim+t1, (cmb-0)*shade+0
14653
{0x04d10f38, ac__t1_inter_t0_using_prima__mul_shade},
14654
// flame, castlevania 2. Added by Gonetz
14655
// (t0-t1)*prim+t1, (cmb-0)*env+0
14656
{0x04d10f78, ac__t1_inter_t0_using_prima__mul_env},
14657
// walls, beetle adventure racing. Added by Gonetz
14658
// (t0-0)*prim+t1 **INC**
14659
{0x04f904f9, ac_t0_mul_prim},
14660
// Reflect pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14661
// (t0-0)*prim+t1, (cmb-0)*prim+env **INC**
14662
{0x04f90af8, ac__t0_add_t1__mul_prim_add_env},
14663
// Psychic pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14664
// (t0-0)*prim+t1, (cmb-0)*shade+0 **INC**
14665
{0x04f90f38, ac__t0_add_t1__mul_shade},
14666
// Rayman2. Added by Gonetz
14667
// (0-0)*shade+t1, (cmb-0)*env+0
14668
{0x053f0f78, ac_t1_mul_env},
14669
// Ground at kotake & koume, zelda
14670
// (t1-t0)*env+t1, (cmb-0)*prim+0 ** INC **
14671
{0x054a0ef8, ac__t1_sub_t0_mul_enva_add_t1__mul_prim},
14672
// Tony Hawk's Pro Skater. Added by Gonetz
14673
// (t0-t1)*env+t1
14674
{0x05510551, ac_t1_inter_t0_using_enva},
14675
// Shiek's disappearance, zelda
14676
// (t0-1)*env+t1
14677
{0x05710571, ac_t0_sub_one_mul_enva_add_t1},
14678
// Kotake or koume's magic poof, zelda
14679
// (t0-1)*env+t1, (cmb-0)*prim+0 ** INC **
14680
{0x05710ef8, ac__t0_sub_one_mul_enva_add_t1__mul_prim},
14681
// Gauntlet Legends intro
14682
// (t0-0)*env+t1, (cmb-0)*prim+0 ** INC **
14683
{0x05790ef8, ac__t0_add_t1__mul_prim},
14684
// Zelda opening door, zelda
14685
// (t0-0)*env+t1, (cmb-0)*shade+0
14686
{0x05790f38, ac_t1_mul_shade},
14687
// paper mario. Added by Gonetz
14688
// (t1-0)*env+t1, (cmb-0)*prim+0 ** INC **
14689
{0x057a0ef8, ac_t1_mul_prim},
14690
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
14691
// (t0-t1)*prim_lod+t1, (cmb-0)*prim+0
14692
{0x05910ef8, ac__t1_inter_t0_using_primlod__mul_prim},
14693
// Skulltula coin, zelda
14694
// (t0-1)*primlod+t1 ** INC **
14695
{0x05b105b1, ac_t0_mul_t1},
14696
// Bell, Pokemon Stadium 2. Added by Gonetz
14697
// (t0-0)*primlod+t1, (cmb-env)*prim ** INC **
14698
{0x05b90ee8, ac__t0_add_t1__mul_prim},
14699
// intro, Aidyn Chronicles. Added by Gonetz
14700
// (0-cmb)*0+t1, (t1-1)*0+cmb
14701
{0x05c701f2, ac_t1},
14702
// zelda 2 [Ogy]. Added by Gonetz
14703
// (t1-t0)*0+t1, (cmb-0)*prim+0
14704
{0x05ca0ef8, ac_t1_mul_prim},
14705
// beaver's river, zelda 2. Added by Gonetz
14706
// (t1-0)*0+t1, (cmb-0)*prim+0
14707
{0x05fa0ef8, ac_t1_mul_prim},
14708
// Arena, pokemon stadium 2
14709
// (0-0)*0+t1, (0-0)*t0+cmb
14710
{0x05ff007f, ac_t1},
14711
// Ogre Battle, unimp log. Added by Gonetz
14712
// (0-0)*0+t1, (0-0)*0+cmb
14713
{0x05ff05ff, ac_t1},
14714
// lullaby, Paper Mario. Added by Gonetz
14715
// (0-0)*0+t1, (cmb-0)*prim+0
14716
{0x05ff0ef8, ac_t1_mul_prim},
14717
// aerofighter's assault [Ogy]
14718
// (0-0)*0+t1, (cmb-0)*shade+0
14719
{0x05ff0f38, ac_t1_mul_shade},
14720
// magic fist, Rayman2. Added by Gonetz
14721
// (0-0)*0+t1, (cmb-0)*env+0
14722
{0x05ff0f78, ac_t1_mul_env},
14723
// Pokemon selection background, Pokemon stadium 2
14724
// (env-prim)*t0+prim
14725
{0x065d065d, ac_env_sub_prim_mul_t0_add_prim},
14726
// text background, Ganbare Goemon - Mononoke Sugoroku
14727
// (1-prim)*t0+prim
14728
{0x065e065e, ac_one_sub_prim_mul_t0_add_prim},
14729
// shadows, star wars: ep1 racer
14730
// (0-prim)*t0+prim
14731
{0x065f065f, ac_zero_sub_prim_mul_t0_add_prim},
14732
// lava, beetle adventure racing
14733
// (0-1)*t0+prim, (cmb-0)*prim+0 ** INC **
14734
{0x06770ef8, ac_t0_mul_prim},
14735
// menu, Ganbare Goemon - Mononoke Sugoroku
14736
// (t0-0)*t0+prim
14737
{0x06790679, ac_t0_add_prim},
14738
// Water, pokemon stadium 2
14739
// (t1-0)*t0+prim
14740
{0x067a067a, ac_t0_mul_t1_add_prim},
14741
// Smackdown Mall Menu, WWF No Mercy
14742
// (shade-0)*t0+prim
14743
{0x067c067c, ac_t0_mul_shade_add_prim},
14744
// flag, Top Gear Rally 2. Added by Gonetz
14745
// (env-0)*t0+prim
14746
{0x067d067d, ac_t0_mul_env_add_prim},
14747
// Mario Tennis. Added by Gonetz
14748
// (1-0)*t0+prim
14749
{0x067e067e, ac_t0_add_prim},
14750
// sky, PGA European Tour
14751
// (t0-0)*t1+prim
14752
{0x06b906b9, ac_t0_mul_t1_add_prim},
14753
// lava, beetle adventure racing
14754
// (t0-0)*t1+prim, (0-0)*0+1 **INC**?
14755
{0x06b90dff, ac_one},
14756
// Pokemon Stadium 2, [Jeremy]. Added by Gonetz
14757
// (prim-0)*t1+prim
14758
{0x06bb06bb, ac_t1_mul_prim_add_prim},
14759
// pokemon psyattack, Pokemon Stadium 2. Added by Gonetz
14760
// (1-0)*t1+prim, (cmb-0)*env+0
14761
{0x06be0f78, ac_t1_add_prim_mul_env},
14762
// Rush2 2. Added by Gonetz
14763
// (prim-prim)*prim+prim
14764
{0x06db06db, ac_prim},
14765
//Spacestation Silicon Valley intro. Added by Gonetz
14766
// (t1-prim)*shade+prim
14767
// {0x071a071a, ac_t1_mul_shade},
14768
{0x071a071a, ac_t1_sub_prim_mul_shade_add_prim},
14769
//KI logos. Added by Gonetz
14770
// (env-prim)*shade+prim
14771
{0x071d071d, ac_env_sub_prim_mul_shade_add_prim},
14772
// Deadly Arts, arena. Added by Gonetz
14773
// (1-0)*shade+prim
14774
{0x073e073e, ac_prim_add_shade},
14775
// Phantom Gannon's portal, zelda
14776
// (t1-t0)*env+prim, (cmb-0)*shade+0 ** INC **
14777
{0x074a0f38, ac__t0_mul_t1__mul_prim_mul_shade},
14778
// Road rush. Added by Gonetz
14779
// (t0-0)*env+prim
14780
{0x07790779, ac_t0_mul_env_add_prim},
14781
// arena, Pokemon Stadium 2
14782
// (shade-t0)*primlod+prim, (cmb-t0)*shade ** INC **
14783
{0x078c0f08, ac_shade_sub_t0_mul_primlod_add_prim},
14784
// telescope, zelda 2. Added by Gonetz
14785
// (1-t0)*primlod+prim
14786
{0x078e078e, ac_one_sub_t0_mul_primlod_add_prim},
14787
// zelda 2 [Ogy]. Added by Gonetz
14788
// (t0-t1)*primlod+prim, (cmb-0)*t0+0
14789
{0x07910e78, ac_t0_inter_t1_using_primlod},
14790
// Dobutsu no Mori. Added by Gonetz
14791
// (t0-0)*primlod+prim
14792
{0x07b907b9, ac_t0_mul_primlod_add_prim},
14793
// Lock-On attack, Pokemon Stadium 2
14794
// (t1-t0)*0+prim, (cmb-0)*0+cmb
14795
{0x07ca01f8, ac_prim},
14796
// water, DK64
14797
// (0-0)*0+0, (0-t1)*0+prim
14798
{0x07d707d7, ac_prim},
14799
// Menu, megaman
14800
// (1-0)*0+prim
14801
{0x07fe07fe, ac_prim},
14802
// super bowling
14803
//(0-0)*0+prim,
14804
{0x07ff0000, ac_prim},
14805
// menu, Ganbare Goemon - Mononoke Sugoroku
14806
// (0-0)*0+prim, (0-0)*0+t0
14807
{0x07ff03ff, ac_t0},
14808
// Intro background, starfox
14809
//z (0-0)*0+prim
14810
{0x07ff07ff, ac_prim},
14811
// velva boss, JFG
14812
//(0-0)*0+prim, (0-0)*0+env
14813
{0x07ff0bff, ac_env},
14814
// gem, castlevania 2. Added by Gonetz
14815
// (0-0)*0+prim, (cmb-0)*t0+0
14816
{0x07ff0e78, ac_t0_mul_prim},
14817
// text, Tony Hawk's Pro Skater. Added by Gonetz
14818
// (0-0)*0+prim, (cmb-0)*t1+0
14819
{0x07ff0eb8, ac_t1_mul_prim}, //weird, but implementing this makes text unreadable
14820
// zelda 2. Added by Gonetz
14821
// (0-0)*0+prim, (cmb-0)*prim+0
14822
{0x07ff0ef8, ac_prim_mul_prim},
14823
// explosion, Blast Corps. Added by Gonetz
14824
// (0-0)*0+prim, (t0-0)*prim+0
14825
{0x07ff0ef9, ac_t0_mul_prim},
14826
// zelda 2, [Ogy]. Added by Gonetz
14827
// (0-0)*0+prim, (cmb-0)*shade+0
14828
{0x07ff0f38, ac_prim_mul_shade},
14829
// Fox's ears and arms, smash bros
14830
// (0-0)*0+prim, (cmb-0)*env+0
14831
{0x07ff0f78, ac_prim_mul_env},
14832
// monsters, Pokemon Stadium. Added by Gonetz
14833
// (0-0)*0+prim, (cmb-0)*primlod+0
14834
{0x07ff0fb8, ac_prim_mul_primlod},
14835
// Hydro Pump Attack, Pokemon Stadium.
14836
// (1-t1)*t0+shade, (cmb-prim)*shade+0
14837
{0x08560f18, ac__one_sub_t1_mul_t0_add_shade__sub_prim_mul_shade},
14838
// focus, Paper Mario. Added by Gonetz
14839
//(t0-shade)*t0+shade, (cmb-0)*prim+0 * INC **
14840
{0x08610ef8, ac_t0_mul_prim},
14841
// Mario's head, mario //Added by Gonetz
14842
//(prim-shade)*t0+shade
14843
{0x08630863, ac_prim_sub_shade_mul_t0_add_shade},
14844
// Fissure attack, pokemon stadium 2
14845
//(t1-t0)*prim+shade, (cmb-0)*shade+0
14846
{0x08ca0f38, ac__t1_sub_t0_mul_prim_add_shade__mul_shade},
14847
// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
14848
//(t0-t1)*prim+shade, (cmb-0)*shade+0 ** INC **
14849
{0x08d10f38, ac__t0_sub_t1_mul_prim_add_shade__mul_shade},
14850
// ?
14851
//(t0-shade)*prim+shade
14852
{0x08e108e1, ac_t0_mul_prim_add_shade_mul_one_minus_prim},
14853
// Paper Mario
14854
// (t0-prim)*shade+shade, (cmb-0)*env+0
14855
{0x09190f78, ac__t0_sub_prim_mul_shade_add_shade__mul_env},
14856
// pads, Pokemon Stadium 2. Added by Gonetz
14857
// (0-t0)*env+shade, (cmb-0)*prim+0 ** INC **
14858
{0x094f0ef8, ac_one_sub_t0_mul_prim_mul_shade},
14859
// sun rays, Pokemon Stadium 2.
14860
// (shade-0)*env+shade, (cmb-0)*prim+0
14861
{0x097c0ef8, ac_one_plus_env_mul_prim_mul_shade},
14862
// attack, Pokemon Stadium 2.
14863
// (t0-0)*primlod+shade, (cmb-0)*shade+0
14864
{0x09b90f38, ac__t0_mul_primlod_add_shade__mul_shade},
14865
// Huge turtle appearance, zelda 2. Added by Gonetz
14866
// (t1-0)*primlod+shade, (cmb-0)*shade+0 ** INC **
14867
{0x09ba0f38, ac__t1_mul_primlod_add_shade__mul_shade},
14868
// roof, Kirby 64. Added by Gonetz
14869
// (t0-0)*0+shade
14870
{0x09f909f9, ac_shade},
14871
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
14872
// (0-0)*0+shade, (cmb-cmb)*lodf+cmb
14873
{0x09ff0000, ac_shade},
14874
// water temple, zelda 2. Added by Gonetz
14875
// (0-0)*0+shade, (cmb-0)*prim+cmb
14876
{0x09ff00f8, ac_prim_mul_shade_add_shade},
14877
// damaged car, SCARS. Added by Gonetz
14878
// (0-0)*0+shade, (t0-t1)*primlod+prim ** INC **
14879
{0x09ff0791, ac_t0_mul_primlod_add_prim},
14880
// Hyrule castle gate, zelda
14881
//z (0-0)*0+shade, (0-0)*0+prim
14882
{0x09ff07ff, ac_prim},
14883
// Super Mario 64 logo
14884
//z (0-0)*0+shade
14885
{0x09ff09ff, ac_shade},
14886
// terrain, SCARS. Added by Gonetz
14887
// (0-0)*0+shade, (0-0)*0+1
14888
{0x09ff0dff, ac_one},
14889
// terrain, SCARS. Added by Gonetz
14890
// (0-0)*0+shade, (t0-0)*t1+0
14891
{0x09ff0eb9, ac_t0_mul_t1},
14892
// N64 logo, Aidyn Chronicles. Added by Gonetz
14893
// (0-0)*0+shade, (cmb-0)*prim+0
14894
{0x09ff0ef8, ac_prim_mul_shade},
14895
// birds?, custom robo. Added by Gonetz
14896
// (0-0)*0+shade, (cmb-0)*shade+0
14897
{0x09ff0f38, ac_shade},
14898
// sky, Glover, [Raziel64]. Added by Gonetz
14899
// (0-0)*0+shade, (t0-0)*shade+0
14900
{0x09ff0f39, ac_t0_mul_shade},
14901
// Hand, smash bros
14902
// (0-0)*0+shade, (cmb-0)*env+0
14903
{0x09ff0f78, ac_env_mul_shade},
14904
// Conker's helicopter tail, CBFD
14905
// (0-0)*0+shade, (shade-0)*env+0
14906
{0x09ff0f7c, ac_env_mul_shade},
14907
// menu, PokemonStadium1, [Raziel64]
14908
// (0-0)*0+shade, (cmb-0)*primlod+0
14909
{0x09ff0fb8, ac_primlod_mul_shade},
14910
// Link's sword slashing, smash bros
14911
// (prim-env)*t0+env
14912
{0x0a6b0a6b, ac_prim_sub_env_mul_t0_add_env},
14913
// Reflected beam at kotake & koume's, zelda
14914
// (prim-env)*t0+env, (cmb-0)*prim+0 ** INC **
14915
{0x0a6b0ef8, ac_t0_mul_prim},
14916
// teleporter, Spacestation Silicon Valley. Added by Gonetz
14917
// (prim-env)*t0+env, (cmb-0)*shade+0 ** INC **
14918
{0x0a6b0f38, ac_t0_mul_shade},
14919
// Ridge Racer, unimp log. Added by Gonetz
14920
// (prim-env)*t0+env, (cmb-0)*primlod+0
14921
{0x0a6b0fb8, ac_prim_sub_env_mul_t0_add_env},
14922
// Kotake or koume's hair, zelda
14923
// (prim-0)*t0+env
14924
{0x0a7b0a7b, ac_t0_mul_prim_add_env},
14925
// menu, doubut no mori
14926
// (1-0)*t0+env
14927
{0x0a7e0a7e, ac_t0_add_env},
14928
// Grass, mario golf
14929
// (env-shade)*t1+env, (0-0)*0+1
14930
{0x0aa50dff, ac_one},
14931
// Ridge Racer, cars select. Added by Gonetz
14932
// (prim-env)*t1+env
14933
{0x0aab0aab, ac_prim_sub_env_mul_t1_add_env},
14934
// text, monster truck madness
14935
// (prim-env)*t1+env, (cmb-0)*t1+0
14936
{0x0aab0eb8, ac_t1_mul_env},
14937
// zelda 2 [Ogy]. Added by Gonetz
14938
// (1-0)*t1+env, (0-0)*0+cmb
14939
//{0x0abe0abe, ac_one},
14940
{0x0abe0abe, ac_t1_add_env},
14941
// arena, Pokemon Stadium 2. Added by Gonetz
14942
// (1-t0)*prim+env, (cmb-0)*shade+0
14943
{0x0ace0f38, ac_one_sub_t0_mul_prim_mul_shade},
14944
// intro, Bomberman 64 - 2. Added by Gonetz
14945
// (t0-env)*prim+env
14946
{0x0ae90ae9, ac_t0_sub_env_mul_prim_add_env},
14947
// N64 logo, Ogre Battle. Added by Gonetz
14948
// (t0-0)*prim+env
14949
{0x0af90af9, ac_t0_mul_prim_add_env},
14950
// girls, PD intro. Added by Gonetz
14951
// (t0-env)*shade+env ** INC **
14952
{0x0b290b29, ac_t0_sub_env_mul_shadea_add_env},
14953
// Text, Mia Soccer. Added by Gonetz
14954
// (t0-env)*shade+env, (cmb-0)*lod_fraction+0 ** INC **
14955
{0x0b290e38, ac_t0_sub_env_mul_shadea_add_env},
14956
// shadows, Mario Tennis. Added by Gonetz
14957
// (prim-env)*shade+env, (0-cmb)*t1+cmb ** INC **
14958
{0x0b2b0087, ac_prim_sub_env_mul_shade_add_env_mul_t1},
14959
// lamppost?, Ridge Racer. Added by Gonetz
14960
// (prim-env)*shade+env, (0-0)*0+cmb
14961
{0x0b2b0b2b, ac_prim_sub_env_mul_shade_add_env},
14962
// ground, zelda2. Added by Gonetz
14963
// (1-env)*shade+env, (t1-0)*prim+0
14964
{0x0b2e0efa, ac_t1_mul_prim},
14965
// GASP Fighters
14966
// (t0-0)*shade+env
14967
{0x0b390b39, ac_t0_mul_shade_add_env},
14968
// destroying stuff, golden eye
14969
// (1-0)*shade+env
14970
{0x0b3e0b3e, ac_env_add_shade},
14971
// Torches, Paper Mario. Added by Gonetz
14972
// (t0-t1)*env+env, (0-0)*0+1
14973
{0x0b510dff, ac_t0_sub_t1_mul_env_add_env},
14974
// Mini Racers
14975
// (t0-0)*primlod+env
14976
{0x0bb90bb9, ac_t0_mul_primlod_add_env},
14977
// International Track and Field 2000. Added by Gonetz
14978
// (t0-0)*0+env
14979
{0x0bf90bf9, ac_env},
14980
// TM, mario
14981
//z (0-0)*0+env
14982
{0x0bff0bff, ac_env},
14983
// rancho monster, zelda2. Added by Gonetz
14984
// (0-0)*0+env, (cmb-0)*t1+0
14985
{0x0bff0eb8, ac_t1_mul_env},
14986
// Rocket Robot in Wheels intro
14987
// (0-0)*0+env, (cmb-0)*prim+0
14988
{0x0bff0ef8, ac_prim_mul_env},
14989
// Background, Pokemon Snap
14990
// (prim-env)*t0+1
14991
{0x0c6b0c6b, ac_prim_sub_env_mul_t0_add_one},
14992
// Mario Golf
14993
// (0-1)*t0+1
14994
{0x0c770c77, ac_one_sub_t0},
14995
// flame, paper mario. Added by Gonetz
14996
// (1-t0)*t1+1, (cmb-t1)*t1+t1
14997
{0x0c8e0490, ac_t0_mul_t1},
14998
// hall of fame, Pokemon Stadium
14999
// (t0-1)*prim+1, (cmb-0)*env+0
15000
{0x0cf10f78, ac__one_inter_t0_using_prim__mul_env},
15001
// Ring boundary, dual heroes
15002
// (0-1)*prim+1
15003
{0x0cf70cf7, ac_one_sub_prim},
15004
// Kirby64, level 6, [Raziel64]
15005
// (0-0)*prim+1
15006
{0x0cff0cff, ac_one},
15007
// Mystical Ninja
15008
// (0-1)*env+1
15009
{0x0d770d77, ac_one},
15010
// Deku shield in shop, zelda
15011
// (1-1)*primlod+1
15012
{0x0db60db6, ac_one},
15013
// water near gorons willage. Added by Gonetz
15014
// (t1-t0)*0+1, (cmb-0)*prim+0
15015
{0x0dca0ef8, ac_prim},
15016
// background, kirby 64. Added by Gonetz
15017
// (t0-0)*0+1
15018
{0x0df90df9, ac_one},
15019
// kirby 64. Added by Gonetz
15020
// (1-0)*0+1
15021
{0x0dfe0dfe, ac_one},
15022
// background on level 2-1, kirby 64 [Raziel64]. Added by Gonetz
15023
// (1-0)*0+1, (0-0)*0+1
15024
{0x0dfe0dff, ac_one},
15025
// duck dodgers intro. Added by Gonetz
15026
// (0-0)*0+1, (cmb-cmb)*primlod+cmb
15027
{0x0dff0000, ac_one},
15028
// duck dodgers intro. Added by Gonetz
15029
// (0-0)*0+1, (0-0)*0+t1 **INC**?
15030
{0x0dff05ff, ac_t1},
15031
// ?
15032
// (0-0)*0+1, (0-0)*0+prim
15033
{0x0dff07ff, ac_prim},
15034
// arena, custom robo. Added by Gonetz
15035
// (0-0)*0+1, (0-0)*0+shade
15036
{0x0dff09ff, ac_shade},
15037
// field, Mario Golf
15038
// (0-0)*0+1, (1-env)*shade+env
15039
{0x0dff0b2e, ac_one_sub_env_mul_shade_add_env},
15040
// battle tanks 2 [Ogy]
15041
// (0-0)*0+1, (0-0)*0+env
15042
{0x0dff0bff, ac_env},
15043
// helmet, F1 World Grand Prix. Added by Gonetz
15044
// (0-0)*0+1, (0-1)*0+1
15045
{0x0dff0df7, ac_one},
15046
// secret in level 3-4, Kirby64, [Raziel64]
15047
// (0-0)*0+1, (cmb-0)*0+1
15048
{0x0dff0df8, ac_one},
15049
// Menu options, starfox
15050
// (0-0)*0+1
15051
{0x0dff0dff, ac_one},
15052
// Water, zelda
15053
//z (0-0)*0+primlod, (cmb-0)*prim+0
15054
{0x0dff0ef8, ac_prim},
15055
// Desert ground, zelda
15056
// (0-0)*0+1, (cmb-0)*shade+0
15057
{0x0dff0f38, ac_shade},
15058
// Characters, smash bros
15059
// (0-0)*0+1, (cmb-0)*env+0
15060
{0x0dff0f78, ac_env},
15061
// end of level 3-4, Kirby64, [Raziel64]
15062
// (0-0)*0+1, (cmb-0)*0+0
15063
{0x0dff0ff8, ac_zero},
15064
// Kirby64
15065
// (0-0)*0+1, (0-0)*0+0
15066
{0x0dff0fff, ac_zero},
15067
// floor, Spiderman [Raziel64]. Added by Gonetz
15068
// (env-t1)*t0+0 ** INC **
15069
{0x0e550e55, ac_t0_mul_env},
15070
// skeleton, castlevania 2. Added by Gonetz
15071
// (1-prim)*t0+0
15072
{0x0e5e0e5e, ac_one_sub_prim_mul_t0},
15073
// player select, Forsaken [Raziel64]. Added by Gonetz
15074
// (prim-shade)*t0+0
15075
{0x0e630e63, ac_prim_sub_shade_mul_t0},
15076
// castlevania 2 [Ogy]. Added by Gonetz
15077
// (1-shade)*t0+0
15078
{0x0e660e66, ac_one_sub_shade_mul_t0},
15079
// GoldenEye: Helicopter rotors
15080
// (shade-env)*t0+0, (1-0)*prim+cmb
15081
{0x0e6c00fe, ac_shade_sub_env_mul_t0_add_prim},
15082
// background, level3-4, Kirby64, [Raziel64]
15083
// (shade-env)*t0+0
15084
{0x0e6c0e6c, ac_shade_sub_env_mul_t0},
15085
// Goemon, mystical ninja. Added by Gonetz
15086
// (1-env)*t0+0
15087
{0x0e6e0e6e, ac_one_sub_env_mul_t0},
15088
// fist attack, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
15089
// (t0-0)*t0+0, (t1-cmb)*prim+cmb
15090
{0x0e7900c2, ac_t0_inter_t1_using_prima},
15091
// Clay Fighter [Ogy]. Added by Gonetz
15092
// (t0-0)*t0+0
15093
{0x0e790e79, ac_t0_mul_t0},
15094
// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
15095
// (t0-0)*t0+0, (prim-0)*t1+0
15096
{0x0e790ebb, ac_t1_mul_prim},
15097
// zelda 2 [Ogy]. Added by Gonetz
15098
// (t0-0)*t0+0, (cmb-0)*prim+0
15099
{0x0e790ef8, ac_t0_mul_prim},
15100
// zelda 2. Added by Gonetz
15101
// (t0-0)*t0+0, (cmb-0)*shade+0
15102
{0x0e790f38, ac_t0_mul_shade},
15103
// zelda 2. Added by Gonetz
15104
// (t0-0)*t0+0, (cmb-0)*env+0
15105
{0x0e790f78, ac_t0_mul_env},
15106
// the ice plane just before the entrance to gorons village (where tingle is}, zelda 2 [Ogy]. Added by Gonetz
15107
// (t1-0)*t0+0, (cmb-0)*0+cmb
15108
{0x0e7a01f8, ac_t0_mul_t1},
15109
// paper mario. Added by Gonetz
15110
// (t1-0)*t0+0, (cmb-env)*prim+env ** INC **
15111
{0x0e7a0ae8, ac_t1_mul_prim},
15112
// mini games quiz monitor backround, Pokemon Stadium 2
15113
// (t1-0)*t0+0, (0-0)*0+1
15114
{0x0e7a0dff, ac_one},
15115
// Tony Hawk's Pro Skater. Added by Gonetz
15116
// (t1-0)*t0+0, (cmb-0)*t0+0
15117
{0x0e7a0e78, ac_t0_mul_t1},
15118
// bike trace, xg2. Added by Gonetz
15119
// (t1-0)*t0+0
15120
{0x0e7a0e7a, ac_t0_mul_t1},
15121
// Kotake & koume defeated, zelda
15122
// (t1-0)*t0+0, (cmb-0)*prim+0
15123
{0x0e7a0ef8, ac__t0_mul_t1__mul_prim},
15124
// Magnitude, pokemon stadium 2
15125
// (t1-0)*t0+0, (cmb-env)*shade+0
15126
{0x0e7a0f28, ac__t0_mul_t1__mul_env_mul_shade},
15127
// Bongo Bongo, zelda
15128
// (t1-0)*t0+0, (cmb-0)*shade+0
15129
{0x0e7a0f38, ac__t0_mul_t1__mul_shade},
15130
// Dobutsu_no_Mori, waterfall
15131
// (t1-0)*t0+0, (cmb-0)*prim_lod+0
15132
{0x0e7a0fb8, ac__t0_mul_t1__mul_primlod},
15133
// Back of doors, megaman
15134
// (prim-0)*t0+0, (cmb-0)*lodfrac+0
15135
{0x0e7b0e38, ac_t0_mul_prim},
15136
// Karts, mario kart
15137
//z (prim-0)*t0+0
15138
{0x0e7b0e7b, ac_t0_mul_prim},
15139
// paper mario. Added by Gonetz
15140
// (prim-0)*t0+0, (t0-0)*prim+0
15141
{0x0e7b0ef9, ac_t0_mul_prim},
15142
// Table, mace
15143
// (prim-0)*t0+0, (cmb-0)*shade+0
15144
{0x0e7b0f38, ac_t0_mul_prim_mul_shade},
15145
// lamp shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
15146
// (shade-0)*t0+0, (cmb-cmb)*lodf+cmb
15147
{0x0e7c0000, ac_t0_mul_shade},
15148
// Game logo, Aerofighters Assault [Raziel64]
15149
//(shade-0)*t0+0, (0-0)*0+1
15150
{0x0e7c0dff, ac_one},
15151
// Higher sky, waverace
15152
//z (shade-0)*t0+0
15153
{0x0e7c0e7c, ac_t0_mul_shade},
15154
// duck dodgers, intro. Added by Gonetz
15155
// (shade-0)*t0+0, (cmb-0)*prim+0
15156
{0x0e7c0ef8, ac_t0_mul_prim_mul_shade},
15157
// waterwheel in water temple, zelda 2. Added by Gonetz
15158
// (shade-0)*t0+0, (cmb-0)*env+0
15159
{0x0e7c0f78, ac_t0_mul_env_mul_shade},
15160
// Blowing up mine at bowser's, mario
15161
// (env-0)*t0+0
15162
{0x0e7d0e7d, ac_t0_mul_env},
15163
// castlevania 2, intro. Added by Gonetz
15164
// (1-0)*t0+0
15165
{0x0e7e0e7e, ac_t0},
15166
// moon, castlevania 2. Added by Gonetz
15167
// (1-0)*t0+0, (cmb-0)*prim+0
15168
{0x0e7e0ef8, ac_t0_mul_prim},
15169
//beetle adventure racing. Added by Gonetz
15170
// (1-0)*t0+0, (cmb-0)*shade+0
15171
{0x0e7e0f38, ac_t0_mul_shade},
15172
// lava, beetle adventure racing
15173
// (t0-prim)*t1+0, (0-0)*0+shade ** INC **
15174
{0x0e9909ff, ac_shade},
15175
// Rain Dance, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
15176
// (t0-env)*t1+0, (cmb-0)*0+prim ** INC **
15177
{0x0ea90ef8, ac__t0_mul_t1__mul_prim},
15178
// Duck Dodgers Starring Daffy Duck text background
15179
// (t0-0)*t1+0, (shade-cmb)*prim+cmb
15180
{0x0eb900c4, ac_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade},
15181
// torches, pokemon stadium 2
15182
// (t0-0)*t1+0, (cmb-env)*prim+cmb
15183
{0x0eb900e8, ac__t0_mul_t1__sub_env_mul_prim_add__t0_mul_t1},
15184
// airboarder 64 [Ogy]
15185
// (t0-0)*t1+0, (0-0)*0+prim
15186
{0x0eb907ff, ac_prim},
15187
// explosion, body harvest. Added by Gonetz
15188
// (t0-0)*t1+0, (0-0)*0+shade
15189
{0x0eb909ff, ac_shade},
15190
// Text off top, banjo kazooie
15191
// (t0-0)*t1+0
15192
{0x0eb90eb9, ac_t0_mul_t1},
15193
// smoke, daikatana. Added by Gonetz
15194
// (t0-0)*t1+0, (cmb-0)*prim+0
15195
{0x0eb90ef8, ac__t0_mul_t1__mul_prim},
15196
// Arena, Pokemon Stadium 2.
15197
// (t0-0)*t1+0, (cmb-prim)*shade+0
15198
{0x0eb90f18, ac__t0_mul_t1__sub_prim_mul_shade},
15199
// Water, pilotwings
15200
// (t0-0)*t1+0, (cmb-0)*shade+0
15201
{0x0eb90f38, ac__t0_mul_t1__mul_shade},
15202
// Tony Hawk's Pro Skater. Added by Gonetz
15203
// (t0-0)*t1+0, (cmb-0)*env+0
15204
{0x0eb90f78, ac__t0_mul_t1__mul_env},
15205
// light from window, Dobutsu no Mori. Added by Gonetz
15206
// (t0-0)*t1+0, (cmb-0)*primlod+0
15207
{0x0eb90fb8, ac__t0_mul_t1__mul_primlod},
15208
// chandelier in spider house, zelda 2. Added by Gonetz
15209
// (t1-0)*t1+0, (cmb-0)*prim+0
15210
{0x0eba0ef8, ac_t1_mul_prim},
15211
// cars, ridge racer. Added by Gonetz
15212
// (prim-0)*t1+0, (0-0)*0+1
15213
{0x0ebb0dff, ac_t1_mul_prim},
15214
// aerofighter's assault [Ogy]
15215
// (prim-0)*t1+0
15216
{0x0ebb0ebb, ac_t1_mul_prim},
15217
// tire trace, beetle adventure racing. Added by Gonetz
15218
// (shade-0)*t1+0
15219
{0x0ebc0ebc, ac_t1_mul_shade},
15220
// smoke, Starshot. Added by Gonetz
15221
// (env-0)*t1+0
15222
{0x0ebd0ebd, ac_t1_mul_env},
15223
// lots of things, goldeneye
15224
// (1-0)*t1+0, (0-0)*0+shade
15225
{0x0ebe09ff, ac_shade},
15226
// zelda 2 [Ogy]. Added by Gonetz
15227
// (1-0)*t1+0, (cmb-0)*prim+0
15228
{0x0ebe0ef8, ac_t1_mul_prim},
15229
// walls, perfect dark. Added by Gonetz
15230
// (1-0)*t1+0, (cmb-0)*shade+0
15231
{0x0ebe0f38, ac_t1_mul_shade},
15232
// sand, perfect dark. Added by Gonetz
15233
// (1-0)*t1+0, (cmb-0)*env+0
15234
{0x0ebe0f78, ac_t1_mul_env},
15235
// light, Ridge Racer. Added by Gonetz
15236
// (1-t0)*prim+0
15237
{0x0ece0ece, ac_one_sub_t0_mul_prim},
15238
// exaust, star wars ep1 racer
15239
// (1-t0)*prim+0, (cmb-0)*shade+0
15240
{0x0ece0f38, ac_one_sub_t0_mul_primshade},
15241
// iguana, Forsaken, [Raziel64]. Added by Gonetz
15242
// (t0-shade)*prim+0
15243
{0x0ee10ee1, ac_t0_sub_shade_mul_prim},
15244
// stands, NASCAR 2000
15245
// (prim-shade)*prim+0
15246
{0x0ee30ee3, ac_prim_sub_shade_mul_prim},
15247
// arena, Pokemon Stadium 2. Added by Gonetz
15248
// (t0-env)*prim+0 ** INC **
15249
{0x0ee90ee9, ac_t0_mul_prim},
15250
// lure, bass rush
15251
// (t0-0)*prim+0, (cmb-cmb)*lodf+cmb
15252
{0x0ef90000, ac_t0_mul_prim},
15253
// explosion, body harvest. Added by Gonetz
15254
// (t0-0)*prim+0, (t0-0)*env+cmb
15255
{0x0ef90179, ac_prim_add_env_mul_t0},
15256
// frog's eyes, zelda
15257
// (t0-0)*prim+0, (1-1)*prim_lod+cmb
15258
{0x0ef901b6, ac_t0_mul_prim},
15259
// Monster truck madness intro. Added by Gonetz
15260
// (t0-0)*prim+0, (cmb-0)*prim_lod+cmb ** INC **
15261
{0x0ef901b8, ac_t0_mul_prim},
15262
// Road, zelda
15263
//z (t0-0)*prim+0, (t1-0)*primlod+cmb
15264
{0x0ef901ba, ac__t0_mul_prim__add__t1_mul_primlod},
15265
// Track, wipeout. Addded by Gonetz
15266
// (t0-0)*prim+0, (0-0)*0+prim
15267
{0x0ef907ff, ac_t0_mul_prim},
15268
// magic stuff, buck bumble. Added by Gonetz
15269
// (t0-0)*prim+0, (cmb-0)*prim+0
15270
{0x0ef90ef8, ac_t0_mul_prim_mul_prim},
15271
// The mario face, mario
15272
//z (t0-0)*prim+0
15273
{0x0ef90ef9, ac_t0_mul_prim},
15274
// paper mario. Added by Gonetz
15275
// (t0-0)*prim+0, (cmb-0)*shade+0
15276
{0x0ef90f38, ac_t0_mul_prim_mul_shade},
15277
// Pikachu's mouth, smash bros
15278
// (t0-0)*prim+0, (cmb-0)*env+0
15279
{0x0ef90f78, ac_t0_mul_prim_mul_env},
15280
// bomb mask, zelda 2. Added by Gonetz
15281
// (t0-0)*prim+0, (1-0)*env+0
15282
{0x0ef90f7e, ac_t0_mul_prim},
15283
// Charmander's tail, pokemon stadium 2
15284
// (t0-0)*prim+0, (cmb-0)*primlod+0
15285
{0x0ef90fb8, ac_t0_mul_prim_mul_primlod},
15286
// stalactites, Beetle adventure Racing. Added by Gonetz
15287
// (t1-0)*prim+0, (1-cmb)*shade+cmb
15288
{0x0efa0106, ac_one_sub_shade_mul_t1_add_shade},
15289
// Sprites, Ogre Battle. Added by Gonetz
15290
// (t1-0)*prim+0, (0-0)*0+cmb
15291
{0x0efa0efa, ac_t1_mul_prim},
15292
// Something about kotake & koume's combined attack, zelda
15293
// (t1-0)*prim+0, (cmb-0)*shade+0
15294
{0x0efa0f38, ac_t1_mul_prim_mul_shade},
15295
// intro background, bio freaks. Added by Gonetz
15296
// (prim-0)*prim+0
15297
{0x0efb0efb, ac_prim_mul_prim},
15298
// sky, xg2. Added by Gonetz
15299
// (shade-0)*prim+0, (0-0)*0+1
15300
{0x0efc0dff, ac_one},
15301
// Zelda, unimp log. Added by Gonetz
15302
// (shade-0)*prim+0
15303
{0x0efc0efc, ac_prim_mul_shade},
15304
// ?
15305
// (shade-0)*prim+0, (cmb-0)*shade+0 ** INC **
15306
{0x0efc0f38, ac_prim_mul_shade},
15307
// Baby mario's hat shadow, mario golf
15308
// (env-0)*prim+0
15309
{0x0efd0efd, ac_prim_mul_env},
15310
// Menu, doom
15311
// (1-0)*prim+0
15312
{0x0efe0efe, ac_prim},
15313
// Peris Song attack, Pokemin Stadium 2
15314
// (1-0)*prim+0, (cmb-0)*shade+0
15315
{0x0efe0f38, ac_prim_mul_shade},
15316
// Conker's shadow, CBFD. Added by Gonetz
15317
// (1-t0)*shade+0
15318
{0x0f0e0f0e, ac_one_sub_t0_mul_shade},
15319
// Rock smash, pokemon stadium 2
15320
// (1-t0)*shade+0
15321
{0x0f0f0ee8, ac_one_sub_t0_mul_shade},
15322
//waterfall, Paper Mario
15323
// (t0-t1)*shade+0
15324
{0x0f110f11, ac__t0_sub_t1__mul_shade},
15325
// mahogany town statue, Pokemon Stadium 2
15326
// (t0-prim)*shade+0
15327
{0x0f190f19, ac_t0_sub_prim_mul_shade},
15328
// silver cave, pokemon stadium 2
15329
// (t0-prim)*shade+0, (cmb-0)*env+0
15330
{0x0f190f78, ac_t0_sub_prim_mul_shade_mul_env},
15331
// Boomerang circle, zelda
15332
// (t0-0)*shade+0, (1-cmb)*t0+cmb
15333
{0x0f390046, ac_t0_mul_shade},
15334
// THPS3
15335
// (t0-0)*shade+0, (1-0)*t0+cmb
15336
{0x0f39007e, ac_t0_mul_shade},
15337
// ???
15338
// (t0-0)*shade+0, (env-0)*t1+cmb
15339
{0x0f3900bd, ac_t0_mul_shade},
15340
// Forest temple doorway, zelda
15341
// (t0-0)*shade+0, (t1-0)*primlod+cmb
15342
{0x0f3901ba, ac_t0_mul_shade},
15343
// skis, Spacestation Silicon Valley. Added by Gonetz
15344
// (t0-0)*shade+0, (0-0)*0+t0
15345
{0x0f3903ff, ac_t0},
15346
// paper mario. Added by Gonetz
15347
// (t0-0)*shade+0, (cmb-t0)*prim+0
15348
{0x0f390ec8, ac_t0_mul_prim_mul_shade},
15349
// House windows, zelda intro
15350
//z (t0-0)*shade+0, (cmb-0)*prim+0
15351
{0x0f390ef8, ac_t0_mul_prim_mul_shade},
15352
// Characters, mace
15353
// (t0-0)*shade+0, (cmb-0)*shade+0
15354
{0x0f390f38, ac_t0_mul_shade},
15355
// Shadows, mario
15356
//z (t0-0)*shade+0
15357
{0x0f390f39, ac_t0_mul_shade},
15358
// Clear screen intro, banjo kazooie
15359
// (t0-0)*shade+0, (cmb-0)*env+0
15360
{0x0f390f78, ac_t0_mul_env_mul_shade},
15361
// ridge racer, unimp log. Added by Gonetz
15362
// (t0-0)*shade+0, (cmb-0)*primlod+0 **INC**?
15363
{0x0f390fb8, ac_t0_mul_shade},
15364
// Reflecting combined attack at kotake & koume's, zelda
15365
// (t1-0)*shade+0, (cmb-0)*prim+0
15366
{0x0f3a0ef8, ac_t1_mul_prim_mul_shade},
15367
// aerofighter's assault [Ogy]
15368
// (t1-0)*shade+0
15369
{0x0f3a0f3a, ac_t1_mul_shade},
15370
//beetle adventure racing. Added by Gonetz
15371
//(t1-0)*shade+0, (cmb-0)*env+0
15372
{0x0f3a0f78, ac_t1_mul_env_mul_shade},
15373
// building shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
15374
// (prim-0)*shade+0, (cmb-cmb)*lodf+cmb
15375
{0x0f3b0000, ac_prim_mul_shade},
15376
//chip in Spacestation Silicon Valley intro. Added by Gonetz
15377
// (prim-0)*shade+0, (env-cmb)*t1+cmb
15378
{0x0f3b0085, ac_env_sub_primshade_mul_t1_add_primshade},
15379
// N64 logo, tetrisphere. Added by Gonetz
15380
// (prim-0)*shade+0, (prim-0)*shade+0
15381
{0x0f3b0f3b, ac_prim_mul_shade},
15382
// rays, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
15383
// (shade-0)*shade+0, (cmb-0)*prim+0
15384
{0x0f3c0ef8, ac_prim_mul_shade},
15385
// light, dracula resurrection, castlevania 2. Added by Gonetz
15386
// (env-0)*shade+0
15387
{0x0f3d0f3d, ac_env_mul_shade},
15388
// zelda 2 [Ogy]. Added by Gonetz
15389
// (1-0)*shade+0
15390
{0x0f3e0f3e, ac_shade},
15391
// surf pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
15392
// (1-t0)*env+0, (1-cmb)*shade+0 ** INC **
15393
{0x0f4e0f06, ac_t0_mul_shade},
15394
// GE, boxes
15395
// (1-shade)*env+0, (cmb-0)*shade+0 ** INC **
15396
{0x0f660f38, ac_one_sub_shade_mul_env},
15397
//beetle adventure racing. Added by Gonetz
15398
//(t0-0)*env+0, (1-t0)*prim+cmb
15399
//{0x0f7900ce, ac_t0_mul_env}, //this one looks better
15400
//{0x0f7900ce, ac_env_sub_prim_mul_t0_add_prim},
15401
{0x0f7900ce, ac_one_sub_t1_add_t0_mul_env},
15402
//Zelda, logo ? Added by Gonetz
15403
//(t0-0)*env+0, (t1-0)*primlod+0 **INC** changed to mul_env for gannon's organ disappearing [Dave2001]
15404
{0x0f7901ba, ac__t0_inter_t1_using_primlod__mul_env},
15405
// V8-2 menu
15406
// (t0-0)*env+0, (0-0)*0+prim
15407
{0x0f7907ff, ac_prim},
15408
// Skeleton guy's eyes, zelda
15409
// (t0-0)*env+0, (cmb-0)*prim+0
15410
{0x0f790ef8, ac_t0_mul_prim_mul_env},
15411
// Dust from rock spell, quest64
15412
// (t0-0)*env+0, (cmb-0)*shade+0
15413
{0x0f790f38, ac_t0_mul_env_mul_shade},
15414
// eyes of poe, zelda
15415
// (t0-0)*env+0, (cmb-0)*env+0
15416
{0x0f790f78, ac_t0_mul_env},
15417
// Text, mario
15418
//z (t0-0)*env+0
15419
{0x0f790f79, ac_t0_mul_env},
15420
// Shadows, pokemon stadeom 2
15421
// (t0-0)*env+0, (cmb-0)*primlod+0
15422
{0x0f790fb8, ac_t0_mul_env_mul_primlod},
15423
//gauge, PGA
15424
// (t1-0)*env+0, (cmb-0)*t1+0 ** INC **
15425
{0x0f7a0eb8, ac_t1_mul_env},
15426
//text and shadows, Rayman2. Added by Gonetz
15427
// (t1-0)*env+0, (cmb-0)*shade+0
15428
{0x0f7a0f38, ac_t1_mul_env_mul_shade},
15429
// shadows, tom and jerry. Added by Gonetz
15430
// (t1-0)*env+0
15431
{0x0f7a0f7a, ac_t1_mul_env},
15432
// Bomberman64-2 intro. Added by Gonetz
15433
// (prim-0)*env+0
15434
{0x0f7b0f7b, ac_prim_mul_env},
15435
// Text box, mario
15436
//z (shade-0)*env+0
15437
{0x0f7c0f7c, ac_env_mul_shade},
15438
// Ogre battle 64
15439
// (env-0)*env+0
15440
{0x0f7d0f7d, ac_env},
15441
//Goldeneye, [Jeremy]. Added by Gonetz
15442
// (1-0)*env+0, (cmb-0)*shade+0
15443
{0x0f7e0f38, ac_env_mul_shade},
15444
// Status items, megaman
15445
// (1-0)*env+0
15446
{0x0f7e0f7e, ac_env},
15447
// gun fire, Beast_Wars_Transmetal [Raziel64]
15448
// (0-0)*env+0
15449
{0x0f7f0f7f, ac_zero},
15450
// Pokemon attack, Pokemon stadium (J). Added by Gonetz
15451
// (t1-t0)*primlod+0, (cmb-0)*env+prim ** INC **
15452
{0x0f8a0778, ac__t1_sub_t0_mul_primlod__mul_env_add_prim},
15453
// Shadow Ball, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
15454
// (t1-t0)*primlod+0, (t1-cmb)*prim+0 ** INC **
15455
{0x0f8a0ec2, ac_t0_mul_prim},
15456
// Walls of well through lens of truth, zelda
15457
// (prim-t0)*primlod+0
15458
{0x0f8b0f8b, ac_prim_sub_t0},
15459
// N64 logo, ridge racer. Added by Gonetz
15460
// (1-prim)*primlod+0 **INC**
15461
{0x0f9e0f9e, ac_zero},
15462
// Vines that covers a door in the third room of woodfall temple, zelda 2 [Ogy]. Added by Gonetz
15463
// (t0-0)*primlod+0, (cmb-0)*prim+0
15464
{0x0fb90ef8, ac_t0_mul_primlod_mul_prim},
15465
// zelda 2. Added by Gonetz
15466
// (t0-0)*primlod+0
15467
{0x0fb90fb9, ac_t0_mul_primlod},
15468
// NFL Blitz logo. Added by Gonetz
15469
// (t1-0)*primlod+0
15470
{0x0fba0fba, ac_t1_mul_primlod}, //causes issues
15471
// fallen stars at star summit, Paper Mario. Added by Gonetz
15472
// (shade-0)*primlod+0
15473
{0x0fbc0fbc, ac_primlod_mul_shade},
15474
// expansion pack, Jeremy McGrath Supercross 2000. Added by Gonetz
15475
// (1-0)*primlod+0
15476
{0x0fbe0fbe, ac_primlod},
15477
// intro, Aidyn Chronicles. Added by Gonetz
15478
// (0-0)*primlod+0, (prim-env)*t0+prim **INC**
15479
{0x0fbf066b, ac_t0_mul_prim},
15480
// sky, Rayman2. Added by Gonetz
15481
// (0-shade)*0+0
15482
{0x0fe70fe7, ac_zero},
15483
// flame, PokemonStadium1 [Raziel64]
15484
// (t0-0)*0+0
15485
{0x0ff90ff9, ac_zero},
15486
//BAR
15487
// (0-0)*0+0, (0-0)*0+TEXEL1
15488
{0x0fff05ff, ac_t0},
15489
// Screen clear, banjo kazooie
15490
// (0-0)*0+0
15491
{0x0fff0fff, ac_zero},
15492
// { #ACEND }
15493
};
15494
15495
// CountCombine - count the # of entries in the combine lists
15496
void CountCombine ()
15497
{
15498
int size = sizeof(color_cmb_list) / sizeof(COMBINER);
15499
int i=0, index=0, a, b;
15500
do {
15501
a = color_cmb_list[index].key >> 24;
15502
for (; i<=a; i++)
15503
cc_lookup[i] = index;
15504
15505
while (index < size)
15506
{
15507
b = color_cmb_list[index].key >> 24;
15508
if (b != a) break;
15509
index ++;
15510
}
15511
} while (index < size);
15512
for (; i<257; i++) cc_lookup[i] = index;
15513
15514
size = sizeof(alpha_cmb_list) / sizeof(COMBINER);
15515
i=0, index=0;
15516
do {
15517
a = (alpha_cmb_list[index].key >> 20) & 0xFF;
15518
for (; i<=a; i++)
15519
ac_lookup[i] = index;
15520
15521
while (index < size)
15522
{
15523
b = (alpha_cmb_list[index].key >> 20) & 0xFF;
15524
if (b != a) break;
15525
index ++;
15526
}
15527
} while (index < size);
15528
for (; i<257; i++) ac_lookup[i] = index;
15529
15530
//color_cmb_list_count = sizeof(color_cmb_list) >> 3; // #bytes/4/2
15531
//alpha_cmb_list_count = sizeof(alpha_cmb_list) >> 3;
15532
}
15533
15534
//****************************************************************
15535
// Main Combine
15536
//****************************************************************
15537
15538
void Combine ()
15539
{
15540
FRDP (" | |- color combine: %08lx, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
15541
((rdp.cycle1 & 0xFFFF) << 16) | (rdp.cycle2 & 0xFFFF),
15542
Mode0[rdp.cycle1&0xF], Mode1[(rdp.cycle1>>4)&0xF], Mode2[(rdp.cycle1>>8)&0x1F], Mode3[(rdp.cycle1>>13)&7],
15543
Mode0[rdp.cycle2&0xF], Mode1[(rdp.cycle2>>4)&0xF], Mode2[(rdp.cycle2>>8)&0x1F], Mode3[(rdp.cycle2>>13)&7]);
15544
FRDP (" | |- alpha combine: %08lx, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
15545
(rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 & 0x0FFF0000) >> 16),
15546
Alpha0[(rdp.cycle1>>16)&7], Alpha1[(rdp.cycle1>>19)&7], Alpha2[(rdp.cycle1>>22)&7], Alpha3[(rdp.cycle1>>25)&7],
15547
Alpha0[(rdp.cycle2>>16)&7], Alpha1[(rdp.cycle2>>19)&7], Alpha2[(rdp.cycle2>>22)&7], Alpha3[(rdp.cycle2>>25)&7]);
15548
if (!rdp.LOD_en || rdp.cur_tile == rdp.mipmap_level)
15549
lod_frac = rdp.prim_lodfrac;
15550
else if (settings.lodmode == 0)
15551
lod_frac = 0;
15552
else
15553
lod_frac = 10;
15554
15555
rdp.noise = RDP::noise_none;
15556
15557
wxUint32 found = TRUE;
15558
15559
rdp.col[0] = rdp.col[1] = rdp.col[2] = rdp.col[3] =
15560
rdp.coladd[0] = rdp.coladd[1] = rdp.coladd[2] = rdp.coladd[3] = 1.0f;
15561
rdp.cmb_flags = rdp.cmb_flags_2 = 0;
15562
15563
rdp.uncombined = 0;
15564
15565
cmb.tex = 0;
15566
cmb.tmu0_func = cmb.tmu1_func = cmb.tmu0_a_func = cmb.tmu1_a_func = GR_COMBINE_FUNCTION_ZERO;
15567
cmb.tmu0_fac = cmb.tmu1_fac = cmb.tmu0_a_fac = cmb.tmu1_a_fac = GR_COMBINE_FACTOR_NONE;
15568
cmb.tmu0_invert = cmb.tmu0_a_invert = cmb.tmu1_invert = cmb.tmu1_a_invert = FXFALSE;
15569
15570
cmb.dc0_detailmax = cmb.dc1_detailmax = 0;
15571
15572
cmb.mod_0 = cmb.mod_1 = 0; // remove all modifications
15573
cmb.modcolor_0 = cmb.modcolor1_0 = cmb.modcolor2_0 = cmb.modcolor_1 = cmb.modcolor1_1 = cmb.modcolor2_1
15574
= cmb.modfactor_0 = cmb.modfactor_1 = 0;
15575
15576
cmb.ccolor = cmb.tex_ccolor = 0;
15577
if (cmb.cmb_ext_use || cmb.tex_cmb_ext_use)
15578
{
15579
//have to draw something to allow use of standard combine functions
15580
if (fullscreen)
15581
{
15582
VERTEX v;
15583
memset(&v,0,sizeof(v));
15584
grDrawPoint(&v);
15585
}
15586
cmb.cmb_ext_use = 0;
15587
cmb.tex_cmb_ext_use = 0;
15588
}
15589
15590
wxUint32 cmb_mode_c = (rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF);
15591
wxUint32 cmb_mode_a = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF);
15592
15593
cmb.abf1 = GR_BLEND_SRC_ALPHA;
15594
cmb.abf2 = GR_BLEND_ONE_MINUS_SRC_ALPHA;
15595
15596
#ifdef FASTSEARCH
15597
// Fast, ordered search
15598
int current=0x7FFFFFFF, last;
15599
wxUint32 actual_combine, current_combine, color_combine, alpha_combine;
15600
int left, right;
15601
15602
actual_combine = current_combine = cmb_mode_c;
15603
color_combine = actual_combine;
15604
if ((rdp.cycle2 & 0xFFFF) == 0x1FFF)
15605
actual_combine = (rdp.cycle1 << 16) | (rdp.cycle1 & 0xFFFF);
15606
15607
left = cc_lookup[actual_combine>>24];
15608
right = cc_lookup[(actual_combine>>24)+1];
15609
15610
while (1)
15611
{
15612
last = current;
15613
current = left + ((right-left) >> 1);
15614
if (current == last)
15615
break; // can't be found!
15616
15617
current_combine = color_cmb_list[current].key;
15618
if (current_combine < actual_combine)
15619
left = current;
15620
else if (current_combine > actual_combine)
15621
right = current;
15622
else
15623
break; // found it!
15624
}
15625
15626
// Check if we didn't find it
15627
if (actual_combine != current_combine)
15628
{
15629
rdp.uncombined |= 1;
15630
#ifdef UNIMP_LOG
15631
if (settings.log_unk)
15632
{
15633
sprintf (out_buf, "COLOR combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
15634
actual_combine,
15635
Mode0[rdp.cycle1&0xF], Mode1[(rdp.cycle1>>4)&0xF], Mode2[(rdp.cycle1>>8)&0x1F], Mode3[(rdp.cycle1>>13)&7],
15636
Mode0[rdp.cycle2&0xF], Mode1[(rdp.cycle2>>4)&0xF], Mode2[(rdp.cycle2>>8)&0x1F], Mode3[(rdp.cycle2>>13)&7]);
15637
UNIMPMODE();
15638
}
15639
#endif
15640
found = FALSE;
15641
//tex |= 3;
15642
15643
// use t0 as default
15644
cc_t0 ();
15645
}
15646
else
15647
color_cmb_list[current].func();
15648
15649
LRDP(" | |- Color done\n");
15650
15651
// Now again for alpha
15652
current = 0x7FFFFFFF;
15653
actual_combine = cmb_mode_a;
15654
alpha_combine = actual_combine;
15655
if ((rdp.cycle2 & 0x0FFF0000) == 0x01FF0000)
15656
actual_combine = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle1 >> 16) & 0x00000FFF);
15657
if ((rdp.cycle1 & 0x0FFF0000) == 0x0FFF0000)
15658
actual_combine = (rdp.cycle2 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF);
15659
15660
left = ac_lookup[(actual_combine>>20)&0xFF];
15661
right = ac_lookup[((actual_combine>>20)&0xFF)+1];
15662
15663
while (1)
15664
{
15665
last = current;
15666
current = left + ((right-left) >> 1);
15667
if (current == last)
15668
break; // can't be found!
15669
15670
current_combine = alpha_cmb_list[current].key;
15671
if (current_combine < actual_combine)
15672
left = current;
15673
else if (current_combine > actual_combine)
15674
right = current;
15675
else
15676
break; // found it!
15677
}
15678
15679
// Check if we didn't find it
15680
if (actual_combine != current_combine || !found)
15681
{
15682
if (actual_combine != current_combine)
15683
{
15684
rdp.uncombined |= 2;
15685
#ifdef UNIMP_LOG
15686
if (settings.log_unk)
15687
{
15688
sprintf (out_buf, "ALPHA combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
15689
actual_combine,
15690
Alpha0[(rdp.cycle1>>16)&7], Alpha1[(rdp.cycle1>>19)&7], Alpha2[(rdp.cycle1>>22)&7], Alpha3[(rdp.cycle1>>25)&7],
15691
Alpha0[(rdp.cycle2>>16)&7], Alpha1[(rdp.cycle2>>19)&7], Alpha2[(rdp.cycle2>>22)&7], Alpha3[(rdp.cycle2>>25)&7]);
15692
UNIMPMODE();
15693
}
15694
#endif
15695
}
15696
if (settings.unk_as_red)
15697
{
15698
BrightRed ();
15699
}
15700
else
15701
{
15702
// use full alpha as default
15703
ac_t0 ();
15704
}
15705
//tex |= 3;
15706
}
15707
else
15708
alpha_cmb_list[current].func();
15709
15710
15711
if (color_combine == 0x69351fff) //text, PD, need to change texture alpha
15712
{
15713
A_USE_T1();
15714
}
15715
else if ((color_combine == 0x3fff1fff) && (alpha_combine == 0x03ff03ff) && (rdp.last_tile > rdp.cur_tile))//Dr. Mario
15716
{
15717
cc_t0();
15718
ac_t1();
15719
}
15720
else if (color_combine == 0x613522f0 && (settings.hacks&hack_PMario)) //Paper Mario fortune teller spheres
15721
{
15722
ac_t0();
15723
}
15724
15725
LRDP(" | |- Alpha done\n");
15726
#endif // FASTSEARCH
15727
15728
CombineBlender ();
15729
//*
15730
// Update textures?
15731
// if (tex == 2 && rdp.texrecting && (cmb.tmu1_func != GR_COMBINE_FUNCTION_ZERO) && (rdp.last_tile_size == 0))
15732
if (cmb.tex == 2 && rdp.texrecting && (rdp.cur_tile == rdp.last_tile_size))
15733
{
15734
cmb.tex = 0;
15735
USE_T0();
15736
A_USE_T0();
15737
}
15738
//*/
15739
rdp.tex = cmb.tex;
15740
15741
if (fullscreen)
15742
{
15743
TBUFF_COLOR_IMAGE * aTBuff[2] = {0, 0};
15744
if (rdp.aTBuffTex[0])
15745
aTBuff[rdp.aTBuffTex[0]->tile] = rdp.aTBuffTex[0];
15746
if (rdp.aTBuffTex[1])
15747
aTBuff[rdp.aTBuffTex[1]->tile] = rdp.aTBuffTex[1];
15748
if (cmb.tex && (aTBuff[0] || aTBuff[1]))
15749
{
15750
if (aTBuff[0] && (settings.frame_buffer&fb_read_alpha))
15751
{
15752
if ((settings.hacks&hack_PMario) && aTBuff[0]->width == rdp.ci_width)
15753
;
15754
else
15755
{
15756
grChromakeyValue(0);
15757
grChromakeyMode(GR_CHROMAKEY_ENABLE);
15758
}
15759
}
15760
else
15761
grChromakeyMode(GR_CHROMAKEY_DISABLE);
15762
15763
if (aTBuff[0] && aTBuff[0]->info.format == GR_TEXFMT_ALPHA_INTENSITY_88)
15764
{
15765
if (cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_COLOR)
15766
{
15767
if (cmb.t0c_ext_a == GR_CMBX_LOCAL_TEXTURE_RGB)
15768
cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15769
if (cmb.t0c_ext_b == GR_CMBX_LOCAL_TEXTURE_RGB)
15770
cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15771
if (cmb.t0c_ext_c == GR_CMBX_LOCAL_TEXTURE_RGB)
15772
cmb.t0c_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15773
}
15774
else
15775
cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;
15776
}
15777
15778
if (aTBuff[1] && aTBuff[1]->info.format == GR_TEXFMT_ALPHA_INTENSITY_88)
15779
{
15780
if (cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_COLOR)
15781
{
15782
if (cmb.t1c_ext_a == GR_CMBX_LOCAL_TEXTURE_RGB)
15783
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15784
if (cmb.t1c_ext_b == GR_CMBX_LOCAL_TEXTURE_RGB)
15785
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15786
if (cmb.t1c_ext_c == GR_CMBX_LOCAL_TEXTURE_RGB)
15787
cmb.t1c_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
15788
}
15789
else
15790
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;
15791
}
15792
}
15793
else
15794
grChromakeyMode(GR_CHROMAKEY_DISABLE);
15795
}
15796
cmb.shade_mod_hash = (rdp.cmb_flags + rdp.cmb_flags_2) * (rdp.prim_color + rdp.env_color + rdp.K5);
15797
15798
LRDP(" | + Combine end\n");
15799
}
15800
15801
void CombineBlender ()
15802
{
15803
wxUint32 blendmode = rdp.othermode_l >> 16;
15804
// Check force-blending
15805
if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))
15806
{
15807
switch (blendmode)
15808
{
15809
// Mace objects
15810
case 0x0382:
15811
case 0x0091:
15812
// 1080 sky
15813
case 0x0c08:
15814
// Mario kart player select
15815
// clr_in * 0 + clr_in * 1
15816
// - or just clr_in, no matter what alpha
15817
case 0x0f0a:
15818
//DK64 blue prints
15819
case 0x0302:
15820
//Sin and Punishment
15821
case 0xcb02:
15822
// Battlezone
15823
// clr_in * a + clr_in * (1-a)
15824
case 0xc800:
15825
case 0x00c0:
15826
//ISS64
15827
case 0xc302:
15828
A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
15829
break;
15830
15831
//Space Invaders
15832
case 0x0448:
15833
case 0x055a:
15834
A_BLEND (GR_BLEND_ONE, GR_BLEND_ONE);
15835
break;
15836
15837
// LOT in Zelda: MM
15838
case 0xaf50:
15839
case 0x0f5a: //clr_in * 0 + clr_mem * 1
15840
A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15841
break;
15842
15843
case 0x5f50: //clr_mem * 0 + clr_mem * (1-a)
15844
A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15845
break;
15846
15847
/*
15848
case 0xc410: // Perfect Dark Mauler
15849
{
15850
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
15851
MOD_0_COL (rdp.fog_color & 0xFFFFFF00);
15852
MOD_0_FAC (rdp.fog_color & 0xFF);
15853
INTERSHADE_2 (rdp.fog_color & 0xFFFFFF00, rdp.fog_color & 0xFF);
15854
15855
float percent = (rdp.fog_color & 0xFF) / 255.0f;
15856
cmb.ccolor =
15857
((wxUint32)(((cmb.ccolor >> 24) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) * percent) << 24) |
15858
((wxUint32)(((cmb.ccolor >> 16) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) * percent) << 16) |
15859
((wxUint32)(((cmb.ccolor >> 8) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) * percent) << 8) |
15860
(cmb.ccolor & 0xFF);
15861
15862
rdp.col[0] = rdp.col[0] * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) / 255.0f * percent;
15863
rdp.col[1] = rdp.col[1] * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) / 255.0f * percent;
15864
rdp.col[2] = rdp.col[2] * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) / 255.0f * percent;
15865
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15866
}
15867
break;
15868
*/
15869
case 0xf550: //clr_fog * a_fog + clr_mem * (1-a)
15870
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15871
{
15872
wxUint32 prim = rdp.prim_color;
15873
rdp.prim_color = rdp.fog_color;
15874
cc_prim();
15875
ac_prim();
15876
rdp.prim_color = prim;
15877
}
15878
break;
15879
15880
case 0x0150: //spiderman
15881
case 0x0d18: //clr_in * a_fog + clr_mem * (1-a)
15882
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15883
if (rdp.cycle_mode == 1 && rdp.cycle2 != 0x01ff1fff)
15884
{
15885
wxUint32 prim = rdp.prim_color;
15886
rdp.prim_color = rdp.fog_color;
15887
ac_prim();
15888
rdp.prim_color = prim;
15889
}
15890
break;
15891
15892
case 0xc912: //40 winks, clr_in * a_fog + clr_mem * 1
15893
{
15894
wxUint32 prim = rdp.prim_color;
15895
rdp.prim_color = rdp.fog_color;
15896
ac_prim();
15897
rdp.prim_color = prim;
15898
}
15899
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE);
15900
break;
15901
15902
default:
15903
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15904
}
15905
}
15906
/*
15907
else if (blendmode == 0xc411) // Super Smash Bros, faked fog for flashing characters
15908
{
15909
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
15910
MOD_0_COL (rdp.fog_color & 0xFFFFFF00);
15911
MOD_0_FAC (rdp.fog_color & 0xFF);
15912
INTERSHADE_2 (rdp.fog_color & 0xFFFFFF00, rdp.fog_color & 0xFF);
15913
15914
float percent = (rdp.fog_color & 0xFF) / 255.0f;
15915
cmb.ccolor =
15916
((wxUint32)(((cmb.ccolor >> 24) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) * percent) << 24) |
15917
((wxUint32)(((cmb.ccolor >> 16) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) * percent) << 16) |
15918
((wxUint32)(((cmb.ccolor >> 8) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) * percent) << 8) |
15919
(cmb.ccolor & 0xFF);
15920
15921
rdp.col[0] = rdp.col[0] * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) / 255.0f * percent;
15922
rdp.col[1] = rdp.col[1] * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) / 255.0f * percent;
15923
rdp.col[2] = rdp.col[2] * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) / 255.0f * percent;
15924
A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
15925
}
15926
*/
15927
else if (blendmode == 0x0040) // Mia Soccer Lights
15928
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15929
else if ((settings.hacks&hack_Pilotwings) && (rdp.othermode_l & 0x80)) //CLR_ON_CVG without FORCE_BL
15930
A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15931
else
15932
A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
15933
15934
// ALPHA_CVG_SEL means full alpha
15935
// The reason it wasn't working before was because I wasn't handling rdp:setothermode
15936
// if (rdp.othermode_l & 0x2000)
15937
if ((rdp.othermode_l & 0x2000) && ((rdp.othermode_l & 0x7000) != 0x7000))
15938
{
15939
if ((settings.hacks&hack_PMario) && (blendmode == 0x5055))
15940
{
15941
A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15942
}
15943
else if (blendmode == 0x4055) // Mario Golf
15944
{
15945
A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15946
}
15947
else
15948
{
15949
A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
15950
}
15951
}
15952
15953
//hack
15954
//*
15955
if (settings.hacks&hack_ISS64)
15956
{
15957
if (rdp.othermode_l == 0xff5a6379)
15958
{
15959
A_BLEND (GR_BLEND_ZERO, GR_BLEND_SRC_ALPHA);
15960
}
15961
else if (rdp.othermode_l == 0x00504dd9) //players shadows. CVG_DST_WRAP
15962
{
15963
A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
15964
}
15965
}
15966
else if (settings.hacks&hack_TGR)
15967
{
15968
if (rdp.othermode_l == 0x0f0a0235)
15969
{
15970
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
15971
}
15972
}
15973
//*/
15974
}
15975
15976
void InitCombine ()
15977
{
15978
LOG ("InitCombine() ");
15979
memset(&cmb, 0, sizeof(cmb));
15980
const char *extensions = grGetString (GR_EXTENSION);
15981
if (const char * extstr = strstr(extensions, "COMBINE")) {
15982
if (!strncmp(extstr, "COMBINE", 7)) {
15983
LOG ("extensions ");
15984
char strColorCombineExt[] = "grColorCombineExt";
15985
cmb.grColorCombineExt = (GRCOLORCOMBINEEXT) grGetProcAddress(strColorCombineExt);
15986
char strAlphaCombineExt[] = "grAlphaCombineExt";
15987
cmb.grAlphaCombineExt = (GRCOLORCOMBINEEXT) grGetProcAddress(strAlphaCombineExt);
15988
char strTexColorCombineExt[] = "grTexColorCombineExt";
15989
cmb.grTexColorCombineExt = (GRTEXCOLORCOMBINEEXT) grGetProcAddress(strTexColorCombineExt);
15990
char strTexAlphaCombineExt[] = "grTexAlphaCombineExt";
15991
cmb.grTexAlphaCombineExt = (GRTEXCOLORCOMBINEEXT) grGetProcAddress(strTexAlphaCombineExt);
15992
char strConstantColorValueExt[] = "grConstantColorValueExt";
15993
cmb.grConstantColorValueExt = (GRCONSTANTCOLORVALUEEXT) grGetProcAddress(strConstantColorValueExt);
15994
if (cmb.grColorCombineExt && cmb.grAlphaCombineExt &&
15995
cmb.grTexColorCombineExt && cmb.grTexAlphaCombineExt)
15996
{
15997
cmb.combine_ext = TRUE;
15998
LOG ("initialized.");
15999
}
16000
else
16001
{
16002
cmb.combine_ext = FALSE;
16003
}
16004
}
16005
}
16006
cmb.dc0_lodbias = cmb.dc1_lodbias = 31;
16007
cmb.dc0_detailscale = cmb.dc1_detailscale = 7;
16008
cmb.lodbias0 = cmb.lodbias1 = 1.0f;
16009
LOG ("\n");
16010
}
16011
16012
void ColorCombinerToExtension ()
16013
{
16014
wxUint32 ext_local, ext_local_a, ext_other, ext_other_a;
16015
switch (cmb.c_loc)
16016
{
16017
case GR_COMBINE_LOCAL_ITERATED:
16018
ext_local = GR_CMBX_ITRGB;
16019
ext_local_a = GR_CMBX_ITALPHA;
16020
break;
16021
case GR_COMBINE_LOCAL_CONSTANT:
16022
ext_local = GR_CMBX_CONSTANT_COLOR;
16023
ext_local_a = GR_CMBX_CONSTANT_ALPHA;
16024
break;
16025
default:
16026
ext_local = GR_CMBX_ZERO;
16027
ext_local_a = GR_CMBX_ZERO;
16028
};
16029
switch (cmb.c_oth)
16030
{
16031
case GR_COMBINE_OTHER_ITERATED:
16032
ext_other = GR_CMBX_ITRGB;
16033
ext_other_a = GR_CMBX_ITALPHA;
16034
break;
16035
case GR_COMBINE_OTHER_TEXTURE:
16036
ext_other = GR_CMBX_TEXTURE_RGB;
16037
ext_other_a = GR_CMBX_TEXTURE_ALPHA;
16038
break;
16039
case GR_COMBINE_OTHER_CONSTANT:
16040
ext_other = GR_CMBX_CONSTANT_COLOR;
16041
ext_other_a = GR_CMBX_CONSTANT_ALPHA;
16042
break;
16043
default:
16044
ext_other = GR_CMBX_ZERO;
16045
ext_other_a = GR_CMBX_ZERO;
16046
};
16047
switch (cmb.c_fac)
16048
{
16049
case GR_COMBINE_FACTOR_ZERO:
16050
cmb.c_ext_c = GR_CMBX_ZERO;
16051
cmb.c_ext_c_invert = 0;
16052
break;
16053
case GR_COMBINE_FACTOR_ONE:
16054
cmb.c_ext_c = GR_CMBX_ZERO;
16055
cmb.c_ext_c_invert = 1;
16056
break;
16057
case GR_COMBINE_FACTOR_LOCAL:
16058
cmb.c_ext_c = ext_local;
16059
cmb.c_ext_c_invert = 0;
16060
break;
16061
case GR_COMBINE_FACTOR_LOCAL_ALPHA:
16062
cmb.c_ext_c = ext_local_a;
16063
cmb.c_ext_c_invert = 0;
16064
break;
16065
case GR_COMBINE_FACTOR_OTHER_ALPHA:
16066
cmb.c_ext_c = ext_other_a;
16067
cmb.c_ext_c_invert = 0;
16068
break;
16069
case GR_COMBINE_FACTOR_TEXTURE_RGB:
16070
cmb.c_ext_c = GR_CMBX_TEXTURE_RGB;
16071
cmb.c_ext_c_invert = 0;
16072
break;
16073
case GR_COMBINE_FACTOR_TEXTURE_ALPHA:
16074
cmb.c_ext_c = GR_CMBX_TEXTURE_ALPHA;
16075
cmb.c_ext_c_invert = 0;
16076
break;
16077
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
16078
cmb.c_ext_c = ext_local;
16079
cmb.c_ext_c_invert = 1;
16080
break;
16081
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
16082
cmb.c_ext_c = ext_local_a;
16083
cmb.c_ext_c_invert = 1;
16084
break;
16085
case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16086
cmb.c_ext_c = ext_other_a;
16087
cmb.c_ext_c_invert = 1;
16088
break;
16089
case GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA:
16090
cmb.c_ext_c = GR_CMBX_TEXTURE_ALPHA;
16091
cmb.c_ext_c_invert = 1;
16092
break;
16093
default:
16094
cmb.c_ext_c = GR_CMBX_ZERO;
16095
cmb.c_ext_c_invert = 0;
16096
}
16097
16098
switch (cmb.c_fnc)
16099
{
16100
case GR_COMBINE_FUNCTION_ZERO:
16101
cmb.c_ext_a = GR_CMBX_ZERO;
16102
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16103
cmb.c_ext_b = GR_CMBX_ZERO;
16104
cmb.c_ext_b_mode = GR_FUNC_MODE_X;
16105
cmb.c_ext_c = GR_CMBX_ZERO;
16106
cmb.c_ext_c_invert = 0;
16107
cmb.c_ext_d = GR_CMBX_ZERO;
16108
cmb.c_ext_d_invert = 0;
16109
break;
16110
case GR_COMBINE_FUNCTION_LOCAL:
16111
cmb.c_ext_a = ext_local;
16112
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16113
cmb.c_ext_b = GR_CMBX_ZERO;
16114
cmb.c_ext_b_mode = GR_FUNC_MODE_X;
16115
cmb.c_ext_c = GR_CMBX_ZERO;
16116
cmb.c_ext_c_invert = 1;
16117
cmb.c_ext_d = GR_CMBX_ZERO;
16118
cmb.c_ext_d_invert = 0;
16119
break;
16120
case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
16121
cmb.c_ext_a = ext_local_a;
16122
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16123
cmb.c_ext_b = GR_CMBX_ZERO;
16124
cmb.c_ext_b_mode = GR_FUNC_MODE_X;
16125
cmb.c_ext_c = GR_CMBX_ZERO;
16126
cmb.c_ext_c_invert = 1;
16127
cmb.c_ext_d = GR_CMBX_ZERO;
16128
cmb.c_ext_d_invert = 0;
16129
break;
16130
case GR_COMBINE_FUNCTION_SCALE_OTHER:
16131
cmb.c_ext_a = ext_other;
16132
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16133
cmb.c_ext_b = GR_CMBX_ZERO;
16134
cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;
16135
cmb.c_ext_d = GR_CMBX_ZERO;
16136
cmb.c_ext_d_invert = 0;
16137
break;
16138
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
16139
cmb.c_ext_a = ext_other;
16140
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16141
cmb.c_ext_b = ext_local;
16142
cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;
16143
cmb.c_ext_d = GR_CMBX_B;
16144
cmb.c_ext_d_invert = 0;
16145
break;
16146
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
16147
cmb.c_ext_a = ext_other;
16148
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16149
cmb.c_ext_b = ext_local_a;
16150
cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;
16151
cmb.c_ext_d = GR_CMBX_B;
16152
cmb.c_ext_d_invert = 0;
16153
break;
16154
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
16155
cmb.c_ext_a = ext_other;
16156
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16157
cmb.c_ext_b = ext_local;
16158
cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16159
cmb.c_ext_d = GR_CMBX_ZERO;
16160
cmb.c_ext_d_invert = 0;
16161
break;
16162
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
16163
cmb.c_ext_a = ext_other;
16164
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16165
cmb.c_ext_b = ext_local;
16166
cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16167
cmb.c_ext_d = GR_CMBX_B;
16168
cmb.c_ext_d_invert = 0;
16169
break;
16170
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16171
cmb.c_ext_a = ext_other;
16172
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
16173
cmb.c_ext_b = ext_local;
16174
cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16175
cmb.c_ext_d = GR_CMBX_ALOCAL;
16176
cmb.c_ext_d_invert = 0;
16177
break;
16178
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
16179
cmb.c_ext_a = GR_CMBX_ZERO;
16180
cmb.c_ext_a_mode = GR_FUNC_MODE_ZERO;
16181
cmb.c_ext_b = ext_local;
16182
cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16183
cmb.c_ext_d = GR_CMBX_B;
16184
cmb.c_ext_d_invert = 0;
16185
break;
16186
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16187
default:
16188
cmb.c_ext_a = GR_CMBX_ZERO;
16189
cmb.c_ext_a_mode = GR_FUNC_MODE_ZERO;
16190
cmb.c_ext_b = ext_local;
16191
cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16192
cmb.c_ext_d = GR_CMBX_ALOCAL;
16193
cmb.c_ext_d_invert = 0;
16194
break;
16195
}
16196
}
16197
16198
void AlphaCombinerToExtension ()
16199
{
16200
wxUint32 ext_local, ext_other;
16201
switch (cmb.a_loc)
16202
{
16203
case GR_COMBINE_LOCAL_ITERATED:
16204
ext_local = GR_CMBX_ITALPHA;
16205
break;
16206
case GR_COMBINE_LOCAL_CONSTANT:
16207
ext_local = GR_CMBX_CONSTANT_ALPHA;
16208
break;
16209
default:
16210
ext_local = GR_CMBX_ZERO;
16211
};
16212
switch (cmb.a_oth)
16213
{
16214
case GR_COMBINE_OTHER_ITERATED:
16215
ext_other = GR_CMBX_ITALPHA;
16216
break;
16217
case GR_COMBINE_OTHER_TEXTURE:
16218
ext_other = GR_CMBX_TEXTURE_ALPHA;
16219
break;
16220
case GR_COMBINE_OTHER_CONSTANT:
16221
ext_other = GR_CMBX_CONSTANT_ALPHA;
16222
break;
16223
default:
16224
ext_other = GR_CMBX_ZERO;
16225
};
16226
switch (cmb.a_fac)
16227
{
16228
case GR_COMBINE_FACTOR_ZERO:
16229
cmb.a_ext_c = GR_CMBX_ZERO;
16230
cmb.a_ext_c_invert = 0;
16231
break;
16232
case GR_COMBINE_FACTOR_ONE:
16233
cmb.a_ext_c = GR_CMBX_ZERO;
16234
cmb.a_ext_c_invert = 1;
16235
break;
16236
case GR_COMBINE_FACTOR_LOCAL:
16237
case GR_COMBINE_FACTOR_LOCAL_ALPHA:
16238
cmb.a_ext_c = ext_local;
16239
cmb.a_ext_c_invert = 0;
16240
break;
16241
case GR_COMBINE_FACTOR_OTHER_ALPHA:
16242
cmb.a_ext_c = ext_other;
16243
cmb.a_ext_c_invert = 0;
16244
break;
16245
case GR_COMBINE_FACTOR_TEXTURE_ALPHA:
16246
cmb.a_ext_c = GR_CMBX_TEXTURE_ALPHA;
16247
cmb.a_ext_c_invert = 0;
16248
break;
16249
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
16250
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
16251
cmb.a_ext_c = ext_local;
16252
cmb.a_ext_c_invert = 1;
16253
break;
16254
case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16255
cmb.a_ext_c = ext_other;
16256
cmb.a_ext_c_invert = 1;
16257
break;
16258
case GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA:
16259
cmb.a_ext_c = GR_CMBX_TEXTURE_ALPHA;
16260
cmb.a_ext_c_invert = 1;
16261
break;
16262
default:
16263
cmb.a_ext_c = GR_CMBX_ZERO;
16264
cmb.a_ext_c_invert = 0;
16265
}
16266
16267
switch (cmb.a_fnc)
16268
{
16269
case GR_COMBINE_FUNCTION_ZERO:
16270
cmb.a_ext_a = GR_CMBX_ZERO;
16271
cmb.a_ext_a_mode = GR_FUNC_MODE_X;
16272
cmb.a_ext_b = GR_CMBX_ZERO;
16273
cmb.a_ext_b_mode = GR_FUNC_MODE_X;
16274
cmb.a_ext_c = GR_CMBX_ZERO;
16275
cmb.a_ext_c_invert = 0;
16276
cmb.a_ext_d = GR_CMBX_ZERO;
16277
cmb.a_ext_d_invert = 0;
16278
break;
16279
case GR_COMBINE_FUNCTION_LOCAL:
16280
case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
16281
cmb.a_ext_a = GR_CMBX_ZERO;
16282
cmb.a_ext_a_mode = GR_FUNC_MODE_ZERO;
16283
cmb.a_ext_b = ext_local;
16284
cmb.a_ext_b_mode = GR_FUNC_MODE_X;
16285
cmb.a_ext_c = GR_CMBX_ZERO;
16286
cmb.a_ext_c_invert = 1;
16287
cmb.a_ext_d = GR_CMBX_ZERO;
16288
cmb.a_ext_d_invert = 0;
16289
break;
16290
case GR_COMBINE_FUNCTION_SCALE_OTHER:
16291
cmb.a_ext_a = ext_other;
16292
cmb.a_ext_a_mode = GR_FUNC_MODE_X;
16293
cmb.a_ext_b = GR_CMBX_ZERO;
16294
cmb.a_ext_b_mode = GR_FUNC_MODE_ZERO;
16295
cmb.a_ext_d = GR_CMBX_ZERO;
16296
cmb.a_ext_d_invert = 0;
16297
break;
16298
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
16299
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
16300
cmb.a_ext_a = ext_other;
16301
cmb.a_ext_a_mode = GR_FUNC_MODE_X;
16302
cmb.a_ext_b = ext_local;
16303
cmb.a_ext_b_mode = GR_FUNC_MODE_ZERO;
16304
cmb.a_ext_d = GR_CMBX_B;
16305
cmb.a_ext_d_invert = 0;
16306
break;
16307
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
16308
cmb.a_ext_a = ext_other;
16309
cmb.a_ext_a_mode = GR_FUNC_MODE_X;
16310
cmb.a_ext_b = ext_local;
16311
cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16312
cmb.a_ext_d = GR_CMBX_ZERO;
16313
cmb.a_ext_d_invert = 0;
16314
break;
16315
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
16316
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16317
cmb.a_ext_a = ext_other;
16318
cmb.a_ext_a_mode = GR_FUNC_MODE_X;
16319
cmb.a_ext_b = ext_local;
16320
cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16321
cmb.a_ext_d = GR_CMBX_B;
16322
cmb.a_ext_d_invert = 0;
16323
break;
16324
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
16325
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16326
cmb.a_ext_a = GR_CMBX_ZERO;
16327
cmb.a_ext_a_mode = GR_FUNC_MODE_ZERO;
16328
cmb.a_ext_b = ext_local;
16329
cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16330
cmb.a_ext_d = GR_CMBX_B;
16331
cmb.a_ext_d_invert = 0;
16332
break;
16333
}
16334
}
16335
16336
void TexColorCombinerToExtension (GrChipID_t tmu)
16337
{
16338
wxUint32 tc_ext_a, tc_ext_a_mode, tc_ext_b, tc_ext_b_mode, tc_ext_c, tc_ext_d;
16339
int tc_ext_c_invert, tc_ext_d_invert;
16340
wxUint32 tmu_func, tmu_fac;
16341
16342
if (tmu == GR_TMU0)
16343
{
16344
tmu_func = cmb.tmu0_func;
16345
tmu_fac = cmb.tmu0_fac;
16346
}
16347
else
16348
{
16349
tmu_func = cmb.tmu1_func;
16350
tmu_fac = cmb.tmu1_fac;
16351
}
16352
16353
switch (tmu_fac)
16354
{
16355
case GR_COMBINE_FACTOR_ZERO:
16356
tc_ext_c = GR_CMBX_ZERO;
16357
tc_ext_c_invert = 0;
16358
break;
16359
case GR_COMBINE_FACTOR_LOCAL:
16360
tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;
16361
tc_ext_c_invert = 0;
16362
break;
16363
case GR_COMBINE_FACTOR_LOCAL_ALPHA:
16364
tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16365
tc_ext_c_invert = 0;
16366
break;
16367
case GR_COMBINE_FACTOR_OTHER_ALPHA:
16368
tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16369
tc_ext_c_invert = 0;
16370
break;
16371
case GR_COMBINE_FACTOR_DETAIL_FACTOR:
16372
tc_ext_c = GR_CMBX_DETAIL_FACTOR;
16373
tc_ext_c_invert = 0;
16374
break;
16375
case GR_COMBINE_FACTOR_ONE:
16376
tc_ext_c = GR_CMBX_ZERO;
16377
tc_ext_c_invert = 1;
16378
break;
16379
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
16380
tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;
16381
tc_ext_c_invert = 1;
16382
break;
16383
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
16384
tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16385
tc_ext_c_invert = 1;
16386
break;
16387
case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16388
tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16389
tc_ext_c_invert = 1;
16390
break;
16391
case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:
16392
tc_ext_c = GR_CMBX_DETAIL_FACTOR;
16393
tc_ext_c_invert = 1;
16394
break;
16395
default:
16396
tc_ext_c = GR_CMBX_ZERO;
16397
tc_ext_c_invert = 0;
16398
break;
16399
}
16400
16401
switch (tmu_func)
16402
{
16403
case GR_COMBINE_FUNCTION_ZERO:
16404
tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
16405
tc_ext_a_mode = GR_FUNC_MODE_ZERO;
16406
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16407
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16408
tc_ext_c = GR_CMBX_ZERO;
16409
tc_ext_c_invert = 0;
16410
tc_ext_d = GR_CMBX_ZERO;
16411
tc_ext_d_invert = 0;
16412
break;
16413
case GR_COMBINE_FUNCTION_LOCAL:
16414
tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
16415
tc_ext_a_mode = GR_FUNC_MODE_X;
16416
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16417
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16418
tc_ext_c = GR_CMBX_ZERO;
16419
tc_ext_c_invert = 1;
16420
tc_ext_d = GR_CMBX_ZERO;
16421
tc_ext_d_invert = 0;
16422
break;
16423
case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
16424
tc_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16425
tc_ext_a_mode = GR_FUNC_MODE_X;
16426
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16427
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16428
tc_ext_c = GR_CMBX_ZERO;
16429
tc_ext_c_invert = 1;
16430
tc_ext_d = GR_CMBX_ZERO;
16431
tc_ext_d_invert = 0;
16432
break;
16433
case GR_COMBINE_FUNCTION_SCALE_OTHER:
16434
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16435
tc_ext_a_mode = GR_FUNC_MODE_X;
16436
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16437
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16438
tc_ext_d = GR_CMBX_ZERO;
16439
tc_ext_d_invert = 0;
16440
break;
16441
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
16442
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16443
tc_ext_a_mode = GR_FUNC_MODE_X;
16444
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16445
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16446
tc_ext_d = GR_CMBX_B;
16447
tc_ext_d_invert = 0;
16448
break;
16449
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
16450
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16451
tc_ext_a_mode = GR_FUNC_MODE_X;
16452
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16453
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16454
tc_ext_d = GR_CMBX_B;
16455
tc_ext_d_invert = 0;
16456
break;
16457
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
16458
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16459
tc_ext_a_mode = GR_FUNC_MODE_X;
16460
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16461
tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16462
tc_ext_d = GR_CMBX_ZERO;
16463
tc_ext_d_invert = 0;
16464
break;
16465
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
16466
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16467
tc_ext_a_mode = GR_FUNC_MODE_X;
16468
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16469
tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16470
tc_ext_d = GR_CMBX_B;
16471
tc_ext_d_invert = 0;
16472
break;
16473
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16474
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
16475
tc_ext_a_mode = GR_FUNC_MODE_X;
16476
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16477
tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16478
tc_ext_d = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16479
tc_ext_d_invert = 0;
16480
break;
16481
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
16482
tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
16483
tc_ext_a_mode = GR_FUNC_MODE_ZERO;
16484
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16485
tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16486
tc_ext_d = GR_CMBX_B;
16487
tc_ext_d_invert = 0;
16488
break;
16489
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16490
tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
16491
tc_ext_a_mode = GR_FUNC_MODE_ZERO;
16492
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16493
tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16494
tc_ext_d = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16495
tc_ext_d_invert = 0;
16496
break;
16497
default:
16498
tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
16499
tc_ext_a_mode = GR_FUNC_MODE_ZERO;
16500
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
16501
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
16502
tc_ext_c = GR_CMBX_ZERO;
16503
tc_ext_c_invert = 0;
16504
tc_ext_d = GR_CMBX_ZERO;
16505
tc_ext_d_invert = 0;
16506
break;
16507
}
16508
16509
if (tmu == GR_TMU0)
16510
{
16511
cmb.t0c_ext_a = tc_ext_a;
16512
cmb.t0c_ext_a_mode = tc_ext_a_mode;
16513
cmb.t0c_ext_b = tc_ext_b;
16514
cmb.t0c_ext_b_mode = tc_ext_b_mode;
16515
cmb.t0c_ext_c = tc_ext_c;
16516
cmb.t0c_ext_c_invert = tc_ext_c_invert;
16517
cmb.t0c_ext_d = tc_ext_d;
16518
cmb.t0c_ext_d_invert = tc_ext_d_invert;
16519
}
16520
else
16521
{
16522
cmb.t1c_ext_a = tc_ext_a;
16523
cmb.t1c_ext_a_mode = tc_ext_a_mode;
16524
cmb.t1c_ext_b = tc_ext_b;
16525
cmb.t1c_ext_b_mode = tc_ext_b_mode;
16526
cmb.t1c_ext_c = tc_ext_c;
16527
cmb.t1c_ext_c_invert = tc_ext_c_invert;
16528
cmb.t1c_ext_d = tc_ext_d;
16529
cmb.t1c_ext_d_invert = tc_ext_d_invert;
16530
}
16531
}
16532
16533
void TexAlphaCombinerToExtension (GrChipID_t tmu)
16534
{
16535
wxUint32 ta_ext_a, ta_ext_a_mode, ta_ext_b, ta_ext_b_mode, ta_ext_c, ta_ext_d;
16536
int ta_ext_c_invert, ta_ext_d_invert;
16537
wxUint32 tmu_a_func, tmu_a_fac;
16538
16539
if (tmu == GR_TMU0)
16540
{
16541
tmu_a_func = cmb.tmu0_a_func;
16542
tmu_a_fac = cmb.tmu0_a_fac;
16543
}
16544
else
16545
{
16546
tmu_a_func = cmb.tmu1_a_func;
16547
tmu_a_fac = cmb.tmu1_a_fac;
16548
}
16549
16550
switch (tmu_a_fac)
16551
{
16552
case GR_COMBINE_FACTOR_ZERO:
16553
ta_ext_c = GR_CMBX_ZERO;
16554
ta_ext_c_invert = 0;
16555
break;
16556
case GR_COMBINE_FACTOR_LOCAL:
16557
case GR_COMBINE_FACTOR_LOCAL_ALPHA:
16558
ta_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16559
ta_ext_c_invert = 0;
16560
break;
16561
case GR_COMBINE_FACTOR_OTHER_ALPHA:
16562
ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16563
ta_ext_c_invert = 0;
16564
break;
16565
case GR_COMBINE_FACTOR_DETAIL_FACTOR:
16566
ta_ext_c = GR_CMBX_DETAIL_FACTOR;
16567
ta_ext_c_invert = 0;
16568
break;
16569
case GR_COMBINE_FACTOR_ONE:
16570
ta_ext_c = GR_CMBX_ZERO;
16571
ta_ext_c_invert = 1;
16572
break;
16573
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
16574
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
16575
ta_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16576
ta_ext_c_invert = 1;
16577
break;
16578
case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
16579
ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
16580
ta_ext_c_invert = 1;
16581
break;
16582
case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:
16583
ta_ext_c = GR_CMBX_DETAIL_FACTOR;
16584
ta_ext_c_invert = 1;
16585
break;
16586
default:
16587
ta_ext_c = GR_CMBX_ZERO;
16588
ta_ext_c_invert = 0;
16589
break;
16590
}
16591
16592
switch (tmu_a_func)
16593
{
16594
case GR_COMBINE_FUNCTION_ZERO:
16595
ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16596
ta_ext_a_mode = GR_FUNC_MODE_ZERO;
16597
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16598
ta_ext_b_mode = GR_FUNC_MODE_ZERO;
16599
ta_ext_c = GR_CMBX_ZERO;
16600
ta_ext_c_invert = 0;
16601
ta_ext_d = GR_CMBX_ZERO;
16602
ta_ext_d_invert = 0;
16603
break;
16604
case GR_COMBINE_FUNCTION_LOCAL:
16605
case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
16606
ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16607
ta_ext_a_mode = GR_FUNC_MODE_X;
16608
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16609
ta_ext_b_mode = GR_FUNC_MODE_ZERO;
16610
ta_ext_c = GR_CMBX_ZERO;
16611
ta_ext_c_invert = 1;
16612
ta_ext_d = GR_CMBX_ZERO;
16613
ta_ext_d_invert = 0;
16614
break;
16615
case GR_COMBINE_FUNCTION_SCALE_OTHER:
16616
ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
16617
ta_ext_a_mode = GR_FUNC_MODE_X;
16618
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16619
ta_ext_b_mode = GR_FUNC_MODE_ZERO;
16620
ta_ext_d = GR_CMBX_ZERO;
16621
ta_ext_d_invert = 0;
16622
break;
16623
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
16624
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
16625
ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
16626
ta_ext_a_mode = GR_FUNC_MODE_X;
16627
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16628
ta_ext_b_mode = GR_FUNC_MODE_ZERO;
16629
ta_ext_d = GR_CMBX_B;
16630
ta_ext_d_invert = 0;
16631
break;
16632
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
16633
ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
16634
ta_ext_a_mode = GR_FUNC_MODE_X;
16635
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16636
ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16637
ta_ext_d = GR_CMBX_ZERO;
16638
ta_ext_d_invert = 0;
16639
break;
16640
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
16641
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16642
ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
16643
ta_ext_a_mode = GR_FUNC_MODE_X;
16644
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16645
ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16646
ta_ext_d = GR_CMBX_B;
16647
ta_ext_d_invert = 0;
16648
break;
16649
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
16650
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
16651
ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16652
ta_ext_a_mode = GR_FUNC_MODE_ZERO;
16653
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16654
ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
16655
ta_ext_d = GR_CMBX_B;
16656
ta_ext_d_invert = 0;
16657
break;
16658
default:
16659
ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16660
ta_ext_a_mode = GR_FUNC_MODE_ZERO;
16661
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
16662
ta_ext_b_mode = GR_FUNC_MODE_ZERO;
16663
ta_ext_c = GR_CMBX_ZERO;
16664
ta_ext_c_invert = 0;
16665
ta_ext_d = GR_CMBX_ZERO;
16666
ta_ext_d_invert = 0;
16667
break;
16668
}
16669
16670
if (tmu == GR_TMU0)
16671
{
16672
cmb.t0a_ext_a = ta_ext_a;
16673
cmb.t0a_ext_a_mode = ta_ext_a_mode;
16674
cmb.t0a_ext_b = ta_ext_b;
16675
cmb.t0a_ext_b_mode = ta_ext_b_mode;
16676
cmb.t0a_ext_c = ta_ext_c;
16677
cmb.t0a_ext_c_invert = ta_ext_c_invert;
16678
cmb.t0a_ext_d = ta_ext_d;
16679
cmb.t0a_ext_d_invert = ta_ext_d_invert;
16680
}
16681
else
16682
{
16683
cmb.t1a_ext_a = ta_ext_a;
16684
cmb.t1a_ext_a_mode = ta_ext_a_mode;
16685
cmb.t1a_ext_b = ta_ext_b;
16686
cmb.t1a_ext_b_mode = ta_ext_b_mode;
16687
cmb.t1a_ext_c = ta_ext_c;
16688
cmb.t1a_ext_c_invert = ta_ext_c_invert;
16689
cmb.t1a_ext_d = ta_ext_d;
16690
cmb.t1a_ext_d_invert = ta_ext_d_invert;
16691
}
16692
}
16693
16694