Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libmupen64plus/mupen64plus-video-glide64/src/Combine.cpp
2 views
1
/*
2
* Glide64 - Glide video plugin for Nintendo 64 emulators.
3
* Copyright (c) 2002 Dave2001
4
* Copyright (c) 2008 Günther <[email protected]>
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
17
* Licence along with this program; if not, write to the Free
18
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19
* Boston, MA 02110-1301, USA
20
*/
21
22
//****************************************************************
23
//
24
// Glide64 - Glide Plugin for Nintendo 64 emulators (tested mostly with Project64)
25
// Project started on December 29th, 2001
26
//
27
// To modify Glide64:
28
// * 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.
29
// * 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.
30
//
31
// Official Glide64 development channel: #Glide64 on EFnet
32
//
33
// Original author: Dave2001 ([email protected])
34
// Other authors: Gonetz, Gugaman
35
//
36
//****************************************************************
37
// March 08, 2002:
38
// * New combiner method by Gonetz and Dave2001
39
//****************************************************************
40
41
#define M64P_PLUGIN_PROTOTYPES 1
42
#include "m64p_types.h"
43
#include "m64p_plugin.h"
44
#include "m64p_config.h"
45
#include "m64p_vidext.h"
46
#include "Util.h"
47
#include "Combine.h"
48
49
#ifndef _WIN32
50
#include <string.h>
51
#endif // _WIN32
52
53
#define FASTSEARCH // Enable fast combine mode searching algorithm
54
55
float percent_org, percent, r, g, b;
56
DWORD lod_frac;
57
58
DWORD cc_lookup[257];
59
DWORD ac_lookup[257];
60
COMBINE cmb;
61
62
//****************************************************************
63
// Macros
64
//****************************************************************
65
66
#define MOD_0(mode) cmb.mod_0 = mode
67
#define MOD_0_COL(color) cmb.modcolor_0 = color
68
#define MOD_0_COL1(color) cmb.modcolor1_0 = color
69
#define MOD_0_COL2(color) cmb.modcolor2_0 = color
70
#define MOD_0_FAC(factor) cmb.modfactor_0 = factor
71
#define MOD_1(mode) cmb.mod_1 = mode
72
#define MOD_1_COL(color) cmb.modcolor_1 = color
73
#define MOD_1_COL1(color) cmb.modcolor1_1 = color
74
#define MOD_1_COL2(color) cmb.modcolor2_1 = color
75
#define MOD_1_FAC(factor) cmb.modfactor_1 = factor
76
77
#define A_BLEND(f1,f2) cmb.abf1=f1,cmb.abf2=f2
78
79
// To make a color or alpha combine
80
#define CCMB(fnc,fac,loc,oth) \
81
cmb.c_fnc = fnc, \
82
cmb.c_fac = fac, \
83
cmb.c_loc = loc, \
84
cmb.c_oth = oth
85
#define ACMB(fnc,fac,loc,oth) \
86
cmb.a_fnc = fnc, \
87
cmb.a_fac = fac, \
88
cmb.a_loc = loc, \
89
cmb.a_oth = oth
90
#define CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
91
cmb.c_ext_a = a, \
92
cmb.c_ext_a_mode = a_mode, \
93
cmb.c_ext_b = b, \
94
cmb.c_ext_b_mode = b_mode, \
95
cmb.c_ext_c = c, \
96
cmb.c_ext_c_invert = c_invert, \
97
cmb.c_ext_d= d, \
98
cmb.c_ext_d_invert = d_invert, \
99
cmb.cmb_ext_use |= COMBINE_EXT_COLOR
100
#define ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
101
cmb.a_ext_a = a, \
102
cmb.a_ext_a_mode = a_mode, \
103
cmb.a_ext_b = b, \
104
cmb.a_ext_b_mode = b_mode, \
105
cmb.a_ext_c = c, \
106
cmb.a_ext_c_invert = c_invert, \
107
cmb.a_ext_d= d, \
108
cmb.a_ext_d_invert = d_invert, \
109
cmb.cmb_ext_use |= COMBINE_EXT_ALPHA
110
#define T0CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
111
cmb.t0c_ext_a = a, \
112
cmb.t0c_ext_a_mode = a_mode, \
113
cmb.t0c_ext_b = b, \
114
cmb.t0c_ext_b_mode = b_mode, \
115
cmb.t0c_ext_c = c, \
116
cmb.t0c_ext_c_invert = c_invert, \
117
cmb.t0c_ext_d= d, \
118
cmb.t0c_ext_d_invert = d_invert, \
119
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR
120
#define T0ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
121
cmb.t0a_ext_a = a, \
122
cmb.t0a_ext_a_mode = a_mode, \
123
cmb.t0a_ext_b = b, \
124
cmb.t0a_ext_b_mode = b_mode, \
125
cmb.t0a_ext_c = c, \
126
cmb.t0a_ext_c_invert = c_invert, \
127
cmb.t0a_ext_d= d, \
128
cmb.t0a_ext_d_invert = d_invert, \
129
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA
130
#define T1CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
131
cmb.t1c_ext_a = a, \
132
cmb.t1c_ext_a_mode = a_mode, \
133
cmb.t1c_ext_b = b, \
134
cmb.t1c_ext_b_mode = b_mode, \
135
cmb.t1c_ext_c = c, \
136
cmb.t1c_ext_c_invert = c_invert, \
137
cmb.t1c_ext_d= d, \
138
cmb.t1c_ext_d_invert = d_invert, \
139
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR
140
#define T1ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \
141
cmb.t1a_ext_a = a, \
142
cmb.t1a_ext_a_mode = a_mode, \
143
cmb.t1a_ext_b = b, \
144
cmb.t1a_ext_b_mode = b_mode, \
145
cmb.t1a_ext_c = c, \
146
cmb.t1a_ext_c_invert = c_invert, \
147
cmb.t1a_ext_d= d, \
148
cmb.t1a_ext_d_invert = d_invert, \
149
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA
150
151
// To use textures
152
#define USE_T0() \
153
rdp.best_tex = 0; \
154
cmb.tex |= 1, \
155
cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL
156
#define USE_T1() \
157
if (num_tmu > 1) { \
158
rdp.best_tex = 1; \
159
cmb.tex |= 2, \
160
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
161
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
162
cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE; \
163
} \
164
else { \
165
USE_T0(); \
166
}
167
#define T0_ADD_T1() \
168
rdp.best_tex = 0; \
169
cmb.tex |= 3, \
170
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
171
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
172
cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE
173
#define T0_MUL_T1() \
174
rdp.best_tex = 0; \
175
cmb.tex |= 3, \
176
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
177
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
178
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
179
#define T0_MUL_T1_ADD_T0() \
180
rdp.best_tex = 0; \
181
cmb.tex |= 3, \
182
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
183
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
184
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
185
#define T0A_MUL_T1() \
186
rdp.best_tex = 1; \
187
cmb.tex |= 3, \
188
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
189
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
190
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA
191
#define T0_MUL_T1A() \
192
rdp.best_tex = 1; \
193
cmb.tex |= 3, \
194
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA, \
195
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
196
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
197
#define T0_INTER_T1_USING_FACTOR(factor) \
198
if (factor == 0xFF) { \
199
USE_T1(); \
200
} \
201
else if (factor == 0x00) { \
202
USE_T0(); \
203
}\
204
else {\
205
if (factor <= 0x80) rdp.best_tex = 0; \
206
else rdp.best_tex = 1; \
207
cmb.tex |= 3, \
208
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
209
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
210
cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
211
percent = (float)factor / 255.0f, \
212
cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
213
}
214
#define T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\
215
if (factor == 0xFF) { \
216
USE_T0(); \
217
} \
218
else if (factor == 0x00) { \
219
USE_T1(); \
220
}\
221
else {\
222
if (factor <= 0x80) rdp.best_tex = 0; \
223
else rdp.best_tex = 1; \
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_DETAIL_FACTOR, \
228
percent = (255 - factor) / 255.0f, \
229
cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
230
}
231
#define T0_INTER_T1_USING_T0() \
232
rdp.best_tex = 0; \
233
cmb.tex |= 3, \
234
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
235
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
236
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
237
#define T1_INTER_T0_USING_T0() \
238
rdp.best_tex = 0; \
239
cmb.tex |= 3, \
240
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
241
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
242
cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL
243
#define T0_INTER_T1_USING_T1() \
244
if (!cmb.combine_ext) { \
245
T0_INTER_T1_USING_FACTOR(0x7F); \
246
}\
247
else {\
248
rdp.best_tex = 0; \
249
cmb.tex |= 3, \
250
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
251
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
252
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
253
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
254
cmb.t1c_ext_c = GR_CMBX_ZERO, \
255
cmb.t1c_ext_c_invert = 0, \
256
cmb.t1c_ext_d= GR_CMBX_B, \
257
cmb.t1c_ext_d_invert = 0, \
258
cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
259
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
260
cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
261
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
262
cmb.t0c_ext_c = GR_CMBX_OTHER_TEXTURE_RGB, \
263
cmb.t0c_ext_c_invert = 0, \
264
cmb.t0c_ext_d= GR_CMBX_B, \
265
cmb.t0c_ext_d_invert = 0, \
266
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
267
}
268
#define T0_INTER_T1_USING_T1A() \
269
rdp.best_tex = 0; \
270
cmb.tex |= 3, \
271
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
272
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \
273
cmb.tmu0_fac = GR_COMBINE_FACTOR_OTHER_ALPHA
274
#define T0_INTER_T1_USING_PRIM() \
275
if (!cmb.combine_ext) { \
276
T0_INTER_T1_USING_FACTOR ((rdp.prim_color&0xFF)); \
277
}\
278
else {\
279
rdp.best_tex = 0; \
280
cmb.tex |= 3, \
281
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
282
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
283
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
284
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
285
cmb.t1c_ext_c = GR_CMBX_ZERO, \
286
cmb.t1c_ext_c_invert = 0, \
287
cmb.t1c_ext_d= GR_CMBX_B, \
288
cmb.t1c_ext_d_invert = 0, \
289
cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
290
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
291
cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
292
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
293
cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
294
cmb.t0c_ext_c_invert = 0, \
295
cmb.t0c_ext_d= GR_CMBX_B, \
296
cmb.t0c_ext_d_invert = 0, \
297
cmb.tex_ccolor = rdp.prim_color, \
298
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
299
}
300
#define T1_INTER_T0_USING_PRIM() /* inverse of above */\
301
if (!cmb.combine_ext) { \
302
T1_INTER_T0_USING_FACTOR ((rdp.prim_color&0xFF)); \
303
}\
304
else {\
305
rdp.best_tex = 0; \
306
cmb.tex |= 3, \
307
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
308
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
309
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
310
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
311
cmb.t1c_ext_c = GR_CMBX_ZERO, \
312
cmb.t1c_ext_c_invert = 0, \
313
cmb.t1c_ext_d= GR_CMBX_B, \
314
cmb.t1c_ext_d_invert = 0, \
315
cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
316
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
317
cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \
318
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
319
cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
320
cmb.t0c_ext_c_invert = 0, \
321
cmb.t0c_ext_d= GR_CMBX_B, \
322
cmb.t0c_ext_d_invert = 0, \
323
cmb.tex_ccolor = rdp.prim_color, \
324
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
325
}
326
#define T0_INTER_T1_USING_ENV() \
327
if (!cmb.combine_ext) { \
328
T0_INTER_T1_USING_FACTOR ((rdp.env_color&0xFF)); \
329
}\
330
else {\
331
rdp.best_tex = 0; \
332
cmb.tex |= 3, \
333
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
334
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
335
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
336
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
337
cmb.t1c_ext_c = GR_CMBX_ZERO, \
338
cmb.t1c_ext_c_invert = 0, \
339
cmb.t1c_ext_d= GR_CMBX_B, \
340
cmb.t1c_ext_d_invert = 0, \
341
cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
342
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
343
cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
344
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
345
cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
346
cmb.t0c_ext_c_invert = 0, \
347
cmb.t0c_ext_d= GR_CMBX_B, \
348
cmb.t0c_ext_d_invert = 0, \
349
cmb.tex_ccolor = rdp.env_color, \
350
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
351
}
352
#define T1_INTER_T0_USING_ENV() /* inverse of above */\
353
if (!cmb.combine_ext) { \
354
T1_INTER_T0_USING_FACTOR ((rdp.env_color&0xFF)); \
355
}\
356
else {\
357
rdp.best_tex = 0; \
358
cmb.tex |= 3, \
359
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
360
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
361
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
362
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
363
cmb.t1c_ext_c = GR_CMBX_ZERO, \
364
cmb.t1c_ext_c_invert = 0, \
365
cmb.t1c_ext_d= GR_CMBX_B, \
366
cmb.t1c_ext_d_invert = 0, \
367
cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
368
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
369
cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \
370
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
371
cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \
372
cmb.t0c_ext_c_invert = 0, \
373
cmb.t0c_ext_d= GR_CMBX_B, \
374
cmb.t0c_ext_d_invert = 0, \
375
cmb.tex_ccolor = rdp.env_color, \
376
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
377
}
378
#define T0_INTER_T1_USING_SHADEA() \
379
if (!cmb.combine_ext) { \
380
T0_INTER_T1_USING_FACTOR (0x7F); \
381
}\
382
else {\
383
rdp.best_tex = 0; \
384
cmb.tex |= 3, \
385
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
386
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
387
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
388
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
389
cmb.t1c_ext_c = GR_CMBX_ZERO, \
390
cmb.t1c_ext_c_invert = 0, \
391
cmb.t1c_ext_d= GR_CMBX_B, \
392
cmb.t1c_ext_d_invert = 0, \
393
cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \
394
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
395
cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
396
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
397
cmb.t0c_ext_c = GR_CMBX_ITALPHA, \
398
cmb.t0c_ext_c_invert = 0, \
399
cmb.t0c_ext_d= GR_CMBX_B, \
400
cmb.t0c_ext_d_invert = 0, \
401
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
402
}
403
#define T1_INTER_T0_USING_SHADEA() \
404
if (!cmb.combine_ext) { \
405
T0_INTER_T1_USING_FACTOR (0x7F); \
406
}\
407
else {\
408
rdp.best_tex = 0; \
409
cmb.tex |= 3, \
410
cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
411
cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \
412
cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \
413
cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \
414
cmb.t1c_ext_c = GR_CMBX_ZERO, \
415
cmb.t1c_ext_c_invert = 0, \
416
cmb.t1c_ext_d= GR_CMBX_B, \
417
cmb.t1c_ext_d_invert = 0, \
418
cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
419
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
420
cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \
421
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
422
cmb.t0c_ext_c = GR_CMBX_ITALPHA, \
423
cmb.t0c_ext_c_invert = 0, \
424
cmb.t0c_ext_d= GR_CMBX_B, \
425
cmb.t0c_ext_d_invert = 0, \
426
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
427
}
428
#define T1_SUB_T0() \
429
rdp.best_tex = 0; \
430
cmb.tex |= 3, \
431
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
432
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \
433
cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE
434
#define T1_SUB_T0_MUL_T0() \
435
rdp.best_tex = 0; \
436
cmb.tex |= 3, \
437
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
438
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \
439
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL
440
#define T1_MUL_PRIMLOD_ADD_T0() \
441
rdp.best_tex = 0; \
442
cmb.tex |= 3, \
443
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
444
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
445
cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
446
percent = (float)(lod_frac) / 255.0f, \
447
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
448
#define T1_MUL_PRIMA_ADD_T0() \
449
rdp.best_tex = 0; \
450
cmb.tex |= 3, \
451
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
452
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
453
cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
454
percent = (float)(rdp.prim_color&0xFF) / 255.0f, \
455
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
456
#define T1_MUL_ENVA_ADD_T0() \
457
rdp.best_tex = 0; \
458
cmb.tex |= 3, \
459
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \
460
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
461
cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
462
percent = (float)(rdp.env_color&0xFF) / 255.0f, \
463
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
464
#define T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1() \
465
T0_ADD_T1 (); \
466
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC); \
467
MOD_0_COL (rdp.prim_color & 0xFFFFFF00); \
468
MOD_0_FAC (lod_frac & 0xFF);
469
#define T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0() \
470
if (cmb.combine_ext) \
471
{ \
472
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X, \
473
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X, \
474
GR_CMBX_DETAIL_FACTOR, 0, \
475
GR_CMBX_ZERO, 0); \
476
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X, \
477
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X, \
478
GR_CMBX_ZERO, 1, \
479
GR_CMBX_ZERO, 0); \
480
cmb.tex_ccolor = rdp.prim_color; \
481
cmb.tex |= 3; \
482
percent = (float)(lod_frac) / 255.0f; \
483
cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
484
} \
485
else \
486
{ \
487
T0_ADD_T1 (); \
488
MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC); \
489
MOD_1_COL (rdp.prim_color & 0xFFFFFF00); \
490
MOD_1_FAC (lod_frac & 0xFF); \
491
}
492
#define PRIM_INTER_T0_USING_SHADEA() \
493
if (!cmb.combine_ext) { \
494
USE_T0 (); \
495
}\
496
else {\
497
rdp.best_tex = 0; \
498
cmb.tex |= 1, \
499
cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \
500
cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \
501
cmb.t0c_ext_b = GR_CMBX_TMU_CCOLOR, \
502
cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
503
cmb.t0c_ext_c = GR_CMBX_ITALPHA, \
504
cmb.t0c_ext_c_invert = 0, \
505
cmb.t0c_ext_d= GR_CMBX_B, \
506
cmb.t0c_ext_d_invert = 0, \
507
cmb.tex_ccolor = rdp.prim_color, \
508
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \
509
}
510
511
#define A_USE_T0() \
512
cmb.tex |= 1, \
513
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_LOCAL
514
#define A_USE_T1() \
515
if (num_tmu > 1) { \
516
cmb.tex |= 2, \
517
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
518
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
519
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE; \
520
} \
521
else { \
522
A_USE_T0(); \
523
}
524
#define A_T0_ADD_T1() \
525
cmb.tex |= 3, \
526
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
527
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
528
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE
529
#define A_T0_SUB_T1() \
530
cmb.tex |= 3, \
531
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
532
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL, \
533
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA
534
#define A_T0_MUL_T1() \
535
cmb.tex |= 3, \
536
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
537
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \
538
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_LOCAL
539
#define A_T0_INTER_T1_USING_T0A() \
540
rdp.best_tex = 0; \
541
cmb.tex |= 3, \
542
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
543
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
544
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA
545
#define A_T1_INTER_T0_USING_T0A() \
546
rdp.best_tex = 0; \
547
cmb.tex |= 3, \
548
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
549
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
550
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA
551
#define A_T0_INTER_T1_USING_T1A() \
552
rdp.best_tex = 0; \
553
cmb.tex |= 3, \
554
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
555
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
556
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA
557
#define A_T0_INTER_T1_USING_FACTOR(factor) \
558
if (factor == 0xFF) { \
559
A_USE_T1(); \
560
} \
561
else if (factor == 0x00) { \
562
A_USE_T0(); \
563
}\
564
else { \
565
cmb.tex |= 3, \
566
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
567
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
568
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
569
percent = (float)factor / 255.0f, \
570
cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
571
}
572
#define A_T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\
573
if (factor == 0xFF) { \
574
A_USE_T0(); \
575
} \
576
else if (factor == 0x00) { \
577
A_USE_T1(); \
578
}\
579
else { \
580
cmb.tex |= 3, \
581
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
582
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \
583
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
584
percent = (255 - factor) / 255.0f, \
585
cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \
586
}
587
#define A_T0_INTER_T1_USING_SHADEA() \
588
if (!cmb.combine_ext) { \
589
A_T0_INTER_T1_USING_FACTOR (0x7F); \
590
}\
591
else {\
592
rdp.best_tex = 0; \
593
cmb.tex |= 3, \
594
cmb.t1a_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA, \
595
cmb.t1a_ext_a_mode = GR_FUNC_MODE_ZERO, \
596
cmb.t1a_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA, \
597
cmb.t1a_ext_b_mode = GR_FUNC_MODE_ZERO, \
598
cmb.t1a_ext_c = GR_CMBX_ZERO, \
599
cmb.t1a_ext_c_invert = 0, \
600
cmb.t1a_ext_d= GR_CMBX_B, \
601
cmb.t1a_ext_d_invert = 0, \
602
cmb.t0a_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA, \
603
cmb.t0a_ext_a_mode = GR_FUNC_MODE_X, \
604
cmb.t0a_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA, \
605
cmb.t0a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \
606
cmb.t0a_ext_c = GR_CMBX_ITALPHA, \
607
cmb.t0a_ext_c_invert = 0, \
608
cmb.t0a_ext_d= GR_CMBX_B, \
609
cmb.t0a_ext_d_invert = 0, \
610
cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA; \
611
}
612
#define A_T1_MUL_PRIMLOD_ADD_T0() \
613
rdp.best_tex = 0; \
614
cmb.tex |= 3, \
615
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
616
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
617
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
618
percent = (float)(lod_frac) / 255.0f, \
619
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
620
#define A_T1_MUL_PRIMA_ADD_T0() \
621
rdp.best_tex = 0; \
622
cmb.tex |= 3, \
623
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
624
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
625
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
626
percent = (float)(rdp.prim_color&0xFF) / 255.0f, \
627
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
628
#define A_T1_MUL_ENVA_ADD_T0() \
629
rdp.best_tex = 0; \
630
cmb.tex |= 3, \
631
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \
632
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \
633
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \
634
percent = (float)(rdp.env_color&0xFF) / 255.0f, \
635
cmb.dc0_detailmax = cmb.dc1_detailmax = percent
636
637
638
// UNIMP - writes to the unimplemented log, if it's enabled
639
#ifdef UNIMP_LOG
640
#define UNIMPMODE() { \
641
std::ofstream unimp; \
642
unimp.open("unimp.txt", std::ios::app); \
643
unimp << out_buf; \
644
unimp.close(); \
645
}
646
#else
647
#define UNIMPMODE()
648
#endif
649
650
// Bright red, sets up a bright red combine
651
#ifdef BRIGHT_RED
652
// Bright red, sets up a bright red combine during the alpha stage
653
#define BrightRed() { \
654
CCMB (GR_COMBINE_FUNCTION_LOCAL, \
655
GR_COMBINE_FACTOR_NONE, \
656
GR_COMBINE_LOCAL_CONSTANT, \
657
GR_COMBINE_OTHER_NONE); \
658
ACMB (GR_COMBINE_FUNCTION_LOCAL, \
659
GR_COMBINE_FACTOR_NONE, \
660
GR_COMBINE_LOCAL_CONSTANT, \
661
GR_COMBINE_OTHER_NONE); \
662
cmb.ccolor = 0xFF0000FF; \
663
}
664
#else
665
#define BrightRed()
666
#endif
667
668
#define CC(x) cmb.ccolor=(x)&0xFFFFFF00
669
#define CC_PRIM() cmb.ccolor=rdp.prim_color&0xFFFFFF00
670
#define CC_PRIMA() { cmb.ccolor=rdp.prim_color&0xFF; cmb.ccolor=(cmb.ccolor<<8)|(cmb.ccolor<<16)|(cmb.ccolor<<24); }
671
#define CC_1SUBPRIMA() { cmb.ccolor=(~rdp.prim_color)&0xFF; cmb.ccolor=(cmb.ccolor<<8)|(cmb.ccolor<<16)|(cmb.ccolor<<24); }
672
#define CC_1SUBPRIM() cmb.ccolor=(~rdp.prim_color)&0xFFFFFF00
673
#define CC_ENV() cmb.ccolor=rdp.env_color&0xFFFFFF00
674
#define CC_1SUBENV() cmb.ccolor=(~rdp.env_color)&0xFFFFFF00
675
#define CC_ENVA() { cmb.ccolor=rdp.env_color&0xFF; cmb.ccolor=(cmb.ccolor<<8)|(cmb.ccolor<<16)|(cmb.ccolor<<24); }
676
#define CC_PRIMLOD() { cmb.ccolor = (lod_frac<<24) | (lod_frac<<16) | (lod_frac<<8); }
677
#define CC_K5() { cmb.ccolor = (rdp.K5<<24) | (rdp.K5<<16) | (rdp.K5<<8); }
678
#define CC_PRIMMULENV() { \
679
cmb.ccolor=(BYTE)( ((rdp.prim_color & 0xFF000000) >> 24) * (((rdp.env_color & 0xFF000000) >> 24) /255.0f) ) << 24 | \
680
(BYTE)( ((rdp.prim_color & 0x00FF0000) >> 16) * (((rdp.env_color & 0x00FF0000) >> 16) /255.0f) ) << 16 | \
681
(BYTE)( ((rdp.prim_color & 0x0000FF00) >> 8) * (((rdp.env_color & 0x0000FF00) >> 8) /255.0f) ) << 8 ; \
682
}
683
#define CC_PRIMSUBENV() { \
684
cmb.ccolor=(BYTE)( ((rdp.prim_color & 0xFF000000) >> 24) - (((rdp.env_color & 0xFF000000) >> 24) ) ) << 24 | \
685
(BYTE)( ((rdp.prim_color & 0x00FF0000) >> 16) - (((rdp.env_color & 0x00FF0000) >> 16) ) ) << 16 | \
686
(BYTE)( ((rdp.prim_color & 0x0000FF00) >> 8) - (((rdp.env_color & 0x0000FF00) >> 8) ) ) << 8 ; \
687
}
688
689
#define MULSHADE(color) { \
690
rdp.col[0] *= (float)((color & 0xFF000000) >> 24) / 255.0f; \
691
rdp.col[1] *= (float)((color & 0x00FF0000) >> 16) / 255.0f; \
692
rdp.col[2] *= (float)((color & 0x0000FF00) >> 8) / 255.0f; \
693
rdp.cmb_flags |= CMB_MULT; \
694
}
695
#define MULSHADE_PRIM() { \
696
rdp.col[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \
697
rdp.col[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \
698
rdp.col[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \
699
rdp.cmb_flags |= CMB_MULT; \
700
}
701
#define MULSHADE_PRIMA() { \
702
rdp.col[0] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \
703
rdp.col[1] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \
704
rdp.col[2] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \
705
rdp.cmb_flags |= CMB_MULT; \
706
}
707
#define MULSHADE_ENV() { \
708
rdp.col[0] *= (float)((rdp.env_color & 0xFF000000) >> 24) / 255.0f; \
709
rdp.col[1] *= (float)((rdp.env_color & 0x00FF0000) >> 16) / 255.0f; \
710
rdp.col[2] *= (float)((rdp.env_color & 0x0000FF00) >> 8) / 255.0f; \
711
rdp.cmb_flags |= CMB_MULT; \
712
}
713
#define MULSHADE_ENVA() { \
714
rdp.col[0] *= (float)(rdp.env_color & 0xFF) / 255.0f; \
715
rdp.col[1] *= (float)(rdp.env_color & 0xFF) / 255.0f; \
716
rdp.col[2] *= (float)(rdp.env_color & 0xFF) / 255.0f; \
717
rdp.cmb_flags |= CMB_MULT; \
718
}
719
#define MULSHADE_1MPRIM() { \
720
rdp.col[0] *= 1.0f-((float)((rdp.prim_color & 0xFF000000) >> 24)/255.0f); \
721
rdp.col[1] *= 1.0f-((float)((rdp.prim_color & 0x00FF0000) >> 16)/255.0f); \
722
rdp.col[2] *= 1.0f-((float)((rdp.prim_color & 0x0000FF00) >> 8)/255.0f); \
723
rdp.cmb_flags |= CMB_MULT; \
724
}
725
#define MULSHADE_1MENV() { \
726
rdp.col[0] *= 1.0f-((float)((rdp.env_color & 0xFF000000) >> 24)/255.0f); \
727
rdp.col[1] *= 1.0f-((float)((rdp.env_color & 0x00FF0000) >> 16)/255.0f); \
728
rdp.col[2] *= 1.0f-((float)((rdp.env_color & 0x0000FF00) >> 8)/255.0f); \
729
rdp.cmb_flags |= CMB_MULT; \
730
}
731
//Added by Gonetz
732
#define MULSHADE_PRIMSUBENV() { \
733
rdp.col[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) - ((rdp.env_color & 0xFF000000) >> 24) )/255.0f; \
734
rdp.col[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) - ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f; \
735
rdp.col[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) - ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f; \
736
rdp.cmb_flags |= CMB_MULT; \
737
}
738
//Added by Gonetz
739
#define MULSHADE_ENVSUBPRIM() { \
740
rdp.col[0] *= (float)( ((rdp.env_color & 0xFF000000) >> 24) - ((rdp.prim_color & 0xFF000000) >> 24) )/255.0f; \
741
rdp.col[1] *= (float)( ((rdp.env_color & 0x00FF0000) >> 16) - ((rdp.prim_color & 0x00FF0000) >> 16) )/255.0f; \
742
rdp.col[2] *= (float)( ((rdp.env_color & 0x0000FF00) >> 8) - ((rdp.prim_color & 0x0000FF00) >> 8) )/255.0f; \
743
rdp.cmb_flags |= CMB_MULT; \
744
}
745
//Added by Gonetz
746
#define MULSHADE_PRIMLOD() { \
747
rdp.col[0] *= (float)(lod_frac & 0xFF) / 255.0f; \
748
rdp.col[1] *= (float)(lod_frac & 0xFF) / 255.0f; \
749
rdp.col[2] *= (float)(lod_frac & 0xFF) / 255.0f; \
750
rdp.cmb_flags |= CMB_MULT; \
751
}
752
//Added by Gonetz
753
#define MULSHADE_K5() { \
754
rdp.col[0] *= (float)rdp.K5 / 255.0f; \
755
rdp.col[1] *= (float)rdp.K5 / 255.0f; \
756
rdp.col[2] *= (float)rdp.K5 / 255.0f; \
757
rdp.cmb_flags |= CMB_MULT; \
758
}
759
#define MULSHADE_SHADEA() rdp.cmb_flags |= CMB_MULT_OWN_ALPHA;
760
761
#define SUBSHADE_PRIM() { \
762
rdp.coladd[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \
763
rdp.coladd[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \
764
rdp.coladd[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \
765
rdp.cmb_flags |= CMB_SUB; \
766
}
767
#define SUBSHADE_ENV() { \
768
rdp.coladd[0] *= (float)((rdp.env_color & 0xFF000000) >> 24) / 255.0f; \
769
rdp.coladd[1] *= (float)((rdp.env_color & 0x00FF0000) >> 16) / 255.0f; \
770
rdp.coladd[2] *= (float)((rdp.env_color & 0x0000FF00) >> 8) / 255.0f; \
771
rdp.cmb_flags |= CMB_SUB; \
772
}
773
#define SUBSHADE_PRIMSUBENV() { \
774
rdp.coladd[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) - ((rdp.env_color & 0xFF000000) >> 24) )/255.0f; \
775
rdp.coladd[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) - ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f; \
776
rdp.coladd[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) - ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f; \
777
rdp.cmb_flags |= CMB_SUB; \
778
}
779
#define SUBSHADE_PRIMMULENV() { \
780
rdp.coladd[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) * ((rdp.env_color & 0xFF000000) >> 24) )/255.0f; \
781
rdp.coladd[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) * ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f; \
782
rdp.coladd[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) * ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f; \
783
rdp.cmb_flags |= CMB_SUB; \
784
}
785
#define ADDSHADE_PRIM() { \
786
rdp.coladd[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \
787
rdp.coladd[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \
788
rdp.coladd[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \
789
rdp.cmb_flags |= CMB_ADD; \
790
}
791
#define ADDSHADE_ENV() { \
792
rdp.coladd[0] *= (float)((rdp.env_color & 0xFF000000) >> 24) / 255.0f; \
793
rdp.coladd[1] *= (float)((rdp.env_color & 0x00FF0000) >> 16) / 255.0f; \
794
rdp.coladd[2] *= (float)((rdp.env_color & 0x0000FF00) >> 8) / 255.0f; \
795
rdp.cmb_flags |= CMB_ADD; \
796
}
797
#define ADDSHADE_PRIMSUBENV() { \
798
rdp.coladd[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) - ((rdp.env_color & 0xFF000000) >> 24) )/255.0f; \
799
rdp.coladd[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) - ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f; \
800
rdp.coladd[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) - ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f; \
801
rdp.cmb_flags |= CMB_ADD; \
802
}
803
#define COLSUBSHADE_PRIM() { \
804
rdp.coladd[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \
805
rdp.coladd[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \
806
rdp.coladd[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \
807
rdp.cmb_flags |= CMB_COL_SUB_OWN; \
808
}
809
810
811
#define SETSHADE_PRIM() { \
812
rdp.col[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \
813
rdp.col[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \
814
rdp.col[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \
815
rdp.cmb_flags = CMB_SET; \
816
}
817
#define SETSHADE_ENV() { \
818
rdp.col[0] *= (float)((rdp.env_color & 0xFF000000) >> 24) / 255.0f; \
819
rdp.col[1] *= (float)((rdp.env_color & 0x00FF0000) >> 16) / 255.0f; \
820
rdp.col[2] *= (float)((rdp.env_color & 0x0000FF00) >> 8) / 255.0f; \
821
rdp.cmb_flags = CMB_SET; \
822
}
823
#define SETSHADE_1MPRIM() { \
824
rdp.col[0] *= 1.0f-((float)((rdp.prim_color & 0xFF000000) >> 24)/255.0f); \
825
rdp.col[1] *= 1.0f-((float)((rdp.prim_color & 0x00FF0000) >> 16)/255.0f); \
826
rdp.col[2] *= 1.0f-((float)((rdp.prim_color & 0x0000FF00) >> 8)/255.0f); \
827
rdp.cmb_flags = CMB_SET; \
828
}
829
#define SETSHADE_1MENV() { \
830
rdp.col[0] *= 1.0f-((float)((rdp.env_color & 0xFF000000) >> 24)/255.0f); \
831
rdp.col[1] *= 1.0f-((float)((rdp.env_color & 0x00FF0000) >> 16)/255.0f); \
832
rdp.col[2] *= 1.0f-((float)((rdp.env_color & 0x0000FF00) >> 8)/255.0f); \
833
rdp.cmb_flags = CMB_SET; \
834
}
835
#define SETSHADE_PRIMA() { \
836
rdp.col[0] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \
837
rdp.col[1] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \
838
rdp.col[2] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \
839
rdp.cmb_flags = CMB_SET; \
840
}
841
#define SETSHADE_1MPRIMA() { \
842
rdp.col[0] *= (float)((~rdp.prim_color) & 0xFF) / 255.0f; \
843
rdp.col[1] *= (float)((~rdp.prim_color) & 0xFF) / 255.0f; \
844
rdp.col[2] *= (float)((~rdp.prim_color) & 0xFF) / 255.0f; \
845
rdp.cmb_flags = CMB_SET; \
846
}
847
#define SETSHADE_PRIMSUBENV() { \
848
rdp.col[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) - ((rdp.env_color & 0xFF000000) >> 24) )/255.0f; \
849
rdp.col[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) - ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f; \
850
rdp.col[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) - ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f; \
851
rdp.cmb_flags = CMB_SET; \
852
}
853
#define SETSHADE_ENVSUBPRIM() { \
854
rdp.col[0] *= (float)( ((rdp.env_color & 0xFF000000) >> 24) - ((rdp.prim_color & 0xFF000000) >> 24) )/255.0f; \
855
rdp.col[1] *= (float)( ((rdp.env_color & 0x00FF0000) >> 16) - ((rdp.prim_color & 0x00FF0000) >> 16) )/255.0f; \
856
rdp.col[2] *= (float)( ((rdp.env_color & 0x0000FF00) >> 8) - ((rdp.prim_color & 0x0000FF00) >> 8) )/255.0f; \
857
rdp.cmb_flags = CMB_SET; \
858
}
859
#define SETSHADE_PRIMLOD() { \
860
rdp.col[0] *= (float)(lod_frac & 0xFF) / 255.0f; \
861
rdp.col[1] *= (float)(lod_frac & 0xFF) / 255.0f; \
862
rdp.col[2] *= (float)(lod_frac & 0xFF) / 255.0f; \
863
rdp.cmb_flags = CMB_SET; \
864
}
865
866
#define SETSHADE_1MPRIMLOD() { \
867
rdp.col[0] *= (float)(~lod_frac & 0xFF) / 255.0f; \
868
rdp.col[1] *= (float)(~lod_frac & 0xFF) / 255.0f; \
869
rdp.col[2] *= (float)(~lod_frac & 0xFF) / 255.0f; \
870
rdp.cmb_flags = CMB_SET; \
871
}
872
873
#define SETSHADE_SHADE_A() { \
874
rdp.cmb_flags = CMB_SETSHADE_SHADEALPHA; \
875
}
876
877
#define INTERSHADE_2(color,factor) { \
878
rdp.col_2[0] = (((color) >> 24) & 0xFF) / 255.0f; \
879
rdp.col_2[1] = (((color) >> 16) & 0xFF) / 255.0f; \
880
rdp.col_2[2] = (((color) >> 8) & 0xFF) / 255.0f; \
881
rdp.shade_factor = (factor) / 255.0f; \
882
rdp.cmb_flags_2 = CMB_INTER; \
883
}
884
885
#define CA(x) cmb.ccolor|=(x)&0xFF
886
#define CA_PRIM() cmb.ccolor|=rdp.prim_color&0xFF
887
#define CA_INVPRIM() cmb.ccolor|=0xFF-(rdp.prim_color&0xFF)
888
#define CA_INVENV() cmb.ccolor|=0xFF-(rdp.env_color&0xFF)
889
#define CA_ENV() cmb.ccolor|=rdp.env_color&0xFF
890
#define CA_ENV1MPRIM() cmb.ccolor|= (DWORD)(((rdp.env_color&0xFF)/255.0f) * (((~(rdp.prim_color&0xFF)) & 0xff)/255.0f) * 255.0f);
891
#define CA_PRIMENV() cmb.ccolor |= (DWORD)(((rdp.env_color&0xFF)/255.0f) * ((rdp.prim_color&0xFF)/255.0f) * 255.0f);
892
#define CA_PRIMLOD() cmb.ccolor |= lod_frac;
893
#define CA_PRIM_MUL_PRIMLOD() cmb.ccolor |= (int)(((rdp.prim_color&0xFF) * lod_frac) / 255.0f);
894
#define CA_ENV_MUL_PRIMLOD() cmb.ccolor |= (int)(((rdp.env_color&0xFF) * lod_frac) / 255.0f);
895
896
#define MULSHADE_A_PRIM() { \
897
rdp.col[3] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \
898
rdp.cmb_flags |= CMB_A_MULT; \
899
}
900
#define MULSHADE_A_1MPRIM() { \
901
rdp.col[3] *= 1.0f-((float)(rdp.prim_color & 0xFF) / 255.0f); \
902
rdp.cmb_flags |= CMB_A_MULT; \
903
}
904
#define MULSHADE_A_ENV() { \
905
rdp.col[3] *= (float)(rdp.env_color & 0xFF) / 255.0f; \
906
rdp.cmb_flags |= CMB_A_MULT; \
907
}
908
//Added by Gonetz
909
#define MULSHADE_A_PRIMSUBENV() { \
910
rdp.col[3] *= (float)( (rdp.prim_color & 0xFF) - (rdp.env_color & 0xFF) ) / 255.0f; \
911
rdp.cmb_flags |= CMB_A_MULT; \
912
}
913
//Added by Gonetz
914
#define MULSHADE_A_ENVSUBPRIM() { \
915
rdp.col[3] *= (float)( (rdp.env_color & 0xFF) - (rdp.prim_color & 0xFF) ) / 255.0f; \
916
rdp.cmb_flags |= CMB_A_MULT; \
917
}
918
919
#define SETSHADE_A(color) { \
920
rdp.col[3] *= (float)(color&0xFF)/255.0f; \
921
rdp.cmb_flags |= CMB_A_SET; \
922
}
923
#define SETSHADE_A_PRIM() { \
924
rdp.col[3] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \
925
rdp.cmb_flags |= CMB_A_SET; \
926
}
927
#define SETSHADE_A_ENV() { \
928
rdp.col[3] *= (float)(rdp.env_color & 0xFF) / 255.0f; \
929
rdp.cmb_flags |= CMB_A_SET; \
930
}
931
#define SETSHADE_A_INVENV() { \
932
rdp.col[3] *= (float)(0xFF - (rdp.env_color & 0xFF)) / 255.0f; \
933
rdp.cmb_flags |= CMB_A_SET; \
934
}
935
#define SUBSHADE_A_PRIM() { \
936
rdp.coladd[3] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \
937
rdp.cmb_flags |= CMB_A_SUB; \
938
}
939
#define SUBSHADE_A_ENV() { \
940
rdp.coladd[3] *= (float)(rdp.env_color & 0xFF) / 255.0f; \
941
rdp.cmb_flags |= CMB_A_SUB; \
942
}
943
#define ADDSHADE_A_PRIM() { \
944
rdp.coladd[3] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \
945
rdp.cmb_flags |= CMB_A_ADD; \
946
}
947
#define ADDSHADE_A_ENV() { \
948
rdp.coladd[3] *= (float)(rdp.env_color & 0xFF) / 255.0f; \
949
rdp.cmb_flags |= CMB_A_ADD; \
950
}
951
952
//****************************************************************
953
// Combine Functions
954
//****************************************************************
955
956
// These are in a somewhat ordered way, using the A constants below. T0 comes before
957
// T1 comes before PRIM, ... except for CMB, which always comes at the end, where
958
// the CMB comes first in the name. T0 and T1 are always interleaved, because they use the
959
// same function.
960
// Keep going in alphabetical order, but do not break the order of variables!
961
// ex: A*C + B*C -> T0_MUL_PRIM_ADD_ENV_MUL_PRIM,
962
// Although prim comes before env, we have already used prim as C, so it must stay as C
963
// and would NOT become T0_MUL_PRIM_ADD_PRIM_MUL_ENV
964
//
965
// New version ordered by:
966
// t0
967
// prim
968
// env
969
// shade
970
971
static void cc_one ()
972
{
973
CCMB (GR_COMBINE_FUNCTION_LOCAL,
974
GR_COMBINE_FACTOR_NONE,
975
GR_COMBINE_LOCAL_CONSTANT,
976
GR_COMBINE_OTHER_NONE);
977
// CC (0xFFFFFF00);
978
CC (0xFFFFFF00);
979
}
980
981
static void cc_zero ()
982
{
983
CCMB (GR_COMBINE_FUNCTION_LOCAL,
984
GR_COMBINE_FACTOR_NONE,
985
GR_COMBINE_LOCAL_CONSTANT,
986
GR_COMBINE_OTHER_NONE);
987
CC (0x00000000);
988
}
989
990
static void cc_t0 ()
991
{
992
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
993
GR_COMBINE_FACTOR_ONE,
994
GR_COMBINE_LOCAL_NONE,
995
GR_COMBINE_OTHER_TEXTURE);
996
USE_T0 ();
997
}
998
999
static void cc_t1 () //Added by Gonetz
1000
{
1001
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1002
GR_COMBINE_FACTOR_ONE,
1003
GR_COMBINE_LOCAL_NONE,
1004
GR_COMBINE_OTHER_TEXTURE);
1005
USE_T1 ();
1006
}
1007
1008
static void cc_t0_mul_t1 ()
1009
{
1010
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1011
GR_COMBINE_FACTOR_ONE,
1012
GR_COMBINE_LOCAL_NONE,
1013
GR_COMBINE_OTHER_TEXTURE);
1014
T0_MUL_T1 ();
1015
}
1016
1017
static void cc_t0_mul_t1_add_t0 () //Added by Gonetz
1018
{
1019
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1020
GR_COMBINE_FACTOR_ONE,
1021
GR_COMBINE_LOCAL_NONE,
1022
GR_COMBINE_OTHER_TEXTURE);
1023
T0_MUL_T1_ADD_T0 ();
1024
}
1025
1026
static void cc_t1_inter_t0_using_env ()
1027
{
1028
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1029
GR_COMBINE_FACTOR_ONE,
1030
GR_COMBINE_LOCAL_NONE,
1031
GR_COMBINE_OTHER_TEXTURE);
1032
T1_INTER_T0_USING_ENV ();
1033
}
1034
1035
static void cc_prim ()
1036
{
1037
CCMB (GR_COMBINE_FUNCTION_LOCAL,
1038
GR_COMBINE_FACTOR_NONE,
1039
GR_COMBINE_LOCAL_CONSTANT,
1040
GR_COMBINE_OTHER_NONE);
1041
CC_PRIM ();
1042
}
1043
1044
static void cc_env ()
1045
{
1046
CCMB (GR_COMBINE_FUNCTION_LOCAL,
1047
GR_COMBINE_FACTOR_NONE,
1048
GR_COMBINE_LOCAL_CONSTANT,
1049
GR_COMBINE_OTHER_NONE);
1050
CC_ENV ();
1051
}
1052
1053
static void cc_shade ()
1054
{
1055
CCMB (GR_COMBINE_FUNCTION_LOCAL,
1056
GR_COMBINE_FACTOR_NONE,
1057
GR_COMBINE_LOCAL_ITERATED,
1058
GR_COMBINE_OTHER_NONE);
1059
}
1060
1061
static void cc_shadea ()
1062
{
1063
CCMB (GR_COMBINE_FUNCTION_LOCAL_ALPHA,
1064
GR_COMBINE_FACTOR_NONE,
1065
GR_COMBINE_LOCAL_ITERATED,
1066
GR_COMBINE_OTHER_NONE);
1067
}
1068
1069
static void cc_t0_mul_prim ()
1070
{
1071
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1072
GR_COMBINE_FACTOR_LOCAL,
1073
GR_COMBINE_LOCAL_CONSTANT,
1074
GR_COMBINE_OTHER_TEXTURE);
1075
CC_PRIM ();
1076
USE_T0 ();
1077
}
1078
1079
static void cc_t0_mul_prima ()
1080
{
1081
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1082
GR_COMBINE_FACTOR_LOCAL,
1083
GR_COMBINE_LOCAL_CONSTANT,
1084
GR_COMBINE_OTHER_TEXTURE);
1085
CC_PRIMA ();
1086
USE_T0 ();
1087
}
1088
1089
static void cc_t1_mul_prim ()
1090
{
1091
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1092
GR_COMBINE_FACTOR_LOCAL,
1093
GR_COMBINE_LOCAL_CONSTANT,
1094
GR_COMBINE_OTHER_TEXTURE);
1095
CC_PRIM ();
1096
USE_T1 ();
1097
}
1098
1099
//Added by Gonetz
1100
static void cc__t1_inter_t0_using_enva__mul_prim ()
1101
{
1102
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1103
GR_COMBINE_FACTOR_LOCAL,
1104
GR_COMBINE_LOCAL_CONSTANT,
1105
GR_COMBINE_OTHER_TEXTURE);
1106
CC_PRIM ();
1107
BYTE factor = (BYTE)(rdp.env_color&0xFF);
1108
T1_INTER_T0_USING_FACTOR (factor);
1109
}
1110
1111
static void cc__t1_inter_one_using_env__mul_prim ()
1112
{
1113
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1114
GR_COMBINE_FACTOR_LOCAL,
1115
GR_COMBINE_LOCAL_CONSTANT,
1116
GR_COMBINE_OTHER_TEXTURE);
1117
CC_PRIM ();
1118
if (cmb.combine_ext)
1119
{
1120
T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1121
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1122
GR_CMBX_LOCAL_TEXTURE_RGB, 1,
1123
GR_CMBX_B, 0);
1124
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1125
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1126
GR_CMBX_ZERO, 1,
1127
GR_CMBX_ZERO, 0);
1128
cmb.tex |= 2;
1129
cmb.tex_ccolor = rdp.env_color;
1130
}
1131
else
1132
{
1133
USE_T1 ();
1134
}
1135
}
1136
1137
//Added by Gonetz
1138
static void cc_prim_mul_prim ()
1139
{
1140
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1141
GR_COMBINE_FACTOR_LOCAL,
1142
GR_COMBINE_LOCAL_ITERATED,
1143
GR_COMBINE_OTHER_CONSTANT);
1144
CC_PRIM ();
1145
SETSHADE_PRIM ();
1146
}
1147
1148
static void cc_prim_mul_prima ()
1149
{
1150
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1151
GR_COMBINE_FACTOR_LOCAL,
1152
GR_COMBINE_LOCAL_CONSTANT,
1153
GR_COMBINE_OTHER_ITERATED);
1154
CC_PRIM ();
1155
SETSHADE_PRIMA ();
1156
}
1157
1158
static void cc_t1_mul_prima ()
1159
{
1160
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1161
GR_COMBINE_FACTOR_LOCAL,
1162
GR_COMBINE_LOCAL_CONSTANT,
1163
GR_COMBINE_OTHER_TEXTURE);
1164
CC_PRIMA ();
1165
USE_T1 ();
1166
}
1167
1168
static void cc_t1_mul_enva ()
1169
{
1170
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1171
GR_COMBINE_FACTOR_LOCAL,
1172
GR_COMBINE_LOCAL_CONSTANT,
1173
GR_COMBINE_OTHER_TEXTURE);
1174
CC_ENVA ();
1175
USE_T1 ();
1176
}
1177
1178
static void cc_t0_mul_env ()
1179
{
1180
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1181
GR_COMBINE_FACTOR_LOCAL,
1182
GR_COMBINE_LOCAL_CONSTANT,
1183
GR_COMBINE_OTHER_TEXTURE);
1184
CC_ENV ();
1185
USE_T0 ();
1186
}
1187
1188
static void cc_t1_mul_env ()
1189
{
1190
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1191
GR_COMBINE_FACTOR_LOCAL,
1192
GR_COMBINE_LOCAL_CONSTANT,
1193
GR_COMBINE_OTHER_TEXTURE);
1194
CC_ENV ();
1195
USE_T1 ();
1196
}
1197
1198
//Added by Gonetz
1199
static void cc_t0_mul_enva ()
1200
{
1201
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1202
GR_COMBINE_FACTOR_LOCAL,
1203
GR_COMBINE_LOCAL_CONSTANT,
1204
GR_COMBINE_OTHER_TEXTURE);
1205
CC_ENVA ();
1206
USE_T0 ();
1207
}
1208
1209
static void cc_t0_mul_enva_add_prim ()
1210
{
1211
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1212
GR_COMBINE_FACTOR_TEXTURE_RGB,
1213
GR_COMBINE_LOCAL_ITERATED,
1214
GR_COMBINE_OTHER_CONSTANT);
1215
SETSHADE_PRIM ();
1216
CC_ENVA ();
1217
USE_T0 ();
1218
}
1219
1220
static void cc_t0_mul_shade ()
1221
{
1222
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1223
GR_COMBINE_FACTOR_LOCAL,
1224
GR_COMBINE_LOCAL_ITERATED,
1225
GR_COMBINE_OTHER_TEXTURE);
1226
USE_T0 ();
1227
}
1228
1229
static void cc_t0_mul_shadea ()
1230
{
1231
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1232
GR_COMBINE_FACTOR_LOCAL,
1233
GR_COMBINE_LOCAL_ITERATED,
1234
GR_COMBINE_OTHER_TEXTURE);
1235
SETSHADE_SHADE_A ();
1236
USE_T0 ();
1237
}
1238
1239
static void cc_t0_mul_k5 ()
1240
{
1241
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1242
GR_COMBINE_FACTOR_LOCAL,
1243
GR_COMBINE_LOCAL_CONSTANT,
1244
GR_COMBINE_OTHER_TEXTURE);
1245
CC_K5 ();
1246
USE_T0 ();
1247
}
1248
1249
static void cc_t1_mul_shade ()
1250
{
1251
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1252
GR_COMBINE_FACTOR_LOCAL,
1253
GR_COMBINE_LOCAL_ITERATED,
1254
GR_COMBINE_OTHER_TEXTURE);
1255
USE_T1 ();
1256
}
1257
1258
//Added by Gonetz
1259
static void cc__t0_add_t1__mul_shade ()
1260
{
1261
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1262
GR_COMBINE_FACTOR_LOCAL,
1263
GR_COMBINE_LOCAL_ITERATED,
1264
GR_COMBINE_OTHER_TEXTURE);
1265
T0_ADD_T1 ();
1266
}
1267
1268
//Added by Gonetz
1269
static void cc__t1_inter_t0_using_enva__mul_shade ()
1270
{
1271
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1272
GR_COMBINE_FACTOR_LOCAL,
1273
GR_COMBINE_LOCAL_ITERATED,
1274
GR_COMBINE_OTHER_TEXTURE);
1275
BYTE factor = (BYTE)(rdp.env_color&0xFF);
1276
T1_INTER_T0_USING_FACTOR (factor);
1277
}
1278
1279
//Added by Gonetz
1280
static void cc__t1_inter_t0_using_shadea__mul_shade ()
1281
{
1282
if (!cmb.combine_ext) {
1283
cc_t0_mul_shade ();
1284
return;
1285
}
1286
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1287
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
1288
GR_CMBX_ITRGB, 0,
1289
GR_CMBX_ZERO, 0);
1290
T1_INTER_T0_USING_SHADEA ();
1291
}
1292
1293
//Added by Gonetz
1294
static void cc__t0_inter_env_using_enva__mul_shade ()
1295
{
1296
// (env-t0)*env_a+t0, (cmb-0)*shade+0
1297
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1298
GR_COMBINE_FACTOR_LOCAL,
1299
GR_COMBINE_LOCAL_ITERATED,
1300
GR_COMBINE_OTHER_TEXTURE);
1301
if (cmb.combine_ext)
1302
{
1303
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1304
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1305
GR_CMBX_TMU_CALPHA, 0,
1306
GR_CMBX_B, 0);
1307
cmb.tex |= 1;
1308
cmb.tex_ccolor = rdp.env_color;
1309
}
1310
else
1311
{
1312
USE_T0 ();
1313
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
1314
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
1315
MOD_0_FAC (rdp.env_color&0xFF);
1316
}
1317
}
1318
1319
static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade ()
1320
{
1321
if (cmb.combine_ext)
1322
{
1323
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1324
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1325
GR_CMBX_ZERO, 0,
1326
GR_CMBX_B, 0);
1327
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1328
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1329
GR_CMBX_DETAIL_FACTOR, 0,
1330
GR_CMBX_ZERO, 0);
1331
cmb.tex |= 3;
1332
percent = (float)lod_frac / 255.0f;
1333
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
1334
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1335
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
1336
GR_CMBX_ITRGB, 0,
1337
GR_CMBX_ZERO, 0);
1338
CC_PRIM ();
1339
}
1340
else
1341
{
1342
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1343
GR_COMBINE_FACTOR_LOCAL,
1344
GR_COMBINE_LOCAL_ITERATED,
1345
GR_COMBINE_OTHER_TEXTURE);
1346
T0_INTER_T1_USING_FACTOR (lod_frac);
1347
}
1348
}
1349
1350
static void cc__t1_sub_prim_mul_t0__mul_shade ()
1351
{
1352
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1353
GR_COMBINE_FACTOR_LOCAL,
1354
GR_COMBINE_LOCAL_ITERATED,
1355
GR_COMBINE_OTHER_TEXTURE);
1356
if (cmb.combine_ext)
1357
{
1358
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1359
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1360
GR_CMBX_ZERO, 0,
1361
GR_CMBX_B, 0);
1362
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1363
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
1364
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1365
GR_CMBX_ZERO, 0);
1366
cmb.tex_ccolor = rdp.prim_color;
1367
cmb.tex |= 3;
1368
}
1369
else
1370
{
1371
T0_MUL_T1 ();
1372
}
1373
}
1374
1375
static void cc__t1_sub_t0_mul_t0_add_shade__mul_shade () //Aded by Gonetz
1376
{
1377
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1378
GR_COMBINE_FACTOR_ONE,
1379
GR_COMBINE_LOCAL_ITERATED,
1380
GR_COMBINE_OTHER_TEXTURE);
1381
if (cmb.combine_ext)
1382
{
1383
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1384
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1385
GR_CMBX_ZERO, 0,
1386
GR_CMBX_B, 0);
1387
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1388
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1389
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
1390
GR_CMBX_ITRGB, 0);
1391
cmb.tex |= 3;
1392
}
1393
else
1394
{
1395
T1_SUB_T0_MUL_T0 ();
1396
}
1397
}
1398
1399
static void cc__t0_mul_prima_add_prim_mul__shade ()
1400
{
1401
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1402
GR_COMBINE_FACTOR_LOCAL,
1403
GR_COMBINE_LOCAL_ITERATED,
1404
GR_COMBINE_OTHER_TEXTURE);
1405
if (cmb.combine_ext)
1406
{
1407
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1408
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
1409
GR_CMBX_TMU_CALPHA, 0,
1410
GR_CMBX_B, 0);
1411
cmb.tex_ccolor = rdp.prim_color;
1412
cmb.tex |= 1;
1413
}
1414
else
1415
{
1416
MOD_0 (TMOD_TEX_SCALE_FAC_ADD_COL);
1417
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1418
MOD_0_FAC (rdp.prim_color & 0xFF);
1419
USE_T0 ();
1420
}
1421
}
1422
1423
static void cc__prim_inter_t0_using_shadea__mul_shade ()
1424
{
1425
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1426
GR_COMBINE_FACTOR_LOCAL,
1427
GR_COMBINE_LOCAL_ITERATED,
1428
GR_COMBINE_OTHER_TEXTURE);
1429
PRIM_INTER_T0_USING_SHADEA ();
1430
}
1431
1432
//Added by Gonetz
1433
static void cc_prim_mul_env ()
1434
{
1435
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1436
GR_COMBINE_FACTOR_LOCAL,
1437
GR_COMBINE_LOCAL_ITERATED,
1438
GR_COMBINE_OTHER_CONSTANT);
1439
CC_PRIM ();
1440
SETSHADE_ENV ();
1441
}
1442
1443
static void cc_prim_mul_shade ()
1444
{
1445
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1446
GR_COMBINE_FACTOR_LOCAL,
1447
GR_COMBINE_LOCAL_ITERATED,
1448
GR_COMBINE_OTHER_CONSTANT);
1449
CC_PRIM ();
1450
}
1451
1452
static void cc_prim_mul_shadea ()
1453
{
1454
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1455
GR_COMBINE_FACTOR_LOCAL,
1456
GR_COMBINE_LOCAL_ITERATED,
1457
GR_COMBINE_OTHER_CONSTANT);
1458
SETSHADE_SHADE_A ();
1459
CC_PRIM ();
1460
}
1461
1462
static void cc_env_mul_shade ()
1463
{
1464
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1465
GR_COMBINE_FACTOR_LOCAL,
1466
GR_COMBINE_LOCAL_ITERATED,
1467
GR_COMBINE_OTHER_CONSTANT);
1468
CC_ENV ();
1469
}
1470
1471
static void cc_env_mul_enva ()
1472
{
1473
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1474
GR_COMBINE_FACTOR_OTHER_ALPHA,
1475
GR_COMBINE_LOCAL_NONE,
1476
GR_COMBINE_OTHER_CONSTANT);
1477
CC_ENV ();
1478
CA_ENV ();
1479
}
1480
1481
// ** A+B **
1482
1483
static void cc_t0_add_t1 ()
1484
{
1485
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1486
GR_COMBINE_FACTOR_ONE,
1487
GR_COMBINE_LOCAL_NONE,
1488
GR_COMBINE_OTHER_TEXTURE);
1489
T0_ADD_T1 ();
1490
}
1491
1492
static void cc_t0_add_prim () //Aded by Gonetz
1493
{
1494
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1495
GR_COMBINE_FACTOR_ONE,
1496
GR_COMBINE_LOCAL_CONSTANT,
1497
GR_COMBINE_OTHER_TEXTURE);
1498
CC_PRIM ();
1499
USE_T0 ();
1500
}
1501
1502
static void cc__t0_mul_t1__add_prim () //Aded by Gonetz
1503
{
1504
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1505
GR_COMBINE_FACTOR_ONE,
1506
GR_COMBINE_LOCAL_CONSTANT,
1507
GR_COMBINE_OTHER_TEXTURE);
1508
CC_PRIM ();
1509
T0_MUL_T1 ();
1510
}
1511
1512
static void cc_t0_add_env ()
1513
{
1514
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1515
GR_COMBINE_FACTOR_ONE,
1516
GR_COMBINE_LOCAL_CONSTANT,
1517
GR_COMBINE_OTHER_TEXTURE);
1518
CC_ENV ();
1519
USE_T0 ();
1520
}
1521
1522
//Added by Gonetz
1523
static void cc__t0_mul_t1__add_env ()
1524
{
1525
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1526
GR_COMBINE_FACTOR_ONE,
1527
GR_COMBINE_LOCAL_CONSTANT,
1528
GR_COMBINE_OTHER_TEXTURE);
1529
CC_ENV ();
1530
T0_MUL_T1 ();
1531
}
1532
1533
static void cc_t0_add_shade () //Aded by Gonetz
1534
{
1535
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1536
GR_COMBINE_FACTOR_ONE,
1537
GR_COMBINE_LOCAL_ITERATED,
1538
GR_COMBINE_OTHER_TEXTURE);
1539
USE_T0 ();
1540
}
1541
1542
static void cc_prim_add_env ()
1543
{
1544
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1545
GR_COMBINE_FACTOR_ONE,
1546
GR_COMBINE_LOCAL_CONSTANT,
1547
GR_COMBINE_OTHER_ITERATED);
1548
CC_ENV ();
1549
SETSHADE_PRIM ();
1550
}
1551
1552
static void cc_t0_add_prim_mul_one_sub_t0_add_t0 () //Aded by Gonetz
1553
{
1554
if (cmb.combine_ext)
1555
{
1556
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1557
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1558
GR_CMBX_LOCAL_TEXTURE_RGB, 1,
1559
GR_CMBX_B, 0);
1560
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1561
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
1562
GR_CMBX_ZERO, 1,
1563
GR_CMBX_ZERO, 0);
1564
cmb.tex_ccolor = rdp.prim_color;
1565
cmb.tex |= 1;
1566
}
1567
else
1568
{
1569
cc_t0_add_prim ();
1570
}
1571
}
1572
1573
static void cc_one_sub_prim_mul_t0_add_prim();
1574
static void cc__one_sub_prim_mul_t0_add_prim__mul_prima_add__one_sub_prim_mul_t0_add_prim () //Aded by Gonetz
1575
{
1576
if (cmb.combine_ext)
1577
{
1578
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1579
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
1580
GR_CMBX_TMU_CCOLOR, 1,
1581
GR_CMBX_B, 0);
1582
CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
1583
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1584
GR_CMBX_CONSTANT_COLOR, 0,
1585
GR_CMBX_B, 0);
1586
cmb.tex_ccolor = rdp.prim_color;
1587
CC_PRIMA();
1588
cmb.tex |= 3; //hw frame buffer allocated as tile1, but not used in combiner
1589
}
1590
else
1591
{
1592
cc_one_sub_prim_mul_t0_add_prim();
1593
// cc_t0 ();
1594
}
1595
}
1596
1597
static void cc_prim_add_shade () //Aded by Gonetz
1598
{
1599
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1600
GR_COMBINE_FACTOR_ONE,
1601
GR_COMBINE_LOCAL_ITERATED,
1602
GR_COMBINE_OTHER_CONSTANT);
1603
CC_PRIM ();
1604
}
1605
1606
static void cc_env_add_shade () //Aded by Gonetz
1607
{
1608
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1609
GR_COMBINE_FACTOR_ONE,
1610
GR_COMBINE_LOCAL_ITERATED,
1611
GR_COMBINE_OTHER_CONSTANT);
1612
CC_ENV ();
1613
}
1614
1615
// ** A-B **
1616
static void cc__t0_inter_t1_using_enva__sub_env () //Aded by Gonetz
1617
{
1618
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
1619
GR_COMBINE_FACTOR_ONE,
1620
GR_COMBINE_LOCAL_CONSTANT,
1621
GR_COMBINE_OTHER_TEXTURE);
1622
CC_ENV ();
1623
BYTE factor = (BYTE)(rdp.env_color&0xFF);
1624
T0_INTER_T1_USING_FACTOR (factor);
1625
}
1626
1627
static void cc_t0_sub_shade ()
1628
{
1629
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
1630
GR_COMBINE_FACTOR_ONE,
1631
GR_COMBINE_LOCAL_ITERATED,
1632
GR_COMBINE_OTHER_TEXTURE);
1633
USE_T0 ();
1634
}
1635
1636
// ** A-B*C **
1637
static void cc_env_sub__t0_sub_t1_mul_primlod__mul_prim () //Aded by Gonetz
1638
{
1639
if (cmb.combine_ext)
1640
{
1641
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1642
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1643
GR_CMBX_ZERO, 0,
1644
GR_CMBX_B, 0);
1645
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1646
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1647
GR_CMBX_ITRGB, 0,
1648
GR_CMBX_ZERO, 0);
1649
cmb.tex |= 3;
1650
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
1651
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1652
GR_CMBX_ZERO, 1,
1653
GR_CMBX_ZERO, 0);
1654
SETSHADE_PRIM ();
1655
MULSHADE_PRIMLOD ();
1656
CC_ENV ();
1657
}
1658
else
1659
{
1660
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1661
GR_COMBINE_FACTOR_TEXTURE_RGB,
1662
GR_COMBINE_LOCAL_CONSTANT,
1663
GR_COMBINE_OTHER_ITERATED);
1664
SETSHADE_PRIM ();
1665
CC_ENV ();
1666
T1_INTER_T0_USING_FACTOR (lod_frac);
1667
}
1668
}
1669
1670
static void cc_one_sub__one_sub_t0_mul_enva_add_prim__mul_prim () //Aded by Gonetz
1671
{
1672
if (cmb.combine_ext)
1673
{
1674
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
1675
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
1676
GR_CMBX_DETAIL_FACTOR, 0,
1677
GR_CMBX_B, 0);
1678
cmb.tex_ccolor = rdp.prim_color;
1679
cmb.tex |= 1;
1680
percent = (float)(rdp.env_color&0xFF) / 255.0f;
1681
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
1682
CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_X,
1683
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
1684
GR_CMBX_CONSTANT_COLOR, 0,
1685
GR_CMBX_ZERO, 1);
1686
CC_PRIM ();
1687
}
1688
else
1689
{
1690
cc_one ();
1691
}
1692
}
1693
1694
// ** A+B*C **
1695
//Aded by Gonetz
1696
static void cc_t0_add_env_mul_k5 ()
1697
{
1698
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1699
GR_COMBINE_FACTOR_ONE,
1700
GR_COMBINE_LOCAL_CONSTANT,
1701
GR_COMBINE_OTHER_TEXTURE);
1702
float scale = rdp.K5 / 255.0f;
1703
BYTE r = (BYTE)(rdp.env_color >> 24) & 0xFF;
1704
r = (BYTE)(r*scale);
1705
BYTE g = (BYTE)(rdp.env_color >> 16) & 0xFF;
1706
g = (BYTE)(g*scale);
1707
BYTE b = (BYTE)(rdp.env_color >> 8) & 0xFF;
1708
b = (BYTE)(b*scale);
1709
CC((r<<24)|(g<<16)|(b<<8));
1710
USE_T0 ();
1711
}
1712
1713
static void cc_t0_add_shade_mul_env ()
1714
{
1715
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1716
GR_COMBINE_FACTOR_ONE,
1717
GR_COMBINE_LOCAL_ITERATED,
1718
GR_COMBINE_OTHER_TEXTURE);
1719
MULSHADE_ENV ();
1720
USE_T0 ();
1721
}
1722
1723
static void cc__t1_mul_t0_add_t0__add_prim_mul_shade () //Aded by Gonetz
1724
{
1725
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1726
GR_COMBINE_FACTOR_ONE,
1727
GR_COMBINE_LOCAL_ITERATED,
1728
GR_COMBINE_OTHER_TEXTURE);
1729
MULSHADE_PRIM ();
1730
rdp.best_tex = 0;
1731
cmb.tex |= 3;
1732
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;
1733
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
1734
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL;
1735
}
1736
1737
// ** A*B+C **
1738
//Added by Gonetz
1739
static void cc_t0_mul_prim_add_t1 ()
1740
{
1741
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
1742
GR_COMBINE_FACTOR_ONE,
1743
GR_COMBINE_LOCAL_NONE,
1744
GR_COMBINE_OTHER_TEXTURE);
1745
if (cmb.combine_ext)
1746
{
1747
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1748
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1749
GR_CMBX_ZERO, 0,
1750
GR_CMBX_B, 0);
1751
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1752
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
1753
GR_CMBX_TMU_CCOLOR, 0,
1754
GR_CMBX_B, 0);
1755
cmb.tex |= 3;
1756
cmb.tex_ccolor = rdp.prim_color;
1757
}
1758
else
1759
{
1760
MOD_0 (TMOD_TEX_MUL_COL);
1761
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
1762
T0_ADD_T1 ();
1763
}
1764
}
1765
1766
static void cc_t1_mul_prim_add_prim ()
1767
{
1768
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1769
GR_COMBINE_FACTOR_TEXTURE_RGB,
1770
GR_COMBINE_LOCAL_CONSTANT,
1771
GR_COMBINE_OTHER_ITERATED);
1772
SETSHADE_PRIM ();
1773
CC_PRIM ();
1774
USE_T0 ();
1775
}
1776
1777
//Added by Gonetz
1778
static void cc_t0_mul_prim_add_env ()
1779
{
1780
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1781
GR_COMBINE_FACTOR_TEXTURE_RGB,
1782
GR_COMBINE_LOCAL_CONSTANT,
1783
GR_COMBINE_OTHER_ITERATED);
1784
SETSHADE_PRIM ();
1785
CC_ENV ();
1786
USE_T0 ();
1787
}
1788
1789
//Added by Gonetz
1790
static void cc_t1_mul_prim_add_env ()
1791
{
1792
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1793
GR_COMBINE_FACTOR_TEXTURE_RGB,
1794
GR_COMBINE_LOCAL_CONSTANT,
1795
GR_COMBINE_OTHER_ITERATED);
1796
SETSHADE_PRIM ();
1797
CC_ENV ();
1798
USE_T1 ();
1799
}
1800
1801
static void cc__t0_add_primlod__mul_prim_add_env ()
1802
{
1803
if (cmb.combine_ext)
1804
{
1805
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1806
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1807
GR_CMBX_ZERO, 1,
1808
GR_CMBX_ZERO, 0);
1809
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1810
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
1811
GR_CMBX_ZERO, 1,
1812
GR_CMBX_ZERO, 0);
1813
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
1814
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
1815
GR_CMBX_ITRGB, 0,
1816
GR_CMBX_B, 0);
1817
CC_PRIMLOD ();
1818
cmb.tex_ccolor = cmb.ccolor;
1819
CC_ENV ();
1820
SETSHADE_PRIM ();
1821
cmb.tex |= 1;
1822
}
1823
else
1824
{
1825
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1826
GR_COMBINE_FACTOR_TEXTURE_RGB,
1827
GR_COMBINE_LOCAL_CONSTANT,
1828
GR_COMBINE_OTHER_ITERATED);
1829
CC_PRIMLOD ();
1830
MOD_0 (TMOD_TEX_ADD_COL);
1831
MOD_0_COL (cmb.ccolor & 0xFFFFFF00);
1832
SETSHADE_PRIM ();
1833
CC_ENV ();
1834
USE_T0 ();
1835
}
1836
}
1837
1838
//Added by Gonetz
1839
static void cc_t0_mul_prim_mul_shade_add_prim_mul_shade ()
1840
{
1841
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1842
GR_COMBINE_FACTOR_LOCAL,
1843
GR_COMBINE_LOCAL_ITERATED,
1844
GR_COMBINE_OTHER_TEXTURE);
1845
MULSHADE_PRIM ();
1846
USE_T0 ();
1847
}
1848
1849
//Added by Gonetz
1850
static void cc__t0_inter_t1_using_primlod__mul_prim_add_env ()
1851
{
1852
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1853
GR_COMBINE_FACTOR_TEXTURE_RGB,
1854
GR_COMBINE_LOCAL_CONSTANT,
1855
GR_COMBINE_OTHER_ITERATED);
1856
SETSHADE_PRIM ();
1857
CC_ENV ();
1858
T0_INTER_T1_USING_FACTOR (lod_frac);
1859
}
1860
1861
static void cc__t1_sub_prim_mul_enva_add_t0__mul_prim_add_env ()
1862
{
1863
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1864
GR_COMBINE_FACTOR_TEXTURE_RGB,
1865
GR_COMBINE_LOCAL_ITERATED,
1866
GR_COMBINE_OTHER_CONSTANT);
1867
CC_PRIM ();
1868
SETSHADE_ENV ();
1869
if (cmb.combine_ext)
1870
{
1871
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1872
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
1873
GR_CMBX_DETAIL_FACTOR, 0,
1874
GR_CMBX_ZERO, 0);
1875
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
1876
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
1877
GR_CMBX_ZERO, 1,
1878
GR_CMBX_ZERO, 0);
1879
cmb.tex_ccolor = rdp.prim_color;
1880
cmb.tex |= 3;
1881
percent = (float)(rdp.env_color&0xFF) / 255.0f;
1882
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
1883
}
1884
else
1885
{
1886
MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);
1887
MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
1888
MOD_1_FAC (rdp.env_color & 0xFF);
1889
T0_ADD_T1 ();
1890
}
1891
}
1892
1893
//Added by Gonetz
1894
static void cc__t0_inter_t1_using_primlod__mul_shade_add_env ()
1895
{
1896
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1897
GR_COMBINE_FACTOR_TEXTURE_RGB,
1898
GR_COMBINE_LOCAL_CONSTANT,
1899
GR_COMBINE_OTHER_ITERATED);
1900
CC_ENV ();
1901
T0_INTER_T1_USING_FACTOR (lod_frac);
1902
}
1903
1904
//Added by Gonetz
1905
static void cc__t1_sub_prim_mul_primlod_add_t0__mul_prim_add_env ()
1906
{
1907
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1908
GR_COMBINE_FACTOR_TEXTURE_RGB,
1909
GR_COMBINE_LOCAL_CONSTANT,
1910
GR_COMBINE_OTHER_ITERATED);
1911
SETSHADE_PRIM ();
1912
CC_ENV ();
1913
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
1914
}
1915
1916
//Aded by Gonetz
1917
static void cc__t0_mul_t1__mul_prim_add_env ()
1918
{
1919
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1920
GR_COMBINE_FACTOR_TEXTURE_RGB,
1921
GR_COMBINE_LOCAL_CONSTANT,
1922
GR_COMBINE_OTHER_ITERATED);
1923
CC_ENV ();
1924
MULSHADE_PRIM ();
1925
T0_MUL_T1 ();
1926
}
1927
1928
//Aded by Gonetz
1929
static void cc__t0_mul_t1__mul_env_add_shade ()
1930
{
1931
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1932
GR_COMBINE_FACTOR_TEXTURE_RGB,
1933
GR_COMBINE_LOCAL_ITERATED,
1934
GR_COMBINE_OTHER_CONSTANT);
1935
CC_ENV ();
1936
T0_MUL_T1 ();
1937
}
1938
1939
static void cc__t0_mul_t1__mul_shade_add_prim ()
1940
{
1941
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1942
GR_COMBINE_FACTOR_TEXTURE_RGB,
1943
GR_COMBINE_LOCAL_CONSTANT,
1944
GR_COMBINE_OTHER_ITERATED);
1945
CC_PRIM ();
1946
T0_MUL_T1 ();
1947
}
1948
1949
//Added by Gonetz
1950
static void cc__t0_add_t1__mul_shade_add_env ()
1951
{
1952
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1953
GR_COMBINE_FACTOR_TEXTURE_RGB,
1954
GR_COMBINE_LOCAL_CONSTANT,
1955
GR_COMBINE_OTHER_ITERATED);
1956
CC_ENV ();
1957
T0_ADD_T1 ();
1958
}
1959
1960
static void cc__t1_mul_prima_add_t0__mul_shade_add_env ()
1961
{
1962
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1963
GR_COMBINE_FACTOR_TEXTURE_RGB,
1964
GR_COMBINE_LOCAL_CONSTANT,
1965
GR_COMBINE_OTHER_ITERATED);
1966
CC_ENV ();
1967
T1_MUL_PRIMA_ADD_T0 ();
1968
}
1969
1970
//Added by Gonetz
1971
static void cc__t0_inter_t1_using_enva__mul_shade_add_env ()
1972
{
1973
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1974
GR_COMBINE_FACTOR_TEXTURE_RGB,
1975
GR_COMBINE_LOCAL_CONSTANT,
1976
GR_COMBINE_OTHER_ITERATED);
1977
CC_ENV ();
1978
BYTE factor = (BYTE)(rdp.env_color&0xFF);
1979
T0_INTER_T1_USING_FACTOR (factor);
1980
}
1981
1982
//Added by Gonetz
1983
static void cc_t0_mul_primlod_add_prim ()
1984
{
1985
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1986
GR_COMBINE_FACTOR_TEXTURE_RGB,
1987
GR_COMBINE_LOCAL_ITERATED,
1988
GR_COMBINE_OTHER_CONSTANT);
1989
SETSHADE_PRIM ();
1990
CC_PRIMLOD ();
1991
USE_T0 ();
1992
}
1993
1994
//Added by Gonetz
1995
static void cc__t0_inter_t1_using_primlod__mul_shade_add_prim ()
1996
{
1997
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
1998
GR_COMBINE_FACTOR_TEXTURE_RGB,
1999
GR_COMBINE_LOCAL_CONSTANT,
2000
GR_COMBINE_OTHER_ITERATED);
2001
CC_PRIM ();
2002
T0_INTER_T1_USING_FACTOR (lod_frac);
2003
}
2004
2005
//Added by Gonetz
2006
static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade_add_shade ()
2007
{
2008
if (cmb.combine_ext)
2009
{
2010
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2011
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2012
GR_CMBX_ZERO, 0,
2013
GR_CMBX_B, 0);
2014
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2015
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
2016
GR_CMBX_DETAIL_FACTOR, 0,
2017
GR_CMBX_ZERO, 0);
2018
cmb.tex |= 3;
2019
percent = (float)lod_frac / 255.0f;
2020
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
2021
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2022
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
2023
GR_CMBX_ITRGB, 0,
2024
GR_CMBX_ITRGB, 0);
2025
CC_PRIM ();
2026
}
2027
else
2028
{
2029
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2030
GR_COMBINE_FACTOR_LOCAL,
2031
GR_COMBINE_LOCAL_ITERATED,
2032
GR_COMBINE_OTHER_TEXTURE);
2033
T0_INTER_T1_USING_FACTOR (lod_frac);
2034
}
2035
}
2036
2037
//Added by Gonetz
2038
static void cc__t0_inter_t1_using_half__mul_prim_add_env ()
2039
{
2040
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2041
GR_COMBINE_FACTOR_TEXTURE_RGB,
2042
GR_COMBINE_LOCAL_CONSTANT,
2043
GR_COMBINE_OTHER_ITERATED);
2044
SETSHADE_PRIM ();
2045
CC_ENV ();
2046
T0_INTER_T1_USING_FACTOR (0x7F);
2047
}
2048
2049
//Added by Gonetz
2050
static void cc__t0_inter_t1_using_t1__mul_prim_add_shade ()
2051
{
2052
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2053
GR_COMBINE_FACTOR_TEXTURE_RGB,
2054
GR_COMBINE_LOCAL_ITERATED,
2055
GR_COMBINE_OTHER_CONSTANT);
2056
CC_PRIM ();
2057
T0_INTER_T1_USING_T1 ();
2058
}
2059
2060
//Added by Gonetz
2061
static void cc_one_sub_t1_mul_t0a_add_t0_mul_env_add_prim ()
2062
{
2063
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2064
GR_COMBINE_FACTOR_ONE,
2065
GR_COMBINE_LOCAL_CONSTANT,
2066
GR_COMBINE_OTHER_TEXTURE);
2067
CC_PRIM ();
2068
MOD_0 (TMOD_TEX_MUL_COL);
2069
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
2070
rdp.best_tex = 0;
2071
cmb.tex |= 3;
2072
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;
2073
cmb.tmu1_invert = 1;
2074
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
2075
cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA;
2076
}
2077
2078
//Added by Gonetz
2079
static void cc__t0_inter_t1_using_t1__mul_shade_add_prim ()
2080
{
2081
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2082
GR_COMBINE_FACTOR_TEXTURE_RGB,
2083
GR_COMBINE_LOCAL_CONSTANT,
2084
GR_COMBINE_OTHER_ITERATED);
2085
CC_PRIM ();
2086
T0_INTER_T1_USING_T1 ();
2087
}
2088
2089
//Added by Gonetz
2090
static void cc_t0_mul_prim_add_shade ()
2091
{
2092
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2093
GR_COMBINE_FACTOR_TEXTURE_RGB,
2094
GR_COMBINE_LOCAL_ITERATED,
2095
GR_COMBINE_OTHER_CONSTANT);
2096
CC_PRIM ();
2097
USE_T0 ();
2098
}
2099
2100
static void cc_t1_mul_prim_add_shade ()
2101
{
2102
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2103
GR_COMBINE_FACTOR_TEXTURE_RGB,
2104
GR_COMBINE_LOCAL_ITERATED,
2105
GR_COMBINE_OTHER_CONSTANT);
2106
CC_PRIM ();
2107
USE_T1 ();
2108
}
2109
2110
//Added by Gonetz
2111
static void cc_t0_mul_env_add_prim ()
2112
{
2113
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2114
GR_COMBINE_FACTOR_TEXTURE_RGB,
2115
GR_COMBINE_LOCAL_CONSTANT,
2116
GR_COMBINE_OTHER_ITERATED);
2117
SETSHADE_ENV ();
2118
CC_PRIM ();
2119
USE_T0 ();
2120
}
2121
2122
//Added by Gonetz
2123
static void cc_t1_mul_env_add_prim ()
2124
{
2125
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2126
GR_COMBINE_FACTOR_TEXTURE_RGB,
2127
GR_COMBINE_LOCAL_CONSTANT,
2128
GR_COMBINE_OTHER_ITERATED);
2129
SETSHADE_ENV ();
2130
CC_PRIM ();
2131
USE_T1 ();
2132
}
2133
2134
//Added by Gonetz
2135
static void cc__t0_mul_t1__mul_env_add_prim ()
2136
{
2137
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2138
GR_COMBINE_FACTOR_TEXTURE_RGB,
2139
GR_COMBINE_LOCAL_CONSTANT,
2140
GR_COMBINE_OTHER_ITERATED);
2141
SETSHADE_ENV ();
2142
CC_PRIM ();
2143
T0_MUL_T1 ();
2144
}
2145
2146
//Added by Gonetz
2147
static void cc__t0_add_t1__mul_env_add_prim ()
2148
{
2149
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2150
GR_COMBINE_FACTOR_TEXTURE_RGB,
2151
GR_COMBINE_LOCAL_CONSTANT,
2152
GR_COMBINE_OTHER_ITERATED);
2153
SETSHADE_ENV ();
2154
CC_PRIM ();
2155
T0_ADD_T1 ();
2156
}
2157
2158
//Added by Gonetz
2159
static void cc__t1_sub_t0__mul_env_add_prim ()
2160
{
2161
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2162
GR_COMBINE_FACTOR_TEXTURE_RGB,
2163
GR_COMBINE_LOCAL_CONSTANT,
2164
GR_COMBINE_OTHER_ITERATED);
2165
SETSHADE_ENV ();
2166
CC_PRIM ();
2167
T1_SUB_T0 ();
2168
}
2169
2170
//Added by Gonetz
2171
static void cc_t0_mul_env_add_shade ()
2172
{
2173
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2174
GR_COMBINE_FACTOR_TEXTURE_RGB,
2175
GR_COMBINE_LOCAL_ITERATED,
2176
GR_COMBINE_OTHER_CONSTANT);
2177
CC_ENV ();
2178
USE_T0 ();
2179
}
2180
2181
static void cc_t0_mul_shade_add_prim ()
2182
{
2183
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2184
GR_COMBINE_FACTOR_TEXTURE_RGB,
2185
GR_COMBINE_LOCAL_CONSTANT,
2186
GR_COMBINE_OTHER_ITERATED);
2187
CC_PRIM ();
2188
USE_T0 ();
2189
}
2190
2191
static void cc_t1_mul_shade_add_prim ()
2192
{
2193
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2194
GR_COMBINE_FACTOR_TEXTURE_RGB,
2195
GR_COMBINE_LOCAL_CONSTANT,
2196
GR_COMBINE_OTHER_ITERATED);
2197
CC_PRIM ();
2198
USE_T1 ();
2199
}
2200
2201
static void cc_t0_mul_shade_add_env ()
2202
{
2203
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2204
GR_COMBINE_FACTOR_TEXTURE_RGB,
2205
GR_COMBINE_LOCAL_CONSTANT,
2206
GR_COMBINE_OTHER_ITERATED);
2207
CC_ENV ();
2208
USE_T0 ();
2209
}
2210
2211
static void cc__t0_add_primlod__mul_shade_add_env ()
2212
{
2213
if (cmb.combine_ext)
2214
{
2215
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2216
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
2217
GR_CMBX_ZERO, 1,
2218
GR_CMBX_ZERO, 0);
2219
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2220
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
2221
GR_CMBX_ZERO, 1,
2222
GR_CMBX_ZERO, 0);
2223
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2224
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
2225
GR_CMBX_ITRGB, 0,
2226
GR_CMBX_B, 0);
2227
CC_PRIMLOD ();
2228
cmb.tex_ccolor = cmb.ccolor;
2229
CC_ENV ();
2230
cmb.tex |= 1;
2231
}
2232
else
2233
{
2234
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2235
GR_COMBINE_FACTOR_TEXTURE_RGB,
2236
GR_COMBINE_LOCAL_CONSTANT,
2237
GR_COMBINE_OTHER_ITERATED);
2238
DWORD color = (lod_frac<<24) | (lod_frac<<16) | (lod_frac<<8);
2239
MOD_0 (TMOD_TEX_ADD_COL);
2240
MOD_0_COL (color & 0xFFFFFF00);
2241
CC_ENV ();
2242
USE_T0 ();
2243
}
2244
}
2245
2246
static void cc__t0_mul_prima_add_prim_mul__shade_add_env ()
2247
{
2248
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2249
GR_COMBINE_FACTOR_TEXTURE_RGB,
2250
GR_COMBINE_LOCAL_CONSTANT,
2251
GR_COMBINE_OTHER_ITERATED);
2252
CC_ENV ();
2253
if (cmb.combine_ext)
2254
{
2255
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2256
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,
2257
GR_CMBX_TMU_CALPHA, 0,
2258
GR_CMBX_B, 0);
2259
cmb.tex_ccolor = rdp.prim_color;
2260
cmb.tex |= 1;
2261
}
2262
else
2263
{
2264
MOD_0 (TMOD_TEX_SCALE_FAC_ADD_COL);
2265
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
2266
MOD_0_FAC (rdp.prim_color & 0xFF);
2267
USE_T0 ();
2268
}
2269
}
2270
2271
//Added by Gonetz
2272
static void cc_t0_mul_shadea_add_shade ()
2273
{
2274
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2275
GR_COMBINE_FACTOR_LOCAL_ALPHA,
2276
GR_COMBINE_LOCAL_ITERATED,
2277
GR_COMBINE_OTHER_TEXTURE);
2278
USE_T0 ();
2279
}
2280
2281
static void cc_prim_mul_prima_add_prim () //Added by Gonetz
2282
{
2283
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2284
GR_COMBINE_FACTOR_LOCAL_ALPHA,
2285
GR_COMBINE_LOCAL_CONSTANT,
2286
GR_COMBINE_OTHER_ITERATED);
2287
CC_PRIM ();
2288
CA_PRIM ();
2289
SETSHADE_PRIM ();
2290
}
2291
2292
static void cc_prim_mul_prima_add_t0 () //Added by Gonetz
2293
{
2294
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2295
GR_COMBINE_FACTOR_ONE,
2296
GR_COMBINE_LOCAL_ITERATED,
2297
GR_COMBINE_OTHER_TEXTURE);
2298
SETSHADE_PRIM ();
2299
SETSHADE_PRIMA ();
2300
USE_T0 ();
2301
}
2302
2303
static void cc_prim_mul_env_add_t0 () //Added by Gonetz
2304
{
2305
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2306
GR_COMBINE_FACTOR_ONE,
2307
GR_COMBINE_LOCAL_ITERATED,
2308
GR_COMBINE_OTHER_TEXTURE);
2309
SETSHADE_PRIM ();
2310
SETSHADE_ENV ();
2311
USE_T0 ();
2312
}
2313
2314
static void cc_prim_mul_shade_add_env ()
2315
{
2316
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2317
GR_COMBINE_FACTOR_ONE,
2318
GR_COMBINE_LOCAL_CONSTANT,
2319
GR_COMBINE_OTHER_ITERATED);
2320
CC_ENV ();
2321
MULSHADE_PRIM ();
2322
}
2323
2324
static void cc_env_mul_shade_add_env () //Added by Gonetz
2325
{
2326
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2327
GR_COMBINE_FACTOR_ONE,
2328
GR_COMBINE_LOCAL_CONSTANT,
2329
GR_COMBINE_OTHER_ITERATED);
2330
CC_ENV ();
2331
MULSHADE_ENV ();
2332
}
2333
2334
// ** A*B+C*D **
2335
static void cc_t0_mul_prim_add_one_sub_prim_mul_shade () //Added by Gonetz
2336
{
2337
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2338
GR_COMBINE_FACTOR_TEXTURE_RGB,
2339
GR_COMBINE_LOCAL_ITERATED,
2340
GR_COMBINE_OTHER_CONSTANT);
2341
CC_PRIM ();
2342
MULSHADE_1MPRIM ();
2343
USE_T0 ();
2344
}
2345
2346
static void cc_t0_mul_prim_add_shade_sub_env_mul_prim () //Added by Gonetz
2347
{
2348
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2349
GR_COMBINE_FACTOR_TEXTURE_RGB,
2350
GR_COMBINE_LOCAL_ITERATED,
2351
GR_COMBINE_OTHER_CONSTANT);
2352
CC_PRIM ();
2353
SUBSHADE_ENV ()
2354
MULSHADE_PRIM ();
2355
USE_T0 ();
2356
}
2357
2358
static void cc_t0_mul_prim_add_shade_mul_shadea_mul_prim ()
2359
{
2360
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2361
GR_COMBINE_FACTOR_TEXTURE_RGB,
2362
GR_COMBINE_LOCAL_ITERATED,
2363
GR_COMBINE_OTHER_CONSTANT);
2364
CC_PRIM ();
2365
MULSHADE_PRIM ();
2366
MULSHADE_SHADEA ();
2367
USE_T0 ();
2368
}
2369
2370
static void cc_t0_mul_env_add_prim_mul_shade () //Added by Gonetz
2371
{
2372
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2373
GR_COMBINE_FACTOR_TEXTURE_RGB,
2374
GR_COMBINE_LOCAL_ITERATED,
2375
GR_COMBINE_OTHER_CONSTANT);
2376
MULSHADE_PRIM ();
2377
CC_ENV ();
2378
USE_T0 ();
2379
}
2380
2381
static void cc_t0_mul_enva_add_prim_mul_shade () //Added by Gonetz
2382
{
2383
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2384
GR_COMBINE_FACTOR_TEXTURE_RGB,
2385
GR_COMBINE_LOCAL_ITERATED,
2386
GR_COMBINE_OTHER_CONSTANT);
2387
MULSHADE_PRIM ();
2388
CC_ENVA ();
2389
USE_T0 ();
2390
}
2391
2392
static void cc_t0_mul_shade_add_prim_mul_env () //Added by Gonetz
2393
{
2394
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2395
GR_COMBINE_FACTOR_TEXTURE_RGB,
2396
GR_COMBINE_LOCAL_CONSTANT,
2397
GR_COMBINE_OTHER_ITERATED);
2398
CC_PRIMMULENV ();
2399
USE_T0 ();
2400
}
2401
2402
static void cc_prim_mul_env_add_one_sub_prim_mul_shade () //Added by Gonetz
2403
{
2404
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2405
GR_COMBINE_FACTOR_ONE,
2406
GR_COMBINE_LOCAL_ITERATED,
2407
GR_COMBINE_OTHER_CONSTANT);
2408
MULSHADE_1MPRIM ();
2409
CC_PRIMMULENV ();
2410
}
2411
2412
// ** A*B*C **
2413
2414
static void cc_t0_mul_prim_mul_prim () //Added by Gonetz
2415
{
2416
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2417
GR_COMBINE_FACTOR_LOCAL,
2418
GR_COMBINE_LOCAL_ITERATED,
2419
GR_COMBINE_OTHER_TEXTURE);
2420
SETSHADE_PRIM ();
2421
SETSHADE_PRIM ();
2422
USE_T0 ();
2423
}
2424
2425
static void cc_t0_mul_prim_mul_prima () //Added by Gonetz
2426
{
2427
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2428
GR_COMBINE_FACTOR_LOCAL,
2429
GR_COMBINE_LOCAL_ITERATED,
2430
GR_COMBINE_OTHER_TEXTURE);
2431
SETSHADE_PRIM ();
2432
SETSHADE_PRIMA ();
2433
USE_T0 ();
2434
}
2435
2436
static void cc_t0_mul_enva_mul_shade ()
2437
{
2438
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2439
GR_COMBINE_FACTOR_LOCAL,
2440
GR_COMBINE_LOCAL_ITERATED,
2441
GR_COMBINE_OTHER_TEXTURE);
2442
MULSHADE_ENVA ();
2443
USE_T0 ();
2444
}
2445
2446
static void cc_t0_mul_primlod_mul_prim () //Added by Gonetz
2447
{
2448
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2449
GR_COMBINE_FACTOR_LOCAL,
2450
GR_COMBINE_LOCAL_CONSTANT,
2451
GR_COMBINE_OTHER_TEXTURE);
2452
cmb.ccolor = (rdp.prim_color*lod_frac)&0xFFFFFF00;
2453
USE_T0 ();
2454
}
2455
2456
static void cc_t0_mul_primlod_mul_shade () //Added by Gonetz
2457
{
2458
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2459
GR_COMBINE_FACTOR_LOCAL,
2460
GR_COMBINE_LOCAL_ITERATED,
2461
GR_COMBINE_OTHER_TEXTURE);
2462
MULSHADE_PRIMLOD ();
2463
USE_T0 ();
2464
}
2465
2466
static void cc__t0_mul_t1__mul_prim ()
2467
{
2468
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2469
GR_COMBINE_FACTOR_LOCAL,
2470
GR_COMBINE_LOCAL_CONSTANT,
2471
GR_COMBINE_OTHER_TEXTURE);
2472
CC_PRIM ();
2473
T0_MUL_T1 ();
2474
}
2475
2476
static void cc__t1_mul_t1_add_t0__mul_prim ()
2477
{
2478
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2479
GR_COMBINE_FACTOR_LOCAL,
2480
GR_COMBINE_LOCAL_CONSTANT,
2481
GR_COMBINE_OTHER_TEXTURE);
2482
CC_PRIM ();
2483
if (cmb.combine_ext)
2484
{
2485
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2486
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2487
GR_CMBX_ZERO, 0,
2488
GR_CMBX_B, 0);
2489
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
2490
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
2491
GR_CMBX_OTHER_TEXTURE_RGB, 0,
2492
GR_CMBX_B, 0);
2493
cmb.tex |= 3;
2494
}
2495
else
2496
{
2497
T0_ADD_T1 ();
2498
}
2499
}
2500
2501
static void cc__t0_mul_t1__mul_prima () //Added by Gonetz
2502
{
2503
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2504
GR_COMBINE_FACTOR_LOCAL,
2505
GR_COMBINE_LOCAL_CONSTANT,
2506
GR_COMBINE_OTHER_TEXTURE);
2507
CC_PRIMA ();
2508
T0_MUL_T1 ();
2509
}
2510
2511
static void cc__t0_mul_t1__mul_env () //Added by Gonetz
2512
{
2513
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2514
GR_COMBINE_FACTOR_LOCAL,
2515
GR_COMBINE_LOCAL_CONSTANT,
2516
GR_COMBINE_OTHER_TEXTURE);
2517
CC_ENV ();
2518
T0_MUL_T1 ();
2519
}
2520
2521
static void cc__t0_mul_t1__mul_enva () //Added by Gonetz
2522
{
2523
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2524
GR_COMBINE_FACTOR_LOCAL,
2525
GR_COMBINE_LOCAL_CONSTANT,
2526
GR_COMBINE_OTHER_TEXTURE);
2527
CC_ENVA ();
2528
T0_MUL_T1 ();
2529
}
2530
2531
static void cc__t0_mul_t1__mul_shade ()
2532
{
2533
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2534
GR_COMBINE_FACTOR_LOCAL,
2535
GR_COMBINE_LOCAL_ITERATED,
2536
GR_COMBINE_OTHER_TEXTURE);
2537
T0_MUL_T1 ();
2538
}
2539
2540
static void cc__t0a_mul_t1__mul_prim () //Added by Gonetz
2541
{
2542
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2543
GR_COMBINE_FACTOR_LOCAL,
2544
GR_COMBINE_LOCAL_CONSTANT,
2545
GR_COMBINE_OTHER_TEXTURE);
2546
CC_PRIM ();
2547
T0A_MUL_T1 ();
2548
}
2549
2550
static void cc__t0_mul_t1a__mul_shade () //Added by Gonetz
2551
{
2552
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2553
GR_COMBINE_FACTOR_LOCAL,
2554
GR_COMBINE_LOCAL_ITERATED,
2555
GR_COMBINE_OTHER_TEXTURE);
2556
T0_MUL_T1A ();
2557
}
2558
2559
static void cc__t0a_mul_t1__mul_shade () //Added by Gonetz
2560
{
2561
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2562
GR_COMBINE_FACTOR_LOCAL,
2563
GR_COMBINE_LOCAL_ITERATED,
2564
GR_COMBINE_OTHER_TEXTURE);
2565
T0A_MUL_T1 ();
2566
}
2567
2568
static void cc_t0_mul_prim_mul_env ()
2569
{
2570
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2571
GR_COMBINE_FACTOR_LOCAL,
2572
GR_COMBINE_LOCAL_ITERATED,
2573
GR_COMBINE_OTHER_TEXTURE);
2574
SETSHADE_PRIM ();
2575
SETSHADE_ENV (); // notice that setshade multiplies
2576
USE_T0 ();
2577
}
2578
2579
static void cc_t0_mul_prim_mul_shade ()
2580
{
2581
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2582
GR_COMBINE_FACTOR_LOCAL,
2583
GR_COMBINE_LOCAL_ITERATED,
2584
GR_COMBINE_OTHER_TEXTURE);
2585
MULSHADE_PRIM ();
2586
USE_T0 ();
2587
}
2588
2589
static void cc_t0_mul_prim_mul_shadea ()
2590
{
2591
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2592
GR_COMBINE_FACTOR_LOCAL,
2593
GR_COMBINE_LOCAL_ITERATED,
2594
GR_COMBINE_OTHER_TEXTURE);
2595
SETSHADE_PRIM ();
2596
MULSHADE_SHADEA();
2597
USE_T0 ();
2598
}
2599
2600
static void cc_t0_mul_prima_mul_shade ()
2601
{
2602
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2603
GR_COMBINE_FACTOR_LOCAL,
2604
GR_COMBINE_LOCAL_ITERATED,
2605
GR_COMBINE_OTHER_TEXTURE);
2606
MULSHADE_PRIMA ();
2607
USE_T0 ();
2608
}
2609
2610
static void cc_t0_mul_one_sub_prim_mul_shade ()
2611
{
2612
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2613
GR_COMBINE_FACTOR_LOCAL,
2614
GR_COMBINE_LOCAL_ITERATED,
2615
GR_COMBINE_OTHER_TEXTURE);
2616
MULSHADE_1MPRIM ();
2617
USE_T0 ();
2618
}
2619
2620
static void cc_t0_mul_one_sub_env_mul_shade ()
2621
{
2622
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2623
GR_COMBINE_FACTOR_LOCAL,
2624
GR_COMBINE_LOCAL_ITERATED,
2625
GR_COMBINE_OTHER_TEXTURE);
2626
MULSHADE_1MENV ();
2627
USE_T0 ();
2628
}
2629
2630
static void cc_t1_mul_prim_mul_shade ()
2631
{
2632
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2633
GR_COMBINE_FACTOR_LOCAL,
2634
GR_COMBINE_LOCAL_ITERATED,
2635
GR_COMBINE_OTHER_TEXTURE);
2636
MULSHADE_PRIM ();
2637
USE_T1 ();
2638
}
2639
2640
//Added by Gonetz
2641
static void cc_t0_mul_1mprim_mul_shade ()
2642
{
2643
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2644
GR_COMBINE_FACTOR_LOCAL,
2645
GR_COMBINE_LOCAL_ITERATED,
2646
GR_COMBINE_OTHER_TEXTURE);
2647
MULSHADE_1MPRIM ();
2648
USE_T0 ();
2649
}
2650
2651
static void cc_t0_mul_env_mul_shade ()
2652
{
2653
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2654
GR_COMBINE_FACTOR_LOCAL,
2655
GR_COMBINE_LOCAL_ITERATED,
2656
GR_COMBINE_OTHER_TEXTURE);
2657
MULSHADE_ENV ();
2658
USE_T0 ();
2659
}
2660
2661
static void cc_t0_mul_shade_mul_shadea ()
2662
{
2663
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2664
GR_COMBINE_FACTOR_LOCAL,
2665
GR_COMBINE_LOCAL_ITERATED,
2666
GR_COMBINE_OTHER_TEXTURE);
2667
MULSHADE_SHADEA ();
2668
USE_T0 ();
2669
}
2670
2671
static void cc_prim_mul_env_mul_shade ()
2672
{
2673
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2674
GR_COMBINE_FACTOR_LOCAL,
2675
GR_COMBINE_LOCAL_CONSTANT,
2676
GR_COMBINE_OTHER_ITERATED);
2677
CC_ENV ();
2678
MULSHADE_PRIM ();
2679
}
2680
2681
static void cc_prim_mul_one_sub_env_mul_shade ()
2682
{
2683
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2684
GR_COMBINE_FACTOR_LOCAL,
2685
GR_COMBINE_LOCAL_CONSTANT,
2686
GR_COMBINE_OTHER_ITERATED);
2687
CC_1SUBENV ();
2688
MULSHADE_PRIM ();
2689
}
2690
2691
// ** A*B*C+D **
2692
static void cc_t0_mul_prim_mul_shade_add_env ()
2693
{
2694
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2695
GR_COMBINE_FACTOR_TEXTURE_RGB,
2696
GR_COMBINE_LOCAL_CONSTANT,
2697
GR_COMBINE_OTHER_ITERATED);
2698
CC_ENV ();
2699
MULSHADE_PRIM ();
2700
USE_T0 ();
2701
}
2702
2703
//Added by Gonetz
2704
static void cc_t0_mul_prim_mul_shadea_add_env ()
2705
{
2706
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2707
GR_COMBINE_FACTOR_LOCAL_ALPHA,
2708
GR_COMBINE_LOCAL_ITERATED,
2709
GR_COMBINE_OTHER_TEXTURE);
2710
CC_ENV ();
2711
SETSHADE_ENV ();
2712
MULSHADE_A_PRIM ();
2713
USE_T0 ();
2714
}
2715
2716
// (A*B+C)*D
2717
static void cc__t0a_mul_prim_add_t0__mul_shade ()
2718
{
2719
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2720
GR_COMBINE_FACTOR_LOCAL,
2721
GR_COMBINE_LOCAL_ITERATED,
2722
GR_COMBINE_OTHER_TEXTURE);
2723
MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);
2724
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
2725
USE_T0 ();
2726
}
2727
2728
static void cc__t0a_mul_env_add_t0__mul_shade ()
2729
{
2730
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2731
GR_COMBINE_FACTOR_LOCAL,
2732
GR_COMBINE_LOCAL_ITERATED,
2733
GR_COMBINE_OTHER_TEXTURE);
2734
MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);
2735
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
2736
USE_T0 ();
2737
}
2738
2739
// ** A*B*C+D*E **
2740
//Added by Gonetz
2741
static void cc_t0_mul_prim_mul_shade_add_prim_mul_env ()
2742
{
2743
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2744
GR_COMBINE_FACTOR_TEXTURE_RGB,
2745
GR_COMBINE_LOCAL_CONSTANT,
2746
GR_COMBINE_OTHER_ITERATED);
2747
CC_PRIMMULENV ();
2748
MULSHADE_PRIM ();
2749
USE_T0 ();
2750
}
2751
2752
//Added by Gonetz
2753
static void cc_t0_mul_one_sub_prim_mul_shade_add_prim_mul_env ()
2754
{
2755
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2756
GR_COMBINE_FACTOR_TEXTURE_RGB,
2757
GR_COMBINE_LOCAL_CONSTANT,
2758
GR_COMBINE_OTHER_ITERATED);
2759
CC_PRIMMULENV ();
2760
MULSHADE_1MPRIM ();
2761
USE_T0 ();
2762
}
2763
2764
//Added by Gonetz
2765
static void cc_t0_mul_one_sub_prim_mul_shadea_add_prim_mul_env ()
2766
{
2767
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2768
GR_COMBINE_FACTOR_TEXTURE_RGB,
2769
GR_COMBINE_LOCAL_CONSTANT,
2770
GR_COMBINE_OTHER_ITERATED);
2771
CC_PRIMMULENV ();
2772
SETSHADE_1MPRIM ();
2773
MULSHADE_SHADEA ();
2774
USE_T0 ();
2775
}
2776
2777
//Added by Gonetz
2778
static void cc_t0_mul_one_sub_env_mul_shade_add_env ()
2779
{
2780
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2781
GR_COMBINE_FACTOR_TEXTURE_RGB,
2782
GR_COMBINE_LOCAL_CONSTANT,
2783
GR_COMBINE_OTHER_ITERATED);
2784
CC_ENV ();
2785
MULSHADE_1MENV ();
2786
USE_T0 ();
2787
}
2788
2789
static void cc_t0_mul_prima_mul_shade_add_prim_mul_one_sub_prima () //Aded by Gonetz
2790
{
2791
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2792
GR_COMBINE_FACTOR_TEXTURE_RGB,
2793
GR_COMBINE_LOCAL_CONSTANT,
2794
GR_COMBINE_OTHER_ITERATED);
2795
MULSHADE_PRIMA ();
2796
USE_T0 ();
2797
BYTE fac = 255 - (BYTE)(rdp.prim_color&0xFF);
2798
float col[3];
2799
col[0] = (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f;
2800
col[1] = (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f;
2801
col[2] = (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f;
2802
CC ( ((BYTE)(col[0]*fac))<<24 | ((BYTE)(col[1]*fac))<<16 | ((BYTE)(col[2]*fac))<<8 | fac );
2803
}
2804
2805
// ** A*(1-B)+C **
2806
static void cc_t0_mul_1menv_add_prim ()
2807
{
2808
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
2809
GR_COMBINE_FACTOR_TEXTURE_RGB,
2810
GR_COMBINE_LOCAL_CONSTANT,
2811
GR_COMBINE_OTHER_ITERATED);
2812
CC_PRIM ();
2813
SETSHADE_1MENV ();
2814
USE_T0 ();
2815
}
2816
2817
// ** (A+B)*C **
2818
static void cc_t0_add_prim_mul_shade () //Aded by Gonetz
2819
{
2820
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2821
GR_COMBINE_FACTOR_LOCAL,
2822
GR_COMBINE_LOCAL_ITERATED,
2823
GR_COMBINE_OTHER_TEXTURE);
2824
MOD_0 (TMOD_TEX_ADD_COL);
2825
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
2826
USE_T0 ();
2827
}
2828
2829
static void cc_t0_mul__prim_add_env () //Aded by Gonetz
2830
{
2831
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2832
GR_COMBINE_FACTOR_LOCAL,
2833
GR_COMBINE_LOCAL_ITERATED,
2834
GR_COMBINE_OTHER_TEXTURE);
2835
SETSHADE_PRIM ();
2836
ADDSHADE_ENV ();
2837
USE_T0 ();
2838
}
2839
2840
static void cc_t1_mul__prim_add_env () //Aded by Gonetz
2841
{
2842
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2843
GR_COMBINE_FACTOR_LOCAL,
2844
GR_COMBINE_LOCAL_ITERATED,
2845
GR_COMBINE_OTHER_TEXTURE);
2846
SETSHADE_PRIM ();
2847
ADDSHADE_ENV ();
2848
USE_T1 ();
2849
}
2850
2851
// ** (A-B)*C **
2852
static void cc__t0_mul_prim_add_shade__sub_env_mul_shade ()
2853
{
2854
if (cmb.combine_ext)
2855
{
2856
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2857
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
2858
GR_CMBX_TMU_CCOLOR, 0,
2859
GR_CMBX_B, 0);
2860
cmb.tex_ccolor = rdp.prim_color;
2861
cmb.tex |= 1;
2862
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2863
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
2864
GR_CMBX_ITRGB, 0,
2865
GR_CMBX_ZERO, 0);
2866
CC_ENV ();
2867
}
2868
else
2869
{
2870
cc_t0_mul_prim_mul_shade ();
2871
}
2872
}
2873
2874
static void cc__t0_sub_env_mul_shade__sub_prim_mul_shade ()
2875
{
2876
if (cmb.combine_ext)
2877
{
2878
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
2879
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
2880
GR_CMBX_ITRGB, 0,
2881
GR_CMBX_ZERO, 0);
2882
cmb.tex_ccolor = rdp.env_color;
2883
cmb.tex |= 1;
2884
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2885
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
2886
GR_CMBX_ITRGB, 0,
2887
GR_CMBX_ITRGB, 0);
2888
CC_PRIM ();
2889
}
2890
else
2891
{
2892
cc_t0_mul_shade ();
2893
}
2894
}
2895
2896
static void cc_t0_sub_env_mul_shade ()
2897
{
2898
if (cmb.combine_ext)
2899
{
2900
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
2901
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
2902
GR_CMBX_ITRGB, 0,
2903
GR_CMBX_ZERO, 0);
2904
CC_ENV ();
2905
}
2906
else
2907
{
2908
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2909
GR_COMBINE_FACTOR_LOCAL,
2910
GR_COMBINE_LOCAL_ITERATED,
2911
GR_COMBINE_OTHER_TEXTURE);
2912
if (rdp.env_color & 0xFFFFFF00)
2913
{
2914
MOD_0 (TMOD_TEX_SUB_COL);
2915
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
2916
}
2917
}
2918
USE_T0 ();
2919
}
2920
2921
static void cc_one_sub_t0_mul_prim () //Added by Gonetz
2922
{
2923
CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
2924
GR_COMBINE_FACTOR_TEXTURE_RGB,
2925
GR_COMBINE_LOCAL_CONSTANT,
2926
GR_COMBINE_OTHER_NONE);
2927
CC_PRIM ();
2928
USE_T0 ();
2929
}
2930
2931
static void cc_shade_sub_prim_mul_t0 () //Aded by Gonetz
2932
{
2933
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
2934
GR_COMBINE_FACTOR_TEXTURE_RGB,
2935
GR_COMBINE_LOCAL_CONSTANT,
2936
GR_COMBINE_OTHER_ITERATED);
2937
CC_PRIM ();
2938
USE_T0 ();
2939
}
2940
2941
static void cc_shade_sub_prim_mul_env () //Aded by Gonetz
2942
{
2943
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2944
GR_COMBINE_FACTOR_LOCAL,
2945
GR_COMBINE_LOCAL_CONSTANT,
2946
GR_COMBINE_OTHER_ITERATED);
2947
CC_ENV ();
2948
SUBSHADE_PRIM ();
2949
}
2950
2951
static void cc_shade_sub_env_mul_t0 () //Aded by Gonetz
2952
{
2953
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
2954
GR_COMBINE_FACTOR_TEXTURE_RGB,
2955
GR_COMBINE_LOCAL_CONSTANT,
2956
GR_COMBINE_OTHER_ITERATED);
2957
CC_ENV ();
2958
USE_T0 ();
2959
}
2960
2961
static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
2962
{
2963
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
2964
GR_COMBINE_FACTOR_TEXTURE_RGB,
2965
GR_COMBINE_LOCAL_CONSTANT,
2966
GR_COMBINE_OTHER_ITERATED);
2967
CC_PRIM ();
2968
T0_INTER_T1_USING_FACTOR (lod_frac);
2969
}
2970
2971
static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
2972
{
2973
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
2974
GR_COMBINE_FACTOR_TEXTURE_RGB,
2975
GR_COMBINE_LOCAL_CONSTANT,
2976
GR_COMBINE_OTHER_ITERATED);
2977
CC_ENV ();
2978
T0_INTER_T1_USING_FACTOR (lod_frac);
2979
}
2980
2981
static void cc_one_sub__t0_mul_t1__mul_shade () //Aded by Gonetz
2982
{
2983
CCMB (GR_COMBINE_FUNCTION_BLEND,
2984
GR_COMBINE_FACTOR_TEXTURE_RGB,
2985
GR_COMBINE_LOCAL_ITERATED,
2986
GR_COMBINE_OTHER_CONSTANT);
2987
CC (0);
2988
T0_MUL_T1 ();
2989
}
2990
2991
static void cc_one_sub_env_mul_t0 () //Aded by Gonetz
2992
{
2993
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
2994
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
2995
GR_COMBINE_LOCAL_CONSTANT,
2996
GR_COMBINE_OTHER_TEXTURE);
2997
CC_ENV ();
2998
USE_T0 ();
2999
}
3000
3001
static void cc_one_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz
3002
{
3003
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3004
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3005
GR_COMBINE_LOCAL_CONSTANT,
3006
GR_COMBINE_OTHER_TEXTURE);
3007
CC_ENV ();
3008
T0_INTER_T1_USING_FACTOR (lod_frac);
3009
}
3010
3011
static void cc_one_sub_env_mul_shade () //Aded by Gonetz
3012
{
3013
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3014
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3015
GR_COMBINE_LOCAL_CONSTANT,
3016
GR_COMBINE_OTHER_ITERATED);
3017
CC_ENV ();
3018
}
3019
3020
// ** (1-A)*B + A*C **
3021
static void cc_t0_mul_env_add_1mt0_mul_shade ()
3022
{
3023
CCMB (GR_COMBINE_FUNCTION_BLEND,
3024
GR_COMBINE_FACTOR_TEXTURE_RGB,
3025
GR_COMBINE_LOCAL_ITERATED,
3026
GR_COMBINE_OTHER_CONSTANT);
3027
CC_ENV ();
3028
USE_T0 ();
3029
}
3030
3031
// ** (1-A)*B+C **
3032
static void cc_one_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade () //Added by Gonetz
3033
{
3034
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3035
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3036
GR_COMBINE_LOCAL_ITERATED,
3037
GR_COMBINE_OTHER_TEXTURE);
3038
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
3039
}
3040
3041
// ** (1-A)*B*C **
3042
static void cc_one_sub_t0_mul_prim_mul_shade () //Added by Gonetz
3043
{
3044
CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
3045
GR_COMBINE_FACTOR_TEXTURE_RGB,
3046
GR_COMBINE_LOCAL_ITERATED,
3047
GR_COMBINE_OTHER_NONE);
3048
MULSHADE_PRIM ();
3049
USE_T0 ();
3050
}
3051
3052
// ** (A-B)*C*D **
3053
static void cc_prim_sub_env_mul_t0_mul_shade ()
3054
{
3055
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3056
GR_COMBINE_FACTOR_TEXTURE_RGB,
3057
GR_COMBINE_LOCAL_NONE,
3058
GR_COMBINE_OTHER_ITERATED);
3059
MULSHADE_PRIMSUBENV ();
3060
USE_T0 ();
3061
}
3062
3063
// ** (A-B)*C+D **
3064
static void cc_t0_sub_t1_mul_prim_mul_shade_add_t1 () //Aded by Gonetz
3065
{
3066
if (cmb.combine_ext)
3067
{
3068
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3069
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3070
GR_CMBX_ZERO, 0,
3071
GR_CMBX_B, 0);
3072
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3073
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
3074
GR_CMBX_ITRGB, 0,
3075
GR_CMBX_B, 0);
3076
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3077
GR_COMBINE_FACTOR_ONE,
3078
GR_COMBINE_LOCAL_NONE,
3079
GR_COMBINE_OTHER_TEXTURE);
3080
MULSHADE_PRIM ();
3081
cmb.tex |= 3;
3082
}
3083
else
3084
{
3085
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3086
GR_COMBINE_FACTOR_LOCAL,
3087
GR_COMBINE_LOCAL_CONSTANT,
3088
GR_COMBINE_OTHER_TEXTURE);
3089
CC_PRIM ();
3090
T0_ADD_T1 ();
3091
}
3092
}
3093
3094
static void cc_t0_sub_prim_mul_t0a_add_prim () //Aded by Gonetz
3095
{
3096
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3097
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
3098
GR_COMBINE_LOCAL_CONSTANT,
3099
GR_COMBINE_OTHER_TEXTURE);
3100
CC_PRIM ();
3101
USE_T0 ();
3102
}
3103
3104
static void cc_t0_sub_prim_mul_prima_add_prim () //Aded by Gonetz
3105
{
3106
// * not guaranteed to work if another iterated alpha is set
3107
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3108
GR_COMBINE_FACTOR_TEXTURE_RGB,
3109
GR_COMBINE_LOCAL_ITERATED,
3110
GR_COMBINE_OTHER_CONSTANT);
3111
SETSHADE_PRIM ();
3112
SETSHADE_1MPRIMA ();
3113
CC_PRIMA ();
3114
USE_T0 ();
3115
}
3116
3117
static void cc_t0_sub_prim_mul_shadea_add_prim () //Aded by Gonetz
3118
{
3119
// * not guaranteed to work if another iterated alpha is set
3120
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3121
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3122
GR_COMBINE_LOCAL_ITERATED,
3123
GR_COMBINE_OTHER_TEXTURE);
3124
SETSHADE_PRIM ();
3125
USE_T0 ();
3126
}
3127
3128
static void cc_t0_sub_prim_mul_env_add_shade () //Aded by Gonetz
3129
{
3130
if (cmb.combine_ext)
3131
{
3132
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3133
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
3134
GR_CMBX_ZERO, 1,
3135
GR_CMBX_ZERO, 0);
3136
cmb.tex |= 1;
3137
cmb.tex_ccolor = rdp.prim_color;
3138
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3139
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
3140
GR_CMBX_CONSTANT_COLOR, 0,
3141
GR_CMBX_B, 0);
3142
CC_ENV ();
3143
}
3144
else
3145
{
3146
cc_t0_mul_env_add_shade ();
3147
}
3148
}
3149
3150
static void cc__t0_inter_t1_using_shadea__sub_prim_mul_env_add_shade () //Aded by Gonetz
3151
{
3152
if (cmb.combine_ext)
3153
{
3154
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3155
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
3156
GR_CMBX_CONSTANT_COLOR, 0,
3157
GR_CMBX_B, 0);
3158
//have to pass shade alpha to combiner
3159
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
3160
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
3161
GR_CMBX_ZERO, 0,
3162
GR_CMBX_ZERO, 0);
3163
}
3164
else
3165
{
3166
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3167
GR_COMBINE_FACTOR_TEXTURE_RGB,
3168
GR_COMBINE_LOCAL_ITERATED,
3169
GR_COMBINE_OTHER_CONSTANT);
3170
}
3171
CC_ENV ();
3172
SUBSHADE_PRIMMULENV ();
3173
T0_INTER_T1_USING_SHADEA ();
3174
}
3175
3176
3177
static void cc_t0_sub_prim_mul_env_add_prim () //Aded by Gonetz
3178
{
3179
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3180
GR_COMBINE_FACTOR_TEXTURE_RGB,
3181
GR_COMBINE_LOCAL_ITERATED,
3182
GR_COMBINE_OTHER_CONSTANT);
3183
CC_ENV ();
3184
SETSHADE_PRIM ();
3185
SETSHADE_1MENV ();
3186
USE_T0 ();
3187
}
3188
3189
static void cc_t0_sub_prim_mul_enva_add_prim () //Aded by Gonetz
3190
{
3191
// * not guaranteed to work if another iterated alpha is set
3192
CCMB (GR_COMBINE_FUNCTION_BLEND,
3193
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3194
GR_COMBINE_LOCAL_CONSTANT,
3195
GR_COMBINE_OTHER_TEXTURE);
3196
CC_PRIM ();
3197
CA_ENV ();
3198
USE_T0 ();
3199
}
3200
3201
static void cc_t0_sub_prim_mul_primlod_add_env () //Aded by Gonetz
3202
{
3203
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3204
GR_COMBINE_FACTOR_ONE,
3205
GR_COMBINE_LOCAL_CONSTANT,
3206
GR_COMBINE_OTHER_TEXTURE);
3207
CC_ENV ();
3208
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
3209
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3210
MOD_0_FAC (lod_frac & 0xFF);
3211
USE_T0 ();
3212
}
3213
3214
static void cc_t0_sub__prim_mul_env () //Aded by Gonetz
3215
{
3216
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
3217
GR_COMBINE_FACTOR_ONE,
3218
GR_COMBINE_LOCAL_ITERATED,
3219
GR_COMBINE_OTHER_TEXTURE);
3220
SETSHADE_PRIM ();
3221
SETSHADE_ENV ();
3222
USE_T0 ();
3223
}
3224
3225
static void cc__t0_mul_t1__sub_prim_mul__t0t1a__add_prim () //Aded by Gonetz
3226
{
3227
// * not guaranteed to work if another iterated alpha is set
3228
CCMB (GR_COMBINE_FUNCTION_BLEND,
3229
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
3230
GR_COMBINE_LOCAL_CONSTANT,
3231
GR_COMBINE_OTHER_TEXTURE);
3232
CC_PRIM ();
3233
T0_MUL_T1 ();
3234
A_T0_MUL_T1 ();
3235
}
3236
3237
static void cc__t1_inter_t0_using_enva__sub_prim_mul_prima_add_prim () //Aded by Gonetz
3238
{
3239
// * not guaranteed to work if another iterated alpha is set
3240
CCMB (GR_COMBINE_FUNCTION_BLEND,
3241
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3242
GR_COMBINE_LOCAL_CONSTANT,
3243
GR_COMBINE_OTHER_TEXTURE);
3244
CC_PRIM ();
3245
CA_PRIM ();
3246
BYTE factor = (BYTE)(rdp.env_color&0xFF);
3247
T1_INTER_T0_USING_FACTOR (factor);
3248
}
3249
3250
static void cc__t0_mul_shade__sub_env_mul_shadea_add_env () //Aded by Gonetz
3251
{
3252
if (rdp.tiles[rdp.cur_tile].format == 4)
3253
{
3254
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3255
GR_COMBINE_FACTOR_OTHER_ALPHA,
3256
GR_COMBINE_LOCAL_CONSTANT,
3257
GR_COMBINE_OTHER_ITERATED);
3258
CC_ENV ();
3259
}
3260
else if (rdp.tiles[rdp.cur_tile].format == 2)
3261
{
3262
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3263
GR_COMBINE_FACTOR_LOCAL,
3264
GR_COMBINE_LOCAL_ITERATED,
3265
GR_COMBINE_OTHER_TEXTURE);
3266
USE_T0 ();
3267
}
3268
else
3269
{
3270
cc_t0 ();
3271
}
3272
}
3273
3274
static void cc_t0_sub_env_mul_k5_add_prim () //Aded by Gonetz
3275
{
3276
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3277
GR_COMBINE_FACTOR_ONE,
3278
GR_COMBINE_LOCAL_CONSTANT,
3279
GR_COMBINE_OTHER_TEXTURE);
3280
CC_PRIM ();
3281
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
3282
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
3283
MOD_0_FAC (rdp.K5);
3284
USE_T0 ();
3285
}
3286
3287
static void cc__t0_inter_t1_using_t0__sub_shade_mul_prima_add_shade () //Aded by Gonetz
3288
{
3289
if (cmb.combine_ext)
3290
{
3291
cmb.tex |= 3;
3292
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3293
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
3294
GR_CMBX_CONSTANT_COLOR, 0,
3295
GR_CMBX_B, 0);
3296
CC_PRIMA();
3297
}
3298
else
3299
{
3300
// * not guaranteed to work if another iterated alpha is set
3301
CCMB (GR_COMBINE_FUNCTION_BLEND,
3302
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3303
GR_COMBINE_LOCAL_ITERATED,
3304
GR_COMBINE_OTHER_TEXTURE);
3305
SETSHADE_A_PRIM ();
3306
}
3307
// T0_INTER_T1_USING_T0 ();
3308
T1_INTER_T0_USING_T0 (); //strange, but this one looks better
3309
}
3310
3311
static void cc_t0_sub__prim_mul_shade__mul_enva_add__prim_mul_shade () //Aded by Gonetz
3312
{
3313
// * not guaranteed to work if another iterated alpha is set
3314
CCMB (GR_COMBINE_FUNCTION_BLEND,
3315
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3316
GR_COMBINE_LOCAL_ITERATED,
3317
GR_COMBINE_OTHER_TEXTURE);
3318
MULSHADE_PRIM ();
3319
SETSHADE_A_ENV ();
3320
USE_T0 ();
3321
}
3322
3323
static void cc_t0_sub_env_mul_t0_add_env () //Aded by Gonetz
3324
{
3325
CCMB (GR_COMBINE_FUNCTION_BLEND,
3326
GR_COMBINE_FACTOR_TEXTURE_RGB,
3327
GR_COMBINE_LOCAL_CONSTANT,
3328
GR_COMBINE_OTHER_TEXTURE);
3329
CC_ENV ();
3330
USE_T0 ();
3331
//(t0-env)*t0+env = t0*t0 + (1-t0)*env
3332
}
3333
3334
static void cc_t0_sub_env_mul_prim_add_shade () //Aded by Gonetz
3335
{
3336
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3337
GR_COMBINE_FACTOR_TEXTURE_RGB,
3338
GR_COMBINE_LOCAL_ITERATED,
3339
GR_COMBINE_OTHER_CONSTANT);
3340
CC_PRIM ();
3341
MOD_0 (TMOD_TEX_SUB_COL);
3342
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
3343
USE_T0 ();
3344
}
3345
3346
static void cc_t0_sub_env_mul_shade_add_prim () //Aded by Gonetz
3347
{
3348
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3349
GR_COMBINE_FACTOR_TEXTURE_RGB,
3350
GR_COMBINE_LOCAL_CONSTANT,
3351
GR_COMBINE_OTHER_ITERATED);
3352
CC_PRIM ();
3353
MOD_0 (TMOD_TEX_SUB_COL);
3354
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
3355
USE_T0 ();
3356
}
3357
3358
static void cc__t0_sub_env_mul_shade_add_prim__mul_shade () //Aded by Gonetz
3359
{
3360
if (!cmb.combine_ext)
3361
{
3362
cc_t0_sub_env_mul_shade_add_prim ();
3363
return;
3364
}
3365
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3366
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
3367
GR_CMBX_ITRGB, 0,
3368
GR_CMBX_ZERO, 0);
3369
cmb.tex_ccolor = rdp.env_color;
3370
cmb.tex |= 1;
3371
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3372
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
3373
GR_CMBX_ITRGB, 0,
3374
GR_CMBX_ZERO, 0);
3375
CC_PRIM ();
3376
}
3377
3378
static void cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_env ()
3379
{
3380
// (t1-t0)*primlod+t0, (cmb-env)*shade+env
3381
if (cmb.combine_ext)
3382
{
3383
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
3384
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
3385
GR_CMBX_ITRGB, 0,
3386
GR_CMBX_B, 0);
3387
}
3388
else
3389
{
3390
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3391
GR_COMBINE_FACTOR_TEXTURE_RGB,
3392
GR_COMBINE_LOCAL_CONSTANT,
3393
GR_COMBINE_OTHER_ITERATED);
3394
}
3395
CC_ENV ();
3396
T0_INTER_T1_USING_FACTOR (lod_frac);
3397
}
3398
3399
3400
static void cc_t0_sub_env_mul_enva_add_prim () //Aded by Gonetz
3401
{
3402
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3403
GR_COMBINE_FACTOR_ONE,
3404
GR_COMBINE_LOCAL_CONSTANT,
3405
GR_COMBINE_OTHER_TEXTURE);
3406
CC_PRIM ();
3407
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);
3408
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
3409
MOD_0_FAC (rdp.env_color & 0xFF);
3410
USE_T0 ();
3411
}
3412
3413
static void cc_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz
3414
{
3415
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3416
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3417
GR_COMBINE_LOCAL_CONSTANT,
3418
GR_COMBINE_OTHER_TEXTURE);
3419
CC_PRIM ();
3420
USE_T0 ();
3421
//(1-t)*prim+t == (1-prim)*t+prim
3422
}
3423
3424
static void cc_one_sub_t1_mul_prim_add_t1 () //Aded by Gonetz
3425
{
3426
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3427
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3428
GR_COMBINE_LOCAL_CONSTANT,
3429
GR_COMBINE_OTHER_TEXTURE);
3430
CC_PRIM ();
3431
USE_T1 ();
3432
//(1-t)*prim+t == (1-prim)*t+prim
3433
}
3434
3435
static void cc_one_sub_t1_mul_env_add_t1 () //Aded by Gonetz
3436
{
3437
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3438
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3439
GR_COMBINE_LOCAL_CONSTANT,
3440
GR_COMBINE_OTHER_TEXTURE);
3441
CC_ENV ();
3442
USE_T1 ();
3443
//(1-t)*env+t == (1-env)*t+env
3444
}
3445
3446
static void cc_one_sub_t0_mul_primlod_add_t0 () //Aded by Gonetz
3447
{
3448
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3449
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3450
GR_COMBINE_LOCAL_CONSTANT,
3451
GR_COMBINE_OTHER_TEXTURE);
3452
CC_PRIMLOD ();
3453
USE_T0 ();
3454
//(1-t)*primlod+t == (1-primlod)*t+primlod
3455
}
3456
3457
static void cc_one_sub_t0_mul_prima_add_t0 () //Aded by Gonetz
3458
{
3459
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3460
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
3461
GR_COMBINE_LOCAL_CONSTANT,
3462
GR_COMBINE_OTHER_TEXTURE);
3463
CA_PRIM ();
3464
USE_T0 ();
3465
//(1-t)*prima+t == (1-prima)*t+prima
3466
}
3467
3468
static void cc_one_sub__t0_inter_t1_using_enva__mul_prim_add__t0_inter_t1_using_enva () //Aded by Gonetz
3469
{
3470
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3471
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3472
GR_COMBINE_LOCAL_CONSTANT,
3473
GR_COMBINE_OTHER_TEXTURE);
3474
CC_PRIM ();
3475
BYTE factor = (BYTE)(rdp.env_color&0xFF);
3476
T0_INTER_T1_USING_FACTOR (factor);
3477
//(1-t)*prim+t == (1-prim)*t+prim
3478
}
3479
3480
static void cc_one_sub_t0_mul_shade_add_t0 ()
3481
{
3482
CCMB (GR_COMBINE_FUNCTION_BLEND,
3483
GR_COMBINE_FACTOR_TEXTURE_RGB,
3484
GR_COMBINE_LOCAL_ITERATED,
3485
GR_COMBINE_OTHER_CONSTANT);
3486
CC (0xFFFFFFFF);
3487
USE_T0 ();
3488
}
3489
3490
static void cc_one_sub_prim_mul_t0_add_prim () //Aded by Gonetz
3491
{
3492
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3493
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3494
GR_COMBINE_LOCAL_CONSTANT,
3495
GR_COMBINE_OTHER_TEXTURE);
3496
CC_PRIM ();
3497
USE_T0 ();
3498
}
3499
3500
static void cc__one_sub_prim_mul_shade__mul_t0_add__prim_mul_shade () //Aded by Gonetz
3501
{
3502
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3503
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3504
GR_COMBINE_LOCAL_ITERATED,
3505
GR_COMBINE_OTHER_TEXTURE);
3506
MULSHADE_PRIM ();
3507
USE_T0 ();
3508
}
3509
3510
static void cc_one_sub_prim_mul_t1_add_prim () //Aded by Gonetz
3511
{
3512
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3513
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3514
GR_COMBINE_LOCAL_CONSTANT,
3515
GR_COMBINE_OTHER_TEXTURE);
3516
CC_PRIM ();
3517
USE_T1 ();
3518
}
3519
3520
static void cc_one_sub_prim_mul_env_add_prim () //Aded by Gonetz
3521
{
3522
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3523
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3524
GR_COMBINE_LOCAL_CONSTANT,
3525
GR_COMBINE_OTHER_ITERATED);
3526
CC_PRIM ();
3527
SETSHADE_ENV ();
3528
}
3529
3530
static void cc_one_sub_prim_mul_shade_add_shade () //Aded by Gonetz
3531
{
3532
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3533
GR_COMBINE_FACTOR_LOCAL,
3534
GR_COMBINE_LOCAL_ITERATED,
3535
GR_COMBINE_OTHER_CONSTANT);
3536
CC_1SUBPRIM ();
3537
}
3538
3539
static void cc_t0_inter_env_using_prima ()
3540
{
3541
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3542
GR_COMBINE_FACTOR_ONE,
3543
GR_COMBINE_LOCAL_NONE,
3544
GR_COMBINE_OTHER_TEXTURE);
3545
USE_T0 ();
3546
3547
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
3548
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
3549
MOD_0_FAC (rdp.prim_color & 0xFF);
3550
}
3551
3552
static void cc_t0_inter_env_using_enva ()
3553
{
3554
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3555
GR_COMBINE_FACTOR_ONE,
3556
GR_COMBINE_LOCAL_NONE,
3557
GR_COMBINE_OTHER_TEXTURE);
3558
USE_T0 ();
3559
3560
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
3561
MOD_0_COL (rdp.env_color & 0xFFFFFFFF);
3562
MOD_0_FAC (rdp.env_color & 0xFF);
3563
}
3564
3565
static void cc_t0_inter_noise_using_prim ()
3566
{
3567
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3568
GR_COMBINE_FACTOR_ONE,
3569
GR_COMBINE_LOCAL_NONE,
3570
GR_COMBINE_OTHER_TEXTURE);
3571
USE_T0 ();
3572
3573
MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);
3574
MOD_0_COL (rdp.prim_color);
3575
rdp.noise = noise_texture;
3576
}
3577
3578
static void cc_t0_inter_noise_using_env ()
3579
{
3580
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
3581
GR_COMBINE_FACTOR_ONE,
3582
GR_COMBINE_LOCAL_NONE,
3583
GR_COMBINE_OTHER_TEXTURE);
3584
USE_T0 ();
3585
3586
MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);
3587
MOD_0_COL (rdp.env_color);
3588
rdp.noise = noise_texture;
3589
}
3590
3591
static void cc_t0_sub_env_mul_enva_add_env ()
3592
{
3593
CCMB (GR_COMBINE_FUNCTION_BLEND,
3594
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3595
GR_COMBINE_LOCAL_CONSTANT,
3596
GR_COMBINE_OTHER_TEXTURE);
3597
CC_ENV ();
3598
CA_ENV ();
3599
USE_T0 ();
3600
}
3601
3602
//Added by Gonetz
3603
static void cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_env ()
3604
{
3605
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3606
GR_COMBINE_FACTOR_TEXTURE_RGB,
3607
GR_COMBINE_LOCAL_ITERATED,
3608
GR_COMBINE_OTHER_CONSTANT);
3609
CC_1SUBPRIM ();
3610
SETSHADE_PRIM ();
3611
SETSHADE_ENV ();
3612
T0_MUL_T1 ();
3613
}
3614
3615
//Added by Gonetz
3616
static void cc_one_sub_prim_mul__t0_inter_t1_using_enva__add_prim ()
3617
{
3618
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3619
GR_COMBINE_FACTOR_TEXTURE_RGB,
3620
GR_COMBINE_LOCAL_ITERATED,
3621
GR_COMBINE_OTHER_CONSTANT);
3622
CC_1SUBPRIM ();
3623
SETSHADE_PRIM ();
3624
BYTE factor = (BYTE)(rdp.env_color&0xFF);
3625
T0_INTER_T1_USING_FACTOR (factor);
3626
}
3627
3628
static void cc_one_sub_env_mul__t0_inter_t1_using_primlod__add_env () //Aded by Gonetz
3629
{
3630
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3631
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3632
GR_COMBINE_LOCAL_CONSTANT,
3633
GR_COMBINE_OTHER_TEXTURE);
3634
CC_ENV ();
3635
T0_INTER_T1_USING_FACTOR (lod_frac);
3636
}
3637
3638
static void cc_one_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env () //Aded by Gonetz
3639
{
3640
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3641
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3642
GR_COMBINE_LOCAL_CONSTANT,
3643
GR_COMBINE_OTHER_TEXTURE);
3644
CC_ENV ();
3645
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
3646
}
3647
3648
static void cc_one_sub_env_mul_t0_add_prim_mul_env () //Aded by Gonetz
3649
{
3650
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3651
GR_COMBINE_FACTOR_TEXTURE_RGB,
3652
GR_COMBINE_LOCAL_ITERATED,
3653
GR_COMBINE_OTHER_CONSTANT);
3654
CC_1SUBENV ();
3655
SETSHADE_PRIM ();
3656
SETSHADE_ENV ();
3657
USE_T0 ();
3658
}
3659
3660
static void cc_one_sub_env_mul_t0_add_env () //Aded by Gonetz
3661
{
3662
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3663
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3664
GR_COMBINE_LOCAL_CONSTANT,
3665
GR_COMBINE_OTHER_TEXTURE);
3666
CC_ENV ();
3667
USE_T0 ();
3668
}
3669
3670
static void cc_one_sub_env_mul_t0_add_shade () //Aded by Gonetz
3671
{
3672
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3673
GR_COMBINE_FACTOR_TEXTURE_RGB,
3674
GR_COMBINE_LOCAL_ITERATED,
3675
GR_COMBINE_OTHER_CONSTANT);
3676
CC_1SUBENV ();
3677
USE_T0 ();
3678
}
3679
3680
static void cc_one_sub_env_mul_prim_add_env () //Aded by Gonetz
3681
{
3682
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3683
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3684
GR_COMBINE_LOCAL_CONSTANT,
3685
GR_COMBINE_OTHER_ITERATED);
3686
CC_ENV ();
3687
SETSHADE_PRIM ();
3688
}
3689
3690
static void cc_one_sub_env_mul_prim_add_shade () //Aded by Gonetz
3691
{
3692
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3693
GR_COMBINE_FACTOR_ONE,
3694
GR_COMBINE_LOCAL_ITERATED,
3695
GR_COMBINE_OTHER_CONSTANT);
3696
CC_1SUBENV ();
3697
cmb.ccolor=(BYTE)( ((rdp.prim_color & 0xFF000000) >> 24) * (((cmb.ccolor & 0xFF000000) >> 24) /255.0f) ) << 24 |
3698
(BYTE)( ((rdp.prim_color & 0x00FF0000) >> 16) * (((cmb.ccolor & 0x00FF0000) >> 16) /255.0f) ) << 16 |
3699
(BYTE)( ((rdp.prim_color & 0x0000FF00) >> 8) * (((cmb.ccolor & 0x0000FF00) >> 8) /255.0f) ) << 8;
3700
}
3701
3702
static void cc_one_sub_env_mul_shade_add_env () //Aded by Gonetz
3703
{
3704
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3705
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3706
GR_COMBINE_LOCAL_CONSTANT,
3707
GR_COMBINE_OTHER_ITERATED);
3708
CC_ENV ();
3709
}
3710
3711
static void cc_one_sub_env_mul_prim_add__t0_inter_t1_using_env () //Aded by Gonetz
3712
{
3713
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3714
GR_COMBINE_FACTOR_ONE,
3715
GR_COMBINE_LOCAL_ITERATED,
3716
GR_COMBINE_OTHER_TEXTURE);
3717
SETSHADE_PRIM ();
3718
SETSHADE_1MENV ();
3719
//BYTE factor = (BYTE)(rdp.env_color&0xFF);
3720
T0_INTER_T1_USING_ENV ();
3721
}
3722
3723
static void cc_one_sub_shade_mul_t0_add_shade ()
3724
{
3725
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3726
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3727
GR_COMBINE_LOCAL_ITERATED,
3728
GR_COMBINE_OTHER_TEXTURE);
3729
USE_T0 ();
3730
}
3731
3732
static void cc_one_sub_shade_mul__t0_mul_shadea__add_shade ()
3733
{
3734
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3735
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3736
GR_COMBINE_LOCAL_ITERATED,
3737
GR_COMBINE_OTHER_TEXTURE);
3738
if (cmb.combine_ext)
3739
{
3740
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3741
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3742
GR_CMBX_ITALPHA, 0,
3743
GR_CMBX_ZERO, 0);
3744
cmb.tex |= 1;
3745
}
3746
else
3747
{
3748
USE_T0 ();
3749
}
3750
}
3751
3752
static void cc_one_sub_shade_mul_env_add_shade ()
3753
{
3754
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3755
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
3756
GR_COMBINE_LOCAL_ITERATED,
3757
GR_COMBINE_OTHER_CONSTANT);
3758
CC_ENV ();
3759
}
3760
3761
static void cc_one_sub_shade_mul_shadea_add_shade ()
3762
{
3763
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3764
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3765
GR_COMBINE_LOCAL_ITERATED,
3766
GR_COMBINE_OTHER_CONSTANT);
3767
CC (0xFFFFFFFF);
3768
}
3769
3770
///*
3771
static void cc_t0_sub_env_mul_prim_add_env () //Aded by Gonetz
3772
{
3773
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3774
GR_COMBINE_FACTOR_TEXTURE_RGB,
3775
GR_COMBINE_LOCAL_ITERATED,
3776
GR_COMBINE_OTHER_CONSTANT);
3777
SETSHADE_1MPRIM();
3778
SETSHADE_ENV();
3779
CC_PRIM ();
3780
USE_T0 ();
3781
//(t0-env)*prim+env == t0*prim + env*(1-prim)
3782
}
3783
//*/
3784
static void cc__t0_inter_t1_using_t1a__sub_env_mul_enva_add_env () //Aded by Gonetz
3785
{
3786
CCMB (GR_COMBINE_FUNCTION_BLEND,
3787
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3788
GR_COMBINE_LOCAL_CONSTANT,
3789
GR_COMBINE_OTHER_TEXTURE);
3790
cmb.ccolor = rdp.env_color;
3791
T0_INTER_T1_USING_T1A ();
3792
}
3793
3794
static void cc_t0_sub_shade_mul_t0a_add_shade ()
3795
{
3796
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3797
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
3798
GR_COMBINE_LOCAL_ITERATED,
3799
GR_COMBINE_OTHER_TEXTURE);
3800
USE_T0 ();
3801
A_USE_T0 ();
3802
}
3803
3804
static void cc_t0_sub_shade_mul_prima_add_shade () //Aded by Gonetz
3805
{
3806
// * not guaranteed to work if another iterated alpha is set
3807
CCMB (GR_COMBINE_FUNCTION_BLEND,
3808
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3809
GR_COMBINE_LOCAL_ITERATED,
3810
GR_COMBINE_OTHER_TEXTURE);
3811
SETSHADE_A_PRIM ();
3812
USE_T0 ();
3813
}
3814
3815
static void cc_t0_sub_shade_mul_shadea_add_shade () //Aded by Gonetz
3816
{
3817
// * not guaranteed to work if another iterated alpha is set
3818
CCMB (GR_COMBINE_FUNCTION_BLEND,
3819
GR_COMBINE_FACTOR_LOCAL_ALPHA,
3820
GR_COMBINE_LOCAL_ITERATED,
3821
GR_COMBINE_OTHER_TEXTURE);
3822
USE_T0 ();
3823
}
3824
3825
static void cc_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz
3826
{
3827
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3828
GR_COMBINE_FACTOR_TEXTURE_RGB,
3829
GR_COMBINE_LOCAL_ITERATED,
3830
GR_COMBINE_OTHER_CONSTANT);
3831
CC_1SUBENV ();
3832
SETSHADE_PRIM ();
3833
SETSHADE_ENV ();
3834
USE_T0 ();
3835
//(prim-t0)*env+t0 == prim*env + t0*(1-env)
3836
}
3837
3838
static void cc_prim_sub_env_mul_t0_add_prim ()
3839
{
3840
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3841
GR_COMBINE_FACTOR_TEXTURE_RGB,
3842
GR_COMBINE_LOCAL_CONSTANT,
3843
GR_COMBINE_OTHER_ITERATED);
3844
CC_PRIM ();
3845
SETSHADE_PRIMSUBENV ();
3846
USE_T0 ();
3847
}
3848
3849
static void cc_prim_sub_env_mul_t0_add_env ()
3850
{
3851
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3852
GR_COMBINE_FACTOR_TEXTURE_RGB,
3853
GR_COMBINE_LOCAL_ITERATED,
3854
GR_COMBINE_OTHER_CONSTANT);
3855
CC_PRIM ();
3856
SETSHADE_ENV ();
3857
USE_T0 ();
3858
}
3859
3860
static void cc_prim_sub_env_mul__t0_mul_prim__add_env ()
3861
{
3862
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3863
GR_COMBINE_FACTOR_TEXTURE_RGB,
3864
GR_COMBINE_LOCAL_ITERATED,
3865
GR_COMBINE_OTHER_CONSTANT);
3866
CC_PRIM ();
3867
SETSHADE_ENV ();
3868
if (cmb.combine_ext)
3869
{
3870
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3871
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3872
GR_CMBX_TMU_CCOLOR, 0,
3873
GR_CMBX_ZERO, 0);
3874
cmb.tex_ccolor = rdp.prim_color;
3875
cmb.tex |= 1;
3876
}
3877
else
3878
{
3879
USE_T0 ();
3880
}
3881
}
3882
3883
static void cc_prim_sub_env_mul_t0_mul_shade_add_env ()
3884
{
3885
if (cmb.combine_ext)
3886
{
3887
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3888
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3889
GR_CMBX_TMU_CCOLOR, 0,
3890
GR_CMBX_ZERO, 0);
3891
CC_PRIMSUBENV ();
3892
cmb.tex_ccolor = cmb.ccolor;
3893
cmb.tex |= 1;
3894
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
3895
GR_COMBINE_FACTOR_TEXTURE_RGB,
3896
GR_COMBINE_LOCAL_CONSTANT,
3897
GR_COMBINE_OTHER_ITERATED);
3898
CC_ENV ();
3899
}
3900
else
3901
{
3902
cc_t0_mul_prim_mul_shade ();
3903
}
3904
}
3905
3906
static void cc_prim_sub_env_mul__t0_sub_t0_mul_prima__add_env ()
3907
{
3908
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3909
GR_COMBINE_FACTOR_TEXTURE_RGB,
3910
GR_COMBINE_LOCAL_ITERATED,
3911
GR_COMBINE_OTHER_CONSTANT);
3912
CC_PRIM ();
3913
SETSHADE_ENV ();
3914
rdp.best_tex = 0;
3915
cmb.tex |= 1;
3916
cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
3917
cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
3918
percent = (float)(rdp.prim_color&0xFF) / 255.0f;
3919
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
3920
}
3921
3922
static void cc_prim_sub_env_mul__t0_add_t1a__add_env ()
3923
{
3924
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3925
GR_COMBINE_FACTOR_TEXTURE_RGB,
3926
GR_COMBINE_LOCAL_ITERATED,
3927
GR_COMBINE_OTHER_CONSTANT);
3928
CC_PRIM ();
3929
SETSHADE_ENV ();
3930
rdp.best_tex = 0;
3931
cmb.tex |= 3;
3932
cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;
3933
cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
3934
cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE;
3935
}
3936
3937
static void cc_prim_sub_env_mul__t0_sub_prim_mul_enva_add_t0__add_env ()
3938
{
3939
// (t0-prim)*env_a+t0, (prim-env)*cmb+env
3940
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3941
GR_COMBINE_FACTOR_TEXTURE_RGB,
3942
GR_COMBINE_LOCAL_CONSTANT,
3943
GR_COMBINE_OTHER_ITERATED);
3944
CC_ENV ();
3945
SETSHADE_PRIM ();
3946
USE_T0 ();
3947
3948
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC_ADD_TEX);
3949
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
3950
MOD_0_FAC (rdp.env_color & 0xFF);
3951
}
3952
3953
static void cc_prim_sub_env_mul__t1_sub_prim_mul_enva_add_t0__add_env ()
3954
{
3955
// (t0-prim)*env_a+t0, (prim-env)*cmb+env
3956
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
3957
GR_COMBINE_FACTOR_TEXTURE_RGB,
3958
GR_COMBINE_LOCAL_CONSTANT,
3959
GR_COMBINE_OTHER_ITERATED);
3960
CC_ENV ();
3961
SETSHADE_PRIM ();
3962
if (cmb.combine_ext)
3963
{
3964
if (rdp.tiles[rdp.cur_tile].format > 2)
3965
{
3966
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3967
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
3968
GR_CMBX_ZERO, 0,
3969
GR_CMBX_B, 0);
3970
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
3971
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
3972
GR_CMBX_DETAIL_FACTOR, 0,
3973
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
3974
}
3975
else
3976
{
3977
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3978
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
3979
GR_CMBX_DETAIL_FACTOR, 0,
3980
GR_CMBX_ZERO, 0);
3981
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
3982
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
3983
GR_CMBX_ZERO, 1,
3984
GR_CMBX_ZERO, 0);
3985
}
3986
cmb.tex_ccolor = rdp.prim_color;
3987
cmb.tex |= 3;
3988
cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;
3989
}
3990
else
3991
{
3992
MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);
3993
MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
3994
MOD_1_FAC (rdp.env_color & 0xFF);
3995
T0_ADD_T1 ();
3996
}
3997
}
3998
3999
static void cc__prim_sub_env_mul_t0_add_env__mul_k5 ()
4000
{
4001
CCMB (GR_COMBINE_FUNCTION_BLEND,
4002
GR_COMBINE_FACTOR_TEXTURE_RGB,
4003
GR_COMBINE_LOCAL_ITERATED,
4004
GR_COMBINE_OTHER_CONSTANT);
4005
float factor = (float)rdp.K5 / 255.0f;
4006
BYTE r = (BYTE)((rdp.prim_color >> 24) & 0xFF);
4007
r = (BYTE)((float)r * factor);
4008
BYTE g = (BYTE)((rdp.prim_color >> 16) & 0xFF);
4009
g = (BYTE)((float)g * factor);
4010
BYTE b = (BYTE)((rdp.prim_color >> 8) & 0xFF);
4011
b = (BYTE)((float)b * factor);
4012
CC ((r<<24) | (g<<16) | (b<<8));
4013
SETSHADE_ENV ();
4014
MULSHADE_K5 ();
4015
USE_T0 ();
4016
}
4017
4018
4019
static void cc_prim_sub_env_mul_t1_add_env ()
4020
{
4021
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4022
GR_COMBINE_FACTOR_TEXTURE_RGB,
4023
GR_COMBINE_LOCAL_ITERATED,
4024
GR_COMBINE_OTHER_CONSTANT);
4025
CC_PRIM ();
4026
SETSHADE_ENV ();
4027
USE_T1 ();
4028
}
4029
4030
static void cc_prim_sub_env_mul_t1_add_env_mul_t0 ()
4031
{
4032
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
4033
GR_COMBINE_FACTOR_ONE,
4034
GR_COMBINE_LOCAL_NONE,
4035
GR_COMBINE_OTHER_TEXTURE);
4036
MOD_1 (TMOD_COL_INTER_COL1_USING_TEX);
4037
MOD_1_COL (rdp.env_color & 0xFFFFFF00);
4038
MOD_1_COL1 (rdp.prim_color & 0xFFFFFF00);
4039
T0_MUL_T1 ();
4040
}
4041
4042
//Added by Gonetz
4043
static void cc_prim_sub_env_mul_t0a_add_env ()
4044
{
4045
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4046
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
4047
GR_COMBINE_LOCAL_CONSTANT,
4048
GR_COMBINE_OTHER_ITERATED);
4049
CC_ENV ();
4050
SETSHADE_PRIM ();
4051
USE_T0 ();
4052
}
4053
4054
//Added by Gonetz
4055
static void cc_prim_sub_env_mul_t1a_add_env ()
4056
{
4057
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4058
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
4059
GR_COMBINE_LOCAL_CONSTANT,
4060
GR_COMBINE_OTHER_ITERATED);
4061
CC_ENV ();
4062
SETSHADE_PRIM ();
4063
USE_T1 ();
4064
}
4065
4066
//Added by Gonetz
4067
static void cc_prim_sub_env_mul__t0_mul_t1__add_env ()
4068
{
4069
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4070
GR_COMBINE_FACTOR_TEXTURE_RGB,
4071
GR_COMBINE_LOCAL_ITERATED,
4072
GR_COMBINE_OTHER_CONSTANT);
4073
CC_PRIM ();
4074
SETSHADE_ENV ();
4075
T0_MUL_T1 ();
4076
}
4077
4078
//Added by Gonetz
4079
static void cc_prim_sub_env_mul__t0_add_t1__add_env ()
4080
{
4081
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4082
GR_COMBINE_FACTOR_TEXTURE_RGB,
4083
GR_COMBINE_LOCAL_ITERATED,
4084
GR_COMBINE_OTHER_CONSTANT);
4085
CC_PRIM ();
4086
SETSHADE_ENV ();
4087
T0_ADD_T1 ();
4088
}
4089
4090
//Added by Gonetz
4091
static void cc_prim_sub_env_mul__t0_mul_enva__add_env ()
4092
{
4093
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4094
GR_COMBINE_FACTOR_TEXTURE_RGB,
4095
GR_COMBINE_LOCAL_CONSTANT,
4096
GR_COMBINE_OTHER_ITERATED);
4097
CC_ENV ();
4098
SETSHADE_PRIMSUBENV ();
4099
MULSHADE_ENVA ();
4100
USE_T0 ();
4101
}
4102
4103
//Added by Gonetz
4104
static void cc_prim_sub_env_mul__t0_mul_shade__add_env ()
4105
{
4106
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4107
GR_COMBINE_FACTOR_TEXTURE_RGB,
4108
GR_COMBINE_LOCAL_CONSTANT,
4109
GR_COMBINE_OTHER_ITERATED);
4110
CC_ENV ();
4111
MULSHADE_PRIMSUBENV ();
4112
USE_T0 ();
4113
}
4114
4115
//Added by Gonetz
4116
static void cc_prim_sub_env_mul__prim_inter_t0_using_shadea__add_env ()
4117
{
4118
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4119
GR_COMBINE_FACTOR_TEXTURE_RGB,
4120
GR_COMBINE_LOCAL_CONSTANT,
4121
GR_COMBINE_OTHER_ITERATED);
4122
CC_ENV ();
4123
if (cmb.combine_ext)
4124
{
4125
SETSHADE_PRIM ();
4126
PRIM_INTER_T0_USING_SHADEA ();
4127
}
4128
else
4129
{
4130
MULSHADE_SHADEA ();
4131
SETSHADE_PRIMSUBENV ();
4132
USE_T0 ();
4133
}
4134
}
4135
4136
//Added by Gonetz
4137
static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t0__add_env ()
4138
{
4139
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4140
GR_COMBINE_FACTOR_TEXTURE_RGB,
4141
GR_COMBINE_LOCAL_ITERATED,
4142
GR_COMBINE_OTHER_CONSTANT);
4143
CC_PRIM ();
4144
SETSHADE_ENV ();
4145
if (cmb.combine_ext)
4146
{
4147
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4148
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4149
GR_CMBX_DETAIL_FACTOR, 0,
4150
GR_CMBX_B, 0);
4151
cmb.tex_ccolor = rdp.prim_color;
4152
cmb.tex |= 1;
4153
percent = (float)(lod_frac) / 255.0f;
4154
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
4155
}
4156
else
4157
{
4158
USE_T0 ();
4159
MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC_ADD_TEX);
4160
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
4161
MOD_0_FAC (lod_frac & 0xFF);
4162
}
4163
}
4164
4165
static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_shade__add_env ()
4166
{
4167
if (!cmb.combine_ext)
4168
{
4169
cc_prim_sub_env_mul_t0_add_env ();
4170
return;
4171
}
4172
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4173
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4174
GR_CMBX_DETAIL_FACTOR, 0,
4175
GR_CMBX_ITRGB, 0);
4176
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4177
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4178
GR_CMBX_TEXTURE_RGB, 0,
4179
GR_CMBX_B, 0);
4180
cmb.tex_ccolor = rdp.prim_color;
4181
CC_PRIM ();
4182
SETSHADE_ENV ();
4183
cmb.tex |= 1;
4184
percent = (float)(lod_frac) / 255.0f;
4185
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
4186
}
4187
4188
static void cc_prim_sub_env_mul__t0_sub_shade_mul_primlod_add_shade__add_env ()
4189
{
4190
if (!cmb.combine_ext)
4191
{
4192
cc_prim_sub_env_mul_t0_add_env ();
4193
return;
4194
}
4195
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4196
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4197
GR_CMBX_DETAIL_FACTOR, 0,
4198
GR_CMBX_B, 0);
4199
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4200
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4201
GR_CMBX_DETAIL_FACTOR, 0,
4202
GR_CMBX_B, 0);
4203
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4204
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4205
GR_CMBX_TEXTURE_RGB, 0,
4206
GR_CMBX_B, 0);
4207
cmb.tex_ccolor = rdp.prim_color;
4208
CC_PRIM ();
4209
SETSHADE_ENV ();
4210
cmb.tex |= 1;
4211
percent = (float)(lod_frac) / 255.0f;
4212
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
4213
}
4214
4215
//Added by Gonetz
4216
static void cc_lavatex_sub_prim_mul_shade_add_lavatex ()
4217
{
4218
if (!cmb.combine_ext)
4219
{
4220
cc_t0_add_t1 ();
4221
return;
4222
}
4223
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
4224
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4225
GR_CMBX_ITRGB, 0,
4226
GR_CMBX_B, 0);
4227
CC_PRIM ();
4228
T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();
4229
}
4230
4231
//Added by Gonetz
4232
static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t1__add_env ()
4233
{
4234
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4235
GR_COMBINE_FACTOR_TEXTURE_RGB,
4236
GR_COMBINE_LOCAL_ITERATED,
4237
GR_COMBINE_OTHER_CONSTANT);
4238
CC_PRIM ();
4239
SETSHADE_ENV ();
4240
T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();
4241
}
4242
4243
//Added by Gonetz
4244
static void cc_prim_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()
4245
{
4246
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4247
GR_COMBINE_FACTOR_TEXTURE_RGB,
4248
GR_COMBINE_LOCAL_ITERATED,
4249
GR_COMBINE_OTHER_CONSTANT);
4250
CC_PRIM ();
4251
SETSHADE_ENV ();
4252
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
4253
}
4254
4255
//Added by Gonetz
4256
static void cc_prim_sub_env_mul__t0_inter_t1_using_t1__add_env ()
4257
{
4258
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4259
GR_COMBINE_FACTOR_TEXTURE_RGB,
4260
GR_COMBINE_LOCAL_ITERATED,
4261
GR_COMBINE_OTHER_CONSTANT);
4262
CC_PRIM ();
4263
SETSHADE_ENV ();
4264
T0_INTER_T1_USING_T1 ();
4265
}
4266
4267
//Added by Gonetz
4268
static void cc_prim_sub_env_mul__t0_inter_t1_using_enva_alpha__add_env ()
4269
{
4270
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4271
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
4272
GR_COMBINE_LOCAL_ITERATED,
4273
GR_COMBINE_OTHER_CONSTANT);
4274
CC_PRIM ();
4275
SETSHADE_ENV ();
4276
BYTE factor = (BYTE)(rdp.env_color&0xFF);
4277
T0_INTER_T1_USING_FACTOR (factor);
4278
A_T0_INTER_T1_USING_FACTOR (factor);
4279
}
4280
4281
//Added by Gonetz
4282
static void cc_prim_sub_env_mul__t0_mul_t1__add_shade ()
4283
{
4284
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4285
GR_COMBINE_FACTOR_TEXTURE_RGB,
4286
GR_COMBINE_LOCAL_ITERATED,
4287
GR_COMBINE_OTHER_CONSTANT);
4288
CC_PRIMSUBENV ();
4289
USE_T0 ();
4290
// T0_MUL_T1 ();
4291
}
4292
4293
//Added by Gonetz
4294
static void cc_prim_sub_env_mul_shade_add_t0 ()
4295
{
4296
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4297
GR_COMBINE_FACTOR_ONE,
4298
GR_COMBINE_LOCAL_ITERATED,
4299
GR_COMBINE_OTHER_TEXTURE);
4300
MULSHADE_PRIMSUBENV ();
4301
USE_T0 ();
4302
}
4303
4304
//Added by Gonetz
4305
static void cc_prim_sub_env_mul_prima_add_t0 ()
4306
{
4307
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4308
GR_COMBINE_FACTOR_ONE,
4309
GR_COMBINE_LOCAL_ITERATED,
4310
GR_COMBINE_OTHER_TEXTURE);
4311
SETSHADE_PRIMSUBENV ();
4312
SETSHADE_PRIMA ();
4313
USE_T0 ();
4314
}
4315
4316
//Added by Gonetz
4317
static void cc_prim_sub_env_mul_shade_add_env ()
4318
{
4319
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4320
GR_COMBINE_FACTOR_ONE,
4321
GR_COMBINE_LOCAL_CONSTANT,
4322
GR_COMBINE_OTHER_ITERATED);
4323
CC_ENV ();
4324
MULSHADE_PRIMSUBENV ();
4325
}
4326
4327
static void cc_prim_sub_env_mul_shadea_add_env ()
4328
{
4329
// * not guaranteed to work if another iterated alpha is set
4330
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4331
GR_COMBINE_FACTOR_OTHER_ALPHA,
4332
GR_COMBINE_LOCAL_CONSTANT,
4333
GR_COMBINE_OTHER_ITERATED);
4334
CC_ENV ();
4335
SETSHADE_PRIM ();
4336
}
4337
4338
//Added by Gonetz
4339
static void cc_prim_sub_env_mul__t0_inter_t1_using_prima__add_env ()
4340
{
4341
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4342
GR_COMBINE_FACTOR_TEXTURE_RGB,
4343
GR_COMBINE_LOCAL_CONSTANT,
4344
GR_COMBINE_OTHER_ITERATED);
4345
CC_ENV ();
4346
SETSHADE_PRIM ();
4347
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
4348
T0_INTER_T1_USING_FACTOR (factor);
4349
}
4350
4351
//Added by Gonetz
4352
static void cc_prim_sub_env_mul__t1_inter_t0_using_prima__add_env ()
4353
{
4354
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4355
GR_COMBINE_FACTOR_TEXTURE_RGB,
4356
GR_COMBINE_LOCAL_CONSTANT,
4357
GR_COMBINE_OTHER_ITERATED);
4358
CC_ENV ();
4359
SETSHADE_PRIM ();
4360
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
4361
T1_INTER_T0_USING_FACTOR (factor);
4362
}
4363
4364
static void cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env ()
4365
{
4366
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4367
GR_COMBINE_FACTOR_TEXTURE_RGB,
4368
GR_COMBINE_LOCAL_CONSTANT,
4369
GR_COMBINE_OTHER_ITERATED);
4370
CC_ENV ();
4371
SETSHADE_PRIM ();
4372
BYTE factor = (BYTE)(rdp.env_color&0xFF);
4373
T0_INTER_T1_USING_FACTOR (factor);
4374
}
4375
4376
static void cc_prim_sub_env_mul__t1_inter_t0_using_enva__add_env ()
4377
{
4378
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4379
GR_COMBINE_FACTOR_TEXTURE_RGB,
4380
GR_COMBINE_LOCAL_CONSTANT,
4381
GR_COMBINE_OTHER_ITERATED);
4382
CC_ENV ();
4383
SETSHADE_PRIM ();
4384
BYTE factor = (BYTE)(rdp.env_color&0xFF);
4385
T1_INTER_T0_USING_FACTOR (factor);
4386
}
4387
4388
static void cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env ()
4389
{
4390
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4391
GR_COMBINE_FACTOR_TEXTURE_RGB,
4392
GR_COMBINE_LOCAL_CONSTANT,
4393
GR_COMBINE_OTHER_ITERATED);
4394
CC_ENV ();
4395
SETSHADE_PRIM ();
4396
T1_INTER_T0_USING_FACTOR (lod_frac);
4397
}
4398
4399
static void cc_prim_sub_env_mul__t0_mul_enva_add_t1__add_env ()
4400
{
4401
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4402
GR_COMBINE_FACTOR_TEXTURE_RGB,
4403
GR_COMBINE_LOCAL_CONSTANT,
4404
GR_COMBINE_OTHER_ITERATED);
4405
CC_ENV ();
4406
SETSHADE_PRIM ();
4407
if (cmb.combine_ext)
4408
{
4409
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4410
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4411
GR_CMBX_ZERO, 1,
4412
GR_CMBX_ZERO, 0);
4413
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4414
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4415
GR_CMBX_DETAIL_FACTOR, 0,
4416
GR_CMBX_B, 0);
4417
cmb.tex |= 3;
4418
percent = (float)(rdp.env_color&0xFF) / 255.0f;
4419
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
4420
}
4421
else
4422
{
4423
T0_ADD_T1 ();
4424
}
4425
}
4426
4427
static void cc_prim_sub_env_mul__t1_mul_enva_add_t0__add_env ()
4428
{
4429
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4430
GR_COMBINE_FACTOR_TEXTURE_RGB,
4431
GR_COMBINE_LOCAL_CONSTANT,
4432
GR_COMBINE_OTHER_ITERATED);
4433
CC_ENV ();
4434
SETSHADE_PRIM ();
4435
T1_MUL_ENVA_ADD_T0 ();
4436
}
4437
4438
//Added by Gonetz
4439
static void cc_prim_sub_env_mul_primlod_add__t0_inter_t1_using_primlod ()
4440
{
4441
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4442
GR_COMBINE_FACTOR_ONE,
4443
GR_COMBINE_LOCAL_CONSTANT,
4444
GR_COMBINE_OTHER_TEXTURE);
4445
CC_PRIMSUBENV();
4446
float factor = lod_frac / 255.0f;
4447
cmb.ccolor=(BYTE)( ((cmb.ccolor & 0xFF000000) >> 24) * factor ) << 24 |
4448
(BYTE)( ((cmb.ccolor & 0x00FF0000) >> 16) * factor ) << 16 |
4449
(BYTE)( ((cmb.ccolor & 0x0000FF00) >> 8) * factor ) << 8;
4450
T0_INTER_T1_USING_FACTOR (lod_frac);
4451
}
4452
4453
static void cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env ()
4454
{
4455
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4456
GR_COMBINE_FACTOR_TEXTURE_RGB,
4457
GR_COMBINE_LOCAL_CONSTANT,
4458
GR_COMBINE_OTHER_ITERATED);
4459
CC_ENV ();
4460
SETSHADE_PRIM ();
4461
T0_INTER_T1_USING_FACTOR (lod_frac);
4462
}
4463
4464
static void cc_prim_sub_env_mul__t1_mul_primlod_add_t0__add_env ()
4465
{
4466
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4467
GR_COMBINE_FACTOR_TEXTURE_RGB,
4468
GR_COMBINE_LOCAL_CONSTANT,
4469
GR_COMBINE_OTHER_ITERATED);
4470
CC_ENV ();
4471
SETSHADE_PRIM ();
4472
T1_MUL_PRIMLOD_ADD_T0 ();
4473
}
4474
4475
static void cc_prim_sub_env_mul__t1_sub_prim_mul_t0_add_t0__add_env ()
4476
{
4477
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4478
GR_COMBINE_FACTOR_TEXTURE_RGB,
4479
GR_COMBINE_LOCAL_CONSTANT,
4480
GR_COMBINE_OTHER_ITERATED);
4481
CC_ENV ();
4482
SETSHADE_PRIM ();
4483
if (cmb.combine_ext)
4484
{
4485
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4486
GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,
4487
GR_CMBX_ZERO, 1,
4488
GR_CMBX_ZERO, 0);
4489
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
4490
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
4491
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
4492
GR_CMBX_B, 0);
4493
cmb.tex_ccolor = rdp.prim_color;
4494
cmb.tex |= 3;
4495
}
4496
else
4497
{
4498
MOD_1 (TMOD_TEX_SUB_COL);
4499
MOD_1_COL (rdp.prim_color & 0xFFFFFF00);
4500
T0_MUL_T1_ADD_T0 ();
4501
}
4502
}
4503
4504
//Added by Gonetz
4505
static void cc__prim_sub_env_mul_prim_add_t0__mul_prim ()
4506
{
4507
if (cmb.combine_ext)
4508
{
4509
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
4510
GR_CMBX_ITRGB, GR_FUNC_MODE_X,
4511
GR_CMBX_ZERO, 1,
4512
GR_CMBX_ZERO, 0);
4513
cmb.tex |= 1;
4514
SETSHADE_PRIMSUBENV ();
4515
SETSHADE_PRIM ();
4516
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
4517
GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,
4518
GR_CMBX_CONSTANT_COLOR, 0,
4519
GR_CMBX_ZERO, 0);
4520
CC_PRIM() ;
4521
}
4522
else
4523
{
4524
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4525
GR_COMBINE_FACTOR_ONE,
4526
GR_COMBINE_LOCAL_ITERATED,
4527
GR_COMBINE_OTHER_TEXTURE);
4528
SETSHADE_PRIMSUBENV ();
4529
SETSHADE_PRIM ();
4530
USE_T0 ();
4531
}
4532
}
4533
4534
//Added by Gonetz
4535
static void cc_prim_sub_env_mul_prim_add_env ()
4536
{
4537
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4538
GR_COMBINE_FACTOR_ONE,
4539
GR_COMBINE_LOCAL_CONSTANT,
4540
GR_COMBINE_OTHER_ITERATED);
4541
SETSHADE_PRIMSUBENV ();
4542
SETSHADE_PRIM ();
4543
CC_ENV ();
4544
}
4545
4546
//Added by Gonetz
4547
static void cc_prim_sub_env_mul_enva_add_t0 ()
4548
{
4549
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4550
GR_COMBINE_FACTOR_ONE,
4551
GR_COMBINE_LOCAL_ITERATED,
4552
GR_COMBINE_OTHER_TEXTURE);
4553
MULSHADE_ENVA ();
4554
SETSHADE_PRIMSUBENV ();
4555
USE_T0 ();
4556
}
4557
4558
//Added by Gonetz
4559
static void cc_prim_sub_shade_mul_t0_add_env ()
4560
{
4561
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4562
GR_COMBINE_FACTOR_TEXTURE_RGB,
4563
GR_COMBINE_LOCAL_CONSTANT,
4564
GR_COMBINE_OTHER_ITERATED);
4565
CC_ENV ();
4566
COLSUBSHADE_PRIM ();
4567
USE_T0 ();
4568
}
4569
4570
//Added by Gonetz
4571
static void cc_prim_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade ()
4572
{
4573
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4574
GR_COMBINE_FACTOR_TEXTURE_RGB,
4575
GR_COMBINE_LOCAL_ITERATED,
4576
GR_COMBINE_OTHER_CONSTANT);
4577
CC_PRIM ();
4578
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
4579
}
4580
4581
static void cc_prim_sub_shade_mul_t1a_add_shade ()
4582
{
4583
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4584
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
4585
GR_COMBINE_LOCAL_ITERATED,
4586
GR_COMBINE_OTHER_CONSTANT);
4587
CC_PRIM ();
4588
USE_T1 ();
4589
}
4590
4591
//Added by Gonetz
4592
static void cc_prim_sub_shade_mul_t0_add_shade ()
4593
{
4594
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4595
GR_COMBINE_FACTOR_TEXTURE_RGB,
4596
GR_COMBINE_LOCAL_ITERATED,
4597
GR_COMBINE_OTHER_CONSTANT);
4598
CC_PRIM ();
4599
USE_T0 ();
4600
}
4601
4602
//Added by Gonetz
4603
static void cc_prim_sub_shade_mul_t1_add_shade ()
4604
{
4605
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4606
GR_COMBINE_FACTOR_TEXTURE_RGB,
4607
GR_COMBINE_LOCAL_ITERATED,
4608
GR_COMBINE_OTHER_CONSTANT);
4609
CC_PRIM ();
4610
USE_T1 ();
4611
}
4612
4613
//Added by Gonetz
4614
static void cc_prim_sub_shade_mul__t0_inter_t1_using_enva__add_shade ()
4615
{
4616
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4617
GR_COMBINE_FACTOR_TEXTURE_RGB,
4618
GR_COMBINE_LOCAL_ITERATED,
4619
GR_COMBINE_OTHER_CONSTANT);
4620
CC_PRIM ();
4621
BYTE factor = (BYTE)(rdp.env_color&0xFF);
4622
T0_INTER_T1_USING_FACTOR (factor);
4623
}
4624
4625
//Added by Gonetz
4626
static void cc_prim_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()
4627
{
4628
if (cmb.combine_ext)
4629
{
4630
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4631
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4632
GR_CMBX_TEXTURE_RGB, 0,
4633
GR_CMBX_B, 0);
4634
}
4635
else
4636
{
4637
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4638
GR_COMBINE_FACTOR_TEXTURE_RGB,
4639
GR_COMBINE_LOCAL_ITERATED,
4640
GR_COMBINE_OTHER_CONSTANT);
4641
}
4642
CC_PRIM ();
4643
T0_INTER_T1_USING_SHADEA ();
4644
}
4645
4646
//Added by Gonetz
4647
static void cc_prim_sub_shade_mul_prima_add_shade ()
4648
{
4649
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4650
GR_COMBINE_FACTOR_OTHER_ALPHA,
4651
GR_COMBINE_LOCAL_ITERATED,
4652
GR_COMBINE_OTHER_CONSTANT);
4653
CC_PRIM ();
4654
CA_PRIM ();
4655
}
4656
4657
//Added by Gonetz
4658
static void cc_prim_sub_shade_mul_env_add_shade ()
4659
{
4660
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4661
GR_COMBINE_FACTOR_ONE,
4662
GR_COMBINE_LOCAL_ITERATED,
4663
GR_COMBINE_OTHER_CONSTANT);
4664
CC_PRIMMULENV ();
4665
MULSHADE_1MENV ();
4666
}
4667
4668
//Added by Gonetz
4669
static void cc_prim_sub_shade_mul_shadea_add_shade ()
4670
{
4671
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4672
GR_COMBINE_FACTOR_LOCAL_ALPHA,
4673
GR_COMBINE_LOCAL_ITERATED,
4674
GR_COMBINE_OTHER_CONSTANT);
4675
CC_PRIM ();
4676
}
4677
4678
static void cc_env_sub_prim_mul_t0_add_prim ()
4679
{
4680
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4681
GR_COMBINE_FACTOR_TEXTURE_RGB,
4682
GR_COMBINE_LOCAL_ITERATED,
4683
GR_COMBINE_OTHER_CONSTANT);
4684
CC_ENV ();
4685
SETSHADE_PRIM ();
4686
USE_T0 ();
4687
}
4688
4689
static void cc_env_sub_prim_mul_t1_add_prim ()
4690
{
4691
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4692
GR_COMBINE_FACTOR_TEXTURE_RGB,
4693
GR_COMBINE_LOCAL_ITERATED,
4694
GR_COMBINE_OTHER_CONSTANT);
4695
CC_ENV ();
4696
SETSHADE_PRIM ();
4697
USE_T1 ();
4698
}
4699
4700
static void cc_env_sub_prim_mul_t0a_add_prim ()
4701
{
4702
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4703
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
4704
GR_COMBINE_LOCAL_ITERATED,
4705
GR_COMBINE_OTHER_CONSTANT);
4706
CC_ENV ();
4707
SETSHADE_PRIM ();
4708
A_USE_T0 ();
4709
}
4710
4711
static void cc_env_sub_prim_mul_t1a_add_prim ()
4712
{
4713
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4714
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
4715
GR_COMBINE_LOCAL_ITERATED,
4716
GR_COMBINE_OTHER_CONSTANT);
4717
CC_ENV ();
4718
SETSHADE_PRIM ();
4719
A_USE_T1 ();
4720
}
4721
4722
static void cc_env_sub_prim_mul__t0_add_t1__add_prim ()
4723
{
4724
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4725
GR_COMBINE_FACTOR_TEXTURE_RGB,
4726
GR_COMBINE_LOCAL_ITERATED,
4727
GR_COMBINE_OTHER_CONSTANT);
4728
CC_ENV ();
4729
SETSHADE_PRIM ();
4730
T0_ADD_T1 ();
4731
}
4732
4733
static void cc_env_sub_prim_mul__t0_mul_t1__add_prim () //Added by Gonetz
4734
{
4735
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4736
GR_COMBINE_FACTOR_TEXTURE_RGB,
4737
GR_COMBINE_LOCAL_ITERATED,
4738
GR_COMBINE_OTHER_CONSTANT);
4739
CC_ENV ();
4740
SETSHADE_PRIM ();
4741
T0_MUL_T1 ();
4742
}
4743
4744
static void cc_env_sub_prim_mul__t0t1a__add_prim () //Added by Gonetz
4745
{
4746
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4747
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
4748
GR_COMBINE_LOCAL_ITERATED,
4749
GR_COMBINE_OTHER_CONSTANT);
4750
CC_ENV ();
4751
SETSHADE_PRIM ();
4752
A_T0_MUL_T1 ();
4753
}
4754
4755
static void cc_env_sub_prim_mul__t0_inter_t1_using_t1__add_prim () //Added by Gonetz
4756
{
4757
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4758
GR_COMBINE_FACTOR_TEXTURE_RGB,
4759
GR_COMBINE_LOCAL_ITERATED,
4760
GR_COMBINE_OTHER_CONSTANT);
4761
CC_ENV ();
4762
SETSHADE_PRIM ();
4763
T0_INTER_T1_USING_T1 ();
4764
}
4765
4766
static void cc_env_sub_prim_mul__t0_inter_t1_using_half__add_prim () //Added by Gonetz
4767
{
4768
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4769
GR_COMBINE_FACTOR_TEXTURE_RGB,
4770
GR_COMBINE_LOCAL_ITERATED,
4771
GR_COMBINE_OTHER_CONSTANT);
4772
CC_ENV ();
4773
SETSHADE_PRIM ();
4774
T0_INTER_T1_USING_FACTOR (0x7F);
4775
}
4776
4777
static void cc_env_sub_prim_mul__t1_inter_t0_using_t0__add_prim () //Added by Gonetz
4778
{
4779
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4780
GR_COMBINE_FACTOR_TEXTURE_RGB,
4781
GR_COMBINE_LOCAL_ITERATED,
4782
GR_COMBINE_OTHER_CONSTANT);
4783
CC_ENV ();
4784
SETSHADE_PRIM ();
4785
T1_INTER_T0_USING_T0 ();
4786
}
4787
4788
static void cc_env_sub_shade_mul__t0_mul_t1__add_shade () //Added by Gonetz
4789
{
4790
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4791
GR_COMBINE_FACTOR_TEXTURE_RGB,
4792
GR_COMBINE_LOCAL_ITERATED,
4793
GR_COMBINE_OTHER_CONSTANT);
4794
CC_ENV ();
4795
T0_MUL_T1 ();
4796
}
4797
4798
static void cc_env_sub_prim_mul_prima_add_prim () //Aded by Gonetz
4799
{
4800
// * not guaranteed to work if another iterated alpha is set
4801
CCMB (GR_COMBINE_FUNCTION_BLEND,
4802
GR_COMBINE_FACTOR_LOCAL_ALPHA,
4803
GR_COMBINE_LOCAL_CONSTANT,
4804
GR_COMBINE_OTHER_ITERATED);
4805
CC_PRIM ();
4806
CA_PRIM ();
4807
SETSHADE_ENV ();
4808
}
4809
4810
static void cc_env_sub_prim_mul_enva_add_prim () //Aded by Gonetz
4811
{
4812
// * not guaranteed to work if another iterated alpha is set
4813
CCMB (GR_COMBINE_FUNCTION_BLEND,
4814
GR_COMBINE_FACTOR_OTHER_ALPHA,
4815
GR_COMBINE_LOCAL_ITERATED,
4816
GR_COMBINE_OTHER_CONSTANT);
4817
CC_ENV ();
4818
CA_ENV ();
4819
SETSHADE_PRIM ();
4820
}
4821
4822
static void cc_env_sub_prim_mul_shade_add_prim () //Added by Gonetz
4823
{
4824
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4825
GR_COMBINE_FACTOR_ONE,
4826
GR_COMBINE_LOCAL_CONSTANT,
4827
GR_COMBINE_OTHER_ITERATED);
4828
CC_PRIM ();
4829
MULSHADE_ENVSUBPRIM ();
4830
}
4831
4832
static void cc_env_sub_prim_mul_shadea_add_prim () //Added by Gonetz
4833
{
4834
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4835
GR_COMBINE_FACTOR_ONE,
4836
GR_COMBINE_LOCAL_CONSTANT,
4837
GR_COMBINE_OTHER_ITERATED);
4838
CC_PRIM ();
4839
MULSHADE_SHADEA ();
4840
SETSHADE_ENVSUBPRIM ();
4841
}
4842
4843
static void cc_env_sub_prim_mul__t0_inter_t1_using_prima__add_prim ()
4844
{
4845
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4846
GR_COMBINE_FACTOR_TEXTURE_RGB,
4847
GR_COMBINE_LOCAL_ITERATED,
4848
GR_COMBINE_OTHER_CONSTANT);
4849
CC_ENV ();
4850
SETSHADE_PRIM ();
4851
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
4852
T0_INTER_T1_USING_FACTOR (factor);
4853
}
4854
4855
static void cc_env_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()
4856
{
4857
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4858
GR_COMBINE_FACTOR_TEXTURE_RGB,
4859
GR_COMBINE_LOCAL_ITERATED,
4860
GR_COMBINE_OTHER_CONSTANT);
4861
CC_ENV ();
4862
SETSHADE_PRIM ();
4863
T0_INTER_T1_USING_FACTOR (lod_frac);
4864
}
4865
4866
static void cc_env_sub_primshade_mul_t0_add_primshade ()
4867
{
4868
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4869
GR_COMBINE_FACTOR_TEXTURE_RGB,
4870
GR_COMBINE_LOCAL_ITERATED,
4871
GR_COMBINE_OTHER_CONSTANT);
4872
CC_ENV ();
4873
MULSHADE_PRIM ();
4874
USE_T0 ();
4875
}
4876
4877
static void cc_env_sub_primshade_mul_t1_add_primshade ()
4878
{
4879
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4880
GR_COMBINE_FACTOR_TEXTURE_RGB,
4881
GR_COMBINE_LOCAL_ITERATED,
4882
GR_COMBINE_OTHER_CONSTANT);
4883
CC_ENV ();
4884
MULSHADE_PRIM ();
4885
USE_T1 ();
4886
}
4887
4888
static void cc_env_sub_shade_mul_t0_add_shade ()
4889
{
4890
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4891
GR_COMBINE_FACTOR_TEXTURE_RGB,
4892
GR_COMBINE_LOCAL_ITERATED,
4893
GR_COMBINE_OTHER_CONSTANT);
4894
CC_ENV ();
4895
USE_T0 ();
4896
}
4897
4898
static void cc_env_sub_shade_mul_t1_add_shade ()
4899
{
4900
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4901
GR_COMBINE_FACTOR_TEXTURE_RGB,
4902
GR_COMBINE_LOCAL_ITERATED,
4903
GR_COMBINE_OTHER_CONSTANT);
4904
CC_ENV ();
4905
USE_T1 ();
4906
}
4907
4908
//Added by Gonetz
4909
static void cc_env_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()
4910
{
4911
if (cmb.combine_ext)
4912
{
4913
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4914
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
4915
GR_CMBX_TEXTURE_RGB, 0,
4916
GR_CMBX_B, 0);
4917
}
4918
else
4919
{
4920
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4921
GR_COMBINE_FACTOR_TEXTURE_RGB,
4922
GR_COMBINE_LOCAL_ITERATED,
4923
GR_COMBINE_OTHER_CONSTANT);
4924
}
4925
CC_ENV ();
4926
T0_INTER_T1_USING_SHADEA ();
4927
}
4928
4929
//Added by Gonetz
4930
static void cc_env_sub_shade_mul_enva_add_shade ()
4931
{
4932
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4933
GR_COMBINE_FACTOR_OTHER_ALPHA,
4934
GR_COMBINE_LOCAL_ITERATED,
4935
GR_COMBINE_OTHER_CONSTANT);
4936
cmb.ccolor = rdp.env_color;
4937
}
4938
/*
4939
static void cc_env_sub__prim_inter_t0_using_shadea__mul_shade_add_env ()
4940
{
4941
// (t0-prim)*shade_alpha+prim, (env-cmb)*shade+cmb
4942
if (cmb.combine_ext)
4943
{
4944
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
4945
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
4946
GR_CMBX_ITRGB, 0,
4947
GR_CMBX_B, 0);
4948
CC_ENV ();
4949
PRIM_INTER_T0_USING_SHADEA ();
4950
}
4951
else
4952
{
4953
cc_t0_mul_shadea ();
4954
}
4955
}
4956
*/
4957
4958
//Added by Gonetz
4959
static void cc_shade_sub_t0_mul_shadea_add_t0 ()
4960
{
4961
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
4962
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
4963
GR_COMBINE_LOCAL_ITERATED,
4964
GR_COMBINE_OTHER_TEXTURE);
4965
MULSHADE_SHADEA ();
4966
USE_T0 ();
4967
}
4968
4969
static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()
4970
{
4971
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4972
GR_COMBINE_FACTOR_TEXTURE_RGB,
4973
GR_COMBINE_LOCAL_CONSTANT,
4974
GR_COMBINE_OTHER_ITERATED);
4975
CC_PRIM ();
4976
T0_INTER_T1_USING_FACTOR (lod_frac);
4977
}
4978
4979
static void cc_shade_sub_prim_mul_t0_add_prim ()
4980
{
4981
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4982
GR_COMBINE_FACTOR_TEXTURE_RGB,
4983
GR_COMBINE_LOCAL_CONSTANT,
4984
GR_COMBINE_OTHER_ITERATED);
4985
CC_PRIM ();
4986
USE_T0 ();
4987
}
4988
4989
static void cc_shade_sub_prim_mul__t0_mul_t1__add_prim ()
4990
{
4991
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
4992
GR_COMBINE_FACTOR_TEXTURE_RGB,
4993
GR_COMBINE_LOCAL_CONSTANT,
4994
GR_COMBINE_OTHER_ITERATED);
4995
CC_PRIM ();
4996
T0_MUL_T1 ();
4997
}
4998
4999
//Added by Gonetz
5000
static void cc_shade_sub_prim_mul_t1_add_prim ()
5001
{
5002
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5003
GR_COMBINE_FACTOR_TEXTURE_RGB,
5004
GR_COMBINE_LOCAL_CONSTANT,
5005
GR_COMBINE_OTHER_ITERATED);
5006
CC_PRIM ();
5007
USE_T1 ();
5008
}
5009
5010
//Added by Gonetz
5011
static void cc_shade_sub_env_mul__t0_mul_t1__add__t0_mul_t1 ()
5012
{
5013
if (cmb.combine_ext)
5014
{
5015
CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,
5016
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,
5017
GR_CMBX_TEXTURE_RGB, 0,
5018
GR_CMBX_TEXTURE_RGB, 0);
5019
CC_ENV ();
5020
T0_MUL_T1 ();
5021
}
5022
else
5023
{
5024
cc_t0_mul_t1 ();
5025
}
5026
}
5027
5028
//Added by Gonetz
5029
static void cc_shade_sub_env_mul_t0_add_prim ()
5030
{
5031
if (rdp.cur_image && (rdp.cur_image->format != 0))
5032
{
5033
cc_prim ();
5034
return;
5035
}
5036
5037
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5038
GR_COMBINE_FACTOR_TEXTURE_RGB,
5039
GR_COMBINE_LOCAL_CONSTANT,
5040
GR_COMBINE_OTHER_ITERATED);
5041
CC_PRIM ();
5042
SUBSHADE_ENV ();
5043
USE_T0 ();
5044
}
5045
5046
//Added by Gonetz
5047
static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_prim ()
5048
{
5049
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5050
GR_COMBINE_FACTOR_TEXTURE_RGB,
5051
GR_COMBINE_LOCAL_CONSTANT,
5052
GR_COMBINE_OTHER_ITERATED);
5053
CC_PRIM ();
5054
SUBSHADE_ENV ();
5055
T0_INTER_T1_USING_FACTOR (lod_frac);
5056
}
5057
5058
//Added by Gonetz
5059
static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_env ()
5060
{
5061
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5062
GR_COMBINE_FACTOR_TEXTURE_RGB,
5063
GR_COMBINE_LOCAL_CONSTANT,
5064
GR_COMBINE_OTHER_ITERATED);
5065
CC_ENV ();
5066
T0_INTER_T1_USING_FACTOR (lod_frac);
5067
}
5068
5069
//Added by Gonetz
5070
static void cc_shade_sub_env_mul__t0_mul_t1__add_env ()
5071
{
5072
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5073
GR_COMBINE_FACTOR_TEXTURE_RGB,
5074
GR_COMBINE_LOCAL_CONSTANT,
5075
GR_COMBINE_OTHER_ITERATED);
5076
CC_ENV ();
5077
T0_MUL_T1 ();
5078
}
5079
5080
//Added by Gonetz
5081
static void cc_shade_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()
5082
{
5083
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5084
GR_COMBINE_FACTOR_TEXTURE_RGB,
5085
GR_COMBINE_LOCAL_CONSTANT,
5086
GR_COMBINE_OTHER_ITERATED);
5087
CC_ENV ();
5088
SETSHADE_ENV ();
5089
T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();
5090
}
5091
5092
//Added by Gonetz
5093
static void cc_shade_sub_env_mul_t0_add_env ()
5094
{
5095
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5096
GR_COMBINE_FACTOR_TEXTURE_RGB,
5097
GR_COMBINE_LOCAL_CONSTANT,
5098
GR_COMBINE_OTHER_ITERATED);
5099
CC_ENV ();
5100
USE_T0 ();
5101
}
5102
5103
//Added by Gonetz
5104
static void cc_shade_sub_env_mul_t0_mul_prim_add_prim_mul_env ()
5105
{
5106
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5107
GR_COMBINE_FACTOR_TEXTURE_RGB,
5108
GR_COMBINE_LOCAL_CONSTANT,
5109
GR_COMBINE_OTHER_ITERATED);
5110
CC_PRIMMULENV ();
5111
SUBSHADE_ENV ();
5112
MULSHADE_PRIM()
5113
USE_T0 ();
5114
}
5115
5116
//Added by Gonetz
5117
static void cc_shade_sub_env_mul_t1_add_env ()
5118
{
5119
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
5120
GR_COMBINE_FACTOR_TEXTURE_RGB,
5121
GR_COMBINE_LOCAL_CONSTANT,
5122
GR_COMBINE_OTHER_ITERATED);
5123
CC_ENV ();
5124
USE_T1 ();
5125
}
5126
5127
//Added by Gonetz
5128
static void cc_shade_sub_env_mul_prim_add_t0 ()
5129
{
5130
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5131
GR_COMBINE_FACTOR_ONE,
5132
GR_COMBINE_LOCAL_ITERATED,
5133
GR_COMBINE_OTHER_TEXTURE);
5134
SUBSHADE_ENV ();
5135
MULSHADE_PRIM ();
5136
USE_T0 ();
5137
}
5138
5139
static void cc__t0_add_prim_mul_shade__mul_shade_add_env ()
5140
{
5141
if (!cmb.combine_ext)
5142
{
5143
cc_shade_sub_env_mul_prim_add_t0 ();
5144
return;
5145
}
5146
T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
5147
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5148
GR_CMBX_ITRGB, 0,
5149
GR_CMBX_B, 0);
5150
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
5151
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5152
GR_CMBX_ITRGB, 0,
5153
GR_CMBX_B, 0);
5154
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5155
GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,
5156
GR_CMBX_ITRGB, 0,
5157
GR_CMBX_B, 0);
5158
cmb.tex_ccolor = rdp.prim_color;
5159
CC_ENV ();
5160
cmb.tex |= 1;
5161
}
5162
5163
static void cc__t0_add_prim_mul_shade__mul_shade ()
5164
{
5165
if (!cmb.combine_ext)
5166
{
5167
cc_shade_sub_env_mul_prim_add_t0 ();
5168
return;
5169
}
5170
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
5171
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5172
GR_CMBX_ITRGB, 0,
5173
GR_CMBX_B, 0);
5174
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5175
GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
5176
GR_CMBX_ITRGB, 0,
5177
GR_CMBX_ZERO, 0);
5178
cmb.tex_ccolor = rdp.prim_color;
5179
cmb.tex |= 1;
5180
}
5181
5182
//Added by Gonetz
5183
static void cc_shade_sub_env_mul_prim_add_env ()
5184
{
5185
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5186
GR_COMBINE_FACTOR_ONE,
5187
GR_COMBINE_LOCAL_CONSTANT,
5188
GR_COMBINE_OTHER_ITERATED);
5189
SUBSHADE_ENV ();
5190
MULSHADE_PRIM ();
5191
CC_ENV ();
5192
}
5193
5194
//Added by Gonetz
5195
static void cc_shade_sub_env_mul_prima_add_prim ()
5196
{
5197
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5198
GR_COMBINE_FACTOR_ONE,
5199
GR_COMBINE_LOCAL_CONSTANT,
5200
GR_COMBINE_OTHER_ITERATED);
5201
SUBSHADE_ENV ();
5202
MULSHADE_PRIMA ();
5203
CC_PRIM ();
5204
}
5205
5206
static void cc_shade_sub_env_mul_k5_add_prim ()
5207
{
5208
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5209
GR_COMBINE_FACTOR_ONE,
5210
GR_COMBINE_LOCAL_CONSTANT,
5211
GR_COMBINE_OTHER_ITERATED);
5212
SUBSHADE_ENV ();
5213
DWORD temp = rdp.prim_color;
5214
rdp.prim_color = rdp.K5;
5215
MULSHADE_PRIMA ();
5216
rdp.prim_color = temp;
5217
CC_PRIM ();
5218
}
5219
5220
// ** A inter B using C **
5221
static void cc_t0_inter_t1_using_t1a ()
5222
{
5223
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5224
GR_COMBINE_FACTOR_ONE,
5225
GR_COMBINE_LOCAL_NONE,
5226
GR_COMBINE_OTHER_TEXTURE);
5227
T0_INTER_T1_USING_T1A ();
5228
}
5229
5230
static void cc_t0_inter_t1_using_prima ()
5231
{
5232
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5233
GR_COMBINE_FACTOR_ONE,
5234
GR_COMBINE_LOCAL_NONE,
5235
GR_COMBINE_OTHER_TEXTURE);
5236
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
5237
T0_INTER_T1_USING_FACTOR (factor);
5238
}
5239
5240
static void cc_t1_inter_t0_using_prima ()
5241
{
5242
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5243
GR_COMBINE_FACTOR_ONE,
5244
GR_COMBINE_LOCAL_NONE,
5245
GR_COMBINE_OTHER_TEXTURE);
5246
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
5247
T1_INTER_T0_USING_FACTOR (factor);
5248
}
5249
5250
static void cc_t1_inter_t0_using_prim ()
5251
{
5252
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5253
GR_COMBINE_FACTOR_ONE,
5254
GR_COMBINE_LOCAL_NONE,
5255
GR_COMBINE_OTHER_TEXTURE);
5256
T1_INTER_T0_USING_PRIM ();
5257
}
5258
5259
static void cc_t0_inter_t1_using_env ()
5260
{
5261
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5262
GR_COMBINE_FACTOR_ONE,
5263
GR_COMBINE_LOCAL_NONE,
5264
GR_COMBINE_OTHER_TEXTURE);
5265
T0_INTER_T1_USING_ENV ();
5266
}
5267
5268
static void cc_t0_inter_t1_using_enva ()
5269
{
5270
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5271
GR_COMBINE_FACTOR_ONE,
5272
GR_COMBINE_LOCAL_NONE,
5273
GR_COMBINE_OTHER_TEXTURE);
5274
BYTE factor = (BYTE)(rdp.env_color&0xFF);
5275
T0_INTER_T1_USING_FACTOR (factor);
5276
}
5277
5278
static void cc__t0_inter_t1_using_prim__inter_env_using_enva ()
5279
{
5280
// (t1-t0)*prim+t0, (env-cmb)*env_a+cmb
5281
if (!cmb.combine_ext)
5282
{
5283
cc_t0_inter_t1_using_prima ();
5284
return;
5285
}
5286
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5287
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5288
GR_CMBX_ZERO, 0,
5289
GR_CMBX_B, 0);
5290
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
5291
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5292
GR_CMBX_TMU_CCOLOR, 0,
5293
GR_CMBX_B, 0);
5294
cmb.tex_ccolor = rdp.prim_color;
5295
cmb.tex |= 3;
5296
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
5297
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5298
GR_CMBX_CONSTANT_ALPHA, 0,
5299
GR_CMBX_B, 0);
5300
cmb.ccolor = rdp.env_color;
5301
}
5302
5303
static void cc__t0_inter_t1_using_shade__inter_env_using_enva ()
5304
{
5305
// (t1-t0)*shade+t0, (env-cmb)*env_a+cmb
5306
if (!cmb.combine_ext)
5307
{
5308
cc_t0_inter_t1_using_enva ();
5309
return;
5310
}
5311
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5312
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5313
GR_CMBX_ZERO, 0,
5314
GR_CMBX_B, 0);
5315
T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,
5316
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5317
GR_CMBX_ITRGB, 0,
5318
GR_CMBX_B, 0);
5319
cmb.tex |= 3;
5320
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
5321
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5322
GR_CMBX_CONSTANT_ALPHA, 0,
5323
GR_CMBX_B, 0);
5324
cmb.ccolor = rdp.env_color;
5325
}
5326
5327
static void cc__t1_inter_env_using_t0__inter_prim_using_shadea ()
5328
{
5329
//(env-t1)*t0+t1, (prim-cmb)*shadea+cmb
5330
if (!cmb.combine_ext)
5331
{
5332
cc_t0_add_t1 ();
5333
return;
5334
}
5335
T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5336
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5337
GR_CMBX_ZERO, 0,
5338
GR_CMBX_B, 0);
5339
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
5340
GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5341
GR_CMBX_LOCAL_TEXTURE_RGB, 0,
5342
GR_CMBX_B, 0);
5343
cmb.tex |= 3;
5344
cmb.tex_ccolor = rdp.env_color;
5345
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
5346
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5347
GR_CMBX_ITALPHA, 0,
5348
GR_CMBX_B, 0);
5349
CC_PRIM();
5350
}
5351
5352
5353
5354
//Added by Gonetz
5355
static void cc_t1_inter_t0_using_shadea ()
5356
{
5357
if (cmb.combine_ext)
5358
{
5359
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5360
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
5361
GR_CMBX_ZERO, 1,
5362
GR_CMBX_ZERO, 0);
5363
}
5364
else
5365
{
5366
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5367
GR_COMBINE_FACTOR_ONE,
5368
GR_COMBINE_LOCAL_NONE,
5369
GR_COMBINE_OTHER_TEXTURE);
5370
}
5371
T1_INTER_T0_USING_SHADEA ();
5372
}
5373
5374
//Added by Gonetz
5375
static void cc_t0_inter_t1_using_primlod ()
5376
{
5377
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5378
GR_COMBINE_FACTOR_ONE,
5379
GR_COMBINE_LOCAL_NONE,
5380
GR_COMBINE_OTHER_TEXTURE);
5381
T0_INTER_T1_USING_FACTOR (lod_frac);
5382
}
5383
5384
//Added by Gonetz
5385
static void cc_t1_inter_t0_using_primlod ()
5386
{
5387
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5388
GR_COMBINE_FACTOR_ONE,
5389
GR_COMBINE_LOCAL_NONE,
5390
GR_COMBINE_OTHER_TEXTURE);
5391
T1_INTER_T0_USING_FACTOR (lod_frac);
5392
}
5393
5394
//Added by Gonetz
5395
static void cc_t1_inter_t0_using_t0 ()
5396
{
5397
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5398
GR_COMBINE_FACTOR_ONE,
5399
GR_COMBINE_LOCAL_NONE,
5400
GR_COMBINE_OTHER_TEXTURE);
5401
T1_INTER_T0_USING_T0 ();
5402
}
5403
5404
//Added by Gonetz
5405
static void cc_t0_inter_t1_using_k5 ()
5406
{
5407
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5408
GR_COMBINE_FACTOR_ONE,
5409
GR_COMBINE_LOCAL_NONE,
5410
GR_COMBINE_OTHER_TEXTURE);
5411
T0_INTER_T1_USING_FACTOR (rdp.K5);
5412
}
5413
5414
static void cc_t0_inter_env_using_prim ()
5415
{
5416
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5417
GR_COMBINE_FACTOR_ONE,
5418
GR_COMBINE_LOCAL_NONE,
5419
GR_COMBINE_OTHER_TEXTURE);
5420
USE_T0 ();
5421
5422
MOD_0 (TMOD_TEX_INTER_COL_USING_COL1);
5423
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5424
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
5425
}
5426
5427
//Added by Gonetz
5428
static void cc_t0_inter_prim_using_primlod ()
5429
{
5430
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5431
GR_COMBINE_FACTOR_ONE,
5432
GR_COMBINE_LOCAL_NONE,
5433
GR_COMBINE_OTHER_TEXTURE);
5434
USE_T0 ();
5435
5436
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
5437
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5438
MOD_0_FAC (lod_frac & 0xFF);
5439
}
5440
5441
static void cc_t0_inter_shade_using_primlod ()
5442
{
5443
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5444
GR_COMBINE_FACTOR_TEXTURE_RGB,
5445
GR_COMBINE_LOCAL_ITERATED,
5446
GR_COMBINE_OTHER_CONSTANT);
5447
CC_PRIMLOD();
5448
cmb.ccolor=(~cmb.ccolor)&0xFFFFFF00;
5449
MULSHADE_PRIMLOD ();
5450
USE_T0 ();
5451
//(shade-t0)*primlod+t0 = t0*(1-primlod)+shade*primlod
5452
}
5453
5454
//Added by Gonetz
5455
static void cc__env_inter_t0_using_primlod__mul_prim ()
5456
{
5457
//((t0-env)*primlod+env)*prim = t0*prim*primlod+env*prim*(1-primlod);
5458
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5459
GR_COMBINE_FACTOR_TEXTURE_RGB,
5460
GR_COMBINE_LOCAL_ITERATED,
5461
GR_COMBINE_OTHER_CONSTANT);
5462
CC_PRIM ();
5463
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);
5464
SETSHADE_PRIM ();
5465
SETSHADE_ENV ();
5466
SETSHADE_1MPRIMLOD ();
5467
USE_T0 ();
5468
}
5469
5470
//Added by Gonetz
5471
static void cc_env_inter_prim_using_primlod ()
5472
{
5473
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5474
GR_COMBINE_FACTOR_ONE,
5475
GR_COMBINE_LOCAL_CONSTANT,
5476
GR_COMBINE_OTHER_ITERATED);
5477
SETSHADE_PRIMSUBENV ();
5478
SETSHADE_PRIMLOD ();
5479
CC_ENV ();
5480
}
5481
5482
// ** (A-B)*C+D*E **
5483
static void cc_one_sub_env_mul_prim_add__t0_mul_env () //Aded by Gonetz
5484
{
5485
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5486
GR_COMBINE_FACTOR_TEXTURE_RGB,
5487
GR_COMBINE_LOCAL_ITERATED,
5488
GR_COMBINE_OTHER_CONSTANT);
5489
CC_ENV ();
5490
SETSHADE_1MENV ();
5491
SETSHADE_PRIM ();
5492
USE_T0 ();
5493
}
5494
5495
// ** (A inter B using C) * D **
5496
//Added by Gonetz
5497
static void cc__t0_inter_t1_using_prima__mul_prim ()
5498
{
5499
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5500
GR_COMBINE_FACTOR_LOCAL,
5501
GR_COMBINE_LOCAL_CONSTANT,
5502
GR_COMBINE_OTHER_TEXTURE);
5503
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
5504
T0_INTER_T1_USING_FACTOR (factor);
5505
CC_PRIM ();
5506
}
5507
5508
//Added by Gonetz
5509
static void cc__t1_inter_t0_using_prima__mul_prim ()
5510
{
5511
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5512
GR_COMBINE_FACTOR_LOCAL,
5513
GR_COMBINE_LOCAL_CONSTANT,
5514
GR_COMBINE_OTHER_TEXTURE);
5515
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
5516
T1_INTER_T0_USING_FACTOR (factor);
5517
CC_PRIM ();
5518
}
5519
5520
//Added by Gonetz
5521
static void cc__t0_inter_t1_using_prim__mul_shade ()
5522
{
5523
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5524
GR_COMBINE_FACTOR_LOCAL,
5525
GR_COMBINE_LOCAL_ITERATED,
5526
GR_COMBINE_OTHER_TEXTURE);
5527
//BYTE factor = (BYTE)(rdp.prim_color&0xFF);
5528
T0_INTER_T1_USING_PRIM ();
5529
}
5530
5531
//Added by Gonetz
5532
static void cc__t0_inter_t1_using_prima__mul_shade ()
5533
{
5534
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5535
GR_COMBINE_FACTOR_LOCAL,
5536
GR_COMBINE_LOCAL_ITERATED,
5537
GR_COMBINE_OTHER_TEXTURE);
5538
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
5539
T0_INTER_T1_USING_FACTOR (factor);
5540
}
5541
5542
//Added by Gonetz
5543
static void cc__t1_inter_t0_using_prima__mul_shade ()
5544
{
5545
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5546
GR_COMBINE_FACTOR_LOCAL,
5547
GR_COMBINE_LOCAL_ITERATED,
5548
GR_COMBINE_OTHER_TEXTURE);
5549
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
5550
T1_INTER_T0_USING_FACTOR (factor);
5551
}
5552
5553
static void cc__t0_inter_t1_using_env__mul_shade ()
5554
{
5555
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5556
GR_COMBINE_FACTOR_LOCAL,
5557
GR_COMBINE_LOCAL_ITERATED,
5558
GR_COMBINE_OTHER_TEXTURE);
5559
T0_INTER_T1_USING_ENV ();
5560
}
5561
5562
static void cc__t0_inter_t1_using_enva__mul_shade ()
5563
{
5564
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5565
GR_COMBINE_FACTOR_LOCAL,
5566
GR_COMBINE_LOCAL_ITERATED,
5567
GR_COMBINE_OTHER_TEXTURE);
5568
BYTE factor = (BYTE)(rdp.env_color&0xFF);
5569
T0_INTER_T1_USING_FACTOR (factor);
5570
}
5571
5572
static void cc__t0_inter_t1_using_enva__mul_prim ()
5573
{
5574
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5575
GR_COMBINE_FACTOR_LOCAL,
5576
GR_COMBINE_LOCAL_CONSTANT,
5577
GR_COMBINE_OTHER_TEXTURE);
5578
CC_PRIM ();
5579
BYTE factor = (BYTE)(rdp.env_color&0xFF);
5580
T0_INTER_T1_USING_FACTOR (factor);
5581
}
5582
5583
//Added by Gonetz
5584
static void cc__t0_inter_t1_using_enva__mul_env ()
5585
{
5586
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5587
GR_COMBINE_FACTOR_LOCAL,
5588
GR_COMBINE_LOCAL_CONSTANT,
5589
GR_COMBINE_OTHER_TEXTURE);
5590
CC_ENV ();
5591
BYTE factor = (BYTE)(rdp.env_color&0xFF);
5592
T0_INTER_T1_USING_FACTOR (factor);
5593
}
5594
5595
//Added by Gonetz
5596
static void cc__t0_inter_t1_using_primlod__mul_prim ()
5597
{
5598
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5599
GR_COMBINE_FACTOR_LOCAL,
5600
GR_COMBINE_LOCAL_CONSTANT,
5601
GR_COMBINE_OTHER_TEXTURE);
5602
CC_PRIM ();
5603
T0_INTER_T1_USING_FACTOR (lod_frac);
5604
}
5605
5606
//Added by Gonetz
5607
static void cc__t0_inter_t1_using_primlod__mul_prima ()
5608
{
5609
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5610
GR_COMBINE_FACTOR_LOCAL,
5611
GR_COMBINE_LOCAL_CONSTANT,
5612
GR_COMBINE_OTHER_TEXTURE);
5613
CC_PRIMA ();
5614
T0_INTER_T1_USING_FACTOR (lod_frac);
5615
}
5616
5617
//Added by Gonetz
5618
static void cc__t1_mul_primlod_add_t0__mul_prim ()
5619
{
5620
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5621
GR_COMBINE_FACTOR_LOCAL,
5622
GR_COMBINE_LOCAL_CONSTANT,
5623
GR_COMBINE_OTHER_TEXTURE);
5624
CC_PRIM ();
5625
T1_MUL_PRIMLOD_ADD_T0 ();
5626
}
5627
5628
//Added by Gonetz
5629
static void cc__t0_inter_t1_using_primlod__mul_env ()
5630
{
5631
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5632
GR_COMBINE_FACTOR_LOCAL,
5633
GR_COMBINE_LOCAL_CONSTANT,
5634
GR_COMBINE_OTHER_TEXTURE);
5635
CC_ENV ();
5636
T0_INTER_T1_USING_FACTOR (lod_frac);
5637
}
5638
5639
//Added by Gonetz
5640
static void cc__t1_mul_primlod_add_t0__mul_env ()
5641
{
5642
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5643
GR_COMBINE_FACTOR_LOCAL,
5644
GR_COMBINE_LOCAL_CONSTANT,
5645
GR_COMBINE_OTHER_TEXTURE);
5646
CC_ENV ();
5647
T1_MUL_PRIMLOD_ADD_T0 ();
5648
}
5649
5650
//Added by Gonetz
5651
static void cc__t1_inter_t0_using_prim__mul_env ()
5652
{
5653
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5654
GR_COMBINE_FACTOR_LOCAL,
5655
GR_COMBINE_LOCAL_CONSTANT,
5656
GR_COMBINE_OTHER_TEXTURE);
5657
CC_ENV ();
5658
T1_INTER_T0_USING_PRIM ();
5659
}
5660
5661
static void cc__t0_inter_t1_using_primlod__mul_shade ()
5662
{
5663
if (rdp.LOD_en && (rdp.mipmap_level == 0))
5664
{
5665
cc_t0_mul_shade ();
5666
return;
5667
}
5668
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5669
GR_COMBINE_FACTOR_LOCAL,
5670
GR_COMBINE_LOCAL_ITERATED,
5671
GR_COMBINE_OTHER_TEXTURE);
5672
T0_INTER_T1_USING_FACTOR (lod_frac);
5673
}
5674
5675
static void cc__t1_inter_t0_using_primlod__mul_shade ()
5676
{
5677
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5678
GR_COMBINE_FACTOR_LOCAL,
5679
GR_COMBINE_LOCAL_ITERATED,
5680
GR_COMBINE_OTHER_TEXTURE);
5681
T1_INTER_T0_USING_FACTOR (lod_frac);
5682
}
5683
5684
static void cc__t0_inter_t1_using_half__mul_shade ()
5685
{
5686
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5687
GR_COMBINE_FACTOR_LOCAL,
5688
GR_COMBINE_LOCAL_ITERATED,
5689
GR_COMBINE_OTHER_TEXTURE);
5690
T0_INTER_T1_USING_FACTOR (0x7F);
5691
}
5692
5693
static void cc__t0_inter_t1_using_t0__mul_shade ()
5694
{
5695
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5696
GR_COMBINE_FACTOR_LOCAL,
5697
GR_COMBINE_LOCAL_ITERATED,
5698
GR_COMBINE_OTHER_TEXTURE);
5699
T0_INTER_T1_USING_T0();
5700
}
5701
5702
static void cc__t0_inter_t1_using_t1a__mul_shade ()
5703
{
5704
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5705
GR_COMBINE_FACTOR_LOCAL,
5706
GR_COMBINE_LOCAL_ITERATED,
5707
GR_COMBINE_OTHER_TEXTURE);
5708
T0_INTER_T1_USING_T1A();
5709
}
5710
5711
static void cc__t0_inter_t1_using_shadea__mul_shade ()
5712
{
5713
if (cmb.combine_ext)
5714
{
5715
CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,
5716
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
5717
GR_CMBX_ITRGB, 0,
5718
GR_CMBX_ZERO, 0);
5719
}
5720
else
5721
{
5722
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5723
GR_COMBINE_FACTOR_LOCAL,
5724
GR_COMBINE_LOCAL_ITERATED,
5725
GR_COMBINE_OTHER_TEXTURE);
5726
}
5727
T0_INTER_T1_USING_SHADEA ();
5728
}
5729
5730
static void cc__t0_inter_t1_using_k5__mul_shade ()
5731
{
5732
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5733
GR_COMBINE_FACTOR_LOCAL,
5734
GR_COMBINE_LOCAL_ITERATED,
5735
GR_COMBINE_OTHER_TEXTURE);
5736
T0_INTER_T1_USING_FACTOR (rdp.K5);
5737
}
5738
5739
static void cc__t1_inter_t0_using_k5__mul_shade ()
5740
{
5741
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5742
GR_COMBINE_FACTOR_LOCAL,
5743
GR_COMBINE_LOCAL_ITERATED,
5744
GR_COMBINE_OTHER_TEXTURE);
5745
T1_INTER_T0_USING_FACTOR (rdp.K5);
5746
}
5747
5748
static void cc_t0_inter_prim_using_prima ()
5749
{
5750
if (cmb.combine_ext)
5751
{
5752
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
5753
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5754
GR_CMBX_TMU_CALPHA, 0,
5755
GR_CMBX_B, 0);
5756
cmb.tex_ccolor = rdp.prim_color;
5757
cmb.tex |= 1;
5758
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5759
GR_COMBINE_FACTOR_ONE,
5760
GR_COMBINE_LOCAL_NONE,
5761
GR_COMBINE_OTHER_TEXTURE);
5762
}
5763
else
5764
{
5765
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
5766
GR_COMBINE_FACTOR_TEXTURE_RGB,
5767
GR_COMBINE_LOCAL_ITERATED,
5768
GR_COMBINE_OTHER_CONSTANT);
5769
CC_1SUBPRIMA ();
5770
SETSHADE_PRIM ();
5771
SETSHADE_PRIMA ();
5772
USE_T0 ();
5773
}
5774
}
5775
5776
static void cc__t0_inter_prim_using_t0a__mul_shade ()
5777
{
5778
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5779
GR_COMBINE_FACTOR_LOCAL,
5780
GR_COMBINE_LOCAL_ITERATED,
5781
GR_COMBINE_OTHER_TEXTURE);
5782
MOD_0 (TMOD_TEX_INTER_COL_USING_TEXA);
5783
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5784
USE_T0 ();
5785
}
5786
5787
static void cc__env_inter_prim_using_t0__mul_prim ()
5788
{
5789
// (prim-env)*t0+env, (cmb-0)*prim+0
5790
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5791
GR_COMBINE_FACTOR_LOCAL,
5792
GR_COMBINE_LOCAL_CONSTANT,
5793
GR_COMBINE_OTHER_TEXTURE);
5794
CC_PRIM ();
5795
MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
5796
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5797
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
5798
USE_T0 ();
5799
}
5800
5801
static void cc__env_inter_prim_using_t0__mul_shade ()
5802
{
5803
// amazing... mace actually uses the blender as part of the combine
5804
if ((rdp.othermode_l & 0xFFFF0000) == 0x03820000 ||
5805
(rdp.othermode_l & 0xFFFF0000) == 0x00910000)
5806
{
5807
// blender:
5808
// 1ST = CLR_IN * A_IN + CLR_BL * 1MA
5809
// OUT = 1ST * 0 + 1ST * 1
5810
5811
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5812
GR_COMBINE_FACTOR_LOCAL,
5813
GR_COMBINE_LOCAL_ITERATED,
5814
GR_COMBINE_OTHER_TEXTURE);
5815
MOD_0 (TMOD_COL2_INTER__COL_INTER_COL1_USING_TEX__USING_TEXA);
5816
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5817
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
5818
MOD_0_COL2 (rdp.blend_color & 0xFFFFFF00);
5819
USE_T0 ();
5820
}
5821
else
5822
{
5823
//(prim-env)*t0+env, (shade-0)*cmb+0
5824
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5825
GR_COMBINE_FACTOR_LOCAL,
5826
GR_COMBINE_LOCAL_ITERATED,
5827
GR_COMBINE_OTHER_TEXTURE);
5828
MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
5829
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5830
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
5831
USE_T0 ();
5832
}
5833
}
5834
5835
static void cc__prim_inter_t0_using_env__mul_shade ()
5836
{
5837
// (t0-prim)*env+prim, (cmb-0)*shade+0
5838
if ((rdp.prim_color & 0xFFFFFF00) == 0)
5839
{
5840
cc_t0_mul_env_mul_shade ();
5841
return;
5842
}
5843
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5844
GR_COMBINE_FACTOR_LOCAL,
5845
GR_COMBINE_LOCAL_ITERATED,
5846
GR_COMBINE_OTHER_TEXTURE);
5847
MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
5848
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5849
MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);
5850
USE_T0 ();
5851
}
5852
5853
static void cc_prim_sub__prim_sub_t0_mul_prima__mul_shade ()
5854
{
5855
// (prim-t0)*prim_a+0, (prim-cmb)*shade+0
5856
if (cmb.combine_ext)
5857
{
5858
T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,
5859
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5860
GR_CMBX_TMU_CALPHA, 0,
5861
GR_CMBX_ZERO, 0);
5862
cmb.tex_ccolor = rdp.prim_color;
5863
cmb.tex |= 1;
5864
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
5865
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
5866
GR_CMBX_ITRGB, 0,
5867
GR_CMBX_ZERO, 0);
5868
CC_PRIM();
5869
}
5870
else
5871
{
5872
if ((rdp.prim_color & 0xFFFFFF00) == 0)
5873
{
5874
cc_t0_mul_prima_mul_shade ();
5875
return;
5876
}
5877
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5878
GR_COMBINE_FACTOR_LOCAL,
5879
GR_COMBINE_LOCAL_ITERATED,
5880
GR_COMBINE_OTHER_TEXTURE);
5881
MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);
5882
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5883
BYTE prima = (BYTE)(rdp.prim_color&0xFF);
5884
MOD_0_COL1 ((prima<<24)|(prima<<16)|(prima<<8));
5885
USE_T0 ();
5886
}
5887
}
5888
5889
static void cc__prim_inter_env_using_t0__mul_shade ()
5890
{
5891
// (env-prim)*t0+prim, (cmb-0)*shade+0
5892
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5893
GR_COMBINE_FACTOR_LOCAL,
5894
GR_COMBINE_LOCAL_ITERATED,
5895
GR_COMBINE_OTHER_TEXTURE);
5896
MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
5897
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5898
MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);
5899
USE_T0 ();
5900
}
5901
5902
static void cc__env_inter_prim_using_t0a__mul_t0 ()
5903
{
5904
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5905
GR_COMBINE_FACTOR_ONE,
5906
GR_COMBINE_LOCAL_NONE,
5907
GR_COMBINE_OTHER_TEXTURE);
5908
MOD_0 (TMOD_COL_INTER_COL1_USING_TEXA__MUL_TEX);
5909
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5910
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
5911
USE_T0 ();
5912
}
5913
5914
static void cc__env_inter_prim_using__t0_sub_shade_mul_primlod_add_env ()
5915
{
5916
// (t0-shade)*lodf+env, (prim-env)*cmb+env
5917
if (cmb.combine_ext)
5918
{
5919
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5920
GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,
5921
GR_CMBX_DETAIL_FACTOR, 0,
5922
GR_CMBX_TMU_CCOLOR, 0);
5923
cmb.tex_ccolor = rdp.env_color;
5924
percent = (float)lod_frac / 255.0f;
5925
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
5926
cmb.tex |= 1;
5927
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5928
GR_COMBINE_FACTOR_LOCAL,
5929
GR_COMBINE_LOCAL_CONSTANT,
5930
GR_COMBINE_OTHER_TEXTURE);
5931
CC_PRIMSUBENV ();
5932
}
5933
else
5934
{
5935
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
5936
GR_COMBINE_FACTOR_ONE,//TEXTURE_RGB,
5937
GR_COMBINE_LOCAL_ITERATED,
5938
GR_COMBINE_OTHER_TEXTURE);//CONSTANT);
5939
MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);
5940
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5941
MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);
5942
USE_T0 ();
5943
MULSHADE_PRIMSUBENV ();
5944
MULSHADE_PRIMLOD();
5945
SUBSHADE_PRIMSUBENV ();
5946
}
5947
}
5948
5949
static void cc__prim_inter_t0_using_t0__mul_shade ()
5950
{
5951
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5952
GR_COMBINE_FACTOR_LOCAL,
5953
GR_COMBINE_LOCAL_ITERATED,
5954
GR_COMBINE_OTHER_TEXTURE);
5955
MOD_0 (TMOD_COL_INTER_TEX_USING_TEX);
5956
MOD_0_COL (rdp.prim_color & 0xFFFFFF00);
5957
USE_T0 ();
5958
}
5959
5960
static void cc__env_inter_t0_using_t0a__mul_shade ()
5961
{
5962
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5963
GR_COMBINE_FACTOR_LOCAL,
5964
GR_COMBINE_LOCAL_ITERATED,
5965
GR_COMBINE_OTHER_TEXTURE);
5966
MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);
5967
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
5968
USE_T0 ();
5969
}
5970
5971
static void cc_shade_mul_prima ()
5972
{
5973
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5974
GR_COMBINE_FACTOR_ONE,
5975
GR_COMBINE_LOCAL_NONE,
5976
GR_COMBINE_OTHER_ITERATED);
5977
MULSHADE_PRIMA ();
5978
}
5979
5980
static void cc_shade_mul_shadea ()
5981
{
5982
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
5983
GR_COMBINE_FACTOR_ONE,
5984
GR_COMBINE_LOCAL_NONE,
5985
GR_COMBINE_OTHER_ITERATED);
5986
MULSHADE_SHADEA ();
5987
}
5988
5989
static void cc__t0_mul_shade__inter_env_using_enva ()
5990
{
5991
// (t0-0)*shade+0, (env-cmb)*env_a+cmb ** INC **
5992
if (cmb.combine_ext)
5993
{
5994
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
5995
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
5996
GR_CMBX_ITRGB, 0,
5997
GR_CMBX_ZERO, 0);
5998
cmb.tex |= 1;
5999
CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,
6000
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,
6001
GR_CMBX_ITALPHA, 0,
6002
GR_CMBX_B, 0);
6003
CC_ENV ();
6004
SETSHADE_A_ENV ();
6005
}
6006
else
6007
{
6008
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6009
GR_COMBINE_FACTOR_LOCAL,
6010
GR_COMBINE_LOCAL_ITERATED,
6011
GR_COMBINE_OTHER_TEXTURE);
6012
INTERSHADE_2 (rdp.env_color & 0xFFFFFF00, rdp.env_color & 0xFF);
6013
USE_T0 ();
6014
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
6015
MOD_0_COL (rdp.env_color & 0xFFFFFF00);
6016
MOD_0_FAC (rdp.env_color & 0xFF);
6017
}
6018
}
6019
6020
static void cc__t0_mul_shade__inter_one_using_shadea ()
6021
{
6022
if (cmb.combine_ext)
6023
{
6024
T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,
6025
GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,
6026
GR_CMBX_ITRGB, 0,
6027
GR_CMBX_ZERO, 0);
6028
cmb.tex |= 1;
6029
CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_X,
6030
GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,
6031
GR_CMBX_ITALPHA, 0,
6032
GR_CMBX_B, 0);
6033
}
6034
else
6035
{
6036
cc_t0_mul_shade ();
6037
}
6038
}
6039
6040
6041
//****************************************************************
6042
6043
static void ac_one ()
6044
{
6045
ACMB (GR_COMBINE_FUNCTION_LOCAL,
6046
GR_COMBINE_FACTOR_NONE,
6047
GR_COMBINE_LOCAL_CONSTANT,
6048
GR_COMBINE_OTHER_NONE);
6049
cmb.ccolor |= 0xFF;
6050
}
6051
6052
static void ac_t0 ()
6053
{
6054
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6055
GR_COMBINE_FACTOR_ONE,
6056
GR_COMBINE_LOCAL_NONE,
6057
GR_COMBINE_OTHER_TEXTURE);
6058
A_USE_T0 ();
6059
}
6060
6061
static void ac_zero ()
6062
{
6063
if (cmb.tex > 0)
6064
{
6065
ac_t0 ();
6066
return;
6067
}
6068
ACMB (GR_COMBINE_FUNCTION_LOCAL,
6069
GR_COMBINE_FACTOR_NONE,
6070
GR_COMBINE_LOCAL_CONSTANT,
6071
GR_COMBINE_OTHER_NONE);
6072
cmb.ccolor &= 0xFFFFFF00;
6073
}
6074
6075
static void ac_t1 ()
6076
{
6077
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6078
GR_COMBINE_FACTOR_ONE,
6079
GR_COMBINE_LOCAL_NONE,
6080
GR_COMBINE_OTHER_TEXTURE);
6081
if (settings.BAR && rdp.tiles[rdp.cur_tile].format == 3)
6082
A_USE_T0 ();
6083
else
6084
A_USE_T1 ();
6085
}
6086
6087
static void ac_prim ()
6088
{
6089
ACMB (GR_COMBINE_FUNCTION_LOCAL,
6090
GR_COMBINE_FACTOR_NONE,
6091
GR_COMBINE_LOCAL_CONSTANT,
6092
GR_COMBINE_OTHER_NONE);
6093
CA_PRIM ();
6094
}
6095
6096
static void ac_primlod ()
6097
{
6098
ACMB (GR_COMBINE_FUNCTION_LOCAL,
6099
GR_COMBINE_FACTOR_NONE,
6100
GR_COMBINE_LOCAL_CONSTANT,
6101
GR_COMBINE_OTHER_NONE);
6102
CA_PRIMLOD ();
6103
}
6104
6105
static void ac_one_sub_prim ()
6106
{
6107
ACMB (GR_COMBINE_FUNCTION_LOCAL,
6108
GR_COMBINE_FACTOR_NONE,
6109
GR_COMBINE_LOCAL_CONSTANT,
6110
GR_COMBINE_OTHER_NONE);
6111
CA_INVPRIM ();
6112
}
6113
6114
static void ac_env ()
6115
{
6116
ACMB (GR_COMBINE_FUNCTION_LOCAL,
6117
GR_COMBINE_FACTOR_NONE,
6118
GR_COMBINE_LOCAL_CONSTANT,
6119
GR_COMBINE_OTHER_NONE);
6120
CA_ENV ();
6121
}
6122
6123
static void ac_shade ()
6124
{
6125
ACMB (GR_COMBINE_FUNCTION_LOCAL,
6126
GR_COMBINE_FACTOR_NONE,
6127
GR_COMBINE_LOCAL_ITERATED,
6128
GR_COMBINE_OTHER_NONE);
6129
}
6130
6131
// ** A+B **
6132
static void ac_t0_add_t1 () //Aded by Gonetz
6133
{
6134
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6135
GR_COMBINE_FACTOR_ONE,
6136
GR_COMBINE_LOCAL_NONE,
6137
GR_COMBINE_OTHER_TEXTURE);
6138
A_T0_ADD_T1 ();
6139
}
6140
6141
static void ac__t0_mul_prim__add__t1_mul_primlod () //Aded by Gonetz
6142
{
6143
if (lod_frac == 0)
6144
{
6145
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6146
GR_COMBINE_FACTOR_LOCAL,
6147
GR_COMBINE_LOCAL_CONSTANT,
6148
GR_COMBINE_OTHER_TEXTURE);
6149
CA_PRIM ();
6150
A_USE_T0 ();
6151
}
6152
else if ((rdp.prim_color&0xFF) == 0)
6153
{
6154
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6155
GR_COMBINE_FACTOR_LOCAL,
6156
GR_COMBINE_LOCAL_CONSTANT,
6157
GR_COMBINE_OTHER_TEXTURE);
6158
CA_PRIMLOD ();
6159
A_USE_T1 ();
6160
}
6161
else
6162
{
6163
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6164
GR_COMBINE_FACTOR_LOCAL,
6165
GR_COMBINE_LOCAL_CONSTANT,
6166
GR_COMBINE_OTHER_TEXTURE);
6167
CA_PRIM ();
6168
A_T0_ADD_T1 ();
6169
}
6170
}
6171
6172
static void ac_t0_add_prim () //Aded by Gonetz
6173
{
6174
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6175
GR_COMBINE_FACTOR_ONE,
6176
GR_COMBINE_LOCAL_CONSTANT,
6177
GR_COMBINE_OTHER_TEXTURE);
6178
CA_PRIM ();
6179
A_USE_T0 ();
6180
}
6181
6182
static void ac_t0_add_env () //Aded by Gonetz
6183
{
6184
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6185
GR_COMBINE_FACTOR_ONE,
6186
GR_COMBINE_LOCAL_CONSTANT,
6187
GR_COMBINE_OTHER_TEXTURE);
6188
CA_ENV ();
6189
A_USE_T0 ();
6190
}
6191
/*
6192
static void ac_t1_add_env () //Added by Gonetz
6193
{
6194
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6195
GR_COMBINE_FACTOR_ONE,
6196
GR_COMBINE_LOCAL_CONSTANT,
6197
GR_COMBINE_OTHER_TEXTURE);
6198
CA_ENV ();
6199
A_USE_T1 ();
6200
}
6201
*/
6202
static void ac__t0_add_t1__add_prim () //Aded by Gonetz
6203
{
6204
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6205
GR_COMBINE_FACTOR_ONE,
6206
GR_COMBINE_LOCAL_CONSTANT,
6207
GR_COMBINE_OTHER_TEXTURE);
6208
CA_PRIM ();
6209
A_T0_ADD_T1 ();
6210
}
6211
6212
static void ac_prim_add_shade () //Aded by Gonetz
6213
{
6214
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6215
GR_COMBINE_FACTOR_ONE,
6216
GR_COMBINE_LOCAL_ITERATED,
6217
GR_COMBINE_OTHER_CONSTANT);
6218
CA_PRIM ();
6219
}
6220
6221
static void ac_env_add_shade () //Aded by Gonetz
6222
{
6223
CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6224
GR_COMBINE_FACTOR_ONE,
6225
GR_COMBINE_LOCAL_ITERATED,
6226
GR_COMBINE_OTHER_CONSTANT);
6227
CA_ENV ();
6228
}
6229
6230
// ** A*B **
6231
static void ac_t0_mul_t0 () //Added by Gonetz
6232
{
6233
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6234
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6235
GR_COMBINE_LOCAL_NONE,
6236
GR_COMBINE_OTHER_TEXTURE);
6237
A_USE_T0 ();
6238
}
6239
6240
static void ac_t0_mul_t1 ()
6241
{
6242
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6243
GR_COMBINE_FACTOR_ONE,
6244
GR_COMBINE_LOCAL_NONE,
6245
GR_COMBINE_OTHER_TEXTURE);
6246
A_T0_MUL_T1 ();
6247
}
6248
6249
static void ac_t0_mul_t1_add_prim ()
6250
{
6251
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6252
GR_COMBINE_FACTOR_ONE,
6253
GR_COMBINE_LOCAL_CONSTANT,
6254
GR_COMBINE_OTHER_TEXTURE);
6255
CA_PRIM ();
6256
A_T0_MUL_T1 ();
6257
}
6258
6259
static void ac_t0_mul_prim ()
6260
{
6261
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6262
GR_COMBINE_FACTOR_LOCAL,
6263
GR_COMBINE_LOCAL_CONSTANT,
6264
GR_COMBINE_OTHER_TEXTURE);
6265
CA_PRIM ();
6266
A_USE_T0 ();
6267
}
6268
6269
static void ac_t0_mul_prim_mul_primlod ()
6270
{
6271
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6272
GR_COMBINE_FACTOR_LOCAL,
6273
GR_COMBINE_LOCAL_CONSTANT,
6274
GR_COMBINE_OTHER_TEXTURE);
6275
CA_PRIM_MUL_PRIMLOD ();
6276
A_USE_T0 ();
6277
}
6278
6279
static void ac_t1_mul_prim ()
6280
{
6281
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6282
GR_COMBINE_FACTOR_LOCAL,
6283
GR_COMBINE_LOCAL_CONSTANT,
6284
GR_COMBINE_OTHER_TEXTURE);
6285
CA_PRIM ();
6286
A_USE_T1 ();
6287
}
6288
6289
//Added by Gonetz
6290
static void ac__t1_sub_one_mul_primlod_add_t0__mul_prim ()
6291
{
6292
if (cmb.combine_ext)
6293
{
6294
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6295
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6296
GR_CMBX_ZERO, 0,
6297
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6298
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6299
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
6300
GR_CMBX_DETAIL_FACTOR, 0,
6301
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6302
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
6303
percent = (float)lod_frac / 255.0f;
6304
}
6305
else
6306
{
6307
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
6308
cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
6309
percent = (255 - lod_frac) / 255.0f;
6310
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
6311
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
6312
}
6313
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6314
GR_COMBINE_FACTOR_LOCAL,
6315
GR_COMBINE_LOCAL_CONSTANT,
6316
GR_COMBINE_OTHER_TEXTURE);
6317
CA_PRIM ();
6318
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6319
cmb.tex |= 3;
6320
}
6321
6322
static void ac__t0_sub_t1_mul_enva_add_t0__mul_prim ()
6323
{
6324
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6325
GR_COMBINE_FACTOR_LOCAL,
6326
GR_COMBINE_LOCAL_CONSTANT,
6327
GR_COMBINE_OTHER_TEXTURE);
6328
CA_PRIM ();
6329
if (cmb.combine_ext)
6330
{
6331
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6332
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6333
GR_CMBX_ZERO, 0,
6334
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6335
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
6336
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6337
GR_CMBX_TMU_CALPHA, 0,
6338
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6339
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
6340
cmb.tex |= 3;
6341
}
6342
else
6343
{
6344
A_T0_MUL_T1 ();
6345
}
6346
}
6347
6348
static void ac__t0_sub_one_mul_enva_add_t0__mul_prim ()
6349
{
6350
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6351
GR_COMBINE_FACTOR_LOCAL,
6352
GR_COMBINE_LOCAL_CONSTANT,
6353
GR_COMBINE_OTHER_TEXTURE);
6354
CA_PRIM ();
6355
if (cmb.combine_ext)
6356
{
6357
T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
6358
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6359
GR_CMBX_TMU_CALPHA, 0,
6360
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6361
SETSHADE_A(0xFF);
6362
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
6363
cmb.tex |= 1;
6364
}
6365
else
6366
{
6367
A_USE_T0 ();
6368
}
6369
}
6370
6371
static void ac__t0_sub_t1_mul_primlod_add_t0__mul_prim ()
6372
{
6373
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6374
GR_COMBINE_FACTOR_LOCAL,
6375
GR_COMBINE_LOCAL_CONSTANT,
6376
GR_COMBINE_OTHER_TEXTURE);
6377
CA_PRIM ();
6378
if (cmb.combine_ext)
6379
{
6380
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6381
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6382
GR_CMBX_ZERO, 0,
6383
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6384
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
6385
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6386
GR_CMBX_DETAIL_FACTOR, 0,
6387
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6388
cmb.tex |= 3;
6389
percent = (float)lod_frac / 255.0f;
6390
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6391
}
6392
else
6393
{
6394
A_T0_INTER_T1_USING_FACTOR (lod_frac);
6395
}
6396
}
6397
6398
static void ac__t1_sub_prim_mul_primlod_add_t0__mul_prim ()
6399
{
6400
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6401
GR_COMBINE_FACTOR_LOCAL,
6402
GR_COMBINE_LOCAL_CONSTANT,
6403
GR_COMBINE_OTHER_TEXTURE);
6404
CA_PRIM ();
6405
if (cmb.combine_ext)
6406
{
6407
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6408
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6409
GR_CMBX_ZERO, 0,
6410
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6411
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6412
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
6413
GR_CMBX_DETAIL_FACTOR, 0,
6414
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6415
cmb.tex |= 3;
6416
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);
6417
percent = (float)lod_frac / 255.0f;
6418
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6419
}
6420
else
6421
{
6422
A_T0_INTER_T1_USING_FACTOR (lod_frac);
6423
}
6424
}
6425
6426
static void ac__t1_sub_t0_mul_enva_add_t1__mul_prim ()
6427
{
6428
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6429
GR_COMBINE_FACTOR_LOCAL,
6430
GR_COMBINE_LOCAL_CONSTANT,
6431
GR_COMBINE_OTHER_TEXTURE);
6432
CA_PRIM ();
6433
if (cmb.combine_ext)
6434
{
6435
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6436
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6437
GR_CMBX_ZERO, 0,
6438
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6439
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
6440
GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6441
GR_CMBX_TMU_CALPHA, 0,
6442
GR_CMBX_B, 0);
6443
cmb.tex |= 3;
6444
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF);
6445
}
6446
else
6447
{
6448
BYTE factor = (BYTE)(rdp.env_color&0xFF);
6449
A_T0_INTER_T1_USING_FACTOR (factor);
6450
}
6451
}
6452
6453
static void ac__t0_sub_one_mul_enva_add_t1__mul_prim ()
6454
{
6455
if (cmb.combine_ext)
6456
{
6457
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6458
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6459
GR_CMBX_ZERO, 0,
6460
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6461
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6462
GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6463
GR_CMBX_TMU_CALPHA, 0,
6464
GR_CMBX_B, 0);
6465
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
6466
cmb.tex |= 3;
6467
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6468
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
6469
GR_CMBX_ITALPHA, 0,
6470
GR_CMBX_ZERO, 0);
6471
CA_ENV ();
6472
SETSHADE_A_PRIM ();
6473
}
6474
else
6475
{
6476
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6477
GR_COMBINE_FACTOR_LOCAL,
6478
GR_COMBINE_LOCAL_ITERATED,
6479
GR_COMBINE_OTHER_TEXTURE);
6480
SETSHADE_A_PRIM ();
6481
SETSHADE_A_ENV ();
6482
A_T0_MUL_T1 ();
6483
}
6484
}
6485
6486
static void ac__t1_mul_prima_add_t0__mul_env ()
6487
{
6488
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6489
GR_COMBINE_FACTOR_LOCAL,
6490
GR_COMBINE_LOCAL_CONSTANT,
6491
GR_COMBINE_OTHER_TEXTURE);
6492
CA_ENV ();
6493
A_T1_MUL_PRIMA_ADD_T0 ();
6494
}
6495
6496
static void ac__t1_mul_enva_add_t0__mul_prim ()
6497
{
6498
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6499
GR_COMBINE_FACTOR_LOCAL,
6500
GR_COMBINE_LOCAL_CONSTANT,
6501
GR_COMBINE_OTHER_TEXTURE);
6502
CA_PRIM ();
6503
A_T1_MUL_ENVA_ADD_T0 ();
6504
}
6505
6506
static void ac_t0_mul_primlod ()
6507
{
6508
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6509
GR_COMBINE_FACTOR_LOCAL,
6510
GR_COMBINE_LOCAL_CONSTANT,
6511
GR_COMBINE_OTHER_TEXTURE);
6512
CA_PRIMLOD ();
6513
A_USE_T0 ();
6514
}
6515
6516
static void ac_t1_mul_primlod ()
6517
{
6518
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6519
GR_COMBINE_FACTOR_LOCAL,
6520
GR_COMBINE_LOCAL_CONSTANT,
6521
GR_COMBINE_OTHER_TEXTURE);
6522
CA_PRIMLOD ();
6523
A_USE_T1 ();
6524
}
6525
6526
//Added by Gonetz
6527
static void ac__t0_add_t1__mul_prim ()
6528
{
6529
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6530
GR_COMBINE_FACTOR_LOCAL,
6531
GR_COMBINE_LOCAL_CONSTANT,
6532
GR_COMBINE_OTHER_TEXTURE);
6533
CA_PRIM ();
6534
A_T0_ADD_T1 ();
6535
}
6536
6537
//Added by Gonetz
6538
static void ac__t0_add_t1__mul_primlod ()
6539
{
6540
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6541
GR_COMBINE_FACTOR_LOCAL,
6542
GR_COMBINE_LOCAL_CONSTANT,
6543
GR_COMBINE_OTHER_TEXTURE);
6544
CA_PRIMLOD ();
6545
A_T0_ADD_T1 ();
6546
}
6547
6548
//Added by Gonetz
6549
static void ac__t0_mul_t1__mul_primlod ()
6550
{
6551
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6552
GR_COMBINE_FACTOR_LOCAL,
6553
GR_COMBINE_LOCAL_CONSTANT,
6554
GR_COMBINE_OTHER_TEXTURE);
6555
CA_PRIMLOD ();
6556
A_T0_MUL_T1 ();
6557
}
6558
6559
static void ac_t0_mul_env ()
6560
{
6561
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6562
GR_COMBINE_FACTOR_LOCAL,
6563
GR_COMBINE_LOCAL_CONSTANT,
6564
GR_COMBINE_OTHER_TEXTURE);
6565
CA_ENV ();
6566
A_USE_T0 ();
6567
}
6568
6569
static void ac_t0_mul_env_mul_primlod ()
6570
{
6571
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6572
GR_COMBINE_FACTOR_LOCAL,
6573
GR_COMBINE_LOCAL_CONSTANT,
6574
GR_COMBINE_OTHER_TEXTURE);
6575
CA_ENV_MUL_PRIMLOD ();
6576
A_USE_T0 ();
6577
}
6578
6579
static void ac_t1_mul_env () //Added by Gonetz
6580
{
6581
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6582
GR_COMBINE_FACTOR_LOCAL,
6583
GR_COMBINE_LOCAL_CONSTANT,
6584
GR_COMBINE_OTHER_TEXTURE);
6585
CA_ENV ();
6586
A_USE_T1 ();
6587
}
6588
6589
static void ac__t1_sub_one_mul_primlod_add_t0__mul_env ()
6590
{
6591
if (cmb.combine_ext)
6592
{
6593
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6594
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6595
GR_CMBX_ZERO, 0,
6596
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6597
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6598
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
6599
GR_CMBX_DETAIL_FACTOR, 0,
6600
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6601
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
6602
percent = (float)lod_frac / 255.0f;
6603
}
6604
else
6605
{
6606
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
6607
cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
6608
percent = (255 - lod_frac) / 255.0f;
6609
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
6610
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
6611
}
6612
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6613
GR_COMBINE_FACTOR_LOCAL,
6614
GR_COMBINE_LOCAL_CONSTANT,
6615
GR_COMBINE_OTHER_TEXTURE);
6616
CA_ENV ();
6617
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6618
cmb.tex |= 3;
6619
}
6620
6621
static void ac_t0_mul_shade ()
6622
{
6623
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6624
GR_COMBINE_FACTOR_LOCAL,
6625
GR_COMBINE_LOCAL_ITERATED,
6626
GR_COMBINE_OTHER_TEXTURE);
6627
A_USE_T0 ();
6628
}
6629
6630
static void ac_t1_mul_shade ()
6631
{
6632
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6633
GR_COMBINE_FACTOR_LOCAL,
6634
GR_COMBINE_LOCAL_ITERATED,
6635
GR_COMBINE_OTHER_TEXTURE);
6636
A_USE_T1 ();
6637
}
6638
6639
//Added by Gonetz
6640
static void ac__t0_add_t1__mul_shade ()
6641
{
6642
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6643
GR_COMBINE_FACTOR_LOCAL,
6644
GR_COMBINE_LOCAL_ITERATED,
6645
GR_COMBINE_OTHER_TEXTURE);
6646
A_T0_ADD_T1 ();
6647
}
6648
6649
static void ac__t1_mul_prima_add_t0__mul_shade ()
6650
{
6651
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6652
GR_COMBINE_FACTOR_LOCAL,
6653
GR_COMBINE_LOCAL_ITERATED,
6654
GR_COMBINE_OTHER_TEXTURE);
6655
A_T1_MUL_PRIMA_ADD_T0 ();
6656
}
6657
6658
//Added by Gonetz
6659
static void ac__t0_sub_t1__mul_shade ()
6660
{
6661
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6662
GR_COMBINE_FACTOR_LOCAL,
6663
GR_COMBINE_LOCAL_ITERATED,
6664
GR_COMBINE_OTHER_TEXTURE);
6665
if (cmb.combine_ext)
6666
{
6667
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6668
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6669
GR_CMBX_ZERO, 0,
6670
GR_CMBX_B, 0);
6671
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6672
GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
6673
GR_CMBX_ZERO, 1,
6674
GR_CMBX_ZERO, 0);
6675
cmb.tex |= 3;
6676
}
6677
else
6678
{
6679
A_T0_SUB_T1 ();
6680
}
6681
}
6682
6683
static void ac__t1_mul_t1_add_t1__mul_shade ()
6684
{
6685
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6686
GR_COMBINE_FACTOR_LOCAL,
6687
GR_COMBINE_LOCAL_ITERATED,
6688
GR_COMBINE_OTHER_TEXTURE);
6689
if (cmb.combine_ext)
6690
{
6691
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6692
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6693
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
6694
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6695
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6696
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6697
GR_CMBX_ZERO, 1,
6698
GR_CMBX_ZERO, 0);
6699
cmb.tex |= 2;
6700
}
6701
else
6702
{
6703
A_USE_T1 ();
6704
}
6705
}
6706
6707
static void ac__t1_mul_enva_add_t0__mul_shade ()
6708
{
6709
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6710
GR_COMBINE_FACTOR_LOCAL,
6711
GR_COMBINE_LOCAL_ITERATED,
6712
GR_COMBINE_OTHER_TEXTURE);
6713
A_T1_MUL_ENVA_ADD_T0 ();
6714
}
6715
6716
static void ac__t1_sub_one_mul_primlod_add_t0__mul_shade ()
6717
{
6718
if (cmb.combine_ext)
6719
{
6720
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6721
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6722
GR_CMBX_ZERO, 0,
6723
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6724
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6725
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
6726
GR_CMBX_DETAIL_FACTOR, 0,
6727
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6728
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
6729
percent = (float)lod_frac / 255.0f;
6730
}
6731
else
6732
{
6733
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
6734
cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
6735
percent = (255 - lod_frac) / 255.0f;
6736
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
6737
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
6738
}
6739
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6740
GR_COMBINE_FACTOR_LOCAL,
6741
GR_COMBINE_LOCAL_ITERATED,
6742
GR_COMBINE_OTHER_TEXTURE);
6743
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6744
cmb.tex |= 3;
6745
}
6746
6747
static void ac__t1_sub_shade_mul_primlod_add_t0__mul_shade ()
6748
{
6749
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6750
GR_COMBINE_FACTOR_LOCAL,
6751
GR_COMBINE_LOCAL_CONSTANT,
6752
GR_COMBINE_OTHER_TEXTURE);
6753
CA_PRIM ();
6754
if (cmb.combine_ext)
6755
{
6756
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6757
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6758
GR_CMBX_ZERO, 0,
6759
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6760
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6761
GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
6762
GR_CMBX_DETAIL_FACTOR, 0,
6763
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6764
cmb.tex |= 3;
6765
percent = (float)lod_frac / 255.0f;
6766
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6767
}
6768
else
6769
{
6770
A_T0_INTER_T1_USING_FACTOR (lod_frac);
6771
}
6772
}
6773
6774
//Added by Gonetz
6775
static void ac_prim_mul_prim ()
6776
{
6777
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6778
GR_COMBINE_FACTOR_LOCAL,
6779
GR_COMBINE_LOCAL_CONSTANT,
6780
GR_COMBINE_OTHER_ITERATED);
6781
CA_PRIM ();
6782
SETSHADE_A_PRIM ();
6783
}
6784
6785
//Added by Gonetz
6786
static void ac_prim_mul_primlod ()
6787
{
6788
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6789
GR_COMBINE_FACTOR_LOCAL,
6790
GR_COMBINE_LOCAL_CONSTANT,
6791
GR_COMBINE_OTHER_ITERATED);
6792
CA_PRIMLOD ();
6793
SETSHADE_A_PRIM ();
6794
}
6795
6796
static void ac_prim_mul_env ()
6797
{
6798
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6799
GR_COMBINE_FACTOR_LOCAL,
6800
GR_COMBINE_LOCAL_CONSTANT,
6801
GR_COMBINE_OTHER_ITERATED);
6802
CA_ENV ();
6803
SETSHADE_A_PRIM ();
6804
}
6805
6806
static void ac__prim_sub_one_mul_primlod_add_t0__mul_env ()
6807
{
6808
if (cmb.combine_ext)
6809
{
6810
T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,
6811
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
6812
GR_CMBX_DETAIL_FACTOR, 0,
6813
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6814
SETSHADE_A_PRIM ();
6815
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
6816
percent = (float)lod_frac / 255.0f;
6817
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6818
cmb.tex |= 1;
6819
}
6820
else
6821
{
6822
A_USE_T0 ();
6823
}
6824
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6825
GR_COMBINE_FACTOR_LOCAL,
6826
GR_COMBINE_LOCAL_CONSTANT,
6827
GR_COMBINE_OTHER_TEXTURE);
6828
CA_ENV ();
6829
}
6830
6831
static void ac_prim_mul_shade ()
6832
{
6833
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6834
GR_COMBINE_FACTOR_LOCAL,
6835
GR_COMBINE_LOCAL_CONSTANT,
6836
GR_COMBINE_OTHER_ITERATED);
6837
CA_PRIM ();
6838
}
6839
6840
static void ac_env_mul_shade ()
6841
{
6842
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6843
GR_COMBINE_FACTOR_LOCAL,
6844
GR_COMBINE_LOCAL_CONSTANT,
6845
GR_COMBINE_OTHER_ITERATED);
6846
CA_ENV ();
6847
}
6848
6849
static void ac_primlod_mul_shade ()
6850
{
6851
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6852
GR_COMBINE_FACTOR_LOCAL,
6853
GR_COMBINE_LOCAL_CONSTANT,
6854
GR_COMBINE_OTHER_ITERATED);
6855
CA_PRIMLOD ();
6856
}
6857
6858
// ** A-B **
6859
static void ac_prim_sub_t0 ()
6860
{
6861
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6862
GR_COMBINE_FACTOR_ONE,
6863
GR_COMBINE_LOCAL_NONE,
6864
GR_COMBINE_OTHER_TEXTURE);
6865
A_USE_T0 ();
6866
6867
MOD_0 (TMOD_FULL_COLOR_SUB_TEX);
6868
MOD_0_COL (rdp.prim_color);
6869
}
6870
6871
// ** A*B+C **
6872
static void ac_t1_mul_prima_add_t0 ()
6873
{
6874
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6875
GR_COMBINE_FACTOR_ONE,
6876
GR_COMBINE_LOCAL_NONE,
6877
GR_COMBINE_OTHER_TEXTURE);
6878
A_T1_MUL_PRIMA_ADD_T0 ();
6879
}
6880
6881
//Added by Gonetz
6882
static void ac_t0_mul_prim_add_env ()
6883
{
6884
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6885
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6886
GR_COMBINE_LOCAL_CONSTANT,
6887
GR_COMBINE_OTHER_ITERATED);
6888
SETSHADE_A_PRIM ();
6889
CA_ENV ();
6890
A_USE_T0 ();
6891
}
6892
6893
//Added by Gonetz
6894
static void ac__t0_add_t1__mul_prim_add_env ()
6895
{
6896
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6897
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6898
GR_COMBINE_LOCAL_CONSTANT,
6899
GR_COMBINE_OTHER_ITERATED);
6900
SETSHADE_A_PRIM ();
6901
CA_ENV ();
6902
A_T0_ADD_T1 ();
6903
}
6904
6905
//Aded by Gonetz
6906
static void ac__t0_inter_t1_using_enva__mul_prim_add_env ()
6907
{
6908
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6909
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6910
GR_COMBINE_LOCAL_CONSTANT,
6911
GR_COMBINE_OTHER_ITERATED);
6912
SETSHADE_A_PRIM ();
6913
CA_ENV ();
6914
BYTE factor = (BYTE)(rdp.env_color&0xFF);
6915
A_T0_INTER_T1_USING_FACTOR (factor);
6916
}
6917
6918
//Aded by Gonetz
6919
static void ac_t0_mul_primlod_add_t0 ()
6920
{
6921
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6922
GR_COMBINE_FACTOR_ONE,
6923
GR_COMBINE_LOCAL_NONE,
6924
GR_COMBINE_OTHER_TEXTURE);
6925
if (cmb.combine_ext)
6926
{
6927
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
6928
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
6929
GR_CMBX_DETAIL_FACTOR, 0,
6930
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
6931
cmb.tex |= 1;
6932
percent = (float)lod_frac / 255.0f;
6933
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
6934
}
6935
else
6936
{
6937
A_USE_T0 ();
6938
}
6939
}
6940
6941
//Aded by Gonetz
6942
static void ac_t1_mul_primlod_add_t0 ()
6943
{
6944
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
6945
GR_COMBINE_FACTOR_ONE,
6946
GR_COMBINE_LOCAL_NONE,
6947
GR_COMBINE_OTHER_TEXTURE);
6948
A_T1_MUL_PRIMLOD_ADD_T0 ();
6949
}
6950
6951
//Aded by Gonetz
6952
static void ac_t0_mul_primlod_add_prim ()
6953
{
6954
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6955
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6956
GR_COMBINE_LOCAL_ITERATED,
6957
GR_COMBINE_OTHER_CONSTANT);
6958
CA_PRIMLOD ();
6959
SETSHADE_A_PRIM ();
6960
A_USE_T0 ();
6961
}
6962
6963
//Aded by Gonetz
6964
static void ac__t0_add_t1__mul_primlod_add_prim ()
6965
{
6966
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6967
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6968
GR_COMBINE_LOCAL_ITERATED,
6969
GR_COMBINE_OTHER_CONSTANT);
6970
CA_PRIMLOD ();
6971
SETSHADE_A_PRIM ();
6972
A_T0_ADD_T1 ();
6973
}
6974
6975
//Added by Gonetz
6976
static void ac_t0_mul_env_add_prim ()
6977
{
6978
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6979
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6980
GR_COMBINE_LOCAL_CONSTANT,
6981
GR_COMBINE_OTHER_ITERATED);
6982
SETSHADE_A_ENV ();
6983
CA_PRIM ();
6984
A_USE_T0 ();
6985
}
6986
6987
//Added by Gonetz
6988
static void ac_t1_mul_prim_add_prim ()
6989
{
6990
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
6991
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
6992
GR_COMBINE_LOCAL_CONSTANT,
6993
GR_COMBINE_OTHER_ITERATED);
6994
SETSHADE_A_PRIM ();
6995
CA_PRIM ();
6996
A_USE_T1 ();
6997
}
6998
6999
//Added by Gonetz
7000
static void ac_prim_mul_shade_add_shade ()
7001
{
7002
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7003
GR_COMBINE_FACTOR_LOCAL,
7004
GR_COMBINE_LOCAL_ITERATED,
7005
GR_COMBINE_OTHER_CONSTANT);
7006
CA_PRIM ();
7007
}
7008
7009
//Added by Gonetz
7010
static void ac_t0_mul_shade_add_prim ()
7011
{
7012
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7013
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7014
GR_COMBINE_LOCAL_CONSTANT,
7015
GR_COMBINE_OTHER_ITERATED);
7016
CA_PRIM ();
7017
A_USE_T0 ();
7018
}
7019
7020
static void ac_t0_mul_shade_add_env ()
7021
{
7022
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7023
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7024
GR_COMBINE_LOCAL_CONSTANT,
7025
GR_COMBINE_OTHER_ITERATED);
7026
CA_ENV ();
7027
A_USE_T0 ();
7028
}
7029
7030
7031
// ** A*B+C*D **
7032
static void ac_t0_mul_prim_add_shade_mul_one_minus_prim ()
7033
{
7034
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7035
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7036
GR_COMBINE_LOCAL_ITERATED,
7037
GR_COMBINE_OTHER_CONSTANT);
7038
MULSHADE_A_1MPRIM ();
7039
CA_PRIM ();
7040
A_USE_T0 ();
7041
}
7042
7043
// ** A*B*C **
7044
static void ac__t0_mul_t1__mul_prim ()
7045
{
7046
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7047
GR_COMBINE_FACTOR_LOCAL,
7048
GR_COMBINE_LOCAL_CONSTANT,
7049
GR_COMBINE_OTHER_TEXTURE);
7050
CA_PRIM ();
7051
A_T0_MUL_T1 ();
7052
}
7053
7054
static void ac__t0_mul_t1__mul_env ()
7055
{
7056
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7057
GR_COMBINE_FACTOR_LOCAL,
7058
GR_COMBINE_LOCAL_CONSTANT,
7059
GR_COMBINE_OTHER_TEXTURE);
7060
CA_ENV ();
7061
A_T0_MUL_T1 ();
7062
}
7063
7064
static void ac__t0_mul_t1__mul_env_mul_shade ()
7065
{
7066
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7067
GR_COMBINE_FACTOR_LOCAL,
7068
GR_COMBINE_LOCAL_ITERATED,
7069
GR_COMBINE_OTHER_TEXTURE);
7070
MULSHADE_A_ENV ();
7071
A_T0_MUL_T1 ();
7072
}
7073
7074
static void ac__t0_mul_t1__mul_prim_mul_shade ()
7075
{
7076
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7077
GR_COMBINE_FACTOR_LOCAL,
7078
GR_COMBINE_LOCAL_ITERATED,
7079
GR_COMBINE_OTHER_TEXTURE);
7080
MULSHADE_A_PRIM ();
7081
A_T0_MUL_T1 ();
7082
}
7083
7084
static void ac__t0_mul_t1__mul_shade ()
7085
{
7086
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7087
GR_COMBINE_FACTOR_LOCAL,
7088
GR_COMBINE_LOCAL_ITERATED,
7089
GR_COMBINE_OTHER_TEXTURE);
7090
A_T0_MUL_T1 ();
7091
}
7092
7093
//Added by Gonetz
7094
static void ac_t0_mul_prim_mul_prim ()
7095
{
7096
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7097
GR_COMBINE_FACTOR_LOCAL,
7098
GR_COMBINE_LOCAL_ITERATED,
7099
GR_COMBINE_OTHER_TEXTURE);
7100
SETSHADE_A_PRIM ();
7101
MULSHADE_A_PRIM ();
7102
A_USE_T0 ();
7103
}
7104
7105
static void ac_t0_mul_prim_mul_env ()
7106
{
7107
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7108
GR_COMBINE_FACTOR_LOCAL,
7109
GR_COMBINE_LOCAL_CONSTANT,
7110
GR_COMBINE_OTHER_TEXTURE);
7111
CA_PRIMENV();
7112
A_USE_T0 ();
7113
}
7114
7115
static void ac_t0_mul_prim_mul_shade ()
7116
{
7117
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7118
GR_COMBINE_FACTOR_LOCAL,
7119
GR_COMBINE_LOCAL_ITERATED,
7120
GR_COMBINE_OTHER_TEXTURE);
7121
MULSHADE_A_PRIM ();
7122
A_USE_T0 ();
7123
}
7124
7125
static void ac_t1_mul_prim_mul_shade ()
7126
{
7127
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7128
GR_COMBINE_FACTOR_LOCAL,
7129
GR_COMBINE_LOCAL_ITERATED,
7130
GR_COMBINE_OTHER_TEXTURE);
7131
MULSHADE_A_PRIM ();
7132
A_USE_T1 ();
7133
}
7134
7135
static void ac_t0_mul_env_mul_shade ()
7136
{
7137
if (rdp.cur_image && (rdp.cur_image->format != 0))
7138
{
7139
ac_shade ();
7140
return;
7141
}
7142
7143
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7144
GR_COMBINE_FACTOR_LOCAL,
7145
GR_COMBINE_LOCAL_ITERATED,
7146
GR_COMBINE_OTHER_TEXTURE);
7147
MULSHADE_A_ENV ();
7148
A_USE_T0 ();
7149
}
7150
7151
static void ac_t1_mul_env_mul_shade ()
7152
{
7153
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7154
GR_COMBINE_FACTOR_LOCAL,
7155
GR_COMBINE_LOCAL_ITERATED,
7156
GR_COMBINE_OTHER_TEXTURE);
7157
MULSHADE_A_ENV ();
7158
A_USE_T1 ();
7159
}
7160
7161
static void ac_t0_mul_primlod_mul_prim () //Aded by Gonetz
7162
{
7163
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7164
GR_COMBINE_FACTOR_LOCAL,
7165
GR_COMBINE_LOCAL_CONSTANT,
7166
GR_COMBINE_OTHER_TEXTURE);
7167
cmb.ccolor |= (DWORD)(lod_frac * (rdp.prim_color&0xFF) / 255);
7168
A_USE_T0 ();
7169
}
7170
7171
// ** (A+B)*C **
7172
static void ac_prim_add_env_mul_t0 () //Aded by Gonetz
7173
{
7174
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7175
GR_COMBINE_FACTOR_LOCAL,
7176
GR_COMBINE_LOCAL_ITERATED,
7177
GR_COMBINE_OTHER_TEXTURE);
7178
SETSHADE_A_PRIM ();
7179
ADDSHADE_A_ENV ();
7180
A_USE_T0 ();
7181
}
7182
7183
static void ac_t1_add_prim_mul_env () //Aded by Gonetz
7184
{
7185
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7186
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7187
GR_COMBINE_LOCAL_ITERATED,
7188
GR_COMBINE_OTHER_CONSTANT);
7189
CA_ENV ();
7190
SETSHADE_A_PRIM ();
7191
SETSHADE_A_ENV ();
7192
A_USE_T1 ();
7193
//(t1+prim)*env = t1*env + prim*env
7194
}
7195
7196
// ** A-B*C **
7197
static void ac_t0_sub_prim_mul_shade ()
7198
{
7199
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
7200
GR_COMBINE_FACTOR_ONE,
7201
GR_COMBINE_LOCAL_ITERATED,
7202
GR_COMBINE_OTHER_TEXTURE);
7203
MULSHADE_A_PRIM ();
7204
A_USE_T0 ();
7205
}
7206
7207
// ** (A-B)*C **
7208
static void ac__t1_mul_primlod_add_t0__sub_env_mul_prim () //Aded by Gonetz
7209
{
7210
if (cmb.combine_ext)
7211
{
7212
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7213
GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,
7214
GR_CMBX_ITALPHA, 0,
7215
GR_CMBX_ZERO, 0);
7216
CA_ENV ();
7217
SETSHADE_A_PRIM ();
7218
}
7219
else
7220
{
7221
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7222
GR_COMBINE_FACTOR_LOCAL,
7223
GR_COMBINE_LOCAL_CONSTANT,
7224
GR_COMBINE_OTHER_TEXTURE);
7225
CA_PRIM ();
7226
}
7227
A_T1_MUL_PRIMLOD_ADD_T0 ();
7228
}
7229
7230
static void ac_one_sub_t0_mul_prim () //Aded by Gonetz
7231
{
7232
ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
7233
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7234
GR_COMBINE_LOCAL_CONSTANT,
7235
GR_COMBINE_OTHER_NONE);
7236
CA_PRIM ();
7237
A_USE_T0 ();
7238
}
7239
7240
static void ac_one_sub_t0_mul_shade () //Aded by Gonetz
7241
{
7242
if (!rdp.hires_tex)
7243
{
7244
ac_zero();
7245
return;
7246
}
7247
ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
7248
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7249
GR_COMBINE_LOCAL_ITERATED,
7250
GR_COMBINE_OTHER_NONE);
7251
A_USE_T0 ();
7252
}
7253
7254
static void ac_one_sub_prim_mul_t0 () //Aded by Gonetz
7255
{
7256
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7257
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
7258
GR_COMBINE_LOCAL_CONSTANT,
7259
GR_COMBINE_OTHER_TEXTURE);
7260
CA_PRIM ();
7261
A_USE_T0 ();
7262
}
7263
7264
static void ac_one_sub_env_mul_t0 () //Aded by Gonetz
7265
{
7266
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7267
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
7268
GR_COMBINE_LOCAL_CONSTANT,
7269
GR_COMBINE_OTHER_TEXTURE);
7270
CA_ENV ();
7271
A_USE_T0 ();
7272
}
7273
7274
static void ac_one_sub_shade_mul_t0 () //Aded by Gonetz
7275
{
7276
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7277
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
7278
GR_COMBINE_LOCAL_ITERATED,
7279
GR_COMBINE_OTHER_TEXTURE);
7280
A_USE_T0 ();
7281
}
7282
7283
static void ac_prim_sub_shade_mul_t0 () //Aded by Gonetz
7284
{
7285
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
7286
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7287
GR_COMBINE_LOCAL_ITERATED,
7288
GR_COMBINE_OTHER_CONSTANT);
7289
CA_PRIM ();
7290
A_USE_T0 ();
7291
}
7292
7293
static void ac_shade_sub_env_mul_t0 () //Aded by Gonetz
7294
{
7295
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
7296
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7297
GR_COMBINE_LOCAL_CONSTANT,
7298
GR_COMBINE_OTHER_ITERATED);
7299
CA_ENV ();
7300
A_USE_T0 ();
7301
}
7302
7303
// ** (A-B)*C*D **
7304
static void ac_one_sub_t0_mul_prim_mul_shade () //Aded by Gonetz
7305
{
7306
ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
7307
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7308
GR_COMBINE_LOCAL_ITERATED,
7309
GR_COMBINE_OTHER_NONE);
7310
MULSHADE_A_PRIM ();
7311
A_USE_T0 ();
7312
}
7313
7314
// ** (A-B)*C+D **
7315
static void ac__t0_sub_prim_mul_shade_add_shade__mul_env () //Aded by Gonetz
7316
{
7317
if (cmb.combine_ext)
7318
{
7319
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7320
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
7321
GR_CMBX_ITALPHA, 0,
7322
GR_CMBX_ITALPHA, 0);
7323
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF) ;
7324
cmb.tex |= 1;
7325
ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
7326
GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7327
GR_CMBX_CONSTANT_ALPHA, 0,
7328
GR_CMBX_ZERO, 0);
7329
CA_ENV();
7330
}
7331
else
7332
{
7333
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7334
GR_COMBINE_FACTOR_LOCAL,
7335
GR_COMBINE_LOCAL_ITERATED,
7336
GR_COMBINE_OTHER_TEXTURE);
7337
MULSHADE_A_ENV ();
7338
MOD_0 (TMOD_TEX_SUB_COL);
7339
MOD_0_COL (rdp.prim_color & 0xFF);
7340
A_USE_T0 ();
7341
}
7342
}
7343
7344
static void ac_t0_sub_one_mul_enva_add_t1 () //Aded by Gonetz
7345
{
7346
if (cmb.combine_ext)
7347
{
7348
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
7349
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
7350
GR_CMBX_ZERO, 0,
7351
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
7352
T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7353
GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
7354
GR_CMBX_TMU_CALPHA, 0,
7355
GR_CMBX_B, 0);
7356
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
7357
cmb.tex |= 3;
7358
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
7359
GR_COMBINE_FACTOR_ONE,
7360
GR_COMBINE_LOCAL_CONSTANT,
7361
GR_COMBINE_OTHER_TEXTURE);
7362
CA_ENV();
7363
}
7364
else
7365
{
7366
ac__t0_mul_t1__mul_env ();
7367
}
7368
}
7369
7370
static void ac_t1_sub_one_mul_enva_add_t0 () //Aded by Gonetz
7371
{
7372
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7373
GR_COMBINE_FACTOR_ONE,
7374
GR_COMBINE_LOCAL_NONE,
7375
GR_COMBINE_OTHER_TEXTURE);
7376
if (cmb.combine_ext)
7377
{
7378
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
7379
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
7380
GR_CMBX_ZERO, 0,
7381
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
7382
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7383
GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
7384
GR_CMBX_TMU_CALPHA, 0,
7385
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
7386
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
7387
SETSHADE_A (0xFF);
7388
cmb.tex |= 3;
7389
}
7390
else
7391
{
7392
A_USE_T0 ();
7393
}
7394
}
7395
7396
static void ac_t1_sub_one_mul_primlod_add_t0 () //Aded by Gonetz
7397
{
7398
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7399
GR_COMBINE_FACTOR_ONE,
7400
GR_COMBINE_LOCAL_NONE,
7401
GR_COMBINE_OTHER_TEXTURE);
7402
if (cmb.combine_ext)
7403
{
7404
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
7405
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
7406
GR_CMBX_ZERO, 0,
7407
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
7408
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7409
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
7410
GR_CMBX_DETAIL_FACTOR, 0,
7411
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
7412
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
7413
percent = (float)lod_frac / 255.0f;
7414
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
7415
cmb.tex |= 3;
7416
}
7417
else
7418
{
7419
// A_T0_MUL_T1 ();
7420
// A_T1_MUL_PRIMLOD_ADD_T0 ();
7421
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;
7422
cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;
7423
percent = (255 - lod_frac) / 255.0f;
7424
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;
7425
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;
7426
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
7427
cmb.tex |= 3;
7428
}
7429
}
7430
7431
static void ac_t1_sub_prim_mul_shade_add_prim () //Aded by Gonetz
7432
{
7433
if (cmb.combine_ext)
7434
{
7435
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
7436
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
7437
GR_CMBX_ITALPHA, 0,
7438
GR_CMBX_B, 0);
7439
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7440
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
7441
GR_CMBX_ZERO, 1,
7442
GR_CMBX_ZERO, 0);
7443
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF) ;
7444
cmb.tex |= 2;
7445
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7446
GR_CMBX_ZERO, GR_FUNC_MODE_X,
7447
GR_CMBX_ZERO, 1,
7448
GR_CMBX_ZERO, 0);
7449
}
7450
else
7451
{
7452
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7453
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7454
GR_COMBINE_LOCAL_CONSTANT,
7455
GR_COMBINE_OTHER_ITERATED);
7456
CA_PRIM ();
7457
MOD_1 (TMOD_TEX_SUB_COL);
7458
MOD_1_COL (rdp.prim_color & 0xFF);
7459
A_USE_T1 ();
7460
}
7461
}
7462
7463
static void ac_t0_sub_env_mul_prim_add_env () //Aded by Gonetz
7464
{
7465
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7466
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7467
GR_COMBINE_LOCAL_CONSTANT,
7468
GR_COMBINE_OTHER_ITERATED);
7469
SETSHADE_A_PRIM ();
7470
CA_ENV1MPRIM ();
7471
A_USE_T0 ();
7472
//(t0-env)*prim+env == t0*prim + env*(1-prim)
7473
}
7474
7475
static void ac__one_sub_t0_mul_t1_add_t0__mul_prim () //Aded by Gonetz
7476
{
7477
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7478
GR_COMBINE_FACTOR_LOCAL,
7479
GR_COMBINE_LOCAL_CONSTANT,
7480
GR_COMBINE_OTHER_TEXTURE);
7481
CA_PRIM ();
7482
rdp.best_tex = 0;
7483
cmb.tex |= 3;
7484
cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL;
7485
cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;
7486
cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA;
7487
}
7488
7489
static void ac_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz
7490
{
7491
ACMB (GR_COMBINE_FUNCTION_BLEND,
7492
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7493
GR_COMBINE_LOCAL_ITERATED,
7494
GR_COMBINE_OTHER_CONSTANT);
7495
SETSHADE_A_PRIM ();
7496
CA (0xFF);
7497
A_USE_T0 ();
7498
}
7499
7500
static void ac_one_sub_t0_mul_env_add_t0 () //Aded by Gonetz
7501
{
7502
ACMB (GR_COMBINE_FUNCTION_BLEND,
7503
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7504
GR_COMBINE_LOCAL_ITERATED,
7505
GR_COMBINE_OTHER_CONSTANT);
7506
SETSHADE_A_ENV ();
7507
CA (0xFF);
7508
A_USE_T0 ();
7509
}
7510
7511
static void ac_one_sub_t0_mul_primlod_add_prim () //Aded by Gonetz
7512
{
7513
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7514
GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA,
7515
GR_COMBINE_LOCAL_ITERATED,
7516
GR_COMBINE_OTHER_CONSTANT);
7517
SETSHADE_A_PRIM ();
7518
CA_PRIMLOD();
7519
A_USE_T0 ();
7520
}
7521
7522
static void ac_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz
7523
{
7524
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7525
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7526
GR_COMBINE_LOCAL_ITERATED,
7527
GR_COMBINE_OTHER_CONSTANT);
7528
CA_INVENV ();
7529
SETSHADE_A_PRIM ();
7530
SETSHADE_A_ENV ();
7531
A_USE_T0 ();
7532
//(prim-t0)*env+t0 = prim*env + t0*(1-env)
7533
}
7534
7535
static void ac_prim_sub_env_mul_t0_add_env ()
7536
{
7537
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7538
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7539
GR_COMBINE_LOCAL_ITERATED,
7540
GR_COMBINE_OTHER_CONSTANT);
7541
CA_PRIM ();
7542
SETSHADE_A_ENV ();
7543
A_USE_T0 ();
7544
}
7545
7546
static void ac_prim_sub_env_mul_t1_add_env ()
7547
{
7548
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7549
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7550
GR_COMBINE_LOCAL_ITERATED,
7551
GR_COMBINE_OTHER_CONSTANT);
7552
CA_PRIM ();
7553
SETSHADE_A_ENV ();
7554
A_USE_T1 ();
7555
}
7556
7557
//Added by Gonetz
7558
static void ac_prim_sub_env_mul_shade_add_env ()
7559
{
7560
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7561
GR_COMBINE_FACTOR_ONE,
7562
GR_COMBINE_LOCAL_CONSTANT,
7563
GR_COMBINE_OTHER_ITERATED);
7564
CA_ENV ();
7565
MULSHADE_A_PRIMSUBENV ();
7566
}
7567
7568
//Added by Gonetz
7569
static void ac_prim_sub_env_mul_shade_add_env_mul_t1 ()
7570
{
7571
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7572
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7573
GR_COMBINE_LOCAL_CONSTANT,
7574
GR_COMBINE_OTHER_ITERATED);
7575
CA_ENV ();
7576
MULSHADE_A_PRIMSUBENV ();
7577
A_USE_T1 ();
7578
}
7579
7580
//Added by Gonetz
7581
static void ac_prim_sub_shade_mul_t0_add_shade ()
7582
{
7583
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7584
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7585
GR_COMBINE_LOCAL_ITERATED,
7586
GR_COMBINE_OTHER_CONSTANT);
7587
CA_PRIM ();
7588
A_USE_T0 ();
7589
}
7590
7591
//Added by Gonetz
7592
static void ac_one_sub_shade_mul_t1_add_shade ()
7593
{
7594
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7595
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
7596
GR_COMBINE_LOCAL_ITERATED,
7597
GR_COMBINE_OTHER_TEXTURE);
7598
A_USE_T1 ();
7599
}
7600
7601
//Added by Gonetz
7602
static void ac_one_sub_env_mul_shade_add_env ()
7603
{
7604
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7605
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,
7606
GR_COMBINE_LOCAL_CONSTANT,
7607
GR_COMBINE_OTHER_ITERATED);
7608
CA_ENV ();
7609
}
7610
7611
//Added by Gonetz
7612
static void ac_env_sub_prim_mul_t0_add_prim ()
7613
{
7614
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7615
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7616
GR_COMBINE_LOCAL_ITERATED,
7617
GR_COMBINE_OTHER_CONSTANT);
7618
CA_ENV ();
7619
SETSHADE_A_PRIM ();
7620
A_USE_T0 ();
7621
}
7622
7623
static void ac_env_sub_prim_mul_shade_add_prim () //Added by Gonetz
7624
{
7625
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7626
GR_COMBINE_FACTOR_ONE,
7627
GR_COMBINE_LOCAL_CONSTANT,
7628
GR_COMBINE_OTHER_ITERATED);
7629
CA_PRIM ();
7630
MULSHADE_A_ENVSUBPRIM ();
7631
}
7632
7633
static void ac_env_sub_primshade_mul_t1_add_primshade ()
7634
{
7635
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7636
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7637
GR_COMBINE_LOCAL_ITERATED,
7638
GR_COMBINE_OTHER_CONSTANT);
7639
CA_ENV ();
7640
MULSHADE_A_PRIM ();
7641
A_USE_T1 ();
7642
}
7643
7644
static void ac_one_sub_prim_mul_t0_add_prim ()
7645
{
7646
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
7647
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7648
GR_COMBINE_LOCAL_ITERATED,
7649
GR_COMBINE_OTHER_CONSTANT);
7650
CA (0xFF);
7651
SETSHADE_A_PRIM ();
7652
A_USE_T0 ();
7653
}
7654
7655
static void ac_one_sub_prim_mul_t0_add__prim_mul_env ()
7656
{
7657
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
7658
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
7659
GR_COMBINE_LOCAL_ITERATED,
7660
GR_COMBINE_OTHER_CONSTANT);
7661
CA_INVPRIM ();
7662
SETSHADE_A_PRIM ();
7663
SETSHADE_A_ENV ();
7664
A_USE_T0 ();
7665
}
7666
7667
// ** A inter B using C **
7668
static void ac_t0_inter_t1_using_prima ()
7669
{
7670
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7671
GR_COMBINE_FACTOR_ONE,
7672
GR_COMBINE_LOCAL_NONE,
7673
GR_COMBINE_OTHER_TEXTURE);
7674
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
7675
A_T0_INTER_T1_USING_FACTOR (factor);
7676
}
7677
7678
static void ac_t1_inter_t0_using_prima ()
7679
{
7680
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7681
GR_COMBINE_FACTOR_ONE,
7682
GR_COMBINE_LOCAL_NONE,
7683
GR_COMBINE_OTHER_TEXTURE);
7684
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
7685
A_T1_INTER_T0_USING_FACTOR (factor);
7686
}
7687
7688
static void ac_t0_inter_t1_using_primlod ()
7689
{
7690
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7691
GR_COMBINE_FACTOR_ONE,
7692
GR_COMBINE_LOCAL_NONE,
7693
GR_COMBINE_OTHER_TEXTURE);
7694
A_T0_INTER_T1_USING_FACTOR (lod_frac);
7695
}
7696
7697
static void ac_t0_inter_t1_using_enva ()
7698
{
7699
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7700
GR_COMBINE_FACTOR_ONE,
7701
GR_COMBINE_LOCAL_NONE,
7702
GR_COMBINE_OTHER_TEXTURE);
7703
BYTE factor = (BYTE)(rdp.env_color&0xFF);
7704
A_T0_INTER_T1_USING_FACTOR (factor);
7705
}
7706
7707
static void ac_t1_inter_t0_using_enva ()
7708
{
7709
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7710
GR_COMBINE_FACTOR_ONE,
7711
GR_COMBINE_LOCAL_NONE,
7712
GR_COMBINE_OTHER_TEXTURE);
7713
BYTE factor = (BYTE)(rdp.env_color&0xFF);
7714
A_T1_INTER_T0_USING_FACTOR (factor);
7715
}
7716
7717
//Added by Gonetz
7718
static void ac_t0_inter_t1_using_t0a ()
7719
{
7720
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7721
GR_COMBINE_FACTOR_ONE,
7722
GR_COMBINE_LOCAL_NONE,
7723
GR_COMBINE_OTHER_TEXTURE);
7724
A_T0_INTER_T1_USING_T0A ();
7725
}
7726
7727
//Added by Gonetz
7728
static void ac_t0_inter_t1_using_t1a ()
7729
{
7730
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7731
GR_COMBINE_FACTOR_ONE,
7732
GR_COMBINE_LOCAL_NONE,
7733
GR_COMBINE_OTHER_TEXTURE);
7734
A_T0_INTER_T1_USING_T1A ();
7735
}
7736
7737
//Added by Gonetz
7738
static void ac_t0_inter_t1_using_shadea ()
7739
{
7740
if (cmb.combine_ext)
7741
{
7742
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7743
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
7744
GR_CMBX_ZERO, 1,
7745
GR_CMBX_ZERO, 0);
7746
}
7747
else
7748
{
7749
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7750
GR_COMBINE_FACTOR_ONE,
7751
GR_COMBINE_LOCAL_NONE,
7752
GR_COMBINE_OTHER_TEXTURE);
7753
}
7754
A_T0_INTER_T1_USING_SHADEA ();
7755
}
7756
7757
// ** (A inter B using C) * D **
7758
7759
static void ac__t0_inter_t1_using_primlod__mul_prim ()
7760
{
7761
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7762
GR_COMBINE_FACTOR_LOCAL,
7763
GR_COMBINE_LOCAL_CONSTANT,
7764
GR_COMBINE_OTHER_TEXTURE);
7765
CA_PRIM ();
7766
A_T0_INTER_T1_USING_FACTOR (lod_frac);
7767
}
7768
7769
static void ac__t1_mul_primlod_add_t0__mul_prim ()
7770
{
7771
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7772
GR_COMBINE_FACTOR_LOCAL,
7773
GR_COMBINE_LOCAL_CONSTANT,
7774
GR_COMBINE_OTHER_TEXTURE);
7775
CA_PRIM ();
7776
A_T1_MUL_PRIMLOD_ADD_T0 ();
7777
}
7778
7779
static void ac__t0_inter_t1_using_primlod__mul_env ()
7780
{
7781
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7782
GR_COMBINE_FACTOR_LOCAL,
7783
GR_COMBINE_LOCAL_CONSTANT,
7784
GR_COMBINE_OTHER_TEXTURE);
7785
CA_ENV ();
7786
A_T0_INTER_T1_USING_FACTOR (lod_frac);
7787
}
7788
7789
static void ac__t1_mul_primlod_add_t0__mul_env ()
7790
{
7791
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7792
GR_COMBINE_FACTOR_LOCAL,
7793
GR_COMBINE_LOCAL_CONSTANT,
7794
GR_COMBINE_OTHER_TEXTURE);
7795
CA_ENV ();
7796
A_T1_MUL_PRIMLOD_ADD_T0 ();
7797
}
7798
7799
static void ac__t0_inter_t1_using_primlod__mul_shade ()
7800
{
7801
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7802
GR_COMBINE_FACTOR_LOCAL,
7803
GR_COMBINE_LOCAL_ITERATED,
7804
GR_COMBINE_OTHER_TEXTURE);
7805
A_T0_INTER_T1_USING_FACTOR (lod_frac);
7806
}
7807
7808
static void ac__t1_mul_primlod_add_t0__mul_shade ()
7809
{
7810
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7811
GR_COMBINE_FACTOR_LOCAL,
7812
GR_COMBINE_LOCAL_ITERATED,
7813
GR_COMBINE_OTHER_TEXTURE);
7814
A_T1_MUL_PRIMLOD_ADD_T0 ();
7815
}
7816
7817
//Added by Gonetz
7818
static void ac__t0_inter_t1_using_prima__mul_env ()
7819
{
7820
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7821
GR_COMBINE_FACTOR_LOCAL,
7822
GR_COMBINE_LOCAL_CONSTANT,
7823
GR_COMBINE_OTHER_TEXTURE);
7824
CA_ENV ();
7825
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
7826
A_T0_INTER_T1_USING_FACTOR (factor);
7827
}
7828
7829
//Added by Gonetz
7830
static void ac__t1_inter_t0_using_t0a__mul_prim ()
7831
{
7832
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7833
GR_COMBINE_FACTOR_LOCAL,
7834
GR_COMBINE_LOCAL_CONSTANT,
7835
GR_COMBINE_OTHER_TEXTURE);
7836
CA_PRIM ();
7837
A_T1_INTER_T0_USING_T0A ();
7838
}
7839
7840
static void ac__t1_inter_t0_using_prima__mul_env ()
7841
{
7842
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7843
GR_COMBINE_FACTOR_LOCAL,
7844
GR_COMBINE_LOCAL_CONSTANT,
7845
GR_COMBINE_OTHER_TEXTURE);
7846
CA_ENV ();
7847
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
7848
A_T1_INTER_T0_USING_FACTOR (factor);
7849
}
7850
7851
//Added by Gonetz
7852
static void ac__t0_inter_t1_using_prima__mul_shade ()
7853
{
7854
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7855
GR_COMBINE_FACTOR_LOCAL,
7856
GR_COMBINE_LOCAL_ITERATED,
7857
GR_COMBINE_OTHER_TEXTURE);
7858
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
7859
A_T0_INTER_T1_USING_FACTOR (factor);
7860
}
7861
7862
static void ac__t1_inter_t0_using_prima__mul_shade ()
7863
{
7864
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7865
GR_COMBINE_FACTOR_LOCAL,
7866
GR_COMBINE_LOCAL_ITERATED,
7867
GR_COMBINE_OTHER_TEXTURE);
7868
BYTE factor = (BYTE)(rdp.prim_color&0xFF);
7869
A_T1_INTER_T0_USING_FACTOR (factor);
7870
}
7871
7872
static void ac__t0_inter_t1_using_enva__mul_prim ()
7873
{
7874
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7875
GR_COMBINE_FACTOR_LOCAL,
7876
GR_COMBINE_LOCAL_CONSTANT,
7877
GR_COMBINE_OTHER_TEXTURE);
7878
CA_PRIM ();
7879
BYTE factor = (BYTE)(rdp.env_color&0xFF);
7880
A_T0_INTER_T1_USING_FACTOR (factor);
7881
}
7882
7883
static void ac__env_sub_one_mul_t1_add_t0__mul_prim ()
7884
{
7885
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7886
GR_COMBINE_FACTOR_LOCAL,
7887
GR_COMBINE_LOCAL_CONSTANT,
7888
GR_COMBINE_OTHER_TEXTURE);
7889
CA_PRIM ();
7890
if (cmb.combine_ext)
7891
{
7892
T1ACMBEXT(GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_X,
7893
GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,
7894
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,
7895
GR_CMBX_ZERO, 0);
7896
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7897
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7898
GR_CMBX_ZERO, 1,
7899
GR_CMBX_ZERO, 0);
7900
SETSHADE_A(0xFF);
7901
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;
7902
cmb.tex |= 3;
7903
}
7904
else
7905
{
7906
BYTE factor = (BYTE)(rdp.env_color&0xFF);
7907
A_T0_INTER_T1_USING_FACTOR (factor);
7908
}
7909
}
7910
7911
static void ac__t0_inter_t1_using_enva__mul_primlod ()
7912
{
7913
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7914
GR_COMBINE_FACTOR_LOCAL,
7915
GR_COMBINE_LOCAL_CONSTANT,
7916
GR_COMBINE_OTHER_TEXTURE);
7917
CA_PRIMLOD ();
7918
BYTE factor = (BYTE)(rdp.env_color&0xFF);
7919
A_T0_INTER_T1_USING_FACTOR (factor);
7920
}
7921
7922
static void ac__t0_inter_t1_using_enva__mul_prim_mul_shade ()
7923
{
7924
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,
7925
GR_COMBINE_FACTOR_LOCAL,
7926
GR_COMBINE_LOCAL_ITERATED,
7927
GR_COMBINE_OTHER_TEXTURE);
7928
MULSHADE_PRIM ();
7929
BYTE factor = (BYTE)(rdp.env_color&0xFF);
7930
A_T0_INTER_T1_USING_FACTOR (factor);
7931
}
7932
7933
//Added by Gonetz
7934
static void ac__t0_inter_t1_using_t0a__mul_prim ()
7935
{
7936
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7937
GR_COMBINE_FACTOR_LOCAL,
7938
GR_COMBINE_LOCAL_CONSTANT,
7939
GR_COMBINE_OTHER_TEXTURE);
7940
CA_PRIM ();
7941
A_T0_INTER_T1_USING_T0A ();
7942
}
7943
7944
//Added by Gonetz
7945
static void ac__t0_inter_t1_using_t1a__mul_prim ()
7946
{
7947
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7948
GR_COMBINE_FACTOR_LOCAL,
7949
GR_COMBINE_LOCAL_CONSTANT,
7950
GR_COMBINE_OTHER_TEXTURE);
7951
CA_PRIM ();
7952
A_T0_INTER_T1_USING_T1A ();
7953
}
7954
7955
//Added by Gonetz
7956
static void ac__t0_inter_t1_using_shadea__mul_prim ()
7957
{
7958
if (cmb.combine_ext)
7959
{
7960
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7961
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
7962
GR_CMBX_CONSTANT_ALPHA, 0,
7963
GR_CMBX_ZERO, 0);
7964
A_T0_INTER_T1_USING_SHADEA ();
7965
}
7966
else
7967
{
7968
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7969
GR_COMBINE_FACTOR_LOCAL,
7970
GR_COMBINE_LOCAL_CONSTANT,
7971
GR_COMBINE_OTHER_TEXTURE);
7972
A_T0_INTER_T1_USING_FACTOR (0x7F);
7973
}
7974
CA_PRIM ();
7975
}
7976
7977
//Added by Gonetz
7978
static void ac__t0_inter_t1_using_shadea__mul_env ()
7979
{
7980
if (cmb.combine_ext)
7981
{
7982
ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
7983
GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,
7984
GR_CMBX_CONSTANT_ALPHA, 0,
7985
GR_CMBX_ZERO, 0);
7986
A_T0_INTER_T1_USING_SHADEA ();
7987
}
7988
else
7989
{
7990
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
7991
GR_COMBINE_FACTOR_LOCAL,
7992
GR_COMBINE_LOCAL_CONSTANT,
7993
GR_COMBINE_OTHER_TEXTURE);
7994
A_T0_INTER_T1_USING_FACTOR (0x7F);
7995
}
7996
CA_ENV ();
7997
}
7998
7999
//Added by Gonetz
8000
static void ac__t0_inter_t1_using_enva__mul_shade ()
8001
{
8002
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8003
GR_COMBINE_FACTOR_LOCAL,
8004
GR_COMBINE_LOCAL_ITERATED,
8005
GR_COMBINE_OTHER_TEXTURE);
8006
BYTE factor = (BYTE)(rdp.env_color&0xFF);
8007
A_T0_INTER_T1_USING_FACTOR (factor);
8008
}
8009
8010
//Added by Gonetz
8011
static void ac__t0_inter_t1_using_primlod__mul_shade_add_prim ()
8012
{
8013
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
8014
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
8015
GR_COMBINE_LOCAL_CONSTANT,
8016
GR_COMBINE_OTHER_ITERATED);
8017
CA_PRIM ();
8018
A_T0_INTER_T1_USING_FACTOR (lod_frac);
8019
}
8020
8021
//Added by Gonetz
8022
static void ac__t0_inter_t1_using_primlod__mul_env_add__t0_inter_t1_using_primlod ()
8023
{
8024
if (cmb.combine_ext)
8025
{
8026
ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,
8027
GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,
8028
GR_CMBX_CONSTANT_ALPHA, 0,
8029
GR_CMBX_B, 0);
8030
CA_ENV ();
8031
}
8032
else
8033
{
8034
ACMB (GR_COMBINE_FUNCTION_BLEND,
8035
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
8036
GR_COMBINE_LOCAL_CONSTANT,
8037
GR_COMBINE_OTHER_ITERATED);
8038
SETSHADE_A_ENV ();
8039
CA (0xFF);
8040
}
8041
A_T0_INTER_T1_USING_FACTOR (lod_frac);
8042
}
8043
8044
static void ac__t1_sub_one_mul_enva_add_t0__mul_prim ()
8045
{
8046
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8047
GR_COMBINE_FACTOR_LOCAL,
8048
GR_COMBINE_LOCAL_CONSTANT,
8049
GR_COMBINE_OTHER_TEXTURE);
8050
CA_PRIM ();
8051
if (cmb.combine_ext)
8052
{
8053
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
8054
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
8055
GR_CMBX_ZERO, 0,
8056
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
8057
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
8058
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
8059
GR_CMBX_DETAIL_FACTOR, 0,
8060
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
8061
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;
8062
cmb.tex |= 3;
8063
cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;
8064
}
8065
else
8066
{
8067
// (t1-1)*env+t0, (cmb-0)*prim+0
8068
A_T0_MUL_T1 ();
8069
8070
MOD_1 (TMOD_TEX_SCALE_FAC_ADD_FAC);
8071
MOD_1_FAC (rdp.env_color & 0xFF);
8072
}
8073
}
8074
8075
static void ac__t1_sub_one_mul_enva_add_t0__mul_shade ()
8076
{
8077
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,
8078
GR_COMBINE_FACTOR_LOCAL,
8079
GR_COMBINE_LOCAL_ITERATED,
8080
GR_COMBINE_OTHER_TEXTURE);
8081
CA_PRIM ();
8082
if (cmb.combine_ext)
8083
{
8084
T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
8085
GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,
8086
GR_CMBX_ZERO, 0,
8087
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
8088
T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,
8089
GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,
8090
GR_CMBX_DETAIL_FACTOR, 0,
8091
GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);
8092
cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | 0xFF ;
8093
percent = (rdp.env_color&0xFF) / 255.0f;
8094
cmb.dc0_detailmax = cmb.dc1_detailmax = percent;
8095
cmb.tex |= 3;
8096
}
8097
else
8098
{
8099
BYTE factor = (BYTE)(rdp.env_color&0xFF);
8100
A_T0_INTER_T1_USING_FACTOR (factor);
8101
}
8102
}
8103
8104
static void ac_zero_sub_prim_mul_t0_add_prim ()
8105
{
8106
ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,
8107
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
8108
GR_COMBINE_LOCAL_CONSTANT,
8109
GR_COMBINE_OTHER_ITERATED);
8110
SETSHADE_A (0);
8111
CA_PRIM ();
8112
A_USE_T0 ();
8113
}
8114
8115
static void ac_one_sub_t0_mul_primshade ()
8116
{
8117
ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,
8118
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
8119
GR_COMBINE_LOCAL_ITERATED,
8120
GR_COMBINE_OTHER_NONE);
8121
MULSHADE_A_PRIM ();
8122
A_USE_T0 ();
8123
}
8124
8125
//****************************************************************
8126
// Combine List
8127
//
8128
// 3/13/02: I have converted the combine descriptions, now using
8129
// the correct values for each slot, instead of a one-for-all-
8130
// slot version. All of the descriptions marked with 'z' have
8131
// not yet been converted or checked. I have not totally redone
8132
// the modes, because they should be for the most part correct
8133
// as they are, even with the wrong descriptions. [Dave2001]
8134
//****************************************************************
8135
8136
//#define cmb(x) (DWORD)(x)
8137
#define cmb(x) (x)
8138
typedef void (*cmb_func)();
8139
8140
struct cmb_list_entry {
8141
DWORD key; cmb_func func;
8142
};
8143
8144
static cmb_list_entry color_cmb_list[] = {
8145
// { #CCSTART }
8146
// intro, Aidyn Chronicles. Added by Gonetz
8147
// (0-cmb)*env+cmb, (t1-t0)*0+t0
8148
{ 0x05083812, cmb(cc_t0) },
8149
//terminal, Spacestation Silicon Valley. Added by Gonetz
8150
// (0-0)*0+cmb, (0-0)*0+prim
8151
{ 0x1fff7fff, cmb(cc_prim) },
8152
//chip in Spacestation Silicon Valley intro. Added by Gonetz
8153
// (0-0)*0+cmb, (prim-0)*shade+0
8154
{ 0x1fffe4f3, cmb(cc_prim_mul_shade) },
8155
// car, beetle adventure racing. Added by Gonetz
8156
// (t1-t0)*t0+t0, (cmb-shade)*prima+shade **can work incorrect**
8157
{ 0x21128a40, cmb(cc__t0_inter_t1_using_t0__sub_shade_mul_prima_add_shade) },
8158
// Treasure opening, zelda
8159
// (t1-prim)*t0+t0, (prim-env)*cmb+env
8160
{ 0x2132a053, cmb(cc_prim_sub_env_mul__t1_sub_prim_mul_t0_add_t0__add_env) },
8161
// Water, doubut no mori
8162
// (t1-0)*t0+t0, (prim-0)*shade+cmb
8163
{ 0x21f204f3, cmb(cc__t1_mul_t0_add_t0__add_prim_mul_shade) },
8164
// enemy transparent, paper mario. Addd by Gonetz
8165
// (t1-t0)*t1+t0, (env-prim)*cmb+prim
8166
{ 0x22126035, cmb(cc_env_sub_prim_mul__t0_inter_t1_using_t1__add_prim) },
8167
// snowhead temple, zelda 2. Addd by Gonetz
8168
// (t1-t0)*t1+t0, (cmb-0)*shade+prim
8169
{ 0x221264f0, cmb(cc__t0_inter_t1_using_t1__mul_shade_add_prim) },
8170
// snowhead temple entrance, zelda 2. Addd by Gonetz
8171
// (t1-t0)*t1+t0, (cmb-0)*prim+shade
8172
{ 0x221283f0, cmb(cc__t0_inter_t1_using_t1__mul_prim_add_shade) },
8173
// teleportation, Spacestation Silicon Valley. Added by Gonetz
8174
// (t1-t0)*t1+t0, (prim-env)*cmb+env
8175
{ 0x2212a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_t1__add_env) },
8176
// Some gannon spell, zelda
8177
// (t1-0)*t1+t0, (prim-0)*cmb+0
8178
{ 0x22f2e0f3, cmb(cc__t1_mul_t1_add_t0__mul_prim) },
8179
// battle tanks 2 [Ogy]
8180
// (1-0)*t1+t0, (env-prim)*cmb+prim
8181
{ 0x22f66035, cmb(cc_env_sub_prim_mul__t0_add_t1__add_prim) },
8182
// GASP Fighters
8183
// (1-0)*t1+t0, (shade-0)*cmb+0
8184
{ 0x22f6e0f4, cmb(cc__t0_add_t1__mul_shade) },
8185
// parts of a car, F1 World Grand Prix. Added by Gonetz
8186
// (1-0)*t1+t0, (cmb-0)*shade+0
8187
{ 0x22f6e4f0, cmb(cc__t0_add_t1__mul_shade) },
8188
// ???, zelda
8189
// (noise-0)*t1+t0, (prim-env)*cmb+env
8190
{ 0x22f7a053, cmb(cc_prim_sub_env_mul__t0_add_t1__add_env) },
8191
// flashing arrow over buoy, wave race. Added by Gonetz
8192
// (t1-t0)*prim+t0, (env-cmb)*enva+cmb ** INC **
8193
{ 0x23120c05, cmb(cc__t0_inter_t1_using_prim__inter_env_using_enva) },
8194
// ground, zelda2. Added by Gonetz
8195
// (t1-t0)*prim+t0, (cmb-0)*shade+0
8196
{ 0x2312e4f0, cmb(cc__t0_inter_t1_using_prim__mul_shade) },
8197
// wwf rules
8198
// (env-t0)*prim+t0
8199
{ 0x23152315, cmb(cc_t0_inter_env_using_prim) },
8200
// Paper Mario
8201
// (1-t0)*prim+t0, (1-t0)*t0+cmb ** INC **
8202
{ 0x23160116, cmb(cc_t0_add_prim_mul_one_sub_t0_add_t0) },
8203
// intro, castlevania. Added by Gonetz
8204
// (1-t0)*prim+t0
8205
{ 0x23162316, cmb(cc_one_sub_t0_mul_prim_add_t0) },
8206
// Explosions, aerofighter's assault
8207
// (1-t0)*prim+t0, (shade-0)*cmb+0
8208
{ 0x2316e0f4, cmb(cc_t0_mul_shade) },
8209
//beetle adventure racing. Added by Gonetz
8210
// (1-t0)*prim+t0, (cmb-0)*shade+0 **INC**
8211
{ 0x2316e4f0, cmb(cc_one_sub_t0_mul_prim_mul_shade) },
8212
// Unknown player background, smash bros
8213
// (noise-t0)*prim+t0 ** INC **
8214
// 0x23172317, cmb(cc_t0),
8215
{ 0x23172317, cmb(cc_t0_inter_noise_using_prim) },
8216
// paper mario. Added by Gonetz
8217
// (noise-prim)*prim+t0 ** INC **
8218
{ 0x23372337, cmb(cc_t0_add_prim) },
8219
// strange mirror in stone temple, zelda 2. Added by Gonetz
8220
// (prim-env)*prim+t0, (cmb-0)*prim+0 ** INC **
8221
{ 0x2353e3f0, cmb(cc__prim_sub_env_mul_prim_add_t0__mul_prim) },
8222
// Gilded sword, zelda 2. Added by Gonetz
8223
// (shade-env)*prim+t0, (cmb-0)*shade+env ** INC **
8224
{ 0x2354a4f0, cmb(cc__t0_add_prim_mul_shade__mul_shade_add_env) },
8225
// Razor sword, zelda 2. Added by Gonetz
8226
// (shade-env)*prim+t0, (cmb-0)*shade+0 ** INC **
8227
{ 0x2354e4f0, cmb(cc__t0_add_prim_mul_shade__mul_shade) },
8228
// menu, Mischief Makers. Added by Gonetz
8229
// (0-env)*prim+t0, (cmb-0)*shade+0
8230
{ 0x235f235f, cmb(cc_t0_sub__prim_mul_env) },
8231
// Deadly Arts logo. Added by Gonetz
8232
// (t0-0)*prim+t0
8233
{ 0x23f123f1, cmb(cc_t0_mul_prim) },
8234
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
8235
// (shade-0)*prim+t0, (cmb-0)*shade+0 ** INC **
8236
{ 0x23f4e4f0, cmb(cc_t0_mul_shade) },
8237
// Mischief Makers logo. Added by Gonetz
8238
// (env-0)*prim+t0
8239
{ 0x23f523f5, cmb(cc_prim_mul_env_add_t0) },
8240
// Taken out bomb, zelda
8241
// (1-0)*prim+t0
8242
{ 0x23f623f6, cmb(cc_t0_add_prim) },
8243
// Jabu-Jabu's Belly, zelda
8244
// (noise-0)*prim+t0
8245
{ 0x23f723f7, cmb(cc_t0_add_prim) },
8246
// carmagedon
8247
// (0-0)*prim+t0
8248
{ 0x23ff23ff, cmb(cc_t0) },
8249
// water, diddy kong racing. Added by Gonetz
8250
// (t1-t0)*shade+t0, (env-cmb)*env_a+cmb **INC**
8251
{ 0x24120c05, cmb(cc__t0_inter_t1_using_shade__inter_env_using_enva) },
8252
// ground, f-zero x
8253
// (prim-t0)*shade+t0 ** INC **
8254
{ 0x24132413, cmb(cc__one_sub_prim_mul_shade__mul_t0_add__prim_mul_shade) },
8255
// intro, F1 Racing Championship. Added by Gonetz
8256
// (env-t0)*shade+t0 ** INC *
8257
{ 0x24152415, cmb(cc_one_sub_t0_mul_shade_add_t0) },
8258
// Sky, pilotwings
8259
// (1-t0)*shade+t0
8260
{ 0x24162416, cmb(cc_one_sub_t0_mul_shade_add_t0) },
8261
// zelda 2 [Ogy]. Added by Gonetz
8262
// (prim-env)*shade+t0, (prim-prim)*shade+cmb ** INC ** ?
8263
{ 0x24530433, cmb(cc_prim_sub_env_mul_shade_add_t0) },
8264
// waves, Dr. Mario
8265
// (0-center)*shade+t0
8266
{ 0x246f246f, cmb(cc_t0_sub_shade) },
8267
// lums, Rayman2. Added by Gonetz
8268
// (t0-0)*shade+t0 ** INC **
8269
{ 0x24f124f1, cmb(cc_t0) }, //this one works better
8270
// 0x24f124f1, cmb(cc_t0_mul_shade),
8271
// Goemon, mystical ninja. Added by Gonetz
8272
// (prim-0)*shade+t0
8273
{ 0x24f324f3, cmb(cc_t0_add_prim_mul_shade) },
8274
// Sky, waverace
8275
//z (t1-t0)*env+t0 ** INC **
8276
{ 0x25122512, cmb(cc_t0_inter_t1_using_env) },
8277
// Rare logo, Jet Force. Added by Gonetz
8278
// (t1-t0)*env+t0, (cmb-0)*prim+0 ** INC **
8279
{ 0x2512e3f0, cmb(cc__t0_inter_t1_using_enva__mul_prim) },
8280
// ridge recer, unimp log. Added by Gonetz
8281
// (t1-t0)*env+t0, (cmb-0)*shade+0 ** INC **
8282
{ 0x2512e4f0, cmb(cc__t0_inter_t1_using_env__mul_shade) },
8283
// menu, Mischief Makers. Added by Gonetz
8284
//(prim-t0)*env+t0 ** INC **
8285
{ 0x25132513, cmb(cc_one_sub_env_mul_t0_add_prim_mul_env) },
8286
// Battle border, quest64
8287
// (1-t0)*env+t0
8288
{ 0x25162516, cmb(cc_one_sub_env_mul_t0_add_env) },
8289
// Paper Mario
8290
// (noise-t0)*env+t0
8291
{ 0x25172517, cmb(cc_t0_inter_noise_using_env) },
8292
// the lamp in the bomb shop in town, zelda 2 [Ogy]. Added by Gonetz
8293
// (t0-t1)*env+t0, (1-env)*prim+cmb ** INC **
8294
{ 0x25210356, cmb(cc_one_sub_env_mul_prim_add__t0_inter_t1_using_env) },
8295
// Darmani's necklace, zelda 2 [Ogy]. Added by Gonetz
8296
// (prim-shade)*env+t0, (cmb-0)*shade+0 ** INC **
8297
{ 0x2543e4f0, cmb(cc_t0_mul_shade_add_prim_mul_env) },
8298
// 0x2543e4f0, cmb(cc_t0_mul_shade),
8299
// mystical ninja. Added by Gonetz
8300
// (1-0)*env+t0
8301
{ 0x25f625f6, cmb(cc_t0_add_env) },
8302
// smoke, Starshot. Added by Gonetz
8303
// (1-0)*env+t0, (1-0)*cmb+0
8304
{ 0x25f6e0f6, cmb(cc_t0_add_env) },
8305
// mega shock, Paper Mario. Added by Gonetz
8306
// (t1-0)*scale+t0, (env-center)*cmb+prim
8307
{ 0x26f26065, cmb(cc__t0_add_t1__mul_env_add_prim) },
8308
// character select, Duck Dodgers. Added by Gonetz
8309
// (prim-t0)*t0_alpha+t0, (cmb-0)*shade+0 **INC**
8310
{ 0x2813e4f0, cmb(cc__t0_inter_prim_using_t0a__mul_shade) },
8311
// intro, Duck Dodgers. Added by Gonetz
8312
// (shade-t0)*t0_alpha+t0 **INC**
8313
{ 0x28142814, cmb(cc_t0) },
8314
// F1 World Grand Prix. Added by Gonetz
8315
// (prim-0)*t0_a+t0, (cmb-0)*shade+0 ** INC **
8316
{ 0x28f3e4f0, cmb(cc__t0a_mul_prim_add_t0__mul_shade) },
8317
// battle tanks 2 [Ogy]
8318
// (env-0)*t0_a+t0, (cmb-0)*shade+0
8319
{ 0x28f5e4f0, cmb(cc__t0a_mul_env_add_t0__mul_shade) },
8320
// blastcorps, unimp log. Added by Gonetz
8321
// (t1-t0)*t1_alpha+t0
8322
{ 0x29122912, cmb(cc_t0_inter_t1_using_t1a) },
8323
// paper mario. Added by Gonetz
8324
// (t1-t0)*t1_alpha+t0, (cmb-env)*env_a+env
8325
{ 0x2912ac50, cmb(cc__t0_inter_t1_using_t1a__sub_env_mul_enva_add_env) },
8326
// Rally 2000. Added by Gonetz
8327
// (t1-t0)*t1_alpha+t0, (cmb-0)*shade+0
8328
{ 0x2912e4f0, cmb(cc__t0_inter_t1_using_t1a__mul_shade) },
8329
// ??? in zelda ending, zelda
8330
// (1-0)*t1_alpha+t0, (prim-env)*cmb+env
8331
{ 0x29f6a053, cmb(cc_prim_sub_env_mul__t0_add_t1a__add_env) },
8332
// Sky, zelda
8333
//z (t1-t0)*prim_a+t0
8334
{ 0x2a122a12, cmb(cc_t0_inter_t1_using_prima) },
8335
// battle tanks [Ogy]
8336
// (t1-t0)*prim_a+t0, (env-prim)*cmb+prim
8337
{ 0x2a126035, cmb(cc_env_sub_prim_mul__t0_inter_t1_using_prima__add_prim) },
8338
// clothes, zelda 2. Added by Gonetz
8339
// (t1-t0)*prim_a+t0, (prim-env)*cmb+env
8340
{ 0x2a12a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_prima__add_env) },
8341
// flame, Doraemon 2. Added by Gonetz
8342
// (t1-t0)*prim_a+t0, (cmb-0)*prim+0
8343
{ 0x2a12e3f0, cmb(cc__t0_inter_t1_using_prima__mul_prim) },
8344
// logo, PD. Added by Gonetz
8345
// (t1-t0)*prim_a+t0, (cmb-0)*shade+0
8346
{ 0x2a12e4f0, cmb(cc__t0_inter_t1_using_prima__mul_shade) },
8347
// 1080 snowboarding [Ogy] - 7/03/02 fixed by Dave2001. 15 Mar 2005 fixed by Gonetz.
8348
// (prim-t0)*prim_a+t0
8349
{ 0x2a132a13, cmb(cc_t0_inter_prim_using_prima) },
8350
// menu background, Paper Mario
8351
// (prim-t0)*prim_a+t0, (prim-t1)*prim_a+t1
8352
{ 0x2a134a23, cmb(cc_t0_inter_prim_using_prima) },
8353
// 0x2a134a23, cmb(cc_t0),
8354
// Mickey USA
8355
// (prim-t0)*prim_a+t0, (cmb-0)*shade+0 ** INC **
8356
{ 0x2a13e4f0, cmb(cc_t0_mul_shade) },
8357
// gunfire, Sin and Punishmen. Added by Gonetz
8358
// (env-t0)*prima+t0 **INC**
8359
{ 0x2a152a15, cmb(cc_t0_inter_env_using_prima) },
8360
// Mystical Ninja
8361
// (0-t0)*prima+t0, (prim-env)*cmb+env ** INC **
8362
{ 0x2a1fa053, cmb(cc_prim_sub_env_mul__t0_sub_t0_mul_prima__add_env) },
8363
// arena, Pokemon Stadium 2. Added by Gonetz
8364
// (shade-prim)*prim_a+t0 ** INC **
8365
{ 0x2a342a34, cmb(cc_t0_mul_shade) },
8366
// Paper Mario
8367
// (t1-k4)*prim_a+t0, (t1-k4)*cmb_a+cmb ** INC **
8368
{ 0x2a720772, cmb(cc_t0_add_t1) },
8369
// GASP Fighters. Added by Gonetz
8370
// (t0-0)*prim_a+t0, (cmb-center)*scale+0 ** INC **
8371
{ 0x2af1e660, cmb(cc_t0_mul_prima) },
8372
// F1 World Grand Prix. Added by Gonetz
8373
// (t1-0)*prim_a+t0, (cmb-0)*shade+env
8374
{ 0x2af2a4f0, cmb(cc__t1_mul_prima_add_t0__mul_shade_add_env) },
8375
// tidal wave, Paper Mario. Added by Gonetz
8376
// (prim-0)*prim_a+t0
8377
{ 0x2af32af3, cmb(cc_prim_mul_prima_add_t0) },
8378
//Spacestation Silicon Valley intro. Added by Gonetz
8379
// (t1-t0)*shade_alpha+t0, (prim-shade)*cmb+shade ** INC **
8380
{ 0x2b128043, cmb(cc_prim_sub_shade_mul__t0_inter_t1_using_shadea__add_shade) },
8381
// water, Rocket Robot in Wheels
8382
// (t1-t0)*shade_alpha+t0, (env-shade)*cmb+shade ** INC **
8383
{ 0x2b128045, cmb(cc_env_sub_shade_mul__t0_inter_t1_using_shadea__add_shade) },
8384
// arena, Pokemon Stadium 2
8385
// (t1-t0)*shade_alpha+t0, (cmb-prim)*env+shade ** INC **
8386
{ 0x2b128530, cmb(cc__t0_inter_t1_using_shadea__sub_prim_mul_env_add_shade) },
8387
// Rocket Robot in Wheels intro
8388
// (t1-t0)*shade_a+t0, (shade-0)*cmb+0 ** INC **
8389
{ 0x2b12e0f4, cmb(cc__t0_inter_t1_using_shadea__mul_shade) },
8390
// water, Mickey USA
8391
// (t1-t0)*shade_a+t0, (cmb-0)*shade+0 ** INC **
8392
{ 0x2b12e4f0, cmb(cc__t0_inter_t1_using_shadea__mul_shade) },
8393
// Extreme G. Added by Gonetz
8394
// (shade-t0)*shade_alpha+t0
8395
{ 0x2b142b14, cmb(cc_shade_sub_t0_mul_shadea_add_t0) },
8396
// Jet Force Gemini. Added by Gonetz
8397
// (shade-t0)*shade_alpha+t0, (cmb-0)*prim+0 ** INC **
8398
{ 0x2b14e3f0, cmb(cc_t0_mul_prim_add_shade_mul_shadea_mul_prim) },
8399
// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
8400
// (t1-0)*shade_alpha+t0, (prim-env)*cmb+env ** INC **
8401
{ 0x2bf2a053, cmb(cc_prim_sub_env_mul__t0_add_t1__add_env) },
8402
// pads, Pokemon Stadium 2. Added by Gonetz
8403
// (0-0)*shade_alpha+t0, (prim-env)*cmba+env
8404
{ 0x2bffa753, cmb(cc_prim_sub_env_mul_t0a_add_env) },
8405
// paper mario. Added by Gonetz
8406
// (t1-t0)*env_a+t0, (1-cmb)*prim+cmb
8407
{ 0x2c120306, cmb(cc_one_sub__t0_inter_t1_using_enva__mul_prim_add__t0_inter_t1_using_enva) },
8408
// Amoeba boss, water temple, zelda
8409
// (t1-t0)*env_a+t0, (cmb-env)*prim+t0 ** INC **
8410
{ 0x2c122350, cmb(cc__t0_inter_t1_using_enva__sub_env) },
8411
// paper mario. Added by Gonetz
8412
// (t1-t0)*env_a+t0
8413
{ 0x2c122c12, cmb(cc_t0_inter_t1_using_enva) },
8414
// paper mario. Added by Gonetz
8415
// (t1-t0)*env_a+t0, (1-prim)*cmb+prim
8416
{ 0x2c126036, cmb(cc_one_sub_prim_mul__t0_inter_t1_using_enva__add_prim) },
8417
// water, jet force. Added by Gonetz
8418
// (t1-t0)*env_a+t0, (prim-shade)*cmb+shade
8419
{ 0x2c128043, cmb(cc_prim_sub_shade_mul__t0_inter_t1_using_enva__add_shade) },
8420
// Faries, zelda
8421
//z (t1-t0)*env_a+t0, (prim-env)*cmb+env
8422
{ 0x2c12a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env) },
8423
// paper mario. Added by Gonetz
8424
// (t1-t0)*env_a+t0, (prim-center)*cmb+env
8425
{ 0x2c12a063, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env) },
8426
// pads, Pokemon Stadium 2. Added by Gonetz
8427
// (t1-t0)*env_a+t0, (cmb-prim)*shade+env ** INC **
8428
{ 0x2c12a430, cmb(cc__t0_inter_t1_using_enva__mul_shade_add_env) },
8429
// Scary dead thing boss, zelda
8430
// (t1-t0)*env_a+t0, (cmb-t1)*cmb_a+env
8431
{ 0x2c12a720, cmb(cc__t0_inter_t1_using_enva__mul_env) },
8432
// something in a menu, PokemonStadium2, [Raziel64]
8433
// (t1-t0)*env_a+t0, (prim-env)*cmb_a+env
8434
{ 0x2c12a753, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_enva_alpha__add_env) },
8435
// Water in zora's place, zelda
8436
// (t1-t0)*env_a+t0, (cmb-0)*prim+0
8437
{ 0x2c12e3f0, cmb(cc__t0_inter_t1_using_enva__mul_prim) },
8438
// Ground, zelda
8439
//z (t1-t0)*env_a+t0, (cmb-k5)*shade+cmb_a
8440
{ 0x2c12e4f0, cmb(cc__t0_inter_t1_using_enva__mul_shade) },
8441
// zelda, uninmp log. Added by Gonetz
8442
//(t1-t0)*env_a+t0, (cmb-0)*env+0
8443
{ 0x2c12e5f0, cmb(cc__t0_inter_t1_using_enva__mul_env) },
8444
// Spheres, waverace
8445
//z (env-t0)*env_a+t0
8446
{ 0x2c152c15, cmb(cc_t0_inter_env_using_enva) },//cmb(cc_t0) },
8447
// backgrounds, Mario Golf. Added by Gonetz
8448
// (env-t0)*env_a+t0, (shade-0)*cmb+0
8449
{ 0x2c15e0f4, cmb(cc__t0_inter_env_using_enva__mul_shade) },
8450
// ground on Volcano level, DKR, [Raziel64]
8451
// (env-t0)*env_a+t0, (cmb-0)*shade+0
8452
{ 0x2c15e4f0, cmb(cc__t0_inter_env_using_enva__mul_shade) },
8453
// Nintendo 'N', zelda
8454
//z (t0-prim)*env_a+t0, (prim-env)*cmb+env
8455
{ 0x2c31a053, cmb(cc_prim_sub_env_mul__t0_sub_prim_mul_enva_add_t0__add_env) },
8456
// Nintendo title & saria's song, zelda
8457
//z (t1-prim)*env_a+t0, (prim-env)*cmb+env
8458
{ 0x2c32a053, cmb(cc_prim_sub_env_mul__t1_sub_prim_mul_enva_add_t0__add_env) },
8459
// Hover boots flying, zelda
8460
// (t1-prim)*env_a+t0, (prim-0)*cmb+env
8461
{ 0x2c32a0f3, cmb(cc__t1_sub_prim_mul_enva_add_t0__mul_prim_add_env) },
8462
// star beam, paper mario
8463
// (prim-env)*env_a+t0
8464
{ 0x2c532c53, cmb(cc_prim_sub_env_mul_enva_add_t0) },
8465
// Kotake & koume's hair, zelda
8466
// (t1-0)*env_a+t0, (prim-env)*cmb+env
8467
{ 0x2cf2a053, cmb(cc_prim_sub_env_mul__t1_mul_enva_add_t0__add_env) },
8468
//Goldeneye, [Jeremy]. Added by Gonetz
8469
// (t0-t0)*lodf+t0, (cmb-0)*prim+0
8470
{ 0x2d11e3f0, cmb(cc_t0_mul_prim) },
8471
// Indy Racing 2000. Added by Gonetz
8472
// (t1-t0)*lodf+t0, (env-cmb)*prima+cmb ** INC **
8473
{ 0x2d120a05, cmb(cc_t0_inter_t1_using_primlod) },
8474
// (t1-t0)*lodf+t0
8475
{ 0x2d122d12, cmb(cc_t0_inter_t1_using_primlod) },
8476
//broken wall, beetle adventure racing. Added by Gonetz
8477
// (t1-t0)*lodf+t0, (shade-prim)*cmb+prim
8478
{ 0x2d126034, cmb(cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim) },
8479
//Intro, CBFD. Added by Gonetz
8480
// (t1-t0)*lodf+t0, (shade-env)*cmb+prim
8481
// 0x2d126054, cmb(cc_shade_sub_env_mul_t0_add_prim) },
8482
{ 0x2d126054, cmb(cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_prim) },
8483
// bassmasters 2000 [Ogy]
8484
// (t1-t0)*lodf+t0, (env-0)*cmb+prim ** INC **
8485
{ 0x2d1260f5, cmb(cc_t0_mul_env_add_prim) },
8486
// sign, CBFD. Added by Gonetz
8487
// (t1-t0)*lodf+t0, (cmb-env)*shade+prim ** INC **
8488
{ 0x2d126450, cmb(cc_t0_sub_env_mul_shade_add_prim) },
8489
// landscape, Cruis'n Exotica. Added by Gonetz
8490
// (t1-t0)*lodf+t0, (cmb-0)*shade+prim
8491
{ 0x2d1264f0, cmb(cc__t0_inter_t1_using_primlod__mul_shade_add_prim) },
8492
// blast corps [Ogy]
8493
// (t1-t0)*lodf+t0, (0-0)*0+shade
8494
{ 0x2d129fff, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },
8495
// End of level, zelda
8496
// (t1-t0)*lodf+t0, (prim-env)*cmb+env
8497
{ 0x2d12a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env) },
8498
// Rocket Robot in Wheels intro
8499
// (t1-t0)*lodf+t0, (shade-env)*cmb+env
8500
{ 0x2d12a054, cmb(cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_env) },
8501
// basket, Fox Sport
8502
// (t1-t0)*lodf+t0, (prim-env)*t0+env
8503
{ 0x2d12a153, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env) },
8504
// paper mario. Added by Gonetz
8505
// (t1-t0)*lodf+t0, (cmb-0)*prim+env ** INC **
8506
{ 0x2d12a3f0, cmb(cc__t0_inter_t1_using_primlod__mul_prim_add_env) },
8507
// Tony Hawk Pro Skater
8508
// (t1-t0)*lodf+t0, (cmb-0)*shade+env
8509
{ 0x2d12a4f0, cmb(cc__t0_inter_t1_using_primlod__mul_shade_add_env) },
8510
// part of a building, Spiderman. Added by Gonetz
8511
// (t1-t0)*lodf+t0, (cmb-env)*cmba+env ** INC **
8512
{ 0x2d12a750, cmb(cc_t0_inter_t1_using_primlod) },
8513
// Mike Piazza's Strike Zone
8514
// (t1-t0)*lodf+t0, (shade-prim)*cmb+0
8515
{ 0x2d12e034, cmb(cc_shade_sub_prim_mul__t0_inter_t1_using_primlod) },
8516
// intro, F1 Racing Championship. Added by Gonetz
8517
// (t1-t0)*lodf+t0, (shade-env)*cmb+0
8518
{ 0x2d12e054, cmb(cc_shade_sub_env_mul__t0_inter_t1_using_primlod) },
8519
// stands, F1 Racing Championship. Added by Gonetz
8520
// (t1-t0)*lodf+t0, (1-env)*cmb+0
8521
{ 0x2d12e056, cmb(cc_one_sub_env_mul__t0_inter_t1_using_primlod) },
8522
// court, Mario Tennis. Added by Gonetz
8523
// (t1-t0)*lodf+t0, (prim-0)*cmb+0
8524
{ 0x2d12e0f3, cmb(cc__t0_inter_t1_using_primlod__mul_prim) },
8525
// Rocket Robot in Wheels intro
8526
// (t1-t0)*lodf+t0, (shade-0)*cmb+0
8527
{ 0x2d12e0f4, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },
8528
// cars wheels, SF Rush 2049. Added by Gonetz
8529
// (t1-t0)*lodf+t0, (cmb-0)*prim+0
8530
{ 0x2d12e3f0, cmb(cc__t0_inter_t1_using_primlod__mul_prim) },
8531
// Bridge, sf rush
8532
// (t1-t0)*lodf+t0, (cmb-0)*shade+0
8533
{ 0x2d12e4f0, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },
8534
// blast corps [Ogy]
8535
// (t1-t0)*lodf+t0, (t0-0)*shade+0
8536
{ 0x2d12e4f1, cmb(cc_t0_mul_shade) },
8537
// field, Mike Piazza's Strike Zone
8538
// (t1-t0)*lodf+t0, (cmb-prim)*env+0 ** INC **
8539
{ 0x2d12e530, cmb(cc__t0_inter_t1_using_primlod__mul_env) },
8540
// radar, Perfect Dark
8541
// (t1-t0)*lodf+t0, (cmb-0)*env+0
8542
{ 0x2d12e5f0, cmb(cc__t0_inter_t1_using_primlod__mul_env) },
8543
// planet, Blast Corps
8544
// (t1-t0)*lodf+t0, (cmb-0)*prima+0
8545
{ 0x2d12eaf0, cmb(cc__t0_inter_t1_using_primlod__mul_prima) },
8546
// zelda 2. Added by Gonetz
8547
// (t0-t0)*primlod+t0, (prim-env)*cmb+env
8548
{ 0x2e11a053, cmb(cc_prim_sub_env_mul_t0_add_env) },
8549
// zelda 2. Added by Gonetz
8550
// (t1-t0)*primlod+t0, (0-0)*shade+cmb
8551
{ 0x2e1204ff, cmb(cc_t0_inter_t1_using_primlod) },
8552
// zelda 2. Added by Gonetz
8553
// (t1-t0)*primlod+t0, (env-prim)*primlod+cmb
8554
{ 0x2e120d35, cmb(cc_prim_sub_env_mul_primlod_add__t0_inter_t1_using_primlod) },
8555
// lamppost, Ridge Racer. Added by Gonetz
8556
// (t1-t0)*primlod+t0
8557
{ 0x2e122e12, cmb(cc_t0_inter_t1_using_primlod) },
8558
// Hearts, zelda
8559
//z (t1-t0)*primlod+t0, (shade-prim)*cmb+prim
8560
{ 0x2e126034, cmb(cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim) },
8561
// Sunny Day, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
8562
// (t1-t0)*primlod+t0, (env-prim)*cmb+prim
8563
{ 0x2e126035, cmb(cc_env_sub_prim_mul__t0_inter_t1_using_primlod__add_prim) },
8564
// snowhead temple, zelda 2. Added by Gonetz
8565
// (t1-t0)*primlod+t0, (cmb-env)*shade+prim ** INC **
8566
{ 0x2e126450, cmb(cc__t0_inter_t1_using_primlod__mul_shade_add_prim) },
8567
// snow on a wall, snowhead temple, zelda 2. Added by Gonetz
8568
// (t1-t0)*primlod+t0, (cmb-0)*shade+prim
8569
{ 0x2e1264f0, cmb(cc__t0_inter_t1_using_primlod__mul_shade_add_prim) },
8570
// Morning Sun, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
8571
// (t1-t0)*primlod+t0, (cmb-0)*0+prim ** INC **?
8572
{ 0x2e127ff0, cmb(cc_prim) },
8573
// arena, Pokemon Stadium 2. Added by Gonetz
8574
// (t1-t0)*primlod+t0, (cmb-prim)*shade+shade ** INC **
8575
{ 0x2e128430, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },
8576
// Pokemon Stadium 2. Added by Gonetz
8577
// (t1-t0)*primlod+t0, (cmb-env)*cmb+env ** INC **
8578
{ 0x2e12a050, cmb(cc_t0_inter_t1_using_primlod) },
8579
// End of level heart, zelda
8580
// (t1-t0)*primlod+t0, (prim-env)*cmb+env
8581
{ 0x2e12a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env) },
8582
// Huge turtle appearance, zelda 2. Added by Gonetz
8583
// (t1-t0)*primlod+t0, (1-env)*cmb+env
8584
{ 0x2e12a056, cmb(cc_one_sub_env_mul__t0_inter_t1_using_primlod__add_env) },
8585
// frozen octorok, zelda 2. Added by Gonetz
8586
// (t1-t0)*primlod+t0, (prim-env)*t1+env
8587
{ 0x2e12a253, cmb(cc_prim_sub_env_mul_t1_add_env) },
8588
// fall headwaters, zelda 2. Added by Gonetz
8589
// (t1-t0)*primlod+t0, (cmb-env)*shade+env ** INC **
8590
{ 0x2e12a450, cmb(cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_env) },
8591
// zelda 2. Added by Gonetz
8592
// (t1-t0)*primlod+t0, (cmb-0)*t1+0 ** INC ** ?
8593
{ 0x2e12e2f0, cmb(cc_t0_inter_t1_using_primlod) },
8594
// zelda 2. Added by Gonetz
8595
// (t1-t0)*primlod+t0, (cmb-0)*prim+0
8596
{ 0x2e12e3f0, cmb(cc__t0_inter_t1_using_primlod__mul_prim) },
8597
// sky, PGA European Tour
8598
// (t1-t0)*primlod+t0, (cmb-env)*shade+0 ** INC **
8599
{ 0x2e12e450, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },
8600
// Kirby's pool, smash bros
8601
// (t1-t0)*primlod+t0, (cmb-0)*shade+0
8602
{ 0x2e12e4f0, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },
8603
//Spacestation Silicon Valley intro. Added by Gonetz
8604
// (prim-t0)*primlod+t0, (cmb-0)*shade+0 **INC**
8605
{ 0x2e132e13, cmb(cc_t0_inter_prim_using_primlod) },
8606
// explosions, daikatana. Added by Gonetz
8607
// (prim-t0)*primlod+t0, (cmb-0)*shade+0 **INC**
8608
{ 0x2e13e4f0, cmb(cc_t0_mul_shade) },
8609
//Mike Piazza's Strike Zone logo. Added by Gonetz
8610
// (shade-t0)*primlod+t0
8611
{ 0x2e142e14, cmb(cc_t0_inter_shade_using_primlod) },
8612
// Cartridge color (transfer pak) }, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
8613
// (1-t0)*primlod+t0
8614
{ 0x2e162e16, cmb(cc_one_sub_t0_mul_primlod_add_t0) },
8615
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
8616
// (1-t0)*primlod+t0, (prim-0)*cmb+0 **INC**
8617
{ 0x2e16e0f3, cmb(cc_t0_mul_prim) },
8618
// zelda 2. Added by Gonetz
8619
// (t1-t1)*primlod+t0, (prim-env)*cmb+env
8620
{ 0x2e22a053, cmb(cc_prim_sub_env_mul_t0_add_env) },
8621
// Shadow Ball, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
8622
// (0-t1)*primlod+t0, (prim-env)*cmb+env ** INC **
8623
{ 0x2e2fa053, cmb(cc_prim_sub_env_mul_t0_add_env) },
8624
// Skulltula coin solid, zelda
8625
// (t0-prim)*primlod+t0, (prim-env)*cmb+env
8626
{ 0x2e31a053, cmb(cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t0__add_env) },
8627
// Triforce lines, zelda
8628
// (t1-prim)*primlod+t0, (prim-shade)*cmb+shade
8629
{ 0x2e328043, cmb(cc_prim_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade) },
8630
// moon when majora defeated, zelda 2. Added by Gonetz
8631
// (t1-prim)*primlod+t0, (1-shade)*cmb+shade
8632
{ 0x2e328046, cmb(cc_one_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade) },
8633
// Fire, zelda
8634
//z (t1-prim)*primlod+t0, (prim-env)*cmb+env ** INC **
8635
{ 0x2e32a053, cmb(cc_prim_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env) },
8636
// zelda 2 [Ogy]. Added by Gonetz
8637
// (t1-prim)*primlod+t0, (shade-env)*cmb+env
8638
{ 0x2e32a054, cmb(cc_shade_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env) },
8639
// Scary face, pokemon stadium 2
8640
// (t1-prim)*primlod+t0, (1-env)*cmb+env
8641
{ 0x2e32a056, cmb(cc_one_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env) },
8642
// zelda 2. Added by Gonetz
8643
// (t1-prim)*primlod+t0, (prim-0)*cmb+env
8644
{ 0x2e32a0f3, cmb(cc__t1_sub_prim_mul_primlod_add_t0__mul_prim_add_env) },
8645
// zelda 2. Added by Gonetz
8646
// (t1-0)*primlod+t0, (prim-env)*cmb+env
8647
{ 0x2ef2a053, cmb(cc_prim_sub_env_mul__t1_mul_primlod_add_t0__add_env) },
8648
// zelda 2. Added by Gonetz
8649
// (t1-0)*primlod+t0, (cmb-0)*prim+0
8650
{ 0x2ef2e3f0, cmb(cc__t1_mul_primlod_add_t0__mul_prim) },
8651
// zelda 2. Added by Gonetz
8652
// (t1-0)*primlod+t0, (cmb-0)*env+0
8653
{ 0x2ef2e5f0, cmb(cc__t1_mul_primlod_add_t0__mul_env) },
8654
// gun, Doom64. Added by Gonetz
8655
// (1-0)*primlod+t0, (cmb-0)*prim+env
8656
{ 0x2ef6a3f0, cmb(cc__t0_add_primlod__mul_prim_add_env) },
8657
// walls, Doom64. Added by Gonetz
8658
// (1-0)*primlod+t0, (cmb-0)*shade+env
8659
{ 0x2ef6a4f0, cmb(cc__t0_add_primlod__mul_shade_add_env) },
8660
// Pokemon Stadium 2. Added by Gonetz
8661
// (noise-0)*primlod+t0, (prim-env)*cmb+env ** INC **
8662
{ 0x2ef7a053, cmb(cc_prim_sub_env_mul_t0_add_env) },
8663
// Tony Hawk's Pro Skater. Added by Gonetz
8664
// (t1-t0)*k5+t0
8665
{ 0x2f122f12, cmb(cc_t0_inter_t1_using_k5) },
8666
// F1 World Grand Prix. Added by Gonetz
8667
// (t1-t0)*k5+t0, (cmb-0)*shade+0 **INC**
8668
{ 0x2f12e4f0, cmb(cc__t0_inter_t1_using_k5__mul_shade) },
8669
// Turok 3 [scorpiove]. Added by Gonetz
8670
// (t0-k4)*k5+t0
8671
{ 0x2f712f71, cmb(cc_t0) },
8672
// THPS 3
8673
// (env-0)*k5+t0,
8674
{ 0x2ff52ff5, cmb(cc_t0_add_env_mul_k5) },
8675
// super bowling
8676
// (0-0)*k5+t0,
8677
{ 0x2fff0000, cmb(cc_t0) },
8678
// super bowling
8679
// (0-0)*k5+t0
8680
{ 0x2fff2fff, cmb(cc_t0) },
8681
// RARE logo, blast corps. Added by Gonetz
8682
// (t0-0)*0+t0
8683
{ 0x3ff13ff1, cmb(cc_t0) },
8684
// the ground below the scarecrow in the trading post in town, zelda 2 [Ogy]. Added by Gonetz
8685
// (t1-0)*0+t0, (cmb-0)*shade+0
8686
{ 0x3ff2e4f0, cmb(cc_t0_mul_shade) },
8687
// intro, background, Dezaemon 3D
8688
// (1-0)*0+t0
8689
{ 0x3ff63ff6, cmb(cc_t0) },
8690
// Tony Hawk's Pro Skater. Added by Gonetz
8691
// ((0-0)*0+t0, (t1-0)*shade+cmb ** INC **
8692
{ 0x3fff04f2, cmb(cc_t0) },
8693
// Dr. Mario [Ogy]. Added by Gonetz
8694
// ((0-0)*0+t0, (prim-cmb)*env+cmb
8695
{ 0x3fff0503, cmb(cc_prim_sub_t0_mul_env_add_t0) },
8696
// Stained glass, quest64
8697
// (0-0)*0+t0, (1-0)*env+cmb
8698
{ 0x3fff05f6, cmb(cc_t0_add_env) },
8699
// Health bar, killer instinct gold
8700
// (0-0)*0+t0, (prim-env)*prim_a+cmb
8701
{ 0x3fff0a53, cmb(cc_prim_sub_env_mul_prima_add_t0) },
8702
// Runes, Turok - Dinosaur Hunter. Added by Gonetz
8703
// (0-0)*0+t0, (env-cmb)*env_a+cmb
8704
{ 0x3fff0c05, cmb(cc_t0_inter_env_using_enva) },
8705
// intro, Mission Impossible. Added by Gonetz
8706
// (k5-k5)*0+t0, (0-0)*scale+t0
8707
{ 0x3fff26ff, cmb(cc_t0) },
8708
// TM, mario
8709
//z (k5-k5)*0+t0
8710
{ 0x3fff3fff, cmb(cc_t0) },
8711
// Intro, CBFD. Added by Gonetz
8712
// ((0-0)*0+t0, (shade-env)*cmb+prim
8713
{ 0x3fff6054, cmb(cc_shade_sub_env_mul_t0_add_prim) },
8714
// paper mario. Added by Gonetz
8715
// ((0-0)*0+t0, (prim-env)*cmb+env
8716
{ 0x3fffa053, cmb(cc_prim_sub_env_mul_t0_add_env) },
8717
// Objects in arena, pokemon stadium 2
8718
// (0-0)*0+t0, (cmb-prim)*shade+env
8719
{ 0x3fffa430, cmb(cc_t0_mul_prim) },
8720
// intro, F1 Racing Championship. Added by Gonetz
8721
// (0-0)*0+t0, (shade-env)*cmb+0
8722
{ 0x3fffe054, cmb(cc_shade_sub_env_mul_t0) },
8723
// stands, F1 Racing Championship. Added by Gonetz
8724
// (0-0)*0+t0, (1-env)*cmb+0
8725
{ 0x3fffe056, cmb(cc_one_sub_env_mul_t0) },
8726
// ? (from log)
8727
// (0-0)*0+t0, (prim-0)*cmb+0
8728
{ 0x3fffe0f3, cmb(cc_t0_mul_prim) },
8729
// background, GASP Fighters
8730
// (0-0)*0+t0, (shade-0)*cmb+0
8731
{ 0x3fffe0f4, cmb(cc_t0_mul_shade) },
8732
// zelda 2 [Ogy]. Added by Gonetz
8733
// (0-0)*0+t0, (env-0)*cmb+0
8734
{ 0x3fffe0f5, cmb(cc_t0_mul_env) },
8735
// logo, v-rally 99
8736
// (0-0)*0+t0, (prim-0)*t0+0
8737
{ 0x3fffe1f3, cmb(cc_t0_mul_prim) },
8738
// target hit, zelda 2. Added by Gonetz
8739
// (0-0)*0+t0, (cmb-0)*prim+0
8740
{ 0x3fffe3f0, cmb(cc_t0_mul_prim) },
8741
// Ms. Pac-Man intro background. Added by Gonetz
8742
// (0-0)*0+t0, (cmb-0)*shade+0
8743
{ 0x3fffe4f0, cmb(cc_t0_mul_shade) },
8744
// Wonder Project J2 logo. Added by Gonetz
8745
// (0-0)*0+t0, (t0-0)*shade+0
8746
{ 0x3fffe4f1, cmb(cc_t0_mul_shade) },
8747
// tire trace, Monster truck madness. Added by Gonetz
8748
// (0-0)*0+t0, (cmb-0)*env+0
8749
{ 0x3fffe5f0, cmb(cc_t0_mul_env) },
8750
// Gauntlet Legends intro. Added by Gonetz
8751
// (0-0)*0+t0, (cmb-0)*ecale+0
8752
{ 0x3fffe6f0, cmb(cc_t0) },
8753
// tire trace, beetle adventure racing. Added by Gonetz
8754
// (t1-t0)*t0+t1, (cmb-t0)*shade+t1 **INC**
8755
{ 0x41124410, cmb(cc__t0_inter_t1_using_t0__mul_shade) },
8756
// Paper Mario. Added by Gonetz
8757
// (t0-t1)*t0+t1 **INC**
8758
{ 0x41214121, cmb(cc_t1_inter_t0_using_t0) },
8759
// Powered Star Beam, Paper Mario. Added by Gonetz
8760
// (t0-t1)*t0+t1, (env-prim)*cmb+prim **INC**
8761
{ 0x41216035, cmb(cc_env_sub_prim_mul__t1_inter_t0_using_t0__add_prim) },
8762
// wetrix raiseland [Raziel64]. Added by Gonetz
8763
// (prim-t1)*t0+t1, (env-t0)*cmb+cmb **INC**
8764
{ 0x41230015, cmb(cc_env_sub_prim_mul__t0_mul_t1__add_prim) },
8765
// SCARS. Added by Gonetz
8766
// (t1-t0)*t0+t1, (cmb-t0)*shade+t1 **INC**
8767
{ 0x41250b03, cmb(cc__t0_inter_t1_using_half__mul_shade) },
8768
//beetle adventure racing. Added by Gonetz
8769
//(env-t1)*t0+t1, (prim-cmb)*shadea+cmb **INC**
8770
{ 0x4221e4f0, cmb(cc__t1_inter_env_using_t0__inter_prim_using_shadea) },
8771
// paper mario. Added by Gonetz
8772
// (t0-t0)*prim+t1, (t1-cmb)*cmb+env **INC** weird
8773
{ 0x4311a002, cmb(cc_env) },
8774
// background, Wetrix level 1, [Raziel64]. Added by Gonetz
8775
// (t0-t1)*prim+t1
8776
{ 0x43214321, cmb(cc_t1_inter_t0_using_prim) },
8777
// grass, ISS 2k. Added by Gonetz
8778
// (t0-t1)*prim+t1, (cmb-0)*env+0 **INC**
8779
{ 0x4321e5f0, cmb(cc__t1_inter_t0_using_prim__mul_env) },
8780
// intro, Paper Mario
8781
// (t0-0)*prim+t1
8782
{ 0x43f143f1, cmb(cc_t0_mul_prim_add_t1) },
8783
// F1 World Grand Prix. Added by Gonetz
8784
// (t0-0)*prim+t1, (cmb-0)*shade+env **INC**
8785
{ 0x43f1a4f0, cmb(cc__t0_add_t1__mul_shade_add_env) },
8786
// field, ISS64. Added by Gonetz
8787
// (t0-t1)*shade+t1, (cmb-t1)*prim+t1 ** INC **
8788
{ 0x44214320, cmb(cc_t0_sub_t1_mul_prim_mul_shade_add_t1) },
8789
// 0x44214320, cmb(cc__t0_add_t1__mul_prim) },
8790
// water, goemon great adventure
8791
// (t0-t1)*env+t1 ** INC **
8792
{ 0x45214521, cmb(cc_t1_inter_t0_using_env) },
8793
// characters, Ogre Battle. Added by Gonetz
8794
// (1-t1)*env+t1, (1-cmb)*prim+cmb ** INC **
8795
{ 0x45260306, cmb(cc_one_sub_t1_mul_prim_add_t1) },
8796
// characters, Ogre Battle. Added by Gonetz
8797
// (1-t1)*env+t1
8798
{ 0x45264526, cmb(cc_one_sub_t1_mul_env_add_t1) },
8799
// characters, Ogre Battle. Added by Gonetz
8800
// (1-t1)*env+t1, (cmb-0)*prim+0 ** INC **
8801
{ 0x4526e3f0, cmb(cc__t1_inter_one_using_env__mul_prim) },
8802
// explosion, body harvest. Added by Gonetz
8803
// (t0-t1)*scale+t1, (env-prim)*cmb+prim ** INC **
8804
{ 0x46216035, cmb(cc_env_sub_prim_mul__t0_inter_t1_using_half__add_prim) },
8805
// Water, AeroGauge. Added by Gonetz
8806
// (t0-t1)*prima+t1, (0-0)*0+cmb
8807
{ 0x4a214a21, cmb(cc_t1_inter_t0_using_prima) },
8808
// flame, castlevania 2. Added by Gonetz
8809
// (t0-t1)*prima+t1, (prim-env)*cmb+env
8810
{ 0x4a21a053, cmb(cc_prim_sub_env_mul__t1_inter_t0_using_prima__add_env) },
8811
// shadows, Mario Tennis. Added by Gonetz
8812
// (t0-t1)*prima+t1, (prim-0)*cmb+0
8813
{ 0x4a21e0f3, cmb(cc__t1_inter_t0_using_prima__mul_prim) },
8814
// menu, Mario Golf. Added by Gonetz
8815
// (t0-t1)*prima+t1, (shade-0)*cmb+0
8816
{ 0x4a21e0f4, cmb(cc__t1_inter_t0_using_prima__mul_shade) },
8817
// intro, castlevania 2. Added by Gonetz
8818
// (t0-t1)*prima+t1, (cmb-0)*prim+0
8819
{ 0x4a21e3f0, cmb(cc__t1_inter_t0_using_prima__mul_prim) },
8820
// water on map, Ogre Battle64. Added by Gonetz
8821
// (t0-t1)*prima+t1, (cmb-0)*shade+0
8822
{ 0x4a21e4f0, cmb(cc__t1_inter_t0_using_prima__mul_shade) },
8823
// Ice, Paper Mario
8824
// (t0-t1)*shade_a+t1
8825
{ 0x4b214b21, cmb(cc_t1_inter_t0_using_shadea) },
8826
// Grass, Beetle Adventure Racing
8827
// (t0-t1)*shade_a+t1, (cmb-0)*shade+0
8828
{ 0x4b21e4f0, cmb(cc__t1_inter_t0_using_shadea__mul_shade) },
8829
// Ground at kotake & koume, zelda
8830
// (t1-t0)*env_a+t0, (prim-env)*cmb+env
8831
{ 0x4c12a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env) },
8832
// Tony Hawk's Pro Skater. Added by Gonetz
8833
// (t0-t1)*env_a+t1, (cmb-0)*shade+cmb ** INC **
8834
{ 0x4c2104f0, cmb(cc__t1_inter_t0_using_enva__mul_shade) },
8835
// bikes, xg2. Added by Gonetz
8836
// (t0-t1)*env_a+t1, (cmb-prim)*prima+prim
8837
{ 0x4c216a30, cmb(cc__t1_inter_t0_using_enva__sub_prim_mul_prima_add_prim) },
8838
// Yoshi Story
8839
// (t0-t1)*env_a+t1, (prim-env)*cmb+env
8840
{ 0x4c21a053, cmb(cc_prim_sub_env_mul__t1_inter_t0_using_enva__add_env) },
8841
// arena, Pokemon Stadium 1. Added by Gonetz
8842
// (t0-t1)*env_a+t1, (cmb-0)*prim+0
8843
{ 0x4c21e3f0, cmb(cc__t1_inter_t0_using_enva__mul_prim) },
8844
// "end of chapter" text, paper mario. Added by Gonetz
8845
// (1-t1)*env_a+t1, (cmb-0)*t1+0 ** INC **
8846
{ 0x4c26e2f0, cmb(cc_t0_mul_t1) },
8847
// 0x4c26e2f0, cmb(cc_t1_mul_enva) },
8848
// Zelda opening door, zelda
8849
// (t0-prim)*env_a+t1, (prim-env)*t0+env
8850
{ 0x4c31a053, cmb(cc_prim_sub_env_mul_t0_add_env) },
8851
// Kotake & koume magic poof, zelda
8852
// (t0-0)*env_a+t1, (prim-env)*cmb+env
8853
{ 0x4cf1a053, cmb(cc_prim_sub_env_mul__t0_mul_enva_add_t1__add_env) },
8854
// ground in stone temple, zelda 2. Added by Gonetz
8855
// (t1-t0)*primlod+t1, (cmb-0)*prim+0
8856
{ 0x4e12e3f0, cmb(cc__t0_inter_t1_using_primlod__mul_prim) },
8857
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
8858
// (noise-t0)*primlod+t1, (prim-env)*cmb+env ** INC **
8859
{ 0x4e17a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env) },
8860
// menu, pokemon stadium 1, [Raziel64]
8861
// (t0-t1)*lodf+t1, (prim-env)*cmb+env
8862
{ 0x4e214e21, cmb(cc_t1_inter_t0_using_primlod) },
8863
// Pokemon backgrounds, pokemon stadium 2
8864
// (t0-t1)*lodf+t1, (prim-env)*cmb+env
8865
{ 0x4e21a053, cmb(cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env) },
8866
// zelda 2 [Ogy]. Added by Gonetz
8867
// (t0-t1)*primlod+t1, (t1-cmb)*prim+env ** INC **
8868
{ 0x4e21a302, cmb(cc_env_sub__t0_sub_t1_mul_primlod__mul_prim) },
8869
// Magnitude, pokemon stadium 2
8870
// (t0-t1)*primlod+t1, (prim-env)*cmb_a+env
8871
{ 0x4e21a753, cmb(cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env) },
8872
// zelda 2 [Ogy]. Added by Gonetz
8873
// (t0-t1)*primlod+t1, (cmb-0)*shade+0
8874
{ 0x4e21e4f0, cmb(cc__t1_inter_t0_using_primlod__mul_shade) },
8875
// lava in snowhead temple, zelda 2. Added by Gonetz
8876
// (t0-prim)*primlod+t1, (cmb-prim)*shade+cmb ** INC **
8877
{ 0x4e310430, cmb(cc_lavatex_sub_prim_mul_shade_add_lavatex) },
8878
// Skulltula coin, zelda
8879
// (t0-prim)*primlod+t1, (prim-env)*cmb+env
8880
{ 0x4e31a053, cmb(cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t1__add_env) },
8881
// Pokemon background, pokemon stadium 2
8882
// (noise-shade)*primlod+t1, (prim-env)*cmb+env
8883
{ 0x4e47a053, cmb(cc_prim_sub_env_mul_t1_add_env) },
8884
// Reflect, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
8885
// (t0-0)*primlod+t1, (prim-env)*cmb+env
8886
{ 0x4ef1a053, cmb(cc_prim_sub_env_mul__t0_add_t1__add_env) },
8887
//beetle adventure racing. Added by Gonetz
8888
//(t0-t1)*k5+t1, (cmb-0)*shade+0
8889
{ 0x4f21e4f0, cmb(cc__t1_inter_t0_using_k5__mul_shade) },
8890
// Spiderman. Added by Gonetz
8891
//(t0-t1)*k5+t1, (cmb-0)*env+0
8892
{ 0x4f21e5f0, cmb(cc_t1_mul_env) },
8893
// N64 logo, Ogre Battle. Added by Gonetz
8894
//(0-0)*0+t1
8895
{ 0x5fff5fff, cmb(cc_t1) },
8896
// reversing light, Monster truck madness. Added by Gonetz
8897
//(0-0)*0+t0, (0-0)*0+prim
8898
{ 0x5fff7fff, cmb(cc_prim) },
8899
// battle tanks [Ogy]
8900
// (0-0)*0+t1, (env-shade)*cmb+shade
8901
{ 0x5fff8045, cmb(cc_env_sub_shade_mul_t1_add_shade) },
8902
// minigame, pokemon stadium 1. Added by Gonetz
8903
// (0-0)*0+t1, (prim-env)*cmb+env
8904
{ 0x5fffa053, cmb(cc_prim_sub_env_mul_t1_add_env) },
8905
// F1 World Grand Prix. Added by Gonetz
8906
// (t0-prim)*t0+prim, (cmb-0)*shade
8907
{ 0x6131e4f0, cmb(cc__prim_inter_t0_using_t0__mul_shade) },
8908
// aerofighter's assault [Ogy]
8909
// (shade-prim)*t0+prim
8910
{ 0x61346134, cmb(cc_shade_sub_prim_mul_t0_add_prim) },
8911
// club blow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
8912
// (shade-prim)*t0+prim, (cmb-env)*cmb_a+env ** INC **
8913
{ 0x6134a750, cmb(cc_shade_sub_prim_mul_t0_add_prim) },
8914
// lava, beetle adventure racing
8915
// (shade-prim)*t0+prim, (cmb-0)*t1+0 ** INC **
8916
{ 0x6134e2f0, cmb(cc_shade_sub_prim_mul__t0_mul_t1__add_prim) },
8917
// Monster truck madness intro. Added by Gonetz
8918
// (env-prim)*t0+prim, (cmb-0)*scale+cmb ** INC **
8919
{ 0x613506f0, cmb(cc_env_sub_prim_mul_t0_add_prim) },
8920
// pokemon attack, Pokemon stadium 1
8921
// (env-prim)*t0+prim, (cmb-0)*0+cmb
8922
{ 0x61351ff0, cmb(cc_env_sub_prim_mul_t0_add_prim) },
8923
// Paper Mario, fortune teller spheres
8924
// (env-prim)*t0+prim, (cmb-0)*t1+t0 ** INC **
8925
{ 0x613522f0, cmb(cc_t0_mul_t1_add_t0) },
8926
// Later hearts, zelda
8927
// (env-prim)*t0+prim
8928
{ 0x61356135, cmb(cc_env_sub_prim_mul_t0_add_prim) },
8929
// Mission Impossible. Added by Gonetz
8930
// (env-prim)*t0+prim, (shade-0)*cmb+0 ** INC **
8931
{ 0x6135e0f4, cmb(cc_t0_mul_shade) },
8932
// crashing other vehicle, Monster truck madness [Raziel64]. Added by Gonetz
8933
// (env-prim)*t0+prim, (cmb-0)*t0+0 ** INC **
8934
{ 0x6135e1f0, cmb(cc_env_sub_prim_mul_t0_add_prim) },
8935
// Tony Hawk's Pro Skater. Added by Gonetz
8936
// (env-prim)*t0+prim, (cmb-0)*t1+0 ** INC **
8937
{ 0x6135e2f0, cmb(cc_env_sub_prim_mul_t0_add_prim) },
8938
// aerofighter's assault [Ogy]
8939
// (env-prim)*t0+prim, (cmb-0)*shade+0 ** INC **
8940
{ 0x6135e4f0, cmb(cc__prim_inter_env_using_t0__mul_shade) },
8941
// "time out", paper mario. Added by Gonetz
8942
// (1-prim)*t0+prim, (1-cmb)*enva+cmb ** INC **
8943
{ 0x61360c06, cmb(cc_one_sub_prim_mul_t0_add_prim) },
8944
// intro, paper mario. Added by Gonetz
8945
// (1-prim)*t0+prim, (cmb-0)*prima+t0 ** INC **
8946
{ 0x61362af0, cmb(cc__one_sub_prim_mul_t0_add_prim__mul_prima_add__one_sub_prim_mul_t0_add_prim) },
8947
// paper mario. Added by Gonetz
8948
// (1-prim)*t0+prim
8949
{ 0x61366136, cmb(cc_one_sub_prim_mul_t0_add_prim) },
8950
// arena, Pokemon Stadium 2. Added by Gonetz
8951
// (1-prim)*t0+prim, (cmb-env)*shade+shade ** INC **
8952
{ 0x61368450, cmb(cc_t0_mul_shade) },
8953
// F1 World Grand Prix. Added by Gonetz
8954
// (1-prim)*t0+prim, (cmb-0)*shade+0 ** INC **
8955
{ 0x6136e4f0, cmb(cc_t0_mul_shade) },
8956
// Xena. Added by Gonetz
8957
// (0-prim)*t0+prim
8958
{ 0x613f613f, cmb(cc_one_sub_t0_mul_prim) },
8959
// Kirby64 end [Raziel64]. Added by Gonetz
8960
// (prim-env)*t0+prim
8961
{ 0x61536153, cmb(cc_prim_sub_env_mul_t0_add_prim) },
8962
// Xena. Added by Gonetz
8963
// (shade-env)*t0+prim
8964
{ 0x61546154, cmb(cc_shade_sub_env_mul_t0_add_prim) },
8965
// Karts, mario kart
8966
//z (center-env)*t0+prim
8967
{ 0x61566156, cmb(cc_t0_mul_1menv_add_prim) },
8968
// Famista64. Added by Gonetz
8969
//(t0-0)*t0+prim
8970
{ 0x61f161f1, cmb(cc_t0_mul_prim) },
8971
// Pokemon Stadium 2. Added by Gonetz
8972
//(shade-0)*t0+prim
8973
{ 0x61f461f4, cmb(cc_t0_mul_shade_add_prim) },
8974
// Doom. Added by Gonetz
8975
//(1-0)*t0+prim
8976
{ 0x61f661f6, cmb(cc_t0_add_prim) },
8977
// tire trace, beetle adventure racing. Added by Gonetz
8978
// (shade-prim)*t1+prim, (cmb-0)*t1+0 **INC**
8979
{ 0x6234e2f0, cmb(cc_shade_sub_prim_mul_t1_add_prim) },
8980
// Text, turok
8981
// (env-prim)*t1+prim
8982
{ 0x62356235, cmb(cc_env_sub_prim_mul_t1_add_prim) },
8983
// Pokemon Stadium 2, [gokuss4]. Added by Gonetz
8984
// (env-prim)*t1+prim, (cmb-0)*t1+0 ** INC **
8985
{ 0x6235e2f0, cmb(cc_env_sub_prim_mul_t1_add_prim) },
8986
// bike trace, xg2 intro. Added by Gonetz
8987
// (1-prim)*t1+prim
8988
{ 0x62366236, cmb(cc_one_sub_prim_mul_t1_add_prim) },
8989
// aerofighter's assault [Ogy]
8990
// (1-prim)*t1+prim, (cmb-0)*0+env
8991
{ 0x6236bff0, cmb(cc_one_sub_prim_mul_t1_add_prim) },
8992
// Tennis court, mario tennis
8993
// (t0-0)*t1+prim
8994
{ 0x62f162f1, cmb(cc__t0_mul_t1__add_prim) },
8995
// Rush2. Added by Gonetz
8996
// (prim-prim)*prim+prim
8997
{ 0x63336333, cmb(cc_prim) },
8998
//Bowser in final battle, Paper Mario. Added by Gonetz
8999
// (t1-0)*prim+prim
9000
{ 0x63f263f2, cmb(cc_t1_mul_prim_add_prim) },
9001
// wetrix, icelayer, [Raziel64]. Added by Gonetz
9002
// (t0-prim)*shade+prim ** INC **
9003
{ 0x64316431, cmb(cc_t0_mul_shade) },
9004
// KI. Added by Gonetz
9005
// (env-prim)*shade+prim
9006
{ 0x64356435, cmb(cc_env_sub_prim_mul_shade_add_prim) },
9007
// xg2. Added by Gonetz
9008
// (1-prim)*shade+prim, (t0-0)*cmb+0 ** INC **
9009
{ 0x6436e0f1, cmb(cc_t0_mul_one_sub_prim_mul_shade) },
9010
// Intro, CBFD. Added by Gonetz
9011
// (t0-env)*shade+prim
9012
{ 0x64516451, cmb(cc_t0_sub_env_mul_shade_add_prim) },
9013
// sword in final battle, zelda 2. Added by Gonetz
9014
// (t0-env)*shade+prim, (cmb-0)*shade+0 ** INC **
9015
{ 0x6451e4f0, cmb(cc__t0_sub_env_mul_shade_add_prim__mul_shade) },
9016
// Road Rush. Added by Gonetz
9017
// (t0-0)*shade+prim
9018
{ 0x64f164f1, cmb(cc_t0_mul_shade_add_prim) },
9019
// paper mario. Added by Gonetz
9020
// (1-0)*shade+prim
9021
{ 0x64f664f6, cmb(cc_prim_add_shade) },
9022
// Character select, smash bros
9023
// (t0-prim)*env+prim
9024
{ 0x65316531, cmb(cc_t0_sub_prim_mul_env_add_prim) },
9025
// Clear screen intro, banjo kazooie
9026
// (t0-prim)*env+prim, (cmb-0)*shade+0
9027
// 0x6531e4f0, cmb(cc_t0_mul_env_mul_shade) },
9028
{ 0x6531e4f0, cmb(cc__prim_inter_t0_using_env__mul_shade) },
9029
// Dragonfly feet, banjo kazooie
9030
// (1-prim)*env+prim, (cmb-0)*shade+0 ** INC **
9031
{ 0x6536e4f0, cmb(cc_env_mul_shade) },
9032
// Lava piranha atack, Paper Mario
9033
// (t1-k4)*env+prim ** INC **
9034
{ 0x65726572, cmb(cc_t1_mul_env_add_prim) },
9035
// zelda 2 [Ogy]. Added by Gonetz
9036
// (t0-0)*env+prim, (1-t1)*t0a+cmb ** INC **
9037
{ 0x65f10826, cmb(cc_one_sub_t1_mul_t0a_add_t0_mul_env_add_prim) },
9038
// clocks while warping through time, zelda 2
9039
// (t0-0)*env+prim, (cmb-0)*0+cmb
9040
{ 0x65f11ff0, cmb(cc_t0_mul_env_add_prim) },
9041
// Helicopter, Nuclear Strike. Added by Gonetz
9042
// (t0-0)*env+prim
9043
{ 0x65f165f1, cmb(cc_t0_mul_env_add_prim) },
9044
// Mystical Ninja
9045
// (1-0)*env+prim
9046
{ 0x65f665f6, cmb(cc_prim_add_env) },
9047
// duke nukem: zero hour [Ogy]
9048
// (noise-0)*env+prim ** INC **
9049
{ 0x65f765f7, cmb(cc_prim_add_env) },
9050
// "terminator", CBFD
9051
// (0-0)*env+prim
9052
{ 0x65ff65ff, cmb(cc_prim) },
9053
// Cliffs, Taz express. Added by Gonetz
9054
// (t0-0)*scale+prim
9055
{ 0x66f166f1, cmb(cc_t0_add_prim) },
9056
// Taz express. Added by Gonetz
9057
// (t0-0)*scale+prim, (cmb-0)*shade+0
9058
{ 0x66f1e4f0, cmb(cc_t0_add_prim_mul_shade) },
9059
// NFL Quarterback Club 98 Menu [CpUMasteR]
9060
// (prim-0)*scale+prim
9061
{ 0x66f366f3, cmb(cc_prim) },
9062
// Character, dual heroes
9063
// (t0-prim)*t0_a+prim
9064
{ 0x68316831, cmb(cc_t0_sub_prim_mul_t0a_add_prim) },
9065
// Indy Racing 2000. Added by Gonetz
9066
// (t0-prim)*t0_a+prim, (cmb-0)*shade+0 ** INC **
9067
{ 0x6831e4f0, cmb(cc_t0_mul_shade) },
9068
// text, Sin and Punishmen. Added by Gonetz
9069
// (env-prim)*t0_a+prim ** INC **
9070
{ 0x68356835, cmb(cc_env_sub_prim_mul_t0a_add_prim) },
9071
// menu, PD. Added by Gonetz
9072
// (env-prim)*t1_a+prim
9073
{ 0x69356935, cmb(cc_env_sub_prim_mul_t1a_add_prim) },
9074
// 0x69356935, cmb(cc_t1) },
9075
//xg2. Added by Gonetz
9076
// (t0-prim)*prima+prim
9077
{ 0x6a316a31, cmb(cc_t0_sub_prim_mul_prima_add_prim) },
9078
// menu, battle phoenix 64. Added by Gonetz
9079
// (env-prim)*prima+prim
9080
{ 0x6a356a35, cmb(cc_env_sub_prim_mul_prima_add_prim) },
9081
// ground, KI. Added by Gonetz
9082
// (shade-env)*prima+prim
9083
{ 0x6a546a54, cmb(cc_shade_sub_env_mul_prima_add_prim) },
9084
// F1 World Grand Prix. Added by Gonetz
9085
// (t0-0)*prima+prim, (shade-0)*cmb+env **INC**
9086
{ 0x6af1a0f4, cmb(cc__t0_mul_prima_add_prim_mul__shade_add_env) },
9087
//broken wall, beetle adventure racing. Added by Gonetz
9088
// (t0-0)*prima+prim, (cmb-0)*shade+0 **INC**
9089
{ 0x6af1e4f0, cmb(cc__t0_mul_prima_add_prim_mul__shade) },
9090
// Genie, diddy kong racing
9091
// (t0-prim)*shade_alpha+prim, (env-cmb)*shade+cmb
9092
// 0x6b310405, cmb(cc_env_sub__prim_inter_t0_using_shadea__mul_shade_add_env) },
9093
{ 0x6b310405, cmb(cc_t0_mul_shadea) },
9094
// Extreme G. Added by Gonetz
9095
// (t0-prim)*shade_alpha+prim ** INC **
9096
{ 0x6b316b31, cmb(cc_t0_sub_prim_mul_shadea_add_prim) },
9097
// water block, Paper Mario. Added by Gonetz
9098
// (t0-prim)*shade_alpha+prim, (prim-env)*cmb+env ** INC **
9099
{ 0x6b31a053, cmb(cc_prim_sub_env_mul__prim_inter_t0_using_shadea__add_env) },
9100
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
9101
// (t0-prim)*shade_alpha+prim, (cmb-0)*shade+0 ** INC **
9102
{ 0x6b31e4f0, cmb(cc__prim_inter_t0_using_shadea__mul_shade) },
9103
// F1 World Grand Prix. Added by Gonetz
9104
// (env-prim)*shade_alpha+prim, (shade-cmb)*cmb_a+cmb ** INC **
9105
{ 0x6b350704, cmb(cc_env_sub_prim_mul_shade_add_prim) },
9106
// lullaby, Paper Mario. Added by Gonetz
9107
// (env-prim)*shade_alpha+prim
9108
{ 0x6b356b35, cmb(cc_env_sub_prim_mul_shadea_add_prim) },
9109
// Some gannon spell, zelda
9110
// (noise-t0)*env_a+prim, (0-prim)*cmb+1 ** INC **
9111
{ 0x6c17c03f, cmb(cc_one_sub__one_sub_t0_mul_enva_add_prim__mul_prim) },
9112
//Goldeneye, [Jeremy]. Added by Gonetz
9113
// (t0-prim)*env_a+prim
9114
{ 0x6c316c31, cmb(cc_t0_sub_prim_mul_enva_add_prim) },
9115
// button, Sin and Punishmen. Added by Gonetz
9116
// (env-prim)*env_a+prim
9117
{ 0x6c356c35, cmb(cc_env_sub_prim_mul_enva_add_prim) },
9118
// fallen stars at star summit, Paper Mario. Added by Gonetz
9119
// (t0-env)*env_a+prim, (1-0)*primlod+cmb
9120
{ 0x6c510ef6, cmb(cc_t0_sub_env_mul_enva_add_prim) },
9121
// focus, Paper Mario. Added by Gonetz
9122
// (t0-env)*env_a+prim, (cmb-shade)*shadea+shade ** INC **
9123
{ 0x6c518b40, cmb(cc_t0_sub_shade_mul_shadea_add_shade) },
9124
// Ring, pokemon stadium 2
9125
// (t0-0)*env_a+prim, (1-0)*cmb+0
9126
{ 0x6cf1e0f6, cmb(cc_t0_mul_enva_add_prim) },
9127
// Jet Force
9128
// (noise-0)*env_a+prim
9129
{ 0x6cf76cf7, cmb(cc_prim) },
9130
// snowhead temple, zelda 2. Added by Gonetz
9131
// (t1-t0)*primlod+prim, (cmb-0)*shade+shade
9132
{ 0x6e1284f0, cmb(cc__t1_sub_t0_mul_primlod_add_prim__mul_shade_add_shade) },
9133
// zelda 2. Added by Gonetz
9134
// (t1-t0)*primlod+prim, (cmb-0)*shade+0 ** INC **
9135
{ 0x6e12e4f0, cmb(cc__t1_sub_t0_mul_primlod_add_prim__mul_shade) },
9136
// sky, daikatana. Added by Gonetz
9137
// (t0-prim)*primlod+prim, (cmb-0)*shade+0
9138
{ 0x6e31e4f0, cmb(cc_t0_mul_shade) },
9139
// ball's track, NFL Blitz. Added by Gonetz
9140
// (t0-0)*primlod+prim
9141
{ 0x6ef16ef1, cmb(cc_t0_mul_primlod_add_prim) },
9142
// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
9143
// (t0-0)*primlod+prim, (cmb-env)*cmb_a+env ** INC **
9144
{ 0x6ef1a750, cmb(cc_t0_mul_primlod_add_prim) },
9145
// rope, CBFD
9146
// (t0-env)*k5+prim
9147
{ 0x6f516f51, cmb(cc_t0_sub_env_mul_k5_add_prim) },
9148
// super bowling
9149
// (0-0)*k5+prim
9150
{ 0x6fff6fff, cmb(cc_prim) },
9151
// intro, Aidyn Chronicles. Added by Gonetz
9152
// (0-0)*0+prim, (0-0)*0+prim
9153
{ 0x79fb7788, cmb(cc_prim) },
9154
// Menu, megaman
9155
// (1-0)*0+prim
9156
{ 0x7ff67ff6, cmb(cc_prim) },
9157
// sky, PGA European Tour
9158
// (0-0)*0+prim, (env-0)*t0+cmb
9159
{ 0x7fff01f5, cmb(cc_t0_mul_env_add_prim) },
9160
// sky, Spiderman. Added by Gonetz
9161
// (0-0)*0+prim, (t1-0)*shade+cmb
9162
{ 0x7fff04f2, cmb(cc_t1_mul_shade_add_prim) },
9163
// ball's shadow, ISS 2k. Added by Gonetz
9164
// (0-0)*0+prim, (1-cmb)*env+cmb
9165
{ 0x7fff0506, cmb(cc_one_sub_prim_mul_env_add_prim) },
9166
// Necklace, quest64
9167
// (0-0)*0+prim, (1-0)*env+cmb
9168
{ 0x7fff05f6, cmb(cc_prim_add_env) },
9169
// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
9170
// (0-0)*0+prim, (1-cmb)*cmba+cmb ** INC **
9171
{ 0x7fff0706, cmb(cc_prim) },
9172
// Dobutsu no Mori. Added by Gonetz
9173
//(k5-k5)*0+prim, (cmb-0)*0+cmb
9174
{ 0x7fff1ff0, cmb(cc_prim) },
9175
// Intro background, starfox
9176
//z (k5-k5)*0+prim
9177
{ 0x7fff7fff, cmb(cc_prim) },
9178
// train smoke, Dobutsu No Mori. Added by Gonetz
9179
//(0-0)*0+prim, (shade-0)*cmb+0
9180
{ 0x7fffe0f4, cmb(cc_prim_mul_shade) },
9181
// Donald Duck intro. Added by Gonetz
9182
//(0-0)*0+prim, (cmb-0)*prim+0
9183
{ 0x7fffe3f0, cmb(cc_prim_mul_prim) },
9184
// Ms. Pac-Man intro. Added by Gonetz
9185
//(0-0)*0+prim, (cmb-0)*shade+0
9186
{ 0x7fffe4f0, cmb(cc_prim_mul_shade) },
9187
// zelda 2. Added by Gonetz
9188
//(t1-t0)*t0+shade, (cmb-0)*shade+0
9189
{ 0x8112e4f0, cmb(cc__t1_sub_t0_mul_t0_add_shade__mul_shade) },
9190
// branches, Beetle Adventure Racing
9191
//(t0-shade)*t0+shade, (t0-cmb)*prim+cmb **INC**
9192
{ 0x81410301, cmb(cc_t0_mul_prim) },
9193
// Namco logo, Famista 64
9194
//(prim-shade)*t0+shade, (env-cmb)*t0+cmb **INC**
9195
{ 0x81430105, cmb(cc_prim_sub_shade_mul_t0_add_shade) },
9196
// pikachu, hey you pikachu
9197
//(prim-shade)*t0+shade, (env-cmb)*enva+cmb **INC**
9198
{ 0x81430c05, cmb(cc_prim_sub_shade_mul_t0_add_shade) },
9199
// Mario's head, mario //Added by Gonetz
9200
//(prim-shade)*t0+shade
9201
{ 0x81438143, cmb(cc_prim_sub_shade_mul_t0_add_shade) },
9202
// Iguana background, turok
9203
// (env-shade)*t0+shade
9204
{ 0x81458145, cmb(cc_env_sub_shade_mul_t0_add_shade) },
9205
// Bubbles in Jabu-Jabu's belly, zelda
9206
// (1-shade)*t0+shade
9207
{ 0x81468146, cmb(cc_one_sub_shade_mul_t0_add_shade) },
9208
// duck dodgers intro. Added by Gonetz
9209
// (1-shade)*t0+shade, (cmb-0)*shade+0 **INC**
9210
{ 0x8146e4f0, cmb(cc_one_sub_shade_mul_t0_add_shade) },
9211
// intro, Madden Footbal
9212
// (1-env)*t0+shade
9213
{ 0x81568156, cmb(cc_one_sub_env_mul_t0_add_shade) },
9214
// sky in doom. Added by Gonetz
9215
// (prim-0)*t0+shade, (cmb-0)*primlod+env **INC**
9216
{ 0x81f3aef0, cmb(cc_t0_mul_prim_add_shade) },
9217
// commercial? in IIS98. Added by Gonetz
9218
// (1-0)*t0+shade
9219
{ 0x81f681f6, cmb(cc_t0_add_shade) },
9220
//beetle adventure racing. Added by Gonetz
9221
//(prim-shade)*t1+shade, (cmb-0)*t1+0 **INC**
9222
{ 0x8243e2f0, cmb(cc_prim_sub_shade_mul_t1_add_shade) },
9223
// Scorpion fire breath, MK4 [Jeremy]. Added by Gonetz
9224
// (t0-shade)*prim+shade
9225
{ 0x83418341, cmb(cc_t0_mul_prim_add_one_sub_prim_mul_shade) },
9226
// Menu background, wwf no mercy
9227
// (env-shade)*prim+shade
9228
{ 0x83458345, cmb(cc_prim_mul_env_add_one_sub_prim_mul_shade) },
9229
// Pokemon selection window background, pokemon stadium 2
9230
// (noise-shade)*prim+shade
9231
{ 0x83478347, cmb(cc_shade) },
9232
// crown of king of ikana, zelda 2. Added by Gonetz
9233
// (t0-env)*prim+shade
9234
{ 0x83518351, cmb(cc_t0_sub_env_mul_prim_add_shade) },
9235
// crown of king of ikana, zelda 2. Added by Gonetz
9236
// (t0-env)*prim+shade, (cmb-0)*cmb+0 ** INC **
9237
{ 0x8351e0f0, cmb(cc_t0_sub_env_mul_prim_add_shade) },
9238
// salesman's shirt in the bomb shop in town, zelda 2 [Ogy]. Added by Gonetz
9239
// (t0-env)*prim+shade, (cmb-0)*shade+0 ** INC **
9240
{ 0x8351e4f0, cmb(cc_t0_mul_prim_mul_shade) },
9241
// intro, Madden Footbal
9242
// (1-env)*prim+shade
9243
{ 0x83568356, cmb(cc_one_sub_env_mul_prim_add_shade) },
9244
// Buss hunter 64. Added by Gonetz
9245
// (t0-0)*prim+shade
9246
{ 0x83f183f1, cmb(cc_t0_mul_prim_add_shade) },
9247
// huge water lilies, zelda 2 [Ogy]. Added by Gonetz
9248
// (t0-0)*prim+shade, (cmb-env)*shade+0 ** INC **
9249
{ 0x83f1e450, cmb(cc__t0_mul_prim_add_shade__sub_env_mul_shade) },
9250
// Objects in arena, pokemon stadium 2
9251
// (t1-0)*prim+shade, (cmb-0)*prim_a+0 - not going to bother with prim_a since it is FF
9252
{ 0x83f2eaf0, cmb(cc_t1_mul_prim_add_shade) },
9253
// Pokemon Stadium 2. Added by Gonetz
9254
// (t0-prim)*shade+shade ** INC **
9255
{ 0x84318431, cmb(cc_t0_mul_shade) },
9256
// big N, Pokemon Stadium 2. Added by Gonetz
9257
// (1-prim)*shade+shade ** INC **
9258
{ 0x84368436, cmb(cc_one_sub_prim_mul_shade_add_shade) },
9259
// arena, PokemonStadium2, [Raziel64]
9260
// (t0-0)*shade+shade, (cmb-0)*prim+0
9261
{ 0x84f1e3f0, cmb(cc_t0_mul_prim_mul_shade_add_prim_mul_shade) },
9262
// Spiderman. Added by Gonetz
9263
// (1-0)*shade+shade
9264
{ 0x84f684f6, cmb(cc_shade) },
9265
// the "gekko" ( a monster in a room above the 3rd room of woodfall temple ) }, zelda 2 [Ogy]. Added by Gonetz
9266
// (t0-prim)*env+shade ** INC **
9267
{ 0x85318531, cmb(cc_t0_sub_prim_mul_env_add_shade) },
9268
// clothes, zelda 2. Added by Gonetz
9269
// (t0-prim)*env+shade, (cmb-0)*shade+0 ** INC **
9270
{ 0x8531e4f0, cmb(cc_t0_mul_env_mul_shade) },
9271
// Robotron 64, [scorpiove]
9272
// (env-shade)*env+shade ** INC **
9273
{ 0x85458545, cmb(cc_one_sub_env_mul_shade_add_env) },
9274
// Enemy dying, quest64
9275
// (1-shade)*env+shade **changed by Gonetz
9276
{ 0x85468546, cmb(cc_one_sub_shade_mul_env_add_shade) },
9277
// Sky, Beetle Adventure Racing ** INC **
9278
//(t0-shade)*t0_a+shade, (env-cmb)*enva+cmb
9279
{ 0x88410c05, cmb(cc_t0_sub_shade_mul_t0a_add_shade) },
9280
// Mario's eyes, mario
9281
//z (t0-shade)*t0_a+shade
9282
{ 0x88418841, cmb(cc_t0_sub_shade_mul_t0a_add_shade) },
9283
//beetle adventure racing. Added by Gonetz
9284
// (prim-shade)*t1_a+shade, (t1-0)*cmb+0 **INC**
9285
{ 0x8843e0f2, cmb(cc_t1_mul_shade) },
9286
// blast corps [Ogy]
9287
// (prim-shade)*t1_a+shade
9288
{ 0x89438943, cmb(cc_prim_sub_shade_mul_t1a_add_shade) },
9289
//broken wall, beetle adventure racing. Added by Gonetz
9290
// (t0-shade)*prima+shade, (1-0)*0+cmb
9291
{ 0x8a411ff6, cmb(cc_t0_sub_shade_mul_prima_add_shade) },
9292
// menu, battle phoenix 64. Added by Gonetz
9293
// (t0-shade)*prima+shade
9294
{ 0x8a418a41, cmb(cc_t0_add_shade) },
9295
// intro, castlevania 2. Added by Gonetz
9296
// (prim-shade)*prim_a+shade
9297
{ 0x8a438a43, cmb(cc_prim_sub_shade_mul_prima_add_shade) },
9298
// ?
9299
// (1-shade)*shade_a+shade
9300
{ 0x8b468b46, cmb(cc_one_sub_shade_mul_shadea_add_shade) },
9301
// arena, Pokemon Stadium. Added by Gonetz
9302
// (t0-t1)*env_a+shade, (cmb-env)*prim+0 ** INC **
9303
{ 0x8c21e350, cmb(cc_t0_add_prim_mul_shade) },
9304
//diddy kong racing background fill. Added by Gonetz ** Modified by Dave2001
9305
// (env-shade)*env_a+shade, (cmb-0)*prim+0
9306
{ 0x8c458c45, cmb(cc_shade) }, // note: previous combiner used other_alpha; doesn't work
9307
//diddy kong racing. Added by Gonetz
9308
// (env-shade)*env_a+shade, (cmb-0)*prim+0 ** INC **
9309
{ 0x8c45e3f0, cmb(cc_prim_mul_shade) },
9310
// sky, Pokemon Stadium, [Raziel64]
9311
// (t0-0)*env_a+shade, (cmb-env)*prim+0 ** INC **
9312
{ 0x8cf1e350, cmb(cc_t0_mul_prim_add_shade_sub_env_mul_prim) },
9313
// zelda 2 [Ogy]. Added by Gonetz
9314
// (t0-prim)*primlod+shade, (prim-env)*cmb+env ** INC **
9315
{ 0x8e31a053, cmb(cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_shade__add_env) },
9316
// fallen leaves, Dobutsu no Mori. Added by Gonetz
9317
// (t0-shade)*primlod+shade, (prim-env)*cmb+env ** INC **
9318
{ 0x8e41a053, cmb(cc_prim_sub_env_mul__t0_sub_shade_mul_primlod_add_shade__add_env) },
9319
// the icicle above the part just before the entrance to the mountain village, zelda 2 [Ogy]. Added by Gonetz
9320
// (t0-prim)*0+shade, (prim-env)*cmb+env ** INC ** ?
9321
{ 0x9f31a053, cmb(cc_prim_sub_env_mul_shade_add_env) },
9322
// background on level 3-1, kirby 64 [Raziel64]. Added by Gonetz
9323
// (0-env)*0+shade
9324
{ 0x9f5f9f5f, cmb(cc_shade) },
9325
// Spotlight, smash bros
9326
// (1-0)*0+shade
9327
{ 0x9ff69ff6, cmb(cc_shade) },
9328
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
9329
// (0-0)*0+shade, (cmb-cmb)*cmb+cmb
9330
{ 0x9fff0000, cmb(cc_shade) },
9331
// menu, Dr.Mario. Added by Gonetz
9332
// (0-0)*0+shade, (prim-cmb)*env+cmb
9333
{ 0x9fff0503, cmb(cc_prim_sub_shade_mul_env_add_shade) },
9334
// pikachu, hey you pikachu. Added by Gonetz
9335
// (0-0)*0+shade, (env-cmb)*enva+cmb
9336
{ 0x9fff0c05, cmb(cc_env_sub_shade_mul_enva_add_shade) },
9337
// mega shock, paper mario
9338
//(0-0)*0+shade, (env-prim)*cmb+prim
9339
{ 0x9fff6035, cmb(cc_env_sub_prim_mul_shade_add_prim) },
9340
// Super Mario 64 logo background
9341
//z (k5-k5)*0+shade
9342
{ 0x9fff9fff, cmb(cc_shade) },
9343
// Zelda 2 final movie. Added by Gonetz
9344
// (0-0)*0+shade, (prim-0)*cmb+0
9345
{ 0x9fffe0f3, cmb(cc_prim_mul_shade) },
9346
// tree shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
9347
// (0-0)*0+shade, (env-0)*cmb+0
9348
{ 0x9fffe0f5, cmb(cc_env_mul_shade) },
9349
// N64 logo, Aidyn Chronicles. Added by Gonetz
9350
// (0-0)*0+shade, (cmb-0)*prim+0
9351
{ 0x9fffe3f0, cmb(cc_prim_mul_shade) },
9352
// Hand, smash bros
9353
// (0-0)*0+shade, (cmb-0)*env+0
9354
{ 0x9fffe5f0, cmb(cc_env_mul_shade) },
9355
// Lave piranha atack, Paper Mario
9356
// (t1-t0)*t0+env, (cmb-t1)*t0+prim ** INC **
9357
{ 0xa1126120, cmb(cc__t0_mul_t1__mul_env_add_prim) },
9358
// Kirby64 end [Raziel64]. Added by Gonetz
9359
// (prim-shade)*t0+env
9360
{ 0xa143a143, cmb(cc_prim_sub_shade_mul_t0_add_env) },
9361
// Superman [scorpiove]. Added by Gonetz
9362
// (t0-env)*t0+env
9363
{ 0xa151a151, cmb(cc_t0_sub_env_mul_t0_add_env) },
9364
// powder keg, zelda 2. Added by Gonetz
9365
// (prim-env)*t0+env, (0-0)*shade_a+cmb
9366
{ 0xa1530bff, cmb(cc_prim_sub_env_mul_t0_add_env) },
9367
// Kotake & koume defeated, going into sky, zelda
9368
// (prim-env)*t0+env, (prim-env)*0+cmb
9369
{ 0xa1531f53, cmb(cc_prim_sub_env_mul_t0_add_env) },
9370
// water, Dobutsu no Mori. Added by Gonetz
9371
// (prim-env)*t0+env, (cmb-0)*shade+t0
9372
{ 0xa15324f0, cmb(cc_t0_add_shade_mul_env) },
9373
//broken wall, beetle adventure racing. Added by Gonetz
9374
// (prim-env)*t0+env, (cmb-shade)*t1+shade **INC** can't be done in one step
9375
{ 0xa1538240, cmb(cc_prim_sub_env_mul__t0_mul_t1__add_shade) },
9376
//couple's mask, zelda2. Added by Gonetz
9377
// (prim-env)*t0+env, (prim-cmb)*shade+shade **INC** can't be done in one step
9378
{ 0xa1538403, cmb(cc_t0_mul_shade) },
9379
// stadium, Pokemon Stadium 2. Added by Gonetz
9380
// (prim-env)*t0+env, (cmb-0)*shade+shade **INC** can't be done in one step
9381
{ 0xa15384f0, cmb(cc_t0_mul_shade) },
9382
//clothes on girl in inn, zelda2. Added by Gonetz
9383
// (prim-env)*t0+env, (cmb-prim)*env+shade **INC** can't be done in one step
9384
{ 0xa1538530, cmb(cc_t0_mul_env_add_shade) },
9385
// Getting light arrows for the first time, zelda
9386
// (prim-env)*t0+env, (prim-env)*cmb+env ** INC **
9387
{ 0xa153a053, cmb(cc_prim_sub_env_mul_t0_add_env) },
9388
// Fire, starfox
9389
// (prim-env)*t0+env
9390
{ 0xa153a153, cmb(cc_prim_sub_env_mul_t0_add_env) },
9391
// a spell, Fushigi no Dungeon: Fuurai no Shiren 2
9392
// (prim-env)*t0+env, (cmb-env)*enva+env
9393
{ 0xa153ac50, cmb(cc_prim_sub_env_mul__t0_mul_enva__add_env) },
9394
// wizrobe's attack, zelda 2. Added by Gonetz.
9395
// (prim-env)*t0+env, (cmb-0)*cmb+0
9396
{ 0xa153e0f0, cmb(cc_prim_sub_env_mul_t0_add_env) },
9397
// dress, zelda 2. Added by Gonetz.
9398
// also for Great Farie's hair - changed to use texture mod by Dave2001.
9399
// (prim-env)*t0+env, (shade-0)*cmb+0
9400
{ 0xa153e0f4, cmb(cc__env_inter_prim_using_t0__mul_shade) },
9401
// Start menu, paper mario
9402
// (prim-env)*t0+env, (cmb-0)*t0+0
9403
{ 0xa153e1f0, cmb(cc_prim_sub_env_mul_t0_add_env) },
9404
// { 0xa153e0f4, cmb(cc_prim_sub_env_mul_t0_add_env) },
9405
// Jellyfish tentacles in Jabu-Jabu's belly, zelda
9406
// (prim-env)*t0+env, (cmb-0)*prim+0
9407
{ 0xa153e3f0, cmb(cc__env_inter_prim_using_t0__mul_prim) },
9408
// Dust, zelda
9409
//z (prim-env)*t0+env, (cmb-k5)*shade+cmb_a ** INC **
9410
{ 0xa153e4f0, cmb(cc__env_inter_prim_using_t0__mul_shade) },
9411
//0xa153e4f0, cmb(cc_prim_sub_env_mul_t0_add_env) },
9412
// roof, Kirby 64. Added by Gonetz
9413
// (prim-env)*t0+env, (cmb-0)*env+0 ** INC **
9414
{ 0xa153e5f0, cmb(cc_prim_sub_env_mul_t0_add_env) },
9415
// Something weird in intro, monster truck madness
9416
// (prim-env)*t0+env, (cmb-0)*k5+0
9417
{ 0xa153eff0, cmb(cc__prim_sub_env_mul_t0_add_env__mul_k5) },
9418
// clothes, kirby 64. Added by Gonetz
9419
// (shade-env)*t0+env
9420
{ 0xa154a154, cmb(cc_shade_sub_env_mul_t0_add_env) },
9421
// field, Derby Stallion
9422
// (shade-env)*t0+env, (cmb-0)*prim+0 ** INC **
9423
{ 0xa154e3f0, cmb(cc_shade_sub_env_mul_t0_mul_prim_add_prim_mul_env) },
9424
// background, level 3-5, kirby 64, [Raziel64]
9425
// (shade-env)*t0+env, (cmb-0)*shade+0 ** INC **
9426
{ 0xa154e4f0, cmb(cc_shade_sub_env_mul_t0_add_env) },
9427
// quake 2 intro
9428
// (prim-0)*t0+env, (prim-0)*primlod+cmb ** INC **
9429
{ 0xa1f30ef3, cmb(cc_t0_mul_prim_add_env) },
9430
// Kotake or koume's hair, zelda
9431
// (prim-0)*t0+env
9432
{ 0xa1f3a1f3, cmb(cc_t0_mul_prim_add_env) },
9433
// track, ridge racer. Added by Gonetz
9434
// (t0-env)*t1+env, (cmb-0)*shade+0 ** INC **
9435
{ 0xa251e4f0, cmb(cc__t0_mul_t1__mul_shade) },
9436
// lava, beetle adventure racing
9437
// (t0-env)*t1+env, (cmb-0)*enva+0 ** INC **
9438
{ 0xa251ecf0, cmb(cc__t0_mul_t1__mul_enva) },
9439
// Ded Moroz, Paper Mario
9440
// (prim-env)*t1+env, (1-cmb)*t1+cmb ** INC **
9441
{ 0xa2530206, cmb(cc_prim_sub_env_mul_t1_add_env) },
9442
// text, monster truck madness
9443
// (prim-env)*t1+env
9444
{ 0xa253a253, cmb(cc_prim_sub_env_mul_t1_add_env) },
9445
// car position, Top Gear Rally. Added by Gonetz
9446
// (prim-env)*t1+env, (cmb-t0)*t1+0 ** INC **
9447
{ 0xa253e210, cmb(cc_prim_sub_env_mul_t1_add_env_mul_t0) },
9448
// text, Top Gear Rally. Added by Gonetz
9449
// (prim-env)*t1+env, (cmb-0)*t1+0 ** INC **
9450
{ 0xa253e2f0, cmb(cc_prim_sub_env_mul_t1_add_env_mul_t0) },
9451
// 0xa253e2f0, cmb(cc_prim_sub_env_mul_t1_add_env) },
9452
// a pole in the cut-scene that appears after you receive odolwa's mask, zelda 2 [Ogy]. Added by Gonetz
9453
// (prim-env)*t1+env, (cmb-0)*shade+0 ** INC **
9454
{ 0xa253e4f0, cmb(cc_t1_mul_prim_mul_shade) },
9455
// Quake 2 intro. Added by Gonetz
9456
// (t0-0)*t1+env, (t0-0)*primlod+cmb ** INC **
9457
{ 0xa2f10ef1, cmb(cc__t0_mul_t1__add_env) },
9458
// Quake64. Added by Gonetz
9459
// (t0-0)*t1+env
9460
{ 0xa2f1a2f1, cmb(cc__t0_mul_t1__add_env) },
9461
// Quake II. Added by Gonetz ** INC **
9462
// (t0-0)*t1+env, (cmb-0)*prim+env
9463
{ 0xa2f1a3f0, cmb(cc__t0_mul_t1__mul_prim_add_env) },
9464
// Dr Mario [Ogy]. Added by Gonetz
9465
// (t0-env)*prim+env
9466
// 0xa351a351, cmb(cc_t0_mul_prim_add_env) },
9467
{ 0xa351a351, cmb(cc_t0_sub_env_mul_prim_add_env) },
9468
// menu, Dr.Mario. Added by Gonetz
9469
// (prim-env)*prim+env
9470
{ 0xa353a353, cmb(cc_prim_sub_env_mul_prim_add_env) },
9471
// Razor sword, zelda 2. Added by Gonetz
9472
// (shade-env)*prim+env, (cmb-0)*shade+0 ** INC **
9473
{ 0xa354e4f0, cmb(cc_shade_sub_env_mul_prim_add_env) },
9474
// bomberman 64-2 intro. Added by Gonetz
9475
// (1-env)*prim+env
9476
{ 0xa356a356, cmb(cc_one_sub_env_mul_prim_add_env) },
9477
// thing that escapes from the well, zelda
9478
// (noise-env)*prim+env
9479
{ 0xa357a357, cmb(cc_prim_add_env) },
9480
// Bongo Bongo, zelda
9481
// (noise-env)*prim+env, (cmb-0)*shade+0
9482
{ 0xa357e4f0, cmb(cc_env_mul_shade) },
9483
// paper mario. Added by Gonetz
9484
// (t0-0)*prim+env
9485
{ 0xa3f1a3f1, cmb(cc_t0_mul_prim_add_env) },
9486
// paper mario. Added by Gonetz
9487
// (t0-0)*prim+env, (t0-env)*prim+0
9488
{ 0xa3f1e351, cmb(cc_t0_mul_prim_add_env) },
9489
// paper mario. Added by Gonetz
9490
// (t0-0)*prim+env, (t0-0)*prim+0
9491
{ 0xa3f1e3f1, cmb(cc_t0_mul_prim) },
9492
// squirt, paper mario. Added by Gonetz
9493
// (t1-0)*prim+env, (1-cmb)*t1+cmb
9494
{ 0xa3f20206, cmb(cc_t1_mul_prim_add_env) },
9495
// paper mario. Added by Gonetz
9496
// (shade-0)*prim+env
9497
{ 0xa3f4a3f4, cmb(cc_prim_mul_shade_add_env) },
9498
// Doraemon 2. Added by Gonetz
9499
// (1-0)*prim+env
9500
{ 0xa3f6a3f6, cmb(cc_prim_add_env) },
9501
// Pokemon Stadium 2, [Jeremy]. Added by Gonetz
9502
// (noise-0)*prim+env ** INC ** ?
9503
{ 0xa3f7a3f7, cmb(cc_prim_add_env) },
9504
// monsters, Pokemon Stadium. Added by Gonetz
9505
// (t0-t1)*shade+env, (cmb-0)*prim+0 ** INC **
9506
{ 0xa421e3f0, cmb(cc_t0_mul_prim_mul_shade_add_prim_mul_env) },
9507
// background, pokemon stadium 2
9508
// (t0-prim)*shade+env
9509
{ 0xa431a431, cmb(cc_t0_mul_shade) },
9510
// Buildings, pokemon stadium 2
9511
// (t1-prim)*shade+env
9512
{ 0xa432a432, cmb(cc_t1_mul_shade) },
9513
// bomberman 64 [Ogy]
9514
// (t0-env)*shade+env
9515
{ 0xa451a451, cmb(cc_t0_mul_shade_add_env) },
9516
// kirby drill, kirby 64. Added by Gonetz
9517
// (prim-env)*shade+env
9518
{ 0xa453a453, cmb(cc_prim_sub_env_mul_shade_add_env) },
9519
// ball, ISS98 intro. Added by Gonetz
9520
// (t0-0)*shade+env
9521
{ 0xa4f1a4f1, cmb(cc_t0_mul_shade_add_env) },
9522
// score, ISS98 intro. Added by Gonetz
9523
// (prim-0)*shade+env
9524
{ 0xa4f3a4f3, cmb(cc_prim_mul_shade_add_env) },
9525
// magic fist, Rayman2. Added by Gonetz
9526
// (env-0)*shade+env
9527
{ 0xa4f5a4f5, cmb(cc_env_mul_shade_add_env) },
9528
// gunfire, Quake64. Added by Gonetz
9529
// (1-0)*shade+env
9530
{ 0xa4f6a4f6, cmb(cc_env_add_shade) },
9531
// Paper Mario. Added by Gonetz
9532
// (t0-center)*scale+env, (0-prim)*cmb+env
9533
{ 0xa661a03f, cmb(cc_t0_add_env) },
9534
// pink car, f-zero x
9535
// (t0-env)*t0_a+env, cmb*shade
9536
{ 0xa851e4f0, cmb(cc__env_inter_t0_using_t0a__mul_shade) },
9537
// PokemonStadium1, [Raziel64]
9538
// (prim-env)*t0_a+env, (cmb-cmb)*cmb+cmb
9539
{ 0xa8530000, cmb(cc_prim_sub_env_mul_t0a_add_env) },
9540
// N64 logo, Ogre Battle
9541
// (prim-env)*t0_a+env
9542
{ 0xa853a853, cmb(cc_prim_sub_env_mul_t0a_add_env) },
9543
// Mud Slap, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
9544
// (prim-env)*t0_a+env, (cmb-0)*cmb+0
9545
{ 0xa853e0f0, cmb(cc_prim_sub_env_mul_t0a_add_env) },
9546
// Tree background, mace
9547
// (prim-env)*t0_a+env, (cmb-0)*t0+0
9548
{ 0xa853e1f0, cmb(cc__env_inter_prim_using_t0a__mul_t0) },
9549
// logo, Deadly Arts. Added by Gonetz
9550
// (prim-env)*t1_a+env
9551
{ 0xa953a953, cmb(cc_prim_sub_env_mul_t1a_add_env) },
9552
// Girl, PD intro. Added by Gonetz
9553
// (t0-env)*shade_alpha+env, (cmb-0)*shade+0 ** INC **
9554
{ 0xab51e4f0, cmb(cc_t0_mul_shade) },
9555
// 0xab51e4f0, cmb(cc_t0_sub_env_mul_shade_mul_shadea_add_env) },
9556
// Some gannon spell, zelda
9557
// (prim-env)*shade_alpha+env
9558
{ 0xab53ab53, cmb(cc_prim_sub_env_mul_shadea_add_env) },
9559
// Boxes, Taz express. Added by Gonetz
9560
// (t0-env)*env_a+env
9561
{ 0xac51ac51, cmb(cc_t0_sub_env_mul_enva_add_env) },
9562
// paper mario. Added by Gonetz
9563
// (t0-env)*env_a+env, (cmb-0)*shade+0 **INC**
9564
{ 0xac51e4f0, cmb(cc_t0_mul_env_mul_shade) },
9565
// goal, Monster Truck Madness 64
9566
// (noise-0)*env_a+env, (cmb-0)*t1+0 **INC**
9567
{ 0xacf7e2f0, cmb(cc_t1_mul_env) },
9568
// sword on forge, zelda 2. Added by Gonetz
9569
// (t1-t1)*lodf+env, (t1-t0)*cmb+prim
9570
{ 0xae226012, cmb(cc__t1_sub_t0__mul_env_add_prim) },
9571
// menu background, Pokemon Stadium 2, [Raziel64]
9572
// (t0-prim)*lodf+env
9573
{ 0xae31ae31, cmb(cc_t0_sub_prim_mul_primlod_add_env) },
9574
// odd mushroom, zelda oot. Added by Gonetz
9575
// (t0-shade)*lodf+env, (prim-env)*cmb+env ** INC **
9576
{ 0xae41a053, cmb(cc__env_inter_prim_using__t0_sub_shade_mul_primlod_add_env) },
9577
// 0xae41a053, cmb(cc_prim_sub_env_mul__t0_mul_shade__add_env) },
9578
// Morning Sun, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
9579
// (t0-env)*lodf+env, (cmb-0)*prim+0
9580
{ 0xae51e3f0, cmb(cc__env_inter_t0_using_primlod__mul_prim) },
9581
//Spacestation Silicon Valley intro. Added by Gonetz
9582
// (prim-env)*lodf+env
9583
{ 0xae53ae53, cmb(cc_env_inter_prim_using_primlod) },
9584
// Doom, intro. Added by Gonetz
9585
// (t0-0)*lodf+env, (t0-0)*lodf+env
9586
{ 0xaef1aef1, cmb(cc_t0_add_env) },
9587
// Dobutsu no Mori. Added by Gonetz
9588
// (prim-0)*lodf+env
9589
{ 0xaef3aef3, cmb(cc_prim_add_env) },
9590
// light from window, Dobutsu no Mori. Added by Gonetz
9591
// (prim-0)*lodf+env, (t1-0)*cmb+0
9592
{ 0xaef3e0f2, cmb(cc_t1_mul__prim_add_env) },
9593
// intro, Mission Impossible. Added by Gonetz
9594
// (k5-k5)*0+env, (0-0)*scale+env
9595
{ 0xbfffa6ff, cmb(cc_env) },
9596
// Something blocking the screen, waverace
9597
//z (k5-k5)*0+env
9598
{ 0xbfffbfff, cmb(cc_env) },
9599
// Derby Stallion . Added by Gonetz
9600
// (0-0)*0+env, (cmb-0)*prim+0
9601
{ 0xbfffe3f0, cmb(cc_prim_mul_env) },
9602
// zelda 2 [Ogy]. Added by Gonetz
9603
// (k5-k5)*0+env, ((cmb-0)*shade+0
9604
{ 0xbfffe4f0, cmb(cc_env_mul_shade) },
9605
// flame, paper mario. Added by Gonetz
9606
// (t0-t1)*t0+1, (0-prim)*cmb+env **INC** weird
9607
{ 0xc121a03f, cmb(cc__t0_inter_t1_using_half__mul_prim_add_env) },
9608
// tube near big monster on level 5, Kirby64 [Raziel64]
9609
// (prim-env)*t0+1, (cmb-0)*shade+0 ** INC **
9610
{ 0xc153e4f0, cmb(cc_prim_sub_env_mul_t0_mul_shade) },
9611
// paper mario. Added by Gonetz
9612
// (0-env)*t0+1, (prim-cmb)*t0+prim **INC**
9613
{ 0xc15f6103, cmb(cc_env_sub_prim_mul_t0_add_prim) },
9614
// HAL, smash bros
9615
// (0-0)*0+1
9616
{ 0xdfffdfff, cmb(cc_one) },
9617
// arena, Pokemon Stadium 1, [Raziel64]
9618
// (0-0)*0+1, (cmb-0)*prim+0
9619
{ 0xdfffe3f0, cmb(cc_prim) },
9620
// skis, Spacestation Silicon Valley. Added by Gonetz
9621
// (shade-0)*cmb+0, (t1-t0)*primlod+t0
9622
{ 0xe0f42d12, cmb(cc_t0_inter_t1_using_primlod) },
9623
// paper mario. Added by Gonetz
9624
// (1-t1)*t0+0, (env-prim)*cmb+prim ** INC **
9625
{ 0xe1266035, cmb(cc_env_sub_prim_mul__t0_mul_t1__add_prim) },
9626
// ground, zelda 2. Added by Gonetz.
9627
// (t1-prim)*t0+0, (cmb-0)*shade+0
9628
{ 0xe132e4f0, cmb(cc__t1_sub_prim_mul_t0__mul_shade) },
9629
// carmagedon
9630
// (shade-prim)*t0+0
9631
{ 0xe134e134, cmb(cc_shade_sub_prim_mul_t0) },
9632
// skeleton, castlevania 2. Added by Gonetz
9633
// (1-prim)*t0+0, (cmb-0)*shade+0
9634
{ 0xe136e4f0, cmb(cc_t0_mul_1mprim_mul_shade) },
9635
// Starshot logo. Added by Gonetz
9636
// (shade-env)*t0+0, (1-0)*cmb+cmb
9637
{ 0xe15400f6, cmb(cc_shade_sub_env_mul_t0) },
9638
// Kirby morfing, smash bros. Added by Gonetz
9639
// (shade-env)*t0+0
9640
{ 0xe154e154, cmb(cc_shade_sub_env_mul_t0) },
9641
// menu, PGA euro tour. Added by Gonetz
9642
// (1-env)*t0+0
9643
{ 0xe156e156, cmb(cc_one_sub_env_mul_t0) },
9644
// paper mario. Added by Gonetz
9645
// (t0-0)*t0+0, (1-cmb)*prim+cmb
9646
{ 0xe1f10306, cmb(cc_one_sub_t0_mul_prim_add_t0) },
9647
// F1 World Grand Prix. Added by Gonetz
9648
// (t0-0)*t0+0, (shade-prim)*cmb+prim
9649
{ 0xe1f16034, cmb(cc_shade_sub_prim_mul_t0_add_prim) },
9650
// paper mario. Added by Gonetz
9651
// (t0-0)*t0+0, (env-prim)*cmb+prim
9652
{ 0xe1f16035, cmb(cc_env_sub_prim_mul_t0_add_prim) },
9653
// sparkles, F1 World Grand Prix. Added by Gonetz
9654
// (t0-0)*t0+0, (1-prim)*cmb+prim
9655
{ 0xe1f16036, cmb(cc_one_sub_prim_mul_t0_add_prim) },
9656
// Tony Hawk's Pro Skater. Added by Gonetz
9657
// (t0-0)*t0+0, (cmb-0)*t0+0
9658
{ 0xe1f1e1f0, cmb(cc_t0) },
9659
// something in upper left corner, mario tennis
9660
// (t0-0)*t0+0
9661
{ 0xe1f1e1f1, cmb(cc_t0) },
9662
// zelda 2. Added by Gonetz
9663
// (t0-0)*t0+0, (cmb-0)*prim+0
9664
{ 0xe1f1e3f0, cmb(cc_t0_mul_prim) },
9665
// zelda 2 final movie. Added by Gonetz
9666
// (t0-0)*t0+0, (cmb-0)*shade+0
9667
{ 0xe1f1e4f0, cmb(cc_t0_mul_shade) },
9668
// paper mario. Added by Gonetz
9669
// (t0-t1)*t0+1, (env-cmb)*prima+cmb ** INC **
9670
{ 0xe1f20a05, cmb(cc_t1_mul_prima) },
9671
// terrain, SCARS. Added by Gonetz
9672
// (t1-0)*t0+0, (env-prim)*cmb+prim
9673
{ 0xe1f26035, cmb(cc_env_sub_prim_mul__t0_mul_t1__add_prim) },
9674
// Trees, Zelda 2
9675
// (t1-0)*t0+0, (cmb-0)*shade+prim
9676
{ 0xe1f264f0, cmb(cc__t0_mul_t1__mul_shade_add_prim) },
9677
// terrain, SCARS. Added by Gonetz
9678
// (t1-0)*t0+0, (env-shade)*cmb+shade
9679
{ 0xe1f28045, cmb(cc_env_sub_shade_mul__t0_mul_t1__add_shade) },
9680
// arena, Pokemon Stadium 2. Added by Gonetz
9681
// (t1-0)*t0+0, (cmb-prim)*shade+shade ** INC **
9682
{ 0xe1f28430, cmb(cc__t0_mul_t1__mul_shade) },
9683
// Zelda 2, [Ogy]. Added by Gonetz
9684
// (t1-0)*t0+0, (cmb-prim)*env+shade ** INC **
9685
{ 0xe1f28530, cmb(cc__t0_mul_t1__mul_env_add_shade) },
9686
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
9687
// (t1-0)*t0+0, (prim-env)*cmb+env
9688
{ 0xe1f2a053, cmb(cc_prim_sub_env_mul__t0_mul_t1__add_env) },
9689
// paper mario. Added by Gonetz
9690
// (t1-0)*t0+0, (cmb-0)*prim+env
9691
{ 0xe1f2a3f0, cmb(cc__t0_mul_t1__mul_prim_add_env) },
9692
// Sand, pokemon stadium 2
9693
// (t1-0)*t0+0, (cmb-prim)*shade+env ** INC **
9694
{ 0xe1f2a430, cmb(cc__t0_mul_t1__mul_shade) },
9695
// grass, Mission Impossible. Added by Gonetz
9696
// (t1-0)*t0+0, (shade-0)*cmb+0
9697
{ 0xe1f2e0f4, cmb(cc__t0_mul_t1__mul_shade) },
9698
// lighthouse's beam, zelda 2. Added by Gonetz
9699
// (t1-0)*t0+0, (cmb-0)*prim+0
9700
{ 0xe1f2e3f0, cmb(cc__t0_mul_t1__mul_prim) },
9701
// Bottom of wings, pilotwings
9702
// (t1-0)*t0+0, (cmb-0)*shade+0
9703
{ 0xe1f2e4f0, cmb(cc__t0_mul_t1__mul_shade) },
9704
// zelda 2. Added by Gonetz
9705
// (t1-0)*t0+0, (cmb-0)*prima+0
9706
{ 0xe1f2eaf0, cmb(cc__t0_mul_t1__mul_prima) },
9707
// lava, Roadsters. Added by Gonetz
9708
// (prim-0)*t0+0, (1-prim)*t0+cmb
9709
{ 0xe1f30136, cmb(cc_t0) },
9710
// sky, Pokemon Stadium 2. Added by Gonetz
9711
// (prim-0)*t0+0, (cmb-0)*shadea+env
9712
{ 0xe1f3abf0, cmb(cc_t0_mul_prim_mul_shadea_add_env) },
9713
// cars, Indy Racing 2000. Added by Gonetz
9714
// (prim-0)*t0+0, (shade-0)*cmb+0
9715
{ 0xe1f3e0f4, cmb(cc_t0_mul_prim_mul_shade) },
9716
// Sign shadows, zelda
9717
//z (prim-k5)*t0+cmb_a
9718
{ 0xe1f3e1f3, cmb(cc_t0_mul_prim) },
9719
// Table, mace
9720
// (prim-0)*t0+0, (cmb-0)*shade+0
9721
{ 0xe1f3e4f0, cmb(cc_t0_mul_prim_mul_shade) },
9722
// Gauntlet Legends intro
9723
// (prim-0)*t0+0, (cmb-0)*prima+0
9724
{ 0xe1f3eaf0, cmb(cc_t0_mul_prim_mul_prima) },
9725
// walls, beetle adventure racing. Added by Gonetz
9726
// (shade-0)*t0+0, (prim-0)*t0+cmb
9727
{ 0xe1f401f3, cmb(cc_t0_mul_shade) },
9728
// cars, ridge racer. Added by Gonetz
9729
// (shade-0)*t0+0, (prim-cmb)*cmb_a+cmb **INC**
9730
{ 0xe1f40703, cmb(cc_t0_mul_shade) },
9731
// water block, Paper Mario. Added by Gonetz
9732
// (shade-0)*t0+0, (prim-env)*cmb+env
9733
{ 0xe1f4a053, cmb(cc_prim_sub_env_mul__t0_mul_shade__add_env) },
9734
// a lot in TWINE. Added by Gonetz
9735
// (shade-0)*t0+0, (cmb-0)*prim+env
9736
{ 0xe1f4a3f0, cmb(cc_t0_mul_prim_mul_shade_add_env) },
9737
// Xena. Added by Gonetz
9738
// (shade-0)*t0+0, (env-0)*cmb+0
9739
{ 0xe1f4e0f5, cmb(cc_t0_mul_env_mul_shade) },
9740
// Starshot logo. Added by Gonetz
9741
// (shade-0)*t0+0, (1-0)*cmb+0
9742
{ 0xe1f4e0f6, cmb(cc_t0_mul_shade) },
9743
// Duck Dodgers intro. Added by Gonetz
9744
// (shade-0)*t0+0
9745
{ 0xe1f4e1f4, cmb(cc_t0_mul_shade) },
9746
// shadow, Mission Impossible. Added by Gonetz
9747
// (shade-0)*t0+0, (cmb-0)*prim+0
9748
{ 0xe1f4e3f0, cmb(cc_t0_mul_prim_mul_shade) },
9749
// Tony Hawk's Pro Skater 3. Added by Gonetz
9750
// (env-0)*t0+0, (t1-0)*shade+cmb ** INC **
9751
{ 0xe1f504f2, cmb(cc__t0_add_t1__mul_shade) },
9752
// text, tonic trouble. Added by Gonetz
9753
// (env-0)*t0+0
9754
{ 0xe1f5e1f5, cmb(cc_t0_mul_env) },
9755
// powder keg, zelda 2. Added by Gonetz
9756
// (env-0)*t0+0, (cmb-0)*shade+0
9757
{ 0xe1f5e4f0, cmb(cc_t0_mul_env_mul_shade) },
9758
// water, Starshot. Added by Gonetz
9759
// (1-0)*t0+0, (1-0)*cmb+0
9760
{ 0xe1f6e0f6, cmb(cc_t0) },
9761
// bomberman 64 [Ogy]
9762
// (1-0)*t0+0
9763
{ 0xe1f6e1f6, cmb(cc_t0) },
9764
// Mermaid attack, Mystical Ninja
9765
// (noise-0)*t0+0
9766
{ 0xe1f7e1f7, cmb(cc_t0) },
9767
// paper mario. Added by Gonetz * changed because of odd palette copy
9768
// (t0-0)*t1+0, (shade-env)*cmb+cmb **INC** ?
9769
{ 0xe2f10054, cmb(cc_shade_sub_env_mul__t0_mul_t1__add__t0_mul_t1) },
9770
// water, PGA European Tour
9771
// (t0-0)*t1+0, (env-cmb)*prim+cmb
9772
{ 0xe2f10305, cmb(cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_env) },
9773
// Grass, mario golf
9774
// (t0-0)*t1+0, (cmb-t0)*cmb_a+t0
9775
{ 0xe2f12710, cmb(cc_t0_mul_t1) },
9776
// xg2, Added by Gonetz
9777
// (t0-0)*t1+0, (env-prim)*cmb+prim
9778
{ 0xe2f16035, cmb(cc_env_sub_prim_mul__t0_mul_t1__add_prim) },
9779
// poo, CBFD, Added by Gonetz
9780
// (t0-0)*t1+0, (cmb-env)*shade+prim ** INC **
9781
{ 0xe2f16450, cmb(cc__t0_mul_t1__mul_shade_add_prim) },
9782
// sky, xg2, Added by Gonetz
9783
// (t0-0)*t1+0, (cmb-prim)*cmb_a+prim
9784
{ 0xe2f16730, cmb(cc__t0_mul_t1__sub_prim_mul__t0t1a__add_prim ) },
9785
// Sin and Punishment, [scorpiove], Added by Gonetz
9786
// (t0-0)*t1+0, (env-prim)*cmb_a+prim
9787
{ 0xe2f16735, cmb(cc_env_sub_prim_mul__t0t1a__add_prim) },
9788
// light, Ridge Racer. Added by Gonetz
9789
// (t0-0)*t1+0, (prim-env)*cmb+env
9790
{ 0xe2f1a053, cmb(cc_prim_sub_env_mul__t0_mul_t1__add_env) },
9791
// Waterfall, duck dodgers. Added by Gonetz
9792
// (t0-0)*t1+0, (shade-env)*cmb+env
9793
{ 0xe2f1a054, cmb(cc_shade_sub_env_mul__t0_mul_t1__add_env) },
9794
// bikes, xg2
9795
// (t0-0)*t1+0, (shade-0)*cmb+0
9796
{ 0xe2f1e0f4, cmb(cc__t0_mul_t1__mul_shade) },
9797
// Sky background, xg2
9798
// (t0-0)*t1+0
9799
{ 0xe2f1e2f1, cmb(cc_t0_mul_t1) },
9800
// statistics, Banjo 2. Added by Gonetz
9801
// (t0-0)*t1+0, (cmb-0)*prim+0
9802
{ 0xe2f1e3f0, cmb(cc__t0_mul_t1__mul_prim) },
9803
// Water, pilotwings
9804
// (t0-0)*t1+0, (cmb-0)*shade+0
9805
{ 0xe2f1e4f0, cmb(cc__t0_mul_t1__mul_shade) },
9806
//beetle adventure racing. A dded by Gonetz
9807
// (t0-0)*t1+0, (cmb-0)*env+0
9808
{ 0xe2f1e5f0, cmb(cc__t0_mul_t1__mul_env) },
9809
//fall headwaters, zelda 2. Added by Gonetz
9810
// (t1-0)*t1+0, (cmb-0)*shade+0
9811
{ 0xe2f2e4f0, cmb(cc_t1_mul_shade) },
9812
//text, Paper Mario
9813
// (prim-0)*t1+0
9814
{ 0xe2f3e2f3, cmb(cc_t1_mul_prim) },
9815
//terrain, Beetle Adventure Racing. Added by Gonetz
9816
// (shade-0)*t1+0
9817
{ 0xe2f4e2f4, cmb(cc_t1_mul_shade) },
9818
// lens of truth, zelda 2 [Ogy]. Added by Gonetz
9819
// (1-t0)*prim+0
9820
{ 0xe316e316, cmb(cc_one_sub_t0_mul_prim) },
9821
// Magnitude, pokemon stadium 2
9822
// (t0-0)*prim+0, (t0-0)*env+cmb
9823
{ 0xe3f105f1, cmb(cc_t0_mul__prim_add_env) },
9824
// night vision, jet force gemini
9825
// (t0-0)*prim+0, (noise-0)*env+cmb
9826
{ 0xe3f105f7, cmb(cc_t0_mul_prim_add_env) },
9827
// Smoke, diddy kong racing
9828
// (t0-0)*prim+0, (env-cmb)*env_alpha+cmb
9829
{ 0xe3f10c05, cmb(cc_t0_mul_prim) },
9830
// battle menu, Paper Mario. Added by Gonetz
9831
// (t0-0)*prim+0, (t0-env)*env_alpha+cmb ** INC **
9832
{ 0xe3f10c51, cmb(cc_t0_mul_prim) },
9833
// stalactites, Beetle adventure Racing. Added by Gonetz
9834
// (t0-0)*prim+0, (cmb-shade)*t1_alpha+shade ** INC **
9835
{ 0xe3f18940, cmb(cc_t0_mul_prim_add_shade ) },
9836
// ? in Jabu-Jabu's belly, submitted by gokuss4
9837
// 0xe4f1a053, (t0-0)*prim+0, (prim-env)*cmb+env
9838
{ 0xe3f1a053, cmb(cc_prim_sub_env_mul__t0_mul_prim__add_env) },
9839
// kirby drill, kirby 64. Added by Gonetz
9840
// (t0-0)*prim+0, (cmb-env)*shade+env **INC**
9841
{ 0xe3f1a450, cmb(cc_t0_mul_prim_mul_shade_add_env) },
9842
// ? sign, zelda 2. Added by Gonetz
9843
// (t0-0)*prim+0, (cmb-0)*cmb+0 ** INC **
9844
{ 0xe3f1e0f0, cmb(cc_t0_mul_prim) },
9845
// vehicle, Star Wars Ep.1 Racer, [Raziel64]. Added by Gonetz
9846
// (t0-0)*prim+0, (shade-0)*cmb+0
9847
{ 0xe3f1e0f4, cmb(cc_t0_mul_prim_mul_shade) },
9848
// magic stuff, buck bumble. Added by Gonetz
9849
// (t0-0)*prim+0, (cmb-0)*prim+0
9850
{ 0xe3f1e3f0, cmb(cc_t0_mul_prim_mul_prim) },
9851
// The mario face, mario
9852
//z (t0-k5)*prim+cmb_a
9853
{ 0xe3f1e3f1, cmb(cc_t0_mul_prim) },
9854
// Butterflies at Jabu-Jabu's lake, zelda
9855
// (t0-0)*prim+0, (cmb-0)*shade+0
9856
{ 0xe3f1e4f0, cmb(cc_t0_mul_prim_mul_shade) },
9857
// Sprites, Ogre Battle. Added by Gonetz
9858
// (t1-0)*prim+0
9859
{ 0xe3f2e3f2, cmb(cc_t1_mul_prim) },
9860
// F1 World Grand Prix. Added by Gonetz
9861
// (t1-0)*prim+0, (cmb-0)*shade+0
9862
{ 0xe3f2e4f0, cmb(cc_t1_mul_prim_mul_shade) },
9863
// intro background, bio freaks. Added by Gonetz
9864
// (prim-0)*prim+0
9865
{ 0xe3f3e3f3, cmb(cc_prim_mul_prim) },
9866
// player, Ohzumou2
9867
// (shade-0)*prim+0, (env-cmb)*t0+cmb
9868
{ 0xe3f40105, cmb(cc_env_sub_primshade_mul_t0_add_primshade) },
9869
// floor in pyramides, beetle adventure racing.
9870
// (shade-0)*prim+0, (t1-0)*cmb+0
9871
{ 0xe3f4e0f2, cmb(cc_t1_mul_prim_mul_shade) },
9872
// Slingshot string, zelda
9873
// (shade-0)*prim+0
9874
{ 0xe3f4e3f4, cmb(cc_prim_mul_shade) },
9875
// ???, zelda
9876
// (env-0)*prim+0, (0-0)*0+cmb
9877
{ 0xe3f5e3f5, cmb(cc_prim_mul_env) },
9878
// Option selection, zelda
9879
//z (center-k5)*prim+cmb_a
9880
{ 0xe3f6e3f6, cmb(cc_t0_mul_prim) },
9881
// ranco monster, zelda 2. Added by Gonetz
9882
// (noise-0)*prim+0, (cmb-0)*prim_a+prim
9883
{ 0xe3f76af0, cmb(cc_prim_mul_prima_add_prim) },
9884
// zelda 2 [Ogy]. Added by Gonetz
9885
// (noise-0)*prim+0
9886
{ 0xe3f7e3f7, cmb(cc_prim) },
9887
// Road rush. Added by Gonetz
9888
// (0-0)*prim+0 ** INC ** ?
9889
{ 0xe3ffe3ff, cmb(cc_prim) },
9890
// Letter to Kafei's mom, zelda 2. Added by Gonetz
9891
// (0-0)*prim+0, (cmb-0)*shade+0
9892
{ 0xe3ffe4f0, cmb(cc_prim_mul_shade) },
9893
// Jabu-Jabu's Belly, zelda. Added by Gonetz
9894
// (1-t0)*shade+0, (cmb-0)*prim+0
9895
{ 0xe416e3f0, cmb(cc_one_sub_t0_mul_prim_mul_shade) },
9896
// bomb mask, zelda 2. Added by Gonetz
9897
// (t0-env)*shade+0, (cmb-prim)*shade+shade ** INC **
9898
{ 0xe4518430, cmb(cc__t0_sub_env_mul_shade__sub_prim_mul_shade) },
9899
// terrain, Top Gear Rally 2. Added by Gonetz
9900
// (t0-env)*shade+0
9901
{ 0xe451e451, cmb(cc_t0_sub_env_mul_shade) },
9902
// closes, Nightmire Creatures
9903
// (1-env)*shade+0
9904
{ 0xe456e456, cmb(cc_one_sub_env_mul_shade) },
9905
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
9906
// (t0-0)*shade+0, (cmb-cmb)*cmb+cmb
9907
{ 0xe4f10000, cmb(cc_t0_mul_shade) },
9908
// Monster truck madness intro. Added by Gonetz
9909
// (t0-0)*shade+0, (1-0)*cmb+cmb ** INC **
9910
{ 0xe4f100f6, cmb(cc_t0_mul_shade) },
9911
// terrain, SCARS. Added by Gonetz
9912
// (t0-0)*shade+0, (prim-cmb)*t0+cmb ** INC **
9913
{ 0xe4f10103, cmb(cc_t0_mul_shade) },
9914
// Boomerang circle, zelda
9915
// (t0-0)*shade+0, (1-cmb)*t0+cmb
9916
{ 0xe4f10106, cmb(cc_t0_mul_shade) },
9917
// THPS3.
9918
// (t0-0)*shade+0, (1-0)*t0+cmb
9919
{ 0xe4f101f6, cmb(cc_t0_mul_shade) },
9920
// ???, WWF No Mercy [CpuMaster]
9921
// (t0-0)*shade+0, (env-cmb)*prim+cmb
9922
{ 0xe4f10305, cmb(cc_t0_mul_one_sub_prim_mul_shade_add_prim_mul_env) },
9923
// magic bubble, zelda2. Added by Gonetz
9924
// (t0-0)*shade+0, (t1-0)*shade+0
9925
{ 0xe4f104f2, cmb(cc_t0_mul_shade) },
9926
// bike select, xg2. Added by Gonetz
9927
// (t0-0)*shade+0, (1-cmb)*env+cmb ** INC **
9928
{ 0xe4f10506, cmb(cc_t0_mul_shade) },
9929
// a bugs life [Ogy]
9930
// (t0-0)*shade+0, (cmb-0)*env+cmb
9931
// 0xe4f105f0, cmb(cc_t0_mul_env_mul_shade) },
9932
{ 0xe4f105f0, cmb(cc_t0_mul_shade) },
9933
// Wall, quest64
9934
// (t0-0)*shade+0, (1-0)*env+cmb
9935
{ 0xe4f105f6, cmb(cc_t0_mul_shade_add_env) },
9936
//lava, beetle adventure racing. Added by Gonetz
9937
// (t0-0)*shade+0, (prim-cmb)*cmb_a+cmb **INC**
9938
{ 0xe4f10703, cmb(cc_t0_mul_shade) },
9939
// course map, Ridge Racer. Added by Gonetz
9940
// (t0-0)*shade+0, (prim-cmb)*prima+cmb **INC**
9941
{ 0xe4f10a03, cmb(cc_t0_mul_shade) },
9942
// arena, custom robo. Added by Gonetz
9943
// (t0-0)*shade+0, (noise-cmb)*prima+cmb **INC**
9944
{ 0xe4f10a07, cmb(cc_t0_mul_shade) },
9945
// arena, custom robo 2. Added by Gonetz
9946
// (t0-0)*shade+0, (0-cmb)*prima+cmb **INC**
9947
{ 0xe4f10a0f, cmb(cc_t0_mul_shade) },
9948
//floor in a cave, Paper mario. Added by Gonetz
9949
// (t0-0)*shade+0, (cmb-prim)*prima+cmb **INC**
9950
{ 0xe4f10a30, cmb(cc_t0_mul_shade) },
9951
//beetle adventure racing. Added by Gonetz
9952
// (t0-0)*shade+0, (t1-prim)*prima+cmb **INC**
9953
{ 0xe4f10a32, cmb(cc_t0_mul_shade) },
9954
// Monster truck madness intro. Added by Gonetz
9955
// (t0-0)*shade+0, (shade-cmb)*shade_a+cmb ** INC **
9956
{ 0xe4f10b04, cmb(cc_t0_mul_shade) },
9957
// xg2 intro. Added by Gonetz
9958
// (t0-0)*shade+0, (1-cmb)*shade_a+cmb ** INC **
9959
{ 0xe4f10b06, cmb(cc__t0_mul_shade__inter_one_using_shadea) },
9960
// Link's bomb, smash bros
9961
// (t0-0)*shade+0, (env-cmb)*env_a+cmb ** INC **
9962
{ 0xe4f10c05, cmb(cc__t0_mul_shade__inter_env_using_enva) },
9963
// A Bugs Life, [Raziel64]
9964
// (t0-0)*shade+0, (cmb-0)*k5+cmb
9965
{ 0xe4f10ff0, cmb(cc_t0_mul_shade) },
9966
// car, Top Gear Rally. Added by Gonetz
9967
// (t0-0)*shade+0, (cmb-t0)*t0a+t0 **INC**
9968
{ 0xe4f12810, cmb(cc_t0_mul_shade) },
9969
// logo, SCARS. Added by Gonetz
9970
// (t0-0)*shade+0, (cmb-t0)*shadea+t0 **INC**
9971
{ 0xe4f12b10, cmb(cc_t0_mul_shade) },
9972
// ? sign, Spiderman. Added by Gonetz
9973
// (t0-0)*shade+0, (0-0)*0+t1
9974
{ 0xe4f15fff, cmb(cc_t0_mul_shade) },
9975
// plants, CBFD. Added by Gonetz
9976
// (t0-0)*shade+0, (cmb-env)*shade+prim ** INC **
9977
{ 0xe4f16450, cmb(cc_t0_sub_env_mul_shade_add_prim) },
9978
// Kirby64. Added by Gonetz
9979
// (t0-0)*shade+0, (cmb-prim)*prima+prim
9980
{ 0xe4f16a30, cmb(cc_t0_mul_prima_mul_shade_add_prim_mul_one_sub_prima) },
9981
// building shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
9982
// (t0-0)*shade+0, (0-0)*0+prim
9983
{ 0xe4f17fff, cmb(cc_prim) },
9984
// tire trace, beetle adventure racing. Added by Gonetz
9985
// (t0-0)*shade+0, (env-cmb)*t1+shade **INC**
9986
{ 0xe4f18205, cmb(cc_env_sub_shade_mul_t0_add_shade) },
9987
// Gold Skulltula, zelda
9988
// (t0-0)*shade+0, (prim-env)*cmb+env
9989
{ 0xe4f1a053, cmb(cc_prim_sub_env_mul_t0_mul_shade_add_env) },
9990
// 0xe4f1a053, cmb(cc_t0_mul_prim_mul_shade) },
9991
// fighters, GASP Fighters
9992
// (t0-0)*shade+0, (1-env)*cmb+env
9993
{ 0xe4f1a056, cmb(cc_t0_mul_one_sub_env_mul_shade_add_env) },
9994
// Brian, quest64
9995
// (t0-0)*shade+0, (cmb-0)*prim+env
9996
{ 0xe4f1a3f0, cmb(cc_t0_mul_prim_mul_shade_add_env) },
9997
// Objects in arena, pokemon stadium 2
9998
// (t0-0)*shade+0
9999
// (cmb-prim)*shade+env
10000
{ 0xe4f1a430, cmb(cc_t0_mul_shade) },
10001
// Monster truck madness intro. Added by Gonetz
10002
// (t0-0)*shade+0, (cmb-env)*shadea+env **INC**
10003
// 0xe4f1ab50, cmb(cc_t0_mul_shade_add_env) },
10004
{ 0xe4f1ab50, cmb(cc__t0_mul_shade__sub_env_mul_shadea_add_env) },
10005
// Taz express. Added by Gonetz
10006
// (t0-0)*shade+0, (cmb-env)*enva+env **INC**
10007
{ 0xe4f1ac50, cmb(cc_t0_mul_shade_add_env) },
10008
// sky in doom. Added by Gonetz
10009
// (t0-0)*shade+0, (cmb-0)*primlod+env **INC**
10010
{ 0xe4f1aef0, cmb(cc_t0_mul_shade_add_env) },
10011
// fighters, GASP Fighters
10012
// (t0-0)*shade+0, (1-env)*cmb+0
10013
{ 0xe4f1e056, cmb(cc_t0_mul_one_sub_env_mul_shade) },
10014
// walls, beetle adventure racing. Added by Gonetz
10015
// (t0-0)*shade+0, (t0-0)*cmb+0 **INC**
10016
{ 0xe4f1e0f1, cmb(cc_t0_mul_shade) },
10017
// Link's face, zelda
10018
//z (t0-k5)*shade+cmb_a, (prim-k5)*cmb+cmb_a
10019
{ 0xe4f1e0f3, cmb(cc_t0_mul_prim_mul_shade) },
10020
// Link's suit, zelda
10021
//z (t0-k5)*shade+cmb_a, (env-k5)*cmb+cmb_a
10022
{ 0xe4f1e0f5, cmb(cc_t0_mul_env_mul_shade) },
10023
// Window, starfox
10024
//z (t0-k5)*shade+cmb_a, (cmb-k5)*prim+cmb_a
10025
{ 0xe4f1e3f0, cmb(cc_t0_mul_prim_mul_shade) },
10026
// crystal, Doraemon 2
10027
//(t0-0)*shade+0, (t0-0)*prim+0
10028
{ 0xe4f1e3f1, cmb(cc_t0_mul_prim) },
10029
// Characters, mace
10030
// (t0-0)*shade+0, (cmb-0)*shade+0
10031
{ 0xe4f1e4f0, cmb(cc_t0_mul_shade) },
10032
// Super Mario 64 logo
10033
//z (t0-k5)*shade+cmb_a
10034
{ 0xe4f1e4f1, cmb(cc_t0_mul_shade) },
10035
// Kokiri's hat, zelda
10036
// (t0-0)*shade+0, (cmb-0)*env+0
10037
{ 0xe4f1e5f0, cmb(cc_t0_mul_env_mul_shade) },
10038
// Gauntlet Legends intro
10039
// (t0-0)*shade+0, (cmb-0)*scale+0
10040
{ 0xe4f1e6f0, cmb(cc_t0_mul_shade) },
10041
// Something on a tree, Paper Mario. Added by Gonetz
10042
// (t0-0)*shade+0, (cmb-0)*prima+0
10043
{ 0xe4f1eaf0, cmb(cc_t0_mul_prima_mul_shade) },
10044
// Course map, Ridge Racer. Added by Gonetz
10045
// (t0-0)*shade+0, (cmb-0)*shadea+0
10046
{ 0xe4f1ebf0, cmb(cc_t0_mul_shade_mul_shadea) },
10047
// Dodongo skull's eyes, zelda
10048
// (t0-0)*shade+0, (cmb-0)*env_alpha+0
10049
{ 0xe4f1ecf0, cmb(cc_t0_mul_enva_mul_shade) },
10050
// lava, beetle adventure racing. Added by Gonetz
10051
// (t1-0)*shade+0, (cmb-prim)*cmb_a+prim **INC**
10052
{ 0xe4f26730, cmb(cc_t1_mul_shade) },
10053
// headlight, beetle adventure racing. Added by Gonetz
10054
// (t1-0)*shade+0, (env-cmb)*t0+shade **INC**
10055
{ 0xe4f28105, cmb(cc_one_sub__t0_mul_t1__mul_shade) },
10056
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
10057
// (prim-0)*shade+0, (cmb-cmb)*cmb+cmb
10058
{ 0xe4f30000, cmb(cc_prim_mul_shade) },
10059
// lamp shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
10060
// (prim-0)*shade+0, (cmb-cmb)*t0+cmb
10061
{ 0xe4f30100, cmb(cc_prim_mul_shade) },
10062
// Yoshi, mario golf
10063
// (prim-0)*shade+0, (env-cmb)*t0+cmb
10064
{ 0xe4f30105, cmb(cc_env_sub_primshade_mul_t0_add_primshade) },
10065
//Spacestation Silicon Valley intro. Added by Gonetz
10066
// (prim-0)*shade+0, (env-cmb)*t1+cmb
10067
{ 0xe4f30205, cmb(cc_env_sub_primshade_mul_t1_add_primshade) },
10068
// Tip of brian's hair, quest64
10069
// (prim-0)*shade+0, (1-0)*env+cmb
10070
{ 0xe4f305f6, cmb(cc_prim_mul_shade_add_env) },
10071
// Background circle, xg2
10072
// (prim-0)*shade+0, (1-cmb)*shade_a+cmb
10073
{ 0xe4f30b06, cmb(cc_prim_mul_shade) },
10074
// circle, waverace. Added by Gonetz
10075
// (prim-0)*shade+0, (t0-cmb)*enva+cmb
10076
{ 0xe4f30c01, cmb(cc_t0_sub__prim_mul_shade__mul_enva_add__prim_mul_shade) },
10077
// player, super bowling
10078
// (prim-0)*shade+0, (0-0)*k5+cmb
10079
{ 0xe4f30fff, cmb(cc_prim_mul_shade) },
10080
// walls, beetle adventure racing. Added by Gonetz
10081
// (prim-0)*shade+0, (cmb-shade)*t1+shade **INC**
10082
{ 0xe4f38240, cmb(cc_prim_sub_shade_mul_t1_add_shade) },
10083
// GASP fighters
10084
//(prim-0)*shade+0, (1-env)*cmb+0
10085
{ 0xe4f3e056, cmb(cc_prim_mul_one_sub_env_mul_shade) },
10086
// Flag, mario kart
10087
//z (prim-k5)*shade+cmb_a
10088
{ 0xe4f3e4f3, cmb(cc_prim_mul_shade) },
10089
// Characters, smash bros
10090
// (prim-0)*shade+0, (cmb-0)*env+0
10091
{ 0xe4f3e5f0, cmb(cc_prim_mul_env_mul_shade) },
10092
// N64 logo, ridge race. Added by Gonetz
10093
// (shade-0)*shade+0, (prim-cmb)*prima+cmb **INC**
10094
{ 0xe4f40a03, cmb(cc_shade) },
10095
// fighter, shield mode, bio freaks. Added by Gonetz
10096
// (shade-0)*shade+0
10097
{ 0xe4f4e4f4, cmb(cc_shade) },
10098
// truck crush, Monster truck madness. Added by Gonetz
10099
// (env-0)*shade+0, (env-0)*shade+cmb
10100
{ 0xe4f504f5, cmb(cc_env_mul_shade) },
10101
// Course map, Ridge Racer. Added by Gonetz
10102
// (env-0)*shade+0
10103
{ 0xe4f5e4f5, cmb(cc_env_mul_shade) },
10104
// lava, beetle adventure racing
10105
// (1-0)*shade+0, (prim-cmb)*cmb_a+cmb
10106
{ 0xe4f60703, cmb(cc_prim_sub_shade_mul_shadea_add_shade) },
10107
// the wings in the song of soaring cut-scene, zelda2 [Ogy]. Added by Gonetz
10108
// (1-0)*shade+0, (prim-0)*cmb+0
10109
{ 0xe4f6e0f3, cmb(cc_prim_mul_shade) },
10110
// parts of vehicle, Star Wars Ep.I Racer. Added by Gonetz
10111
// (1-0)*shade+0, (cmb-0)*prim+0
10112
{ 0xe4f6e3f0, cmb(cc_prim_mul_shade) },
10113
// Snowflakes??? (gokuss4) }, mario kart
10114
// (1-0)*shade+0, (1-0)*shade+0
10115
{ 0xe4f6e4f6, cmb(cc_shade) },
10116
// ???
10117
// (noise-0)*shade+0
10118
{ 0xe4f7e4f7, cmb(cc_shade) },
10119
// quest64 [Ogy]
10120
// (prim-t0)*env+0, (0-0)*0+prim
10121
{ 0xe5137fff, cmb(cc_prim) },
10122
// field, Mike Piazza's Strike Zone
10123
// (t0-prim)*env+0 ** INC **
10124
{ 0xe531e531, cmb(cc_t0_mul_env) },
10125
// Mike Piazza's Strike Zone
10126
// (shade-prim)*env+0
10127
{ 0xe534e534, cmb(cc_shade_sub_prim_mul_env) },
10128
// rope, CBFD. Added by Gonetz
10129
// (t0-0)*env+0, (1-env)*prim+cmb
10130
{ 0xe5f10356, cmb(cc_one_sub_env_mul_prim_add__t0_mul_env) },
10131
// Bell, Pokemon Stadium 2. Added by Gonetz
10132
// (t0-0)*env+0, (shade-0)*prim+cmb
10133
{ 0xe5f103f4, cmb(cc_t0_mul_env_add_prim_mul_shade) },
10134
// aerofighter's assault [Ogy]
10135
// (t0-0)*env+0, (1-t0)*shade+cmb
10136
{ 0xe5f10416, cmb(cc_t0_mul_env_add_1mt0_mul_shade) },
10137
// foto, Armorines - Project S.W.A.R.M. Added by Gonetz
10138
// (t0-0)*env+0, (noise-0)*scale+cmb
10139
{ 0xe5f106f7, cmb(cc_t0_mul_env) },
10140
// Extreme G2, score. Added by Gonetz
10141
// (t0-0)*env+0, (1-cmb)*enva+cmb ** INC **
10142
{ 0xe5f10c06, cmb(cc_t0_mul_env) },
10143
// many objects in Tonic Trouble
10144
// (t0-0)*env+0, (shade-0)*cmb+0
10145
{ 0xe5f1e0f4, cmb(cc_t0_mul_env_mul_shade) },
10146
// Flying skull's eyes, zelda
10147
// (t0-0)*env+0, (cmb-0)*prim+0
10148
{ 0xe5f1e3f0, cmb(cc_t0_mul_prim_mul_env) },
10149
// Rock spell, quest64
10150
// (t0-0)*env+0, (cmb-0)*shade+0
10151
{ 0xe5f1e4f0, cmb(cc_t0_mul_env_mul_shade) },
10152
// Text, mario
10153
//z (t0-k5)*env+cmb_a
10154
{ 0xe5f1e5f1, cmb(cc_t0_mul_env) },
10155
// kirby 64. Added by Gonetz
10156
// (prim-0)*env+0, (cmb-0)*shade+0
10157
{ 0xe5f3e4f0, cmb(cc_prim_mul_env_mul_shade) },
10158
// wings, kirby 64. Added by Gonetz
10159
// (prim-0)*env+0
10160
{ 0xe5f3e5f3, cmb(cc_prim_mul_env) },
10161
// Text, xg2
10162
// (shade-0)*env+0, (1-cmb)*env_a+cmb
10163
{ 0xe5f40c06, cmb(cc_env_mul_shade) },
10164
// Text box, mario
10165
//z (shade-k5)*env+cmb_a
10166
{ 0xe5f4e5f4, cmb(cc_env_mul_shade) },
10167
// bomberman 64 [Ogy]
10168
// (1-0)*env+0
10169
{ 0xe5f6e5f6, cmb(cc_env) },
10170
// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
10171
// (1-t0)*scale+0
10172
{ 0xe616e616, cmb(cc_zero) },
10173
// Gauntlet Legends intro. Added by Gonetz
10174
// (t0-0)*scale+0, (cmb-0)*shade+0
10175
{ 0xe6f1e4f0, cmb(cc_t0_mul_shade) },
10176
// shadows, Taz express. Added by Gonetz
10177
// (t0-0)*scale+0
10178
{ 0xe6f1e6f1, cmb(cc_t0) },
10179
// shadows, Knockout Kings 2000. Added by Gonetz
10180
// (shade-0)*scale+0
10181
{ 0xe6f4e6f4, cmb(cc_shade) },
10182
// bomberman 64 2 [Ogy]. Added by Gonetz
10183
// (1-0)*scale+0 **INC** what "scale" is ?
10184
{ 0xe6f6e6f6, cmb(cc_one) },
10185
// walls, beetle adventure racing. Added by Gonetz
10186
// (t1-0)*t0_a+0, (1-t1)*cmb+t1 **INC**
10187
{ 0xe8f24026, cmb(cc_t1) },
10188
// house on rancho, zelda2. Added by Gonetz
10189
// (t1-0)*t0_a+0, (cmb-0)*prim+0
10190
{ 0xe8f2e3f0, cmb(cc__t0a_mul_t1__mul_prim) },
10191
// zelda2 [Ogy]. Added by Gonetz
10192
// (t1-0)*t0_a+0, (cmb-0)*shade+0
10193
{ 0xe8f2e4f0, cmb(cc__t0a_mul_t1__mul_shade) },
10194
// logo, Deadly Arts. Added by Gonetz
10195
// (t0-0)*t1_a+0, (cmb-0)*shade+0
10196
{ 0xe9f1e4f0, cmb(cc__t0_mul_t1a__mul_shade) },
10197
// car, Roadsters. Added by Gonetz
10198
// (prim-t0)*prim_a+0, (prim-cmb)*shade+0 ** INC **
10199
{ 0xea13e403, cmb(cc_prim_sub__prim_sub_t0_mul_prima__mul_shade) },
10200
// arena, Pokemon Stadium 2. Added by Gonetz
10201
// (1-t0)*prim_a+0, (0-prim)*cmb+prim ** INC **
10202
{ 0xea16603f, cmb(cc_t0_mul_prim) },
10203
// match start, Mario Tennis. Added by Gonetz
10204
// (t0-0)*prim_a+0, (1-t0)*cmb+t0 ** INC **
10205
{ 0xeaf12016, cmb(cc_one_sub_t0_mul_prima_add_t0) },
10206
// blast corps [Ogy]
10207
// (t0-0)*prim_a+0
10208
{ 0xeaf1eaf1, cmb(cc_t0_mul_prima) },
10209
// final battle, CBFD. Added by Gonetz
10210
// (prim-0)*prim_a+0
10211
{ 0xeaf3eaf3, cmb(cc_prim_mul_prima) },
10212
// flower's stalk, Paper Mario. Added by Gonetz
10213
// (shade-0)*prim_a+0
10214
{ 0xeaf4eaf4, cmb(cc_shade_mul_prima) },
10215
// blast corps [Ogy]
10216
// (noise-0)*prim_a+0, (t1-0)*shade+cmb ** INC **
10217
{ 0xeaf704f2, cmb(cc_t1_mul_shade) },
10218
// F1 World Grand Prix. Added by Gonetz
10219
// (noise-0)*prim_a+0, (t1-0)*env_a+cmb ** INC **
10220
{ 0xeaf70cf2, cmb(cc_t1_mul_enva) },
10221
// shadows, killer instinct gold
10222
// (0-0)*prim_a+0
10223
{ 0xeaffeaff, cmb(cc_zero) },
10224
// Wreslters, WWF No Mercy, [CpUMasteR]
10225
// (t0-0)*shade_alpha+0, (env-cmb)*prim+cmb
10226
{ 0xebf10305, cmb(cc_t0_mul_one_sub_prim_mul_shadea_add_prim_mul_env) },
10227
// map, Pilot wings. Added by Gonetz
10228
// (t0-0)*shade_alpha+0, (1-cmb)*shade+cmb
10229
{ 0xebf10406, cmb(cc_one_sub_shade_mul__t0_mul_shadea__add_shade) },
10230
// Indy Racing 2000. Added by Gonetz
10231
// (t0-0)*shade_alpha+0, (1-0)*shade+cmb
10232
{ 0xebf104f6, cmb(cc_t0_mul_shadea_add_shade) },
10233
// logo, WCW-nWo Revenge
10234
// (t0-0)*shade_alpha+0, (cmb-0)*prim+0
10235
{ 0xebf1e3f0, cmb(cc_t0_mul_prim_mul_shadea) },
10236
// Wrestlers in Game, WWF No mercy [CpUMasteR]
10237
// (t0-0)*shade_alpha+0
10238
{ 0xebf1ebf1, cmb(cc_t0_mul_shadea) },
10239
// flag, top gear overdrive
10240
// (prim-0)*shade_alpha+0
10241
{ 0xebf3ebf3, cmb(cc_prim_mul_shadea) },
10242
// Ropes, WWF games
10243
// (shade-0)*shade_alpha+0, (env-cmb)*prim+cmb
10244
{ 0xebf40305, cmb(cc_shade_mul_shadea) },
10245
// Ropes, WWF games
10246
// (shade-0)*shade_alpha+0
10247
{ 0xebf4ebf4, cmb(cc_shade_mul_shadea) },
10248
// arena, custom robo 2
10249
// (noise-0)*shade_alpha+0
10250
{ 0xebf7ebf7, cmb(cc_shadea) },
10251
// Bell, Pokemon Stadium 2. Added by Gonetz
10252
// (t0-0)*enva+0, (shade-0)*prim+cmb
10253
{ 0xecf103f4, cmb(cc_t0_mul_enva_add_prim_mul_shade) },
10254
// blastcorps, unimp log. Added by Gonetz
10255
// (t0-0)*enva+0
10256
{ 0xecf1ecf1, cmb(cc_t0_mul_enva) },
10257
// car, Top Gear Rally. Added by Gonetz
10258
// (env-0)*enva+0
10259
{ 0xecf5ecf5, cmb(cc_env_mul_enva) },
10260
// Walls of well through lens of truth, zelda
10261
// (prim-t0)*primlod+0 ** INC **
10262
{ 0xee13ee13, cmb(cc_t0) }, // JUST t0 b/c the other combiner handles the subtraction
10263
// something on a flor in stone temple, zelda 2. Added by Gonetz
10264
// (t0-0)*primlod+0, (cmb-0)*prim+0
10265
{ 0xeef1e3f0, cmb(cc_t0_mul_primlod_mul_prim) },
10266
// entrance to oceanside spider house, zelda 2. Added by Gonetz
10267
// (t0-0)*primlod+0, (cmb-0)*shade+0
10268
{ 0xeef1e4f0, cmb(cc_t0_mul_primlod_mul_shade) },
10269
// Haze/(all powder status changers) }, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
10270
// (noise-0)*primlod+0, (prim-env)*cmb+env ** INC **
10271
{ 0xeef7a053, cmb(cc_env) },
10272
// pokemon attack, Pokemon Stadium 2. Added by Gonetz
10273
// (noise-0)*primlod+0, (prim-cmb)*cmb+0 ** INC **
10274
{ 0xeef7e003, cmb(cc_zero) },
10275
// Night trees, Monster truck madness. Added by Gonetz
10276
// (t0-0)*k5+0
10277
{ 0xeff1eff1, cmb(cc_t0_mul_k5) },
10278
// submitted by gokuss4
10279
// (0-0)*0+0, (0-0)*0+prim
10280
{ 0xfffd5fe6, cmb(cc_prim) },
10281
// intro, Bettle Adventure Racing, [Raziel64]
10282
// (0-0)*0+0, (0-0)*0+t0
10283
{ 0xffff3fff, cmb(cc_t0) },
10284
// Conker's face, CBFD
10285
// (0-0)*0+0, (shade-env)*k5+prim
10286
{ 0xffff6f54, cmb(cc_shade_sub_env_mul_k5_add_prim) },
10287
// Boost, Beetle Adventure Racing. Added by Gonetz
10288
// (0-0)*0+0, (0-0)*0+prim
10289
{ 0xffff7fff, cmb(cc_prim) },
10290
// headlight, beetle adventure racing. Added by Gonetz
10291
// (0-0)*0+0, (0-0)*0+shade
10292
{ 0xffff9fff, cmb(cc_shade) },
10293
// intro, Bettle Adventure Racing, [Raziel64]
10294
// (0-0)*0+0, (shade-env)*t1+env
10295
{ 0xffffa254, cmb(cc_shade_sub_env_mul_t1_add_env) },
10296
// Fly Swooping in, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
10297
// (0-0)*0+0, (1-env)*cmb_a+env
10298
{ 0xffffa756, cmb(cc_env) },
10299
// Waterfall, Donkey Kong 64
10300
// (0-0)*0+0, (t0-0)*t1+0
10301
{ 0xffffe1f2, cmb(cc_t0_mul_t1) },
10302
// Screen clear, banjo kazooie
10303
// (0-0)*0+0
10304
{ 0xffffffff, cmb(cc_zero) },
10305
// { #CCEND }
10306
};
10307
10308
static cmb_list_entry alpha_cmb_list[] = {
10309
// { #ACSTART }
10310
//Tony Hawk's Pro Skater. Added by Gonetz
10311
// (0-0)*0+0
10312
{ 0x01ff01ff, cmb(ac_zero) },
10313
//terminal, Spacestation Silicon Valley. Added by Gonetz
10314
// (0-0)*0+0, (0-0)*0+prim
10315
{ 0x01ff07ff, cmb(ac_prim) },
10316
// kirby drill, kirby 64. Added by Gonetz
10317
// (0-0)*0+cmb, (0-0)*0+1
10318
{ 0x01ff0dff, cmb(ac_one) },
10319
//chip in Spacestation Silicon Valley intro. Added by Gonetz
10320
// (0-0)*0+cmb, (prim-0)*shade+0
10321
{ 0x01ff0f3b, cmb(ac_prim_mul_shade) },
10322
//Goldeneye, [Jeremy]. Added by Gonetz
10323
// (t0-t0)*lodf+t0, (cmb-0)*prim+0
10324
{ 0x02090ef8, cmb(ac_t0_mul_prim) },
10325
// Indy Racing 2000. Added by Gonetz
10326
// (t1-t0)*lodf+t0, (env-cmb)*prim+cmb ** INC **
10327
{ 0x020a00c5, cmb(ac_t0_inter_t1_using_primlod) },
10328
// water, Spacestation Silicon Valley. Added by Gonetz
10329
// (t1-t0)*lodf+t0, (0-shade)*0+cmb
10330
{ 0x020a01e7, cmb(ac_t0_inter_t1_using_primlod) },
10331
// Bridge, sf rush
10332
//z (t1-t0)*lodf+t0
10333
{ 0x020a020a, cmb(ac_t0_inter_t1_using_primlod) },
10334
// explosion, body harvest. Added by Gonetz
10335
//(t1-t0)*lodf+t0, (0-0)*0+t0
10336
{ 0x020a03ff, cmb(ac_t0) },
10337
// cars, PD intro. Added by Gonetz
10338
// (t1-t0)*lodf+t0, (cmb-0)*shade+prim
10339
{ 0x020a0738, cmb(ac__t0_inter_t1_using_primlod__mul_shade_add_prim) },
10340
// Rocket Robot in Wheels intro
10341
//(t1-t0)*lodf+t0, (0-0)*0+prim
10342
{ 0x020a07ff, cmb(ac_prim) },
10343
// Iguana background ground, turok
10344
// (t1-t0)*lodf+t0, (0-0)*0+shade
10345
{ 0x020a09ff, cmb(ac_shade) },
10346
// Ground, monster truck madness
10347
// (t1-t0)*lodf+t0, (0-0)*0+env
10348
{ 0x020a0bff, cmb(ac_env) },
10349
// Taz express. Added by Gonetz
10350
// (t1-t0)*lodf+t0, (0-0)*0+1
10351
{ 0x020a0dff, cmb(ac_one) },
10352
// Mike Piazza's Strike Zone
10353
// (t1-t0)*lodf+t0, (cmb-0)*t0+0
10354
{ 0x020a0e78, cmb(ac_t0_inter_t1_using_primlod) },
10355
// N64 logo, tetrisphere. Added by Gonetz
10356
// (t1-t0)*lodf+t0, (cmb-0)*prim+0
10357
{ 0x020a0ef8, cmb(ac__t0_inter_t1_using_primlod__mul_prim) },
10358
// Ground, mace
10359
// (t1-t0)*lodf+t0, (cmb-0)*shade+0
10360
// { 0x020a0f38, cmb(ac_t0_mul_shade) },
10361
{ 0x020a0f38, cmb(ac__t0_inter_t1_using_primlod__mul_shade) },
10362
// blast corps [Ogy]
10363
// (t1-t0)*lodf+t0, (cmb-0)*env+0
10364
{ 0x020a0f78, cmb(ac__t0_inter_t1_using_primlod__mul_env) },
10365
// blast corps [Ogy]
10366
// (t1-t0)*lodf+t0, (t0-0)*env+0
10367
{ 0x020a0f79, cmb(ac_t0_mul_env) },
10368
// blast corps. Added by Gonetz
10369
// (t1-t0)*lodf+t0, (shade-0)*env+0
10370
{ 0x020a0f7c, cmb(ac_env_mul_shade) },
10371
// field, Mike Piazza's Strike Zone
10372
// (t1-t0)*lodf+t0, (0-0)*0+0
10373
{ 0x020a0fff, cmb(ac_t0_inter_t1_using_primlod) },
10374
// blast corps, unimp log. Added by Gonetz
10375
// (t1-t0)*t0+t0
10376
{ 0x024a024a, cmb(ac_t0_inter_t1_using_t0a) },
10377
// zelda 2 [Ogy]. Added by Gonetz
10378
// (t1-t0)*t0+t0, (cmb-0)*prim+0 **INC**
10379
{ 0x024a0ef8, cmb(ac__t0_inter_t1_using_t0a__mul_prim) },
10380
// text in a menu, Twisted_Edge_Extreme_Snowboarding [Razeil64]. Added by Gonetz
10381
// (prim-t0)*t0+t0 **INC**
10382
{ 0x024b024b, cmb(ac_t0) },
10383
// enemy's shot, battle tanks 2
10384
// (env-prim)*t0+t0 **INC**
10385
{ 0x025d025d, cmb(ac_t0) },
10386
//Bowser in final battle, Paper Mario. Added by Gonetz
10387
// (t1-env)*t0+t0, (cmb-env)*prim+0 ** INC **
10388
{ 0x026a0ee8, cmb(ac__t0_mul_t1__mul_prim) },
10389
// paper mario. Added by Gonetz
10390
// (t1-env)*t0+t0, (cmb-0)*prim+0 ** INC **
10391
{ 0x026a0ef8, cmb(ac__t0_mul_t1__mul_prim) },
10392
// THPS3. Added by Gonetz
10393
// (0-0)*t0+t0
10394
{ 0x027f027f, cmb(ac_t0) },
10395
// zelda 2. Added by Gonetz
10396
// (0-0)*t0+t0, (cmb-0)*prim+0
10397
{ 0x027f0ef8, cmb(ac_t0_mul_prim) },
10398
// teleportation, Spacestation Silicon Valley. Added by Gonetz
10399
// (t1-t0)*t1+t0
10400
{ 0x028a028a, cmb(ac_t0_inter_t1_using_t1a) },
10401
// mega shock, paper mario. Added by Gonetz
10402
// (t1-t0)*t1+t0, (cmb-0)*prim+0
10403
{ 0x028a0ef8, cmb(ac__t0_inter_t1_using_t1a__mul_prim) },
10404
// Magnitude, pokemon stadium 2
10405
// (shade-t0)*t1+t0, (cmb-0)*shade+env
10406
{ 0x028c0b38, cmb(ac__t0_mul_t1__mul_shade) },
10407
// paper mario. Added by Gonetz
10408
// (1-t0)*t1+t0, (t1-0)*prim+0 ** INC **
10409
{ 0x028e0efa, cmb(ac__one_sub_t0_mul_t1_add_t0__mul_prim) },
10410
// { 0x028e0efa, cmb(ac_t1_mul_prim) },
10411
// paper mario. Added by Gonetz
10412
// (t1-env)*t1+t0, (cmb-0)*shade+0
10413
{ 0x02aa0f38, cmb(ac__t0_inter_t1_using_enva__mul_shade) },
10414
// Scary dead boss thing, zelda
10415
// (env-1)*t1+t0, (cmb-0)*prim+0 * MAY need t1_inter_t0 instead...
10416
{ 0x02b50ef8, cmb(ac__env_sub_one_mul_t1_add_t0__mul_prim) },
10417
// first screen, castlevania. Added by Gonetz
10418
// (env-0)*t1+t0 **INC**
10419
{ 0x02bd02bd, cmb(ac_t0) },
10420
// enemy's shot, battle tanks 2 [Flash]
10421
// (1-0)*t1+t0, (0-0)*0+env
10422
{ 0x02be0bff, cmb(ac_env) },
10423
// battle tanks 2 [Ogy]
10424
// (1-0)*t1+t0, (0-0)*0+1
10425
{ 0x02be0dff, cmb(ac_one) },
10426
// menu screen, Rayman2. Added by Gonetz
10427
// (1-0)*t1+t0, (cmb-0)*shade+0
10428
{ 0x02be0f38, cmb(ac__t0_add_t1__mul_shade) },
10429
// Sky, zelda
10430
//z (t1-t0)*prim+t0
10431
{ 0x02ca02ca, cmb(ac_t0_inter_t1_using_prima) },
10432
// F1 World Grand Prix. Added by Gonetz
10433
// (t1-t0)*prim+t0, (0-0)*0+1
10434
{ 0x02ca0dff, cmb(ac_t0_inter_t1_using_prima) },
10435
// logo, PD. Added by Gonetz
10436
// (t1-t0)*prim+t0, (cmb-0)*shade+0
10437
{ 0x02ca0f38, cmb(ac__t0_inter_t1_using_prima__mul_shade) },
10438
// battle tanks [Ogy]
10439
// (t1-t0)*prim+t0, (cmb-0)*env+0
10440
{ 0x02ca0f78, cmb(ac__t0_inter_t1_using_prima__mul_env) },
10441
// logo, Deadly Arts. Added by Gonetz
10442
// (env-t0)*prim+t0
10443
{ 0x02cd02cd, cmb(ac_one_sub_prim_mul_t0_add__prim_mul_env) },
10444
// intro, castlevania 2. Added by Gonetz
10445
// (1-t0)*prim+t0
10446
{ 0x02ce02ce, cmb(ac_one_sub_t0_mul_prim_add_t0) },
10447
// intro, diddy kong racing. Added by Gonetz
10448
// (1-t0)*prim+t0, (cmb-0)*shade+0 **INC**
10449
{ 0x02ce0f38, cmb(ac_t0_mul_shade) },
10450
// submitted by Scorpiove, mario party 1
10451
// (0-t0)*prim+t0
10452
{ 0x02cf02cf, cmb(ac_one_sub_prim_mul_t0) },
10453
// Ground, pokemon stadium 2
10454
// (t0-0)*prim+t0
10455
{ 0x02f902f9, cmb(ac_t0_mul_prim) },
10456
// GASP Fighters
10457
// (t1-0)*prim+t0, ** INC **
10458
{ 0x02fa02fa, cmb(ac_t1_mul_prima_add_t0) },
10459
// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
10460
// (t1-0)*prim+t0, (cmb-0)*shade+0
10461
{ 0x02fa0f38, cmb(ac__t1_mul_prima_add_t0__mul_shade) },
10462
// Paper Mario, fortune teller
10463
// (t1-0)*prim+t0, (cmb-0)*env+0
10464
{ 0x02fa0f78, cmb(ac__t1_mul_prima_add_t0__mul_env) },
10465
// map, Ogre Battle 64. Added by Gonetz
10466
// (1-0)*prim+t0
10467
{ 0x02fe02fe, cmb(ac_t0_add_prim) },
10468
// borders, Tony Hawk's Pro Skater 2. Added by Gonetz
10469
// (t1-t0)*shade+t0 ** INC **
10470
{ 0x030a030a, cmb(ac_t0_inter_t1_using_shadea) },
10471
// Mickey USA
10472
// (t1-t0)*shade+t0, (cmb-0)*prim+0 ** INC **
10473
{ 0x030a0ef8, cmb(ac__t0_inter_t1_using_shadea__mul_prim) },
10474
// Rocket Robot in Wheels intro
10475
// (t1-t0)*shade+t0, (cmb-0)*env+0 ** INC **
10476
{ 0x030a0f78, cmb(ac__t0_inter_t1_using_shadea__mul_env) },
10477
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
10478
// (1-t0)*shade+t0, (cmb-0)*shade+0 ** INC **
10479
{ 0x030e0f38, cmb(ac_t0_mul_shade) },
10480
// sky, f-zero x
10481
// (0-t0)*shade+t0
10482
{ 0x030f030f, cmb(ac_one_sub_shade_mul_t0) },
10483
// Deku tree from kokiri villiage, zelda
10484
//z (t1-t0)*env+t0, (t1-0)*primlod+cmb
10485
{ 0x034a01ba, cmb(ac_t0_inter_t1_using_enva) },
10486
// Hearts, zelda
10487
//z (t1-t0)*env+t0
10488
{ 0x034a034a, cmb(ac_t0_inter_t1_using_enva) },
10489
// Faries, zelda
10490
//z (t1-t0)*env+t0, (cmb-0)*prim+0
10491
{ 0x034a0ef8, cmb(ac__t0_inter_t1_using_enva__mul_prim) },
10492
// zelda, waterfall. Added by Gonetz
10493
//z (t1-t0)*env+t0, (cmb-0)*shade+0
10494
{ 0x034a0f38, cmb(ac__t0_inter_t1_using_enva__mul_shade) },
10495
// pokemon stadium 1. Added by Gonetz
10496
//(t1-t0)*env+t0, (cmb-0)*primlod+0
10497
{ 0x034a0fb8, cmb(ac__t0_inter_t1_using_enva__mul_primlod) },
10498
// fruits, Yoshi Story. Added by Gonetz
10499
//(prim-t0)*env+t0
10500
{ 0x034b034b, cmb(ac_prim_sub_t0_mul_env_add_t0) },
10501
// window, Rayman2. Added by Gonetz
10502
//(1-t0)*env+t0
10503
{ 0x034e034e, cmb(ac_one_sub_t0_mul_env_add_t0) },
10504
// menu, PokemonStadium1, [Raziel64]
10505
//(1-t0)*env+t0, (cmb-0)*shade+0 ** INC **
10506
{ 0x034e0f38, cmb(ac_t0_mul_shade) },
10507
// Ganon's sword swinging, zelda
10508
// (t0-t1)*env+t0, (cmb-0)*prim+0 ** INC **
10509
{ 0x03510ef8, cmb(ac__t0_sub_t1_mul_enva_add_t0__mul_prim) },
10510
// Lave piranha atack, Paper Mario
10511
// (t1-prim)*env+t0, (0-cmb)*t1+0 ** INC **
10512
{ 0x035a0e87, cmb(ac_t0_mul_t1) },
10513
// Reflected fire at kotake & koume's, zelda
10514
// (t0-1)*env+t0, (cmb-0)*prim+0 ** INC **
10515
{ 0x03710ef8, cmb(ac__t0_sub_one_mul_enva_add_t0__mul_prim) },
10516
// thing that escapes from the well, zelda
10517
// (t1-1)*env+t0 ** INC **
10518
{ 0x03720372, cmb(ac_t1_sub_one_mul_enva_add_t0) },
10519
// Sword charge, zelda
10520
// (t1-1)*env+t0, (cmb-0)*prim+0
10521
{ 0x03720ef8, cmb(ac__t1_sub_one_mul_enva_add_t0__mul_prim) },
10522
// Gannon hitting the ground, zelda
10523
// (t1-1)*env+t0, (cmb-0)*shade+0 ** INC **
10524
{ 0x03720f38, cmb(ac__t1_sub_one_mul_enva_add_t0__mul_shade) },
10525
// Tony Hawk's Pro Skater 3. Added by Gonetz
10526
// (t0-0)*env+t0
10527
{ 0x03790379, cmb(ac_t0_mul_env) },
10528
// paper mario. Added by Gonetz
10529
// (t0-0)*env+t0, (cmb-0)*prim+0
10530
{ 0x03790ef8, cmb(ac_t0_mul_prim) },
10531
// pads, Pokemon Stadium 2. Added by Gonetz
10532
// (t1-0)*env+t0, (cmb-0)*prim+env ** INC **
10533
{ 0x037a0af8, cmb(ac__t0_inter_t1_using_enva__mul_prim_add_env) },
10534
// Ice arrow gfx, zelda
10535
// (t1-0)*env+t0, (cmb-0)*prim+0
10536
{ 0x037a0ef8, cmb(ac__t1_mul_enva_add_t0__mul_prim) },
10537
// Scary face move, pokemon stadium 2
10538
// (t1-0)*env+t0, (cmb-prim)*shade+0
10539
{ 0x037a0f18, cmb(ac__t0_inter_t1_using_enva__mul_prim_mul_shade) },
10540
// Saria's song, zelda
10541
// (t1-0)*env+t0, (cmb-0)*shade+0
10542
{ 0x037a0f38, cmb(ac__t1_mul_enva_add_t0__mul_shade) },
10543
// eye drops bottle, zelda
10544
// (t0-t0)*prim_lodfrac+t0
10545
{ 0x03890389, cmb(ac_t0) },
10546
// lighthouse's beam, zelda 2. Added by Gonetz
10547
// (t0-t0)*prim_lodfrac+t0, (cmb-0)*prim+0
10548
{ 0x03890ef8, cmb(ac_t0_mul_prim) },
10549
// zelda 2. Added by Gonetz
10550
// (t1-t0)*primlod+t0, (cmb-0)*env+cmb ** INC **
10551
{ 0x038a0178, cmb(ac__t0_inter_t1_using_primlod__mul_env_add__t0_inter_t1_using_primlod) },
10552
// Enter name letter background, zelda
10553
//z (t1-t0)*primlod+t0
10554
{ 0x038a038a, cmb(ac_t0_inter_t1_using_primlod) },
10555
// Sunny Day, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
10556
// (t1-t0)*primlod+t0, (cmb-0)*0+prim ** INC **?
10557
{ 0x038a07f8, cmb(ac_t0_inter_t1_using_primlod) },
10558
// blastcorps, unimp log. Added by Gonetz
10559
// (t1-t0)*primlod+t0, (0-0)*0+shade **INC**?
10560
{ 0x038a09ff, cmb(ac_t0_inter_t1_using_primlod) },
10561
// sky, PGA European Tour
10562
// (t1-t0)*primlod+t0, (0-0)*0+1
10563
{ 0x038a0dff, cmb(ac_one) },
10564
// Ice surrounding enemy, zelda
10565
// (t1-t0)*primlod+t0, (env-0)*lodf+0
10566
{ 0x038a0e3d, cmb(ac__t0_inter_t1_using_primlod__mul_env) },
10567
// the bridge out side the mountain smithy shop, zelda 2 [Ogy]. Added by Gonetz
10568
// (t1-t0)*primlod+t0, (cmb-0)*t0+0
10569
{ 0x038a0e78, cmb(ac_t0_inter_t1_using_primlod) },
10570
// zelda 2, [Ogy]. Added by Gonetz
10571
// (t1-t0)*primlod+t0, (cmb-0)*t1+0
10572
{ 0x038a0eb8, cmb(ac_t0_inter_t1_using_primlod) },
10573
// Kirby's pool, smash bros
10574
// (t1-t0)*primlod+t0, (cmb-0)*prim+0
10575
{ 0x038a0ef8, cmb(ac__t0_inter_t1_using_primlod__mul_prim) },
10576
// Samus stage fire, smash bros
10577
// (t1-t0)*primlod+t0, (cmb-0)*shade+0
10578
{ 0x038a0f38, cmb(ac__t0_inter_t1_using_primlod__mul_shade) },
10579
// something about ice, zelda
10580
// (t1-t0)*primlod+t0, (cmb-0)*env+0
10581
{ 0x038a0f78, cmb(ac__t0_inter_t1_using_primlod__mul_env) },
10582
// Blast Corps. Added by Gonetz
10583
// (t1-t0)*primlod+t0, (shade-0)*env+0
10584
{ 0x038a0f7c, cmb(ac_env_mul_shade) },
10585
// goals, J. League Tactics Soccer. Added by Gonetz
10586
// (prim-t0)*primlod+t0 ** INC **
10587
{ 0x038b038b, cmb(ac_t0) },
10588
// zelda 2, [Ogy]. Added by Gonetz
10589
// (t0-t1)*primlod+t0, (cmb-0)*prim+0
10590
{ 0x03910ef8, cmb(ac__t0_sub_t1_mul_primlod_add_t0__mul_prim) },
10591
// a plane in the entrance to the mountain village zelda 2, [Ogy]. Added by Gonetz
10592
// (t1-t1)*primlod+t0, (cmb-0)*prim+0 ** INC **?
10593
{ 0x03920ef8, cmb(ac_t0_mul_prim) },
10594
// zelda 2. Added by Gonetz
10595
// (t1-prim)*primlod+t0, (cmb-0)*prim+0 ** INC **
10596
{ 0x039a0ef8, cmb(ac__t1_sub_prim_mul_primlod_add_t0__mul_prim) },
10597
// zelda 2. Added by Gonetz
10598
// (t1-shade)*primlod+t0, (cmb-0)*shade+0 ** INC **
10599
{ 0x03a20f38, cmb(ac__t1_sub_shade_mul_primlod_add_t0__mul_shade) },
10600
// Candle flame in ganon's castle, zelda
10601
// (t1-1)*primlod+t0 ** INC **
10602
{ 0x03b203b2, cmb(ac_t1_sub_one_mul_primlod_add_t0) },
10603
// Fire, zelda
10604
//z (t1-1)*primlod+t0, (cmb-0)*prim+0 ** INC **
10605
{ 0x03b20ef8, cmb(ac__t1_sub_one_mul_primlod_add_t0__mul_prim) },
10606
// explosion, zelda 2. Added by Gonetz
10607
// (t1-1)*primlod+t0, (t0-0)*prim+0 ** INC **
10608
{ 0x03b20ef9, cmb(ac_t0_mul_prim) },
10609
// Din's fire, zelda
10610
// (t1-1)*prim_lodfrac+t0, (cmb-0)*shade+0 ** INC **
10611
{ 0x03b20f38, cmb(ac__t1_sub_one_mul_primlod_add_t0__mul_shade) },
10612
// Fire cloud, zelda
10613
// (t1-1)*prim_lodfrac+t0, (cmb-0)*env+0 ** INC **
10614
{ 0x03b20f78, cmb(ac__t1_sub_one_mul_primlod_add_t0__mul_env) },
10615
// zelda 2 [Ogy]. Added by Gonetz
10616
// (prim-1)*prim_lodfrac+t0, (cmb-0)*env+0 ** INC **
10617
{ 0x03b30f78, cmb(ac__prim_sub_one_mul_primlod_add_t0__mul_env) },
10618
// fairy's spirit, zelda oot
10619
// (t0-0)*primlod+t0
10620
{ 0x03b903b9, cmb(ac_t0_mul_primlod_add_t0) },
10621
// Scary face, pokemon stadium 2
10622
// (t0-0)*primlod+t0, (cmb-0)*prim+0
10623
{ 0x03b90ef8, cmb(ac_t0_mul_prim) },
10624
// Leftovers Recovery, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
10625
// (t1-0)*prim_lodfrac+t0, (cmb-env)*prim+0 ** INC **
10626
{ 0x03ba0ee8, cmb(ac__t1_mul_primlod_add_t0__sub_env_mul_prim) },
10627
// zelda 2 [Ogy]. Added by Gonetz
10628
// (t1-0)*prim_lodfrac+t0, (cmb-0)*prim+0
10629
{ 0x03ba0ef8, cmb(ac__t1_mul_primlod_add_t0__mul_prim) },
10630
// zelda 2 [Ogy]. Added by Gonetz
10631
// (t1-0)*prim_lodfrac+t0, (cmb-0)*shade+0
10632
{ 0x03ba0f38, cmb(ac__t1_mul_primlod_add_t0__mul_shade) },
10633
// chuchu monsters, zelda 2 [Ogy]. Added by Gonetz
10634
// (t1-0)*prim_lodfrac+t0, (cmb-0)*env+0
10635
{ 0x03ba0f78, cmb(ac__t1_mul_primlod_add_t0__mul_env) },
10636
// Scary face, pokemon stadium 2
10637
// (env-0)*primlod+t0, (cmb-0)*prim+0
10638
{ 0x03bd0ef8, cmb(ac_t0_mul_prim) },
10639
// ground, zelda 2. Added by Gonetz
10640
// (t1-t0)*0+t0, (cmb-0)*0+cmb
10641
{ 0x03ca01f8, cmb(ac_t0) },
10642
// zelda 2. Added by Gonetz
10643
// (t1-t0)*0+t0, (cmb-0)*prim+0
10644
{ 0x03ca0ef8, cmb(ac_t0_mul_prim) },
10645
// smoke in a night, zelda 2. Added by Gonetz
10646
// (t1-t0)*0+t0, (cmb-0)*shade+0
10647
{ 0x03ca0f38, cmb(ac_t0_mul_shade) },
10648
//the ice plane out side the mountain smithy shop, zelda 2 [Ogy]. Added by Gonetz
10649
//(t1-1)*0+t0, (cmb-0)*env+0
10650
{ 0x03f20f78, cmb(ac_t0_mul_env) },
10651
//something on level 5, Kirby64 [Raziel64]
10652
//(t0-0)*0+t0
10653
{ 0x03f903f9, cmb(ac_t0) },
10654
//spider house, zelda 2 [Ogy]. Added by Gonetz
10655
//(t0-0)*0+t0, (cmb-0)*prim+0
10656
{ 0x03f90ef8, cmb(ac_t0_mul_prim) },
10657
//Darmani's fire spin, zelda 2 [Ogy]. Added by Gonetz
10658
//(t1-0)*0+t0, (cmb-0)*prim+0
10659
{ 0x03fa0ef8, cmb(ac_t0_mul_prim) },
10660
// headlight, beetle adventure racing. Added by Gonetz
10661
//(1-0)*0+t0
10662
{ 0x03fe03fe, cmb(ac_t0) },
10663
// player, super bowling
10664
// (0-0)*0+t0,
10665
{ 0x03ff0000, cmb(ac_t0) },
10666
// Ghost's lantern, zelda
10667
// (0-0)*0+t0, (t1-0)*prim_lod+cmb
10668
{ 0x03ff01ba, cmb(ac_t1_mul_primlod_add_t0) },
10669
// Hand cursor, mario
10670
//z (0-0)*0+t0
10671
{ 0x03ff03ff, cmb(ac_t0) },
10672
// Taz express. Added by Gonetz
10673
// (0-0)*0+t0, (0-0)*0+t1
10674
{ 0x03ff05ff, cmb(ac_t0) },
10675
// powder keg, zelda2. Added by Gonetz
10676
// (0-0)*0+t0, (0-0)*0+prim
10677
{ 0x03ff07ff, cmb(ac_t0) },
10678
// water, Spacestation Silicon Valley. Added by Gonetz
10679
// (0-0)*0+t0, (0-0)*0+shade
10680
{ 0x03ff09ff, cmb(ac_t0) },
10681
// Characters, Ogre Battle. Added by Gonetz.
10682
// (0-0)*0+t0, (cmb-0)*prim+env
10683
{ 0x03ff0af8, cmb(ac_t0_mul_prim_add_env) },
10684
// Monster truck madness intro. Added by Gonetz
10685
// (0-0)*0+t0, (0-0)*0+env
10686
{ 0x03ff0bff, cmb(ac_t0) },
10687
// Zoras, zelda
10688
// (0-0)*0+t0, (env-0)*lodf+0
10689
{ 0x03ff0e3d, cmb(ac_env) },
10690
// logo, v-rally 99
10691
// (0-0)*0+t0, (prim-0)*t0+0
10692
{ 0x03ff0e7b, cmb(ac_t0_mul_prim) },
10693
// intro, WWF-War Zone
10694
// (0-0)*0+t0, (env-0)*t0+0
10695
{ 0x03ff0e7d, cmb(ac_t0_mul_env) },
10696
// Window, starfox
10697
//z (0-0)*0+t0, (cmb-0)*prim+0
10698
{ 0x03ff0ef8, cmb(ac_t0_mul_prim) },
10699
//beetle adventure racing. Added by Gonetz
10700
// (0-0)*0+t0, (cmb-0)*shade+0
10701
{ 0x03ff0f38, cmb(ac_t0_mul_shade) },
10702
// Wonder Project J2 logo. Added by Gonetz
10703
// (0-0)*0+t0, (t0-0)*shade+0
10704
{ 0x03ff0f39, cmb(ac_t0_mul_shade) },
10705
// Saria's suit, zelda
10706
// (0-0)*0+t0, (cmb-0)*env+0
10707
{ 0x03ff0f78, cmb(ac_t0_mul_env) },
10708
// Pokemon Stadium 2, [Jeremy]. Added by Gonetz
10709
// (0-0)*0+t0, (cmb-0)*primlod+0
10710
{ 0x03ff0fb8, cmb(ac_t0_mul_primlod) },
10711
// Tony Hawk's Pro Skater. Added by Gonetz
10712
// (0-0)*0+t0, (0-0)*0+0
10713
{ 0x03ff0fff, cmb(ac_zero) },
10714
// Powered Star Beam, Paper Mario. Added by Gonetz
10715
// (t0-t1)*t0+t1, (cmb-0)*prim+0 **INC**
10716
{ 0x04510ef8, cmb(ac__t1_inter_t0_using_t0a__mul_prim) },
10717
// Deadly Arts logo. Added by Gonetz
10718
// (1-0)*t0+t1, (1-0)*prim+cmb
10719
{ 0x047e00fe, cmb(ac__t0_add_t1__add_prim) },
10720
// Spiderman. Added by Gonetz
10721
// (1-0)*t0+t1
10722
{ 0x047e047e, cmb(ac_t0_add_t1) },
10723
// water, Dobutsu no Mori. Added by Gonetz
10724
// (1-0)*t0+t1, (cmb-0)*primlod+prim
10725
{ 0x047e07b8, cmb(ac__t0_add_t1__mul_primlod_add_prim) },
10726
// paper mario. Added by Gonetz
10727
// (1-t0)*t1+t1, (cmb-0)*t1+0 **INC**
10728
{ 0x048e0eb8, cmb(ac_t0_mul_t1) },
10729
// Pokemon Stadium 2. Added by Gonetz
10730
// (t0-prim)*t1+t1, (cmb-0)*shade+0 **INC**
10731
{ 0x04990f38, cmb(ac_t1_mul_shade) },
10732
// light, Dobutsu no Mori. Added by Gonetz
10733
// (t0-0)*t1+t1, (cmb-0)*primlod+0 ** INC **
10734
{ 0x04b90fb8, cmb(ac__t0_add_t1__mul_primlod) },
10735
// lava, beetle adventure racing
10736
// (t1-0)*t1+t1, (cmb-0)*shade+0 ** INC **
10737
{ 0x04ba0f38, cmb(ac__t1_mul_t1_add_t1__mul_shade) },
10738
// wheels, F1 World Grand Prix. Added by Gonetz
10739
// (t0-t1)*prim+t1
10740
{ 0x04d104d1, cmb(ac_t1_inter_t0_using_prima) },
10741
// intro, castlevania 2. Added by Gonetz
10742
// (t0-t1)*prim+t1, (cmb-0)*shade+0
10743
{ 0x04d10f38, cmb(ac__t1_inter_t0_using_prima__mul_shade) },
10744
// flame, castlevania 2. Added by Gonetz
10745
// (t0-t1)*prim+t1, (cmb-0)*env+0
10746
{ 0x04d10f78, cmb(ac__t1_inter_t0_using_prima__mul_env) },
10747
// walls, beetle adventure racing. Added by Gonetz
10748
// (t0-0)*prim+t1 **INC**
10749
{ 0x04f904f9, cmb(ac_t0_mul_prim) },
10750
// Reflect pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
10751
// (t0-0)*prim+t1, (cmb-0)*prim+env **INC**
10752
{ 0x04f90af8, cmb(ac__t0_add_t1__mul_prim_add_env) },
10753
// Psychic pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
10754
// (t0-0)*prim+t1, (cmb-0)*shade+0 **INC**
10755
{ 0x04f90f38, cmb(ac__t0_add_t1__mul_shade) },
10756
// Rayman2. Added by Gonetz
10757
// (0-0)*shade+t1, (cmb-0)*env+0
10758
{ 0x053f0f78, cmb(ac_t1_mul_env) },
10759
// Ground at kotake & koume, zelda
10760
// (t1-t0)*env+t1, (cmb-0)*prim+0 ** INC **
10761
{ 0x054a0ef8, cmb(ac__t1_sub_t0_mul_enva_add_t1__mul_prim) },
10762
// Tony Hawk's Pro Skater. Added by Gonetz
10763
// (t0-t1)*env+t1
10764
{ 0x05510551, cmb(ac_t1_inter_t0_using_enva) },
10765
// Shiek's disappearance, zelda
10766
// (t0-1)*env+t1
10767
{ 0x05710571, cmb(ac_t0_sub_one_mul_enva_add_t1) },
10768
// Kotake or koume's magic poof, zelda
10769
// (t0-1)*env+t1, (cmb-0)*prim+0 ** INC **
10770
{ 0x05710ef8, cmb(ac__t0_sub_one_mul_enva_add_t1__mul_prim) },
10771
// Gauntlet Legends intro
10772
// (t0-0)*env+t1, (cmb-0)*prim+0 ** INC **
10773
{ 0x05790ef8, cmb(ac__t0_add_t1__mul_prim) },
10774
// Zelda opening door, zelda
10775
// (t0-0)*env+t1, (cmb-0)*shade+0
10776
{ 0x05790f38, cmb(ac_t1_mul_shade) },
10777
// paper mario. Added by Gonetz
10778
// (t1-0)*env+t1, (cmb-0)*prim+0 ** INC **
10779
{ 0x057a0ef8, cmb(ac_t1_mul_prim) },
10780
// Skulltula coin, zelda
10781
// (t0-1)*primlod+t1 ** INC **
10782
{ 0x05b105b1, cmb(ac_t0_mul_t1) },
10783
// Bell, Pokemon Stadium 2. Added by Gonetz
10784
// (t0-0)*primlod+t1, (cmb-env)*prim ** INC **
10785
{ 0x05b90ee8, cmb(ac__t0_add_t1__mul_prim) },
10786
// intro, Aidyn Chronicles. Added by Gonetz
10787
// (0-cmb)*0+t1, (t1-1)*0+cmb
10788
{ 0x05c701f2, cmb(ac_t1) },
10789
// zelda 2 [Ogy]. Added by Gonetz
10790
// (t1-t0)*0+t1, (cmb-0)*prim+0
10791
{ 0x05ca0ef8, cmb(ac_t1_mul_prim) },
10792
// beaver's river, zelda 2. Added by Gonetz
10793
// (t1-0)*0+t1, (cmb-0)*prim+0
10794
{ 0x05fa0ef8, cmb(ac_t1_mul_prim) },
10795
// Ogre Battle, unimp log. Added by Gonetz
10796
// (0-0)*0+t1, (0-0)*0+cmb
10797
{ 0x05ff05ff, cmb(ac_t1) },
10798
// lullaby, Paper Mario. Added by Gonetz
10799
// (0-0)*0+t1, (cmb-0)*prim+0
10800
{ 0x05ff0ef8, cmb(ac_t1_mul_prim) },
10801
// aerofighter's assault [Ogy]
10802
// (0-0)*0+t1, (cmb-0)*shade+0
10803
{ 0x05ff0f38, cmb(ac_t1_mul_shade) },
10804
// magic fist, Rayman2. Added by Gonetz
10805
// (0-0)*0+t1, (cmb-0)*env+0
10806
{ 0x05ff0f78, cmb(ac_t1_mul_env) },
10807
// Pokemon selection background, Pokemon stadium 2
10808
// (env-prim)*t0+prim
10809
{ 0x065d065d, cmb(ac_env_sub_prim_mul_t0_add_prim) },
10810
// text background, Ganbare Goemon - Mononoke Sugoroku
10811
// (1-prim)*t0+prim
10812
{ 0x065e065e, cmb(ac_one_sub_prim_mul_t0_add_prim) },
10813
// shadows, star wars: ep1 racer
10814
// (0-prim)*t0+prim
10815
{ 0x065f065f, cmb(ac_zero_sub_prim_mul_t0_add_prim) },
10816
// lava, beetle adventure racing
10817
// (0-1)*t0+prim, (cmb-0)*prim+0 ** INC **
10818
{ 0x06770ef8, cmb(ac_t0_mul_prim) },
10819
// menu, Ganbare Goemon - Mononoke Sugoroku
10820
// (t0-0)*t0+prim
10821
{ 0x06790679, cmb(ac_t0_add_prim) },
10822
// Water, pokemon stadium 2
10823
// (t1-0)*t0+prim
10824
{ 0x067a067a, cmb(ac_t0_mul_t1_add_prim) },
10825
// Smackdown Mall Menu, WWF No Mercy
10826
// (shade-0)*t0+prim
10827
{ 0x067c067c, cmb(ac_t0_mul_shade_add_prim) },
10828
// flag, Top Gear Rally 2. Added by Gonetz
10829
// (env-0)*t0+prim
10830
{ 0x067d067d, cmb(ac_t0_mul_env_add_prim) },
10831
// Mario Tennis. Added by Gonetz
10832
// (1-0)*t0+prim
10833
{ 0x067e067e, cmb(ac_t0_add_prim) },
10834
// sky, PGA European Tour
10835
// (t0-0)*t1+prim
10836
{ 0x06b906b9, cmb(ac_t0_mul_t1_add_prim) },
10837
// lava, beetle adventure racing
10838
// (t0-0)*t1+prim, (0-0)*0+1 **INC**?
10839
{ 0x06b90dff, cmb(ac_one) },
10840
// Pokemon Stadium 2, [Jeremy]. Added by Gonetz
10841
// (prim-0)*t1+prim
10842
{ 0x06bb06bb, cmb(ac_t1_mul_prim_add_prim) },
10843
// pokemon psyattack, Pokemon Stadium 2. Added by Gonetz
10844
// (1-0)*t1+prim, (cmb-0)*env+0
10845
{ 0x06be0f78, cmb(ac_t1_add_prim_mul_env) },
10846
// Rush2 2. Added by Gonetz
10847
// (prim-prim)*prim+prim
10848
{ 0x06db06db, cmb(ac_prim) },
10849
//Spacestation Silicon Valley intro. Added by Gonetz
10850
// (t1-prim)*shade+prim
10851
// { 0x071a071a, cmb(ac_t1_mul_shade) },
10852
{ 0x071a071a, cmb(ac_t1_sub_prim_mul_shade_add_prim) },
10853
//KI logos. Added by Gonetz
10854
// (env-prim)*shade+prim
10855
{ 0x071d071d, cmb(ac_env_sub_prim_mul_shade_add_prim) },
10856
// Deadly Arts, arena. Added by Gonetz
10857
// (1-0)*shade+prim
10858
{ 0x073e073e, cmb(ac_prim_add_shade) },
10859
// Phantom Gannon's portal, zelda
10860
// (t1-t0)*env+prim, (cmb-0)*shade+0 ** INC **
10861
{ 0x074a0f38, cmb(ac__t0_mul_t1__mul_prim_mul_shade) },
10862
// Road rush. Added by Gonetz
10863
// (t0-0)*env+prim
10864
{ 0x07790779, cmb(ac_t0_mul_env_add_prim) },
10865
// telescope, zelda 2. Added by Gonetz
10866
// (1-t0)*primlod+prim
10867
{ 0x078e078e, cmb(ac_one_sub_t0_mul_primlod_add_prim) },
10868
// zelda 2 [Ogy]. Added by Gonetz
10869
// (t0-t1)*primlod+prim, (cmb-0)*t0+0
10870
{ 0x07910e78, cmb(ac_t0_inter_t1_using_primlod) },
10871
// Dobutsu no Mori. Added by Gonetz
10872
// (t0-0)*primlod+prim
10873
{ 0x07b907b9, cmb(ac_t0_mul_primlod_add_prim) },
10874
// water, DK64
10875
// (0-0)*0+0, (0-t1)*0+prim
10876
{ 0x07d707d7, cmb(ac_prim) },
10877
// Menu, megaman
10878
// (1-0)*0+prim
10879
{ 0x07fe07fe, cmb(ac_prim) },
10880
// super bowling
10881
//(0-0)*0+prim,
10882
{ 0x07ff0000, cmb(ac_prim) },
10883
// menu, Ganbare Goemon - Mononoke Sugoroku
10884
// (0-0)*0+prim, (0-0)*0+t0
10885
{ 0x07ff03ff, cmb(ac_t0) },
10886
// Intro background, starfox
10887
//z (0-0)*0+prim
10888
{ 0x07ff07ff, cmb(ac_prim) },
10889
// gem, castlevania 2. Added by Gonetz
10890
// (0-0)*0+prim, (cmb-0)*t0+0
10891
{ 0x07ff0e78, cmb(ac_t0_mul_prim) },
10892
// text, Tony Hawk's Pro Skater. Added by Gonetz
10893
// (0-0)*0+prim, (cmb-0)*t1+0
10894
{ 0x07ff0eb8, cmb(ac_t1_mul_prim) }, //weird, but implementing this makes text unreadable
10895
// zelda 2. Added by Gonetz
10896
// (0-0)*0+prim, (cmb-0)*prim+0
10897
{ 0x07ff0ef8, cmb(ac_prim_mul_prim) },
10898
// explosion, Blast Corps. Added by Gonetz
10899
// (0-0)*0+prim, (t0-0)*prim+0
10900
{ 0x07ff0ef9, cmb(ac_t0_mul_prim) },
10901
// zelda 2, [Ogy]. Added by Gonetz
10902
// (0-0)*0+prim, (cmb-0)*shade+0
10903
{ 0x07ff0f38, cmb(ac_prim_mul_shade) },
10904
// Fox's ears and arms, smash bros
10905
// (0-0)*0+prim, (cmb-0)*env+0
10906
{ 0x07ff0f78, cmb(ac_prim_mul_env) },
10907
// monsters, Pokemon Stadium. Added by Gonetz
10908
// (0-0)*0+prim, (cmb-0)*primlod+0
10909
{ 0x07ff0fb8, cmb(ac_prim_mul_primlod) },
10910
// focus, Paper Mario. Added by Gonetz
10911
//(t0-shade)*t0+shade, (cmb-0)*prim+0 * INC **
10912
{ 0x08610ef8, cmb(ac_t0_mul_prim) },
10913
// Mario's head, mario //Added by Gonetz
10914
//(prim-shade)*t0+shade
10915
{ 0x08630863, cmb(ac_prim_sub_shade_mul_t0_add_shade) },
10916
// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
10917
//(t0-t1)*prim+shade, (cmb-0)*shade+0 ** INC **
10918
{ 0x08d10f38, cmb(ac_t0_mul_prim_mul_shade) },
10919
// ?
10920
//(t0-shade)*prim+shade
10921
{ 0x08e108e1, cmb(ac_t0_mul_prim_add_shade_mul_one_minus_prim) },
10922
// Paper Mario
10923
// (t0-prim)*shade+shade, (cmb-0)*env+0
10924
{ 0x09190f78, cmb(ac__t0_sub_prim_mul_shade_add_shade__mul_env) },
10925
// pads, Pokemon Stadium 2. Added by Gonetz
10926
// (0-t0)*env+shade, (cmb-0)*prim+0 ** INC **
10927
{ 0x094f0ef8, cmb(ac_one_sub_t0_mul_prim_mul_shade) },
10928
// Huge turtle appearance, zelda 2. Added by Gonetz
10929
// (t1-0)*primlod+shade, (cmb-0)*shade+0 ** INC **
10930
{ 0x09ba0f38, cmb(ac_t1_mul_shade) },
10931
// roof, Kirby 64. Added by Gonetz
10932
// (t0-0)*0+shade
10933
{ 0x09f909f9, cmb(ac_shade) },
10934
// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
10935
// (0-0)*0+shade, (cmb-cmb)*lodf+cmb
10936
{ 0x09ff0000, cmb(ac_shade) },
10937
// water temple, zelda 2. Added by Gonetz
10938
// (0-0)*0+shade, (cmb-0)*prim+cmb
10939
{ 0x09ff00f8, cmb(ac_prim_mul_shade_add_shade) },
10940
// damaged car, SCARS. Added by Gonetz
10941
// (0-0)*0+shade, (t0-t1)*primlod+prim ** INC **
10942
{ 0x09ff0791, cmb(ac_t0_mul_primlod_add_prim) },
10943
// Hyrule castle gate, zelda
10944
//z (0-0)*0+shade, (0-0)*0+prim
10945
{ 0x09ff07ff, cmb(ac_prim) },
10946
// Super Mario 64 logo
10947
//z (0-0)*0+shade
10948
{ 0x09ff09ff, cmb(ac_shade) },
10949
// terrain, SCARS. Added by Gonetz
10950
// (0-0)*0+shade, (0-0)*0+1
10951
{ 0x09ff0dff, cmb(ac_one) },
10952
// terrain, SCARS. Added by Gonetz
10953
// (0-0)*0+shade, (t0-0)*t1+0
10954
{ 0x09ff0eb9, cmb(ac_t0_mul_t1) },
10955
// N64 logo, Aidyn Chronicles. Added by Gonetz
10956
// (0-0)*0+shade, (cmb-0)*prim+0
10957
{ 0x09ff0ef8, cmb(ac_prim_mul_shade) },
10958
// birds?, custom robo. Added by Gonetz
10959
// (0-0)*0+shade, (cmb-0)*shade+0
10960
{ 0x09ff0f38, cmb(ac_shade) },
10961
// sky, Glover, [Raziel64]. Added by Gonetz
10962
// (0-0)*0+shade, (t0-0)*shade+0
10963
{ 0x09ff0f39, cmb(ac_t0_mul_shade) },
10964
// Hand, smash bros
10965
// (0-0)*0+shade, (cmb-0)*env+0
10966
{ 0x09ff0f78, cmb(ac_env_mul_shade) },
10967
// Conker's helicopter tail, CBFD
10968
// (0-0)*0+shade, (shade-0)*env+0
10969
{ 0x09ff0f7c, cmb(ac_env_mul_shade) },
10970
// menu, PokemonStadium1, [Raziel64]
10971
// (0-0)*0+shade, (cmb-0)*primlod+0
10972
{ 0x09ff0fb8, cmb(ac_primlod_mul_shade) },
10973
// Link's sword slashing, smash bros
10974
// (prim-env)*t0+env
10975
{ 0x0a6b0a6b, cmb(ac_prim_sub_env_mul_t0_add_env) },
10976
// Reflected beam at kotake & koume's, zelda
10977
// (prim-env)*t0+env, (cmb-0)*prim+0 ** INC **
10978
{ 0x0a6b0ef8, cmb(ac_t0_mul_prim) },
10979
// teleporter, Spacestation Silicon Valley. Added by Gonetz
10980
// (prim-env)*t0+env, (cmb-0)*shade+0 ** INC **
10981
{ 0x0a6b0f38, cmb(ac_t0_mul_shade) },
10982
// Ridge Racer, unimp log. Added by Gonetz
10983
// (prim-env)*t0+env, (cmb-0)*primlod+0
10984
{ 0x0a6b0fb8, cmb(ac_prim_sub_env_mul_t0_add_env) },
10985
// Kotake or koume's hair, zelda
10986
// (prim-0)*t0+env
10987
{ 0x0a7b0a7b, cmb(ac_t0_mul_prim_add_env) },
10988
// menu, doubut no mori
10989
// (1-0)*t0+env
10990
{ 0x0a7e0a7e, cmb(ac_t0_add_env) },
10991
// Grass, mario golf
10992
// (env-shade)*t1+env, (0-0)*0+1
10993
{ 0x0aa50dff, cmb(ac_one) },
10994
// Ridge Racer, cars select. Added by Gonetz
10995
// (prim-env)*t1+env
10996
{ 0x0aab0aab, cmb(ac_prim_sub_env_mul_t1_add_env) },
10997
// text, monster truck madness
10998
// (prim-env)*t1+env, (cmb-0)*t1+0
10999
{ 0x0aab0eb8, cmb(ac_t1_mul_env) },
11000
// zelda 2 [Ogy]. Added by Gonetz
11001
// (1-0)*t1+env, (0-0)*0+cmb
11002
{ 0x0abe0abe, cmb(ac_one) },
11003
// { 0x0abe0abe, cmb(ac_t1_add_env) },
11004
// arena, Pokemon Stadium 2. Added by Gonetz
11005
// (1-t0)*prim+env, (cmb-0)*shade+0
11006
{ 0x0ace0f38, cmb(ac_one_sub_t0_mul_prim_mul_shade) },
11007
// intro, Bomberman 64 - 2. Added by Gonetz
11008
// (t0-env)*prim+env
11009
{ 0x0ae90ae9, cmb(ac_t0_sub_env_mul_prim_add_env) },
11010
// N64 logo, Ogre Battle. Added by Gonetz
11011
// (t0-0)*prim+env
11012
{ 0x0af90af9, cmb(ac_t0_mul_prim_add_env) },
11013
// girls, PD intro. Added by Gonetz
11014
// (t0-env)*shade+env ** INC **
11015
{ 0x0b290b29, cmb(ac_t0_mul_shade_add_env) },
11016
// shadows, Mario Tennis. Added by Gonetz
11017
// (prim-env)*shade+env, (0-cmb)*t1+cmb ** INC **
11018
{ 0x0b2b0087, cmb(ac_prim_sub_env_mul_shade_add_env_mul_t1) },
11019
// lamppost?, Ridge Racer. Added by Gonetz
11020
// (prim-env)*shade+env, (0-0)*0+cmb
11021
{ 0x0b2b0b2b, cmb(ac_prim_sub_env_mul_shade_add_env) },
11022
// ground, zelda2. Added by Gonetz
11023
// (1-env)*shade+env, (t1-0)*prim+0
11024
{ 0x0b2e0efa, cmb(ac_t1_mul_prim) },
11025
// GASP Fighters
11026
// (t0-0)*shade+env
11027
{ 0x0b390b39, cmb(ac_t0_mul_shade_add_env) },
11028
// destroying stuff, golden eye
11029
// (1-0)*shade+env
11030
{ 0x0b3e0b3e, cmb(ac_env_add_shade) },
11031
// Papeer Mario. Added by Gonetz
11032
// (t0-t1)*env+env, (0-0)*0+1
11033
{ 0x0b510dff, cmb(ac_one) },
11034
// International Track and Field 2000. Added by Gonetz
11035
// (t0-0)*0+env
11036
{ 0x0bf90bf9, cmb(ac_env) },
11037
// TM, mario
11038
//z (0-0)*0+env
11039
{ 0x0bff0bff, cmb(ac_env) },
11040
// rancho monster, zelda2. Added by Gonetz
11041
// (0-0)*0+env, (cmb-0)*t1+0
11042
{ 0x0bff0eb8, cmb(ac_t1_mul_env) },
11043
// Rocket Robot in Wheels intro
11044
// (0-0)*0+env, (cmb-0)*prim+0
11045
{ 0x0bff0ef8, cmb(ac_prim_mul_env) },
11046
// Tony Hawk's Pro Skater. Added by Gonetz
11047
// (1-t0)*t1+1, (cmb-t1)*t1+t1 ** INC **
11048
{ 0x0c770c77, cmb(ac_t0_mul_t1) },
11049
// flame, paper mario. Added by Gonetz
11050
// (1-t0)*t1+1, (cmb-t1)*t1+t1
11051
{ 0x0c8e0490, cmb(ac_t0_mul_t1) },
11052
// Ring boundary, dual heroes
11053
// (0-1)*prim+1
11054
{ 0x0cf70cf7, cmb(ac_one_sub_prim) },
11055
// Kirby64, level 6, [Raziel64]
11056
// (0-0)*prim+1
11057
{ 0x0cff0cff, cmb(ac_one) },
11058
// Mystical Ninja
11059
// (0-1)*env+1
11060
{ 0x0d770d77, cmb(ac_one) },
11061
// Deku shield in shop, zelda
11062
// (1-1)*primlod+1
11063
{ 0x0db60db6, cmb(ac_one) },
11064
// water near gorons willage. Added by Gonetz
11065
// (t1-t0)*0+1, (cmb-0)*prim+0
11066
{ 0x0dca0ef8, cmb(ac_prim) },
11067
// background, kirby 64. Added by Gonetz
11068
// (t0-0)*0+1
11069
{ 0x0df90df9, cmb(ac_one) },
11070
// kirby 64. Added by Gonetz
11071
// (1-0)*0+1
11072
{ 0x0dfe0dfe, cmb(ac_one) },
11073
// background on level 2-1, kirby 64 [Raziel64]. Added by Gonetz
11074
// (1-0)*0+1, (0-0)*0+1
11075
{ 0x0dfe0dff, cmb(ac_one) },
11076
// duck dodgers intro. Added by Gonetz
11077
// (0-0)*0+1, (cmb-cmb)*primlod+cmb
11078
{ 0x0dff0000, cmb(ac_one) },
11079
// duck dodgers intro. Added by Gonetz
11080
// (0-0)*0+1, (0-0)*0+t1 **INC**?
11081
{ 0x0dff05ff, cmb(ac_t1) },
11082
// ?
11083
// (0-0)*0+1, (0-0)*0+prim
11084
{ 0x0dff07ff, cmb(ac_prim) },
11085
// arena, custom robo. Added by Gonetz
11086
// (0-0)*0+1, (0-0)*0+shade
11087
{ 0x0dff09ff, cmb(ac_shade) },
11088
// field, Mario Golf
11089
// (0-0)*0+1, (1-env)*shade+env
11090
{ 0x0dff0b2e, cmb(ac_one_sub_env_mul_shade_add_env) },
11091
// battle tanks 2 [Ogy]
11092
// (0-0)*0+1, (0-0)*0+env
11093
{ 0x0dff0bff, cmb(ac_env) },
11094
// helmet, F1 World Grand Prix. Added by Gonetz
11095
// (0-0)*0+1, (0-1)*0+1
11096
{ 0x0dff0df7, cmb(ac_one) },
11097
// secret in level 3-4, Kirby64, [Raziel64]
11098
// (0-0)*0+1, (cmb-0)*0+1
11099
{ 0x0dff0df8, cmb(ac_one) },
11100
// Menu options, starfox
11101
// (0-0)*0+1
11102
{ 0x0dff0dff, cmb(ac_one) },
11103
// Water, zelda
11104
//z (0-0)*0+primlod, (cmb-0)*prim+0
11105
{ 0x0dff0ef8, cmb(ac_prim) },
11106
// Desert ground, zelda
11107
// (0-0)*0+1, (cmb-0)*shade+0
11108
{ 0x0dff0f38, cmb(ac_shade) },
11109
// Characters, smash bros
11110
// (0-0)*0+1, (cmb-0)*env+0
11111
{ 0x0dff0f78, cmb(ac_env) },
11112
// end of level 3-4, Kirby64, [Raziel64]
11113
// (0-0)*0+1, (cmb-0)*0+0
11114
{ 0x0dff0ff8, cmb(ac_zero) },
11115
// Kirby64
11116
// (0-0)*0+1, (0-0)*0+0
11117
{ 0x0dff0fff, cmb(ac_zero) },
11118
// floor, Spiderman [Raziel64]. Added by Gonetz
11119
// (env-t1)*t0+0 ** INC **
11120
{ 0x0e550e55, cmb(ac_t0_mul_env) },
11121
// skeleton, castlevania 2. Added by Gonetz
11122
// (1-prim)*t0+0
11123
{ 0x0e5e0e5e, cmb(ac_one_sub_prim_mul_t0) },
11124
// player select, Forsaken [Raziel64]. Added by Gonetz
11125
// (prim-shade)*t0+0
11126
{ 0x0e630e63, cmb(ac_prim_sub_shade_mul_t0) },
11127
// castlevania 2 [Ogy]. Added by Gonetz
11128
// (1-shade)*t0+0
11129
{ 0x0e660e66, cmb(ac_one_sub_shade_mul_t0) },
11130
// background, level3-4, Kirby64, [Raziel64]
11131
// (shade-env)*t0+0
11132
{ 0x0e6c0e6c, cmb(ac_shade_sub_env_mul_t0) },
11133
// Goemon, mystical ninja. Added by Gonetz
11134
// (1-env)*t0+0
11135
{ 0x0e6e0e6e, cmb(ac_one_sub_env_mul_t0) },
11136
// fist attack, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
11137
// (t0-0)*t0+0, (t1-cmb)*prim+cmb
11138
{ 0x0e7900c2, cmb(ac_t0_inter_t1_using_prima) },
11139
// Clay Fighter [Ogy]. Added by Gonetz
11140
// (t0-0)*t0+0
11141
{ 0x0e790e79, cmb(ac_t0_mul_t0) },
11142
// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
11143
// (t0-0)*t0+0, (prim-0)*t1+0
11144
{ 0x0e790ebb, cmb(ac_t1_mul_prim) },
11145
// zelda 2 [Ogy]. Added by Gonetz
11146
// (t0-0)*t0+0, (cmb-0)*prim+0
11147
{ 0x0e790ef8, cmb(ac_t0_mul_prim) },
11148
// zelda 2. Added by Gonetz
11149
// (t0-0)*t0+0, (cmb-0)*shade+0
11150
{ 0x0e790f38, cmb(ac_t0_mul_shade) },
11151
// zelda 2. Added by Gonetz
11152
// (t0-0)*t0+0, (cmb-0)*env+0
11153
{ 0x0e790f78, cmb(ac_t0_mul_env) },
11154
// the ice plane just before the entrance to gorons village (where tingle is) }, zelda 2 [Ogy]. Added by Gonetz
11155
// (t1-0)*t0+0, (cmb-0)*0+cmb
11156
{ 0x0e7a01f8, cmb(ac_t0_mul_t1) },
11157
// paper mario. Added by Gonetz
11158
// (t1-0)*t0+0, (cmb-env)*prim+env ** INC **
11159
{ 0x0e7a0ae8, cmb(ac_t1_mul_prim) },
11160
// Tony Hawk's Pro Skater. Added by Gonetz
11161
// (t1-0)*t0+0, (cmb-0)*t0+0
11162
{ 0x0e7a0e78, cmb(ac_t0_mul_t1) },
11163
// bike trace, xg2. Added by Gonetz
11164
// (t1-0)*t0+0
11165
{ 0x0e7a0e7a, cmb(ac_t0_mul_t1) },
11166
// Kotake & koume defeated, zelda
11167
// (t1-0)*t0+0, (cmb-0)*prim+0
11168
{ 0x0e7a0ef8, cmb(ac__t0_mul_t1__mul_prim) },
11169
// Magnitude, pokemon stadium 2
11170
// (t1-0)*t0+0, (cmb-env)*shade+0
11171
{ 0x0e7a0f28, cmb(ac__t0_mul_t1__mul_env_mul_shade) },
11172
// Bongo Bongo, zelda
11173
// (t1-0)*t0+0, (cmb-0)*shade+0
11174
{ 0x0e7a0f38, cmb(ac__t0_mul_t1__mul_shade) },
11175
// Back of doors, megaman
11176
// (prim-0)*t0+0, (cmb-0)*lodfrac+0
11177
{ 0x0e7b0e38, cmb(ac_t0_mul_prim) },
11178
// Karts, mario kart
11179
//z (prim-0)*t0+0
11180
{ 0x0e7b0e7b, cmb(ac_t0_mul_prim) },
11181
// paper mario. Added by Gonetz
11182
// (prim-0)*t0+0, (t0-0)*prim+0
11183
{ 0x0e7b0ef9, cmb(ac_t0_mul_prim) },
11184
// Table, mace
11185
// (prim-0)*t0+0, (cmb-0)*shade+0
11186
{ 0x0e7b0f38, cmb(ac_t0_mul_prim_mul_shade) },
11187
// lamp shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
11188
// (shade-0)*t0+0, (cmb-cmb)*lodf+cmb
11189
{ 0x0e7c0000, cmb(ac_t0_mul_shade) },
11190
// Game logo, Aerofighters Assault [Raziel64]
11191
//(shade-0)*t0+0, (0-0)*0+1
11192
{ 0x0e7c0dff, cmb(ac_one) },
11193
// Higher sky, waverace
11194
//z (shade-0)*t0+0
11195
{ 0x0e7c0e7c, cmb(ac_t0_mul_shade) },
11196
// duck dodgers, intro. Added by Gonetz
11197
// (shade-0)*t0+0, (cmb-0)*prim+0
11198
{ 0x0e7c0ef8, cmb(ac_t0_mul_prim_mul_shade) },
11199
// waterwheel in water temple, zelda 2. Added by Gonetz
11200
// (shade-0)*t0+0, (cmb-0)*env+0
11201
{ 0x0e7c0f78, cmb(ac_t0_mul_env_mul_shade) },
11202
// Blowing up mine at bowser's, mario
11203
// (env-0)*t0+0
11204
{ 0x0e7d0e7d, cmb(ac_t0_mul_env) },
11205
// castlevania 2, intro. Added by Gonetz
11206
// (1-0)*t0+0
11207
{ 0x0e7e0e7e, cmb(ac_t0) },
11208
// moon, castlevania 2. Added by Gonetz
11209
// (1-0)*t0+0, (cmb-0)*prim+0
11210
{ 0x0e7e0ef8, cmb(ac_t0_mul_prim) },
11211
//beetle adventure racing. Added by Gonetz
11212
// (1-0)*t0+0, (cmb-0)*shade+0
11213
{ 0x0e7e0f38, cmb(ac_t0_mul_shade) },
11214
// lava, beetle adventure racing
11215
// (t0-prim)*t1+0, (0-0)*0+shade ** INC **
11216
{ 0x0e9909ff, cmb(ac_shade) },
11217
// Rain Dance, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
11218
// (t0-env)*t1+0, (cmb-0)*0+prim ** INC **
11219
{ 0x0ea90ef8, cmb(ac__t0_mul_t1__mul_prim) },
11220
// airboarder 64 [Ogy]
11221
// (t0-0)*t1+0, (0-0)*0+prim
11222
{ 0x0eb907ff, cmb(ac_prim) },
11223
// explosion, body harvest. Added by Gonetz
11224
// (t0-0)*t1+0, (0-0)*0+shade
11225
{ 0x0eb909ff, cmb(ac_shade) },
11226
// Text off top, banjo kazooie
11227
// (t0-0)*t1+0
11228
{ 0x0eb90eb9, cmb(ac_t0_mul_t1) },
11229
// smoke, daikatana. Added by Gonetz
11230
// (t0-0)*t1+0, (cmb-0)*prim+0
11231
{ 0x0eb90ef8, cmb(ac__t0_mul_t1__mul_prim) },
11232
// Water, pilotwings
11233
// (t0-0)*t1+0, (cmb-0)*shade+0
11234
{ 0x0eb90f38, cmb(ac__t0_mul_t1__mul_shade) },
11235
// Tony Hawk's Pro Skater. Added by Gonetz
11236
// (t0-0)*t1+0, (cmb-0)*env+0
11237
{ 0x0eb90f78, cmb(ac__t0_mul_t1__mul_env) },
11238
// light from window, Dobutsu no Mori. Added by Gonetz
11239
// (t0-0)*t1+0, (cmb-0)*primlod+0
11240
{ 0x0eb90fb8, cmb(ac__t0_mul_t1__mul_primlod) },
11241
// chandelier in spider house, zelda 2. Added by Gonetz
11242
// (t1-0)*t1+0, (cmb-0)*prim+0
11243
{ 0x0eba0ef8, cmb(ac_t1_mul_prim) },
11244
// cars, ridge racer. Added by Gonetz
11245
// (prim-0)*t1+0, (0-0)*0+1
11246
{ 0x0ebb0dff, cmb(ac_t1_mul_prim) },
11247
// aerofighter's assault [Ogy]
11248
// (prim-0)*t1+0
11249
{ 0x0ebb0ebb, cmb(ac_t1_mul_prim) },
11250
// tire trace, beetle adventure racing. Added by Gonetz
11251
// (shade-0)*t1+0
11252
{ 0x0ebc0ebc, cmb(ac_t1_mul_shade) },
11253
// smoke, Starshot. Added by Gonetz
11254
// (env-0)*t1+0
11255
{ 0x0ebd0ebd, cmb(ac_t1_mul_env) },
11256
// lots of things, goldeneye
11257
// (1-0)*t1+0, (0-0)*0+shade
11258
{ 0x0ebe09ff, cmb(ac_shade) },
11259
// zelda 2 [Ogy]. Added by Gonetz
11260
// (1-0)*t1+0, (cmb-0)*prim+0
11261
{ 0x0ebe0ef8, cmb(ac_t1_mul_prim) },
11262
// walls, perfect dark. Added by Gonetz
11263
// (1-0)*t1+0, (cmb-0)*shade+0
11264
{ 0x0ebe0f38, cmb(ac_t1_mul_shade) },
11265
// sand, perfect dark. Added by Gonetz
11266
// (1-0)*t1+0, (cmb-0)*env+0
11267
{ 0x0ebe0f78, cmb(ac_t1_mul_env) },
11268
// light, Ridge Racer. Added by Gonetz
11269
// (1-t0)*prim+0
11270
{ 0x0ece0ece, cmb(ac_one_sub_t0_mul_prim) },
11271
// exaust, star wars ep1 racer
11272
// (1-t0)*prim+0, (cmb-0)*shade+0
11273
{ 0x0ece0f38, cmb(ac_one_sub_t0_mul_primshade) },
11274
// iguana, Forsaken, [Raziel64]. Added by Gonetz
11275
// (t0-shade)*prim+0 ** INC **
11276
{ 0x0ee10ee1, cmb(ac_t0_sub_prim_mul_shade) },
11277
// stands, NASCAR 2000
11278
// (prim-shade)*prim+0 ** INC **
11279
{ 0x0ee30ee3, cmb(ac_prim) },
11280
// arena, Pokemon Stadium 2. Added by Gonetz
11281
// (t0-env)*prim+0 ** INC **
11282
{ 0x0ee90ee9, cmb(ac_t0_mul_prim) },
11283
// explosion, body harvest. Added by Gonetz
11284
// (t0-0)*prim+0, (t0-0)*env+cmb
11285
{ 0x0ef90179, cmb(ac_prim_add_env_mul_t0) },
11286
// frog's eyes, zelda
11287
// (t0-0)*prim+0, (1-1)*prim_lod+cmb
11288
{ 0x0ef901b6, cmb(ac_t0_mul_prim) },
11289
// Monster truck madness intro. Added by Gonetz
11290
// (t0-0)*prim+0, (cmb-0)*prim_lod+cmb ** INC **
11291
{ 0x0ef901b8, cmb(ac_t0_mul_prim) },
11292
// Road, zelda
11293
//z (t0-0)*prim+0, (t1-0)*primlod+cmb
11294
{ 0x0ef901ba, cmb(ac__t0_mul_prim__add__t1_mul_primlod) },
11295
// Track, wipeout. Addded by Gonetz
11296
// (t0-0)*prim+0, (0-0)*0+prim
11297
{ 0x0ef907ff, cmb(ac_t0_mul_prim) },
11298
// magic stuff, buck bumble. Added by Gonetz
11299
// (t0-0)*prim+0, (cmb-0)*prim+0
11300
{ 0x0ef90ef8, cmb(ac_t0_mul_prim_mul_prim) },
11301
// The mario face, mario
11302
//z (t0-0)*prim+0
11303
{ 0x0ef90ef9, cmb(ac_t0_mul_prim) },
11304
// paper mario. Added by Gonetz
11305
// (t0-0)*prim+0, (cmb-0)*shade+0
11306
{ 0x0ef90f38, cmb(ac_t0_mul_prim_mul_shade) },
11307
// Pik achu's mouth, smash bros
11308
// (t0-0)*prim+0, (cmb-0)*env+0
11309
{ 0x0ef90f78, cmb(ac_t0_mul_prim_mul_env) },
11310
// bomb mask, zelda 2. Added by Gonetz
11311
// (t0-0)*prim+0, (1-0)*env+0
11312
{ 0x0ef90f7e, cmb(ac_t0_mul_prim) },
11313
// Charmander's tail, pokemon stadium 2
11314
// (t0-0)*prim+0, (cmb-0)*primlod+0
11315
{ 0x0ef90fb8, cmb(ac_t0_mul_prim_mul_primlod) },
11316
// stalactites, Beetle adventure Racing. Added by Gonetz
11317
// (t1-0)*prim+0, (1-cmb)*shade+cmb
11318
{ 0x0efa0106, cmb(ac_one_sub_shade_mul_t1_add_shade) },
11319
// Sprites, Ogre Battle. Added by Gonetz
11320
// (t1-0)*prim+0, (0-0)*0+cmb
11321
{ 0x0efa0efa, cmb(ac_t1_mul_prim) },
11322
// Something about kotake & koume's combined attack, zelda
11323
// (t1-0)*prim+0, (cmb-0)*shade+0
11324
{ 0x0efa0f38, cmb(ac_t1_mul_prim_mul_shade) },
11325
// intro background, bio freaks. Added by Gonetz
11326
// (prim-0)*prim+0
11327
{ 0x0efb0efb, cmb(ac_prim_mul_prim) },
11328
// sky, xg2. Added by Gonetz
11329
// (shade-0)*prim+0, (0-0)*0+1
11330
{ 0x0efc0dff, cmb(ac_one) },
11331
// Zelda, unimp log. Added by Gonetz
11332
// (shade-0)*prim+0
11333
{ 0x0efc0efc, cmb(ac_prim_mul_shade) },
11334
// Baby mario's hat shadow, mario golf
11335
// (env-0)*prim+0
11336
{ 0x0efd0efd, cmb(ac_prim_mul_env) },
11337
// Menu, doom
11338
// (1-0)*prim+0
11339
{ 0x0efe0efe, cmb(ac_prim) },
11340
// Conker's shadow, CBFD. Added by Gonetz
11341
// (1-t0)*shade+0
11342
{ 0x0f0e0f0e, cmb(ac_one_sub_t0_mul_shade) },
11343
// Rock smash, pokemon stadium 2
11344
// (1-t0)*shade+0
11345
{ 0x0f0f0ee8, cmb(ac_one_sub_t0_mul_shade) },
11346
//waterfall, Paper Mario
11347
// (t0-t1)*shade+0
11348
{ 0x0f110f11, cmb(ac__t0_sub_t1__mul_shade) },
11349
// Boomerang circle, zelda
11350
// (t0-0)*shade+0, (1-cmb)*t0+cmb
11351
{ 0x0f390046, cmb(ac_t0_mul_shade) },
11352
// THPS3
11353
// (t0-0)*shade+0, (1-0)*t0+cmb
11354
{ 0x0f39007e, cmb(ac_t0_mul_shade) },
11355
// ???
11356
// (t0-0)*shade+0, (env-0)*t1+cmb
11357
{ 0x0f3900bd, cmb(ac_t0_mul_shade) },
11358
// Forest temple doorway, zelda
11359
// (t0-0)*shade+0, (t1-0)*primlod+cmb
11360
{ 0x0f3901ba, cmb(ac_t0_mul_shade) },
11361
// skis, Spacestation Silicon Valley. Added by Gonetz
11362
// (t0-0)*shade+0, (0-0)*0+t0
11363
{ 0x0f3903ff, cmb(ac_t0) },
11364
// paper mario. Added by Gonetz
11365
// (t0-0)*shade+0, (cmb-t0)*prim+0
11366
{ 0x0f390ec8, cmb(ac_t0_mul_prim_mul_shade) },
11367
// House windows, zelda intro
11368
//z (t0-0)*shade+0, (cmb-0)*prim+0
11369
{ 0x0f390ef8, cmb(ac_t0_mul_prim_mul_shade) },
11370
// Characters, mace
11371
// (t0-0)*shade+0, (cmb-0)*shade+0
11372
{ 0x0f390f38, cmb(ac_t0_mul_shade) },
11373
// Shadows, mario
11374
//z (t0-0)*shade+0
11375
{ 0x0f390f39, cmb(ac_t0_mul_shade) },
11376
// Clear screen intro, banjo kazooie
11377
// (t0-0)*shade+0, (cmb-0)*env+0
11378
{ 0x0f390f78, cmb(ac_t0_mul_env_mul_shade) },
11379
// ridge racer, unimp log. Added by Gonetz
11380
// (t0-0)*shade+0, (cmb-0)*primlod+0 **INC**?
11381
{ 0x0f390fb8, cmb(ac_t0_mul_shade) },
11382
// Reflecting combined attack at kotake & koume's, zelda
11383
// (t1-0)*shade+0, (cmb-0)*prim+0
11384
{ 0x0f3a0ef8, cmb(ac_t1_mul_prim_mul_shade) },
11385
// aerofighter's assault [Ogy]
11386
// (t1-0)*shade+0
11387
{ 0x0f3a0f3a, cmb(ac_t1_mul_shade) },
11388
//beetle adventure racing. Added by Gonetz
11389
//(t1-0)*shade+0, (cmb-0)*env+0
11390
{ 0x0f3a0f78, cmb(ac_t1_mul_env_mul_shade) },
11391
// building shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
11392
// (prim-0)*shade+0, (cmb-cmb)*lodf+cmb
11393
{ 0x0f3b0000, cmb(ac_prim_mul_shade) },
11394
//chip in Spacestation Silicon Valley intro. Added by Gonetz
11395
// (prim-0)*shade+0, (env-cmb)*t1+cmb
11396
{ 0x0f3b0085, cmb(ac_env_sub_primshade_mul_t1_add_primshade) },
11397
// N64 logo, tetrisphere. Added by Gonetz
11398
// (prim-0)*shade+0, (prim-0)*shade+0
11399
{ 0x0f3b0f3b, cmb(ac_prim_mul_shade) },
11400
// rays, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz
11401
// (shade-0)*shade+0, (cmb-0)*prim+0
11402
{ 0x0f3c0ef8, cmb(ac_prim_mul_shade) },
11403
// light, dracula resurrection, castlevania 2. Added by Gonetz
11404
// (env-0)*shade+0
11405
{ 0x0f3d0f3d, cmb(ac_env_mul_shade) },
11406
// zelda 2 [Ogy]. Added by Gonetz
11407
// (1-0)*shade+0
11408
{ 0x0f3e0f3e, cmb(ac_shade) },
11409
// surf pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
11410
// (1-t0)*env+0, (1-cmb)*shade+0 ** INC **
11411
{ 0x0f4e0f06, cmb(ac_t0_mul_shade) },
11412
//beetle adventure racing. Added by Gonetz
11413
//(t0-0)*env+0, (1-t0)*prim+cmb
11414
{ 0x0f7900ce, cmb(ac_t0_mul_env) }, //this one looks better
11415
// { 0x0f7900ce, cmb(ac_env_sub_prim_mul_t0_add_prim) },
11416
//Zelda, logo ? Added by Gonetz
11417
//(t0-0)*env+0, (t1-0)*primlod+0 **INC** changed to mul_env for gannon's organ disappearing [Dave2001]
11418
{ 0x0f7901ba, cmb(ac__t0_inter_t1_using_primlod__mul_env) },
11419
// Skeleton guy's eyes, zelda
11420
// (t0-0)*env+0, (cmb-0)*prim+0
11421
{ 0x0f790ef8, cmb(ac_t0_mul_prim_mul_env) },
11422
// Dust from rock spell, quest64
11423
// (t0-0)*env+0, (cmb-0)*shade+0
11424
{ 0x0f790f38, cmb(ac_t0_mul_env_mul_shade) },
11425
// eyes of poe, zelda
11426
// (t0-0)*env+0, (cmb-0)*env+0
11427
{ 0x0f790f78, cmb(ac_t0_mul_env) },
11428
// Text, mario
11429
//z (t0-0)*env+0
11430
{ 0x0f790f79, cmb(ac_t0_mul_env) },
11431
// Shadows, pokemon stadeom 2
11432
// (t0-0)*env+0, (cmb-0)*primlod+0
11433
{ 0x0f790fb8, cmb(ac_t0_mul_env_mul_primlod) },
11434
//gauge, PGA
11435
// (t1-0)*env+0, (cmb-0)*t1+0 ** INC **
11436
{ 0x0f7a0eb8, cmb(ac_t1_mul_env) },
11437
//text and shadows, Rayman2. Added by Gonetz
11438
// (t1-0)*env+0, (cmb-0)*shade+0
11439
{ 0x0f7a0f38, cmb(ac_t1_mul_env_mul_shade) },
11440
// shadows, tom and jerry. Added by Gonetz
11441
// (t1-0)*env+0
11442
{ 0x0f7a0f7a, cmb(ac_t1_mul_env) },
11443
// Bomberman64-2 intro. Added by Gonetz
11444
// (prim-0)*env+0
11445
{ 0x0f7b0f7b, cmb(ac_prim_mul_env) },
11446
// Text box, mario
11447
//z (shade-0)*env+0
11448
{ 0x0f7c0f7c, cmb(ac_env_mul_shade) },
11449
// Ogre battle 64
11450
// (env-0)*env+0
11451
{ 0x0f7d0f7d, cmb(ac_env) },
11452
//Goldeneye, [Jeremy]. Added by Gonetz
11453
// (1-0)*env+0, (cmb-0)*shade+0
11454
{ 0x0f7e0f38, cmb(ac_env_mul_shade) },
11455
// Status items, megaman
11456
// (1-0)*env+0
11457
{ 0x0f7e0f7e, cmb(ac_env) },
11458
// gun fire, Beast_Wars_Transmetal [Raziel64]
11459
// (0-0)*env+0
11460
{ 0x0f7f0f7f, cmb(ac_zero) },
11461
// Shadow Ball, Pokemon Stadium 2 [gokuss4]. Added by Gonetz
11462
// (t1-t0)*primlod+0, (t1-cmb)*prim+0 ** INC **
11463
{ 0x0f8a0ec2, cmb(ac_t0_mul_prim) },
11464
// Walls of well through lens of truth, zelda
11465
// (prim-t0)*primlod+0
11466
{ 0x0f8b0f8b, cmb(ac_prim_sub_t0) },
11467
// N64 logo, ridge racer. Added by Gonetz
11468
// (1-prim)*primlod+0 **INC**
11469
{ 0x0f9e0f9e, cmb(ac_zero) },
11470
// Vines that covers a door in the third room of woodfall temple, zelda 2 [Ogy]. Added by Gonetz
11471
// (t0-0)*primlod+0, (cmb-0)*prim+0
11472
{ 0x0fb90ef8, cmb(ac_t0_mul_primlod_mul_prim) },
11473
// zelda 2. Added by Gonetz
11474
// (t0-0)*primlod+0
11475
{ 0x0fb90fb9, cmb(ac_t0_mul_primlod) },
11476
// NFL Blitz logo. Added by Gonetz
11477
// (t1-0)*primlod+0
11478
{ 0x0fba0fba, cmb(ac_t1_mul_primlod) }, //causes issues
11479
// fallen stars at star summit, Paper Mario. Added by Gonetz
11480
// (shade-0)*primlod+0
11481
{ 0x0fbc0fbc, cmb(ac_primlod_mul_shade) },
11482
// expansion pack, Jeremy McGrath Supercross 2000. Added by Gonetz
11483
// (1-0)*primlod+0
11484
{ 0x0fbe0fbe, cmb(ac_primlod) },
11485
// intro, Aidyn Chronicles. Added by Gonetz
11486
// (0-0)*primlod+0, (prim-env)*t0+prim **INC**
11487
{ 0x0fbf066b, cmb(ac_t0_mul_prim) },
11488
// sky, Rayman2. Added by Gonetz
11489
// (0-shade)*0+0
11490
{ 0x0fe70fe7, cmb(ac_zero) },
11491
// flame, PokemonStadium1 [Raziel64]
11492
// (t0-0)*0+0
11493
{ 0x0ff90ff9, cmb(ac_zero) },
11494
// Screen clear, banjo kazooie
11495
// (0-0)*0+0
11496
{ 0x0fff0fff, cmb(ac_zero) },
11497
// { #ACEND }
11498
};
11499
11500
// CountCombine - count the # of entries in the combine lists
11501
void CountCombine ()
11502
{
11503
int size = sizeof(color_cmb_list) >> 3;
11504
int i=0, index=0, a, b;
11505
do {
11506
a = color_cmb_list[index].key >> 24;
11507
for (; i<=a; i++)
11508
cc_lookup[i] = index;
11509
11510
while (index < size)
11511
{
11512
b = color_cmb_list[index].key >> 24;
11513
if (b != a) break;
11514
index ++;
11515
}
11516
} while (index < size);
11517
for (; i<257; i++) cc_lookup[i] = index;
11518
11519
size = sizeof(alpha_cmb_list) >> 3;
11520
i=0, index=0;
11521
do {
11522
a = (alpha_cmb_list[index].key >> 20) & 0xFF;
11523
for (; i<=a; i++)
11524
ac_lookup[i] = index;
11525
11526
while (index < size)
11527
{
11528
b = (alpha_cmb_list[index].key >> 20) & 0xFF;
11529
if (b != a) break;
11530
index ++;
11531
}
11532
} while (index < size);
11533
for (; i<257; i++) ac_lookup[i] = index;
11534
11535
//color_cmb_list_count = sizeof(color_cmb_list) >> 3; // #bytes/4/2
11536
//alpha_cmb_list_count = sizeof(alpha_cmb_list) >> 3;
11537
}
11538
11539
//****************************************************************
11540
// Main Combine
11541
//****************************************************************
11542
11543
void Combine ()
11544
{
11545
FRDP (" | |- color combine: %08lx, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
11546
((rdp.cycle1 & 0xFFFF) << 16) | (rdp.cycle2 & 0xFFFF),
11547
Mode0[rdp.cycle1&0xF], Mode1[(rdp.cycle1>>4)&0xF], Mode2[(rdp.cycle1>>8)&0x1F], Mode3[(rdp.cycle1>>13)&7],
11548
Mode0[rdp.cycle2&0xF], Mode1[(rdp.cycle2>>4)&0xF], Mode2[(rdp.cycle2>>8)&0x1F], Mode3[(rdp.cycle2>>13)&7]);
11549
FRDP (" | |- alpha combine: %08lx, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
11550
(rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 & 0x0FFF0000) >> 16),
11551
Alpha0[(rdp.cycle1>>16)&7], Alpha1[(rdp.cycle1>>19)&7], Alpha2[(rdp.cycle1>>22)&7], Alpha3[(rdp.cycle1>>25)&7],
11552
Alpha0[(rdp.cycle2>>16)&7], Alpha1[(rdp.cycle2>>19)&7], Alpha2[(rdp.cycle2>>22)&7], Alpha3[(rdp.cycle2>>25)&7]);
11553
11554
if (settings.lodmode == 0 || rdp.cur_tile == rdp.mipmap_level)
11555
lod_frac = rdp.prim_lodfrac;
11556
else
11557
lod_frac = 10;
11558
11559
rdp.noise = noise_none;
11560
11561
DWORD found = TRUE;
11562
11563
rdp.col[0] = rdp.col[1] = rdp.col[2] = rdp.col[3] =
11564
rdp.coladd[0] = rdp.coladd[1] = rdp.coladd[2] = rdp.coladd[3] = 1.0f;
11565
rdp.cmb_flags = rdp.cmb_flags_2 = 0;
11566
11567
rdp.uncombined = 0;
11568
11569
cmb.tex = 0;
11570
cmb.tmu0_func = cmb.tmu1_func = cmb.tmu0_a_func = cmb.tmu1_a_func = GR_COMBINE_FUNCTION_ZERO;
11571
cmb.tmu0_fac = cmb.tmu1_fac = cmb.tmu0_a_fac = cmb.tmu1_a_fac = GR_COMBINE_FACTOR_NONE;
11572
cmb.tmu0_invert = cmb.tmu0_a_invert = cmb.tmu1_invert = cmb.tmu1_a_invert = FXFALSE;
11573
11574
cmb.dc0_detailmax = cmb.dc1_detailmax = 0;
11575
11576
cmb.mod_0 = cmb.mod_1 = 0; // remove all modifications
11577
cmb.modcolor_0 = cmb.modcolor1_0 = cmb.modcolor2_0 = cmb.modcolor_1 = cmb.modcolor1_1 = cmb.modcolor2_1
11578
= cmb.modfactor_0 = cmb.modfactor_1 = 0;
11579
11580
cmb.ccolor = cmb.tex_ccolor = 0;
11581
if (cmb.cmb_ext_use || cmb.tex_cmb_ext_use)
11582
{
11583
//have to draw something to allow use of standard combine functions
11584
if (fullscreen)
11585
{
11586
VERTEX v;
11587
memset(&v,0,sizeof(v));
11588
grDrawPoint(&v);
11589
}
11590
cmb.cmb_ext_use = 0;
11591
cmb.tex_cmb_ext_use = 0;
11592
}
11593
11594
DWORD cmb_mode_c = (rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF);
11595
DWORD cmb_mode_a = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF);
11596
11597
cmb.abf1 = GR_BLEND_SRC_ALPHA;
11598
cmb.abf2 = GR_BLEND_ONE_MINUS_SRC_ALPHA;
11599
11600
#ifdef FASTSEARCH
11601
// Fast, ordered search
11602
int current=0x7FFFFFFF, last;
11603
DWORD actual_combine, current_combine = 0x7fffffff, color_combine, alpha_combine;
11604
int left, right;
11605
11606
actual_combine = cmb_mode_c;
11607
color_combine = actual_combine;
11608
if ((rdp.cycle2 & 0xFFFF) == 0x1FFF)
11609
actual_combine = (rdp.cycle1 << 16) | (rdp.cycle1 & 0xFFFF);
11610
11611
left = cc_lookup[actual_combine>>24];
11612
right = cc_lookup[(actual_combine>>24)+1];
11613
11614
while (1)
11615
{
11616
last = current;
11617
current = left + ((right-left) >> 1);
11618
if (current == last)
11619
break; // can't be found!
11620
11621
current_combine = color_cmb_list[current].key;
11622
if (current_combine < actual_combine)
11623
left = current;
11624
else if (current_combine > actual_combine)
11625
right = current;
11626
else
11627
break; // found it!
11628
}
11629
11630
// Check if we didn't find it
11631
if (actual_combine != current_combine)
11632
{
11633
rdp.uncombined |= 1;
11634
#ifdef UNIMP_LOG
11635
if (settings.log_unk)
11636
{
11637
sprintf (out_buf, "COLOR combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
11638
actual_combine,
11639
Mode0[rdp.cycle1&0xF], Mode1[(rdp.cycle1>>4)&0xF], Mode2[(rdp.cycle1>>8)&0x1F], Mode3[(rdp.cycle1>>13)&7],
11640
Mode0[rdp.cycle2&0xF], Mode1[(rdp.cycle2>>4)&0xF], Mode2[(rdp.cycle2>>8)&0x1F], Mode3[(rdp.cycle2>>13)&7]);
11641
UNIMPMODE();
11642
}
11643
#endif
11644
found = FALSE;
11645
//tex |= 3;
11646
11647
// use t0 as default
11648
cc_t0 ();
11649
}
11650
else
11651
(color_cmb_list[current].func)();
11652
11653
RDP (" | |- Color done\n");
11654
11655
// Now again for alpha
11656
current = 0x7FFFFFFF;
11657
actual_combine = cmb_mode_a;
11658
alpha_combine = actual_combine;
11659
if ((rdp.cycle2 & 0x0FFF0000) == 0x01FF0000)
11660
actual_combine = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle1 >> 16) & 0x00000FFF);
11661
if ((rdp.cycle1 & 0x0FFF0000) == 0x0FFF0000)
11662
actual_combine = (rdp.cycle2 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF);
11663
11664
left = ac_lookup[(actual_combine>>20)&0xFF];
11665
right = ac_lookup[((actual_combine>>20)&0xFF)+1];
11666
11667
while (1)
11668
{
11669
last = current;
11670
current = left + ((right-left) >> 1);
11671
if (current == last)
11672
break; // can't be found!
11673
11674
current_combine = alpha_cmb_list[current].key;
11675
if (current_combine < actual_combine)
11676
left = current;
11677
else if (current_combine > actual_combine)
11678
right = current;
11679
else
11680
break; // found it!
11681
}
11682
11683
// Check if we didn't find it
11684
if (actual_combine != current_combine || !found)
11685
{
11686
if (actual_combine != current_combine)
11687
{
11688
rdp.uncombined |= 2;
11689
#ifdef UNIMP_LOG
11690
if (settings.log_unk)
11691
{
11692
sprintf (out_buf, "ALPHA combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",
11693
actual_combine,
11694
Alpha0[(rdp.cycle1>>16)&7], Alpha1[(rdp.cycle1>>19)&7], Alpha2[(rdp.cycle1>>22)&7], Alpha3[(rdp.cycle1>>25)&7],
11695
Alpha0[(rdp.cycle2>>16)&7], Alpha1[(rdp.cycle2>>19)&7], Alpha2[(rdp.cycle2>>22)&7], Alpha3[(rdp.cycle2>>25)&7]);
11696
UNIMPMODE();
11697
}
11698
#endif
11699
}
11700
if (settings.unk_as_red)
11701
{
11702
BrightRed ();
11703
}
11704
else
11705
{
11706
// use full alpha as default
11707
ac_t0 ();
11708
}
11709
//tex |= 3;
11710
}
11711
else
11712
(alpha_cmb_list[current].func)();
11713
11714
11715
if (color_combine == 0x69351fff) //text, PD, need to change texture alpha
11716
{
11717
A_USE_T1();
11718
}
11719
else if ((color_combine == 0x3fff1fff) && (alpha_combine == 0x03ff03ff) && (rdp.last_tile > rdp.cur_tile))//Dr. Mario
11720
{
11721
cc_t0();
11722
ac_t1();
11723
}
11724
else if (color_combine == 0x613522f0 && settings.PM) //Paper Mario fortune teller spheres
11725
{
11726
ac_t0();
11727
}
11728
11729
RDP (" | |- Alpha done\n");
11730
#endif // FASTSEARCH
11731
11732
CombineBlender ();
11733
//*
11734
// Update textures?
11735
// if (tex == 2 && rdp.texrecting && (cmb.tmu1_func != GR_COMBINE_FUNCTION_ZERO) && (rdp.last_tile_size == 0))
11736
if (cmb.tex == 2 && rdp.texrecting && (rdp.cur_tile == rdp.last_tile_size))
11737
{
11738
cmb.tex = 0;
11739
USE_T0();
11740
A_USE_T0();
11741
}
11742
//*/
11743
rdp.tex = cmb.tex;
11744
11745
if (cmb.tex && rdp.hires_tex && settings.fb_read_alpha)
11746
{
11747
if (settings.PM && rdp.hires_tex->width == rdp.ci_width)
11748
;
11749
else
11750
{
11751
grChromakeyValue(0);
11752
grChromakeyMode(GR_CHROMAKEY_ENABLE);
11753
}
11754
}
11755
else if (settings.invaders && (rdp.geom_mode == 0x0205))
11756
{
11757
grChromakeyValue(0);
11758
grChromakeyMode(GR_CHROMAKEY_ENABLE);
11759
}
11760
else
11761
grChromakeyMode(GR_CHROMAKEY_DISABLE);
11762
11763
RDP (" | + Combine end\n");
11764
}
11765
11766
void CombineBlender ()
11767
{
11768
// Check force-blending
11769
if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))
11770
{
11771
switch (rdp.othermode_l >> 16)
11772
{
11773
// Mace objects
11774
case 0x0382:
11775
case 0x0091:
11776
// 1080 sky
11777
case 0x0c08:
11778
// Mario kart player select
11779
// clr_in * 0 + clr_in * 1
11780
// - or just clr_in, no matter what alpha
11781
case 0x0f0a:
11782
//DK64 blue prints
11783
case 0x0302:
11784
A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
11785
break;
11786
11787
// LOT in Zelda: MM
11788
case 0xaf50:
11789
case 0x0f5a: //clr_in * 0 + clr_mem * 1
11790
A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
11791
break;
11792
11793
case 0x5f50: //clr_mem * 0 + clr_mem * (1-a)
11794
A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE_MINUS_SRC_ALPHA);
11795
break;
11796
11797
case 0xf550: //clr_fog * a_fog + clr_mem * (1-a)
11798
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
11799
rdp.col[0] *= (float)((rdp.fog_color & 0xFF000000) >> 24) / 255.0f;
11800
rdp.col[1] *= (float)((rdp.fog_color & 0x00FF0000) >> 16) / 255.0f;
11801
rdp.col[2] *= (float)((rdp.fog_color & 0x0000FF00) >> 8) / 255.0f;
11802
rdp.col[3] *= (float)(rdp.fog_color & 0xFF) / 255.0f;
11803
rdp.cmb_flags = CMB_SET | CMB_A_SET;
11804
break;
11805
11806
// Super Smash Bros, faked fog for flashing characters
11807
case 0xc411:
11808
{
11809
MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);
11810
MOD_0_COL (rdp.fog_color & 0x00FFFFFF);
11811
MOD_0_FAC (rdp.fog_color >> 24);
11812
INTERSHADE_2 (rdp.fog_color & 0x00FFFFFF, rdp.fog_color >> 24);
11813
11814
float percent = (rdp.fog_color >> 24) / 255.0f;
11815
cmb.ccolor = (cmb.ccolor & 0xFF000000) |
11816
((DWORD)(((cmb.ccolor >> 16) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) * percent) << 16) |
11817
((DWORD)(((cmb.ccolor >> 8) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) * percent) << 8) |
11818
(DWORD)((cmb.ccolor & 0xFF) * (1.0f-percent) + (rdp.fog_color & 0xFF) * percent);
11819
11820
rdp.col[0] = rdp.col[0] * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) / 255.0f * percent;
11821
rdp.col[1] = rdp.col[1] * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) / 255.0f * percent;
11822
rdp.col[2] = rdp.col[2] * (1.0f-percent) + (rdp.fog_color & 0xFF) / 255.0f * percent;
11823
}
11824
break;
11825
11826
default:
11827
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
11828
}
11829
}
11830
else
11831
A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
11832
11833
// ALPHA_CVG_SEL means full alpha
11834
// The reason it wasn't working before was because I wasn't handling rdp:setothermode
11835
// if (rdp.othermode_l & 0x2000)
11836
if ((rdp.othermode_l & 0x2000) && ((rdp.othermode_l & 0x7000) != 0x7000))
11837
{
11838
if (settings.PM && ((rdp.othermode_l >> 16) == 0x5055))
11839
{
11840
A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
11841
}
11842
else
11843
{
11844
A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
11845
}
11846
}
11847
11848
//hack
11849
//*
11850
if (settings.ISS64)
11851
{
11852
if ((rdp.othermode_l >> 16) == 0xc302)
11853
{
11854
A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);
11855
}
11856
else if (rdp.othermode_l == 0xff5a6379)
11857
{
11858
A_BLEND (GR_BLEND_ZERO, GR_BLEND_SRC_ALPHA);
11859
}
11860
else if (rdp.othermode_l == 0x00504dd9)
11861
{
11862
A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);
11863
}
11864
}
11865
else if (settings.TGR)
11866
{
11867
if (rdp.othermode_l == 0x0f0a0235)
11868
{
11869
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
11870
}
11871
}
11872
//*/
11873
}
11874
11875
void InitCombine ()
11876
{
11877
LOG ("InitCombine() ");
11878
memset(&cmb, 0, sizeof(cmb));
11879
const char *extensions = grGetString (GR_EXTENSION);
11880
const char *extstr = strstr(extensions, "COMBINE");
11881
if (extstr) {
11882
if (!strncmp(extstr, "COMBINE", 7)) {
11883
LOG ("extensions ");
11884
cmb.grColorCombineExt = (GRCOLORCOMBINEEXT) grGetProcAddress("grColorCombineExt");
11885
cmb.grAlphaCombineExt = (GRCOLORCOMBINEEXT) grGetProcAddress("grAlphaCombineExt");
11886
cmb.grTexColorCombineExt = (GRTEXCOLORCOMBINEEXT) grGetProcAddress("grTexColorCombineExt");
11887
cmb.grTexAlphaCombineExt = (GRTEXCOLORCOMBINEEXT) grGetProcAddress("grTexAlphaCombineExt");
11888
cmb.grConstantColorValueExt = (GRCONSTANTCOLORVALUEEXT) grGetProcAddress("grConstantColorValueExt");
11889
if (cmb.grColorCombineExt && cmb.grAlphaCombineExt &&
11890
cmb.grTexColorCombineExt && cmb.grTexAlphaCombineExt)
11891
{
11892
cmb.combine_ext = TRUE;
11893
LOG ("initialized.");
11894
}
11895
else
11896
{
11897
cmb.combine_ext = FALSE;
11898
}
11899
}
11900
}
11901
cmb.dc0_lodbias = cmb.dc1_lodbias = 31;
11902
cmb.dc0_detailscale = cmb.dc1_detailscale = 7;
11903
cmb.lodbias0 = cmb.lodbias1 = 1.0f;
11904
LOG ("\n");
11905
}
11906
11907
void ColorCombinerToExtension ()
11908
{
11909
DWORD ext_local, ext_local_a, ext_other, ext_other_a;
11910
switch (cmb.c_loc)
11911
{
11912
case GR_COMBINE_LOCAL_ITERATED:
11913
ext_local = GR_CMBX_ITRGB;
11914
ext_local_a = GR_CMBX_ITALPHA;
11915
break;
11916
case GR_COMBINE_LOCAL_CONSTANT:
11917
ext_local = GR_CMBX_CONSTANT_COLOR;
11918
ext_local_a = GR_CMBX_CONSTANT_ALPHA;
11919
break;
11920
default:
11921
ext_local = 0;
11922
ext_local_a = 0;
11923
break;
11924
};
11925
switch (cmb.c_oth)
11926
{
11927
case GR_COMBINE_OTHER_ITERATED:
11928
ext_other = GR_CMBX_ITRGB;
11929
ext_other_a = GR_CMBX_ITALPHA;
11930
break;
11931
case GR_COMBINE_OTHER_TEXTURE:
11932
ext_other = GR_CMBX_TEXTURE_RGB;
11933
ext_other_a = GR_CMBX_TEXTURE_ALPHA;
11934
break;
11935
case GR_COMBINE_OTHER_CONSTANT:
11936
ext_other = GR_CMBX_CONSTANT_COLOR;
11937
ext_other_a = GR_CMBX_CONSTANT_ALPHA;
11938
break;
11939
default:
11940
ext_other = 0;
11941
ext_other_a = 0;
11942
break;
11943
};
11944
switch (cmb.c_fac)
11945
{
11946
case GR_COMBINE_FACTOR_ZERO:
11947
cmb.c_ext_c = GR_CMBX_ZERO;
11948
cmb.c_ext_c_invert = 0;
11949
break;
11950
case GR_COMBINE_FACTOR_ONE:
11951
cmb.c_ext_c = GR_CMBX_ZERO;
11952
cmb.c_ext_c_invert = 1;
11953
break;
11954
case GR_COMBINE_FACTOR_LOCAL:
11955
cmb.c_ext_c = ext_local;
11956
cmb.c_ext_c_invert = 0;
11957
break;
11958
case GR_COMBINE_FACTOR_LOCAL_ALPHA:
11959
cmb.c_ext_c = ext_local_a;
11960
cmb.c_ext_c_invert = 0;
11961
break;
11962
case GR_COMBINE_FACTOR_OTHER_ALPHA:
11963
cmb.c_ext_c = ext_other_a;
11964
cmb.c_ext_c_invert = 0;
11965
break;
11966
case GR_COMBINE_FACTOR_TEXTURE_RGB:
11967
cmb.c_ext_c = GR_CMBX_TEXTURE_RGB;
11968
cmb.c_ext_c_invert = 0;
11969
break;
11970
case GR_COMBINE_FACTOR_TEXTURE_ALPHA:
11971
cmb.c_ext_c = GR_CMBX_TEXTURE_ALPHA;
11972
cmb.c_ext_c_invert = 0;
11973
break;
11974
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
11975
cmb.c_ext_c = ext_local;
11976
cmb.c_ext_c_invert = 1;
11977
break;
11978
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
11979
cmb.c_ext_c = ext_local_a;
11980
cmb.c_ext_c_invert = 1;
11981
break;
11982
case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
11983
cmb.c_ext_c = ext_other_a;
11984
cmb.c_ext_c_invert = 1;
11985
break;
11986
case GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA:
11987
cmb.c_ext_c = GR_CMBX_TEXTURE_ALPHA;
11988
cmb.c_ext_c_invert = 1;
11989
break;
11990
}
11991
11992
switch (cmb.c_fnc)
11993
{
11994
case GR_COMBINE_FUNCTION_ZERO:
11995
cmb.c_ext_a = GR_CMBX_ZERO;
11996
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
11997
cmb.c_ext_b = GR_CMBX_ZERO;
11998
cmb.c_ext_b_mode = GR_FUNC_MODE_X;
11999
cmb.c_ext_c = GR_CMBX_ZERO;
12000
cmb.c_ext_c_invert = 0;
12001
cmb.c_ext_d = GR_CMBX_ZERO;
12002
cmb.c_ext_d_invert = 0;
12003
break;
12004
case GR_COMBINE_FUNCTION_LOCAL:
12005
cmb.c_ext_a = ext_local;
12006
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
12007
cmb.c_ext_b = GR_CMBX_ZERO;
12008
cmb.c_ext_b_mode = GR_FUNC_MODE_X;
12009
cmb.c_ext_c = GR_CMBX_ZERO;
12010
cmb.c_ext_c_invert = 1;
12011
cmb.c_ext_d = GR_CMBX_ZERO;
12012
cmb.c_ext_d_invert = 0;
12013
break;
12014
case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
12015
cmb.c_ext_a = ext_local_a;
12016
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
12017
cmb.c_ext_b = GR_CMBX_ZERO;
12018
cmb.c_ext_b_mode = GR_FUNC_MODE_X;
12019
cmb.c_ext_c = GR_CMBX_ZERO;
12020
cmb.c_ext_c_invert = 1;
12021
cmb.c_ext_d = GR_CMBX_ZERO;
12022
cmb.c_ext_d_invert = 0;
12023
break;
12024
case GR_COMBINE_FUNCTION_SCALE_OTHER:
12025
cmb.c_ext_a = ext_other;
12026
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
12027
cmb.c_ext_b = GR_CMBX_ZERO;
12028
cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;
12029
cmb.c_ext_d = GR_CMBX_ZERO;
12030
cmb.c_ext_d_invert = 0;
12031
break;
12032
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
12033
cmb.c_ext_a = ext_other;
12034
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
12035
cmb.c_ext_b = ext_local;
12036
cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;
12037
cmb.c_ext_d = GR_CMBX_B;
12038
cmb.c_ext_d_invert = 0;
12039
break;
12040
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
12041
cmb.c_ext_a = ext_other;
12042
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
12043
cmb.c_ext_b = ext_local_a;
12044
cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;
12045
cmb.c_ext_d = GR_CMBX_B;
12046
cmb.c_ext_d_invert = 0;
12047
break;
12048
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
12049
cmb.c_ext_a = ext_other;
12050
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
12051
cmb.c_ext_b = ext_local;
12052
cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12053
cmb.c_ext_d = GR_CMBX_ZERO;
12054
cmb.c_ext_d_invert = 0;
12055
break;
12056
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
12057
cmb.c_ext_a = ext_other;
12058
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
12059
cmb.c_ext_b = ext_local;
12060
cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12061
cmb.c_ext_d = GR_CMBX_B;
12062
cmb.c_ext_d_invert = 0;
12063
break;
12064
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
12065
cmb.c_ext_a = ext_other;
12066
cmb.c_ext_a_mode = GR_FUNC_MODE_X;
12067
cmb.c_ext_b = ext_local;
12068
cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12069
cmb.c_ext_d = GR_CMBX_ALOCAL;
12070
cmb.c_ext_d_invert = 0;
12071
break;
12072
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
12073
cmb.c_ext_a = GR_CMBX_ZERO;
12074
cmb.c_ext_a_mode = GR_FUNC_MODE_ZERO;
12075
cmb.c_ext_b = ext_local;
12076
cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12077
cmb.c_ext_d = GR_CMBX_B;
12078
cmb.c_ext_d_invert = 0;
12079
break;
12080
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
12081
cmb.c_ext_a = GR_CMBX_ZERO;
12082
cmb.c_ext_a_mode = GR_FUNC_MODE_ZERO;
12083
cmb.c_ext_b = ext_local;
12084
cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12085
cmb.c_ext_d = GR_CMBX_ALOCAL;
12086
cmb.c_ext_d_invert = 0;
12087
break;
12088
}
12089
}
12090
12091
void AlphaCombinerToExtension ()
12092
{
12093
DWORD ext_local, ext_other;
12094
switch (cmb.a_loc)
12095
{
12096
case GR_COMBINE_LOCAL_ITERATED:
12097
ext_local = GR_CMBX_ITALPHA;
12098
break;
12099
case GR_COMBINE_LOCAL_CONSTANT:
12100
ext_local = GR_CMBX_CONSTANT_ALPHA;
12101
break;
12102
default:
12103
ext_local = GR_CMBX_ZERO;
12104
};
12105
switch (cmb.a_oth)
12106
{
12107
case GR_COMBINE_OTHER_ITERATED:
12108
ext_other = GR_CMBX_ITALPHA;
12109
break;
12110
case GR_COMBINE_OTHER_TEXTURE:
12111
ext_other = GR_CMBX_TEXTURE_ALPHA;
12112
break;
12113
case GR_COMBINE_OTHER_CONSTANT:
12114
ext_other = GR_CMBX_CONSTANT_ALPHA;
12115
break;
12116
default:
12117
ext_other = GR_CMBX_ZERO;
12118
};
12119
switch (cmb.a_fac)
12120
{
12121
case GR_COMBINE_FACTOR_ZERO:
12122
cmb.a_ext_c = GR_CMBX_ZERO;
12123
cmb.a_ext_c_invert = 0;
12124
break;
12125
case GR_COMBINE_FACTOR_ONE:
12126
cmb.a_ext_c = GR_CMBX_ZERO;
12127
cmb.a_ext_c_invert = 1;
12128
break;
12129
case GR_COMBINE_FACTOR_LOCAL:
12130
case GR_COMBINE_FACTOR_LOCAL_ALPHA:
12131
cmb.a_ext_c = ext_local;
12132
cmb.a_ext_c_invert = 0;
12133
break;
12134
case GR_COMBINE_FACTOR_OTHER_ALPHA:
12135
cmb.a_ext_c = ext_other;
12136
cmb.a_ext_c_invert = 0;
12137
break;
12138
case GR_COMBINE_FACTOR_TEXTURE_ALPHA:
12139
cmb.a_ext_c = GR_CMBX_TEXTURE_ALPHA;
12140
cmb.a_ext_c_invert = 0;
12141
break;
12142
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
12143
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
12144
cmb.a_ext_c = ext_local;
12145
cmb.a_ext_c_invert = 1;
12146
break;
12147
case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
12148
cmb.a_ext_c = ext_other;
12149
cmb.a_ext_c_invert = 1;
12150
break;
12151
case GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA:
12152
cmb.a_ext_c = GR_CMBX_TEXTURE_ALPHA;
12153
cmb.a_ext_c_invert = 1;
12154
break;
12155
default:
12156
cmb.a_ext_c = GR_CMBX_ZERO;
12157
cmb.a_ext_c_invert = 0;
12158
}
12159
12160
switch (cmb.a_fnc)
12161
{
12162
case GR_COMBINE_FUNCTION_ZERO:
12163
cmb.a_ext_a = GR_CMBX_ZERO;
12164
cmb.a_ext_a_mode = GR_FUNC_MODE_X;
12165
cmb.a_ext_b = GR_CMBX_ZERO;
12166
cmb.a_ext_b_mode = GR_FUNC_MODE_X;
12167
cmb.a_ext_c = GR_CMBX_ZERO;
12168
cmb.a_ext_c_invert = 0;
12169
cmb.a_ext_d = GR_CMBX_ZERO;
12170
cmb.a_ext_d_invert = 0;
12171
break;
12172
case GR_COMBINE_FUNCTION_LOCAL:
12173
case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
12174
cmb.a_ext_a = GR_CMBX_ZERO;
12175
cmb.a_ext_a_mode = GR_FUNC_MODE_ZERO;
12176
cmb.a_ext_b = ext_local;
12177
cmb.a_ext_b_mode = GR_FUNC_MODE_X;
12178
cmb.a_ext_c = GR_CMBX_ZERO;
12179
cmb.a_ext_c_invert = 1;
12180
cmb.a_ext_d = GR_CMBX_ZERO;
12181
cmb.a_ext_d_invert = 0;
12182
break;
12183
case GR_COMBINE_FUNCTION_SCALE_OTHER:
12184
cmb.a_ext_a = ext_other;
12185
cmb.a_ext_a_mode = GR_FUNC_MODE_X;
12186
cmb.a_ext_b = GR_CMBX_ZERO;
12187
cmb.a_ext_b_mode = GR_FUNC_MODE_ZERO;
12188
cmb.a_ext_d = GR_CMBX_ZERO;
12189
cmb.a_ext_d_invert = 0;
12190
break;
12191
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
12192
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
12193
cmb.a_ext_a = ext_other;
12194
cmb.a_ext_a_mode = GR_FUNC_MODE_X;
12195
cmb.a_ext_b = ext_local;
12196
cmb.a_ext_b_mode = GR_FUNC_MODE_ZERO;
12197
cmb.a_ext_d = GR_CMBX_B;
12198
cmb.a_ext_d_invert = 0;
12199
break;
12200
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
12201
cmb.a_ext_a = ext_other;
12202
cmb.a_ext_a_mode = GR_FUNC_MODE_X;
12203
cmb.a_ext_b = ext_local;
12204
cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12205
cmb.a_ext_d = GR_CMBX_ZERO;
12206
cmb.a_ext_d_invert = 0;
12207
break;
12208
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
12209
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
12210
cmb.a_ext_a = ext_other;
12211
cmb.a_ext_a_mode = GR_FUNC_MODE_X;
12212
cmb.a_ext_b = ext_local;
12213
cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12214
cmb.a_ext_d = GR_CMBX_B;
12215
cmb.a_ext_d_invert = 0;
12216
break;
12217
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
12218
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
12219
cmb.a_ext_a = GR_CMBX_ZERO;
12220
cmb.a_ext_a_mode = GR_FUNC_MODE_ZERO;
12221
cmb.a_ext_b = ext_local;
12222
cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12223
cmb.a_ext_d = GR_CMBX_B;
12224
cmb.a_ext_d_invert = 0;
12225
break;
12226
}
12227
}
12228
12229
void TexColorCombinerToExtension (GrChipID_t tmu)
12230
{
12231
DWORD tc_ext_a, tc_ext_a_mode, tc_ext_b, tc_ext_b_mode, tc_ext_c, tc_ext_d;
12232
BOOL tc_ext_c_invert, tc_ext_d_invert;
12233
DWORD tmu_func, tmu_fac;
12234
12235
if (tmu == GR_TMU0)
12236
{
12237
tmu_func = cmb.tmu0_func;
12238
tmu_fac = cmb.tmu0_fac;
12239
}
12240
else
12241
{
12242
tmu_func = cmb.tmu1_func;
12243
tmu_fac = cmb.tmu1_fac;
12244
}
12245
12246
switch (tmu_fac)
12247
{
12248
case GR_COMBINE_FACTOR_ZERO:
12249
tc_ext_c = GR_CMBX_ZERO;
12250
tc_ext_c_invert = 0;
12251
break;
12252
case GR_COMBINE_FACTOR_LOCAL:
12253
tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;
12254
tc_ext_c_invert = 0;
12255
break;
12256
case GR_COMBINE_FACTOR_LOCAL_ALPHA:
12257
tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12258
tc_ext_c_invert = 0;
12259
break;
12260
case GR_COMBINE_FACTOR_OTHER_ALPHA:
12261
tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
12262
tc_ext_c_invert = 0;
12263
break;
12264
case GR_COMBINE_FACTOR_DETAIL_FACTOR:
12265
tc_ext_c = GR_CMBX_DETAIL_FACTOR;
12266
tc_ext_c_invert = 0;
12267
break;
12268
case GR_COMBINE_FACTOR_ONE:
12269
tc_ext_c = GR_CMBX_ZERO;
12270
tc_ext_c_invert = 1;
12271
break;
12272
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
12273
tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;
12274
tc_ext_c_invert = 1;
12275
break;
12276
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
12277
tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12278
tc_ext_c_invert = 1;
12279
break;
12280
case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
12281
tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
12282
tc_ext_c_invert = 1;
12283
break;
12284
case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:
12285
tc_ext_c = GR_CMBX_DETAIL_FACTOR;
12286
tc_ext_c_invert = 1;
12287
break;
12288
default:
12289
tc_ext_c = 0;
12290
tc_ext_c_invert = 0;
12291
break;
12292
}
12293
12294
switch (tmu_func)
12295
{
12296
case GR_COMBINE_FUNCTION_ZERO:
12297
tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
12298
tc_ext_a_mode = GR_FUNC_MODE_ZERO;
12299
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
12300
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
12301
tc_ext_c = GR_CMBX_ZERO;
12302
tc_ext_c_invert = 0;
12303
tc_ext_d = GR_CMBX_ZERO;
12304
tc_ext_d_invert = 0;
12305
break;
12306
case GR_COMBINE_FUNCTION_LOCAL:
12307
tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
12308
tc_ext_a_mode = GR_FUNC_MODE_X;
12309
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
12310
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
12311
tc_ext_c = GR_CMBX_ZERO;
12312
tc_ext_c_invert = 1;
12313
tc_ext_d = GR_CMBX_ZERO;
12314
tc_ext_d_invert = 0;
12315
break;
12316
case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
12317
tc_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12318
tc_ext_a_mode = GR_FUNC_MODE_X;
12319
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
12320
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
12321
tc_ext_c = GR_CMBX_ZERO;
12322
tc_ext_c_invert = 1;
12323
tc_ext_d = GR_CMBX_ZERO;
12324
tc_ext_d_invert = 0;
12325
break;
12326
case GR_COMBINE_FUNCTION_SCALE_OTHER:
12327
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
12328
tc_ext_a_mode = GR_FUNC_MODE_X;
12329
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
12330
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
12331
tc_ext_d = GR_CMBX_ZERO;
12332
tc_ext_d_invert = 0;
12333
break;
12334
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
12335
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
12336
tc_ext_a_mode = GR_FUNC_MODE_X;
12337
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
12338
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
12339
tc_ext_d = GR_CMBX_B;
12340
tc_ext_d_invert = 0;
12341
break;
12342
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
12343
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
12344
tc_ext_a_mode = GR_FUNC_MODE_X;
12345
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12346
tc_ext_b_mode = GR_FUNC_MODE_ZERO;
12347
tc_ext_d = GR_CMBX_B;
12348
tc_ext_d_invert = 0;
12349
break;
12350
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
12351
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
12352
tc_ext_a_mode = GR_FUNC_MODE_X;
12353
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
12354
tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12355
tc_ext_d = GR_CMBX_ZERO;
12356
tc_ext_d_invert = 0;
12357
break;
12358
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
12359
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
12360
tc_ext_a_mode = GR_FUNC_MODE_X;
12361
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
12362
tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12363
tc_ext_d = GR_CMBX_B;
12364
tc_ext_d_invert = 0;
12365
break;
12366
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
12367
tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;
12368
tc_ext_a_mode = GR_FUNC_MODE_X;
12369
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
12370
tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12371
tc_ext_d = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12372
tc_ext_d_invert = 0;
12373
break;
12374
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
12375
tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
12376
tc_ext_a_mode = GR_FUNC_MODE_ZERO;
12377
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
12378
tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12379
tc_ext_d = GR_CMBX_B;
12380
tc_ext_d_invert = 0;
12381
break;
12382
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
12383
tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;
12384
tc_ext_a_mode = GR_FUNC_MODE_ZERO;
12385
tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;
12386
tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12387
tc_ext_d = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12388
tc_ext_d_invert = 0;
12389
break;
12390
default:
12391
tc_ext_a = 0;
12392
tc_ext_a_mode = 0;
12393
tc_ext_b = 0;
12394
tc_ext_b_mode = 0;
12395
tc_ext_d = 0;
12396
tc_ext_d_invert = 0;
12397
break;
12398
}
12399
12400
if (tmu == GR_TMU0)
12401
{
12402
cmb.t0c_ext_a = tc_ext_a;
12403
cmb.t0c_ext_a_mode = tc_ext_a_mode;
12404
cmb.t0c_ext_b = tc_ext_b;
12405
cmb.t0c_ext_b_mode = tc_ext_b_mode;
12406
cmb.t0c_ext_c = tc_ext_c;
12407
cmb.t0c_ext_c_invert = tc_ext_c_invert;
12408
cmb.t0c_ext_d = tc_ext_d;
12409
cmb.t0c_ext_d_invert = tc_ext_d_invert;
12410
}
12411
else
12412
{
12413
cmb.t1c_ext_a = tc_ext_a;
12414
cmb.t1c_ext_a_mode = tc_ext_a_mode;
12415
cmb.t1c_ext_b = tc_ext_b;
12416
cmb.t1c_ext_b_mode = tc_ext_b_mode;
12417
cmb.t1c_ext_c = tc_ext_c;
12418
cmb.t1c_ext_c_invert = tc_ext_c_invert;
12419
cmb.t1c_ext_d = tc_ext_d;
12420
cmb.t1c_ext_d_invert = tc_ext_d_invert;
12421
}
12422
}
12423
12424
void TexAlphaCombinerToExtension (GrChipID_t tmu)
12425
{
12426
DWORD ta_ext_a, ta_ext_a_mode, ta_ext_b, ta_ext_b_mode, ta_ext_c, ta_ext_d;
12427
BOOL ta_ext_c_invert, ta_ext_d_invert;
12428
DWORD tmu_a_func, tmu_a_fac;
12429
12430
if (tmu == GR_TMU0)
12431
{
12432
tmu_a_func = cmb.tmu0_a_func;
12433
tmu_a_fac = cmb.tmu0_a_fac;
12434
}
12435
else
12436
{
12437
tmu_a_func = cmb.tmu1_a_func;
12438
tmu_a_fac = cmb.tmu1_a_fac;
12439
}
12440
12441
switch (tmu_a_fac)
12442
{
12443
case GR_COMBINE_FACTOR_ZERO:
12444
ta_ext_c = GR_CMBX_ZERO;
12445
ta_ext_c_invert = 0;
12446
break;
12447
case GR_COMBINE_FACTOR_LOCAL:
12448
case GR_COMBINE_FACTOR_LOCAL_ALPHA:
12449
ta_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12450
ta_ext_c_invert = 0;
12451
break;
12452
case GR_COMBINE_FACTOR_OTHER_ALPHA:
12453
ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
12454
ta_ext_c_invert = 0;
12455
break;
12456
case GR_COMBINE_FACTOR_DETAIL_FACTOR:
12457
ta_ext_c = GR_CMBX_DETAIL_FACTOR;
12458
ta_ext_c_invert = 0;
12459
break;
12460
case GR_COMBINE_FACTOR_ONE:
12461
ta_ext_c = GR_CMBX_ZERO;
12462
ta_ext_c_invert = 1;
12463
break;
12464
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:
12465
case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:
12466
ta_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12467
ta_ext_c_invert = 1;
12468
break;
12469
case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:
12470
ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;
12471
ta_ext_c_invert = 1;
12472
break;
12473
case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:
12474
ta_ext_c = GR_CMBX_DETAIL_FACTOR;
12475
ta_ext_c_invert = 1;
12476
break;
12477
default:
12478
ta_ext_c = 0;
12479
ta_ext_c_invert = 0;
12480
break;
12481
}
12482
12483
switch (tmu_a_func)
12484
{
12485
case GR_COMBINE_FUNCTION_ZERO:
12486
ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12487
ta_ext_a_mode = GR_FUNC_MODE_ZERO;
12488
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12489
ta_ext_b_mode = GR_FUNC_MODE_ZERO;
12490
ta_ext_c = GR_CMBX_ZERO;
12491
ta_ext_c_invert = 0;
12492
ta_ext_d = GR_CMBX_ZERO;
12493
ta_ext_d_invert = 0;
12494
break;
12495
case GR_COMBINE_FUNCTION_LOCAL:
12496
case GR_COMBINE_FUNCTION_LOCAL_ALPHA:
12497
ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12498
ta_ext_a_mode = GR_FUNC_MODE_X;
12499
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12500
ta_ext_b_mode = GR_FUNC_MODE_ZERO;
12501
ta_ext_c = GR_CMBX_ZERO;
12502
ta_ext_c_invert = 1;
12503
ta_ext_d = GR_CMBX_ZERO;
12504
ta_ext_d_invert = 0;
12505
break;
12506
case GR_COMBINE_FUNCTION_SCALE_OTHER:
12507
ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
12508
ta_ext_a_mode = GR_FUNC_MODE_X;
12509
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12510
ta_ext_b_mode = GR_FUNC_MODE_ZERO;
12511
ta_ext_d = GR_CMBX_ZERO;
12512
ta_ext_d_invert = 0;
12513
break;
12514
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:
12515
case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:
12516
ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
12517
ta_ext_a_mode = GR_FUNC_MODE_X;
12518
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12519
ta_ext_b_mode = GR_FUNC_MODE_ZERO;
12520
ta_ext_d = GR_CMBX_B;
12521
ta_ext_d_invert = 0;
12522
break;
12523
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:
12524
ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
12525
ta_ext_a_mode = GR_FUNC_MODE_X;
12526
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12527
ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12528
ta_ext_d = GR_CMBX_ZERO;
12529
ta_ext_d_invert = 0;
12530
break;
12531
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
12532
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
12533
ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;
12534
ta_ext_a_mode = GR_FUNC_MODE_X;
12535
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12536
ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12537
ta_ext_d = GR_CMBX_B;
12538
ta_ext_d_invert = 0;
12539
break;
12540
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:
12541
case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:
12542
ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12543
ta_ext_a_mode = GR_FUNC_MODE_ZERO;
12544
ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;
12545
ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;
12546
ta_ext_d = GR_CMBX_B;
12547
ta_ext_d_invert = 0;
12548
break;
12549
default:
12550
ta_ext_a = 0;
12551
ta_ext_a_mode = 0;
12552
ta_ext_b = 0;
12553
ta_ext_b_mode = 0;
12554
ta_ext_d = 0;
12555
ta_ext_d_invert = 0;
12556
break;
12557
}
12558
12559
if (tmu == GR_TMU0)
12560
{
12561
cmb.t0a_ext_a = ta_ext_a;
12562
cmb.t0a_ext_a_mode = ta_ext_a_mode;
12563
cmb.t0a_ext_b = ta_ext_b;
12564
cmb.t0a_ext_b_mode = ta_ext_b_mode;
12565
cmb.t0a_ext_c = ta_ext_c;
12566
cmb.t0a_ext_c_invert = ta_ext_c_invert;
12567
cmb.t0a_ext_d = ta_ext_d;
12568
cmb.t0a_ext_d_invert = ta_ext_d_invert;
12569
}
12570
else
12571
{
12572
cmb.t1a_ext_a = ta_ext_a;
12573
cmb.t1a_ext_a_mode = ta_ext_a_mode;
12574
cmb.t1a_ext_b = ta_ext_b;
12575
cmb.t1a_ext_b_mode = ta_ext_b_mode;
12576
cmb.t1a_ext_c = ta_ext_c;
12577
cmb.t1a_ext_c_invert = ta_ext_c_invert;
12578
cmb.t1a_ext_d = ta_ext_d;
12579
cmb.t1a_ext_d_invert = ta_ext_d_invert;
12580
}
12581
}
12582
12583
12584