Path: blob/master/libmupen64plus/mupen64plus-video-glide64mk2/src/Glide64/Combine.cpp
2 views
/*1* Glide64 - Glide video plugin for Nintendo 64 emulators.2* Copyright (c) 2002 Dave20013* Copyright (c) 2003-2009 Sergey 'Gonetz' Lipski4*5* This program is free software; you can redistribute it and/or modify6* it under the terms of the GNU General Public License as published by7* the Free Software Foundation; either version 2 of the License, or8* any later version.9*10* This program is distributed in the hope that it will be useful,11* but WITHOUT ANY WARRANTY; without even the implied warranty of12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the13* GNU General Public License for more details.14*15* You should have received a copy of the GNU General Public License16* along with this program; if not, write to the Free Software17* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA18*/1920//****************************************************************21//22// Glide64 - Glide Plugin for Nintendo 64 emulators23// Project started on December 29th, 200124//25// Authors:26// Dave2001, original author, founded the project in 2001, left it in 200227// Gugaman, joined the project in 2002, left it in 200228// Sergey 'Gonetz' Lipski, joined the project in 2002, main author since fall of 200229// Hiroshi 'KoolSmoky' Morii, joined the project in 200730//31//****************************************************************32//33// To modify Glide64:34// * 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.35// * 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.36//37//****************************************************************3839#include "Gfx_1.3.h"40#include "Util.h"41#include "Combine.h"4243#define FASTSEARCH // Enable fast combine mode searching algorithm4445float percent_org, percent, r, g, b;46wxUint32 lod_frac;4748wxUint32 cc_lookup[257];49wxUint32 ac_lookup[257];50COMBINE cmb;5152//****************************************************************53// Macros54//****************************************************************5556#define MOD_0(mode) cmb.mod_0 = mode57#define MOD_0_COL(color) cmb.modcolor_0 = color58#define MOD_0_COL1(color) cmb.modcolor1_0 = color59#define MOD_0_COL2(color) cmb.modcolor2_0 = color60#define MOD_0_FAC(factor) cmb.modfactor_0 = factor61#define MOD_1(mode) cmb.mod_1 = mode62#define MOD_1_COL(color) cmb.modcolor_1 = color63#define MOD_1_COL1(color) cmb.modcolor1_1 = color64#define MOD_1_COL2(color) cmb.modcolor2_1 = color65#define MOD_1_FAC(factor) cmb.modfactor_1 = factor6667#define A_BLEND(f1,f2) cmb.abf1=f1,cmb.abf2=f26869// To make a color or alpha combine70#define CCMB(fnc,fac,loc,oth) \71cmb.c_fnc = fnc, \72cmb.c_fac = fac, \73cmb.c_loc = loc, \74cmb.c_oth = oth75#define ACMB(fnc,fac,loc,oth) \76cmb.a_fnc = fnc, \77cmb.a_fac = fac, \78cmb.a_loc = loc, \79cmb.a_oth = oth80#define CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \81cmb.c_ext_a = a, \82cmb.c_ext_a_mode = a_mode, \83cmb.c_ext_b = b, \84cmb.c_ext_b_mode = b_mode, \85cmb.c_ext_c = c, \86cmb.c_ext_c_invert = c_invert, \87cmb.c_ext_d= d, \88cmb.c_ext_d_invert = d_invert, \89cmb.cmb_ext_use |= COMBINE_EXT_COLOR90#define ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \91cmb.a_ext_a = a, \92cmb.a_ext_a_mode = a_mode, \93cmb.a_ext_b = b, \94cmb.a_ext_b_mode = b_mode, \95cmb.a_ext_c = c, \96cmb.a_ext_c_invert = c_invert, \97cmb.a_ext_d= d, \98cmb.a_ext_d_invert = d_invert, \99cmb.cmb_ext_use |= COMBINE_EXT_ALPHA100#define T0CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \101cmb.t0c_ext_a = a, \102cmb.t0c_ext_a_mode = a_mode, \103cmb.t0c_ext_b = b, \104cmb.t0c_ext_b_mode = b_mode, \105cmb.t0c_ext_c = c, \106cmb.t0c_ext_c_invert = c_invert, \107cmb.t0c_ext_d= d, \108cmb.t0c_ext_d_invert = d_invert, \109cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR110#define T0ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \111cmb.t0a_ext_a = a, \112cmb.t0a_ext_a_mode = a_mode, \113cmb.t0a_ext_b = b, \114cmb.t0a_ext_b_mode = b_mode, \115cmb.t0a_ext_c = c, \116cmb.t0a_ext_c_invert = c_invert, \117cmb.t0a_ext_d= d, \118cmb.t0a_ext_d_invert = d_invert, \119cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA120#define T1CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \121cmb.t1c_ext_a = a, \122cmb.t1c_ext_a_mode = a_mode, \123cmb.t1c_ext_b = b, \124cmb.t1c_ext_b_mode = b_mode, \125cmb.t1c_ext_c = c, \126cmb.t1c_ext_c_invert = c_invert, \127cmb.t1c_ext_d= d, \128cmb.t1c_ext_d_invert = d_invert, \129cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR130#define T1ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \131cmb.t1a_ext_a = a, \132cmb.t1a_ext_a_mode = a_mode, \133cmb.t1a_ext_b = b, \134cmb.t1a_ext_b_mode = b_mode, \135cmb.t1a_ext_c = c, \136cmb.t1a_ext_c_invert = c_invert, \137cmb.t1a_ext_d= d, \138cmb.t1a_ext_d_invert = d_invert, \139cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA140141// To use textures142#define USE_T0() \143rdp.best_tex = 0; \144cmb.tex |= 1, \145cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL146#define USE_T1() \147if (voodoo.num_tmu > 1) { \148rdp.best_tex = 1; \149cmb.tex |= 2, \150cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \151cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \152cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE; \153} \154else { \155USE_T0(); \156}157#define T0_ADD_T1() \158rdp.best_tex = 0; \159cmb.tex |= 3, \160cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \161cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \162cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE163#define T0_MUL_T1() \164rdp.best_tex = 0; \165cmb.tex |= 3, \166cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \167cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \168cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL169#define T0_MUL_T1_ADD_T0() \170rdp.best_tex = 0; \171cmb.tex |= 3, \172cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \173cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \174cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL175#define T0A_MUL_T1() \176rdp.best_tex = 1; \177cmb.tex |= 3, \178cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \179cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \180cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA181#define T0_MUL_T1A() \182rdp.best_tex = 1; \183cmb.tex |= 3, \184cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA, \185cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \186cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL187#define T0_INTER_T1_USING_FACTOR(factor) \188if (factor == 0xFF) { \189USE_T1(); \190} \191else if (factor == 0x00) { \192USE_T0(); \193}\194else {\195if (factor <= 0x80) rdp.best_tex = 0; \196else rdp.best_tex = 1; \197cmb.tex |= 3, \198cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \199cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \200cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \201percent = (float)factor / 255.0f, \202cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \203}204#define T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\205if (factor == 0xFF) { \206USE_T0(); \207} \208else if (factor == 0x00) { \209USE_T1(); \210}\211else {\212if (factor <= 0x80) rdp.best_tex = 0; \213else rdp.best_tex = 1; \214cmb.tex |= 3, \215cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \216cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \217cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \218percent = (255 - factor) / 255.0f, \219cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \220}221#define T0_INTER_T1_USING_T0() \222rdp.best_tex = 0; \223cmb.tex |= 3, \224cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \225cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \226cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL227#define T1_INTER_T0_USING_T0() \228rdp.best_tex = 0; \229cmb.tex |= 3, \230cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \231cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \232cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL233#define T0_INTER_T1_USING_T1() \234if (!cmb.combine_ext) { \235T0_INTER_T1_USING_FACTOR(0x7F); \236}\237else {\238rdp.best_tex = 0; \239cmb.tex |= 3, \240cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \241cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \242cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \243cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \244cmb.t1c_ext_c = GR_CMBX_ZERO, \245cmb.t1c_ext_c_invert = 0, \246cmb.t1c_ext_d= GR_CMBX_B, \247cmb.t1c_ext_d_invert = 0, \248cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \249cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \250cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \251cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \252cmb.t0c_ext_c = GR_CMBX_OTHER_TEXTURE_RGB, \253cmb.t0c_ext_c_invert = 0, \254cmb.t0c_ext_d= GR_CMBX_B, \255cmb.t0c_ext_d_invert = 0, \256cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \257}258#define T0_INTER_T1_USING_T1A() \259rdp.best_tex = 0; \260cmb.tex |= 3, \261cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \262cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \263cmb.tmu0_fac = GR_COMBINE_FACTOR_OTHER_ALPHA264#define T0_INTER_T1_USING_PRIM() \265if (!cmb.combine_ext) { \266T0_INTER_T1_USING_FACTOR ((rdp.prim_color&0xFF)); \267}\268else {\269rdp.best_tex = 0; \270cmb.tex |= 3, \271cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \272cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \273cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \274cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \275cmb.t1c_ext_c = GR_CMBX_ZERO, \276cmb.t1c_ext_c_invert = 0, \277cmb.t1c_ext_d= GR_CMBX_B, \278cmb.t1c_ext_d_invert = 0, \279cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \280cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \281cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \282cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \283cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \284cmb.t0c_ext_c_invert = 0, \285cmb.t0c_ext_d= GR_CMBX_B, \286cmb.t0c_ext_d_invert = 0, \287cmb.tex_ccolor = rdp.prim_color, \288cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \289}290#define T1_INTER_T0_USING_PRIM() /* inverse of above */\291if (!cmb.combine_ext) { \292T1_INTER_T0_USING_FACTOR ((rdp.prim_color&0xFF)); \293}\294else {\295rdp.best_tex = 0; \296cmb.tex |= 3, \297cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \298cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \299cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \300cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \301cmb.t1c_ext_c = GR_CMBX_ZERO, \302cmb.t1c_ext_c_invert = 0, \303cmb.t1c_ext_d= GR_CMBX_B, \304cmb.t1c_ext_d_invert = 0, \305cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \306cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \307cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \308cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \309cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \310cmb.t0c_ext_c_invert = 0, \311cmb.t0c_ext_d= GR_CMBX_B, \312cmb.t0c_ext_d_invert = 0, \313cmb.tex_ccolor = rdp.prim_color, \314cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \315}316#define T0_INTER_T1_USING_ENV() \317if (!cmb.combine_ext) { \318T0_INTER_T1_USING_FACTOR ((rdp.env_color&0xFF)); \319}\320else {\321rdp.best_tex = 0; \322cmb.tex |= 3, \323cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \324cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \325cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \326cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \327cmb.t1c_ext_c = GR_CMBX_ZERO, \328cmb.t1c_ext_c_invert = 0, \329cmb.t1c_ext_d= GR_CMBX_B, \330cmb.t1c_ext_d_invert = 0, \331cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \332cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \333cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \334cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \335cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \336cmb.t0c_ext_c_invert = 0, \337cmb.t0c_ext_d= GR_CMBX_B, \338cmb.t0c_ext_d_invert = 0, \339cmb.tex_ccolor = rdp.env_color, \340cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \341}342#define T1_INTER_T0_USING_ENV() /* inverse of above */\343if (!cmb.combine_ext) { \344T1_INTER_T0_USING_FACTOR ((rdp.env_color&0xFF)); \345}\346else {\347rdp.best_tex = 0; \348cmb.tex |= 3, \349cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \350cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \351cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \352cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \353cmb.t1c_ext_c = GR_CMBX_ZERO, \354cmb.t1c_ext_c_invert = 0, \355cmb.t1c_ext_d= GR_CMBX_B, \356cmb.t1c_ext_d_invert = 0, \357cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \358cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \359cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \360cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \361cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \362cmb.t0c_ext_c_invert = 0, \363cmb.t0c_ext_d= GR_CMBX_B, \364cmb.t0c_ext_d_invert = 0, \365cmb.tex_ccolor = rdp.env_color, \366cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \367}368#define T0_INTER_T1_USING_SHADEA() \369if (!cmb.combine_ext) { \370T0_INTER_T1_USING_FACTOR (0x7F); \371}\372else {\373rdp.best_tex = 0; \374cmb.tex |= 3, \375cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \376cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \377cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \378cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \379cmb.t1c_ext_c = GR_CMBX_ZERO, \380cmb.t1c_ext_c_invert = 0, \381cmb.t1c_ext_d= GR_CMBX_B, \382cmb.t1c_ext_d_invert = 0, \383cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \384cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \385cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \386cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \387cmb.t0c_ext_c = GR_CMBX_ITALPHA, \388cmb.t0c_ext_c_invert = 0, \389cmb.t0c_ext_d= GR_CMBX_B, \390cmb.t0c_ext_d_invert = 0, \391cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \392}393#define T1_INTER_T0_USING_SHADEA() \394if (!cmb.combine_ext) { \395T0_INTER_T1_USING_FACTOR (0x7F); \396}\397else {\398rdp.best_tex = 0; \399cmb.tex |= 3, \400cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \401cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \402cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \403cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \404cmb.t1c_ext_c = GR_CMBX_ZERO, \405cmb.t1c_ext_c_invert = 0, \406cmb.t1c_ext_d= GR_CMBX_B, \407cmb.t1c_ext_d_invert = 0, \408cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \409cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \410cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \411cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \412cmb.t0c_ext_c = GR_CMBX_ITALPHA, \413cmb.t0c_ext_c_invert = 0, \414cmb.t0c_ext_d= GR_CMBX_B, \415cmb.t0c_ext_d_invert = 0, \416cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \417}418#define T1_SUB_T0() \419rdp.best_tex = 0; \420cmb.tex |= 3, \421cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \422cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \423cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE424#define T1_SUB_T0_MUL_T0() \425rdp.best_tex = 0; \426cmb.tex |= 3, \427cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \428cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \429cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL430#define T1_MUL_PRIMLOD_ADD_T0() \431rdp.best_tex = 0; \432cmb.tex |= 3, \433cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \434cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \435cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \436percent = (float)(lod_frac) / 255.0f, \437cmb.dc0_detailmax = cmb.dc1_detailmax = percent438#define T1_MUL_PRIMA_ADD_T0() \439rdp.best_tex = 0; \440cmb.tex |= 3, \441cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \442cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \443cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \444percent = (float)(rdp.prim_color&0xFF) / 255.0f, \445cmb.dc0_detailmax = cmb.dc1_detailmax = percent446#define T1_MUL_ENVA_ADD_T0() \447rdp.best_tex = 0; \448cmb.tex |= 3, \449cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \450cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \451cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \452percent = (float)(rdp.env_color&0xFF) / 255.0f, \453cmb.dc0_detailmax = cmb.dc1_detailmax = percent454#define T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1() \455T0_ADD_T1 (); \456MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC); \457MOD_0_COL (rdp.prim_color & 0xFFFFFF00); \458MOD_0_FAC (lod_frac & 0xFF);459#define T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0() \460if (cmb.combine_ext) \461{ \462T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X, \463GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X, \464GR_CMBX_DETAIL_FACTOR, 0, \465GR_CMBX_ZERO, 0); \466T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X, \467GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X, \468GR_CMBX_ZERO, 1, \469GR_CMBX_ZERO, 0); \470cmb.tex_ccolor = rdp.prim_color; \471cmb.tex |= 3; \472percent = (float)(lod_frac) / 255.0f; \473cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \474} \475else \476{ \477T0_ADD_T1 (); \478MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC); \479MOD_1_COL (rdp.prim_color & 0xFFFFFF00); \480MOD_1_FAC (lod_frac & 0xFF); \481}482#define PRIM_INTER_T0_USING_SHADEA() \483if (!cmb.combine_ext) { \484USE_T0 (); \485}\486else {\487rdp.best_tex = 0; \488cmb.tex |= 1, \489cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \490cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \491cmb.t0c_ext_b = GR_CMBX_TMU_CCOLOR, \492cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \493cmb.t0c_ext_c = GR_CMBX_ITALPHA, \494cmb.t0c_ext_c_invert = 0, \495cmb.t0c_ext_d= GR_CMBX_B, \496cmb.t0c_ext_d_invert = 0, \497cmb.tex_ccolor = rdp.prim_color, \498cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \499}500501#define A_USE_T0() \502cmb.tex |= 1, \503cmb.tmu0_a_func = GR_COMBINE_FUNCTION_LOCAL504#define A_USE_T1() \505if (voodoo.num_tmu > 1) { \506cmb.tex |= 2, \507cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \508cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \509cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE; \510} \511else { \512A_USE_T0(); \513}514#define A_T0_ADD_T1() \515cmb.tex |= 3, \516cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \517cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \518cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE519#define A_T1_SUB_T0() \520cmb.tex |= 3, \521cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \522cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \523cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE524#define A_T0_SUB_T1() \525cmb.tex |= 3, \526cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \527cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL, \528cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA529#define A_T0_MUL_T1() \530cmb.tex |= 3, \531cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \532cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \533cmb.tmu0_a_fac = GR_COMBINE_FACTOR_LOCAL534#define A_T0_INTER_T1_USING_T0A() \535rdp.best_tex = 0; \536cmb.tex |= 3, \537cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \538cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \539cmb.tmu0_a_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA540#define A_T1_INTER_T0_USING_T0A() \541rdp.best_tex = 0; \542cmb.tex |= 3, \543cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \544cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \545cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA546#define A_T0_INTER_T1_USING_T1A() \547rdp.best_tex = 0; \548cmb.tex |= 3, \549cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \550cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \551cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA552#define A_T0_INTER_T1_USING_FACTOR(factor) \553if (factor == 0xFF) { \554A_USE_T1(); \555} \556else if (factor == 0x00) { \557A_USE_T0(); \558}\559else { \560cmb.tex |= 3, \561cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \562cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \563cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \564percent = (float)factor / 255.0f, \565cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \566}567#define A_T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\568if (factor == 0xFF) { \569A_USE_T0(); \570} \571else if (factor == 0x00) { \572A_USE_T1(); \573}\574else { \575cmb.tex |= 3, \576cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \577cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \578cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \579percent = (255 - factor) / 255.0f, \580cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \581}582#define A_T0_INTER_T1_USING_SHADEA() \583if (!cmb.combine_ext) { \584A_T0_INTER_T1_USING_FACTOR (0x7F); \585}\586else {\587rdp.best_tex = 0; \588cmb.tex |= 3, \589cmb.t1a_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA, \590cmb.t1a_ext_a_mode = GR_FUNC_MODE_ZERO, \591cmb.t1a_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA, \592cmb.t1a_ext_b_mode = GR_FUNC_MODE_ZERO, \593cmb.t1a_ext_c = GR_CMBX_ZERO, \594cmb.t1a_ext_c_invert = 0, \595cmb.t1a_ext_d= GR_CMBX_B, \596cmb.t1a_ext_d_invert = 0, \597cmb.t0a_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA, \598cmb.t0a_ext_a_mode = GR_FUNC_MODE_X, \599cmb.t0a_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA, \600cmb.t0a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \601cmb.t0a_ext_c = GR_CMBX_ITALPHA, \602cmb.t0a_ext_c_invert = 0, \603cmb.t0a_ext_d= GR_CMBX_B, \604cmb.t0a_ext_d_invert = 0, \605cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA; \606}607#define A_T1_MUL_PRIMLOD_ADD_T0() \608rdp.best_tex = 0; \609cmb.tex |= 3, \610cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \611cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \612cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \613percent = (float)(lod_frac) / 255.0f, \614cmb.dc0_detailmax = cmb.dc1_detailmax = percent615#define A_T1_MUL_PRIMA_ADD_T0() \616rdp.best_tex = 0; \617cmb.tex |= 3, \618cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \619cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \620cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \621percent = (float)(rdp.prim_color&0xFF) / 255.0f, \622cmb.dc0_detailmax = cmb.dc1_detailmax = percent623#define A_T1_MUL_ENVA_ADD_T0() \624rdp.best_tex = 0; \625cmb.tex |= 3, \626cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \627cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \628cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \629percent = (float)(rdp.env_color&0xFF) / 255.0f, \630cmb.dc0_detailmax = cmb.dc1_detailmax = percent631632633// UNIMP - writes to the unimplemented log, if it's enabled634#ifdef UNIMP_LOG635#define UNIMPMODE() { \636std::ofstream unimp; \637unimp.open("unimp.txt", std::ios::app); \638unimp << out_buf; \639unimp.close(); \640}641#else642#define UNIMPMODE()643#endif644645// Bright red, sets up a bright red combine646#ifdef BRIGHT_RED647// Bright red, sets up a bright red combine during the alpha stage648#define BrightRed() { \649CCMB (GR_COMBINE_FUNCTION_LOCAL, \650GR_COMBINE_FACTOR_NONE, \651GR_COMBINE_LOCAL_CONSTANT, \652GR_COMBINE_OTHER_NONE); \653ACMB (GR_COMBINE_FUNCTION_LOCAL, \654GR_COMBINE_FACTOR_NONE, \655GR_COMBINE_LOCAL_CONSTANT, \656GR_COMBINE_OTHER_NONE); \657cmb.ccolor = 0xFF0000FF; \658}659#else660#define BrightRed()661#endif662663#define CC(color) cmb.ccolor=(color)&0xFFFFFF00664#define CC_BYTE(byte) { cmb.ccolor=(byte<<8)|(byte<<16)|(byte<<24); }665#define CC_C1MULC2(color1, color2) { \666cmb.ccolor=(wxUint8)( ((color1 & 0xFF000000) >> 24) * (((color2 & 0xFF000000) >> 24) /255.0f) ) << 24 | \667(wxUint8)( ((color1 & 0x00FF0000) >> 16) * (((color2 & 0x00FF0000) >> 16) /255.0f) ) << 16 | \668(wxUint8)( ((color1 & 0x0000FF00) >> 8) * (((color2 & 0x0000FF00) >> 8) /255.0f) ) << 8 ; \669}670#define CC_C1SUBC2(color1, color2) { \671cmb.ccolor=(wxUint8)( max(0, (int)((color1 & 0xFF000000) >> 24) - (int)((color2 & 0xFF000000) >> 24)) ) << 24 | \672(wxUint8)( max(0, (int)((color1 & 0x00FF0000) >> 16) - (int)((color2 & 0x00FF0000) >> 16)) ) << 16 | \673(wxUint8)( max(0, (int)((color1 & 0x0000FF00) >> 8) - (int)((color2 & 0x0000FF00) >> 8)) ) << 8 ; \674}675#define CC_COLMULBYTE(color, byte) { \676float factor = byte/255.0f; \677cmb.ccolor = (wxUint8)( ((color & 0xFF000000) >> 24) * factor ) << 24 | \678(wxUint8)( ((color & 0x00FF0000) >> 16) * factor ) << 16 | \679(wxUint8)( ((color & 0x0000FF00) >> 8) * factor ) << 8 ; \680}681#define CC_PRIM() CC(rdp.prim_color)682#define CC_ENV() CC(rdp.env_color)683#define CC_1SUBPRIM() CC((~rdp.prim_color))684#define CC_1SUBENV() CC((~rdp.env_color))685#define CC_PRIMA() CC_BYTE((rdp.prim_color&0xFF))686#define CC_ENVA() CC_BYTE((rdp.env_color&0xFF))687#define CC_1SUBPRIMA() CC_BYTE(((~rdp.prim_color)&0xFF))688#define CC_1SUBENVA() CC_BYTE(((~rdp.env_color)&0xFF))689#define CC_PRIMLOD() CC_BYTE(rdp.prim_lodfrac)690#define CC_K5() CC_BYTE(rdp.K5)691#define CC_PRIMMULENV() CC_C1MULC2(rdp.prim_color, rdp.env_color)692#define CC_PRIMSUBENV() CC_C1SUBC2(rdp.prim_color, rdp.env_color)693694#define XSHADE(color, flag) { \695rdp.col[0] *= (float)((color & 0xFF000000) >> 24) / 255.0f; \696rdp.col[1] *= (float)((color & 0x00FF0000) >> 16) / 255.0f; \697rdp.col[2] *= (float)((color & 0x0000FF00) >> 8) / 255.0f; \698rdp.cmb_flags |= flag; \699}700#define XSHADE1M(color, flag) { \701rdp.col[0] *= 1.0f-((float)((color & 0xFF000000) >> 24)/255.0f); \702rdp.col[1] *= 1.0f-((float)((color & 0x00FF0000) >> 16)/255.0f); \703rdp.col[2] *= 1.0f-((float)((color & 0x0000FF00) >> 8)/255.0f); \704rdp.cmb_flags |= flag; \705}706#define XSHADEC1MC2(color1, color2, flag) { \707rdp.col[0] *= (float)( max(0, (int)((color1 & 0xFF000000) >> 24) - (int)((color2 & 0xFF000000) >> 24)) )/255.0f; \708rdp.col[1] *= (float)( max(0, (int)((color1 & 0x00FF0000) >> 16) - (int)((color2 & 0x00FF0000) >> 16)) )/255.0f; \709rdp.col[2] *= (float)( max(0, (int)((color1 & 0x0000FF00) >> 8) - (int)((color2 & 0x0000FF00) >> 8)) )/255.0f; \710rdp.cmb_flags |= flag; \711}712#define XSHADE_BYTE(byte, flag) { \713float tmpcol = (float)byte / 255.0f; \714rdp.col[0] *= tmpcol; \715rdp.col[1] *= tmpcol; \716rdp.col[2] *= tmpcol; \717rdp.cmb_flags |= flag; \718}719#define MULSHADE(color) XSHADE(color, CMB_MULT)720#define MULSHADE_PRIM() MULSHADE(rdp.prim_color)721#define MULSHADE_ENV() MULSHADE(rdp.env_color)722#define MULSHADE_1MPRIM() XSHADE1M(rdp.prim_color, CMB_MULT)723#define MULSHADE_1MENV() XSHADE1M(rdp.env_color, CMB_MULT)724#define MULSHADE_PRIMSUBENV() XSHADEC1MC2(rdp.prim_color, rdp.env_color, CMB_MULT)725#define MULSHADE_ENVSUBPRIM() XSHADEC1MC2(rdp.env_color, rdp.prim_color, CMB_MULT)726#define MULSHADE_BYTE(byte) XSHADE_BYTE(byte, CMB_MULT)727#define MULSHADE_PRIMA() MULSHADE_BYTE((rdp.prim_color & 0xFF))728#define MULSHADE_ENVA() MULSHADE_BYTE((rdp.env_color & 0xFF))729#define MULSHADE_1MENVA() MULSHADE_BYTE(((~rdp.env_color) & 0xFF))730#define MULSHADE_PRIMLOD() MULSHADE_BYTE((rdp.prim_lodfrac & 0xFF))731#define MULSHADE_K5() MULSHADE_BYTE(rdp.K5)732733#define SETSHADE(color) XSHADE(color, CMB_SET)734#define SETSHADE_PRIM() SETSHADE(rdp.prim_color)735#define SETSHADE_ENV() SETSHADE(rdp.env_color)736#define SETSHADE_BYTE(byte) XSHADE_BYTE(byte, CMB_SET)737#define SETSHADE_PRIMA() SETSHADE_BYTE((rdp.prim_color & 0xFF))738#define SETSHADE_ENVA() SETSHADE_BYTE((rdp.env_color & 0xFF))739#define SETSHADE_1MPRIMA() SETSHADE_BYTE(((~rdp.prim_color) & 0xFF))740#define SETSHADE_PRIMLOD() SETSHADE_BYTE((rdp.prim_lodfrac & 0xFF))741#define SETSHADE_1MPRIMLOD() SETSHADE_BYTE(((~rdp.prim_lodfrac) & 0xFF))742743#define SETSHADE_1MPRIM() XSHADE1M(rdp.prim_color, CMB_SET)744#define SETSHADE_1MENV() XSHADE1M(rdp.env_color, CMB_SET)745#define SETSHADE_PRIMSUBENV() XSHADEC1MC2(rdp.prim_color, rdp.env_color, CMB_SET)746#define SETSHADE_ENVSUBPRIM() XSHADEC1MC2(rdp.env_color, rdp.prim_color, CMB_SET)747#define SETSHADE_SHADE_A() { \748rdp.cmb_flags = CMB_SETSHADE_SHADEALPHA; \749}750751#define XSHADEADD(color, flag) { \752rdp.coladd[0] *= (float)((color & 0xFF000000) >> 24) / 255.0f; \753rdp.coladd[1] *= (float)((color & 0x00FF0000) >> 16) / 255.0f; \754rdp.coladd[2] *= (float)((color & 0x0000FF00) >> 8) / 255.0f; \755rdp.cmb_flags |= flag; \756}757#define XSHADEC1MC2ADD(color1, color2, flag) { \758rdp.coladd[0] *= (float)( max(0, (int)((color1 & 0xFF000000) >> 24) - (int)((color2 & 0xFF000000) >> 24)) )/255.0f; \759rdp.coladd[1] *= (float)( max(0, (int)((color1 & 0x00FF0000) >> 16) - (int)((color2 & 0x00FF0000) >> 16)) )/255.0f; \760rdp.coladd[2] *= (float)( max(0, (int)((color1 & 0x0000FF00) >> 8) - (int)((color2 & 0x0000FF00) >> 8)) )/255.0f; \761rdp.cmb_flags |= flag; \762}763#define SUBSHADE_PRIM() XSHADEADD(rdp.prim_color, CMB_SUB)764#define SUBSHADE_ENV() XSHADEADD(rdp.env_color, CMB_SUB)765#define SUBSHADE_PRIMSUBENV() XSHADEC1MC2ADD(rdp.prim_color, rdp.env_color, CMB_SUB)766#define ADDSHADE_PRIM() XSHADEADD(rdp.prim_color, CMB_ADD)767#define ADDSHADE_ENV() XSHADEADD(rdp.env_color, CMB_ADD)768#define ADDSHADE_PRIMSUBENV() XSHADEC1MC2ADD(rdp.prim_color, rdp.env_color, CMB_ADD)769#define SUBSHADE_PRIMMULENV() { \770rdp.coladd[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) * ((rdp.env_color & 0xFF000000) >> 24) )/255.0f/255.0f; \771rdp.coladd[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) * ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f/255.0f; \772rdp.coladd[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) * ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f/255.0f; \773rdp.cmb_flags |= CMB_SUB; \774}775776#define COLSUBSHADE_PRIM() { \777rdp.coladd[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \778rdp.coladd[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \779rdp.coladd[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \780rdp.cmb_flags |= CMB_COL_SUB_OWN; \781}782783#define INTERSHADE_2(color,factor) { \784rdp.col_2[0] = (((color) >> 24) & 0xFF) / 255.0f; \785rdp.col_2[1] = (((color) >> 16) & 0xFF) / 255.0f; \786rdp.col_2[2] = (((color) >> 8) & 0xFF) / 255.0f; \787rdp.shade_factor = (factor) / 255.0f; \788rdp.cmb_flags_2 = CMB_INTER; \789}790791#define MULSHADE_SHADEA() rdp.cmb_flags |= CMB_MULT_OWN_ALPHA;792793#define CA(color) cmb.ccolor|=(color)&0xFF794#define CA_PRIM() CA(rdp.prim_color)795#define CA_ENV() CA(rdp.env_color)796#define CA_INVPRIM() cmb.ccolor|=0xFF-(rdp.prim_color&0xFF)797#define CA_INVENV() cmb.ccolor|=0xFF-(rdp.env_color&0xFF)798#define CA_ENV1MPRIM() cmb.ccolor|= (wxUint32)(((rdp.env_color&0xFF)/255.0f) * (((~(rdp.prim_color&0xFF)) & 0xff)/255.0f) * 255.0f);799#define CA_PRIMENV() cmb.ccolor |= (wxUint32)(((rdp.env_color&0xFF)/255.0f) * ((rdp.prim_color&0xFF)/255.0f) * 255.0f);800#define CA_PRIMLOD() cmb.ccolor |= rdp.prim_lodfrac;801#define CA_PRIM_MUL_PRIMLOD() cmb.ccolor |= (int)(((rdp.prim_color&0xFF) * rdp.prim_lodfrac) / 255.0f);802#define CA_ENV_MUL_PRIMLOD() cmb.ccolor |= (int)(((rdp.env_color&0xFF) * rdp.prim_lodfrac) / 255.0f);803804#define XSHADE_A(color, flag) { \805rdp.col[3] *= (float)(color & 0xFF) / 255.0f; \806rdp.cmb_flags |= flag; \807}808#define XSHADE1M_A(color, flag) { \809rdp.col[3] *= 1.0f-((float)(color & 0xFF) / 255.0f); \810rdp.cmb_flags |= flag; \811}812#define XSHADEC1MC2_A(color1, color2, flag) { \813rdp.col[3] *= (float)( max(0, (int)(color1 & 0xFF) - (int)(color2 & 0xFF)) ) / 255.0f; \814rdp.cmb_flags |= flag; \815}816#define MULSHADE_A_PRIM() XSHADE_A(rdp.prim_color, CMB_A_MULT)817#define MULSHADE_A_1MPRIM() XSHADE1M_A(rdp.prim_color, CMB_A_MULT)818#define MULSHADE_A_ENV() XSHADE_A(rdp.env_color, CMB_A_MULT)819#define MULSHADE_A_PRIMSUBENV() XSHADEC1MC2_A(rdp.prim_color, rdp.env_color, CMB_A_MULT)820#define MULSHADE_A_ENVSUBPRIM() XSHADEC1MC2_A(rdp.env_color, rdp.prim_color, CMB_A_MULT)821#define SETSHADE_A(color) XSHADE_A(color, CMB_A_SET)822#define SETSHADE_A_PRIM() SETSHADE_A(rdp.prim_color)823#define SETSHADE_A_ENV() SETSHADE_A(rdp.env_color)824#define SETSHADE_A_PRIMSUBENV() XSHADEC1MC2_A(rdp.prim_color, rdp.env_color, CMB_A_SET)825#define SETSHADE_A_INVENV() XSHADE1M_A(rdp.env_color, CMB_A_SET)826827#define XSHADEADD_A(color, flag) { \828rdp.coladd[3] *= (float)(color & 0xFF) / 255.0f; \829rdp.cmb_flags |= flag; \830}831#define SUBSHADE_A_PRIM() XSHADEADD_A(rdp.prim_color, CMB_A_SUB)832#define SUBSHADE_A_ENV() XSHADEADD_A(rdp.env_color, CMB_A_SUB)833#define ADDSHADE_A_PRIM() XSHADEADD_A(rdp.prim_color, CMB_A_ADD)834#define ADDSHADE_A_ENV() XSHADEADD_A(rdp.env_color, CMB_A_ADD)835836//****************************************************************837// Combine Functions838//****************************************************************839840// These are in a somewhat ordered way, using the A constants below. T0 comes before841// T1 comes before PRIM, ... except for CMB, which always comes at the end, where842// the CMB comes first in the name. T0 and T1 are always interleaved, because they use the843// same function.844// Keep going in alphabetical order, but do not break the order of variables!845// ex: A*C + B*C -> T0_MUL_PRIM_ADD_ENV_MUL_PRIM,846// Although prim comes before env, we have already used prim as C, so it must stay as C847// and would NOT become T0_MUL_PRIM_ADD_PRIM_MUL_ENV848//849// New version ordered by:850// t0851// prim852// env853// shade854855static void cc_one ()856{857CCMB (GR_COMBINE_FUNCTION_LOCAL,858GR_COMBINE_FACTOR_NONE,859GR_COMBINE_LOCAL_CONSTANT,860GR_COMBINE_OTHER_NONE);861// CC (0xFFFFFF00);862CC (0xFFFFFF00);863}864865static void cc_zero ()866{867CCMB (GR_COMBINE_FUNCTION_LOCAL,868GR_COMBINE_FACTOR_NONE,869GR_COMBINE_LOCAL_CONSTANT,870GR_COMBINE_OTHER_NONE);871CC (0x00000000);872}873874static void cc_t0 ()875{876if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))877{878wxUint32 blend_mode = (rdp.othermode_l >> 16);879if (blend_mode == 0xa500)880{881CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,882GR_COMBINE_FACTOR_ONE,883GR_COMBINE_LOCAL_CONSTANT,884GR_COMBINE_OTHER_TEXTURE);885float fog = (rdp.fog_color&0xFF)/255.0f;886wxUint32 R = (wxUint32)(((rdp.blend_color>>24)&0xFF)*fog);887wxUint32 G = (wxUint32)(((rdp.blend_color>>16)&0xFF)*fog);888wxUint32 B = (wxUint32)(((rdp.blend_color>> 8)&0xFF)*fog);889CC((R<<24)|(G<<16)|(B<<8));890}891else if (blend_mode == 0x55f0) //cmem*afog + cfog*1ma892{893CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,894GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA,895GR_COMBINE_LOCAL_NONE,896GR_COMBINE_OTHER_CONSTANT);897CC(rdp.fog_color);898A_USE_T0 ();899}900else901{902CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,903GR_COMBINE_FACTOR_ONE,904GR_COMBINE_LOCAL_NONE,905GR_COMBINE_OTHER_TEXTURE);906}907}908else909{910CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,911GR_COMBINE_FACTOR_ONE,912GR_COMBINE_LOCAL_NONE,913GR_COMBINE_OTHER_TEXTURE);914}915USE_T0 ();916}917918static void cc_t0a ()919{920CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,921GR_COMBINE_FACTOR_TEXTURE_ALPHA,922GR_COMBINE_LOCAL_NONE,923GR_COMBINE_OTHER_CONSTANT);924USE_T0 ();925A_USE_T0 ();926CC (0xFFFFFF00);927}928929static void cc_t1 () //Added by Gonetz930{931CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,932GR_COMBINE_FACTOR_ONE,933GR_COMBINE_LOCAL_NONE,934GR_COMBINE_OTHER_TEXTURE);935USE_T1 ();936}937938static void cc_t0_mul_t1 ()939{940CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,941GR_COMBINE_FACTOR_ONE,942GR_COMBINE_LOCAL_NONE,943GR_COMBINE_OTHER_TEXTURE);944T0_MUL_T1 ();945}946947static void cc_t0_mul_t1_add_t0 () //Added by Gonetz948{949CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,950GR_COMBINE_FACTOR_ONE,951GR_COMBINE_LOCAL_NONE,952GR_COMBINE_OTHER_TEXTURE);953T0_MUL_T1_ADD_T0 ();954}955956/*957static void cc_t1_inter__env_inter_t0_using_k5__using_t1a ()958{959CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,960GR_COMBINE_FACTOR_ONE,961GR_COMBINE_LOCAL_NONE,962GR_COMBINE_OTHER_TEXTURE);963wxUint32 col1 = (rdp.K5<<24) | (rdp.K5<<16) | (rdp.K5<<8);964MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);965MOD_0_COL (rdp.env_color & 0xFFFFFF00);966MOD_0_COL1 (col1 & 0xFFFFFF00);967rdp.best_tex = 0;968cmb.tex |= 3;969cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;970cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL;971cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND;972cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA;973}974*/975976static void cc_t1_inter_t0_using_env ()977{978CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,979GR_COMBINE_FACTOR_ONE,980GR_COMBINE_LOCAL_NONE,981GR_COMBINE_OTHER_TEXTURE);982T1_INTER_T0_USING_ENV ();983}984985static void cc_prim ()986{987CCMB (GR_COMBINE_FUNCTION_LOCAL,988GR_COMBINE_FACTOR_NONE,989GR_COMBINE_LOCAL_CONSTANT,990GR_COMBINE_OTHER_NONE);991CC_PRIM ();992}993994static void cc_env ()995{996CCMB (GR_COMBINE_FUNCTION_LOCAL,997GR_COMBINE_FACTOR_NONE,998GR_COMBINE_LOCAL_CONSTANT,999GR_COMBINE_OTHER_NONE);1000CC_ENV ();1001}10021003static void cc_scale ()1004{1005CCMB (GR_COMBINE_FUNCTION_LOCAL,1006GR_COMBINE_FACTOR_NONE,1007GR_COMBINE_LOCAL_CONSTANT,1008GR_COMBINE_OTHER_NONE);1009CC (rdp.SCALE);1010}10111012static void cc_shade ()1013{1014CCMB (GR_COMBINE_FUNCTION_LOCAL,1015GR_COMBINE_FACTOR_NONE,1016GR_COMBINE_LOCAL_ITERATED,1017GR_COMBINE_OTHER_NONE);1018}10191020static void cc_one_mul_shade ()1021{1022if ((settings.hacks&hack_Knockout) && (rdp.aTBuffTex[0] || rdp.aTBuffTex[1] || rdp.cur_image)) //hack for boxer shadow1023{1024CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1025GR_COMBINE_FACTOR_LOCAL,1026GR_COMBINE_LOCAL_CONSTANT,1027GR_COMBINE_OTHER_TEXTURE);1028CC (0x20202000);1029USE_T0 ();1030}1031else1032{1033cc_shade ();1034}1035}10361037static void cc_shadea ()1038{1039CCMB (GR_COMBINE_FUNCTION_LOCAL_ALPHA,1040GR_COMBINE_FACTOR_NONE,1041GR_COMBINE_LOCAL_ITERATED,1042GR_COMBINE_OTHER_NONE);1043}10441045static void cc_t0_mul_prim ()1046{1047CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1048GR_COMBINE_FACTOR_LOCAL,1049GR_COMBINE_LOCAL_CONSTANT,1050GR_COMBINE_OTHER_TEXTURE);1051CC_PRIM ();1052USE_T0 ();1053}10541055static void cc_t0_mul_prima ()1056{1057CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1058GR_COMBINE_FACTOR_LOCAL,1059GR_COMBINE_LOCAL_CONSTANT,1060GR_COMBINE_OTHER_TEXTURE);1061CC_PRIMA ();1062USE_T0 ();1063}10641065static void cc_t1_mul_prim ()1066{1067CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1068GR_COMBINE_FACTOR_LOCAL,1069GR_COMBINE_LOCAL_CONSTANT,1070GR_COMBINE_OTHER_TEXTURE);1071CC_PRIM ();1072if ((rdp.cycle1 & 0xFFFF) == (rdp.cycle2 & 0xFFFF)) // 1 cycle, use t01073{1074USE_T0 ();1075}1076else1077{1078USE_T1 ();1079}1080}10811082static void cc_t0a_mul_prim ()1083{1084CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1085GR_COMBINE_FACTOR_TEXTURE_ALPHA,1086GR_COMBINE_LOCAL_NONE,1087GR_COMBINE_OTHER_CONSTANT);1088CC_PRIM ();1089A_USE_T0 ();1090}10911092//Added by Gonetz1093static void cc__t1_inter_t0_using_enva__mul_prim ()1094{1095CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1096GR_COMBINE_FACTOR_LOCAL,1097GR_COMBINE_LOCAL_CONSTANT,1098GR_COMBINE_OTHER_TEXTURE);1099CC_PRIM ();1100wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);1101T1_INTER_T0_USING_FACTOR (factor);1102}11031104static void cc__t0_inter_one_using_t1__mul_prim ()1105{1106CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1107GR_COMBINE_FACTOR_LOCAL,1108GR_COMBINE_LOCAL_CONSTANT,1109GR_COMBINE_OTHER_TEXTURE);1110CC_PRIM ();1111rdp.best_tex = 0;1112cmb.tex |= 3;1113cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;1114cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;1115cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL;1116}11171118static void cc__t0_inter_one_using_primlod__mul_prim ()1119{1120CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1121GR_COMBINE_FACTOR_LOCAL,1122GR_COMBINE_LOCAL_CONSTANT,1123GR_COMBINE_OTHER_TEXTURE);1124CC_PRIM ();1125if (cmb.combine_ext)1126{1127T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1128GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,1129GR_CMBX_DETAIL_FACTOR, 0,1130GR_CMBX_B, 0);1131cmb.tex |= 1;1132percent = (float)lod_frac / 255.0f;1133cmb.dc0_detailmax = cmb.dc1_detailmax = percent;1134}1135else1136{1137MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);1138MOD_0_COL (0xFFFFFF00);1139MOD_0_FAC (lod_frac);1140USE_T0 ();1141}1142}11431144static void cc__t1_inter_one_using_env__mul_prim ()1145{1146CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1147GR_COMBINE_FACTOR_LOCAL,1148GR_COMBINE_LOCAL_CONSTANT,1149GR_COMBINE_OTHER_TEXTURE);1150CC_PRIM ();1151if (cmb.combine_ext)1152{1153T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,1154GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1155GR_CMBX_LOCAL_TEXTURE_RGB, 1,1156GR_CMBX_B, 0);1157T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1158GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1159GR_CMBX_ZERO, 1,1160GR_CMBX_ZERO, 0);1161cmb.tex |= 2;1162cmb.tex_ccolor = rdp.env_color;1163}1164else1165{1166USE_T1 ();1167}1168}11691170static void cc__t1_inter_one_using_enva__mul_t0 ()1171{1172CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1173GR_COMBINE_FACTOR_ONE,1174GR_COMBINE_LOCAL_NONE,1175GR_COMBINE_OTHER_TEXTURE);1176if (cmb.combine_ext)1177{1178T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,1179GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1180GR_CMBX_TMU_CALPHA, 0,1181GR_CMBX_B, 0);1182T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1183GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1184GR_CMBX_LOCAL_TEXTURE_RGB, 0,1185GR_CMBX_ZERO, 0);1186cmb.tex |= 3;1187cmb.tex_ccolor = 0xFFFFFF00 | (rdp.env_color&0xFF);1188}1189else1190{1191if ((rdp.env_color&0xFF) == 0xFF)1192{1193USE_T0 ();1194}1195else1196{1197T0_MUL_T1 ();1198}1199}1200}12011202//Added by Gonetz1203static void cc_prim_mul_prim ()1204{1205CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1206GR_COMBINE_FACTOR_LOCAL,1207GR_COMBINE_LOCAL_ITERATED,1208GR_COMBINE_OTHER_CONSTANT);1209CC_PRIM ();1210SETSHADE_PRIM ();1211}12121213static void cc_prim_mul_prima ()1214{1215CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1216GR_COMBINE_FACTOR_LOCAL,1217GR_COMBINE_LOCAL_CONSTANT,1218GR_COMBINE_OTHER_ITERATED);1219CC_PRIM ();1220SETSHADE_PRIMA ();1221}12221223static void cc_t1_mul_prima ()1224{1225CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1226GR_COMBINE_FACTOR_LOCAL,1227GR_COMBINE_LOCAL_CONSTANT,1228GR_COMBINE_OTHER_TEXTURE);1229CC_PRIMA ();1230USE_T1 ();1231}12321233static void cc_t1_mul_enva ()1234{1235CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1236GR_COMBINE_FACTOR_LOCAL,1237GR_COMBINE_LOCAL_CONSTANT,1238GR_COMBINE_OTHER_TEXTURE);1239CC_ENVA ();1240USE_T1 ();1241}12421243static void cc_t0_mul_env ()1244{1245CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1246GR_COMBINE_FACTOR_LOCAL,1247GR_COMBINE_LOCAL_CONSTANT,1248GR_COMBINE_OTHER_TEXTURE);1249CC_ENV ();1250USE_T0 ();1251}12521253static void cc_t1_mul_env ()1254{1255CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1256GR_COMBINE_FACTOR_LOCAL,1257GR_COMBINE_LOCAL_CONSTANT,1258GR_COMBINE_OTHER_TEXTURE);1259CC_ENV ();1260USE_T1 ();1261}12621263//Added by Gonetz1264static void cc_t0_mul_enva ()1265{1266CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1267GR_COMBINE_FACTOR_LOCAL,1268GR_COMBINE_LOCAL_CONSTANT,1269GR_COMBINE_OTHER_TEXTURE);1270CC_ENVA ();1271USE_T0 ();1272}12731274static void cc_t0_mul_scale ()1275{1276CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1277GR_COMBINE_FACTOR_LOCAL,1278GR_COMBINE_LOCAL_CONSTANT,1279GR_COMBINE_OTHER_TEXTURE);1280CC (rdp.SCALE);1281USE_T0 ();1282}12831284static void cc_t0_mul_enva_add_prim ()1285{1286CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1287GR_COMBINE_FACTOR_TEXTURE_RGB,1288GR_COMBINE_LOCAL_ITERATED,1289GR_COMBINE_OTHER_CONSTANT);1290SETSHADE_PRIM ();1291CC_ENVA ();1292USE_T0 ();1293}12941295static void cc_t0_mul_shade ()1296{1297CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1298GR_COMBINE_FACTOR_LOCAL,1299GR_COMBINE_LOCAL_ITERATED,1300GR_COMBINE_OTHER_TEXTURE);1301USE_T0 ();1302}13031304static void cc_f1_sky ()1305{1306CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,1307GR_COMBINE_FACTOR_TEXTURE_ALPHA,1308GR_COMBINE_LOCAL_ITERATED,1309GR_COMBINE_OTHER_CONSTANT);1310MULSHADE_SHADEA ();1311MULSHADE_ENVSUBPRIM ();1312ADDSHADE_PRIM();1313CC(0xFFFFFFFF);1314}13151316static void cc_t0_mul_shadea ()1317{1318CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1319GR_COMBINE_FACTOR_LOCAL,1320GR_COMBINE_LOCAL_ITERATED,1321GR_COMBINE_OTHER_TEXTURE);1322SETSHADE_SHADE_A ();1323USE_T0 ();1324}13251326static void cc_t0_mul_k5 ()1327{1328CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1329GR_COMBINE_FACTOR_LOCAL,1330GR_COMBINE_LOCAL_CONSTANT,1331GR_COMBINE_OTHER_TEXTURE);1332CC_K5 ();1333USE_T0 ();1334}13351336static void cc_t1_mul_shade ()1337{1338CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1339GR_COMBINE_FACTOR_LOCAL,1340GR_COMBINE_LOCAL_ITERATED,1341GR_COMBINE_OTHER_TEXTURE);1342USE_T1 ();1343}13441345//Added by Gonetz1346static void cc__t0_add_t1__mul_shade ()1347{1348CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1349GR_COMBINE_FACTOR_LOCAL,1350GR_COMBINE_LOCAL_ITERATED,1351GR_COMBINE_OTHER_TEXTURE);1352T0_ADD_T1 ();1353}13541355static void cc__t0_mul_shade__add__t1_mul_shade ()1356{1357//combiner is used in Spiderman. It seems that t0 is used instead of t11358if (cmb.combine_ext)1359{1360T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1361GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1362GR_CMBX_ITRGB, 0,1363GR_CMBX_ZERO, 0);1364cmb.tex |= 1;1365CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,1366GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1367GR_CMBX_ZERO, 1,1368GR_CMBX_B, 0);1369}1370else1371{1372CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1373GR_COMBINE_FACTOR_LOCAL,1374GR_COMBINE_LOCAL_ITERATED,1375GR_COMBINE_OTHER_TEXTURE);1376USE_T0 ();1377}1378}13791380static void cc__t0_mul_prim__inter_env_using_enva ()1381{1382wxUint32 enva = rdp.env_color&0xFF;1383if (enva == 0xFF)1384cc_env ();1385else if (enva == 0)1386cc_t0_mul_prim ();1387else if (cmb.combine_ext)1388{1389T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1390GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,1391GR_CMBX_TMU_CCOLOR, 0,1392GR_CMBX_ZERO, 0);1393cmb.tex |= 1;1394cmb.tex_ccolor = rdp.prim_color;1395CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,1396GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1397GR_CMBX_CONSTANT_COLOR, 0,1398GR_CMBX_B, 0);1399SETSHADE_ENV();1400CC_ENVA();1401}1402else1403{1404CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1405GR_COMBINE_FACTOR_LOCAL,1406GR_COMBINE_LOCAL_ITERATED,1407GR_COMBINE_OTHER_TEXTURE);1408SETSHADE_PRIM();1409INTERSHADE_2 (rdp.env_color & 0xFFFFFF00, rdp.env_color & 0xFF);1410USE_T0 ();1411MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);1412MOD_0_COL (rdp.env_color & 0xFFFFFF00);1413MOD_0_FAC (rdp.env_color & 0xFF);1414}1415}141614171418static void cc__t1_inter_t0_using_t1__mul_shade ()1419{1420CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1421GR_COMBINE_FACTOR_LOCAL,1422GR_COMBINE_LOCAL_ITERATED,1423GR_COMBINE_OTHER_TEXTURE);1424if (cmb.combine_ext)1425{1426T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1427GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1428GR_CMBX_ZERO, 0,1429GR_CMBX_B, 0);1430T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1431GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1432GR_CMBX_B, 0,1433GR_CMBX_B, 0);1434cmb.tex |= 3;1435}1436else1437{1438T0_INTER_T1_USING_FACTOR (0x7F);1439}1440}14411442//Added by Gonetz1443static void cc__t1_inter_t0_using_enva__mul_shade ()1444{1445CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1446GR_COMBINE_FACTOR_LOCAL,1447GR_COMBINE_LOCAL_ITERATED,1448GR_COMBINE_OTHER_TEXTURE);1449wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);1450T1_INTER_T0_USING_FACTOR (factor);1451}14521453//Added by Gonetz1454static void cc__t1_inter_t0_using_shadea__mul_shade ()1455{1456if (!cmb.combine_ext) {1457cc_t0_mul_shade ();1458return;1459}1460CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1461GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,1462GR_CMBX_ITRGB, 0,1463GR_CMBX_ZERO, 0);1464T1_INTER_T0_USING_SHADEA ();1465}14661467//Added by Gonetz1468static void cc__t0_inter_one_using_prim__mul_shade ()1469{1470// (1-t0)*prim+t0, (cmb-0)*shade+01471CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1472GR_COMBINE_FACTOR_LOCAL,1473GR_COMBINE_LOCAL_ITERATED,1474GR_COMBINE_OTHER_TEXTURE);1475if (cmb.combine_ext)1476{1477T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,1478GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ONE_MINUS_X,1479GR_CMBX_LOCAL_TEXTURE_RGB, 0,1480GR_CMBX_B, 0);1481cmb.tex |= 1;1482cmb.tex_ccolor = rdp.prim_color;1483}1484else1485{1486USE_T0 ();1487MOD_0 (TMOD_TEX_INTER_COL_USING_COL1);1488MOD_0_COL (0xFFFFFF00);1489MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);1490}1491}14921493static void cc__t0_inter_one_using_primlod__mul_shade ()1494{1495CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1496GR_COMBINE_FACTOR_LOCAL,1497GR_COMBINE_LOCAL_ITERATED,1498GR_COMBINE_OTHER_TEXTURE);1499if (cmb.combine_ext)1500{1501T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1502GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,1503GR_CMBX_DETAIL_FACTOR, 0,1504GR_CMBX_B, 0);1505cmb.tex |= 1;1506percent = (float)lod_frac / 255.0f;1507cmb.dc0_detailmax = cmb.dc1_detailmax = percent;1508}1509else1510{1511MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);1512MOD_0_COL (0xFFFFFF00);1513MOD_0_FAC (lod_frac);1514USE_T0 ();1515}1516}15171518//Added by Gonetz1519static void cc__t0_inter_env_using_enva__mul_shade ()1520{1521// (env-t0)*env_a+t0, (cmb-0)*shade+01522CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1523GR_COMBINE_FACTOR_LOCAL,1524GR_COMBINE_LOCAL_ITERATED,1525GR_COMBINE_OTHER_TEXTURE);1526if (cmb.combine_ext)1527{1528T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,1529GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1530GR_CMBX_TMU_CALPHA, 0,1531GR_CMBX_B, 0);1532cmb.tex |= 1;1533cmb.tex_ccolor = rdp.env_color;1534}1535else1536{1537USE_T0 ();1538MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);1539MOD_0_COL (rdp.env_color & 0xFFFFFF00);1540MOD_0_FAC (rdp.env_color&0xFF);1541}1542}15431544//Added by Gonetz1545static void cc__t0_inter_env_using_shadea__mul_shade ()1546{1547// (env-t0)*shade_a+t0, (cmb-0)*shade+01548if (cmb.combine_ext)1549{1550T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,1551GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1552GR_CMBX_ITALPHA, 0,1553GR_CMBX_B, 0);1554cmb.tex |= 1;1555cmb.tex_ccolor = rdp.env_color;1556CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1557GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,1558GR_CMBX_ITRGB, 0,1559GR_CMBX_ZERO, 0);1560}1561else1562{1563cc_t0_mul_shade ();1564}1565}15661567static void cc__t0_mul_prim_add_env__mul_shade ()1568{1569if (cmb.combine_ext)1570{1571T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1572GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1573GR_CMBX_TMU_CCOLOR, 0,1574GR_CMBX_ZERO, 0);1575cmb.tex |= 1;1576cmb.tex_ccolor = rdp.prim_color;1577CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1578GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,1579GR_CMBX_ITRGB, 0,1580GR_CMBX_ZERO, 0);1581CC_ENV ();1582}1583else1584{1585CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1586GR_COMBINE_FACTOR_LOCAL,1587GR_COMBINE_LOCAL_ITERATED,1588GR_COMBINE_OTHER_TEXTURE);1589MOD_0 (TMOD_TEX_SCALE_COL_ADD_COL);1590MOD_0_COL (rdp.prim_color & 0xFFFFFF00);1591MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);1592USE_T0 ();1593}1594}15951596static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade ()1597{1598if (cmb.combine_ext)1599{1600T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1601GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1602GR_CMBX_ZERO, 0,1603GR_CMBX_B, 0);1604T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1605GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1606GR_CMBX_DETAIL_FACTOR, 0,1607GR_CMBX_ZERO, 0);1608cmb.tex |= 3;1609percent = (float)lod_frac / 255.0f;1610cmb.dc0_detailmax = cmb.dc1_detailmax = percent;1611CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1612GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,1613GR_CMBX_ITRGB, 0,1614GR_CMBX_ZERO, 0);1615CC_PRIM ();1616}1617else1618{1619CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1620GR_COMBINE_FACTOR_LOCAL,1621GR_COMBINE_LOCAL_ITERATED,1622GR_COMBINE_OTHER_TEXTURE);1623T0_INTER_T1_USING_FACTOR (lod_frac);1624}1625}16261627static void cc__t1_sub_prim_mul_t0__mul_shade ()1628{1629CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1630GR_COMBINE_FACTOR_LOCAL,1631GR_COMBINE_LOCAL_ITERATED,1632GR_COMBINE_OTHER_TEXTURE);1633if (cmb.combine_ext)1634{1635T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1636GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1637GR_CMBX_ZERO, 0,1638GR_CMBX_B, 0);1639T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1640GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,1641GR_CMBX_LOCAL_TEXTURE_RGB, 0,1642GR_CMBX_ZERO, 0);1643cmb.tex_ccolor = rdp.prim_color;1644cmb.tex |= 3;1645}1646else1647{1648T0_MUL_T1 ();1649}1650}16511652static void cc__t1_sub_t0_mul_t0_add_shade__mul_shade () //Aded by Gonetz1653{1654CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1655GR_COMBINE_FACTOR_ONE,1656GR_COMBINE_LOCAL_ITERATED,1657GR_COMBINE_OTHER_TEXTURE);1658if (cmb.combine_ext)1659{1660T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1661GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1662GR_CMBX_ZERO, 0,1663GR_CMBX_B, 0);1664T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1665GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1666GR_CMBX_LOCAL_TEXTURE_RGB, 0,1667GR_CMBX_ITRGB, 0);1668cmb.tex |= 3;1669}1670else1671{1672T1_SUB_T0_MUL_T0 ();1673}1674}16751676static void cc__one_sub_shade_mul_t0_add_shade__mul_shade ()1677{1678if (cmb.combine_ext)1679{1680T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1681GR_CMBX_ITRGB, GR_FUNC_MODE_ONE_MINUS_X,1682GR_CMBX_LOCAL_TEXTURE_RGB, 0,1683GR_CMBX_B, 0);1684cmb.tex |= 1;1685CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1686GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,1687GR_CMBX_ITRGB, 0,1688GR_CMBX_ZERO, 0);1689}1690else1691{1692CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1693GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,1694GR_COMBINE_LOCAL_ITERATED,1695GR_COMBINE_OTHER_TEXTURE);1696USE_T0 ();1697}1698}16991700static void cc__t0_sub_prim_mul_t1_add_t1__mul_shade ()1701{1702CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1703GR_COMBINE_FACTOR_LOCAL,1704GR_COMBINE_LOCAL_ITERATED,1705GR_COMBINE_OTHER_TEXTURE);1706if (rdp.prim_color & 0xFFFFFF00)1707{1708MOD_0 (TMOD_TEX_SUB_COL);1709MOD_0_COL (rdp.prim_color & 0xFFFFFF00);1710}1711if (cmb.combine_ext)1712{1713T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1714GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1715GR_CMBX_ZERO, 0,1716GR_CMBX_B, 0);1717T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1718GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1719GR_CMBX_LOCAL_TEXTURE_RGB, 0,1720GR_CMBX_B, 0);1721cmb.tex |= 3;1722}1723else1724{1725T0_MUL_T1 ();1726}1727}17281729static void cc__t1_sub_env_mul_t0_add_t0__mul_shade ()1730{1731CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1732GR_COMBINE_FACTOR_LOCAL,1733GR_COMBINE_LOCAL_ITERATED,1734GR_COMBINE_OTHER_TEXTURE);1735if (cmb.combine_ext)1736{1737T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1738GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,1739GR_CMBX_ZERO, 1,1740GR_CMBX_ZERO, 0);1741T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1742GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1743GR_CMBX_LOCAL_TEXTURE_RGB, 0,1744GR_CMBX_B, 0);1745cmb.tex_ccolor = rdp.env_color;1746cmb.tex |= 3;1747}1748else1749{1750MOD_1 (TMOD_TEX_SUB_COL);1751MOD_1_COL (rdp.env_color & 0xFFFFFF00);1752T0_MUL_T1_ADD_T0 ();1753}1754}17551756static void cc__t0_mul_prima_add_prim_mul__shade ()1757{1758CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1759GR_COMBINE_FACTOR_LOCAL,1760GR_COMBINE_LOCAL_ITERATED,1761GR_COMBINE_OTHER_TEXTURE);1762if (cmb.combine_ext)1763{1764T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1765GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,1766GR_CMBX_TMU_CALPHA, 0,1767GR_CMBX_B, 0);1768cmb.tex_ccolor = rdp.prim_color;1769cmb.tex |= 1;1770}1771else1772{1773MOD_0 (TMOD_TEX_SCALE_FAC_ADD_COL);1774MOD_0_COL (rdp.prim_color & 0xFFFFFF00);1775MOD_0_FAC (rdp.prim_color & 0xFF);1776USE_T0 ();1777}1778}17791780static void cc__t0_inter_prim_using_prima__inter_env_using_enva ()1781{1782if (cmb.combine_ext)1783{1784T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,1785GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1786GR_CMBX_TMU_CALPHA, 0,1787GR_CMBX_B, 0);1788cmb.tex_ccolor = rdp.prim_color;1789cmb.tex |= 1;1790CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,1791GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1792GR_CMBX_CONSTANT_COLOR, 0,1793GR_CMBX_B, 0);1794CC_ENVA ();1795SETSHADE_ENV ();1796}1797else1798{1799CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1800GR_COMBINE_FACTOR_TEXTURE_RGB,1801GR_COMBINE_LOCAL_ITERATED,1802GR_COMBINE_OTHER_CONSTANT);1803CC_1SUBENVA ();1804SETSHADE_ENV ();1805SETSHADE_ENVA ();1806MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);1807MOD_0_COL (rdp.prim_color & 0xFFFFFF00);1808MOD_0_FAC (rdp.prim_color & 0xFF);1809USE_T0 ();1810}1811}18121813static void cc_prim_inter_t1_mul_shade_using_texa ()1814{1815if (cmb.combine_ext)1816{1817T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1818GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1819GR_CMBX_ZERO, 0,1820GR_CMBX_B, 0);1821T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1822GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1823GR_CMBX_ITRGB, 0,1824GR_CMBX_ZERO, 0);1825cmb.tex |= 3;1826CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1827GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,1828GR_CMBX_TEXTURE_ALPHA, 0,1829GR_CMBX_B, 0);1830}1831else1832{1833cc_t1_mul_shade ();1834}1835}18361837static void cc__prim_inter_t0_using_t0a__mul_shade ()1838{1839CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1840GR_COMBINE_FACTOR_LOCAL,1841GR_COMBINE_LOCAL_ITERATED,1842GR_COMBINE_OTHER_TEXTURE);1843if (cmb.combine_ext)1844{1845T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1846GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,1847GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,1848GR_CMBX_B, 0);1849cmb.tex_ccolor = rdp.prim_color;1850cmb.tex |= 1;1851}1852else1853{1854MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);1855MOD_0_COL (rdp.prim_color & 0xFFFFFF00);1856USE_T0 ();1857}1858}18591860static void cc__prim_inter_t0_using_t0a__inter_env_using_enva ()1861{1862if (cmb.combine_ext)1863{1864T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1865GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,1866GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,1867GR_CMBX_B, 0);1868cmb.tex_ccolor = rdp.prim_color;1869cmb.tex |= 1;1870CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,1871GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1872GR_CMBX_CONSTANT_COLOR, 0,1873GR_CMBX_B, 0);1874CC_ENVA ();1875SETSHADE_ENV ();1876}1877else1878{1879CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1880GR_COMBINE_FACTOR_TEXTURE_RGB,1881GR_COMBINE_LOCAL_ITERATED,1882GR_COMBINE_OTHER_CONSTANT);1883CC_1SUBENVA ();1884SETSHADE_ENV ();1885SETSHADE_ENVA ();1886MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);1887MOD_0_COL (rdp.prim_color & 0xFFFFFF00);1888USE_T0 ();1889}1890}18911892// ** A*B **18931894static void cc__prim_inter_t0_using_shadea__mul_shade ()1895{1896CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1897GR_COMBINE_FACTOR_LOCAL,1898GR_COMBINE_LOCAL_ITERATED,1899GR_COMBINE_OTHER_TEXTURE);1900PRIM_INTER_T0_USING_SHADEA ();1901}19021903static void cc_t0_sub_shade_mul_shadea_add_shade ();1904static void cc__shade_inter_t0_using_shadea__mul_shade ()1905{1906if (cmb.combine_ext)1907{1908T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1909GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,1910GR_CMBX_ITALPHA, 0,1911GR_CMBX_B, 0);1912cmb.tex |= 1;1913CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1914GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,1915GR_CMBX_ITRGB, 0,1916GR_CMBX_ZERO, 0);1917}1918else1919{1920cc_t0_sub_shade_mul_shadea_add_shade ();1921}1922}19231924static void cc__prim_inter_env_using_enva__mul_shade ()1925{1926const float ea = ((float)(rdp.env_color&0xFF)) / 255.0f;1927const float ea_i = 1.0f - ea;1928wxUint32 pr = (rdp.prim_color >> 24)&0xFF;1929wxUint32 pg = (rdp.prim_color >> 16)&0xFF;1930wxUint32 pb = (rdp.prim_color >> 8)&0xFF;1931wxUint32 er = (rdp.env_color >> 24)&0xFF;1932wxUint32 eg = (rdp.env_color >> 16)&0xFF;1933wxUint32 eb = (rdp.env_color >> 8)&0xFF;1934wxUint32 r = min(255, (wxUint32)(er*ea + pr*ea_i));1935wxUint32 g = min(255, (wxUint32)(eg*ea + pg*ea_i));1936wxUint32 b = min(255, (wxUint32)(eb*ea + pb*ea_i));1937wxUint32 col = (r << 24) | (g << 16) | (b << 8) | 0xFF;1938CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1939GR_COMBINE_FACTOR_LOCAL,1940GR_COMBINE_LOCAL_ITERATED,1941GR_COMBINE_OTHER_CONSTANT);1942CC (col);1943}19441945//Added by Gonetz1946static void cc_prim_mul_env ()1947{1948CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1949GR_COMBINE_FACTOR_LOCAL,1950GR_COMBINE_LOCAL_ITERATED,1951GR_COMBINE_OTHER_CONSTANT);1952CC_PRIM ();1953SETSHADE_ENV ();1954}19551956static void cc_prim_mul_shade ()1957{1958CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1959GR_COMBINE_FACTOR_LOCAL,1960GR_COMBINE_LOCAL_ITERATED,1961GR_COMBINE_OTHER_CONSTANT);1962CC_PRIM ();1963}19641965static void cc_prim_mul_shadea ()1966{1967CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1968GR_COMBINE_FACTOR_LOCAL,1969GR_COMBINE_LOCAL_ITERATED,1970GR_COMBINE_OTHER_CONSTANT);1971SETSHADE_SHADE_A ();1972CC_PRIM ();1973}19741975static void cc_env_mul_shade ()1976{1977CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1978GR_COMBINE_FACTOR_LOCAL,1979GR_COMBINE_LOCAL_ITERATED,1980GR_COMBINE_OTHER_CONSTANT);1981CC_ENV ();1982}19831984static void cc_env_mul_enva ()1985{1986CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1987GR_COMBINE_FACTOR_OTHER_ALPHA,1988GR_COMBINE_LOCAL_NONE,1989GR_COMBINE_OTHER_CONSTANT);1990CC_ENV ();1991CA_ENV ();1992}19931994static void cc_scale_mul_shade ()1995{1996CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1997GR_COMBINE_FACTOR_LOCAL,1998GR_COMBINE_LOCAL_ITERATED,1999GR_COMBINE_OTHER_CONSTANT);2000CC (rdp.SCALE);2001}20022003// ** A+B **20042005static void cc_t0_add_prim () //Aded by Gonetz2006{2007CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2008GR_COMBINE_FACTOR_ONE,2009GR_COMBINE_LOCAL_CONSTANT,2010GR_COMBINE_OTHER_TEXTURE);2011CC_PRIM ();2012USE_T0 ();2013}20142015static void cc__t0_mul_t1__add_prim () //Aded by Gonetz2016{2017CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2018GR_COMBINE_FACTOR_ONE,2019GR_COMBINE_LOCAL_CONSTANT,2020GR_COMBINE_OTHER_TEXTURE);2021CC_PRIM ();2022T0_MUL_T1 ();2023}20242025static void cc_t0_add_env ()2026{2027CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2028GR_COMBINE_FACTOR_ONE,2029GR_COMBINE_LOCAL_CONSTANT,2030GR_COMBINE_OTHER_TEXTURE);2031CC_ENV ();2032USE_T0 ();2033}20342035//Added by Gonetz2036static void cc__t0_mul_t1__add_env ()2037{2038CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2039GR_COMBINE_FACTOR_ONE,2040GR_COMBINE_LOCAL_CONSTANT,2041GR_COMBINE_OTHER_TEXTURE);2042CC_ENV ();2043T0_MUL_T1 ();2044}20452046static void cc__t0_mul_t1__add_env_mul__t0_mul_t1__add_env ()2047{2048if (cmb.combine_ext)2049{2050T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2051GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2052GR_CMBX_ZERO, 0,2053GR_CMBX_B, 0);2054T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,2055GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,2056GR_CMBX_LOCAL_TEXTURE_RGB, 0,2057GR_CMBX_B, 0);2058cmb.tex_ccolor = rdp.env_color;2059cmb.tex |= 3;2060CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,2061GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,2062GR_CMBX_TEXTURE_RGB, 0,2063GR_CMBX_ZERO, 0);2064}2065else2066cc__t0_mul_t1__add_env();2067}20682069static void cc_t0_add_shade () //Aded by Gonetz2070{2071CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2072GR_COMBINE_FACTOR_ONE,2073GR_COMBINE_LOCAL_ITERATED,2074GR_COMBINE_OTHER_TEXTURE);2075USE_T0 ();2076}20772078static void cc__t0_mul_t1__add_shade () //Aded by Gonetz2079{2080CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2081GR_COMBINE_FACTOR_ONE,2082GR_COMBINE_LOCAL_ITERATED,2083GR_COMBINE_OTHER_TEXTURE);2084T0_MUL_T1 ();2085}20862087static void cc_prim_add_env ()2088{2089CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2090GR_COMBINE_FACTOR_ONE,2091GR_COMBINE_LOCAL_CONSTANT,2092GR_COMBINE_OTHER_ITERATED);2093CC_ENV ();2094SETSHADE_PRIM ();2095}20962097static void cc_t0_add_prim_mul_one_sub_t0_add_t0 () //Aded by Gonetz2098{2099if (cmb.combine_ext)2100{2101T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,2102GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2103GR_CMBX_LOCAL_TEXTURE_RGB, 1,2104GR_CMBX_B, 0);2105CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,2106GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,2107GR_CMBX_ZERO, 1,2108GR_CMBX_ZERO, 0);2109cmb.tex_ccolor = rdp.prim_color;2110cmb.tex |= 1;2111}2112else2113{2114cc_t0_add_prim ();2115}2116}21172118static void cc_one_sub_prim_mul_t0_add_prim();2119static void cc__one_sub_prim_mul_t0_add_prim__mul_prima_add__one_sub_prim_mul_t0_add_prim () //Aded by Gonetz2120{2121if (cmb.combine_ext)2122{2123T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2124GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,2125GR_CMBX_TMU_CCOLOR, 1,2126GR_CMBX_B, 0);2127CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,2128GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,2129GR_CMBX_CONSTANT_COLOR, 0,2130GR_CMBX_B, 0);2131cmb.tex_ccolor = rdp.prim_color;2132CC_PRIMA();2133cmb.tex |= 3; //hw frame buffer allocated as tile1, but not used in combiner2134}2135else2136{2137cc_one_sub_prim_mul_t0_add_prim();2138// cc_t0 ();2139}2140}21412142static void cc_prim_add_shade () //Aded by Gonetz2143{2144CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2145GR_COMBINE_FACTOR_ONE,2146GR_COMBINE_LOCAL_ITERATED,2147GR_COMBINE_OTHER_CONSTANT);2148CC_PRIM ();2149}21502151static void cc_env_add_shade () //Aded by Gonetz2152{2153CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2154GR_COMBINE_FACTOR_ONE,2155GR_COMBINE_LOCAL_ITERATED,2156GR_COMBINE_OTHER_CONSTANT);2157CC_ENV ();2158}21592160static void cc_shade_add_shade () //Aded by Gonetz2161{2162CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2163GR_COMBINE_FACTOR_ONE,2164GR_COMBINE_LOCAL_ITERATED,2165GR_COMBINE_OTHER_ITERATED);2166}21672168// ** A-B **2169static void cc__t0_inter_t1_using_enva__sub_env () //Aded by Gonetz2170{2171CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,2172GR_COMBINE_FACTOR_ONE,2173GR_COMBINE_LOCAL_CONSTANT,2174GR_COMBINE_OTHER_TEXTURE);2175CC_ENV ();2176wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);2177T0_INTER_T1_USING_FACTOR (factor);2178}21792180static void cc_t0_sub__shade_mul_center ()2181{2182CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,2183GR_COMBINE_FACTOR_ONE,2184GR_COMBINE_LOCAL_ITERATED,2185GR_COMBINE_OTHER_TEXTURE);2186MULSHADE(rdp.CENTER);2187USE_T0 ();2188}21892190// ** A-B*C **2191static void cc_env_sub__t0_sub_t1_mul_primlod__mul_prim () //Aded by Gonetz2192{2193if (cmb.combine_ext)2194{2195T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2196GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2197GR_CMBX_ZERO, 0,2198GR_CMBX_B, 0);2199T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2200GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,2201GR_CMBX_ITRGB, 0,2202GR_CMBX_ZERO, 0);2203cmb.tex |= 3;2204CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,2205GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,2206GR_CMBX_ZERO, 1,2207GR_CMBX_ZERO, 0);2208SETSHADE_PRIM ();2209SETSHADE_PRIMLOD ();2210CC_ENV ();2211}2212else2213{2214CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2215GR_COMBINE_FACTOR_TEXTURE_RGB,2216GR_COMBINE_LOCAL_CONSTANT,2217GR_COMBINE_OTHER_ITERATED);2218SETSHADE_PRIM ();2219CC_ENV ();2220T1_INTER_T0_USING_FACTOR (lod_frac);2221}2222}22232224static void cc_env_sub__t0_mul_scale_add_env__mul_prim ()2225{2226if (cmb.combine_ext)2227{2228T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2229GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,2230GR_CMBX_TMU_CCOLOR, 0,2231GR_CMBX_B, 0);2232cmb.tex_ccolor = rdp.SCALE;2233cmb.tex |= 1;2234CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,2235GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,2236GR_CMBX_CONSTANT_COLOR, 0,2237GR_CMBX_B, 0);2238SETSHADE_ENV ();2239CC_PRIM ();2240}2241else2242cc_t0_add_env ();2243}22442245static void cc_one_sub__one_sub_t0_mul_enva_add_prim__mul_prim () //Aded by Gonetz2246{2247if (cmb.combine_ext)2248{2249T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,2250GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,2251GR_CMBX_DETAIL_FACTOR, 0,2252GR_CMBX_B, 0);2253cmb.tex_ccolor = rdp.prim_color;2254cmb.tex |= 1;2255percent = (float)(rdp.env_color&0xFF) / 255.0f;2256cmb.dc0_detailmax = cmb.dc1_detailmax = percent;2257CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_X,2258GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,2259GR_CMBX_CONSTANT_COLOR, 0,2260GR_CMBX_ZERO, 1);2261CC_PRIM ();2262}2263else2264{2265cc_one ();2266}2267}22682269// ** A+B*C **2270//Aded by Gonetz2271static void cc_t0_add_env_mul_k5 ()2272{2273CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2274GR_COMBINE_FACTOR_ONE,2275GR_COMBINE_LOCAL_CONSTANT,2276GR_COMBINE_OTHER_TEXTURE);2277float scale = rdp.K5 / 255.0f;2278wxUint8 r = (wxUint8)(rdp.env_color >> 24) & 0xFF;2279r = (wxUint8)(r*scale);2280wxUint8 g = (wxUint8)(rdp.env_color >> 16) & 0xFF;2281g = (wxUint8)(g*scale);2282wxUint8 b = (wxUint8)(rdp.env_color >> 8) & 0xFF;2283b = (wxUint8)(b*scale);2284CC((r<<24)|(g<<16)|(b<<8));2285USE_T0 ();2286}22872288static void cc_t0_add_shade_mul_env ()2289{2290CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2291GR_COMBINE_FACTOR_ONE,2292GR_COMBINE_LOCAL_ITERATED,2293GR_COMBINE_OTHER_TEXTURE);2294MULSHADE_ENV ();2295USE_T0 ();2296}22972298static void cc__t1_mul_t0_add_t0__add_prim_mul_shade () //Aded by Gonetz2299{2300CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2301GR_COMBINE_FACTOR_ONE,2302GR_COMBINE_LOCAL_ITERATED,2303GR_COMBINE_OTHER_TEXTURE);2304MULSHADE_PRIM ();2305rdp.best_tex = 0;2306cmb.tex |= 3;2307cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;2308cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;2309cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL;2310}23112312static void cc__t0_sub_env_mul_enva__add_prim_mul_shade ()2313{2314if (cmb.combine_ext)2315{2316T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2317GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,2318GR_CMBX_DETAIL_FACTOR, 0,2319GR_CMBX_ZERO, 0);2320cmb.tex_ccolor = rdp.env_color;2321cmb.tex |= 1;2322percent = (float)(rdp.env_color&0xFF) / 255.0f;2323cmb.dc0_detailmax = cmb.dc1_detailmax = percent;23242325CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,2326GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2327GR_CMBX_CONSTANT_COLOR, 0,2328GR_CMBX_B, 0);2329CC_PRIM ();2330}2331else {2332CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2333GR_COMBINE_FACTOR_ONE,2334GR_COMBINE_LOCAL_ITERATED,2335GR_COMBINE_OTHER_TEXTURE);2336MULSHADE_PRIM ();2337MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);2338MOD_0_COL (rdp.env_color & 0xFFFFFF00);2339MOD_0_FAC (rdp.env_color & 0xFF);2340USE_T0 ();2341}2342}23432344// ** A*B+C **2345//Added by Gonetz2346static void cc_t0_mul_prim_add_t1 ()2347{2348CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2349GR_COMBINE_FACTOR_ONE,2350GR_COMBINE_LOCAL_NONE,2351GR_COMBINE_OTHER_TEXTURE);2352if (cmb.combine_ext)2353{2354T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2355GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2356GR_CMBX_ZERO, 0,2357GR_CMBX_B, 0);2358T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2359GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2360GR_CMBX_TMU_CCOLOR, 0,2361GR_CMBX_B, 0);2362cmb.tex |= 3;2363cmb.tex_ccolor = rdp.prim_color;2364}2365else2366{2367MOD_0 (TMOD_TEX_MUL_COL);2368MOD_0_COL (rdp.prim_color & 0xFFFFFF00);2369T0_ADD_T1 ();2370}2371}23722373static void cc_shirt ()2374{2375// (t1-0)*prim+0, (1-t0)*t1+cmb2376CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2377GR_COMBINE_FACTOR_ONE,2378GR_COMBINE_LOCAL_NONE,2379GR_COMBINE_OTHER_TEXTURE);2380if (cmb.combine_ext)2381{2382/*2383T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2384GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2385GR_CMBX_TMU_CCOLOR, 0,2386GR_CMBX_ZERO, 0);2387//*/2388//*2389T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2390GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2391GR_CMBX_ZERO, 0,2392GR_CMBX_B, 0);2393//*/2394T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,2395GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2396GR_CMBX_LOCAL_TEXTURE_RGB, 1,2397GR_CMBX_B, 0);2398cmb.tex |= 3;2399cmb.tex_ccolor = rdp.prim_color;2400}2401else2402{2403MOD_1 (TMOD_TEX_MUL_COL);2404MOD_1_COL (rdp.prim_color & 0xFFFFFF00);2405T0_ADD_T1 ();2406}2407}24082409static void cc_t1_mul_prim_add_prim ()2410{2411CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2412GR_COMBINE_FACTOR_TEXTURE_RGB,2413GR_COMBINE_LOCAL_CONSTANT,2414GR_COMBINE_OTHER_ITERATED);2415SETSHADE_PRIM ();2416CC_PRIM ();2417USE_T0 ();2418}24192420//Added by Gonetz2421static void cc_t0_mul_prim_add_env ()2422{2423CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2424GR_COMBINE_FACTOR_TEXTURE_RGB,2425GR_COMBINE_LOCAL_CONSTANT,2426GR_COMBINE_OTHER_ITERATED);2427SETSHADE_PRIM ();2428CC_ENV ();2429USE_T0 ();2430}24312432//Added by Gonetz2433static void cc_t1_mul_prim_add_env ()2434{2435CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2436GR_COMBINE_FACTOR_TEXTURE_RGB,2437GR_COMBINE_LOCAL_CONSTANT,2438GR_COMBINE_OTHER_ITERATED);2439SETSHADE_PRIM ();2440CC_ENV ();2441USE_T1 ();2442}24432444static void cc__t0_add_primlod__mul_prim_add_env ()2445{2446if (cmb.combine_ext)2447{2448T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2449GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,2450GR_CMBX_ZERO, 1,2451GR_CMBX_ZERO, 0);2452CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,2453GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,2454GR_CMBX_ITRGB, 0,2455GR_CMBX_B, 0);2456CC_PRIMLOD ();2457cmb.tex_ccolor = cmb.ccolor;2458CC_ENV ();2459SETSHADE_PRIM ();2460cmb.tex |= 1;2461}2462else2463{2464CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2465GR_COMBINE_FACTOR_TEXTURE_RGB,2466GR_COMBINE_LOCAL_CONSTANT,2467GR_COMBINE_OTHER_ITERATED);2468CC_PRIMLOD ();2469MOD_0 (TMOD_TEX_ADD_COL);2470MOD_0_COL (cmb.ccolor & 0xFFFFFF00);2471SETSHADE_PRIM ();2472CC_ENV ();2473USE_T0 ();2474}2475}24762477//Added by Gonetz2478static void cc_t0_mul_prim_mul_shade_add_prim_mul_shade ()2479{2480CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2481GR_COMBINE_FACTOR_LOCAL,2482GR_COMBINE_LOCAL_ITERATED,2483GR_COMBINE_OTHER_TEXTURE);2484MULSHADE_PRIM ();2485USE_T0 ();2486}24872488//Added by Gonetz2489static void cc__t0_inter_t1_using_primlod__mul_prim_add_env ()2490{2491CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2492GR_COMBINE_FACTOR_TEXTURE_RGB,2493GR_COMBINE_LOCAL_CONSTANT,2494GR_COMBINE_OTHER_ITERATED);2495SETSHADE_PRIM ();2496CC_ENV ();2497T0_INTER_T1_USING_FACTOR (lod_frac);2498}24992500static void cc__t1_sub_prim_mul_enva_add_t0__mul_prim_add_env ()2501{2502CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2503GR_COMBINE_FACTOR_TEXTURE_RGB,2504GR_COMBINE_LOCAL_ITERATED,2505GR_COMBINE_OTHER_CONSTANT);2506CC_PRIM ();2507SETSHADE_ENV ();2508if (cmb.combine_ext)2509{2510T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2511GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,2512GR_CMBX_DETAIL_FACTOR, 0,2513GR_CMBX_ZERO, 0);2514T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,2515GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2516GR_CMBX_ZERO, 1,2517GR_CMBX_ZERO, 0);2518cmb.tex_ccolor = rdp.prim_color;2519cmb.tex |= 3;2520percent = (float)(rdp.env_color&0xFF) / 255.0f;2521cmb.dc0_detailmax = cmb.dc1_detailmax = percent;2522}2523else2524{2525MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);2526MOD_1_COL (rdp.prim_color & 0xFFFFFF00);2527MOD_1_FAC (rdp.env_color & 0xFF);2528T0_ADD_T1 ();2529}2530}25312532//Added by Gonetz2533static void cc__t0_inter_t1_using_primlod__mul_shade_add_env ()2534{2535CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2536GR_COMBINE_FACTOR_TEXTURE_RGB,2537GR_COMBINE_LOCAL_CONSTANT,2538GR_COMBINE_OTHER_ITERATED);2539CC_ENV ();2540T0_INTER_T1_USING_FACTOR (lod_frac);2541}25422543//Added by Gonetz2544static void cc__t1_sub_prim_mul_primlod_add_t0__mul_prim_add_env ()2545{2546CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2547GR_COMBINE_FACTOR_TEXTURE_RGB,2548GR_COMBINE_LOCAL_CONSTANT,2549GR_COMBINE_OTHER_ITERATED);2550SETSHADE_PRIM ();2551CC_ENV ();2552T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();2553}25542555//Aded by Gonetz2556static void cc__t0_mul_t1__mul_prim_add_env ()2557{2558CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2559GR_COMBINE_FACTOR_TEXTURE_RGB,2560GR_COMBINE_LOCAL_CONSTANT,2561GR_COMBINE_OTHER_ITERATED);2562CC_ENV ();2563MULSHADE_PRIM ();2564T0_MUL_T1 ();2565}25662567//Aded by Gonetz2568static void cc__t0_mul_t1__sub_prim_mul_env_add_shade ()2569{2570if (cmb.combine_ext)2571{2572T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2573GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2574GR_CMBX_TMU_CCOLOR, 0,2575GR_CMBX_ZERO, 0);2576T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,2577GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,2578GR_CMBX_LOCAL_TEXTURE_RGB, 0,2579GR_CMBX_B, 0);2580cmb.tex_ccolor = rdp.env_color;2581cmb.tex |= 3;2582CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,2583GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,2584GR_CMBX_ZERO, 1,2585GR_CMBX_TEXTURE_RGB, 0);2586CC_PRIMMULENV ();2587}2588else2589{2590CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2591GR_COMBINE_FACTOR_TEXTURE_RGB,2592GR_COMBINE_LOCAL_ITERATED,2593GR_COMBINE_OTHER_CONSTANT);2594CC_ENV ();2595T0_MUL_T1 ();2596}2597}25982599static void cc__t0_sub_prim_mul_t1_add_t1__mul_env_add_shade ()2600{2601CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2602GR_COMBINE_FACTOR_TEXTURE_RGB,2603GR_COMBINE_LOCAL_ITERATED,2604GR_COMBINE_OTHER_CONSTANT);2605CC_ENV ();2606if (rdp.prim_color & 0xFFFFFF00)2607{2608MOD_0 (TMOD_TEX_SUB_COL);2609MOD_0_COL (rdp.prim_color & 0xFFFFFF00);2610}2611if (cmb.combine_ext)2612{2613T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2614GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2615GR_CMBX_ZERO, 0,2616GR_CMBX_B, 0);2617T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,2618GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2619GR_CMBX_LOCAL_TEXTURE_RGB, 0,2620GR_CMBX_B, 0);2621cmb.tex |= 3;2622}2623else2624{2625T0_MUL_T1 ();2626}2627}26282629static void cc__t0_mul_t1__mul_shade_add_prim ()2630{2631CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2632GR_COMBINE_FACTOR_TEXTURE_RGB,2633GR_COMBINE_LOCAL_CONSTANT,2634GR_COMBINE_OTHER_ITERATED);2635CC_PRIM ();2636T0_MUL_T1 ();2637}26382639static void cc__t0_mul_shadea_add_env__mul_shade_add_prim ()2640{2641if (cmb.combine_ext)2642{2643T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2644GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,2645GR_CMBX_ITALPHA, 0,2646GR_CMBX_B, 0);2647cmb.tex_ccolor = rdp.env_color;2648cmb.tex |= 1;2649CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,2650GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,2651GR_CMBX_ITRGB, 0,2652GR_CMBX_B, 0);2653CC_PRIM ();2654}2655else2656{2657CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2658GR_COMBINE_FACTOR_TEXTURE_RGB,2659GR_COMBINE_LOCAL_CONSTANT,2660GR_COMBINE_OTHER_ITERATED);2661MULSHADE_SHADEA ();2662CC_PRIM ();2663USE_T0 ();2664}2665}26662667static void cc__t0_mul_t1__mul_shade_add_env ()2668{2669CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2670GR_COMBINE_FACTOR_TEXTURE_RGB,2671GR_COMBINE_LOCAL_CONSTANT,2672GR_COMBINE_OTHER_ITERATED);2673CC_ENV ();2674T0_MUL_T1 ();2675}26762677//Added by Gonetz2678static void cc__t0_add_t1__mul_shade_add_env ()2679{2680CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2681GR_COMBINE_FACTOR_TEXTURE_RGB,2682GR_COMBINE_LOCAL_CONSTANT,2683GR_COMBINE_OTHER_ITERATED);2684CC_ENV ();2685T0_ADD_T1 ();2686}26872688static void cc__t1_mul_prima_add_t0__mul_shade_add_env ()2689{2690CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2691GR_COMBINE_FACTOR_TEXTURE_RGB,2692GR_COMBINE_LOCAL_CONSTANT,2693GR_COMBINE_OTHER_ITERATED);2694CC_ENV ();2695T1_MUL_PRIMA_ADD_T0 ();2696}26972698static void cc__t0_inter_t1_using_enva__mul_shade_add_prim ()2699{2700CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2701GR_COMBINE_FACTOR_TEXTURE_RGB,2702GR_COMBINE_LOCAL_CONSTANT,2703GR_COMBINE_OTHER_ITERATED);2704CC_PRIM ();2705wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);2706T0_INTER_T1_USING_FACTOR (factor);2707}27082709static void cc__t0_inter_t1_using_enva__mul_shade_add_env ()2710{2711CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2712GR_COMBINE_FACTOR_TEXTURE_RGB,2713GR_COMBINE_LOCAL_CONSTANT,2714GR_COMBINE_OTHER_ITERATED);2715CC_ENV ();2716wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);2717T0_INTER_T1_USING_FACTOR (factor);2718}27192720//Added by Gonetz2721static void cc_t0_mul_primlod_add_prim ()2722{2723CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2724GR_COMBINE_FACTOR_TEXTURE_RGB,2725GR_COMBINE_LOCAL_ITERATED,2726GR_COMBINE_OTHER_CONSTANT);2727SETSHADE_PRIM ();2728CC_PRIMLOD ();2729USE_T0 ();2730}27312732static void cc__t0_mul_primlod__add__prim_mul_shade ()2733{2734CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2735GR_COMBINE_FACTOR_TEXTURE_RGB,2736GR_COMBINE_LOCAL_ITERATED,2737GR_COMBINE_OTHER_CONSTANT);2738MULSHADE_PRIM ();2739CC_PRIMLOD ();2740USE_T0 ();2741}27422743//Added by Gonetz2744static void cc_t0_mul_primlod_add_prim_mul_shade_add_env ()2745{2746CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2747GR_COMBINE_FACTOR_TEXTURE_RGB,2748GR_COMBINE_LOCAL_ITERATED,2749GR_COMBINE_OTHER_CONSTANT);2750MULSHADE_PRIM ();2751ADDSHADE_ENV ();2752CC_PRIMLOD ();2753USE_T0 ();2754}27552756//Added by Gonetz2757static void cc_t1_mul_primlod_add_prim_mul_shade_add_env ()2758{2759CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2760GR_COMBINE_FACTOR_TEXTURE_RGB,2761GR_COMBINE_LOCAL_ITERATED,2762GR_COMBINE_OTHER_CONSTANT);2763MULSHADE_PRIM ();2764ADDSHADE_ENV ();2765CC_PRIMLOD ();2766USE_T1 ();2767}27682769static void cc__t0_inter_t1_using_primlod__mul_shade_add_prim ()2770{2771CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2772GR_COMBINE_FACTOR_TEXTURE_RGB,2773GR_COMBINE_LOCAL_CONSTANT,2774GR_COMBINE_OTHER_ITERATED);2775CC_PRIM ();2776T0_INTER_T1_USING_FACTOR (lod_frac);2777}27782779static void cc__t1_inter_t0_using_primlod__mul_shade_add_prim ()2780{2781CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2782GR_COMBINE_FACTOR_TEXTURE_RGB,2783GR_COMBINE_LOCAL_CONSTANT,2784GR_COMBINE_OTHER_ITERATED);2785CC_PRIM ();2786T1_INTER_T0_USING_FACTOR (lod_frac);2787}27882789//Added by Gonetz2790static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade_add_shade ()2791{2792if (cmb.combine_ext)2793{2794T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2795GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2796GR_CMBX_ZERO, 0,2797GR_CMBX_B, 0);2798T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,2799GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,2800GR_CMBX_DETAIL_FACTOR, 0,2801GR_CMBX_ZERO, 0);2802cmb.tex |= 3;2803percent = (float)lod_frac / 255.0f;2804cmb.dc0_detailmax = cmb.dc1_detailmax = percent;2805CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,2806GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,2807GR_CMBX_ITRGB, 0,2808GR_CMBX_ITRGB, 0);2809CC_PRIM ();2810}2811else2812{2813CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2814GR_COMBINE_FACTOR_LOCAL,2815GR_COMBINE_LOCAL_ITERATED,2816GR_COMBINE_OTHER_TEXTURE);2817T0_INTER_T1_USING_FACTOR (lod_frac);2818}2819}28202821//Added by Gonetz2822static void cc__t0_inter_t1_using_half__mul_prim_add_env ()2823{2824CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2825GR_COMBINE_FACTOR_TEXTURE_RGB,2826GR_COMBINE_LOCAL_CONSTANT,2827GR_COMBINE_OTHER_ITERATED);2828SETSHADE_PRIM ();2829CC_ENV ();2830T0_INTER_T1_USING_FACTOR (0x7F);2831}28322833//Added by Gonetz2834static void cc__t0_inter_t1_using_t1__mul_prim_add_shade ()2835{2836CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2837GR_COMBINE_FACTOR_TEXTURE_RGB,2838GR_COMBINE_LOCAL_ITERATED,2839GR_COMBINE_OTHER_CONSTANT);2840CC_PRIM ();2841T0_INTER_T1_USING_T1 ();2842}28432844//Added by Gonetz2845static void cc_one_sub_t1_mul_t0a_add_t0_mul_env_add_prim ()2846{2847CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2848GR_COMBINE_FACTOR_ONE,2849GR_COMBINE_LOCAL_CONSTANT,2850GR_COMBINE_OTHER_TEXTURE);2851CC_PRIM ();2852MOD_0 (TMOD_TEX_MUL_COL);2853MOD_0_COL (rdp.env_color & 0xFFFFFF00);2854rdp.best_tex = 0;2855cmb.tex |= 3;2856cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;2857cmb.tmu1_invert = 1;2858cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;2859cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA;2860}28612862//Added by Gonetz2863static void cc__t0_inter_t1_using_t1__mul_shade_add_prim ()2864{2865CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2866GR_COMBINE_FACTOR_TEXTURE_RGB,2867GR_COMBINE_LOCAL_CONSTANT,2868GR_COMBINE_OTHER_ITERATED);2869CC_PRIM ();2870T0_INTER_T1_USING_T1 ();2871}28722873//Added by Gonetz2874static void cc_t0_mul_prim_add_shade ()2875{2876CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2877GR_COMBINE_FACTOR_TEXTURE_RGB,2878GR_COMBINE_LOCAL_ITERATED,2879GR_COMBINE_OTHER_CONSTANT);2880CC_PRIM ();2881USE_T0 ();2882}28832884static void cc_t1_mul_prim_add_shade ()2885{2886CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2887GR_COMBINE_FACTOR_TEXTURE_RGB,2888GR_COMBINE_LOCAL_ITERATED,2889GR_COMBINE_OTHER_CONSTANT);2890CC_PRIM ();2891USE_T1 ();2892}28932894//Added by Gonetz2895static void cc_t0_mul_env_add_prim ()2896{2897CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2898GR_COMBINE_FACTOR_TEXTURE_RGB,2899GR_COMBINE_LOCAL_CONSTANT,2900GR_COMBINE_OTHER_ITERATED);2901SETSHADE_ENV ();2902CC_PRIM ();2903USE_T0 ();2904}29052906//Added by Gonetz2907static void cc_t1_mul_env_add_prim ()2908{2909CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2910GR_COMBINE_FACTOR_TEXTURE_RGB,2911GR_COMBINE_LOCAL_CONSTANT,2912GR_COMBINE_OTHER_ITERATED);2913SETSHADE_ENV ();2914CC_PRIM ();2915USE_T1 ();2916}29172918static void cc_t0_mul_scale_add_prim ()2919{2920CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2921GR_COMBINE_FACTOR_TEXTURE_RGB,2922GR_COMBINE_LOCAL_CONSTANT,2923GR_COMBINE_OTHER_ITERATED);2924SETSHADE (rdp.SCALE);2925CC_PRIM ();2926USE_T0 ();2927}29282929//Added by Gonetz2930static void cc__t0_mul_t1__mul_env_add_prim ()2931{2932CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2933GR_COMBINE_FACTOR_TEXTURE_RGB,2934GR_COMBINE_LOCAL_CONSTANT,2935GR_COMBINE_OTHER_ITERATED);2936SETSHADE_ENV ();2937CC_PRIM ();2938T0_MUL_T1 ();2939}29402941//Added by Gonetz2942static void cc__t0_add__t1_mul_scale__mul_env_sub_center_add_prim ()2943{2944// (t1-0)*scale+t0, (env-center)*cmb+prim2945CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2946GR_COMBINE_FACTOR_TEXTURE_RGB,2947GR_COMBINE_LOCAL_ITERATED,2948GR_COMBINE_OTHER_CONSTANT);2949CC_C1SUBC2(rdp.env_color, rdp.CENTER);2950SETSHADE_PRIM ();2951MOD_1 (TMOD_TEX_MUL_COL);2952MOD_1_COL (rdp.SCALE & 0xFFFFFF00);2953T0_ADD_T1 ();2954}29552956//Added by Gonetz2957static void cc__t1_sub_t0__mul_env_add_prim ()2958{2959CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2960GR_COMBINE_FACTOR_TEXTURE_RGB,2961GR_COMBINE_LOCAL_CONSTANT,2962GR_COMBINE_OTHER_ITERATED);2963SETSHADE_ENV ();2964CC_PRIM ();2965T1_SUB_T0 ();2966}29672968//Added by Gonetz2969static void cc_t0_mul_env_add_shade ()2970{2971CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2972GR_COMBINE_FACTOR_TEXTURE_RGB,2973GR_COMBINE_LOCAL_ITERATED,2974GR_COMBINE_OTHER_CONSTANT);2975CC_ENV ();2976USE_T0 ();2977}29782979static void cc_t0_mul_shade_add_prim ()2980{2981CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2982GR_COMBINE_FACTOR_TEXTURE_RGB,2983GR_COMBINE_LOCAL_CONSTANT,2984GR_COMBINE_OTHER_ITERATED);2985CC_PRIM ();2986USE_T0 ();2987}29882989static void cc__t0_mul_enva_add_t1__mul_shade_add_prim ()2990{2991CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2992GR_COMBINE_FACTOR_TEXTURE_RGB,2993GR_COMBINE_LOCAL_CONSTANT,2994GR_COMBINE_OTHER_ITERATED);2995CC_PRIM ();2996if (cmb.combine_ext)2997{2998T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2999GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3000GR_CMBX_ZERO, 1,3001GR_CMBX_ZERO, 0);3002T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3003GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3004GR_CMBX_DETAIL_FACTOR, 0,3005GR_CMBX_B, 0);3006cmb.tex |= 3;3007percent = (float)(rdp.env_color&0xFF) / 255.0f;3008cmb.dc0_detailmax = cmb.dc1_detailmax = percent;3009}3010else3011{3012T0_ADD_T1 ();3013}3014}30153016static void cc_t0_mul_shade_add_prima ()3017{3018CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3019GR_COMBINE_FACTOR_TEXTURE_RGB,3020GR_COMBINE_LOCAL_CONSTANT,3021GR_COMBINE_OTHER_ITERATED);3022CC_PRIMA ();3023USE_T0 ();3024}30253026static void cc_t1_mul_shade_add_prim ()3027{3028CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3029GR_COMBINE_FACTOR_TEXTURE_RGB,3030GR_COMBINE_LOCAL_CONSTANT,3031GR_COMBINE_OTHER_ITERATED);3032CC_PRIM ();3033USE_T1 ();3034}30353036static void cc_t0_mul_shade_add_env ()3037{3038CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3039GR_COMBINE_FACTOR_TEXTURE_RGB,3040GR_COMBINE_LOCAL_CONSTANT,3041GR_COMBINE_OTHER_ITERATED);3042CC_ENV ();3043USE_T0 ();3044}30453046static void cc__t0_add_prim__mul_shade_add_t0 ()3047{3048if (cmb.combine_ext)3049{3050CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,3051GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3052GR_CMBX_ITRGB, 0,3053GR_CMBX_B, 0);3054CC_PRIM ();3055}3056else3057{3058CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3059GR_COMBINE_FACTOR_LOCAL,3060GR_COMBINE_LOCAL_ITERATED,3061GR_COMBINE_OTHER_TEXTURE);3062// MOD_0 (TMOD_TEX_ADD_COL);3063// MOD_0_COL (rdp.prim_color & 0xFFFFFF00);3064}3065USE_T0 ();3066}30673068static void cc__t0_add_prim__mul_shade_add_t1 ()3069{3070if (cmb.combine_ext)3071{3072T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3073GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3074GR_CMBX_ZERO, 0,3075GR_CMBX_B, 0);3076T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3077GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3078GR_CMBX_ITRGB, 0,3079GR_CMBX_B, 0);3080cmb.tex |= 3;3081CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,3082GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3083GR_CMBX_ITRGB, 0,3084GR_CMBX_B, 0);3085CC_PRIM ();3086}3087else3088{3089CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3090GR_COMBINE_FACTOR_ONE,3091GR_COMBINE_LOCAL_ITERATED,3092GR_COMBINE_OTHER_TEXTURE);3093MULSHADE_PRIM ();3094T0_ADD_T1 ();3095}3096}30973098static void cc__t0_add_primlod__mul_shade_add_env ()3099{3100if (cmb.combine_ext)3101{3102T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3103GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,3104GR_CMBX_ZERO, 1,3105GR_CMBX_ZERO, 0);3106T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3107GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,3108GR_CMBX_ZERO, 1,3109GR_CMBX_ZERO, 0);3110CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3111GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,3112GR_CMBX_ITRGB, 0,3113GR_CMBX_B, 0);3114CC_PRIMLOD ();3115cmb.tex_ccolor = cmb.ccolor;3116CC_ENV ();3117cmb.tex |= 1;3118}3119else3120{3121CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3122GR_COMBINE_FACTOR_TEXTURE_RGB,3123GR_COMBINE_LOCAL_CONSTANT,3124GR_COMBINE_OTHER_ITERATED);3125wxUint32 color = (lod_frac<<24) | (lod_frac<<16) | (lod_frac<<8);3126MOD_0 (TMOD_TEX_ADD_COL);3127MOD_0_COL (color & 0xFFFFFF00);3128CC_ENV ();3129USE_T0 ();3130}3131}31323133static void cc__t0_mul_prima_add_prim_mul__shade_add_env ()3134{3135CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3136GR_COMBINE_FACTOR_TEXTURE_RGB,3137GR_COMBINE_LOCAL_CONSTANT,3138GR_COMBINE_OTHER_ITERATED);3139CC_ENV ();3140if (cmb.combine_ext)3141{3142T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3143GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,3144GR_CMBX_TMU_CALPHA, 0,3145GR_CMBX_B, 0);3146cmb.tex_ccolor = rdp.prim_color;3147cmb.tex |= 1;3148}3149else3150{3151MOD_0 (TMOD_TEX_SCALE_FAC_ADD_COL);3152MOD_0_COL (rdp.prim_color & 0xFFFFFF00);3153MOD_0_FAC (rdp.prim_color & 0xFF);3154USE_T0 ();3155}3156}31573158//Added by Gonetz3159static void cc_t0_mul_shadea_add_shade ()3160{3161CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3162GR_COMBINE_FACTOR_LOCAL_ALPHA,3163GR_COMBINE_LOCAL_ITERATED,3164GR_COMBINE_OTHER_TEXTURE);3165USE_T0 ();3166}31673168static void cc_prim_mul_prima_add_prim () //Added by Gonetz3169{3170CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3171GR_COMBINE_FACTOR_LOCAL_ALPHA,3172GR_COMBINE_LOCAL_CONSTANT,3173GR_COMBINE_OTHER_ITERATED);3174CC_PRIM ();3175CA_PRIM ();3176SETSHADE_PRIM ();3177}31783179static void cc_prim_mul_prima_add_t0 () //Added by Gonetz3180{3181CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3182GR_COMBINE_FACTOR_ONE,3183GR_COMBINE_LOCAL_ITERATED,3184GR_COMBINE_OTHER_TEXTURE);3185SETSHADE_PRIM ();3186SETSHADE_PRIMA ();3187USE_T0 ();3188}31893190static void cc_prim_mul_env_add_t0 () //Added by Gonetz3191{3192CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3193GR_COMBINE_FACTOR_ONE,3194GR_COMBINE_LOCAL_ITERATED,3195GR_COMBINE_OTHER_TEXTURE);3196SETSHADE_PRIM ();3197SETSHADE_ENV ();3198USE_T0 ();3199}32003201static void cc_prim_mul_shade_add_t0 ()3202{3203CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3204GR_COMBINE_FACTOR_ONE,3205GR_COMBINE_LOCAL_ITERATED,3206GR_COMBINE_OTHER_TEXTURE);3207MULSHADE_PRIM ();3208USE_T0 ();3209}32103211static void cc_prim_mul_shade_add_env ()3212{3213CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3214GR_COMBINE_FACTOR_ONE,3215GR_COMBINE_LOCAL_CONSTANT,3216GR_COMBINE_OTHER_ITERATED);3217CC_ENV ();3218MULSHADE_PRIM ();3219}32203221static void cc_env_mul_shade_add_env () //Added by Gonetz3222{3223CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3224GR_COMBINE_FACTOR_ONE,3225GR_COMBINE_LOCAL_CONSTANT,3226GR_COMBINE_OTHER_ITERATED);3227CC_ENV ();3228MULSHADE_ENV ();3229}32303231// ** A*B+C*D **3232static void cc_t0_mul_prim_add_one_sub_prim_mul_shade () //Added by Gonetz3233{3234CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3235GR_COMBINE_FACTOR_TEXTURE_RGB,3236GR_COMBINE_LOCAL_ITERATED,3237GR_COMBINE_OTHER_CONSTANT);3238CC_PRIM ();3239MULSHADE_1MPRIM ();3240USE_T0 ();3241}32423243static void cc_t0_mul_prim_add_shade_sub_env_mul_prim () //Added by Gonetz3244{3245CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3246GR_COMBINE_FACTOR_TEXTURE_RGB,3247GR_COMBINE_LOCAL_ITERATED,3248GR_COMBINE_OTHER_CONSTANT);3249CC_PRIM ();3250SUBSHADE_ENV ()3251MULSHADE_PRIM ();3252USE_T0 ();3253}32543255static void cc_t0_mul_prim_add_shade_mul_shadea_mul_prim ()3256{3257CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3258GR_COMBINE_FACTOR_TEXTURE_RGB,3259GR_COMBINE_LOCAL_ITERATED,3260GR_COMBINE_OTHER_CONSTANT);3261CC_PRIM ();3262MULSHADE_PRIM ();3263MULSHADE_SHADEA ();3264USE_T0 ();3265}32663267static void cc__t0_mul_t1__mul_prim_add_prim_mul_shade () //Added by Gonetz3268{3269CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3270GR_COMBINE_FACTOR_TEXTURE_RGB,3271GR_COMBINE_LOCAL_ITERATED,3272GR_COMBINE_OTHER_CONSTANT);3273MULSHADE_PRIM ();3274CC_PRIM ();3275T0_MUL_T1 ();3276}32773278static void cc_t0_mul_env_add_prim_mul_shade () //Added by Gonetz3279{3280CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3281GR_COMBINE_FACTOR_TEXTURE_RGB,3282GR_COMBINE_LOCAL_ITERATED,3283GR_COMBINE_OTHER_CONSTANT);3284MULSHADE_PRIM ();3285CC_ENV ();3286USE_T0 ();3287}32883289static void cc_t0_mul_enva_add_prim_mul_shade () //Added by Gonetz3290{3291CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3292GR_COMBINE_FACTOR_TEXTURE_RGB,3293GR_COMBINE_LOCAL_ITERATED,3294GR_COMBINE_OTHER_CONSTANT);3295MULSHADE_PRIM ();3296CC_ENVA ();3297USE_T0 ();3298}32993300static void cc_t0_mul_shade_add_prim_mul_env () //Added by Gonetz3301{3302CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3303GR_COMBINE_FACTOR_TEXTURE_RGB,3304GR_COMBINE_LOCAL_CONSTANT,3305GR_COMBINE_OTHER_ITERATED);3306CC_PRIMMULENV ();3307USE_T0 ();3308}33093310static void cc_prim_mul_env_add_one_sub_prim_mul_shade () //Added by Gonetz3311{3312CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3313GR_COMBINE_FACTOR_ONE,3314GR_COMBINE_LOCAL_ITERATED,3315GR_COMBINE_OTHER_CONSTANT);3316MULSHADE_1MPRIM ();3317CC_PRIMMULENV ();3318}33193320// ** A*B*C **33213322static void cc_t0_mul_prim_mul_prim () //Added by Gonetz3323{3324CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3325GR_COMBINE_FACTOR_LOCAL,3326GR_COMBINE_LOCAL_ITERATED,3327GR_COMBINE_OTHER_TEXTURE);3328SETSHADE_PRIM ();3329SETSHADE_PRIM ();3330USE_T0 ();3331}33323333static void cc_t0_mul_prim_mul_prima () //Added by Gonetz3334{3335CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3336GR_COMBINE_FACTOR_LOCAL,3337GR_COMBINE_LOCAL_ITERATED,3338GR_COMBINE_OTHER_TEXTURE);3339SETSHADE_PRIM ();3340SETSHADE_PRIMA ();3341USE_T0 ();3342}33433344static void cc_t0_mul_enva_mul_shade ()3345{3346CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3347GR_COMBINE_FACTOR_LOCAL,3348GR_COMBINE_LOCAL_ITERATED,3349GR_COMBINE_OTHER_TEXTURE);3350MULSHADE_ENVA ();3351USE_T0 ();3352}33533354static void cc_t0_mul_primlod_mul_prim () //Added by Gonetz3355{3356CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3357GR_COMBINE_FACTOR_LOCAL,3358GR_COMBINE_LOCAL_CONSTANT,3359GR_COMBINE_OTHER_TEXTURE);3360CC_COLMULBYTE (rdp.prim_color, rdp.prim_lodfrac);3361USE_T0 ();3362}33633364static void cc_t0_mul_primlod_mul_shade () //Added by Gonetz3365{3366CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3367GR_COMBINE_FACTOR_LOCAL,3368GR_COMBINE_LOCAL_ITERATED,3369GR_COMBINE_OTHER_TEXTURE);3370MULSHADE_PRIMLOD ();3371USE_T0 ();3372}33733374static void cc__t0_mul_t1__mul_prim ()3375{3376CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3377GR_COMBINE_FACTOR_LOCAL,3378GR_COMBINE_LOCAL_CONSTANT,3379GR_COMBINE_OTHER_TEXTURE);3380CC_PRIM ();3381T0_MUL_T1 ();3382}33833384static void cc__t1_mul_t1_add_t0__mul_prim ()3385{3386CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3387GR_COMBINE_FACTOR_LOCAL,3388GR_COMBINE_LOCAL_CONSTANT,3389GR_COMBINE_OTHER_TEXTURE);3390CC_PRIM ();3391if (cmb.combine_ext)3392{3393T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3394GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3395GR_CMBX_ZERO, 0,3396GR_CMBX_B, 0);3397T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,3398GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3399GR_CMBX_OTHER_TEXTURE_RGB, 0,3400GR_CMBX_B, 0);3401cmb.tex |= 3;3402}3403else3404{3405T0_ADD_T1 ();3406}3407}34083409static void cc__t0_mul_t1__mul_prima () //Added by Gonetz3410{3411CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3412GR_COMBINE_FACTOR_LOCAL,3413GR_COMBINE_LOCAL_CONSTANT,3414GR_COMBINE_OTHER_TEXTURE);3415CC_PRIMA ();3416T0_MUL_T1 ();3417}34183419static void cc__t0_mul_t1__mul_env () //Added by Gonetz3420{3421CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3422GR_COMBINE_FACTOR_LOCAL,3423GR_COMBINE_LOCAL_CONSTANT,3424GR_COMBINE_OTHER_TEXTURE);3425CC_ENV ();3426T0_MUL_T1 ();3427}34283429static void cc__t0_mul_t1__mul_enva () //Added by Gonetz3430{3431CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3432GR_COMBINE_FACTOR_LOCAL,3433GR_COMBINE_LOCAL_CONSTANT,3434GR_COMBINE_OTHER_TEXTURE);3435CC_ENVA ();3436T0_MUL_T1 ();3437}34383439static void cc__t0_mul_t1__mul_shade ()3440{3441CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3442GR_COMBINE_FACTOR_LOCAL,3443GR_COMBINE_LOCAL_ITERATED,3444GR_COMBINE_OTHER_TEXTURE);3445T0_MUL_T1 ();3446}34473448static void cc__t0a_mul_t1__mul_prim () //Added by Gonetz3449{3450CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3451GR_COMBINE_FACTOR_LOCAL,3452GR_COMBINE_LOCAL_CONSTANT,3453GR_COMBINE_OTHER_TEXTURE);3454CC_PRIM ();3455T0A_MUL_T1 ();3456}34573458static void cc__t0_mul_t1a__mul_shade () //Added by Gonetz3459{3460CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3461GR_COMBINE_FACTOR_LOCAL,3462GR_COMBINE_LOCAL_ITERATED,3463GR_COMBINE_OTHER_TEXTURE);3464T0_MUL_T1A ();3465}34663467static void cc__t0a_mul_t1__mul_shade () //Added by Gonetz3468{3469CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3470GR_COMBINE_FACTOR_LOCAL,3471GR_COMBINE_LOCAL_ITERATED,3472GR_COMBINE_OTHER_TEXTURE);3473T0A_MUL_T1 ();3474}34753476static void cc_t0_mul_prim_mul_env ()3477{3478CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3479GR_COMBINE_FACTOR_LOCAL,3480GR_COMBINE_LOCAL_ITERATED,3481GR_COMBINE_OTHER_TEXTURE);3482SETSHADE_PRIM ();3483SETSHADE_ENV (); // notice that setshade multiplies3484USE_T0 ();3485}34863487static void cc_t0_mul_prim_mul_shade ()3488{3489CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3490GR_COMBINE_FACTOR_LOCAL,3491GR_COMBINE_LOCAL_ITERATED,3492GR_COMBINE_OTHER_TEXTURE);3493MULSHADE_PRIM ();3494USE_T0 ();3495}34963497static void cc_t0_mul_prim_mul_shadea ()3498{3499CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3500GR_COMBINE_FACTOR_LOCAL,3501GR_COMBINE_LOCAL_ITERATED,3502GR_COMBINE_OTHER_TEXTURE);3503SETSHADE_PRIM ();3504MULSHADE_SHADEA();3505USE_T0 ();3506}35073508static void cc_t0_mul_prima_mul_shade ()3509{3510CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3511GR_COMBINE_FACTOR_LOCAL,3512GR_COMBINE_LOCAL_ITERATED,3513GR_COMBINE_OTHER_TEXTURE);3514MULSHADE_PRIMA ();3515USE_T0 ();3516}35173518static void cc_t1_mul__one_sub_prim_mul_shade_add_prim ()3519{3520CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3521GR_COMBINE_FACTOR_LOCAL,3522GR_COMBINE_LOCAL_ITERATED,3523GR_COMBINE_OTHER_TEXTURE);3524MULSHADE_1MPRIM ();3525ADDSHADE_PRIM ();3526USE_T1 ();3527}35283529static void cc_t0_mul_one_sub_env_mul_shade ()3530{3531CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3532GR_COMBINE_FACTOR_LOCAL,3533GR_COMBINE_LOCAL_ITERATED,3534GR_COMBINE_OTHER_TEXTURE);3535MULSHADE_1MENV ();3536USE_T0 ();3537}35383539static void cc_t1_mul_prim_mul_shade ()3540{3541CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3542GR_COMBINE_FACTOR_LOCAL,3543GR_COMBINE_LOCAL_ITERATED,3544GR_COMBINE_OTHER_TEXTURE);3545MULSHADE_PRIM ();3546USE_T1 ();3547}35483549//Added by Gonetz3550static void cc_t0_mul_1mprim_mul_shade ()3551{3552CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3553GR_COMBINE_FACTOR_LOCAL,3554GR_COMBINE_LOCAL_ITERATED,3555GR_COMBINE_OTHER_TEXTURE);3556MULSHADE_1MPRIM ();3557USE_T0 ();3558}35593560static void cc_t0_mul_env_mul_shade ()3561{3562CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3563GR_COMBINE_FACTOR_LOCAL,3564GR_COMBINE_LOCAL_ITERATED,3565GR_COMBINE_OTHER_TEXTURE);3566MULSHADE_ENV ();3567USE_T0 ();3568}35693570static void cc_t0_mul_scale_mul_shade ()3571{3572CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3573GR_COMBINE_FACTOR_LOCAL,3574GR_COMBINE_LOCAL_ITERATED,3575GR_COMBINE_OTHER_TEXTURE);3576MULSHADE (rdp.SCALE);3577USE_T0 ();3578}35793580static void cc_t0_mul_shade_mul_shadea ()3581{3582CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3583GR_COMBINE_FACTOR_LOCAL,3584GR_COMBINE_LOCAL_ITERATED,3585GR_COMBINE_OTHER_TEXTURE);3586MULSHADE_SHADEA ();3587USE_T0 ();3588}35893590static void cc_prim_mul_env_mul_shade ()3591{3592CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3593GR_COMBINE_FACTOR_LOCAL,3594GR_COMBINE_LOCAL_CONSTANT,3595GR_COMBINE_OTHER_ITERATED);3596CC_ENV ();3597MULSHADE_PRIM ();3598}35993600static void cc_prim_mul_one_sub_env_mul_shade ()3601{3602CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3603GR_COMBINE_FACTOR_LOCAL,3604GR_COMBINE_LOCAL_CONSTANT,3605GR_COMBINE_OTHER_ITERATED);3606CC_1SUBENV ();3607MULSHADE_PRIM ();3608}36093610// ** A*B*C+D **3611static void cc_t0_mul_prim_mul_shade_add_env ()3612{3613CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3614GR_COMBINE_FACTOR_TEXTURE_RGB,3615GR_COMBINE_LOCAL_CONSTANT,3616GR_COMBINE_OTHER_ITERATED);3617CC_ENV ();3618MULSHADE_PRIM ();3619USE_T0 ();3620}36213622//Added by Gonetz3623static void cc_t0_mul_prim_mul_shadea_add_env ()3624{3625CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3626GR_COMBINE_FACTOR_LOCAL_ALPHA,3627GR_COMBINE_LOCAL_ITERATED,3628GR_COMBINE_OTHER_TEXTURE);3629CC_ENV ();3630SETSHADE_ENV ();3631MULSHADE_A_PRIM ();3632USE_T0 ();3633}36343635// (A*B+C)*D3636static void cc__t0_mul_prim_add_shade__mul_env ()3637{3638if (cmb.combine_ext)3639{3640T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3641GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,3642GR_CMBX_TMU_CCOLOR, 0,3643GR_CMBX_B, 0);3644cmb.tex |= 1;3645cmb.tex_ccolor = rdp.prim_color;3646CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3647GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,3648GR_CMBX_CONSTANT_COLOR, 0,3649GR_CMBX_ZERO, 0);3650CC_ENV ();3651}3652else3653{3654CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3655GR_COMBINE_FACTOR_ONE,3656GR_COMBINE_LOCAL_ITERATED,3657GR_COMBINE_OTHER_TEXTURE);3658MULSHADE_ENV ();3659MOD_0 (TMOD_TEX_MUL_COL);3660CC_PRIMMULENV ();3661MOD_0_COL (cmb.ccolor & 0xFFFFFF00);3662USE_T0 ();3663}3664}36653666static void cc__t0a_mul_prim_add_t0__mul_shade ()3667{3668CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3669GR_COMBINE_FACTOR_LOCAL,3670GR_COMBINE_LOCAL_ITERATED,3671GR_COMBINE_OTHER_TEXTURE);3672MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);3673MOD_0_COL (rdp.prim_color & 0xFFFFFF00);3674USE_T0 ();3675}36763677static void cc__t0a_mul_env_add_t0__mul_shade ()3678{3679CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3680GR_COMBINE_FACTOR_LOCAL,3681GR_COMBINE_LOCAL_ITERATED,3682GR_COMBINE_OTHER_TEXTURE);3683MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);3684MOD_0_COL (rdp.env_color & 0xFFFFFF00);3685USE_T0 ();3686}36873688static void cc__prim_mul_shade_add_env__mul_shade () //Aded by Gonetz3689{3690if (!cmb.combine_ext)3691{3692cc_prim_mul_shade_add_env ();3693return;3694}3695T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,3696GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3697GR_CMBX_ITRGB, 0,3698GR_CMBX_ZERO, 0);3699cmb.tex |= 1;3700cmb.tex_ccolor = rdp.prim_color;3701CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3702GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,3703GR_CMBX_ITRGB, 0,3704GR_CMBX_ZERO, 0);3705CC_ENV ();3706}37073708// ** A*B*C+D*E **3709//Added by Gonetz3710static void cc__t0_sub_t1__mul_prim_mul_shade_add_prim_mul_env ()3711{3712if (cmb.combine_ext)3713{3714T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3715GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3716GR_CMBX_ZERO, 0,3717GR_CMBX_B, 0);3718T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3719GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,3720GR_CMBX_ZERO, 1,3721GR_CMBX_ZERO, 0);3722cmb.tex |= 3;3723}3724else3725{3726USE_T0 ();3727}37283729CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3730GR_COMBINE_FACTOR_TEXTURE_RGB,3731GR_COMBINE_LOCAL_CONSTANT,3732GR_COMBINE_OTHER_ITERATED);3733CC_PRIMMULENV ();3734MULSHADE_PRIM ();3735}37363737static void cc__t0_mul_prim_mul_env__add__prim_mul_shade ()3738{3739CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3740GR_COMBINE_FACTOR_TEXTURE_RGB,3741GR_COMBINE_LOCAL_ITERATED,3742GR_COMBINE_OTHER_CONSTANT);3743CC_PRIMMULENV ();3744MULSHADE_PRIM ();3745USE_T0 ();3746}37473748static void cc__t1_mul_prim_mul_env__add__prim_mul_shade ()3749{3750CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3751GR_COMBINE_FACTOR_TEXTURE_RGB,3752GR_COMBINE_LOCAL_ITERATED,3753GR_COMBINE_OTHER_CONSTANT);3754CC_PRIMMULENV ();3755MULSHADE_PRIM ();3756USE_T1 ();3757}37583759//Added by Gonetz3760static void cc_t0_mul_one_sub_prim_mul_shade_add_prim_mul_env ()3761{3762CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3763GR_COMBINE_FACTOR_TEXTURE_RGB,3764GR_COMBINE_LOCAL_CONSTANT,3765GR_COMBINE_OTHER_ITERATED);3766CC_PRIMMULENV ();3767MULSHADE_1MPRIM ();3768USE_T0 ();3769}37703771//Added by Gonetz3772static void cc_t0_mul_one_sub_prim_mul_shadea_add_prim_mul_env ()3773{3774CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3775GR_COMBINE_FACTOR_TEXTURE_RGB,3776GR_COMBINE_LOCAL_CONSTANT,3777GR_COMBINE_OTHER_ITERATED);3778CC_PRIMMULENV ();3779SETSHADE_1MPRIM ();3780MULSHADE_SHADEA ();3781USE_T0 ();3782}37833784//Added by Gonetz3785static void cc_t0_mul_one_sub_env_mul_shade_add_env ()3786{3787CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3788GR_COMBINE_FACTOR_TEXTURE_RGB,3789GR_COMBINE_LOCAL_CONSTANT,3790GR_COMBINE_OTHER_ITERATED);3791CC_ENV ();3792MULSHADE_1MENV ();3793USE_T0 ();3794}37953796static void cc_t0_mul_prima_mul_shade_add_prim_mul_one_sub_prima () //Aded by Gonetz3797{3798CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3799GR_COMBINE_FACTOR_TEXTURE_RGB,3800GR_COMBINE_LOCAL_CONSTANT,3801GR_COMBINE_OTHER_ITERATED);3802MULSHADE_PRIMA ();3803USE_T0 ();3804wxUint8 fac = 255 - (wxUint8)(rdp.prim_color&0xFF);3805float col[3];3806col[0] = (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f;3807col[1] = (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f;3808col[2] = (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f;3809CC ( ((wxUint8)(col[0]*fac))<<24 | ((wxUint8)(col[1]*fac))<<16 | ((wxUint8)(col[2]*fac))<<8 | fac );3810}38113812// ** A*(1-B)+C **3813static void cc_t0_mul_1menv_add_prim ()3814{3815CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3816GR_COMBINE_FACTOR_TEXTURE_RGB,3817GR_COMBINE_LOCAL_CONSTANT,3818GR_COMBINE_OTHER_ITERATED);3819CC_PRIM ();3820SETSHADE_1MENV ();3821USE_T0 ();3822}38233824// ** (A+B)*C **3825static void cc_t0_mul_scale_add_prim__mul_shade () //Aded by Gonetz3826{3827if (cmb.combine_ext)3828{3829T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3830GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3831GR_CMBX_TMU_CCOLOR, 0,3832GR_CMBX_ZERO, 0);3833cmb.tex |= 1;3834cmb.tex_ccolor = rdp.SCALE;3835CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3836GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,3837GR_CMBX_ITRGB, 0,3838GR_CMBX_ZERO, 0);3839CC_PRIM ();3840}3841else3842{3843CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3844GR_COMBINE_FACTOR_LOCAL,3845GR_COMBINE_LOCAL_ITERATED,3846GR_COMBINE_OTHER_TEXTURE);3847MOD_0 (TMOD_TEX_ADD_COL);3848MOD_0_COL (rdp.prim_color & 0xFFFFFF00);3849USE_T0 ();3850}3851}38523853static void cc__t0_mul_t1_add_prim__mul_shade () //Aded by Gonetz3854{3855if (cmb.combine_ext)3856{3857CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3858GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,3859GR_CMBX_ITRGB, 0,3860GR_CMBX_ZERO, 0);3861CC_PRIM ();3862}3863else3864{3865CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3866GR_COMBINE_FACTOR_LOCAL,3867GR_COMBINE_LOCAL_ITERATED,3868GR_COMBINE_OTHER_TEXTURE);3869MULSHADE_PRIM ();3870}3871T0_MUL_T1 ();3872}38733874static void cc_t0_mul__prim_add_env ()3875{3876CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3877GR_COMBINE_FACTOR_LOCAL,3878GR_COMBINE_LOCAL_ITERATED,3879GR_COMBINE_OTHER_TEXTURE);3880SETSHADE_PRIM ();3881ADDSHADE_ENV ();3882USE_T0 ();3883}38843885static void cc_t0_mul__prim_mul_primlod_add_env () //Aded by Gonetz3886{3887// forest behind window, Dobutsu no Mori.3888// (prim-0)*prim_lod+env, (t1-0)*cmb+03889//actually, the game uses t0 instead of t1 here. t1 does not set at all this moment.3890CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3891GR_COMBINE_FACTOR_LOCAL,3892GR_COMBINE_LOCAL_ITERATED,3893GR_COMBINE_OTHER_TEXTURE);3894float prim_lod = rdp.prim_lodfrac / 65025.0f;3895rdp.col[0] *= ((rdp.prim_color & 0xFF000000) >> 24) * prim_lod;3896rdp.col[1] *= ((rdp.prim_color & 0x00FF0000) >> 16) * prim_lod;3897rdp.col[2] *= ((rdp.prim_color & 0x0000FF00) >> 8) * prim_lod;3898rdp.cmb_flags = CMB_SET;3899ADDSHADE_ENV ();3900USE_T0 ();3901}39023903// ** (A-B)*C **3904static void cc__t0_mul_prim_add_shade__sub_env_mul_shade ()3905{3906if (cmb.combine_ext)3907{3908T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3909GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,3910GR_CMBX_TMU_CCOLOR, 0,3911GR_CMBX_B, 0);3912cmb.tex_ccolor = rdp.prim_color;3913cmb.tex |= 1;3914CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3915GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,3916GR_CMBX_ITRGB, 0,3917GR_CMBX_ZERO, 0);3918CC_ENV ();3919}3920else3921{3922cc_t0_mul_prim_mul_shade ();3923}3924}39253926static void cc_t0_sub_prim_mul_shadea () //Aded by Gonetz3927{3928// * not guaranteed to work if another iterated alpha is set3929CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,3930GR_COMBINE_FACTOR_LOCAL_ALPHA,3931GR_COMBINE_LOCAL_ITERATED,3932GR_COMBINE_OTHER_TEXTURE);3933SETSHADE_PRIM ();3934USE_T0 ();3935}39363937static void cc__t0_sub_env_mul_shade__sub_prim_mul_shade ()3938{3939if (cmb.combine_ext)3940{3941T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3942GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,3943GR_CMBX_ITRGB, 0,3944GR_CMBX_ZERO, 0);3945cmb.tex_ccolor = rdp.env_color;3946cmb.tex |= 1;3947CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3948GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,3949GR_CMBX_ITRGB, 0,3950GR_CMBX_ITRGB, 0);3951CC_PRIM ();3952}3953else3954{3955cc_t0_mul_shade ();3956}3957}39583959static void cc_t0_sub_prim_mul_shade ()3960{3961if (cmb.combine_ext)3962{3963CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3964GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,3965GR_CMBX_ITRGB, 0,3966GR_CMBX_ZERO, 0);3967CC_PRIM ();3968}3969else3970{3971CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3972GR_COMBINE_FACTOR_LOCAL,3973GR_COMBINE_LOCAL_ITERATED,3974GR_COMBINE_OTHER_TEXTURE);3975if (rdp.prim_color & 0xFFFFFF00)3976{3977MOD_0 (TMOD_TEX_SUB_COL);3978MOD_0_COL (rdp.prim_color & 0xFFFFFF00);3979}3980}3981USE_T0 ();3982}39833984static void cc__t0_mul_t1__sub_prim_mul_shade ()3985{3986if (cmb.combine_ext)3987{3988CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3989GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,3990GR_CMBX_ITRGB, 0,3991GR_CMBX_ZERO, 0);3992CC_PRIM ();3993}3994else3995{3996CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3997GR_COMBINE_FACTOR_LOCAL,3998GR_COMBINE_LOCAL_ITERATED,3999GR_COMBINE_OTHER_TEXTURE);4000}4001T0_MUL_T1 ();4002}40034004static void cc_t0_sub_env_mul_shade ()4005{4006if (cmb.combine_ext)4007{4008CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4009GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,4010GR_CMBX_ITRGB, 0,4011GR_CMBX_ZERO, 0);4012CC_ENV ();4013}4014else4015{4016CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4017GR_COMBINE_FACTOR_LOCAL,4018GR_COMBINE_LOCAL_ITERATED,4019GR_COMBINE_OTHER_TEXTURE);4020if (rdp.env_color & 0xFFFFFF00)4021{4022MOD_0 (TMOD_TEX_SUB_COL);4023MOD_0_COL (rdp.env_color & 0xFFFFFF00);4024}4025}4026USE_T0 ();4027}40284029static void cc__t0_mul_prima_add_t0__sub_center_mul_scale ()4030{4031if (cmb.combine_ext)4032{4033T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4034GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4035GR_CMBX_TMU_CCOLOR, 0,4036GR_CMBX_B, 0);4037wxUint32 prima = rdp.prim_color&0xFF;4038cmb.tex_ccolor = (prima<<24)|(prima<<16)|(prima<<8)|prima;4039cmb.tex |= 1;4040CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4041GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,4042GR_CMBX_ITRGB, 0,4043GR_CMBX_ZERO, 0);4044CC(rdp.CENTER);4045SETSHADE(rdp.SCALE);4046}4047else4048{4049cc_t0_mul_prima();4050}4051}40524053static void cc__t1_inter_t0_using_primlod__sub_shade_mul_prim ()4054{4055if (cmb.combine_ext)4056{4057CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4058GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4059GR_CMBX_CONSTANT_COLOR, 0,4060GR_CMBX_ZERO, 0);4061CC_PRIM ();4062}4063else4064{4065CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,4066GR_COMBINE_FACTOR_ONE,4067GR_COMBINE_LOCAL_ITERATED,4068GR_COMBINE_OTHER_TEXTURE);4069MULSHADE_PRIM ();4070}4071T1_INTER_T0_USING_FACTOR (lod_frac);4072}40734074static void cc__t0_inter_t1_using_enva__sub_shade_mul_prim ()4075{4076if (cmb.combine_ext)4077{4078CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4079GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4080GR_CMBX_CONSTANT_COLOR, 0,4081GR_CMBX_ZERO, 0);4082CC_PRIM ();4083}4084else4085{4086CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,4087GR_COMBINE_FACTOR_ONE,4088GR_COMBINE_LOCAL_ITERATED,4089GR_COMBINE_OTHER_TEXTURE);4090MULSHADE_PRIM ();4091}4092wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);4093T0_INTER_T1_USING_FACTOR (factor);4094}40954096static void cc_t0_sub_shade_mul_shadea () //Aded by Gonetz4097{4098// * not guaranteed to work if another iterated alpha is set4099CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,4100GR_COMBINE_FACTOR_LOCAL_ALPHA,4101GR_COMBINE_LOCAL_ITERATED,4102GR_COMBINE_OTHER_TEXTURE);4103USE_T0 ();4104}41054106static void cc_one_sub_t0_mul_prim () //Added by Gonetz4107{4108CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,4109GR_COMBINE_FACTOR_TEXTURE_RGB,4110GR_COMBINE_LOCAL_CONSTANT,4111GR_COMBINE_OTHER_NONE);4112CC_PRIM ();4113USE_T0 ();4114}41154116static void cc_one_sub_prim_mul_prima () //Added by Gonetz4117{4118CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4119GR_COMBINE_FACTOR_LOCAL,4120GR_COMBINE_LOCAL_ITERATED,4121GR_COMBINE_OTHER_CONSTANT);4122CC (~rdp.prim_color);4123SETSHADE_PRIMA ();4124}41254126static void cc_shade_sub_prim_mul_t0 () //Aded by Gonetz4127{4128CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,4129GR_COMBINE_FACTOR_TEXTURE_RGB,4130GR_COMBINE_LOCAL_CONSTANT,4131GR_COMBINE_OTHER_ITERATED);4132CC_PRIM ();4133USE_T0 ();4134}41354136static void cc_shade_sub_prim_mul_env () //Aded by Gonetz4137{4138CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4139GR_COMBINE_FACTOR_LOCAL,4140GR_COMBINE_LOCAL_CONSTANT,4141GR_COMBINE_OTHER_ITERATED);4142CC_ENV ();4143SUBSHADE_PRIM ();4144}41454146static void cc_shade_sub_env_mul_t0 () //Aded by Gonetz4147{4148CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,4149GR_COMBINE_FACTOR_TEXTURE_RGB,4150GR_COMBINE_LOCAL_CONSTANT,4151GR_COMBINE_OTHER_ITERATED);4152CC_ENV ();4153USE_T0 ();4154}41554156static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod () //Aded by Gonetz4157{4158CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,4159GR_COMBINE_FACTOR_TEXTURE_RGB,4160GR_COMBINE_LOCAL_CONSTANT,4161GR_COMBINE_OTHER_ITERATED);4162CC_PRIM ();4163T0_INTER_T1_USING_FACTOR (lod_frac);4164}41654166static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz4167{4168CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,4169GR_COMBINE_FACTOR_TEXTURE_RGB,4170GR_COMBINE_LOCAL_CONSTANT,4171GR_COMBINE_OTHER_ITERATED);4172CC_ENV ();4173T0_INTER_T1_USING_FACTOR (lod_frac);4174}41754176static void cc_shade_sub_env_mul_prim () //Aded by Gonetz4177{4178CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4179GR_COMBINE_FACTOR_LOCAL,4180GR_COMBINE_LOCAL_CONSTANT,4181GR_COMBINE_OTHER_ITERATED);4182CC_PRIM();4183SUBSHADE_ENV ();4184}41854186static void cc_shade_sub__prim_mul_prima () //Aded by Gonetz4187{4188CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,4189GR_COMBINE_FACTOR_ONE,4190GR_COMBINE_LOCAL_CONSTANT,4191GR_COMBINE_OTHER_ITERATED);4192CC_C1MULC2 (rdp.prim_color, (rdp.prim_color&0xFF));4193}41944195static void cc_one_sub__t0_mul_t1__mul_shade () //Aded by Gonetz4196{4197CCMB (GR_COMBINE_FUNCTION_BLEND,4198GR_COMBINE_FACTOR_TEXTURE_RGB,4199GR_COMBINE_LOCAL_ITERATED,4200GR_COMBINE_OTHER_CONSTANT);4201CC (0);4202T0_MUL_T1 ();4203}42044205static void cc_one_sub__t0_mul_shadea__mul_shade () //Aded by Gonetz4206{4207if (cmb.combine_ext)4208{4209T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4210GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4211GR_CMBX_ITALPHA, 0,4212GR_CMBX_ZERO, 0);4213cmb.tex |= 1;42144215CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,4216GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,4217GR_CMBX_ITRGB, 0,4218GR_CMBX_ZERO, 0);4219}4220else4221{4222CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4223GR_COMBINE_FACTOR_LOCAL,4224GR_COMBINE_LOCAL_ITERATED,4225GR_COMBINE_OTHER_TEXTURE);4226USE_T0 ();4227cmb.tmu0_invert = TRUE;4228}4229}42304231static void cc_one_sub_env_mul_t0 () //Aded by Gonetz4232{4233CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4234GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,4235GR_COMBINE_LOCAL_CONSTANT,4236GR_COMBINE_OTHER_TEXTURE);4237CC_ENV ();4238USE_T0 ();4239}42404241static void cc_one_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz4242{4243CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4244GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,4245GR_COMBINE_LOCAL_CONSTANT,4246GR_COMBINE_OTHER_TEXTURE);4247CC_ENV ();4248T0_INTER_T1_USING_FACTOR (lod_frac);4249}42504251static void cc_one_sub_env_mul_prim () //Aded by Gonetz4252{4253CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4254GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,4255GR_COMBINE_LOCAL_CONSTANT,4256GR_COMBINE_OTHER_ITERATED);4257CC_ENV ();4258SETSHADE_PRIM ();4259}42604261static void cc_one_sub_env_mul_shade () //Aded by Gonetz4262{4263CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4264GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,4265GR_COMBINE_LOCAL_CONSTANT,4266GR_COMBINE_OTHER_ITERATED);4267CC_ENV ();4268}42694270// ** (1-A)*B + A*C **4271static void cc_t0_mul_env_add_1mt0_mul_shade ()4272{4273CCMB (GR_COMBINE_FUNCTION_BLEND,4274GR_COMBINE_FACTOR_TEXTURE_RGB,4275GR_COMBINE_LOCAL_ITERATED,4276GR_COMBINE_OTHER_CONSTANT);4277CC_ENV ();4278USE_T0 ();4279}42804281// ** (1-A)*B+C **4282static void cc_one_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade () //Added by Gonetz4283{4284CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4285GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,4286GR_COMBINE_LOCAL_ITERATED,4287GR_COMBINE_OTHER_TEXTURE);4288T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();4289}42904291// ** (1-A)*B*C **4292static void cc_one_sub_t0_mul_prim_mul_shade () //Added by Gonetz4293{4294CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,4295GR_COMBINE_FACTOR_TEXTURE_RGB,4296GR_COMBINE_LOCAL_ITERATED,4297GR_COMBINE_OTHER_NONE);4298MULSHADE_PRIM ();4299USE_T0 ();4300}43014302// ** (A-B)*C*D **4303static void cc_prim_sub_env_mul_t0_mul_shade ()4304{4305CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4306GR_COMBINE_FACTOR_TEXTURE_RGB,4307GR_COMBINE_LOCAL_NONE,4308GR_COMBINE_OTHER_ITERATED);4309MULSHADE_PRIMSUBENV ();4310USE_T0 ();4311}43124313// ** (A-B)*C+D **4314static void cc_t0_sub_t1_mul_prim_mul_shade_add_t1 () //Aded by Gonetz4315{4316if (cmb.combine_ext)4317{4318T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4319GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4320GR_CMBX_ZERO, 0,4321GR_CMBX_B, 0);4322T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4323GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,4324GR_CMBX_ITRGB, 0,4325GR_CMBX_B, 0);4326cmb.tex |= 3;4327CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4328GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,4329GR_CMBX_ZERO, 1,4330GR_CMBX_ZERO, 0);4331MULSHADE_PRIM ();4332}4333else4334{4335CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4336GR_COMBINE_FACTOR_LOCAL,4337GR_COMBINE_LOCAL_CONSTANT,4338GR_COMBINE_OTHER_TEXTURE);4339CC_PRIM ();4340T0_ADD_T1 ();4341}4342}43434344static void cc_t0_sub_prim_mul_t0a_add_prim () //Aded by Gonetz4345{4346CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4347GR_COMBINE_FACTOR_TEXTURE_ALPHA,4348GR_COMBINE_LOCAL_CONSTANT,4349GR_COMBINE_OTHER_TEXTURE);4350CC_PRIM ();4351USE_T0 ();4352}43534354static void cc_t0_sub_prim_mul_t1_add_shade () //Aded by Gonetz4355{4356if (cmb.combine_ext)4357{4358T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4359GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4360GR_CMBX_ZERO, 0,4361GR_CMBX_B, 0);4362T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4363GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4364GR_CMBX_OTHER_TEXTURE_RGB, 0,4365GR_CMBX_ZERO, 0);4366cmb.tex |= 3;4367cmb.tex_ccolor = rdp.prim_color;4368CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4369GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,4370GR_CMBX_ZERO, 1,4371GR_CMBX_B, 0);4372}4373else4374{4375CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4376GR_COMBINE_FACTOR_ONE,4377GR_COMBINE_LOCAL_ITERATED,4378GR_COMBINE_OTHER_TEXTURE);4379MOD_0 (TMOD_TEX_SUB_COL);4380MOD_0_COL (rdp.prim_color & 0xFFFFFF00);4381T0_MUL_T1 ();4382}4383}43844385static void cc_t0_sub_prim_mul_primlod_add_prim () //Aded by Gonetz4386{4387if (cmb.combine_ext)4388{4389CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4390GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4391GR_CMBX_CONSTANT_COLOR, 0,4392GR_CMBX_B, 0);4393SETSHADE_PRIM ();4394CC_PRIMLOD ();4395}4396else4397{4398// * not guaranteed to work if another iterated alpha is set4399CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4400GR_COMBINE_FACTOR_TEXTURE_RGB,4401GR_COMBINE_LOCAL_ITERATED,4402GR_COMBINE_OTHER_CONSTANT);4403SETSHADE_PRIM ();4404SETSHADE_1MPRIMLOD ();4405CC_PRIMLOD ();4406}4407USE_T0 ();4408}44094410static void cc_t0_sub_prim_mul_prima_add_prim () //Aded by Gonetz4411{4412// * not guaranteed to work if another iterated alpha is set4413CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4414GR_COMBINE_FACTOR_TEXTURE_RGB,4415GR_COMBINE_LOCAL_ITERATED,4416GR_COMBINE_OTHER_CONSTANT);4417SETSHADE_PRIM ();4418SETSHADE_1MPRIMA ();4419CC_PRIMA ();4420USE_T0 ();4421}44224423static void cc_t0_sub_prim_mul_shadea_add_prim () //Aded by Gonetz4424{4425// * not guaranteed to work if another iterated alpha is set4426CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4427GR_COMBINE_FACTOR_LOCAL_ALPHA,4428GR_COMBINE_LOCAL_ITERATED,4429GR_COMBINE_OTHER_TEXTURE);4430SETSHADE_PRIM ();4431USE_T0 ();4432}44334434static void cc_t0_sub_prim_mul_env_add_shade () //Aded by Gonetz4435{4436if (cmb.combine_ext)4437{4438T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4439GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4440GR_CMBX_ZERO, 1,4441GR_CMBX_ZERO, 0);4442cmb.tex |= 1;4443cmb.tex_ccolor = rdp.prim_color;4444CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4445GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,4446GR_CMBX_CONSTANT_COLOR, 0,4447GR_CMBX_B, 0);4448CC_ENV ();4449}4450else4451{4452cc_t0_mul_env_add_shade ();4453}4454}44554456static void cc__t0_inter_t1_using_shadea__sub_prim_mul_env_add_shade () //Aded by Gonetz4457{4458if (cmb.combine_ext)4459{4460CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4461GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,4462GR_CMBX_CONSTANT_COLOR, 0,4463GR_CMBX_B, 0);4464//have to pass shade alpha to combiner4465ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,4466GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,4467GR_CMBX_ZERO, 0,4468GR_CMBX_ZERO, 0);4469}4470else4471{4472CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4473GR_COMBINE_FACTOR_TEXTURE_RGB,4474GR_COMBINE_LOCAL_ITERATED,4475GR_COMBINE_OTHER_CONSTANT);4476}4477CC_ENV ();4478SUBSHADE_PRIMMULENV ();4479T0_INTER_T1_USING_SHADEA ();4480}448144824483static void cc_t0_sub_prim_mul_env_add_prim () //Aded by Gonetz4484{4485CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4486GR_COMBINE_FACTOR_TEXTURE_RGB,4487GR_COMBINE_LOCAL_ITERATED,4488GR_COMBINE_OTHER_CONSTANT);4489CC_ENV ();4490SETSHADE_PRIM ();4491SETSHADE_1MENV ();4492USE_T0 ();4493}44944495static void cc_t0_sub_prim_mul_enva_add_prim () //Aded by Gonetz414496{4497if (cmb.combine_ext)4498{4499CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4500GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4501GR_CMBX_CONSTANT_COLOR, 0,4502GR_CMBX_B, 0);4503SETSHADE_PRIM ();4504CC_ENVA ();4505}4506else4507{4508CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4509GR_COMBINE_FACTOR_ONE,4510GR_COMBINE_LOCAL_CONSTANT,4511GR_COMBINE_OTHER_TEXTURE);4512CC_PRIM ();4513MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);4514MOD_0_COL (rdp.prim_color & 0xFFFFFF00);4515MOD_0_FAC (rdp.env_color & 0xFF);4516}4517USE_T0 ();4518}45194520static void cc_t0_sub_prim_mul_primlod_add_env () //Aded by Gonetz4521{4522CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4523GR_COMBINE_FACTOR_ONE,4524GR_COMBINE_LOCAL_CONSTANT,4525GR_COMBINE_OTHER_TEXTURE);4526CC_ENV ();4527MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);4528MOD_0_COL (rdp.prim_color & 0xFFFFFF00);4529MOD_0_FAC (lod_frac & 0xFF);4530USE_T0 ();4531}45324533static void cc_t0_sub__prim_mul_env () //Aded by Gonetz4534{4535if ( (rdp.prim_color & 0xFFFFFF00) == 0xFFFFFF00 && (rdp.env_color & 0xFFFFFF00) == 0xFFFFFF00)4536{4537CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,4538GR_COMBINE_FACTOR_TEXTURE_RGB,4539GR_COMBINE_LOCAL_CONSTANT,4540GR_COMBINE_OTHER_NONE);4541CC_PRIM ();4542}4543else4544{4545CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,4546GR_COMBINE_FACTOR_ONE,4547GR_COMBINE_LOCAL_ITERATED,4548GR_COMBINE_OTHER_TEXTURE);4549SETSHADE_PRIM ();4550SETSHADE_ENV ();4551}4552USE_T0 ();4553}45544555static void cc__t0_mul_t1__sub_prim_mul__t0t1a__add_prim () //Aded by Gonetz4556{4557// * not guaranteed to work if another iterated alpha is set4558CCMB (GR_COMBINE_FUNCTION_BLEND,4559GR_COMBINE_FACTOR_TEXTURE_ALPHA,4560GR_COMBINE_LOCAL_CONSTANT,4561GR_COMBINE_OTHER_TEXTURE);4562CC_PRIM ();4563T0_MUL_T1 ();4564A_T0_MUL_T1 ();4565}45664567static void cc__t1_inter_t0_using_enva__sub_prim_mul_prima_add_prim () //Aded by Gonetz4568{4569// * not guaranteed to work if another iterated alpha is set4570CCMB (GR_COMBINE_FUNCTION_BLEND,4571GR_COMBINE_FACTOR_LOCAL_ALPHA,4572GR_COMBINE_LOCAL_CONSTANT,4573GR_COMBINE_OTHER_TEXTURE);4574CC_PRIM ();4575CA_PRIM ();4576wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);4577T1_INTER_T0_USING_FACTOR (factor);4578}45794580static void cc_t0_sub_prim_mul_shade_add_env ()4581{4582if (cmb.combine_ext)4583{4584T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4585GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4586GR_CMBX_ZERO, 1,4587GR_CMBX_ZERO, 0);4588cmb.tex |= 1;4589cmb.tex_ccolor = rdp.prim_color;4590CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4591GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,4592GR_CMBX_ITRGB, 0,4593GR_CMBX_B, 0);4594CC_ENV ();4595}4596else4597{4598CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4599GR_COMBINE_FACTOR_TEXTURE_RGB,4600GR_COMBINE_LOCAL_CONSTANT,4601GR_COMBINE_OTHER_ITERATED);4602CC_ENV ();4603MOD_0 (TMOD_TEX_SUB_COL);4604MOD_0_COL (rdp.prim_color & 0xFFFFFF00);4605USE_T0 ();4606}4607}46084609static void cc_t1_sub_prim_mul_shade_add_env ()4610{4611if (cmb.combine_ext)4612{4613T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4614GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4615GR_CMBX_ZERO, 1,4616GR_CMBX_ZERO, 0);4617T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,4618GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4619GR_CMBX_ZERO, 1,4620GR_CMBX_ZERO, 0);4621cmb.tex |= 2;4622cmb.tex_ccolor = rdp.prim_color;4623CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4624GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,4625GR_CMBX_ITRGB, 0,4626GR_CMBX_B, 0);4627CC_ENV ();4628}4629else4630{4631CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4632GR_COMBINE_FACTOR_TEXTURE_RGB,4633GR_COMBINE_LOCAL_CONSTANT,4634GR_COMBINE_OTHER_ITERATED);4635CC_ENV ();4636MOD_1 (TMOD_TEX_SUB_COL);4637MOD_1_COL (rdp.prim_color & 0xFFFFFF00);4638USE_T1 ();4639}4640}46414642static void cc_t1_sub_k4_mul_prima_add_t0 ()4643{4644if (cmb.combine_ext)4645{4646T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4647GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4648GR_CMBX_DETAIL_FACTOR, 1,4649GR_CMBX_ZERO, 0);4650T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,4651GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4652GR_CMBX_ZERO, 1,4653GR_CMBX_ZERO, 0);4654cmb.tex |= 3;4655CC_BYTE (rdp.K4);4656cmb.tex_ccolor = cmb.ccolor;4657percent = (float)(rdp.prim_color&0xFF) / 255.0f;4658cmb.dc0_detailmax = cmb.dc1_detailmax = percent;4659CCMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,4660GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4661GR_CMBX_CONSTANT_COLOR, 0,4662GR_CMBX_B, 0);4663}4664else4665{4666CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4667GR_COMBINE_FACTOR_ONE,4668GR_COMBINE_LOCAL_NONE,4669GR_COMBINE_OTHER_TEXTURE);4670T0_ADD_T1 ();4671}4672}46734674static void cc__t0_sub_prim_mul_shade_add_env__mul_shade ()4675{4676if (cmb.combine_ext)4677{4678T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4679GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4680GR_CMBX_ITRGB, 0,4681GR_CMBX_ZERO, 0);4682cmb.tex |= 1;4683cmb.tex_ccolor = rdp.prim_color;4684CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4685GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,4686GR_CMBX_ITRGB, 0,4687GR_CMBX_ZERO, 0);4688CC_ENV ();4689}4690else4691{4692CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4693GR_COMBINE_FACTOR_TEXTURE_RGB,4694GR_COMBINE_LOCAL_CONSTANT,4695GR_COMBINE_OTHER_ITERATED);4696CC_ENV ();4697MOD_0 (TMOD_TEX_SUB_COL);4698MOD_0_COL (rdp.prim_color & 0xFFFFFF00);4699USE_T0 ();4700}4701}47024703static void cc__t0_sub_prim_mul_shade_add_env__mul_shadea ()4704{4705if (cmb.combine_ext)4706{4707T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4708GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4709GR_CMBX_ITRGB, 0,4710GR_CMBX_ZERO, 0);4711cmb.tex |= 1;4712cmb.tex_ccolor = rdp.prim_color;4713CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4714GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,4715GR_CMBX_ITALPHA, 0,4716GR_CMBX_ZERO, 0);4717CC_ENV ();4718}4719else4720{4721CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4722GR_COMBINE_FACTOR_TEXTURE_RGB,4723GR_COMBINE_LOCAL_CONSTANT,4724GR_COMBINE_OTHER_ITERATED);4725MULSHADE_SHADEA();4726CC_ENV ();4727MOD_0 (TMOD_TEX_SUB_COL);4728MOD_0_COL (rdp.prim_color & 0xFFFFFF00);4729USE_T0 ();4730}4731}47324733static void cc__t0_mul_shade__sub_env_mul_shadea_add_env () //Aded by Gonetz4734{4735if (rdp.tiles[rdp.cur_tile].format == 4)4736{4737CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4738GR_COMBINE_FACTOR_OTHER_ALPHA,4739GR_COMBINE_LOCAL_CONSTANT,4740GR_COMBINE_OTHER_ITERATED);4741CC_ENV ();4742}4743else if (rdp.tiles[rdp.cur_tile].format == 2)4744{4745CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4746GR_COMBINE_FACTOR_LOCAL,4747GR_COMBINE_LOCAL_ITERATED,4748GR_COMBINE_OTHER_TEXTURE);4749USE_T0 ();4750}4751else4752{4753cc_t0 ();4754}4755}47564757static void cc_t0_sub_env_mul_k5_add_prim () //Aded by Gonetz4758{4759CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4760GR_COMBINE_FACTOR_ONE,4761GR_COMBINE_LOCAL_CONSTANT,4762GR_COMBINE_OTHER_TEXTURE);4763CC_PRIM ();4764MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);4765MOD_0_COL (rdp.env_color & 0xFFFFFF00);4766MOD_0_FAC (rdp.K5);4767USE_T0 ();4768}47694770static void cc_t0_sub_k4_mul_k5_add_t0 () //Aded by Gonetz4771{4772if (cmb.combine_ext)4773{4774CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4775GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4776GR_CMBX_CONSTANT_COLOR, 0,4777GR_CMBX_B, 0);4778wxUint32 temp = rdp.prim_lodfrac;4779rdp.prim_lodfrac = rdp.K4;4780SETSHADE_PRIMLOD ();4781rdp.prim_lodfrac = temp;4782CC_K5 ();4783USE_T0 ();4784}4785else4786{4787cc_t0 ();4788}4789}47904791static void cc__t0_inter_t1_using_t0__sub_shade_mul_prima_add_shade () //Aded by Gonetz4792{4793if (cmb.combine_ext)4794{4795cmb.tex |= 3;4796CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4797GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4798GR_CMBX_CONSTANT_COLOR, 0,4799GR_CMBX_B, 0);4800CC_PRIMA();4801T0_INTER_T1_USING_T0 ();4802}4803else4804{4805// * not guaranteed to work if another iterated alpha is set4806CCMB (GR_COMBINE_FUNCTION_BLEND,4807GR_COMBINE_FACTOR_LOCAL_ALPHA,4808GR_COMBINE_LOCAL_ITERATED,4809GR_COMBINE_OTHER_TEXTURE);4810SETSHADE_A_PRIM ();4811T1_INTER_T0_USING_T0 (); //strange, but this one looks better4812}4813}48144815static void cc_t0_sub__prim_mul_shade__mul_enva_add__prim_mul_shade () //Aded by Gonetz4816{4817// * not guaranteed to work if another iterated alpha is set4818CCMB (GR_COMBINE_FUNCTION_BLEND,4819GR_COMBINE_FACTOR_LOCAL_ALPHA,4820GR_COMBINE_LOCAL_ITERATED,4821GR_COMBINE_OTHER_TEXTURE);4822MULSHADE_PRIM ();4823SETSHADE_A_ENV ();4824USE_T0 ();4825}48264827static void cc_t0_sub_env_mul_t0_add_env () //Aded by Gonetz4828{4829CCMB (GR_COMBINE_FUNCTION_BLEND,4830GR_COMBINE_FACTOR_TEXTURE_RGB,4831GR_COMBINE_LOCAL_CONSTANT,4832GR_COMBINE_OTHER_TEXTURE);4833CC_ENV ();4834USE_T0 ();4835//(t0-env)*t0+env = t0*t0 + (1-t0)*env4836}48374838static void cc_t0_sub_env_mul_prima_add_env () //Aded by Gonetz4839{4840if (cmb.combine_ext)4841{4842T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4843GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4844GR_CMBX_DETAIL_FACTOR, 0,4845GR_CMBX_B, 0);4846cmb.tex |= 1;4847percent = (rdp.prim_color&0xFF) / 255.0f;4848cmb.dc0_detailmax = cmb.dc1_detailmax = percent;4849}4850else4851{4852MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);4853MOD_0_COL (rdp.env_color & 0xFFFFFF00);4854wxUint32 prima = rdp.prim_color & 0xFF;4855MOD_0_COL1 ((prima<<24)|(prima|16)|(prima<<8));4856USE_T0 ();4857}4858CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4859GR_COMBINE_FACTOR_ONE,4860GR_COMBINE_LOCAL_NONE,4861GR_COMBINE_OTHER_TEXTURE);4862}48634864static void cc_t0_sub_env_mul_k5_add_env () //Aded by Gonetz4865{4866CCMB (GR_COMBINE_FUNCTION_BLEND,4867GR_COMBINE_FACTOR_LOCAL_ALPHA,4868GR_COMBINE_LOCAL_CONSTANT,4869GR_COMBINE_OTHER_TEXTURE);4870cmb.ccolor = (rdp.env_color&0xFFFFFF00) | rdp.K5;4871USE_T0 ();4872}48734874static void cc_t0_sub_env_mul_prim_add_shade () //Aded by Gonetz4875{4876CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4877GR_COMBINE_FACTOR_TEXTURE_RGB,4878GR_COMBINE_LOCAL_ITERATED,4879GR_COMBINE_OTHER_CONSTANT);4880CC_PRIM ();4881MOD_0 (TMOD_TEX_SUB_COL);4882MOD_0_COL (rdp.env_color & 0xFFFFFF00);4883USE_T0 ();4884}48854886static void cc_t0_sub_env_mul_shade_add_prim () //Aded by Gonetz4887{4888CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4889GR_COMBINE_FACTOR_TEXTURE_RGB,4890GR_COMBINE_LOCAL_CONSTANT,4891GR_COMBINE_OTHER_ITERATED);4892CC_PRIM ();4893if (cmb.combine_ext)4894{4895T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4896GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4897GR_CMBX_ZERO, 1,4898GR_CMBX_ZERO, 0);4899cmb.tex |= 1;4900cmb.tex_ccolor = rdp.env_color;4901}4902else4903{4904MOD_0 (TMOD_TEX_SUB_COL);4905MOD_0_COL (rdp.env_color & 0xFFFFFF00);4906USE_T0 ();4907}4908}49094910static void cc__t0_sub_t1_mul_enva_add_shade__sub_env_mul_prim ()4911// (t0-t1)*env_a+shade, (cmb-env)*prim+04912{4913if (cmb.combine_ext)4914{4915T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4916GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4917GR_CMBX_ZERO, 0,4918GR_CMBX_B, 0);4919T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4920GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,4921GR_CMBX_TMU_CCOLOR, 0,4922GR_CMBX_ITRGB, 0);4923cmb.tex |= 3;4924CC_COLMULBYTE(rdp.prim_color, (rdp.env_color&0xFF));4925cmb.tex_ccolor = cmb.ccolor;4926CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,4927GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,4928GR_CMBX_ZERO, 1,4929GR_CMBX_TEXTURE_RGB, 0);4930MULSHADE_PRIM ();4931CC_PRIMMULENV ();4932}4933else4934{4935cc_t0_sub_env_mul_prim_add_shade();4936}4937}49384939static void cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_prim () //Aded by Gonetz4940{4941if (!(rdp.env_color&0xFFFFFF00))4942{4943cc__t0_inter_t1_using_primlod__mul_shade_add_prim ();4944return;4945}4946if (!(rdp.prim_color&0xFFFFFF00))4947{4948if (!cmb.combine_ext)4949{4950cc_t0_sub_env_mul_shade ();4951return;4952}4953CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4954GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,4955GR_CMBX_ITRGB, 0,4956GR_CMBX_ZERO, 0);4957CC_ENV ();4958T0_INTER_T1_USING_FACTOR (lod_frac);4959return;4960}4961cc__t0_inter_t1_using_primlod__mul_shade_add_prim ();4962}49634964static void cc__t0_sub_env_mul_shade_add_prim__mul_shade () //Aded by Gonetz4965{4966if (!cmb.combine_ext)4967{4968cc_t0_sub_env_mul_shade_add_prim ();4969return;4970}4971T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4972GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4973GR_CMBX_ITRGB, 0,4974GR_CMBX_ZERO, 0);4975cmb.tex_ccolor = rdp.env_color;4976cmb.tex |= 1;4977CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4978GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,4979GR_CMBX_ITRGB, 0,4980GR_CMBX_ZERO, 0);4981CC_PRIM ();4982}49834984static void cc__t0_sub_env_mul_shade_add_prim__mul_shadea () //Aded by Gonetz4985{4986if (!cmb.combine_ext)4987{4988cc_t0_sub_env_mul_shade_add_prim ();4989return;4990}4991T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4992GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,4993GR_CMBX_ITRGB, 0,4994GR_CMBX_B, 0);4995cmb.tex_ccolor = rdp.prim_color;4996cmb.tex |= 1;4997MOD_0 (TMOD_TEX_SUB_COL);4998MOD_0_COL (rdp.env_color & 0xFFFFFF00);49995000CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,5001GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,5002GR_CMBX_ITALPHA, 0,5003GR_CMBX_ZERO, 0);5004}50055006static void cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_env ()5007{5008// (t1-t0)*primlod+t0, (cmb-env)*shade+env5009if (cmb.combine_ext)5010{5011CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,5012GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,5013GR_CMBX_ITRGB, 0,5014GR_CMBX_B, 0);5015}5016else5017{5018CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5019GR_COMBINE_FACTOR_TEXTURE_RGB,5020GR_COMBINE_LOCAL_CONSTANT,5021GR_COMBINE_OTHER_ITERATED);5022}5023CC_ENV ();5024T0_INTER_T1_USING_FACTOR (lod_frac);5025}502650275028static void cc_t0_sub_env_mul_enva_add_prim () //Aded by Gonetz5029{5030CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5031GR_COMBINE_FACTOR_ONE,5032GR_COMBINE_LOCAL_CONSTANT,5033GR_COMBINE_OTHER_TEXTURE);5034CC_PRIM ();5035MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);5036MOD_0_COL (rdp.env_color & 0xFFFFFF00);5037MOD_0_FAC (rdp.env_color & 0xFF);5038USE_T0 ();5039}50405041static void cc_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz5042{5043CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5044GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5045GR_COMBINE_LOCAL_CONSTANT,5046GR_COMBINE_OTHER_TEXTURE);5047CC_PRIM ();5048USE_T0 ();5049//(1-t)*prim+t == (1-prim)*t+prim5050}50515052static void cc_one_sub_t1_mul_prim_add_t1 () //Aded by Gonetz5053{5054CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5055GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5056GR_COMBINE_LOCAL_CONSTANT,5057GR_COMBINE_OTHER_TEXTURE);5058CC_PRIM ();5059USE_T1 ();5060//(1-t)*prim+t == (1-prim)*t+prim5061}50625063static void cc_one_sub_t1_mul_env_add_t1 () //Aded by Gonetz5064{5065CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5066GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5067GR_COMBINE_LOCAL_CONSTANT,5068GR_COMBINE_OTHER_TEXTURE);5069CC_ENV ();5070USE_T1 ();5071//(1-t)*env+t == (1-env)*t+env5072}50735074static void cc_one_sub_t0_mul_primlod_add_t0 () //Aded by Gonetz5075{5076CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5077GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5078GR_COMBINE_LOCAL_CONSTANT,5079GR_COMBINE_OTHER_TEXTURE);5080CC_PRIMLOD ();5081USE_T0 ();5082//(1-t)*primlod+t == (1-primlod)*t+primlod5083}50845085static void cc_one_sub_t0_mul_prima_add_t0 () //Aded by Gonetz5086{5087CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5088GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,5089GR_COMBINE_LOCAL_CONSTANT,5090GR_COMBINE_OTHER_TEXTURE);5091CA_PRIM ();5092USE_T0 ();5093//(1-t)*prima+t == (1-prima)*t+prima5094}50955096static void cc_one_sub__t0_inter_t1_using_enva__mul_prim_add__t0_inter_t1_using_enva () //Aded by Gonetz5097{5098CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5099GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5100GR_COMBINE_LOCAL_CONSTANT,5101GR_COMBINE_OTHER_TEXTURE);5102CC_PRIM ();5103wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);5104T0_INTER_T1_USING_FACTOR (factor);5105//(1-t)*prim+t == (1-prim)*t+prim5106}51075108static void cc_one_sub_t0_mul_shade_add_t0 ()5109{5110CCMB (GR_COMBINE_FUNCTION_BLEND,5111GR_COMBINE_FACTOR_TEXTURE_RGB,5112GR_COMBINE_LOCAL_ITERATED,5113GR_COMBINE_OTHER_CONSTANT);5114CC (0xFFFFFFFF);5115USE_T0 ();5116}51175118static void cc_one_sub_prim_mul_t0_add_prim () //Aded by Gonetz5119{5120CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5121GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5122GR_COMBINE_LOCAL_CONSTANT,5123GR_COMBINE_OTHER_TEXTURE);5124CC_PRIM ();5125USE_T0 ();5126}51275128static void cc_one_sub_prim_mul_t0a_add_prim ()5129{5130if (cmb.combine_ext)5131{5132CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ONE_MINUS_X,5133GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,5134GR_CMBX_TEXTURE_ALPHA, 0,5135GR_CMBX_B, 0);5136CC_PRIM ();5137} else {5138CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5139GR_COMBINE_FACTOR_ONE,5140GR_COMBINE_LOCAL_NONE,5141GR_COMBINE_OTHER_TEXTURE);5142MOD_0 (TMOD_COL_INTER_COL1_USING_TEXA);5143MOD_0_COL (rdp.prim_color & 0xFFFFFF00);5144MOD_0_COL1 (0xFFFFFF00);5145}5146USE_T0 ();5147}51485149static void cc_one_sub_prim_mul__t0_inter_t1_using_primlod__add_prim () //Aded by Gonetz5150{5151CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5152GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5153GR_COMBINE_LOCAL_CONSTANT,5154GR_COMBINE_OTHER_TEXTURE);5155CC_PRIM ();5156T0_INTER_T1_USING_FACTOR (lod_frac);5157}51585159static void cc__one_sub_prim_mul_shade__mul_t0_add__prim_mul_shade () //Aded by Gonetz5160{5161CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5162GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5163GR_COMBINE_LOCAL_ITERATED,5164GR_COMBINE_OTHER_TEXTURE);5165MULSHADE_PRIM ();5166USE_T0 ();5167}51685169static void cc_one_sub_shade_mul__t0_inter_t1_using_primlod__add_shade () //Aded by Gonetz5170{5171CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5172GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5173GR_COMBINE_LOCAL_ITERATED,5174GR_COMBINE_OTHER_TEXTURE);5175T0_INTER_T1_USING_FACTOR (lod_frac);5176}51775178static void cc_one_sub_prim_mul_t1_add_prim () //Aded by Gonetz5179{5180CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5181GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5182GR_COMBINE_LOCAL_CONSTANT,5183GR_COMBINE_OTHER_TEXTURE);5184CC_PRIM ();5185USE_T1 ();5186}51875188static void cc_one_sub_prim_mul_env_add_prim () //Aded by Gonetz5189{5190CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5191GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5192GR_COMBINE_LOCAL_CONSTANT,5193GR_COMBINE_OTHER_ITERATED);5194CC_PRIM ();5195SETSHADE_ENV ();5196}51975198static void cc_t0_sub_prim_mul_shade_add_shade () //Aded by Gonetz5199{5200if (cmb.combine_ext)5201{5202CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,5203GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,5204GR_CMBX_ITRGB, 0,5205GR_CMBX_ITRGB, 0);5206CC_PRIM ();5207}5208else5209{5210CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5211GR_COMBINE_FACTOR_LOCAL,5212GR_COMBINE_LOCAL_ITERATED,5213GR_COMBINE_OTHER_TEXTURE);5214if (rdp.prim_color & 0xFFFFFF00)5215{5216MOD_0 (TMOD_TEX_SUB_COL);5217MOD_0_COL (rdp.prim_color & 0xFFFFFF00);5218}5219}5220USE_T0 ();5221}52225223static void cc__t0_mul_t0__sub_prim_mul_shade_add_shade () //Aded by Gonetz5224{5225if (cmb.combine_ext)5226{5227T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,5228GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5229GR_CMBX_LOCAL_TEXTURE_RGB, 0,5230GR_CMBX_ZERO, 0);5231cmb.tex |= 1;5232CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,5233GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,5234GR_CMBX_ITRGB, 0,5235GR_CMBX_ITRGB, 0);5236CC_PRIM ();5237}5238else5239cc_t0_sub_prim_mul_shade_add_shade();5240}52415242static void cc__t0_mul_t1__sub_prim_mul_shade_add_shade () //Aded by Gonetz5243{5244if (cmb.combine_ext)5245{5246CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,5247GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,5248GR_CMBX_ITRGB, 0,5249GR_CMBX_ITRGB, 0);5250CC_PRIM ();5251}5252else5253{5254CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5255GR_COMBINE_FACTOR_LOCAL,5256GR_COMBINE_LOCAL_ITERATED,5257GR_COMBINE_OTHER_TEXTURE);5258}5259T0_MUL_T1 ();5260}52615262static void cc__t0_mul_t1__sub_env_mul_shade_add_shade () //Aded by Gonetz5263{5264if (cmb.combine_ext)5265{5266CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,5267GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,5268GR_CMBX_ITRGB, 0,5269GR_CMBX_ITRGB, 0);5270CC_ENV ();5271}5272else5273{5274CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5275GR_COMBINE_FACTOR_LOCAL,5276GR_COMBINE_LOCAL_ITERATED,5277GR_COMBINE_OTHER_TEXTURE);5278}5279T0_MUL_T1 ();5280}52815282static void cc_one_sub_prim_mul_shade_add_shade () //Aded by Gonetz5283{5284CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5285GR_COMBINE_FACTOR_LOCAL,5286GR_COMBINE_LOCAL_ITERATED,5287GR_COMBINE_OTHER_CONSTANT);5288CC_1SUBPRIM ();5289}52905291static void cc_t0_inter_env_using_prima ()5292{5293CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5294GR_COMBINE_FACTOR_ONE,5295GR_COMBINE_LOCAL_NONE,5296GR_COMBINE_OTHER_TEXTURE);5297USE_T0 ();52985299MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);5300MOD_0_COL (rdp.env_color & 0xFFFFFF00);5301MOD_0_FAC (rdp.prim_color & 0xFF);5302}53035304static void cc_t0_inter_env_using_enva ()5305{5306//(env-t0)*env_a+t05307CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5308GR_COMBINE_FACTOR_ONE,5309GR_COMBINE_LOCAL_NONE,5310GR_COMBINE_OTHER_TEXTURE);5311if (cmb.combine_ext)5312{5313T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,5314GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5315GR_CMBX_TMU_CALPHA, 0,5316GR_CMBX_B, 0);5317cmb.tex_ccolor = rdp.env_color;5318cmb.tex |= 1;5319}5320else5321{5322USE_T0 ();5323MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);5324MOD_0_COL (rdp.env_color & 0xFFFFFFFF);5325MOD_0_FAC (rdp.env_color & 0xFF);5326}5327}53285329static void cc_t0_inter_noise_using_prim ()5330{5331CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5332GR_COMBINE_FACTOR_ONE,5333GR_COMBINE_LOCAL_NONE,5334GR_COMBINE_OTHER_TEXTURE);5335USE_T0 ();53365337MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);5338MOD_0_COL (rdp.prim_color);5339rdp.noise = RDP::noise_texture;5340}53415342static void cc_t0_inter_noise_using_env ()5343{5344CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5345GR_COMBINE_FACTOR_ONE,5346GR_COMBINE_LOCAL_NONE,5347GR_COMBINE_OTHER_TEXTURE);5348USE_T0 ();53495350MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);5351MOD_0_COL (rdp.env_color);5352rdp.noise = RDP::noise_texture;5353}53545355static void cc_t0_sub_env_mul_enva_add_env ()5356{5357CCMB (GR_COMBINE_FUNCTION_BLEND,5358GR_COMBINE_FACTOR_LOCAL_ALPHA,5359GR_COMBINE_LOCAL_CONSTANT,5360GR_COMBINE_OTHER_TEXTURE);5361CC_ENV ();5362CA_ENV ();5363USE_T0 ();5364}53655366//Added by Gonetz5367static void cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_env ()5368{5369CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5370GR_COMBINE_FACTOR_TEXTURE_RGB,5371GR_COMBINE_LOCAL_ITERATED,5372GR_COMBINE_OTHER_CONSTANT);5373CC_1SUBPRIM ();5374SETSHADE_PRIM ();5375SETSHADE_ENV ();5376T0_MUL_T1 ();5377}53785379//Added by Gonetz5380static void cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade ()5381{5382CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5383GR_COMBINE_FACTOR_TEXTURE_RGB,5384GR_COMBINE_LOCAL_ITERATED,5385GR_COMBINE_OTHER_CONSTANT);5386CC_1SUBPRIM ();5387MULSHADE_PRIM ();5388T0_MUL_T1 ();5389}53905391//Added by Gonetz5392static void cc_one_sub_prim_mul__t0_inter_t1_using_enva__add_prim ()5393{5394CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5395GR_COMBINE_FACTOR_TEXTURE_RGB,5396GR_COMBINE_LOCAL_ITERATED,5397GR_COMBINE_OTHER_CONSTANT);5398CC_1SUBPRIM ();5399SETSHADE_PRIM ();5400wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);5401T0_INTER_T1_USING_FACTOR (factor);5402}54035404static void cc_one_sub_env_mul__t0_inter_t1_using_primlod__add_env () //Aded by Gonetz5405{5406CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5407GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5408GR_COMBINE_LOCAL_CONSTANT,5409GR_COMBINE_OTHER_TEXTURE);5410CC_ENV ();5411T0_INTER_T1_USING_FACTOR (lod_frac);5412}54135414static void cc_one_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env () //Aded by Gonetz5415{5416CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5417GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5418GR_COMBINE_LOCAL_CONSTANT,5419GR_COMBINE_OTHER_TEXTURE);5420CC_ENV ();5421T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();5422}54235424static void cc_one_sub_env_mul_t0_add_prim_mul_env () //Aded by Gonetz5425{5426CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5427GR_COMBINE_FACTOR_TEXTURE_RGB,5428GR_COMBINE_LOCAL_ITERATED,5429GR_COMBINE_OTHER_CONSTANT);5430CC_1SUBENV ();5431SETSHADE_PRIM ();5432SETSHADE_ENV ();5433USE_T0 ();5434}54355436static void cc_one_sub_env_mul_t0_add_env () //Aded by Gonetz5437{5438CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5439GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5440GR_COMBINE_LOCAL_CONSTANT,5441GR_COMBINE_OTHER_TEXTURE);5442CC_ENV ();5443USE_T0 ();5444}54455446static void cc_one_sub_env_mul_t0_add_shade () //Aded by Gonetz5447{5448CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5449GR_COMBINE_FACTOR_TEXTURE_RGB,5450GR_COMBINE_LOCAL_ITERATED,5451GR_COMBINE_OTHER_CONSTANT);5452CC_1SUBENV ();5453USE_T0 ();5454}54555456static void cc_one_sub_env_mul_prim_add_env () //Aded by Gonetz5457{5458CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5459GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5460GR_COMBINE_LOCAL_CONSTANT,5461GR_COMBINE_OTHER_ITERATED);5462CC_ENV ();5463SETSHADE_PRIM ();5464}54655466static void cc_one_sub_env_mul_prim_add_shade () //Aded by Gonetz5467{5468CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5469GR_COMBINE_FACTOR_ONE,5470GR_COMBINE_LOCAL_ITERATED,5471GR_COMBINE_OTHER_CONSTANT);5472CC_1SUBENV ();5473CC_C1MULC2 (rdp.prim_color, cmb.ccolor);5474}54755476static void cc_one_sub_env_mul_shade_add_env () //Aded by Gonetz5477{5478CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5479GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5480GR_COMBINE_LOCAL_CONSTANT,5481GR_COMBINE_OTHER_ITERATED);5482CC_ENV ();5483}54845485static void cc_one_sub_env_mul_prim_add__t0_inter_t1_using_env () //Aded by Gonetz5486{5487CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5488GR_COMBINE_FACTOR_ONE,5489GR_COMBINE_LOCAL_ITERATED,5490GR_COMBINE_OTHER_TEXTURE);5491SETSHADE_PRIM ();5492SETSHADE_1MENV ();5493T0_INTER_T1_USING_ENV ();5494}54955496static void cc_one_sub_shade_mul_t0_add_shade ()5497{5498CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5499GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5500GR_COMBINE_LOCAL_ITERATED,5501GR_COMBINE_OTHER_TEXTURE);5502USE_T0 ();5503}55045505static void cc_one_sub_shade_mul__t0_mul_shadea__add_shade ()5506{5507CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5508GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5509GR_COMBINE_LOCAL_ITERATED,5510GR_COMBINE_OTHER_TEXTURE);5511if (cmb.combine_ext)5512{5513T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5514GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,5515GR_CMBX_ITALPHA, 0,5516GR_CMBX_ZERO, 0);5517cmb.tex |= 1;5518}5519else5520{5521USE_T0 ();5522}5523}55245525static void cc_one_sub_shade_mul_env_add_shade ()5526{5527CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5528GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,5529GR_COMBINE_LOCAL_ITERATED,5530GR_COMBINE_OTHER_CONSTANT);5531CC_ENV ();5532}55335534static void cc_one_sub_shade_mul_shadea_add_shade ()5535{5536CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5537GR_COMBINE_FACTOR_LOCAL_ALPHA,5538GR_COMBINE_LOCAL_ITERATED,5539GR_COMBINE_OTHER_CONSTANT);5540CC (0xFFFFFFFF);5541}55425543///*5544static void cc_t0_sub_env_mul_prim_add_env () //Aded by Gonetz5545{5546CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5547GR_COMBINE_FACTOR_TEXTURE_RGB,5548GR_COMBINE_LOCAL_ITERATED,5549GR_COMBINE_OTHER_CONSTANT);5550SETSHADE_1MPRIM();5551SETSHADE_ENV();5552CC_PRIM ();5553USE_T0 ();5554//(t0-env)*prim+env == t0*prim + env*(1-prim)5555}5556//*/5557static void cc__t0_inter_t1_using_t1a__sub_env_mul_enva_add_env () //Aded by Gonetz5558{5559CCMB (GR_COMBINE_FUNCTION_BLEND,5560GR_COMBINE_FACTOR_LOCAL_ALPHA,5561GR_COMBINE_LOCAL_CONSTANT,5562GR_COMBINE_OTHER_TEXTURE);5563cmb.ccolor = rdp.env_color;5564T0_INTER_T1_USING_T1A ();5565}55665567static void cc_t0_sub_shade_mul_t0a_add_shade ()5568{5569CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5570GR_COMBINE_FACTOR_TEXTURE_ALPHA,5571GR_COMBINE_LOCAL_ITERATED,5572GR_COMBINE_OTHER_TEXTURE);5573USE_T0 ();5574A_USE_T0 ();5575}55765577static void cc_t0_sub_shade_mul_prima_add_shade () //Aded by Gonetz5578{5579// * not guaranteed to work if another iterated alpha is set5580CCMB (GR_COMBINE_FUNCTION_BLEND,5581GR_COMBINE_FACTOR_LOCAL_ALPHA,5582GR_COMBINE_LOCAL_ITERATED,5583GR_COMBINE_OTHER_TEXTURE);5584SETSHADE_A_PRIM ();5585USE_T0 ();5586}55875588static void cc_t0_sub_shade_mul_shadea_add_shade () //Aded by Gonetz5589{5590// * not guaranteed to work if another iterated alpha is set5591CCMB (GR_COMBINE_FUNCTION_BLEND,5592GR_COMBINE_FACTOR_LOCAL_ALPHA,5593GR_COMBINE_LOCAL_ITERATED,5594GR_COMBINE_OTHER_TEXTURE);5595USE_T0 ();5596}55975598static void cc__t0_mul_t1_add_env__mul_shadea_add_shade ()5599{5600if (cmb.combine_ext)5601{5602T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5603GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5604GR_CMBX_ZERO, 0,5605GR_CMBX_B, 0);5606T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,5607GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,5608GR_CMBX_LOCAL_TEXTURE_RGB, 0,5609GR_CMBX_B, 0);5610cmb.tex_ccolor = rdp.env_color;5611cmb.tex |= 3;5612}5613else5614{5615T0_MUL_T1 ();5616}5617// * not guaranteed to work if another iterated alpha is set5618CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5619GR_COMBINE_FACTOR_LOCAL_ALPHA,5620GR_COMBINE_LOCAL_ITERATED,5621GR_COMBINE_OTHER_TEXTURE);5622}56235624static void cc_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz5625{5626CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5627GR_COMBINE_FACTOR_TEXTURE_RGB,5628GR_COMBINE_LOCAL_ITERATED,5629GR_COMBINE_OTHER_CONSTANT);5630CC_1SUBENV ();5631SETSHADE_PRIM ();5632SETSHADE_ENV ();5633USE_T0 ();5634//(prim-t0)*env+t0 == prim*env + t0*(1-env)5635}56365637static void cc_prim_sub_t0_mul_t1_add_t0 () //Aded by Gonetz5638{5639if (!cmb.combine_ext)5640{5641cc_t0_mul_t1 ();5642return;5643}5644T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5645GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5646GR_CMBX_ZERO, 0,5647GR_CMBX_B, 0);5648T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,5649GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5650GR_CMBX_OTHER_TEXTURE_RGB, 0,5651GR_CMBX_B, 0);5652cmb.tex_ccolor = rdp.prim_color;5653cmb.tex |= 3;5654CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5655GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5656GR_CMBX_ZERO, 0,5657GR_CMBX_B, 0);5658}56595660static void cc_env_sub_t0_mul_prim_add_t0 () //Aded by Gonetz5661{5662CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5663GR_COMBINE_FACTOR_TEXTURE_RGB,5664GR_COMBINE_LOCAL_ITERATED,5665GR_COMBINE_OTHER_CONSTANT);5666CC_1SUBPRIM ();5667SETSHADE_PRIM ();5668SETSHADE_ENV ();5669USE_T0 ();5670//(env-t0)*prim+t0 == prim*env + t0*(1-prim)5671}56725673static void cc_env_sub_t0_mul_shade_add_t0 () //Aded by Gonetz5674{5675if (!cmb.combine_ext)5676{5677cc_t0_mul_shade ();5678return;5679}5680CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,5681GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5682GR_CMBX_ITRGB, 0,5683GR_CMBX_B, 0);5684CC_ENV ();5685USE_T0 ();5686}56875688static void cc_prim_sub_env_mul_t0_add_prim ()5689{5690CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5691GR_COMBINE_FACTOR_TEXTURE_RGB,5692GR_COMBINE_LOCAL_CONSTANT,5693GR_COMBINE_OTHER_ITERATED);5694CC_PRIM ();5695SETSHADE_PRIMSUBENV ();5696USE_T0 ();5697}56985699static void cc_prim_sub_env_mul_t0_add_env ()5700{5701CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5702GR_COMBINE_FACTOR_TEXTURE_RGB,5703GR_COMBINE_LOCAL_ITERATED,5704GR_COMBINE_OTHER_CONSTANT);5705CC_PRIM ();5706SETSHADE_ENV ();5707USE_T0 ();5708}57095710static void cc__prim_sub_env_mul_t0_add_env__add_primlod ()5711{5712if (!cmb.combine_ext)5713{5714cc_prim_sub_env_mul_t0_add_env ();5715return;5716}5717T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,5718GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,5719GR_CMBX_ITRGB, 0,5720GR_CMBX_B, 0);5721cmb.tex_ccolor = rdp.env_color;5722cmb.tex |= 1;5723SETSHADE_PRIMSUBENV ();5724CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,5725GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,5726GR_CMBX_ZERO, 1,5727GR_CMBX_TEXTURE_RGB, 0);5728CC_PRIMLOD ();5729}57305731static void cc__prim_sub_env_mul_t0_add_env__add_shadea ()5732{5733if (!cmb.combine_ext)5734{5735cc_prim_sub_env_mul_t0_add_env ();5736return;5737}5738T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,5739GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,5740GR_CMBX_ITRGB, 0,5741GR_CMBX_B, 0);5742cmb.tex_ccolor = rdp.env_color;5743cmb.tex |= 1;5744SETSHADE_PRIMSUBENV ();5745CCMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,5746GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,5747GR_CMBX_ZERO, 1,5748GR_CMBX_TEXTURE_RGB, 0);5749}57505751static void cc_prim_sub_env_mul__t0_mul_t1a__add_env ()5752{5753CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5754GR_COMBINE_FACTOR_TEXTURE_RGB,5755GR_COMBINE_LOCAL_ITERATED,5756GR_COMBINE_OTHER_CONSTANT);5757CC_PRIM ();5758SETSHADE_ENV ();5759T0_MUL_T1A ();5760}57615762static void cc_prim_sub_env_mul__t0_mul_prim__add_env ()5763{5764CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5765GR_COMBINE_FACTOR_TEXTURE_RGB,5766GR_COMBINE_LOCAL_ITERATED,5767GR_COMBINE_OTHER_CONSTANT);5768CC_PRIM ();5769SETSHADE_ENV ();5770if (cmb.combine_ext)5771{5772T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,5773GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5774GR_CMBX_TMU_CCOLOR, 0,5775GR_CMBX_ZERO, 0);5776cmb.tex_ccolor = rdp.prim_color;5777cmb.tex |= 1;5778}5779else5780{5781USE_T0 ();5782}5783}57845785static void cc_prim_sub_env_mul_t0_mul_shade_add_env ()5786{5787if (cmb.combine_ext)5788{5789T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,5790GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5791GR_CMBX_TMU_CCOLOR, 0,5792GR_CMBX_ZERO, 0);5793CC_PRIMSUBENV ();5794cmb.tex_ccolor = cmb.ccolor;5795cmb.tex |= 1;5796CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5797GR_COMBINE_FACTOR_TEXTURE_RGB,5798GR_COMBINE_LOCAL_CONSTANT,5799GR_COMBINE_OTHER_ITERATED);5800CC_ENV ();5801}5802else5803{5804cc_t0_mul_prim_mul_shade ();5805}5806}58075808static void cc_prim_sub_env_mul__t0_sub_t0_mul_prima__add_env ()5809{5810CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5811GR_COMBINE_FACTOR_TEXTURE_RGB,5812GR_COMBINE_LOCAL_ITERATED,5813GR_COMBINE_OTHER_CONSTANT);5814CC_PRIM ();5815SETSHADE_ENV ();5816rdp.best_tex = 0;5817cmb.tex |= 1;5818cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;5819cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;5820percent = (float)(rdp.prim_color&0xFF) / 255.0f;5821cmb.dc0_detailmax = cmb.dc1_detailmax = percent;5822}58235824static void cc_prim_sub_env_mul__one_sub_t0_mul_primlod_add_prim__add_env ()5825{5826CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5827GR_COMBINE_FACTOR_TEXTURE_RGB,5828GR_COMBINE_LOCAL_CONSTANT,5829GR_COMBINE_OTHER_ITERATED);5830CC_ENV ();5831SETSHADE_PRIM ();5832if (cmb.combine_ext)5833{5834T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,5835GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,5836GR_CMBX_DETAIL_FACTOR, 0,5837GR_CMBX_B, 0);5838cmb.tex_ccolor = rdp.prim_color;5839cmb.tex |= 1;5840cmb.dc0_detailmax = cmb.dc1_detailmax = (float)lod_frac / 255.0f;5841}5842else5843{5844USE_T0 ();5845}5846}58475848static void cc_prim_sub_env_mul__t0_add_t1a__add_env ()5849{5850CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5851GR_COMBINE_FACTOR_TEXTURE_RGB,5852GR_COMBINE_LOCAL_ITERATED,5853GR_COMBINE_OTHER_CONSTANT);5854CC_PRIM ();5855SETSHADE_ENV ();5856rdp.best_tex = 0;5857cmb.tex |= 3;5858cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;5859cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;5860cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE;5861}58625863static void cc_prim_sub_env_mul__t0_sub_prim_mul_enva_add_t0__add_env ()5864{5865// (t0-prim)*env_a+t0, (prim-env)*cmb+env5866CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5867GR_COMBINE_FACTOR_TEXTURE_RGB,5868GR_COMBINE_LOCAL_CONSTANT,5869GR_COMBINE_OTHER_ITERATED);5870CC_ENV ();5871SETSHADE_PRIM ();5872USE_T0 ();58735874MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC_ADD_TEX);5875MOD_0_COL (rdp.prim_color & 0xFFFFFF00);5876MOD_0_FAC (rdp.env_color & 0xFF);5877}58785879static void cc_prim_sub_env_mul__t1_sub_prim_mul_enva_add_t0__add_env ()5880{5881//(t1-prim)*env_a+t0, (prim-env)*cmb+env5882CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5883GR_COMBINE_FACTOR_TEXTURE_RGB,5884GR_COMBINE_LOCAL_CONSTANT,5885GR_COMBINE_OTHER_ITERATED);5886CC_ENV ();5887SETSHADE_PRIM ();5888if (cmb.combine_ext)5889{5890if (rdp.tiles[rdp.cur_tile].format > 2)5891{5892T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5893GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5894GR_CMBX_ZERO, 0,5895GR_CMBX_B, 0);5896T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,5897GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,5898GR_CMBX_DETAIL_FACTOR, 0,5899GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);5900}5901else5902{5903T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,5904GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,5905GR_CMBX_DETAIL_FACTOR, 0,5906GR_CMBX_ZERO, 0);5907T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,5908GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,5909GR_CMBX_ZERO, 1,5910GR_CMBX_ZERO, 0);5911}5912cmb.tex_ccolor = rdp.prim_color;5913cmb.tex |= 3;5914cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;5915}5916else5917{5918MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);5919MOD_1_COL (rdp.prim_color & 0xFFFFFF00);5920MOD_1_FAC (rdp.env_color & 0xFF);5921T0_ADD_T1 ();5922}5923}59245925static void cc_prim_sub_env_mul__t1_sub_prim_mul_prima_add_t0__add_env ()5926{5927// (t1-prim)*prim_a+t0, (prim-env)*cmb+env5928CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5929GR_COMBINE_FACTOR_TEXTURE_RGB,5930GR_COMBINE_LOCAL_CONSTANT,5931GR_COMBINE_OTHER_ITERATED);5932CC_ENV ();5933SETSHADE_PRIM ();5934if (cmb.combine_ext)5935{5936T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,5937GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,5938GR_CMBX_ZERO, 1,5939GR_CMBX_ZERO, 0);5940T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,5941GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5942GR_CMBX_DETAIL_FACTOR, 0,5943GR_CMBX_B, 0);5944cmb.tex_ccolor = rdp.prim_color;5945cmb.tex |= 3;5946cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.prim_color&0xFF) / 255.0f;5947}5948else5949{5950MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);5951MOD_1_COL (rdp.prim_color & 0xFFFFFF00);5952MOD_1_FAC (rdp.prim_color & 0xFF);5953T0_ADD_T1 ();5954}5955}59565957static void cc__prim_sub_env_mul_t0_add_env__mul_primlod ()5958{5959CCMB (GR_COMBINE_FUNCTION_BLEND,5960GR_COMBINE_FACTOR_TEXTURE_RGB,5961GR_COMBINE_LOCAL_ITERATED,5962GR_COMBINE_OTHER_CONSTANT);5963float factor = (float)rdp.prim_lodfrac / 255.0f;5964wxUint8 r = (wxUint8)((rdp.prim_color >> 24) & 0xFF);5965r = (wxUint8)((float)r * factor);5966wxUint8 g = (wxUint8)((rdp.prim_color >> 16) & 0xFF);5967g = (wxUint8)((float)g * factor);5968wxUint8 b = (wxUint8)((rdp.prim_color >> 8) & 0xFF);5969b = (wxUint8)((float)b * factor);5970CC ((r<<24) | (g<<16) | (b<<8));5971SETSHADE_ENV ();5972MULSHADE_PRIMLOD ();5973USE_T0 ();5974}59755976static void cc__prim_sub_env_mul_t0_add_env__mul_k5 ()5977{5978CCMB (GR_COMBINE_FUNCTION_BLEND,5979GR_COMBINE_FACTOR_TEXTURE_RGB,5980GR_COMBINE_LOCAL_ITERATED,5981GR_COMBINE_OTHER_CONSTANT);5982float factor = (float)rdp.K5 / 255.0f;5983wxUint8 r = (wxUint8)((rdp.prim_color >> 24) & 0xFF);5984r = (wxUint8)((float)r * factor);5985wxUint8 g = (wxUint8)((rdp.prim_color >> 16) & 0xFF);5986g = (wxUint8)((float)g * factor);5987wxUint8 b = (wxUint8)((rdp.prim_color >> 8) & 0xFF);5988b = (wxUint8)((float)b * factor);5989CC ((r<<24) | (g<<16) | (b<<8));5990SETSHADE_ENV ();5991MULSHADE_K5 ();5992USE_T0 ();5993}59945995static void cc_prim_sub_env_mul_t1_add_env ()5996{5997CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5998GR_COMBINE_FACTOR_TEXTURE_RGB,5999GR_COMBINE_LOCAL_ITERATED,6000GR_COMBINE_OTHER_CONSTANT);6001CC_PRIM ();6002SETSHADE_ENV ();6003if (rdp.cycle_mode == 0 || ((settings.hacks&hack_KI) && (rdp.cycle2 & 0x0FFFFFFF) == 0x01FF1FFF))6004{6005USE_T0 ();6006}6007else6008{6009USE_T1 ();6010}6011}60126013static void cc_prim_sub_env_mul_t1_add_env_mul_t0 ()6014{6015CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6016GR_COMBINE_FACTOR_ONE,6017GR_COMBINE_LOCAL_NONE,6018GR_COMBINE_OTHER_TEXTURE);6019MOD_1 (TMOD_COL_INTER_COL1_USING_TEX);6020MOD_1_COL (rdp.env_color & 0xFFFFFF00);6021MOD_1_COL1 (rdp.prim_color & 0xFFFFFF00);6022T0_MUL_T1 ();6023}60246025static void cc_prim_sub_env_mul_t0a_add_t0 ()6026{6027CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6028GR_COMBINE_FACTOR_ONE,6029GR_COMBINE_LOCAL_NONE,6030GR_COMBINE_OTHER_TEXTURE);6031CC_PRIMSUBENV ();6032if (cmb.combine_ext)6033{6034T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,6035GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,6036GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,6037GR_CMBX_B, 0);6038cmb.tex_ccolor = cmb.ccolor;6039cmb.tex |= 1;6040}6041else6042{6043MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);6044MOD_0_COL (cmb.ccolor & 0xFFFFFF00);6045USE_T0 ();6046}6047}60486049//Added by Gonetz6050static void cc_prim_sub_env_mul_t0a_add_env ()6051{6052CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6053GR_COMBINE_FACTOR_TEXTURE_ALPHA,6054GR_COMBINE_LOCAL_CONSTANT,6055GR_COMBINE_OTHER_ITERATED);6056CC_ENV ();6057SETSHADE_PRIM ();6058USE_T0 ();6059}60606061//Added by Gonetz6062static void cc_prim_sub_env_mul_t1a_add_env ()6063{6064CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6065GR_COMBINE_FACTOR_TEXTURE_ALPHA,6066GR_COMBINE_LOCAL_CONSTANT,6067GR_COMBINE_OTHER_ITERATED);6068CC_ENV ();6069SETSHADE_PRIM ();6070USE_T1 ();6071}60726073//Added by Gonetz6074static void cc_prim_sub_env_mul__t0_mul_t1__add_env ()6075{6076CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6077GR_COMBINE_FACTOR_TEXTURE_RGB,6078GR_COMBINE_LOCAL_ITERATED,6079GR_COMBINE_OTHER_CONSTANT);6080CC_PRIM ();6081SETSHADE_ENV ();6082T0_MUL_T1 ();6083}60846085//Added by Gonetz6086static void cc_prim_sub_env_mul__t0_add_t1__add_env ()6087{6088CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6089GR_COMBINE_FACTOR_TEXTURE_RGB,6090GR_COMBINE_LOCAL_ITERATED,6091GR_COMBINE_OTHER_CONSTANT);6092CC_PRIM ();6093SETSHADE_ENV ();6094T0_ADD_T1 ();6095}60966097//Added by Gonetz6098static void cc_prim_sub_env_mul__t0_mul_enva__add_env ()6099{6100CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6101GR_COMBINE_FACTOR_TEXTURE_RGB,6102GR_COMBINE_LOCAL_CONSTANT,6103GR_COMBINE_OTHER_ITERATED);6104CC_ENV ();6105SETSHADE_PRIMSUBENV ();6106SETSHADE_ENVA ();6107USE_T0 ();6108}61096110//Added by Gonetz6111static void cc_prim_sub_env_mul__t0_mul_shade__add_env ()6112{6113CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6114GR_COMBINE_FACTOR_TEXTURE_RGB,6115GR_COMBINE_LOCAL_CONSTANT,6116GR_COMBINE_OTHER_ITERATED);6117CC_ENV ();6118MULSHADE_PRIMSUBENV ();6119USE_T0 ();6120}61216122//Added by Gonetz6123static void cc_prim_sub_env_mul__prim_inter_t0_using_shadea__add_env ()6124{6125CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6126GR_COMBINE_FACTOR_TEXTURE_RGB,6127GR_COMBINE_LOCAL_CONSTANT,6128GR_COMBINE_OTHER_ITERATED);6129CC_ENV ();6130if (cmb.combine_ext)6131{6132SETSHADE_PRIM ();6133PRIM_INTER_T0_USING_SHADEA ();6134}6135else6136{6137SETSHADE_PRIMSUBENV ();6138MULSHADE_SHADEA ();6139USE_T0 ();6140}6141}61426143//Added by Gonetz6144static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t0__add_env ()6145{6146CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6147GR_COMBINE_FACTOR_TEXTURE_RGB,6148GR_COMBINE_LOCAL_ITERATED,6149GR_COMBINE_OTHER_CONSTANT);6150CC_PRIM ();6151SETSHADE_ENV ();6152if (cmb.combine_ext)6153{6154T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,6155GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,6156GR_CMBX_DETAIL_FACTOR, 0,6157GR_CMBX_B, 0);6158cmb.tex_ccolor = rdp.prim_color;6159cmb.tex |= 1;6160percent = (float)(lod_frac) / 255.0f;6161cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6162}6163else6164{6165USE_T0 ();6166MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC_ADD_TEX);6167MOD_0_COL (rdp.prim_color & 0xFFFFFF00);6168MOD_0_FAC (lod_frac & 0xFF);6169}6170}61716172static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_shade__add_env ()6173{6174if (!cmb.combine_ext)6175{6176cc_prim_sub_env_mul_t0_add_env ();6177return;6178}6179T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,6180GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,6181GR_CMBX_DETAIL_FACTOR, 0,6182GR_CMBX_ITRGB, 0);6183CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,6184GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,6185GR_CMBX_TEXTURE_RGB, 0,6186GR_CMBX_B, 0);6187cmb.tex_ccolor = rdp.prim_color;6188CC_PRIM ();6189SETSHADE_ENV ();6190cmb.tex |= 1;6191percent = (float)(lod_frac) / 255.0f;6192cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6193}61946195static void cc_prim_sub_env_mul__t0_sub_shade_mul_primlod_add_shade__add_env ()6196{6197if (!cmb.combine_ext)6198{6199cc_prim_sub_env_mul_t0_add_env ();6200return;6201}6202T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,6203GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,6204GR_CMBX_DETAIL_FACTOR, 0,6205GR_CMBX_B, 0);6206CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,6207GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,6208GR_CMBX_TEXTURE_RGB, 0,6209GR_CMBX_B, 0);6210CC_PRIM ();6211SETSHADE_ENV ();6212cmb.tex |= 1;6213percent = (float)(lod_frac) / 255.0f;6214cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6215}62166217//Added by Gonetz6218static void cc_lavatex_sub_prim_mul_shade_add_lavatex ()6219{6220if (cmb.combine_ext)6221{6222CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,6223GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,6224GR_CMBX_ITRGB, 0,6225GR_CMBX_B, 0);6226CC_PRIM ();6227T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();6228}6229else6230{6231CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6232GR_COMBINE_FACTOR_ONE,6233GR_COMBINE_LOCAL_NONE,6234GR_COMBINE_OTHER_TEXTURE);6235T0_ADD_T1 ();6236}6237}62386239//Added by Gonetz6240static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t1__add_env ()6241{6242CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6243GR_COMBINE_FACTOR_TEXTURE_RGB,6244GR_COMBINE_LOCAL_ITERATED,6245GR_COMBINE_OTHER_CONSTANT);6246CC_PRIM ();6247SETSHADE_ENV ();6248T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();6249}62506251//Added by Gonetz6252static void cc_prim_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()6253{6254CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6255GR_COMBINE_FACTOR_TEXTURE_RGB,6256GR_COMBINE_LOCAL_ITERATED,6257GR_COMBINE_OTHER_CONSTANT);6258CC_PRIM ();6259SETSHADE_ENV ();6260T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();6261}62626263//Added by Gonetz6264static void cc_prim_sub_env_mul__t0_inter_t1_using_t1__add_env ()6265{6266CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6267GR_COMBINE_FACTOR_TEXTURE_RGB,6268GR_COMBINE_LOCAL_ITERATED,6269GR_COMBINE_OTHER_CONSTANT);6270CC_PRIM ();6271SETSHADE_ENV ();6272T0_INTER_T1_USING_T1 ();6273}62746275//Added by Gonetz6276static void cc_prim_sub_env_mul__t0_inter_t1_using_enva_alpha__add_env ()6277{6278CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6279GR_COMBINE_FACTOR_TEXTURE_ALPHA,6280GR_COMBINE_LOCAL_ITERATED,6281GR_COMBINE_OTHER_CONSTANT);6282CC_PRIM ();6283SETSHADE_ENV ();6284wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);6285T0_INTER_T1_USING_FACTOR (factor);6286A_T0_INTER_T1_USING_FACTOR (factor);6287}62886289//Added by Gonetz6290static void cc__env_inter_prim_using_t0__sub_shade_mul_t0a_add_shade ()6291{6292if (!cmb.combine_ext)6293{6294CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6295GR_COMBINE_FACTOR_TEXTURE_ALPHA,6296GR_COMBINE_LOCAL_ITERATED,6297GR_COMBINE_OTHER_TEXTURE);6298MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);6299MOD_0_COL (rdp.env_color & 0xFFFFFF00);6300MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);6301USE_T0 ();6302A_USE_T0 ();6303}6304else6305{6306T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,6307GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,6308GR_CMBX_DETAIL_FACTOR, 0,6309GR_CMBX_B, 0);6310CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,6311GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,6312GR_CMBX_TEXTURE_ALPHA, 0,6313GR_CMBX_B, 0);6314cmb.tex_ccolor = rdp.env_color;6315cmb.tex |= 1;6316wxUint32 pse = (rdp.prim_color>>24) - (rdp.env_color>>24);6317percent = (float)(pse) / 255.0f;6318cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6319}6320}63216322//Added by Gonetz6323static void cc_prim_sub_env_mul_shade_add_t0 ()6324{6325CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6326GR_COMBINE_FACTOR_ONE,6327GR_COMBINE_LOCAL_ITERATED,6328GR_COMBINE_OTHER_TEXTURE);6329MULSHADE_PRIMSUBENV ();6330USE_T0 ();6331}63326333//Added by Gonetz6334static void cc_prim_sub_env_mul_prima_add_t0 ()6335{6336if (rdp.prim_color != 0x000000ff)6337{6338if (cmb.combine_ext)6339{6340CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,6341GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,6342GR_CMBX_CONSTANT_ALPHA, 0,6343GR_CMBX_TEXTURE_RGB, 0);6344CC_PRIM ();6345SETSHADE_ENV ();6346}6347else6348{6349CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6350GR_COMBINE_FACTOR_ONE,6351GR_COMBINE_LOCAL_ITERATED,6352GR_COMBINE_OTHER_TEXTURE);6353SETSHADE_PRIMSUBENV ();6354SETSHADE_PRIMA ();6355}6356}6357else if ((rdp.prim_color&0xFFFFFF00) - (rdp.env_color&0xFFFFFF00) == 0)6358{6359cc_t0 ();6360return;6361}6362else6363{6364CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,6365GR_COMBINE_FACTOR_ONE,6366GR_COMBINE_LOCAL_CONSTANT,6367GR_COMBINE_OTHER_TEXTURE);6368CC_ENV ();6369}6370USE_T0 ();6371}63726373//Added by Gonetz6374static void cc_prim_sub_env_mul_shade_add_env ()6375{6376CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6377GR_COMBINE_FACTOR_ONE,6378GR_COMBINE_LOCAL_CONSTANT,6379GR_COMBINE_OTHER_ITERATED);6380CC_ENV ();6381MULSHADE_PRIMSUBENV ();6382}63836384static void cc_prim_sub_env_mul_shadea_add_env ()6385{6386// * not guaranteed to work if another iterated alpha is set6387CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6388GR_COMBINE_FACTOR_OTHER_ALPHA,6389GR_COMBINE_LOCAL_CONSTANT,6390GR_COMBINE_OTHER_ITERATED);6391CC_ENV ();6392SETSHADE_PRIM ();6393}63946395//Added by Gonetz6396static void cc_prim_sub_env_mul__t0_inter_t1_using_prima__add_env ()6397{6398CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6399GR_COMBINE_FACTOR_TEXTURE_RGB,6400GR_COMBINE_LOCAL_CONSTANT,6401GR_COMBINE_OTHER_ITERATED);6402CC_ENV ();6403SETSHADE_PRIM ();6404wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);6405T0_INTER_T1_USING_FACTOR (factor);6406}64076408//Added by Gonetz6409static void cc_prim_sub_env_mul__t1_inter_t0_using_prima__add_env ()6410{6411CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6412GR_COMBINE_FACTOR_TEXTURE_RGB,6413GR_COMBINE_LOCAL_CONSTANT,6414GR_COMBINE_OTHER_ITERATED);6415CC_ENV ();6416SETSHADE_PRIM ();6417wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);6418T1_INTER_T0_USING_FACTOR (factor);6419}64206421static void cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env ()6422{6423CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6424GR_COMBINE_FACTOR_TEXTURE_RGB,6425GR_COMBINE_LOCAL_CONSTANT,6426GR_COMBINE_OTHER_ITERATED);6427CC_ENV ();6428SETSHADE_PRIM ();6429wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);6430T0_INTER_T1_USING_FACTOR (factor);6431}64326433static void cc_prim_sub_center_mul__t0_inter_t1_using_enva__add_env ()6434{6435CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6436GR_COMBINE_FACTOR_TEXTURE_RGB,6437GR_COMBINE_LOCAL_ITERATED,6438GR_COMBINE_OTHER_CONSTANT);6439CC_C1SUBC2 (rdp.prim_color, rdp.CENTER);6440SETSHADE_ENV ();6441wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);6442T0_INTER_T1_USING_FACTOR (factor);6443}64446445static void cc_prim_sub_env_mul__t1_inter_t0_using_enva__add_env ()6446{6447CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6448GR_COMBINE_FACTOR_TEXTURE_RGB,6449GR_COMBINE_LOCAL_CONSTANT,6450GR_COMBINE_OTHER_ITERATED);6451CC_ENV ();6452SETSHADE_PRIM ();6453wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);6454T1_INTER_T0_USING_FACTOR (factor);6455}64566457static void cc_prim_sub_env_mul__t0_mul_enva_add_t1__add_env ()6458{6459CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6460GR_COMBINE_FACTOR_TEXTURE_RGB,6461GR_COMBINE_LOCAL_CONSTANT,6462GR_COMBINE_OTHER_ITERATED);6463CC_ENV ();6464SETSHADE_PRIM ();6465if (cmb.combine_ext)6466{6467T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,6468GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,6469GR_CMBX_ZERO, 1,6470GR_CMBX_ZERO, 0);6471T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,6472GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,6473GR_CMBX_DETAIL_FACTOR, 0,6474GR_CMBX_B, 0);6475cmb.tex |= 3;6476percent = (float)(rdp.env_color&0xFF) / 255.0f;6477cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6478}6479else6480{6481T0_ADD_T1 ();6482}6483}64846485static void cc_prim_sub_env_mul__t1_mul_enva_add_t0__add_env ()6486{6487CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6488GR_COMBINE_FACTOR_TEXTURE_RGB,6489GR_COMBINE_LOCAL_CONSTANT,6490GR_COMBINE_OTHER_ITERATED);6491CC_ENV ();6492SETSHADE_PRIM ();6493T1_MUL_ENVA_ADD_T0 ();6494}64956496//Added by Gonetz6497static void cc_prim_sub_env_mul_primlod_add__t0_inter_t1_using_primlod ()6498{6499CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6500GR_COMBINE_FACTOR_ONE,6501GR_COMBINE_LOCAL_CONSTANT,6502GR_COMBINE_OTHER_TEXTURE);6503CC_PRIMSUBENV();6504CC_COLMULBYTE(cmb.ccolor, rdp.prim_lodfrac);6505T0_INTER_T1_USING_FACTOR (lod_frac);6506}65076508static void cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env ()6509{6510CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6511GR_COMBINE_FACTOR_TEXTURE_RGB,6512GR_COMBINE_LOCAL_CONSTANT,6513GR_COMBINE_OTHER_ITERATED);6514CC_ENV ();6515SETSHADE_PRIM ();6516T0_INTER_T1_USING_FACTOR (lod_frac);6517}65186519static void cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env ()6520{6521CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6522GR_COMBINE_FACTOR_TEXTURE_RGB,6523GR_COMBINE_LOCAL_CONSTANT,6524GR_COMBINE_OTHER_ITERATED);6525CC_ENV ();6526SETSHADE_PRIM ();6527T1_INTER_T0_USING_FACTOR (lod_frac);6528}65296530static void cc_prim_sub_env_mul__t1_mul_primlod_add_t0__add_env ()6531{6532CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6533GR_COMBINE_FACTOR_TEXTURE_RGB,6534GR_COMBINE_LOCAL_CONSTANT,6535GR_COMBINE_OTHER_ITERATED);6536CC_ENV ();6537SETSHADE_PRIM ();6538T1_MUL_PRIMLOD_ADD_T0 ();6539}65406541static void cc_prim_sub_env_mul__t1_sub_prim_mul_t0_add_t0__add_env ()6542{6543CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6544GR_COMBINE_FACTOR_TEXTURE_RGB,6545GR_COMBINE_LOCAL_CONSTANT,6546GR_COMBINE_OTHER_ITERATED);6547CC_ENV ();6548SETSHADE_PRIM ();6549if (cmb.combine_ext)6550{6551T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,6552GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,6553GR_CMBX_ZERO, 1,6554GR_CMBX_ZERO, 0);6555T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,6556GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,6557GR_CMBX_LOCAL_TEXTURE_RGB, 0,6558GR_CMBX_B, 0);6559cmb.tex_ccolor = rdp.prim_color;6560cmb.tex |= 3;6561}6562else6563{6564MOD_1 (TMOD_TEX_SUB_COL);6565MOD_1_COL (rdp.prim_color & 0xFFFFFF00);6566T0_MUL_T1_ADD_T0 ();6567}6568}65696570//Added by Gonetz6571static void cc__prim_sub_env_mul_prim_add_t0__mul_prim ()6572{6573if (cmb.combine_ext)6574{6575T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,6576GR_CMBX_ITRGB, GR_FUNC_MODE_X,6577GR_CMBX_ZERO, 1,6578GR_CMBX_ZERO, 0);6579cmb.tex |= 1;6580SETSHADE_PRIMSUBENV ();6581SETSHADE_PRIM ();6582CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,6583GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,6584GR_CMBX_CONSTANT_COLOR, 0,6585GR_CMBX_ZERO, 0);6586CC_PRIM() ;6587}6588else6589{6590CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6591GR_COMBINE_FACTOR_ONE,6592GR_COMBINE_LOCAL_ITERATED,6593GR_COMBINE_OTHER_TEXTURE);6594SETSHADE_PRIMSUBENV ();6595SETSHADE_PRIM ();6596USE_T0 ();6597}6598}65996600//Added by Gonetz6601static void cc_prim_sub_env_mul_prim_add_env ()6602{6603if (cmb.combine_ext)6604{6605CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,6606GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,6607GR_CMBX_CONSTANT_COLOR, 0,6608GR_CMBX_B, 0);6609SETSHADE_ENV();6610CC_PRIM ();6611}6612else6613{6614CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6615GR_COMBINE_FACTOR_ONE,6616GR_COMBINE_LOCAL_CONSTANT,6617GR_COMBINE_OTHER_ITERATED);6618SETSHADE_PRIMSUBENV ();6619SETSHADE_PRIM ();6620CC_ENV ();6621}6622}66236624static void cc_prim_sub_env_mul_primlod_add_env ()6625{6626if (cmb.combine_ext)6627{6628T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,6629GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,6630GR_CMBX_ZERO, 0,6631GR_CMBX_B, 0);6632cmb.tex |= 1;6633CC_PRIMLOD ();6634cmb.tex_ccolor = cmb.ccolor;6635CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,6636GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,6637GR_CMBX_TEXTURE_RGB, 0,6638GR_CMBX_B, 0);6639SETSHADE_PRIM();6640CC_ENV ();6641}6642else6643{6644CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6645GR_COMBINE_FACTOR_ONE,6646GR_COMBINE_LOCAL_CONSTANT,6647GR_COMBINE_OTHER_ITERATED);6648SETSHADE_PRIMSUBENV ();6649SETSHADE_PRIMLOD ();6650CC_ENV ();6651}6652}66536654//Added by Gonetz6655static void cc_prim_sub_env_mul_enva_add_t0 ()6656{6657CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6658GR_COMBINE_FACTOR_ONE,6659GR_COMBINE_LOCAL_ITERATED,6660GR_COMBINE_OTHER_TEXTURE);6661SETSHADE_PRIMSUBENV ();6662SETSHADE_ENVA ();6663USE_T0 ();6664}66656666static void cc_prim_sub_env_mul_enva_add_env ()6667{6668if (cmb.combine_ext)6669{6670T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,6671GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,6672GR_CMBX_ZERO, 0,6673GR_CMBX_B, 0);6674cmb.tex |= 1;6675CC_ENVA ();6676cmb.tex_ccolor = cmb.ccolor;6677CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,6678GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,6679GR_CMBX_TEXTURE_RGB, 0,6680GR_CMBX_B, 0);6681SETSHADE_PRIM();6682CC_ENV ();6683}6684else6685{6686CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6687GR_COMBINE_FACTOR_ONE,6688GR_COMBINE_LOCAL_CONSTANT,6689GR_COMBINE_OTHER_ITERATED);6690SETSHADE_PRIMSUBENV ();6691SETSHADE_ENVA ();6692CC_ENV ();6693}6694}66956696//Added by Gonetz6697static void cc_prim_sub_shade_mul_t0_add_env ()6698{6699CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6700GR_COMBINE_FACTOR_TEXTURE_RGB,6701GR_COMBINE_LOCAL_CONSTANT,6702GR_COMBINE_OTHER_ITERATED);6703CC_ENV ();6704COLSUBSHADE_PRIM ();6705USE_T0 ();6706}67076708//Added by Gonetz6709static void cc_prim_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade ()6710{6711CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6712GR_COMBINE_FACTOR_TEXTURE_RGB,6713GR_COMBINE_LOCAL_ITERATED,6714GR_COMBINE_OTHER_CONSTANT);6715CC_PRIM ();6716T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();6717}67186719static void cc_prim_sub_shade_mul_t1a_add_shade ()6720{6721CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6722GR_COMBINE_FACTOR_TEXTURE_ALPHA,6723GR_COMBINE_LOCAL_ITERATED,6724GR_COMBINE_OTHER_CONSTANT);6725CC_PRIM ();6726USE_T1 ();6727}67286729//Added by Gonetz6730static void cc_prim_sub_shade_mul_t0_add_shade ()6731{6732CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6733GR_COMBINE_FACTOR_TEXTURE_RGB,6734GR_COMBINE_LOCAL_ITERATED,6735GR_COMBINE_OTHER_CONSTANT);6736CC_PRIM ();6737USE_T0 ();6738}67396740//Added by Gonetz6741static void cc_prim_sub_shade_mul_t1_add_shade ()6742{6743CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6744GR_COMBINE_FACTOR_TEXTURE_RGB,6745GR_COMBINE_LOCAL_ITERATED,6746GR_COMBINE_OTHER_CONSTANT);6747CC_PRIM ();6748USE_T1 ();6749}67506751//Added by Gonetz6752static void cc_prim_sub_shade_mul__t0a_mul_t1__add_shade ()6753{6754CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6755GR_COMBINE_FACTOR_TEXTURE_RGB,6756GR_COMBINE_LOCAL_ITERATED,6757GR_COMBINE_OTHER_CONSTANT);6758CC_PRIM ();6759T0A_MUL_T1();6760}67616762//Added by Gonetz6763static void cc_prim_sub_shade_mul__t0_inter_t1_using_enva__add_shade ()6764{6765CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6766GR_COMBINE_FACTOR_TEXTURE_RGB,6767GR_COMBINE_LOCAL_ITERATED,6768GR_COMBINE_OTHER_CONSTANT);6769CC_PRIM ();6770wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);6771T0_INTER_T1_USING_FACTOR (factor);6772}67736774//Added by Gonetz6775static void cc_prim_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()6776{6777if (cmb.combine_ext)6778{6779CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,6780GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,6781GR_CMBX_TEXTURE_RGB, 0,6782GR_CMBX_B, 0);6783}6784else6785{6786CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6787GR_COMBINE_FACTOR_TEXTURE_RGB,6788GR_COMBINE_LOCAL_ITERATED,6789GR_COMBINE_OTHER_CONSTANT);6790}6791CC_PRIM ();6792T0_INTER_T1_USING_SHADEA ();6793}67946795//Added by Gonetz6796static void cc_prim_sub_shade_mul_prima_add_shade ()6797{6798CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6799GR_COMBINE_FACTOR_OTHER_ALPHA,6800GR_COMBINE_LOCAL_ITERATED,6801GR_COMBINE_OTHER_CONSTANT);6802CC_PRIM ();6803CA_PRIM ();6804}68056806//Added by Gonetz6807static void cc_prim_sub_shade_mul_env_add_shade ()6808{6809CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6810GR_COMBINE_FACTOR_ONE,6811GR_COMBINE_LOCAL_ITERATED,6812GR_COMBINE_OTHER_CONSTANT);6813CC_PRIMMULENV ();6814MULSHADE_1MENV ();6815}68166817//Added by Gonetz6818static void cc_prim_sub_shade_mul_shadea_add_shade ()6819{6820CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6821GR_COMBINE_FACTOR_LOCAL_ALPHA,6822GR_COMBINE_LOCAL_ITERATED,6823GR_COMBINE_OTHER_CONSTANT);6824CC_PRIM ();6825}68266827static void cc_env_sub_prim_mul_t0_add_prim ()6828{6829CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6830GR_COMBINE_FACTOR_TEXTURE_RGB,6831GR_COMBINE_LOCAL_ITERATED,6832GR_COMBINE_OTHER_CONSTANT);6833CC_ENV ();6834SETSHADE_PRIM ();6835USE_T0 ();6836}68376838static void cc_env_sub_prim_mul_t1_add_prim ()6839{6840CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6841GR_COMBINE_FACTOR_TEXTURE_RGB,6842GR_COMBINE_LOCAL_ITERATED,6843GR_COMBINE_OTHER_CONSTANT);6844CC_ENV ();6845SETSHADE_PRIM ();6846USE_T1 ();6847}68486849static void cc_env_sub_prim_mul_t0a_add_prim ()6850{6851CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6852GR_COMBINE_FACTOR_TEXTURE_ALPHA,6853GR_COMBINE_LOCAL_ITERATED,6854GR_COMBINE_OTHER_CONSTANT);6855CC_ENV ();6856SETSHADE_PRIM ();6857A_USE_T0 ();6858}68596860static void cc_env_sub_prim_mul_t1a_add_prim ()6861{6862CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6863GR_COMBINE_FACTOR_TEXTURE_ALPHA,6864GR_COMBINE_LOCAL_ITERATED,6865GR_COMBINE_OTHER_CONSTANT);6866CC_ENV ();6867SETSHADE_PRIM ();6868A_USE_T1 ();6869}68706871static void cc_env_sub_prim_mul__t0_add_t1__add_prim ()6872{6873CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6874GR_COMBINE_FACTOR_TEXTURE_RGB,6875GR_COMBINE_LOCAL_ITERATED,6876GR_COMBINE_OTHER_CONSTANT);6877CC_ENV ();6878SETSHADE_PRIM ();6879T0_ADD_T1 ();6880}68816882static void cc_env_sub_prim_mul__t0_mul_t1__add_prim () //Added by Gonetz6883{6884CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6885GR_COMBINE_FACTOR_TEXTURE_RGB,6886GR_COMBINE_LOCAL_ITERATED,6887GR_COMBINE_OTHER_CONSTANT);6888CC_ENV ();6889SETSHADE_PRIM ();6890T0_MUL_T1 ();6891}68926893static void cc_env_sub_prim_mul__t0t1a__add_prim () //Added by Gonetz6894{6895CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6896GR_COMBINE_FACTOR_TEXTURE_ALPHA,6897GR_COMBINE_LOCAL_ITERATED,6898GR_COMBINE_OTHER_CONSTANT);6899CC_ENV ();6900SETSHADE_PRIM ();6901A_T0_MUL_T1 ();6902}69036904static void cc_env_sub_prim_mul__t0_inter_t1_using_t1__add_prim () //Added by Gonetz6905{6906CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6907GR_COMBINE_FACTOR_TEXTURE_RGB,6908GR_COMBINE_LOCAL_ITERATED,6909GR_COMBINE_OTHER_CONSTANT);6910CC_ENV ();6911SETSHADE_PRIM ();6912T0_INTER_T1_USING_T1 ();6913}69146915static void cc_env_sub_prim_mul__t0_inter_t1_using_half__add_prim () //Added by Gonetz6916{6917CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6918GR_COMBINE_FACTOR_TEXTURE_RGB,6919GR_COMBINE_LOCAL_ITERATED,6920GR_COMBINE_OTHER_CONSTANT);6921CC_ENV ();6922SETSHADE_PRIM ();6923T0_INTER_T1_USING_FACTOR (0x7F);6924}69256926static void cc_env_sub_prim_mul__t1_inter_t0_using_t0__add_prim () //Added by Gonetz6927{6928CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6929GR_COMBINE_FACTOR_TEXTURE_RGB,6930GR_COMBINE_LOCAL_ITERATED,6931GR_COMBINE_OTHER_CONSTANT);6932CC_ENV ();6933SETSHADE_PRIM ();6934T1_INTER_T0_USING_T0 ();6935}69366937static void cc_env_sub_shade_mul__t0_mul_t1__add_shade () //Added by Gonetz6938{6939CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,6940GR_COMBINE_FACTOR_TEXTURE_RGB,6941GR_COMBINE_LOCAL_ITERATED,6942GR_COMBINE_OTHER_CONSTANT);6943CC_ENV ();6944T0_MUL_T1 ();6945}69466947static void cc_env_sub_prim_mul__t0a_mul_t1a__add_prim ()6948{6949CCMB (GR_COMBINE_FUNCTION_BLEND,6950GR_COMBINE_FACTOR_TEXTURE_ALPHA,6951GR_COMBINE_LOCAL_CONSTANT,6952GR_COMBINE_OTHER_ITERATED);6953CC_PRIM ();6954SETSHADE_ENV ();6955A_T0_MUL_T1 ();6956}695769586959static void cc_env_sub_prim_mul_prima_add_prim () //Aded by Gonetz6960{6961// * not guaranteed to work if another iterated alpha is set6962CCMB (GR_COMBINE_FUNCTION_BLEND,6963GR_COMBINE_FACTOR_LOCAL_ALPHA,6964GR_COMBINE_LOCAL_CONSTANT,6965GR_COMBINE_OTHER_ITERATED);6966CC_PRIM ();6967CA_PRIM ();6968SETSHADE_ENV ();6969}69706971static void cc_env_sub_prim_mul_enva_add_prim () //Aded by Gonetz6972{6973// * not guaranteed to work if another iterated alpha is set6974CCMB (GR_COMBINE_FUNCTION_BLEND,6975GR_COMBINE_FACTOR_OTHER_ALPHA,6976GR_COMBINE_LOCAL_ITERATED,6977GR_COMBINE_OTHER_CONSTANT);6978CC_ENV ();6979CA_ENV ();6980SETSHADE_PRIM ();6981}69826983static void cc__t0_sub_env_mul_shade__sub_prim_mul_shade_add_prim ()6984{6985if (cmb.combine_ext)6986{6987T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,6988GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,6989GR_CMBX_ITRGB, 0,6990GR_CMBX_ZERO, 0);6991cmb.tex_ccolor = rdp.env_color;6992cmb.tex |= 1;6993CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,6994GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,6995GR_CMBX_ITRGB, 0,6996GR_CMBX_B, 0);6997CC_PRIM ();6998}6999else7000{7001cc_t0_mul_shade ();7002}7003}70047005static void cc_env_sub_prim_mul_shade_add_prim () //Added by Gonetz7006{7007CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7008GR_COMBINE_FACTOR_ONE,7009GR_COMBINE_LOCAL_CONSTANT,7010GR_COMBINE_OTHER_ITERATED);7011CC_PRIM ();7012MULSHADE_ENVSUBPRIM ();7013}70147015static void cc_env_sub_prim_mul_shadea_add_prim () //Added by Gonetz7016{7017CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7018GR_COMBINE_FACTOR_ONE,7019GR_COMBINE_LOCAL_CONSTANT,7020GR_COMBINE_OTHER_ITERATED);7021CC_PRIM ();7022SETSHADE_ENVSUBPRIM ();7023MULSHADE_SHADEA ();7024}70257026static void cc_env_sub_prim_mul__t0_inter_t1_using_prima__add_prim ()7027{7028CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7029GR_COMBINE_FACTOR_TEXTURE_RGB,7030GR_COMBINE_LOCAL_ITERATED,7031GR_COMBINE_OTHER_CONSTANT);7032CC_ENV ();7033SETSHADE_PRIM ();7034wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);7035T0_INTER_T1_USING_FACTOR (factor);7036}70377038static void cc_env_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()7039{7040CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7041GR_COMBINE_FACTOR_TEXTURE_RGB,7042GR_COMBINE_LOCAL_ITERATED,7043GR_COMBINE_OTHER_CONSTANT);7044CC_ENV ();7045SETSHADE_PRIM ();7046T0_INTER_T1_USING_FACTOR (lod_frac);7047}70487049static void cc_env_sub_primshade_mul_t0_add_primshade ()7050{7051CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7052GR_COMBINE_FACTOR_TEXTURE_RGB,7053GR_COMBINE_LOCAL_ITERATED,7054GR_COMBINE_OTHER_CONSTANT);7055CC_ENV ();7056MULSHADE_PRIM ();7057USE_T0 ();7058}70597060static void cc_env_sub_primshade_mul_t1_add_primshade ()7061{7062// cc_prim_mul_shade();7063// return;7064CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7065GR_COMBINE_FACTOR_TEXTURE_RGB,7066GR_COMBINE_LOCAL_ITERATED,7067GR_COMBINE_OTHER_CONSTANT);7068CC_ENV ();7069MULSHADE_PRIM ();7070USE_T0 ();7071}70727073static void cc_env_sub_shade_mul_t0_add_shade ()7074{7075CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7076GR_COMBINE_FACTOR_TEXTURE_RGB,7077GR_COMBINE_LOCAL_ITERATED,7078GR_COMBINE_OTHER_CONSTANT);7079CC_ENV ();7080USE_T0 ();7081}70827083static void cc__env_sub_shade_mul_t0_add_shade__mul_prim ()7084{7085if (cmb.combine_ext)7086{7087T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,7088GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,7089GR_CMBX_LOCAL_TEXTURE_RGB, 0,7090GR_CMBX_B, 0);7091cmb.tex |= 1;7092cmb.tex_ccolor = rdp.prim_color;7093CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,7094GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,7095GR_CMBX_CONSTANT_COLOR, 0,7096GR_CMBX_ZERO, 0);7097CC_PRIM() ;7098}7099else7100{7101CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7102GR_COMBINE_FACTOR_TEXTURE_RGB,7103GR_COMBINE_LOCAL_ITERATED,7104GR_COMBINE_OTHER_CONSTANT);7105CC_ENV ();7106MULSHADE_PRIM ();7107USE_T0 ();7108}7109}71107111static void cc_env_sub_shade_mul_t1_add_shade ()7112{7113CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7114GR_COMBINE_FACTOR_TEXTURE_RGB,7115GR_COMBINE_LOCAL_ITERATED,7116GR_COMBINE_OTHER_CONSTANT);7117CC_ENV ();7118USE_T1 ();7119}71207121//Added by Gonetz7122static void cc_env_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()7123{7124if (cmb.combine_ext)7125{7126CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,7127GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,7128GR_CMBX_TEXTURE_RGB, 0,7129GR_CMBX_B, 0);7130}7131else7132{7133CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7134GR_COMBINE_FACTOR_TEXTURE_RGB,7135GR_COMBINE_LOCAL_ITERATED,7136GR_COMBINE_OTHER_CONSTANT);7137}7138CC_ENV ();7139T0_INTER_T1_USING_SHADEA ();7140}71417142//Added by Gonetz7143static void cc_env_sub_shade_mul_enva_add_shade ()7144{7145CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7146GR_COMBINE_FACTOR_OTHER_ALPHA,7147GR_COMBINE_LOCAL_ITERATED,7148GR_COMBINE_OTHER_CONSTANT);7149cmb.ccolor = rdp.env_color;7150}71517152//Added by Gonetz7153static void cc_shade_sub_t0_mul_shadea_add_t0 ()7154{7155CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7156GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,7157GR_COMBINE_LOCAL_ITERATED,7158GR_COMBINE_OTHER_TEXTURE);7159MULSHADE_SHADEA ();7160USE_T0 ();7161}716271637164static void cc__t0_mul_shade_mul_shadea__add__t1_mul_one_sub_shadea ()7165{7166// (t0-0)*shade+0, (cmb-t0)*shadea+t07167if (cmb.combine_ext)7168{7169T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,7170GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7171GR_CMBX_ITALPHA, 1,7172GR_CMBX_ZERO, 0);7173T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,7174GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7175GR_CMBX_ITRGB, 0,7176GR_CMBX_B, 0);7177MULSHADE_SHADEA ();7178cmb.tex |= 3;7179CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,7180GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,7181GR_CMBX_ZERO, 0,7182GR_CMBX_TEXTURE_RGB, 0);7183}7184else7185{7186cc_t0_mul_shade ();7187}7188}71897190static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()7191{7192CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7193GR_COMBINE_FACTOR_TEXTURE_RGB,7194GR_COMBINE_LOCAL_CONSTANT,7195GR_COMBINE_OTHER_ITERATED);7196CC_PRIM ();7197T0_INTER_T1_USING_FACTOR (lod_frac);7198}71997200static void cc_shade_sub_prim_mul_t0_add_prim ()7201{7202CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7203GR_COMBINE_FACTOR_TEXTURE_RGB,7204GR_COMBINE_LOCAL_CONSTANT,7205GR_COMBINE_OTHER_ITERATED);7206CC_PRIM ();7207USE_T0 ();7208}72097210//Added by Gonetz7211static void cc_shade_sub_prim_mul_t1_add_prim ()7212{7213CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7214GR_COMBINE_FACTOR_TEXTURE_RGB,7215GR_COMBINE_LOCAL_CONSTANT,7216GR_COMBINE_OTHER_ITERATED);7217CC_PRIM ();7218USE_T1 ();7219}72207221//Added by Gonetz7222static void cc_shade_sub_env_mul__t0_mul_t1__add__t0_mul_t1 ()7223{7224if (cmb.combine_ext)7225{7226CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,7227GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,7228GR_CMBX_TEXTURE_RGB, 0,7229GR_CMBX_TEXTURE_RGB, 0);7230CC_ENV ();7231T0_MUL_T1 ();7232}7233else7234{7235cc_t0_mul_t1 ();7236}7237}72387239//Added by Gonetz7240static void cc_shade_sub_env_mul_t0_add_prim ()7241{7242if (rdp.cur_image && (rdp.cur_image->format != 0))7243{7244cc_prim ();7245return;7246}72477248CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7249GR_COMBINE_FACTOR_TEXTURE_RGB,7250GR_COMBINE_LOCAL_CONSTANT,7251GR_COMBINE_OTHER_ITERATED);7252CC_PRIM ();7253SUBSHADE_ENV ();7254USE_T0 ();7255}72567257//Added by Gonetz7258static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_prim ()7259{7260CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7261GR_COMBINE_FACTOR_TEXTURE_RGB,7262GR_COMBINE_LOCAL_CONSTANT,7263GR_COMBINE_OTHER_ITERATED);7264CC_PRIM ();7265SUBSHADE_ENV ();7266T0_INTER_T1_USING_FACTOR (lod_frac);7267}72687269//Added by Gonetz7270static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_env ()7271{7272CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7273GR_COMBINE_FACTOR_TEXTURE_RGB,7274GR_COMBINE_LOCAL_CONSTANT,7275GR_COMBINE_OTHER_ITERATED);7276CC_ENV ();7277T0_INTER_T1_USING_FACTOR (lod_frac);7278}72797280//Added by Gonetz7281static void cc_shade_sub_env_mul__t0_mul_t1__add_env ()7282{7283CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7284GR_COMBINE_FACTOR_TEXTURE_RGB,7285GR_COMBINE_LOCAL_CONSTANT,7286GR_COMBINE_OTHER_ITERATED);7287CC_ENV ();7288T0_MUL_T1 ();7289}72907291//Added by Gonetz7292static void cc_shade_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()7293{7294CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7295GR_COMBINE_FACTOR_TEXTURE_RGB,7296GR_COMBINE_LOCAL_CONSTANT,7297GR_COMBINE_OTHER_ITERATED);7298CC_ENV ();7299SETSHADE_ENV ();7300T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();7301}73027303//Added by Gonetz7304static void cc_shade_sub_env_mul_t0_add_env ()7305{7306CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7307GR_COMBINE_FACTOR_TEXTURE_RGB,7308GR_COMBINE_LOCAL_CONSTANT,7309GR_COMBINE_OTHER_ITERATED);7310CC_ENV ();7311USE_T0 ();7312}73137314//Added by Gonetz7315static void cc_shade_sub_env_mul_t0_mul_prim_add_prim_mul_env ()7316{7317CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7318GR_COMBINE_FACTOR_TEXTURE_RGB,7319GR_COMBINE_LOCAL_CONSTANT,7320GR_COMBINE_OTHER_ITERATED);7321CC_PRIMMULENV ();7322SUBSHADE_ENV ();7323MULSHADE_PRIM()7324USE_T0 ();7325}73267327//Added by Gonetz7328static void cc_shade_sub_env_mul_t1_add_env ()7329{7330CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7331GR_COMBINE_FACTOR_TEXTURE_RGB,7332GR_COMBINE_LOCAL_CONSTANT,7333GR_COMBINE_OTHER_ITERATED);7334CC_ENV ();7335USE_T1 ();7336}73377338//Added by Gonetz7339static void cc_shade_sub_env_mul_prim_add_t0 ()7340{7341CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7342GR_COMBINE_FACTOR_ONE,7343GR_COMBINE_LOCAL_ITERATED,7344GR_COMBINE_OTHER_TEXTURE);7345SUBSHADE_ENV ();7346MULSHADE_PRIM ();7347USE_T0 ();7348}73497350static void cc__t0_add_prim_mul_shade__mul_shade_add_env ()7351{7352if (!cmb.combine_ext)7353{7354cc_shade_sub_env_mul_prim_add_t0 ();7355return;7356}7357T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,7358GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7359GR_CMBX_ITRGB, 0,7360GR_CMBX_B, 0);7361T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,7362GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7363GR_CMBX_ITRGB, 0,7364GR_CMBX_B, 0);7365CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,7366GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,7367GR_CMBX_ITRGB, 0,7368GR_CMBX_B, 0);7369cmb.tex_ccolor = rdp.prim_color;7370CC_ENV ();7371cmb.tex |= 1;7372}73737374static void cc__t0_add_prim_mul_shade__mul_shade ()7375{7376if (!cmb.combine_ext)7377{7378cc_shade_sub_env_mul_prim_add_t0 ();7379return;7380}7381T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,7382GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7383GR_CMBX_ITRGB, 0,7384GR_CMBX_B, 0);7385CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,7386GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,7387GR_CMBX_ITRGB, 0,7388GR_CMBX_ZERO, 0);7389cmb.tex_ccolor = rdp.prim_color;7390cmb.tex |= 1;7391}73927393//Added by Gonetz7394static void cc_shade_sub_env_mul_prim_add_env ()7395{7396CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7397GR_COMBINE_FACTOR_ONE,7398GR_COMBINE_LOCAL_CONSTANT,7399GR_COMBINE_OTHER_ITERATED);7400SUBSHADE_ENV ();7401MULSHADE_PRIM ();7402CC_ENV ();7403}74047405//Added by Gonetz7406static void cc_shade_sub_env_mul_prima_add_prim ()7407{7408CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7409GR_COMBINE_FACTOR_ONE,7410GR_COMBINE_LOCAL_CONSTANT,7411GR_COMBINE_OTHER_ITERATED);7412SUBSHADE_ENV ();7413MULSHADE_PRIMA ();7414CC_PRIM ();7415}74167417static void cc_shade_sub_env_mul_k5_add_prim ()7418{7419CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7420GR_COMBINE_FACTOR_ONE,7421GR_COMBINE_LOCAL_CONSTANT,7422GR_COMBINE_OTHER_ITERATED);7423SUBSHADE_ENV ();7424wxUint32 temp = rdp.prim_color;7425rdp.prim_color = rdp.K5;7426MULSHADE_PRIMA ();7427rdp.prim_color = temp;7428CC_PRIM ();7429}74307431// ** A inter B using C **7432static void cc_t0_inter_t1_using_t1a ()7433{7434CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7435GR_COMBINE_FACTOR_ONE,7436GR_COMBINE_LOCAL_NONE,7437GR_COMBINE_OTHER_TEXTURE);7438T0_INTER_T1_USING_T1A ();7439}74407441static void cc_t0_inter_t1_using_prima ()7442{7443CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7444GR_COMBINE_FACTOR_ONE,7445GR_COMBINE_LOCAL_NONE,7446GR_COMBINE_OTHER_TEXTURE);7447wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);7448T0_INTER_T1_USING_FACTOR (factor);7449}74507451static void cc_t1_inter_t0_using_prima ()7452{7453CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7454GR_COMBINE_FACTOR_ONE,7455GR_COMBINE_LOCAL_NONE,7456GR_COMBINE_OTHER_TEXTURE);7457wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);7458T1_INTER_T0_USING_FACTOR (factor);7459}74607461static void cc_t1_inter_t0_using_prim ()7462{7463CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7464GR_COMBINE_FACTOR_ONE,7465GR_COMBINE_LOCAL_NONE,7466GR_COMBINE_OTHER_TEXTURE);7467T1_INTER_T0_USING_PRIM ();7468}74697470static void cc_t0_inter_t1_using_env ()7471{7472CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7473GR_COMBINE_FACTOR_ONE,7474GR_COMBINE_LOCAL_NONE,7475GR_COMBINE_OTHER_TEXTURE);7476T0_INTER_T1_USING_ENV ();7477}74787479static void cc_t0_inter_t1_using_enva ()7480{7481CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7482GR_COMBINE_FACTOR_ONE,7483GR_COMBINE_LOCAL_NONE,7484GR_COMBINE_OTHER_TEXTURE);7485wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);7486T0_INTER_T1_USING_FACTOR (factor);7487}74887489static void cc__t0_inter_t1_using_prim__inter_env_using_enva ()7490{7491// (t1-t0)*prim+t0, (env-cmb)*env_a+cmb7492if (!cmb.combine_ext)7493{7494cc_t0_inter_t1_using_prima ();7495return;7496}7497T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7498GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7499GR_CMBX_ZERO, 0,7500GR_CMBX_B, 0);7501T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,7502GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,7503GR_CMBX_TMU_CCOLOR, 0,7504GR_CMBX_B, 0);7505cmb.tex_ccolor = rdp.prim_color;7506cmb.tex |= 3;7507CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,7508GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,7509GR_CMBX_CONSTANT_ALPHA, 0,7510GR_CMBX_B, 0);7511cmb.ccolor = rdp.env_color;7512}75137514static void cc__t0_inter_t1_using_shade__inter_env_using_enva ()7515{7516// (t1-t0)*shade+t0, (env-cmb)*env_a+cmb7517if (!cmb.combine_ext)7518{7519cc_t0_inter_t1_using_enva ();7520return;7521}7522T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7523GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7524GR_CMBX_ZERO, 0,7525GR_CMBX_B, 0);7526T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,7527GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,7528GR_CMBX_ITRGB, 0,7529GR_CMBX_B, 0);7530cmb.tex |= 3;7531CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,7532GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,7533GR_CMBX_CONSTANT_ALPHA, 0,7534GR_CMBX_B, 0);7535cmb.ccolor = rdp.env_color;7536}75377538//Added by Gonetz7539static void cc_t0_inter_t1_using_shade ()7540{7541if (cmb.combine_ext)7542{7543T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7544GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7545GR_CMBX_ZERO, 0,7546GR_CMBX_B, 0);7547T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,7548GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,7549GR_CMBX_ITRGB, 0,7550GR_CMBX_B, 0);7551cmb.tex |= 3;7552CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,7553GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,7554GR_CMBX_ZERO, 1,7555GR_CMBX_ZERO, 0);7556}7557else7558{7559CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7560GR_COMBINE_FACTOR_ONE,7561GR_COMBINE_LOCAL_NONE,7562GR_COMBINE_OTHER_TEXTURE);7563T0_INTER_T1_USING_FACTOR (0x7F);7564}7565}75667567//Added by Gonetz7568static void cc_t1_inter_t0_using_shade ()7569{7570if (cmb.combine_ext)7571{7572T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7573GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7574GR_CMBX_ZERO, 0,7575GR_CMBX_B, 0);7576T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,7577GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,7578GR_CMBX_ITRGB, 0,7579GR_CMBX_B, 0);7580cmb.tex |= 3;7581CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,7582GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,7583GR_CMBX_ZERO, 1,7584GR_CMBX_ZERO, 0);7585}7586else7587{7588CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7589GR_COMBINE_FACTOR_ONE,7590GR_COMBINE_LOCAL_NONE,7591GR_COMBINE_OTHER_TEXTURE);7592T0_INTER_T1_USING_FACTOR (0x7F);7593}7594}75957596//Added by Gonetz7597static void cc_t1_inter_t0_using_shadea ()7598{7599if (cmb.combine_ext)7600{7601CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,7602GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,7603GR_CMBX_ZERO, 1,7604GR_CMBX_ZERO, 0);7605}7606else7607{7608CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7609GR_COMBINE_FACTOR_ONE,7610GR_COMBINE_LOCAL_NONE,7611GR_COMBINE_OTHER_TEXTURE);7612}7613T1_INTER_T0_USING_SHADEA ();7614}76157616//Added by Gonetz7617static void cc_t0_inter_t1_using_primlod ()7618{7619CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7620GR_COMBINE_FACTOR_ONE,7621GR_COMBINE_LOCAL_NONE,7622GR_COMBINE_OTHER_TEXTURE);7623T0_INTER_T1_USING_FACTOR (lod_frac);7624}76257626//Added by Gonetz7627static void cc_t1_inter_t0_using_primlod ()7628{7629CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7630GR_COMBINE_FACTOR_ONE,7631GR_COMBINE_LOCAL_NONE,7632GR_COMBINE_OTHER_TEXTURE);7633T1_INTER_T0_USING_FACTOR (lod_frac);7634}76357636//Added by Gonetz7637static void cc_t1_inter_t0_using_t0 ()7638{7639CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7640GR_COMBINE_FACTOR_ONE,7641GR_COMBINE_LOCAL_NONE,7642GR_COMBINE_OTHER_TEXTURE);7643T1_INTER_T0_USING_T0 ();7644}76457646//Added by Gonetz7647static void cc_t0_inter_t1_using_k5 ()7648{7649CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7650GR_COMBINE_FACTOR_ONE,7651GR_COMBINE_LOCAL_NONE,7652GR_COMBINE_OTHER_TEXTURE);7653T0_INTER_T1_USING_FACTOR (rdp.K5);7654}76557656static void cc_t0_inter_env_using_prim ()7657{7658CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7659GR_COMBINE_FACTOR_ONE,7660GR_COMBINE_LOCAL_NONE,7661GR_COMBINE_OTHER_TEXTURE);7662USE_T0 ();76637664MOD_0 (TMOD_TEX_INTER_COL_USING_COL1);7665MOD_0_COL (rdp.env_color & 0xFFFFFF00);7666MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);7667}76687669//Added by Gonetz7670static void cc_t0_inter_prim_using_primlod ()7671{7672CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7673GR_COMBINE_FACTOR_ONE,7674GR_COMBINE_LOCAL_NONE,7675GR_COMBINE_OTHER_TEXTURE);7676USE_T0 ();76777678MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);7679MOD_0_COL (rdp.prim_color & 0xFFFFFF00);7680MOD_0_FAC (lod_frac & 0xFF);7681}76827683static void cc_t0_inter_shade_using_t0a ()7684{7685if (cmb.combine_ext)7686{7687CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,7688GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,7689GR_CMBX_TEXTURE_ALPHA, 0,7690GR_CMBX_B, 0);7691USE_T0();7692A_USE_T0();7693}7694else7695{7696//(shade-t0)*t0a+t0 = t0*(1-t0a)+shade*t0a7697CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7698GR_COMBINE_FACTOR_ONE,7699GR_COMBINE_LOCAL_ITERATED,7700GR_COMBINE_OTHER_TEXTURE);7701rdp.best_tex = 1;7702cmb.tex = 1;7703cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;7704cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA;7705}7706}77077708static void cc_t0_inter_shade_using_primlod ()7709{7710CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7711GR_COMBINE_FACTOR_TEXTURE_RGB,7712GR_COMBINE_LOCAL_ITERATED,7713GR_COMBINE_OTHER_CONSTANT);7714CC_PRIMLOD();7715cmb.ccolor=(~cmb.ccolor)&0xFFFFFF00;7716MULSHADE_PRIMLOD ();7717USE_T0 ();7718//(shade-t0)*primlod+t0 = t0*(1-primlod)+shade*primlod7719}77207721//Added by Gonetz7722static void cc__env_inter_t0_using_primlod__mul_prim ()7723{7724//((t0-env)*primlod+env)*prim = t0*prim*primlod+env*prim*(1-primlod);7725CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7726GR_COMBINE_FACTOR_TEXTURE_RGB,7727GR_COMBINE_LOCAL_ITERATED,7728GR_COMBINE_OTHER_CONSTANT);7729CC_PRIM ();7730cmb.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);7731SETSHADE_PRIM ();7732SETSHADE_ENV ();7733SETSHADE_1MPRIMLOD ();7734USE_T0 ();7735}77367737//Added by Gonetz7738static void cc__env_inter_t0_using_shadea__mul_shade ()7739{7740//((t0-env)*shadea+env)*shade7741if (!cmb.combine_ext)7742{7743cc_t0_mul_shade ();7744return;7745}7746T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,7747GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,7748GR_CMBX_ITALPHA, 0,7749GR_CMBX_B, 0);7750cmb.tex_ccolor = rdp.env_color;7751cmb.tex |= 1;7752CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,7753GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,7754GR_CMBX_ITRGB, 0,7755GR_CMBX_ZERO, 0);7756}77577758//Added by Gonetz7759static void cc_env_inter_prim_using_primlod ()7760{7761if (rdp.prim_color&0xFFFFFF00)7762{7763CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7764GR_COMBINE_FACTOR_ONE,7765GR_COMBINE_LOCAL_CONSTANT,7766GR_COMBINE_OTHER_ITERATED);7767SETSHADE_PRIMSUBENV ();7768SETSHADE_PRIMLOD ();7769CC_ENV ();7770}7771else7772{7773CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,7774GR_COMBINE_FACTOR_ONE,7775GR_COMBINE_LOCAL_ITERATED,7776GR_COMBINE_OTHER_CONSTANT);7777SETSHADE_ENV ();7778SETSHADE_PRIMLOD ();7779CC_ENV ();7780}7781}77827783static void cc_prim_inter__t0_mul_t1_add_env__using_shadea ()7784{7785if (cmb.combine_ext)7786{7787T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7788GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7789GR_CMBX_ZERO, 0,7790GR_CMBX_B, 0);7791T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,7792GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,7793GR_CMBX_LOCAL_TEXTURE_RGB, 0,7794GR_CMBX_B, 0);7795cmb.tex_ccolor = rdp.env_color;7796cmb.tex |= 3;7797}7798else7799{7800T0_MUL_T1 ();7801}7802// * not guaranteed to work if another iterated alpha is set7803CCMB (GR_COMBINE_FUNCTION_BLEND,7804GR_COMBINE_FACTOR_LOCAL_ALPHA,7805GR_COMBINE_LOCAL_ITERATED,7806GR_COMBINE_OTHER_TEXTURE);7807SETSHADE_PRIM ();7808}78097810static void cc_env_inter__prim_inter_shade_using_t0__using_shadea ()7811{7812if (!cmb.combine_ext)7813{7814cc_shade_sub_prim_mul_t0_add_prim ();7815return;7816}7817T0CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,7818GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,7819GR_CMBX_LOCAL_TEXTURE_RGB, 0,7820GR_CMBX_B, 0);7821cmb.tex_ccolor = rdp.prim_color;7822cmb.tex |= 1;7823CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,7824GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,7825GR_CMBX_ITALPHA, 0,7826GR_CMBX_B, 0);7827CC_ENV ();7828}78297830static void cc_shade_inter__prim_inter_shade_using_t0__using_shadea ()7831{7832if (!cmb.combine_ext)7833{7834cc_shade_sub_prim_mul_t0_add_prim ();7835return;7836}7837T0CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,7838GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,7839GR_CMBX_LOCAL_TEXTURE_RGB, 0,7840GR_CMBX_B, 0);7841cmb.tex_ccolor = rdp.prim_color;7842cmb.tex |= 1;7843CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,7844GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,7845GR_CMBX_ITALPHA, 0,7846GR_CMBX_B, 0);7847}78487849// ** (A-B)*C+D*E **7850static void cc_one_sub_env_mul_prim_add__t0_mul_env () //Aded by Gonetz7851{7852CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7853GR_COMBINE_FACTOR_TEXTURE_RGB,7854GR_COMBINE_LOCAL_ITERATED,7855GR_COMBINE_OTHER_CONSTANT);7856CC_ENV ();7857SETSHADE_1MENV ();7858SETSHADE_PRIM ();7859USE_T0 ();7860}78617862// ** ((A-B)*C+D)*E **7863static void cc_t0_sub_env_mul_prim_mul_shade_add_prim_mul_shade () //Aded by Gonetz7864{7865//(t0-env)*shade+shade, (cmb-0)*prim+07866if (cmb.combine_ext)7867{7868T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,7869GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,7870GR_CMBX_ITRGB, 0,7871GR_CMBX_ZERO, 0);7872cmb.tex_ccolor = rdp.env_color;7873cmb.tex |= 1;7874CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,7875GR_CMBX_ITRGB, GR_FUNC_MODE_X,7876GR_CMBX_CONSTANT_COLOR, 0,7877GR_CMBX_ZERO, 0);7878CC_PRIM ();7879}7880else7881{7882CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7883GR_COMBINE_FACTOR_LOCAL,7884GR_COMBINE_LOCAL_ITERATED,7885GR_COMBINE_OTHER_TEXTURE);7886if (rdp.env_color & 0xFFFFFF00)7887{7888MOD_0 (TMOD_TEX_SUB_COL);7889MOD_0_COL (rdp.env_color & 0xFFFFFF00);7890}7891MULSHADE_PRIM ();7892USE_T0 ();7893}7894}78957896static void cc__t1_sub_prim_mul_t0_add_env__mul_shade () //Aded by Gonetz7897{7898// (t1-prim)*t0+env, (cmb-0)*shade+07899if (cmb.combine_ext)7900{7901T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7902GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,7903GR_CMBX_ZERO, 0,7904GR_CMBX_B, 0);7905T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,7906GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,7907GR_CMBX_LOCAL_TEXTURE_RGB, 0,7908GR_CMBX_ZERO, 0);7909cmb.tex_ccolor = rdp.prim_color;7910cmb.tex |= 3;7911CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,7912GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,7913GR_CMBX_ITRGB, 0,7914GR_CMBX_ZERO, 0);7915CC_ENV ();7916}7917else7918{7919CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7920GR_COMBINE_FACTOR_LOCAL,7921GR_COMBINE_LOCAL_ITERATED,7922GR_COMBINE_OTHER_TEXTURE);7923if (rdp.prim_color & 0xFFFFFF00)7924{7925MOD_1 (TMOD_TEX_SUB_COL);7926MOD_1_COL (rdp.prim_color & 0xFFFFFF00);7927}7928T0_MUL_T1 ();7929}7930}79317932// ** (A inter B using C) * D **7933//Added by Gonetz7934static void cc__t0_inter_t1_using_prima__mul_prim ()7935{7936CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7937GR_COMBINE_FACTOR_LOCAL,7938GR_COMBINE_LOCAL_CONSTANT,7939GR_COMBINE_OTHER_TEXTURE);7940wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);7941T0_INTER_T1_USING_FACTOR (factor);7942CC_PRIM ();7943}79447945//Added by Gonetz7946static void cc__t1_inter_t0_using_prima__mul_prim ()7947{7948CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7949GR_COMBINE_FACTOR_LOCAL,7950GR_COMBINE_LOCAL_CONSTANT,7951GR_COMBINE_OTHER_TEXTURE);7952wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);7953T1_INTER_T0_USING_FACTOR (factor);7954CC_PRIM ();7955}79567957//Added by Gonetz7958static void cc__t0_inter_t1_using_prim__mul_shade ()7959{7960CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7961GR_COMBINE_FACTOR_LOCAL,7962GR_COMBINE_LOCAL_ITERATED,7963GR_COMBINE_OTHER_TEXTURE);7964T0_INTER_T1_USING_PRIM ();7965}79667967//Added by Gonetz7968static void cc__t0_inter_t1_using_prima__mul_shade ()7969{7970CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7971GR_COMBINE_FACTOR_LOCAL,7972GR_COMBINE_LOCAL_ITERATED,7973GR_COMBINE_OTHER_TEXTURE);7974wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);7975T0_INTER_T1_USING_FACTOR (factor);7976}79777978//Added by Gonetz7979static void cc__t1_inter_t0_using_prima__mul_shade ()7980{7981CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7982GR_COMBINE_FACTOR_LOCAL,7983GR_COMBINE_LOCAL_ITERATED,7984GR_COMBINE_OTHER_TEXTURE);7985wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);7986T1_INTER_T0_USING_FACTOR (factor);7987}79887989static void cc__t0_inter_t1_using_env__mul_shade ()7990{7991CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7992GR_COMBINE_FACTOR_LOCAL,7993GR_COMBINE_LOCAL_ITERATED,7994GR_COMBINE_OTHER_TEXTURE);7995T0_INTER_T1_USING_ENV ();7996}79977998static void cc__t0_inter_t1_using_enva__mul_shade ()7999{8000CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8001GR_COMBINE_FACTOR_LOCAL,8002GR_COMBINE_LOCAL_ITERATED,8003GR_COMBINE_OTHER_TEXTURE);8004wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);8005T0_INTER_T1_USING_FACTOR (factor);8006}80078008static void cc__t0_inter_t1_using_enva__mul_prim ()8009{8010CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8011GR_COMBINE_FACTOR_LOCAL,8012GR_COMBINE_LOCAL_CONSTANT,8013GR_COMBINE_OTHER_TEXTURE);8014CC_PRIM ();8015wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);8016T0_INTER_T1_USING_FACTOR (factor);8017}80188019//Added by Gonetz8020static void cc__t0_inter_t1_using_enva__mul_env ()8021{8022CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8023GR_COMBINE_FACTOR_LOCAL,8024GR_COMBINE_LOCAL_CONSTANT,8025GR_COMBINE_OTHER_TEXTURE);8026CC_ENV ();8027wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);8028T0_INTER_T1_USING_FACTOR (factor);8029}80308031//Added by Gonetz8032static void cc__t0_inter_t1_using_primlod__mul_prim ()8033{8034CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8035GR_COMBINE_FACTOR_LOCAL,8036GR_COMBINE_LOCAL_CONSTANT,8037GR_COMBINE_OTHER_TEXTURE);8038CC_PRIM ();8039T0_INTER_T1_USING_FACTOR (lod_frac);8040}80418042//Added by Gonetz8043static void cc__t0_inter_t1_using_primlod__mul_prima ()8044{8045CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8046GR_COMBINE_FACTOR_LOCAL,8047GR_COMBINE_LOCAL_CONSTANT,8048GR_COMBINE_OTHER_TEXTURE);8049CC_PRIMA ();8050T0_INTER_T1_USING_FACTOR (lod_frac);8051}80528053//Added by Gonetz8054static void cc__t1_mul_primlod_add_t0__mul_prim ()8055{8056CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8057GR_COMBINE_FACTOR_LOCAL,8058GR_COMBINE_LOCAL_CONSTANT,8059GR_COMBINE_OTHER_TEXTURE);8060CC_PRIM ();8061T1_MUL_PRIMLOD_ADD_T0 ();8062}80638064//Added by Gonetz8065static void cc__t0_inter_t1_using_primlod__mul_env ()8066{8067CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8068GR_COMBINE_FACTOR_LOCAL,8069GR_COMBINE_LOCAL_CONSTANT,8070GR_COMBINE_OTHER_TEXTURE);8071CC_ENV ();8072T0_INTER_T1_USING_FACTOR (lod_frac);8073}80748075//Added by Gonetz8076static void cc__t1_mul_primlod_add_t0__mul_env ()8077{8078CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8079GR_COMBINE_FACTOR_LOCAL,8080GR_COMBINE_LOCAL_CONSTANT,8081GR_COMBINE_OTHER_TEXTURE);8082CC_ENV ();8083T1_MUL_PRIMLOD_ADD_T0 ();8084}80858086//Added by Gonetz8087static void cc__t1_inter_t0_using_prim__mul_env ()8088{8089CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8090GR_COMBINE_FACTOR_LOCAL,8091GR_COMBINE_LOCAL_CONSTANT,8092GR_COMBINE_OTHER_TEXTURE);8093CC_ENV ();8094T1_INTER_T0_USING_PRIM ();8095}80968097static void cc__one_sub_shade_mul_t0_add_shade__mul_prim ()8098{8099if (cmb.combine_ext)8100{8101T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,8102GR_CMBX_ITRGB, GR_FUNC_MODE_ONE_MINUS_X,8103GR_CMBX_LOCAL_TEXTURE_RGB, 0,8104GR_CMBX_B, 0);8105cmb.tex |= 1;8106CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,8107GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,8108GR_CMBX_CONSTANT_COLOR, 0,8109GR_CMBX_ZERO, 0);8110CC_PRIM ();8111}8112else8113{8114CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,8115GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,8116GR_COMBINE_LOCAL_ITERATED,8117GR_COMBINE_OTHER_TEXTURE);8118USE_T0 ();8119}8120}81218122static void cc__one_sub_shade_mul_t0_add_shade__mul_env ()8123{8124if (cmb.combine_ext)8125{8126T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,8127GR_CMBX_ITRGB, GR_FUNC_MODE_ONE_MINUS_X,8128GR_CMBX_LOCAL_TEXTURE_RGB, 0,8129GR_CMBX_B, 0);8130cmb.tex |= 1;8131CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,8132GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,8133GR_CMBX_CONSTANT_COLOR, 0,8134GR_CMBX_ZERO, 0);8135CC_ENV ();8136}8137else8138{8139CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,8140GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,8141GR_COMBINE_LOCAL_ITERATED,8142GR_COMBINE_OTHER_TEXTURE);8143USE_T0 ();8144}8145}81468147static void cc__t1_inter_t0_using_prim__mul_shade ()8148{8149CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8150GR_COMBINE_FACTOR_LOCAL,8151GR_COMBINE_LOCAL_ITERATED,8152GR_COMBINE_OTHER_TEXTURE);8153T1_INTER_T0_USING_PRIM ();8154}81558156static void cc__t0_inter_t1_using_primlod__mul_shade ()8157{8158//*8159if (rdp.LOD_en && (rdp.mipmap_level == 0) && !(settings.hacks&hack_Fifa98))8160{8161cc_t0_mul_shade ();8162return;8163}8164//*/8165if (settings.ucode == 7)8166lod_frac = rdp.prim_lodfrac;8167CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8168GR_COMBINE_FACTOR_LOCAL,8169GR_COMBINE_LOCAL_ITERATED,8170GR_COMBINE_OTHER_TEXTURE);8171T0_INTER_T1_USING_FACTOR (lod_frac);8172}81738174static void cc__t1_inter_t0_using_primlod__mul_shade ()8175{8176CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8177GR_COMBINE_FACTOR_LOCAL,8178GR_COMBINE_LOCAL_ITERATED,8179GR_COMBINE_OTHER_TEXTURE);8180T1_INTER_T0_USING_FACTOR (lod_frac);8181}81828183static void cc__t0_inter_t1_using_half__mul_shade ()8184{8185CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8186GR_COMBINE_FACTOR_LOCAL,8187GR_COMBINE_LOCAL_ITERATED,8188GR_COMBINE_OTHER_TEXTURE);8189T0_INTER_T1_USING_FACTOR (0x7F);8190}81918192static void cc__t0_inter_t1_using_t0__mul_shade ()8193{8194CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8195GR_COMBINE_FACTOR_LOCAL,8196GR_COMBINE_LOCAL_ITERATED,8197GR_COMBINE_OTHER_TEXTURE);8198T0_INTER_T1_USING_T0();8199}82008201static void cc__t0_inter_t1_using_t1a__mul_shade ()8202{8203CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8204GR_COMBINE_FACTOR_LOCAL,8205GR_COMBINE_LOCAL_ITERATED,8206GR_COMBINE_OTHER_TEXTURE);8207T0_INTER_T1_USING_T1A();8208}82098210static void cc__t0_inter_t1_using_shadea__mul_shade ()8211{8212if (cmb.combine_ext)8213{8214CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,8215GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,8216GR_CMBX_ITRGB, 0,8217GR_CMBX_ZERO, 0);8218}8219else8220{8221CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8222GR_COMBINE_FACTOR_LOCAL,8223GR_COMBINE_LOCAL_ITERATED,8224GR_COMBINE_OTHER_TEXTURE);8225}8226T0_INTER_T1_USING_SHADEA ();8227}82288229static void cc__t0_inter_t1_using_k5__mul_shade ()8230{8231CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8232GR_COMBINE_FACTOR_LOCAL,8233GR_COMBINE_LOCAL_ITERATED,8234GR_COMBINE_OTHER_TEXTURE);8235T0_INTER_T1_USING_FACTOR (rdp.K5);8236}82378238static void cc__t1_inter_t0_using_k5__mul_shade ()8239{8240CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8241GR_COMBINE_FACTOR_LOCAL,8242GR_COMBINE_LOCAL_ITERATED,8243GR_COMBINE_OTHER_TEXTURE);8244T1_INTER_T0_USING_FACTOR (rdp.K5);8245}82468247static void cc_t0_inter_prim_using_prima ()8248{8249if (cmb.combine_ext)8250{8251T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,8252GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,8253GR_CMBX_TMU_CALPHA, 0,8254GR_CMBX_B, 0);8255cmb.tex_ccolor = rdp.prim_color;8256cmb.tex |= 1;8257CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8258GR_COMBINE_FACTOR_ONE,8259GR_COMBINE_LOCAL_NONE,8260GR_COMBINE_OTHER_TEXTURE);8261}8262else8263{8264CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,8265GR_COMBINE_FACTOR_TEXTURE_RGB,8266GR_COMBINE_LOCAL_ITERATED,8267GR_COMBINE_OTHER_CONSTANT);8268CC_1SUBPRIMA ();8269SETSHADE_PRIM ();8270SETSHADE_PRIMA ();8271USE_T0 ();8272}8273}82748275static void cc__t0_inter_prim_using_t0a__mul_shade ()8276{8277CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8278GR_COMBINE_FACTOR_LOCAL,8279GR_COMBINE_LOCAL_ITERATED,8280GR_COMBINE_OTHER_TEXTURE);8281MOD_0 (TMOD_TEX_INTER_COL_USING_TEXA);8282MOD_0_COL (rdp.prim_color & 0xFFFFFF00);8283USE_T0 ();8284}82858286static void cc__env_inter_prim_using_t0__mul_prim ()8287{8288// (prim-env)*t0+env, (cmb-0)*prim+08289CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8290GR_COMBINE_FACTOR_LOCAL,8291GR_COMBINE_LOCAL_CONSTANT,8292GR_COMBINE_OTHER_TEXTURE);8293CC_PRIM ();8294MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);8295MOD_0_COL (rdp.env_color & 0xFFFFFF00);8296MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);8297USE_T0 ();8298}82998300static void cc__env_inter_prim_using_t0__mul_shade ()8301{8302// amazing... mace actually uses the blender as part of the combine8303if ((rdp.othermode_l & 0xFFFF0000) == 0x03820000 ||8304(rdp.othermode_l & 0xFFFF0000) == 0x00910000)8305{8306// blender:8307// 1ST = CLR_IN * A_IN + CLR_BL * 1MA8308// OUT = 1ST * 0 + 1ST * 183098310CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8311GR_COMBINE_FACTOR_LOCAL,8312GR_COMBINE_LOCAL_ITERATED,8313GR_COMBINE_OTHER_TEXTURE);8314MOD_0 (TMOD_COL2_INTER__COL_INTER_COL1_USING_TEX__USING_TEXA);8315MOD_0_COL (rdp.env_color & 0xFFFFFF00);8316MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);8317MOD_0_COL2 (rdp.blend_color & 0xFFFFFF00);8318USE_T0 ();8319return;8320}8321//(prim-env)*t0+env, (shade-0)*cmb+08322MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);8323MOD_0_COL (rdp.env_color & 0xFFFFFF00);8324MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);8325USE_T0 ();8326CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8327GR_COMBINE_FACTOR_LOCAL,8328GR_COMBINE_LOCAL_ITERATED,8329GR_COMBINE_OTHER_TEXTURE);8330}83318332static void cc__env_inter_one_using_t0__mul_shade ()8333{8334//(one-env)*t0+env, (cmb-0)*shade+08335if (cmb.combine_ext)8336{8337T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,8338GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ONE_MINUS_X,8339GR_CMBX_LOCAL_TEXTURE_RGB, 0,8340GR_CMBX_B, 0);8341cmb.tex_ccolor = rdp.env_color&0xFFFFFF00;8342cmb.tex |= 1;8343}8344else8345{8346MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);8347MOD_0_COL (rdp.env_color & 0xFFFFFF00);8348MOD_0_COL1 (0xFFFFFF00);8349USE_T0 ();8350}8351CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8352GR_COMBINE_FACTOR_LOCAL,8353GR_COMBINE_LOCAL_ITERATED,8354GR_COMBINE_OTHER_TEXTURE);8355}83568357static void cc_env_inter_one_using__one_sub_t0_mul_primlod ()8358{8359if (cmb.combine_ext)8360{8361// (noise-t0)*primlod+0, (1-env)*cmb+env8362T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,8363GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,8364GR_CMBX_DETAIL_FACTOR, 0,8365GR_CMBX_ZERO, 0);8366cmb.tex_ccolor = rand()&0xFFFFFF00;8367cmb.tex |= 1;8368percent = (float)(lod_frac) / 255.0f;8369cmb.dc0_detailmax = cmb.dc1_detailmax = percent;8370cmb.tex |= 1;8371}8372else8373{8374USE_T0 ();8375}8376CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,8377GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,8378GR_COMBINE_LOCAL_CONSTANT,8379GR_COMBINE_OTHER_TEXTURE);8380CC_ENV ();8381}83828383static void cc__env_inter_prim_using_prima__mul_shade ()8384{8385int primr = (rdp.prim_color>>24)&0xFF;8386int primg = (rdp.prim_color>>16)&0xFF;8387int primb = (rdp.prim_color>>8)&0xFF;8388int prima = rdp.prim_color&0xFF;8389int envr = (rdp.env_color>>24)&0xFF;8390int envg = (rdp.env_color>>16)&0xFF;8391int envb = (rdp.env_color>>8)&0xFF;8392int r = (((primr-envr)*prima)/256)+envr;8393int g = (((primg-envg)*prima)/256)+envg;8394int b = (((primb-envb)*prima)/256)+envb;8395cmb.ccolor = (r<<24) | (g<<16) | (b<<8);8396CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8397GR_COMBINE_FACTOR_LOCAL,8398GR_COMBINE_LOCAL_ITERATED,8399GR_COMBINE_OTHER_CONSTANT);8400}84018402static void cc__prim_inter_t0_using_env__mul_shade ()8403{8404// (t0-prim)*env+prim, (cmb-0)*shade+08405if ((rdp.prim_color & 0xFFFFFF00) == 0)8406{8407cc_t0_mul_env_mul_shade ();8408}8409else if (cmb.combine_ext)8410{8411T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,8412GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,8413GR_CMBX_TMU_CCOLOR, 0,8414GR_CMBX_ZERO, 0);8415cmb.tex_ccolor = rdp.env_color & 0xFFFFFF00;8416cmb.tex |= 1;8417CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,8418GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,8419GR_CMBX_ITRGB, 0,8420GR_CMBX_ZERO, 0);8421wxUint32 onesubenv = ~rdp.env_color;8422CC_C1MULC2(rdp.prim_color, onesubenv);8423}8424else8425{8426CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8427GR_COMBINE_FACTOR_LOCAL,8428GR_COMBINE_LOCAL_ITERATED,8429GR_COMBINE_OTHER_TEXTURE);8430MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);8431MOD_0_COL (rdp.prim_color & 0xFFFFFF00);8432MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);8433USE_T0 ();8434}8435}84368437static void cc__one_inter_prim_using_t1__mul_shade ()8438{8439if (cmb.combine_ext)8440{8441if ((settings.hacks&hack_BAR) && rdp.cur_tile == 1)8442{8443T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,8444GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,8445GR_CMBX_LOCAL_TEXTURE_RGB, 0,8446GR_CMBX_ZERO, 1);8447cmb.tex |= 1;8448}8449else8450{8451T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,8452GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,8453GR_CMBX_LOCAL_TEXTURE_RGB, 0,8454GR_CMBX_ZERO, 1);8455T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,8456GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,8457GR_CMBX_ZERO, 0,8458GR_CMBX_B, 0);8459cmb.tex |= 2;8460}8461cmb.tex_ccolor = rdp.prim_color | 0xFF;8462CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,8463GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,8464GR_CMBX_ITRGB, 0,8465GR_CMBX_ZERO, 0);8466}8467else8468{8469CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8470GR_COMBINE_FACTOR_LOCAL,8471GR_COMBINE_LOCAL_ITERATED,8472GR_COMBINE_OTHER_TEXTURE);8473if ((settings.hacks&hack_BAR) && rdp.cur_tile == 1)8474{8475MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);8476MOD_0_COL (0xFFFFFF00);8477MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);8478USE_T0 ();8479}8480else8481{8482MOD_1 (TMOD_COL_INTER_COL1_USING_TEX);8483MOD_1_COL (0xFFFFFF00);8484MOD_1_COL1 (rdp.prim_color & 0xFFFFFF00);8485USE_T1 ();8486}8487}8488}84898490static void cc_prim_sub__prim_sub_t0_mul_prima__mul_shade ()8491{8492// (prim-t0)*prim_a+0, (prim-cmb)*shade+08493if (cmb.combine_ext)8494{8495T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,8496GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,8497GR_CMBX_TMU_CALPHA, 0,8498GR_CMBX_ZERO, 0);8499cmb.tex_ccolor = rdp.prim_color;8500cmb.tex |= 1;8501CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,8502GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,8503GR_CMBX_ITRGB, 0,8504GR_CMBX_ZERO, 0);8505CC_PRIM();8506}8507else8508{8509if ((rdp.prim_color & 0xFFFFFF00) == 0)8510{8511cc_t0_mul_prima_mul_shade ();8512return;8513}8514CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8515GR_COMBINE_FACTOR_LOCAL,8516GR_COMBINE_LOCAL_ITERATED,8517GR_COMBINE_OTHER_TEXTURE);8518MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);8519MOD_0_COL (rdp.prim_color & 0xFFFFFF00);8520wxUint8 prima = (wxUint8)(rdp.prim_color&0xFF);8521MOD_0_COL1 ((prima<<24)|(prima<<16)|(prima<<8));8522USE_T0 ();8523}8524}85258526static void cc__prim_inter_env_using_t0__mul_shade ()8527{8528// (env-prim)*t0+prim, (cmb-0)*shade+08529CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8530GR_COMBINE_FACTOR_LOCAL,8531GR_COMBINE_LOCAL_ITERATED,8532GR_COMBINE_OTHER_TEXTURE);8533MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);8534MOD_0_COL (rdp.prim_color & 0xFFFFFF00);8535MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);8536USE_T0 ();8537}85388539static void cc__prim_inter_one_using_env__mul_shade ()8540{8541// (one-prim)*env+prim, (cmb-0)*shade+08542if ((rdp.prim_color&0xFFFFFF00) == 0)8543{8544cc_env_mul_shade ();8545return;8546}8547if ((rdp.env_color&0xFFFFFF00) == 0)8548{8549cc_prim_mul_shade ();8550return;8551}8552if ((rdp.prim_color&0xFFFFFF00) == 0xFFFFFF00 || (rdp.env_color&0xFFFFFF00) == 0xFFFFFF00)8553{8554cc_shade ();8555return;8556}8557CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8558GR_COMBINE_FACTOR_LOCAL,8559GR_COMBINE_LOCAL_ITERATED,8560GR_COMBINE_OTHER_CONSTANT);8561CC_1SUBPRIM ();8562CC_C1MULC2 (cmb.ccolor, rdp.env_color);8563cmb.ccolor=(wxUint8)( min(255, (int)((cmb.ccolor & 0xFF000000) >> 24) + (int)((rdp.prim_color & 0xFF000000) >> 24)) ) << 24 |8564(wxUint8)( min(255, (int)((cmb.ccolor & 0x00FF0000) >> 16) + (int)((rdp.prim_color & 0x00FF0000) >> 16)) ) << 16 |8565(wxUint8)( min(255, (int)((cmb.ccolor & 0x0000FF00) >> 8) + (int)((rdp.prim_color & 0x0000FF00) >> 8)) ) << 8 ;8566}85678568static void cc__env_inter_prim_using_t0a__mul_t0 ()8569{8570CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8571GR_COMBINE_FACTOR_ONE,8572GR_COMBINE_LOCAL_NONE,8573GR_COMBINE_OTHER_TEXTURE);8574MOD_0 (TMOD_COL_INTER_COL1_USING_TEXA__MUL_TEX);8575MOD_0_COL (rdp.env_color & 0xFFFFFF00);8576MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);8577USE_T0 ();8578}85798580static void cc__env_inter_prim_using_t0a__mul_prim ()8581{8582CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8583GR_COMBINE_FACTOR_LOCAL,8584GR_COMBINE_LOCAL_CONSTANT,8585GR_COMBINE_OTHER_TEXTURE);8586CC_PRIM ();8587MOD_0 (TMOD_COL_INTER_COL1_USING_TEXA);8588MOD_0_COL (rdp.env_color & 0xFFFFFF00);8589MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);8590USE_T0 ();8591}85928593static void cc__env_inter_prim_using__t0_sub_shade_mul_primlod_add_env ()8594{8595// (t0-shade)*lodf+env, (prim-env)*cmb+env8596if (cmb.combine_ext)8597{8598T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,8599GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,8600GR_CMBX_DETAIL_FACTOR, 0,8601GR_CMBX_B, 0);8602cmb.tex_ccolor = rdp.env_color;8603percent = (float)lod_frac / 255.0f;8604cmb.dc0_detailmax = cmb.dc1_detailmax = percent;8605cmb.tex |= 1;8606CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,8607GR_COMBINE_FACTOR_TEXTURE_RGB,8608GR_COMBINE_LOCAL_ITERATED,8609GR_COMBINE_OTHER_CONSTANT);8610CC_PRIM ();8611SETSHADE_ENV ();8612}8613else8614{8615CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,8616GR_COMBINE_FACTOR_ONE,//TEXTURE_RGB,8617GR_COMBINE_LOCAL_ITERATED,8618GR_COMBINE_OTHER_TEXTURE);//CONSTANT);8619MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);8620MOD_0_COL (rdp.env_color & 0xFFFFFF00);8621MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);8622USE_T0 ();8623MULSHADE_PRIMSUBENV ();8624MULSHADE_PRIMLOD();8625SUBSHADE_PRIMSUBENV ();8626}8627}86288629static void cc__prim_inter_t0_using_t0__mul_shade ()8630{8631CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8632GR_COMBINE_FACTOR_LOCAL,8633GR_COMBINE_LOCAL_ITERATED,8634GR_COMBINE_OTHER_TEXTURE);8635MOD_0 (TMOD_COL_INTER_TEX_USING_TEX);8636MOD_0_COL (rdp.prim_color & 0xFFFFFF00);8637USE_T0 ();8638}86398640static void cc__env_inter_t0_using_t0a__mul_shade ()8641{8642CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8643GR_COMBINE_FACTOR_LOCAL,8644GR_COMBINE_LOCAL_ITERATED,8645GR_COMBINE_OTHER_TEXTURE);8646MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);8647MOD_0_COL (rdp.env_color & 0xFFFFFF00);8648USE_T0 ();8649}86508651static void cc__env_inter_t0_using_prima__mul_shade ()8652{8653CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8654GR_COMBINE_FACTOR_LOCAL,8655GR_COMBINE_LOCAL_ITERATED,8656GR_COMBINE_OTHER_TEXTURE);8657MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);8658MOD_0_COL (rdp.env_color & 0xFFFFFF00);8659wxUint32 prima = rdp.prim_color & 0xFF;8660MOD_0_COL1 ((prima<<24)|(prima|16)|(prima<<8));8661USE_T0 ();8662}86638664static void cc_shade_mul_prima ()8665{8666CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8667GR_COMBINE_FACTOR_ONE,8668GR_COMBINE_LOCAL_NONE,8669GR_COMBINE_OTHER_ITERATED);8670MULSHADE_PRIMA ();8671}86728673static void cc_shade_mul_shadea ()8674{8675CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8676GR_COMBINE_FACTOR_ONE,8677GR_COMBINE_LOCAL_NONE,8678GR_COMBINE_OTHER_ITERATED);8679MULSHADE_SHADEA ();8680}86818682static void cc__t0_mul_shade__inter_env_using_enva ()8683{8684// (t0-0)*shade+0, (env-cmb)*env_a+cmb ** INC **8685wxUint32 enva = rdp.env_color&0xFF;8686if (enva == 0xFF)8687cc_env ();8688else if (enva == 0)8689cc_t0_mul_shade ();8690else if (cmb.combine_ext)8691{8692T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,8693GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,8694GR_CMBX_ITRGB, 0,8695GR_CMBX_B, 0);8696cmb.tex |= 1;8697CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,8698GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,8699GR_CMBX_ZERO, 1,8700GR_CMBX_ZERO, 0);8701MULSHADE_1MENVA ();8702CC_COLMULBYTE(rdp.env_color, (rdp.env_color&0xFF));8703cmb.tex_ccolor = cmb.ccolor;8704}8705else8706{8707CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8708GR_COMBINE_FACTOR_LOCAL,8709GR_COMBINE_LOCAL_ITERATED,8710GR_COMBINE_OTHER_TEXTURE);8711INTERSHADE_2 (rdp.env_color & 0xFFFFFF00, rdp.env_color & 0xFF);8712USE_T0 ();8713MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);8714MOD_0_COL (rdp.env_color & 0xFFFFFF00);8715MOD_0_FAC (rdp.env_color & 0xFF);8716}8717}87188719static void cc__t0_mul_shade__inter_one_using_enva ()8720{8721CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,8722GR_COMBINE_FACTOR_TEXTURE_RGB,8723GR_COMBINE_LOCAL_CONSTANT,8724GR_COMBINE_OTHER_ITERATED);8725CC_ENVA ();8726MULSHADE_1MENVA ();8727USE_T0 ();8728}87298730static void cc__t0_mul_shade__inter_one_using_shadea ()8731{8732if (cmb.combine_ext)8733{8734T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,8735GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,8736GR_CMBX_ITRGB, 0,8737GR_CMBX_ZERO, 0);8738cmb.tex |= 1;8739CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_X,8740GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,8741GR_CMBX_ITALPHA, 0,8742GR_CMBX_B, 0);8743}8744else8745{8746cc_t0_mul_shade ();8747}8748}87498750static void cc__prim_mul_shade__inter_env_using_enva ()8751{8752CCMB (GR_COMBINE_FUNCTION_BLEND,8753GR_COMBINE_FACTOR_LOCAL_ALPHA,8754GR_COMBINE_LOCAL_ITERATED,8755GR_COMBINE_OTHER_CONSTANT);8756CC_ENV ();8757MULSHADE_PRIM ();8758SETSHADE_A_ENV ();8759}87608761static void cc__prim_mul_shade__inter_env_using__prim_mul_shade_alpha ()8762{8763CCMB (GR_COMBINE_FUNCTION_BLEND,8764GR_COMBINE_FACTOR_LOCAL_ALPHA,8765GR_COMBINE_LOCAL_ITERATED,8766GR_COMBINE_OTHER_CONSTANT);8767CC_ENV ();8768MULSHADE_PRIM ();8769MULSHADE_A_PRIM ();8770}877187728773//****************************************************************87748775static void ac_one ()8776{8777ACMB (GR_COMBINE_FUNCTION_LOCAL,8778GR_COMBINE_FACTOR_NONE,8779GR_COMBINE_LOCAL_CONSTANT,8780GR_COMBINE_OTHER_NONE);8781cmb.ccolor |= 0xFF;8782}87838784static void ac_t0 ()8785{8786if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))8787{8788wxUint32 blend_mode = (rdp.othermode_l >> 16);8789if (blend_mode == 0x0550)8790{8791ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8792GR_COMBINE_FACTOR_LOCAL,8793GR_COMBINE_LOCAL_CONSTANT,8794GR_COMBINE_OTHER_TEXTURE);8795CA(rdp.fog_color);8796}8797else if (blend_mode == 0x55f0) //cmem*afog + cfog*1ma8798{8799ACMB (GR_COMBINE_FUNCTION_LOCAL,8800GR_COMBINE_FACTOR_ONE,8801GR_COMBINE_LOCAL_CONSTANT,8802GR_COMBINE_OTHER_NONE);8803CA(~rdp.fog_color);8804}8805else8806{8807ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8808GR_COMBINE_FACTOR_ONE,8809GR_COMBINE_LOCAL_NONE,8810GR_COMBINE_OTHER_TEXTURE);8811}8812}8813else8814{8815ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8816GR_COMBINE_FACTOR_ONE,8817GR_COMBINE_LOCAL_NONE,8818GR_COMBINE_OTHER_TEXTURE);8819}8820A_USE_T0 ();8821}88228823static void ac_zero ()8824{8825if (cmb.tex > 0)8826{8827ac_t0 ();8828return;8829}8830ACMB (GR_COMBINE_FUNCTION_LOCAL,8831GR_COMBINE_FACTOR_NONE,8832GR_COMBINE_LOCAL_CONSTANT,8833GR_COMBINE_OTHER_NONE);8834cmb.ccolor &= 0xFFFFFF00;8835}88368837static void ac_t1 ()8838{8839ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8840GR_COMBINE_FACTOR_ONE,8841GR_COMBINE_LOCAL_NONE,8842GR_COMBINE_OTHER_TEXTURE);8843if ((settings.hacks&hack_BAR) && rdp.tiles[rdp.cur_tile].format == 3)8844A_USE_T0 ();8845else8846A_USE_T1 ();8847}88488849static void ac_prim ()8850{8851ACMB (GR_COMBINE_FUNCTION_LOCAL,8852GR_COMBINE_FACTOR_NONE,8853GR_COMBINE_LOCAL_CONSTANT,8854GR_COMBINE_OTHER_NONE);8855CA_PRIM ();8856}88578858static void ac_primlod ()8859{8860ACMB (GR_COMBINE_FUNCTION_LOCAL,8861GR_COMBINE_FACTOR_NONE,8862GR_COMBINE_LOCAL_CONSTANT,8863GR_COMBINE_OTHER_NONE);8864CA_PRIMLOD ();8865}88668867static void ac_one_sub_t0 ()8868{8869ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,8870GR_COMBINE_FACTOR_TEXTURE_ALPHA,8871GR_COMBINE_LOCAL_CONSTANT,8872GR_COMBINE_OTHER_NONE);8873CA (0xFF);8874A_USE_T0 ();8875}88768877static void ac_one_sub_prim ()8878{8879ACMB (GR_COMBINE_FUNCTION_LOCAL,8880GR_COMBINE_FACTOR_NONE,8881GR_COMBINE_LOCAL_CONSTANT,8882GR_COMBINE_OTHER_NONE);8883CA_INVPRIM ();8884}88858886static void ac_env ()8887{8888ACMB (GR_COMBINE_FUNCTION_LOCAL,8889GR_COMBINE_FACTOR_NONE,8890GR_COMBINE_LOCAL_CONSTANT,8891GR_COMBINE_OTHER_NONE);8892CA_ENV ();8893}88948895static void ac_shade ()8896{8897ACMB (GR_COMBINE_FUNCTION_LOCAL,8898GR_COMBINE_FACTOR_NONE,8899GR_COMBINE_LOCAL_ITERATED,8900GR_COMBINE_OTHER_NONE);8901}89028903// ** A+B **8904static void ac_t0_add_t1 () //Aded by Gonetz8905{8906ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8907GR_COMBINE_FACTOR_ONE,8908GR_COMBINE_LOCAL_NONE,8909GR_COMBINE_OTHER_TEXTURE);8910A_T0_ADD_T1 ();8911}89128913static void ac__t0_mul_prim__add__t1_mul_primlod () //Aded by Gonetz8914{8915if (lod_frac == 0)8916{8917ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8918GR_COMBINE_FACTOR_LOCAL,8919GR_COMBINE_LOCAL_CONSTANT,8920GR_COMBINE_OTHER_TEXTURE);8921CA_PRIM ();8922A_USE_T0 ();8923}8924else if ((rdp.prim_color&0xFF) == 0)8925{8926ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8927GR_COMBINE_FACTOR_LOCAL,8928GR_COMBINE_LOCAL_CONSTANT,8929GR_COMBINE_OTHER_TEXTURE);8930CA_PRIMLOD ();8931A_USE_T1 ();8932}8933else if ((rdp.prim_color&0xFF) == 0xFF)8934{8935ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8936GR_COMBINE_FACTOR_ONE,8937GR_COMBINE_LOCAL_NONE,8938GR_COMBINE_OTHER_TEXTURE);8939A_T1_MUL_PRIMLOD_ADD_T0();8940}8941else8942{8943ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8944GR_COMBINE_FACTOR_LOCAL,8945GR_COMBINE_LOCAL_CONSTANT,8946GR_COMBINE_OTHER_TEXTURE);8947CA_PRIM ();8948A_T0_ADD_T1 ();8949}8950}89518952static void ac_t0_add_prim () //Aded by Gonetz8953{8954ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,8955GR_COMBINE_FACTOR_ONE,8956GR_COMBINE_LOCAL_CONSTANT,8957GR_COMBINE_OTHER_TEXTURE);8958CA_PRIM ();8959A_USE_T0 ();8960}89618962static void ac_t0_add_env () //Aded by Gonetz8963{8964ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,8965GR_COMBINE_FACTOR_ONE,8966GR_COMBINE_LOCAL_CONSTANT,8967GR_COMBINE_OTHER_TEXTURE);8968CA_ENV ();8969A_USE_T0 ();8970}89718972static void ac_t1_add_env () //Added by Gonetz8973{8974ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,8975GR_COMBINE_FACTOR_ONE,8976GR_COMBINE_LOCAL_CONSTANT,8977GR_COMBINE_OTHER_TEXTURE);8978CA_ENV ();8979A_USE_T1 ();8980}89818982static void ac__t0_add_t1__add_prim () //Aded by Gonetz8983{8984ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,8985GR_COMBINE_FACTOR_ONE,8986GR_COMBINE_LOCAL_CONSTANT,8987GR_COMBINE_OTHER_TEXTURE);8988CA_PRIM ();8989A_T0_ADD_T1 ();8990}89918992static void ac_prim_add_shade () //Aded by Gonetz8993{8994ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,8995GR_COMBINE_FACTOR_ONE,8996GR_COMBINE_LOCAL_ITERATED,8997GR_COMBINE_OTHER_CONSTANT);8998CA_PRIM ();8999}90009001static void ac_env_add_shade () //Aded by Gonetz9002{9003ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9004GR_COMBINE_FACTOR_ONE,9005GR_COMBINE_LOCAL_ITERATED,9006GR_COMBINE_OTHER_CONSTANT);9007CA_ENV ();9008}90099010// ** A*B **9011static void ac_t0_mul_t0 () //Added by Gonetz9012{9013ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9014GR_COMBINE_FACTOR_TEXTURE_ALPHA,9015GR_COMBINE_LOCAL_NONE,9016GR_COMBINE_OTHER_TEXTURE);9017A_USE_T0 ();9018}90199020static void ac_t0_mul_t1 ()9021{9022ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9023GR_COMBINE_FACTOR_ONE,9024GR_COMBINE_LOCAL_NONE,9025GR_COMBINE_OTHER_TEXTURE);9026A_T0_MUL_T1 ();9027}90289029static void ac_t0_mul_t1_add_t1 ()9030{9031ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9032GR_COMBINE_FACTOR_ONE,9033GR_COMBINE_LOCAL_NONE,9034GR_COMBINE_OTHER_TEXTURE);9035if (cmb.combine_ext)9036{9037T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9038GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9039GR_CMBX_ZERO, 0,9040GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9041T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9042GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,9043GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,9044GR_CMBX_B, 0);9045cmb.tex |= 3;9046}9047else9048{9049A_T0_MUL_T1 ();9050}9051}90529053static void ac_t0_mul_t1_add_prim ()9054{9055ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9056GR_COMBINE_FACTOR_ONE,9057GR_COMBINE_LOCAL_CONSTANT,9058GR_COMBINE_OTHER_TEXTURE);9059CA_PRIM ();9060A_T0_MUL_T1 ();9061}90629063static void ac_t0_mul_prim ()9064{9065ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9066GR_COMBINE_FACTOR_LOCAL,9067GR_COMBINE_LOCAL_CONSTANT,9068GR_COMBINE_OTHER_TEXTURE);9069CA_PRIM ();9070A_USE_T0 ();9071}90729073static void ac_t0_mul_prim_mul_primlod ()9074{9075ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9076GR_COMBINE_FACTOR_LOCAL,9077GR_COMBINE_LOCAL_CONSTANT,9078GR_COMBINE_OTHER_TEXTURE);9079CA_PRIM_MUL_PRIMLOD ();9080A_USE_T0 ();9081}90829083static void ac_t1_mul_prim ()9084{9085ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9086GR_COMBINE_FACTOR_LOCAL,9087GR_COMBINE_LOCAL_CONSTANT,9088GR_COMBINE_OTHER_TEXTURE);9089CA_PRIM ();9090if (rdp.cycle_mode == 0)9091A_USE_T0 ();9092else9093A_USE_T1 ();9094}90959096//Added by Gonetz9097static void ac__t1_sub_one_mul_primlod_add_t0__mul_prim ()9098{9099if (cmb.combine_ext)9100{9101T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9102GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9103GR_CMBX_ZERO, 0,9104GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9105T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,9106GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,9107GR_CMBX_DETAIL_FACTOR, 0,9108GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9109cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;9110percent = (float)lod_frac / 255.0f;9111}9112else9113{9114cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;9115cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;9116percent = (255 - lod_frac) / 255.0f;9117cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;9118cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;9119}9120ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9121GR_COMBINE_FACTOR_LOCAL,9122GR_COMBINE_LOCAL_CONSTANT,9123GR_COMBINE_OTHER_TEXTURE);9124CA_PRIM ();9125cmb.dc0_detailmax = cmb.dc1_detailmax = percent;9126cmb.tex |= 3;9127}91289129static void ac__t0_sub_t1_mul_enva_add_t0__mul_prim ()9130{9131ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9132GR_COMBINE_FACTOR_LOCAL,9133GR_COMBINE_LOCAL_CONSTANT,9134GR_COMBINE_OTHER_TEXTURE);9135CA_PRIM ();9136if (cmb.combine_ext)9137{9138T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9139GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9140GR_CMBX_ZERO, 0,9141GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9142T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,9143GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,9144GR_CMBX_TMU_CALPHA, 0,9145GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9146cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;9147cmb.tex |= 3;9148}9149else9150{9151A_T0_MUL_T1 ();9152}9153}91549155static void ac__t0_sub_one_mul_enva_add_t0__mul_prim ()9156{9157ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9158GR_COMBINE_FACTOR_LOCAL,9159GR_COMBINE_LOCAL_CONSTANT,9160GR_COMBINE_OTHER_TEXTURE);9161CA_PRIM ();9162if (cmb.combine_ext)9163{9164T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,9165GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,9166GR_CMBX_TMU_CALPHA, 0,9167GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9168SETSHADE_A(0xFF);9169cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;9170cmb.tex |= 1;9171}9172else9173{9174A_USE_T0 ();9175}9176}91779178static void ac__t0_sub_t1_mul_primlod_add_t0__mul_prim ()9179{9180ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9181GR_COMBINE_FACTOR_LOCAL,9182GR_COMBINE_LOCAL_CONSTANT,9183GR_COMBINE_OTHER_TEXTURE);9184CA_PRIM ();9185if (cmb.combine_ext)9186{9187T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9188GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9189GR_CMBX_ZERO, 0,9190GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9191T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,9192GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,9193GR_CMBX_DETAIL_FACTOR, 0,9194GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9195cmb.tex |= 3;9196percent = (float)lod_frac / 255.0f;9197cmb.dc0_detailmax = cmb.dc1_detailmax = percent;9198}9199else9200{9201A_T0_INTER_T1_USING_FACTOR (lod_frac);9202}9203}92049205static void ac__t1_sub_prim_mul_primlod_add_t0__mul_prim ()9206{9207ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9208GR_COMBINE_FACTOR_LOCAL,9209GR_COMBINE_LOCAL_CONSTANT,9210GR_COMBINE_OTHER_TEXTURE);9211CA_PRIM ();9212if (cmb.combine_ext)9213{9214T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9215GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9216GR_CMBX_ZERO, 0,9217GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9218T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,9219GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,9220GR_CMBX_DETAIL_FACTOR, 0,9221GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9222cmb.tex |= 3;9223cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);9224percent = (float)lod_frac / 255.0f;9225cmb.dc0_detailmax = cmb.dc1_detailmax = percent;9226}9227else9228{9229A_T0_INTER_T1_USING_FACTOR (lod_frac);9230}9231}92329233static void ac__t1_sub_t0_mul_enva_add_t1__mul_prim ()9234{9235ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9236GR_COMBINE_FACTOR_LOCAL,9237GR_COMBINE_LOCAL_CONSTANT,9238GR_COMBINE_OTHER_TEXTURE);9239CA_PRIM ();9240if (cmb.combine_ext)9241{9242T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9243GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9244GR_CMBX_ZERO, 0,9245GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9246T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,9247GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,9248GR_CMBX_TMU_CALPHA, 0,9249GR_CMBX_B, 0);9250cmb.tex |= 3;9251cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF);9252}9253else9254{9255wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);9256A_T0_INTER_T1_USING_FACTOR (factor);9257}9258}92599260static void ac__t1_sub_t0_mul_primlod__mul_env_add_prim ()9261{9262ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9263GR_COMBINE_FACTOR_ONE,9264GR_COMBINE_LOCAL_CONSTANT,9265GR_COMBINE_OTHER_TEXTURE);9266CA_PRIM ();9267if (cmb.combine_ext)9268{9269T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9270GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9271GR_CMBX_ZERO, 0,9272GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9273T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,9274GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,9275GR_CMBX_TMU_CALPHA, 0,9276GR_CMBX_ZERO, 0);9277cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (wxUint32)((float)(rdp.env_color&0xFF)*(float)rdp.prim_lodfrac/255.0f);9278}9279else9280{9281cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL;9282cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL;9283cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;9284percent = (rdp.prim_lodfrac * (rdp.env_color&0xFF)) / 65025.0f;9285cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \9286}9287cmb.tex |= 3;9288}92899290static void ac__t0_sub_one_mul_enva_add_t1__mul_prim ()9291{9292if (cmb.combine_ext)9293{9294T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9295GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9296GR_CMBX_ZERO, 0,9297GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9298T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,9299GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9300GR_CMBX_TMU_CALPHA, 0,9301GR_CMBX_B, 0);9302cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;9303cmb.tex |= 3;9304ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,9305GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,9306GR_CMBX_ITALPHA, 0,9307GR_CMBX_ZERO, 0);9308CA_ENV ();9309SETSHADE_A_PRIM ();9310}9311else9312{9313ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9314GR_COMBINE_FACTOR_LOCAL,9315GR_COMBINE_LOCAL_ITERATED,9316GR_COMBINE_OTHER_TEXTURE);9317SETSHADE_A_PRIM ();9318SETSHADE_A_ENV ();9319A_T0_MUL_T1 ();9320}9321}93229323static void ac__t1_mul_prima_add_t0__mul_env ()9324{9325ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9326GR_COMBINE_FACTOR_LOCAL,9327GR_COMBINE_LOCAL_CONSTANT,9328GR_COMBINE_OTHER_TEXTURE);9329CA_ENV ();9330A_T1_MUL_PRIMA_ADD_T0 ();9331}93329333static void ac__t1_mul_enva_add_t0__mul_prim ()9334{9335ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9336GR_COMBINE_FACTOR_LOCAL,9337GR_COMBINE_LOCAL_CONSTANT,9338GR_COMBINE_OTHER_TEXTURE);9339CA_PRIM ();9340A_T1_MUL_ENVA_ADD_T0 ();9341}93429343static void ac_t0_mul_primlod ()9344{9345ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9346GR_COMBINE_FACTOR_LOCAL,9347GR_COMBINE_LOCAL_CONSTANT,9348GR_COMBINE_OTHER_TEXTURE);9349CA_PRIMLOD ();9350A_USE_T0 ();9351}93529353static void ac_t1_mul_primlod ()9354{9355ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9356GR_COMBINE_FACTOR_LOCAL,9357GR_COMBINE_LOCAL_CONSTANT,9358GR_COMBINE_OTHER_TEXTURE);9359CA_PRIMLOD ();9360A_USE_T1 ();9361}93629363//Added by Gonetz9364static void ac__t0_add_t1__mul_prim ()9365{9366ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9367GR_COMBINE_FACTOR_LOCAL,9368GR_COMBINE_LOCAL_CONSTANT,9369GR_COMBINE_OTHER_TEXTURE);9370CA_PRIM ();9371A_T0_ADD_T1 ();9372}93739374//Added by Gonetz9375static void ac__t0_add_t1__mul_primlod ()9376{9377ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9378GR_COMBINE_FACTOR_LOCAL,9379GR_COMBINE_LOCAL_CONSTANT,9380GR_COMBINE_OTHER_TEXTURE);9381CA_PRIMLOD ();9382A_T0_ADD_T1 ();9383}93849385//Added by Gonetz9386static void ac__t0_mul_t1__mul_primlod ()9387{9388ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9389GR_COMBINE_FACTOR_LOCAL,9390GR_COMBINE_LOCAL_CONSTANT,9391GR_COMBINE_OTHER_TEXTURE);9392CA_PRIMLOD ();9393A_T0_MUL_T1 ();9394}93959396static void ac_t0_mul_env ()9397{9398ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9399GR_COMBINE_FACTOR_LOCAL,9400GR_COMBINE_LOCAL_CONSTANT,9401GR_COMBINE_OTHER_TEXTURE);9402CA_ENV ();9403A_USE_T0 ();9404}94059406static void ac_t0_mul_env_mul_primlod ()9407{9408ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9409GR_COMBINE_FACTOR_LOCAL,9410GR_COMBINE_LOCAL_CONSTANT,9411GR_COMBINE_OTHER_TEXTURE);9412CA_ENV_MUL_PRIMLOD ();9413A_USE_T0 ();9414}94159416static void ac_t1_mul_env () //Added by Gonetz9417{9418ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9419GR_COMBINE_FACTOR_LOCAL,9420GR_COMBINE_LOCAL_CONSTANT,9421GR_COMBINE_OTHER_TEXTURE);9422CA_ENV ();9423// if ((settings.hacks&hack_Powerpuff) && (rdp.last_tile == 0))9424if (rdp.cycle_mode == 0)9425A_USE_T0 ();9426else9427A_USE_T1 ();9428}94299430static void ac__t1_sub_one_mul_primlod_add_t0__mul_env ()9431{9432if (cmb.combine_ext)9433{9434T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9435GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9436GR_CMBX_ZERO, 0,9437GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9438T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,9439GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,9440GR_CMBX_DETAIL_FACTOR, 0,9441GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9442cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;9443percent = (float)lod_frac / 255.0f;9444}9445else9446{9447cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;9448cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;9449percent = (255 - lod_frac) / 255.0f;9450cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;9451cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;9452}9453ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9454GR_COMBINE_FACTOR_LOCAL,9455GR_COMBINE_LOCAL_CONSTANT,9456GR_COMBINE_OTHER_TEXTURE);9457CA_ENV ();9458cmb.dc0_detailmax = cmb.dc1_detailmax = percent;9459cmb.tex |= 3;9460}94619462static void ac_t0_mul_shade ()9463{9464ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9465GR_COMBINE_FACTOR_LOCAL,9466GR_COMBINE_LOCAL_ITERATED,9467GR_COMBINE_OTHER_TEXTURE);9468A_USE_T0 ();9469}94709471static void ac_t1_mul_shade ()9472{9473ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9474GR_COMBINE_FACTOR_LOCAL,9475GR_COMBINE_LOCAL_ITERATED,9476GR_COMBINE_OTHER_TEXTURE);9477A_USE_T1 ();9478}94799480//Added by Gonetz9481static void ac__t0_add_t1__mul_shade ()9482{9483ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9484GR_COMBINE_FACTOR_LOCAL,9485GR_COMBINE_LOCAL_ITERATED,9486GR_COMBINE_OTHER_TEXTURE);9487A_T0_ADD_T1 ();9488}94899490static void ac__t0_mul_primlod_add_t0__mul_shade ()9491{9492ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9493GR_COMBINE_FACTOR_LOCAL,9494GR_COMBINE_LOCAL_ITERATED,9495GR_COMBINE_OTHER_TEXTURE);9496if (cmb.combine_ext)9497{9498T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9499GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,9500GR_CMBX_DETAIL_FACTOR, 0,9501GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9502cmb.tex |= 1;9503percent = (float)lod_frac / 255.0f;9504cmb.dc0_detailmax = cmb.dc1_detailmax = percent;9505}9506else9507{9508A_USE_T0 ();9509}9510}95119512static void ac__t1_mul_prima_add_t0__mul_shade ()9513{9514ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9515GR_COMBINE_FACTOR_LOCAL,9516GR_COMBINE_LOCAL_ITERATED,9517GR_COMBINE_OTHER_TEXTURE);9518A_T1_MUL_PRIMA_ADD_T0 ();9519}95209521//Added by Gonetz9522static void ac__t0_sub_t1__mul_shade ()9523{9524ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9525GR_COMBINE_FACTOR_LOCAL,9526GR_COMBINE_LOCAL_ITERATED,9527GR_COMBINE_OTHER_TEXTURE);9528if (cmb.combine_ext)9529{9530T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9531GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9532GR_CMBX_ZERO, 0,9533GR_CMBX_B, 0);9534T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,9535GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,9536GR_CMBX_ZERO, 1,9537GR_CMBX_ZERO, 0);9538cmb.tex |= 3;9539}9540else9541{9542A_T0_SUB_T1 ();9543}9544}95459546static void ac__t1_mul_t1_add_t1__mul_shade ()9547{9548ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9549GR_COMBINE_FACTOR_LOCAL,9550GR_COMBINE_LOCAL_ITERATED,9551GR_COMBINE_OTHER_TEXTURE);9552if (cmb.combine_ext)9553{9554T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9555GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,9556GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,9557GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9558T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,9559GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9560GR_CMBX_ZERO, 1,9561GR_CMBX_ZERO, 0);9562cmb.tex |= 2;9563}9564else9565{9566A_USE_T1 ();9567}9568}95699570static void ac__t1_mul_enva_add_t0__mul_shade ()9571{9572ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9573GR_COMBINE_FACTOR_LOCAL,9574GR_COMBINE_LOCAL_ITERATED,9575GR_COMBINE_OTHER_TEXTURE);9576A_T1_MUL_ENVA_ADD_T0 ();9577}95789579static void ac__t1_sub_one_mul_primlod_add_t0__mul_shade ()9580{9581if (cmb.combine_ext)9582{9583T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9584GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9585GR_CMBX_ZERO, 0,9586GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9587T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,9588GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,9589GR_CMBX_DETAIL_FACTOR, 0,9590GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9591cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;9592percent = (float)lod_frac / 255.0f;9593}9594else9595{9596cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;9597cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;9598percent = (255 - lod_frac) / 255.0f;9599cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;9600cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;9601}9602ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9603GR_COMBINE_FACTOR_LOCAL,9604GR_COMBINE_LOCAL_ITERATED,9605GR_COMBINE_OTHER_TEXTURE);9606cmb.dc0_detailmax = cmb.dc1_detailmax = percent;9607cmb.tex |= 3;9608}96099610static void ac__t1_sub_shade_mul_primlod_add_t0__mul_shade ()9611{9612ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9613GR_COMBINE_FACTOR_LOCAL,9614GR_COMBINE_LOCAL_CONSTANT,9615GR_COMBINE_OTHER_TEXTURE);9616CA_PRIM ();9617if (cmb.combine_ext)9618{9619T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9620GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9621GR_CMBX_ZERO, 0,9622GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9623T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,9624GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,9625GR_CMBX_DETAIL_FACTOR, 0,9626GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9627cmb.tex |= 3;9628percent = (float)lod_frac / 255.0f;9629cmb.dc0_detailmax = cmb.dc1_detailmax = percent;9630}9631else9632{9633A_T0_INTER_T1_USING_FACTOR (lod_frac);9634}9635}96369637//Added by Gonetz9638static void ac_prim_mul_prim ()9639{9640ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9641GR_COMBINE_FACTOR_LOCAL,9642GR_COMBINE_LOCAL_CONSTANT,9643GR_COMBINE_OTHER_ITERATED);9644CA_PRIM ();9645SETSHADE_A_PRIM ();9646}96479648//Added by Gonetz9649static void ac_prim_mul_primlod ()9650{9651ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9652GR_COMBINE_FACTOR_LOCAL,9653GR_COMBINE_LOCAL_CONSTANT,9654GR_COMBINE_OTHER_ITERATED);9655CA_PRIMLOD ();9656SETSHADE_A_PRIM ();9657}96589659static void ac_prim_mul_env ()9660{9661ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9662GR_COMBINE_FACTOR_LOCAL,9663GR_COMBINE_LOCAL_CONSTANT,9664GR_COMBINE_OTHER_ITERATED);9665CA_ENV ();9666SETSHADE_A_PRIM ();9667}96689669static void ac__prim_sub_one_mul_primlod_add_t0__mul_env ()9670{9671if (cmb.combine_ext)9672{9673T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,9674GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,9675GR_CMBX_DETAIL_FACTOR, 0,9676GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9677SETSHADE_A_PRIM ();9678cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;9679percent = (float)lod_frac / 255.0f;9680cmb.dc0_detailmax = cmb.dc1_detailmax = percent;9681cmb.tex |= 1;9682}9683else9684{9685A_USE_T0 ();9686}9687ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9688GR_COMBINE_FACTOR_LOCAL,9689GR_COMBINE_LOCAL_CONSTANT,9690GR_COMBINE_OTHER_TEXTURE);9691CA_ENV ();9692}96939694static void ac_prim_mul_shade ()9695{9696ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9697GR_COMBINE_FACTOR_LOCAL,9698GR_COMBINE_LOCAL_CONSTANT,9699GR_COMBINE_OTHER_ITERATED);9700CA_PRIM ();9701}97029703static void ac_env_mul_shade ()9704{9705ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9706GR_COMBINE_FACTOR_LOCAL,9707GR_COMBINE_LOCAL_CONSTANT,9708GR_COMBINE_OTHER_ITERATED);9709CA_ENV ();9710}97119712static void ac_primlod_mul_shade ()9713{9714ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9715GR_COMBINE_FACTOR_LOCAL,9716GR_COMBINE_LOCAL_CONSTANT,9717GR_COMBINE_OTHER_ITERATED);9718CA_PRIMLOD ();9719}97209721// ** A-B **9722static void ac_prim_sub_t0 ()9723{9724ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9725GR_COMBINE_FACTOR_ONE,9726GR_COMBINE_LOCAL_NONE,9727GR_COMBINE_OTHER_TEXTURE);9728A_USE_T0 ();97299730MOD_0 (TMOD_FULL_COLOR_SUB_TEX);9731MOD_0_COL (rdp.prim_color);9732}97339734// ** A*B+C **9735static void ac_t0_mul_prim_add_t0 ()9736{9737if (cmb.combine_ext)9738{9739ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,9740GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9741GR_CMBX_CONSTANT_ALPHA, 0,9742GR_CMBX_B, 0);9743CA_PRIM ();9744A_USE_T0 ();9745}9746else9747ac_t0();9748}97499750static void ac_t1_mul_prim_add_t0 ()9751{9752ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9753GR_COMBINE_FACTOR_ONE,9754GR_COMBINE_LOCAL_NONE,9755GR_COMBINE_OTHER_TEXTURE);9756A_T1_MUL_PRIMA_ADD_T0 ();9757}97589759static void ac__t0_inter_t1_using_t1a__mul_prim_add__t0_inter_t1_using_t1a ()9760{9761if (cmb.combine_ext)9762{9763ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,9764GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9765GR_CMBX_CONSTANT_ALPHA, 0,9766GR_CMBX_B, 0);9767CA_PRIM ();9768}9769else9770{9771ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9772GR_COMBINE_FACTOR_LOCAL,9773GR_COMBINE_LOCAL_CONSTANT,9774GR_COMBINE_OTHER_TEXTURE);9775CA_PRIM ();9776}9777A_T0_INTER_T1_USING_T1A ();9778}97799780static void ac__t1_inter_t0_using_t0a__mul_prim_add__t1_inter_t0_using_t0a ()9781{9782if (cmb.combine_ext)9783{9784ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,9785GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9786GR_CMBX_CONSTANT_ALPHA, 0,9787GR_CMBX_B, 0);9788CA_PRIM ();9789}9790else9791{9792ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9793GR_COMBINE_FACTOR_LOCAL,9794GR_COMBINE_LOCAL_CONSTANT,9795GR_COMBINE_OTHER_TEXTURE);9796CA_PRIM ();9797}9798A_T1_INTER_T0_USING_T0A ();9799}98009801//Added by Gonetz9802static void ac_t0_mul_prim_add_env ()9803{9804ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9805GR_COMBINE_FACTOR_TEXTURE_ALPHA,9806GR_COMBINE_LOCAL_CONSTANT,9807GR_COMBINE_OTHER_ITERATED);9808SETSHADE_A_PRIM ();9809CA_ENV ();9810A_USE_T0 ();9811}98129813//Added by Gonetz9814static void ac__t0_add_t1__mul_prim_add_env ()9815{9816ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9817GR_COMBINE_FACTOR_TEXTURE_ALPHA,9818GR_COMBINE_LOCAL_CONSTANT,9819GR_COMBINE_OTHER_ITERATED);9820SETSHADE_A_PRIM ();9821CA_ENV ();9822A_T0_ADD_T1 ();9823}98249825//Aded by Gonetz9826static void ac__t0_inter_t1_using_enva__mul_prim_add_env ()9827{9828ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9829GR_COMBINE_FACTOR_TEXTURE_ALPHA,9830GR_COMBINE_LOCAL_CONSTANT,9831GR_COMBINE_OTHER_ITERATED);9832SETSHADE_A_PRIM ();9833CA_ENV ();9834wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);9835A_T0_INTER_T1_USING_FACTOR (factor);9836}98379838//Aded by Gonetz9839static void ac_t0_mul_primlod_add_t0 ()9840{9841ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9842GR_COMBINE_FACTOR_ONE,9843GR_COMBINE_LOCAL_NONE,9844GR_COMBINE_OTHER_TEXTURE);9845if (cmb.combine_ext)9846{9847T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,9848GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,9849GR_CMBX_DETAIL_FACTOR, 0,9850GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);9851cmb.tex |= 1;9852percent = (float)lod_frac / 255.0f;9853cmb.dc0_detailmax = cmb.dc1_detailmax = percent;9854}9855else9856{9857A_USE_T0 ();9858}9859}98609861//Aded by Gonetz9862static void ac_t1_mul_primlod_add_t0 ()9863{9864ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,9865GR_COMBINE_FACTOR_ONE,9866GR_COMBINE_LOCAL_NONE,9867GR_COMBINE_OTHER_TEXTURE);9868A_T1_MUL_PRIMLOD_ADD_T0 ();9869}98709871//Aded by Gonetz9872static void ac_t0_mul_primlod_add_prim ()9873{9874ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9875GR_COMBINE_FACTOR_TEXTURE_ALPHA,9876GR_COMBINE_LOCAL_ITERATED,9877GR_COMBINE_OTHER_CONSTANT);9878CA_PRIMLOD ();9879SETSHADE_A_PRIM ();9880A_USE_T0 ();9881}98829883static void ac_t0_mul_primlod_add_env ()9884{9885ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9886GR_COMBINE_FACTOR_TEXTURE_ALPHA,9887GR_COMBINE_LOCAL_ITERATED,9888GR_COMBINE_OTHER_CONSTANT);9889CA_PRIMLOD ();9890SETSHADE_A_ENV ();9891A_USE_T0 ();9892}98939894//Aded by Gonetz9895static void ac__t0_add_t1__mul_primlod_add_prim ()9896{9897ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9898GR_COMBINE_FACTOR_TEXTURE_ALPHA,9899GR_COMBINE_LOCAL_ITERATED,9900GR_COMBINE_OTHER_CONSTANT);9901CA_PRIMLOD ();9902SETSHADE_A_PRIM ();9903A_T0_ADD_T1 ();9904}99059906//Added by Gonetz9907static void ac_t0_mul_env_add_prim ()9908{9909ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9910GR_COMBINE_FACTOR_TEXTURE_ALPHA,9911GR_COMBINE_LOCAL_CONSTANT,9912GR_COMBINE_OTHER_ITERATED);9913SETSHADE_A_ENV ();9914CA_PRIM ();9915A_USE_T0 ();9916}99179918//Added by Gonetz9919static void ac_t1_mul_prim_add_prim ()9920{9921ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9922GR_COMBINE_FACTOR_TEXTURE_ALPHA,9923GR_COMBINE_LOCAL_CONSTANT,9924GR_COMBINE_OTHER_ITERATED);9925SETSHADE_A_PRIM ();9926CA_PRIM ();9927A_USE_T1 ();9928}99299930//Added by Gonetz9931static void ac_prim_mul_shade_add_shade ()9932{9933ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9934GR_COMBINE_FACTOR_LOCAL,9935GR_COMBINE_LOCAL_ITERATED,9936GR_COMBINE_OTHER_CONSTANT);9937CA_PRIM ();9938}99399940//Added by Gonetz9941static void ac_t0_mul_shade_add_prim ()9942{9943ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9944GR_COMBINE_FACTOR_TEXTURE_ALPHA,9945GR_COMBINE_LOCAL_CONSTANT,9946GR_COMBINE_OTHER_ITERATED);9947CA_PRIM ();9948A_USE_T0 ();9949}99509951static void ac_t0_mul_shade_add_env ()9952{9953ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9954GR_COMBINE_FACTOR_TEXTURE_ALPHA,9955GR_COMBINE_LOCAL_CONSTANT,9956GR_COMBINE_OTHER_ITERATED);9957CA_ENV ();9958A_USE_T0 ();9959}99609961static void ac_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade ()9962{9963ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9964GR_COMBINE_FACTOR_TEXTURE_ALPHA,9965GR_COMBINE_LOCAL_ITERATED,9966GR_COMBINE_OTHER_CONSTANT);9967CA_INVPRIM ();9968MULSHADE_A_PRIM ();9969A_T0_MUL_T1 ();9970}99719972// ** A*B+C*D **9973static void ac_t0_mul_prim_add_shade_mul_one_minus_prim ()9974{9975ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,9976GR_COMBINE_FACTOR_TEXTURE_ALPHA,9977GR_COMBINE_LOCAL_ITERATED,9978GR_COMBINE_OTHER_CONSTANT);9979MULSHADE_A_1MPRIM ();9980CA_PRIM ();9981A_USE_T0 ();9982}99839984// ** (A*B+C)*D **9985static void ac__t0_mul_primlod_add_shade__mul_shade ()9986{9987if (cmb.combine_ext)9988{9989T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,9990GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,9991GR_CMBX_DETAIL_FACTOR, 0,9992GR_CMBX_B, 0);9993cmb.tex |= 1;9994percent = (float)lod_frac / 255.0f;9995cmb.dc0_detailmax = cmb.dc1_detailmax = percent;9996ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,9997GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,9998GR_CMBX_ITALPHA, 0,9999GR_CMBX_ZERO, 0);10000}10001else10002{10003ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10004GR_COMBINE_FACTOR_LOCAL,10005GR_COMBINE_LOCAL_ITERATED,10006GR_COMBINE_OTHER_TEXTURE);10007A_USE_T0 ();10008}10009}1001010011static void ac__t1_mul_primlod_add_shade__mul_shade ()10012{10013if (cmb.combine_ext)10014{10015T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10016GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10017GR_CMBX_ZERO, 0,10018GR_CMBX_B, 0);10019T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,10020GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,10021GR_CMBX_DETAIL_FACTOR, 0,10022GR_CMBX_B, 0);10023cmb.tex |= 2;10024percent = (float)lod_frac / 255.0f;10025cmb.dc0_detailmax = cmb.dc1_detailmax = percent;10026ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10027GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,10028GR_CMBX_ITALPHA, 0,10029GR_CMBX_ZERO, 0);10030}10031else10032{10033ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10034GR_COMBINE_FACTOR_LOCAL,10035GR_COMBINE_LOCAL_ITERATED,10036GR_COMBINE_OTHER_TEXTURE);10037A_USE_T1 ();10038}10039}1004010041// ** ((A-B)*C+D)+E **10042static void ac__t0_sub_t1_mul_prim_add_shade__mul_shade ()10043//(t0-t1)*prim+shade, (cmb-0)*shade+010044{10045if (cmb.combine_ext)10046{10047T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10048GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10049GR_CMBX_ZERO, 0,10050GR_CMBX_B, 0);10051T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,10052GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,10053GR_CMBX_TMU_CALPHA, 0,10054GR_CMBX_ZERO, 0);10055cmb.tex |= 3;10056cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);10057ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10058GR_CMBX_ITALPHA, GR_FUNC_MODE_X,10059GR_CMBX_ITALPHA, 0,10060GR_CMBX_ZERO, 0);10061}10062else10063{10064ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA,10065GR_COMBINE_FACTOR_TEXTURE_ALPHA,10066GR_COMBINE_LOCAL_ITERATED,10067GR_COMBINE_OTHER_CONSTANT);10068CA_PRIM ();10069A_T1_SUB_T0 ();10070}10071}1007210073static void ac__t1_sub_t0_mul_prim_add_shade__mul_shade ()10074//(t1-t0)*prim+shade, (cmb-0)*shade+010075{10076if (cmb.combine_ext)10077{10078T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10079GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10080GR_CMBX_ZERO, 0,10081GR_CMBX_B, 0);10082T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,10083GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,10084GR_CMBX_TMU_CALPHA, 0,10085GR_CMBX_ZERO, 0);10086cmb.tex |= 3;10087cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);10088ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10089GR_CMBX_ITALPHA, GR_FUNC_MODE_X,10090GR_CMBX_ITALPHA, 0,10091GR_CMBX_ZERO, 0);10092}10093else10094{10095ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA,10096GR_COMBINE_FACTOR_TEXTURE_ALPHA,10097GR_COMBINE_LOCAL_ITERATED,10098GR_COMBINE_OTHER_CONSTANT);10099CA_PRIM ();10100A_T1_SUB_T0 ();10101}10102}1010310104// ** A*B*C **10105static void ac__t0_mul_t1__mul_prim ()10106{10107ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10108GR_COMBINE_FACTOR_LOCAL,10109GR_COMBINE_LOCAL_CONSTANT,10110GR_COMBINE_OTHER_TEXTURE);10111CA_PRIM ();10112if (voodoo.sup_large_tex || rdp.tiles[1].lr_s < 256) //hack for RR64 pause screen10113{10114A_T0_MUL_T1 ();10115}10116else10117{10118A_USE_T0 ();10119}10120}1012110122static void ac__t0_mul_t1__mul_env ()10123{10124ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10125GR_COMBINE_FACTOR_LOCAL,10126GR_COMBINE_LOCAL_CONSTANT,10127GR_COMBINE_OTHER_TEXTURE);10128CA_ENV ();10129A_T0_MUL_T1 ();10130}1013110132static void ac__t0_mul_t1__mul_env_mul_shade ()10133{10134ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10135GR_COMBINE_FACTOR_LOCAL,10136GR_COMBINE_LOCAL_ITERATED,10137GR_COMBINE_OTHER_TEXTURE);10138MULSHADE_A_ENV ();10139A_T0_MUL_T1 ();10140}1014110142static void ac__t0_mul_t1__mul_prim_mul_shade ()10143{10144ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10145GR_COMBINE_FACTOR_LOCAL,10146GR_COMBINE_LOCAL_ITERATED,10147GR_COMBINE_OTHER_TEXTURE);10148MULSHADE_A_PRIM ();10149A_T0_MUL_T1 ();10150}1015110152static void ac__t0_mul_t1__mul_shade ()10153{10154ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10155GR_COMBINE_FACTOR_LOCAL,10156GR_COMBINE_LOCAL_ITERATED,10157GR_COMBINE_OTHER_TEXTURE);10158A_T0_MUL_T1 ();10159}1016010161static void ac__t0_add_prim_mul_shade__mul_shade ()10162{10163// (shade-0)*prim+t0, (cmb-0)*shade+010164if (cmb.combine_ext)10165{10166T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,10167GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10168GR_CMBX_TMU_CALPHA, 0,10169GR_CMBX_B, 0);10170cmb.tex |= 1;10171cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);10172ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10173GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,10174GR_CMBX_ITALPHA, 0,10175GR_CMBX_ZERO, 0);10176}10177else10178{10179ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10180GR_COMBINE_FACTOR_ONE,10181GR_COMBINE_LOCAL_ITERATED,10182GR_COMBINE_OTHER_TEXTURE);10183MULSHADE_A_PRIM ();10184A_USE_T0();10185}10186}1018710188//Added by Gonetz10189static void ac_t0_mul_prim_mul_prim ()10190{10191ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10192GR_COMBINE_FACTOR_LOCAL,10193GR_COMBINE_LOCAL_ITERATED,10194GR_COMBINE_OTHER_TEXTURE);10195SETSHADE_A_PRIM ();10196SETSHADE_A_PRIM ();10197A_USE_T0 ();10198}1019910200static void ac_t0_mul_prim_mul_env ()10201{10202ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10203GR_COMBINE_FACTOR_LOCAL,10204GR_COMBINE_LOCAL_CONSTANT,10205GR_COMBINE_OTHER_TEXTURE);10206CA_PRIMENV();10207A_USE_T0 ();10208}1020910210static void ac_t0_mul_prim_mul_shade ()10211{10212ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10213GR_COMBINE_FACTOR_LOCAL,10214GR_COMBINE_LOCAL_ITERATED,10215GR_COMBINE_OTHER_TEXTURE);10216MULSHADE_A_PRIM ();10217A_USE_T0 ();10218}1021910220static void ac_t1_mul_prim_mul_shade ()10221{10222ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10223GR_COMBINE_FACTOR_LOCAL,10224GR_COMBINE_LOCAL_ITERATED,10225GR_COMBINE_OTHER_TEXTURE);10226MULSHADE_A_PRIM ();10227A_USE_T1 ();10228}1022910230static void ac_t0_mul_env_mul_shade ()10231{10232if (rdp.cur_image && (rdp.cur_image->format != 0))10233{10234ac_shade ();10235return;10236}1023710238ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10239GR_COMBINE_FACTOR_LOCAL,10240GR_COMBINE_LOCAL_ITERATED,10241GR_COMBINE_OTHER_TEXTURE);10242MULSHADE_A_ENV ();10243A_USE_T0 ();10244}1024510246static void ac_t1_mul_env_mul_shade ()10247{10248ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10249GR_COMBINE_FACTOR_LOCAL,10250GR_COMBINE_LOCAL_ITERATED,10251GR_COMBINE_OTHER_TEXTURE);10252MULSHADE_A_ENV ();10253A_USE_T1 ();10254}1025510256static void ac_t0_mul_primlod_mul_prim () //Aded by Gonetz10257{10258ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10259GR_COMBINE_FACTOR_LOCAL,10260GR_COMBINE_LOCAL_CONSTANT,10261GR_COMBINE_OTHER_TEXTURE);10262cmb.ccolor |= (wxUint32)(lod_frac * (rdp.prim_color&0xFF) / 255);10263A_USE_T0 ();10264}1026510266// ** (A+B)*C **10267static void ac_prim_add_env_mul_t0 () //Aded by Gonetz10268{10269ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10270GR_COMBINE_FACTOR_LOCAL,10271GR_COMBINE_LOCAL_ITERATED,10272GR_COMBINE_OTHER_TEXTURE);10273SETSHADE_A_PRIM ();10274ADDSHADE_A_ENV ();10275A_USE_T0 ();10276}1027710278static void ac_t1_add_prim_mul_env () //Aded by Gonetz10279{10280ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10281GR_COMBINE_FACTOR_TEXTURE_ALPHA,10282GR_COMBINE_LOCAL_ITERATED,10283GR_COMBINE_OTHER_CONSTANT);10284CA_ENV ();10285SETSHADE_A_PRIM ();10286SETSHADE_A_ENV ();10287A_USE_T1 ();10288//(t1+prim)*env = t1*env + prim*env10289}1029010291// ** (A-B)*C **10292static void ac_t0_sub_prim_mul_shade ()10293{10294if (cmb.combine_ext)10295{10296T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,10297GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,10298GR_CMBX_ITALPHA, 0,10299GR_CMBX_ZERO, 0);10300cmb.tex |= 1;10301cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);10302ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10303GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,10304GR_CMBX_ZERO, 1,10305GR_CMBX_ZERO, 0);10306} else {10307ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,10308GR_COMBINE_FACTOR_ONE,10309GR_COMBINE_LOCAL_ITERATED,10310GR_COMBINE_OTHER_TEXTURE);10311MULSHADE_A_PRIM ();10312A_USE_T0 ();10313}10314}1031510316static void ac_t0_sub_prim_mul_shade_mul_env ()10317{10318if (cmb.combine_ext)10319{10320T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,10321GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,10322GR_CMBX_ITALPHA, 0,10323GR_CMBX_ZERO, 0);10324cmb.tex |= 1;10325cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);10326ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10327GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,10328GR_CMBX_CONSTANT_ALPHA, 0,10329GR_CMBX_ZERO, 0);10330CA_ENV ();10331} else {10332ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,10333GR_COMBINE_FACTOR_ONE,10334GR_COMBINE_LOCAL_ITERATED,10335GR_COMBINE_OTHER_TEXTURE);10336MULSHADE_A_PRIM ();10337MULSHADE_A_ENV ();10338A_USE_T0 ();10339}10340}1034110342static void ac_t0_sub_shade_mul_prim ()10343{10344if (cmb.combine_ext)10345{10346T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,10347GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,10348GR_CMBX_TMU_CALPHA, 0,10349GR_CMBX_ZERO, 0);10350cmb.tex |= 1;10351cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);10352ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10353GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,10354GR_CMBX_ZERO, 1,10355GR_CMBX_ZERO, 0);10356} else {10357ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,10358GR_COMBINE_FACTOR_ONE,10359GR_COMBINE_LOCAL_ITERATED,10360GR_COMBINE_OTHER_TEXTURE);10361MULSHADE_A_PRIM ();10362A_USE_T0 ();10363}10364}1036510366static void ac__t0_mul_t1__sub_prim_mul_shade () //Aded by Gonetz10367{10368if (cmb.combine_ext)10369{10370ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10371GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,10372GR_CMBX_ITALPHA, 0,10373GR_CMBX_ZERO, 0);10374CA_PRIM();10375}10376else10377{10378ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10379GR_COMBINE_FACTOR_LOCAL,10380GR_COMBINE_LOCAL_ITERATED,10381GR_COMBINE_OTHER_TEXTURE);10382}10383A_T0_MUL_T1 ();10384}1038510386static void ac__one_sub_t1_mul_t0_add_shade__sub_prim_mul_shade () //Aded by Gonetz10387{10388// (1-t1)*t0+shade, (cmb-prim)*shade+010389if (cmb.combine_ext)10390{10391T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10392GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10393GR_CMBX_ZERO, 0,10394GR_CMBX_B, 0);10395T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ONE_MINUS_X,10396GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,10397GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,10398GR_CMBX_B, 0);10399cmb.tex |= 3;10400ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10401GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,10402GR_CMBX_ITALPHA, 0,10403GR_CMBX_ZERO, 0);10404CA_PRIM();10405}10406else10407{10408ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10409GR_COMBINE_FACTOR_LOCAL,10410GR_COMBINE_LOCAL_ITERATED,10411GR_COMBINE_OTHER_TEXTURE);10412A_T0_MUL_T1 ();10413}10414}1041510416static void ac__t1_mul_primlod_add_t0__sub_prim_mul_shade ()10417{10418if (cmb.combine_ext)10419{10420ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10421GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,10422GR_CMBX_ITALPHA, 0,10423GR_CMBX_ZERO, 0);10424CA_PRIM ();10425}10426else10427{10428ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10429GR_COMBINE_FACTOR_LOCAL,10430GR_COMBINE_LOCAL_ITERATED,10431GR_COMBINE_OTHER_TEXTURE);10432}10433A_T1_MUL_PRIMLOD_ADD_T0 ();10434}1043510436static void ac__t1_mul_primlod_add_t0__sub_env_mul_prim () //Aded by Gonetz10437{10438if (cmb.combine_ext)10439{10440ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10441GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,10442GR_CMBX_ITALPHA, 0,10443GR_CMBX_ZERO, 0);10444CA_ENV ();10445SETSHADE_A_PRIM ();10446}10447else10448{10449ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10450GR_COMBINE_FACTOR_LOCAL,10451GR_COMBINE_LOCAL_CONSTANT,10452GR_COMBINE_OTHER_TEXTURE);10453CA_PRIM ();10454}10455A_T1_MUL_PRIMLOD_ADD_T0 ();10456}1045710458static void ac__t1_mul_prima_add_t0__sub_env_mul_shade () //Aded by Gonetz10459{10460if (cmb.combine_ext)10461{10462ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10463GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,10464GR_CMBX_ITALPHA, 0,10465GR_CMBX_ZERO, 0);10466CA_ENV ();10467}10468else10469{10470ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10471GR_COMBINE_FACTOR_LOCAL,10472GR_COMBINE_LOCAL_ITERATED,10473GR_COMBINE_OTHER_TEXTURE);10474}10475A_T1_MUL_PRIMA_ADD_T0 ();10476}1047710478static void ac_one_sub_t0_mul_prim () //Aded by Gonetz10479{10480ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,10481GR_COMBINE_FACTOR_TEXTURE_ALPHA,10482GR_COMBINE_LOCAL_CONSTANT,10483GR_COMBINE_OTHER_NONE);10484CA_PRIM ();10485A_USE_T0 ();10486}1048710488static void ac_one_sub_t0_mul_shade () //Aded by Gonetz10489{10490if (rdp.aTBuffTex[0] || rdp.aTBuffTex[1])10491{10492ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,10493GR_COMBINE_FACTOR_TEXTURE_ALPHA,10494GR_COMBINE_LOCAL_ITERATED,10495GR_COMBINE_OTHER_NONE);10496A_USE_T0 ();10497}10498else10499ac_zero();10500}1050110502static void ac_one_sub_prim_mul_t0 () //Aded by Gonetz10503{10504ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10505GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,10506GR_COMBINE_LOCAL_CONSTANT,10507GR_COMBINE_OTHER_TEXTURE);10508CA_PRIM ();10509A_USE_T0 ();10510}1051110512static void ac_one_sub_env_mul_t0 () //Aded by Gonetz10513{10514ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10515GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,10516GR_COMBINE_LOCAL_CONSTANT,10517GR_COMBINE_OTHER_TEXTURE);10518CA_ENV ();10519A_USE_T0 ();10520}1052110522static void ac_one_sub_shade_mul_t0 () //Aded by Gonetz10523{10524ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10525GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,10526GR_COMBINE_LOCAL_ITERATED,10527GR_COMBINE_OTHER_TEXTURE);10528A_USE_T0 ();10529}1053010531static void ac_one_sub_shade_mul_env () //Aded by Gonetz10532{10533ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10534GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,10535GR_COMBINE_LOCAL_ITERATED,10536GR_COMBINE_OTHER_CONSTANT);10537CA_ENV ();10538}1053910540static void ac_prim_sub_shade_mul_t0 () //Aded by Gonetz10541{10542ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,10543GR_COMBINE_FACTOR_TEXTURE_ALPHA,10544GR_COMBINE_LOCAL_ITERATED,10545GR_COMBINE_OTHER_CONSTANT);10546CA_PRIM ();10547A_USE_T0 ();10548}1054910550static void ac_prim_sub_shade_mul_prim () //Aded by Gonetz10551{10552if (cmb.combine_ext)10553{10554ACMBEXT(GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_X,10555GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,10556GR_CMBX_CONSTANT_ALPHA, 0,10557GR_CMBX_ZERO, 0);10558CA_PRIM();10559}10560else10561{10562if (!(rdp.prim_color & 0xFF))10563{10564ac_zero();10565}10566else10567{10568ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,10569GR_COMBINE_FACTOR_ONE,10570GR_COMBINE_LOCAL_ITERATED,10571GR_COMBINE_OTHER_CONSTANT);10572CA_PRIM();10573}10574}10575}1057610577static void ac_shade_sub_env_mul_t0 () //Aded by Gonetz10578{10579ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,10580GR_COMBINE_FACTOR_TEXTURE_ALPHA,10581GR_COMBINE_LOCAL_CONSTANT,10582GR_COMBINE_OTHER_ITERATED);10583CA_ENV ();10584A_USE_T0 ();10585}1058610587// ** (A-B)*C*D **10588static void ac_one_sub_t0_mul_prim_mul_shade () //Aded by Gonetz10589{10590ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,10591GR_COMBINE_FACTOR_TEXTURE_ALPHA,10592GR_COMBINE_LOCAL_ITERATED,10593GR_COMBINE_OTHER_NONE);10594MULSHADE_A_PRIM ();10595A_USE_T0 ();10596}1059710598// ** (A+B)*C*D **10599static void ac_one_plus_env_mul_prim_mul_shade ()10600{10601if (cmb.combine_ext)10602{10603ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ONE_MINUS_X,10604GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_X,10605GR_CMBX_ITALPHA, 0,10606GR_CMBX_ZERO, 0);10607MULSHADE_A_PRIM ();10608CA_ENV();10609}10610else10611ac_prim_mul_shade ();10612}1061310614// ** (A-B)*C+A **10615static void ac__t0_mul_t1__sub_env_mul_prim_add__t0_mul_t1 () //Aded by Gonetz10616{10617if (cmb.combine_ext)10618{10619ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10620GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,10621GR_CMBX_ITALPHA, 0,10622GR_CMBX_TEXTURE_ALPHA, 0);10623CA_ENV();10624SETSHADE_A_PRIM ();10625}10626else10627{10628ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10629GR_COMBINE_FACTOR_ONE,10630GR_COMBINE_LOCAL_NONE,10631GR_COMBINE_OTHER_TEXTURE);10632}10633A_T0_MUL_T1 ();10634}1063510636// ** (A-B)*C+D **10637static void ac__t0_sub_prim_mul_shade_add_shade__mul_env () //Aded by Gonetz10638{10639if (cmb.combine_ext)10640{10641T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,10642GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,10643GR_CMBX_ITALPHA, 0,10644GR_CMBX_ITALPHA, 0);10645cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF) ;10646cmb.tex |= 1;10647ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,10648GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10649GR_CMBX_CONSTANT_ALPHA, 0,10650GR_CMBX_ZERO, 0);10651CA_ENV();10652}10653else10654{10655ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10656GR_COMBINE_FACTOR_LOCAL,10657GR_COMBINE_LOCAL_ITERATED,10658GR_COMBINE_OTHER_TEXTURE);10659MULSHADE_A_ENV ();10660MOD_0 (TMOD_TEX_SUB_COL);10661MOD_0_COL (rdp.prim_color & 0xFF);10662A_USE_T0 ();10663}10664}1066510666static void ac_t0_sub_t1_mul_env_add_env () //Aded by Gonetz10667{10668ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10669GR_COMBINE_FACTOR_LOCAL,10670GR_COMBINE_LOCAL_CONSTANT,10671GR_COMBINE_OTHER_TEXTURE);10672CA_ENV();10673A_T0_SUB_T1 ();10674}1067510676static void ac_t0_sub_one_mul_enva_add_t1 () //Aded by Gonetz10677{10678if (cmb.combine_ext)10679{10680T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10681GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10682GR_CMBX_ZERO, 0,10683GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);10684T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,10685GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10686GR_CMBX_TMU_CALPHA, 0,10687GR_CMBX_B, 0);10688cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;10689cmb.tex |= 3;10690ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,10691GR_COMBINE_FACTOR_ONE,10692GR_COMBINE_LOCAL_CONSTANT,10693GR_COMBINE_OTHER_TEXTURE);10694CA_ENV();10695}10696else10697{10698ac__t0_mul_t1__mul_env ();10699}10700}1070110702static void ac_t1_sub_one_mul_enva_add_t0 () //Aded by Gonetz10703{10704if (cmb.combine_ext)10705{10706T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10707GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10708GR_CMBX_ZERO, 0,10709GR_CMBX_B, 0);10710T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,10711GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,10712GR_CMBX_TMU_CALPHA, 0,10713GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);10714cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;10715SETSHADE_A (0xFF);10716cmb.tex |= 3;10717ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10718GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,10719GR_CMBX_ZERO, 1,10720GR_CMBX_ZERO, 0);10721}10722else10723{10724ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10725GR_COMBINE_FACTOR_ONE,10726GR_COMBINE_LOCAL_NONE,10727GR_COMBINE_OTHER_TEXTURE);10728A_USE_T0 ();10729}10730}1073110732static void ac_t1_sub_one_mul_primlod_add_t0 () //Aded by Gonetz10733{10734ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10735GR_COMBINE_FACTOR_ONE,10736GR_COMBINE_LOCAL_NONE,10737GR_COMBINE_OTHER_TEXTURE);10738if (cmb.combine_ext)10739{10740T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10741GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10742GR_CMBX_ZERO, 0,10743GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);10744T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,10745GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,10746GR_CMBX_DETAIL_FACTOR, 0,10747GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);10748cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;10749percent = (float)lod_frac / 255.0f;10750cmb.dc0_detailmax = cmb.dc1_detailmax = percent;10751cmb.tex |= 3;10752}10753else10754{10755// A_T0_MUL_T1 ();10756// A_T1_MUL_PRIMLOD_ADD_T0 ();10757cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;10758cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;10759percent = (255 - lod_frac) / 255.0f;10760cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;10761cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;10762cmb.dc0_detailmax = cmb.dc1_detailmax = percent;10763cmb.tex |= 3;10764}10765}1076610767static void ac_t1_sub_prim_mul_shade_add_prim () //Aded by Gonetz10768{10769if (cmb.combine_ext)10770{10771T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10772GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,10773GR_CMBX_ITALPHA, 0,10774GR_CMBX_B, 0);10775T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,10776GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10777GR_CMBX_ZERO, 1,10778GR_CMBX_ZERO, 0);10779cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF) ;10780cmb.tex |= 2;10781ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10782GR_CMBX_ZERO, GR_FUNC_MODE_X,10783GR_CMBX_ZERO, 1,10784GR_CMBX_ZERO, 0);10785}10786else10787{10788ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10789GR_COMBINE_FACTOR_TEXTURE_ALPHA,10790GR_COMBINE_LOCAL_CONSTANT,10791GR_COMBINE_OTHER_ITERATED);10792CA_PRIM ();10793MOD_1 (TMOD_TEX_SUB_COL);10794MOD_1_COL (rdp.prim_color & 0xFF);10795A_USE_T1 ();10796}10797}1079810799static void ac_t0_sub_env_mul_prim_add_env () //Aded by Gonetz10800{10801ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10802GR_COMBINE_FACTOR_TEXTURE_ALPHA,10803GR_COMBINE_LOCAL_CONSTANT,10804GR_COMBINE_OTHER_ITERATED);10805SETSHADE_A_PRIM ();10806CA_ENV1MPRIM ();10807A_USE_T0 ();10808//(t0-env)*prim+env == t0*prim + env*(1-prim)10809}1081010811static void ac_t0_sub_env_mul_shadea_add_env () //Aded by Gonetz10812{10813if (!cmb.combine_ext)10814{10815ac_t0_mul_shade ();10816return;10817}10818T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,10819GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10820GR_CMBX_ZERO, 1,10821GR_CMBX_ZERO, 0);10822cmb.tex |= 1;10823ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,10824GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,10825GR_CMBX_ITALPHA, 0,10826GR_CMBX_B, 0);10827CA_ENV ();10828}1082910830static void ac__one_sub_t0_mul_t1_add_t0__mul_prim () //Aded by Gonetz10831{10832ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,10833GR_COMBINE_FACTOR_LOCAL,10834GR_COMBINE_LOCAL_CONSTANT,10835GR_COMBINE_OTHER_TEXTURE);10836CA_PRIM ();10837rdp.best_tex = 0;10838cmb.tex |= 3;10839cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL;10840cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;10841cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA;10842}1084310844static void ac_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz10845{10846ACMB (GR_COMBINE_FUNCTION_BLEND,10847GR_COMBINE_FACTOR_TEXTURE_ALPHA,10848GR_COMBINE_LOCAL_ITERATED,10849GR_COMBINE_OTHER_CONSTANT);10850SETSHADE_A_PRIM ();10851CA (0xFF);10852A_USE_T0 ();10853}1085410855static void ac_one_sub_t0_mul_env_add_t0 () //Aded by Gonetz10856{10857ACMB (GR_COMBINE_FUNCTION_BLEND,10858GR_COMBINE_FACTOR_TEXTURE_ALPHA,10859GR_COMBINE_LOCAL_ITERATED,10860GR_COMBINE_OTHER_CONSTANT);10861SETSHADE_A_ENV ();10862CA (0xFF);10863A_USE_T0 ();10864}1086510866static void ac_one_sub_t0_mul_primlod_add_prim () //Aded by Gonetz10867{10868ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10869GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA,10870GR_COMBINE_LOCAL_ITERATED,10871GR_COMBINE_OTHER_CONSTANT);10872SETSHADE_A_PRIM ();10873CA_PRIMLOD();10874A_USE_T0 ();10875}1087610877static void ac_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz10878{10879ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10880GR_COMBINE_FACTOR_TEXTURE_ALPHA,10881GR_COMBINE_LOCAL_ITERATED,10882GR_COMBINE_OTHER_CONSTANT);10883CA_INVENV ();10884SETSHADE_A_PRIM ();10885SETSHADE_A_ENV ();10886A_USE_T0 ();10887//(prim-t0)*env+t0 = prim*env + t0*(1-env)10888}1088910890static void ac_prim_sub_env_mul_t0_add_env ()10891{10892ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,10893GR_COMBINE_FACTOR_TEXTURE_ALPHA,10894GR_COMBINE_LOCAL_ITERATED,10895GR_COMBINE_OTHER_CONSTANT);10896CA_PRIM ();10897SETSHADE_A_ENV ();10898A_USE_T0 ();10899}1090010901static void ac_prim_sub_env_mul_t1_add_env ()10902{10903ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,10904GR_COMBINE_FACTOR_TEXTURE_ALPHA,10905GR_COMBINE_LOCAL_ITERATED,10906GR_COMBINE_OTHER_CONSTANT);10907CA_PRIM ();10908SETSHADE_A_ENV ();10909A_USE_T1 ();10910}1091110912static void ac_prim_sub_env_mul_t0_add_one ()10913{10914ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10915GR_COMBINE_FACTOR_TEXTURE_ALPHA,10916GR_COMBINE_LOCAL_CONSTANT,10917GR_COMBINE_OTHER_ITERATED);10918CA (0xFF);10919SETSHADE_A_PRIMSUBENV ();10920A_USE_T0 ();10921}1092210923//Added by Gonetz10924static void ac_prim_sub_env_mul_shade_add_env ()10925{10926ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10927GR_COMBINE_FACTOR_ONE,10928GR_COMBINE_LOCAL_CONSTANT,10929GR_COMBINE_OTHER_ITERATED);10930CA_ENV ();10931MULSHADE_A_PRIMSUBENV ();10932}1093310934//Added by Gonetz10935static void ac_prim_sub_env_mul_shade_add_env_mul_t1 ()10936{10937ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10938GR_COMBINE_FACTOR_TEXTURE_ALPHA,10939GR_COMBINE_LOCAL_CONSTANT,10940GR_COMBINE_OTHER_ITERATED);10941CA_ENV ();10942MULSHADE_A_PRIMSUBENV ();10943A_USE_T1 ();10944}1094510946//Added by Gonetz10947static void ac_prim_sub_shade_mul_t0_add_shade ()10948{10949ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,10950GR_COMBINE_FACTOR_TEXTURE_ALPHA,10951GR_COMBINE_LOCAL_ITERATED,10952GR_COMBINE_OTHER_CONSTANT);10953CA_PRIM ();10954A_USE_T0 ();10955}1095610957//Added by Gonetz10958static void ac_one_sub_shade_mul_t1_add_shade ()10959{10960ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10961GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,10962GR_COMBINE_LOCAL_ITERATED,10963GR_COMBINE_OTHER_TEXTURE);10964A_USE_T1 ();10965}1096610967//Added by Gonetz10968static void ac_one_sub_env_mul_shade_add_env ()10969{10970ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,10971GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,10972GR_COMBINE_LOCAL_CONSTANT,10973GR_COMBINE_OTHER_ITERATED);10974CA_ENV ();10975}1097610977//Added by Gonetz10978static void ac_env_sub_prim_mul_t0_add_prim ()10979{10980ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,10981GR_COMBINE_FACTOR_TEXTURE_ALPHA,10982GR_COMBINE_LOCAL_ITERATED,10983GR_COMBINE_OTHER_CONSTANT);10984CA_ENV ();10985SETSHADE_A_PRIM ();10986A_USE_T0 ();10987}1098810989static void ac_one_sub_t1_add_t0_mul_env ()10990{10991if (cmb.combine_ext)10992{10993T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10994GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10995GR_CMBX_ZERO, 0,10996GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);10997T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,10998GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,10999GR_CMBX_TMU_CALPHA, 0,11000GR_CMBX_B, 1);11001cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF);11002cmb.tex |= 3;11003ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11004GR_COMBINE_FACTOR_ONE,11005GR_COMBINE_LOCAL_NONE,11006GR_COMBINE_OTHER_TEXTURE);11007}11008else11009{11010ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11011GR_COMBINE_FACTOR_LOCAL,11012GR_COMBINE_LOCAL_CONSTANT,11013GR_COMBINE_OTHER_TEXTURE);11014CA_ENV ();11015A_T0_ADD_T1();11016cmb.tmu1_a_invert = FXTRUE;11017}11018}1101911020static void ac_env_sub_prim_mul_shade_add_prim () //Added by Gonetz11021{11022ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,11023GR_COMBINE_FACTOR_ONE,11024GR_COMBINE_LOCAL_CONSTANT,11025GR_COMBINE_OTHER_ITERATED);11026CA_PRIM ();11027MULSHADE_A_ENVSUBPRIM ();11028}1102911030static void ac_env_sub_primshade_mul_t1_add_primshade ()11031{11032ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,11033GR_COMBINE_FACTOR_TEXTURE_ALPHA,11034GR_COMBINE_LOCAL_ITERATED,11035GR_COMBINE_OTHER_CONSTANT);11036CA_ENV ();11037MULSHADE_A_PRIM ();11038A_USE_T1 ();11039}1104011041static void ac_one_sub_prim_mul_t0_add_prim ()11042{11043ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,11044GR_COMBINE_FACTOR_TEXTURE_ALPHA,11045GR_COMBINE_LOCAL_ITERATED,11046GR_COMBINE_OTHER_CONSTANT);11047CA (0xFF);11048SETSHADE_A_PRIM ();11049A_USE_T0 ();11050}1105111052static void ac_one_sub_prim_mul_t0_add__prim_mul_env ()11053{11054ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,11055GR_COMBINE_FACTOR_TEXTURE_ALPHA,11056GR_COMBINE_LOCAL_ITERATED,11057GR_COMBINE_OTHER_CONSTANT);11058CA_INVPRIM ();11059SETSHADE_A_PRIM ();11060SETSHADE_A_ENV ();11061A_USE_T0 ();11062}1106311064static void ac_shade_sub_t0_mul_primlod_add_prim ()11065{11066if (cmb.combine_ext)11067{11068T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,11069GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,11070GR_CMBX_TMU_CALPHA, 0,11071GR_CMBX_ZERO, 0);11072cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (lod_frac&0xFF);11073cmb.tex |= 1;11074ACMBEXT(GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_X,11075GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,11076GR_CMBX_ZERO, 1,11077GR_CMBX_TEXTURE_ALPHA, 0);11078CA_PRIM ();11079}11080else11081ac_t0();11082}1108311084static void ac_shade_sub_env_mul_t0_add_prim ()11085{11086ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,11087GR_COMBINE_FACTOR_TEXTURE_ALPHA,11088GR_COMBINE_LOCAL_CONSTANT,11089GR_COMBINE_OTHER_ITERATED);11090SUBSHADE_A_ENV ();11091CA_PRIM ();11092A_USE_T0 ();11093}1109411095// ** A inter B using C **11096static void ac_t0_inter_t1_using_prima ()11097{11098ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11099GR_COMBINE_FACTOR_ONE,11100GR_COMBINE_LOCAL_NONE,11101GR_COMBINE_OTHER_TEXTURE);11102wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);11103A_T0_INTER_T1_USING_FACTOR (factor);11104}1110511106static void ac_t1_inter_t0_using_prima ()11107{11108ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11109GR_COMBINE_FACTOR_ONE,11110GR_COMBINE_LOCAL_NONE,11111GR_COMBINE_OTHER_TEXTURE);11112wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);11113A_T1_INTER_T0_USING_FACTOR (factor);11114}1111511116static void ac_t0_inter_t1_using_primlod ()11117{11118ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11119GR_COMBINE_FACTOR_ONE,11120GR_COMBINE_LOCAL_NONE,11121GR_COMBINE_OTHER_TEXTURE);11122A_T0_INTER_T1_USING_FACTOR (lod_frac);11123}1112411125static void ac_t0_inter_t1_using_enva ()11126{11127ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11128GR_COMBINE_FACTOR_ONE,11129GR_COMBINE_LOCAL_NONE,11130GR_COMBINE_OTHER_TEXTURE);11131wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);11132A_T0_INTER_T1_USING_FACTOR (factor);11133}1113411135static void ac_t1_inter_t0_using_enva ()11136{11137ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11138GR_COMBINE_FACTOR_ONE,11139GR_COMBINE_LOCAL_NONE,11140GR_COMBINE_OTHER_TEXTURE);11141wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);11142A_T1_INTER_T0_USING_FACTOR (factor);11143}1114411145//Added by Gonetz11146static void ac_t0_inter_t1_using_t0a ()11147{11148ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11149GR_COMBINE_FACTOR_ONE,11150GR_COMBINE_LOCAL_NONE,11151GR_COMBINE_OTHER_TEXTURE);11152A_T0_INTER_T1_USING_T0A ();11153}1115411155//Added by Gonetz11156static void ac_t0_inter_t1_using_t1a ()11157{11158ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11159GR_COMBINE_FACTOR_ONE,11160GR_COMBINE_LOCAL_NONE,11161GR_COMBINE_OTHER_TEXTURE);11162A_T0_INTER_T1_USING_T1A ();11163}1116411165//Added by Gonetz11166static void ac_t0_inter_t1_using_shadea ()11167{11168if (cmb.combine_ext)11169{11170ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,11171GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,11172GR_CMBX_ZERO, 1,11173GR_CMBX_ZERO, 0);11174}11175else11176{11177ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11178GR_COMBINE_FACTOR_ONE,11179GR_COMBINE_LOCAL_NONE,11180GR_COMBINE_OTHER_TEXTURE);11181}11182A_T0_INTER_T1_USING_SHADEA ();11183}1118411185// ** (A inter B using C) * D **1118611187static void ac__t0_inter_t1_using_primlod__mul_prim ()11188{11189ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11190GR_COMBINE_FACTOR_LOCAL,11191GR_COMBINE_LOCAL_CONSTANT,11192GR_COMBINE_OTHER_TEXTURE);11193CA_PRIM ();11194A_T0_INTER_T1_USING_FACTOR (lod_frac);11195}1119611197static void ac__t1_mul_primlod_add_t0__mul_prim ()11198{11199ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11200GR_COMBINE_FACTOR_LOCAL,11201GR_COMBINE_LOCAL_CONSTANT,11202GR_COMBINE_OTHER_TEXTURE);11203CA_PRIM ();11204A_T1_MUL_PRIMLOD_ADD_T0 ();11205}1120611207static void ac__t0_inter_t1_using_primlod__mul_env ()11208{11209ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11210GR_COMBINE_FACTOR_LOCAL,11211GR_COMBINE_LOCAL_CONSTANT,11212GR_COMBINE_OTHER_TEXTURE);11213CA_ENV ();11214A_T0_INTER_T1_USING_FACTOR (lod_frac);11215}1121611217static void ac__t1_mul_primlod_add_t0__mul_env ()11218{11219ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11220GR_COMBINE_FACTOR_LOCAL,11221GR_COMBINE_LOCAL_CONSTANT,11222GR_COMBINE_OTHER_TEXTURE);11223CA_ENV ();11224A_T1_MUL_PRIMLOD_ADD_T0 ();11225}1122611227static void ac__t0_inter_t1_using_primlod__mul_shade ()11228{11229if (settings.hacks & hack_Makers)11230{11231//rolling rock issue - it has zero shade alpha and thus rejected by alpha compare11232ac_t0_inter_t1_using_primlod();11233return;11234}11235ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11236GR_COMBINE_FACTOR_LOCAL,11237GR_COMBINE_LOCAL_ITERATED,11238GR_COMBINE_OTHER_TEXTURE);11239A_T0_INTER_T1_USING_FACTOR (lod_frac);11240}1124111242static void ac__t1_mul_primlod_add_t0__mul_shade ()11243{11244ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11245GR_COMBINE_FACTOR_LOCAL,11246GR_COMBINE_LOCAL_ITERATED,11247GR_COMBINE_OTHER_TEXTURE);11248A_T1_MUL_PRIMLOD_ADD_T0 ();11249}1125011251//Added by Gonetz11252static void ac__t0_inter_t1_using_prima__mul_env ()11253{11254ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11255GR_COMBINE_FACTOR_LOCAL,11256GR_COMBINE_LOCAL_CONSTANT,11257GR_COMBINE_OTHER_TEXTURE);11258CA_ENV ();11259wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);11260A_T0_INTER_T1_USING_FACTOR (factor);11261}1126211263//Added by Gonetz11264static void ac__t1_inter_t0_using_t0a__mul_prim ()11265{11266ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11267GR_COMBINE_FACTOR_LOCAL,11268GR_COMBINE_LOCAL_CONSTANT,11269GR_COMBINE_OTHER_TEXTURE);11270CA_PRIM ();11271A_T1_INTER_T0_USING_T0A ();11272}1127311274static void ac__t1_inter_t0_using_primlod__mul_prim ()11275{11276ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11277GR_COMBINE_FACTOR_LOCAL,11278GR_COMBINE_LOCAL_CONSTANT,11279GR_COMBINE_OTHER_TEXTURE);11280CA_PRIM ();11281A_T0_INTER_T1_USING_FACTOR (lod_frac);11282}1128311284static void ac__t1_inter_t0_using_prima__mul_env ()11285{11286ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11287GR_COMBINE_FACTOR_LOCAL,11288GR_COMBINE_LOCAL_CONSTANT,11289GR_COMBINE_OTHER_TEXTURE);11290CA_ENV ();11291wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);11292A_T1_INTER_T0_USING_FACTOR (factor);11293}1129411295//Added by Gonetz11296static void ac__t0_inter_t1_using_prima__mul_shade ()11297{11298ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11299GR_COMBINE_FACTOR_LOCAL,11300GR_COMBINE_LOCAL_ITERATED,11301GR_COMBINE_OTHER_TEXTURE);11302wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);11303A_T0_INTER_T1_USING_FACTOR (factor);11304}1130511306static void ac__t1_inter_t0_using_prima__mul_shade ()11307{11308ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11309GR_COMBINE_FACTOR_LOCAL,11310GR_COMBINE_LOCAL_ITERATED,11311GR_COMBINE_OTHER_TEXTURE);11312wxUint8 factor = (wxUint8)(rdp.prim_color&0xFF);11313A_T1_INTER_T0_USING_FACTOR (factor);11314}1131511316static void ac__t0_inter_t1_using_enva__mul_prim ()11317{11318ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11319GR_COMBINE_FACTOR_LOCAL,11320GR_COMBINE_LOCAL_CONSTANT,11321GR_COMBINE_OTHER_TEXTURE);11322CA_PRIM ();11323wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);11324A_T0_INTER_T1_USING_FACTOR (factor);11325}1132611327static void ac__env_sub_one_mul_t1_add_t0__mul_prim ()11328{11329ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11330GR_COMBINE_FACTOR_LOCAL,11331GR_COMBINE_LOCAL_CONSTANT,11332GR_COMBINE_OTHER_TEXTURE);11333CA_PRIM ();11334if (cmb.combine_ext)11335{11336T1ACMBEXT(GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_X,11337GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,11338GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,11339GR_CMBX_ZERO, 0);11340T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,11341GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,11342GR_CMBX_ZERO, 1,11343GR_CMBX_ZERO, 0);11344SETSHADE_A(0xFF);11345cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;11346cmb.tex |= 3;11347}11348else11349{11350wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);11351A_T0_INTER_T1_USING_FACTOR (factor);11352}11353}1135411355static void ac__t0_inter_t1_using_enva__mul_primlod ()11356{11357ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11358GR_COMBINE_FACTOR_LOCAL,11359GR_COMBINE_LOCAL_CONSTANT,11360GR_COMBINE_OTHER_TEXTURE);11361CA_PRIMLOD ();11362wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);11363A_T0_INTER_T1_USING_FACTOR (factor);11364}1136511366static void ac__t1_mul_enva_add_t0__sub_prim_mul_shade ()11367{11368if (cmb.combine_ext)11369{11370ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,11371GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,11372GR_CMBX_ITALPHA, 0,11373GR_CMBX_ZERO, 0);11374CA_PRIM ();11375}11376else11377{11378ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,11379GR_COMBINE_FACTOR_LOCAL,11380GR_COMBINE_LOCAL_ITERATED,11381GR_COMBINE_OTHER_TEXTURE);11382MULSHADE_A_PRIM ();11383}11384A_T1_MUL_ENVA_ADD_T0 ();11385}1138611387//Added by Gonetz11388static void ac__t0_inter_t1_using_t0a__mul_prim ()11389{11390ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11391GR_COMBINE_FACTOR_LOCAL,11392GR_COMBINE_LOCAL_CONSTANT,11393GR_COMBINE_OTHER_TEXTURE);11394CA_PRIM ();11395A_T0_INTER_T1_USING_T0A ();11396}1139711398//Added by Gonetz11399static void ac__t0_inter_t1_using_t1a__mul_prim ()11400{11401ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11402GR_COMBINE_FACTOR_LOCAL,11403GR_COMBINE_LOCAL_CONSTANT,11404GR_COMBINE_OTHER_TEXTURE);11405CA_PRIM ();11406A_T0_INTER_T1_USING_T1A ();11407}1140811409static void ac__t0_inter_t1_using_t1a__mul_shade ()11410{11411ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11412GR_COMBINE_FACTOR_LOCAL,11413GR_COMBINE_LOCAL_ITERATED,11414GR_COMBINE_OTHER_TEXTURE);11415A_T0_INTER_T1_USING_T1A ();11416}1141711418//Added by Gonetz11419static void ac__t0_inter_t1_using_shadea__mul_prim ()11420{11421if (cmb.combine_ext)11422{11423ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,11424GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,11425GR_CMBX_CONSTANT_ALPHA, 0,11426GR_CMBX_ZERO, 0);11427A_T0_INTER_T1_USING_SHADEA ();11428}11429else11430{11431ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11432GR_COMBINE_FACTOR_LOCAL,11433GR_COMBINE_LOCAL_CONSTANT,11434GR_COMBINE_OTHER_TEXTURE);11435A_T0_INTER_T1_USING_FACTOR (0x7F);11436}11437CA_PRIM ();11438}1143911440//Added by Gonetz11441static void ac__t0_inter_t1_using_shadea__mul_env ()11442{11443if (cmb.combine_ext)11444{11445ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,11446GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,11447GR_CMBX_CONSTANT_ALPHA, 0,11448GR_CMBX_ZERO, 0);11449A_T0_INTER_T1_USING_SHADEA ();11450}11451else11452{11453ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11454GR_COMBINE_FACTOR_LOCAL,11455GR_COMBINE_LOCAL_CONSTANT,11456GR_COMBINE_OTHER_TEXTURE);11457A_T0_INTER_T1_USING_FACTOR (0x7F);11458}11459CA_ENV ();11460}1146111462static void ac__t0_inter_t1_using_primlod__sub_env_mul_shade_add_shade ()11463{11464if (cmb.combine_ext)11465{11466ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,11467GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,11468GR_CMBX_ITALPHA, 0,11469GR_CMBX_ALOCAL, 0);11470CA_ENV ();11471A_T0_INTER_T1_USING_FACTOR (lod_frac);11472}11473else11474ac__t0_inter_t1_using_primlod__mul_shade ();11475}1147611477//Added by Gonetz11478static void ac__t0_inter_t1_using_enva__mul_shade ()11479{11480ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11481GR_COMBINE_FACTOR_LOCAL,11482GR_COMBINE_LOCAL_ITERATED,11483GR_COMBINE_OTHER_TEXTURE);11484wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);11485A_T0_INTER_T1_USING_FACTOR (factor);11486}1148711488static void ac__t0_inter_t1_using_primlod__mul_prim_add_env ()11489{11490ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,11491GR_COMBINE_FACTOR_TEXTURE_ALPHA,11492GR_COMBINE_LOCAL_CONSTANT,11493GR_COMBINE_OTHER_ITERATED);11494CA_ENV ();11495SETSHADE_A_PRIM ();11496A_T0_INTER_T1_USING_FACTOR (lod_frac);11497}1149811499//Added by Gonetz11500static void ac__t0_inter_t1_using_primlod__mul_shade_add_prim ()11501{11502ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,11503GR_COMBINE_FACTOR_TEXTURE_ALPHA,11504GR_COMBINE_LOCAL_CONSTANT,11505GR_COMBINE_OTHER_ITERATED);11506CA_PRIM ();11507A_T0_INTER_T1_USING_FACTOR (lod_frac);11508}1150911510//Added by Gonetz11511static void ac__t0_inter_t1_using_primlod__mul_env_add__t0_inter_t1_using_primlod ()11512{11513if (cmb.combine_ext)11514{11515ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,11516GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,11517GR_CMBX_CONSTANT_ALPHA, 0,11518GR_CMBX_B, 0);11519CA_ENV ();11520}11521else11522{11523ACMB (GR_COMBINE_FUNCTION_BLEND,11524GR_COMBINE_FACTOR_TEXTURE_ALPHA,11525GR_COMBINE_LOCAL_CONSTANT,11526GR_COMBINE_OTHER_ITERATED);11527SETSHADE_A_ENV ();11528CA (0xFF);11529}11530A_T0_INTER_T1_USING_FACTOR (lod_frac);11531}1153211533static void ac__t1_sub_one_mul_enva_add_t0__mul_prim ()11534{11535ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11536GR_COMBINE_FACTOR_LOCAL,11537GR_COMBINE_LOCAL_CONSTANT,11538GR_COMBINE_OTHER_TEXTURE);11539CA_PRIM ();11540if (cmb.combine_ext)11541{11542T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,11543GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,11544GR_CMBX_ZERO, 0,11545GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);11546T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,11547GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,11548GR_CMBX_DETAIL_FACTOR, 0,11549GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);11550cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;11551cmb.tex |= 3;11552cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;11553}11554else11555{11556// (t1-1)*env+t0, (cmb-0)*prim+011557A_T0_MUL_T1 ();1155811559MOD_1 (TMOD_TEX_SCALE_FAC_ADD_FAC);11560MOD_1_FAC (rdp.env_color & 0xFF);11561}11562}1156311564static void ac__one_inter_t0_using_prim__mul_env ()11565{11566if (cmb.combine_ext)11567{11568T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,11569GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,11570GR_CMBX_DETAIL_FACTOR, 0,11571GR_CMBX_B, 0);11572cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;11573cmb.tex |= 1;11574cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.prim_color&0xFF) / 255.0f;11575ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,11576GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_ZERO,11577GR_CMBX_CONSTANT_ALPHA, 0,11578GR_CMBX_ZERO, 0);11579CA_ENV ();11580}11581else11582{11583ac_t0_mul_prim_add_env ();11584}11585}1158611587static void ac__t1_sub_one_mul_enva_add_t0__mul_shade ()11588{11589ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,11590GR_COMBINE_FACTOR_LOCAL,11591GR_COMBINE_LOCAL_ITERATED,11592GR_COMBINE_OTHER_TEXTURE);11593CA_PRIM ();11594if (cmb.combine_ext)11595{11596T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,11597GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,11598GR_CMBX_ZERO, 0,11599GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);11600T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,11601GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,11602GR_CMBX_DETAIL_FACTOR, 0,11603GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);11604cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | 0xFF ;11605percent = (rdp.env_color&0xFF) / 255.0f;11606cmb.dc0_detailmax = cmb.dc1_detailmax = percent;11607cmb.tex |= 3;11608}11609else11610{11611wxUint8 factor = (wxUint8)(rdp.env_color&0xFF);11612A_T0_INTER_T1_USING_FACTOR (factor);11613}11614}1161511616static void ac_zero_sub_prim_mul_t0_add_prim ()11617{11618ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,11619GR_COMBINE_FACTOR_TEXTURE_ALPHA,11620GR_COMBINE_LOCAL_CONSTANT,11621GR_COMBINE_OTHER_ITERATED);11622SETSHADE_A (0);11623CA_PRIM ();11624A_USE_T0 ();11625}1162611627static void ac_one_sub_t0_mul_primshade ()11628{11629ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,11630GR_COMBINE_FACTOR_TEXTURE_ALPHA,11631GR_COMBINE_LOCAL_ITERATED,11632GR_COMBINE_OTHER_NONE);11633MULSHADE_A_PRIM ();11634A_USE_T0 ();11635}1163611637//****************************************************************11638// Combine List11639//11640// 3/13/02: I have converted the combine descriptions, now using11641// the correct values for each slot, instead of a one-for-all-11642// slot version. All of the descriptions marked with 'z' have11643// not yet been converted or checked. I have not totally redone11644// the modes, because they should be for the most part correct11645// as they are, even with the wrong descriptions. [Dave2001]11646//****************************************************************1164711648typedef void (*cmb_func)();11649typedef struct {11650wxUint32 key;11651cmb_func func;11652} COMBINER;1165311654static COMBINER color_cmb_list[] = {11655// { #CCSTART }11656// intro, Aidyn Chronicles. Added by Gonetz11657// (0-cmb)*env+cmb, (t1-t0)*0+t011658{0x05083812, cc_t0},11659//terminal, Spacestation Silicon Valley. Added by Gonetz11660// (0-0)*0+cmb, (0-0)*0+prim11661{0x1fff7fff, cc_prim},11662//chip in Spacestation Silicon Valley intro. Added by Gonetz11663// (0-0)*0+cmb, (prim-0)*shade+011664{0x1fffe4f3, cc_prim_mul_shade},11665// car, beetle adventure racing. Added by Gonetz11666// (t1-t0)*t0+t0, (cmb-shade)*prima+shade **can work incorrect**11667{0x21128a40, cc__t0_inter_t1_using_t0__sub_shade_mul_prima_add_shade},11668// Treasure opening, zelda11669// (t1-prim)*t0+t0, (prim-env)*cmb+env11670{0x2132a053, cc_prim_sub_env_mul__t1_sub_prim_mul_t0_add_t0__add_env},11671// yellow carpet, Pokemon Stadium 211672// (t1-env)*t0+t0, (cmb-0)*shade+011673{0x2152e4f0, cc__t1_sub_env_mul_t0_add_t0__mul_shade},11674// Water, doubut no mori11675// (t1-0)*t0+t0, (prim-0)*shade+cmb11676{0x21f204f3, cc__t1_mul_t0_add_t0__add_prim_mul_shade},11677// enemy transparent, paper mario. Addd by Gonetz11678// (t1-t0)*t1+t0, (env-prim)*cmb+prim11679{0x22126035, cc_env_sub_prim_mul__t0_inter_t1_using_t1__add_prim},11680// snowhead temple, zelda 2. Addd by Gonetz11681// (t1-t0)*t1+t0, (cmb-0)*shade+prim11682{0x221264f0, cc__t0_inter_t1_using_t1__mul_shade_add_prim},11683// snowhead temple entrance, zelda 2. Addd by Gonetz11684// (t1-t0)*t1+t0, (cmb-0)*prim+shade11685{0x221283f0, cc__t0_inter_t1_using_t1__mul_prim_add_shade},11686// teleportation, Spacestation Silicon Valley. Added by Gonetz11687// (t1-t0)*t1+t0, (prim-env)*cmb+env11688{0x2212a053, cc_prim_sub_env_mul__t0_inter_t1_using_t1__add_env},11689// pokemon fainted, Pokemon Stadium 211690// (prim-t0)*t1+t011691{0x22132213, cc_prim_sub_t0_mul_t1_add_t0},11692// attack, Ogre Battle 6411693// (1-t0)*t1+t0, (cmb-0)*prim+011694{0x2216e3f0, cc__t0_inter_one_using_t1__mul_prim},11695// Some gannon spell, zelda11696// (t1-0)*t1+t0, (prim-0)*cmb+011697{0x22f2e0f3, cc__t1_mul_t1_add_t0__mul_prim},11698// battle tanks 2 [Ogy]11699// (1-0)*t1+t0, (env-prim)*cmb+prim11700{0x22f66035, cc_env_sub_prim_mul__t0_add_t1__add_prim},11701// GASP Fighters11702// (1-0)*t1+t0, (shade-0)*cmb+011703{0x22f6e0f4, cc__t0_add_t1__mul_shade},11704// parts of a car, F1 World Grand Prix. Added by Gonetz11705// (1-0)*t1+t0, (cmb-0)*shade+011706{0x22f6e4f0, cc__t0_add_t1__mul_shade},11707// ???, zelda11708// (noise-0)*t1+t0, (prim-env)*cmb+env11709{0x22f7a053, cc_prim_sub_env_mul__t0_add_t1__add_env},11710// flashing arrow over buoy, wave race. Added by Gonetz11711// (t1-t0)*prim+t0, (env-cmb)*enva+cmb ** INC **11712{0x23120c05, cc__t0_inter_t1_using_prim__inter_env_using_enva},11713// ground, zelda2. Added by Gonetz11714// (t1-t0)*prim+t0, (cmb-0)*shade+011715{0x2312e4f0, cc__t0_inter_t1_using_prim__mul_shade},11716// wwf rules11717// (env-t0)*prim+t011718{0x23152315, cc_t0_inter_env_using_prim},11719// Paper Mario11720// (1-t0)*prim+t0, (1-t0)*t0+cmb ** INC **11721{0x23160116, cc_t0_add_prim_mul_one_sub_t0_add_t0},11722// intro, castlevania. Added by Gonetz11723// (1-t0)*prim+t011724{0x23162316, cc_one_sub_t0_mul_prim_add_t0},11725// Explosions, aerofighter's assault11726// (1-t0)*prim+t0, (shade-0)*cmb+011727{0x2316e0f4, cc_t0_mul_shade},11728//beetle adventure racing. Added by Gonetz11729// (1-t0)*prim+t0, (cmb-0)*shade+0 **INC**11730{0x2316e4f0, cc__t0_inter_one_using_prim__mul_shade},11731// Unknown player background, smash bros11732// (noise-t0)*prim+t0 ** INC **11733// {0x23172317, cc_t0},11734{0x23172317, cc_t0_inter_noise_using_prim},11735// paper mario. Added by Gonetz11736// (noise-prim)*prim+t0 ** INC **11737{0x23372337, cc_t0_add_prim},11738// strange mirror in stone temple, zelda 2. Added by Gonetz11739// (prim-env)*prim+t0, (cmb-0)*prim+0 ** INC **11740{0x2353e3f0, cc__prim_sub_env_mul_prim_add_t0__mul_prim},11741// Gilded sword, zelda 2. Added by Gonetz11742// (shade-env)*prim+t0, (cmb-0)*shade+env ** INC **11743{0x2354a4f0, cc__t0_add_prim_mul_shade__mul_shade_add_env},11744// Razor sword, zelda 2. Added by Gonetz11745// (shade-env)*prim+t0, (cmb-0)*shade+0 ** INC **11746{0x2354e4f0, cc__t0_add_prim_mul_shade__mul_shade},11747// menu, Mischief Makers. Added by Gonetz11748// (0-env)*prim+t0, (cmb-0)*shade+011749{0x235f235f, cc_t0_sub__prim_mul_env},11750// Deadly Arts logo. Added by Gonetz11751// (t0-0)*prim+t011752{0x23f123f1, cc_t0_mul_prim},11753// pokemon attack, Pokemon Stadium 2. Added by Gonetz11754// (shade-0)*prim+t0, (cmb-0)*shade+0 ** INC **11755{0x23f4e4f0, cc_t0_mul_shade},11756// Mischief Makers logo. Added by Gonetz11757// (env-0)*prim+t011758{0x23f523f5, cc_prim_mul_env_add_t0},11759// Taken out bomb, zelda11760// (1-0)*prim+t011761{0x23f623f6, cc_t0_add_prim},11762// waterfall, Dobutsu_no_Mori11763// (1-0)*prim+t0, (cmb-0)*shade+t011764{0x23f624f0, cc__t0_add_prim__mul_shade_add_t0},11765// waterfall, Dobutsu_no_Mori11766// (1-0)*prim+t0, (cmb-0)*shade+t111767{0x23f644f0, cc__t0_add_prim__mul_shade_add_t1},11768// Jabu-Jabu's Belly, zelda11769// (noise-0)*prim+t011770{0x23f723f7, cc_t0_add_prim},11771// carmagedon11772// (0-0)*prim+t011773{0x23ff23ff, cc_t0},11774// water, diddy kong racing. Added by Gonetz11775// (t1-t0)*shade+t0, (env-cmb)*env_a+cmb **INC**11776{0x24120c05, cc__t0_inter_t1_using_shade__inter_env_using_enva},11777// Advertisement hoarding, Mia Soccer. Added by Gonetz11778// (t1-t0)*shade+t0, (1-0)*cmb+011779{0x2412e0f6, cc_t0_inter_t1_using_shade},11780// ground, f-zero x11781// (prim-t0)*shade+t0 ** INC **11782{0x24132413, cc__one_sub_prim_mul_shade__mul_t0_add__prim_mul_shade},11783// intro, F1 Racing Championship. Added by Gonetz11784// (env-t0)*shade+t0 ** INC *11785{0x24152415, cc_one_sub_t0_mul_shade_add_t0},11786// Sky, pilotwings11787// (1-t0)*shade+t011788{0x24162416, cc_one_sub_t0_mul_shade_add_t0},11789// zelda 2 [Ogy]. Added by Gonetz11790// (prim-env)*shade+t0, (prim-prim)*shade+cmb ** INC ** ?11791{0x24530433, cc_prim_sub_env_mul_shade_add_t0},11792// waves, Dr. Mario11793// (0-center)*shade+t011794{0x246f246f, cc_t0_sub__shade_mul_center},11795// lums, Rayman2. Added by Gonetz11796// (t0-0)*shade+t0 ** INC **11797{0x24f124f1, cc_t0}, //this one works better11798// {0x24f124f1, cc_t0_mul_shade},11799// Goemon, mystical ninja. Added by Gonetz11800// (prim-0)*shade+t011801{0x24f324f3, cc_prim_mul_shade_add_t0},11802// Sky, waverace11803//z (t1-t0)*env+t0 ** INC **11804{0x25122512, cc_t0_inter_t1_using_env},11805// Rare logo, Jet Force. Added by Gonetz11806// (t1-t0)*env+t0, (cmb-0)*prim+0 ** INC **11807{0x2512e3f0, cc__t0_inter_t1_using_enva__mul_prim},11808// ridge recer, unimp log. Added by Gonetz11809// (t1-t0)*env+t0, (cmb-0)*shade+0 ** INC **11810{0x2512e4f0, cc__t0_inter_t1_using_env__mul_shade},11811// menu, Mischief Makers. Added by Gonetz11812//(prim-t0)*env+t0 ** INC **11813{0x25132513, cc_one_sub_env_mul_t0_add_prim_mul_env},11814// Battle border, quest6411815// (1-t0)*env+t011816{0x25162516, cc_one_sub_env_mul_t0_add_env},11817// Paper Mario11818// (noise-t0)*env+t011819{0x25172517, cc_t0_inter_noise_using_env},11820// the lamp in the bomb shop in town, zelda 2 [Ogy]. Added by Gonetz11821// (t0-t1)*env+t0, (1-env)*prim+cmb ** INC **11822{0x25210356, cc_one_sub_env_mul_prim_add__t0_inter_t1_using_env},11823// Darmani's necklace, zelda 2 [Ogy]. Added by Gonetz11824// (prim-shade)*env+t0, (cmb-0)*shade+0 ** INC **11825{0x2543e4f0, cc_t0_mul_shade_add_prim_mul_env},11826// {0x2543e4f0, cc_t0_mul_shade},11827// mystical ninja. Added by Gonetz11828// (1-0)*env+t011829{0x25f625f6, cc_t0_add_env},11830// smoke, Starshot. Added by Gonetz11831// (1-0)*env+t0, (1-0)*cmb+011832{0x25f6e0f6, cc_t0_add_env},11833// mega shock, Paper Mario. Added by Gonetz11834// (t1-0)*scale+t0, (env-center)*cmb+prim11835{0x26f26065, cc__t0_add__t1_mul_scale__mul_env_sub_center_add_prim},11836// character select, Duck Dodgers. Added by Gonetz11837// (prim-t0)*t0_alpha+t0, (cmb-0)*shade+0 **INC**11838{0x2813e4f0, cc__t0_inter_prim_using_t0a__mul_shade},11839// intro, Duck Dodgers. Added by Gonetz11840// (shade-t0)*t0_alpha+t0 **INC**11841{0x28142814, cc_t0_inter_shade_using_t0a},11842// vermilion gym torches, Pokemon Stadium 2.11843// (prim-env)*t0_a+t0, (cmb-cmb)*cmb+cmb11844{0x28530000, cc_prim_sub_env_mul_t0a_add_t0},11845// F1 World Grand Prix. Added by Gonetz11846// (prim-0)*t0_a+t0, (cmb-0)*shade+0 ** INC **11847{0x28f3e4f0, cc__t0a_mul_prim_add_t0__mul_shade},11848// battle tanks 2 [Ogy]11849// (env-0)*t0_a+t0, (cmb-0)*shade+011850{0x28f5e4f0, cc__t0a_mul_env_add_t0__mul_shade},11851// blastcorps, unimp log. Added by Gonetz11852// (t1-t0)*t1_alpha+t011853{0x29122912, cc_t0_inter_t1_using_t1a},11854// paper mario. Added by Gonetz11855// (t1-t0)*t1_alpha+t0, (cmb-env)*env_a+env11856{0x2912ac50, cc__t0_inter_t1_using_t1a__sub_env_mul_enva_add_env},11857// Rally 2000. Added by Gonetz11858// (t1-t0)*t1_alpha+t0, (cmb-0)*shade+011859{0x2912e4f0, cc__t0_inter_t1_using_t1a__mul_shade},11860// ??? in zelda ending, zelda11861// (1-0)*t1_alpha+t0, (prim-env)*cmb+env11862{0x29f6a053, cc_prim_sub_env_mul__t0_add_t1a__add_env},11863// Sky, zelda11864//z (t1-t0)*prim_a+t011865{0x2a122a12, cc_t0_inter_t1_using_prima},11866// battle tanks [Ogy]11867// (t1-t0)*prim_a+t0, (env-prim)*cmb+prim11868{0x2a126035, cc_env_sub_prim_mul__t0_inter_t1_using_prima__add_prim},11869// clothes, zelda 2. Added by Gonetz11870// (t1-t0)*prim_a+t0, (prim-env)*cmb+env11871{0x2a12a053, cc_prim_sub_env_mul__t0_inter_t1_using_prima__add_env},11872// N64 BIOS11873// (t1-t0)*prim_a+t0, (cmb-0)*shade+011874{0x2a12e0f4, cc__t0_inter_t1_using_prima__mul_shade},11875// flame, Doraemon 2. Added by Gonetz11876// (t1-t0)*prim_a+t0, (cmb-0)*prim+011877{0x2a12e3f0, cc__t0_inter_t1_using_prima__mul_prim},11878// logo, PD. Added by Gonetz11879// (t1-t0)*prim_a+t0, (cmb-0)*shade+011880{0x2a12e4f0, cc__t0_inter_t1_using_prima__mul_shade},11881// Pikachu11882// (prim-t0)*prim_a+t0, (env-cmb)*enva+cmb11883{0x2a130c05, cc__t0_inter_prim_using_prima__inter_env_using_enva},11884// 1080 snowboarding [Ogy] - 7/03/02 fixed by Dave2001. 15 Mar 2005 fixed by Gonetz.11885// (prim-t0)*prim_a+t011886{0x2a132a13, cc_t0_inter_prim_using_prima},11887// menu background, Paper Mario11888// (prim-t0)*prim_a+t0, (prim-t1)*prim_a+t111889{0x2a134a23, cc_t0_inter_prim_using_prima},11890// {0x2a134a23, cc_t0},11891// Mickey USA11892// (prim-t0)*prim_a+t0, (cmb-0)*shade+0 ** INC **11893{0x2a13e4f0, cc_t0_mul_shade},11894// gunfire, Sin and Punishmen. Added by Gonetz11895// (env-t0)*prima+t0 **INC**11896{0x2a152a15, cc_t0_inter_env_using_prima},11897// Mystical Ninja11898// (0-t0)*prima+t0, (prim-env)*cmb+env ** INC **11899{0x2a1fa053, cc_prim_sub_env_mul__t0_sub_t0_mul_prima__add_env},11900// foresight attack, Pokemon Stadium 2.11901// (t1-prim)*prim_a+t0, (prim-env)*cmb+env11902{0x2a32a053, cc_prim_sub_env_mul__t1_sub_prim_mul_prima_add_t0__add_env},11903// arena, Pokemon Stadium 2. Added by Gonetz11904// (shade-prim)*prim_a+t0 ** INC **11905{0x2a342a34, cc_t0_mul_shade},11906// Torches, Paper Mario11907// (t1-k4)*prim_a+t0, (t1-k4)*cmb_a+cmb ** INC **11908{0x2a720772, cc_t1_sub_k4_mul_prima_add_t0},11909// GASP Fighters. Added by Gonetz11910// (t0-0)*prim_a+t0, (cmb-center)*scale+0 ** INC **11911{0x2af1e660, cc__t0_mul_prima_add_t0__sub_center_mul_scale},11912// F1 World Grand Prix. Added by Gonetz11913// (t1-0)*prim_a+t0, (cmb-0)*shade+env11914{0x2af2a4f0, cc__t1_mul_prima_add_t0__mul_shade_add_env},11915// tidal wave, Paper Mario. Added by Gonetz11916// (prim-0)*prim_a+t011917{0x2af32af3, cc_prim_mul_prima_add_t0},11918//Spacestation Silicon Valley intro. Added by Gonetz11919// (t1-t0)*shade_alpha+t0, (prim-shade)*cmb+shade ** INC **11920{0x2b128043, cc_prim_sub_shade_mul__t0_inter_t1_using_shadea__add_shade},11921// water, Rocket Robot in Wheels11922// (t1-t0)*shade_alpha+t0, (env-shade)*cmb+shade ** INC **11923{0x2b128045, cc_env_sub_shade_mul__t0_inter_t1_using_shadea__add_shade},11924// arena, Pokemon Stadium 211925// (t1-t0)*shade_alpha+t0, (cmb-prim)*env+shade ** INC **11926{0x2b128530, cc__t0_inter_t1_using_shadea__sub_prim_mul_env_add_shade},11927// Rocket Robot in Wheels intro11928// (t1-t0)*shade_a+t0, (shade-0)*cmb+0 ** INC **11929{0x2b12e0f4, cc__t0_inter_t1_using_shadea__mul_shade},11930// water, Mickey USA11931// (t1-t0)*shade_a+t0, (cmb-0)*shade+0 ** INC **11932{0x2b12e4f0, cc__t0_inter_t1_using_shadea__mul_shade},11933// Extreme G. Added by Gonetz11934// (shade-t0)*shade_alpha+t011935{0x2b142b14, cc_shade_sub_t0_mul_shadea_add_t0},11936// Jet Force Gemini. Added by Gonetz11937// (shade-t0)*shade_alpha+t0, (cmb-0)*prim+0 ** INC **11938{0x2b14e3f0, cc_t0_mul_prim_add_shade_mul_shadea_mul_prim},11939// V8-211940// (env-t0)*shade_alpha+t0, (cmb-0)*shade+0 ** INC **11941{0x2b15e4f0, cc__t0_inter_env_using_shadea__mul_shade},11942// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz11943// (t1-0)*shade_alpha+t0, (prim-env)*cmb+env ** INC **11944{0x2bf2a053, cc_prim_sub_env_mul__t0_add_t1__add_env},11945// pads, Pokemon Stadium 2. Added by Gonetz11946// (0-0)*shade_alpha+t0, (prim-env)*cmba+env11947{0x2bffa753, cc_prim_sub_env_mul_t0a_add_env},11948// paper mario. Added by Gonetz11949// (t1-t0)*env_a+t0, (1-cmb)*prim+cmb11950{0x2c120306, cc_one_sub__t0_inter_t1_using_enva__mul_prim_add__t0_inter_t1_using_enva},11951// Amoeba boss, water temple, zelda11952// (t1-t0)*env_a+t0, (cmb-env)*prim+t0 ** INC **11953{0x2c122350, cc__t0_inter_t1_using_enva__sub_env},11954// paper mario. Added by Gonetz11955// (t1-t0)*env_a+t011956{0x2c122c12, cc_t0_inter_t1_using_enva},11957// paper mario. Added by Gonetz11958// (t1-t0)*env_a+t0, (1-prim)*cmb+prim11959{0x2c126036, cc_one_sub_prim_mul__t0_inter_t1_using_enva__add_prim},11960//Arena, Pokemon Stadium 211961// (t1-t0)*env_a+t0, (cmb-0)*shade+prim11962{0x2c1264f0, cc__t0_inter_t1_using_enva__mul_shade_add_prim},11963// water, jet force. Added by Gonetz11964// (t1-t0)*env_a+t0, (prim-shade)*cmb+shade11965{0x2c128043, cc_prim_sub_shade_mul__t0_inter_t1_using_enva__add_shade},11966// Faries, zelda11967//z (t1-t0)*env_a+t0, (prim-env)*cmb+env11968{0x2c12a053, cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env},11969// paper mario. Added by Gonetz11970// (t1-t0)*env_a+t0, (prim-center)*cmb+env11971{0x2c12a063, cc_prim_sub_center_mul__t0_inter_t1_using_enva__add_env},11972// pads, Pokemon Stadium 2. Added by Gonetz11973// (t1-t0)*env_a+t0, (cmb-prim)*shade+env ** INC **11974{0x2c12a430, cc__t0_inter_t1_using_enva__mul_shade_add_env},11975// Scary dead thing boss, zelda11976// (t1-t0)*env_a+t0, (cmb-t1)*cmb_a+env11977{0x2c12a720, cc__t0_inter_t1_using_enva__mul_env},11978// something in a menu, PokemonStadium2, [Raziel64]11979// (t1-t0)*env_a+t0, (prim-env)*cmb_a+env11980{0x2c12a753, cc_prim_sub_env_mul__t0_inter_t1_using_enva_alpha__add_env},11981// Arena, pokemon Stadium11982// (t1-t0)*env_a+t0, (cmb-shade)*prim+011983{0x2c12e340, cc__t0_inter_t1_using_enva__sub_shade_mul_prim},11984// Water in zora's place, zelda11985// (t1-t0)*env_a+t0, (cmb-0)*prim+011986{0x2c12e3f0, cc__t0_inter_t1_using_enva__mul_prim},11987// Ground, zelda11988//z (t1-t0)*env_a+t0, (cmb-k5)*shade+cmb_a11989{0x2c12e4f0, cc__t0_inter_t1_using_enva__mul_shade},11990// zelda, uninmp log. Added by Gonetz11991//(t1-t0)*env_a+t0, (cmb-0)*env+011992{0x2c12e5f0, cc__t0_inter_t1_using_enva__mul_env},11993// Spheres, waverace11994//z (env-t0)*env_a+t011995{0x2c152c15, cc_t0_inter_env_using_enva},//cc_t0},11996// backgrounds, Mario Golf. Added by Gonetz11997// (env-t0)*env_a+t0, (shade-0)*cmb+011998{0x2c15e0f4, cc__t0_inter_env_using_enva__mul_shade},11999// ground on Volcano level, DKR, [Raziel64]12000// (env-t0)*env_a+t0, (cmb-0)*shade+012001{0x2c15e4f0, cc__t0_inter_env_using_enva__mul_shade},12002// Nintendo 'N', zelda12003//z (t0-prim)*env_a+t0, (prim-env)*cmb+env12004{0x2c31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_enva_add_t0__add_env},12005// Nintendo title & saria's song, zelda12006//z (t1-prim)*env_a+t0, (prim-env)*cmb+env12007{0x2c32a053, cc_prim_sub_env_mul__t1_sub_prim_mul_enva_add_t0__add_env},12008// Hover boots flying, zelda12009// (t1-prim)*env_a+t0, (prim-0)*cmb+env12010{0x2c32a0f3, cc__t1_sub_prim_mul_enva_add_t0__mul_prim_add_env},12011// star beam, paper mario12012// (prim-env)*env_a+t012013{0x2c532c53, cc_prim_sub_env_mul_enva_add_t0},12014// Kotake & koume's hair, zelda12015// (t1-0)*env_a+t0, (prim-env)*cmb+env12016{0x2cf2a053, cc_prim_sub_env_mul__t1_mul_enva_add_t0__add_env},12017//Goldeneye, [Jeremy]. Added by Gonetz12018// (t0-t0)*lodf+t0, (cmb-0)*prim+012019{0x2d11e3f0, cc_t0_mul_prim},12020// Pilot wings12021// (t1-t0)*lodf+t0, (one-cmb)*prim+cmb12022{0x2d120306, cc_one_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},12023// Pilot wings12024// (t1-t0)*lodf+t0, (one-cmb)*shade+cmb12025{0x2d120406, cc_one_sub_shade_mul__t0_inter_t1_using_primlod__add_shade},12026// Indy Racing 2000. Added by Gonetz12027// (t1-t0)*lodf+t0, (env-cmb)*prima+cmb ** INC **12028{0x2d120a05, cc_t0_inter_t1_using_primlod},12029// (t1-t0)*lodf+t012030{0x2d122d12, cc_t0_inter_t1_using_primlod},12031//broken wall, beetle adventure racing. Added by Gonetz12032// (t1-t0)*lodf+t0, (shade-prim)*cmb+prim12033{0x2d126034, cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},12034//Intro, CBFD. Added by Gonetz12035// (t1-t0)*lodf+t0, (shade-env)*cmb+prim12036// {0x2d126054, cc_shade_sub_env_mul_t0_add_prim},12037{0x2d126054, cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_prim},12038// bassmasters 2000 [Ogy]12039// (t1-t0)*lodf+t0, (env-0)*cmb+prim ** INC **12040{0x2d1260f5, cc_t0_mul_env_add_prim},12041// sign, CBFD. Added by Gonetz12042// (t1-t0)*lodf+t0, (cmb-env)*shade+prim ** INC **12043{0x2d126450, cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_prim},12044// {0x2d126450, cc_t0_sub_env_mul_shade_add_prim},12045// landscape, Cruis'n Exotica. Added by Gonetz12046// (t1-t0)*lodf+t0, (cmb-0)*shade+prim12047{0x2d1264f0, cc__t0_inter_t1_using_primlod__mul_shade_add_prim},12048// blast corps [Ogy]12049// (t1-t0)*lodf+t0, (0-0)*0+shade12050{0x2d129fff, cc__t0_inter_t1_using_primlod__mul_shade},12051// End of level, zelda12052// (t1-t0)*lodf+t0, (prim-env)*cmb+env12053{0x2d12a053, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},12054// Rocket Robot in Wheels intro12055// (t1-t0)*lodf+t0, (shade-env)*cmb+env12056{0x2d12a054, cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_env},12057// basket, Fox Sport12058// (t1-t0)*lodf+t0, (prim-env)*t0+env12059{0x2d12a153, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},12060// paper mario. Added by Gonetz12061// (t1-t0)*lodf+t0, (cmb-0)*prim+env ** INC **12062{0x2d12a3f0, cc__t0_inter_t1_using_primlod__mul_prim_add_env},12063// Tony Hawk Pro Skater12064// (t1-t0)*lodf+t0, (cmb-0)*shade+env12065{0x2d12a4f0, cc__t0_inter_t1_using_primlod__mul_shade_add_env},12066// part of a building, Spiderman. Added by Gonetz12067// (t1-t0)*lodf+t0, (cmb-env)*cmba+env ** INC **12068{0x2d12a750, cc_t0_inter_t1_using_primlod},12069// Mike Piazza's Strike Zone12070// (t1-t0)*lodf+t0, (shade-prim)*cmb+012071{0x2d12e034, cc_shade_sub_prim_mul__t0_inter_t1_using_primlod},12072// intro, F1 Racing Championship. Added by Gonetz12073// (t1-t0)*lodf+t0, (shade-env)*cmb+012074{0x2d12e054, cc_shade_sub_env_mul__t0_inter_t1_using_primlod},12075// stands, F1 Racing Championship. Added by Gonetz12076// (t1-t0)*lodf+t0, (1-env)*cmb+012077{0x2d12e056, cc_one_sub_env_mul__t0_inter_t1_using_primlod},12078// court, Mario Tennis. Added by Gonetz12079// (t1-t0)*lodf+t0, (prim-0)*cmb+012080{0x2d12e0f3, cc__t0_inter_t1_using_primlod__mul_prim},12081// Rocket Robot in Wheels intro12082// (t1-t0)*lodf+t0, (shade-0)*cmb+012083{0x2d12e0f4, cc__t0_inter_t1_using_primlod__mul_shade},12084// Pilot wings12085// (t1-t0)*lodf+t0, (cmb-0)*t0+0 ** INC **12086{0x2d12e1f0, cc_t0_inter_t1_using_primlod},12087// cars wheels, SF Rush 2049. Added by Gonetz12088// (t1-t0)*lodf+t0, (cmb-0)*prim+012089{0x2d12e3f0, cc__t0_inter_t1_using_primlod__mul_prim},12090// Bridge, sf rush12091// (t1-t0)*lodf+t0, (cmb-0)*shade+012092// {0x2d12e4f0, cc_t0_mul_shade},12093{0x2d12e4f0, cc__t0_inter_t1_using_primlod__mul_shade},12094// blast corps [Ogy]12095// (t1-t0)*lodf+t0, (t0-0)*shade+012096{0x2d12e4f1, cc_t0_mul_shade},12097// field, Mike Piazza's Strike Zone12098// (t1-t0)*lodf+t0, (cmb-prim)*env+0 ** INC **12099{0x2d12e530, cc__t0_inter_t1_using_primlod__mul_env},12100// radar, Perfect Dark12101// (t1-t0)*lodf+t0, (cmb-0)*env+012102{0x2d12e5f0, cc__t0_inter_t1_using_primlod__mul_env},12103// planet, Blast Corps12104// (t1-t0)*lodf+t0, (cmb-0)*prima+012105{0x2d12eaf0, cc__t0_inter_t1_using_primlod__mul_prima},12106// zelda 2. Added by Gonetz12107// (t0-t0)*primlod+t0, (prim-env)*cmb+env12108{0x2e11a053, cc_prim_sub_env_mul_t0_add_env},12109// zelda 2. Added by Gonetz12110// (t1-t0)*primlod+t0, (0-0)*shade+cmb12111{0x2e1204ff, cc_t0_inter_t1_using_primlod},12112// zelda 2. Added by Gonetz12113// (t1-t0)*primlod+t0, (env-prim)*primlod+cmb12114{0x2e120d35, cc_prim_sub_env_mul_primlod_add__t0_inter_t1_using_primlod},12115// lamppost, Ridge Racer. Added by Gonetz12116// (t1-t0)*primlod+t012117{0x2e122e12, cc_t0_inter_t1_using_primlod},12118// Hearts, zelda12119//z (t1-t0)*primlod+t0, (shade-prim)*cmb+prim12120{0x2e126034, cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},12121// Sunny Day, Pokemon Stadium 2 [gokuss4]. Added by Gonetz12122// (t1-t0)*primlod+t0, (env-prim)*cmb+prim12123{0x2e126035, cc_env_sub_prim_mul__t0_inter_t1_using_primlod__add_prim},12124// snowhead temple, zelda 2. Added by Gonetz12125// (t1-t0)*primlod+t0, (cmb-env)*shade+prim ** INC **12126{0x2e126450, cc__t0_inter_t1_using_primlod__mul_shade_add_prim},12127// snow on a wall, snowhead temple, zelda 2. Added by Gonetz12128// (t1-t0)*primlod+t0, (cmb-0)*shade+prim12129{0x2e1264f0, cc__t0_inter_t1_using_primlod__mul_shade_add_prim},12130// Morning Sun, Pokemon Stadium 2 [gokuss4]. Added by Gonetz12131// (t1-t0)*primlod+t0, (cmb-0)*0+prim12132{0x2e127ff0, cc_prim},12133// arena, Pokemon Stadium 2. Added by Gonetz12134// (t1-t0)*primlod+t0, (cmb-prim)*shade+shade ** INC **12135{0x2e128430, cc__t0_inter_t1_using_primlod__mul_shade},12136// Pokemon Stadium 2. Added by Gonetz12137// (t1-t0)*primlod+t0, (cmb-env)*cmb+env ** INC **12138{0x2e12a050, cc_t0_inter_t1_using_primlod},12139// End of level heart, zelda12140// (t1-t0)*primlod+t0, (prim-env)*cmb+env12141{0x2e12a053, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},12142// Huge turtle appearance, zelda 2. Added by Gonetz12143// (t1-t0)*primlod+t0, (1-env)*cmb+env12144{0x2e12a056, cc_one_sub_env_mul__t0_inter_t1_using_primlod__add_env},12145// frozen octorok, zelda 2. Added by Gonetz12146// (t1-t0)*primlod+t0, (prim-env)*t1+env12147{0x2e12a253, cc_prim_sub_env_mul_t1_add_env},12148// fall headwaters, zelda 2. Added by Gonetz12149// (t1-t0)*primlod+t0, (cmb-env)*shade+env ** INC **12150{0x2e12a450, cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_env},12151// Fissure attack, pokemon stadium 212152// (t1-t0)*primlod+t0, (prim-env)*cmb_a+env12153{0x2e12a753, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},12154// zelda 2. Added by Gonetz12155// (t1-t0)*primlod+t0, (cmb-0)*t1+0 ** INC ** ?12156{0x2e12e2f0, cc_t0_inter_t1_using_primlod},12157// zelda 2. Added by Gonetz12158// (t1-t0)*primlod+t0, (cmb-0)*prim+012159{0x2e12e3f0, cc__t0_inter_t1_using_primlod__mul_prim},12160// sky, PGA European Tour12161// (t1-t0)*primlod+t0, (cmb-env)*shade+0 ** INC **12162{0x2e12e450, cc__t0_inter_t1_using_primlod__mul_shade},12163// Kirby's pool, smash bros12164// (t1-t0)*primlod+t0, (cmb-0)*shade+012165{0x2e12e4f0, cc__t0_inter_t1_using_primlod__mul_shade},12166//Spacestation Silicon Valley intro. Added by Gonetz12167// (prim-t0)*primlod+t0, (cmb-0)*shade+0 **INC**12168{0x2e132e13, cc_t0_inter_prim_using_primlod},12169// explosions, daikatana. Added by Gonetz12170// (prim-t0)*primlod+t0, (cmb-0)*shade+0 **INC**12171{0x2e13e4f0, cc_t0_mul_shade},12172//Mike Piazza's Strike Zone logo. Added by Gonetz12173// (shade-t0)*primlod+t012174{0x2e142e14, cc_t0_inter_shade_using_primlod},12175// Cartridge color (transfer pak}, Pokemon Stadium 2 [gokuss4]. Added by Gonetz12176// (1-t0)*primlod+t012177{0x2e162e16, cc_one_sub_t0_mul_primlod_add_t0},12178// pokemon attack, Pokemon Stadium 2. Added by Gonetz12179// (1-t0)*primlod+t0, (prim-0)*cmb+012180{0x2e16e0f3, cc__t0_inter_one_using_primlod__mul_prim},12181// Spider Web attack, Pokemon Stadium 2.12182// (1-t0)*primlod+t0, (cmb-0)*prim+012183{0x2e16e3f0, cc__t0_inter_one_using_primlod__mul_prim},12184// pokemon attack, Pokemon Stadium 2. Added by Gonetz12185// (1-t0)*primlod+t0, (cmb-0)*shade+012186{0x2e16e4f0, cc__t0_inter_one_using_primlod__mul_shade},12187// zelda 2. Added by Gonetz12188// (t1-t1)*primlod+t0, (prim-env)*cmb+env12189{0x2e22a053, cc_prim_sub_env_mul_t0_add_env},12190// Shadow Ball, Pokemon Stadium 2 [gokuss4]. Added by Gonetz12191// (0-t1)*primlod+t0, (prim-env)*cmb+env ** INC **12192{0x2e2fa053, cc_prim_sub_env_mul_t0_add_env},12193// Skulltula coin solid, zelda12194// (t0-prim)*primlod+t0, (prim-env)*cmb+env12195{0x2e31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t0__add_env},12196// Triforce lines, zelda12197// (t1-prim)*primlod+t0, (prim-shade)*cmb+shade12198{0x2e328043, cc_prim_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade},12199// moon when majora defeated, zelda 2. Added by Gonetz12200// (t1-prim)*primlod+t0, (1-shade)*cmb+shade12201{0x2e328046, cc_one_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade},12202// Fire, zelda12203//z (t1-prim)*primlod+t0, (prim-env)*cmb+env ** INC **12204{0x2e32a053, cc_prim_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env},12205// zelda 2 [Ogy]. Added by Gonetz12206// (t1-prim)*primlod+t0, (shade-env)*cmb+env12207{0x2e32a054, cc_shade_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env},12208// Scary face, pokemon stadium 212209// (t1-prim)*primlod+t0, (1-env)*cmb+env12210{0x2e32a056, cc_one_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env},12211// zelda 2. Added by Gonetz12212// (t1-prim)*primlod+t0, (prim-0)*cmb+env12213{0x2e32a0f3, cc__t1_sub_prim_mul_primlod_add_t0__mul_prim_add_env},12214// zelda 2. Added by Gonetz12215// (t1-0)*primlod+t0, (prim-env)*cmb+env12216{0x2ef2a053, cc_prim_sub_env_mul__t1_mul_primlod_add_t0__add_env},12217// zelda 2. Added by Gonetz12218// (t1-0)*primlod+t0, (cmb-0)*prim+012219{0x2ef2e3f0, cc__t1_mul_primlod_add_t0__mul_prim},12220// zelda 2. Added by Gonetz12221// (t1-0)*primlod+t0, (cmb-0)*env+012222{0x2ef2e5f0, cc__t1_mul_primlod_add_t0__mul_env},12223// gun, Doom64. Added by Gonetz12224// (1-0)*primlod+t0, (cmb-0)*prim+env12225{0x2ef6a3f0, cc__t0_add_primlod__mul_prim_add_env},12226// walls, Doom64. Added by Gonetz12227// (1-0)*primlod+t0, (cmb-0)*shade+env12228{0x2ef6a4f0, cc__t0_add_primlod__mul_shade_add_env},12229// Pokemon Stadium 2. Added by Gonetz12230// (noise-0)*primlod+t0, (prim-env)*cmb+env ** INC **12231{0x2ef7a053, cc_prim_sub_env_mul_t0_add_env},12232// Tony Hawk's Pro Skater. Added by Gonetz12233// (t1-t0)*k5+t012234{0x2f122f12, cc_t0_inter_t1_using_k5},12235// F1 World Grand Prix. Added by Gonetz12236// (t1-t0)*k5+t0, (cmb-0)*shade+0 **INC**12237{0x2f12e4f0, cc__t0_inter_t1_using_k5__mul_shade},12238// Turok 3 [scorpiove]. Added by Gonetz12239// (t0-k4)*k5+t012240{0x2f712f71, cc_t0},12241// THPS 312242// (env-0)*k5+t0,12243{0x2ff52ff5, cc_t0_add_env_mul_k5},12244// super bowling12245// (0-0)*k5+t0,12246{0x2fff0000, cc_t0},12247// super bowling12248// (0-0)*k5+t012249{0x2fff2fff, cc_t0},12250// Moonlight attack, pokemon stadium 212251// (t1-t0)*0+t0, (prim-env)*cmb+env12252{0x3f12a053, cc_prim_sub_env_mul_t0_add_env},12253//C&C shadows12254//(1-env)*0+t012255{0x3f563f56, cc_t0},12256// RARE logo, blast corps. Added by Gonetz12257// (t0-0)*0+t012258{0x3ff13ff1, cc_t0},12259// the ground below the scarecrow in the trading post in town, zelda 2 [Ogy]. Added by Gonetz12260// (t1-0)*0+t0, (cmb-0)*shade+012261{0x3ff2e4f0, cc_t0_mul_shade},12262// intro, background, Dezaemon 3D12263// (1-0)*0+t012264{0x3ff63ff6, cc_t0},12265// intro of WWF WrestleMania 200012266// ((0-0)*0+t0, (env-cmb)*prim+cmb12267{0x3fff0305, cc_env_sub_t0_mul_prim_add_t0},12268// pistol fire, Turok12269// ((0-0)*0+t0, (env-cmb)*shade+cmb12270{0x3fff0405, cc_env_sub_t0_mul_shade_add_t0},12271// Tony Hawk's Pro Skater. Added by Gonetz12272// ((0-0)*0+t0, (t1-0)*shade+cmb ** INC **12273{0x3fff04f2, cc_t0},12274// Dr. Mario [Ogy]. Added by Gonetz12275// ((0-0)*0+t0, (prim-cmb)*env+cmb12276{0x3fff0503, cc_prim_sub_t0_mul_env_add_t0},12277// Stained glass, quest6412278// (0-0)*0+t0, (1-0)*env+cmb12279{0x3fff05f6, cc_t0_add_env},12280// Health bar, killer instinct gold12281// (0-0)*0+t0, (prim-env)*prim_a+cmb12282{0x3fff0a53, cc_prim_sub_env_mul_prima_add_t0},12283// Runes, Turok - Dinosaur Hunter. Added by Gonetz12284// (0-0)*0+t0, (env-cmb)*env_a+cmb12285{0x3fff0c05, cc_t0_inter_env_using_enva},12286// intro, Mission Impossible. Added by Gonetz12287// (k5-k5)*0+t0, (0-0)*scale+t012288{0x3fff26ff, cc_t0},12289// V8-212290// (0-0)*0+t0, (t0-k4)*k5+t012291{0x3fff2f71, cc_t0_sub_k4_mul_k5_add_t0},12292// TM, mario12293//z (k5-k5)*0+t012294{0x3fff3fff, cc_t0},12295// Intro, CBFD. Added by Gonetz12296// ((0-0)*0+t0, (shade-env)*cmb+prim12297{0x3fff6054, cc_shade_sub_env_mul_t0_add_prim},12298// Text, Mia Soccer. Added by Gonetz12299// ((0-0)*0+t0, (0-0)*0+prim12300{0x3fff7fff, cc_t0},12301// paper mario. Added by Gonetz12302// ((0-0)*0+t0, (prim-env)*cmb+env12303{0x3fffa053, cc_prim_sub_env_mul_t0_add_env},12304// Objects in arena, pokemon stadium 212305// (0-0)*0+t0, (cmb-prim)*shade+env12306{0x3fffa430, cc_t0_mul_prim},12307// intro, F1 Racing Championship. Added by Gonetz12308// (0-0)*0+t0, (shade-env)*cmb+012309{0x3fffe054, cc_shade_sub_env_mul_t0},12310// stands, F1 Racing Championship. Added by Gonetz12311// (0-0)*0+t0, (1-env)*cmb+012312{0x3fffe056, cc_one_sub_env_mul_t0},12313// ? (from log)12314// (0-0)*0+t0, (prim-0)*cmb+012315{0x3fffe0f3, cc_t0_mul_prim},12316// background, GASP Fighters12317// (0-0)*0+t0, (shade-0)*cmb+012318{0x3fffe0f4, cc_t0_mul_shade},12319// zelda 2 [Ogy]. Added by Gonetz12320// (0-0)*0+t0, (env-0)*cmb+012321{0x3fffe0f5, cc_t0_mul_env},12322// logo, v-rally 9912323// (0-0)*0+t0, (prim-0)*t0+012324{0x3fffe1f3, cc_t0_mul_prim},12325// target hit, zelda 2. Added by Gonetz12326// (0-0)*0+t0, (cmb-0)*prim+012327{0x3fffe3f0, cc_t0_mul_prim},12328// Ms. Pac-Man intro background. Added by Gonetz12329// (0-0)*0+t0, (cmb-0)*shade+012330{0x3fffe4f0, cc_t0_mul_shade},12331// Wonder Project J2 logo. Added by Gonetz12332// (0-0)*0+t0, (t0-0)*shade+012333{0x3fffe4f1, cc_t0_mul_shade},12334// tire trace, Monster truck madness. Added by Gonetz12335// (0-0)*0+t0, (cmb-0)*env+012336{0x3fffe5f0, cc_t0_mul_env},12337// Gauntlet Legends intro. Added by Gonetz12338// (0-0)*0+t0, (cmb-0)*ecale+012339{0x3fffe6f0, cc_t0},12340// tire trace, beetle adventure racing. Added by Gonetz12341// (t1-t0)*t0+t1, (cmb-t0)*shade+t1 **INC**12342{0x41124410, cc__t0_inter_t1_using_t0__mul_shade},12343// Paper Mario. Added by Gonetz12344// (t0-t1)*t0+t1 **INC**12345{0x41214121, cc_t1_inter_t0_using_t0},12346// Powered Star Beam, Paper Mario. Added by Gonetz12347// (t0-t1)*t0+t1, (env-prim)*cmb+prim **INC**12348{0x41216035, cc_env_sub_prim_mul__t1_inter_t0_using_t0__add_prim},12349// wetrix raiseland [Raziel64]. Added by Gonetz12350// (prim-t1)*t0+t1, (env-t0)*cmb+cmb **INC**12351{0x41230015, cc_env_sub_prim_mul__t0_mul_t1__add_prim},12352// SCARS. Added by Gonetz12353// (t1-t0)*t0+t1, (cmb-t0)*shade+t1 **INC**12354{0x41250b03, cc__t0_inter_t1_using_half__mul_shade},12355//beetle adventure racing. Added by Gonetz12356//(t0-t1)*t1+t1, (cmb-0)*shade+0 **INC**12357{0x4221e4f0, cc__t1_inter_t0_using_t1__mul_shade},12358// cianwood gym walls, pokemon stadium 212359//(t0-prim)*t1+t1, (cmb-0)*env+shade12360{0x423185f0, cc__t0_sub_prim_mul_t1_add_t1__mul_env_add_shade},12361// cianwood gym walls, pokemon stadium 212362//(t0-prim)*t1+t1, (cmb-0)*shade+012363{0x4231e4f0, cc__t0_sub_prim_mul_t1_add_t1__mul_shade},12364// paper mario. Added by Gonetz12365// (t0-t0)*prim+t1, (t1-cmb)*cmb+env **INC** weird12366{0x4311a002, cc_env},12367// background, Wetrix level 1, [Raziel64]. Added by Gonetz12368// (t0-t1)*prim+t112369{0x43214321, cc_t1_inter_t0_using_prim},12370// Mario Party3 Tidal Toss12371// (t0-t1)*prim+t1, (cmb-0)*shade+0 **INC**12372{0x4321e4f0, cc__t1_inter_t0_using_prim__mul_shade},12373// grass, ISS 2k. Added by Gonetz12374// (t0-t1)*prim+t1, (cmb-0)*env+0 **INC**12375{0x4321e5f0, cc__t1_inter_t0_using_prim__mul_env},12376// intro, Paper Mario12377// (t0-0)*prim+t112378{0x43f143f1, cc_t0_mul_prim_add_t1},12379// F1 World Grand Prix. Added by Gonetz12380// (t0-0)*prim+t1, (cmb-0)*shade+env **INC**12381{0x43f1a4f0, cc__t0_add_t1__mul_shade_add_env},12382// field, ISS64. Added by Gonetz12383// (t0-t1)*shade+t1, (cmb-t1)*prim+t1 ** INC **12384{0x44214320, cc_t0_sub_t1_mul_prim_mul_shade_add_t1},12385// {0x44214320, cc__t0_add_t1__mul_prim},12386// field, Top gear hyper-bike12387// (t0-t1)*shade+t112388{0x44214421, cc_t1_inter_t0_using_shade},12389// water, goemon great adventure12390// (t0-t1)*env+t1 ** INC **12391{0x45214521, cc_t1_inter_t0_using_env},12392// characters, Ogre Battle. Added by Gonetz12393// (1-t1)*env+t1, (1-cmb)*prim+cmb ** INC **12394{0x45260306, cc_one_sub_t1_mul_prim_add_t1},12395// characters, Ogre Battle. Added by Gonetz12396// (1-t1)*env+t112397{0x45264526, cc_one_sub_t1_mul_env_add_t1},12398// characters, Ogre Battle. Added by Gonetz12399// (1-t1)*env+t1, (cmb-0)*prim+0 ** INC **12400{0x4526e3f0, cc__t1_inter_one_using_env__mul_prim},12401// explosion, body harvest. Added by Gonetz12402// (t0-t1)*scale+t1, (env-prim)*cmb+prim ** INC **12403{0x46216035, cc_env_sub_prim_mul__t0_inter_t1_using_half__add_prim},12404// Water, AeroGauge. Added by Gonetz12405// (t0-t1)*prima+t1, (0-0)*0+cmb12406{0x4a214a21, cc_t1_inter_t0_using_prima},12407// flame, castlevania 2. Added by Gonetz12408// (t0-t1)*prima+t1, (prim-env)*cmb+env12409{0x4a21a053, cc_prim_sub_env_mul__t1_inter_t0_using_prima__add_env},12410// shadows, Mario Tennis. Added by Gonetz12411// (t0-t1)*prima+t1, (prim-0)*cmb+012412{0x4a21e0f3, cc__t1_inter_t0_using_prima__mul_prim},12413// menu, Mario Golf. Added by Gonetz12414// (t0-t1)*prima+t1, (shade-0)*cmb+012415{0x4a21e0f4, cc__t1_inter_t0_using_prima__mul_shade},12416// intro, castlevania 2. Added by Gonetz12417// (t0-t1)*prima+t1, (cmb-0)*prim+012418{0x4a21e3f0, cc__t1_inter_t0_using_prima__mul_prim},12419// water on map, Ogre Battle64. Added by Gonetz12420// (t0-t1)*prima+t1, (cmb-0)*shade+012421{0x4a21e4f0, cc__t1_inter_t0_using_prima__mul_shade},12422// Ice, Paper Mario12423// (t0-t1)*shade_a+t112424{0x4b214b21, cc_t1_inter_t0_using_shadea},12425// Grass, Beetle Adventure Racing12426// (t0-t1)*shade_a+t1, (cmb-0)*shade+012427{0x4b21e4f0, cc__t1_inter_t0_using_shadea__mul_shade},12428// Ground at kotake & koume, zelda12429// (t1-t0)*env_a+t0, (prim-env)*cmb+env12430{0x4c12a053, cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env},12431// Tony Hawk's Pro Skater. Added by Gonetz12432// (t0-t1)*env_a+t1, (cmb-0)*shade+cmb ** INC **12433{0x4c2104f0, cc__t1_inter_t0_using_enva__mul_shade},12434// bikes, xg2. Added by Gonetz12435// (t0-t1)*env_a+t1, (cmb-prim)*prima+prim12436{0x4c216a30, cc__t1_inter_t0_using_enva__sub_prim_mul_prima_add_prim},12437// Yoshi Story12438// (t0-t1)*env_a+t1, (prim-env)*cmb+env12439{0x4c21a053, cc_prim_sub_env_mul__t1_inter_t0_using_enva__add_env},12440// arena, Pokemon Stadium 1. Added by Gonetz12441// (t0-t1)*env_a+t1, (cmb-0)*prim+012442{0x4c21e3f0, cc__t1_inter_t0_using_enva__mul_prim},12443// "end of chapter" text, paper mario. Added by Gonetz12444// (1-t1)*env_a+t1, (cmb-0)*t1+012445{0x4c26e2f0, cc__t1_inter_one_using_enva__mul_t0},12446// Zelda opening door, zelda12447// (t0-prim)*env_a+t1, (prim-env)*t0+env12448{0x4c31a053, cc_prim_sub_env_mul_t0_add_env},12449// arena, Pokemon Stadium 212450// (t0-0)*env_a+t1, (cmb-0)*shade+prim12451{0x4cf164f0, cc__t0_mul_enva_add_t1__mul_shade_add_prim},12452// Kotake & koume magic poof, zelda12453// (t0-0)*env_a+t1, (prim-env)*cmb+env12454{0x4cf1a053, cc_prim_sub_env_mul__t0_mul_enva_add_t1__add_env},12455// ground in stone temple, zelda 2. Added by Gonetz12456// (t1-t0)*primlod+t1, (cmb-0)*prim+012457{0x4e12e3f0, cc__t0_inter_t1_using_primlod__mul_prim},12458// pokemon attack, Pokemon Stadium 2. Added by Gonetz12459// (noise-t0)*primlod+t1, (prim-env)*cmb+env ** INC **12460{0x4e17a053, cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env},12461// menu, pokemon stadium 1, [Raziel64]12462// (t0-t1)*lodf+t1, (prim-env)*cmb+env12463{0x4e214e21, cc_t1_inter_t0_using_primlod},12464// Pokemon backgrounds, pokemon stadium 212465// (t0-t1)*primlod+t1, (cmb-0)*shade+prim12466{0x4e2164f0, cc__t1_inter_t0_using_primlod__mul_shade_add_prim},12467// Pokemon backgrounds, pokemon stadium 212468// (t0-t1)*lodf+t1, (prim-env)*cmb+env12469{0x4e21a053, cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env},12470// zelda 2 [Ogy]. Added by Gonetz12471// (t0-t1)*primlod+t1, (t1-cmb)*prim+env ** INC **12472{0x4e21a302, cc_env_sub__t0_sub_t1_mul_primlod__mul_prim},12473// Magnitude, pokemon stadium 212474// (t0-t1)*primlod+t1, (prim-env)*cmb_a+env12475{0x4e21a753, cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env},12476// Arena, pokemon stadium 212477// (t0-t1)*primlod+t1, (cmb-shade)*prim+012478{0x4e21e340, cc__t1_inter_t0_using_primlod__sub_shade_mul_prim},12479// zelda 2 [Ogy]. Added by Gonetz12480// (t0-t1)*primlod+t1, (cmb-0)*shade+012481{0x4e21e4f0, cc__t1_inter_t0_using_primlod__mul_shade},12482// lava in snowhead temple, zelda 2. Added by Gonetz12483// (t0-prim)*primlod+t1, (cmb-prim)*shade+cmb ** INC **12484{0x4e310430, cc_lavatex_sub_prim_mul_shade_add_lavatex},12485// Skulltula coin, zelda12486// (t0-prim)*primlod+t1, (prim-env)*cmb+env12487{0x4e31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t1__add_env},12488// Pokemon background, pokemon stadium 212489// (noise-shade)*primlod+t1, (prim-env)*cmb+env12490{0x4e47a053, cc_prim_sub_env_mul_t1_add_env},12491// Reflect, Pokemon Stadium 2 [gokuss4]. Added by Gonetz12492// (t0-0)*primlod+t1, (prim-env)*cmb+env12493{0x4ef1a053, cc_prim_sub_env_mul__t0_add_t1__add_env},12494//beetle adventure racing. Added by Gonetz12495//(t0-t1)*k5+t1, (cmb-0)*shade+012496{0x4f21e4f0, cc__t1_inter_t0_using_k5__mul_shade},12497// Spiderman. Added by Gonetz12498//(t0-t1)*k5+t1, (cmb-0)*env+012499{0x4f21e5f0, cc_t1_mul_env},12500// N64 logo, Ogre Battle. Added by Gonetz12501//(0-0)*0+t112502{0x5fff5fff, cc_t1},12503// reversing light, Monster truck madness. Added by Gonetz12504//(0-0)*0+t0, (0-0)*0+prim12505{0x5fff7fff, cc_prim},12506// battle tanks [Ogy]12507// (0-0)*0+t1, (env-shade)*cmb+shade12508{0x5fff8045, cc_env_sub_shade_mul_t1_add_shade},12509// minigame, pokemon stadium 1. Added by Gonetz12510// (0-0)*0+t1, (prim-env)*cmb+env12511{0x5fffa053, cc_prim_sub_env_mul_t1_add_env},12512// F1 World Grand Prix. Added by Gonetz12513// (t0-prim)*t0+prim, (cmb-0)*shade12514{0x6131e4f0, cc__prim_inter_t0_using_t0__mul_shade},12515// aerofighter's assault [Ogy]12516// (shade-prim)*t0+prim12517{0x61346134, cc_shade_sub_prim_mul_t0_add_prim},12518// pilot wings12519// (shade-prim)*t0+prim, (cmb-shade)*shadea+shade12520{0x61348b40, cc_shade_inter__prim_inter_shade_using_t0__using_shadea},12521// club blow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz12522// (shade-prim)*t0+prim, (cmb-env)*cmb_a+env ** INC **12523{0x6134a750, cc_shade_sub_prim_mul_t0_add_prim},12524// sky, Killer Instinct12525// (shade-prim)*t0+prim, (cmb-env)*shade_a+env ** INC **12526{0x6134ab50, cc_env_inter__prim_inter_shade_using_t0__using_shadea},12527// lava, beetle adventure racing12528// (shade-prim)*t0+prim, (cmb-0)*t1+0 ** INC **12529{0x6134e2f0, cc_shade_sub_prim_mul_t0_add_prim},12530// Monster truck madness intro. Added by Gonetz12531// (env-prim)*t0+prim, (cmb-0)*scale+cmb ** INC **12532{0x613506f0, cc_env_sub_prim_mul_t0_add_prim},12533// pokemon attack, Pokemon stadium 112534// (env-prim)*t0+prim, (cmb-0)*0+cmb12535{0x61351ff0, cc_env_sub_prim_mul_t0_add_prim},12536// Paper Mario, fortune teller spheres12537// (env-prim)*t0+prim, (cmb-0)*t1+t0 ** INC **12538{0x613522f0, cc_t0_mul_t1_add_t0},12539// Later hearts, zelda12540// (env-prim)*t0+prim12541{0x61356135, cc_env_sub_prim_mul_t0_add_prim},12542// Mission Impossible. Added by Gonetz12543// (env-prim)*t0+prim, (shade-0)*cmb+0 ** INC **12544{0x6135e0f4, cc__prim_inter_env_using_t0__mul_shade},12545// crashing other vehicle, Monster truck madness [Raziel64]. Added by Gonetz12546// (env-prim)*t0+prim, (cmb-0)*t0+0 ** INC **12547{0x6135e1f0, cc_env_sub_prim_mul_t0_add_prim},12548// Tony Hawk's Pro Skater. Added by Gonetz12549// (env-prim)*t0+prim, (cmb-0)*t1+0 ** INC **12550{0x6135e2f0, cc_env_sub_prim_mul_t0_add_prim},12551// aerofighter's assault [Ogy]12552// (env-prim)*t0+prim, (cmb-0)*shade+0 ** INC **12553{0x6135e4f0, cc__prim_inter_env_using_t0__mul_shade},12554// "time out", paper mario. Added by Gonetz12555// (1-prim)*t0+prim, (1-cmb)*enva+cmb ** INC **12556{0x61360c06, cc_one_sub_prim_mul_t0_add_prim},12557// intro, paper mario. Added by Gonetz12558// (1-prim)*t0+prim, (cmb-0)*prima+t0 ** INC **12559{0x61362af0, cc__one_sub_prim_mul_t0_add_prim__mul_prima_add__one_sub_prim_mul_t0_add_prim},12560// paper mario. Added by Gonetz12561// (1-prim)*t0+prim12562{0x61366136, cc_one_sub_prim_mul_t0_add_prim},12563// arena, Pokemon Stadium 2. Added by Gonetz12564// (1-prim)*t0+prim, (cmb-env)*shade+shade ** INC **12565{0x61368450, cc_t0_mul_shade},12566// F1 World Grand Prix. Added by Gonetz12567// (1-prim)*t0+prim, (cmb-0)*shade+0 ** INC **12568{0x6136e4f0, cc_t0_mul_shade},12569// Xena. Added by Gonetz12570// (0-prim)*t0+prim12571{0x613f613f, cc_one_sub_t0_mul_prim},12572// Kirby64 end [Raziel64]. Added by Gonetz12573// (prim-env)*t0+prim12574{0x61536153, cc_prim_sub_env_mul_t0_add_prim},12575// Xena. Added by Gonetz12576// (shade-env)*t0+prim12577{0x61546154, cc_shade_sub_env_mul_t0_add_prim},12578// Karts, mario kart12579//z (one-env)*t0+prim12580{0x61566156, cc_t0_mul_1menv_add_prim},12581// Famista64. Added by Gonetz12582//(t0-0)*t0+prim12583{0x61f161f1, cc_t0_mul_prim},12584// Pokemon Stadium 2. Added by Gonetz12585//(shade-0)*t0+prim12586{0x61f461f4, cc_t0_mul_shade_add_prim},12587// Doom. Added by Gonetz12588//(1-0)*t0+prim12589{0x61f661f6, cc_t0_add_prim},12590// tire trace, beetle adventure racing. Added by Gonetz12591// (shade-prim)*t1+prim, (cmb-0)*t1+0 **INC**12592{0x6234e2f0, cc_shade_sub_prim_mul_t1_add_prim},12593// Text, turok12594// (env-prim)*t1+prim12595{0x62356235, cc_env_sub_prim_mul_t1_add_prim},12596// Pokemon Stadium 2, [gokuss4]. Added by Gonetz12597// (env-prim)*t1+prim, (cmb-0)*t1+012598// Hack alert!12599{0x6235e2f0, cc_t1},12600// bike trace, xg2 intro. Added by Gonetz12601// (1-prim)*t1+prim12602{0x62366236, cc_one_sub_prim_mul_t1_add_prim},12603// aerofighter's assault [Ogy]12604// (1-prim)*t1+prim, (cmb-0)*0+env12605{0x6236bff0, cc_one_sub_prim_mul_t1_add_prim},12606// Tennis court, mario tennis12607// (t0-0)*t1+prim12608{0x62f162f1, cc__t0_mul_t1__add_prim},12609// Arena, Pokemon Stadium 212610// (t0-0)*t1+prim, (cmb-0)*shade+012611{0x62f1e4f0, cc__t0_mul_t1_add_prim__mul_shade},12612// Rush2. Added by Gonetz12613// (prim-prim)*prim+prim12614{0x63336333, cc_prim},12615//Bowser in final battle, Paper Mario. Added by Gonetz12616// (t1-0)*prim+prim12617{0x63f263f2, cc_t1_mul_prim_add_prim},12618// wetrix, icelayer, [Raziel64]. Added by Gonetz12619// (t0-prim)*shade+prim ** INC **12620{0x64316431, cc_t0_mul_shade},12621// KI. Added by Gonetz12622// (env-prim)*shade+prim12623{0x64356435, cc_env_sub_prim_mul_shade_add_prim},12624// xg2. Added by Gonetz12625// (1-prim)*shade+prim, (t0-0)*cmb+0 ** INC **12626{0x6436e0f1, cc_t1_mul__one_sub_prim_mul_shade_add_prim},12627// Intro, CBFD. Added by Gonetz12628// (t0-env)*shade+prim12629{0x64516451, cc_t0_sub_env_mul_shade_add_prim},12630// sword in final battle, zelda 2. Added by Gonetz12631// (t0-env)*shade+prim, (cmb-0)*shade+0 ** INC **12632{0x6451e4f0, cc__t0_sub_env_mul_shade_add_prim__mul_shade},12633// attack, Pokemon Stadium 2.12634// (t0-env)*shade+prim, (cmb-0)*shade_a+0 ** INC **12635{0x6451ebf0, cc__t0_sub_env_mul_shade_add_prim__mul_shadea},12636// Road Rush. Added by Gonetz12637// (t0-0)*shade+prim12638{0x64f164f1, cc_t0_mul_shade_add_prim},12639// paper mario. Added by Gonetz12640// (1-0)*shade+prim12641{0x64f664f6, cc_prim_add_shade},12642// Character select, smash bros12643// (t0-prim)*env+prim12644{0x65316531, cc_t0_sub_prim_mul_env_add_prim},12645// Clear screen intro, banjo kazooie12646// (t0-prim)*env+prim, (cmb-0)*shade+012647// {0x6531e4f0, cc_t0_mul_env_mul_shade},12648{0x6531e4f0, cc__prim_inter_t0_using_env__mul_shade},12649// Dragonfly feet, banjo kazooie12650// (1-prim)*env+prim, (cmb-0)*shade+012651{0x6536e4f0, cc__prim_inter_one_using_env__mul_shade},12652// Lava piranha atack, Paper Mario12653// (t1-k4)*env+prim ** INC **12654{0x65726572, cc_t1_mul_env_add_prim},12655// zelda 2 [Ogy]. Added by Gonetz12656// (t0-0)*env+prim, (1-t1)*t0a+cmb ** INC **12657{0x65f10826, cc_one_sub_t1_mul_t0a_add_t0_mul_env_add_prim},12658// clocks while warping through time, zelda 212659// (t0-0)*env+prim, (cmb-0)*0+cmb12660{0x65f11ff0, cc_t0_mul_env_add_prim},12661// Helicopter, Nuclear Strike. Added by Gonetz12662// (t0-0)*env+prim12663{0x65f165f1, cc_t0_mul_env_add_prim},12664// Mystical Ninja12665// (1-0)*env+prim12666{0x65f665f6, cc_prim_add_env},12667// duke nukem: zero hour [Ogy]12668// (noise-0)*env+prim ** INC **12669{0x65f765f7, cc_prim_add_env},12670// "terminator", CBFD12671// (0-0)*env+prim12672{0x65ff65ff, cc_prim},12673// Cliffs, Taz express. Added by Gonetz12674// (t0-0)*scale+prim12675{0x66f166f1, cc_t0_mul_scale_add_prim},12676// Taz express. Added by Gonetz12677// (t0-0)*scale+prim, (cmb-0)*shade+012678{0x66f1e4f0, cc_t0_mul_scale_add_prim__mul_shade},12679// NFL Quarterback Club 98 Menu [CpUMasteR]12680// (prim-0)*scale+prim12681{0x66f366f3, cc_prim},12682// Pikachu12683// (t0-prim)*t0_a+prim, (env-cmb)*enva+cmb12684{0x68310c05, cc__prim_inter_t0_using_t0a__inter_env_using_enva},12685// Character, dual heroes12686// (t0-prim)*t0_a+prim12687{0x68316831, cc_t0_sub_prim_mul_t0a_add_prim},12688// Indy Racing 2000. Added by Gonetz12689// (t0-prim)*t0_a+prim, (cmb-0)*shade+0 ** INC **12690{0x6831e4f0, cc__prim_inter_t0_using_t0a__mul_shade},12691// text, Sin and Punishmen. Added by Gonetz12692// (env-prim)*t0_a+prim ** INC **12693{0x68356835, cc_env_sub_prim_mul_t0a_add_prim},12694// arena, Pokemon Stadium 212695// (1-prim)*t0_a+prim12696{0x68366836, cc_one_sub_prim_mul_t0a_add_prim},12697// menu, PD. Added by Gonetz12698// (env-prim)*t1_a+prim12699{0x69356935, cc_env_sub_prim_mul_t1a_add_prim},12700// {0x69356935, cc_t1},12701//xg2. Added by Gonetz12702// (t0-prim)*prima+prim12703{0x6a316a31, cc_t0_sub_prim_mul_prima_add_prim},12704// menu, battle phoenix 64. Added by Gonetz12705// (env-prim)*prima+prim12706{0x6a356a35, cc_env_sub_prim_mul_prima_add_prim},12707// ground, KI. Added by Gonetz12708// (shade-env)*prima+prim12709{0x6a546a54, cc_shade_sub_env_mul_prima_add_prim},12710// F1 World Grand Prix. Added by Gonetz12711// (t0-0)*prima+prim, (shade-0)*cmb+env **INC**12712{0x6af1a0f4, cc__t0_mul_prima_add_prim_mul__shade_add_env},12713//broken wall, beetle adventure racing. Added by Gonetz12714// (t0-0)*prima+prim, (cmb-0)*shade+0 **INC**12715{0x6af1e4f0, cc__t0_mul_prima_add_prim_mul__shade},12716// Genie, diddy kong racing12717// (t0-prim)*shade_alpha+prim, (env-cmb)*shade+cmb12718// {0x6b310405, cc_env_sub__prim_inter_t0_using_shadea__mul_shade_add_env},12719{0x6b310405, cc_t0_mul_shadea},12720// Extreme G. Added by Gonetz12721// (t0-prim)*shade_alpha+prim ** INC **12722{0x6b316b31, cc_t0_sub_prim_mul_shadea_add_prim},12723// water block, Paper Mario. Added by Gonetz12724// (t0-prim)*shade_alpha+prim, (prim-env)*cmb+env ** INC **12725{0x6b31a053, cc_prim_sub_env_mul__prim_inter_t0_using_shadea__add_env},12726// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz12727// (t0-prim)*shade_alpha+prim, (cmb-0)*shade+0 ** INC **12728{0x6b31e4f0, cc__prim_inter_t0_using_shadea__mul_shade},12729// F1 World Grand Prix sky. Added by Gonetz12730// (env-prim)*shade_alpha+prim, (shade-cmb)*cmb_a+cmb ** INC **12731{0x6b350704, cc_f1_sky},12732// lullaby, Paper Mario. Added by Gonetz12733// (env-prim)*shade_alpha+prim12734{0x6b356b35, cc_env_sub_prim_mul_shadea_add_prim},12735// Some gannon spell, zelda12736// (noise-t0)*env_a+prim, (0-prim)*cmb+1 ** INC **12737{0x6c17c03f, cc_one_sub__one_sub_t0_mul_enva_add_prim__mul_prim},12738//Goldeneye, [Jeremy]. Added by Gonetz12739// (t0-prim)*env_a+prim12740{0x6c316c31, cc_t0_sub_prim_mul_enva_add_prim},12741// button, Sin and Punishmen. Added by Gonetz12742// (env-prim)*env_a+prim12743{0x6c356c35, cc_env_sub_prim_mul_enva_add_prim},12744// frame buffer effect, Glover212745// (env-prim)*env_a+prim, (cmb-0)*shade+012746{0x6c35e4f0, cc__prim_inter_env_using_enva__mul_shade},12747// fallen stars at star summit, Paper Mario. Added by Gonetz12748// (t0-env)*env_a+prim, (1-0)*primlod+cmb12749{0x6c510ef6, cc_t0_sub_env_mul_enva_add_prim},12750// focus, Paper Mario. Added by Gonetz12751// (t0-env)*env_a+prim, (cmb-shade)*shadea+shade ** INC **12752{0x6c518b40, cc_t0_sub_shade_mul_shadea_add_shade},12753// Ring, pokemon stadium 212754// (t0-0)*env_a+prim, (1-0)*cmb+012755{0x6cf1e0f6, cc_t0_mul_enva_add_prim},12756// Jet Force12757// (noise-0)*env_a+prim12758{0x6cf76cf7, cc_prim},12759// snowhead temple, zelda 2. Added by Gonetz12760// (t1-t0)*primlod+prim, (cmb-0)*shade+shade12761{0x6e1284f0, cc__t1_sub_t0_mul_primlod_add_prim__mul_shade_add_shade},12762// zelda 2. Added by Gonetz12763// (t1-t0)*primlod+prim, (cmb-0)*shade+0 ** INC **12764{0x6e12e4f0, cc__t1_sub_t0_mul_primlod_add_prim__mul_shade},12765// mini games quiz monitor backround, Pokemon Stadium 212766// (noise-t0)*primlod+prim, (prim-env)*cmb+env ** INC **12767{0x6e17a053, cc_prim_sub_env_mul__one_sub_t0_mul_primlod_add_prim__add_env},12768// Morning Sun attack, pokemon stadium 212769// (t0-prim)*primlod+prim, (prim-env)*0+cmb12770{0x6e311f53, cc_t0_sub_prim_mul_primlod_add_prim},12771// sky, daikatana. Added by Gonetz12772// (t0-prim)*primlod+prim, (cmb-0)*shade+012773{0x6e31e4f0, cc_t0_mul_shade},12774// ball's track, NFL Blitz. Added by Gonetz12775// (t0-0)*primlod+prim12776{0x6ef16ef1, cc_t0_mul_primlod_add_prim},12777// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz12778// (t0-0)*primlod+prim, (cmb-env)*cmb_a+env ** INC **12779{0x6ef1a750, cc_t0_mul_primlod_add_prim},12780// mini games quiz monitor backround, Pokemon Stadium 212781// (noise-0)*primlod+prim, (env-cmb)*cmb_a+cmb ** INC **12782// use cmb_a which is ac_t0_mul_t112783{0x6ef70705, cc_env_sub_prim_mul__t0a_mul_t1a__add_prim},12784// rope, CBFD12785// (t0-env)*k5+prim12786{0x6f516f51, cc_t0_sub_env_mul_k5_add_prim},12787// super bowling12788// (0-0)*k5+prim12789{0x6fff6fff, cc_prim},12790// intro, Aidyn Chronicles. Added by Gonetz12791// (0-0)*0+prim, (0-0)*0+prim12792{0x79fb7788, cc_prim},12793// Encore attack, Pokemon Stadium 212794// (t0-0)*0+prim, (cmb-0)*shade+012795{0x7ff1e4f0, cc_prim_mul_shade},12796// Menu, megaman12797// (1-0)*0+prim12798{0x7ff67ff6, cc_prim},12799// sky, PGA European Tour12800// (0-0)*0+prim, (env-0)*t0+cmb12801{0x7fff01f5, cc_t1_mul_env_add_prim},12802// WWF No Mercy?12803// ((0-0)*0+prim, (env-cmb)*shade+cmb12804{0x7fff0405, cc_env_sub_prim_mul_shade_add_prim},12805// sky, Spiderman. Added by Gonetz12806// (0-0)*0+prim, (t1-0)*shade+cmb12807{0x7fff04f2, cc_t1_mul_shade_add_prim},12808// ball's shadow, ISS 2k. Added by Gonetz12809// (0-0)*0+prim, (1-cmb)*env+cmb12810{0x7fff0506, cc_one_sub_prim_mul_env_add_prim},12811// Necklace, quest6412812// (0-0)*0+prim, (1-0)*env+cmb12813{0x7fff05f6, cc_prim_add_env},12814// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz12815// (0-0)*0+prim, (1-cmb)*cmba+cmb ** INC **12816{0x7fff0706, cc_prim},12817// Dobutsu no Mori. Added by Gonetz12818//(k5-k5)*0+prim, (cmb-0)*0+cmb12819{0x7fff1ff0, cc_prim},12820// Intro background, starfox12821//z (k5-k5)*0+prim12822{0x7fff7fff, cc_prim},12823// train smoke, Dobutsu No Mori. Added by Gonetz12824//(0-0)*0+prim, (shade-0)*cmb+012825{0x7fffe0f4, cc_prim_mul_shade},12826// Donald Duck intro. Added by Gonetz12827//(0-0)*0+prim, (cmb-0)*prim+012828{0x7fffe3f0, cc_prim_mul_prim},12829// Ms. Pac-Man intro. Added by Gonetz12830//(0-0)*0+prim, (cmb-0)*shade+012831{0x7fffe4f0, cc_prim_mul_shade},12832// zelda 2. Added by Gonetz12833//(t1-t0)*t0+shade, (cmb-0)*shade+012834{0x8112e4f0, cc__t1_sub_t0_mul_t0_add_shade__mul_shade},12835// branches, Beetle Adventure Racing12836//(t0-shade)*t0+shade, (t0-cmb)*prim+cmb **INC**12837{0x81410301, cc_t0_mul_prim},12838// Namco logo, Famista 6412839//(prim-shade)*t0+shade, (env-cmb)*t0+cmb **INC**12840{0x81430105, cc_prim_sub_shade_mul_t0_add_shade},12841// pikachu, hey you pikachu12842//(prim-shade)*t0+shade, (env-cmb)*enva+cmb **INC**12843{0x81430c05, cc_prim_sub_shade_mul_t0_add_shade},12844// Mario's head, mario //Added by Gonetz12845//(prim-shade)*t0+shade12846{0x81438143, cc_prim_sub_shade_mul_t0_add_shade},12847// Iguana background, turok12848// (env-shade)*t0+shade12849{0x81458145, cc_env_sub_shade_mul_t0_add_shade},12850//attack, Pokemon Stadium 212851// (env-shade)*t0+shade, (cmb-0)*prim+012852{0x8145e3f0, cc__env_sub_shade_mul_t0_add_shade__mul_prim},12853// Bubbles in Jabu-Jabu's belly, zelda12854// (1-shade)*t0+shade12855{0x81468146, cc_one_sub_shade_mul_t0_add_shade},12856// saffron city, Pokemon Stadium 212857// (1-shade)*t0+shade, (cmb-0)*prim+012858{0x8146e3f0, cc__one_sub_shade_mul_t0_add_shade__mul_prim},12859// duck dodgers intro. Added by Gonetz12860// (1-shade)*t0+shade, (cmb-0)*shade+012861{0x8146e4f0, cc__one_sub_shade_mul_t0_add_shade__mul_shade},12862// saffron city, Pokemon Stadium 212863// (1-shade)*t0+shade, (cmb-0)*prima+012864{0x8146eaf0, cc__one_sub_shade_mul_t0_add_shade__mul_env},12865// intro, Madden Footbal12866// (1-env)*t0+shade12867{0x81568156, cc_one_sub_env_mul_t0_add_shade},12868// sky in doom. Added by Gonetz12869// (prim-0)*t0+shade, (cmb-0)*primlod+env **INC**12870{0x81f3aef0, cc_t0_mul_prim_add_shade},12871// commercial? in IIS98. Added by Gonetz12872// (1-0)*t0+shade12873{0x81f681f6, cc_t0_add_shade},12874//attack, Pokemon Stadium 212875//(t0-prim)*t1+shade12876{0x82318231, cc_t0_sub_prim_mul_t1_add_shade},12877//beetle adventure racing. Added by Gonetz12878//(prim-shade)*t1+shade, (cmb-0)*t1+0 **INC**12879{0x8243e2f0, cc_prim_sub_shade_mul_t1_add_shade},12880//Arena, Pokemon Stadium 212881//(t0-0)*t1+shade12882{0x82f182f1, cc__t0_mul_t1__add_shade},12883//Arena, Pokemon Stadium 212884//(t0-0)*t1+shade, (cmb-0)*prim+012885{0x82f1e3f0, cc__t0_mul_t1__mul_prim_add_prim_mul_shade},12886// Scorpion fire breath, MK4 [Jeremy]. Added by Gonetz12887// (t0-shade)*prim+shade12888{0x83418341, cc_t0_mul_prim_add_one_sub_prim_mul_shade},12889// Menu background, wwf no mercy12890// (env-shade)*prim+shade12891{0x83458345, cc_prim_mul_env_add_one_sub_prim_mul_shade},12892// Pokemon selection window background, pokemon stadium 212893// (noise-shade)*prim+shade12894{0x83478347, cc_shade},12895// crown of king of ikana, zelda 2. Added by Gonetz12896// (t0-env)*prim+shade12897{0x83518351, cc_t0_sub_env_mul_prim_add_shade},12898// crown of king of ikana, zelda 2. Added by Gonetz12899// (t0-env)*prim+shade, (cmb-0)*cmb+0 ** INC **12900{0x8351e0f0, cc_t0_sub_env_mul_prim_add_shade},12901// salesman's shirt in the bomb shop in town, zelda 2 [Ogy]. Added by Gonetz12902// (t0-env)*prim+shade, (cmb-0)*shade+0 ** INC **12903{0x8351e4f0, cc_t0_mul_prim_mul_shade},12904// intro, Madden Footbal12905// (1-env)*prim+shade12906{0x83568356, cc_one_sub_env_mul_prim_add_shade},12907// Buss hunter 64. Added by Gonetz12908// (t0-0)*prim+shade12909{0x83f183f1, cc_t0_mul_prim_add_shade},12910// huge water lilies, zelda 2 [Ogy]. Added by Gonetz12911// (t0-0)*prim+shade, (cmb-env)*shade+0 ** INC **12912{0x83f1e450, cc__t0_mul_prim_add_shade__sub_env_mul_shade},12913// cynnabar gym fire shield, pokemon stadium 212914// (t0-0)*prim+shade, (cmb-0)*env+0 ** INC **12915{0x83f1e5f0, cc__t0_mul_prim_add_shade__mul_env},12916// Objects in arena, pokemon stadium 212917// (t1-0)*prim+shade, (cmb-0)*prim_a+0 - not going to bother with prim_a since it is FF12918{0x83f2eaf0, cc_t1_mul_prim_add_shade},12919// Pokemon Stadium 2. Added by Gonetz12920// (t0-prim)*shade+shade ** INC **12921{0x84318431, cc_t0_mul_shade},12922// big N, Pokemon Stadium 2. Added by Gonetz12923// (1-prim)*shade+shade ** INC **12924{0x84368436, cc_one_sub_prim_mul_shade_add_shade},12925//Arena, Pokemon Stadium 212926//(t0-env)*shade+shade12927{0x84518451, cc_t0_sub_prim_mul_shade_add_shade},12928//Arena, Pokemon Stadium 212929//(t0-env)*shade+shade, (cmb-0)*prim+012930{0x8451e3f0, cc_t0_sub_env_mul_prim_mul_shade_add_prim_mul_shade},12931// arena, PokemonStadium2, [Raziel64]12932// (t0-0)*shade+shade, (cmb-0)*prim+012933{0x84f1e3f0, cc_t0_mul_prim_mul_shade_add_prim_mul_shade},12934// Spiderman. Added by Gonetz12935// (1-0)*shade+shade12936{0x84f684f6, cc_shade_add_shade},12937// the "gekko" ( a monster in a room above the 3rd room of woodfall temple }, zelda 2 [Ogy]. Added by Gonetz12938// (t0-prim)*env+shade ** INC **12939{0x85318531, cc_t0_sub_prim_mul_env_add_shade},12940// flower, zelda 2. Added by Gonetz12941// (t0-prim)*env+shade, (cmb-0)*shade+0 ** INC **12942{0x8531e4f0, cc_t0_sub_prim_mul_env_add_shade},12943// Robotron 64, [scorpiove]12944// (env-shade)*env+shade ** INC **12945{0x85458545, cc_one_sub_env_mul_shade_add_env},12946// Enemy dying, quest6412947// (1-shade)*env+shade **changed by Gonetz12948{0x85468546, cc_one_sub_shade_mul_env_add_shade},12949// Arena, Pokemon Stadium12950// (t0-0)*env+shade, (cmb-0)*prim+012951{0x85f1e3f0, cc__t0_mul_prim_mul_env__add__prim_mul_shade},12952// Clouds, Pokemon Stadium12953// (t1-0)*env+shade, (cmb-0)*prim+012954{0x85f2e3f0, cc__t1_mul_prim_mul_env__add__prim_mul_shade},12955// Sky, Beetle Adventure Racing ** INC **12956//(t0-shade)*t0_a+shade, (env-cmb)*enva+cmb12957{0x88410c05, cc_t0_sub_shade_mul_t0a_add_shade},12958// Mario's eyes, mario12959//z (t0-shade)*t0_a+shade12960{0x88418841, cc_t0_sub_shade_mul_t0a_add_shade},12961//beetle adventure racing. Added by Gonetz12962// (prim-shade)*t0_a+shade, (t1-0)*cmb+0 **INC**12963{0x8843e0f2, cc_prim_sub_shade_mul__t0a_mul_t1__add_shade},12964// blast corps [Ogy]12965// (prim-shade)*t1_a+shade12966{0x89438943, cc_prim_sub_shade_mul_t1a_add_shade},12967//broken wall, beetle adventure racing. Added by Gonetz12968// (t0-shade)*prima+shade, (1-0)*0+cmb12969{0x8a411ff6, cc_t0_sub_shade_mul_prima_add_shade},12970// menu, battle phoenix 64. Added by Gonetz12971// (t0-shade)*prima+shade12972{0x8a418a41, cc_t0_add_shade},12973// intro, castlevania 2. Added by Gonetz12974// (prim-shade)*prim_a+shade12975{0x8a438a43, cc_prim_sub_shade_mul_prima_add_shade},12976// Pilot wings12977// (t0-shade)*shade_a+shade, (cmb-0)*shade+012978{0x8b41e4f0, cc__shade_inter_t0_using_shadea__mul_shade},12979// ?12980// (1-shade)*shade_a+shade12981{0x8b468b46, cc_one_sub_shade_mul_shadea_add_shade},12982// Pilot wings, sky in congratulations12983// (t0-0)*shade_a+shade,12984{0x8bf18bf1, cc_t0_mul_shadea_add_shade},12985// arena, Pokemon Stadium. Added by Gonetz12986// (t0-t1)*env_a+shade, (cmb-env)*prim+0 ** INC **12987{0x8c21e350, cc__t0_sub_t1_mul_enva_add_shade__sub_env_mul_prim},12988//diddy kong racing background fill. Added by Gonetz ** Modified by Dave200112989// (env-shade)*env_a+shade, (cmb-0)*prim+012990{0x8c458c45, cc_shade}, // note: previous combiner used other_alpha; doesn't work12991//diddy kong racing. Added by Gonetz12992// (env-shade)*env_a+shade, (cmb-0)*prim+0 ** INC **12993{0x8c45e3f0, cc_prim_mul_shade},12994// sky, Pokemon Stadium, [Raziel64]12995// (t0-0)*env_a+shade, (cmb-env)*prim+0 ** INC **12996{0x8cf1e350, cc_t0_mul_prim_add_shade_sub_env_mul_prim},12997// zelda 2 [Ogy]. Added by Gonetz12998// (t0-prim)*primlod+shade, (prim-env)*cmb+env ** INC **12999{0x8e31a053, cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_shade__add_env},13000// fallen leaves, Dobutsu no Mori. Added by Gonetz13001// (t0-shade)*primlod+shade, (prim-env)*cmb+env ** INC **13002{0x8e41a053, cc_prim_sub_env_mul__t0_sub_shade_mul_primlod_add_shade__add_env},13003// the icicle above the part just before the entrance to the mountain village, zelda 2 [Ogy]. Added by Gonetz13004// (t0-prim)*0+shade, (prim-env)*cmb+env ** INC ** ?13005{0x9f31a053, cc_prim_sub_env_mul_shade_add_env},13006// background on level 3-1, kirby 64 [Raziel64]. Added by Gonetz13007// (0-env)*0+shade13008{0x9f5f9f5f, cc_shade},13009// Spotlight, smash bros13010// (1-0)*0+shade13011{0x9ff69ff6, cc_shade},13012// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz13013// (0-0)*0+shade, (cmb-cmb)*cmb+cmb13014{0x9fff0000, cc_shade},13015// menu, Dr.Mario. Added by Gonetz13016// (0-0)*0+shade, (prim-cmb)*env+cmb13017{0x9fff0503, cc_prim_sub_shade_mul_env_add_shade},13018// pikachu, hey you pikachu. Added by Gonetz13019// (0-0)*0+shade, (env-cmb)*enva+cmb13020{0x9fff0c05, cc_env_sub_shade_mul_enva_add_shade},13021// mega shock, paper mario13022//(0-0)*0+shade, (env-prim)*cmb+prim13023{0x9fff6035, cc_env_sub_prim_mul_shade_add_prim},13024// Super Mario 64 logo background13025//z (k5-k5)*0+shade13026{0x9fff9fff, cc_shade},13027// Zelda 2 final movie. Added by Gonetz13028// (0-0)*0+shade, (prim-0)*cmb+013029{0x9fffe0f3, cc_prim_mul_shade},13030// tree shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz13031// (0-0)*0+shade, (env-0)*cmb+013032{0x9fffe0f5, cc_env_mul_shade},13033// N64 logo, Aidyn Chronicles. Added by Gonetz13034// (0-0)*0+shade, (cmb-0)*prim+013035{0x9fffe3f0, cc_prim_mul_shade},13036// Hand, smash bros13037// (0-0)*0+shade, (cmb-0)*env+013038{0x9fffe5f0, cc_env_mul_shade},13039// Lave piranha atack, Paper Mario13040// (t1-t0)*t0+env, (cmb-t1)*t0+prim ** INC **13041{0xa1126120, cc__t0_mul_t1__mul_env_add_prim},13042//Arena, Pokemon Stadium 213043// (t1-prim)*t0+env, (cmb-0)*shade+013044{0xa132e4f0, cc__t1_sub_prim_mul_t0_add_env__mul_shade},13045// Kirby64 end [Raziel64]. Added by Gonetz13046// (prim-shade)*t0+env13047{0xa143a143, cc_prim_sub_shade_mul_t0_add_env},13048// Superman [scorpiove]. Added by Gonetz13049// (t0-env)*t0+env13050{0xa151a151, cc_t0_sub_env_mul_t0_add_env},13051// powder keg, zelda 2. Added by Gonetz13052// (prim-env)*t0+env, (0-0)*shade_a+cmb13053{0xa1530bff, cc__prim_sub_env_mul_t0_add_env__add_shadea},13054// pokemon attack, Pokemon Stadium 2. Added by Gonetz13055// (prim-env)*t0+env, (0-0)*prim_lod+cmb13056{0xa1530ef6, cc__prim_sub_env_mul_t0_add_env__add_primlod},13057//attack, Pokemon Stadium 213058// (prim-env)*t0+env, (0-0)*prim_lod+cmb13059{0xa1530eff, cc_prim_sub_env_mul_t0_add_env},13060// Kotake & koume defeated, going into sky, zelda13061// (prim-env)*t0+env, (prim-env)*0+cmb13062{0xa1531f53, cc_prim_sub_env_mul_t0_add_env},13063// water, Dobutsu no Mori. Added by Gonetz13064// (prim-env)*t0+env, (cmb-0)*shade+t013065{0xa15324f0, cc_t0_add_shade_mul_env},13066//sky, beetle adventure racing. Added by Gonetz13067// (prim-env)*t0+env, (cmb-shade)*t1+shade **INC** can't be done in one step13068{0xa1538240, cc__env_inter_prim_using_t0__sub_shade_mul_t0a_add_shade},13069//couple's mask, zelda2. Added by Gonetz13070// (prim-env)*t0+env, (prim-cmb)*shade+shade **INC** can't be done in one step13071{0xa1538403, cc_t0_mul_shade},13072// stadium, Pokemon Stadium 2. Added by Gonetz13073// (prim-env)*t0+env, (cmb-0)*shade+shade **INC** can't be done in one step13074{0xa15384f0, cc_t0_mul_shade},13075//clothes on girl in inn, zelda2. Added by Gonetz13076// (prim-env)*t0+env, (cmb-prim)*env+shade **INC** can't be done in one step13077{0xa1538530, cc_t0_mul_env_add_shade},13078// Getting light arrows for the first time, zelda13079// (prim-env)*t0+env, (prim-env)*cmb+env ** INC **13080{0xa153a053, cc_prim_sub_env_mul_t0_add_env},13081// Fire, starfox13082// (prim-env)*t0+env13083{0xa153a153, cc_prim_sub_env_mul_t0_add_env},13084// a spell, Fushigi no Dungeon: Fuurai no Shiren 213085// (prim-env)*t0+env, (cmb-env)*enva+env13086{0xa153ac50, cc_prim_sub_env_mul__t0_mul_enva__add_env},13087// wizrobe's attack, zelda 2. Added by Gonetz.13088// (prim-env)*t0+env, (cmb-0)*cmb+013089{0xa153e0f0, cc_prim_sub_env_mul_t0_add_env},13090// dress, zelda 2. Added by Gonetz.13091// also for Great Farie's hair - changed to use texture mod by Dave2001.13092// (prim-env)*t0+env, (shade-0)*cmb+013093{0xa153e0f4, cc__env_inter_prim_using_t0__mul_shade},13094// Start menu, paper mario13095// (prim-env)*t0+env, (cmb-0)*t0+013096{0xa153e1f0, cc_prim_sub_env_mul_t0_add_env},13097// {0xa153e0f4, cc_prim_sub_env_mul_t0_add_env},13098// Jellyfish tentacles in Jabu-Jabu's belly, zelda13099// (prim-env)*t0+env, (cmb-0)*prim+013100{0xa153e3f0, cc__env_inter_prim_using_t0__mul_prim},13101// Dust, zelda13102//z (prim-env)*t0+env, (cmb-0)*shade+0 ** INC **13103{0xa153e4f0, cc__env_inter_prim_using_t0__mul_shade},13104//{0xa153e4f0, cc_prim_sub_env_mul_t0_add_env},13105// roof, Kirby 64. Added by Gonetz13106// (prim-env)*t0+env, (cmb-0)*env+0 ** INC **13107{0xa153e5f0, cc_prim_sub_env_mul_t0_add_env},13108// hall of fame, Pokemon Stadium13109// (prim-env)*t0+env, (cmb-0)*primlod+013110{0xa153eef0, cc__prim_sub_env_mul_t0_add_env__mul_primlod},13111// Something weird in intro, monster truck madness13112// (prim-env)*t0+env, (cmb-0)*k5+013113{0xa153eff0, cc__prim_sub_env_mul_t0_add_env__mul_k5},13114// clothes, kirby 64. Added by Gonetz13115// (shade-env)*t0+env13116{0xa154a154, cc_shade_sub_env_mul_t0_add_env},13117// field, Derby Stallion13118// (shade-env)*t0+env, (cmb-0)*prim+0 ** INC **13119{0xa154e3f0, cc_shade_sub_env_mul_t0_mul_prim_add_prim_mul_env},13120// background, level 3-5, kirby 64, [Raziel64]13121// (shade-env)*t0+env, (cmb-0)*shade+0 ** INC **13122{0xa154e4f0, cc_shade_sub_env_mul_t0_add_env},13123// pokemon attack, Pokemon Stadium 2. Added by Gonetz13124// (one-env)*t0+env13125{0xa156a156, cc_one_sub_env_mul_t0_add_env},13126// Arena, Pokemon Stadium 2.13127// (one-env)*t0+env, (cmb-0)*shade+013128{0xa156e4f0, cc__env_inter_one_using_t0__mul_shade},13129//Arena, Pokemon Stadium 213130// (t1-0)*t0+env, (cmb-0)*cmb+0 ** INC **13131{0xa1f2e0f0, cc__t0_mul_t1__add_env_mul__t0_mul_t1__add_env},13132// quake 2 intro13133// (prim-0)*t0+env, (prim-0)*primlod+cmb ** INC **13134{0xa1f30ef3, cc_t0_mul_prim_add_env},13135// Kotake or koume's hair, zelda13136// (prim-0)*t0+env13137{0xa1f3a1f3, cc_t0_mul_prim_add_env},13138// track, ridge racer. Added by Gonetz13139// (t0-env)*t1+env, (cmb-0)*shade+0 ** INC **13140{0xa251e4f0, cc__t0_mul_t1__mul_shade},13141// lava, beetle adventure racing13142// (t0-env)*t1+env, (cmb-0)*enva+0 ** INC **13143{0xa251ecf0, cc__t0_mul_t1__mul_enva},13144// Ded Moroz, Paper Mario13145// (prim-env)*t1+env, (1-cmb)*t1+cmb ** INC **13146{0xa2530206, cc_prim_sub_env_mul_t1_add_env},13147// text, monster truck madness13148// (prim-env)*t1+env13149{0xa253a253, cc_prim_sub_env_mul_t1_add_env},13150// car position, Top Gear Rally. Added by Gonetz13151// (prim-env)*t1+env, (cmb-t0)*t1+0 ** INC **13152{0xa253e210, cc_prim_sub_env_mul_t1_add_env_mul_t0},13153// text, Top Gear Rally. Added by Gonetz13154// (prim-env)*t1+env, (cmb-0)*t1+0 ** INC **13155{0xa253e2f0, cc_prim_sub_env_mul_t1_add_env_mul_t0},13156// {0xa253e2f0, cc_prim_sub_env_mul_t1_add_env},13157// a pole in the cut-scene that appears after you receive odolwa's mask, zelda 2 [Ogy]. Added by Gonetz13158// (prim-env)*t1+env, (cmb-0)*shade+0 ** INC **13159{0xa253e4f0, cc_t1_mul_prim_mul_shade},13160// Quake 2 intro. Added by Gonetz13161// (t0-0)*t1+env, (t0-0)*primlod+cmb ** INC **13162{0xa2f10ef1, cc__t0_mul_t1__add_env},13163// silver cave, pokemon stadium 213164// (t0-0)*t1+env, (cmb-prim)*shadea+prim13165{0xa2f16b30, cc_prim_inter__t0_mul_t1_add_env__using_shadea},13166// silver cave, pokemon stadium 213167// (t0-0)*t1+env, (cmb-0)*shadea+shade13168{0xa2f18bf0, cc__t0_mul_t1_add_env__mul_shadea_add_shade},13169// Quake64. Added by Gonetz13170// (t0-0)*t1+env13171{0xa2f1a2f1, cc__t0_mul_t1__add_env},13172// Quake II. Added by Gonetz ** INC **13173// (t0-0)*t1+env, (cmb-0)*prim+env13174{0xa2f1a3f0, cc__t0_mul_t1__mul_prim_add_env},13175// Dr Mario [Ogy]. Added by Gonetz13176// (t0-env)*prim+env13177// {0xa351a351, cc_t0_mul_prim_add_env},13178{0xa351a351, cc_t0_sub_env_mul_prim_add_env},13179// menu, Dr.Mario. Added by Gonetz13180// (prim-env)*prim+env13181{0xa353a353, cc_prim_sub_env_mul_prim_add_env},13182// Razor sword, zelda 2. Added by Gonetz13183// (shade-env)*prim+env, (cmb-0)*shade+0 ** INC **13184{0xa354e4f0, cc_shade_sub_env_mul_prim_add_env},13185// bomberman 64-2 intro. Added by Gonetz13186// (1-env)*prim+env13187{0xa356a356, cc_one_sub_env_mul_prim_add_env},13188// thing that escapes from the well, zelda13189// (noise-env)*prim+env13190{0xa357a357, cc_prim_add_env},13191// Bongo Bongo, zelda13192// (noise-env)*prim+env, (cmb-0)*shade+013193{0xa357e4f0, cc_env_mul_shade},13194// paper mario. Added by Gonetz13195// (t0-0)*prim+env13196{0xa3f1a3f1, cc_t0_mul_prim_add_env},13197// paper mario. Added by Gonetz13198// (t0-0)*prim+env, (t0-env)*prim+013199{0xa3f1e351, cc_t0_mul_prim_add_env},13200// paper mario. Added by Gonetz13201// (t0-0)*prim+env, (t0-0)*prim+013202{0xa3f1e3f1, cc_t0_mul_prim},13203// mahogany town statue, Pokemon Stadium 213204// (t0-0)*prim+env, (cmb-0)*shade+013205{0xa3f1e4f0, cc__t0_mul_prim_add_env__mul_shade},13206// squirt, paper mario. Added by Gonetz13207// (t1-0)*prim+env, (1-cmb)*t1+cmb13208{0xa3f20206, cc_t1_mul_prim_add_env},13209// paper mario. Added by Gonetz13210// (shade-0)*prim+env13211{0xa3f4a3f4, cc_prim_mul_shade_add_env},13212// Sharpen attack, pokemon stadium 213213// (shade-0)*prim+env, (cmb-0)*shade+013214{0xa3f4e4f0, cc__prim_mul_shade_add_env__mul_shade},13215// Doraemon 2. Added by Gonetz13216// (1-0)*prim+env13217{0xa3f6a3f6, cc_prim_add_env},13218// Pokemon Stadium 2, [Jeremy]. Added by Gonetz13219// (noise-0)*prim+env ** INC ** ?13220{0xa3f7a3f7, cc_prim_add_env},13221// monsters, Pokemon Stadium. Added by Gonetz13222// (t0-t1)*shade+env, (cmb-0)*prim+0 ** INC **13223{0xa421e3f0, cc__t0_sub_t1__mul_prim_mul_shade_add_prim_mul_env},13224// background, pokemon stadium 213225// (t0-prim)*shade+env13226{0xa431a431, cc_t0_sub_prim_mul_shade_add_env},13227// Arena, pokemon stadium 213228// (t0-prim)*shade+env, (cmb-0)*shade+013229{0xa431e4f0, cc__t0_sub_prim_mul_shade_add_env__mul_shade},13230// Trophy, pokemon stadium 213231// (t0-prim)*shade+env, (cmb-0)*shade_a+013232{0xa431ebf0, cc__t0_sub_prim_mul_shade_add_env__mul_shadea},13233// Buildings, pokemon stadium 213234// (t1-prim)*shade+env13235{0xa432a432, cc_t1_sub_prim_mul_shade_add_env},13236// bomberman 64 [Ogy]13237// (t0-env)*shade+env13238{0xa451a451, cc_t0_mul_shade_add_env},13239// kirby drill, kirby 64. Added by Gonetz13240// (prim-env)*shade+env13241{0xa453a453, cc_prim_sub_env_mul_shade_add_env},13242// ball, ISS98 intro. Added by Gonetz13243// (t0-0)*shade+env13244{0xa4f1a4f1, cc_t0_mul_shade_add_env},13245// waterfall, Dobutsu_no_Mori13246// (prim-0)*shade+env, (t0-0)*primlod+cmb13247{0xa4f30ef1, cc_t0_mul_primlod_add_prim_mul_shade_add_env},13248// waterfall, Dobutsu_no_Mori13249// (prim-0)*shade+env, (t1-0)*primlod+cmb13250{0xa4f30ef2, cc_t1_mul_primlod_add_prim_mul_shade_add_env},13251// score, ISS98 intro. Added by Gonetz13252// (prim-0)*shade+env13253{0xa4f3a4f3, cc_prim_mul_shade_add_env},13254// magic fist, Rayman2. Added by Gonetz13255// (env-0)*shade+env13256{0xa4f5a4f5, cc_env_mul_shade_add_env},13257// gunfire, Quake64. Added by Gonetz13258// (1-0)*shade+env13259{0xa4f6a4f6, cc_env_add_shade},13260// flame, Paper Mario. Added by Gonetz13261// (t0-center)*scale+env, (0-prim)*cmb+env13262{0xa661a03f, cc_env_sub__t0_mul_scale_add_env__mul_prim},13263// N64 BIOS13264// (t0-env)*t0_a+env, cmb*shade13265{0xa851e0f4, cc__env_inter_t0_using_t0a__mul_shade},13266// pink car, f-zero x13267// (t0-env)*t0_a+env, cmb*shade13268{0xa851e4f0, cc__env_inter_t0_using_t0a__mul_shade},13269// PokemonStadium1, [Raziel64]13270// (prim-env)*t0_a+env, (cmb-cmb)*cmb+cmb13271{0xa8530000, cc_prim_sub_env_mul_t0a_add_env},13272// N64 logo, Ogre Battle13273// (prim-env)*t0_a+env13274{0xa853a853, cc_prim_sub_env_mul_t0a_add_env},13275// Mud Slap, Pokemon Stadium 2 [gokuss4]. Added by Gonetz13276// (prim-env)*t0_a+env, (cmb-0)*cmb+013277{0xa853e0f0, cc_prim_sub_env_mul_t0a_add_env},13278// Tree background, mace13279// (prim-env)*t0_a+env, (cmb-0)*t0+013280{0xa853e1f0, cc__env_inter_prim_using_t0a__mul_t0},13281//attack, Pokemon Stadium 213282// (prim-env)*t0_a+env, (cmb-0)*prim+013283{0xa853e3f0, cc__env_inter_prim_using_t0a__mul_prim},13284// logo, Deadly Arts. Added by Gonetz13285// (prim-env)*t1_a+env13286{0xa953a953, cc_prim_sub_env_mul_t1a_add_env},13287// MarioGolf text "Birdie Put"13288// (t0-env)*prim_a+env13289{0xaa51aa51, cc_t0_sub_env_mul_prima_add_env},13290// N64 BIOS13291// (t0-env)*prim_a+env, (shade-0)*cmb+013292{0xaa51e0f4, cc__env_inter_t0_using_prima__mul_shade},13293// N64 BIOS13294// (prim-env)*prima+env, (shade-0)*cmb+013295{0xaa53e0f4, cc__env_inter_prim_using_prima__mul_shade},13296// Girl, PD intro. Added by Gonetz13297// (t0-env)*shade_alpha+env, (cmb-0)*shade+0 ** INC **13298{0xab51e4f0, cc__env_inter_t0_using_shadea__mul_shade},13299// Some gannon spell, zelda13300// (prim-env)*shade_alpha+env13301{0xab53ab53, cc_prim_sub_env_mul_shadea_add_env},13302//Arena, Pokemon Stadium 213303// (t0-0)*shade_alpha+env, (cmb-0)*shade+prim13304{0xabf164f0, cc__t0_mul_shadea_add_env__mul_shade_add_prim},13305// Boxes, Taz express. Added by Gonetz13306// (t0-env)*env_a+env13307{0xac51ac51, cc_t0_sub_env_mul_enva_add_env},13308// paper mario. Added by Gonetz13309// (t0-env)*env_a+env, (cmb-0)*shade+0 **INC**13310{0xac51e4f0, cc_t0_mul_env_mul_shade},13311// goal, Monster Truck Madness 6413312// (noise-0)*env_a+env, (cmb-0)*t1+0 **INC**13313{0xacf7e2f0, cc_t1_mul_env},13314// sword on forge, zelda 2. Added by Gonetz13315// (t1-t1)*lodf+env, (t1-t0)*cmb+prim13316{0xae226012, cc__t1_sub_t0__mul_env_add_prim},13317// menu background, Pokemon Stadium 2, [Raziel64]13318// (t0-prim)*lodf+env13319{0xae31ae31, cc_t0_sub_prim_mul_primlod_add_env},13320// odd mushroom, zelda oot. Added by Gonetz13321// (t0-shade)*lodf+env, (prim-env)*cmb+env ** INC **13322{0xae41a053, cc__env_inter_prim_using__t0_sub_shade_mul_primlod_add_env},13323// {0xae41a053, cc_prim_sub_env_mul__t0_mul_shade__add_env},13324// Morning Sun, Pokemon Stadium 2 [gokuss4]. Added by Gonetz13325// (t0-env)*lodf+env, (cmb-0)*prim+013326{0xae51e3f0, cc__env_inter_t0_using_primlod__mul_prim},13327//Spacestation Silicon Valley intro. Added by Gonetz13328// (prim-env)*lodf+env13329{0xae53ae53, cc_env_inter_prim_using_primlod},13330// Doom, intro. Added by Gonetz13331// (t0-0)*lodf+env, (t0-0)*lodf+env13332{0xaef1aef1, cc_t0_add_env},13333// Dobutsu no Mori. Added by Gonetz13334// (prim-0)*lodf+env13335{0xaef3aef3, cc_prim_add_env},13336// forest behind window, Dobutsu no Mori. Added by Gonetz13337// (prim-0)*prim_lod+env, (t1-0)*cmb+013338{0xaef3e0f2, cc_t0_mul__prim_mul_primlod_add_env },13339// tony hawks 2 menu13340// (t0-rnv)*k5+env, (cmb-t1)*t1_a+t1 ** INC ** (correct combiner does not work because of black t1)13341{0xaf514920, cc_t0_sub_env_mul_k5_add_env},13342// intro, Mission Impossible. Added by Gonetz13343// (k5-k5)*0+env, (0-0)*scale+env13344{0xbfffa6ff, cc_env},13345// Something blocking the screen, waverace13346//z (k5-k5)*0+env13347{0xbfffbfff, cc_env},13348// Derby Stallion . Added by Gonetz13349// (0-0)*0+env, (cmb-0)*prim+013350{0xbfffe3f0, cc_prim_mul_env},13351// zelda 2 [Ogy]. Added by Gonetz13352// (k5-k5)*0+env, ((cmb-0)*shade+013353{0xbfffe4f0, cc_env_mul_shade},13354// flame, paper mario. Added by Gonetz13355// (t0-t1)*t0+1, (0-prim)*cmb+env **INC** weird13356{0xc121a03f, cc__t0_inter_t1_using_half__mul_prim_add_env},13357// tube near big monster on level 5, Kirby64 [Raziel64]13358// (prim-env)*t0+1, (cmb-0)*shade+0 ** INC **13359{0xc153e4f0, cc_prim_sub_env_mul_t0_mul_shade},13360// paper mario. Added by Gonetz13361// (0-env)*t0+1, (prim-cmb)*t0+prim **INC**13362{0xc15f6103, cc_env_sub_prim_mul_t0_add_prim},13363// HAL, smash bros13364// (0-0)*0+113365{0xdfffdfff, cc_one},13366// arena, Pokemon Stadium 1, [Raziel64]13367// (0-0)*0+1, (cmb-0)*prim+013368{0xdfffe3f0, cc_prim},13369// skis, Spacestation Silicon Valley. Added by Gonetz13370// (shade-0)*cmb+0, (t1-t0)*primlod+t013371{0xe0f42d12, cc_t0_inter_t1_using_primlod},13372// paper mario. Added by Gonetz13373// (1-t1)*t0+0, (env-prim)*cmb+prim ** INC **13374{0xe1266035, cc_env_sub_prim_mul__t0_mul_t1__add_prim},13375// ground, zelda 2. Added by Gonetz.13376// (t1-prim)*t0+0, (cmb-0)*shade+013377{0xe132e4f0, cc__t1_sub_prim_mul_t0__mul_shade},13378// carmagedon13379// (shade-prim)*t0+013380{0xe134e134, cc_shade_sub_prim_mul_t0},13381// skeleton, castlevania 2. Added by Gonetz13382// (1-prim)*t0+0, (cmb-0)*shade+013383{0xe136e4f0, cc_t0_mul_1mprim_mul_shade},13384// Starshot logo. Added by Gonetz13385// (shade-env)*t0+0, (1-0)*cmb+cmb13386{0xe15400f6, cc_shade_sub_env_mul_t0},13387// Kirby morfing, smash bros. Added by Gonetz13388// (shade-env)*t0+013389{0xe154e154, cc_shade_sub_env_mul_t0},13390// menu, PGA euro tour. Added by Gonetz13391// (1-env)*t0+013392{0xe156e156, cc_one_sub_env_mul_t0},13393// paper mario. Added by Gonetz13394// (t0-0)*t0+0, (1-cmb)*prim+cmb13395{0xe1f10306, cc_one_sub_t0_mul_prim_add_t0},13396// F1 World Grand Prix. Added by Gonetz13397// (t0-0)*t0+0, (shade-prim)*cmb+prim13398{0xe1f16034, cc_shade_sub_prim_mul_t0_add_prim},13399// paper mario. Added by Gonetz13400// (t0-0)*t0+0, (env-prim)*cmb+prim13401{0xe1f16035, cc_env_sub_prim_mul_t0_add_prim},13402// sparkles, F1 World Grand Prix. Added by Gonetz13403// (t0-0)*t0+0, (1-prim)*cmb+prim13404{0xe1f16036, cc_one_sub_prim_mul_t0_add_prim},13405// rocket team basket, Pokemon Stadium 213406// (t0-0)*t0+0, (cmb-prim)*shade+shade13407{0xe1f18430, cc__t0_mul_t0__sub_prim_mul_shade_add_shade},13408// Tony Hawk's Pro Skater. Added by Gonetz13409// (t0-0)*t0+0, (cmb-0)*t0+013410{0xe1f1e1f0, cc_t0},13411// something in upper left corner, mario tennis13412// (t0-0)*t0+013413{0xe1f1e1f1, cc_t0},13414// zelda 2. Added by Gonetz13415// (t0-0)*t0+0, (cmb-0)*prim+013416{0xe1f1e3f0, cc_t0_mul_prim},13417// zelda 2 final movie. Added by Gonetz13418// (t0-0)*t0+0, (cmb-0)*shade+013419{0xe1f1e4f0, cc_t0_mul_shade},13420// paper mario. Added by Gonetz13421// (t0-t1)*t0+1, (env-cmb)*prima+cmb ** INC **13422{0xe1f20a05, cc_t1_mul_prima},13423// terrain, SCARS. Added by Gonetz13424// (t1-0)*t0+0, (env-prim)*cmb+prim13425{0xe1f26035, cc_env_sub_prim_mul__t0_mul_t1__add_prim},13426// Trees, Zelda 213427// (t1-0)*t0+0, (cmb-0)*shade+prim13428{0xe1f264f0, cc__t0_mul_t1__mul_shade_add_prim},13429// terrain, SCARS. Added by Gonetz13430// (t1-0)*t0+0, (env-shade)*cmb+shade13431{0xe1f28045, cc_env_sub_shade_mul__t0_mul_t1__add_shade},13432// arena, Pokemon Stadium 2. Added by Gonetz13433// (t1-0)*t0+0, (cmb-prim)*shade+shade ** INC **13434{0xe1f28430, cc__t0_mul_t1__sub_prim_mul_shade_add_shade},13435// arena, Pokemon Stadium 213436// (t1-0)*t0+0, (cmb-env)*shade+shade13437{0xe1f28450, cc__t0_mul_t1__sub_env_mul_shade_add_shade},13438// Zelda 2, [Ogy]. Added by Gonetz13439// (t1-0)*t0+0, (cmb-prim)*env+shade ** INC **13440{0xe1f28530, cc__t0_mul_t1__sub_prim_mul_env_add_shade},13441// pokemon attack, Pokemon Stadium 2. Added by Gonetz13442// (t1-0)*t0+0, (prim-env)*cmb+env13443{0xe1f2a053, cc_prim_sub_env_mul__t0_mul_t1__add_env},13444// paper mario. Added by Gonetz13445// (t1-0)*t0+0, (cmb-0)*prim+env13446{0xe1f2a3f0, cc__t0_mul_t1__mul_prim_add_env},13447// Sand, pokemon stadium 213448// (t1-0)*t0+0, (cmb-prim)*shade+env ** INC **13449{0xe1f2a430, cc__t0_mul_t1__mul_shade},13450// grass, Mission Impossible. Added by Gonetz13451// (t1-0)*t0+0, (shade-0)*cmb+013452{0xe1f2e0f4, cc__t0_mul_t1__mul_shade},13453// flag, Monako Grand Prix13454// (t1-0)*t0+013455{0xe1f2e1f2, cc_t0_mul_t1},13456// lighthouse's beam, zelda 2. Added by Gonetz13457// (t1-0)*t0+0, (cmb-0)*prim+013458{0xe1f2e3f0, cc__t0_mul_t1__mul_prim},13459// Bottom of wings, pilotwings13460// (t1-0)*t0+0, (cmb-0)*shade+013461{0xe1f2e4f0, cc__t0_mul_t1__mul_shade},13462// zelda 2. Added by Gonetz13463// (t1-0)*t0+0, (cmb-0)*prima+013464{0xe1f2eaf0, cc__t0_mul_t1__mul_prima},13465// lava, Roadsters. Added by Gonetz13466// (prim-0)*t0+0, (1-prim)*t0+cmb13467{0xe1f30136, cc_t0},13468// sky, Pokemon Stadium 2. Added by Gonetz13469// (prim-0)*t0+0, (cmb-0)*shadea+env13470{0xe1f3abf0, cc_t0_mul_prim_mul_shadea_add_env},13471// cars, Indy Racing 2000. Added by Gonetz13472// (prim-0)*t0+0, (shade-0)*cmb+013473{0xe1f3e0f4, cc_t0_mul_prim_mul_shade},13474// Sign shadows, zelda13475//z (prim-k5)*t0+cmb_a13476{0xe1f3e1f3, cc_t0_mul_prim},13477// Table, mace13478// (prim-0)*t0+0, (cmb-0)*shade+013479{0xe1f3e4f0, cc_t0_mul_prim_mul_shade},13480// Gauntlet Legends intro13481// (prim-0)*t0+0, (cmb-0)*prima+013482{0xe1f3eaf0, cc_t0_mul_prim_mul_prima},13483// walls, beetle adventure racing. Added by Gonetz13484// (shade-0)*t0+0, (prim-0)*t0+cmb13485{0xe1f401f3, cc_t0_mul_shade},13486// cars, ridge racer. Added by Gonetz13487// (shade-0)*t0+0, (prim-cmb)*cmb_a+cmb **INC**13488{0xe1f40703, cc_t0_mul_shade},13489// water block, Paper Mario. Added by Gonetz13490// (shade-0)*t0+0, (prim-env)*cmb+env13491{0xe1f4a053, cc_prim_sub_env_mul__t0_mul_shade__add_env},13492// a lot in TWINE. Added by Gonetz13493// (shade-0)*t0+0, (cmb-0)*prim+env13494{0xe1f4a3f0, cc_t0_mul_prim_mul_shade_add_env},13495// Xena. Added by Gonetz13496// (shade-0)*t0+0, (env-0)*cmb+013497{0xe1f4e0f5, cc_t0_mul_env_mul_shade},13498// Starshot logo. Added by Gonetz13499// (shade-0)*t0+0, (1-0)*cmb+013500{0xe1f4e0f6, cc_t0_mul_shade},13501// Duck Dodgers intro. Added by Gonetz13502// (shade-0)*t0+013503{0xe1f4e1f4, cc_t0_mul_shade},13504// shadow, Mission Impossible. Added by Gonetz13505// (shade-0)*t0+0, (cmb-0)*prim+013506{0xe1f4e3f0, cc_t0_mul_prim_mul_shade},13507// Tony Hawk's Pro Skater 3. Added by Gonetz13508// (env-0)*t0+0, (t1-0)*shade+cmb ** INC **13509{0xe1f504f2, cc__t0_add_t1__mul_shade},13510// text, tonic trouble. Added by Gonetz13511// (env-0)*t0+013512{0xe1f5e1f5, cc_t0_mul_env},13513// powder keg, zelda 2. Added by Gonetz13514// (env-0)*t0+0, (cmb-0)*shade+013515{0xe1f5e4f0, cc_t0_mul_env_mul_shade},13516// Buss rush13517// (1-0)*t0+0, (0-cmb)*0+cmb13518{0xe1f61f0f, cc_t0},13519// water, Starshot. Added by Gonetz13520// (1-0)*t0+0, (1-0)*cmb+013521{0xe1f6e0f6, cc_t0},13522// bomberman 64 [Ogy]13523// (1-0)*t0+013524{0xe1f6e1f6, cc_t0},13525// Mermaid attack, Mystical Ninja13526// (noise-0)*t0+013527{0xe1f7e1f7, cc_t0},13528// paper mario. Added by Gonetz * changed because of odd palette copy13529// (t0-0)*t1+0, (shade-env)*cmb+cmb **INC** ?13530{0xe2f10054, cc_shade_sub_env_mul__t0_mul_t1__add__t0_mul_t1},13531// Duck Dodgers Starring Daffy Duck text background13532// (t0-0)*t1+0, (shade-cmb)*prim+cmb13533{0xe2f10304, cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade},13534// water, PGA European Tour13535// (t0-0)*t1+0, (env-cmb)*prim+cmb13536{0xe2f10305, cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_env},13537// Grass, mario golf13538// (t0-0)*t1+0, (cmb-t0)*cmb_a+t013539{0xe2f12710, cc_t0_mul_t1},13540// xg2, Added by Gonetz13541// (t0-0)*t1+0, (env-prim)*cmb+prim13542{0xe2f16035, cc_env_sub_prim_mul__t0_mul_t1__add_prim},13543// poo, CBFD, Added by Gonetz13544// (t0-0)*t1+0, (cmb-env)*shade+prim ** INC **13545{0xe2f16450, cc__t0_mul_t1__mul_shade_add_prim},13546// the champion stage, Pokemon Stadium 213547// (t0-0)*t1+0, (cmb-0)*shade+prim13548{0xe2f164f0, cc__t0_mul_t1__mul_shade_add_prim},13549// sky, xg2, Added by Gonetz13550// (t0-0)*t1+0, (cmb-prim)*cmb_a+prim13551{0xe2f16730, cc__t0_mul_t1__sub_prim_mul__t0t1a__add_prim },13552// Sin and Punishment, [scorpiove], Added by Gonetz13553// (t0-0)*t1+0, (env-prim)*cmb_a+prim13554{0xe2f16735, cc_env_sub_prim_mul__t0t1a__add_prim},13555// cianwood gym walls, pokemon stadium 213556// (t0-0)*t1+0, (cmb-prim)*shade+shade13557{0xe2f18430, cc__t0_mul_t1__sub_prim_mul_shade_add_shade},13558// light, Ridge Racer. Added by Gonetz13559// (t0-0)*t1+0, (prim-env)*cmb+env13560{0xe2f1a053, cc_prim_sub_env_mul__t0_mul_t1__add_env},13561// Waterfall, duck dodgers. Added by Gonetz13562// (t0-0)*t1+0, (shade-env)*cmb+env13563{0xe2f1a054, cc_shade_sub_env_mul__t0_mul_t1__add_env},13564// Arena, Pokemon Stadium 2 ** INC **13565// (t0-0)*t1+0, (cmb-prim)*shade+env13566{0xe2f1a430, cc__t0_mul_t1__mul_shade_add_env},13567// bikes, xg213568// (t0-0)*t1+0, (shade-0)*cmb+013569{0xe2f1e0f4, cc__t0_mul_t1__mul_shade},13570// Sky background, xg213571// (t0-0)*t1+013572{0xe2f1e2f1, cc_t0_mul_t1},13573// statistics, Banjo 2. Added by Gonetz13574// (t0-0)*t1+0, (cmb-0)*prim+013575{0xe2f1e3f0, cc__t0_mul_t1__mul_prim},13576// the champion stage, Pokemon Stadium 213577// (t0-0)*t1+0, (cmb-prim)*shade+013578{0xe2f1e430, cc__t0_mul_t1__sub_prim_mul_shade},13579// Water, pilotwings13580// (t0-0)*t1+0, (cmb-0)*shade+013581{0xe2f1e4f0, cc__t0_mul_t1__mul_shade},13582//beetle adventure racing. A dded by Gonetz13583// (t0-0)*t1+0, (cmb-0)*env+013584{0xe2f1e5f0, cc__t0_mul_t1__mul_env},13585//fall headwaters, zelda 2. Added by Gonetz13586// (t1-0)*t1+0, (cmb-0)*shade+013587{0xe2f2e4f0, cc_t1_mul_shade},13588//text, Paper Mario13589// (prim-0)*t1+013590{0xe2f3e2f3, cc_t1_mul_prim},13591//terrain, Beetle Adventure Racing. Added by Gonetz13592// (shade-0)*t1+013593{0xe2f4e2f4, cc_t1_mul_shade},13594// Transfer pack, Pokemon Stadium 213595// (noise-0)*t1+0, (prim-env)*cmb+env13596{0xe2f7a053, cc_prim_sub_env_mul_t1_add_env},13597// lens of truth, zelda 2 [Ogy]. Added by Gonetz13598// (1-t0)*prim+013599{0xe316e316, cc_one_sub_t0_mul_prim},13600//C&C pointer13601//(shade-env)*prim+013602{0xe354e354, cc_shade_sub_env_mul_prim},13603//C&C shadows13604//(1-env)*prim+013605{0xe356e356, cc_one_sub_env_mul_prim},13606// Magnitude, pokemon stadium 213607// (t0-0)*prim+0, (t0-0)*env+cmb13608{0xe3f105f1, cc_t0_mul__prim_add_env},13609// night vision, jet force gemini13610// (t0-0)*prim+0, (noise-0)*env+cmb13611{0xe3f105f7, cc_t0_mul_prim_add_env},13612// Smoke, diddy kong racing13613// (t0-0)*prim+0, (env-cmb)*env_alpha+cmb13614{0xe3f10c05, cc__t0_mul_prim__inter_env_using_enva},13615// battle menu, Paper Mario. Added by Gonetz13616// (t0-0)*prim+0, (t0-env)*env_alpha+cmb ** INC **13617{0xe3f10c51, cc_t0_mul_prim},13618// stalactites, Beetle adventure Racing. Added by Gonetz13619// (t0-0)*prim+0, (cmb-shade)*t1_alpha+shade ** INC **13620{0xe3f18940, cc_t0_mul_prim_add_shade },13621// ? in Jabu-Jabu's belly, submitted by gokuss413622// {0xe4f1a053, (t0-0)*prim+0, (prim-env)*cmb+env13623{0xe3f1a053, cc_prim_sub_env_mul__t0_mul_prim__add_env},13624// kirby drill, kirby 64. Added by Gonetz13625// (t0-0)*prim+0, (cmb-env)*shade+env **INC**13626{0xe3f1a450, cc_t0_mul_prim_mul_shade_add_env},13627// ? sign, zelda 2. Added by Gonetz13628// (t0-0)*prim+0, (cmb-0)*cmb+0 ** INC **13629{0xe3f1e0f0, cc_t0_mul_prim},13630// vehicle, Star Wars Ep.1 Racer, [Raziel64]. Added by Gonetz13631// (t0-0)*prim+0, (shade-0)*cmb+013632{0xe3f1e0f4, cc_t0_mul_prim_mul_shade},13633// mini game, Pokemon Stadium 213634// (t0-0)*prim+0, (1-0)*cmb+013635{0xe3f1e0f6, cc_t0_mul_prim},13636// magic stuff, buck bumble. Added by Gonetz13637// (t0-0)*prim+0, (cmb-0)*prim+013638{0xe3f1e3f0, cc_t0_mul_prim_mul_prim},13639// The mario face, mario13640//z (t0-k5)*prim+cmb_a13641{0xe3f1e3f1, cc_t0_mul_prim},13642// Butterflies at Jabu-Jabu's lake, zelda13643// (t0-0)*prim+0, (cmb-0)*shade+013644{0xe3f1e4f0, cc_t0_mul_prim_mul_shade},13645// Sports shirt, Mia Soccer. Added by Gonetz13646// (t1-0)*prim+0, (1-t0)*t1+cmb **INC**13647// {0xe3f20216, cc_t0_mul_prim_add_t1},13648{0xe3f20216, cc_shirt},13649// Sprites, Ogre Battle. Added by Gonetz13650// (t1-0)*prim+013651{0xe3f2e3f2, cc_t1_mul_prim},13652// F1 World Grand Prix. Added by Gonetz13653// (t1-0)*prim+0, (cmb-0)*shade+013654{0xe3f2e4f0, cc_t1_mul_prim_mul_shade},13655// intro background, bio freaks. Added by Gonetz13656// (prim-0)*prim+013657{0xe3f3e3f3, cc_prim_mul_prim},13658// player, Ohzumou213659// (shade-0)*prim+0, (env-cmb)*t0+cmb13660{0xe3f40105, cc_env_sub_primshade_mul_t0_add_primshade},13661// floor in pyramides, beetle adventure racing.13662// (shade-0)*prim+0, (t1-0)*cmb+013663{0xe3f4e0f2, cc_t1_mul_prim_mul_shade},13664// Slingshot string, zelda13665// (shade-0)*prim+013666{0xe3f4e3f4, cc_prim_mul_shade},13667// ?13668// (shade-0)*prim+0, (cmb-0)*shade+0 ** INC **13669{0xe3f4e4f0, cc_prim_mul_shade},13670// ???, zelda13671// (env-0)*prim+0, (0-0)*0+cmb13672{0xe3f5e3f5, cc_prim_mul_env},13673// Option selection, zelda13674//z (1-0)*prim+013675{0xe3f6e3f6, cc_prim},13676// ranco monster, zelda 2. Added by Gonetz13677// (noise-0)*prim+0, (cmb-0)*prim_a+prim13678{0xe3f76af0, cc_prim_mul_prima_add_prim},13679// F-1_World_Grand_Prix_II, olivieryuyu13680// (noise-0)*prim+0, (0-cmb)*prim_a+shade13681{0xe3f78a0f, cc_shade_sub__prim_mul_prima},13682// zelda 2 [Ogy]. Added by Gonetz13683// (noise-0)*prim+013684{0xe3f7e3f7, cc_prim},13685// Road rush. Added by Gonetz13686// (0-0)*prim+0 ** INC ** ?13687{0xe3ffe3ff, cc_prim},13688// Letter to Kafei's mom, zelda 2. Added by Gonetz13689// (0-0)*prim+0, (cmb-0)*shade+013690{0xe3ffe4f0, cc_prim_mul_shade},13691// Jabu-Jabu's Belly, zelda. Added by Gonetz13692// (1-t0)*shade+0, (cmb-0)*prim+013693{0xe416e3f0, cc_one_sub_t0_mul_prim_mul_shade},13694// Arena, Pokemon Stadium 213695// (t0-prim)*shade+013696{0xe431e431, cc_t0_sub_prim_mul_shade},13697// silver cave, pokemon stadium 213698// (t0-env)*shade+0, (cmb-prim)*shade+prim13699{0xe4516430, cc__t0_sub_env_mul_shade__sub_prim_mul_shade_add_prim},13700// bomb mask, zelda 2. Added by Gonetz13701// (t0-env)*shade+0, (cmb-prim)*shade+shade ** INC **13702{0xe4518430, cc__t0_sub_env_mul_shade__sub_prim_mul_shade},13703// terrain, Top Gear Rally 2. Added by Gonetz13704// (t0-env)*shade+013705{0xe451e451, cc_t0_sub_env_mul_shade},13706// closes, Nightmire Creatures13707// (1-env)*shade+013708{0xe456e456, cc_one_sub_env_mul_shade},13709// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz13710// (t0-0)*shade+0, (cmb-cmb)*cmb+cmb13711{0xe4f10000, cc_t0_mul_shade},13712// Monster truck madness intro. Added by Gonetz13713// (t0-0)*shade+0, (1-0)*cmb+cmb ** INC **13714{0xe4f100f6, cc_t0_mul_shade},13715// terrain, SCARS. Added by Gonetz13716// (t0-0)*shade+0, (prim-cmb)*t0+cmb ** INC **13717{0xe4f10103, cc_t0_mul_shade},13718// Boomerang circle, zelda13719// (t0-0)*shade+0, (1-cmb)*t0+cmb13720{0xe4f10106, cc_t0_mul_shade},13721// THPS3.13722// (t0-0)*shade+0, (1-0)*t0+cmb13723{0xe4f101f6, cc_t0_mul_shade},13724// ???, WWF No Mercy [CpuMaster]13725// (t0-0)*shade+0, (env-cmb)*prim+cmb13726{0xe4f10305, cc_t0_mul_one_sub_prim_mul_shade_add_prim_mul_env},13727// magic bubble, zelda2. Added by Gonetz13728// (t0-0)*shade+0, (t1-0)*shade+cmb13729{0xe4f104f2, cc__t0_mul_shade__add__t1_mul_shade},13730// bike select, xg2. Added by Gonetz13731// (t0-0)*shade+0, (1-cmb)*env+cmb ** INC **13732{0xe4f10506, cc_t0_mul_shade},13733// a bugs life [Ogy]13734// (t0-0)*shade+0, (cmb-0)*env+cmb13735// {0xe4f105f0, cc_t0_mul_env_mul_shade},13736{0xe4f105f0, cc_t0_mul_shade},13737// Wall, quest6413738// (t0-0)*shade+0, (1-0)*env+cmb13739{0xe4f105f6, cc_t0_mul_shade_add_env},13740//lava, beetle adventure racing. Added by Gonetz13741// (t0-0)*shade+0, (prim-cmb)*cmb_a+cmb **INC**13742{0xe4f10703, cc_t0_mul_shade},13743// course map, Ridge Racer. Added by Gonetz13744// (t0-0)*shade+0, (prim-cmb)*prima+cmb **INC**13745{0xe4f10a03, cc_t0_mul_shade},13746// arena, custom robo. Added by Gonetz13747// (t0-0)*shade+0, (noise-cmb)*prima+cmb **INC**13748{0xe4f10a07, cc_t0_mul_shade},13749// arena, custom robo 2. Added by Gonetz13750// (t0-0)*shade+0, (0-cmb)*prima+cmb **INC**13751{0xe4f10a0f, cc_t0_mul_shade},13752//floor in a cave, Paper mario. Added by Gonetz13753// (t0-0)*shade+0, (cmb-prim)*prima+cmb **INC**13754{0xe4f10a30, cc_t0_mul_shade},13755//beetle adventure racing. Added by Gonetz13756// (t0-0)*shade+0, (t1-prim)*prima+cmb **INC**13757{0xe4f10a32, cc_t0_mul_shade},13758// Monster truck madness intro. Added by Gonetz13759// (t0-0)*shade+0, (shade-cmb)*shade_a+cmb ** INC **13760{0xe4f10b04, cc_t0_mul_shade},13761// xg2 intro. Added by Gonetz13762// (t0-0)*shade+0, (1-cmb)*shade_a+cmb ** INC **13763{0xe4f10b06, cc__t0_mul_shade__inter_one_using_shadea},13764// Link's bomb, smash bros13765// (t0-0)*shade+0, (env-cmb)*env_a+cmb ** INC **13766{0xe4f10c05, cc__t0_mul_shade__inter_env_using_enva},13767// language selection, Extreme-G XG2 (E)13768// (t0-0)*shade+0, (1-cmb)*env_a+cmb13769{0xe4f10c06, cc__t0_mul_shade__inter_one_using_enva},13770// A Bugs Life, [Raziel64]13771// (t0-0)*shade+0, (cmb-0)*k5+cmb13772{0xe4f10ff0, cc_t0_mul_shade},13773// Bass Rush13774// (t0-0)*shade+0, (cmb-0)*0+cmb13775{0xe4f11f0f, cc_t0_mul_shade},13776// car, Top Gear Rally. Added by Gonetz13777// (t0-0)*shade+0, (cmb-t0)*t0a+t0 **INC**13778{0xe4f12810, cc_t0_mul_shade},13779// logo, SCARS. Added by Gonetz13780// (t0-0)*shade+0, (cmb-t0)*shadea+t0 **INC**13781{0xe4f12b10, cc__t0_mul_shade_mul_shadea__add__t1_mul_one_sub_shadea},13782// ? sign, Spiderman. Added by Gonetz13783// (t0-0)*shade+0, (0-0)*0+t113784{0xe4f15fff, cc_t0_mul_shade},13785// Major League Baseball Featuring Ken Griffey Jr.13786// (t0-0)*shade+0, (1-0)*cmb+prim ** INC **13787{0xe4f160f6, cc_t0_mul_shade_add_prim},13788// plants, CBFD. Added by Gonetz13789// (t0-0)*shade+0, (cmb-env)*shade+prim ** INC **13790{0xe4f16450, cc_t0_sub_env_mul_shade_add_prim},13791// Kirby64. Added by Gonetz13792// (t0-0)*shade+0, (cmb-prim)*prima+prim13793{0xe4f16a30, cc_t0_mul_prima_mul_shade_add_prim_mul_one_sub_prima},13794// building shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz13795// (t0-0)*shade+0, (0-0)*0+prim13796{0xe4f17fff, cc_prim},13797// tire trace, beetle adventure racing. Added by Gonetz13798// (t0-0)*shade+0, (env-cmb)*t1+shade **INC**13799{0xe4f18205, cc_env_sub_shade_mul_t0_add_shade},13800// Gold Skulltula, zelda13801// (t0-0)*shade+0, (prim-env)*cmb+env13802{0xe4f1a053, cc_prim_sub_env_mul_t0_mul_shade_add_env},13803// {0xe4f1a053, cc_t0_mul_prim_mul_shade},13804// fighters, GASP Fighters13805// (t0-0)*shade+0, (1-env)*cmb+env13806{0xe4f1a056, cc_t0_mul_one_sub_env_mul_shade_add_env},13807// Brian, quest6413808// (t0-0)*shade+0, (cmb-0)*prim+env13809{0xe4f1a3f0, cc_t0_mul_prim_mul_shade_add_env},13810// Objects in arena, pokemon stadium 213811// (t0-0)*shade+013812// (cmb-prim)*shade+env13813{0xe4f1a430, cc_t0_mul_shade},13814// Monster truck madness intro. Added by Gonetz13815// (t0-0)*shade+0, (cmb-env)*shadea+env **INC**13816// {0xe4f1ab50, cc_t0_mul_shade_add_env},13817{0xe4f1ab50, cc__t0_mul_shade__sub_env_mul_shadea_add_env},13818// Taz express. Added by Gonetz13819// (t0-0)*shade+0, (cmb-env)*enva+env **INC**13820{0xe4f1ac50, cc_t0_mul_shade_add_env},13821// sky in doom. Added by Gonetz13822// (t0-0)*shade+0, (cmb-0)*primlod+env **INC**13823{0xe4f1aef0, cc_t0_mul_shade_add_env},13824// fighters, GASP Fighters13825// (t0-0)*shade+0, (1-env)*cmb+013826{0xe4f1e056, cc_t0_mul_one_sub_env_mul_shade},13827// walls, beetle adventure racing. Added by Gonetz13828// (t0-0)*shade+0, (t0-0)*cmb+0 **INC**13829{0xe4f1e0f1, cc_t0_mul_shade},13830// Link's face, zelda13831//z (t0-k5)*shade+cmb_a, (prim-k5)*cmb+cmb_a13832{0xe4f1e0f3, cc_t0_mul_prim_mul_shade},13833// Link's suit, zelda13834//z (t0-k5)*shade+cmb_a, (env-k5)*cmb+cmb_a13835{0xe4f1e0f5, cc_t0_mul_env_mul_shade},13836// Window, starfox13837//z (t0-k5)*shade+cmb_a, (cmb-k5)*prim+cmb_a13838{0xe4f1e3f0, cc_t0_mul_prim_mul_shade},13839// crystal, Doraemon 213840//(t0-0)*shade+0, (t0-0)*prim+013841{0xe4f1e3f1, cc_t0_mul_prim},13842// Characters, mace13843// (t0-0)*shade+0, (cmb-0)*shade+013844{0xe4f1e4f0, cc_t0_mul_shade},13845// Super Mario 64 logo13846//z (t0-k5)*shade+cmb_a13847{0xe4f1e4f1, cc_t0_mul_shade},13848// Kokiri's hat, zelda13849// (t0-0)*shade+0, (cmb-0)*env+013850{0xe4f1e5f0, cc_t0_mul_env_mul_shade},13851// Gauntlet Legends intro13852// (t0-0)*shade+0, (cmb-0)*scale+013853{0xe4f1e6f0, cc_t0_mul_scale_mul_shade},13854// Something on a tree, Paper Mario. Added by Gonetz13855// (t0-0)*shade+0, (cmb-0)*prima+013856{0xe4f1eaf0, cc_t0_mul_prima_mul_shade},13857// Course map, Ridge Racer. Added by Gonetz13858// (t0-0)*shade+0, (cmb-0)*shadea+013859{0xe4f1ebf0, cc_t0_mul_shade_mul_shadea},13860// Dodongo skull's eyes, zelda13861// (t0-0)*shade+0, (cmb-0)*env_alpha+013862{0xe4f1ecf0, cc_t0_mul_enva_mul_shade},13863// lava, beetle adventure racing. Added by Gonetz13864// (t1-0)*shade+0, (cmb-prim)*cmb_a+prim **INC**13865{0xe4f26730, cc_prim_inter_t1_mul_shade_using_texa},13866// headlight, beetle adventure racing. Added by Gonetz13867// (t1-0)*shade+0, (env-cmb)*t0+shade **INC**13868{0xe4f28105, cc_one_sub__t0_mul_t1__mul_shade},13869// bubble, Banjo-Kazooie. Added by Gonetz13870// (t1-0)*shade+013871{0xe4f2e4f2, cc_t1_mul_shade},13872// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz13873// (prim-0)*shade+0, (cmb-cmb)*cmb+cmb13874{0xe4f30000, cc_prim_mul_shade},13875// lamp shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz13876// (prim-0)*shade+0, (cmb-cmb)*t0+cmb13877{0xe4f30100, cc_prim_mul_shade},13878// Yoshi, mario golf13879// (prim-0)*shade+0, (env-cmb)*t0+cmb13880{0xe4f30105, cc_env_sub_primshade_mul_t0_add_primshade},13881//Spacestation Silicon Valley intro. Added by Gonetz13882// (prim-0)*shade+0, (env-cmb)*t1+cmb13883{0xe4f30205, cc_env_sub_primshade_mul_t1_add_primshade},13884// Tip of brian's hair, quest6413885// (prim-0)*shade+0, (1-0)*env+cmb13886{0xe4f305f6, cc_prim_mul_shade_add_env},13887// V8-2 menu13888// (prim-0)*shade+0, (env-cmb)*cmb_a+cmb13889{0xe4f30705, cc__prim_mul_shade__inter_env_using__prim_mul_shade_alpha},13890// Background circle, xg213891// (prim-0)*shade+0, (1-cmb)*shade_a+cmb13892{0xe4f30b06, cc_prim_mul_shade},13893// circle, waverace. Added by Gonetz13894// (prim-0)*shade+0, (t0-cmb)*enva+cmb13895{0xe4f30c01, cc_t0_sub__prim_mul_shade__mul_enva_add__prim_mul_shade},13896// enemy hit, Glover213897// (prim-0)*shade+0, (env-cmb)*enva+cmb13898{0xe4f30c05, cc__prim_mul_shade__inter_env_using_enva},13899// player, super bowling13900// (prim-0)*shade+0, (0-0)*k5+cmb13901{0xe4f30fff, cc_prim_mul_shade},13902//Lure, bass rush13903// (prim-0)*shade+0, (0-cmb)*0+cmb13904{0xe4f31f0f, cc_prim_mul_shade},13905// walls, beetle adventure racing. Added by Gonetz13906// (prim-0)*shade+0, (cmb-shade)*t1+shade **INC**13907{0xe4f38240, cc__one_inter_prim_using_t1__mul_shade},13908// GASP fighters13909//(prim-0)*shade+0, (1-env)*cmb+013910{0xe4f3e056, cc_prim_mul_one_sub_env_mul_shade},13911// Flag, mario kart13912//z (prim-k5)*shade+cmb_a13913{0xe4f3e4f3, cc_prim_mul_shade},13914// Characters, smash bros13915// (prim-0)*shade+0, (cmb-0)*env+013916{0xe4f3e5f0, cc_prim_mul_env_mul_shade},13917// N64 logo, ridge race. Added by Gonetz13918// (shade-0)*shade+0, (prim-cmb)*prima+cmb **INC**13919{0xe4f40a03, cc_shade},13920// fighter, shield mode, bio freaks. Added by Gonetz13921// (shade-0)*shade+013922{0xe4f4e4f4, cc_shade},13923// truck crush, Monster truck madness. Added by Gonetz13924// (env-0)*shade+0, (env-0)*shade+cmb13925{0xe4f504f5, cc_env_mul_shade},13926// Course map, Ridge Racer. Added by Gonetz13927// (env-0)*shade+013928{0xe4f5e4f5, cc_env_mul_shade},13929// lava, beetle adventure racing13930// (1-0)*shade+0, (prim-cmb)*cmb_a+cmb13931{0xe4f60703, cc_prim_sub_shade_mul_shadea_add_shade},13932// the wings in the song of soaring cut-scene, zelda2 [Ogy]. Added by Gonetz13933// (1-0)*shade+0, (prim-0)*cmb+013934{0xe4f6e0f3, cc_prim_mul_shade},13935// parts of vehicle, Star Wars Ep.I Racer. Added by Gonetz13936// (1-0)*shade+0, (cmb-0)*prim+013937{0xe4f6e3f0, cc_prim_mul_shade},13938// Snowflakes???, mario kart. Boxer shadow (fb effect}, Knockout Kings 200013939// (1-0)*shade+0, (1-0)*shade+013940{0xe4f6e4f6, cc_one_mul_shade},13941// ???13942// (noise-0)*shade+013943{0xe4f7e4f7, cc_shade},13944// quest64 [Ogy]13945// (prim-t0)*env+0, (0-0)*0+prim13946{0xe5137fff, cc_prim},13947// field, Mike Piazza's Strike Zone13948// (t0-prim)*env+0 ** INC **13949{0xe531e531, cc_t0_mul_env},13950// Mike Piazza's Strike Zone13951// (shade-prim)*env+013952{0xe534e534, cc_shade_sub_prim_mul_env},13953// rope, CBFD. Added by Gonetz13954// (t0-0)*env+0, (1-env)*prim+cmb13955{0xe5f10356, cc_one_sub_env_mul_prim_add__t0_mul_env},13956// Bell, Pokemon Stadium 2. Added by Gonetz13957// (t0-0)*env+0, (shade-0)*prim+cmb13958{0xe5f103f4, cc_t0_mul_env_add_prim_mul_shade},13959// aerofighter's assault [Ogy]13960// (t0-0)*env+0, (1-t0)*shade+cmb13961{0xe5f10416, cc_t0_mul_env_add_1mt0_mul_shade},13962// foto, Armorines - Project S.W.A.R.M. Added by Gonetz13963// (t0-0)*env+0, (noise-0)*scale+cmb13964{0xe5f106f7, cc_t0_mul_env},13965// Extreme G2, score. Added by Gonetz13966// (t0-0)*env+0, (1-cmb)*enva+cmb ** INC **13967{0xe5f10c06, cc_t0_mul_env},13968// many objects in Tonic Trouble13969// (t0-0)*env+0, (shade-0)*cmb+013970{0xe5f1e0f4, cc_t0_mul_env_mul_shade},13971// Flying skull's eyes, zelda13972// (t0-0)*env+0, (cmb-0)*prim+013973{0xe5f1e3f0, cc_t0_mul_prim_mul_env},13974// Rock spell, quest6413975// (t0-0)*env+0, (cmb-0)*shade+013976{0xe5f1e4f0, cc_t0_mul_env_mul_shade},13977// Text, mario13978//z (t0-k5)*env+cmb_a13979{0xe5f1e5f1, cc_t0_mul_env},13980// kirby 64. Added by Gonetz13981// (prim-0)*env+0, (cmb-0)*shade+013982{0xe5f3e4f0, cc_prim_mul_env_mul_shade},13983// wings, kirby 64. Added by Gonetz13984// (prim-0)*env+013985{0xe5f3e5f3, cc_prim_mul_env},13986// Text, xg213987// (shade-0)*env+0, (1-cmb)*env_a+cmb13988{0xe5f40c06, cc_env_mul_shade},13989// Text box, mario13990//z (shade-k5)*env+cmb_a13991{0xe5f4e5f4, cc_env_mul_shade},13992// bomberman 64 [Ogy]13993// (1-0)*env+013994{0xe5f6e5f6, cc_env},13995// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz13996// (1-t0)*scale+013997{0xe616e616, cc_zero},13998// Gauntlet Legends intro. Added by Gonetz13999// (t0-0)*scale+0, (cmb-0)*shade+014000{0xe6f1e4f0, cc_t0_mul_scale_mul_shade},14001// shadows, Taz express. Added by Gonetz14002// (t0-0)*scale+014003{0xe6f1e6f1, cc_t0_mul_scale},14004// shadows, Knockout Kings 2000. Added by Gonetz14005// (shade-0)*scale+014006{0xe6f4e6f4, cc_scale_mul_shade},14007// bomberman 64 2 [Ogy]. Added by Gonetz14008// (1-0)*scale+014009{0xe6f6e6f6, cc_scale},14010// walls, beetle adventure racing. Added by Gonetz14011// (t1-0)*t0_a+0, (1-t1)*cmb+t1 **INC**14012{0xe8f24026, cc_t1},14013// house on rancho, zelda2. Added by Gonetz14014// (t1-0)*t0_a+0, (cmb-0)*prim+014015{0xe8f2e3f0, cc__t0a_mul_t1__mul_prim},14016// zelda2 [Ogy]. Added by Gonetz14017// (t1-0)*t0_a+0, (cmb-0)*shade+014018{0xe8f2e4f0, cc__t0a_mul_t1__mul_shade},14019// mini quiz, Pokemon Stadium 214020// (prim-0)*t0_a+0, (cmb-t1)*primlod+t1 ** INC **14021{0xe8f34e20, cc_t0},14022// Major League Baseball Featuring Ken Griffey Jr.14023// (prim-0)*t0_a+014024{0xe8f3e8f3, cc_t0a_mul_prim},14025// Top Gear Hyper-Bike14026// (1-0)*t0_a+014027{0xe8f6e8f6, cc_t0a},14028// waterfall, Dobutsu_no_Mori14029// (t0-0)*t1_a+0, (prim-env)*cmb+env14030{0xe9f1a053, cc_prim_sub_env_mul__t0_mul_t1a__add_env},14031// logo, Deadly Arts. Added by Gonetz14032// (t0-0)*t1_a+0, (cmb-0)*shade+014033{0xe9f1e4f0, cc__t0_mul_t1a__mul_shade},14034// car, Roadsters. Added by Gonetz14035// (prim-t0)*prim_a+0, (prim-cmb)*shade+0 ** INC **14036{0xea13e403, cc_prim_sub__prim_sub_t0_mul_prima__mul_shade},14037// arena, Pokemon Stadium 2. Added by Gonetz14038// (1-t0)*prim_a+0, (0-prim)*cmb+prim ** INC **14039{0xea16603f, cc_t0_mul_prim},14040// V8-214041// (1-prim)*prim_a+014042{0xea36ea36, cc_one_sub_prim_mul_prima},14043// match start, Mario Tennis. Added by Gonetz14044// (t0-0)*prim_a+0, (1-t0)*cmb+t0 ** INC **14045{0xeaf12016, cc_one_sub_t0_mul_prima_add_t0},14046// blast corps [Ogy]14047// (t0-0)*prim_a+014048{0xeaf1eaf1, cc_t0_mul_prima},14049// final battle, CBFD. Added by Gonetz14050// (prim-0)*prim_a+014051{0xeaf3eaf3, cc_prim_mul_prima},14052// flower's stalk, Paper Mario. Added by Gonetz14053// (shade-0)*prim_a+014054{0xeaf4eaf4, cc_shade_mul_prima},14055// blast corps [Ogy]14056// (noise-0)*prim_a+0, (t1-0)*shade+cmb ** INC **14057{0xeaf704f2, cc_t0_mul_shade_add_prima},14058// F1 World Grand Prix. Added by Gonetz14059// (noise-0)*prim_a+0, (t1-0)*env_a+cmb ** INC **14060{0xeaf70cf2, cc_t1_mul_enva},14061// shadows, killer instinct gold14062// (0-0)*prim_a+014063{0xeaffeaff, cc_zero},14064// background, killer instinct gold14065// (t0-prim)*shade_a+014066{0xeb31eb31, cc_t0_sub_prim_mul_shadea},14067// ground, C&C14068// (t0-shade)*shade_a+014069{0xeb41eb41, cc_t0_sub_shade_mul_shadea},14070// Wreslters, WWF No Mercy, [CpUMasteR]14071// (t0-0)*shade_alpha+0, (env-cmb)*prim+cmb14072{0xebf10305, cc_t0_mul_one_sub_prim_mul_shadea_add_prim_mul_env},14073// map, Pilot wings. Added by Gonetz14074// (t0-0)*shade_alpha+0, (1-cmb)*shade+cmb14075{0xebf10406, cc_one_sub_shade_mul__t0_mul_shadea__add_shade},14076// Indy Racing 2000. Added by Gonetz14077// (t0-0)*shade_alpha+0, (1-0)*shade+cmb14078{0xebf104f6, cc_t0_mul_shadea_add_shade},14079// logo, WCW-nWo Revenge14080// (t0-0)*shade_alpha+0, (cmb-0)*prim+014081{0xebf1e3f0, cc_t0_mul_prim_mul_shadea},14082// sky, pilot wings14083// (t0-0)*shade_alpha+0, (1-cmb)*shade+014084{0xebf1e406, cc_one_sub__t0_mul_shadea__mul_shade},14085// Wrestlers in Game, WWF No mercy [CpUMasteR]14086// (t0-0)*shade_alpha+014087{0xebf1ebf1, cc_t0_mul_shadea},14088// flag, top gear overdrive14089// (prim-0)*shade_alpha+014090{0xebf3ebf3, cc_prim_mul_shadea},14091// Ropes, WWF games14092// (shade-0)*shade_alpha+0, (env-cmb)*prim+cmb14093{0xebf40305, cc_shade_mul_shadea},14094// Ropes, WWF games14095// (shade-0)*shade_alpha+014096{0xebf4ebf4, cc_shade_mul_shadea},14097// arena, custom robo 214098// (noise-0)*shade_alpha+014099{0xebf7ebf7, cc_shadea},14100// Baton Pass attack, Pokemon Stadium 214101// (t0-env)*enva+0, (shade-0)*prim+cmb14102{0xec5103f4, cc__t0_sub_env_mul_enva__add_prim_mul_shade},14103// Bell, Pokemon Stadium 2. Added by Gonetz14104// (t0-0)*enva+0, (shade-0)*prim+cmb14105{0xecf103f4, cc_t0_mul_enva_add_prim_mul_shade},14106// blastcorps, unimp log. Added by Gonetz14107// (t0-0)*enva+014108{0xecf1ecf1, cc_t0_mul_enva},14109// car, Top Gear Rally. Added by Gonetz14110// (env-0)*enva+014111{0xecf5ecf5, cc_env_mul_enva},14112// Sand attack, pokemon Stadium (J)14113// (noise-0)*enva+0, (prim-env)*cmb+env14114{0xecf7a053, cc_prim_sub_env_mul_enva_add_env},14115// Walls of well through lens of truth, zelda14116// (prim-t0)*primlod+0 ** INC **14117{0xee13ee13, cc_t0}, // JUST t0 b/c the other combiner handles the subtraction14118// Pokemon attack, Pokemon Stadium 214119// (noise-t0)*primlod+0, (1-env)*cmb+env ** INC **14120{0xee17a056, cc_env_inter_one_using__one_sub_t0_mul_primlod},14121// barrage attack, Pokemon Stadium 214122// (t0-0)*primlod+0, (prim-0)*shade+cmb14123{0xeef104f3, cc__t0_mul_primlod__add__prim_mul_shade},14124// something on a flor in stone temple, zelda 2. Added by Gonetz14125// (t0-0)*primlod+0, (cmb-0)*prim+014126{0xeef1e3f0, cc_t0_mul_primlod_mul_prim},14127// entrance to oceanside spider house, zelda 2. Added by Gonetz14128// (t0-0)*primlod+0, (cmb-0)*shade+014129{0xeef1e4f0, cc_t0_mul_primlod_mul_shade},14130// Haze/(all powder status changers}, Pokemon Stadium 2 [gokuss4]. Added by Gonetz14131// (noise-0)*primlod+0, (prim-env)*cmb+env ** INC **14132{0xeef7a053, cc_prim_sub_env_mul_primlod_add_env},14133// pokemon attack, Pokemon Stadium 2. Added by Gonetz14134// (noise-0)*primlod+0, (prim-cmb)*cmb+0 ** INC **14135{0xeef7e003, cc_zero},14136// Night trees, Monster truck madness. Added by Gonetz14137// (t0-0)*k5+014138{0xeff1eff1, cc_t0_mul_k5},14139// submitted by gokuss414140// (0-0)*0+0, (0-0)*0+prim14141{0xfffd5fe6, cc_prim},14142// intro, Bettle Adventure Racing, [Raziel64]14143// (0-0)*0+0, (0-0)*0+t014144{0xffff3fff, cc_t0},14145// Conker's face, CBFD14146// (0-0)*0+0, (shade-env)*k5+prim14147{0xffff6f54, cc_shade_sub_env_mul_k5_add_prim},14148// Boost, Beetle Adventure Racing. Added by Gonetz14149// (0-0)*0+0, (0-0)*0+prim14150{0xffff7fff, cc_prim},14151// headlight, beetle adventure racing. Added by Gonetz14152// (0-0)*0+0, (0-0)*0+shade14153{0xffff9fff, cc_shade},14154// intro, Bettle Adventure Racing, [Raziel64]14155// (0-0)*0+0, (shade-env)*t1+env14156{0xffffa254, cc_shade_sub_env_mul_t1_add_env},14157// Fly Swooping in, Pokemon Stadium 2 [gokuss4]. Added by Gonetz14158// (0-0)*0+0, (1-env)*cmb_a+env14159{0xffffa756, cc_env},14160// Waterfall, Donkey Kong 6414161// (0-0)*0+0, (t0-0)*t1+014162{0xffffe1f2, cc_t0_mul_t1},14163// Screen clear, banjo kazooie14164// (0-0)*0+014165{0xffffffff, cc_zero},14166// { #CCEND }14167};1416814169static COMBINER alpha_cmb_list[] = {14170// { #ACSTART }14171//Tony Hawk's Pro Skater. Added by Gonetz14172// (0-0)*0+014173{0x01ff01ff, ac_zero},14174//terminal, Spacestation Silicon Valley. Added by Gonetz14175// (0-0)*0+0, (0-0)*0+prim14176{0x01ff07ff, ac_prim},14177// kirby drill, kirby 64. Added by Gonetz14178// (0-0)*0+cmb, (0-0)*0+114179{0x01ff0dff, ac_one},14180//chip in Spacestation Silicon Valley intro. Added by Gonetz14181// (0-0)*0+cmb, (prim-0)*shade+014182{0x01ff0f3b, ac_prim_mul_shade},14183//Goldeneye, [Jeremy]. Added by Gonetz14184// (t0-t0)*lodf+t0, (cmb-0)*prim+014185{0x02090ef8, ac_t0_mul_prim},14186// Indy Racing 2000. Added by Gonetz14187// (t1-t0)*lodf+t0, (env-cmb)*prim+cmb ** INC **14188{0x020a00c5, ac_t0_inter_t1_using_primlod},14189// water, Spacestation Silicon Valley. Added by Gonetz14190// (t1-t0)*lodf+t0, (0-shade)*0+cmb14191{0x020a01e7, ac_t0_inter_t1_using_primlod},14192// Bridge, sf rush14193//z (t1-t0)*lodf+t014194{0x020a020a, ac_t0_inter_t1_using_primlod},14195// explosion, body harvest. Added by Gonetz14196//(t1-t0)*lodf+t0, (0-0)*0+t014197{0x020a03ff, ac_t0},14198// cars, PD intro. Added by Gonetz14199// (t1-t0)*lodf+t0, (cmb-0)*shade+prim14200{0x020a0738, ac__t0_inter_t1_using_primlod__mul_shade_add_prim},14201// Rocket Robot in Wheels intro14202//(t1-t0)*lodf+t0, (0-0)*0+prim14203{0x020a07ff, ac_prim},14204// Iguana background ground, turok14205// (t1-t0)*lodf+t0, (0-0)*0+shade14206{0x020a09ff, ac_shade},14207// Ground, monster truck madness14208// (t1-t0)*lodf+t0, (0-0)*0+env14209{0x020a0bff, ac_env},14210// Taz express. Added by Gonetz14211// (t1-t0)*lodf+t0, (0-0)*0+114212{0x020a0dff, ac_one},14213// Mike Piazza's Strike Zone14214// (t1-t0)*lodf+t0, (cmb-0)*t0+014215{0x020a0e78, ac_t0_inter_t1_using_primlod},14216// N64 logo, tetrisphere. Added by Gonetz14217// (t1-t0)*lodf+t0, (cmb-0)*prim+014218{0x020a0ef8, ac__t0_inter_t1_using_primlod__mul_prim},14219// Ground, mace14220// (t1-t0)*lodf+t0, (cmb-0)*shade+014221// {0x020a0f38, ac_t0_mul_shade},14222{0x020a0f38, ac__t0_inter_t1_using_primlod__mul_shade},14223// blast corps [Ogy]14224// (t1-t0)*lodf+t0, (cmb-0)*env+014225{0x020a0f78, ac__t0_inter_t1_using_primlod__mul_env},14226// blast corps [Ogy]14227// (t1-t0)*lodf+t0, (t0-0)*env+014228{0x020a0f79, ac_t0_mul_env},14229// blast corps. Added by Gonetz14230// (t1-t0)*lodf+t0, (shade-0)*env+014231{0x020a0f7c, ac_env_mul_shade},14232// field, Mike Piazza's Strike Zone14233// (t1-t0)*lodf+t0, (0-0)*0+014234{0x020a0fff, ac_t0_inter_t1_using_primlod},14235// blast corps, unimp log. Added by Gonetz14236// (t1-t0)*t0+t014237{0x024a024a, ac_t0_inter_t1_using_t0a},14238// zelda 2 [Ogy]. Added by Gonetz14239// (t1-t0)*t0+t0, (cmb-0)*prim+0 **INC**14240{0x024a0ef8, ac__t0_inter_t1_using_t0a__mul_prim},14241// text in a menu, Twisted_Edge_Extreme_Snowboarding [Razeil64]. Added by Gonetz14242// (prim-t0)*t0+t0 **INC**14243{0x024b024b, ac_t0},14244// enemy's shot, battle tanks 214245// (env-prim)*t0+t0 **INC**14246{0x025d025d, ac_t0},14247//Bowser in final battle, Paper Mario. Added by Gonetz14248// (t1-env)*t0+t0, (cmb-env)*prim+0 ** INC **14249{0x026a0ee8, ac__t0_mul_t1__mul_prim},14250// paper mario. Added by Gonetz14251// (t1-env)*t0+t0, (cmb-0)*prim+0 ** INC **14252{0x026a0ef8, ac__t0_mul_t1__mul_prim},14253// V8-214254// (prim-0)*t0+t014255{0x027b027b, ac_t0_mul_prim_add_t0},14256// THPS3. Added by Gonetz14257// (0-0)*t0+t014258{0x027f027f, ac_t0},14259// zelda 2. Added by Gonetz14260// (0-0)*t0+t0, (cmb-0)*prim+014261{0x027f0ef8, ac_t0_mul_prim},14262// Spider Web attack, Pokemon Stadium 2.14263// (t1-t0)*t1+t0, (cmb-0)*prim+cmb14264{0x028a00f8, ac__t0_inter_t1_using_t1a__mul_prim_add__t0_inter_t1_using_t1a},14265// teleportation, Spacestation Silicon Valley. Added by Gonetz14266// (t1-t0)*t1+t014267{0x028a028a, ac_t0_inter_t1_using_t1a},14268// mega shock, paper mario. Added by Gonetz14269// (t1-t0)*t1+t0, (cmb-0)*prim+014270{0x028a0ef8, ac__t0_inter_t1_using_t1a__mul_prim},14271// mini game, Pokemon Stadium 214272// (t1-t0)*t1+t0, (cmb-0)*shade+014273{0x028a0f38, ac__t0_inter_t1_using_t1a__mul_shade},14274// Magnitude, pokemon stadium 214275// (shade-t0)*t1+t0, (cmb-0)*shade+env14276{0x028c0b38, ac__t0_mul_t1__mul_shade},14277// paper mario. Added by Gonetz14278// (1-t0)*t1+t0, (t1-0)*prim+0 ** INC **14279{0x028e0efa, ac__one_sub_t0_mul_t1_add_t0__mul_prim},14280// {0x028e0efa, ac_t1_mul_prim},14281// Spider Web attack, Pokemon Stadium 2.14282// (1-t0)*t1+t0, (cmb-0)*shade+0 ** INC **14283{0x028e0f38, ac__one_sub_t0_mul_t1_add_t0__mul_prim},14284// paper mario. Added by Gonetz14285// (t1-env)*t1+t0, (cmb-0)*shade+014286{0x02aa0f38, ac__t0_inter_t1_using_enva__mul_shade},14287// Scary dead boss thing, zelda14288// (env-1)*t1+t0, (cmb-0)*prim+0 * MAY need t1_inter_t0 instead...14289{0x02b50ef8, ac__env_sub_one_mul_t1_add_t0__mul_prim},14290// first screen, castlevania. Added by Gonetz14291// (env-0)*t1+t0 **INC**14292{0x02bd02bd, ac_t0},14293// enemy's shot, battle tanks 2 [Flash]14294// (1-0)*t1+t0, (0-0)*0+env14295{0x02be0bff, ac_env},14296// battle tanks 2 [Ogy]14297// (1-0)*t1+t0, (0-0)*0+114298{0x02be0dff, ac_one},14299// menu screen, Rayman2. Added by Gonetz14300// (1-0)*t1+t0, (cmb-0)*shade+014301{0x02be0f38, ac__t0_add_t1__mul_shade},14302// Sky, zelda14303//z (t1-t0)*prim+t014304{0x02ca02ca, ac_t0_inter_t1_using_prima},14305// F1 World Grand Prix. Added by Gonetz14306// (t1-t0)*prim+t0, (0-0)*0+114307{0x02ca0dff, ac_t0_inter_t1_using_prima},14308// logo, PD. Added by Gonetz14309// (t1-t0)*prim+t0, (cmb-0)*shade+014310{0x02ca0f38, ac__t0_inter_t1_using_prima__mul_shade},14311// battle tanks [Ogy]14312// (t1-t0)*prim+t0, (cmb-0)*env+014313{0x02ca0f78, ac__t0_inter_t1_using_prima__mul_env},14314// logo, Deadly Arts. Added by Gonetz14315// (env-t0)*prim+t014316{0x02cd02cd, ac_one_sub_prim_mul_t0_add__prim_mul_env},14317// intro, castlevania 2. Added by Gonetz14318// (1-t0)*prim+t014319{0x02ce02ce, ac_one_sub_t0_mul_prim_add_t0},14320// intro, diddy kong racing. Added by Gonetz14321// (1-t0)*prim+t0, (cmb-0)*shade+0 **INC**14322{0x02ce0f38, ac_t0_mul_shade},14323// submitted by Scorpiove, mario party 114324// (0-t0)*prim+t014325{0x02cf02cf, ac_one_sub_prim_mul_t0},14326// Pokemon attack, pokemon Stadium (J)14327// (t1-t1)*prim+t0, (prim-0)*lod_f+env **INC**14328{0x02d20a3b, ac_env},14329// Ground, pokemon stadium 214330// (t0-0)*prim+t014331{0x02f902f9, ac_t0_mul_prim},14332// GASP Fighters14333// (t1-0)*prim+t0, ** INC **14334{0x02fa02fa, ac_t1_mul_prim_add_t0},14335// foresight attack, Pokemon Stadium 214336// (t1-0)*prim+t0, (cmb-env)*shade+014337{0x02fa0f28, ac__t1_mul_prima_add_t0__sub_env_mul_shade},14338// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz14339// (t1-0)*prim+t0, (cmb-0)*shade+014340{0x02fa0f38, ac__t1_mul_prima_add_t0__mul_shade},14341// Paper Mario, fortune teller14342// (t1-0)*prim+t0, (cmb-0)*env+014343{0x02fa0f78, ac__t1_mul_prima_add_t0__mul_env},14344// Hydro Pump Attack, Pokemon Stadium.14345// (shade-0)*prim+t0, (cmb-0)*shade+014346{0x02fc0f38, ac__t0_add_prim_mul_shade__mul_shade},14347// map, Ogre Battle 64. Added by Gonetz14348// (1-0)*prim+t014349{0x02fe02fe, ac_t0_add_prim},14350// borders, Tony Hawk's Pro Skater 2. Added by Gonetz14351// (t1-t0)*shade+t0 ** INC **14352{0x030a030a, ac_t0_inter_t1_using_shadea},14353// Mickey USA14354// (t1-t0)*shade+t0, (cmb-0)*prim+0 ** INC **14355{0x030a0ef8, ac__t0_inter_t1_using_shadea__mul_prim},14356// Rocket Robot in Wheels intro14357// (t1-t0)*shade+t0, (cmb-0)*env+0 ** INC **14358{0x030a0f78, ac__t0_inter_t1_using_shadea__mul_env},14359// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz14360// (1-t0)*shade+t0, (cmb-0)*shade+0 ** INC **14361{0x030e0f38, ac_t0_mul_shade},14362// sky, f-zero x14363// (0-t0)*shade+t014364{0x030f030f, ac_one_sub_shade_mul_t0},14365// Deku tree from kokiri villiage, zelda14366//z (t1-t0)*env+t0, (t1-0)*primlod+cmb14367{0x034a01ba, ac_t0_inter_t1_using_enva},14368// Hearts, zelda14369//z (t1-t0)*env+t014370{0x034a034a, ac_t0_inter_t1_using_enva},14371// Faries, zelda14372//z (t1-t0)*env+t0, (cmb-0)*prim+014373{0x034a0ef8, ac__t0_inter_t1_using_enva__mul_prim},14374// zelda, waterfall. Added by Gonetz14375//z (t1-t0)*env+t0, (cmb-0)*shade+014376{0x034a0f38, ac__t0_inter_t1_using_enva__mul_shade},14377// pokemon stadium 1. Added by Gonetz14378//(t1-t0)*env+t0, (cmb-0)*primlod+014379{0x034a0fb8, ac__t0_inter_t1_using_enva__mul_primlod},14380// fruits, Yoshi Story. Added by Gonetz14381//(prim-t0)*env+t014382{0x034b034b, ac_prim_sub_t0_mul_env_add_t0},14383// window, Rayman2. Added by Gonetz14384//(1-t0)*env+t014385{0x034e034e, ac_one_sub_t0_mul_env_add_t0},14386// menu, PokemonStadium1, [Raziel64]14387//(1-t0)*env+t0, (cmb-0)*shade+0 ** INC **14388{0x034e0f38, ac_t0_mul_shade},14389// Ganon's sword swinging, zelda14390// (t0-t1)*env+t0, (cmb-0)*prim+0 ** INC **14391{0x03510ef8, ac__t0_sub_t1_mul_enva_add_t0__mul_prim},14392// Lave piranha atack, Paper Mario14393// (t1-prim)*env+t0, (0-cmb)*t1+0 ** INC **14394{0x035a0e87, ac_t0_mul_t1},14395// Reflected fire at kotake & koume's, zelda14396// (t0-1)*env+t0, (cmb-0)*prim+0 ** INC **14397{0x03710ef8, ac__t0_sub_one_mul_enva_add_t0__mul_prim},14398// thing that escapes from the well, zelda14399// (t1-1)*env+t0 ** INC **14400{0x03720372, ac_t1_sub_one_mul_enva_add_t0},14401// Sword charge, zelda14402// (t1-1)*env+t0, (cmb-0)*prim+014403{0x03720ef8, ac__t1_sub_one_mul_enva_add_t0__mul_prim},14404// Gannon hitting the ground, zelda14405// (t1-1)*env+t0, (cmb-0)*shade+0 ** INC **14406{0x03720f38, ac__t1_sub_one_mul_enva_add_t0__mul_shade},14407// Tony Hawk's Pro Skater 3. Added by Gonetz14408// (t0-0)*env+t014409{0x03790379, ac_t0_mul_env},14410// paper mario. Added by Gonetz14411// (t0-0)*env+t0, (cmb-0)*prim+014412{0x03790ef8, ac_t0_mul_prim},14413// pads, Pokemon Stadium 2. Added by Gonetz14414// (t1-0)*env+t0, (cmb-0)*prim+env ** INC **14415{0x037a0af8, ac__t0_inter_t1_using_enva__mul_prim_add_env},14416// attack, Pokemon Stadium 214417// (t1-0)*env+t0, (cmb-t0)*prim+0 ** INC **14418{0x037a0ec8, ac__t1_mul_enva_add_t0__mul_prim},14419// Ice arrow gfx, zelda14420// (t1-0)*env+t0, (cmb-0)*prim+014421{0x037a0ef8, ac__t1_mul_enva_add_t0__mul_prim},14422// Scary face move, pokemon stadium 214423// (t1-0)*env+t0, (cmb-prim)*shade+014424{0x037a0f18, ac__t1_mul_enva_add_t0__sub_prim_mul_shade},14425// Saria's song, zelda14426// (t1-0)*env+t0, (cmb-0)*shade+014427{0x037a0f38, ac__t1_mul_enva_add_t0__mul_shade},14428// eye drops bottle, zelda14429// (t0-t0)*prim_lodfrac+t014430{0x03890389, ac_t0},14431// lighthouse's beam, zelda 2. Added by Gonetz14432// (t0-t0)*prim_lodfrac+t0, (cmb-0)*prim+014433{0x03890ef8, ac_t0_mul_prim},14434// zelda 2. Added by Gonetz14435// (t1-t0)*primlod+t0, (cmb-0)*env+cmb ** INC **14436{0x038a0178, ac__t0_inter_t1_using_primlod__mul_env_add__t0_inter_t1_using_primlod},14437// Enter name letter background, zelda14438//z (t1-t0)*primlod+t014439{0x038a038a, ac_t0_inter_t1_using_primlod},14440// Sunny Day, Pokemon Stadium 214441// (t1-t0)*primlod+t0, (cmb-0)*0+prim14442{0x038a07f8, ac_prim},14443//attack, Pokemon Stadium 214444// (t1-t0)*primlod+t0, (cmb-env)*shade+shade ** INC **14445{0x038a0928, ac__t0_inter_t1_using_primlod__sub_env_mul_shade_add_shade},14446// blastcorps, unimp log. Added by Gonetz14447// (t1-t0)*primlod+t0, (0-0)*0+shade **INC**?14448{0x038a09ff, ac_t0_inter_t1_using_primlod},14449// pokemon attack, pokemon monsters (J)14450// (t1-t0)*primlod+t0, (cmb-0)*prim+env14451{0x038a0af8, ac__t0_inter_t1_using_primlod__mul_prim_add_env},14452// sky, PGA European Tour14453// (t1-t0)*primlod+t0, (0-0)*0+114454{0x038a0dff, ac_one},14455// Ice surrounding enemy, zelda14456// (t1-t0)*primlod+t0, (env-0)*lodf+014457{0x038a0e3d, ac__t0_inter_t1_using_primlod__mul_env},14458// the bridge out side the mountain smithy shop, zelda 2 [Ogy]. Added by Gonetz14459// (t1-t0)*primlod+t0, (cmb-0)*t0+014460{0x038a0e78, ac_t0_inter_t1_using_primlod},14461// zelda 2, [Ogy]. Added by Gonetz14462// (t1-t0)*primlod+t0, (cmb-0)*t1+014463{0x038a0eb8, ac_t0_inter_t1_using_primlod},14464// Kirby's pool, smash bros14465// (t1-t0)*primlod+t0, (cmb-0)*prim+014466{0x038a0ef8, ac__t0_inter_t1_using_primlod__mul_prim},14467// Samus stage fire, smash bros14468// (t1-t0)*primlod+t0, (cmb-0)*shade+014469{0x038a0f38, ac__t0_inter_t1_using_primlod__mul_shade},14470// something about ice, zelda14471// (t1-t0)*primlod+t0, (cmb-0)*env+014472{0x038a0f78, ac__t0_inter_t1_using_primlod__mul_env},14473// Blast Corps. Added by Gonetz14474// (t1-t0)*primlod+t0, (shade-0)*env+014475{0x038a0f7c, ac_env_mul_shade},14476// goals, J. League Tactics Soccer. Added by Gonetz14477// (prim-t0)*primlod+t0 ** INC **14478{0x038b038b, ac_t0},14479// zelda 2, [Ogy]. Added by Gonetz14480// (t0-t1)*primlod+t0, (cmb-0)*prim+014481{0x03910ef8, ac__t0_sub_t1_mul_primlod_add_t0__mul_prim},14482// a plane in the entrance to the mountain village zelda 2, [Ogy]. Added by Gonetz14483// (t1-t1)*primlod+t0, (cmb-0)*prim+0 ** INC **?14484{0x03920ef8, ac_t0_mul_prim},14485// zelda 2. Added by Gonetz14486// (t1-prim)*primlod+t0, (cmb-0)*prim+0 ** INC **14487{0x039a0ef8, ac__t1_sub_prim_mul_primlod_add_t0__mul_prim},14488// zelda 2. Added by Gonetz14489// (t1-shade)*primlod+t0, (cmb-0)*shade+0 ** INC **14490{0x03a20f38, ac__t1_sub_shade_mul_primlod_add_t0__mul_shade},14491// saffron city, Pokemon Stadium 214492// (t1-1)*primlod+t0, (cmb-0)*0+cmb14493{0x03b201f8, ac_t1_sub_one_mul_primlod_add_t0},14494// Candle flame in ganon's castle, zelda14495// (t1-1)*primlod+t014496{0x03b203b2, ac_t1_sub_one_mul_primlod_add_t0},14497// Fire, zelda14498//z (t1-1)*primlod+t0, (cmb-0)*prim+0 ** INC **14499{0x03b20ef8, ac__t1_sub_one_mul_primlod_add_t0__mul_prim},14500// explosion, zelda 2. Added by Gonetz14501// (t1-1)*primlod+t0, (t0-0)*prim+0 ** INC **14502{0x03b20ef9, ac_t0_mul_prim},14503// Din's fire, zelda14504// (t1-1)*prim_lodfrac+t0, (cmb-0)*shade+0 ** INC **14505{0x03b20f38, ac__t1_sub_one_mul_primlod_add_t0__mul_shade},14506// Fire cloud, zelda14507// (t1-1)*prim_lodfrac+t0, (cmb-0)*env+0 ** INC **14508{0x03b20f78, ac__t1_sub_one_mul_primlod_add_t0__mul_env},14509// zelda 2 [Ogy]. Added by Gonetz14510// (prim-1)*prim_lodfrac+t0, (cmb-0)*env+0 ** INC **14511{0x03b30f78, ac__prim_sub_one_mul_primlod_add_t0__mul_env},14512// fairy's spirit, zelda oot14513// (t0-0)*primlod+t014514{0x03b903b9, ac_t0_mul_primlod_add_t0},14515// Scary face, pokemon stadium 214516// (t0-0)*primlod+t0, (cmb-0)*prim+014517{0x03b90ef8, ac_t0_mul_prim},14518// Magnitude attack, Pokemon Stadium 214519// (t0-0)*primlod+t0, (cmb-0)*shade+014520{0x03b90f38, ac__t0_mul_primlod_add_t0__mul_shade},14521// Leftovers Recovery, Pokemon Stadium 2 [gokuss4]. Added by Gonetz14522// (t1-0)*prim_lodfrac+t0, (cmb-env)*prim+0 ** INC **14523{0x03ba0ee8, ac__t1_mul_primlod_add_t0__sub_env_mul_prim},14524// zelda 2 [Ogy]. Added by Gonetz14525// (t1-0)*prim_lodfrac+t0, (cmb-0)*prim+014526{0x03ba0ef8, ac__t1_mul_primlod_add_t0__mul_prim},14527// Mega punch attack, Pokemon Stadium 214528// (t1-0)*prim_lodfrac+t0, (cmb-prim)*shade+014529{0x03ba0f18, ac__t1_mul_primlod_add_t0__sub_prim_mul_shade},14530// zelda 2 [Ogy]. Added by Gonetz14531// (t1-0)*prim_lodfrac+t0, (cmb-0)*shade+014532{0x03ba0f38, ac__t1_mul_primlod_add_t0__mul_shade},14533// chuchu monsters, zelda 2 [Ogy]. Added by Gonetz14534// (t1-0)*prim_lodfrac+t0, (cmb-0)*env+014535{0x03ba0f78, ac__t1_mul_primlod_add_t0__mul_env},14536// Scary face, pokemon stadium 214537// (env-0)*primlod+t0, (cmb-0)*prim+014538{0x03bd0ef8, ac_t0_mul_prim},14539// ground, zelda 2. Added by Gonetz14540// (t1-t0)*0+t0, (cmb-0)*0+cmb14541{0x03ca01f8, ac_t0},14542// zelda 2. Added by Gonetz14543// (t1-t0)*0+t0, (cmb-0)*prim+014544{0x03ca0ef8, ac_t0_mul_prim},14545// smoke in a night, zelda 2. Added by Gonetz14546// (t1-t0)*0+t0, (cmb-0)*shade+014547{0x03ca0f38, ac_t0_mul_shade},14548//the ice plane out side the mountain smithy shop, zelda 2 [Ogy]. Added by Gonetz14549//(t1-1)*0+t0, (cmb-0)*env+014550{0x03f20f78, ac_t0_mul_env},14551//something on level 5, Kirby64 [Raziel64]14552//(t0-0)*0+t014553{0x03f903f9, ac_t0},14554//spider house, zelda 2 [Ogy]. Added by Gonetz14555//(t0-0)*0+t0, (cmb-0)*prim+014556{0x03f90ef8, ac_t0_mul_prim},14557//Darmani's fire spin, zelda 2 [Ogy]. Added by Gonetz14558//(t1-0)*0+t0, (cmb-0)*prim+014559{0x03fa0ef8, ac_t0_mul_prim},14560// headlight, beetle adventure racing. Added by Gonetz14561//(1-0)*0+t014562{0x03fe03fe, ac_t0},14563// player, super bowling14564// (0-0)*0+t0,14565{0x03ff0000, ac_t0},14566// Ghost's lantern, zelda14567// (0-0)*0+t0, (t1-0)*prim_lod+cmb14568{0x03ff01ba, ac_t1_mul_primlod_add_t0},14569// Hand cursor, mario14570//z (0-0)*0+t014571{0x03ff03ff, ac_t0},14572// Taz express. Added by Gonetz14573// (0-0)*0+t0, (0-0)*0+t114574{0x03ff05ff, ac_t0},14575// powder keg, zelda2. Added by Gonetz14576// (0-0)*0+t0, (0-0)*0+prim14577{0x03ff07ff, ac_t0},14578// water, Spacestation Silicon Valley. Added by Gonetz14579// (0-0)*0+t0, (0-0)*0+shade14580{0x03ff09ff, ac_t0},14581// Characters, Ogre Battle. Added by Gonetz.14582// (0-0)*0+t0, (cmb-0)*prim+env14583{0x03ff0af8, ac_t0_mul_prim_add_env},14584// Monster truck madness intro. Added by Gonetz14585// (0-0)*0+t0, (0-0)*0+env14586{0x03ff0bff, ac_t0},14587// Battlezone14588// (0-0)*0+t0, (0-0)*0+114589{0x03ff0dff, ac_t0},14590// Zoras, zelda14591// (0-0)*0+t0, (env-0)*lodf+014592{0x03ff0e3d, ac_env},14593// logo, v-rally 9914594// (0-0)*0+t0, (prim-0)*t0+014595{0x03ff0e7b, ac_t0_mul_prim},14596// intro, WWF-War Zone14597// (0-0)*0+t0, (env-0)*t0+014598{0x03ff0e7d, ac_t0_mul_env},14599// Window, starfox14600//z (0-0)*0+t0, (cmb-0)*prim+014601{0x03ff0ef8, ac_t0_mul_prim},14602//beetle adventure racing. Added by Gonetz14603// (0-0)*0+t0, (cmb-0)*shade+014604{0x03ff0f38, ac_t0_mul_shade},14605// Wonder Project J2 logo. Added by Gonetz14606// (0-0)*0+t0, (t0-0)*shade+014607{0x03ff0f39, ac_t0_mul_shade},14608// Saria's suit, zelda14609// (0-0)*0+t0, (cmb-0)*env+014610{0x03ff0f78, ac_t0_mul_env},14611// Pokemon Stadium 2, [Jeremy]. Added by Gonetz14612// (0-0)*0+t0, (cmb-0)*primlod+014613{0x03ff0fb8, ac_t0_mul_primlod},14614// Tony Hawk's Pro Skater. Added by Gonetz14615// (0-0)*0+t0, (0-0)*0+014616{0x03ff0fff, ac_zero},14617// Spider Web attack, Pokemon Stadium 2.14618// (t0-t1)*t0+t1, (cmb-0)*prim+cmb **INC**14619{0x045100f8, ac__t1_inter_t0_using_t0a__mul_prim_add__t1_inter_t0_using_t0a},14620// Powered Star Beam, Paper Mario. Added by Gonetz14621// (t0-t1)*t0+t1, (cmb-0)*prim+0 **INC**14622{0x04510ef8, ac__t1_inter_t0_using_t0a__mul_prim},14623// Deadly Arts logo. Added by Gonetz14624// (1-0)*t0+t1, (1-0)*prim+cmb14625{0x047e00fe, ac__t0_add_t1__add_prim},14626// Spiderman. Added by Gonetz14627// (1-0)*t0+t114628{0x047e047e, ac_t0_add_t1},14629// water, Dobutsu no Mori. Added by Gonetz14630// (1-0)*t0+t1, (cmb-0)*primlod+prim14631{0x047e07b8, ac__t0_add_t1__mul_primlod_add_prim},14632// paper mario. Added by Gonetz14633// (1-t0)*t1+t1, (cmb-0)*t1+0 **INC**14634{0x048e0eb8, ac_t0_mul_t1},14635// Pokemon Stadium 2. Added by Gonetz14636// (t0-prim)*t1+t1, (cmb-0)*shade+0 **INC**14637{0x04990f38, ac_t1_mul_shade},14638// waterfall, Dobutsu no Mori. Added by Gonetz14639// (t0-0)*t1+t114640{0x04b904b9, ac_t0_mul_t1_add_t1},14641// light, Dobutsu no Mori. Added by Gonetz14642// (t0-0)*t1+t1, (cmb-0)*primlod+0 ** INC **14643{0x04b90fb8, ac__t0_add_t1__mul_primlod},14644// lava, beetle adventure racing14645// (t1-0)*t1+t1, (cmb-0)*shade+0 ** INC **14646{0x04ba0f38, ac__t1_mul_t1_add_t1__mul_shade},14647// wheels, F1 World Grand Prix. Added by Gonetz14648// (t0-t1)*prim+t114649{0x04d104d1, ac_t1_inter_t0_using_prima},14650// intro, castlevania 2. Added by Gonetz14651// (t0-t1)*prim+t1, (cmb-0)*shade+014652{0x04d10f38, ac__t1_inter_t0_using_prima__mul_shade},14653// flame, castlevania 2. Added by Gonetz14654// (t0-t1)*prim+t1, (cmb-0)*env+014655{0x04d10f78, ac__t1_inter_t0_using_prima__mul_env},14656// walls, beetle adventure racing. Added by Gonetz14657// (t0-0)*prim+t1 **INC**14658{0x04f904f9, ac_t0_mul_prim},14659// Reflect pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz14660// (t0-0)*prim+t1, (cmb-0)*prim+env **INC**14661{0x04f90af8, ac__t0_add_t1__mul_prim_add_env},14662// Psychic pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz14663// (t0-0)*prim+t1, (cmb-0)*shade+0 **INC**14664{0x04f90f38, ac__t0_add_t1__mul_shade},14665// Rayman2. Added by Gonetz14666// (0-0)*shade+t1, (cmb-0)*env+014667{0x053f0f78, ac_t1_mul_env},14668// Ground at kotake & koume, zelda14669// (t1-t0)*env+t1, (cmb-0)*prim+0 ** INC **14670{0x054a0ef8, ac__t1_sub_t0_mul_enva_add_t1__mul_prim},14671// Tony Hawk's Pro Skater. Added by Gonetz14672// (t0-t1)*env+t114673{0x05510551, ac_t1_inter_t0_using_enva},14674// Shiek's disappearance, zelda14675// (t0-1)*env+t114676{0x05710571, ac_t0_sub_one_mul_enva_add_t1},14677// Kotake or koume's magic poof, zelda14678// (t0-1)*env+t1, (cmb-0)*prim+0 ** INC **14679{0x05710ef8, ac__t0_sub_one_mul_enva_add_t1__mul_prim},14680// Gauntlet Legends intro14681// (t0-0)*env+t1, (cmb-0)*prim+0 ** INC **14682{0x05790ef8, ac__t0_add_t1__mul_prim},14683// Zelda opening door, zelda14684// (t0-0)*env+t1, (cmb-0)*shade+014685{0x05790f38, ac_t1_mul_shade},14686// paper mario. Added by Gonetz14687// (t1-0)*env+t1, (cmb-0)*prim+0 ** INC **14688{0x057a0ef8, ac_t1_mul_prim},14689// pokemon attack, Pokemon Stadium 2. Added by Gonetz14690// (t0-t1)*prim_lod+t1, (cmb-0)*prim+014691{0x05910ef8, ac__t1_inter_t0_using_primlod__mul_prim},14692// Skulltula coin, zelda14693// (t0-1)*primlod+t1 ** INC **14694{0x05b105b1, ac_t0_mul_t1},14695// Bell, Pokemon Stadium 2. Added by Gonetz14696// (t0-0)*primlod+t1, (cmb-env)*prim ** INC **14697{0x05b90ee8, ac__t0_add_t1__mul_prim},14698// intro, Aidyn Chronicles. Added by Gonetz14699// (0-cmb)*0+t1, (t1-1)*0+cmb14700{0x05c701f2, ac_t1},14701// zelda 2 [Ogy]. Added by Gonetz14702// (t1-t0)*0+t1, (cmb-0)*prim+014703{0x05ca0ef8, ac_t1_mul_prim},14704// beaver's river, zelda 2. Added by Gonetz14705// (t1-0)*0+t1, (cmb-0)*prim+014706{0x05fa0ef8, ac_t1_mul_prim},14707// Arena, pokemon stadium 214708// (0-0)*0+t1, (0-0)*t0+cmb14709{0x05ff007f, ac_t1},14710// Ogre Battle, unimp log. Added by Gonetz14711// (0-0)*0+t1, (0-0)*0+cmb14712{0x05ff05ff, ac_t1},14713// lullaby, Paper Mario. Added by Gonetz14714// (0-0)*0+t1, (cmb-0)*prim+014715{0x05ff0ef8, ac_t1_mul_prim},14716// aerofighter's assault [Ogy]14717// (0-0)*0+t1, (cmb-0)*shade+014718{0x05ff0f38, ac_t1_mul_shade},14719// magic fist, Rayman2. Added by Gonetz14720// (0-0)*0+t1, (cmb-0)*env+014721{0x05ff0f78, ac_t1_mul_env},14722// Pokemon selection background, Pokemon stadium 214723// (env-prim)*t0+prim14724{0x065d065d, ac_env_sub_prim_mul_t0_add_prim},14725// text background, Ganbare Goemon - Mononoke Sugoroku14726// (1-prim)*t0+prim14727{0x065e065e, ac_one_sub_prim_mul_t0_add_prim},14728// shadows, star wars: ep1 racer14729// (0-prim)*t0+prim14730{0x065f065f, ac_zero_sub_prim_mul_t0_add_prim},14731// lava, beetle adventure racing14732// (0-1)*t0+prim, (cmb-0)*prim+0 ** INC **14733{0x06770ef8, ac_t0_mul_prim},14734// menu, Ganbare Goemon - Mononoke Sugoroku14735// (t0-0)*t0+prim14736{0x06790679, ac_t0_add_prim},14737// Water, pokemon stadium 214738// (t1-0)*t0+prim14739{0x067a067a, ac_t0_mul_t1_add_prim},14740// Smackdown Mall Menu, WWF No Mercy14741// (shade-0)*t0+prim14742{0x067c067c, ac_t0_mul_shade_add_prim},14743// flag, Top Gear Rally 2. Added by Gonetz14744// (env-0)*t0+prim14745{0x067d067d, ac_t0_mul_env_add_prim},14746// Mario Tennis. Added by Gonetz14747// (1-0)*t0+prim14748{0x067e067e, ac_t0_add_prim},14749// sky, PGA European Tour14750// (t0-0)*t1+prim14751{0x06b906b9, ac_t0_mul_t1_add_prim},14752// lava, beetle adventure racing14753// (t0-0)*t1+prim, (0-0)*0+1 **INC**?14754{0x06b90dff, ac_one},14755// Pokemon Stadium 2, [Jeremy]. Added by Gonetz14756// (prim-0)*t1+prim14757{0x06bb06bb, ac_t1_mul_prim_add_prim},14758// pokemon psyattack, Pokemon Stadium 2. Added by Gonetz14759// (1-0)*t1+prim, (cmb-0)*env+014760{0x06be0f78, ac_t1_add_prim_mul_env},14761// Rush2 2. Added by Gonetz14762// (prim-prim)*prim+prim14763{0x06db06db, ac_prim},14764//Spacestation Silicon Valley intro. Added by Gonetz14765// (t1-prim)*shade+prim14766// {0x071a071a, ac_t1_mul_shade},14767{0x071a071a, ac_t1_sub_prim_mul_shade_add_prim},14768//KI logos. Added by Gonetz14769// (env-prim)*shade+prim14770{0x071d071d, ac_env_sub_prim_mul_shade_add_prim},14771// Deadly Arts, arena. Added by Gonetz14772// (1-0)*shade+prim14773{0x073e073e, ac_prim_add_shade},14774// Phantom Gannon's portal, zelda14775// (t1-t0)*env+prim, (cmb-0)*shade+0 ** INC **14776{0x074a0f38, ac__t0_mul_t1__mul_prim_mul_shade},14777// Road rush. Added by Gonetz14778// (t0-0)*env+prim14779{0x07790779, ac_t0_mul_env_add_prim},14780// arena, Pokemon Stadium 214781// (shade-t0)*primlod+prim, (cmb-t0)*shade ** INC **14782{0x078c0f08, ac_shade_sub_t0_mul_primlod_add_prim},14783// telescope, zelda 2. Added by Gonetz14784// (1-t0)*primlod+prim14785{0x078e078e, ac_one_sub_t0_mul_primlod_add_prim},14786// zelda 2 [Ogy]. Added by Gonetz14787// (t0-t1)*primlod+prim, (cmb-0)*t0+014788{0x07910e78, ac_t0_inter_t1_using_primlod},14789// Dobutsu no Mori. Added by Gonetz14790// (t0-0)*primlod+prim14791{0x07b907b9, ac_t0_mul_primlod_add_prim},14792// Lock-On attack, Pokemon Stadium 214793// (t1-t0)*0+prim, (cmb-0)*0+cmb14794{0x07ca01f8, ac_prim},14795// water, DK6414796// (0-0)*0+0, (0-t1)*0+prim14797{0x07d707d7, ac_prim},14798// Menu, megaman14799// (1-0)*0+prim14800{0x07fe07fe, ac_prim},14801// super bowling14802//(0-0)*0+prim,14803{0x07ff0000, ac_prim},14804// menu, Ganbare Goemon - Mononoke Sugoroku14805// (0-0)*0+prim, (0-0)*0+t014806{0x07ff03ff, ac_t0},14807// Intro background, starfox14808//z (0-0)*0+prim14809{0x07ff07ff, ac_prim},14810// velva boss, JFG14811//(0-0)*0+prim, (0-0)*0+env14812{0x07ff0bff, ac_env},14813// gem, castlevania 2. Added by Gonetz14814// (0-0)*0+prim, (cmb-0)*t0+014815{0x07ff0e78, ac_t0_mul_prim},14816// text, Tony Hawk's Pro Skater. Added by Gonetz14817// (0-0)*0+prim, (cmb-0)*t1+014818{0x07ff0eb8, ac_t1_mul_prim}, //weird, but implementing this makes text unreadable14819// zelda 2. Added by Gonetz14820// (0-0)*0+prim, (cmb-0)*prim+014821{0x07ff0ef8, ac_prim_mul_prim},14822// explosion, Blast Corps. Added by Gonetz14823// (0-0)*0+prim, (t0-0)*prim+014824{0x07ff0ef9, ac_t0_mul_prim},14825// zelda 2, [Ogy]. Added by Gonetz14826// (0-0)*0+prim, (cmb-0)*shade+014827{0x07ff0f38, ac_prim_mul_shade},14828// Fox's ears and arms, smash bros14829// (0-0)*0+prim, (cmb-0)*env+014830{0x07ff0f78, ac_prim_mul_env},14831// monsters, Pokemon Stadium. Added by Gonetz14832// (0-0)*0+prim, (cmb-0)*primlod+014833{0x07ff0fb8, ac_prim_mul_primlod},14834// Hydro Pump Attack, Pokemon Stadium.14835// (1-t1)*t0+shade, (cmb-prim)*shade+014836{0x08560f18, ac__one_sub_t1_mul_t0_add_shade__sub_prim_mul_shade},14837// focus, Paper Mario. Added by Gonetz14838//(t0-shade)*t0+shade, (cmb-0)*prim+0 * INC **14839{0x08610ef8, ac_t0_mul_prim},14840// Mario's head, mario //Added by Gonetz14841//(prim-shade)*t0+shade14842{0x08630863, ac_prim_sub_shade_mul_t0_add_shade},14843// Fissure attack, pokemon stadium 214844//(t1-t0)*prim+shade, (cmb-0)*shade+014845{0x08ca0f38, ac__t1_sub_t0_mul_prim_add_shade__mul_shade},14846// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz14847//(t0-t1)*prim+shade, (cmb-0)*shade+0 ** INC **14848{0x08d10f38, ac__t0_sub_t1_mul_prim_add_shade__mul_shade},14849// ?14850//(t0-shade)*prim+shade14851{0x08e108e1, ac_t0_mul_prim_add_shade_mul_one_minus_prim},14852// Paper Mario14853// (t0-prim)*shade+shade, (cmb-0)*env+014854{0x09190f78, ac__t0_sub_prim_mul_shade_add_shade__mul_env},14855// pads, Pokemon Stadium 2. Added by Gonetz14856// (0-t0)*env+shade, (cmb-0)*prim+0 ** INC **14857{0x094f0ef8, ac_one_sub_t0_mul_prim_mul_shade},14858// sun rays, Pokemon Stadium 2.14859// (shade-0)*env+shade, (cmb-0)*prim+014860{0x097c0ef8, ac_one_plus_env_mul_prim_mul_shade},14861// attack, Pokemon Stadium 2.14862// (t0-0)*primlod+shade, (cmb-0)*shade+014863{0x09b90f38, ac__t0_mul_primlod_add_shade__mul_shade},14864// Huge turtle appearance, zelda 2. Added by Gonetz14865// (t1-0)*primlod+shade, (cmb-0)*shade+0 ** INC **14866{0x09ba0f38, ac__t1_mul_primlod_add_shade__mul_shade},14867// roof, Kirby 64. Added by Gonetz14868// (t0-0)*0+shade14869{0x09f909f9, ac_shade},14870// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz14871// (0-0)*0+shade, (cmb-cmb)*lodf+cmb14872{0x09ff0000, ac_shade},14873// water temple, zelda 2. Added by Gonetz14874// (0-0)*0+shade, (cmb-0)*prim+cmb14875{0x09ff00f8, ac_prim_mul_shade_add_shade},14876// damaged car, SCARS. Added by Gonetz14877// (0-0)*0+shade, (t0-t1)*primlod+prim ** INC **14878{0x09ff0791, ac_t0_mul_primlod_add_prim},14879// Hyrule castle gate, zelda14880//z (0-0)*0+shade, (0-0)*0+prim14881{0x09ff07ff, ac_prim},14882// Super Mario 64 logo14883//z (0-0)*0+shade14884{0x09ff09ff, ac_shade},14885// terrain, SCARS. Added by Gonetz14886// (0-0)*0+shade, (0-0)*0+114887{0x09ff0dff, ac_one},14888// terrain, SCARS. Added by Gonetz14889// (0-0)*0+shade, (t0-0)*t1+014890{0x09ff0eb9, ac_t0_mul_t1},14891// N64 logo, Aidyn Chronicles. Added by Gonetz14892// (0-0)*0+shade, (cmb-0)*prim+014893{0x09ff0ef8, ac_prim_mul_shade},14894// birds?, custom robo. Added by Gonetz14895// (0-0)*0+shade, (cmb-0)*shade+014896{0x09ff0f38, ac_shade},14897// sky, Glover, [Raziel64]. Added by Gonetz14898// (0-0)*0+shade, (t0-0)*shade+014899{0x09ff0f39, ac_t0_mul_shade},14900// Hand, smash bros14901// (0-0)*0+shade, (cmb-0)*env+014902{0x09ff0f78, ac_env_mul_shade},14903// Conker's helicopter tail, CBFD14904// (0-0)*0+shade, (shade-0)*env+014905{0x09ff0f7c, ac_env_mul_shade},14906// menu, PokemonStadium1, [Raziel64]14907// (0-0)*0+shade, (cmb-0)*primlod+014908{0x09ff0fb8, ac_primlod_mul_shade},14909// Link's sword slashing, smash bros14910// (prim-env)*t0+env14911{0x0a6b0a6b, ac_prim_sub_env_mul_t0_add_env},14912// Reflected beam at kotake & koume's, zelda14913// (prim-env)*t0+env, (cmb-0)*prim+0 ** INC **14914{0x0a6b0ef8, ac_t0_mul_prim},14915// teleporter, Spacestation Silicon Valley. Added by Gonetz14916// (prim-env)*t0+env, (cmb-0)*shade+0 ** INC **14917{0x0a6b0f38, ac_t0_mul_shade},14918// Ridge Racer, unimp log. Added by Gonetz14919// (prim-env)*t0+env, (cmb-0)*primlod+014920{0x0a6b0fb8, ac_prim_sub_env_mul_t0_add_env},14921// Kotake or koume's hair, zelda14922// (prim-0)*t0+env14923{0x0a7b0a7b, ac_t0_mul_prim_add_env},14924// menu, doubut no mori14925// (1-0)*t0+env14926{0x0a7e0a7e, ac_t0_add_env},14927// Grass, mario golf14928// (env-shade)*t1+env, (0-0)*0+114929{0x0aa50dff, ac_one},14930// Ridge Racer, cars select. Added by Gonetz14931// (prim-env)*t1+env14932{0x0aab0aab, ac_prim_sub_env_mul_t1_add_env},14933// text, monster truck madness14934// (prim-env)*t1+env, (cmb-0)*t1+014935{0x0aab0eb8, ac_t1_mul_env},14936// zelda 2 [Ogy]. Added by Gonetz14937// (1-0)*t1+env, (0-0)*0+cmb14938//{0x0abe0abe, ac_one},14939{0x0abe0abe, ac_t1_add_env},14940// arena, Pokemon Stadium 2. Added by Gonetz14941// (1-t0)*prim+env, (cmb-0)*shade+014942{0x0ace0f38, ac_one_sub_t0_mul_prim_mul_shade},14943// intro, Bomberman 64 - 2. Added by Gonetz14944// (t0-env)*prim+env14945{0x0ae90ae9, ac_t0_sub_env_mul_prim_add_env},14946// N64 logo, Ogre Battle. Added by Gonetz14947// (t0-0)*prim+env14948{0x0af90af9, ac_t0_mul_prim_add_env},14949// girls, PD intro. Added by Gonetz14950// (t0-env)*shade+env ** INC **14951{0x0b290b29, ac_t0_sub_env_mul_shadea_add_env},14952// Text, Mia Soccer. Added by Gonetz14953// (t0-env)*shade+env, (cmb-0)*lod_fraction+0 ** INC **14954{0x0b290e38, ac_t0_sub_env_mul_shadea_add_env},14955// shadows, Mario Tennis. Added by Gonetz14956// (prim-env)*shade+env, (0-cmb)*t1+cmb ** INC **14957{0x0b2b0087, ac_prim_sub_env_mul_shade_add_env_mul_t1},14958// lamppost?, Ridge Racer. Added by Gonetz14959// (prim-env)*shade+env, (0-0)*0+cmb14960{0x0b2b0b2b, ac_prim_sub_env_mul_shade_add_env},14961// ground, zelda2. Added by Gonetz14962// (1-env)*shade+env, (t1-0)*prim+014963{0x0b2e0efa, ac_t1_mul_prim},14964// GASP Fighters14965// (t0-0)*shade+env14966{0x0b390b39, ac_t0_mul_shade_add_env},14967// destroying stuff, golden eye14968// (1-0)*shade+env14969{0x0b3e0b3e, ac_env_add_shade},14970// Torches, Paper Mario. Added by Gonetz14971// (t0-t1)*env+env, (0-0)*0+114972{0x0b510dff, ac_t0_sub_t1_mul_env_add_env},14973// Mini Racers14974// (t0-0)*primlod+env14975{0x0bb90bb9, ac_t0_mul_primlod_add_env},14976// International Track and Field 2000. Added by Gonetz14977// (t0-0)*0+env14978{0x0bf90bf9, ac_env},14979// TM, mario14980//z (0-0)*0+env14981{0x0bff0bff, ac_env},14982// rancho monster, zelda2. Added by Gonetz14983// (0-0)*0+env, (cmb-0)*t1+014984{0x0bff0eb8, ac_t1_mul_env},14985// Rocket Robot in Wheels intro14986// (0-0)*0+env, (cmb-0)*prim+014987{0x0bff0ef8, ac_prim_mul_env},14988// Background, Pokemon Snap14989// (prim-env)*t0+114990{0x0c6b0c6b, ac_prim_sub_env_mul_t0_add_one},14991// Mario Golf14992// (0-1)*t0+114993{0x0c770c77, ac_one_sub_t0},14994// flame, paper mario. Added by Gonetz14995// (1-t0)*t1+1, (cmb-t1)*t1+t114996{0x0c8e0490, ac_t0_mul_t1},14997// hall of fame, Pokemon Stadium14998// (t0-1)*prim+1, (cmb-0)*env+014999{0x0cf10f78, ac__one_inter_t0_using_prim__mul_env},15000// Ring boundary, dual heroes15001// (0-1)*prim+115002{0x0cf70cf7, ac_one_sub_prim},15003// Kirby64, level 6, [Raziel64]15004// (0-0)*prim+115005{0x0cff0cff, ac_one},15006// Mystical Ninja15007// (0-1)*env+115008{0x0d770d77, ac_one},15009// Deku shield in shop, zelda15010// (1-1)*primlod+115011{0x0db60db6, ac_one},15012// water near gorons willage. Added by Gonetz15013// (t1-t0)*0+1, (cmb-0)*prim+015014{0x0dca0ef8, ac_prim},15015// background, kirby 64. Added by Gonetz15016// (t0-0)*0+115017{0x0df90df9, ac_one},15018// kirby 64. Added by Gonetz15019// (1-0)*0+115020{0x0dfe0dfe, ac_one},15021// background on level 2-1, kirby 64 [Raziel64]. Added by Gonetz15022// (1-0)*0+1, (0-0)*0+115023{0x0dfe0dff, ac_one},15024// duck dodgers intro. Added by Gonetz15025// (0-0)*0+1, (cmb-cmb)*primlod+cmb15026{0x0dff0000, ac_one},15027// duck dodgers intro. Added by Gonetz15028// (0-0)*0+1, (0-0)*0+t1 **INC**?15029{0x0dff05ff, ac_t1},15030// ?15031// (0-0)*0+1, (0-0)*0+prim15032{0x0dff07ff, ac_prim},15033// arena, custom robo. Added by Gonetz15034// (0-0)*0+1, (0-0)*0+shade15035{0x0dff09ff, ac_shade},15036// field, Mario Golf15037// (0-0)*0+1, (1-env)*shade+env15038{0x0dff0b2e, ac_one_sub_env_mul_shade_add_env},15039// battle tanks 2 [Ogy]15040// (0-0)*0+1, (0-0)*0+env15041{0x0dff0bff, ac_env},15042// helmet, F1 World Grand Prix. Added by Gonetz15043// (0-0)*0+1, (0-1)*0+115044{0x0dff0df7, ac_one},15045// secret in level 3-4, Kirby64, [Raziel64]15046// (0-0)*0+1, (cmb-0)*0+115047{0x0dff0df8, ac_one},15048// Menu options, starfox15049// (0-0)*0+115050{0x0dff0dff, ac_one},15051// Water, zelda15052//z (0-0)*0+primlod, (cmb-0)*prim+015053{0x0dff0ef8, ac_prim},15054// Desert ground, zelda15055// (0-0)*0+1, (cmb-0)*shade+015056{0x0dff0f38, ac_shade},15057// Characters, smash bros15058// (0-0)*0+1, (cmb-0)*env+015059{0x0dff0f78, ac_env},15060// end of level 3-4, Kirby64, [Raziel64]15061// (0-0)*0+1, (cmb-0)*0+015062{0x0dff0ff8, ac_zero},15063// Kirby6415064// (0-0)*0+1, (0-0)*0+015065{0x0dff0fff, ac_zero},15066// floor, Spiderman [Raziel64]. Added by Gonetz15067// (env-t1)*t0+0 ** INC **15068{0x0e550e55, ac_t0_mul_env},15069// skeleton, castlevania 2. Added by Gonetz15070// (1-prim)*t0+015071{0x0e5e0e5e, ac_one_sub_prim_mul_t0},15072// player select, Forsaken [Raziel64]. Added by Gonetz15073// (prim-shade)*t0+015074{0x0e630e63, ac_prim_sub_shade_mul_t0},15075// castlevania 2 [Ogy]. Added by Gonetz15076// (1-shade)*t0+015077{0x0e660e66, ac_one_sub_shade_mul_t0},15078// GoldenEye: Helicopter rotors15079// (shade-env)*t0+0, (1-0)*prim+cmb15080{0x0e6c00fe, ac_shade_sub_env_mul_t0_add_prim},15081// background, level3-4, Kirby64, [Raziel64]15082// (shade-env)*t0+015083{0x0e6c0e6c, ac_shade_sub_env_mul_t0},15084// Goemon, mystical ninja. Added by Gonetz15085// (1-env)*t0+015086{0x0e6e0e6e, ac_one_sub_env_mul_t0},15087// fist attack, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz15088// (t0-0)*t0+0, (t1-cmb)*prim+cmb15089{0x0e7900c2, ac_t0_inter_t1_using_prima},15090// Clay Fighter [Ogy]. Added by Gonetz15091// (t0-0)*t0+015092{0x0e790e79, ac_t0_mul_t0},15093// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz15094// (t0-0)*t0+0, (prim-0)*t1+015095{0x0e790ebb, ac_t1_mul_prim},15096// zelda 2 [Ogy]. Added by Gonetz15097// (t0-0)*t0+0, (cmb-0)*prim+015098{0x0e790ef8, ac_t0_mul_prim},15099// zelda 2. Added by Gonetz15100// (t0-0)*t0+0, (cmb-0)*shade+015101{0x0e790f38, ac_t0_mul_shade},15102// zelda 2. Added by Gonetz15103// (t0-0)*t0+0, (cmb-0)*env+015104{0x0e790f78, ac_t0_mul_env},15105// the ice plane just before the entrance to gorons village (where tingle is}, zelda 2 [Ogy]. Added by Gonetz15106// (t1-0)*t0+0, (cmb-0)*0+cmb15107{0x0e7a01f8, ac_t0_mul_t1},15108// paper mario. Added by Gonetz15109// (t1-0)*t0+0, (cmb-env)*prim+env ** INC **15110{0x0e7a0ae8, ac_t1_mul_prim},15111// mini games quiz monitor backround, Pokemon Stadium 215112// (t1-0)*t0+0, (0-0)*0+115113{0x0e7a0dff, ac_one},15114// Tony Hawk's Pro Skater. Added by Gonetz15115// (t1-0)*t0+0, (cmb-0)*t0+015116{0x0e7a0e78, ac_t0_mul_t1},15117// bike trace, xg2. Added by Gonetz15118// (t1-0)*t0+015119{0x0e7a0e7a, ac_t0_mul_t1},15120// Kotake & koume defeated, zelda15121// (t1-0)*t0+0, (cmb-0)*prim+015122{0x0e7a0ef8, ac__t0_mul_t1__mul_prim},15123// Magnitude, pokemon stadium 215124// (t1-0)*t0+0, (cmb-env)*shade+015125{0x0e7a0f28, ac__t0_mul_t1__mul_env_mul_shade},15126// Bongo Bongo, zelda15127// (t1-0)*t0+0, (cmb-0)*shade+015128{0x0e7a0f38, ac__t0_mul_t1__mul_shade},15129// Dobutsu_no_Mori, waterfall15130// (t1-0)*t0+0, (cmb-0)*prim_lod+015131{0x0e7a0fb8, ac__t0_mul_t1__mul_primlod},15132// Back of doors, megaman15133// (prim-0)*t0+0, (cmb-0)*lodfrac+015134{0x0e7b0e38, ac_t0_mul_prim},15135// Karts, mario kart15136//z (prim-0)*t0+015137{0x0e7b0e7b, ac_t0_mul_prim},15138// paper mario. Added by Gonetz15139// (prim-0)*t0+0, (t0-0)*prim+015140{0x0e7b0ef9, ac_t0_mul_prim},15141// Table, mace15142// (prim-0)*t0+0, (cmb-0)*shade+015143{0x0e7b0f38, ac_t0_mul_prim_mul_shade},15144// lamp shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz15145// (shade-0)*t0+0, (cmb-cmb)*lodf+cmb15146{0x0e7c0000, ac_t0_mul_shade},15147// Game logo, Aerofighters Assault [Raziel64]15148//(shade-0)*t0+0, (0-0)*0+115149{0x0e7c0dff, ac_one},15150// Higher sky, waverace15151//z (shade-0)*t0+015152{0x0e7c0e7c, ac_t0_mul_shade},15153// duck dodgers, intro. Added by Gonetz15154// (shade-0)*t0+0, (cmb-0)*prim+015155{0x0e7c0ef8, ac_t0_mul_prim_mul_shade},15156// waterwheel in water temple, zelda 2. Added by Gonetz15157// (shade-0)*t0+0, (cmb-0)*env+015158{0x0e7c0f78, ac_t0_mul_env_mul_shade},15159// Blowing up mine at bowser's, mario15160// (env-0)*t0+015161{0x0e7d0e7d, ac_t0_mul_env},15162// castlevania 2, intro. Added by Gonetz15163// (1-0)*t0+015164{0x0e7e0e7e, ac_t0},15165// moon, castlevania 2. Added by Gonetz15166// (1-0)*t0+0, (cmb-0)*prim+015167{0x0e7e0ef8, ac_t0_mul_prim},15168//beetle adventure racing. Added by Gonetz15169// (1-0)*t0+0, (cmb-0)*shade+015170{0x0e7e0f38, ac_t0_mul_shade},15171// lava, beetle adventure racing15172// (t0-prim)*t1+0, (0-0)*0+shade ** INC **15173{0x0e9909ff, ac_shade},15174// Rain Dance, Pokemon Stadium 2 [gokuss4]. Added by Gonetz15175// (t0-env)*t1+0, (cmb-0)*0+prim ** INC **15176{0x0ea90ef8, ac__t0_mul_t1__mul_prim},15177// Duck Dodgers Starring Daffy Duck text background15178// (t0-0)*t1+0, (shade-cmb)*prim+cmb15179{0x0eb900c4, ac_one_sub_prim_mul__t0_mul_t1__add__prim_mul_shade},15180// torches, pokemon stadium 215181// (t0-0)*t1+0, (cmb-env)*prim+cmb15182{0x0eb900e8, ac__t0_mul_t1__sub_env_mul_prim_add__t0_mul_t1},15183// airboarder 64 [Ogy]15184// (t0-0)*t1+0, (0-0)*0+prim15185{0x0eb907ff, ac_prim},15186// explosion, body harvest. Added by Gonetz15187// (t0-0)*t1+0, (0-0)*0+shade15188{0x0eb909ff, ac_shade},15189// Text off top, banjo kazooie15190// (t0-0)*t1+015191{0x0eb90eb9, ac_t0_mul_t1},15192// smoke, daikatana. Added by Gonetz15193// (t0-0)*t1+0, (cmb-0)*prim+015194{0x0eb90ef8, ac__t0_mul_t1__mul_prim},15195// Arena, Pokemon Stadium 2.15196// (t0-0)*t1+0, (cmb-prim)*shade+015197{0x0eb90f18, ac__t0_mul_t1__sub_prim_mul_shade},15198// Water, pilotwings15199// (t0-0)*t1+0, (cmb-0)*shade+015200{0x0eb90f38, ac__t0_mul_t1__mul_shade},15201// Tony Hawk's Pro Skater. Added by Gonetz15202// (t0-0)*t1+0, (cmb-0)*env+015203{0x0eb90f78, ac__t0_mul_t1__mul_env},15204// light from window, Dobutsu no Mori. Added by Gonetz15205// (t0-0)*t1+0, (cmb-0)*primlod+015206{0x0eb90fb8, ac__t0_mul_t1__mul_primlod},15207// chandelier in spider house, zelda 2. Added by Gonetz15208// (t1-0)*t1+0, (cmb-0)*prim+015209{0x0eba0ef8, ac_t1_mul_prim},15210// cars, ridge racer. Added by Gonetz15211// (prim-0)*t1+0, (0-0)*0+115212{0x0ebb0dff, ac_t1_mul_prim},15213// aerofighter's assault [Ogy]15214// (prim-0)*t1+015215{0x0ebb0ebb, ac_t1_mul_prim},15216// tire trace, beetle adventure racing. Added by Gonetz15217// (shade-0)*t1+015218{0x0ebc0ebc, ac_t1_mul_shade},15219// smoke, Starshot. Added by Gonetz15220// (env-0)*t1+015221{0x0ebd0ebd, ac_t1_mul_env},15222// lots of things, goldeneye15223// (1-0)*t1+0, (0-0)*0+shade15224{0x0ebe09ff, ac_shade},15225// zelda 2 [Ogy]. Added by Gonetz15226// (1-0)*t1+0, (cmb-0)*prim+015227{0x0ebe0ef8, ac_t1_mul_prim},15228// walls, perfect dark. Added by Gonetz15229// (1-0)*t1+0, (cmb-0)*shade+015230{0x0ebe0f38, ac_t1_mul_shade},15231// sand, perfect dark. Added by Gonetz15232// (1-0)*t1+0, (cmb-0)*env+015233{0x0ebe0f78, ac_t1_mul_env},15234// light, Ridge Racer. Added by Gonetz15235// (1-t0)*prim+015236{0x0ece0ece, ac_one_sub_t0_mul_prim},15237// exaust, star wars ep1 racer15238// (1-t0)*prim+0, (cmb-0)*shade+015239{0x0ece0f38, ac_one_sub_t0_mul_primshade},15240// iguana, Forsaken, [Raziel64]. Added by Gonetz15241// (t0-shade)*prim+015242{0x0ee10ee1, ac_t0_sub_shade_mul_prim},15243// stands, NASCAR 200015244// (prim-shade)*prim+015245{0x0ee30ee3, ac_prim_sub_shade_mul_prim},15246// arena, Pokemon Stadium 2. Added by Gonetz15247// (t0-env)*prim+0 ** INC **15248{0x0ee90ee9, ac_t0_mul_prim},15249// lure, bass rush15250// (t0-0)*prim+0, (cmb-cmb)*lodf+cmb15251{0x0ef90000, ac_t0_mul_prim},15252// explosion, body harvest. Added by Gonetz15253// (t0-0)*prim+0, (t0-0)*env+cmb15254{0x0ef90179, ac_prim_add_env_mul_t0},15255// frog's eyes, zelda15256// (t0-0)*prim+0, (1-1)*prim_lod+cmb15257{0x0ef901b6, ac_t0_mul_prim},15258// Monster truck madness intro. Added by Gonetz15259// (t0-0)*prim+0, (cmb-0)*prim_lod+cmb ** INC **15260{0x0ef901b8, ac_t0_mul_prim},15261// Road, zelda15262//z (t0-0)*prim+0, (t1-0)*primlod+cmb15263{0x0ef901ba, ac__t0_mul_prim__add__t1_mul_primlod},15264// Track, wipeout. Addded by Gonetz15265// (t0-0)*prim+0, (0-0)*0+prim15266{0x0ef907ff, ac_t0_mul_prim},15267// magic stuff, buck bumble. Added by Gonetz15268// (t0-0)*prim+0, (cmb-0)*prim+015269{0x0ef90ef8, ac_t0_mul_prim_mul_prim},15270// The mario face, mario15271//z (t0-0)*prim+015272{0x0ef90ef9, ac_t0_mul_prim},15273// paper mario. Added by Gonetz15274// (t0-0)*prim+0, (cmb-0)*shade+015275{0x0ef90f38, ac_t0_mul_prim_mul_shade},15276// Pikachu's mouth, smash bros15277// (t0-0)*prim+0, (cmb-0)*env+015278{0x0ef90f78, ac_t0_mul_prim_mul_env},15279// bomb mask, zelda 2. Added by Gonetz15280// (t0-0)*prim+0, (1-0)*env+015281{0x0ef90f7e, ac_t0_mul_prim},15282// Charmander's tail, pokemon stadium 215283// (t0-0)*prim+0, (cmb-0)*primlod+015284{0x0ef90fb8, ac_t0_mul_prim_mul_primlod},15285// stalactites, Beetle adventure Racing. Added by Gonetz15286// (t1-0)*prim+0, (1-cmb)*shade+cmb15287{0x0efa0106, ac_one_sub_shade_mul_t1_add_shade},15288// Sprites, Ogre Battle. Added by Gonetz15289// (t1-0)*prim+0, (0-0)*0+cmb15290{0x0efa0efa, ac_t1_mul_prim},15291// Something about kotake & koume's combined attack, zelda15292// (t1-0)*prim+0, (cmb-0)*shade+015293{0x0efa0f38, ac_t1_mul_prim_mul_shade},15294// intro background, bio freaks. Added by Gonetz15295// (prim-0)*prim+015296{0x0efb0efb, ac_prim_mul_prim},15297// sky, xg2. Added by Gonetz15298// (shade-0)*prim+0, (0-0)*0+115299{0x0efc0dff, ac_one},15300// Zelda, unimp log. Added by Gonetz15301// (shade-0)*prim+015302{0x0efc0efc, ac_prim_mul_shade},15303// ?15304// (shade-0)*prim+0, (cmb-0)*shade+0 ** INC **15305{0x0efc0f38, ac_prim_mul_shade},15306// Baby mario's hat shadow, mario golf15307// (env-0)*prim+015308{0x0efd0efd, ac_prim_mul_env},15309// Menu, doom15310// (1-0)*prim+015311{0x0efe0efe, ac_prim},15312// Peris Song attack, Pokemin Stadium 215313// (1-0)*prim+0, (cmb-0)*shade+015314{0x0efe0f38, ac_prim_mul_shade},15315// Conker's shadow, CBFD. Added by Gonetz15316// (1-t0)*shade+015317{0x0f0e0f0e, ac_one_sub_t0_mul_shade},15318// Rock smash, pokemon stadium 215319// (1-t0)*shade+015320{0x0f0f0ee8, ac_one_sub_t0_mul_shade},15321//waterfall, Paper Mario15322// (t0-t1)*shade+015323{0x0f110f11, ac__t0_sub_t1__mul_shade},15324// mahogany town statue, Pokemon Stadium 215325// (t0-prim)*shade+015326{0x0f190f19, ac_t0_sub_prim_mul_shade},15327// silver cave, pokemon stadium 215328// (t0-prim)*shade+0, (cmb-0)*env+015329{0x0f190f78, ac_t0_sub_prim_mul_shade_mul_env},15330// Boomerang circle, zelda15331// (t0-0)*shade+0, (1-cmb)*t0+cmb15332{0x0f390046, ac_t0_mul_shade},15333// THPS315334// (t0-0)*shade+0, (1-0)*t0+cmb15335{0x0f39007e, ac_t0_mul_shade},15336// ???15337// (t0-0)*shade+0, (env-0)*t1+cmb15338{0x0f3900bd, ac_t0_mul_shade},15339// Forest temple doorway, zelda15340// (t0-0)*shade+0, (t1-0)*primlod+cmb15341{0x0f3901ba, ac_t0_mul_shade},15342// skis, Spacestation Silicon Valley. Added by Gonetz15343// (t0-0)*shade+0, (0-0)*0+t015344{0x0f3903ff, ac_t0},15345// paper mario. Added by Gonetz15346// (t0-0)*shade+0, (cmb-t0)*prim+015347{0x0f390ec8, ac_t0_mul_prim_mul_shade},15348// House windows, zelda intro15349//z (t0-0)*shade+0, (cmb-0)*prim+015350{0x0f390ef8, ac_t0_mul_prim_mul_shade},15351// Characters, mace15352// (t0-0)*shade+0, (cmb-0)*shade+015353{0x0f390f38, ac_t0_mul_shade},15354// Shadows, mario15355//z (t0-0)*shade+015356{0x0f390f39, ac_t0_mul_shade},15357// Clear screen intro, banjo kazooie15358// (t0-0)*shade+0, (cmb-0)*env+015359{0x0f390f78, ac_t0_mul_env_mul_shade},15360// ridge racer, unimp log. Added by Gonetz15361// (t0-0)*shade+0, (cmb-0)*primlod+0 **INC**?15362{0x0f390fb8, ac_t0_mul_shade},15363// Reflecting combined attack at kotake & koume's, zelda15364// (t1-0)*shade+0, (cmb-0)*prim+015365{0x0f3a0ef8, ac_t1_mul_prim_mul_shade},15366// aerofighter's assault [Ogy]15367// (t1-0)*shade+015368{0x0f3a0f3a, ac_t1_mul_shade},15369//beetle adventure racing. Added by Gonetz15370//(t1-0)*shade+0, (cmb-0)*env+015371{0x0f3a0f78, ac_t1_mul_env_mul_shade},15372// building shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz15373// (prim-0)*shade+0, (cmb-cmb)*lodf+cmb15374{0x0f3b0000, ac_prim_mul_shade},15375//chip in Spacestation Silicon Valley intro. Added by Gonetz15376// (prim-0)*shade+0, (env-cmb)*t1+cmb15377{0x0f3b0085, ac_env_sub_primshade_mul_t1_add_primshade},15378// N64 logo, tetrisphere. Added by Gonetz15379// (prim-0)*shade+0, (prim-0)*shade+015380{0x0f3b0f3b, ac_prim_mul_shade},15381// rays, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz15382// (shade-0)*shade+0, (cmb-0)*prim+015383{0x0f3c0ef8, ac_prim_mul_shade},15384// light, dracula resurrection, castlevania 2. Added by Gonetz15385// (env-0)*shade+015386{0x0f3d0f3d, ac_env_mul_shade},15387// zelda 2 [Ogy]. Added by Gonetz15388// (1-0)*shade+015389{0x0f3e0f3e, ac_shade},15390// surf pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz15391// (1-t0)*env+0, (1-cmb)*shade+0 ** INC **15392{0x0f4e0f06, ac_t0_mul_shade},15393// GE, boxes15394// (1-shade)*env+0, (cmb-0)*shade+0 ** INC **15395{0x0f660f38, ac_one_sub_shade_mul_env},15396//beetle adventure racing. Added by Gonetz15397//(t0-0)*env+0, (1-t0)*prim+cmb15398//{0x0f7900ce, ac_t0_mul_env}, //this one looks better15399//{0x0f7900ce, ac_env_sub_prim_mul_t0_add_prim},15400{0x0f7900ce, ac_one_sub_t1_add_t0_mul_env},15401//Zelda, logo ? Added by Gonetz15402//(t0-0)*env+0, (t1-0)*primlod+0 **INC** changed to mul_env for gannon's organ disappearing [Dave2001]15403{0x0f7901ba, ac__t0_inter_t1_using_primlod__mul_env},15404// V8-2 menu15405// (t0-0)*env+0, (0-0)*0+prim15406{0x0f7907ff, ac_prim},15407// Skeleton guy's eyes, zelda15408// (t0-0)*env+0, (cmb-0)*prim+015409{0x0f790ef8, ac_t0_mul_prim_mul_env},15410// Dust from rock spell, quest6415411// (t0-0)*env+0, (cmb-0)*shade+015412{0x0f790f38, ac_t0_mul_env_mul_shade},15413// eyes of poe, zelda15414// (t0-0)*env+0, (cmb-0)*env+015415{0x0f790f78, ac_t0_mul_env},15416// Text, mario15417//z (t0-0)*env+015418{0x0f790f79, ac_t0_mul_env},15419// Shadows, pokemon stadeom 215420// (t0-0)*env+0, (cmb-0)*primlod+015421{0x0f790fb8, ac_t0_mul_env_mul_primlod},15422//gauge, PGA15423// (t1-0)*env+0, (cmb-0)*t1+0 ** INC **15424{0x0f7a0eb8, ac_t1_mul_env},15425//text and shadows, Rayman2. Added by Gonetz15426// (t1-0)*env+0, (cmb-0)*shade+015427{0x0f7a0f38, ac_t1_mul_env_mul_shade},15428// shadows, tom and jerry. Added by Gonetz15429// (t1-0)*env+015430{0x0f7a0f7a, ac_t1_mul_env},15431// Bomberman64-2 intro. Added by Gonetz15432// (prim-0)*env+015433{0x0f7b0f7b, ac_prim_mul_env},15434// Text box, mario15435//z (shade-0)*env+015436{0x0f7c0f7c, ac_env_mul_shade},15437// Ogre battle 6415438// (env-0)*env+015439{0x0f7d0f7d, ac_env},15440//Goldeneye, [Jeremy]. Added by Gonetz15441// (1-0)*env+0, (cmb-0)*shade+015442{0x0f7e0f38, ac_env_mul_shade},15443// Status items, megaman15444// (1-0)*env+015445{0x0f7e0f7e, ac_env},15446// gun fire, Beast_Wars_Transmetal [Raziel64]15447// (0-0)*env+015448{0x0f7f0f7f, ac_zero},15449// Pokemon attack, Pokemon stadium (J). Added by Gonetz15450// (t1-t0)*primlod+0, (cmb-0)*env+prim ** INC **15451{0x0f8a0778, ac__t1_sub_t0_mul_primlod__mul_env_add_prim},15452// Shadow Ball, Pokemon Stadium 2 [gokuss4]. Added by Gonetz15453// (t1-t0)*primlod+0, (t1-cmb)*prim+0 ** INC **15454{0x0f8a0ec2, ac_t0_mul_prim},15455// Walls of well through lens of truth, zelda15456// (prim-t0)*primlod+015457{0x0f8b0f8b, ac_prim_sub_t0},15458// N64 logo, ridge racer. Added by Gonetz15459// (1-prim)*primlod+0 **INC**15460{0x0f9e0f9e, ac_zero},15461// Vines that covers a door in the third room of woodfall temple, zelda 2 [Ogy]. Added by Gonetz15462// (t0-0)*primlod+0, (cmb-0)*prim+015463{0x0fb90ef8, ac_t0_mul_primlod_mul_prim},15464// zelda 2. Added by Gonetz15465// (t0-0)*primlod+015466{0x0fb90fb9, ac_t0_mul_primlod},15467// NFL Blitz logo. Added by Gonetz15468// (t1-0)*primlod+015469{0x0fba0fba, ac_t1_mul_primlod}, //causes issues15470// fallen stars at star summit, Paper Mario. Added by Gonetz15471// (shade-0)*primlod+015472{0x0fbc0fbc, ac_primlod_mul_shade},15473// expansion pack, Jeremy McGrath Supercross 2000. Added by Gonetz15474// (1-0)*primlod+015475{0x0fbe0fbe, ac_primlod},15476// intro, Aidyn Chronicles. Added by Gonetz15477// (0-0)*primlod+0, (prim-env)*t0+prim **INC**15478{0x0fbf066b, ac_t0_mul_prim},15479// sky, Rayman2. Added by Gonetz15480// (0-shade)*0+015481{0x0fe70fe7, ac_zero},15482// flame, PokemonStadium1 [Raziel64]15483// (t0-0)*0+015484{0x0ff90ff9, ac_zero},15485//BAR15486// (0-0)*0+0, (0-0)*0+TEXEL115487{0x0fff05ff, ac_t0},15488// Screen clear, banjo kazooie15489// (0-0)*0+015490{0x0fff0fff, ac_zero},15491// { #ACEND }15492};1549315494// CountCombine - count the # of entries in the combine lists15495void CountCombine ()15496{15497int size = sizeof(color_cmb_list) / sizeof(COMBINER);15498int i=0, index=0, a, b;15499do {15500a = color_cmb_list[index].key >> 24;15501for (; i<=a; i++)15502cc_lookup[i] = index;1550315504while (index < size)15505{15506b = color_cmb_list[index].key >> 24;15507if (b != a) break;15508index ++;15509}15510} while (index < size);15511for (; i<257; i++) cc_lookup[i] = index;1551215513size = sizeof(alpha_cmb_list) / sizeof(COMBINER);15514i=0, index=0;15515do {15516a = (alpha_cmb_list[index].key >> 20) & 0xFF;15517for (; i<=a; i++)15518ac_lookup[i] = index;1551915520while (index < size)15521{15522b = (alpha_cmb_list[index].key >> 20) & 0xFF;15523if (b != a) break;15524index ++;15525}15526} while (index < size);15527for (; i<257; i++) ac_lookup[i] = index;1552815529//color_cmb_list_count = sizeof(color_cmb_list) >> 3; // #bytes/4/215530//alpha_cmb_list_count = sizeof(alpha_cmb_list) >> 3;15531}1553215533//****************************************************************15534// Main Combine15535//****************************************************************1553615537void Combine ()15538{15539FRDP (" | |- color combine: %08lx, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",15540((rdp.cycle1 & 0xFFFF) << 16) | (rdp.cycle2 & 0xFFFF),15541Mode0[rdp.cycle1&0xF], Mode1[(rdp.cycle1>>4)&0xF], Mode2[(rdp.cycle1>>8)&0x1F], Mode3[(rdp.cycle1>>13)&7],15542Mode0[rdp.cycle2&0xF], Mode1[(rdp.cycle2>>4)&0xF], Mode2[(rdp.cycle2>>8)&0x1F], Mode3[(rdp.cycle2>>13)&7]);15543FRDP (" | |- alpha combine: %08lx, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",15544(rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 & 0x0FFF0000) >> 16),15545Alpha0[(rdp.cycle1>>16)&7], Alpha1[(rdp.cycle1>>19)&7], Alpha2[(rdp.cycle1>>22)&7], Alpha3[(rdp.cycle1>>25)&7],15546Alpha0[(rdp.cycle2>>16)&7], Alpha1[(rdp.cycle2>>19)&7], Alpha2[(rdp.cycle2>>22)&7], Alpha3[(rdp.cycle2>>25)&7]);15547if (!rdp.LOD_en || rdp.cur_tile == rdp.mipmap_level)15548lod_frac = rdp.prim_lodfrac;15549else if (settings.lodmode == 0)15550lod_frac = 0;15551else15552lod_frac = 10;1555315554rdp.noise = RDP::noise_none;1555515556wxUint32 found = TRUE;1555715558rdp.col[0] = rdp.col[1] = rdp.col[2] = rdp.col[3] =15559rdp.coladd[0] = rdp.coladd[1] = rdp.coladd[2] = rdp.coladd[3] = 1.0f;15560rdp.cmb_flags = rdp.cmb_flags_2 = 0;1556115562rdp.uncombined = 0;1556315564cmb.tex = 0;15565cmb.tmu0_func = cmb.tmu1_func = cmb.tmu0_a_func = cmb.tmu1_a_func = GR_COMBINE_FUNCTION_ZERO;15566cmb.tmu0_fac = cmb.tmu1_fac = cmb.tmu0_a_fac = cmb.tmu1_a_fac = GR_COMBINE_FACTOR_NONE;15567cmb.tmu0_invert = cmb.tmu0_a_invert = cmb.tmu1_invert = cmb.tmu1_a_invert = FXFALSE;1556815569cmb.dc0_detailmax = cmb.dc1_detailmax = 0;1557015571cmb.mod_0 = cmb.mod_1 = 0; // remove all modifications15572cmb.modcolor_0 = cmb.modcolor1_0 = cmb.modcolor2_0 = cmb.modcolor_1 = cmb.modcolor1_1 = cmb.modcolor2_115573= cmb.modfactor_0 = cmb.modfactor_1 = 0;1557415575cmb.ccolor = cmb.tex_ccolor = 0;15576if (cmb.cmb_ext_use || cmb.tex_cmb_ext_use)15577{15578//have to draw something to allow use of standard combine functions15579if (fullscreen)15580{15581VERTEX v;15582memset(&v,0,sizeof(v));15583grDrawPoint(&v);15584}15585cmb.cmb_ext_use = 0;15586cmb.tex_cmb_ext_use = 0;15587}1558815589wxUint32 cmb_mode_c = (rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF);15590wxUint32 cmb_mode_a = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF);1559115592cmb.abf1 = GR_BLEND_SRC_ALPHA;15593cmb.abf2 = GR_BLEND_ONE_MINUS_SRC_ALPHA;1559415595#ifdef FASTSEARCH15596// Fast, ordered search15597int current=0x7FFFFFFF, last;15598wxUint32 actual_combine, current_combine, color_combine, alpha_combine;15599int left, right;1560015601actual_combine = current_combine = cmb_mode_c;15602color_combine = actual_combine;15603if ((rdp.cycle2 & 0xFFFF) == 0x1FFF)15604actual_combine = (rdp.cycle1 << 16) | (rdp.cycle1 & 0xFFFF);1560515606left = cc_lookup[actual_combine>>24];15607right = cc_lookup[(actual_combine>>24)+1];1560815609while (1)15610{15611last = current;15612current = left + ((right-left) >> 1);15613if (current == last)15614break; // can't be found!1561515616current_combine = color_cmb_list[current].key;15617if (current_combine < actual_combine)15618left = current;15619else if (current_combine > actual_combine)15620right = current;15621else15622break; // found it!15623}1562415625// Check if we didn't find it15626if (actual_combine != current_combine)15627{15628rdp.uncombined |= 1;15629#ifdef UNIMP_LOG15630if (settings.log_unk)15631{15632sprintf (out_buf, "COLOR combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",15633actual_combine,15634Mode0[rdp.cycle1&0xF], Mode1[(rdp.cycle1>>4)&0xF], Mode2[(rdp.cycle1>>8)&0x1F], Mode3[(rdp.cycle1>>13)&7],15635Mode0[rdp.cycle2&0xF], Mode1[(rdp.cycle2>>4)&0xF], Mode2[(rdp.cycle2>>8)&0x1F], Mode3[(rdp.cycle2>>13)&7]);15636UNIMPMODE();15637}15638#endif15639found = FALSE;15640//tex |= 3;1564115642// use t0 as default15643cc_t0 ();15644}15645else15646color_cmb_list[current].func();1564715648LRDP(" | |- Color done\n");1564915650// Now again for alpha15651current = 0x7FFFFFFF;15652actual_combine = cmb_mode_a;15653alpha_combine = actual_combine;15654if ((rdp.cycle2 & 0x0FFF0000) == 0x01FF0000)15655actual_combine = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle1 >> 16) & 0x00000FFF);15656if ((rdp.cycle1 & 0x0FFF0000) == 0x0FFF0000)15657actual_combine = (rdp.cycle2 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF);1565815659left = ac_lookup[(actual_combine>>20)&0xFF];15660right = ac_lookup[((actual_combine>>20)&0xFF)+1];1566115662while (1)15663{15664last = current;15665current = left + ((right-left) >> 1);15666if (current == last)15667break; // can't be found!1566815669current_combine = alpha_cmb_list[current].key;15670if (current_combine < actual_combine)15671left = current;15672else if (current_combine > actual_combine)15673right = current;15674else15675break; // found it!15676}1567715678// Check if we didn't find it15679if (actual_combine != current_combine || !found)15680{15681if (actual_combine != current_combine)15682{15683rdp.uncombined |= 2;15684#ifdef UNIMP_LOG15685if (settings.log_unk)15686{15687sprintf (out_buf, "ALPHA combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",15688actual_combine,15689Alpha0[(rdp.cycle1>>16)&7], Alpha1[(rdp.cycle1>>19)&7], Alpha2[(rdp.cycle1>>22)&7], Alpha3[(rdp.cycle1>>25)&7],15690Alpha0[(rdp.cycle2>>16)&7], Alpha1[(rdp.cycle2>>19)&7], Alpha2[(rdp.cycle2>>22)&7], Alpha3[(rdp.cycle2>>25)&7]);15691UNIMPMODE();15692}15693#endif15694}15695if (settings.unk_as_red)15696{15697BrightRed ();15698}15699else15700{15701// use full alpha as default15702ac_t0 ();15703}15704//tex |= 3;15705}15706else15707alpha_cmb_list[current].func();157081570915710if (color_combine == 0x69351fff) //text, PD, need to change texture alpha15711{15712A_USE_T1();15713}15714else if ((color_combine == 0x3fff1fff) && (alpha_combine == 0x03ff03ff) && (rdp.last_tile > rdp.cur_tile))//Dr. Mario15715{15716cc_t0();15717ac_t1();15718}15719else if (color_combine == 0x613522f0 && (settings.hacks&hack_PMario)) //Paper Mario fortune teller spheres15720{15721ac_t0();15722}1572315724LRDP(" | |- Alpha done\n");15725#endif // FASTSEARCH1572615727CombineBlender ();15728//*15729// Update textures?15730// if (tex == 2 && rdp.texrecting && (cmb.tmu1_func != GR_COMBINE_FUNCTION_ZERO) && (rdp.last_tile_size == 0))15731if (cmb.tex == 2 && rdp.texrecting && (rdp.cur_tile == rdp.last_tile_size))15732{15733cmb.tex = 0;15734USE_T0();15735A_USE_T0();15736}15737//*/15738rdp.tex = cmb.tex;1573915740if (fullscreen)15741{15742TBUFF_COLOR_IMAGE * aTBuff[2] = {0, 0};15743if (rdp.aTBuffTex[0])15744aTBuff[rdp.aTBuffTex[0]->tile] = rdp.aTBuffTex[0];15745if (rdp.aTBuffTex[1])15746aTBuff[rdp.aTBuffTex[1]->tile] = rdp.aTBuffTex[1];15747if (cmb.tex && (aTBuff[0] || aTBuff[1]))15748{15749if (aTBuff[0] && (settings.frame_buffer&fb_read_alpha))15750{15751if ((settings.hacks&hack_PMario) && aTBuff[0]->width == rdp.ci_width)15752;15753else15754{15755grChromakeyValue(0);15756grChromakeyMode(GR_CHROMAKEY_ENABLE);15757}15758}15759else15760grChromakeyMode(GR_CHROMAKEY_DISABLE);1576115762if (aTBuff[0] && aTBuff[0]->info.format == GR_TEXFMT_ALPHA_INTENSITY_88)15763{15764if (cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_COLOR)15765{15766if (cmb.t0c_ext_a == GR_CMBX_LOCAL_TEXTURE_RGB)15767cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;15768if (cmb.t0c_ext_b == GR_CMBX_LOCAL_TEXTURE_RGB)15769cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;15770if (cmb.t0c_ext_c == GR_CMBX_LOCAL_TEXTURE_RGB)15771cmb.t0c_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;15772}15773else15774cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;15775}1577615777if (aTBuff[1] && aTBuff[1]->info.format == GR_TEXFMT_ALPHA_INTENSITY_88)15778{15779if (cmb.tex_cmb_ext_use & TEX_COMBINE_EXT_COLOR)15780{15781if (cmb.t1c_ext_a == GR_CMBX_LOCAL_TEXTURE_RGB)15782cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;15783if (cmb.t1c_ext_b == GR_CMBX_LOCAL_TEXTURE_RGB)15784cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;15785if (cmb.t1c_ext_c == GR_CMBX_LOCAL_TEXTURE_RGB)15786cmb.t1c_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;15787}15788else15789cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;15790}15791}15792else15793grChromakeyMode(GR_CHROMAKEY_DISABLE);15794}15795cmb.shade_mod_hash = (rdp.cmb_flags + rdp.cmb_flags_2) * (rdp.prim_color + rdp.env_color + rdp.K5);1579615797LRDP(" | + Combine end\n");15798}1579915800void CombineBlender ()15801{15802wxUint32 blendmode = rdp.othermode_l >> 16;15803// Check force-blending15804if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))15805{15806switch (blendmode)15807{15808// Mace objects15809case 0x0382:15810case 0x0091:15811// 1080 sky15812case 0x0c08:15813// Mario kart player select15814// clr_in * 0 + clr_in * 115815// - or just clr_in, no matter what alpha15816case 0x0f0a:15817//DK64 blue prints15818case 0x0302:15819//Sin and Punishment15820case 0xcb02:15821// Battlezone15822// clr_in * a + clr_in * (1-a)15823case 0xc800:15824case 0x00c0:15825//ISS6415826case 0xc302:15827A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);15828break;1582915830//Space Invaders15831case 0x0448:15832case 0x055a:15833A_BLEND (GR_BLEND_ONE, GR_BLEND_ONE);15834break;1583515836// LOT in Zelda: MM15837case 0xaf50:15838case 0x0f5a: //clr_in * 0 + clr_mem * 115839A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);15840break;1584115842case 0x5f50: //clr_mem * 0 + clr_mem * (1-a)15843A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE_MINUS_SRC_ALPHA);15844break;1584515846/*15847case 0xc410: // Perfect Dark Mauler15848{15849MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);15850MOD_0_COL (rdp.fog_color & 0xFFFFFF00);15851MOD_0_FAC (rdp.fog_color & 0xFF);15852INTERSHADE_2 (rdp.fog_color & 0xFFFFFF00, rdp.fog_color & 0xFF);1585315854float percent = (rdp.fog_color & 0xFF) / 255.0f;15855cmb.ccolor =15856((wxUint32)(((cmb.ccolor >> 24) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) * percent) << 24) |15857((wxUint32)(((cmb.ccolor >> 16) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) * percent) << 16) |15858((wxUint32)(((cmb.ccolor >> 8) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) * percent) << 8) |15859(cmb.ccolor & 0xFF);1586015861rdp.col[0] = rdp.col[0] * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) / 255.0f * percent;15862rdp.col[1] = rdp.col[1] * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) / 255.0f * percent;15863rdp.col[2] = rdp.col[2] * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) / 255.0f * percent;15864A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);15865}15866break;15867*/15868case 0xf550: //clr_fog * a_fog + clr_mem * (1-a)15869A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);15870{15871wxUint32 prim = rdp.prim_color;15872rdp.prim_color = rdp.fog_color;15873cc_prim();15874ac_prim();15875rdp.prim_color = prim;15876}15877break;1587815879case 0x0150: //spiderman15880case 0x0d18: //clr_in * a_fog + clr_mem * (1-a)15881A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);15882if (rdp.cycle_mode == 1 && rdp.cycle2 != 0x01ff1fff)15883{15884wxUint32 prim = rdp.prim_color;15885rdp.prim_color = rdp.fog_color;15886ac_prim();15887rdp.prim_color = prim;15888}15889break;1589015891case 0xc912: //40 winks, clr_in * a_fog + clr_mem * 115892{15893wxUint32 prim = rdp.prim_color;15894rdp.prim_color = rdp.fog_color;15895ac_prim();15896rdp.prim_color = prim;15897}15898A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE);15899break;1590015901default:15902A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);15903}15904}15905/*15906else if (blendmode == 0xc411) // Super Smash Bros, faked fog for flashing characters15907{15908MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);15909MOD_0_COL (rdp.fog_color & 0xFFFFFF00);15910MOD_0_FAC (rdp.fog_color & 0xFF);15911INTERSHADE_2 (rdp.fog_color & 0xFFFFFF00, rdp.fog_color & 0xFF);1591215913float percent = (rdp.fog_color & 0xFF) / 255.0f;15914cmb.ccolor =15915((wxUint32)(((cmb.ccolor >> 24) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) * percent) << 24) |15916((wxUint32)(((cmb.ccolor >> 16) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) * percent) << 16) |15917((wxUint32)(((cmb.ccolor >> 8) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) * percent) << 8) |15918(cmb.ccolor & 0xFF);1591915920rdp.col[0] = rdp.col[0] * (1.0f-percent) + ((rdp.fog_color>>24) & 0xFF) / 255.0f * percent;15921rdp.col[1] = rdp.col[1] * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) / 255.0f * percent;15922rdp.col[2] = rdp.col[2] * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) / 255.0f * percent;15923A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);15924}15925*/15926else if (blendmode == 0x0040) // Mia Soccer Lights15927A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);15928else if ((settings.hacks&hack_Pilotwings) && (rdp.othermode_l & 0x80)) //CLR_ON_CVG without FORCE_BL15929A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);15930else15931A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);1593215933// ALPHA_CVG_SEL means full alpha15934// The reason it wasn't working before was because I wasn't handling rdp:setothermode15935// if (rdp.othermode_l & 0x2000)15936if ((rdp.othermode_l & 0x2000) && ((rdp.othermode_l & 0x7000) != 0x7000))15937{15938if ((settings.hacks&hack_PMario) && (blendmode == 0x5055))15939{15940A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);15941}15942else if (blendmode == 0x4055) // Mario Golf15943{15944A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);15945}15946else15947{15948A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);15949}15950}1595115952//hack15953//*15954if (settings.hacks&hack_ISS64)15955{15956if (rdp.othermode_l == 0xff5a6379)15957{15958A_BLEND (GR_BLEND_ZERO, GR_BLEND_SRC_ALPHA);15959}15960else if (rdp.othermode_l == 0x00504dd9) //players shadows. CVG_DST_WRAP15961{15962A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);15963}15964}15965else if (settings.hacks&hack_TGR)15966{15967if (rdp.othermode_l == 0x0f0a0235)15968{15969A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);15970}15971}15972//*/15973}1597415975void InitCombine ()15976{15977LOG ("InitCombine() ");15978memset(&cmb, 0, sizeof(cmb));15979const char *extensions = grGetString (GR_EXTENSION);15980if (const char * extstr = strstr(extensions, "COMBINE")) {15981if (!strncmp(extstr, "COMBINE", 7)) {15982LOG ("extensions ");15983char strColorCombineExt[] = "grColorCombineExt";15984cmb.grColorCombineExt = (GRCOLORCOMBINEEXT) grGetProcAddress(strColorCombineExt);15985char strAlphaCombineExt[] = "grAlphaCombineExt";15986cmb.grAlphaCombineExt = (GRCOLORCOMBINEEXT) grGetProcAddress(strAlphaCombineExt);15987char strTexColorCombineExt[] = "grTexColorCombineExt";15988cmb.grTexColorCombineExt = (GRTEXCOLORCOMBINEEXT) grGetProcAddress(strTexColorCombineExt);15989char strTexAlphaCombineExt[] = "grTexAlphaCombineExt";15990cmb.grTexAlphaCombineExt = (GRTEXCOLORCOMBINEEXT) grGetProcAddress(strTexAlphaCombineExt);15991char strConstantColorValueExt[] = "grConstantColorValueExt";15992cmb.grConstantColorValueExt = (GRCONSTANTCOLORVALUEEXT) grGetProcAddress(strConstantColorValueExt);15993if (cmb.grColorCombineExt && cmb.grAlphaCombineExt &&15994cmb.grTexColorCombineExt && cmb.grTexAlphaCombineExt)15995{15996cmb.combine_ext = TRUE;15997LOG ("initialized.");15998}15999else16000{16001cmb.combine_ext = FALSE;16002}16003}16004}16005cmb.dc0_lodbias = cmb.dc1_lodbias = 31;16006cmb.dc0_detailscale = cmb.dc1_detailscale = 7;16007cmb.lodbias0 = cmb.lodbias1 = 1.0f;16008LOG ("\n");16009}1601016011void ColorCombinerToExtension ()16012{16013wxUint32 ext_local, ext_local_a, ext_other, ext_other_a;16014switch (cmb.c_loc)16015{16016case GR_COMBINE_LOCAL_ITERATED:16017ext_local = GR_CMBX_ITRGB;16018ext_local_a = GR_CMBX_ITALPHA;16019break;16020case GR_COMBINE_LOCAL_CONSTANT:16021ext_local = GR_CMBX_CONSTANT_COLOR;16022ext_local_a = GR_CMBX_CONSTANT_ALPHA;16023break;16024default:16025ext_local = GR_CMBX_ZERO;16026ext_local_a = GR_CMBX_ZERO;16027};16028switch (cmb.c_oth)16029{16030case GR_COMBINE_OTHER_ITERATED:16031ext_other = GR_CMBX_ITRGB;16032ext_other_a = GR_CMBX_ITALPHA;16033break;16034case GR_COMBINE_OTHER_TEXTURE:16035ext_other = GR_CMBX_TEXTURE_RGB;16036ext_other_a = GR_CMBX_TEXTURE_ALPHA;16037break;16038case GR_COMBINE_OTHER_CONSTANT:16039ext_other = GR_CMBX_CONSTANT_COLOR;16040ext_other_a = GR_CMBX_CONSTANT_ALPHA;16041break;16042default:16043ext_other = GR_CMBX_ZERO;16044ext_other_a = GR_CMBX_ZERO;16045};16046switch (cmb.c_fac)16047{16048case GR_COMBINE_FACTOR_ZERO:16049cmb.c_ext_c = GR_CMBX_ZERO;16050cmb.c_ext_c_invert = 0;16051break;16052case GR_COMBINE_FACTOR_ONE:16053cmb.c_ext_c = GR_CMBX_ZERO;16054cmb.c_ext_c_invert = 1;16055break;16056case GR_COMBINE_FACTOR_LOCAL:16057cmb.c_ext_c = ext_local;16058cmb.c_ext_c_invert = 0;16059break;16060case GR_COMBINE_FACTOR_LOCAL_ALPHA:16061cmb.c_ext_c = ext_local_a;16062cmb.c_ext_c_invert = 0;16063break;16064case GR_COMBINE_FACTOR_OTHER_ALPHA:16065cmb.c_ext_c = ext_other_a;16066cmb.c_ext_c_invert = 0;16067break;16068case GR_COMBINE_FACTOR_TEXTURE_RGB:16069cmb.c_ext_c = GR_CMBX_TEXTURE_RGB;16070cmb.c_ext_c_invert = 0;16071break;16072case GR_COMBINE_FACTOR_TEXTURE_ALPHA:16073cmb.c_ext_c = GR_CMBX_TEXTURE_ALPHA;16074cmb.c_ext_c_invert = 0;16075break;16076case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:16077cmb.c_ext_c = ext_local;16078cmb.c_ext_c_invert = 1;16079break;16080case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:16081cmb.c_ext_c = ext_local_a;16082cmb.c_ext_c_invert = 1;16083break;16084case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:16085cmb.c_ext_c = ext_other_a;16086cmb.c_ext_c_invert = 1;16087break;16088case GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA:16089cmb.c_ext_c = GR_CMBX_TEXTURE_ALPHA;16090cmb.c_ext_c_invert = 1;16091break;16092default:16093cmb.c_ext_c = GR_CMBX_ZERO;16094cmb.c_ext_c_invert = 0;16095}1609616097switch (cmb.c_fnc)16098{16099case GR_COMBINE_FUNCTION_ZERO:16100cmb.c_ext_a = GR_CMBX_ZERO;16101cmb.c_ext_a_mode = GR_FUNC_MODE_X;16102cmb.c_ext_b = GR_CMBX_ZERO;16103cmb.c_ext_b_mode = GR_FUNC_MODE_X;16104cmb.c_ext_c = GR_CMBX_ZERO;16105cmb.c_ext_c_invert = 0;16106cmb.c_ext_d = GR_CMBX_ZERO;16107cmb.c_ext_d_invert = 0;16108break;16109case GR_COMBINE_FUNCTION_LOCAL:16110cmb.c_ext_a = ext_local;16111cmb.c_ext_a_mode = GR_FUNC_MODE_X;16112cmb.c_ext_b = GR_CMBX_ZERO;16113cmb.c_ext_b_mode = GR_FUNC_MODE_X;16114cmb.c_ext_c = GR_CMBX_ZERO;16115cmb.c_ext_c_invert = 1;16116cmb.c_ext_d = GR_CMBX_ZERO;16117cmb.c_ext_d_invert = 0;16118break;16119case GR_COMBINE_FUNCTION_LOCAL_ALPHA:16120cmb.c_ext_a = ext_local_a;16121cmb.c_ext_a_mode = GR_FUNC_MODE_X;16122cmb.c_ext_b = GR_CMBX_ZERO;16123cmb.c_ext_b_mode = GR_FUNC_MODE_X;16124cmb.c_ext_c = GR_CMBX_ZERO;16125cmb.c_ext_c_invert = 1;16126cmb.c_ext_d = GR_CMBX_ZERO;16127cmb.c_ext_d_invert = 0;16128break;16129case GR_COMBINE_FUNCTION_SCALE_OTHER:16130cmb.c_ext_a = ext_other;16131cmb.c_ext_a_mode = GR_FUNC_MODE_X;16132cmb.c_ext_b = GR_CMBX_ZERO;16133cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;16134cmb.c_ext_d = GR_CMBX_ZERO;16135cmb.c_ext_d_invert = 0;16136break;16137case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:16138cmb.c_ext_a = ext_other;16139cmb.c_ext_a_mode = GR_FUNC_MODE_X;16140cmb.c_ext_b = ext_local;16141cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;16142cmb.c_ext_d = GR_CMBX_B;16143cmb.c_ext_d_invert = 0;16144break;16145case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:16146cmb.c_ext_a = ext_other;16147cmb.c_ext_a_mode = GR_FUNC_MODE_X;16148cmb.c_ext_b = ext_local_a;16149cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;16150cmb.c_ext_d = GR_CMBX_B;16151cmb.c_ext_d_invert = 0;16152break;16153case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:16154cmb.c_ext_a = ext_other;16155cmb.c_ext_a_mode = GR_FUNC_MODE_X;16156cmb.c_ext_b = ext_local;16157cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16158cmb.c_ext_d = GR_CMBX_ZERO;16159cmb.c_ext_d_invert = 0;16160break;16161case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:16162cmb.c_ext_a = ext_other;16163cmb.c_ext_a_mode = GR_FUNC_MODE_X;16164cmb.c_ext_b = ext_local;16165cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16166cmb.c_ext_d = GR_CMBX_B;16167cmb.c_ext_d_invert = 0;16168break;16169case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:16170cmb.c_ext_a = ext_other;16171cmb.c_ext_a_mode = GR_FUNC_MODE_X;16172cmb.c_ext_b = ext_local;16173cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16174cmb.c_ext_d = GR_CMBX_ALOCAL;16175cmb.c_ext_d_invert = 0;16176break;16177case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:16178cmb.c_ext_a = GR_CMBX_ZERO;16179cmb.c_ext_a_mode = GR_FUNC_MODE_ZERO;16180cmb.c_ext_b = ext_local;16181cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16182cmb.c_ext_d = GR_CMBX_B;16183cmb.c_ext_d_invert = 0;16184break;16185case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:16186default:16187cmb.c_ext_a = GR_CMBX_ZERO;16188cmb.c_ext_a_mode = GR_FUNC_MODE_ZERO;16189cmb.c_ext_b = ext_local;16190cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16191cmb.c_ext_d = GR_CMBX_ALOCAL;16192cmb.c_ext_d_invert = 0;16193break;16194}16195}1619616197void AlphaCombinerToExtension ()16198{16199wxUint32 ext_local, ext_other;16200switch (cmb.a_loc)16201{16202case GR_COMBINE_LOCAL_ITERATED:16203ext_local = GR_CMBX_ITALPHA;16204break;16205case GR_COMBINE_LOCAL_CONSTANT:16206ext_local = GR_CMBX_CONSTANT_ALPHA;16207break;16208default:16209ext_local = GR_CMBX_ZERO;16210};16211switch (cmb.a_oth)16212{16213case GR_COMBINE_OTHER_ITERATED:16214ext_other = GR_CMBX_ITALPHA;16215break;16216case GR_COMBINE_OTHER_TEXTURE:16217ext_other = GR_CMBX_TEXTURE_ALPHA;16218break;16219case GR_COMBINE_OTHER_CONSTANT:16220ext_other = GR_CMBX_CONSTANT_ALPHA;16221break;16222default:16223ext_other = GR_CMBX_ZERO;16224};16225switch (cmb.a_fac)16226{16227case GR_COMBINE_FACTOR_ZERO:16228cmb.a_ext_c = GR_CMBX_ZERO;16229cmb.a_ext_c_invert = 0;16230break;16231case GR_COMBINE_FACTOR_ONE:16232cmb.a_ext_c = GR_CMBX_ZERO;16233cmb.a_ext_c_invert = 1;16234break;16235case GR_COMBINE_FACTOR_LOCAL:16236case GR_COMBINE_FACTOR_LOCAL_ALPHA:16237cmb.a_ext_c = ext_local;16238cmb.a_ext_c_invert = 0;16239break;16240case GR_COMBINE_FACTOR_OTHER_ALPHA:16241cmb.a_ext_c = ext_other;16242cmb.a_ext_c_invert = 0;16243break;16244case GR_COMBINE_FACTOR_TEXTURE_ALPHA:16245cmb.a_ext_c = GR_CMBX_TEXTURE_ALPHA;16246cmb.a_ext_c_invert = 0;16247break;16248case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:16249case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:16250cmb.a_ext_c = ext_local;16251cmb.a_ext_c_invert = 1;16252break;16253case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:16254cmb.a_ext_c = ext_other;16255cmb.a_ext_c_invert = 1;16256break;16257case GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA:16258cmb.a_ext_c = GR_CMBX_TEXTURE_ALPHA;16259cmb.a_ext_c_invert = 1;16260break;16261default:16262cmb.a_ext_c = GR_CMBX_ZERO;16263cmb.a_ext_c_invert = 0;16264}1626516266switch (cmb.a_fnc)16267{16268case GR_COMBINE_FUNCTION_ZERO:16269cmb.a_ext_a = GR_CMBX_ZERO;16270cmb.a_ext_a_mode = GR_FUNC_MODE_X;16271cmb.a_ext_b = GR_CMBX_ZERO;16272cmb.a_ext_b_mode = GR_FUNC_MODE_X;16273cmb.a_ext_c = GR_CMBX_ZERO;16274cmb.a_ext_c_invert = 0;16275cmb.a_ext_d = GR_CMBX_ZERO;16276cmb.a_ext_d_invert = 0;16277break;16278case GR_COMBINE_FUNCTION_LOCAL:16279case GR_COMBINE_FUNCTION_LOCAL_ALPHA:16280cmb.a_ext_a = GR_CMBX_ZERO;16281cmb.a_ext_a_mode = GR_FUNC_MODE_ZERO;16282cmb.a_ext_b = ext_local;16283cmb.a_ext_b_mode = GR_FUNC_MODE_X;16284cmb.a_ext_c = GR_CMBX_ZERO;16285cmb.a_ext_c_invert = 1;16286cmb.a_ext_d = GR_CMBX_ZERO;16287cmb.a_ext_d_invert = 0;16288break;16289case GR_COMBINE_FUNCTION_SCALE_OTHER:16290cmb.a_ext_a = ext_other;16291cmb.a_ext_a_mode = GR_FUNC_MODE_X;16292cmb.a_ext_b = GR_CMBX_ZERO;16293cmb.a_ext_b_mode = GR_FUNC_MODE_ZERO;16294cmb.a_ext_d = GR_CMBX_ZERO;16295cmb.a_ext_d_invert = 0;16296break;16297case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:16298case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:16299cmb.a_ext_a = ext_other;16300cmb.a_ext_a_mode = GR_FUNC_MODE_X;16301cmb.a_ext_b = ext_local;16302cmb.a_ext_b_mode = GR_FUNC_MODE_ZERO;16303cmb.a_ext_d = GR_CMBX_B;16304cmb.a_ext_d_invert = 0;16305break;16306case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:16307cmb.a_ext_a = ext_other;16308cmb.a_ext_a_mode = GR_FUNC_MODE_X;16309cmb.a_ext_b = ext_local;16310cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16311cmb.a_ext_d = GR_CMBX_ZERO;16312cmb.a_ext_d_invert = 0;16313break;16314case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:16315case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:16316cmb.a_ext_a = ext_other;16317cmb.a_ext_a_mode = GR_FUNC_MODE_X;16318cmb.a_ext_b = ext_local;16319cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16320cmb.a_ext_d = GR_CMBX_B;16321cmb.a_ext_d_invert = 0;16322break;16323case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:16324case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:16325cmb.a_ext_a = GR_CMBX_ZERO;16326cmb.a_ext_a_mode = GR_FUNC_MODE_ZERO;16327cmb.a_ext_b = ext_local;16328cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16329cmb.a_ext_d = GR_CMBX_B;16330cmb.a_ext_d_invert = 0;16331break;16332}16333}1633416335void TexColorCombinerToExtension (GrChipID_t tmu)16336{16337wxUint32 tc_ext_a, tc_ext_a_mode, tc_ext_b, tc_ext_b_mode, tc_ext_c, tc_ext_d;16338int tc_ext_c_invert, tc_ext_d_invert;16339wxUint32 tmu_func, tmu_fac;1634016341if (tmu == GR_TMU0)16342{16343tmu_func = cmb.tmu0_func;16344tmu_fac = cmb.tmu0_fac;16345}16346else16347{16348tmu_func = cmb.tmu1_func;16349tmu_fac = cmb.tmu1_fac;16350}1635116352switch (tmu_fac)16353{16354case GR_COMBINE_FACTOR_ZERO:16355tc_ext_c = GR_CMBX_ZERO;16356tc_ext_c_invert = 0;16357break;16358case GR_COMBINE_FACTOR_LOCAL:16359tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;16360tc_ext_c_invert = 0;16361break;16362case GR_COMBINE_FACTOR_LOCAL_ALPHA:16363tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;16364tc_ext_c_invert = 0;16365break;16366case GR_COMBINE_FACTOR_OTHER_ALPHA:16367tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;16368tc_ext_c_invert = 0;16369break;16370case GR_COMBINE_FACTOR_DETAIL_FACTOR:16371tc_ext_c = GR_CMBX_DETAIL_FACTOR;16372tc_ext_c_invert = 0;16373break;16374case GR_COMBINE_FACTOR_ONE:16375tc_ext_c = GR_CMBX_ZERO;16376tc_ext_c_invert = 1;16377break;16378case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:16379tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;16380tc_ext_c_invert = 1;16381break;16382case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:16383tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;16384tc_ext_c_invert = 1;16385break;16386case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:16387tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;16388tc_ext_c_invert = 1;16389break;16390case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:16391tc_ext_c = GR_CMBX_DETAIL_FACTOR;16392tc_ext_c_invert = 1;16393break;16394default:16395tc_ext_c = GR_CMBX_ZERO;16396tc_ext_c_invert = 0;16397break;16398}1639916400switch (tmu_func)16401{16402case GR_COMBINE_FUNCTION_ZERO:16403tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;16404tc_ext_a_mode = GR_FUNC_MODE_ZERO;16405tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;16406tc_ext_b_mode = GR_FUNC_MODE_ZERO;16407tc_ext_c = GR_CMBX_ZERO;16408tc_ext_c_invert = 0;16409tc_ext_d = GR_CMBX_ZERO;16410tc_ext_d_invert = 0;16411break;16412case GR_COMBINE_FUNCTION_LOCAL:16413tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;16414tc_ext_a_mode = GR_FUNC_MODE_X;16415tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;16416tc_ext_b_mode = GR_FUNC_MODE_ZERO;16417tc_ext_c = GR_CMBX_ZERO;16418tc_ext_c_invert = 1;16419tc_ext_d = GR_CMBX_ZERO;16420tc_ext_d_invert = 0;16421break;16422case GR_COMBINE_FUNCTION_LOCAL_ALPHA:16423tc_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;16424tc_ext_a_mode = GR_FUNC_MODE_X;16425tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;16426tc_ext_b_mode = GR_FUNC_MODE_ZERO;16427tc_ext_c = GR_CMBX_ZERO;16428tc_ext_c_invert = 1;16429tc_ext_d = GR_CMBX_ZERO;16430tc_ext_d_invert = 0;16431break;16432case GR_COMBINE_FUNCTION_SCALE_OTHER:16433tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;16434tc_ext_a_mode = GR_FUNC_MODE_X;16435tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;16436tc_ext_b_mode = GR_FUNC_MODE_ZERO;16437tc_ext_d = GR_CMBX_ZERO;16438tc_ext_d_invert = 0;16439break;16440case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:16441tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;16442tc_ext_a_mode = GR_FUNC_MODE_X;16443tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;16444tc_ext_b_mode = GR_FUNC_MODE_ZERO;16445tc_ext_d = GR_CMBX_B;16446tc_ext_d_invert = 0;16447break;16448case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:16449tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;16450tc_ext_a_mode = GR_FUNC_MODE_X;16451tc_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;16452tc_ext_b_mode = GR_FUNC_MODE_ZERO;16453tc_ext_d = GR_CMBX_B;16454tc_ext_d_invert = 0;16455break;16456case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:16457tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;16458tc_ext_a_mode = GR_FUNC_MODE_X;16459tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;16460tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16461tc_ext_d = GR_CMBX_ZERO;16462tc_ext_d_invert = 0;16463break;16464case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:16465tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;16466tc_ext_a_mode = GR_FUNC_MODE_X;16467tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;16468tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16469tc_ext_d = GR_CMBX_B;16470tc_ext_d_invert = 0;16471break;16472case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:16473tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;16474tc_ext_a_mode = GR_FUNC_MODE_X;16475tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;16476tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16477tc_ext_d = GR_CMBX_LOCAL_TEXTURE_ALPHA;16478tc_ext_d_invert = 0;16479break;16480case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:16481tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;16482tc_ext_a_mode = GR_FUNC_MODE_ZERO;16483tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;16484tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16485tc_ext_d = GR_CMBX_B;16486tc_ext_d_invert = 0;16487break;16488case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:16489tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;16490tc_ext_a_mode = GR_FUNC_MODE_ZERO;16491tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;16492tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16493tc_ext_d = GR_CMBX_LOCAL_TEXTURE_ALPHA;16494tc_ext_d_invert = 0;16495break;16496default:16497tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;16498tc_ext_a_mode = GR_FUNC_MODE_ZERO;16499tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;16500tc_ext_b_mode = GR_FUNC_MODE_ZERO;16501tc_ext_c = GR_CMBX_ZERO;16502tc_ext_c_invert = 0;16503tc_ext_d = GR_CMBX_ZERO;16504tc_ext_d_invert = 0;16505break;16506}1650716508if (tmu == GR_TMU0)16509{16510cmb.t0c_ext_a = tc_ext_a;16511cmb.t0c_ext_a_mode = tc_ext_a_mode;16512cmb.t0c_ext_b = tc_ext_b;16513cmb.t0c_ext_b_mode = tc_ext_b_mode;16514cmb.t0c_ext_c = tc_ext_c;16515cmb.t0c_ext_c_invert = tc_ext_c_invert;16516cmb.t0c_ext_d = tc_ext_d;16517cmb.t0c_ext_d_invert = tc_ext_d_invert;16518}16519else16520{16521cmb.t1c_ext_a = tc_ext_a;16522cmb.t1c_ext_a_mode = tc_ext_a_mode;16523cmb.t1c_ext_b = tc_ext_b;16524cmb.t1c_ext_b_mode = tc_ext_b_mode;16525cmb.t1c_ext_c = tc_ext_c;16526cmb.t1c_ext_c_invert = tc_ext_c_invert;16527cmb.t1c_ext_d = tc_ext_d;16528cmb.t1c_ext_d_invert = tc_ext_d_invert;16529}16530}1653116532void TexAlphaCombinerToExtension (GrChipID_t tmu)16533{16534wxUint32 ta_ext_a, ta_ext_a_mode, ta_ext_b, ta_ext_b_mode, ta_ext_c, ta_ext_d;16535int ta_ext_c_invert, ta_ext_d_invert;16536wxUint32 tmu_a_func, tmu_a_fac;1653716538if (tmu == GR_TMU0)16539{16540tmu_a_func = cmb.tmu0_a_func;16541tmu_a_fac = cmb.tmu0_a_fac;16542}16543else16544{16545tmu_a_func = cmb.tmu1_a_func;16546tmu_a_fac = cmb.tmu1_a_fac;16547}1654816549switch (tmu_a_fac)16550{16551case GR_COMBINE_FACTOR_ZERO:16552ta_ext_c = GR_CMBX_ZERO;16553ta_ext_c_invert = 0;16554break;16555case GR_COMBINE_FACTOR_LOCAL:16556case GR_COMBINE_FACTOR_LOCAL_ALPHA:16557ta_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;16558ta_ext_c_invert = 0;16559break;16560case GR_COMBINE_FACTOR_OTHER_ALPHA:16561ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;16562ta_ext_c_invert = 0;16563break;16564case GR_COMBINE_FACTOR_DETAIL_FACTOR:16565ta_ext_c = GR_CMBX_DETAIL_FACTOR;16566ta_ext_c_invert = 0;16567break;16568case GR_COMBINE_FACTOR_ONE:16569ta_ext_c = GR_CMBX_ZERO;16570ta_ext_c_invert = 1;16571break;16572case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:16573case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:16574ta_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;16575ta_ext_c_invert = 1;16576break;16577case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:16578ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;16579ta_ext_c_invert = 1;16580break;16581case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:16582ta_ext_c = GR_CMBX_DETAIL_FACTOR;16583ta_ext_c_invert = 1;16584break;16585default:16586ta_ext_c = GR_CMBX_ZERO;16587ta_ext_c_invert = 0;16588break;16589}1659016591switch (tmu_a_func)16592{16593case GR_COMBINE_FUNCTION_ZERO:16594ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;16595ta_ext_a_mode = GR_FUNC_MODE_ZERO;16596ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;16597ta_ext_b_mode = GR_FUNC_MODE_ZERO;16598ta_ext_c = GR_CMBX_ZERO;16599ta_ext_c_invert = 0;16600ta_ext_d = GR_CMBX_ZERO;16601ta_ext_d_invert = 0;16602break;16603case GR_COMBINE_FUNCTION_LOCAL:16604case GR_COMBINE_FUNCTION_LOCAL_ALPHA:16605ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;16606ta_ext_a_mode = GR_FUNC_MODE_X;16607ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;16608ta_ext_b_mode = GR_FUNC_MODE_ZERO;16609ta_ext_c = GR_CMBX_ZERO;16610ta_ext_c_invert = 1;16611ta_ext_d = GR_CMBX_ZERO;16612ta_ext_d_invert = 0;16613break;16614case GR_COMBINE_FUNCTION_SCALE_OTHER:16615ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;16616ta_ext_a_mode = GR_FUNC_MODE_X;16617ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;16618ta_ext_b_mode = GR_FUNC_MODE_ZERO;16619ta_ext_d = GR_CMBX_ZERO;16620ta_ext_d_invert = 0;16621break;16622case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:16623case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:16624ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;16625ta_ext_a_mode = GR_FUNC_MODE_X;16626ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;16627ta_ext_b_mode = GR_FUNC_MODE_ZERO;16628ta_ext_d = GR_CMBX_B;16629ta_ext_d_invert = 0;16630break;16631case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:16632ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;16633ta_ext_a_mode = GR_FUNC_MODE_X;16634ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;16635ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16636ta_ext_d = GR_CMBX_ZERO;16637ta_ext_d_invert = 0;16638break;16639case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:16640case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:16641ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;16642ta_ext_a_mode = GR_FUNC_MODE_X;16643ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;16644ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16645ta_ext_d = GR_CMBX_B;16646ta_ext_d_invert = 0;16647break;16648case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:16649case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:16650ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;16651ta_ext_a_mode = GR_FUNC_MODE_ZERO;16652ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;16653ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;16654ta_ext_d = GR_CMBX_B;16655ta_ext_d_invert = 0;16656break;16657default:16658ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;16659ta_ext_a_mode = GR_FUNC_MODE_ZERO;16660ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;16661ta_ext_b_mode = GR_FUNC_MODE_ZERO;16662ta_ext_c = GR_CMBX_ZERO;16663ta_ext_c_invert = 0;16664ta_ext_d = GR_CMBX_ZERO;16665ta_ext_d_invert = 0;16666break;16667}1666816669if (tmu == GR_TMU0)16670{16671cmb.t0a_ext_a = ta_ext_a;16672cmb.t0a_ext_a_mode = ta_ext_a_mode;16673cmb.t0a_ext_b = ta_ext_b;16674cmb.t0a_ext_b_mode = ta_ext_b_mode;16675cmb.t0a_ext_c = ta_ext_c;16676cmb.t0a_ext_c_invert = ta_ext_c_invert;16677cmb.t0a_ext_d = ta_ext_d;16678cmb.t0a_ext_d_invert = ta_ext_d_invert;16679}16680else16681{16682cmb.t1a_ext_a = ta_ext_a;16683cmb.t1a_ext_a_mode = ta_ext_a_mode;16684cmb.t1a_ext_b = ta_ext_b;16685cmb.t1a_ext_b_mode = ta_ext_b_mode;16686cmb.t1a_ext_c = ta_ext_c;16687cmb.t1a_ext_c_invert = ta_ext_c_invert;16688cmb.t1a_ext_d = ta_ext_d;16689cmb.t1a_ext_d_invert = ta_ext_d_invert;16690}16691}166921669316694