Path: blob/master/libmupen64plus/mupen64plus-video-glide64/src/Combine.cpp
2 views
/*1* Glide64 - Glide video plugin for Nintendo 64 emulators.2* Copyright (c) 2002 Dave20013* Copyright (c) 2008 Günther <[email protected]>4*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 Public16* Licence along with this program; if not, write to the Free17* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,18* Boston, MA 02110-1301, USA19*/2021//****************************************************************22//23// Glide64 - Glide Plugin for Nintendo 64 emulators (tested mostly with Project64)24// Project started on December 29th, 200125//26// To modify Glide64:27// * 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.28// * 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.29//30// Official Glide64 development channel: #Glide64 on EFnet31//32// Original author: Dave2001 ([email protected])33// Other authors: Gonetz, Gugaman34//35//****************************************************************36// March 08, 2002:37// * New combiner method by Gonetz and Dave200138//****************************************************************3940#define M64P_PLUGIN_PROTOTYPES 141#include "m64p_types.h"42#include "m64p_plugin.h"43#include "m64p_config.h"44#include "m64p_vidext.h"45#include "Util.h"46#include "Combine.h"4748#ifndef _WIN3249#include <string.h>50#endif // _WIN325152#define FASTSEARCH // Enable fast combine mode searching algorithm5354float percent_org, percent, r, g, b;55DWORD lod_frac;5657DWORD cc_lookup[257];58DWORD ac_lookup[257];59COMBINE cmb;6061//****************************************************************62// Macros63//****************************************************************6465#define MOD_0(mode) cmb.mod_0 = mode66#define MOD_0_COL(color) cmb.modcolor_0 = color67#define MOD_0_COL1(color) cmb.modcolor1_0 = color68#define MOD_0_COL2(color) cmb.modcolor2_0 = color69#define MOD_0_FAC(factor) cmb.modfactor_0 = factor70#define MOD_1(mode) cmb.mod_1 = mode71#define MOD_1_COL(color) cmb.modcolor_1 = color72#define MOD_1_COL1(color) cmb.modcolor1_1 = color73#define MOD_1_COL2(color) cmb.modcolor2_1 = color74#define MOD_1_FAC(factor) cmb.modfactor_1 = factor7576#define A_BLEND(f1,f2) cmb.abf1=f1,cmb.abf2=f27778// To make a color or alpha combine79#define CCMB(fnc,fac,loc,oth) \80cmb.c_fnc = fnc, \81cmb.c_fac = fac, \82cmb.c_loc = loc, \83cmb.c_oth = oth84#define ACMB(fnc,fac,loc,oth) \85cmb.a_fnc = fnc, \86cmb.a_fac = fac, \87cmb.a_loc = loc, \88cmb.a_oth = oth89#define CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \90cmb.c_ext_a = a, \91cmb.c_ext_a_mode = a_mode, \92cmb.c_ext_b = b, \93cmb.c_ext_b_mode = b_mode, \94cmb.c_ext_c = c, \95cmb.c_ext_c_invert = c_invert, \96cmb.c_ext_d= d, \97cmb.c_ext_d_invert = d_invert, \98cmb.cmb_ext_use |= COMBINE_EXT_COLOR99#define ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \100cmb.a_ext_a = a, \101cmb.a_ext_a_mode = a_mode, \102cmb.a_ext_b = b, \103cmb.a_ext_b_mode = b_mode, \104cmb.a_ext_c = c, \105cmb.a_ext_c_invert = c_invert, \106cmb.a_ext_d= d, \107cmb.a_ext_d_invert = d_invert, \108cmb.cmb_ext_use |= COMBINE_EXT_ALPHA109#define T0CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \110cmb.t0c_ext_a = a, \111cmb.t0c_ext_a_mode = a_mode, \112cmb.t0c_ext_b = b, \113cmb.t0c_ext_b_mode = b_mode, \114cmb.t0c_ext_c = c, \115cmb.t0c_ext_c_invert = c_invert, \116cmb.t0c_ext_d= d, \117cmb.t0c_ext_d_invert = d_invert, \118cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR119#define T0ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \120cmb.t0a_ext_a = a, \121cmb.t0a_ext_a_mode = a_mode, \122cmb.t0a_ext_b = b, \123cmb.t0a_ext_b_mode = b_mode, \124cmb.t0a_ext_c = c, \125cmb.t0a_ext_c_invert = c_invert, \126cmb.t0a_ext_d= d, \127cmb.t0a_ext_d_invert = d_invert, \128cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA129#define T1CCMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \130cmb.t1c_ext_a = a, \131cmb.t1c_ext_a_mode = a_mode, \132cmb.t1c_ext_b = b, \133cmb.t1c_ext_b_mode = b_mode, \134cmb.t1c_ext_c = c, \135cmb.t1c_ext_c_invert = c_invert, \136cmb.t1c_ext_d= d, \137cmb.t1c_ext_d_invert = d_invert, \138cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR139#define T1ACMBEXT(a,a_mode,b,b_mode,c,c_invert,d,d_invert) \140cmb.t1a_ext_a = a, \141cmb.t1a_ext_a_mode = a_mode, \142cmb.t1a_ext_b = b, \143cmb.t1a_ext_b_mode = b_mode, \144cmb.t1a_ext_c = c, \145cmb.t1a_ext_c_invert = c_invert, \146cmb.t1a_ext_d= d, \147cmb.t1a_ext_d_invert = d_invert, \148cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA149150// To use textures151#define USE_T0() \152rdp.best_tex = 0; \153cmb.tex |= 1, \154cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL155#define USE_T1() \156if (num_tmu > 1) { \157rdp.best_tex = 1; \158cmb.tex |= 2, \159cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \160cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \161cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE; \162} \163else { \164USE_T0(); \165}166#define T0_ADD_T1() \167rdp.best_tex = 0; \168cmb.tex |= 3, \169cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \170cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \171cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE172#define T0_MUL_T1() \173rdp.best_tex = 0; \174cmb.tex |= 3, \175cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \176cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \177cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL178#define T0_MUL_T1_ADD_T0() \179rdp.best_tex = 0; \180cmb.tex |= 3, \181cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \182cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \183cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL184#define T0A_MUL_T1() \185rdp.best_tex = 1; \186cmb.tex |= 3, \187cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \188cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \189cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA190#define T0_MUL_T1A() \191rdp.best_tex = 1; \192cmb.tex |= 3, \193cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA, \194cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \195cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL196#define T0_INTER_T1_USING_FACTOR(factor) \197if (factor == 0xFF) { \198USE_T1(); \199} \200else if (factor == 0x00) { \201USE_T0(); \202}\203else {\204if (factor <= 0x80) rdp.best_tex = 0; \205else rdp.best_tex = 1; \206cmb.tex |= 3, \207cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \208cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \209cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \210percent = (float)factor / 255.0f, \211cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \212}213#define T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\214if (factor == 0xFF) { \215USE_T0(); \216} \217else if (factor == 0x00) { \218USE_T1(); \219}\220else {\221if (factor <= 0x80) rdp.best_tex = 0; \222else rdp.best_tex = 1; \223cmb.tex |= 3, \224cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \225cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \226cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \227percent = (255 - factor) / 255.0f, \228cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \229}230#define T0_INTER_T1_USING_T0() \231rdp.best_tex = 0; \232cmb.tex |= 3, \233cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \234cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \235cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL236#define T1_INTER_T0_USING_T0() \237rdp.best_tex = 0; \238cmb.tex |= 3, \239cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \240cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \241cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL242#define T0_INTER_T1_USING_T1() \243if (!cmb.combine_ext) { \244T0_INTER_T1_USING_FACTOR(0x7F); \245}\246else {\247rdp.best_tex = 0; \248cmb.tex |= 3, \249cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \250cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \251cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \252cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \253cmb.t1c_ext_c = GR_CMBX_ZERO, \254cmb.t1c_ext_c_invert = 0, \255cmb.t1c_ext_d= GR_CMBX_B, \256cmb.t1c_ext_d_invert = 0, \257cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \258cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \259cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \260cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \261cmb.t0c_ext_c = GR_CMBX_OTHER_TEXTURE_RGB, \262cmb.t0c_ext_c_invert = 0, \263cmb.t0c_ext_d= GR_CMBX_B, \264cmb.t0c_ext_d_invert = 0, \265cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \266}267#define T0_INTER_T1_USING_T1A() \268rdp.best_tex = 0; \269cmb.tex |= 3, \270cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \271cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND, \272cmb.tmu0_fac = GR_COMBINE_FACTOR_OTHER_ALPHA273#define T0_INTER_T1_USING_PRIM() \274if (!cmb.combine_ext) { \275T0_INTER_T1_USING_FACTOR ((rdp.prim_color&0xFF)); \276}\277else {\278rdp.best_tex = 0; \279cmb.tex |= 3, \280cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \281cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \282cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \283cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \284cmb.t1c_ext_c = GR_CMBX_ZERO, \285cmb.t1c_ext_c_invert = 0, \286cmb.t1c_ext_d= GR_CMBX_B, \287cmb.t1c_ext_d_invert = 0, \288cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \289cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \290cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \291cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \292cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \293cmb.t0c_ext_c_invert = 0, \294cmb.t0c_ext_d= GR_CMBX_B, \295cmb.t0c_ext_d_invert = 0, \296cmb.tex_ccolor = rdp.prim_color, \297cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \298}299#define T1_INTER_T0_USING_PRIM() /* inverse of above */\300if (!cmb.combine_ext) { \301T1_INTER_T0_USING_FACTOR ((rdp.prim_color&0xFF)); \302}\303else {\304rdp.best_tex = 0; \305cmb.tex |= 3, \306cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \307cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \308cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \309cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \310cmb.t1c_ext_c = GR_CMBX_ZERO, \311cmb.t1c_ext_c_invert = 0, \312cmb.t1c_ext_d= GR_CMBX_B, \313cmb.t1c_ext_d_invert = 0, \314cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \315cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \316cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \317cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \318cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \319cmb.t0c_ext_c_invert = 0, \320cmb.t0c_ext_d= GR_CMBX_B, \321cmb.t0c_ext_d_invert = 0, \322cmb.tex_ccolor = rdp.prim_color, \323cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \324}325#define T0_INTER_T1_USING_ENV() \326if (!cmb.combine_ext) { \327T0_INTER_T1_USING_FACTOR ((rdp.env_color&0xFF)); \328}\329else {\330rdp.best_tex = 0; \331cmb.tex |= 3, \332cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \333cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \334cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \335cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \336cmb.t1c_ext_c = GR_CMBX_ZERO, \337cmb.t1c_ext_c_invert = 0, \338cmb.t1c_ext_d= GR_CMBX_B, \339cmb.t1c_ext_d_invert = 0, \340cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \341cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \342cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \343cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \344cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \345cmb.t0c_ext_c_invert = 0, \346cmb.t0c_ext_d= GR_CMBX_B, \347cmb.t0c_ext_d_invert = 0, \348cmb.tex_ccolor = rdp.env_color, \349cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \350}351#define T1_INTER_T0_USING_ENV() /* inverse of above */\352if (!cmb.combine_ext) { \353T1_INTER_T0_USING_FACTOR ((rdp.env_color&0xFF)); \354}\355else {\356rdp.best_tex = 0; \357cmb.tex |= 3, \358cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \359cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \360cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \361cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \362cmb.t1c_ext_c = GR_CMBX_ZERO, \363cmb.t1c_ext_c_invert = 0, \364cmb.t1c_ext_d= GR_CMBX_B, \365cmb.t1c_ext_d_invert = 0, \366cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \367cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \368cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \369cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \370cmb.t0c_ext_c = GR_CMBX_TMU_CCOLOR, \371cmb.t0c_ext_c_invert = 0, \372cmb.t0c_ext_d= GR_CMBX_B, \373cmb.t0c_ext_d_invert = 0, \374cmb.tex_ccolor = rdp.env_color, \375cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \376}377#define T0_INTER_T1_USING_SHADEA() \378if (!cmb.combine_ext) { \379T0_INTER_T1_USING_FACTOR (0x7F); \380}\381else {\382rdp.best_tex = 0; \383cmb.tex |= 3, \384cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \385cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \386cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \387cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \388cmb.t1c_ext_c = GR_CMBX_ZERO, \389cmb.t1c_ext_c_invert = 0, \390cmb.t1c_ext_d= GR_CMBX_B, \391cmb.t1c_ext_d_invert = 0, \392cmb.t0c_ext_a = GR_CMBX_OTHER_TEXTURE_RGB, \393cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \394cmb.t0c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \395cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \396cmb.t0c_ext_c = GR_CMBX_ITALPHA, \397cmb.t0c_ext_c_invert = 0, \398cmb.t0c_ext_d= GR_CMBX_B, \399cmb.t0c_ext_d_invert = 0, \400cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \401}402#define T1_INTER_T0_USING_SHADEA() \403if (!cmb.combine_ext) { \404T0_INTER_T1_USING_FACTOR (0x7F); \405}\406else {\407rdp.best_tex = 0; \408cmb.tex |= 3, \409cmb.t1c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \410cmb.t1c_ext_a_mode = GR_FUNC_MODE_ZERO, \411cmb.t1c_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB, \412cmb.t1c_ext_b_mode = GR_FUNC_MODE_ZERO, \413cmb.t1c_ext_c = GR_CMBX_ZERO, \414cmb.t1c_ext_c_invert = 0, \415cmb.t1c_ext_d= GR_CMBX_B, \416cmb.t1c_ext_d_invert = 0, \417cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \418cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \419cmb.t0c_ext_b = GR_CMBX_OTHER_TEXTURE_RGB, \420cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \421cmb.t0c_ext_c = GR_CMBX_ITALPHA, \422cmb.t0c_ext_c_invert = 0, \423cmb.t0c_ext_d= GR_CMBX_B, \424cmb.t0c_ext_d_invert = 0, \425cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \426}427#define T1_SUB_T0() \428rdp.best_tex = 0; \429cmb.tex |= 3, \430cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \431cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \432cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE433#define T1_SUB_T0_MUL_T0() \434rdp.best_tex = 0; \435cmb.tex |= 3, \436cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \437cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, \438cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL439#define T1_MUL_PRIMLOD_ADD_T0() \440rdp.best_tex = 0; \441cmb.tex |= 3, \442cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \443cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \444cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \445percent = (float)(lod_frac) / 255.0f, \446cmb.dc0_detailmax = cmb.dc1_detailmax = percent447#define T1_MUL_PRIMA_ADD_T0() \448rdp.best_tex = 0; \449cmb.tex |= 3, \450cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \451cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \452cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \453percent = (float)(rdp.prim_color&0xFF) / 255.0f, \454cmb.dc0_detailmax = cmb.dc1_detailmax = percent455#define T1_MUL_ENVA_ADD_T0() \456rdp.best_tex = 0; \457cmb.tex |= 3, \458cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL, \459cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \460cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \461percent = (float)(rdp.env_color&0xFF) / 255.0f, \462cmb.dc0_detailmax = cmb.dc1_detailmax = percent463#define T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1() \464T0_ADD_T1 (); \465MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC); \466MOD_0_COL (rdp.prim_color & 0xFFFFFF00); \467MOD_0_FAC (lod_frac & 0xFF);468#define T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0() \469if (cmb.combine_ext) \470{ \471T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X, \472GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X, \473GR_CMBX_DETAIL_FACTOR, 0, \474GR_CMBX_ZERO, 0); \475T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X, \476GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X, \477GR_CMBX_ZERO, 1, \478GR_CMBX_ZERO, 0); \479cmb.tex_ccolor = rdp.prim_color; \480cmb.tex |= 3; \481percent = (float)(lod_frac) / 255.0f; \482cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \483} \484else \485{ \486T0_ADD_T1 (); \487MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC); \488MOD_1_COL (rdp.prim_color & 0xFFFFFF00); \489MOD_1_FAC (lod_frac & 0xFF); \490}491#define PRIM_INTER_T0_USING_SHADEA() \492if (!cmb.combine_ext) { \493USE_T0 (); \494}\495else {\496rdp.best_tex = 0; \497cmb.tex |= 1, \498cmb.t0c_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB, \499cmb.t0c_ext_a_mode = GR_FUNC_MODE_X, \500cmb.t0c_ext_b = GR_CMBX_TMU_CCOLOR, \501cmb.t0c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \502cmb.t0c_ext_c = GR_CMBX_ITALPHA, \503cmb.t0c_ext_c_invert = 0, \504cmb.t0c_ext_d= GR_CMBX_B, \505cmb.t0c_ext_d_invert = 0, \506cmb.tex_ccolor = rdp.prim_color, \507cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_COLOR; \508}509510#define A_USE_T0() \511cmb.tex |= 1, \512cmb.tmu0_a_func = GR_COMBINE_FUNCTION_LOCAL513#define A_USE_T1() \514if (num_tmu > 1) { \515cmb.tex |= 2, \516cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \517cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \518cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE; \519} \520else { \521A_USE_T0(); \522}523#define A_T0_ADD_T1() \524cmb.tex |= 3, \525cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \526cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \527cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE528#define A_T0_SUB_T1() \529cmb.tex |= 3, \530cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \531cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL, \532cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA533#define A_T0_MUL_T1() \534cmb.tex |= 3, \535cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \536cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER, \537cmb.tmu0_a_fac = GR_COMBINE_FACTOR_LOCAL538#define A_T0_INTER_T1_USING_T0A() \539rdp.best_tex = 0; \540cmb.tex |= 3, \541cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \542cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \543cmb.tmu0_a_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA544#define A_T1_INTER_T0_USING_T0A() \545rdp.best_tex = 0; \546cmb.tex |= 3, \547cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \548cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \549cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA550#define A_T0_INTER_T1_USING_T1A() \551rdp.best_tex = 0; \552cmb.tex |= 3, \553cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \554cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \555cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA556#define A_T0_INTER_T1_USING_FACTOR(factor) \557if (factor == 0xFF) { \558A_USE_T1(); \559} \560else if (factor == 0x00) { \561A_USE_T0(); \562}\563else { \564cmb.tex |= 3, \565cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \566cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \567cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \568percent = (float)factor / 255.0f, \569cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \570}571#define A_T1_INTER_T0_USING_FACTOR(factor) /* inverse of above */\572if (factor == 0xFF) { \573A_USE_T0(); \574} \575else if (factor == 0x00) { \576A_USE_T1(); \577}\578else { \579cmb.tex |= 3, \580cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \581cmb.tmu0_a_func = GR_COMBINE_FUNCTION_BLEND, \582cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \583percent = (255 - factor) / 255.0f, \584cmb.dc0_detailmax = cmb.dc1_detailmax = percent; \585}586#define A_T0_INTER_T1_USING_SHADEA() \587if (!cmb.combine_ext) { \588A_T0_INTER_T1_USING_FACTOR (0x7F); \589}\590else {\591rdp.best_tex = 0; \592cmb.tex |= 3, \593cmb.t1a_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA, \594cmb.t1a_ext_a_mode = GR_FUNC_MODE_ZERO, \595cmb.t1a_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA, \596cmb.t1a_ext_b_mode = GR_FUNC_MODE_ZERO, \597cmb.t1a_ext_c = GR_CMBX_ZERO, \598cmb.t1a_ext_c_invert = 0, \599cmb.t1a_ext_d= GR_CMBX_B, \600cmb.t1a_ext_d_invert = 0, \601cmb.t0a_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA, \602cmb.t0a_ext_a_mode = GR_FUNC_MODE_X, \603cmb.t0a_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA, \604cmb.t0a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X, \605cmb.t0a_ext_c = GR_CMBX_ITALPHA, \606cmb.t0a_ext_c_invert = 0, \607cmb.t0a_ext_d= GR_CMBX_B, \608cmb.t0a_ext_d_invert = 0, \609cmb.tex_cmb_ext_use |= TEX_COMBINE_EXT_ALPHA; \610}611#define A_T1_MUL_PRIMLOD_ADD_T0() \612rdp.best_tex = 0; \613cmb.tex |= 3, \614cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \615cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \616cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \617percent = (float)(lod_frac) / 255.0f, \618cmb.dc0_detailmax = cmb.dc1_detailmax = percent619#define A_T1_MUL_PRIMA_ADD_T0() \620rdp.best_tex = 0; \621cmb.tex |= 3, \622cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \623cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \624cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \625percent = (float)(rdp.prim_color&0xFF) / 255.0f, \626cmb.dc0_detailmax = cmb.dc1_detailmax = percent627#define A_T1_MUL_ENVA_ADD_T0() \628rdp.best_tex = 0; \629cmb.tex |= 3, \630cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL, \631cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, \632cmb.tmu0_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR, \633percent = (float)(rdp.env_color&0xFF) / 255.0f, \634cmb.dc0_detailmax = cmb.dc1_detailmax = percent635636637// UNIMP - writes to the unimplemented log, if it's enabled638#ifdef UNIMP_LOG639#define UNIMPMODE() { \640std::ofstream unimp; \641unimp.open("unimp.txt", std::ios::app); \642unimp << out_buf; \643unimp.close(); \644}645#else646#define UNIMPMODE()647#endif648649// Bright red, sets up a bright red combine650#ifdef BRIGHT_RED651// Bright red, sets up a bright red combine during the alpha stage652#define BrightRed() { \653CCMB (GR_COMBINE_FUNCTION_LOCAL, \654GR_COMBINE_FACTOR_NONE, \655GR_COMBINE_LOCAL_CONSTANT, \656GR_COMBINE_OTHER_NONE); \657ACMB (GR_COMBINE_FUNCTION_LOCAL, \658GR_COMBINE_FACTOR_NONE, \659GR_COMBINE_LOCAL_CONSTANT, \660GR_COMBINE_OTHER_NONE); \661cmb.ccolor = 0xFF0000FF; \662}663#else664#define BrightRed()665#endif666667#define CC(x) cmb.ccolor=(x)&0xFFFFFF00668#define CC_PRIM() cmb.ccolor=rdp.prim_color&0xFFFFFF00669#define CC_PRIMA() { cmb.ccolor=rdp.prim_color&0xFF; cmb.ccolor=(cmb.ccolor<<8)|(cmb.ccolor<<16)|(cmb.ccolor<<24); }670#define CC_1SUBPRIMA() { cmb.ccolor=(~rdp.prim_color)&0xFF; cmb.ccolor=(cmb.ccolor<<8)|(cmb.ccolor<<16)|(cmb.ccolor<<24); }671#define CC_1SUBPRIM() cmb.ccolor=(~rdp.prim_color)&0xFFFFFF00672#define CC_ENV() cmb.ccolor=rdp.env_color&0xFFFFFF00673#define CC_1SUBENV() cmb.ccolor=(~rdp.env_color)&0xFFFFFF00674#define CC_ENVA() { cmb.ccolor=rdp.env_color&0xFF; cmb.ccolor=(cmb.ccolor<<8)|(cmb.ccolor<<16)|(cmb.ccolor<<24); }675#define CC_PRIMLOD() { cmb.ccolor = (lod_frac<<24) | (lod_frac<<16) | (lod_frac<<8); }676#define CC_K5() { cmb.ccolor = (rdp.K5<<24) | (rdp.K5<<16) | (rdp.K5<<8); }677#define CC_PRIMMULENV() { \678cmb.ccolor=(BYTE)( ((rdp.prim_color & 0xFF000000) >> 24) * (((rdp.env_color & 0xFF000000) >> 24) /255.0f) ) << 24 | \679(BYTE)( ((rdp.prim_color & 0x00FF0000) >> 16) * (((rdp.env_color & 0x00FF0000) >> 16) /255.0f) ) << 16 | \680(BYTE)( ((rdp.prim_color & 0x0000FF00) >> 8) * (((rdp.env_color & 0x0000FF00) >> 8) /255.0f) ) << 8 ; \681}682#define CC_PRIMSUBENV() { \683cmb.ccolor=(BYTE)( ((rdp.prim_color & 0xFF000000) >> 24) - (((rdp.env_color & 0xFF000000) >> 24) ) ) << 24 | \684(BYTE)( ((rdp.prim_color & 0x00FF0000) >> 16) - (((rdp.env_color & 0x00FF0000) >> 16) ) ) << 16 | \685(BYTE)( ((rdp.prim_color & 0x0000FF00) >> 8) - (((rdp.env_color & 0x0000FF00) >> 8) ) ) << 8 ; \686}687688#define MULSHADE(color) { \689rdp.col[0] *= (float)((color & 0xFF000000) >> 24) / 255.0f; \690rdp.col[1] *= (float)((color & 0x00FF0000) >> 16) / 255.0f; \691rdp.col[2] *= (float)((color & 0x0000FF00) >> 8) / 255.0f; \692rdp.cmb_flags |= CMB_MULT; \693}694#define MULSHADE_PRIM() { \695rdp.col[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \696rdp.col[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \697rdp.col[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \698rdp.cmb_flags |= CMB_MULT; \699}700#define MULSHADE_PRIMA() { \701rdp.col[0] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \702rdp.col[1] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \703rdp.col[2] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \704rdp.cmb_flags |= CMB_MULT; \705}706#define MULSHADE_ENV() { \707rdp.col[0] *= (float)((rdp.env_color & 0xFF000000) >> 24) / 255.0f; \708rdp.col[1] *= (float)((rdp.env_color & 0x00FF0000) >> 16) / 255.0f; \709rdp.col[2] *= (float)((rdp.env_color & 0x0000FF00) >> 8) / 255.0f; \710rdp.cmb_flags |= CMB_MULT; \711}712#define MULSHADE_ENVA() { \713rdp.col[0] *= (float)(rdp.env_color & 0xFF) / 255.0f; \714rdp.col[1] *= (float)(rdp.env_color & 0xFF) / 255.0f; \715rdp.col[2] *= (float)(rdp.env_color & 0xFF) / 255.0f; \716rdp.cmb_flags |= CMB_MULT; \717}718#define MULSHADE_1MPRIM() { \719rdp.col[0] *= 1.0f-((float)((rdp.prim_color & 0xFF000000) >> 24)/255.0f); \720rdp.col[1] *= 1.0f-((float)((rdp.prim_color & 0x00FF0000) >> 16)/255.0f); \721rdp.col[2] *= 1.0f-((float)((rdp.prim_color & 0x0000FF00) >> 8)/255.0f); \722rdp.cmb_flags |= CMB_MULT; \723}724#define MULSHADE_1MENV() { \725rdp.col[0] *= 1.0f-((float)((rdp.env_color & 0xFF000000) >> 24)/255.0f); \726rdp.col[1] *= 1.0f-((float)((rdp.env_color & 0x00FF0000) >> 16)/255.0f); \727rdp.col[2] *= 1.0f-((float)((rdp.env_color & 0x0000FF00) >> 8)/255.0f); \728rdp.cmb_flags |= CMB_MULT; \729}730//Added by Gonetz731#define MULSHADE_PRIMSUBENV() { \732rdp.col[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) - ((rdp.env_color & 0xFF000000) >> 24) )/255.0f; \733rdp.col[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) - ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f; \734rdp.col[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) - ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f; \735rdp.cmb_flags |= CMB_MULT; \736}737//Added by Gonetz738#define MULSHADE_ENVSUBPRIM() { \739rdp.col[0] *= (float)( ((rdp.env_color & 0xFF000000) >> 24) - ((rdp.prim_color & 0xFF000000) >> 24) )/255.0f; \740rdp.col[1] *= (float)( ((rdp.env_color & 0x00FF0000) >> 16) - ((rdp.prim_color & 0x00FF0000) >> 16) )/255.0f; \741rdp.col[2] *= (float)( ((rdp.env_color & 0x0000FF00) >> 8) - ((rdp.prim_color & 0x0000FF00) >> 8) )/255.0f; \742rdp.cmb_flags |= CMB_MULT; \743}744//Added by Gonetz745#define MULSHADE_PRIMLOD() { \746rdp.col[0] *= (float)(lod_frac & 0xFF) / 255.0f; \747rdp.col[1] *= (float)(lod_frac & 0xFF) / 255.0f; \748rdp.col[2] *= (float)(lod_frac & 0xFF) / 255.0f; \749rdp.cmb_flags |= CMB_MULT; \750}751//Added by Gonetz752#define MULSHADE_K5() { \753rdp.col[0] *= (float)rdp.K5 / 255.0f; \754rdp.col[1] *= (float)rdp.K5 / 255.0f; \755rdp.col[2] *= (float)rdp.K5 / 255.0f; \756rdp.cmb_flags |= CMB_MULT; \757}758#define MULSHADE_SHADEA() rdp.cmb_flags |= CMB_MULT_OWN_ALPHA;759760#define SUBSHADE_PRIM() { \761rdp.coladd[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \762rdp.coladd[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \763rdp.coladd[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \764rdp.cmb_flags |= CMB_SUB; \765}766#define SUBSHADE_ENV() { \767rdp.coladd[0] *= (float)((rdp.env_color & 0xFF000000) >> 24) / 255.0f; \768rdp.coladd[1] *= (float)((rdp.env_color & 0x00FF0000) >> 16) / 255.0f; \769rdp.coladd[2] *= (float)((rdp.env_color & 0x0000FF00) >> 8) / 255.0f; \770rdp.cmb_flags |= CMB_SUB; \771}772#define SUBSHADE_PRIMSUBENV() { \773rdp.coladd[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) - ((rdp.env_color & 0xFF000000) >> 24) )/255.0f; \774rdp.coladd[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) - ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f; \775rdp.coladd[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) - ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f; \776rdp.cmb_flags |= CMB_SUB; \777}778#define SUBSHADE_PRIMMULENV() { \779rdp.coladd[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) * ((rdp.env_color & 0xFF000000) >> 24) )/255.0f; \780rdp.coladd[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) * ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f; \781rdp.coladd[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) * ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f; \782rdp.cmb_flags |= CMB_SUB; \783}784#define ADDSHADE_PRIM() { \785rdp.coladd[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \786rdp.coladd[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \787rdp.coladd[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \788rdp.cmb_flags |= CMB_ADD; \789}790#define ADDSHADE_ENV() { \791rdp.coladd[0] *= (float)((rdp.env_color & 0xFF000000) >> 24) / 255.0f; \792rdp.coladd[1] *= (float)((rdp.env_color & 0x00FF0000) >> 16) / 255.0f; \793rdp.coladd[2] *= (float)((rdp.env_color & 0x0000FF00) >> 8) / 255.0f; \794rdp.cmb_flags |= CMB_ADD; \795}796#define ADDSHADE_PRIMSUBENV() { \797rdp.coladd[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) - ((rdp.env_color & 0xFF000000) >> 24) )/255.0f; \798rdp.coladd[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) - ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f; \799rdp.coladd[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) - ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f; \800rdp.cmb_flags |= CMB_ADD; \801}802#define COLSUBSHADE_PRIM() { \803rdp.coladd[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \804rdp.coladd[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \805rdp.coladd[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \806rdp.cmb_flags |= CMB_COL_SUB_OWN; \807}808809810#define SETSHADE_PRIM() { \811rdp.col[0] *= (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f; \812rdp.col[1] *= (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f; \813rdp.col[2] *= (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f; \814rdp.cmb_flags = CMB_SET; \815}816#define SETSHADE_ENV() { \817rdp.col[0] *= (float)((rdp.env_color & 0xFF000000) >> 24) / 255.0f; \818rdp.col[1] *= (float)((rdp.env_color & 0x00FF0000) >> 16) / 255.0f; \819rdp.col[2] *= (float)((rdp.env_color & 0x0000FF00) >> 8) / 255.0f; \820rdp.cmb_flags = CMB_SET; \821}822#define SETSHADE_1MPRIM() { \823rdp.col[0] *= 1.0f-((float)((rdp.prim_color & 0xFF000000) >> 24)/255.0f); \824rdp.col[1] *= 1.0f-((float)((rdp.prim_color & 0x00FF0000) >> 16)/255.0f); \825rdp.col[2] *= 1.0f-((float)((rdp.prim_color & 0x0000FF00) >> 8)/255.0f); \826rdp.cmb_flags = CMB_SET; \827}828#define SETSHADE_1MENV() { \829rdp.col[0] *= 1.0f-((float)((rdp.env_color & 0xFF000000) >> 24)/255.0f); \830rdp.col[1] *= 1.0f-((float)((rdp.env_color & 0x00FF0000) >> 16)/255.0f); \831rdp.col[2] *= 1.0f-((float)((rdp.env_color & 0x0000FF00) >> 8)/255.0f); \832rdp.cmb_flags = CMB_SET; \833}834#define SETSHADE_PRIMA() { \835rdp.col[0] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \836rdp.col[1] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \837rdp.col[2] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \838rdp.cmb_flags = CMB_SET; \839}840#define SETSHADE_1MPRIMA() { \841rdp.col[0] *= (float)((~rdp.prim_color) & 0xFF) / 255.0f; \842rdp.col[1] *= (float)((~rdp.prim_color) & 0xFF) / 255.0f; \843rdp.col[2] *= (float)((~rdp.prim_color) & 0xFF) / 255.0f; \844rdp.cmb_flags = CMB_SET; \845}846#define SETSHADE_PRIMSUBENV() { \847rdp.col[0] *= (float)( ((rdp.prim_color & 0xFF000000) >> 24) - ((rdp.env_color & 0xFF000000) >> 24) )/255.0f; \848rdp.col[1] *= (float)( ((rdp.prim_color & 0x00FF0000) >> 16) - ((rdp.env_color & 0x00FF0000) >> 16) )/255.0f; \849rdp.col[2] *= (float)( ((rdp.prim_color & 0x0000FF00) >> 8) - ((rdp.env_color & 0x0000FF00) >> 8) )/255.0f; \850rdp.cmb_flags = CMB_SET; \851}852#define SETSHADE_ENVSUBPRIM() { \853rdp.col[0] *= (float)( ((rdp.env_color & 0xFF000000) >> 24) - ((rdp.prim_color & 0xFF000000) >> 24) )/255.0f; \854rdp.col[1] *= (float)( ((rdp.env_color & 0x00FF0000) >> 16) - ((rdp.prim_color & 0x00FF0000) >> 16) )/255.0f; \855rdp.col[2] *= (float)( ((rdp.env_color & 0x0000FF00) >> 8) - ((rdp.prim_color & 0x0000FF00) >> 8) )/255.0f; \856rdp.cmb_flags = CMB_SET; \857}858#define SETSHADE_PRIMLOD() { \859rdp.col[0] *= (float)(lod_frac & 0xFF) / 255.0f; \860rdp.col[1] *= (float)(lod_frac & 0xFF) / 255.0f; \861rdp.col[2] *= (float)(lod_frac & 0xFF) / 255.0f; \862rdp.cmb_flags = CMB_SET; \863}864865#define SETSHADE_1MPRIMLOD() { \866rdp.col[0] *= (float)(~lod_frac & 0xFF) / 255.0f; \867rdp.col[1] *= (float)(~lod_frac & 0xFF) / 255.0f; \868rdp.col[2] *= (float)(~lod_frac & 0xFF) / 255.0f; \869rdp.cmb_flags = CMB_SET; \870}871872#define SETSHADE_SHADE_A() { \873rdp.cmb_flags = CMB_SETSHADE_SHADEALPHA; \874}875876#define INTERSHADE_2(color,factor) { \877rdp.col_2[0] = (((color) >> 24) & 0xFF) / 255.0f; \878rdp.col_2[1] = (((color) >> 16) & 0xFF) / 255.0f; \879rdp.col_2[2] = (((color) >> 8) & 0xFF) / 255.0f; \880rdp.shade_factor = (factor) / 255.0f; \881rdp.cmb_flags_2 = CMB_INTER; \882}883884#define CA(x) cmb.ccolor|=(x)&0xFF885#define CA_PRIM() cmb.ccolor|=rdp.prim_color&0xFF886#define CA_INVPRIM() cmb.ccolor|=0xFF-(rdp.prim_color&0xFF)887#define CA_INVENV() cmb.ccolor|=0xFF-(rdp.env_color&0xFF)888#define CA_ENV() cmb.ccolor|=rdp.env_color&0xFF889#define CA_ENV1MPRIM() cmb.ccolor|= (DWORD)(((rdp.env_color&0xFF)/255.0f) * (((~(rdp.prim_color&0xFF)) & 0xff)/255.0f) * 255.0f);890#define CA_PRIMENV() cmb.ccolor |= (DWORD)(((rdp.env_color&0xFF)/255.0f) * ((rdp.prim_color&0xFF)/255.0f) * 255.0f);891#define CA_PRIMLOD() cmb.ccolor |= lod_frac;892#define CA_PRIM_MUL_PRIMLOD() cmb.ccolor |= (int)(((rdp.prim_color&0xFF) * lod_frac) / 255.0f);893#define CA_ENV_MUL_PRIMLOD() cmb.ccolor |= (int)(((rdp.env_color&0xFF) * lod_frac) / 255.0f);894895#define MULSHADE_A_PRIM() { \896rdp.col[3] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \897rdp.cmb_flags |= CMB_A_MULT; \898}899#define MULSHADE_A_1MPRIM() { \900rdp.col[3] *= 1.0f-((float)(rdp.prim_color & 0xFF) / 255.0f); \901rdp.cmb_flags |= CMB_A_MULT; \902}903#define MULSHADE_A_ENV() { \904rdp.col[3] *= (float)(rdp.env_color & 0xFF) / 255.0f; \905rdp.cmb_flags |= CMB_A_MULT; \906}907//Added by Gonetz908#define MULSHADE_A_PRIMSUBENV() { \909rdp.col[3] *= (float)( (rdp.prim_color & 0xFF) - (rdp.env_color & 0xFF) ) / 255.0f; \910rdp.cmb_flags |= CMB_A_MULT; \911}912//Added by Gonetz913#define MULSHADE_A_ENVSUBPRIM() { \914rdp.col[3] *= (float)( (rdp.env_color & 0xFF) - (rdp.prim_color & 0xFF) ) / 255.0f; \915rdp.cmb_flags |= CMB_A_MULT; \916}917918#define SETSHADE_A(color) { \919rdp.col[3] *= (float)(color&0xFF)/255.0f; \920rdp.cmb_flags |= CMB_A_SET; \921}922#define SETSHADE_A_PRIM() { \923rdp.col[3] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \924rdp.cmb_flags |= CMB_A_SET; \925}926#define SETSHADE_A_ENV() { \927rdp.col[3] *= (float)(rdp.env_color & 0xFF) / 255.0f; \928rdp.cmb_flags |= CMB_A_SET; \929}930#define SETSHADE_A_INVENV() { \931rdp.col[3] *= (float)(0xFF - (rdp.env_color & 0xFF)) / 255.0f; \932rdp.cmb_flags |= CMB_A_SET; \933}934#define SUBSHADE_A_PRIM() { \935rdp.coladd[3] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \936rdp.cmb_flags |= CMB_A_SUB; \937}938#define SUBSHADE_A_ENV() { \939rdp.coladd[3] *= (float)(rdp.env_color & 0xFF) / 255.0f; \940rdp.cmb_flags |= CMB_A_SUB; \941}942#define ADDSHADE_A_PRIM() { \943rdp.coladd[3] *= (float)(rdp.prim_color & 0xFF) / 255.0f; \944rdp.cmb_flags |= CMB_A_ADD; \945}946#define ADDSHADE_A_ENV() { \947rdp.coladd[3] *= (float)(rdp.env_color & 0xFF) / 255.0f; \948rdp.cmb_flags |= CMB_A_ADD; \949}950951//****************************************************************952// Combine Functions953//****************************************************************954955// These are in a somewhat ordered way, using the A constants below. T0 comes before956// T1 comes before PRIM, ... except for CMB, which always comes at the end, where957// the CMB comes first in the name. T0 and T1 are always interleaved, because they use the958// same function.959// Keep going in alphabetical order, but do not break the order of variables!960// ex: A*C + B*C -> T0_MUL_PRIM_ADD_ENV_MUL_PRIM,961// Although prim comes before env, we have already used prim as C, so it must stay as C962// and would NOT become T0_MUL_PRIM_ADD_PRIM_MUL_ENV963//964// New version ordered by:965// t0966// prim967// env968// shade969970static void cc_one ()971{972CCMB (GR_COMBINE_FUNCTION_LOCAL,973GR_COMBINE_FACTOR_NONE,974GR_COMBINE_LOCAL_CONSTANT,975GR_COMBINE_OTHER_NONE);976// CC (0xFFFFFF00);977CC (0xFFFFFF00);978}979980static void cc_zero ()981{982CCMB (GR_COMBINE_FUNCTION_LOCAL,983GR_COMBINE_FACTOR_NONE,984GR_COMBINE_LOCAL_CONSTANT,985GR_COMBINE_OTHER_NONE);986CC (0x00000000);987}988989static void cc_t0 ()990{991CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,992GR_COMBINE_FACTOR_ONE,993GR_COMBINE_LOCAL_NONE,994GR_COMBINE_OTHER_TEXTURE);995USE_T0 ();996}997998static void cc_t1 () //Added by Gonetz999{1000CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1001GR_COMBINE_FACTOR_ONE,1002GR_COMBINE_LOCAL_NONE,1003GR_COMBINE_OTHER_TEXTURE);1004USE_T1 ();1005}10061007static void cc_t0_mul_t1 ()1008{1009CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1010GR_COMBINE_FACTOR_ONE,1011GR_COMBINE_LOCAL_NONE,1012GR_COMBINE_OTHER_TEXTURE);1013T0_MUL_T1 ();1014}10151016static void cc_t0_mul_t1_add_t0 () //Added by Gonetz1017{1018CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1019GR_COMBINE_FACTOR_ONE,1020GR_COMBINE_LOCAL_NONE,1021GR_COMBINE_OTHER_TEXTURE);1022T0_MUL_T1_ADD_T0 ();1023}10241025static void cc_t1_inter_t0_using_env ()1026{1027CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1028GR_COMBINE_FACTOR_ONE,1029GR_COMBINE_LOCAL_NONE,1030GR_COMBINE_OTHER_TEXTURE);1031T1_INTER_T0_USING_ENV ();1032}10331034static void cc_prim ()1035{1036CCMB (GR_COMBINE_FUNCTION_LOCAL,1037GR_COMBINE_FACTOR_NONE,1038GR_COMBINE_LOCAL_CONSTANT,1039GR_COMBINE_OTHER_NONE);1040CC_PRIM ();1041}10421043static void cc_env ()1044{1045CCMB (GR_COMBINE_FUNCTION_LOCAL,1046GR_COMBINE_FACTOR_NONE,1047GR_COMBINE_LOCAL_CONSTANT,1048GR_COMBINE_OTHER_NONE);1049CC_ENV ();1050}10511052static void cc_shade ()1053{1054CCMB (GR_COMBINE_FUNCTION_LOCAL,1055GR_COMBINE_FACTOR_NONE,1056GR_COMBINE_LOCAL_ITERATED,1057GR_COMBINE_OTHER_NONE);1058}10591060static void cc_shadea ()1061{1062CCMB (GR_COMBINE_FUNCTION_LOCAL_ALPHA,1063GR_COMBINE_FACTOR_NONE,1064GR_COMBINE_LOCAL_ITERATED,1065GR_COMBINE_OTHER_NONE);1066}10671068static void cc_t0_mul_prim ()1069{1070CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1071GR_COMBINE_FACTOR_LOCAL,1072GR_COMBINE_LOCAL_CONSTANT,1073GR_COMBINE_OTHER_TEXTURE);1074CC_PRIM ();1075USE_T0 ();1076}10771078static void cc_t0_mul_prima ()1079{1080CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1081GR_COMBINE_FACTOR_LOCAL,1082GR_COMBINE_LOCAL_CONSTANT,1083GR_COMBINE_OTHER_TEXTURE);1084CC_PRIMA ();1085USE_T0 ();1086}10871088static void cc_t1_mul_prim ()1089{1090CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1091GR_COMBINE_FACTOR_LOCAL,1092GR_COMBINE_LOCAL_CONSTANT,1093GR_COMBINE_OTHER_TEXTURE);1094CC_PRIM ();1095USE_T1 ();1096}10971098//Added by Gonetz1099static void cc__t1_inter_t0_using_enva__mul_prim ()1100{1101CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1102GR_COMBINE_FACTOR_LOCAL,1103GR_COMBINE_LOCAL_CONSTANT,1104GR_COMBINE_OTHER_TEXTURE);1105CC_PRIM ();1106BYTE factor = (BYTE)(rdp.env_color&0xFF);1107T1_INTER_T0_USING_FACTOR (factor);1108}11091110static void cc__t1_inter_one_using_env__mul_prim ()1111{1112CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1113GR_COMBINE_FACTOR_LOCAL,1114GR_COMBINE_LOCAL_CONSTANT,1115GR_COMBINE_OTHER_TEXTURE);1116CC_PRIM ();1117if (cmb.combine_ext)1118{1119T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,1120GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1121GR_CMBX_LOCAL_TEXTURE_RGB, 1,1122GR_CMBX_B, 0);1123T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1124GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1125GR_CMBX_ZERO, 1,1126GR_CMBX_ZERO, 0);1127cmb.tex |= 2;1128cmb.tex_ccolor = rdp.env_color;1129}1130else1131{1132USE_T1 ();1133}1134}11351136//Added by Gonetz1137static void cc_prim_mul_prim ()1138{1139CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1140GR_COMBINE_FACTOR_LOCAL,1141GR_COMBINE_LOCAL_ITERATED,1142GR_COMBINE_OTHER_CONSTANT);1143CC_PRIM ();1144SETSHADE_PRIM ();1145}11461147static void cc_prim_mul_prima ()1148{1149CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1150GR_COMBINE_FACTOR_LOCAL,1151GR_COMBINE_LOCAL_CONSTANT,1152GR_COMBINE_OTHER_ITERATED);1153CC_PRIM ();1154SETSHADE_PRIMA ();1155}11561157static void cc_t1_mul_prima ()1158{1159CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1160GR_COMBINE_FACTOR_LOCAL,1161GR_COMBINE_LOCAL_CONSTANT,1162GR_COMBINE_OTHER_TEXTURE);1163CC_PRIMA ();1164USE_T1 ();1165}11661167static void cc_t1_mul_enva ()1168{1169CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1170GR_COMBINE_FACTOR_LOCAL,1171GR_COMBINE_LOCAL_CONSTANT,1172GR_COMBINE_OTHER_TEXTURE);1173CC_ENVA ();1174USE_T1 ();1175}11761177static void cc_t0_mul_env ()1178{1179CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1180GR_COMBINE_FACTOR_LOCAL,1181GR_COMBINE_LOCAL_CONSTANT,1182GR_COMBINE_OTHER_TEXTURE);1183CC_ENV ();1184USE_T0 ();1185}11861187static void cc_t1_mul_env ()1188{1189CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1190GR_COMBINE_FACTOR_LOCAL,1191GR_COMBINE_LOCAL_CONSTANT,1192GR_COMBINE_OTHER_TEXTURE);1193CC_ENV ();1194USE_T1 ();1195}11961197//Added by Gonetz1198static void cc_t0_mul_enva ()1199{1200CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1201GR_COMBINE_FACTOR_LOCAL,1202GR_COMBINE_LOCAL_CONSTANT,1203GR_COMBINE_OTHER_TEXTURE);1204CC_ENVA ();1205USE_T0 ();1206}12071208static void cc_t0_mul_enva_add_prim ()1209{1210CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1211GR_COMBINE_FACTOR_TEXTURE_RGB,1212GR_COMBINE_LOCAL_ITERATED,1213GR_COMBINE_OTHER_CONSTANT);1214SETSHADE_PRIM ();1215CC_ENVA ();1216USE_T0 ();1217}12181219static void cc_t0_mul_shade ()1220{1221CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1222GR_COMBINE_FACTOR_LOCAL,1223GR_COMBINE_LOCAL_ITERATED,1224GR_COMBINE_OTHER_TEXTURE);1225USE_T0 ();1226}12271228static void cc_t0_mul_shadea ()1229{1230CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1231GR_COMBINE_FACTOR_LOCAL,1232GR_COMBINE_LOCAL_ITERATED,1233GR_COMBINE_OTHER_TEXTURE);1234SETSHADE_SHADE_A ();1235USE_T0 ();1236}12371238static void cc_t0_mul_k5 ()1239{1240CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1241GR_COMBINE_FACTOR_LOCAL,1242GR_COMBINE_LOCAL_CONSTANT,1243GR_COMBINE_OTHER_TEXTURE);1244CC_K5 ();1245USE_T0 ();1246}12471248static void cc_t1_mul_shade ()1249{1250CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1251GR_COMBINE_FACTOR_LOCAL,1252GR_COMBINE_LOCAL_ITERATED,1253GR_COMBINE_OTHER_TEXTURE);1254USE_T1 ();1255}12561257//Added by Gonetz1258static void cc__t0_add_t1__mul_shade ()1259{1260CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1261GR_COMBINE_FACTOR_LOCAL,1262GR_COMBINE_LOCAL_ITERATED,1263GR_COMBINE_OTHER_TEXTURE);1264T0_ADD_T1 ();1265}12661267//Added by Gonetz1268static void cc__t1_inter_t0_using_enva__mul_shade ()1269{1270CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1271GR_COMBINE_FACTOR_LOCAL,1272GR_COMBINE_LOCAL_ITERATED,1273GR_COMBINE_OTHER_TEXTURE);1274BYTE factor = (BYTE)(rdp.env_color&0xFF);1275T1_INTER_T0_USING_FACTOR (factor);1276}12771278//Added by Gonetz1279static void cc__t1_inter_t0_using_shadea__mul_shade ()1280{1281if (!cmb.combine_ext) {1282cc_t0_mul_shade ();1283return;1284}1285CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1286GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,1287GR_CMBX_ITRGB, 0,1288GR_CMBX_ZERO, 0);1289T1_INTER_T0_USING_SHADEA ();1290}12911292//Added by Gonetz1293static void cc__t0_inter_env_using_enva__mul_shade ()1294{1295// (env-t0)*env_a+t0, (cmb-0)*shade+01296CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1297GR_COMBINE_FACTOR_LOCAL,1298GR_COMBINE_LOCAL_ITERATED,1299GR_COMBINE_OTHER_TEXTURE);1300if (cmb.combine_ext)1301{1302T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,1303GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1304GR_CMBX_TMU_CALPHA, 0,1305GR_CMBX_B, 0);1306cmb.tex |= 1;1307cmb.tex_ccolor = rdp.env_color;1308}1309else1310{1311USE_T0 ();1312MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);1313MOD_0_COL (rdp.env_color & 0xFFFFFF00);1314MOD_0_FAC (rdp.env_color&0xFF);1315}1316}13171318static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade ()1319{1320if (cmb.combine_ext)1321{1322T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1323GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1324GR_CMBX_ZERO, 0,1325GR_CMBX_B, 0);1326T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1327GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1328GR_CMBX_DETAIL_FACTOR, 0,1329GR_CMBX_ZERO, 0);1330cmb.tex |= 3;1331percent = (float)lod_frac / 255.0f;1332cmb.dc0_detailmax = cmb.dc1_detailmax = percent;1333CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1334GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,1335GR_CMBX_ITRGB, 0,1336GR_CMBX_ZERO, 0);1337CC_PRIM ();1338}1339else1340{1341CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1342GR_COMBINE_FACTOR_LOCAL,1343GR_COMBINE_LOCAL_ITERATED,1344GR_COMBINE_OTHER_TEXTURE);1345T0_INTER_T1_USING_FACTOR (lod_frac);1346}1347}13481349static void cc__t1_sub_prim_mul_t0__mul_shade ()1350{1351CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1352GR_COMBINE_FACTOR_LOCAL,1353GR_COMBINE_LOCAL_ITERATED,1354GR_COMBINE_OTHER_TEXTURE);1355if (cmb.combine_ext)1356{1357T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1358GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1359GR_CMBX_ZERO, 0,1360GR_CMBX_B, 0);1361T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1362GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,1363GR_CMBX_LOCAL_TEXTURE_RGB, 0,1364GR_CMBX_ZERO, 0);1365cmb.tex_ccolor = rdp.prim_color;1366cmb.tex |= 3;1367}1368else1369{1370T0_MUL_T1 ();1371}1372}13731374static void cc__t1_sub_t0_mul_t0_add_shade__mul_shade () //Aded by Gonetz1375{1376CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1377GR_COMBINE_FACTOR_ONE,1378GR_COMBINE_LOCAL_ITERATED,1379GR_COMBINE_OTHER_TEXTURE);1380if (cmb.combine_ext)1381{1382T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1383GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1384GR_CMBX_ZERO, 0,1385GR_CMBX_B, 0);1386T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1387GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1388GR_CMBX_LOCAL_TEXTURE_RGB, 0,1389GR_CMBX_ITRGB, 0);1390cmb.tex |= 3;1391}1392else1393{1394T1_SUB_T0_MUL_T0 ();1395}1396}13971398static void cc__t0_mul_prima_add_prim_mul__shade ()1399{1400CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1401GR_COMBINE_FACTOR_LOCAL,1402GR_COMBINE_LOCAL_ITERATED,1403GR_COMBINE_OTHER_TEXTURE);1404if (cmb.combine_ext)1405{1406T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1407GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,1408GR_CMBX_TMU_CALPHA, 0,1409GR_CMBX_B, 0);1410cmb.tex_ccolor = rdp.prim_color;1411cmb.tex |= 1;1412}1413else1414{1415MOD_0 (TMOD_TEX_SCALE_FAC_ADD_COL);1416MOD_0_COL (rdp.prim_color & 0xFFFFFF00);1417MOD_0_FAC (rdp.prim_color & 0xFF);1418USE_T0 ();1419}1420}14211422static void cc__prim_inter_t0_using_shadea__mul_shade ()1423{1424CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1425GR_COMBINE_FACTOR_LOCAL,1426GR_COMBINE_LOCAL_ITERATED,1427GR_COMBINE_OTHER_TEXTURE);1428PRIM_INTER_T0_USING_SHADEA ();1429}14301431//Added by Gonetz1432static void cc_prim_mul_env ()1433{1434CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1435GR_COMBINE_FACTOR_LOCAL,1436GR_COMBINE_LOCAL_ITERATED,1437GR_COMBINE_OTHER_CONSTANT);1438CC_PRIM ();1439SETSHADE_ENV ();1440}14411442static void cc_prim_mul_shade ()1443{1444CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1445GR_COMBINE_FACTOR_LOCAL,1446GR_COMBINE_LOCAL_ITERATED,1447GR_COMBINE_OTHER_CONSTANT);1448CC_PRIM ();1449}14501451static void cc_prim_mul_shadea ()1452{1453CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1454GR_COMBINE_FACTOR_LOCAL,1455GR_COMBINE_LOCAL_ITERATED,1456GR_COMBINE_OTHER_CONSTANT);1457SETSHADE_SHADE_A ();1458CC_PRIM ();1459}14601461static void cc_env_mul_shade ()1462{1463CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1464GR_COMBINE_FACTOR_LOCAL,1465GR_COMBINE_LOCAL_ITERATED,1466GR_COMBINE_OTHER_CONSTANT);1467CC_ENV ();1468}14691470static void cc_env_mul_enva ()1471{1472CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1473GR_COMBINE_FACTOR_OTHER_ALPHA,1474GR_COMBINE_LOCAL_NONE,1475GR_COMBINE_OTHER_CONSTANT);1476CC_ENV ();1477CA_ENV ();1478}14791480// ** A+B **14811482static void cc_t0_add_t1 ()1483{1484CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1485GR_COMBINE_FACTOR_ONE,1486GR_COMBINE_LOCAL_NONE,1487GR_COMBINE_OTHER_TEXTURE);1488T0_ADD_T1 ();1489}14901491static void cc_t0_add_prim () //Aded by Gonetz1492{1493CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1494GR_COMBINE_FACTOR_ONE,1495GR_COMBINE_LOCAL_CONSTANT,1496GR_COMBINE_OTHER_TEXTURE);1497CC_PRIM ();1498USE_T0 ();1499}15001501static void cc__t0_mul_t1__add_prim () //Aded by Gonetz1502{1503CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1504GR_COMBINE_FACTOR_ONE,1505GR_COMBINE_LOCAL_CONSTANT,1506GR_COMBINE_OTHER_TEXTURE);1507CC_PRIM ();1508T0_MUL_T1 ();1509}15101511static void cc_t0_add_env ()1512{1513CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1514GR_COMBINE_FACTOR_ONE,1515GR_COMBINE_LOCAL_CONSTANT,1516GR_COMBINE_OTHER_TEXTURE);1517CC_ENV ();1518USE_T0 ();1519}15201521//Added by Gonetz1522static void cc__t0_mul_t1__add_env ()1523{1524CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1525GR_COMBINE_FACTOR_ONE,1526GR_COMBINE_LOCAL_CONSTANT,1527GR_COMBINE_OTHER_TEXTURE);1528CC_ENV ();1529T0_MUL_T1 ();1530}15311532static void cc_t0_add_shade () //Aded by Gonetz1533{1534CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1535GR_COMBINE_FACTOR_ONE,1536GR_COMBINE_LOCAL_ITERATED,1537GR_COMBINE_OTHER_TEXTURE);1538USE_T0 ();1539}15401541static void cc_prim_add_env ()1542{1543CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1544GR_COMBINE_FACTOR_ONE,1545GR_COMBINE_LOCAL_CONSTANT,1546GR_COMBINE_OTHER_ITERATED);1547CC_ENV ();1548SETSHADE_PRIM ();1549}15501551static void cc_t0_add_prim_mul_one_sub_t0_add_t0 () //Aded by Gonetz1552{1553if (cmb.combine_ext)1554{1555T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,1556GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1557GR_CMBX_LOCAL_TEXTURE_RGB, 1,1558GR_CMBX_B, 0);1559CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1560GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,1561GR_CMBX_ZERO, 1,1562GR_CMBX_ZERO, 0);1563cmb.tex_ccolor = rdp.prim_color;1564cmb.tex |= 1;1565}1566else1567{1568cc_t0_add_prim ();1569}1570}15711572static void cc_one_sub_prim_mul_t0_add_prim();1573static void cc__one_sub_prim_mul_t0_add_prim__mul_prima_add__one_sub_prim_mul_t0_add_prim () //Aded by Gonetz1574{1575if (cmb.combine_ext)1576{1577T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1578GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,1579GR_CMBX_TMU_CCOLOR, 1,1580GR_CMBX_B, 0);1581CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,1582GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1583GR_CMBX_CONSTANT_COLOR, 0,1584GR_CMBX_B, 0);1585cmb.tex_ccolor = rdp.prim_color;1586CC_PRIMA();1587cmb.tex |= 3; //hw frame buffer allocated as tile1, but not used in combiner1588}1589else1590{1591cc_one_sub_prim_mul_t0_add_prim();1592// cc_t0 ();1593}1594}15951596static void cc_prim_add_shade () //Aded by Gonetz1597{1598CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1599GR_COMBINE_FACTOR_ONE,1600GR_COMBINE_LOCAL_ITERATED,1601GR_COMBINE_OTHER_CONSTANT);1602CC_PRIM ();1603}16041605static void cc_env_add_shade () //Aded by Gonetz1606{1607CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1608GR_COMBINE_FACTOR_ONE,1609GR_COMBINE_LOCAL_ITERATED,1610GR_COMBINE_OTHER_CONSTANT);1611CC_ENV ();1612}16131614// ** A-B **1615static void cc__t0_inter_t1_using_enva__sub_env () //Aded by Gonetz1616{1617CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,1618GR_COMBINE_FACTOR_ONE,1619GR_COMBINE_LOCAL_CONSTANT,1620GR_COMBINE_OTHER_TEXTURE);1621CC_ENV ();1622BYTE factor = (BYTE)(rdp.env_color&0xFF);1623T0_INTER_T1_USING_FACTOR (factor);1624}16251626static void cc_t0_sub_shade ()1627{1628CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,1629GR_COMBINE_FACTOR_ONE,1630GR_COMBINE_LOCAL_ITERATED,1631GR_COMBINE_OTHER_TEXTURE);1632USE_T0 ();1633}16341635// ** A-B*C **1636static void cc_env_sub__t0_sub_t1_mul_primlod__mul_prim () //Aded by Gonetz1637{1638if (cmb.combine_ext)1639{1640T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1641GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1642GR_CMBX_ZERO, 0,1643GR_CMBX_B, 0);1644T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1645GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1646GR_CMBX_ITRGB, 0,1647GR_CMBX_ZERO, 0);1648cmb.tex |= 3;1649CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,1650GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1651GR_CMBX_ZERO, 1,1652GR_CMBX_ZERO, 0);1653SETSHADE_PRIM ();1654MULSHADE_PRIMLOD ();1655CC_ENV ();1656}1657else1658{1659CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1660GR_COMBINE_FACTOR_TEXTURE_RGB,1661GR_COMBINE_LOCAL_CONSTANT,1662GR_COMBINE_OTHER_ITERATED);1663SETSHADE_PRIM ();1664CC_ENV ();1665T1_INTER_T0_USING_FACTOR (lod_frac);1666}1667}16681669static void cc_one_sub__one_sub_t0_mul_enva_add_prim__mul_prim () //Aded by Gonetz1670{1671if (cmb.combine_ext)1672{1673T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,1674GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,1675GR_CMBX_DETAIL_FACTOR, 0,1676GR_CMBX_B, 0);1677cmb.tex_ccolor = rdp.prim_color;1678cmb.tex |= 1;1679percent = (float)(rdp.env_color&0xFF) / 255.0f;1680cmb.dc0_detailmax = cmb.dc1_detailmax = percent;1681CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_X,1682GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,1683GR_CMBX_CONSTANT_COLOR, 0,1684GR_CMBX_ZERO, 1);1685CC_PRIM ();1686}1687else1688{1689cc_one ();1690}1691}16921693// ** A+B*C **1694//Aded by Gonetz1695static void cc_t0_add_env_mul_k5 ()1696{1697CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1698GR_COMBINE_FACTOR_ONE,1699GR_COMBINE_LOCAL_CONSTANT,1700GR_COMBINE_OTHER_TEXTURE);1701float scale = rdp.K5 / 255.0f;1702BYTE r = (BYTE)(rdp.env_color >> 24) & 0xFF;1703r = (BYTE)(r*scale);1704BYTE g = (BYTE)(rdp.env_color >> 16) & 0xFF;1705g = (BYTE)(g*scale);1706BYTE b = (BYTE)(rdp.env_color >> 8) & 0xFF;1707b = (BYTE)(b*scale);1708CC((r<<24)|(g<<16)|(b<<8));1709USE_T0 ();1710}17111712static void cc_t0_add_shade_mul_env ()1713{1714CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1715GR_COMBINE_FACTOR_ONE,1716GR_COMBINE_LOCAL_ITERATED,1717GR_COMBINE_OTHER_TEXTURE);1718MULSHADE_ENV ();1719USE_T0 ();1720}17211722static void cc__t1_mul_t0_add_t0__add_prim_mul_shade () //Aded by Gonetz1723{1724CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1725GR_COMBINE_FACTOR_ONE,1726GR_COMBINE_LOCAL_ITERATED,1727GR_COMBINE_OTHER_TEXTURE);1728MULSHADE_PRIM ();1729rdp.best_tex = 0;1730cmb.tex |= 3;1731cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;1732cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;1733cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL;1734}17351736// ** A*B+C **1737//Added by Gonetz1738static void cc_t0_mul_prim_add_t1 ()1739{1740CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,1741GR_COMBINE_FACTOR_ONE,1742GR_COMBINE_LOCAL_NONE,1743GR_COMBINE_OTHER_TEXTURE);1744if (cmb.combine_ext)1745{1746T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1747GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1748GR_CMBX_ZERO, 0,1749GR_CMBX_B, 0);1750T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1751GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,1752GR_CMBX_TMU_CCOLOR, 0,1753GR_CMBX_B, 0);1754cmb.tex |= 3;1755cmb.tex_ccolor = rdp.prim_color;1756}1757else1758{1759MOD_0 (TMOD_TEX_MUL_COL);1760MOD_0_COL (rdp.prim_color & 0xFFFFFF00);1761T0_ADD_T1 ();1762}1763}17641765static void cc_t1_mul_prim_add_prim ()1766{1767CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1768GR_COMBINE_FACTOR_TEXTURE_RGB,1769GR_COMBINE_LOCAL_CONSTANT,1770GR_COMBINE_OTHER_ITERATED);1771SETSHADE_PRIM ();1772CC_PRIM ();1773USE_T0 ();1774}17751776//Added by Gonetz1777static void cc_t0_mul_prim_add_env ()1778{1779CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1780GR_COMBINE_FACTOR_TEXTURE_RGB,1781GR_COMBINE_LOCAL_CONSTANT,1782GR_COMBINE_OTHER_ITERATED);1783SETSHADE_PRIM ();1784CC_ENV ();1785USE_T0 ();1786}17871788//Added by Gonetz1789static void cc_t1_mul_prim_add_env ()1790{1791CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1792GR_COMBINE_FACTOR_TEXTURE_RGB,1793GR_COMBINE_LOCAL_CONSTANT,1794GR_COMBINE_OTHER_ITERATED);1795SETSHADE_PRIM ();1796CC_ENV ();1797USE_T1 ();1798}17991800static void cc__t0_add_primlod__mul_prim_add_env ()1801{1802if (cmb.combine_ext)1803{1804T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1805GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,1806GR_CMBX_ZERO, 1,1807GR_CMBX_ZERO, 0);1808T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1809GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,1810GR_CMBX_ZERO, 1,1811GR_CMBX_ZERO, 0);1812CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,1813GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,1814GR_CMBX_ITRGB, 0,1815GR_CMBX_B, 0);1816CC_PRIMLOD ();1817cmb.tex_ccolor = cmb.ccolor;1818CC_ENV ();1819SETSHADE_PRIM ();1820cmb.tex |= 1;1821}1822else1823{1824CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1825GR_COMBINE_FACTOR_TEXTURE_RGB,1826GR_COMBINE_LOCAL_CONSTANT,1827GR_COMBINE_OTHER_ITERATED);1828CC_PRIMLOD ();1829MOD_0 (TMOD_TEX_ADD_COL);1830MOD_0_COL (cmb.ccolor & 0xFFFFFF00);1831SETSHADE_PRIM ();1832CC_ENV ();1833USE_T0 ();1834}1835}18361837//Added by Gonetz1838static void cc_t0_mul_prim_mul_shade_add_prim_mul_shade ()1839{1840CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1841GR_COMBINE_FACTOR_LOCAL,1842GR_COMBINE_LOCAL_ITERATED,1843GR_COMBINE_OTHER_TEXTURE);1844MULSHADE_PRIM ();1845USE_T0 ();1846}18471848//Added by Gonetz1849static void cc__t0_inter_t1_using_primlod__mul_prim_add_env ()1850{1851CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1852GR_COMBINE_FACTOR_TEXTURE_RGB,1853GR_COMBINE_LOCAL_CONSTANT,1854GR_COMBINE_OTHER_ITERATED);1855SETSHADE_PRIM ();1856CC_ENV ();1857T0_INTER_T1_USING_FACTOR (lod_frac);1858}18591860static void cc__t1_sub_prim_mul_enva_add_t0__mul_prim_add_env ()1861{1862CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1863GR_COMBINE_FACTOR_TEXTURE_RGB,1864GR_COMBINE_LOCAL_ITERATED,1865GR_COMBINE_OTHER_CONSTANT);1866CC_PRIM ();1867SETSHADE_ENV ();1868if (cmb.combine_ext)1869{1870T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1871GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,1872GR_CMBX_DETAIL_FACTOR, 0,1873GR_CMBX_ZERO, 0);1874T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,1875GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,1876GR_CMBX_ZERO, 1,1877GR_CMBX_ZERO, 0);1878cmb.tex_ccolor = rdp.prim_color;1879cmb.tex |= 3;1880percent = (float)(rdp.env_color&0xFF) / 255.0f;1881cmb.dc0_detailmax = cmb.dc1_detailmax = percent;1882}1883else1884{1885MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);1886MOD_1_COL (rdp.prim_color & 0xFFFFFF00);1887MOD_1_FAC (rdp.env_color & 0xFF);1888T0_ADD_T1 ();1889}1890}18911892//Added by Gonetz1893static void cc__t0_inter_t1_using_primlod__mul_shade_add_env ()1894{1895CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1896GR_COMBINE_FACTOR_TEXTURE_RGB,1897GR_COMBINE_LOCAL_CONSTANT,1898GR_COMBINE_OTHER_ITERATED);1899CC_ENV ();1900T0_INTER_T1_USING_FACTOR (lod_frac);1901}19021903//Added by Gonetz1904static void cc__t1_sub_prim_mul_primlod_add_t0__mul_prim_add_env ()1905{1906CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1907GR_COMBINE_FACTOR_TEXTURE_RGB,1908GR_COMBINE_LOCAL_CONSTANT,1909GR_COMBINE_OTHER_ITERATED);1910SETSHADE_PRIM ();1911CC_ENV ();1912T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();1913}19141915//Aded by Gonetz1916static void cc__t0_mul_t1__mul_prim_add_env ()1917{1918CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1919GR_COMBINE_FACTOR_TEXTURE_RGB,1920GR_COMBINE_LOCAL_CONSTANT,1921GR_COMBINE_OTHER_ITERATED);1922CC_ENV ();1923MULSHADE_PRIM ();1924T0_MUL_T1 ();1925}19261927//Aded by Gonetz1928static void cc__t0_mul_t1__mul_env_add_shade ()1929{1930CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1931GR_COMBINE_FACTOR_TEXTURE_RGB,1932GR_COMBINE_LOCAL_ITERATED,1933GR_COMBINE_OTHER_CONSTANT);1934CC_ENV ();1935T0_MUL_T1 ();1936}19371938static void cc__t0_mul_t1__mul_shade_add_prim ()1939{1940CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1941GR_COMBINE_FACTOR_TEXTURE_RGB,1942GR_COMBINE_LOCAL_CONSTANT,1943GR_COMBINE_OTHER_ITERATED);1944CC_PRIM ();1945T0_MUL_T1 ();1946}19471948//Added by Gonetz1949static void cc__t0_add_t1__mul_shade_add_env ()1950{1951CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1952GR_COMBINE_FACTOR_TEXTURE_RGB,1953GR_COMBINE_LOCAL_CONSTANT,1954GR_COMBINE_OTHER_ITERATED);1955CC_ENV ();1956T0_ADD_T1 ();1957}19581959static void cc__t1_mul_prima_add_t0__mul_shade_add_env ()1960{1961CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1962GR_COMBINE_FACTOR_TEXTURE_RGB,1963GR_COMBINE_LOCAL_CONSTANT,1964GR_COMBINE_OTHER_ITERATED);1965CC_ENV ();1966T1_MUL_PRIMA_ADD_T0 ();1967}19681969//Added by Gonetz1970static void cc__t0_inter_t1_using_enva__mul_shade_add_env ()1971{1972CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1973GR_COMBINE_FACTOR_TEXTURE_RGB,1974GR_COMBINE_LOCAL_CONSTANT,1975GR_COMBINE_OTHER_ITERATED);1976CC_ENV ();1977BYTE factor = (BYTE)(rdp.env_color&0xFF);1978T0_INTER_T1_USING_FACTOR (factor);1979}19801981//Added by Gonetz1982static void cc_t0_mul_primlod_add_prim ()1983{1984CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1985GR_COMBINE_FACTOR_TEXTURE_RGB,1986GR_COMBINE_LOCAL_ITERATED,1987GR_COMBINE_OTHER_CONSTANT);1988SETSHADE_PRIM ();1989CC_PRIMLOD ();1990USE_T0 ();1991}19921993//Added by Gonetz1994static void cc__t0_inter_t1_using_primlod__mul_shade_add_prim ()1995{1996CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,1997GR_COMBINE_FACTOR_TEXTURE_RGB,1998GR_COMBINE_LOCAL_CONSTANT,1999GR_COMBINE_OTHER_ITERATED);2000CC_PRIM ();2001T0_INTER_T1_USING_FACTOR (lod_frac);2002}20032004//Added by Gonetz2005static void cc__t1_sub_t0_mul_primlod_add_prim__mul_shade_add_shade ()2006{2007if (cmb.combine_ext)2008{2009T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2010GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2011GR_CMBX_ZERO, 0,2012GR_CMBX_B, 0);2013T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,2014GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,2015GR_CMBX_DETAIL_FACTOR, 0,2016GR_CMBX_ZERO, 0);2017cmb.tex |= 3;2018percent = (float)lod_frac / 255.0f;2019cmb.dc0_detailmax = cmb.dc1_detailmax = percent;2020CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,2021GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,2022GR_CMBX_ITRGB, 0,2023GR_CMBX_ITRGB, 0);2024CC_PRIM ();2025}2026else2027{2028CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2029GR_COMBINE_FACTOR_LOCAL,2030GR_COMBINE_LOCAL_ITERATED,2031GR_COMBINE_OTHER_TEXTURE);2032T0_INTER_T1_USING_FACTOR (lod_frac);2033}2034}20352036//Added by Gonetz2037static void cc__t0_inter_t1_using_half__mul_prim_add_env ()2038{2039CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2040GR_COMBINE_FACTOR_TEXTURE_RGB,2041GR_COMBINE_LOCAL_CONSTANT,2042GR_COMBINE_OTHER_ITERATED);2043SETSHADE_PRIM ();2044CC_ENV ();2045T0_INTER_T1_USING_FACTOR (0x7F);2046}20472048//Added by Gonetz2049static void cc__t0_inter_t1_using_t1__mul_prim_add_shade ()2050{2051CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2052GR_COMBINE_FACTOR_TEXTURE_RGB,2053GR_COMBINE_LOCAL_ITERATED,2054GR_COMBINE_OTHER_CONSTANT);2055CC_PRIM ();2056T0_INTER_T1_USING_T1 ();2057}20582059//Added by Gonetz2060static void cc_one_sub_t1_mul_t0a_add_t0_mul_env_add_prim ()2061{2062CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2063GR_COMBINE_FACTOR_ONE,2064GR_COMBINE_LOCAL_CONSTANT,2065GR_COMBINE_OTHER_TEXTURE);2066CC_PRIM ();2067MOD_0 (TMOD_TEX_MUL_COL);2068MOD_0_COL (rdp.env_color & 0xFFFFFF00);2069rdp.best_tex = 0;2070cmb.tex |= 3;2071cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL;2072cmb.tmu1_invert = 1;2073cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;2074cmb.tmu0_fac = GR_COMBINE_FACTOR_LOCAL_ALPHA;2075}20762077//Added by Gonetz2078static void cc__t0_inter_t1_using_t1__mul_shade_add_prim ()2079{2080CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2081GR_COMBINE_FACTOR_TEXTURE_RGB,2082GR_COMBINE_LOCAL_CONSTANT,2083GR_COMBINE_OTHER_ITERATED);2084CC_PRIM ();2085T0_INTER_T1_USING_T1 ();2086}20872088//Added by Gonetz2089static void cc_t0_mul_prim_add_shade ()2090{2091CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2092GR_COMBINE_FACTOR_TEXTURE_RGB,2093GR_COMBINE_LOCAL_ITERATED,2094GR_COMBINE_OTHER_CONSTANT);2095CC_PRIM ();2096USE_T0 ();2097}20982099static void cc_t1_mul_prim_add_shade ()2100{2101CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2102GR_COMBINE_FACTOR_TEXTURE_RGB,2103GR_COMBINE_LOCAL_ITERATED,2104GR_COMBINE_OTHER_CONSTANT);2105CC_PRIM ();2106USE_T1 ();2107}21082109//Added by Gonetz2110static void cc_t0_mul_env_add_prim ()2111{2112CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2113GR_COMBINE_FACTOR_TEXTURE_RGB,2114GR_COMBINE_LOCAL_CONSTANT,2115GR_COMBINE_OTHER_ITERATED);2116SETSHADE_ENV ();2117CC_PRIM ();2118USE_T0 ();2119}21202121//Added by Gonetz2122static void cc_t1_mul_env_add_prim ()2123{2124CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2125GR_COMBINE_FACTOR_TEXTURE_RGB,2126GR_COMBINE_LOCAL_CONSTANT,2127GR_COMBINE_OTHER_ITERATED);2128SETSHADE_ENV ();2129CC_PRIM ();2130USE_T1 ();2131}21322133//Added by Gonetz2134static void cc__t0_mul_t1__mul_env_add_prim ()2135{2136CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2137GR_COMBINE_FACTOR_TEXTURE_RGB,2138GR_COMBINE_LOCAL_CONSTANT,2139GR_COMBINE_OTHER_ITERATED);2140SETSHADE_ENV ();2141CC_PRIM ();2142T0_MUL_T1 ();2143}21442145//Added by Gonetz2146static void cc__t0_add_t1__mul_env_add_prim ()2147{2148CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2149GR_COMBINE_FACTOR_TEXTURE_RGB,2150GR_COMBINE_LOCAL_CONSTANT,2151GR_COMBINE_OTHER_ITERATED);2152SETSHADE_ENV ();2153CC_PRIM ();2154T0_ADD_T1 ();2155}21562157//Added by Gonetz2158static void cc__t1_sub_t0__mul_env_add_prim ()2159{2160CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2161GR_COMBINE_FACTOR_TEXTURE_RGB,2162GR_COMBINE_LOCAL_CONSTANT,2163GR_COMBINE_OTHER_ITERATED);2164SETSHADE_ENV ();2165CC_PRIM ();2166T1_SUB_T0 ();2167}21682169//Added by Gonetz2170static void cc_t0_mul_env_add_shade ()2171{2172CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2173GR_COMBINE_FACTOR_TEXTURE_RGB,2174GR_COMBINE_LOCAL_ITERATED,2175GR_COMBINE_OTHER_CONSTANT);2176CC_ENV ();2177USE_T0 ();2178}21792180static void cc_t0_mul_shade_add_prim ()2181{2182CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2183GR_COMBINE_FACTOR_TEXTURE_RGB,2184GR_COMBINE_LOCAL_CONSTANT,2185GR_COMBINE_OTHER_ITERATED);2186CC_PRIM ();2187USE_T0 ();2188}21892190static void cc_t1_mul_shade_add_prim ()2191{2192CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2193GR_COMBINE_FACTOR_TEXTURE_RGB,2194GR_COMBINE_LOCAL_CONSTANT,2195GR_COMBINE_OTHER_ITERATED);2196CC_PRIM ();2197USE_T1 ();2198}21992200static void cc_t0_mul_shade_add_env ()2201{2202CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2203GR_COMBINE_FACTOR_TEXTURE_RGB,2204GR_COMBINE_LOCAL_CONSTANT,2205GR_COMBINE_OTHER_ITERATED);2206CC_ENV ();2207USE_T0 ();2208}22092210static void cc__t0_add_primlod__mul_shade_add_env ()2211{2212if (cmb.combine_ext)2213{2214T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2215GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,2216GR_CMBX_ZERO, 1,2217GR_CMBX_ZERO, 0);2218T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2219GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,2220GR_CMBX_ZERO, 1,2221GR_CMBX_ZERO, 0);2222CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,2223GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,2224GR_CMBX_ITRGB, 0,2225GR_CMBX_B, 0);2226CC_PRIMLOD ();2227cmb.tex_ccolor = cmb.ccolor;2228CC_ENV ();2229cmb.tex |= 1;2230}2231else2232{2233CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2234GR_COMBINE_FACTOR_TEXTURE_RGB,2235GR_COMBINE_LOCAL_CONSTANT,2236GR_COMBINE_OTHER_ITERATED);2237DWORD color = (lod_frac<<24) | (lod_frac<<16) | (lod_frac<<8);2238MOD_0 (TMOD_TEX_ADD_COL);2239MOD_0_COL (color & 0xFFFFFF00);2240CC_ENV ();2241USE_T0 ();2242}2243}22442245static void cc__t0_mul_prima_add_prim_mul__shade_add_env ()2246{2247CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2248GR_COMBINE_FACTOR_TEXTURE_RGB,2249GR_COMBINE_LOCAL_CONSTANT,2250GR_COMBINE_OTHER_ITERATED);2251CC_ENV ();2252if (cmb.combine_ext)2253{2254T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2255GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_ZERO,2256GR_CMBX_TMU_CALPHA, 0,2257GR_CMBX_B, 0);2258cmb.tex_ccolor = rdp.prim_color;2259cmb.tex |= 1;2260}2261else2262{2263MOD_0 (TMOD_TEX_SCALE_FAC_ADD_COL);2264MOD_0_COL (rdp.prim_color & 0xFFFFFF00);2265MOD_0_FAC (rdp.prim_color & 0xFF);2266USE_T0 ();2267}2268}22692270//Added by Gonetz2271static void cc_t0_mul_shadea_add_shade ()2272{2273CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2274GR_COMBINE_FACTOR_LOCAL_ALPHA,2275GR_COMBINE_LOCAL_ITERATED,2276GR_COMBINE_OTHER_TEXTURE);2277USE_T0 ();2278}22792280static void cc_prim_mul_prima_add_prim () //Added by Gonetz2281{2282CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2283GR_COMBINE_FACTOR_LOCAL_ALPHA,2284GR_COMBINE_LOCAL_CONSTANT,2285GR_COMBINE_OTHER_ITERATED);2286CC_PRIM ();2287CA_PRIM ();2288SETSHADE_PRIM ();2289}22902291static void cc_prim_mul_prima_add_t0 () //Added by Gonetz2292{2293CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2294GR_COMBINE_FACTOR_ONE,2295GR_COMBINE_LOCAL_ITERATED,2296GR_COMBINE_OTHER_TEXTURE);2297SETSHADE_PRIM ();2298SETSHADE_PRIMA ();2299USE_T0 ();2300}23012302static void cc_prim_mul_env_add_t0 () //Added by Gonetz2303{2304CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2305GR_COMBINE_FACTOR_ONE,2306GR_COMBINE_LOCAL_ITERATED,2307GR_COMBINE_OTHER_TEXTURE);2308SETSHADE_PRIM ();2309SETSHADE_ENV ();2310USE_T0 ();2311}23122313static void cc_prim_mul_shade_add_env ()2314{2315CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2316GR_COMBINE_FACTOR_ONE,2317GR_COMBINE_LOCAL_CONSTANT,2318GR_COMBINE_OTHER_ITERATED);2319CC_ENV ();2320MULSHADE_PRIM ();2321}23222323static void cc_env_mul_shade_add_env () //Added by Gonetz2324{2325CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2326GR_COMBINE_FACTOR_ONE,2327GR_COMBINE_LOCAL_CONSTANT,2328GR_COMBINE_OTHER_ITERATED);2329CC_ENV ();2330MULSHADE_ENV ();2331}23322333// ** A*B+C*D **2334static void cc_t0_mul_prim_add_one_sub_prim_mul_shade () //Added by Gonetz2335{2336CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2337GR_COMBINE_FACTOR_TEXTURE_RGB,2338GR_COMBINE_LOCAL_ITERATED,2339GR_COMBINE_OTHER_CONSTANT);2340CC_PRIM ();2341MULSHADE_1MPRIM ();2342USE_T0 ();2343}23442345static void cc_t0_mul_prim_add_shade_sub_env_mul_prim () //Added by Gonetz2346{2347CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2348GR_COMBINE_FACTOR_TEXTURE_RGB,2349GR_COMBINE_LOCAL_ITERATED,2350GR_COMBINE_OTHER_CONSTANT);2351CC_PRIM ();2352SUBSHADE_ENV ()2353MULSHADE_PRIM ();2354USE_T0 ();2355}23562357static void cc_t0_mul_prim_add_shade_mul_shadea_mul_prim ()2358{2359CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2360GR_COMBINE_FACTOR_TEXTURE_RGB,2361GR_COMBINE_LOCAL_ITERATED,2362GR_COMBINE_OTHER_CONSTANT);2363CC_PRIM ();2364MULSHADE_PRIM ();2365MULSHADE_SHADEA ();2366USE_T0 ();2367}23682369static void cc_t0_mul_env_add_prim_mul_shade () //Added by Gonetz2370{2371CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2372GR_COMBINE_FACTOR_TEXTURE_RGB,2373GR_COMBINE_LOCAL_ITERATED,2374GR_COMBINE_OTHER_CONSTANT);2375MULSHADE_PRIM ();2376CC_ENV ();2377USE_T0 ();2378}23792380static void cc_t0_mul_enva_add_prim_mul_shade () //Added by Gonetz2381{2382CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2383GR_COMBINE_FACTOR_TEXTURE_RGB,2384GR_COMBINE_LOCAL_ITERATED,2385GR_COMBINE_OTHER_CONSTANT);2386MULSHADE_PRIM ();2387CC_ENVA ();2388USE_T0 ();2389}23902391static void cc_t0_mul_shade_add_prim_mul_env () //Added by Gonetz2392{2393CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2394GR_COMBINE_FACTOR_TEXTURE_RGB,2395GR_COMBINE_LOCAL_CONSTANT,2396GR_COMBINE_OTHER_ITERATED);2397CC_PRIMMULENV ();2398USE_T0 ();2399}24002401static void cc_prim_mul_env_add_one_sub_prim_mul_shade () //Added by Gonetz2402{2403CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2404GR_COMBINE_FACTOR_ONE,2405GR_COMBINE_LOCAL_ITERATED,2406GR_COMBINE_OTHER_CONSTANT);2407MULSHADE_1MPRIM ();2408CC_PRIMMULENV ();2409}24102411// ** A*B*C **24122413static void cc_t0_mul_prim_mul_prim () //Added by Gonetz2414{2415CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2416GR_COMBINE_FACTOR_LOCAL,2417GR_COMBINE_LOCAL_ITERATED,2418GR_COMBINE_OTHER_TEXTURE);2419SETSHADE_PRIM ();2420SETSHADE_PRIM ();2421USE_T0 ();2422}24232424static void cc_t0_mul_prim_mul_prima () //Added by Gonetz2425{2426CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2427GR_COMBINE_FACTOR_LOCAL,2428GR_COMBINE_LOCAL_ITERATED,2429GR_COMBINE_OTHER_TEXTURE);2430SETSHADE_PRIM ();2431SETSHADE_PRIMA ();2432USE_T0 ();2433}24342435static void cc_t0_mul_enva_mul_shade ()2436{2437CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2438GR_COMBINE_FACTOR_LOCAL,2439GR_COMBINE_LOCAL_ITERATED,2440GR_COMBINE_OTHER_TEXTURE);2441MULSHADE_ENVA ();2442USE_T0 ();2443}24442445static void cc_t0_mul_primlod_mul_prim () //Added by Gonetz2446{2447CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2448GR_COMBINE_FACTOR_LOCAL,2449GR_COMBINE_LOCAL_CONSTANT,2450GR_COMBINE_OTHER_TEXTURE);2451cmb.ccolor = (rdp.prim_color*lod_frac)&0xFFFFFF00;2452USE_T0 ();2453}24542455static void cc_t0_mul_primlod_mul_shade () //Added by Gonetz2456{2457CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2458GR_COMBINE_FACTOR_LOCAL,2459GR_COMBINE_LOCAL_ITERATED,2460GR_COMBINE_OTHER_TEXTURE);2461MULSHADE_PRIMLOD ();2462USE_T0 ();2463}24642465static void cc__t0_mul_t1__mul_prim ()2466{2467CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2468GR_COMBINE_FACTOR_LOCAL,2469GR_COMBINE_LOCAL_CONSTANT,2470GR_COMBINE_OTHER_TEXTURE);2471CC_PRIM ();2472T0_MUL_T1 ();2473}24742475static void cc__t1_mul_t1_add_t0__mul_prim ()2476{2477CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2478GR_COMBINE_FACTOR_LOCAL,2479GR_COMBINE_LOCAL_CONSTANT,2480GR_COMBINE_OTHER_TEXTURE);2481CC_PRIM ();2482if (cmb.combine_ext)2483{2484T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2485GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2486GR_CMBX_ZERO, 0,2487GR_CMBX_B, 0);2488T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,2489GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,2490GR_CMBX_OTHER_TEXTURE_RGB, 0,2491GR_CMBX_B, 0);2492cmb.tex |= 3;2493}2494else2495{2496T0_ADD_T1 ();2497}2498}24992500static void cc__t0_mul_t1__mul_prima () //Added by Gonetz2501{2502CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2503GR_COMBINE_FACTOR_LOCAL,2504GR_COMBINE_LOCAL_CONSTANT,2505GR_COMBINE_OTHER_TEXTURE);2506CC_PRIMA ();2507T0_MUL_T1 ();2508}25092510static void cc__t0_mul_t1__mul_env () //Added by Gonetz2511{2512CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2513GR_COMBINE_FACTOR_LOCAL,2514GR_COMBINE_LOCAL_CONSTANT,2515GR_COMBINE_OTHER_TEXTURE);2516CC_ENV ();2517T0_MUL_T1 ();2518}25192520static void cc__t0_mul_t1__mul_enva () //Added by Gonetz2521{2522CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2523GR_COMBINE_FACTOR_LOCAL,2524GR_COMBINE_LOCAL_CONSTANT,2525GR_COMBINE_OTHER_TEXTURE);2526CC_ENVA ();2527T0_MUL_T1 ();2528}25292530static void cc__t0_mul_t1__mul_shade ()2531{2532CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2533GR_COMBINE_FACTOR_LOCAL,2534GR_COMBINE_LOCAL_ITERATED,2535GR_COMBINE_OTHER_TEXTURE);2536T0_MUL_T1 ();2537}25382539static void cc__t0a_mul_t1__mul_prim () //Added by Gonetz2540{2541CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2542GR_COMBINE_FACTOR_LOCAL,2543GR_COMBINE_LOCAL_CONSTANT,2544GR_COMBINE_OTHER_TEXTURE);2545CC_PRIM ();2546T0A_MUL_T1 ();2547}25482549static void cc__t0_mul_t1a__mul_shade () //Added by Gonetz2550{2551CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2552GR_COMBINE_FACTOR_LOCAL,2553GR_COMBINE_LOCAL_ITERATED,2554GR_COMBINE_OTHER_TEXTURE);2555T0_MUL_T1A ();2556}25572558static void cc__t0a_mul_t1__mul_shade () //Added by Gonetz2559{2560CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2561GR_COMBINE_FACTOR_LOCAL,2562GR_COMBINE_LOCAL_ITERATED,2563GR_COMBINE_OTHER_TEXTURE);2564T0A_MUL_T1 ();2565}25662567static void cc_t0_mul_prim_mul_env ()2568{2569CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2570GR_COMBINE_FACTOR_LOCAL,2571GR_COMBINE_LOCAL_ITERATED,2572GR_COMBINE_OTHER_TEXTURE);2573SETSHADE_PRIM ();2574SETSHADE_ENV (); // notice that setshade multiplies2575USE_T0 ();2576}25772578static void cc_t0_mul_prim_mul_shade ()2579{2580CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2581GR_COMBINE_FACTOR_LOCAL,2582GR_COMBINE_LOCAL_ITERATED,2583GR_COMBINE_OTHER_TEXTURE);2584MULSHADE_PRIM ();2585USE_T0 ();2586}25872588static void cc_t0_mul_prim_mul_shadea ()2589{2590CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2591GR_COMBINE_FACTOR_LOCAL,2592GR_COMBINE_LOCAL_ITERATED,2593GR_COMBINE_OTHER_TEXTURE);2594SETSHADE_PRIM ();2595MULSHADE_SHADEA();2596USE_T0 ();2597}25982599static void cc_t0_mul_prima_mul_shade ()2600{2601CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2602GR_COMBINE_FACTOR_LOCAL,2603GR_COMBINE_LOCAL_ITERATED,2604GR_COMBINE_OTHER_TEXTURE);2605MULSHADE_PRIMA ();2606USE_T0 ();2607}26082609static void cc_t0_mul_one_sub_prim_mul_shade ()2610{2611CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2612GR_COMBINE_FACTOR_LOCAL,2613GR_COMBINE_LOCAL_ITERATED,2614GR_COMBINE_OTHER_TEXTURE);2615MULSHADE_1MPRIM ();2616USE_T0 ();2617}26182619static void cc_t0_mul_one_sub_env_mul_shade ()2620{2621CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2622GR_COMBINE_FACTOR_LOCAL,2623GR_COMBINE_LOCAL_ITERATED,2624GR_COMBINE_OTHER_TEXTURE);2625MULSHADE_1MENV ();2626USE_T0 ();2627}26282629static void cc_t1_mul_prim_mul_shade ()2630{2631CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2632GR_COMBINE_FACTOR_LOCAL,2633GR_COMBINE_LOCAL_ITERATED,2634GR_COMBINE_OTHER_TEXTURE);2635MULSHADE_PRIM ();2636USE_T1 ();2637}26382639//Added by Gonetz2640static void cc_t0_mul_1mprim_mul_shade ()2641{2642CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2643GR_COMBINE_FACTOR_LOCAL,2644GR_COMBINE_LOCAL_ITERATED,2645GR_COMBINE_OTHER_TEXTURE);2646MULSHADE_1MPRIM ();2647USE_T0 ();2648}26492650static void cc_t0_mul_env_mul_shade ()2651{2652CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2653GR_COMBINE_FACTOR_LOCAL,2654GR_COMBINE_LOCAL_ITERATED,2655GR_COMBINE_OTHER_TEXTURE);2656MULSHADE_ENV ();2657USE_T0 ();2658}26592660static void cc_t0_mul_shade_mul_shadea ()2661{2662CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2663GR_COMBINE_FACTOR_LOCAL,2664GR_COMBINE_LOCAL_ITERATED,2665GR_COMBINE_OTHER_TEXTURE);2666MULSHADE_SHADEA ();2667USE_T0 ();2668}26692670static void cc_prim_mul_env_mul_shade ()2671{2672CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2673GR_COMBINE_FACTOR_LOCAL,2674GR_COMBINE_LOCAL_CONSTANT,2675GR_COMBINE_OTHER_ITERATED);2676CC_ENV ();2677MULSHADE_PRIM ();2678}26792680static void cc_prim_mul_one_sub_env_mul_shade ()2681{2682CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2683GR_COMBINE_FACTOR_LOCAL,2684GR_COMBINE_LOCAL_CONSTANT,2685GR_COMBINE_OTHER_ITERATED);2686CC_1SUBENV ();2687MULSHADE_PRIM ();2688}26892690// ** A*B*C+D **2691static void cc_t0_mul_prim_mul_shade_add_env ()2692{2693CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2694GR_COMBINE_FACTOR_TEXTURE_RGB,2695GR_COMBINE_LOCAL_CONSTANT,2696GR_COMBINE_OTHER_ITERATED);2697CC_ENV ();2698MULSHADE_PRIM ();2699USE_T0 ();2700}27012702//Added by Gonetz2703static void cc_t0_mul_prim_mul_shadea_add_env ()2704{2705CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2706GR_COMBINE_FACTOR_LOCAL_ALPHA,2707GR_COMBINE_LOCAL_ITERATED,2708GR_COMBINE_OTHER_TEXTURE);2709CC_ENV ();2710SETSHADE_ENV ();2711MULSHADE_A_PRIM ();2712USE_T0 ();2713}27142715// (A*B+C)*D2716static void cc__t0a_mul_prim_add_t0__mul_shade ()2717{2718CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2719GR_COMBINE_FACTOR_LOCAL,2720GR_COMBINE_LOCAL_ITERATED,2721GR_COMBINE_OTHER_TEXTURE);2722MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);2723MOD_0_COL (rdp.prim_color & 0xFFFFFF00);2724USE_T0 ();2725}27262727static void cc__t0a_mul_env_add_t0__mul_shade ()2728{2729CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2730GR_COMBINE_FACTOR_LOCAL,2731GR_COMBINE_LOCAL_ITERATED,2732GR_COMBINE_OTHER_TEXTURE);2733MOD_0 (TMOD_COL_MUL_TEXA_ADD_TEX);2734MOD_0_COL (rdp.env_color & 0xFFFFFF00);2735USE_T0 ();2736}27372738// ** A*B*C+D*E **2739//Added by Gonetz2740static void cc_t0_mul_prim_mul_shade_add_prim_mul_env ()2741{2742CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2743GR_COMBINE_FACTOR_TEXTURE_RGB,2744GR_COMBINE_LOCAL_CONSTANT,2745GR_COMBINE_OTHER_ITERATED);2746CC_PRIMMULENV ();2747MULSHADE_PRIM ();2748USE_T0 ();2749}27502751//Added by Gonetz2752static void cc_t0_mul_one_sub_prim_mul_shade_add_prim_mul_env ()2753{2754CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2755GR_COMBINE_FACTOR_TEXTURE_RGB,2756GR_COMBINE_LOCAL_CONSTANT,2757GR_COMBINE_OTHER_ITERATED);2758CC_PRIMMULENV ();2759MULSHADE_1MPRIM ();2760USE_T0 ();2761}27622763//Added by Gonetz2764static void cc_t0_mul_one_sub_prim_mul_shadea_add_prim_mul_env ()2765{2766CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2767GR_COMBINE_FACTOR_TEXTURE_RGB,2768GR_COMBINE_LOCAL_CONSTANT,2769GR_COMBINE_OTHER_ITERATED);2770CC_PRIMMULENV ();2771SETSHADE_1MPRIM ();2772MULSHADE_SHADEA ();2773USE_T0 ();2774}27752776//Added by Gonetz2777static void cc_t0_mul_one_sub_env_mul_shade_add_env ()2778{2779CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2780GR_COMBINE_FACTOR_TEXTURE_RGB,2781GR_COMBINE_LOCAL_CONSTANT,2782GR_COMBINE_OTHER_ITERATED);2783CC_ENV ();2784MULSHADE_1MENV ();2785USE_T0 ();2786}27872788static void cc_t0_mul_prima_mul_shade_add_prim_mul_one_sub_prima () //Aded by Gonetz2789{2790CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2791GR_COMBINE_FACTOR_TEXTURE_RGB,2792GR_COMBINE_LOCAL_CONSTANT,2793GR_COMBINE_OTHER_ITERATED);2794MULSHADE_PRIMA ();2795USE_T0 ();2796BYTE fac = 255 - (BYTE)(rdp.prim_color&0xFF);2797float col[3];2798col[0] = (float)((rdp.prim_color & 0xFF000000) >> 24) / 255.0f;2799col[1] = (float)((rdp.prim_color & 0x00FF0000) >> 16) / 255.0f;2800col[2] = (float)((rdp.prim_color & 0x0000FF00) >> 8) / 255.0f;2801CC ( ((BYTE)(col[0]*fac))<<24 | ((BYTE)(col[1]*fac))<<16 | ((BYTE)(col[2]*fac))<<8 | fac );2802}28032804// ** A*(1-B)+C **2805static void cc_t0_mul_1menv_add_prim ()2806{2807CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,2808GR_COMBINE_FACTOR_TEXTURE_RGB,2809GR_COMBINE_LOCAL_CONSTANT,2810GR_COMBINE_OTHER_ITERATED);2811CC_PRIM ();2812SETSHADE_1MENV ();2813USE_T0 ();2814}28152816// ** (A+B)*C **2817static void cc_t0_add_prim_mul_shade () //Aded by Gonetz2818{2819CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2820GR_COMBINE_FACTOR_LOCAL,2821GR_COMBINE_LOCAL_ITERATED,2822GR_COMBINE_OTHER_TEXTURE);2823MOD_0 (TMOD_TEX_ADD_COL);2824MOD_0_COL (rdp.prim_color & 0xFFFFFF00);2825USE_T0 ();2826}28272828static void cc_t0_mul__prim_add_env () //Aded by Gonetz2829{2830CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2831GR_COMBINE_FACTOR_LOCAL,2832GR_COMBINE_LOCAL_ITERATED,2833GR_COMBINE_OTHER_TEXTURE);2834SETSHADE_PRIM ();2835ADDSHADE_ENV ();2836USE_T0 ();2837}28382839static void cc_t1_mul__prim_add_env () //Aded by Gonetz2840{2841CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2842GR_COMBINE_FACTOR_LOCAL,2843GR_COMBINE_LOCAL_ITERATED,2844GR_COMBINE_OTHER_TEXTURE);2845SETSHADE_PRIM ();2846ADDSHADE_ENV ();2847USE_T1 ();2848}28492850// ** (A-B)*C **2851static void cc__t0_mul_prim_add_shade__sub_env_mul_shade ()2852{2853if (cmb.combine_ext)2854{2855T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2856GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,2857GR_CMBX_TMU_CCOLOR, 0,2858GR_CMBX_B, 0);2859cmb.tex_ccolor = rdp.prim_color;2860cmb.tex |= 1;2861CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,2862GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,2863GR_CMBX_ITRGB, 0,2864GR_CMBX_ZERO, 0);2865CC_ENV ();2866}2867else2868{2869cc_t0_mul_prim_mul_shade ();2870}2871}28722873static void cc__t0_sub_env_mul_shade__sub_prim_mul_shade ()2874{2875if (cmb.combine_ext)2876{2877T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,2878GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,2879GR_CMBX_ITRGB, 0,2880GR_CMBX_ZERO, 0);2881cmb.tex_ccolor = rdp.env_color;2882cmb.tex |= 1;2883CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,2884GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,2885GR_CMBX_ITRGB, 0,2886GR_CMBX_ITRGB, 0);2887CC_PRIM ();2888}2889else2890{2891cc_t0_mul_shade ();2892}2893}28942895static void cc_t0_sub_env_mul_shade ()2896{2897if (cmb.combine_ext)2898{2899CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,2900GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,2901GR_CMBX_ITRGB, 0,2902GR_CMBX_ZERO, 0);2903CC_ENV ();2904}2905else2906{2907CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2908GR_COMBINE_FACTOR_LOCAL,2909GR_COMBINE_LOCAL_ITERATED,2910GR_COMBINE_OTHER_TEXTURE);2911if (rdp.env_color & 0xFFFFFF00)2912{2913MOD_0 (TMOD_TEX_SUB_COL);2914MOD_0_COL (rdp.env_color & 0xFFFFFF00);2915}2916}2917USE_T0 ();2918}29192920static void cc_one_sub_t0_mul_prim () //Added by Gonetz2921{2922CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,2923GR_COMBINE_FACTOR_TEXTURE_RGB,2924GR_COMBINE_LOCAL_CONSTANT,2925GR_COMBINE_OTHER_NONE);2926CC_PRIM ();2927USE_T0 ();2928}29292930static void cc_shade_sub_prim_mul_t0 () //Aded by Gonetz2931{2932CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,2933GR_COMBINE_FACTOR_TEXTURE_RGB,2934GR_COMBINE_LOCAL_CONSTANT,2935GR_COMBINE_OTHER_ITERATED);2936CC_PRIM ();2937USE_T0 ();2938}29392940static void cc_shade_sub_prim_mul_env () //Aded by Gonetz2941{2942CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2943GR_COMBINE_FACTOR_LOCAL,2944GR_COMBINE_LOCAL_CONSTANT,2945GR_COMBINE_OTHER_ITERATED);2946CC_ENV ();2947SUBSHADE_PRIM ();2948}29492950static void cc_shade_sub_env_mul_t0 () //Aded by Gonetz2951{2952CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,2953GR_COMBINE_FACTOR_TEXTURE_RGB,2954GR_COMBINE_LOCAL_CONSTANT,2955GR_COMBINE_OTHER_ITERATED);2956CC_ENV ();2957USE_T0 ();2958}29592960static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod () //Aded by Gonetz2961{2962CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,2963GR_COMBINE_FACTOR_TEXTURE_RGB,2964GR_COMBINE_LOCAL_CONSTANT,2965GR_COMBINE_OTHER_ITERATED);2966CC_PRIM ();2967T0_INTER_T1_USING_FACTOR (lod_frac);2968}29692970static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz2971{2972CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,2973GR_COMBINE_FACTOR_TEXTURE_RGB,2974GR_COMBINE_LOCAL_CONSTANT,2975GR_COMBINE_OTHER_ITERATED);2976CC_ENV ();2977T0_INTER_T1_USING_FACTOR (lod_frac);2978}29792980static void cc_one_sub__t0_mul_t1__mul_shade () //Aded by Gonetz2981{2982CCMB (GR_COMBINE_FUNCTION_BLEND,2983GR_COMBINE_FACTOR_TEXTURE_RGB,2984GR_COMBINE_LOCAL_ITERATED,2985GR_COMBINE_OTHER_CONSTANT);2986CC (0);2987T0_MUL_T1 ();2988}29892990static void cc_one_sub_env_mul_t0 () //Aded by Gonetz2991{2992CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,2993GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,2994GR_COMBINE_LOCAL_CONSTANT,2995GR_COMBINE_OTHER_TEXTURE);2996CC_ENV ();2997USE_T0 ();2998}29993000static void cc_one_sub_env_mul__t0_inter_t1_using_primlod () //Aded by Gonetz3001{3002CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3003GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3004GR_COMBINE_LOCAL_CONSTANT,3005GR_COMBINE_OTHER_TEXTURE);3006CC_ENV ();3007T0_INTER_T1_USING_FACTOR (lod_frac);3008}30093010static void cc_one_sub_env_mul_shade () //Aded by Gonetz3011{3012CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3013GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3014GR_COMBINE_LOCAL_CONSTANT,3015GR_COMBINE_OTHER_ITERATED);3016CC_ENV ();3017}30183019// ** (1-A)*B + A*C **3020static void cc_t0_mul_env_add_1mt0_mul_shade ()3021{3022CCMB (GR_COMBINE_FUNCTION_BLEND,3023GR_COMBINE_FACTOR_TEXTURE_RGB,3024GR_COMBINE_LOCAL_ITERATED,3025GR_COMBINE_OTHER_CONSTANT);3026CC_ENV ();3027USE_T0 ();3028}30293030// ** (1-A)*B+C **3031static void cc_one_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade () //Added by Gonetz3032{3033CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3034GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3035GR_COMBINE_LOCAL_ITERATED,3036GR_COMBINE_OTHER_TEXTURE);3037T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();3038}30393040// ** (1-A)*B*C **3041static void cc_one_sub_t0_mul_prim_mul_shade () //Added by Gonetz3042{3043CCMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,3044GR_COMBINE_FACTOR_TEXTURE_RGB,3045GR_COMBINE_LOCAL_ITERATED,3046GR_COMBINE_OTHER_NONE);3047MULSHADE_PRIM ();3048USE_T0 ();3049}30503051// ** (A-B)*C*D **3052static void cc_prim_sub_env_mul_t0_mul_shade ()3053{3054CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3055GR_COMBINE_FACTOR_TEXTURE_RGB,3056GR_COMBINE_LOCAL_NONE,3057GR_COMBINE_OTHER_ITERATED);3058MULSHADE_PRIMSUBENV ();3059USE_T0 ();3060}30613062// ** (A-B)*C+D **3063static void cc_t0_sub_t1_mul_prim_mul_shade_add_t1 () //Aded by Gonetz3064{3065if (cmb.combine_ext)3066{3067T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3068GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3069GR_CMBX_ZERO, 0,3070GR_CMBX_B, 0);3071T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3072GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,3073GR_CMBX_ITRGB, 0,3074GR_CMBX_B, 0);3075CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3076GR_COMBINE_FACTOR_ONE,3077GR_COMBINE_LOCAL_NONE,3078GR_COMBINE_OTHER_TEXTURE);3079MULSHADE_PRIM ();3080cmb.tex |= 3;3081}3082else3083{3084CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3085GR_COMBINE_FACTOR_LOCAL,3086GR_COMBINE_LOCAL_CONSTANT,3087GR_COMBINE_OTHER_TEXTURE);3088CC_PRIM ();3089T0_ADD_T1 ();3090}3091}30923093static void cc_t0_sub_prim_mul_t0a_add_prim () //Aded by Gonetz3094{3095CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3096GR_COMBINE_FACTOR_TEXTURE_ALPHA,3097GR_COMBINE_LOCAL_CONSTANT,3098GR_COMBINE_OTHER_TEXTURE);3099CC_PRIM ();3100USE_T0 ();3101}31023103static void cc_t0_sub_prim_mul_prima_add_prim () //Aded by Gonetz3104{3105// * not guaranteed to work if another iterated alpha is set3106CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3107GR_COMBINE_FACTOR_TEXTURE_RGB,3108GR_COMBINE_LOCAL_ITERATED,3109GR_COMBINE_OTHER_CONSTANT);3110SETSHADE_PRIM ();3111SETSHADE_1MPRIMA ();3112CC_PRIMA ();3113USE_T0 ();3114}31153116static void cc_t0_sub_prim_mul_shadea_add_prim () //Aded by Gonetz3117{3118// * not guaranteed to work if another iterated alpha is set3119CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3120GR_COMBINE_FACTOR_LOCAL_ALPHA,3121GR_COMBINE_LOCAL_ITERATED,3122GR_COMBINE_OTHER_TEXTURE);3123SETSHADE_PRIM ();3124USE_T0 ();3125}31263127static void cc_t0_sub_prim_mul_env_add_shade () //Aded by Gonetz3128{3129if (cmb.combine_ext)3130{3131T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3132GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,3133GR_CMBX_ZERO, 1,3134GR_CMBX_ZERO, 0);3135cmb.tex |= 1;3136cmb.tex_ccolor = rdp.prim_color;3137CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3138GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,3139GR_CMBX_CONSTANT_COLOR, 0,3140GR_CMBX_B, 0);3141CC_ENV ();3142}3143else3144{3145cc_t0_mul_env_add_shade ();3146}3147}31483149static void cc__t0_inter_t1_using_shadea__sub_prim_mul_env_add_shade () //Aded by Gonetz3150{3151if (cmb.combine_ext)3152{3153CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3154GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,3155GR_CMBX_CONSTANT_COLOR, 0,3156GR_CMBX_B, 0);3157//have to pass shade alpha to combiner3158ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,3159GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,3160GR_CMBX_ZERO, 0,3161GR_CMBX_ZERO, 0);3162}3163else3164{3165CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3166GR_COMBINE_FACTOR_TEXTURE_RGB,3167GR_COMBINE_LOCAL_ITERATED,3168GR_COMBINE_OTHER_CONSTANT);3169}3170CC_ENV ();3171SUBSHADE_PRIMMULENV ();3172T0_INTER_T1_USING_SHADEA ();3173}317431753176static void cc_t0_sub_prim_mul_env_add_prim () //Aded by Gonetz3177{3178CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3179GR_COMBINE_FACTOR_TEXTURE_RGB,3180GR_COMBINE_LOCAL_ITERATED,3181GR_COMBINE_OTHER_CONSTANT);3182CC_ENV ();3183SETSHADE_PRIM ();3184SETSHADE_1MENV ();3185USE_T0 ();3186}31873188static void cc_t0_sub_prim_mul_enva_add_prim () //Aded by Gonetz3189{3190// * not guaranteed to work if another iterated alpha is set3191CCMB (GR_COMBINE_FUNCTION_BLEND,3192GR_COMBINE_FACTOR_LOCAL_ALPHA,3193GR_COMBINE_LOCAL_CONSTANT,3194GR_COMBINE_OTHER_TEXTURE);3195CC_PRIM ();3196CA_ENV ();3197USE_T0 ();3198}31993200static void cc_t0_sub_prim_mul_primlod_add_env () //Aded by Gonetz3201{3202CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3203GR_COMBINE_FACTOR_ONE,3204GR_COMBINE_LOCAL_CONSTANT,3205GR_COMBINE_OTHER_TEXTURE);3206CC_ENV ();3207MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);3208MOD_0_COL (rdp.prim_color & 0xFFFFFF00);3209MOD_0_FAC (lod_frac & 0xFF);3210USE_T0 ();3211}32123213static void cc_t0_sub__prim_mul_env () //Aded by Gonetz3214{3215CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,3216GR_COMBINE_FACTOR_ONE,3217GR_COMBINE_LOCAL_ITERATED,3218GR_COMBINE_OTHER_TEXTURE);3219SETSHADE_PRIM ();3220SETSHADE_ENV ();3221USE_T0 ();3222}32233224static void cc__t0_mul_t1__sub_prim_mul__t0t1a__add_prim () //Aded by Gonetz3225{3226// * not guaranteed to work if another iterated alpha is set3227CCMB (GR_COMBINE_FUNCTION_BLEND,3228GR_COMBINE_FACTOR_TEXTURE_ALPHA,3229GR_COMBINE_LOCAL_CONSTANT,3230GR_COMBINE_OTHER_TEXTURE);3231CC_PRIM ();3232T0_MUL_T1 ();3233A_T0_MUL_T1 ();3234}32353236static void cc__t1_inter_t0_using_enva__sub_prim_mul_prima_add_prim () //Aded by Gonetz3237{3238// * not guaranteed to work if another iterated alpha is set3239CCMB (GR_COMBINE_FUNCTION_BLEND,3240GR_COMBINE_FACTOR_LOCAL_ALPHA,3241GR_COMBINE_LOCAL_CONSTANT,3242GR_COMBINE_OTHER_TEXTURE);3243CC_PRIM ();3244CA_PRIM ();3245BYTE factor = (BYTE)(rdp.env_color&0xFF);3246T1_INTER_T0_USING_FACTOR (factor);3247}32483249static void cc__t0_mul_shade__sub_env_mul_shadea_add_env () //Aded by Gonetz3250{3251if (rdp.tiles[rdp.cur_tile].format == 4)3252{3253CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3254GR_COMBINE_FACTOR_OTHER_ALPHA,3255GR_COMBINE_LOCAL_CONSTANT,3256GR_COMBINE_OTHER_ITERATED);3257CC_ENV ();3258}3259else if (rdp.tiles[rdp.cur_tile].format == 2)3260{3261CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3262GR_COMBINE_FACTOR_LOCAL,3263GR_COMBINE_LOCAL_ITERATED,3264GR_COMBINE_OTHER_TEXTURE);3265USE_T0 ();3266}3267else3268{3269cc_t0 ();3270}3271}32723273static void cc_t0_sub_env_mul_k5_add_prim () //Aded by Gonetz3274{3275CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3276GR_COMBINE_FACTOR_ONE,3277GR_COMBINE_LOCAL_CONSTANT,3278GR_COMBINE_OTHER_TEXTURE);3279CC_PRIM ();3280MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);3281MOD_0_COL (rdp.env_color & 0xFFFFFF00);3282MOD_0_FAC (rdp.K5);3283USE_T0 ();3284}32853286static void cc__t0_inter_t1_using_t0__sub_shade_mul_prima_add_shade () //Aded by Gonetz3287{3288if (cmb.combine_ext)3289{3290cmb.tex |= 3;3291CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3292GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,3293GR_CMBX_CONSTANT_COLOR, 0,3294GR_CMBX_B, 0);3295CC_PRIMA();3296}3297else3298{3299// * not guaranteed to work if another iterated alpha is set3300CCMB (GR_COMBINE_FUNCTION_BLEND,3301GR_COMBINE_FACTOR_LOCAL_ALPHA,3302GR_COMBINE_LOCAL_ITERATED,3303GR_COMBINE_OTHER_TEXTURE);3304SETSHADE_A_PRIM ();3305}3306// T0_INTER_T1_USING_T0 ();3307T1_INTER_T0_USING_T0 (); //strange, but this one looks better3308}33093310static void cc_t0_sub__prim_mul_shade__mul_enva_add__prim_mul_shade () //Aded by Gonetz3311{3312// * not guaranteed to work if another iterated alpha is set3313CCMB (GR_COMBINE_FUNCTION_BLEND,3314GR_COMBINE_FACTOR_LOCAL_ALPHA,3315GR_COMBINE_LOCAL_ITERATED,3316GR_COMBINE_OTHER_TEXTURE);3317MULSHADE_PRIM ();3318SETSHADE_A_ENV ();3319USE_T0 ();3320}33213322static void cc_t0_sub_env_mul_t0_add_env () //Aded by Gonetz3323{3324CCMB (GR_COMBINE_FUNCTION_BLEND,3325GR_COMBINE_FACTOR_TEXTURE_RGB,3326GR_COMBINE_LOCAL_CONSTANT,3327GR_COMBINE_OTHER_TEXTURE);3328CC_ENV ();3329USE_T0 ();3330//(t0-env)*t0+env = t0*t0 + (1-t0)*env3331}33323333static void cc_t0_sub_env_mul_prim_add_shade () //Aded by Gonetz3334{3335CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3336GR_COMBINE_FACTOR_TEXTURE_RGB,3337GR_COMBINE_LOCAL_ITERATED,3338GR_COMBINE_OTHER_CONSTANT);3339CC_PRIM ();3340MOD_0 (TMOD_TEX_SUB_COL);3341MOD_0_COL (rdp.env_color & 0xFFFFFF00);3342USE_T0 ();3343}33443345static void cc_t0_sub_env_mul_shade_add_prim () //Aded by Gonetz3346{3347CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3348GR_COMBINE_FACTOR_TEXTURE_RGB,3349GR_COMBINE_LOCAL_CONSTANT,3350GR_COMBINE_OTHER_ITERATED);3351CC_PRIM ();3352MOD_0 (TMOD_TEX_SUB_COL);3353MOD_0_COL (rdp.env_color & 0xFFFFFF00);3354USE_T0 ();3355}33563357static void cc__t0_sub_env_mul_shade_add_prim__mul_shade () //Aded by Gonetz3358{3359if (!cmb.combine_ext)3360{3361cc_t0_sub_env_mul_shade_add_prim ();3362return;3363}3364T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3365GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,3366GR_CMBX_ITRGB, 0,3367GR_CMBX_ZERO, 0);3368cmb.tex_ccolor = rdp.env_color;3369cmb.tex |= 1;3370CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3371GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,3372GR_CMBX_ITRGB, 0,3373GR_CMBX_ZERO, 0);3374CC_PRIM ();3375}33763377static void cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_env ()3378{3379// (t1-t0)*primlod+t0, (cmb-env)*shade+env3380if (cmb.combine_ext)3381{3382CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,3383GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,3384GR_CMBX_ITRGB, 0,3385GR_CMBX_B, 0);3386}3387else3388{3389CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3390GR_COMBINE_FACTOR_TEXTURE_RGB,3391GR_COMBINE_LOCAL_CONSTANT,3392GR_COMBINE_OTHER_ITERATED);3393}3394CC_ENV ();3395T0_INTER_T1_USING_FACTOR (lod_frac);3396}339733983399static void cc_t0_sub_env_mul_enva_add_prim () //Aded by Gonetz3400{3401CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3402GR_COMBINE_FACTOR_ONE,3403GR_COMBINE_LOCAL_CONSTANT,3404GR_COMBINE_OTHER_TEXTURE);3405CC_PRIM ();3406MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC);3407MOD_0_COL (rdp.env_color & 0xFFFFFF00);3408MOD_0_FAC (rdp.env_color & 0xFF);3409USE_T0 ();3410}34113412static void cc_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz3413{3414CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3415GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3416GR_COMBINE_LOCAL_CONSTANT,3417GR_COMBINE_OTHER_TEXTURE);3418CC_PRIM ();3419USE_T0 ();3420//(1-t)*prim+t == (1-prim)*t+prim3421}34223423static void cc_one_sub_t1_mul_prim_add_t1 () //Aded by Gonetz3424{3425CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3426GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3427GR_COMBINE_LOCAL_CONSTANT,3428GR_COMBINE_OTHER_TEXTURE);3429CC_PRIM ();3430USE_T1 ();3431//(1-t)*prim+t == (1-prim)*t+prim3432}34333434static void cc_one_sub_t1_mul_env_add_t1 () //Aded by Gonetz3435{3436CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3437GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3438GR_COMBINE_LOCAL_CONSTANT,3439GR_COMBINE_OTHER_TEXTURE);3440CC_ENV ();3441USE_T1 ();3442//(1-t)*env+t == (1-env)*t+env3443}34443445static void cc_one_sub_t0_mul_primlod_add_t0 () //Aded by Gonetz3446{3447CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3448GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3449GR_COMBINE_LOCAL_CONSTANT,3450GR_COMBINE_OTHER_TEXTURE);3451CC_PRIMLOD ();3452USE_T0 ();3453//(1-t)*primlod+t == (1-primlod)*t+primlod3454}34553456static void cc_one_sub_t0_mul_prima_add_t0 () //Aded by Gonetz3457{3458CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3459GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,3460GR_COMBINE_LOCAL_CONSTANT,3461GR_COMBINE_OTHER_TEXTURE);3462CA_PRIM ();3463USE_T0 ();3464//(1-t)*prima+t == (1-prima)*t+prima3465}34663467static void cc_one_sub__t0_inter_t1_using_enva__mul_prim_add__t0_inter_t1_using_enva () //Aded by Gonetz3468{3469CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3470GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3471GR_COMBINE_LOCAL_CONSTANT,3472GR_COMBINE_OTHER_TEXTURE);3473CC_PRIM ();3474BYTE factor = (BYTE)(rdp.env_color&0xFF);3475T0_INTER_T1_USING_FACTOR (factor);3476//(1-t)*prim+t == (1-prim)*t+prim3477}34783479static void cc_one_sub_t0_mul_shade_add_t0 ()3480{3481CCMB (GR_COMBINE_FUNCTION_BLEND,3482GR_COMBINE_FACTOR_TEXTURE_RGB,3483GR_COMBINE_LOCAL_ITERATED,3484GR_COMBINE_OTHER_CONSTANT);3485CC (0xFFFFFFFF);3486USE_T0 ();3487}34883489static void cc_one_sub_prim_mul_t0_add_prim () //Aded by Gonetz3490{3491CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3492GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3493GR_COMBINE_LOCAL_CONSTANT,3494GR_COMBINE_OTHER_TEXTURE);3495CC_PRIM ();3496USE_T0 ();3497}34983499static void cc__one_sub_prim_mul_shade__mul_t0_add__prim_mul_shade () //Aded by Gonetz3500{3501CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3502GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3503GR_COMBINE_LOCAL_ITERATED,3504GR_COMBINE_OTHER_TEXTURE);3505MULSHADE_PRIM ();3506USE_T0 ();3507}35083509static void cc_one_sub_prim_mul_t1_add_prim () //Aded by Gonetz3510{3511CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3512GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3513GR_COMBINE_LOCAL_CONSTANT,3514GR_COMBINE_OTHER_TEXTURE);3515CC_PRIM ();3516USE_T1 ();3517}35183519static void cc_one_sub_prim_mul_env_add_prim () //Aded by Gonetz3520{3521CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3522GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3523GR_COMBINE_LOCAL_CONSTANT,3524GR_COMBINE_OTHER_ITERATED);3525CC_PRIM ();3526SETSHADE_ENV ();3527}35283529static void cc_one_sub_prim_mul_shade_add_shade () //Aded by Gonetz3530{3531CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3532GR_COMBINE_FACTOR_LOCAL,3533GR_COMBINE_LOCAL_ITERATED,3534GR_COMBINE_OTHER_CONSTANT);3535CC_1SUBPRIM ();3536}35373538static void cc_t0_inter_env_using_prima ()3539{3540CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3541GR_COMBINE_FACTOR_ONE,3542GR_COMBINE_LOCAL_NONE,3543GR_COMBINE_OTHER_TEXTURE);3544USE_T0 ();35453546MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);3547MOD_0_COL (rdp.env_color & 0xFFFFFF00);3548MOD_0_FAC (rdp.prim_color & 0xFF);3549}35503551static void cc_t0_inter_env_using_enva ()3552{3553CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3554GR_COMBINE_FACTOR_ONE,3555GR_COMBINE_LOCAL_NONE,3556GR_COMBINE_OTHER_TEXTURE);3557USE_T0 ();35583559MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);3560MOD_0_COL (rdp.env_color & 0xFFFFFFFF);3561MOD_0_FAC (rdp.env_color & 0xFF);3562}35633564static void cc_t0_inter_noise_using_prim ()3565{3566CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3567GR_COMBINE_FACTOR_ONE,3568GR_COMBINE_LOCAL_NONE,3569GR_COMBINE_OTHER_TEXTURE);3570USE_T0 ();35713572MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);3573MOD_0_COL (rdp.prim_color);3574rdp.noise = noise_texture;3575}35763577static void cc_t0_inter_noise_using_env ()3578{3579CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,3580GR_COMBINE_FACTOR_ONE,3581GR_COMBINE_LOCAL_NONE,3582GR_COMBINE_OTHER_TEXTURE);3583USE_T0 ();35843585MOD_0 (TMOD_TEX_INTER_NOISE_USING_COL);3586MOD_0_COL (rdp.env_color);3587rdp.noise = noise_texture;3588}35893590static void cc_t0_sub_env_mul_enva_add_env ()3591{3592CCMB (GR_COMBINE_FUNCTION_BLEND,3593GR_COMBINE_FACTOR_LOCAL_ALPHA,3594GR_COMBINE_LOCAL_CONSTANT,3595GR_COMBINE_OTHER_TEXTURE);3596CC_ENV ();3597CA_ENV ();3598USE_T0 ();3599}36003601//Added by Gonetz3602static void cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_env ()3603{3604CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3605GR_COMBINE_FACTOR_TEXTURE_RGB,3606GR_COMBINE_LOCAL_ITERATED,3607GR_COMBINE_OTHER_CONSTANT);3608CC_1SUBPRIM ();3609SETSHADE_PRIM ();3610SETSHADE_ENV ();3611T0_MUL_T1 ();3612}36133614//Added by Gonetz3615static void cc_one_sub_prim_mul__t0_inter_t1_using_enva__add_prim ()3616{3617CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3618GR_COMBINE_FACTOR_TEXTURE_RGB,3619GR_COMBINE_LOCAL_ITERATED,3620GR_COMBINE_OTHER_CONSTANT);3621CC_1SUBPRIM ();3622SETSHADE_PRIM ();3623BYTE factor = (BYTE)(rdp.env_color&0xFF);3624T0_INTER_T1_USING_FACTOR (factor);3625}36263627static void cc_one_sub_env_mul__t0_inter_t1_using_primlod__add_env () //Aded by Gonetz3628{3629CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3630GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3631GR_COMBINE_LOCAL_CONSTANT,3632GR_COMBINE_OTHER_TEXTURE);3633CC_ENV ();3634T0_INTER_T1_USING_FACTOR (lod_frac);3635}36363637static void cc_one_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env () //Aded by Gonetz3638{3639CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3640GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3641GR_COMBINE_LOCAL_CONSTANT,3642GR_COMBINE_OTHER_TEXTURE);3643CC_ENV ();3644T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();3645}36463647static void cc_one_sub_env_mul_t0_add_prim_mul_env () //Aded by Gonetz3648{3649CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3650GR_COMBINE_FACTOR_TEXTURE_RGB,3651GR_COMBINE_LOCAL_ITERATED,3652GR_COMBINE_OTHER_CONSTANT);3653CC_1SUBENV ();3654SETSHADE_PRIM ();3655SETSHADE_ENV ();3656USE_T0 ();3657}36583659static void cc_one_sub_env_mul_t0_add_env () //Aded by Gonetz3660{3661CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3662GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3663GR_COMBINE_LOCAL_CONSTANT,3664GR_COMBINE_OTHER_TEXTURE);3665CC_ENV ();3666USE_T0 ();3667}36683669static void cc_one_sub_env_mul_t0_add_shade () //Aded by Gonetz3670{3671CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3672GR_COMBINE_FACTOR_TEXTURE_RGB,3673GR_COMBINE_LOCAL_ITERATED,3674GR_COMBINE_OTHER_CONSTANT);3675CC_1SUBENV ();3676USE_T0 ();3677}36783679static void cc_one_sub_env_mul_prim_add_env () //Aded by Gonetz3680{3681CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3682GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3683GR_COMBINE_LOCAL_CONSTANT,3684GR_COMBINE_OTHER_ITERATED);3685CC_ENV ();3686SETSHADE_PRIM ();3687}36883689static void cc_one_sub_env_mul_prim_add_shade () //Aded by Gonetz3690{3691CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3692GR_COMBINE_FACTOR_ONE,3693GR_COMBINE_LOCAL_ITERATED,3694GR_COMBINE_OTHER_CONSTANT);3695CC_1SUBENV ();3696cmb.ccolor=(BYTE)( ((rdp.prim_color & 0xFF000000) >> 24) * (((cmb.ccolor & 0xFF000000) >> 24) /255.0f) ) << 24 |3697(BYTE)( ((rdp.prim_color & 0x00FF0000) >> 16) * (((cmb.ccolor & 0x00FF0000) >> 16) /255.0f) ) << 16 |3698(BYTE)( ((rdp.prim_color & 0x0000FF00) >> 8) * (((cmb.ccolor & 0x0000FF00) >> 8) /255.0f) ) << 8;3699}37003701static void cc_one_sub_env_mul_shade_add_env () //Aded by Gonetz3702{3703CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3704GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3705GR_COMBINE_LOCAL_CONSTANT,3706GR_COMBINE_OTHER_ITERATED);3707CC_ENV ();3708}37093710static void cc_one_sub_env_mul_prim_add__t0_inter_t1_using_env () //Aded by Gonetz3711{3712CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3713GR_COMBINE_FACTOR_ONE,3714GR_COMBINE_LOCAL_ITERATED,3715GR_COMBINE_OTHER_TEXTURE);3716SETSHADE_PRIM ();3717SETSHADE_1MENV ();3718//BYTE factor = (BYTE)(rdp.env_color&0xFF);3719T0_INTER_T1_USING_ENV ();3720}37213722static void cc_one_sub_shade_mul_t0_add_shade ()3723{3724CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3725GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3726GR_COMBINE_LOCAL_ITERATED,3727GR_COMBINE_OTHER_TEXTURE);3728USE_T0 ();3729}37303731static void cc_one_sub_shade_mul__t0_mul_shadea__add_shade ()3732{3733CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3734GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3735GR_COMBINE_LOCAL_ITERATED,3736GR_COMBINE_OTHER_TEXTURE);3737if (cmb.combine_ext)3738{3739T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3740GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3741GR_CMBX_ITALPHA, 0,3742GR_CMBX_ZERO, 0);3743cmb.tex |= 1;3744}3745else3746{3747USE_T0 ();3748}3749}37503751static void cc_one_sub_shade_mul_env_add_shade ()3752{3753CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3754GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,3755GR_COMBINE_LOCAL_ITERATED,3756GR_COMBINE_OTHER_CONSTANT);3757CC_ENV ();3758}37593760static void cc_one_sub_shade_mul_shadea_add_shade ()3761{3762CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3763GR_COMBINE_FACTOR_LOCAL_ALPHA,3764GR_COMBINE_LOCAL_ITERATED,3765GR_COMBINE_OTHER_CONSTANT);3766CC (0xFFFFFFFF);3767}37683769///*3770static void cc_t0_sub_env_mul_prim_add_env () //Aded by Gonetz3771{3772CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3773GR_COMBINE_FACTOR_TEXTURE_RGB,3774GR_COMBINE_LOCAL_ITERATED,3775GR_COMBINE_OTHER_CONSTANT);3776SETSHADE_1MPRIM();3777SETSHADE_ENV();3778CC_PRIM ();3779USE_T0 ();3780//(t0-env)*prim+env == t0*prim + env*(1-prim)3781}3782//*/3783static void cc__t0_inter_t1_using_t1a__sub_env_mul_enva_add_env () //Aded by Gonetz3784{3785CCMB (GR_COMBINE_FUNCTION_BLEND,3786GR_COMBINE_FACTOR_LOCAL_ALPHA,3787GR_COMBINE_LOCAL_CONSTANT,3788GR_COMBINE_OTHER_TEXTURE);3789cmb.ccolor = rdp.env_color;3790T0_INTER_T1_USING_T1A ();3791}37923793static void cc_t0_sub_shade_mul_t0a_add_shade ()3794{3795CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3796GR_COMBINE_FACTOR_TEXTURE_ALPHA,3797GR_COMBINE_LOCAL_ITERATED,3798GR_COMBINE_OTHER_TEXTURE);3799USE_T0 ();3800A_USE_T0 ();3801}38023803static void cc_t0_sub_shade_mul_prima_add_shade () //Aded by Gonetz3804{3805// * not guaranteed to work if another iterated alpha is set3806CCMB (GR_COMBINE_FUNCTION_BLEND,3807GR_COMBINE_FACTOR_LOCAL_ALPHA,3808GR_COMBINE_LOCAL_ITERATED,3809GR_COMBINE_OTHER_TEXTURE);3810SETSHADE_A_PRIM ();3811USE_T0 ();3812}38133814static void cc_t0_sub_shade_mul_shadea_add_shade () //Aded by Gonetz3815{3816// * not guaranteed to work if another iterated alpha is set3817CCMB (GR_COMBINE_FUNCTION_BLEND,3818GR_COMBINE_FACTOR_LOCAL_ALPHA,3819GR_COMBINE_LOCAL_ITERATED,3820GR_COMBINE_OTHER_TEXTURE);3821USE_T0 ();3822}38233824static void cc_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz3825{3826CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3827GR_COMBINE_FACTOR_TEXTURE_RGB,3828GR_COMBINE_LOCAL_ITERATED,3829GR_COMBINE_OTHER_CONSTANT);3830CC_1SUBENV ();3831SETSHADE_PRIM ();3832SETSHADE_ENV ();3833USE_T0 ();3834//(prim-t0)*env+t0 == prim*env + t0*(1-env)3835}38363837static void cc_prim_sub_env_mul_t0_add_prim ()3838{3839CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3840GR_COMBINE_FACTOR_TEXTURE_RGB,3841GR_COMBINE_LOCAL_CONSTANT,3842GR_COMBINE_OTHER_ITERATED);3843CC_PRIM ();3844SETSHADE_PRIMSUBENV ();3845USE_T0 ();3846}38473848static void cc_prim_sub_env_mul_t0_add_env ()3849{3850CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3851GR_COMBINE_FACTOR_TEXTURE_RGB,3852GR_COMBINE_LOCAL_ITERATED,3853GR_COMBINE_OTHER_CONSTANT);3854CC_PRIM ();3855SETSHADE_ENV ();3856USE_T0 ();3857}38583859static void cc_prim_sub_env_mul__t0_mul_prim__add_env ()3860{3861CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3862GR_COMBINE_FACTOR_TEXTURE_RGB,3863GR_COMBINE_LOCAL_ITERATED,3864GR_COMBINE_OTHER_CONSTANT);3865CC_PRIM ();3866SETSHADE_ENV ();3867if (cmb.combine_ext)3868{3869T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3870GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3871GR_CMBX_TMU_CCOLOR, 0,3872GR_CMBX_ZERO, 0);3873cmb.tex_ccolor = rdp.prim_color;3874cmb.tex |= 1;3875}3876else3877{3878USE_T0 ();3879}3880}38813882static void cc_prim_sub_env_mul_t0_mul_shade_add_env ()3883{3884if (cmb.combine_ext)3885{3886T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3887GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3888GR_CMBX_TMU_CCOLOR, 0,3889GR_CMBX_ZERO, 0);3890CC_PRIMSUBENV ();3891cmb.tex_ccolor = cmb.ccolor;3892cmb.tex |= 1;3893CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,3894GR_COMBINE_FACTOR_TEXTURE_RGB,3895GR_COMBINE_LOCAL_CONSTANT,3896GR_COMBINE_OTHER_ITERATED);3897CC_ENV ();3898}3899else3900{3901cc_t0_mul_prim_mul_shade ();3902}3903}39043905static void cc_prim_sub_env_mul__t0_sub_t0_mul_prima__add_env ()3906{3907CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3908GR_COMBINE_FACTOR_TEXTURE_RGB,3909GR_COMBINE_LOCAL_ITERATED,3910GR_COMBINE_OTHER_CONSTANT);3911CC_PRIM ();3912SETSHADE_ENV ();3913rdp.best_tex = 0;3914cmb.tex |= 1;3915cmb.tmu0_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;3916cmb.tmu0_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;3917percent = (float)(rdp.prim_color&0xFF) / 255.0f;3918cmb.dc0_detailmax = cmb.dc1_detailmax = percent;3919}39203921static void cc_prim_sub_env_mul__t0_add_t1a__add_env ()3922{3923CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3924GR_COMBINE_FACTOR_TEXTURE_RGB,3925GR_COMBINE_LOCAL_ITERATED,3926GR_COMBINE_OTHER_CONSTANT);3927CC_PRIM ();3928SETSHADE_ENV ();3929rdp.best_tex = 0;3930cmb.tex |= 3;3931cmb.tmu1_func = GR_COMBINE_FUNCTION_LOCAL_ALPHA;3932cmb.tmu0_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;3933cmb.tmu0_fac = GR_COMBINE_FACTOR_ONE;3934}39353936static void cc_prim_sub_env_mul__t0_sub_prim_mul_enva_add_t0__add_env ()3937{3938// (t0-prim)*env_a+t0, (prim-env)*cmb+env3939CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3940GR_COMBINE_FACTOR_TEXTURE_RGB,3941GR_COMBINE_LOCAL_CONSTANT,3942GR_COMBINE_OTHER_ITERATED);3943CC_ENV ();3944SETSHADE_PRIM ();3945USE_T0 ();39463947MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC_ADD_TEX);3948MOD_0_COL (rdp.prim_color & 0xFFFFFF00);3949MOD_0_FAC (rdp.env_color & 0xFF);3950}39513952static void cc_prim_sub_env_mul__t1_sub_prim_mul_enva_add_t0__add_env ()3953{3954// (t0-prim)*env_a+t0, (prim-env)*cmb+env3955CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,3956GR_COMBINE_FACTOR_TEXTURE_RGB,3957GR_COMBINE_LOCAL_CONSTANT,3958GR_COMBINE_OTHER_ITERATED);3959CC_ENV ();3960SETSHADE_PRIM ();3961if (cmb.combine_ext)3962{3963if (rdp.tiles[rdp.cur_tile].format > 2)3964{3965T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3966GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,3967GR_CMBX_ZERO, 0,3968GR_CMBX_B, 0);3969T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,3970GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,3971GR_CMBX_DETAIL_FACTOR, 0,3972GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);3973}3974else3975{3976T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3977GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,3978GR_CMBX_DETAIL_FACTOR, 0,3979GR_CMBX_ZERO, 0);3980T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,3981GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,3982GR_CMBX_ZERO, 1,3983GR_CMBX_ZERO, 0);3984}3985cmb.tex_ccolor = rdp.prim_color;3986cmb.tex |= 3;3987cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;3988}3989else3990{3991MOD_1 (TMOD_TEX_SUB_COL_MUL_FAC);3992MOD_1_COL (rdp.prim_color & 0xFFFFFF00);3993MOD_1_FAC (rdp.env_color & 0xFF);3994T0_ADD_T1 ();3995}3996}39973998static void cc__prim_sub_env_mul_t0_add_env__mul_k5 ()3999{4000CCMB (GR_COMBINE_FUNCTION_BLEND,4001GR_COMBINE_FACTOR_TEXTURE_RGB,4002GR_COMBINE_LOCAL_ITERATED,4003GR_COMBINE_OTHER_CONSTANT);4004float factor = (float)rdp.K5 / 255.0f;4005BYTE r = (BYTE)((rdp.prim_color >> 24) & 0xFF);4006r = (BYTE)((float)r * factor);4007BYTE g = (BYTE)((rdp.prim_color >> 16) & 0xFF);4008g = (BYTE)((float)g * factor);4009BYTE b = (BYTE)((rdp.prim_color >> 8) & 0xFF);4010b = (BYTE)((float)b * factor);4011CC ((r<<24) | (g<<16) | (b<<8));4012SETSHADE_ENV ();4013MULSHADE_K5 ();4014USE_T0 ();4015}401640174018static void cc_prim_sub_env_mul_t1_add_env ()4019{4020CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4021GR_COMBINE_FACTOR_TEXTURE_RGB,4022GR_COMBINE_LOCAL_ITERATED,4023GR_COMBINE_OTHER_CONSTANT);4024CC_PRIM ();4025SETSHADE_ENV ();4026USE_T1 ();4027}40284029static void cc_prim_sub_env_mul_t1_add_env_mul_t0 ()4030{4031CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,4032GR_COMBINE_FACTOR_ONE,4033GR_COMBINE_LOCAL_NONE,4034GR_COMBINE_OTHER_TEXTURE);4035MOD_1 (TMOD_COL_INTER_COL1_USING_TEX);4036MOD_1_COL (rdp.env_color & 0xFFFFFF00);4037MOD_1_COL1 (rdp.prim_color & 0xFFFFFF00);4038T0_MUL_T1 ();4039}40404041//Added by Gonetz4042static void cc_prim_sub_env_mul_t0a_add_env ()4043{4044CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4045GR_COMBINE_FACTOR_TEXTURE_ALPHA,4046GR_COMBINE_LOCAL_CONSTANT,4047GR_COMBINE_OTHER_ITERATED);4048CC_ENV ();4049SETSHADE_PRIM ();4050USE_T0 ();4051}40524053//Added by Gonetz4054static void cc_prim_sub_env_mul_t1a_add_env ()4055{4056CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4057GR_COMBINE_FACTOR_TEXTURE_ALPHA,4058GR_COMBINE_LOCAL_CONSTANT,4059GR_COMBINE_OTHER_ITERATED);4060CC_ENV ();4061SETSHADE_PRIM ();4062USE_T1 ();4063}40644065//Added by Gonetz4066static void cc_prim_sub_env_mul__t0_mul_t1__add_env ()4067{4068CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4069GR_COMBINE_FACTOR_TEXTURE_RGB,4070GR_COMBINE_LOCAL_ITERATED,4071GR_COMBINE_OTHER_CONSTANT);4072CC_PRIM ();4073SETSHADE_ENV ();4074T0_MUL_T1 ();4075}40764077//Added by Gonetz4078static void cc_prim_sub_env_mul__t0_add_t1__add_env ()4079{4080CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4081GR_COMBINE_FACTOR_TEXTURE_RGB,4082GR_COMBINE_LOCAL_ITERATED,4083GR_COMBINE_OTHER_CONSTANT);4084CC_PRIM ();4085SETSHADE_ENV ();4086T0_ADD_T1 ();4087}40884089//Added by Gonetz4090static void cc_prim_sub_env_mul__t0_mul_enva__add_env ()4091{4092CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4093GR_COMBINE_FACTOR_TEXTURE_RGB,4094GR_COMBINE_LOCAL_CONSTANT,4095GR_COMBINE_OTHER_ITERATED);4096CC_ENV ();4097SETSHADE_PRIMSUBENV ();4098MULSHADE_ENVA ();4099USE_T0 ();4100}41014102//Added by Gonetz4103static void cc_prim_sub_env_mul__t0_mul_shade__add_env ()4104{4105CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4106GR_COMBINE_FACTOR_TEXTURE_RGB,4107GR_COMBINE_LOCAL_CONSTANT,4108GR_COMBINE_OTHER_ITERATED);4109CC_ENV ();4110MULSHADE_PRIMSUBENV ();4111USE_T0 ();4112}41134114//Added by Gonetz4115static void cc_prim_sub_env_mul__prim_inter_t0_using_shadea__add_env ()4116{4117CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4118GR_COMBINE_FACTOR_TEXTURE_RGB,4119GR_COMBINE_LOCAL_CONSTANT,4120GR_COMBINE_OTHER_ITERATED);4121CC_ENV ();4122if (cmb.combine_ext)4123{4124SETSHADE_PRIM ();4125PRIM_INTER_T0_USING_SHADEA ();4126}4127else4128{4129MULSHADE_SHADEA ();4130SETSHADE_PRIMSUBENV ();4131USE_T0 ();4132}4133}41344135//Added by Gonetz4136static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t0__add_env ()4137{4138CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4139GR_COMBINE_FACTOR_TEXTURE_RGB,4140GR_COMBINE_LOCAL_ITERATED,4141GR_COMBINE_OTHER_CONSTANT);4142CC_PRIM ();4143SETSHADE_ENV ();4144if (cmb.combine_ext)4145{4146T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4147GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4148GR_CMBX_DETAIL_FACTOR, 0,4149GR_CMBX_B, 0);4150cmb.tex_ccolor = rdp.prim_color;4151cmb.tex |= 1;4152percent = (float)(lod_frac) / 255.0f;4153cmb.dc0_detailmax = cmb.dc1_detailmax = percent;4154}4155else4156{4157USE_T0 ();4158MOD_0 (TMOD_TEX_SUB_COL_MUL_FAC_ADD_TEX);4159MOD_0_COL (rdp.prim_color & 0xFFFFFF00);4160MOD_0_FAC (lod_frac & 0xFF);4161}4162}41634164static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_shade__add_env ()4165{4166if (!cmb.combine_ext)4167{4168cc_prim_sub_env_mul_t0_add_env ();4169return;4170}4171T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4172GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4173GR_CMBX_DETAIL_FACTOR, 0,4174GR_CMBX_ITRGB, 0);4175CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,4176GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4177GR_CMBX_TEXTURE_RGB, 0,4178GR_CMBX_B, 0);4179cmb.tex_ccolor = rdp.prim_color;4180CC_PRIM ();4181SETSHADE_ENV ();4182cmb.tex |= 1;4183percent = (float)(lod_frac) / 255.0f;4184cmb.dc0_detailmax = cmb.dc1_detailmax = percent;4185}41864187static void cc_prim_sub_env_mul__t0_sub_shade_mul_primlod_add_shade__add_env ()4188{4189if (!cmb.combine_ext)4190{4191cc_prim_sub_env_mul_t0_add_env ();4192return;4193}4194T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4195GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4196GR_CMBX_DETAIL_FACTOR, 0,4197GR_CMBX_B, 0);4198T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4199GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4200GR_CMBX_DETAIL_FACTOR, 0,4201GR_CMBX_B, 0);4202CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,4203GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4204GR_CMBX_TEXTURE_RGB, 0,4205GR_CMBX_B, 0);4206cmb.tex_ccolor = rdp.prim_color;4207CC_PRIM ();4208SETSHADE_ENV ();4209cmb.tex |= 1;4210percent = (float)(lod_frac) / 255.0f;4211cmb.dc0_detailmax = cmb.dc1_detailmax = percent;4212}42134214//Added by Gonetz4215static void cc_lavatex_sub_prim_mul_shade_add_lavatex ()4216{4217if (!cmb.combine_ext)4218{4219cc_t0_add_t1 ();4220return;4221}4222CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,4223GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4224GR_CMBX_ITRGB, 0,4225GR_CMBX_B, 0);4226CC_PRIM ();4227T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();4228}42294230//Added by Gonetz4231static void cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t1__add_env ()4232{4233CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4234GR_COMBINE_FACTOR_TEXTURE_RGB,4235GR_COMBINE_LOCAL_ITERATED,4236GR_COMBINE_OTHER_CONSTANT);4237CC_PRIM ();4238SETSHADE_ENV ();4239T0_SUB_PRIM_MUL_PRIMLOD_ADD_T1 ();4240}42414242//Added by Gonetz4243static void cc_prim_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()4244{4245CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4246GR_COMBINE_FACTOR_TEXTURE_RGB,4247GR_COMBINE_LOCAL_ITERATED,4248GR_COMBINE_OTHER_CONSTANT);4249CC_PRIM ();4250SETSHADE_ENV ();4251T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();4252}42534254//Added by Gonetz4255static void cc_prim_sub_env_mul__t0_inter_t1_using_t1__add_env ()4256{4257CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4258GR_COMBINE_FACTOR_TEXTURE_RGB,4259GR_COMBINE_LOCAL_ITERATED,4260GR_COMBINE_OTHER_CONSTANT);4261CC_PRIM ();4262SETSHADE_ENV ();4263T0_INTER_T1_USING_T1 ();4264}42654266//Added by Gonetz4267static void cc_prim_sub_env_mul__t0_inter_t1_using_enva_alpha__add_env ()4268{4269CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4270GR_COMBINE_FACTOR_TEXTURE_ALPHA,4271GR_COMBINE_LOCAL_ITERATED,4272GR_COMBINE_OTHER_CONSTANT);4273CC_PRIM ();4274SETSHADE_ENV ();4275BYTE factor = (BYTE)(rdp.env_color&0xFF);4276T0_INTER_T1_USING_FACTOR (factor);4277A_T0_INTER_T1_USING_FACTOR (factor);4278}42794280//Added by Gonetz4281static void cc_prim_sub_env_mul__t0_mul_t1__add_shade ()4282{4283CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4284GR_COMBINE_FACTOR_TEXTURE_RGB,4285GR_COMBINE_LOCAL_ITERATED,4286GR_COMBINE_OTHER_CONSTANT);4287CC_PRIMSUBENV ();4288USE_T0 ();4289// T0_MUL_T1 ();4290}42914292//Added by Gonetz4293static void cc_prim_sub_env_mul_shade_add_t0 ()4294{4295CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4296GR_COMBINE_FACTOR_ONE,4297GR_COMBINE_LOCAL_ITERATED,4298GR_COMBINE_OTHER_TEXTURE);4299MULSHADE_PRIMSUBENV ();4300USE_T0 ();4301}43024303//Added by Gonetz4304static void cc_prim_sub_env_mul_prima_add_t0 ()4305{4306CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4307GR_COMBINE_FACTOR_ONE,4308GR_COMBINE_LOCAL_ITERATED,4309GR_COMBINE_OTHER_TEXTURE);4310SETSHADE_PRIMSUBENV ();4311SETSHADE_PRIMA ();4312USE_T0 ();4313}43144315//Added by Gonetz4316static void cc_prim_sub_env_mul_shade_add_env ()4317{4318CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4319GR_COMBINE_FACTOR_ONE,4320GR_COMBINE_LOCAL_CONSTANT,4321GR_COMBINE_OTHER_ITERATED);4322CC_ENV ();4323MULSHADE_PRIMSUBENV ();4324}43254326static void cc_prim_sub_env_mul_shadea_add_env ()4327{4328// * not guaranteed to work if another iterated alpha is set4329CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4330GR_COMBINE_FACTOR_OTHER_ALPHA,4331GR_COMBINE_LOCAL_CONSTANT,4332GR_COMBINE_OTHER_ITERATED);4333CC_ENV ();4334SETSHADE_PRIM ();4335}43364337//Added by Gonetz4338static void cc_prim_sub_env_mul__t0_inter_t1_using_prima__add_env ()4339{4340CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4341GR_COMBINE_FACTOR_TEXTURE_RGB,4342GR_COMBINE_LOCAL_CONSTANT,4343GR_COMBINE_OTHER_ITERATED);4344CC_ENV ();4345SETSHADE_PRIM ();4346BYTE factor = (BYTE)(rdp.prim_color&0xFF);4347T0_INTER_T1_USING_FACTOR (factor);4348}43494350//Added by Gonetz4351static void cc_prim_sub_env_mul__t1_inter_t0_using_prima__add_env ()4352{4353CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4354GR_COMBINE_FACTOR_TEXTURE_RGB,4355GR_COMBINE_LOCAL_CONSTANT,4356GR_COMBINE_OTHER_ITERATED);4357CC_ENV ();4358SETSHADE_PRIM ();4359BYTE factor = (BYTE)(rdp.prim_color&0xFF);4360T1_INTER_T0_USING_FACTOR (factor);4361}43624363static void cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env ()4364{4365CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4366GR_COMBINE_FACTOR_TEXTURE_RGB,4367GR_COMBINE_LOCAL_CONSTANT,4368GR_COMBINE_OTHER_ITERATED);4369CC_ENV ();4370SETSHADE_PRIM ();4371BYTE factor = (BYTE)(rdp.env_color&0xFF);4372T0_INTER_T1_USING_FACTOR (factor);4373}43744375static void cc_prim_sub_env_mul__t1_inter_t0_using_enva__add_env ()4376{4377CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4378GR_COMBINE_FACTOR_TEXTURE_RGB,4379GR_COMBINE_LOCAL_CONSTANT,4380GR_COMBINE_OTHER_ITERATED);4381CC_ENV ();4382SETSHADE_PRIM ();4383BYTE factor = (BYTE)(rdp.env_color&0xFF);4384T1_INTER_T0_USING_FACTOR (factor);4385}43864387static void cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env ()4388{4389CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4390GR_COMBINE_FACTOR_TEXTURE_RGB,4391GR_COMBINE_LOCAL_CONSTANT,4392GR_COMBINE_OTHER_ITERATED);4393CC_ENV ();4394SETSHADE_PRIM ();4395T1_INTER_T0_USING_FACTOR (lod_frac);4396}43974398static void cc_prim_sub_env_mul__t0_mul_enva_add_t1__add_env ()4399{4400CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4401GR_COMBINE_FACTOR_TEXTURE_RGB,4402GR_COMBINE_LOCAL_CONSTANT,4403GR_COMBINE_OTHER_ITERATED);4404CC_ENV ();4405SETSHADE_PRIM ();4406if (cmb.combine_ext)4407{4408T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4409GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4410GR_CMBX_ZERO, 1,4411GR_CMBX_ZERO, 0);4412T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4413GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4414GR_CMBX_DETAIL_FACTOR, 0,4415GR_CMBX_B, 0);4416cmb.tex |= 3;4417percent = (float)(rdp.env_color&0xFF) / 255.0f;4418cmb.dc0_detailmax = cmb.dc1_detailmax = percent;4419}4420else4421{4422T0_ADD_T1 ();4423}4424}44254426static void cc_prim_sub_env_mul__t1_mul_enva_add_t0__add_env ()4427{4428CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4429GR_COMBINE_FACTOR_TEXTURE_RGB,4430GR_COMBINE_LOCAL_CONSTANT,4431GR_COMBINE_OTHER_ITERATED);4432CC_ENV ();4433SETSHADE_PRIM ();4434T1_MUL_ENVA_ADD_T0 ();4435}44364437//Added by Gonetz4438static void cc_prim_sub_env_mul_primlod_add__t0_inter_t1_using_primlod ()4439{4440CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4441GR_COMBINE_FACTOR_ONE,4442GR_COMBINE_LOCAL_CONSTANT,4443GR_COMBINE_OTHER_TEXTURE);4444CC_PRIMSUBENV();4445float factor = lod_frac / 255.0f;4446cmb.ccolor=(BYTE)( ((cmb.ccolor & 0xFF000000) >> 24) * factor ) << 24 |4447(BYTE)( ((cmb.ccolor & 0x00FF0000) >> 16) * factor ) << 16 |4448(BYTE)( ((cmb.ccolor & 0x0000FF00) >> 8) * factor ) << 8;4449T0_INTER_T1_USING_FACTOR (lod_frac);4450}44514452static void cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env ()4453{4454CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4455GR_COMBINE_FACTOR_TEXTURE_RGB,4456GR_COMBINE_LOCAL_CONSTANT,4457GR_COMBINE_OTHER_ITERATED);4458CC_ENV ();4459SETSHADE_PRIM ();4460T0_INTER_T1_USING_FACTOR (lod_frac);4461}44624463static void cc_prim_sub_env_mul__t1_mul_primlod_add_t0__add_env ()4464{4465CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4466GR_COMBINE_FACTOR_TEXTURE_RGB,4467GR_COMBINE_LOCAL_CONSTANT,4468GR_COMBINE_OTHER_ITERATED);4469CC_ENV ();4470SETSHADE_PRIM ();4471T1_MUL_PRIMLOD_ADD_T0 ();4472}44734474static void cc_prim_sub_env_mul__t1_sub_prim_mul_t0_add_t0__add_env ()4475{4476CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4477GR_COMBINE_FACTOR_TEXTURE_RGB,4478GR_COMBINE_LOCAL_CONSTANT,4479GR_COMBINE_OTHER_ITERATED);4480CC_ENV ();4481SETSHADE_PRIM ();4482if (cmb.combine_ext)4483{4484T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4485GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_NEGATIVE_X,4486GR_CMBX_ZERO, 1,4487GR_CMBX_ZERO, 0);4488T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,4489GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,4490GR_CMBX_LOCAL_TEXTURE_RGB, 0,4491GR_CMBX_B, 0);4492cmb.tex_ccolor = rdp.prim_color;4493cmb.tex |= 3;4494}4495else4496{4497MOD_1 (TMOD_TEX_SUB_COL);4498MOD_1_COL (rdp.prim_color & 0xFFFFFF00);4499T0_MUL_T1_ADD_T0 ();4500}4501}45024503//Added by Gonetz4504static void cc__prim_sub_env_mul_prim_add_t0__mul_prim ()4505{4506if (cmb.combine_ext)4507{4508T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,4509GR_CMBX_ITRGB, GR_FUNC_MODE_X,4510GR_CMBX_ZERO, 1,4511GR_CMBX_ZERO, 0);4512cmb.tex |= 1;4513SETSHADE_PRIMSUBENV ();4514SETSHADE_PRIM ();4515CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,4516GR_CMBX_ITRGB, GR_FUNC_MODE_ZERO,4517GR_CMBX_CONSTANT_COLOR, 0,4518GR_CMBX_ZERO, 0);4519CC_PRIM() ;4520}4521else4522{4523CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4524GR_COMBINE_FACTOR_ONE,4525GR_COMBINE_LOCAL_ITERATED,4526GR_COMBINE_OTHER_TEXTURE);4527SETSHADE_PRIMSUBENV ();4528SETSHADE_PRIM ();4529USE_T0 ();4530}4531}45324533//Added by Gonetz4534static void cc_prim_sub_env_mul_prim_add_env ()4535{4536CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4537GR_COMBINE_FACTOR_ONE,4538GR_COMBINE_LOCAL_CONSTANT,4539GR_COMBINE_OTHER_ITERATED);4540SETSHADE_PRIMSUBENV ();4541SETSHADE_PRIM ();4542CC_ENV ();4543}45444545//Added by Gonetz4546static void cc_prim_sub_env_mul_enva_add_t0 ()4547{4548CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4549GR_COMBINE_FACTOR_ONE,4550GR_COMBINE_LOCAL_ITERATED,4551GR_COMBINE_OTHER_TEXTURE);4552MULSHADE_ENVA ();4553SETSHADE_PRIMSUBENV ();4554USE_T0 ();4555}45564557//Added by Gonetz4558static void cc_prim_sub_shade_mul_t0_add_env ()4559{4560CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4561GR_COMBINE_FACTOR_TEXTURE_RGB,4562GR_COMBINE_LOCAL_CONSTANT,4563GR_COMBINE_OTHER_ITERATED);4564CC_ENV ();4565COLSUBSHADE_PRIM ();4566USE_T0 ();4567}45684569//Added by Gonetz4570static void cc_prim_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade ()4571{4572CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4573GR_COMBINE_FACTOR_TEXTURE_RGB,4574GR_COMBINE_LOCAL_ITERATED,4575GR_COMBINE_OTHER_CONSTANT);4576CC_PRIM ();4577T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();4578}45794580static void cc_prim_sub_shade_mul_t1a_add_shade ()4581{4582CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4583GR_COMBINE_FACTOR_TEXTURE_ALPHA,4584GR_COMBINE_LOCAL_ITERATED,4585GR_COMBINE_OTHER_CONSTANT);4586CC_PRIM ();4587USE_T1 ();4588}45894590//Added by Gonetz4591static void cc_prim_sub_shade_mul_t0_add_shade ()4592{4593CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4594GR_COMBINE_FACTOR_TEXTURE_RGB,4595GR_COMBINE_LOCAL_ITERATED,4596GR_COMBINE_OTHER_CONSTANT);4597CC_PRIM ();4598USE_T0 ();4599}46004601//Added by Gonetz4602static void cc_prim_sub_shade_mul_t1_add_shade ()4603{4604CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4605GR_COMBINE_FACTOR_TEXTURE_RGB,4606GR_COMBINE_LOCAL_ITERATED,4607GR_COMBINE_OTHER_CONSTANT);4608CC_PRIM ();4609USE_T1 ();4610}46114612//Added by Gonetz4613static void cc_prim_sub_shade_mul__t0_inter_t1_using_enva__add_shade ()4614{4615CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4616GR_COMBINE_FACTOR_TEXTURE_RGB,4617GR_COMBINE_LOCAL_ITERATED,4618GR_COMBINE_OTHER_CONSTANT);4619CC_PRIM ();4620BYTE factor = (BYTE)(rdp.env_color&0xFF);4621T0_INTER_T1_USING_FACTOR (factor);4622}46234624//Added by Gonetz4625static void cc_prim_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()4626{4627if (cmb.combine_ext)4628{4629CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,4630GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4631GR_CMBX_TEXTURE_RGB, 0,4632GR_CMBX_B, 0);4633}4634else4635{4636CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4637GR_COMBINE_FACTOR_TEXTURE_RGB,4638GR_COMBINE_LOCAL_ITERATED,4639GR_COMBINE_OTHER_CONSTANT);4640}4641CC_PRIM ();4642T0_INTER_T1_USING_SHADEA ();4643}46444645//Added by Gonetz4646static void cc_prim_sub_shade_mul_prima_add_shade ()4647{4648CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4649GR_COMBINE_FACTOR_OTHER_ALPHA,4650GR_COMBINE_LOCAL_ITERATED,4651GR_COMBINE_OTHER_CONSTANT);4652CC_PRIM ();4653CA_PRIM ();4654}46554656//Added by Gonetz4657static void cc_prim_sub_shade_mul_env_add_shade ()4658{4659CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4660GR_COMBINE_FACTOR_ONE,4661GR_COMBINE_LOCAL_ITERATED,4662GR_COMBINE_OTHER_CONSTANT);4663CC_PRIMMULENV ();4664MULSHADE_1MENV ();4665}46664667//Added by Gonetz4668static void cc_prim_sub_shade_mul_shadea_add_shade ()4669{4670CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4671GR_COMBINE_FACTOR_LOCAL_ALPHA,4672GR_COMBINE_LOCAL_ITERATED,4673GR_COMBINE_OTHER_CONSTANT);4674CC_PRIM ();4675}46764677static void cc_env_sub_prim_mul_t0_add_prim ()4678{4679CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4680GR_COMBINE_FACTOR_TEXTURE_RGB,4681GR_COMBINE_LOCAL_ITERATED,4682GR_COMBINE_OTHER_CONSTANT);4683CC_ENV ();4684SETSHADE_PRIM ();4685USE_T0 ();4686}46874688static void cc_env_sub_prim_mul_t1_add_prim ()4689{4690CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4691GR_COMBINE_FACTOR_TEXTURE_RGB,4692GR_COMBINE_LOCAL_ITERATED,4693GR_COMBINE_OTHER_CONSTANT);4694CC_ENV ();4695SETSHADE_PRIM ();4696USE_T1 ();4697}46984699static void cc_env_sub_prim_mul_t0a_add_prim ()4700{4701CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4702GR_COMBINE_FACTOR_TEXTURE_ALPHA,4703GR_COMBINE_LOCAL_ITERATED,4704GR_COMBINE_OTHER_CONSTANT);4705CC_ENV ();4706SETSHADE_PRIM ();4707A_USE_T0 ();4708}47094710static void cc_env_sub_prim_mul_t1a_add_prim ()4711{4712CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4713GR_COMBINE_FACTOR_TEXTURE_ALPHA,4714GR_COMBINE_LOCAL_ITERATED,4715GR_COMBINE_OTHER_CONSTANT);4716CC_ENV ();4717SETSHADE_PRIM ();4718A_USE_T1 ();4719}47204721static void cc_env_sub_prim_mul__t0_add_t1__add_prim ()4722{4723CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4724GR_COMBINE_FACTOR_TEXTURE_RGB,4725GR_COMBINE_LOCAL_ITERATED,4726GR_COMBINE_OTHER_CONSTANT);4727CC_ENV ();4728SETSHADE_PRIM ();4729T0_ADD_T1 ();4730}47314732static void cc_env_sub_prim_mul__t0_mul_t1__add_prim () //Added by Gonetz4733{4734CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4735GR_COMBINE_FACTOR_TEXTURE_RGB,4736GR_COMBINE_LOCAL_ITERATED,4737GR_COMBINE_OTHER_CONSTANT);4738CC_ENV ();4739SETSHADE_PRIM ();4740T0_MUL_T1 ();4741}47424743static void cc_env_sub_prim_mul__t0t1a__add_prim () //Added by Gonetz4744{4745CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4746GR_COMBINE_FACTOR_TEXTURE_ALPHA,4747GR_COMBINE_LOCAL_ITERATED,4748GR_COMBINE_OTHER_CONSTANT);4749CC_ENV ();4750SETSHADE_PRIM ();4751A_T0_MUL_T1 ();4752}47534754static void cc_env_sub_prim_mul__t0_inter_t1_using_t1__add_prim () //Added by Gonetz4755{4756CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4757GR_COMBINE_FACTOR_TEXTURE_RGB,4758GR_COMBINE_LOCAL_ITERATED,4759GR_COMBINE_OTHER_CONSTANT);4760CC_ENV ();4761SETSHADE_PRIM ();4762T0_INTER_T1_USING_T1 ();4763}47644765static void cc_env_sub_prim_mul__t0_inter_t1_using_half__add_prim () //Added by Gonetz4766{4767CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4768GR_COMBINE_FACTOR_TEXTURE_RGB,4769GR_COMBINE_LOCAL_ITERATED,4770GR_COMBINE_OTHER_CONSTANT);4771CC_ENV ();4772SETSHADE_PRIM ();4773T0_INTER_T1_USING_FACTOR (0x7F);4774}47754776static void cc_env_sub_prim_mul__t1_inter_t0_using_t0__add_prim () //Added by Gonetz4777{4778CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4779GR_COMBINE_FACTOR_TEXTURE_RGB,4780GR_COMBINE_LOCAL_ITERATED,4781GR_COMBINE_OTHER_CONSTANT);4782CC_ENV ();4783SETSHADE_PRIM ();4784T1_INTER_T0_USING_T0 ();4785}47864787static void cc_env_sub_shade_mul__t0_mul_t1__add_shade () //Added by Gonetz4788{4789CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4790GR_COMBINE_FACTOR_TEXTURE_RGB,4791GR_COMBINE_LOCAL_ITERATED,4792GR_COMBINE_OTHER_CONSTANT);4793CC_ENV ();4794T0_MUL_T1 ();4795}47964797static void cc_env_sub_prim_mul_prima_add_prim () //Aded by Gonetz4798{4799// * not guaranteed to work if another iterated alpha is set4800CCMB (GR_COMBINE_FUNCTION_BLEND,4801GR_COMBINE_FACTOR_LOCAL_ALPHA,4802GR_COMBINE_LOCAL_CONSTANT,4803GR_COMBINE_OTHER_ITERATED);4804CC_PRIM ();4805CA_PRIM ();4806SETSHADE_ENV ();4807}48084809static void cc_env_sub_prim_mul_enva_add_prim () //Aded by Gonetz4810{4811// * not guaranteed to work if another iterated alpha is set4812CCMB (GR_COMBINE_FUNCTION_BLEND,4813GR_COMBINE_FACTOR_OTHER_ALPHA,4814GR_COMBINE_LOCAL_ITERATED,4815GR_COMBINE_OTHER_CONSTANT);4816CC_ENV ();4817CA_ENV ();4818SETSHADE_PRIM ();4819}48204821static void cc_env_sub_prim_mul_shade_add_prim () //Added by Gonetz4822{4823CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4824GR_COMBINE_FACTOR_ONE,4825GR_COMBINE_LOCAL_CONSTANT,4826GR_COMBINE_OTHER_ITERATED);4827CC_PRIM ();4828MULSHADE_ENVSUBPRIM ();4829}48304831static void cc_env_sub_prim_mul_shadea_add_prim () //Added by Gonetz4832{4833CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4834GR_COMBINE_FACTOR_ONE,4835GR_COMBINE_LOCAL_CONSTANT,4836GR_COMBINE_OTHER_ITERATED);4837CC_PRIM ();4838MULSHADE_SHADEA ();4839SETSHADE_ENVSUBPRIM ();4840}48414842static void cc_env_sub_prim_mul__t0_inter_t1_using_prima__add_prim ()4843{4844CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4845GR_COMBINE_FACTOR_TEXTURE_RGB,4846GR_COMBINE_LOCAL_ITERATED,4847GR_COMBINE_OTHER_CONSTANT);4848CC_ENV ();4849SETSHADE_PRIM ();4850BYTE factor = (BYTE)(rdp.prim_color&0xFF);4851T0_INTER_T1_USING_FACTOR (factor);4852}48534854static void cc_env_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()4855{4856CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4857GR_COMBINE_FACTOR_TEXTURE_RGB,4858GR_COMBINE_LOCAL_ITERATED,4859GR_COMBINE_OTHER_CONSTANT);4860CC_ENV ();4861SETSHADE_PRIM ();4862T0_INTER_T1_USING_FACTOR (lod_frac);4863}48644865static void cc_env_sub_primshade_mul_t0_add_primshade ()4866{4867CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4868GR_COMBINE_FACTOR_TEXTURE_RGB,4869GR_COMBINE_LOCAL_ITERATED,4870GR_COMBINE_OTHER_CONSTANT);4871CC_ENV ();4872MULSHADE_PRIM ();4873USE_T0 ();4874}48754876static void cc_env_sub_primshade_mul_t1_add_primshade ()4877{4878CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4879GR_COMBINE_FACTOR_TEXTURE_RGB,4880GR_COMBINE_LOCAL_ITERATED,4881GR_COMBINE_OTHER_CONSTANT);4882CC_ENV ();4883MULSHADE_PRIM ();4884USE_T1 ();4885}48864887static void cc_env_sub_shade_mul_t0_add_shade ()4888{4889CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4890GR_COMBINE_FACTOR_TEXTURE_RGB,4891GR_COMBINE_LOCAL_ITERATED,4892GR_COMBINE_OTHER_CONSTANT);4893CC_ENV ();4894USE_T0 ();4895}48964897static void cc_env_sub_shade_mul_t1_add_shade ()4898{4899CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4900GR_COMBINE_FACTOR_TEXTURE_RGB,4901GR_COMBINE_LOCAL_ITERATED,4902GR_COMBINE_OTHER_CONSTANT);4903CC_ENV ();4904USE_T1 ();4905}49064907//Added by Gonetz4908static void cc_env_sub_shade_mul__t0_inter_t1_using_shadea__add_shade ()4909{4910if (cmb.combine_ext)4911{4912CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,4913GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,4914GR_CMBX_TEXTURE_RGB, 0,4915GR_CMBX_B, 0);4916}4917else4918{4919CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4920GR_COMBINE_FACTOR_TEXTURE_RGB,4921GR_COMBINE_LOCAL_ITERATED,4922GR_COMBINE_OTHER_CONSTANT);4923}4924CC_ENV ();4925T0_INTER_T1_USING_SHADEA ();4926}49274928//Added by Gonetz4929static void cc_env_sub_shade_mul_enva_add_shade ()4930{4931CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4932GR_COMBINE_FACTOR_OTHER_ALPHA,4933GR_COMBINE_LOCAL_ITERATED,4934GR_COMBINE_OTHER_CONSTANT);4935cmb.ccolor = rdp.env_color;4936}4937/*4938static void cc_env_sub__prim_inter_t0_using_shadea__mul_shade_add_env ()4939{4940// (t0-prim)*shade_alpha+prim, (env-cmb)*shade+cmb4941if (cmb.combine_ext)4942{4943CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,4944GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,4945GR_CMBX_ITRGB, 0,4946GR_CMBX_B, 0);4947CC_ENV ();4948PRIM_INTER_T0_USING_SHADEA ();4949}4950else4951{4952cc_t0_mul_shadea ();4953}4954}4955*/49564957//Added by Gonetz4958static void cc_shade_sub_t0_mul_shadea_add_t0 ()4959{4960CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,4961GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,4962GR_COMBINE_LOCAL_ITERATED,4963GR_COMBINE_OTHER_TEXTURE);4964MULSHADE_SHADEA ();4965USE_T0 ();4966}49674968static void cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim ()4969{4970CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4971GR_COMBINE_FACTOR_TEXTURE_RGB,4972GR_COMBINE_LOCAL_CONSTANT,4973GR_COMBINE_OTHER_ITERATED);4974CC_PRIM ();4975T0_INTER_T1_USING_FACTOR (lod_frac);4976}49774978static void cc_shade_sub_prim_mul_t0_add_prim ()4979{4980CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4981GR_COMBINE_FACTOR_TEXTURE_RGB,4982GR_COMBINE_LOCAL_CONSTANT,4983GR_COMBINE_OTHER_ITERATED);4984CC_PRIM ();4985USE_T0 ();4986}49874988static void cc_shade_sub_prim_mul__t0_mul_t1__add_prim ()4989{4990CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,4991GR_COMBINE_FACTOR_TEXTURE_RGB,4992GR_COMBINE_LOCAL_CONSTANT,4993GR_COMBINE_OTHER_ITERATED);4994CC_PRIM ();4995T0_MUL_T1 ();4996}49974998//Added by Gonetz4999static void cc_shade_sub_prim_mul_t1_add_prim ()5000{5001CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5002GR_COMBINE_FACTOR_TEXTURE_RGB,5003GR_COMBINE_LOCAL_CONSTANT,5004GR_COMBINE_OTHER_ITERATED);5005CC_PRIM ();5006USE_T1 ();5007}50085009//Added by Gonetz5010static void cc_shade_sub_env_mul__t0_mul_t1__add__t0_mul_t1 ()5011{5012if (cmb.combine_ext)5013{5014CCMBEXT(GR_CMBX_ITRGB, GR_FUNC_MODE_X,5015GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_NEGATIVE_X,5016GR_CMBX_TEXTURE_RGB, 0,5017GR_CMBX_TEXTURE_RGB, 0);5018CC_ENV ();5019T0_MUL_T1 ();5020}5021else5022{5023cc_t0_mul_t1 ();5024}5025}50265027//Added by Gonetz5028static void cc_shade_sub_env_mul_t0_add_prim ()5029{5030if (rdp.cur_image && (rdp.cur_image->format != 0))5031{5032cc_prim ();5033return;5034}50355036CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5037GR_COMBINE_FACTOR_TEXTURE_RGB,5038GR_COMBINE_LOCAL_CONSTANT,5039GR_COMBINE_OTHER_ITERATED);5040CC_PRIM ();5041SUBSHADE_ENV ();5042USE_T0 ();5043}50445045//Added by Gonetz5046static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_prim ()5047{5048CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5049GR_COMBINE_FACTOR_TEXTURE_RGB,5050GR_COMBINE_LOCAL_CONSTANT,5051GR_COMBINE_OTHER_ITERATED);5052CC_PRIM ();5053SUBSHADE_ENV ();5054T0_INTER_T1_USING_FACTOR (lod_frac);5055}50565057//Added by Gonetz5058static void cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_env ()5059{5060CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5061GR_COMBINE_FACTOR_TEXTURE_RGB,5062GR_COMBINE_LOCAL_CONSTANT,5063GR_COMBINE_OTHER_ITERATED);5064CC_ENV ();5065T0_INTER_T1_USING_FACTOR (lod_frac);5066}50675068//Added by Gonetz5069static void cc_shade_sub_env_mul__t0_mul_t1__add_env ()5070{5071CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5072GR_COMBINE_FACTOR_TEXTURE_RGB,5073GR_COMBINE_LOCAL_CONSTANT,5074GR_COMBINE_OTHER_ITERATED);5075CC_ENV ();5076T0_MUL_T1 ();5077}50785079//Added by Gonetz5080static void cc_shade_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env ()5081{5082CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5083GR_COMBINE_FACTOR_TEXTURE_RGB,5084GR_COMBINE_LOCAL_CONSTANT,5085GR_COMBINE_OTHER_ITERATED);5086CC_ENV ();5087SETSHADE_ENV ();5088T1_SUB_PRIM_MUL_PRIMLOD_ADD_T0 ();5089}50905091//Added by Gonetz5092static void cc_shade_sub_env_mul_t0_add_env ()5093{5094CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5095GR_COMBINE_FACTOR_TEXTURE_RGB,5096GR_COMBINE_LOCAL_CONSTANT,5097GR_COMBINE_OTHER_ITERATED);5098CC_ENV ();5099USE_T0 ();5100}51015102//Added by Gonetz5103static void cc_shade_sub_env_mul_t0_mul_prim_add_prim_mul_env ()5104{5105CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5106GR_COMBINE_FACTOR_TEXTURE_RGB,5107GR_COMBINE_LOCAL_CONSTANT,5108GR_COMBINE_OTHER_ITERATED);5109CC_PRIMMULENV ();5110SUBSHADE_ENV ();5111MULSHADE_PRIM()5112USE_T0 ();5113}51145115//Added by Gonetz5116static void cc_shade_sub_env_mul_t1_add_env ()5117{5118CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,5119GR_COMBINE_FACTOR_TEXTURE_RGB,5120GR_COMBINE_LOCAL_CONSTANT,5121GR_COMBINE_OTHER_ITERATED);5122CC_ENV ();5123USE_T1 ();5124}51255126//Added by Gonetz5127static void cc_shade_sub_env_mul_prim_add_t0 ()5128{5129CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5130GR_COMBINE_FACTOR_ONE,5131GR_COMBINE_LOCAL_ITERATED,5132GR_COMBINE_OTHER_TEXTURE);5133SUBSHADE_ENV ();5134MULSHADE_PRIM ();5135USE_T0 ();5136}51375138static void cc__t0_add_prim_mul_shade__mul_shade_add_env ()5139{5140if (!cmb.combine_ext)5141{5142cc_shade_sub_env_mul_prim_add_t0 ();5143return;5144}5145T1CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,5146GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5147GR_CMBX_ITRGB, 0,5148GR_CMBX_B, 0);5149T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,5150GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5151GR_CMBX_ITRGB, 0,5152GR_CMBX_B, 0);5153CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,5154GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_ZERO,5155GR_CMBX_ITRGB, 0,5156GR_CMBX_B, 0);5157cmb.tex_ccolor = rdp.prim_color;5158CC_ENV ();5159cmb.tex |= 1;5160}51615162static void cc__t0_add_prim_mul_shade__mul_shade ()5163{5164if (!cmb.combine_ext)5165{5166cc_shade_sub_env_mul_prim_add_t0 ();5167return;5168}5169T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,5170GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5171GR_CMBX_ITRGB, 0,5172GR_CMBX_B, 0);5173CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,5174GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,5175GR_CMBX_ITRGB, 0,5176GR_CMBX_ZERO, 0);5177cmb.tex_ccolor = rdp.prim_color;5178cmb.tex |= 1;5179}51805181//Added by Gonetz5182static void cc_shade_sub_env_mul_prim_add_env ()5183{5184CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5185GR_COMBINE_FACTOR_ONE,5186GR_COMBINE_LOCAL_CONSTANT,5187GR_COMBINE_OTHER_ITERATED);5188SUBSHADE_ENV ();5189MULSHADE_PRIM ();5190CC_ENV ();5191}51925193//Added by Gonetz5194static void cc_shade_sub_env_mul_prima_add_prim ()5195{5196CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5197GR_COMBINE_FACTOR_ONE,5198GR_COMBINE_LOCAL_CONSTANT,5199GR_COMBINE_OTHER_ITERATED);5200SUBSHADE_ENV ();5201MULSHADE_PRIMA ();5202CC_PRIM ();5203}52045205static void cc_shade_sub_env_mul_k5_add_prim ()5206{5207CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5208GR_COMBINE_FACTOR_ONE,5209GR_COMBINE_LOCAL_CONSTANT,5210GR_COMBINE_OTHER_ITERATED);5211SUBSHADE_ENV ();5212DWORD temp = rdp.prim_color;5213rdp.prim_color = rdp.K5;5214MULSHADE_PRIMA ();5215rdp.prim_color = temp;5216CC_PRIM ();5217}52185219// ** A inter B using C **5220static void cc_t0_inter_t1_using_t1a ()5221{5222CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5223GR_COMBINE_FACTOR_ONE,5224GR_COMBINE_LOCAL_NONE,5225GR_COMBINE_OTHER_TEXTURE);5226T0_INTER_T1_USING_T1A ();5227}52285229static void cc_t0_inter_t1_using_prima ()5230{5231CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5232GR_COMBINE_FACTOR_ONE,5233GR_COMBINE_LOCAL_NONE,5234GR_COMBINE_OTHER_TEXTURE);5235BYTE factor = (BYTE)(rdp.prim_color&0xFF);5236T0_INTER_T1_USING_FACTOR (factor);5237}52385239static void cc_t1_inter_t0_using_prima ()5240{5241CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5242GR_COMBINE_FACTOR_ONE,5243GR_COMBINE_LOCAL_NONE,5244GR_COMBINE_OTHER_TEXTURE);5245BYTE factor = (BYTE)(rdp.prim_color&0xFF);5246T1_INTER_T0_USING_FACTOR (factor);5247}52485249static void cc_t1_inter_t0_using_prim ()5250{5251CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5252GR_COMBINE_FACTOR_ONE,5253GR_COMBINE_LOCAL_NONE,5254GR_COMBINE_OTHER_TEXTURE);5255T1_INTER_T0_USING_PRIM ();5256}52575258static void cc_t0_inter_t1_using_env ()5259{5260CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5261GR_COMBINE_FACTOR_ONE,5262GR_COMBINE_LOCAL_NONE,5263GR_COMBINE_OTHER_TEXTURE);5264T0_INTER_T1_USING_ENV ();5265}52665267static void cc_t0_inter_t1_using_enva ()5268{5269CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5270GR_COMBINE_FACTOR_ONE,5271GR_COMBINE_LOCAL_NONE,5272GR_COMBINE_OTHER_TEXTURE);5273BYTE factor = (BYTE)(rdp.env_color&0xFF);5274T0_INTER_T1_USING_FACTOR (factor);5275}52765277static void cc__t0_inter_t1_using_prim__inter_env_using_enva ()5278{5279// (t1-t0)*prim+t0, (env-cmb)*env_a+cmb5280if (!cmb.combine_ext)5281{5282cc_t0_inter_t1_using_prima ();5283return;5284}5285T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5286GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5287GR_CMBX_ZERO, 0,5288GR_CMBX_B, 0);5289T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,5290GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5291GR_CMBX_TMU_CCOLOR, 0,5292GR_CMBX_B, 0);5293cmb.tex_ccolor = rdp.prim_color;5294cmb.tex |= 3;5295CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,5296GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5297GR_CMBX_CONSTANT_ALPHA, 0,5298GR_CMBX_B, 0);5299cmb.ccolor = rdp.env_color;5300}53015302static void cc__t0_inter_t1_using_shade__inter_env_using_enva ()5303{5304// (t1-t0)*shade+t0, (env-cmb)*env_a+cmb5305if (!cmb.combine_ext)5306{5307cc_t0_inter_t1_using_enva ();5308return;5309}5310T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5311GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5312GR_CMBX_ZERO, 0,5313GR_CMBX_B, 0);5314T0CCMBEXT(GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X,5315GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5316GR_CMBX_ITRGB, 0,5317GR_CMBX_B, 0);5318cmb.tex |= 3;5319CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,5320GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5321GR_CMBX_CONSTANT_ALPHA, 0,5322GR_CMBX_B, 0);5323cmb.ccolor = rdp.env_color;5324}53255326static void cc__t1_inter_env_using_t0__inter_prim_using_shadea ()5327{5328//(env-t1)*t0+t1, (prim-cmb)*shadea+cmb5329if (!cmb.combine_ext)5330{5331cc_t0_add_t1 ();5332return;5333}5334T1CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5335GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5336GR_CMBX_ZERO, 0,5337GR_CMBX_B, 0);5338T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,5339GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5340GR_CMBX_LOCAL_TEXTURE_RGB, 0,5341GR_CMBX_B, 0);5342cmb.tex |= 3;5343cmb.tex_ccolor = rdp.env_color;5344CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,5345GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5346GR_CMBX_ITALPHA, 0,5347GR_CMBX_B, 0);5348CC_PRIM();5349}5350535153525353//Added by Gonetz5354static void cc_t1_inter_t0_using_shadea ()5355{5356if (cmb.combine_ext)5357{5358CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,5359GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,5360GR_CMBX_ZERO, 1,5361GR_CMBX_ZERO, 0);5362}5363else5364{5365CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5366GR_COMBINE_FACTOR_ONE,5367GR_COMBINE_LOCAL_NONE,5368GR_COMBINE_OTHER_TEXTURE);5369}5370T1_INTER_T0_USING_SHADEA ();5371}53725373//Added by Gonetz5374static void cc_t0_inter_t1_using_primlod ()5375{5376CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5377GR_COMBINE_FACTOR_ONE,5378GR_COMBINE_LOCAL_NONE,5379GR_COMBINE_OTHER_TEXTURE);5380T0_INTER_T1_USING_FACTOR (lod_frac);5381}53825383//Added by Gonetz5384static void cc_t1_inter_t0_using_primlod ()5385{5386CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5387GR_COMBINE_FACTOR_ONE,5388GR_COMBINE_LOCAL_NONE,5389GR_COMBINE_OTHER_TEXTURE);5390T1_INTER_T0_USING_FACTOR (lod_frac);5391}53925393//Added by Gonetz5394static void cc_t1_inter_t0_using_t0 ()5395{5396CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5397GR_COMBINE_FACTOR_ONE,5398GR_COMBINE_LOCAL_NONE,5399GR_COMBINE_OTHER_TEXTURE);5400T1_INTER_T0_USING_T0 ();5401}54025403//Added by Gonetz5404static void cc_t0_inter_t1_using_k5 ()5405{5406CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5407GR_COMBINE_FACTOR_ONE,5408GR_COMBINE_LOCAL_NONE,5409GR_COMBINE_OTHER_TEXTURE);5410T0_INTER_T1_USING_FACTOR (rdp.K5);5411}54125413static void cc_t0_inter_env_using_prim ()5414{5415CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5416GR_COMBINE_FACTOR_ONE,5417GR_COMBINE_LOCAL_NONE,5418GR_COMBINE_OTHER_TEXTURE);5419USE_T0 ();54205421MOD_0 (TMOD_TEX_INTER_COL_USING_COL1);5422MOD_0_COL (rdp.env_color & 0xFFFFFF00);5423MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);5424}54255426//Added by Gonetz5427static void cc_t0_inter_prim_using_primlod ()5428{5429CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5430GR_COMBINE_FACTOR_ONE,5431GR_COMBINE_LOCAL_NONE,5432GR_COMBINE_OTHER_TEXTURE);5433USE_T0 ();54345435MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);5436MOD_0_COL (rdp.prim_color & 0xFFFFFF00);5437MOD_0_FAC (lod_frac & 0xFF);5438}54395440static void cc_t0_inter_shade_using_primlod ()5441{5442CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5443GR_COMBINE_FACTOR_TEXTURE_RGB,5444GR_COMBINE_LOCAL_ITERATED,5445GR_COMBINE_OTHER_CONSTANT);5446CC_PRIMLOD();5447cmb.ccolor=(~cmb.ccolor)&0xFFFFFF00;5448MULSHADE_PRIMLOD ();5449USE_T0 ();5450//(shade-t0)*primlod+t0 = t0*(1-primlod)+shade*primlod5451}54525453//Added by Gonetz5454static void cc__env_inter_t0_using_primlod__mul_prim ()5455{5456//((t0-env)*primlod+env)*prim = t0*prim*primlod+env*prim*(1-primlod);5457CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5458GR_COMBINE_FACTOR_TEXTURE_RGB,5459GR_COMBINE_LOCAL_ITERATED,5460GR_COMBINE_OTHER_CONSTANT);5461CC_PRIM ();5462cmb.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);5463SETSHADE_PRIM ();5464SETSHADE_ENV ();5465SETSHADE_1MPRIMLOD ();5466USE_T0 ();5467}54685469//Added by Gonetz5470static void cc_env_inter_prim_using_primlod ()5471{5472CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5473GR_COMBINE_FACTOR_ONE,5474GR_COMBINE_LOCAL_CONSTANT,5475GR_COMBINE_OTHER_ITERATED);5476SETSHADE_PRIMSUBENV ();5477SETSHADE_PRIMLOD ();5478CC_ENV ();5479}54805481// ** (A-B)*C+D*E **5482static void cc_one_sub_env_mul_prim_add__t0_mul_env () //Aded by Gonetz5483{5484CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5485GR_COMBINE_FACTOR_TEXTURE_RGB,5486GR_COMBINE_LOCAL_ITERATED,5487GR_COMBINE_OTHER_CONSTANT);5488CC_ENV ();5489SETSHADE_1MENV ();5490SETSHADE_PRIM ();5491USE_T0 ();5492}54935494// ** (A inter B using C) * D **5495//Added by Gonetz5496static void cc__t0_inter_t1_using_prima__mul_prim ()5497{5498CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5499GR_COMBINE_FACTOR_LOCAL,5500GR_COMBINE_LOCAL_CONSTANT,5501GR_COMBINE_OTHER_TEXTURE);5502BYTE factor = (BYTE)(rdp.prim_color&0xFF);5503T0_INTER_T1_USING_FACTOR (factor);5504CC_PRIM ();5505}55065507//Added by Gonetz5508static void cc__t1_inter_t0_using_prima__mul_prim ()5509{5510CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5511GR_COMBINE_FACTOR_LOCAL,5512GR_COMBINE_LOCAL_CONSTANT,5513GR_COMBINE_OTHER_TEXTURE);5514BYTE factor = (BYTE)(rdp.prim_color&0xFF);5515T1_INTER_T0_USING_FACTOR (factor);5516CC_PRIM ();5517}55185519//Added by Gonetz5520static void cc__t0_inter_t1_using_prim__mul_shade ()5521{5522CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5523GR_COMBINE_FACTOR_LOCAL,5524GR_COMBINE_LOCAL_ITERATED,5525GR_COMBINE_OTHER_TEXTURE);5526//BYTE factor = (BYTE)(rdp.prim_color&0xFF);5527T0_INTER_T1_USING_PRIM ();5528}55295530//Added by Gonetz5531static void cc__t0_inter_t1_using_prima__mul_shade ()5532{5533CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5534GR_COMBINE_FACTOR_LOCAL,5535GR_COMBINE_LOCAL_ITERATED,5536GR_COMBINE_OTHER_TEXTURE);5537BYTE factor = (BYTE)(rdp.prim_color&0xFF);5538T0_INTER_T1_USING_FACTOR (factor);5539}55405541//Added by Gonetz5542static void cc__t1_inter_t0_using_prima__mul_shade ()5543{5544CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5545GR_COMBINE_FACTOR_LOCAL,5546GR_COMBINE_LOCAL_ITERATED,5547GR_COMBINE_OTHER_TEXTURE);5548BYTE factor = (BYTE)(rdp.prim_color&0xFF);5549T1_INTER_T0_USING_FACTOR (factor);5550}55515552static void cc__t0_inter_t1_using_env__mul_shade ()5553{5554CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5555GR_COMBINE_FACTOR_LOCAL,5556GR_COMBINE_LOCAL_ITERATED,5557GR_COMBINE_OTHER_TEXTURE);5558T0_INTER_T1_USING_ENV ();5559}55605561static void cc__t0_inter_t1_using_enva__mul_shade ()5562{5563CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5564GR_COMBINE_FACTOR_LOCAL,5565GR_COMBINE_LOCAL_ITERATED,5566GR_COMBINE_OTHER_TEXTURE);5567BYTE factor = (BYTE)(rdp.env_color&0xFF);5568T0_INTER_T1_USING_FACTOR (factor);5569}55705571static void cc__t0_inter_t1_using_enva__mul_prim ()5572{5573CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5574GR_COMBINE_FACTOR_LOCAL,5575GR_COMBINE_LOCAL_CONSTANT,5576GR_COMBINE_OTHER_TEXTURE);5577CC_PRIM ();5578BYTE factor = (BYTE)(rdp.env_color&0xFF);5579T0_INTER_T1_USING_FACTOR (factor);5580}55815582//Added by Gonetz5583static void cc__t0_inter_t1_using_enva__mul_env ()5584{5585CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5586GR_COMBINE_FACTOR_LOCAL,5587GR_COMBINE_LOCAL_CONSTANT,5588GR_COMBINE_OTHER_TEXTURE);5589CC_ENV ();5590BYTE factor = (BYTE)(rdp.env_color&0xFF);5591T0_INTER_T1_USING_FACTOR (factor);5592}55935594//Added by Gonetz5595static void cc__t0_inter_t1_using_primlod__mul_prim ()5596{5597CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5598GR_COMBINE_FACTOR_LOCAL,5599GR_COMBINE_LOCAL_CONSTANT,5600GR_COMBINE_OTHER_TEXTURE);5601CC_PRIM ();5602T0_INTER_T1_USING_FACTOR (lod_frac);5603}56045605//Added by Gonetz5606static void cc__t0_inter_t1_using_primlod__mul_prima ()5607{5608CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5609GR_COMBINE_FACTOR_LOCAL,5610GR_COMBINE_LOCAL_CONSTANT,5611GR_COMBINE_OTHER_TEXTURE);5612CC_PRIMA ();5613T0_INTER_T1_USING_FACTOR (lod_frac);5614}56155616//Added by Gonetz5617static void cc__t1_mul_primlod_add_t0__mul_prim ()5618{5619CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5620GR_COMBINE_FACTOR_LOCAL,5621GR_COMBINE_LOCAL_CONSTANT,5622GR_COMBINE_OTHER_TEXTURE);5623CC_PRIM ();5624T1_MUL_PRIMLOD_ADD_T0 ();5625}56265627//Added by Gonetz5628static void cc__t0_inter_t1_using_primlod__mul_env ()5629{5630CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5631GR_COMBINE_FACTOR_LOCAL,5632GR_COMBINE_LOCAL_CONSTANT,5633GR_COMBINE_OTHER_TEXTURE);5634CC_ENV ();5635T0_INTER_T1_USING_FACTOR (lod_frac);5636}56375638//Added by Gonetz5639static void cc__t1_mul_primlod_add_t0__mul_env ()5640{5641CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5642GR_COMBINE_FACTOR_LOCAL,5643GR_COMBINE_LOCAL_CONSTANT,5644GR_COMBINE_OTHER_TEXTURE);5645CC_ENV ();5646T1_MUL_PRIMLOD_ADD_T0 ();5647}56485649//Added by Gonetz5650static void cc__t1_inter_t0_using_prim__mul_env ()5651{5652CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5653GR_COMBINE_FACTOR_LOCAL,5654GR_COMBINE_LOCAL_CONSTANT,5655GR_COMBINE_OTHER_TEXTURE);5656CC_ENV ();5657T1_INTER_T0_USING_PRIM ();5658}56595660static void cc__t0_inter_t1_using_primlod__mul_shade ()5661{5662if (rdp.LOD_en && (rdp.mipmap_level == 0))5663{5664cc_t0_mul_shade ();5665return;5666}5667CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5668GR_COMBINE_FACTOR_LOCAL,5669GR_COMBINE_LOCAL_ITERATED,5670GR_COMBINE_OTHER_TEXTURE);5671T0_INTER_T1_USING_FACTOR (lod_frac);5672}56735674static void cc__t1_inter_t0_using_primlod__mul_shade ()5675{5676CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5677GR_COMBINE_FACTOR_LOCAL,5678GR_COMBINE_LOCAL_ITERATED,5679GR_COMBINE_OTHER_TEXTURE);5680T1_INTER_T0_USING_FACTOR (lod_frac);5681}56825683static void cc__t0_inter_t1_using_half__mul_shade ()5684{5685CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5686GR_COMBINE_FACTOR_LOCAL,5687GR_COMBINE_LOCAL_ITERATED,5688GR_COMBINE_OTHER_TEXTURE);5689T0_INTER_T1_USING_FACTOR (0x7F);5690}56915692static void cc__t0_inter_t1_using_t0__mul_shade ()5693{5694CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5695GR_COMBINE_FACTOR_LOCAL,5696GR_COMBINE_LOCAL_ITERATED,5697GR_COMBINE_OTHER_TEXTURE);5698T0_INTER_T1_USING_T0();5699}57005701static void cc__t0_inter_t1_using_t1a__mul_shade ()5702{5703CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5704GR_COMBINE_FACTOR_LOCAL,5705GR_COMBINE_LOCAL_ITERATED,5706GR_COMBINE_OTHER_TEXTURE);5707T0_INTER_T1_USING_T1A();5708}57095710static void cc__t0_inter_t1_using_shadea__mul_shade ()5711{5712if (cmb.combine_ext)5713{5714CCMBEXT(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X,5715GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,5716GR_CMBX_ITRGB, 0,5717GR_CMBX_ZERO, 0);5718}5719else5720{5721CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5722GR_COMBINE_FACTOR_LOCAL,5723GR_COMBINE_LOCAL_ITERATED,5724GR_COMBINE_OTHER_TEXTURE);5725}5726T0_INTER_T1_USING_SHADEA ();5727}57285729static void cc__t0_inter_t1_using_k5__mul_shade ()5730{5731CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5732GR_COMBINE_FACTOR_LOCAL,5733GR_COMBINE_LOCAL_ITERATED,5734GR_COMBINE_OTHER_TEXTURE);5735T0_INTER_T1_USING_FACTOR (rdp.K5);5736}57375738static void cc__t1_inter_t0_using_k5__mul_shade ()5739{5740CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5741GR_COMBINE_FACTOR_LOCAL,5742GR_COMBINE_LOCAL_ITERATED,5743GR_COMBINE_OTHER_TEXTURE);5744T1_INTER_T0_USING_FACTOR (rdp.K5);5745}57465747static void cc_t0_inter_prim_using_prima ()5748{5749if (cmb.combine_ext)5750{5751T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,5752GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5753GR_CMBX_TMU_CALPHA, 0,5754GR_CMBX_B, 0);5755cmb.tex_ccolor = rdp.prim_color;5756cmb.tex |= 1;5757CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5758GR_COMBINE_FACTOR_ONE,5759GR_COMBINE_LOCAL_NONE,5760GR_COMBINE_OTHER_TEXTURE);5761}5762else5763{5764CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,5765GR_COMBINE_FACTOR_TEXTURE_RGB,5766GR_COMBINE_LOCAL_ITERATED,5767GR_COMBINE_OTHER_CONSTANT);5768CC_1SUBPRIMA ();5769SETSHADE_PRIM ();5770SETSHADE_PRIMA ();5771USE_T0 ();5772}5773}57745775static void cc__t0_inter_prim_using_t0a__mul_shade ()5776{5777CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5778GR_COMBINE_FACTOR_LOCAL,5779GR_COMBINE_LOCAL_ITERATED,5780GR_COMBINE_OTHER_TEXTURE);5781MOD_0 (TMOD_TEX_INTER_COL_USING_TEXA);5782MOD_0_COL (rdp.prim_color & 0xFFFFFF00);5783USE_T0 ();5784}57855786static void cc__env_inter_prim_using_t0__mul_prim ()5787{5788// (prim-env)*t0+env, (cmb-0)*prim+05789CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5790GR_COMBINE_FACTOR_LOCAL,5791GR_COMBINE_LOCAL_CONSTANT,5792GR_COMBINE_OTHER_TEXTURE);5793CC_PRIM ();5794MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);5795MOD_0_COL (rdp.env_color & 0xFFFFFF00);5796MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);5797USE_T0 ();5798}57995800static void cc__env_inter_prim_using_t0__mul_shade ()5801{5802// amazing... mace actually uses the blender as part of the combine5803if ((rdp.othermode_l & 0xFFFF0000) == 0x03820000 ||5804(rdp.othermode_l & 0xFFFF0000) == 0x00910000)5805{5806// blender:5807// 1ST = CLR_IN * A_IN + CLR_BL * 1MA5808// OUT = 1ST * 0 + 1ST * 158095810CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5811GR_COMBINE_FACTOR_LOCAL,5812GR_COMBINE_LOCAL_ITERATED,5813GR_COMBINE_OTHER_TEXTURE);5814MOD_0 (TMOD_COL2_INTER__COL_INTER_COL1_USING_TEX__USING_TEXA);5815MOD_0_COL (rdp.env_color & 0xFFFFFF00);5816MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);5817MOD_0_COL2 (rdp.blend_color & 0xFFFFFF00);5818USE_T0 ();5819}5820else5821{5822//(prim-env)*t0+env, (shade-0)*cmb+05823CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5824GR_COMBINE_FACTOR_LOCAL,5825GR_COMBINE_LOCAL_ITERATED,5826GR_COMBINE_OTHER_TEXTURE);5827MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);5828MOD_0_COL (rdp.env_color & 0xFFFFFF00);5829MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);5830USE_T0 ();5831}5832}58335834static void cc__prim_inter_t0_using_env__mul_shade ()5835{5836// (t0-prim)*env+prim, (cmb-0)*shade+05837if ((rdp.prim_color & 0xFFFFFF00) == 0)5838{5839cc_t0_mul_env_mul_shade ();5840return;5841}5842CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5843GR_COMBINE_FACTOR_LOCAL,5844GR_COMBINE_LOCAL_ITERATED,5845GR_COMBINE_OTHER_TEXTURE);5846MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);5847MOD_0_COL (rdp.prim_color & 0xFFFFFF00);5848MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);5849USE_T0 ();5850}58515852static void cc_prim_sub__prim_sub_t0_mul_prima__mul_shade ()5853{5854// (prim-t0)*prim_a+0, (prim-cmb)*shade+05855if (cmb.combine_ext)5856{5857T0CCMBEXT(GR_CMBX_TMU_CCOLOR, GR_FUNC_MODE_X,5858GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5859GR_CMBX_TMU_CALPHA, 0,5860GR_CMBX_ZERO, 0);5861cmb.tex_ccolor = rdp.prim_color;5862cmb.tex |= 1;5863CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,5864GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,5865GR_CMBX_ITRGB, 0,5866GR_CMBX_ZERO, 0);5867CC_PRIM();5868}5869else5870{5871if ((rdp.prim_color & 0xFFFFFF00) == 0)5872{5873cc_t0_mul_prima_mul_shade ();5874return;5875}5876CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5877GR_COMBINE_FACTOR_LOCAL,5878GR_COMBINE_LOCAL_ITERATED,5879GR_COMBINE_OTHER_TEXTURE);5880MOD_0 (TMOD_COL_INTER_TEX_USING_COL1);5881MOD_0_COL (rdp.prim_color & 0xFFFFFF00);5882BYTE prima = (BYTE)(rdp.prim_color&0xFF);5883MOD_0_COL1 ((prima<<24)|(prima<<16)|(prima<<8));5884USE_T0 ();5885}5886}58875888static void cc__prim_inter_env_using_t0__mul_shade ()5889{5890// (env-prim)*t0+prim, (cmb-0)*shade+05891CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5892GR_COMBINE_FACTOR_LOCAL,5893GR_COMBINE_LOCAL_ITERATED,5894GR_COMBINE_OTHER_TEXTURE);5895MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);5896MOD_0_COL (rdp.prim_color & 0xFFFFFF00);5897MOD_0_COL1 (rdp.env_color & 0xFFFFFF00);5898USE_T0 ();5899}59005901static void cc__env_inter_prim_using_t0a__mul_t0 ()5902{5903CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5904GR_COMBINE_FACTOR_ONE,5905GR_COMBINE_LOCAL_NONE,5906GR_COMBINE_OTHER_TEXTURE);5907MOD_0 (TMOD_COL_INTER_COL1_USING_TEXA__MUL_TEX);5908MOD_0_COL (rdp.env_color & 0xFFFFFF00);5909MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);5910USE_T0 ();5911}59125913static void cc__env_inter_prim_using__t0_sub_shade_mul_primlod_add_env ()5914{5915// (t0-shade)*lodf+env, (prim-env)*cmb+env5916if (cmb.combine_ext)5917{5918T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,5919GR_CMBX_ITRGB, GR_FUNC_MODE_NEGATIVE_X,5920GR_CMBX_DETAIL_FACTOR, 0,5921GR_CMBX_TMU_CCOLOR, 0);5922cmb.tex_ccolor = rdp.env_color;5923percent = (float)lod_frac / 255.0f;5924cmb.dc0_detailmax = cmb.dc1_detailmax = percent;5925cmb.tex |= 1;5926CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5927GR_COMBINE_FACTOR_LOCAL,5928GR_COMBINE_LOCAL_CONSTANT,5929GR_COMBINE_OTHER_TEXTURE);5930CC_PRIMSUBENV ();5931}5932else5933{5934CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,5935GR_COMBINE_FACTOR_ONE,//TEXTURE_RGB,5936GR_COMBINE_LOCAL_ITERATED,5937GR_COMBINE_OTHER_TEXTURE);//CONSTANT);5938MOD_0 (TMOD_COL_INTER_COL1_USING_TEX);5939MOD_0_COL (rdp.env_color & 0xFFFFFF00);5940MOD_0_COL1 (rdp.prim_color & 0xFFFFFF00);5941USE_T0 ();5942MULSHADE_PRIMSUBENV ();5943MULSHADE_PRIMLOD();5944SUBSHADE_PRIMSUBENV ();5945}5946}59475948static void cc__prim_inter_t0_using_t0__mul_shade ()5949{5950CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5951GR_COMBINE_FACTOR_LOCAL,5952GR_COMBINE_LOCAL_ITERATED,5953GR_COMBINE_OTHER_TEXTURE);5954MOD_0 (TMOD_COL_INTER_TEX_USING_TEX);5955MOD_0_COL (rdp.prim_color & 0xFFFFFF00);5956USE_T0 ();5957}59585959static void cc__env_inter_t0_using_t0a__mul_shade ()5960{5961CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5962GR_COMBINE_FACTOR_LOCAL,5963GR_COMBINE_LOCAL_ITERATED,5964GR_COMBINE_OTHER_TEXTURE);5965MOD_0 (TMOD_COL_INTER_TEX_USING_TEXA);5966MOD_0_COL (rdp.env_color & 0xFFFFFF00);5967USE_T0 ();5968}59695970static void cc_shade_mul_prima ()5971{5972CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5973GR_COMBINE_FACTOR_ONE,5974GR_COMBINE_LOCAL_NONE,5975GR_COMBINE_OTHER_ITERATED);5976MULSHADE_PRIMA ();5977}59785979static void cc_shade_mul_shadea ()5980{5981CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,5982GR_COMBINE_FACTOR_ONE,5983GR_COMBINE_LOCAL_NONE,5984GR_COMBINE_OTHER_ITERATED);5985MULSHADE_SHADEA ();5986}59875988static void cc__t0_mul_shade__inter_env_using_enva ()5989{5990// (t0-0)*shade+0, (env-cmb)*env_a+cmb ** INC **5991if (cmb.combine_ext)5992{5993T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,5994GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,5995GR_CMBX_ITRGB, 0,5996GR_CMBX_ZERO, 0);5997cmb.tex |= 1;5998CCMBEXT(GR_CMBX_CONSTANT_COLOR, GR_FUNC_MODE_X,5999GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_NEGATIVE_X,6000GR_CMBX_ITALPHA, 0,6001GR_CMBX_B, 0);6002CC_ENV ();6003SETSHADE_A_ENV ();6004}6005else6006{6007CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6008GR_COMBINE_FACTOR_LOCAL,6009GR_COMBINE_LOCAL_ITERATED,6010GR_COMBINE_OTHER_TEXTURE);6011INTERSHADE_2 (rdp.env_color & 0xFFFFFF00, rdp.env_color & 0xFF);6012USE_T0 ();6013MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);6014MOD_0_COL (rdp.env_color & 0xFFFFFF00);6015MOD_0_FAC (rdp.env_color & 0xFF);6016}6017}60186019static void cc__t0_mul_shade__inter_one_using_shadea ()6020{6021if (cmb.combine_ext)6022{6023T0CCMBEXT(GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_ZERO,6024GR_CMBX_LOCAL_TEXTURE_RGB, GR_FUNC_MODE_X,6025GR_CMBX_ITRGB, 0,6026GR_CMBX_ZERO, 0);6027cmb.tex |= 1;6028CCMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_X,6029GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_ONE_MINUS_X,6030GR_CMBX_ITALPHA, 0,6031GR_CMBX_B, 0);6032}6033else6034{6035cc_t0_mul_shade ();6036}6037}603860396040//****************************************************************60416042static void ac_one ()6043{6044ACMB (GR_COMBINE_FUNCTION_LOCAL,6045GR_COMBINE_FACTOR_NONE,6046GR_COMBINE_LOCAL_CONSTANT,6047GR_COMBINE_OTHER_NONE);6048cmb.ccolor |= 0xFF;6049}60506051static void ac_t0 ()6052{6053ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6054GR_COMBINE_FACTOR_ONE,6055GR_COMBINE_LOCAL_NONE,6056GR_COMBINE_OTHER_TEXTURE);6057A_USE_T0 ();6058}60596060static void ac_zero ()6061{6062if (cmb.tex > 0)6063{6064ac_t0 ();6065return;6066}6067ACMB (GR_COMBINE_FUNCTION_LOCAL,6068GR_COMBINE_FACTOR_NONE,6069GR_COMBINE_LOCAL_CONSTANT,6070GR_COMBINE_OTHER_NONE);6071cmb.ccolor &= 0xFFFFFF00;6072}60736074static void ac_t1 ()6075{6076ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6077GR_COMBINE_FACTOR_ONE,6078GR_COMBINE_LOCAL_NONE,6079GR_COMBINE_OTHER_TEXTURE);6080if (settings.BAR && rdp.tiles[rdp.cur_tile].format == 3)6081A_USE_T0 ();6082else6083A_USE_T1 ();6084}60856086static void ac_prim ()6087{6088ACMB (GR_COMBINE_FUNCTION_LOCAL,6089GR_COMBINE_FACTOR_NONE,6090GR_COMBINE_LOCAL_CONSTANT,6091GR_COMBINE_OTHER_NONE);6092CA_PRIM ();6093}60946095static void ac_primlod ()6096{6097ACMB (GR_COMBINE_FUNCTION_LOCAL,6098GR_COMBINE_FACTOR_NONE,6099GR_COMBINE_LOCAL_CONSTANT,6100GR_COMBINE_OTHER_NONE);6101CA_PRIMLOD ();6102}61036104static void ac_one_sub_prim ()6105{6106ACMB (GR_COMBINE_FUNCTION_LOCAL,6107GR_COMBINE_FACTOR_NONE,6108GR_COMBINE_LOCAL_CONSTANT,6109GR_COMBINE_OTHER_NONE);6110CA_INVPRIM ();6111}61126113static void ac_env ()6114{6115ACMB (GR_COMBINE_FUNCTION_LOCAL,6116GR_COMBINE_FACTOR_NONE,6117GR_COMBINE_LOCAL_CONSTANT,6118GR_COMBINE_OTHER_NONE);6119CA_ENV ();6120}61216122static void ac_shade ()6123{6124ACMB (GR_COMBINE_FUNCTION_LOCAL,6125GR_COMBINE_FACTOR_NONE,6126GR_COMBINE_LOCAL_ITERATED,6127GR_COMBINE_OTHER_NONE);6128}61296130// ** A+B **6131static void ac_t0_add_t1 () //Aded by Gonetz6132{6133ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6134GR_COMBINE_FACTOR_ONE,6135GR_COMBINE_LOCAL_NONE,6136GR_COMBINE_OTHER_TEXTURE);6137A_T0_ADD_T1 ();6138}61396140static void ac__t0_mul_prim__add__t1_mul_primlod () //Aded by Gonetz6141{6142if (lod_frac == 0)6143{6144ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6145GR_COMBINE_FACTOR_LOCAL,6146GR_COMBINE_LOCAL_CONSTANT,6147GR_COMBINE_OTHER_TEXTURE);6148CA_PRIM ();6149A_USE_T0 ();6150}6151else if ((rdp.prim_color&0xFF) == 0)6152{6153ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6154GR_COMBINE_FACTOR_LOCAL,6155GR_COMBINE_LOCAL_CONSTANT,6156GR_COMBINE_OTHER_TEXTURE);6157CA_PRIMLOD ();6158A_USE_T1 ();6159}6160else6161{6162ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6163GR_COMBINE_FACTOR_LOCAL,6164GR_COMBINE_LOCAL_CONSTANT,6165GR_COMBINE_OTHER_TEXTURE);6166CA_PRIM ();6167A_T0_ADD_T1 ();6168}6169}61706171static void ac_t0_add_prim () //Aded by Gonetz6172{6173ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6174GR_COMBINE_FACTOR_ONE,6175GR_COMBINE_LOCAL_CONSTANT,6176GR_COMBINE_OTHER_TEXTURE);6177CA_PRIM ();6178A_USE_T0 ();6179}61806181static void ac_t0_add_env () //Aded by Gonetz6182{6183ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6184GR_COMBINE_FACTOR_ONE,6185GR_COMBINE_LOCAL_CONSTANT,6186GR_COMBINE_OTHER_TEXTURE);6187CA_ENV ();6188A_USE_T0 ();6189}6190/*6191static void ac_t1_add_env () //Added by Gonetz6192{6193ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6194GR_COMBINE_FACTOR_ONE,6195GR_COMBINE_LOCAL_CONSTANT,6196GR_COMBINE_OTHER_TEXTURE);6197CA_ENV ();6198A_USE_T1 ();6199}6200*/6201static void ac__t0_add_t1__add_prim () //Aded by Gonetz6202{6203ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6204GR_COMBINE_FACTOR_ONE,6205GR_COMBINE_LOCAL_CONSTANT,6206GR_COMBINE_OTHER_TEXTURE);6207CA_PRIM ();6208A_T0_ADD_T1 ();6209}62106211static void ac_prim_add_shade () //Aded by Gonetz6212{6213CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6214GR_COMBINE_FACTOR_ONE,6215GR_COMBINE_LOCAL_ITERATED,6216GR_COMBINE_OTHER_CONSTANT);6217CA_PRIM ();6218}62196220static void ac_env_add_shade () //Aded by Gonetz6221{6222CCMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6223GR_COMBINE_FACTOR_ONE,6224GR_COMBINE_LOCAL_ITERATED,6225GR_COMBINE_OTHER_CONSTANT);6226CA_ENV ();6227}62286229// ** A*B **6230static void ac_t0_mul_t0 () //Added by Gonetz6231{6232ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6233GR_COMBINE_FACTOR_TEXTURE_ALPHA,6234GR_COMBINE_LOCAL_NONE,6235GR_COMBINE_OTHER_TEXTURE);6236A_USE_T0 ();6237}62386239static void ac_t0_mul_t1 ()6240{6241ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6242GR_COMBINE_FACTOR_ONE,6243GR_COMBINE_LOCAL_NONE,6244GR_COMBINE_OTHER_TEXTURE);6245A_T0_MUL_T1 ();6246}62476248static void ac_t0_mul_t1_add_prim ()6249{6250ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6251GR_COMBINE_FACTOR_ONE,6252GR_COMBINE_LOCAL_CONSTANT,6253GR_COMBINE_OTHER_TEXTURE);6254CA_PRIM ();6255A_T0_MUL_T1 ();6256}62576258static void ac_t0_mul_prim ()6259{6260ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6261GR_COMBINE_FACTOR_LOCAL,6262GR_COMBINE_LOCAL_CONSTANT,6263GR_COMBINE_OTHER_TEXTURE);6264CA_PRIM ();6265A_USE_T0 ();6266}62676268static void ac_t0_mul_prim_mul_primlod ()6269{6270ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6271GR_COMBINE_FACTOR_LOCAL,6272GR_COMBINE_LOCAL_CONSTANT,6273GR_COMBINE_OTHER_TEXTURE);6274CA_PRIM_MUL_PRIMLOD ();6275A_USE_T0 ();6276}62776278static void ac_t1_mul_prim ()6279{6280ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6281GR_COMBINE_FACTOR_LOCAL,6282GR_COMBINE_LOCAL_CONSTANT,6283GR_COMBINE_OTHER_TEXTURE);6284CA_PRIM ();6285A_USE_T1 ();6286}62876288//Added by Gonetz6289static void ac__t1_sub_one_mul_primlod_add_t0__mul_prim ()6290{6291if (cmb.combine_ext)6292{6293T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6294GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6295GR_CMBX_ZERO, 0,6296GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6297T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,6298GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,6299GR_CMBX_DETAIL_FACTOR, 0,6300GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6301cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;6302percent = (float)lod_frac / 255.0f;6303}6304else6305{6306cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;6307cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;6308percent = (255 - lod_frac) / 255.0f;6309cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;6310cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;6311}6312ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6313GR_COMBINE_FACTOR_LOCAL,6314GR_COMBINE_LOCAL_CONSTANT,6315GR_COMBINE_OTHER_TEXTURE);6316CA_PRIM ();6317cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6318cmb.tex |= 3;6319}63206321static void ac__t0_sub_t1_mul_enva_add_t0__mul_prim ()6322{6323ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6324GR_COMBINE_FACTOR_LOCAL,6325GR_COMBINE_LOCAL_CONSTANT,6326GR_COMBINE_OTHER_TEXTURE);6327CA_PRIM ();6328if (cmb.combine_ext)6329{6330T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6331GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6332GR_CMBX_ZERO, 0,6333GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6334T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,6335GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,6336GR_CMBX_TMU_CALPHA, 0,6337GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6338cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;6339cmb.tex |= 3;6340}6341else6342{6343A_T0_MUL_T1 ();6344}6345}63466347static void ac__t0_sub_one_mul_enva_add_t0__mul_prim ()6348{6349ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6350GR_COMBINE_FACTOR_LOCAL,6351GR_COMBINE_LOCAL_CONSTANT,6352GR_COMBINE_OTHER_TEXTURE);6353CA_PRIM ();6354if (cmb.combine_ext)6355{6356T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,6357GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,6358GR_CMBX_TMU_CALPHA, 0,6359GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6360SETSHADE_A(0xFF);6361cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;6362cmb.tex |= 1;6363}6364else6365{6366A_USE_T0 ();6367}6368}63696370static void ac__t0_sub_t1_mul_primlod_add_t0__mul_prim ()6371{6372ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6373GR_COMBINE_FACTOR_LOCAL,6374GR_COMBINE_LOCAL_CONSTANT,6375GR_COMBINE_OTHER_TEXTURE);6376CA_PRIM ();6377if (cmb.combine_ext)6378{6379T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6380GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6381GR_CMBX_ZERO, 0,6382GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6383T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,6384GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,6385GR_CMBX_DETAIL_FACTOR, 0,6386GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6387cmb.tex |= 3;6388percent = (float)lod_frac / 255.0f;6389cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6390}6391else6392{6393A_T0_INTER_T1_USING_FACTOR (lod_frac);6394}6395}63966397static void ac__t1_sub_prim_mul_primlod_add_t0__mul_prim ()6398{6399ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6400GR_COMBINE_FACTOR_LOCAL,6401GR_COMBINE_LOCAL_CONSTANT,6402GR_COMBINE_OTHER_TEXTURE);6403CA_PRIM ();6404if (cmb.combine_ext)6405{6406T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6407GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6408GR_CMBX_ZERO, 0,6409GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6410T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,6411GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,6412GR_CMBX_DETAIL_FACTOR, 0,6413GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6414cmb.tex |= 3;6415cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF);6416percent = (float)lod_frac / 255.0f;6417cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6418}6419else6420{6421A_T0_INTER_T1_USING_FACTOR (lod_frac);6422}6423}64246425static void ac__t1_sub_t0_mul_enva_add_t1__mul_prim ()6426{6427ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6428GR_COMBINE_FACTOR_LOCAL,6429GR_COMBINE_LOCAL_CONSTANT,6430GR_COMBINE_OTHER_TEXTURE);6431CA_PRIM ();6432if (cmb.combine_ext)6433{6434T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6435GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6436GR_CMBX_ZERO, 0,6437GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6438T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,6439GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,6440GR_CMBX_TMU_CALPHA, 0,6441GR_CMBX_B, 0);6442cmb.tex |= 3;6443cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF);6444}6445else6446{6447BYTE factor = (BYTE)(rdp.env_color&0xFF);6448A_T0_INTER_T1_USING_FACTOR (factor);6449}6450}64516452static void ac__t0_sub_one_mul_enva_add_t1__mul_prim ()6453{6454if (cmb.combine_ext)6455{6456T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6457GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6458GR_CMBX_ZERO, 0,6459GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6460T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,6461GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6462GR_CMBX_TMU_CALPHA, 0,6463GR_CMBX_B, 0);6464cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;6465cmb.tex |= 3;6466ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,6467GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,6468GR_CMBX_ITALPHA, 0,6469GR_CMBX_ZERO, 0);6470CA_ENV ();6471SETSHADE_A_PRIM ();6472}6473else6474{6475ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6476GR_COMBINE_FACTOR_LOCAL,6477GR_COMBINE_LOCAL_ITERATED,6478GR_COMBINE_OTHER_TEXTURE);6479SETSHADE_A_PRIM ();6480SETSHADE_A_ENV ();6481A_T0_MUL_T1 ();6482}6483}64846485static void ac__t1_mul_prima_add_t0__mul_env ()6486{6487ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6488GR_COMBINE_FACTOR_LOCAL,6489GR_COMBINE_LOCAL_CONSTANT,6490GR_COMBINE_OTHER_TEXTURE);6491CA_ENV ();6492A_T1_MUL_PRIMA_ADD_T0 ();6493}64946495static void ac__t1_mul_enva_add_t0__mul_prim ()6496{6497ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6498GR_COMBINE_FACTOR_LOCAL,6499GR_COMBINE_LOCAL_CONSTANT,6500GR_COMBINE_OTHER_TEXTURE);6501CA_PRIM ();6502A_T1_MUL_ENVA_ADD_T0 ();6503}65046505static void ac_t0_mul_primlod ()6506{6507ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6508GR_COMBINE_FACTOR_LOCAL,6509GR_COMBINE_LOCAL_CONSTANT,6510GR_COMBINE_OTHER_TEXTURE);6511CA_PRIMLOD ();6512A_USE_T0 ();6513}65146515static void ac_t1_mul_primlod ()6516{6517ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6518GR_COMBINE_FACTOR_LOCAL,6519GR_COMBINE_LOCAL_CONSTANT,6520GR_COMBINE_OTHER_TEXTURE);6521CA_PRIMLOD ();6522A_USE_T1 ();6523}65246525//Added by Gonetz6526static void ac__t0_add_t1__mul_prim ()6527{6528ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6529GR_COMBINE_FACTOR_LOCAL,6530GR_COMBINE_LOCAL_CONSTANT,6531GR_COMBINE_OTHER_TEXTURE);6532CA_PRIM ();6533A_T0_ADD_T1 ();6534}65356536//Added by Gonetz6537static void ac__t0_add_t1__mul_primlod ()6538{6539ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6540GR_COMBINE_FACTOR_LOCAL,6541GR_COMBINE_LOCAL_CONSTANT,6542GR_COMBINE_OTHER_TEXTURE);6543CA_PRIMLOD ();6544A_T0_ADD_T1 ();6545}65466547//Added by Gonetz6548static void ac__t0_mul_t1__mul_primlod ()6549{6550ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6551GR_COMBINE_FACTOR_LOCAL,6552GR_COMBINE_LOCAL_CONSTANT,6553GR_COMBINE_OTHER_TEXTURE);6554CA_PRIMLOD ();6555A_T0_MUL_T1 ();6556}65576558static void ac_t0_mul_env ()6559{6560ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6561GR_COMBINE_FACTOR_LOCAL,6562GR_COMBINE_LOCAL_CONSTANT,6563GR_COMBINE_OTHER_TEXTURE);6564CA_ENV ();6565A_USE_T0 ();6566}65676568static void ac_t0_mul_env_mul_primlod ()6569{6570ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6571GR_COMBINE_FACTOR_LOCAL,6572GR_COMBINE_LOCAL_CONSTANT,6573GR_COMBINE_OTHER_TEXTURE);6574CA_ENV_MUL_PRIMLOD ();6575A_USE_T0 ();6576}65776578static void ac_t1_mul_env () //Added by Gonetz6579{6580ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6581GR_COMBINE_FACTOR_LOCAL,6582GR_COMBINE_LOCAL_CONSTANT,6583GR_COMBINE_OTHER_TEXTURE);6584CA_ENV ();6585A_USE_T1 ();6586}65876588static void ac__t1_sub_one_mul_primlod_add_t0__mul_env ()6589{6590if (cmb.combine_ext)6591{6592T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6593GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6594GR_CMBX_ZERO, 0,6595GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6596T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,6597GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,6598GR_CMBX_DETAIL_FACTOR, 0,6599GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6600cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;6601percent = (float)lod_frac / 255.0f;6602}6603else6604{6605cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;6606cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;6607percent = (255 - lod_frac) / 255.0f;6608cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;6609cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;6610}6611ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6612GR_COMBINE_FACTOR_LOCAL,6613GR_COMBINE_LOCAL_CONSTANT,6614GR_COMBINE_OTHER_TEXTURE);6615CA_ENV ();6616cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6617cmb.tex |= 3;6618}66196620static void ac_t0_mul_shade ()6621{6622ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6623GR_COMBINE_FACTOR_LOCAL,6624GR_COMBINE_LOCAL_ITERATED,6625GR_COMBINE_OTHER_TEXTURE);6626A_USE_T0 ();6627}66286629static void ac_t1_mul_shade ()6630{6631ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6632GR_COMBINE_FACTOR_LOCAL,6633GR_COMBINE_LOCAL_ITERATED,6634GR_COMBINE_OTHER_TEXTURE);6635A_USE_T1 ();6636}66376638//Added by Gonetz6639static void ac__t0_add_t1__mul_shade ()6640{6641ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6642GR_COMBINE_FACTOR_LOCAL,6643GR_COMBINE_LOCAL_ITERATED,6644GR_COMBINE_OTHER_TEXTURE);6645A_T0_ADD_T1 ();6646}66476648static void ac__t1_mul_prima_add_t0__mul_shade ()6649{6650ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6651GR_COMBINE_FACTOR_LOCAL,6652GR_COMBINE_LOCAL_ITERATED,6653GR_COMBINE_OTHER_TEXTURE);6654A_T1_MUL_PRIMA_ADD_T0 ();6655}66566657//Added by Gonetz6658static void ac__t0_sub_t1__mul_shade ()6659{6660ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6661GR_COMBINE_FACTOR_LOCAL,6662GR_COMBINE_LOCAL_ITERATED,6663GR_COMBINE_OTHER_TEXTURE);6664if (cmb.combine_ext)6665{6666T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6667GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6668GR_CMBX_ZERO, 0,6669GR_CMBX_B, 0);6670T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,6671GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_NEGATIVE_X,6672GR_CMBX_ZERO, 1,6673GR_CMBX_ZERO, 0);6674cmb.tex |= 3;6675}6676else6677{6678A_T0_SUB_T1 ();6679}6680}66816682static void ac__t1_mul_t1_add_t1__mul_shade ()6683{6684ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6685GR_COMBINE_FACTOR_LOCAL,6686GR_COMBINE_LOCAL_ITERATED,6687GR_COMBINE_OTHER_TEXTURE);6688if (cmb.combine_ext)6689{6690T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6691GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,6692GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,6693GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6694T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,6695GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6696GR_CMBX_ZERO, 1,6697GR_CMBX_ZERO, 0);6698cmb.tex |= 2;6699}6700else6701{6702A_USE_T1 ();6703}6704}67056706static void ac__t1_mul_enva_add_t0__mul_shade ()6707{6708ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6709GR_COMBINE_FACTOR_LOCAL,6710GR_COMBINE_LOCAL_ITERATED,6711GR_COMBINE_OTHER_TEXTURE);6712A_T1_MUL_ENVA_ADD_T0 ();6713}67146715static void ac__t1_sub_one_mul_primlod_add_t0__mul_shade ()6716{6717if (cmb.combine_ext)6718{6719T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6720GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6721GR_CMBX_ZERO, 0,6722GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6723T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,6724GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,6725GR_CMBX_DETAIL_FACTOR, 0,6726GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6727cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;6728percent = (float)lod_frac / 255.0f;6729}6730else6731{6732cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;6733cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;6734percent = (255 - lod_frac) / 255.0f;6735cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;6736cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;6737}6738ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6739GR_COMBINE_FACTOR_LOCAL,6740GR_COMBINE_LOCAL_ITERATED,6741GR_COMBINE_OTHER_TEXTURE);6742cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6743cmb.tex |= 3;6744}67456746static void ac__t1_sub_shade_mul_primlod_add_t0__mul_shade ()6747{6748ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6749GR_COMBINE_FACTOR_LOCAL,6750GR_COMBINE_LOCAL_CONSTANT,6751GR_COMBINE_OTHER_TEXTURE);6752CA_PRIM ();6753if (cmb.combine_ext)6754{6755T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6756GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6757GR_CMBX_ZERO, 0,6758GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6759T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,6760GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,6761GR_CMBX_DETAIL_FACTOR, 0,6762GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6763cmb.tex |= 3;6764percent = (float)lod_frac / 255.0f;6765cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6766}6767else6768{6769A_T0_INTER_T1_USING_FACTOR (lod_frac);6770}6771}67726773//Added by Gonetz6774static void ac_prim_mul_prim ()6775{6776ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6777GR_COMBINE_FACTOR_LOCAL,6778GR_COMBINE_LOCAL_CONSTANT,6779GR_COMBINE_OTHER_ITERATED);6780CA_PRIM ();6781SETSHADE_A_PRIM ();6782}67836784//Added by Gonetz6785static void ac_prim_mul_primlod ()6786{6787ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6788GR_COMBINE_FACTOR_LOCAL,6789GR_COMBINE_LOCAL_CONSTANT,6790GR_COMBINE_OTHER_ITERATED);6791CA_PRIMLOD ();6792SETSHADE_A_PRIM ();6793}67946795static void ac_prim_mul_env ()6796{6797ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6798GR_COMBINE_FACTOR_LOCAL,6799GR_COMBINE_LOCAL_CONSTANT,6800GR_COMBINE_OTHER_ITERATED);6801CA_ENV ();6802SETSHADE_A_PRIM ();6803}68046805static void ac__prim_sub_one_mul_primlod_add_t0__mul_env ()6806{6807if (cmb.combine_ext)6808{6809T0ACMBEXT(GR_CMBX_ITALPHA, GR_FUNC_MODE_X,6810GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,6811GR_CMBX_DETAIL_FACTOR, 0,6812GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6813SETSHADE_A_PRIM ();6814cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;6815percent = (float)lod_frac / 255.0f;6816cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6817cmb.tex |= 1;6818}6819else6820{6821A_USE_T0 ();6822}6823ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6824GR_COMBINE_FACTOR_LOCAL,6825GR_COMBINE_LOCAL_CONSTANT,6826GR_COMBINE_OTHER_TEXTURE);6827CA_ENV ();6828}68296830static void ac_prim_mul_shade ()6831{6832ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6833GR_COMBINE_FACTOR_LOCAL,6834GR_COMBINE_LOCAL_CONSTANT,6835GR_COMBINE_OTHER_ITERATED);6836CA_PRIM ();6837}68386839static void ac_env_mul_shade ()6840{6841ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6842GR_COMBINE_FACTOR_LOCAL,6843GR_COMBINE_LOCAL_CONSTANT,6844GR_COMBINE_OTHER_ITERATED);6845CA_ENV ();6846}68476848static void ac_primlod_mul_shade ()6849{6850ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6851GR_COMBINE_FACTOR_LOCAL,6852GR_COMBINE_LOCAL_CONSTANT,6853GR_COMBINE_OTHER_ITERATED);6854CA_PRIMLOD ();6855}68566857// ** A-B **6858static void ac_prim_sub_t0 ()6859{6860ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6861GR_COMBINE_FACTOR_ONE,6862GR_COMBINE_LOCAL_NONE,6863GR_COMBINE_OTHER_TEXTURE);6864A_USE_T0 ();68656866MOD_0 (TMOD_FULL_COLOR_SUB_TEX);6867MOD_0_COL (rdp.prim_color);6868}68696870// ** A*B+C **6871static void ac_t1_mul_prima_add_t0 ()6872{6873ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6874GR_COMBINE_FACTOR_ONE,6875GR_COMBINE_LOCAL_NONE,6876GR_COMBINE_OTHER_TEXTURE);6877A_T1_MUL_PRIMA_ADD_T0 ();6878}68796880//Added by Gonetz6881static void ac_t0_mul_prim_add_env ()6882{6883ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6884GR_COMBINE_FACTOR_TEXTURE_ALPHA,6885GR_COMBINE_LOCAL_CONSTANT,6886GR_COMBINE_OTHER_ITERATED);6887SETSHADE_A_PRIM ();6888CA_ENV ();6889A_USE_T0 ();6890}68916892//Added by Gonetz6893static void ac__t0_add_t1__mul_prim_add_env ()6894{6895ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6896GR_COMBINE_FACTOR_TEXTURE_ALPHA,6897GR_COMBINE_LOCAL_CONSTANT,6898GR_COMBINE_OTHER_ITERATED);6899SETSHADE_A_PRIM ();6900CA_ENV ();6901A_T0_ADD_T1 ();6902}69036904//Aded by Gonetz6905static void ac__t0_inter_t1_using_enva__mul_prim_add_env ()6906{6907ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6908GR_COMBINE_FACTOR_TEXTURE_ALPHA,6909GR_COMBINE_LOCAL_CONSTANT,6910GR_COMBINE_OTHER_ITERATED);6911SETSHADE_A_PRIM ();6912CA_ENV ();6913BYTE factor = (BYTE)(rdp.env_color&0xFF);6914A_T0_INTER_T1_USING_FACTOR (factor);6915}69166917//Aded by Gonetz6918static void ac_t0_mul_primlod_add_t0 ()6919{6920ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6921GR_COMBINE_FACTOR_ONE,6922GR_COMBINE_LOCAL_NONE,6923GR_COMBINE_OTHER_TEXTURE);6924if (cmb.combine_ext)6925{6926T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,6927GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,6928GR_CMBX_DETAIL_FACTOR, 0,6929GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);6930cmb.tex |= 1;6931percent = (float)lod_frac / 255.0f;6932cmb.dc0_detailmax = cmb.dc1_detailmax = percent;6933}6934else6935{6936A_USE_T0 ();6937}6938}69396940//Aded by Gonetz6941static void ac_t1_mul_primlod_add_t0 ()6942{6943ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,6944GR_COMBINE_FACTOR_ONE,6945GR_COMBINE_LOCAL_NONE,6946GR_COMBINE_OTHER_TEXTURE);6947A_T1_MUL_PRIMLOD_ADD_T0 ();6948}69496950//Aded by Gonetz6951static void ac_t0_mul_primlod_add_prim ()6952{6953ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6954GR_COMBINE_FACTOR_TEXTURE_ALPHA,6955GR_COMBINE_LOCAL_ITERATED,6956GR_COMBINE_OTHER_CONSTANT);6957CA_PRIMLOD ();6958SETSHADE_A_PRIM ();6959A_USE_T0 ();6960}69616962//Aded by Gonetz6963static void ac__t0_add_t1__mul_primlod_add_prim ()6964{6965ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6966GR_COMBINE_FACTOR_TEXTURE_ALPHA,6967GR_COMBINE_LOCAL_ITERATED,6968GR_COMBINE_OTHER_CONSTANT);6969CA_PRIMLOD ();6970SETSHADE_A_PRIM ();6971A_T0_ADD_T1 ();6972}69736974//Added by Gonetz6975static void ac_t0_mul_env_add_prim ()6976{6977ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6978GR_COMBINE_FACTOR_TEXTURE_ALPHA,6979GR_COMBINE_LOCAL_CONSTANT,6980GR_COMBINE_OTHER_ITERATED);6981SETSHADE_A_ENV ();6982CA_PRIM ();6983A_USE_T0 ();6984}69856986//Added by Gonetz6987static void ac_t1_mul_prim_add_prim ()6988{6989ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,6990GR_COMBINE_FACTOR_TEXTURE_ALPHA,6991GR_COMBINE_LOCAL_CONSTANT,6992GR_COMBINE_OTHER_ITERATED);6993SETSHADE_A_PRIM ();6994CA_PRIM ();6995A_USE_T1 ();6996}69976998//Added by Gonetz6999static void ac_prim_mul_shade_add_shade ()7000{7001ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7002GR_COMBINE_FACTOR_LOCAL,7003GR_COMBINE_LOCAL_ITERATED,7004GR_COMBINE_OTHER_CONSTANT);7005CA_PRIM ();7006}70077008//Added by Gonetz7009static void ac_t0_mul_shade_add_prim ()7010{7011ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7012GR_COMBINE_FACTOR_TEXTURE_ALPHA,7013GR_COMBINE_LOCAL_CONSTANT,7014GR_COMBINE_OTHER_ITERATED);7015CA_PRIM ();7016A_USE_T0 ();7017}70187019static void ac_t0_mul_shade_add_env ()7020{7021ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7022GR_COMBINE_FACTOR_TEXTURE_ALPHA,7023GR_COMBINE_LOCAL_CONSTANT,7024GR_COMBINE_OTHER_ITERATED);7025CA_ENV ();7026A_USE_T0 ();7027}702870297030// ** A*B+C*D **7031static void ac_t0_mul_prim_add_shade_mul_one_minus_prim ()7032{7033ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7034GR_COMBINE_FACTOR_TEXTURE_ALPHA,7035GR_COMBINE_LOCAL_ITERATED,7036GR_COMBINE_OTHER_CONSTANT);7037MULSHADE_A_1MPRIM ();7038CA_PRIM ();7039A_USE_T0 ();7040}70417042// ** A*B*C **7043static void ac__t0_mul_t1__mul_prim ()7044{7045ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7046GR_COMBINE_FACTOR_LOCAL,7047GR_COMBINE_LOCAL_CONSTANT,7048GR_COMBINE_OTHER_TEXTURE);7049CA_PRIM ();7050A_T0_MUL_T1 ();7051}70527053static void ac__t0_mul_t1__mul_env ()7054{7055ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7056GR_COMBINE_FACTOR_LOCAL,7057GR_COMBINE_LOCAL_CONSTANT,7058GR_COMBINE_OTHER_TEXTURE);7059CA_ENV ();7060A_T0_MUL_T1 ();7061}70627063static void ac__t0_mul_t1__mul_env_mul_shade ()7064{7065ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7066GR_COMBINE_FACTOR_LOCAL,7067GR_COMBINE_LOCAL_ITERATED,7068GR_COMBINE_OTHER_TEXTURE);7069MULSHADE_A_ENV ();7070A_T0_MUL_T1 ();7071}70727073static void ac__t0_mul_t1__mul_prim_mul_shade ()7074{7075ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7076GR_COMBINE_FACTOR_LOCAL,7077GR_COMBINE_LOCAL_ITERATED,7078GR_COMBINE_OTHER_TEXTURE);7079MULSHADE_A_PRIM ();7080A_T0_MUL_T1 ();7081}70827083static void ac__t0_mul_t1__mul_shade ()7084{7085ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7086GR_COMBINE_FACTOR_LOCAL,7087GR_COMBINE_LOCAL_ITERATED,7088GR_COMBINE_OTHER_TEXTURE);7089A_T0_MUL_T1 ();7090}70917092//Added by Gonetz7093static void ac_t0_mul_prim_mul_prim ()7094{7095ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7096GR_COMBINE_FACTOR_LOCAL,7097GR_COMBINE_LOCAL_ITERATED,7098GR_COMBINE_OTHER_TEXTURE);7099SETSHADE_A_PRIM ();7100MULSHADE_A_PRIM ();7101A_USE_T0 ();7102}71037104static void ac_t0_mul_prim_mul_env ()7105{7106ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7107GR_COMBINE_FACTOR_LOCAL,7108GR_COMBINE_LOCAL_CONSTANT,7109GR_COMBINE_OTHER_TEXTURE);7110CA_PRIMENV();7111A_USE_T0 ();7112}71137114static void ac_t0_mul_prim_mul_shade ()7115{7116ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7117GR_COMBINE_FACTOR_LOCAL,7118GR_COMBINE_LOCAL_ITERATED,7119GR_COMBINE_OTHER_TEXTURE);7120MULSHADE_A_PRIM ();7121A_USE_T0 ();7122}71237124static void ac_t1_mul_prim_mul_shade ()7125{7126ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7127GR_COMBINE_FACTOR_LOCAL,7128GR_COMBINE_LOCAL_ITERATED,7129GR_COMBINE_OTHER_TEXTURE);7130MULSHADE_A_PRIM ();7131A_USE_T1 ();7132}71337134static void ac_t0_mul_env_mul_shade ()7135{7136if (rdp.cur_image && (rdp.cur_image->format != 0))7137{7138ac_shade ();7139return;7140}71417142ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7143GR_COMBINE_FACTOR_LOCAL,7144GR_COMBINE_LOCAL_ITERATED,7145GR_COMBINE_OTHER_TEXTURE);7146MULSHADE_A_ENV ();7147A_USE_T0 ();7148}71497150static void ac_t1_mul_env_mul_shade ()7151{7152ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7153GR_COMBINE_FACTOR_LOCAL,7154GR_COMBINE_LOCAL_ITERATED,7155GR_COMBINE_OTHER_TEXTURE);7156MULSHADE_A_ENV ();7157A_USE_T1 ();7158}71597160static void ac_t0_mul_primlod_mul_prim () //Aded by Gonetz7161{7162ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7163GR_COMBINE_FACTOR_LOCAL,7164GR_COMBINE_LOCAL_CONSTANT,7165GR_COMBINE_OTHER_TEXTURE);7166cmb.ccolor |= (DWORD)(lod_frac * (rdp.prim_color&0xFF) / 255);7167A_USE_T0 ();7168}71697170// ** (A+B)*C **7171static void ac_prim_add_env_mul_t0 () //Aded by Gonetz7172{7173ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7174GR_COMBINE_FACTOR_LOCAL,7175GR_COMBINE_LOCAL_ITERATED,7176GR_COMBINE_OTHER_TEXTURE);7177SETSHADE_A_PRIM ();7178ADDSHADE_A_ENV ();7179A_USE_T0 ();7180}71817182static void ac_t1_add_prim_mul_env () //Aded by Gonetz7183{7184ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7185GR_COMBINE_FACTOR_TEXTURE_ALPHA,7186GR_COMBINE_LOCAL_ITERATED,7187GR_COMBINE_OTHER_CONSTANT);7188CA_ENV ();7189SETSHADE_A_PRIM ();7190SETSHADE_A_ENV ();7191A_USE_T1 ();7192//(t1+prim)*env = t1*env + prim*env7193}71947195// ** A-B*C **7196static void ac_t0_sub_prim_mul_shade ()7197{7198ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,7199GR_COMBINE_FACTOR_ONE,7200GR_COMBINE_LOCAL_ITERATED,7201GR_COMBINE_OTHER_TEXTURE);7202MULSHADE_A_PRIM ();7203A_USE_T0 ();7204}72057206// ** (A-B)*C **7207static void ac__t1_mul_primlod_add_t0__sub_env_mul_prim () //Aded by Gonetz7208{7209if (cmb.combine_ext)7210{7211ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,7212GR_CMBX_CONSTANT_ALPHA, GR_FUNC_MODE_NEGATIVE_X,7213GR_CMBX_ITALPHA, 0,7214GR_CMBX_ZERO, 0);7215CA_ENV ();7216SETSHADE_A_PRIM ();7217}7218else7219{7220ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7221GR_COMBINE_FACTOR_LOCAL,7222GR_COMBINE_LOCAL_CONSTANT,7223GR_COMBINE_OTHER_TEXTURE);7224CA_PRIM ();7225}7226A_T1_MUL_PRIMLOD_ADD_T0 ();7227}72287229static void ac_one_sub_t0_mul_prim () //Aded by Gonetz7230{7231ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,7232GR_COMBINE_FACTOR_TEXTURE_ALPHA,7233GR_COMBINE_LOCAL_CONSTANT,7234GR_COMBINE_OTHER_NONE);7235CA_PRIM ();7236A_USE_T0 ();7237}72387239static void ac_one_sub_t0_mul_shade () //Aded by Gonetz7240{7241if (!rdp.hires_tex)7242{7243ac_zero();7244return;7245}7246ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,7247GR_COMBINE_FACTOR_TEXTURE_ALPHA,7248GR_COMBINE_LOCAL_ITERATED,7249GR_COMBINE_OTHER_NONE);7250A_USE_T0 ();7251}72527253static void ac_one_sub_prim_mul_t0 () //Aded by Gonetz7254{7255ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7256GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,7257GR_COMBINE_LOCAL_CONSTANT,7258GR_COMBINE_OTHER_TEXTURE);7259CA_PRIM ();7260A_USE_T0 ();7261}72627263static void ac_one_sub_env_mul_t0 () //Aded by Gonetz7264{7265ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7266GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,7267GR_COMBINE_LOCAL_CONSTANT,7268GR_COMBINE_OTHER_TEXTURE);7269CA_ENV ();7270A_USE_T0 ();7271}72727273static void ac_one_sub_shade_mul_t0 () //Aded by Gonetz7274{7275ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7276GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,7277GR_COMBINE_LOCAL_ITERATED,7278GR_COMBINE_OTHER_TEXTURE);7279A_USE_T0 ();7280}72817282static void ac_prim_sub_shade_mul_t0 () //Aded by Gonetz7283{7284ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,7285GR_COMBINE_FACTOR_TEXTURE_ALPHA,7286GR_COMBINE_LOCAL_ITERATED,7287GR_COMBINE_OTHER_CONSTANT);7288CA_PRIM ();7289A_USE_T0 ();7290}72917292static void ac_shade_sub_env_mul_t0 () //Aded by Gonetz7293{7294ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,7295GR_COMBINE_FACTOR_TEXTURE_ALPHA,7296GR_COMBINE_LOCAL_CONSTANT,7297GR_COMBINE_OTHER_ITERATED);7298CA_ENV ();7299A_USE_T0 ();7300}73017302// ** (A-B)*C*D **7303static void ac_one_sub_t0_mul_prim_mul_shade () //Aded by Gonetz7304{7305ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,7306GR_COMBINE_FACTOR_TEXTURE_ALPHA,7307GR_COMBINE_LOCAL_ITERATED,7308GR_COMBINE_OTHER_NONE);7309MULSHADE_A_PRIM ();7310A_USE_T0 ();7311}73127313// ** (A-B)*C+D **7314static void ac__t0_sub_prim_mul_shade_add_shade__mul_env () //Aded by Gonetz7315{7316if (cmb.combine_ext)7317{7318T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,7319GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,7320GR_CMBX_ITALPHA, 0,7321GR_CMBX_ITALPHA, 0);7322cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF) ;7323cmb.tex |= 1;7324ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,7325GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,7326GR_CMBX_CONSTANT_ALPHA, 0,7327GR_CMBX_ZERO, 0);7328CA_ENV();7329}7330else7331{7332ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7333GR_COMBINE_FACTOR_LOCAL,7334GR_COMBINE_LOCAL_ITERATED,7335GR_COMBINE_OTHER_TEXTURE);7336MULSHADE_A_ENV ();7337MOD_0 (TMOD_TEX_SUB_COL);7338MOD_0_COL (rdp.prim_color & 0xFF);7339A_USE_T0 ();7340}7341}73427343static void ac_t0_sub_one_mul_enva_add_t1 () //Aded by Gonetz7344{7345if (cmb.combine_ext)7346{7347T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,7348GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,7349GR_CMBX_ZERO, 0,7350GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);7351T0ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,7352GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,7353GR_CMBX_TMU_CALPHA, 0,7354GR_CMBX_B, 0);7355cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;7356cmb.tex |= 3;7357ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,7358GR_COMBINE_FACTOR_ONE,7359GR_COMBINE_LOCAL_CONSTANT,7360GR_COMBINE_OTHER_TEXTURE);7361CA_ENV();7362}7363else7364{7365ac__t0_mul_t1__mul_env ();7366}7367}73687369static void ac_t1_sub_one_mul_enva_add_t0 () //Aded by Gonetz7370{7371ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7372GR_COMBINE_FACTOR_ONE,7373GR_COMBINE_LOCAL_NONE,7374GR_COMBINE_OTHER_TEXTURE);7375if (cmb.combine_ext)7376{7377T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,7378GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,7379GR_CMBX_ZERO, 0,7380GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);7381T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,7382GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,7383GR_CMBX_TMU_CALPHA, 0,7384GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);7385cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;7386SETSHADE_A (0xFF);7387cmb.tex |= 3;7388}7389else7390{7391A_USE_T0 ();7392}7393}73947395static void ac_t1_sub_one_mul_primlod_add_t0 () //Aded by Gonetz7396{7397ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7398GR_COMBINE_FACTOR_ONE,7399GR_COMBINE_LOCAL_NONE,7400GR_COMBINE_OTHER_TEXTURE);7401if (cmb.combine_ext)7402{7403T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,7404GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,7405GR_CMBX_ZERO, 0,7406GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);7407T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,7408GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,7409GR_CMBX_DETAIL_FACTOR, 0,7410GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);7411cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;7412percent = (float)lod_frac / 255.0f;7413cmb.dc0_detailmax = cmb.dc1_detailmax = percent;7414cmb.tex |= 3;7415}7416else7417{7418// A_T0_MUL_T1 ();7419// A_T1_MUL_PRIMLOD_ADD_T0 ();7420cmb.tmu1_a_func = GR_COMBINE_FUNCTION_BLEND_LOCAL;7421cmb.tmu1_a_fac = GR_COMBINE_FACTOR_DETAIL_FACTOR;7422percent = (255 - lod_frac) / 255.0f;7423cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA;7424cmb.tmu0_a_fac = GR_COMBINE_FACTOR_OTHER_ALPHA;7425cmb.dc0_detailmax = cmb.dc1_detailmax = percent;7426cmb.tex |= 3;7427}7428}74297430static void ac_t1_sub_prim_mul_shade_add_prim () //Aded by Gonetz7431{7432if (cmb.combine_ext)7433{7434T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,7435GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,7436GR_CMBX_ITALPHA, 0,7437GR_CMBX_B, 0);7438T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,7439GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,7440GR_CMBX_ZERO, 1,7441GR_CMBX_ZERO, 0);7442cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.prim_color&0xFF) ;7443cmb.tex |= 2;7444ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,7445GR_CMBX_ZERO, GR_FUNC_MODE_X,7446GR_CMBX_ZERO, 1,7447GR_CMBX_ZERO, 0);7448}7449else7450{7451ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7452GR_COMBINE_FACTOR_TEXTURE_ALPHA,7453GR_COMBINE_LOCAL_CONSTANT,7454GR_COMBINE_OTHER_ITERATED);7455CA_PRIM ();7456MOD_1 (TMOD_TEX_SUB_COL);7457MOD_1_COL (rdp.prim_color & 0xFF);7458A_USE_T1 ();7459}7460}74617462static void ac_t0_sub_env_mul_prim_add_env () //Aded by Gonetz7463{7464ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7465GR_COMBINE_FACTOR_TEXTURE_ALPHA,7466GR_COMBINE_LOCAL_CONSTANT,7467GR_COMBINE_OTHER_ITERATED);7468SETSHADE_A_PRIM ();7469CA_ENV1MPRIM ();7470A_USE_T0 ();7471//(t0-env)*prim+env == t0*prim + env*(1-prim)7472}74737474static void ac__one_sub_t0_mul_t1_add_t0__mul_prim () //Aded by Gonetz7475{7476ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7477GR_COMBINE_FACTOR_LOCAL,7478GR_COMBINE_LOCAL_CONSTANT,7479GR_COMBINE_OTHER_TEXTURE);7480CA_PRIM ();7481rdp.best_tex = 0;7482cmb.tex |= 3;7483cmb.tmu1_a_func = GR_COMBINE_FUNCTION_LOCAL;7484cmb.tmu0_a_func = GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL;7485cmb.tmu0_a_fac = GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA;7486}74877488static void ac_one_sub_t0_mul_prim_add_t0 () //Aded by Gonetz7489{7490ACMB (GR_COMBINE_FUNCTION_BLEND,7491GR_COMBINE_FACTOR_TEXTURE_ALPHA,7492GR_COMBINE_LOCAL_ITERATED,7493GR_COMBINE_OTHER_CONSTANT);7494SETSHADE_A_PRIM ();7495CA (0xFF);7496A_USE_T0 ();7497}74987499static void ac_one_sub_t0_mul_env_add_t0 () //Aded by Gonetz7500{7501ACMB (GR_COMBINE_FUNCTION_BLEND,7502GR_COMBINE_FACTOR_TEXTURE_ALPHA,7503GR_COMBINE_LOCAL_ITERATED,7504GR_COMBINE_OTHER_CONSTANT);7505SETSHADE_A_ENV ();7506CA (0xFF);7507A_USE_T0 ();7508}75097510static void ac_one_sub_t0_mul_primlod_add_prim () //Aded by Gonetz7511{7512ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7513GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA,7514GR_COMBINE_LOCAL_ITERATED,7515GR_COMBINE_OTHER_CONSTANT);7516SETSHADE_A_PRIM ();7517CA_PRIMLOD();7518A_USE_T0 ();7519}75207521static void ac_prim_sub_t0_mul_env_add_t0 () //Aded by Gonetz7522{7523ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7524GR_COMBINE_FACTOR_TEXTURE_ALPHA,7525GR_COMBINE_LOCAL_ITERATED,7526GR_COMBINE_OTHER_CONSTANT);7527CA_INVENV ();7528SETSHADE_A_PRIM ();7529SETSHADE_A_ENV ();7530A_USE_T0 ();7531//(prim-t0)*env+t0 = prim*env + t0*(1-env)7532}75337534static void ac_prim_sub_env_mul_t0_add_env ()7535{7536ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7537GR_COMBINE_FACTOR_TEXTURE_ALPHA,7538GR_COMBINE_LOCAL_ITERATED,7539GR_COMBINE_OTHER_CONSTANT);7540CA_PRIM ();7541SETSHADE_A_ENV ();7542A_USE_T0 ();7543}75447545static void ac_prim_sub_env_mul_t1_add_env ()7546{7547ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7548GR_COMBINE_FACTOR_TEXTURE_ALPHA,7549GR_COMBINE_LOCAL_ITERATED,7550GR_COMBINE_OTHER_CONSTANT);7551CA_PRIM ();7552SETSHADE_A_ENV ();7553A_USE_T1 ();7554}75557556//Added by Gonetz7557static void ac_prim_sub_env_mul_shade_add_env ()7558{7559ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7560GR_COMBINE_FACTOR_ONE,7561GR_COMBINE_LOCAL_CONSTANT,7562GR_COMBINE_OTHER_ITERATED);7563CA_ENV ();7564MULSHADE_A_PRIMSUBENV ();7565}75667567//Added by Gonetz7568static void ac_prim_sub_env_mul_shade_add_env_mul_t1 ()7569{7570ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7571GR_COMBINE_FACTOR_TEXTURE_ALPHA,7572GR_COMBINE_LOCAL_CONSTANT,7573GR_COMBINE_OTHER_ITERATED);7574CA_ENV ();7575MULSHADE_A_PRIMSUBENV ();7576A_USE_T1 ();7577}75787579//Added by Gonetz7580static void ac_prim_sub_shade_mul_t0_add_shade ()7581{7582ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7583GR_COMBINE_FACTOR_TEXTURE_ALPHA,7584GR_COMBINE_LOCAL_ITERATED,7585GR_COMBINE_OTHER_CONSTANT);7586CA_PRIM ();7587A_USE_T0 ();7588}75897590//Added by Gonetz7591static void ac_one_sub_shade_mul_t1_add_shade ()7592{7593ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7594GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,7595GR_COMBINE_LOCAL_ITERATED,7596GR_COMBINE_OTHER_TEXTURE);7597A_USE_T1 ();7598}75997600//Added by Gonetz7601static void ac_one_sub_env_mul_shade_add_env ()7602{7603ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7604GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA,7605GR_COMBINE_LOCAL_CONSTANT,7606GR_COMBINE_OTHER_ITERATED);7607CA_ENV ();7608}76097610//Added by Gonetz7611static void ac_env_sub_prim_mul_t0_add_prim ()7612{7613ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7614GR_COMBINE_FACTOR_TEXTURE_ALPHA,7615GR_COMBINE_LOCAL_ITERATED,7616GR_COMBINE_OTHER_CONSTANT);7617CA_ENV ();7618SETSHADE_A_PRIM ();7619A_USE_T0 ();7620}76217622static void ac_env_sub_prim_mul_shade_add_prim () //Added by Gonetz7623{7624ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7625GR_COMBINE_FACTOR_ONE,7626GR_COMBINE_LOCAL_CONSTANT,7627GR_COMBINE_OTHER_ITERATED);7628CA_PRIM ();7629MULSHADE_A_ENVSUBPRIM ();7630}76317632static void ac_env_sub_primshade_mul_t1_add_primshade ()7633{7634ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7635GR_COMBINE_FACTOR_TEXTURE_ALPHA,7636GR_COMBINE_LOCAL_ITERATED,7637GR_COMBINE_OTHER_CONSTANT);7638CA_ENV ();7639MULSHADE_A_PRIM ();7640A_USE_T1 ();7641}76427643static void ac_one_sub_prim_mul_t0_add_prim ()7644{7645ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,7646GR_COMBINE_FACTOR_TEXTURE_ALPHA,7647GR_COMBINE_LOCAL_ITERATED,7648GR_COMBINE_OTHER_CONSTANT);7649CA (0xFF);7650SETSHADE_A_PRIM ();7651A_USE_T0 ();7652}76537654static void ac_one_sub_prim_mul_t0_add__prim_mul_env ()7655{7656ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,7657GR_COMBINE_FACTOR_TEXTURE_ALPHA,7658GR_COMBINE_LOCAL_ITERATED,7659GR_COMBINE_OTHER_CONSTANT);7660CA_INVPRIM ();7661SETSHADE_A_PRIM ();7662SETSHADE_A_ENV ();7663A_USE_T0 ();7664}76657666// ** A inter B using C **7667static void ac_t0_inter_t1_using_prima ()7668{7669ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7670GR_COMBINE_FACTOR_ONE,7671GR_COMBINE_LOCAL_NONE,7672GR_COMBINE_OTHER_TEXTURE);7673BYTE factor = (BYTE)(rdp.prim_color&0xFF);7674A_T0_INTER_T1_USING_FACTOR (factor);7675}76767677static void ac_t1_inter_t0_using_prima ()7678{7679ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7680GR_COMBINE_FACTOR_ONE,7681GR_COMBINE_LOCAL_NONE,7682GR_COMBINE_OTHER_TEXTURE);7683BYTE factor = (BYTE)(rdp.prim_color&0xFF);7684A_T1_INTER_T0_USING_FACTOR (factor);7685}76867687static void ac_t0_inter_t1_using_primlod ()7688{7689ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7690GR_COMBINE_FACTOR_ONE,7691GR_COMBINE_LOCAL_NONE,7692GR_COMBINE_OTHER_TEXTURE);7693A_T0_INTER_T1_USING_FACTOR (lod_frac);7694}76957696static void ac_t0_inter_t1_using_enva ()7697{7698ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7699GR_COMBINE_FACTOR_ONE,7700GR_COMBINE_LOCAL_NONE,7701GR_COMBINE_OTHER_TEXTURE);7702BYTE factor = (BYTE)(rdp.env_color&0xFF);7703A_T0_INTER_T1_USING_FACTOR (factor);7704}77057706static void ac_t1_inter_t0_using_enva ()7707{7708ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7709GR_COMBINE_FACTOR_ONE,7710GR_COMBINE_LOCAL_NONE,7711GR_COMBINE_OTHER_TEXTURE);7712BYTE factor = (BYTE)(rdp.env_color&0xFF);7713A_T1_INTER_T0_USING_FACTOR (factor);7714}77157716//Added by Gonetz7717static void ac_t0_inter_t1_using_t0a ()7718{7719ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7720GR_COMBINE_FACTOR_ONE,7721GR_COMBINE_LOCAL_NONE,7722GR_COMBINE_OTHER_TEXTURE);7723A_T0_INTER_T1_USING_T0A ();7724}77257726//Added by Gonetz7727static void ac_t0_inter_t1_using_t1a ()7728{7729ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7730GR_COMBINE_FACTOR_ONE,7731GR_COMBINE_LOCAL_NONE,7732GR_COMBINE_OTHER_TEXTURE);7733A_T0_INTER_T1_USING_T1A ();7734}77357736//Added by Gonetz7737static void ac_t0_inter_t1_using_shadea ()7738{7739if (cmb.combine_ext)7740{7741ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,7742GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,7743GR_CMBX_ZERO, 1,7744GR_CMBX_ZERO, 0);7745}7746else7747{7748ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7749GR_COMBINE_FACTOR_ONE,7750GR_COMBINE_LOCAL_NONE,7751GR_COMBINE_OTHER_TEXTURE);7752}7753A_T0_INTER_T1_USING_SHADEA ();7754}77557756// ** (A inter B using C) * D **77577758static void ac__t0_inter_t1_using_primlod__mul_prim ()7759{7760ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7761GR_COMBINE_FACTOR_LOCAL,7762GR_COMBINE_LOCAL_CONSTANT,7763GR_COMBINE_OTHER_TEXTURE);7764CA_PRIM ();7765A_T0_INTER_T1_USING_FACTOR (lod_frac);7766}77677768static void ac__t1_mul_primlod_add_t0__mul_prim ()7769{7770ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7771GR_COMBINE_FACTOR_LOCAL,7772GR_COMBINE_LOCAL_CONSTANT,7773GR_COMBINE_OTHER_TEXTURE);7774CA_PRIM ();7775A_T1_MUL_PRIMLOD_ADD_T0 ();7776}77777778static void ac__t0_inter_t1_using_primlod__mul_env ()7779{7780ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7781GR_COMBINE_FACTOR_LOCAL,7782GR_COMBINE_LOCAL_CONSTANT,7783GR_COMBINE_OTHER_TEXTURE);7784CA_ENV ();7785A_T0_INTER_T1_USING_FACTOR (lod_frac);7786}77877788static void ac__t1_mul_primlod_add_t0__mul_env ()7789{7790ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7791GR_COMBINE_FACTOR_LOCAL,7792GR_COMBINE_LOCAL_CONSTANT,7793GR_COMBINE_OTHER_TEXTURE);7794CA_ENV ();7795A_T1_MUL_PRIMLOD_ADD_T0 ();7796}77977798static void ac__t0_inter_t1_using_primlod__mul_shade ()7799{7800ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7801GR_COMBINE_FACTOR_LOCAL,7802GR_COMBINE_LOCAL_ITERATED,7803GR_COMBINE_OTHER_TEXTURE);7804A_T0_INTER_T1_USING_FACTOR (lod_frac);7805}78067807static void ac__t1_mul_primlod_add_t0__mul_shade ()7808{7809ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7810GR_COMBINE_FACTOR_LOCAL,7811GR_COMBINE_LOCAL_ITERATED,7812GR_COMBINE_OTHER_TEXTURE);7813A_T1_MUL_PRIMLOD_ADD_T0 ();7814}78157816//Added by Gonetz7817static void ac__t0_inter_t1_using_prima__mul_env ()7818{7819ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7820GR_COMBINE_FACTOR_LOCAL,7821GR_COMBINE_LOCAL_CONSTANT,7822GR_COMBINE_OTHER_TEXTURE);7823CA_ENV ();7824BYTE factor = (BYTE)(rdp.prim_color&0xFF);7825A_T0_INTER_T1_USING_FACTOR (factor);7826}78277828//Added by Gonetz7829static void ac__t1_inter_t0_using_t0a__mul_prim ()7830{7831ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7832GR_COMBINE_FACTOR_LOCAL,7833GR_COMBINE_LOCAL_CONSTANT,7834GR_COMBINE_OTHER_TEXTURE);7835CA_PRIM ();7836A_T1_INTER_T0_USING_T0A ();7837}78387839static void ac__t1_inter_t0_using_prima__mul_env ()7840{7841ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7842GR_COMBINE_FACTOR_LOCAL,7843GR_COMBINE_LOCAL_CONSTANT,7844GR_COMBINE_OTHER_TEXTURE);7845CA_ENV ();7846BYTE factor = (BYTE)(rdp.prim_color&0xFF);7847A_T1_INTER_T0_USING_FACTOR (factor);7848}78497850//Added by Gonetz7851static void ac__t0_inter_t1_using_prima__mul_shade ()7852{7853ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7854GR_COMBINE_FACTOR_LOCAL,7855GR_COMBINE_LOCAL_ITERATED,7856GR_COMBINE_OTHER_TEXTURE);7857BYTE factor = (BYTE)(rdp.prim_color&0xFF);7858A_T0_INTER_T1_USING_FACTOR (factor);7859}78607861static void ac__t1_inter_t0_using_prima__mul_shade ()7862{7863ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7864GR_COMBINE_FACTOR_LOCAL,7865GR_COMBINE_LOCAL_ITERATED,7866GR_COMBINE_OTHER_TEXTURE);7867BYTE factor = (BYTE)(rdp.prim_color&0xFF);7868A_T1_INTER_T0_USING_FACTOR (factor);7869}78707871static void ac__t0_inter_t1_using_enva__mul_prim ()7872{7873ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7874GR_COMBINE_FACTOR_LOCAL,7875GR_COMBINE_LOCAL_CONSTANT,7876GR_COMBINE_OTHER_TEXTURE);7877CA_PRIM ();7878BYTE factor = (BYTE)(rdp.env_color&0xFF);7879A_T0_INTER_T1_USING_FACTOR (factor);7880}78817882static void ac__env_sub_one_mul_t1_add_t0__mul_prim ()7883{7884ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7885GR_COMBINE_FACTOR_LOCAL,7886GR_COMBINE_LOCAL_CONSTANT,7887GR_COMBINE_OTHER_TEXTURE);7888CA_PRIM ();7889if (cmb.combine_ext)7890{7891T1ACMBEXT(GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_X,7892GR_CMBX_ITALPHA, GR_FUNC_MODE_NEGATIVE_X,7893GR_CMBX_LOCAL_TEXTURE_ALPHA, 0,7894GR_CMBX_ZERO, 0);7895T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,7896GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_X,7897GR_CMBX_ZERO, 1,7898GR_CMBX_ZERO, 0);7899SETSHADE_A(0xFF);7900cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (rdp.env_color&0xFF) ;7901cmb.tex |= 3;7902}7903else7904{7905BYTE factor = (BYTE)(rdp.env_color&0xFF);7906A_T0_INTER_T1_USING_FACTOR (factor);7907}7908}79097910static void ac__t0_inter_t1_using_enva__mul_primlod ()7911{7912ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7913GR_COMBINE_FACTOR_LOCAL,7914GR_COMBINE_LOCAL_CONSTANT,7915GR_COMBINE_OTHER_TEXTURE);7916CA_PRIMLOD ();7917BYTE factor = (BYTE)(rdp.env_color&0xFF);7918A_T0_INTER_T1_USING_FACTOR (factor);7919}79207921static void ac__t0_inter_t1_using_enva__mul_prim_mul_shade ()7922{7923ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL,7924GR_COMBINE_FACTOR_LOCAL,7925GR_COMBINE_LOCAL_ITERATED,7926GR_COMBINE_OTHER_TEXTURE);7927MULSHADE_PRIM ();7928BYTE factor = (BYTE)(rdp.env_color&0xFF);7929A_T0_INTER_T1_USING_FACTOR (factor);7930}79317932//Added by Gonetz7933static void ac__t0_inter_t1_using_t0a__mul_prim ()7934{7935ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7936GR_COMBINE_FACTOR_LOCAL,7937GR_COMBINE_LOCAL_CONSTANT,7938GR_COMBINE_OTHER_TEXTURE);7939CA_PRIM ();7940A_T0_INTER_T1_USING_T0A ();7941}79427943//Added by Gonetz7944static void ac__t0_inter_t1_using_t1a__mul_prim ()7945{7946ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7947GR_COMBINE_FACTOR_LOCAL,7948GR_COMBINE_LOCAL_CONSTANT,7949GR_COMBINE_OTHER_TEXTURE);7950CA_PRIM ();7951A_T0_INTER_T1_USING_T1A ();7952}79537954//Added by Gonetz7955static void ac__t0_inter_t1_using_shadea__mul_prim ()7956{7957if (cmb.combine_ext)7958{7959ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,7960GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,7961GR_CMBX_CONSTANT_ALPHA, 0,7962GR_CMBX_ZERO, 0);7963A_T0_INTER_T1_USING_SHADEA ();7964}7965else7966{7967ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7968GR_COMBINE_FACTOR_LOCAL,7969GR_COMBINE_LOCAL_CONSTANT,7970GR_COMBINE_OTHER_TEXTURE);7971A_T0_INTER_T1_USING_FACTOR (0x7F);7972}7973CA_PRIM ();7974}79757976//Added by Gonetz7977static void ac__t0_inter_t1_using_shadea__mul_env ()7978{7979if (cmb.combine_ext)7980{7981ACMBEXT(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,7982GR_CMBX_ITALPHA, GR_FUNC_MODE_ZERO,7983GR_CMBX_CONSTANT_ALPHA, 0,7984GR_CMBX_ZERO, 0);7985A_T0_INTER_T1_USING_SHADEA ();7986}7987else7988{7989ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,7990GR_COMBINE_FACTOR_LOCAL,7991GR_COMBINE_LOCAL_CONSTANT,7992GR_COMBINE_OTHER_TEXTURE);7993A_T0_INTER_T1_USING_FACTOR (0x7F);7994}7995CA_ENV ();7996}79977998//Added by Gonetz7999static void ac__t0_inter_t1_using_enva__mul_shade ()8000{8001ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8002GR_COMBINE_FACTOR_LOCAL,8003GR_COMBINE_LOCAL_ITERATED,8004GR_COMBINE_OTHER_TEXTURE);8005BYTE factor = (BYTE)(rdp.env_color&0xFF);8006A_T0_INTER_T1_USING_FACTOR (factor);8007}80088009//Added by Gonetz8010static void ac__t0_inter_t1_using_primlod__mul_shade_add_prim ()8011{8012ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,8013GR_COMBINE_FACTOR_TEXTURE_ALPHA,8014GR_COMBINE_LOCAL_CONSTANT,8015GR_COMBINE_OTHER_ITERATED);8016CA_PRIM ();8017A_T0_INTER_T1_USING_FACTOR (lod_frac);8018}80198020//Added by Gonetz8021static void ac__t0_inter_t1_using_primlod__mul_env_add__t0_inter_t1_using_primlod ()8022{8023if (cmb.combine_ext)8024{8025ACMBEXT(GR_CMBX_ZERO, GR_FUNC_MODE_ZERO,8026GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X,8027GR_CMBX_CONSTANT_ALPHA, 0,8028GR_CMBX_B, 0);8029CA_ENV ();8030}8031else8032{8033ACMB (GR_COMBINE_FUNCTION_BLEND,8034GR_COMBINE_FACTOR_TEXTURE_ALPHA,8035GR_COMBINE_LOCAL_CONSTANT,8036GR_COMBINE_OTHER_ITERATED);8037SETSHADE_A_ENV ();8038CA (0xFF);8039}8040A_T0_INTER_T1_USING_FACTOR (lod_frac);8041}80428043static void ac__t1_sub_one_mul_enva_add_t0__mul_prim ()8044{8045ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8046GR_COMBINE_FACTOR_LOCAL,8047GR_COMBINE_LOCAL_CONSTANT,8048GR_COMBINE_OTHER_TEXTURE);8049CA_PRIM ();8050if (cmb.combine_ext)8051{8052T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,8053GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,8054GR_CMBX_ZERO, 0,8055GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);8056T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,8057GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,8058GR_CMBX_DETAIL_FACTOR, 0,8059GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);8060cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | (0xFF) ;8061cmb.tex |= 3;8062cmb.dc0_detailmax = cmb.dc1_detailmax = (float)(rdp.env_color&0xFF) / 255.0f;8063}8064else8065{8066// (t1-1)*env+t0, (cmb-0)*prim+08067A_T0_MUL_T1 ();80688069MOD_1 (TMOD_TEX_SCALE_FAC_ADD_FAC);8070MOD_1_FAC (rdp.env_color & 0xFF);8071}8072}80738074static void ac__t1_sub_one_mul_enva_add_t0__mul_shade ()8075{8076ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER,8077GR_COMBINE_FACTOR_LOCAL,8078GR_COMBINE_LOCAL_ITERATED,8079GR_COMBINE_OTHER_TEXTURE);8080CA_PRIM ();8081if (cmb.combine_ext)8082{8083T1ACMBEXT(GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,8084GR_CMBX_LOCAL_TEXTURE_ALPHA, GR_FUNC_MODE_ZERO,8085GR_CMBX_ZERO, 0,8086GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);8087T0ACMBEXT(GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X,8088GR_CMBX_TMU_CALPHA, GR_FUNC_MODE_NEGATIVE_X,8089GR_CMBX_DETAIL_FACTOR, 0,8090GR_CMBX_LOCAL_TEXTURE_ALPHA, 0);8091cmb.tex_ccolor = (cmb.tex_ccolor&0xFFFFFF00) | 0xFF ;8092percent = (rdp.env_color&0xFF) / 255.0f;8093cmb.dc0_detailmax = cmb.dc1_detailmax = percent;8094cmb.tex |= 3;8095}8096else8097{8098BYTE factor = (BYTE)(rdp.env_color&0xFF);8099A_T0_INTER_T1_USING_FACTOR (factor);8100}8101}81028103static void ac_zero_sub_prim_mul_t0_add_prim ()8104{8105ACMB (GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL,8106GR_COMBINE_FACTOR_TEXTURE_ALPHA,8107GR_COMBINE_LOCAL_CONSTANT,8108GR_COMBINE_OTHER_ITERATED);8109SETSHADE_A (0);8110CA_PRIM ();8111A_USE_T0 ();8112}81138114static void ac_one_sub_t0_mul_primshade ()8115{8116ACMB (GR_COMBINE_FUNCTION_BLEND_LOCAL,8117GR_COMBINE_FACTOR_TEXTURE_ALPHA,8118GR_COMBINE_LOCAL_ITERATED,8119GR_COMBINE_OTHER_NONE);8120MULSHADE_A_PRIM ();8121A_USE_T0 ();8122}81238124//****************************************************************8125// Combine List8126//8127// 3/13/02: I have converted the combine descriptions, now using8128// the correct values for each slot, instead of a one-for-all-8129// slot version. All of the descriptions marked with 'z' have8130// not yet been converted or checked. I have not totally redone8131// the modes, because they should be for the most part correct8132// as they are, even with the wrong descriptions. [Dave2001]8133//****************************************************************81348135//#define cmb(x) (DWORD)(x)8136#define cmb(x) (x)8137typedef void (*cmb_func)();81388139struct cmb_list_entry {8140DWORD key; cmb_func func;8141};81428143static cmb_list_entry color_cmb_list[] = {8144// { #CCSTART }8145// intro, Aidyn Chronicles. Added by Gonetz8146// (0-cmb)*env+cmb, (t1-t0)*0+t08147{ 0x05083812, cmb(cc_t0) },8148//terminal, Spacestation Silicon Valley. Added by Gonetz8149// (0-0)*0+cmb, (0-0)*0+prim8150{ 0x1fff7fff, cmb(cc_prim) },8151//chip in Spacestation Silicon Valley intro. Added by Gonetz8152// (0-0)*0+cmb, (prim-0)*shade+08153{ 0x1fffe4f3, cmb(cc_prim_mul_shade) },8154// car, beetle adventure racing. Added by Gonetz8155// (t1-t0)*t0+t0, (cmb-shade)*prima+shade **can work incorrect**8156{ 0x21128a40, cmb(cc__t0_inter_t1_using_t0__sub_shade_mul_prima_add_shade) },8157// Treasure opening, zelda8158// (t1-prim)*t0+t0, (prim-env)*cmb+env8159{ 0x2132a053, cmb(cc_prim_sub_env_mul__t1_sub_prim_mul_t0_add_t0__add_env) },8160// Water, doubut no mori8161// (t1-0)*t0+t0, (prim-0)*shade+cmb8162{ 0x21f204f3, cmb(cc__t1_mul_t0_add_t0__add_prim_mul_shade) },8163// enemy transparent, paper mario. Addd by Gonetz8164// (t1-t0)*t1+t0, (env-prim)*cmb+prim8165{ 0x22126035, cmb(cc_env_sub_prim_mul__t0_inter_t1_using_t1__add_prim) },8166// snowhead temple, zelda 2. Addd by Gonetz8167// (t1-t0)*t1+t0, (cmb-0)*shade+prim8168{ 0x221264f0, cmb(cc__t0_inter_t1_using_t1__mul_shade_add_prim) },8169// snowhead temple entrance, zelda 2. Addd by Gonetz8170// (t1-t0)*t1+t0, (cmb-0)*prim+shade8171{ 0x221283f0, cmb(cc__t0_inter_t1_using_t1__mul_prim_add_shade) },8172// teleportation, Spacestation Silicon Valley. Added by Gonetz8173// (t1-t0)*t1+t0, (prim-env)*cmb+env8174{ 0x2212a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_t1__add_env) },8175// Some gannon spell, zelda8176// (t1-0)*t1+t0, (prim-0)*cmb+08177{ 0x22f2e0f3, cmb(cc__t1_mul_t1_add_t0__mul_prim) },8178// battle tanks 2 [Ogy]8179// (1-0)*t1+t0, (env-prim)*cmb+prim8180{ 0x22f66035, cmb(cc_env_sub_prim_mul__t0_add_t1__add_prim) },8181// GASP Fighters8182// (1-0)*t1+t0, (shade-0)*cmb+08183{ 0x22f6e0f4, cmb(cc__t0_add_t1__mul_shade) },8184// parts of a car, F1 World Grand Prix. Added by Gonetz8185// (1-0)*t1+t0, (cmb-0)*shade+08186{ 0x22f6e4f0, cmb(cc__t0_add_t1__mul_shade) },8187// ???, zelda8188// (noise-0)*t1+t0, (prim-env)*cmb+env8189{ 0x22f7a053, cmb(cc_prim_sub_env_mul__t0_add_t1__add_env) },8190// flashing arrow over buoy, wave race. Added by Gonetz8191// (t1-t0)*prim+t0, (env-cmb)*enva+cmb ** INC **8192{ 0x23120c05, cmb(cc__t0_inter_t1_using_prim__inter_env_using_enva) },8193// ground, zelda2. Added by Gonetz8194// (t1-t0)*prim+t0, (cmb-0)*shade+08195{ 0x2312e4f0, cmb(cc__t0_inter_t1_using_prim__mul_shade) },8196// wwf rules8197// (env-t0)*prim+t08198{ 0x23152315, cmb(cc_t0_inter_env_using_prim) },8199// Paper Mario8200// (1-t0)*prim+t0, (1-t0)*t0+cmb ** INC **8201{ 0x23160116, cmb(cc_t0_add_prim_mul_one_sub_t0_add_t0) },8202// intro, castlevania. Added by Gonetz8203// (1-t0)*prim+t08204{ 0x23162316, cmb(cc_one_sub_t0_mul_prim_add_t0) },8205// Explosions, aerofighter's assault8206// (1-t0)*prim+t0, (shade-0)*cmb+08207{ 0x2316e0f4, cmb(cc_t0_mul_shade) },8208//beetle adventure racing. Added by Gonetz8209// (1-t0)*prim+t0, (cmb-0)*shade+0 **INC**8210{ 0x2316e4f0, cmb(cc_one_sub_t0_mul_prim_mul_shade) },8211// Unknown player background, smash bros8212// (noise-t0)*prim+t0 ** INC **8213// 0x23172317, cmb(cc_t0),8214{ 0x23172317, cmb(cc_t0_inter_noise_using_prim) },8215// paper mario. Added by Gonetz8216// (noise-prim)*prim+t0 ** INC **8217{ 0x23372337, cmb(cc_t0_add_prim) },8218// strange mirror in stone temple, zelda 2. Added by Gonetz8219// (prim-env)*prim+t0, (cmb-0)*prim+0 ** INC **8220{ 0x2353e3f0, cmb(cc__prim_sub_env_mul_prim_add_t0__mul_prim) },8221// Gilded sword, zelda 2. Added by Gonetz8222// (shade-env)*prim+t0, (cmb-0)*shade+env ** INC **8223{ 0x2354a4f0, cmb(cc__t0_add_prim_mul_shade__mul_shade_add_env) },8224// Razor sword, zelda 2. Added by Gonetz8225// (shade-env)*prim+t0, (cmb-0)*shade+0 ** INC **8226{ 0x2354e4f0, cmb(cc__t0_add_prim_mul_shade__mul_shade) },8227// menu, Mischief Makers. Added by Gonetz8228// (0-env)*prim+t0, (cmb-0)*shade+08229{ 0x235f235f, cmb(cc_t0_sub__prim_mul_env) },8230// Deadly Arts logo. Added by Gonetz8231// (t0-0)*prim+t08232{ 0x23f123f1, cmb(cc_t0_mul_prim) },8233// pokemon attack, Pokemon Stadium 2. Added by Gonetz8234// (shade-0)*prim+t0, (cmb-0)*shade+0 ** INC **8235{ 0x23f4e4f0, cmb(cc_t0_mul_shade) },8236// Mischief Makers logo. Added by Gonetz8237// (env-0)*prim+t08238{ 0x23f523f5, cmb(cc_prim_mul_env_add_t0) },8239// Taken out bomb, zelda8240// (1-0)*prim+t08241{ 0x23f623f6, cmb(cc_t0_add_prim) },8242// Jabu-Jabu's Belly, zelda8243// (noise-0)*prim+t08244{ 0x23f723f7, cmb(cc_t0_add_prim) },8245// carmagedon8246// (0-0)*prim+t08247{ 0x23ff23ff, cmb(cc_t0) },8248// water, diddy kong racing. Added by Gonetz8249// (t1-t0)*shade+t0, (env-cmb)*env_a+cmb **INC**8250{ 0x24120c05, cmb(cc__t0_inter_t1_using_shade__inter_env_using_enva) },8251// ground, f-zero x8252// (prim-t0)*shade+t0 ** INC **8253{ 0x24132413, cmb(cc__one_sub_prim_mul_shade__mul_t0_add__prim_mul_shade) },8254// intro, F1 Racing Championship. Added by Gonetz8255// (env-t0)*shade+t0 ** INC *8256{ 0x24152415, cmb(cc_one_sub_t0_mul_shade_add_t0) },8257// Sky, pilotwings8258// (1-t0)*shade+t08259{ 0x24162416, cmb(cc_one_sub_t0_mul_shade_add_t0) },8260// zelda 2 [Ogy]. Added by Gonetz8261// (prim-env)*shade+t0, (prim-prim)*shade+cmb ** INC ** ?8262{ 0x24530433, cmb(cc_prim_sub_env_mul_shade_add_t0) },8263// waves, Dr. Mario8264// (0-center)*shade+t08265{ 0x246f246f, cmb(cc_t0_sub_shade) },8266// lums, Rayman2. Added by Gonetz8267// (t0-0)*shade+t0 ** INC **8268{ 0x24f124f1, cmb(cc_t0) }, //this one works better8269// 0x24f124f1, cmb(cc_t0_mul_shade),8270// Goemon, mystical ninja. Added by Gonetz8271// (prim-0)*shade+t08272{ 0x24f324f3, cmb(cc_t0_add_prim_mul_shade) },8273// Sky, waverace8274//z (t1-t0)*env+t0 ** INC **8275{ 0x25122512, cmb(cc_t0_inter_t1_using_env) },8276// Rare logo, Jet Force. Added by Gonetz8277// (t1-t0)*env+t0, (cmb-0)*prim+0 ** INC **8278{ 0x2512e3f0, cmb(cc__t0_inter_t1_using_enva__mul_prim) },8279// ridge recer, unimp log. Added by Gonetz8280// (t1-t0)*env+t0, (cmb-0)*shade+0 ** INC **8281{ 0x2512e4f0, cmb(cc__t0_inter_t1_using_env__mul_shade) },8282// menu, Mischief Makers. Added by Gonetz8283//(prim-t0)*env+t0 ** INC **8284{ 0x25132513, cmb(cc_one_sub_env_mul_t0_add_prim_mul_env) },8285// Battle border, quest648286// (1-t0)*env+t08287{ 0x25162516, cmb(cc_one_sub_env_mul_t0_add_env) },8288// Paper Mario8289// (noise-t0)*env+t08290{ 0x25172517, cmb(cc_t0_inter_noise_using_env) },8291// the lamp in the bomb shop in town, zelda 2 [Ogy]. Added by Gonetz8292// (t0-t1)*env+t0, (1-env)*prim+cmb ** INC **8293{ 0x25210356, cmb(cc_one_sub_env_mul_prim_add__t0_inter_t1_using_env) },8294// Darmani's necklace, zelda 2 [Ogy]. Added by Gonetz8295// (prim-shade)*env+t0, (cmb-0)*shade+0 ** INC **8296{ 0x2543e4f0, cmb(cc_t0_mul_shade_add_prim_mul_env) },8297// 0x2543e4f0, cmb(cc_t0_mul_shade),8298// mystical ninja. Added by Gonetz8299// (1-0)*env+t08300{ 0x25f625f6, cmb(cc_t0_add_env) },8301// smoke, Starshot. Added by Gonetz8302// (1-0)*env+t0, (1-0)*cmb+08303{ 0x25f6e0f6, cmb(cc_t0_add_env) },8304// mega shock, Paper Mario. Added by Gonetz8305// (t1-0)*scale+t0, (env-center)*cmb+prim8306{ 0x26f26065, cmb(cc__t0_add_t1__mul_env_add_prim) },8307// character select, Duck Dodgers. Added by Gonetz8308// (prim-t0)*t0_alpha+t0, (cmb-0)*shade+0 **INC**8309{ 0x2813e4f0, cmb(cc__t0_inter_prim_using_t0a__mul_shade) },8310// intro, Duck Dodgers. Added by Gonetz8311// (shade-t0)*t0_alpha+t0 **INC**8312{ 0x28142814, cmb(cc_t0) },8313// F1 World Grand Prix. Added by Gonetz8314// (prim-0)*t0_a+t0, (cmb-0)*shade+0 ** INC **8315{ 0x28f3e4f0, cmb(cc__t0a_mul_prim_add_t0__mul_shade) },8316// battle tanks 2 [Ogy]8317// (env-0)*t0_a+t0, (cmb-0)*shade+08318{ 0x28f5e4f0, cmb(cc__t0a_mul_env_add_t0__mul_shade) },8319// blastcorps, unimp log. Added by Gonetz8320// (t1-t0)*t1_alpha+t08321{ 0x29122912, cmb(cc_t0_inter_t1_using_t1a) },8322// paper mario. Added by Gonetz8323// (t1-t0)*t1_alpha+t0, (cmb-env)*env_a+env8324{ 0x2912ac50, cmb(cc__t0_inter_t1_using_t1a__sub_env_mul_enva_add_env) },8325// Rally 2000. Added by Gonetz8326// (t1-t0)*t1_alpha+t0, (cmb-0)*shade+08327{ 0x2912e4f0, cmb(cc__t0_inter_t1_using_t1a__mul_shade) },8328// ??? in zelda ending, zelda8329// (1-0)*t1_alpha+t0, (prim-env)*cmb+env8330{ 0x29f6a053, cmb(cc_prim_sub_env_mul__t0_add_t1a__add_env) },8331// Sky, zelda8332//z (t1-t0)*prim_a+t08333{ 0x2a122a12, cmb(cc_t0_inter_t1_using_prima) },8334// battle tanks [Ogy]8335// (t1-t0)*prim_a+t0, (env-prim)*cmb+prim8336{ 0x2a126035, cmb(cc_env_sub_prim_mul__t0_inter_t1_using_prima__add_prim) },8337// clothes, zelda 2. Added by Gonetz8338// (t1-t0)*prim_a+t0, (prim-env)*cmb+env8339{ 0x2a12a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_prima__add_env) },8340// flame, Doraemon 2. Added by Gonetz8341// (t1-t0)*prim_a+t0, (cmb-0)*prim+08342{ 0x2a12e3f0, cmb(cc__t0_inter_t1_using_prima__mul_prim) },8343// logo, PD. Added by Gonetz8344// (t1-t0)*prim_a+t0, (cmb-0)*shade+08345{ 0x2a12e4f0, cmb(cc__t0_inter_t1_using_prima__mul_shade) },8346// 1080 snowboarding [Ogy] - 7/03/02 fixed by Dave2001. 15 Mar 2005 fixed by Gonetz.8347// (prim-t0)*prim_a+t08348{ 0x2a132a13, cmb(cc_t0_inter_prim_using_prima) },8349// menu background, Paper Mario8350// (prim-t0)*prim_a+t0, (prim-t1)*prim_a+t18351{ 0x2a134a23, cmb(cc_t0_inter_prim_using_prima) },8352// 0x2a134a23, cmb(cc_t0),8353// Mickey USA8354// (prim-t0)*prim_a+t0, (cmb-0)*shade+0 ** INC **8355{ 0x2a13e4f0, cmb(cc_t0_mul_shade) },8356// gunfire, Sin and Punishmen. Added by Gonetz8357// (env-t0)*prima+t0 **INC**8358{ 0x2a152a15, cmb(cc_t0_inter_env_using_prima) },8359// Mystical Ninja8360// (0-t0)*prima+t0, (prim-env)*cmb+env ** INC **8361{ 0x2a1fa053, cmb(cc_prim_sub_env_mul__t0_sub_t0_mul_prima__add_env) },8362// arena, Pokemon Stadium 2. Added by Gonetz8363// (shade-prim)*prim_a+t0 ** INC **8364{ 0x2a342a34, cmb(cc_t0_mul_shade) },8365// Paper Mario8366// (t1-k4)*prim_a+t0, (t1-k4)*cmb_a+cmb ** INC **8367{ 0x2a720772, cmb(cc_t0_add_t1) },8368// GASP Fighters. Added by Gonetz8369// (t0-0)*prim_a+t0, (cmb-center)*scale+0 ** INC **8370{ 0x2af1e660, cmb(cc_t0_mul_prima) },8371// F1 World Grand Prix. Added by Gonetz8372// (t1-0)*prim_a+t0, (cmb-0)*shade+env8373{ 0x2af2a4f0, cmb(cc__t1_mul_prima_add_t0__mul_shade_add_env) },8374// tidal wave, Paper Mario. Added by Gonetz8375// (prim-0)*prim_a+t08376{ 0x2af32af3, cmb(cc_prim_mul_prima_add_t0) },8377//Spacestation Silicon Valley intro. Added by Gonetz8378// (t1-t0)*shade_alpha+t0, (prim-shade)*cmb+shade ** INC **8379{ 0x2b128043, cmb(cc_prim_sub_shade_mul__t0_inter_t1_using_shadea__add_shade) },8380// water, Rocket Robot in Wheels8381// (t1-t0)*shade_alpha+t0, (env-shade)*cmb+shade ** INC **8382{ 0x2b128045, cmb(cc_env_sub_shade_mul__t0_inter_t1_using_shadea__add_shade) },8383// arena, Pokemon Stadium 28384// (t1-t0)*shade_alpha+t0, (cmb-prim)*env+shade ** INC **8385{ 0x2b128530, cmb(cc__t0_inter_t1_using_shadea__sub_prim_mul_env_add_shade) },8386// Rocket Robot in Wheels intro8387// (t1-t0)*shade_a+t0, (shade-0)*cmb+0 ** INC **8388{ 0x2b12e0f4, cmb(cc__t0_inter_t1_using_shadea__mul_shade) },8389// water, Mickey USA8390// (t1-t0)*shade_a+t0, (cmb-0)*shade+0 ** INC **8391{ 0x2b12e4f0, cmb(cc__t0_inter_t1_using_shadea__mul_shade) },8392// Extreme G. Added by Gonetz8393// (shade-t0)*shade_alpha+t08394{ 0x2b142b14, cmb(cc_shade_sub_t0_mul_shadea_add_t0) },8395// Jet Force Gemini. Added by Gonetz8396// (shade-t0)*shade_alpha+t0, (cmb-0)*prim+0 ** INC **8397{ 0x2b14e3f0, cmb(cc_t0_mul_prim_add_shade_mul_shadea_mul_prim) },8398// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz8399// (t1-0)*shade_alpha+t0, (prim-env)*cmb+env ** INC **8400{ 0x2bf2a053, cmb(cc_prim_sub_env_mul__t0_add_t1__add_env) },8401// pads, Pokemon Stadium 2. Added by Gonetz8402// (0-0)*shade_alpha+t0, (prim-env)*cmba+env8403{ 0x2bffa753, cmb(cc_prim_sub_env_mul_t0a_add_env) },8404// paper mario. Added by Gonetz8405// (t1-t0)*env_a+t0, (1-cmb)*prim+cmb8406{ 0x2c120306, cmb(cc_one_sub__t0_inter_t1_using_enva__mul_prim_add__t0_inter_t1_using_enva) },8407// Amoeba boss, water temple, zelda8408// (t1-t0)*env_a+t0, (cmb-env)*prim+t0 ** INC **8409{ 0x2c122350, cmb(cc__t0_inter_t1_using_enva__sub_env) },8410// paper mario. Added by Gonetz8411// (t1-t0)*env_a+t08412{ 0x2c122c12, cmb(cc_t0_inter_t1_using_enva) },8413// paper mario. Added by Gonetz8414// (t1-t0)*env_a+t0, (1-prim)*cmb+prim8415{ 0x2c126036, cmb(cc_one_sub_prim_mul__t0_inter_t1_using_enva__add_prim) },8416// water, jet force. Added by Gonetz8417// (t1-t0)*env_a+t0, (prim-shade)*cmb+shade8418{ 0x2c128043, cmb(cc_prim_sub_shade_mul__t0_inter_t1_using_enva__add_shade) },8419// Faries, zelda8420//z (t1-t0)*env_a+t0, (prim-env)*cmb+env8421{ 0x2c12a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env) },8422// paper mario. Added by Gonetz8423// (t1-t0)*env_a+t0, (prim-center)*cmb+env8424{ 0x2c12a063, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env) },8425// pads, Pokemon Stadium 2. Added by Gonetz8426// (t1-t0)*env_a+t0, (cmb-prim)*shade+env ** INC **8427{ 0x2c12a430, cmb(cc__t0_inter_t1_using_enva__mul_shade_add_env) },8428// Scary dead thing boss, zelda8429// (t1-t0)*env_a+t0, (cmb-t1)*cmb_a+env8430{ 0x2c12a720, cmb(cc__t0_inter_t1_using_enva__mul_env) },8431// something in a menu, PokemonStadium2, [Raziel64]8432// (t1-t0)*env_a+t0, (prim-env)*cmb_a+env8433{ 0x2c12a753, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_enva_alpha__add_env) },8434// Water in zora's place, zelda8435// (t1-t0)*env_a+t0, (cmb-0)*prim+08436{ 0x2c12e3f0, cmb(cc__t0_inter_t1_using_enva__mul_prim) },8437// Ground, zelda8438//z (t1-t0)*env_a+t0, (cmb-k5)*shade+cmb_a8439{ 0x2c12e4f0, cmb(cc__t0_inter_t1_using_enva__mul_shade) },8440// zelda, uninmp log. Added by Gonetz8441//(t1-t0)*env_a+t0, (cmb-0)*env+08442{ 0x2c12e5f0, cmb(cc__t0_inter_t1_using_enva__mul_env) },8443// Spheres, waverace8444//z (env-t0)*env_a+t08445{ 0x2c152c15, cmb(cc_t0_inter_env_using_enva) },//cmb(cc_t0) },8446// backgrounds, Mario Golf. Added by Gonetz8447// (env-t0)*env_a+t0, (shade-0)*cmb+08448{ 0x2c15e0f4, cmb(cc__t0_inter_env_using_enva__mul_shade) },8449// ground on Volcano level, DKR, [Raziel64]8450// (env-t0)*env_a+t0, (cmb-0)*shade+08451{ 0x2c15e4f0, cmb(cc__t0_inter_env_using_enva__mul_shade) },8452// Nintendo 'N', zelda8453//z (t0-prim)*env_a+t0, (prim-env)*cmb+env8454{ 0x2c31a053, cmb(cc_prim_sub_env_mul__t0_sub_prim_mul_enva_add_t0__add_env) },8455// Nintendo title & saria's song, zelda8456//z (t1-prim)*env_a+t0, (prim-env)*cmb+env8457{ 0x2c32a053, cmb(cc_prim_sub_env_mul__t1_sub_prim_mul_enva_add_t0__add_env) },8458// Hover boots flying, zelda8459// (t1-prim)*env_a+t0, (prim-0)*cmb+env8460{ 0x2c32a0f3, cmb(cc__t1_sub_prim_mul_enva_add_t0__mul_prim_add_env) },8461// star beam, paper mario8462// (prim-env)*env_a+t08463{ 0x2c532c53, cmb(cc_prim_sub_env_mul_enva_add_t0) },8464// Kotake & koume's hair, zelda8465// (t1-0)*env_a+t0, (prim-env)*cmb+env8466{ 0x2cf2a053, cmb(cc_prim_sub_env_mul__t1_mul_enva_add_t0__add_env) },8467//Goldeneye, [Jeremy]. Added by Gonetz8468// (t0-t0)*lodf+t0, (cmb-0)*prim+08469{ 0x2d11e3f0, cmb(cc_t0_mul_prim) },8470// Indy Racing 2000. Added by Gonetz8471// (t1-t0)*lodf+t0, (env-cmb)*prima+cmb ** INC **8472{ 0x2d120a05, cmb(cc_t0_inter_t1_using_primlod) },8473// (t1-t0)*lodf+t08474{ 0x2d122d12, cmb(cc_t0_inter_t1_using_primlod) },8475//broken wall, beetle adventure racing. Added by Gonetz8476// (t1-t0)*lodf+t0, (shade-prim)*cmb+prim8477{ 0x2d126034, cmb(cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim) },8478//Intro, CBFD. Added by Gonetz8479// (t1-t0)*lodf+t0, (shade-env)*cmb+prim8480// 0x2d126054, cmb(cc_shade_sub_env_mul_t0_add_prim) },8481{ 0x2d126054, cmb(cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_prim) },8482// bassmasters 2000 [Ogy]8483// (t1-t0)*lodf+t0, (env-0)*cmb+prim ** INC **8484{ 0x2d1260f5, cmb(cc_t0_mul_env_add_prim) },8485// sign, CBFD. Added by Gonetz8486// (t1-t0)*lodf+t0, (cmb-env)*shade+prim ** INC **8487{ 0x2d126450, cmb(cc_t0_sub_env_mul_shade_add_prim) },8488// landscape, Cruis'n Exotica. Added by Gonetz8489// (t1-t0)*lodf+t0, (cmb-0)*shade+prim8490{ 0x2d1264f0, cmb(cc__t0_inter_t1_using_primlod__mul_shade_add_prim) },8491// blast corps [Ogy]8492// (t1-t0)*lodf+t0, (0-0)*0+shade8493{ 0x2d129fff, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },8494// End of level, zelda8495// (t1-t0)*lodf+t0, (prim-env)*cmb+env8496{ 0x2d12a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env) },8497// Rocket Robot in Wheels intro8498// (t1-t0)*lodf+t0, (shade-env)*cmb+env8499{ 0x2d12a054, cmb(cc_shade_sub_env_mul__t0_inter_t1_using_primlod__add_env) },8500// basket, Fox Sport8501// (t1-t0)*lodf+t0, (prim-env)*t0+env8502{ 0x2d12a153, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env) },8503// paper mario. Added by Gonetz8504// (t1-t0)*lodf+t0, (cmb-0)*prim+env ** INC **8505{ 0x2d12a3f0, cmb(cc__t0_inter_t1_using_primlod__mul_prim_add_env) },8506// Tony Hawk Pro Skater8507// (t1-t0)*lodf+t0, (cmb-0)*shade+env8508{ 0x2d12a4f0, cmb(cc__t0_inter_t1_using_primlod__mul_shade_add_env) },8509// part of a building, Spiderman. Added by Gonetz8510// (t1-t0)*lodf+t0, (cmb-env)*cmba+env ** INC **8511{ 0x2d12a750, cmb(cc_t0_inter_t1_using_primlod) },8512// Mike Piazza's Strike Zone8513// (t1-t0)*lodf+t0, (shade-prim)*cmb+08514{ 0x2d12e034, cmb(cc_shade_sub_prim_mul__t0_inter_t1_using_primlod) },8515// intro, F1 Racing Championship. Added by Gonetz8516// (t1-t0)*lodf+t0, (shade-env)*cmb+08517{ 0x2d12e054, cmb(cc_shade_sub_env_mul__t0_inter_t1_using_primlod) },8518// stands, F1 Racing Championship. Added by Gonetz8519// (t1-t0)*lodf+t0, (1-env)*cmb+08520{ 0x2d12e056, cmb(cc_one_sub_env_mul__t0_inter_t1_using_primlod) },8521// court, Mario Tennis. Added by Gonetz8522// (t1-t0)*lodf+t0, (prim-0)*cmb+08523{ 0x2d12e0f3, cmb(cc__t0_inter_t1_using_primlod__mul_prim) },8524// Rocket Robot in Wheels intro8525// (t1-t0)*lodf+t0, (shade-0)*cmb+08526{ 0x2d12e0f4, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },8527// cars wheels, SF Rush 2049. Added by Gonetz8528// (t1-t0)*lodf+t0, (cmb-0)*prim+08529{ 0x2d12e3f0, cmb(cc__t0_inter_t1_using_primlod__mul_prim) },8530// Bridge, sf rush8531// (t1-t0)*lodf+t0, (cmb-0)*shade+08532{ 0x2d12e4f0, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },8533// blast corps [Ogy]8534// (t1-t0)*lodf+t0, (t0-0)*shade+08535{ 0x2d12e4f1, cmb(cc_t0_mul_shade) },8536// field, Mike Piazza's Strike Zone8537// (t1-t0)*lodf+t0, (cmb-prim)*env+0 ** INC **8538{ 0x2d12e530, cmb(cc__t0_inter_t1_using_primlod__mul_env) },8539// radar, Perfect Dark8540// (t1-t0)*lodf+t0, (cmb-0)*env+08541{ 0x2d12e5f0, cmb(cc__t0_inter_t1_using_primlod__mul_env) },8542// planet, Blast Corps8543// (t1-t0)*lodf+t0, (cmb-0)*prima+08544{ 0x2d12eaf0, cmb(cc__t0_inter_t1_using_primlod__mul_prima) },8545// zelda 2. Added by Gonetz8546// (t0-t0)*primlod+t0, (prim-env)*cmb+env8547{ 0x2e11a053, cmb(cc_prim_sub_env_mul_t0_add_env) },8548// zelda 2. Added by Gonetz8549// (t1-t0)*primlod+t0, (0-0)*shade+cmb8550{ 0x2e1204ff, cmb(cc_t0_inter_t1_using_primlod) },8551// zelda 2. Added by Gonetz8552// (t1-t0)*primlod+t0, (env-prim)*primlod+cmb8553{ 0x2e120d35, cmb(cc_prim_sub_env_mul_primlod_add__t0_inter_t1_using_primlod) },8554// lamppost, Ridge Racer. Added by Gonetz8555// (t1-t0)*primlod+t08556{ 0x2e122e12, cmb(cc_t0_inter_t1_using_primlod) },8557// Hearts, zelda8558//z (t1-t0)*primlod+t0, (shade-prim)*cmb+prim8559{ 0x2e126034, cmb(cc_shade_sub_prim_mul__t0_inter_t1_using_primlod__add_prim) },8560// Sunny Day, Pokemon Stadium 2 [gokuss4]. Added by Gonetz8561// (t1-t0)*primlod+t0, (env-prim)*cmb+prim8562{ 0x2e126035, cmb(cc_env_sub_prim_mul__t0_inter_t1_using_primlod__add_prim) },8563// snowhead temple, zelda 2. Added by Gonetz8564// (t1-t0)*primlod+t0, (cmb-env)*shade+prim ** INC **8565{ 0x2e126450, cmb(cc__t0_inter_t1_using_primlod__mul_shade_add_prim) },8566// snow on a wall, snowhead temple, zelda 2. Added by Gonetz8567// (t1-t0)*primlod+t0, (cmb-0)*shade+prim8568{ 0x2e1264f0, cmb(cc__t0_inter_t1_using_primlod__mul_shade_add_prim) },8569// Morning Sun, Pokemon Stadium 2 [gokuss4]. Added by Gonetz8570// (t1-t0)*primlod+t0, (cmb-0)*0+prim ** INC **?8571{ 0x2e127ff0, cmb(cc_prim) },8572// arena, Pokemon Stadium 2. Added by Gonetz8573// (t1-t0)*primlod+t0, (cmb-prim)*shade+shade ** INC **8574{ 0x2e128430, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },8575// Pokemon Stadium 2. Added by Gonetz8576// (t1-t0)*primlod+t0, (cmb-env)*cmb+env ** INC **8577{ 0x2e12a050, cmb(cc_t0_inter_t1_using_primlod) },8578// End of level heart, zelda8579// (t1-t0)*primlod+t0, (prim-env)*cmb+env8580{ 0x2e12a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env) },8581// Huge turtle appearance, zelda 2. Added by Gonetz8582// (t1-t0)*primlod+t0, (1-env)*cmb+env8583{ 0x2e12a056, cmb(cc_one_sub_env_mul__t0_inter_t1_using_primlod__add_env) },8584// frozen octorok, zelda 2. Added by Gonetz8585// (t1-t0)*primlod+t0, (prim-env)*t1+env8586{ 0x2e12a253, cmb(cc_prim_sub_env_mul_t1_add_env) },8587// fall headwaters, zelda 2. Added by Gonetz8588// (t1-t0)*primlod+t0, (cmb-env)*shade+env ** INC **8589{ 0x2e12a450, cmb(cc__t0_inter_t1_using_primlod__sub_env_mul_shade_add_env) },8590// zelda 2. Added by Gonetz8591// (t1-t0)*primlod+t0, (cmb-0)*t1+0 ** INC ** ?8592{ 0x2e12e2f0, cmb(cc_t0_inter_t1_using_primlod) },8593// zelda 2. Added by Gonetz8594// (t1-t0)*primlod+t0, (cmb-0)*prim+08595{ 0x2e12e3f0, cmb(cc__t0_inter_t1_using_primlod__mul_prim) },8596// sky, PGA European Tour8597// (t1-t0)*primlod+t0, (cmb-env)*shade+0 ** INC **8598{ 0x2e12e450, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },8599// Kirby's pool, smash bros8600// (t1-t0)*primlod+t0, (cmb-0)*shade+08601{ 0x2e12e4f0, cmb(cc__t0_inter_t1_using_primlod__mul_shade) },8602//Spacestation Silicon Valley intro. Added by Gonetz8603// (prim-t0)*primlod+t0, (cmb-0)*shade+0 **INC**8604{ 0x2e132e13, cmb(cc_t0_inter_prim_using_primlod) },8605// explosions, daikatana. Added by Gonetz8606// (prim-t0)*primlod+t0, (cmb-0)*shade+0 **INC**8607{ 0x2e13e4f0, cmb(cc_t0_mul_shade) },8608//Mike Piazza's Strike Zone logo. Added by Gonetz8609// (shade-t0)*primlod+t08610{ 0x2e142e14, cmb(cc_t0_inter_shade_using_primlod) },8611// Cartridge color (transfer pak) }, Pokemon Stadium 2 [gokuss4]. Added by Gonetz8612// (1-t0)*primlod+t08613{ 0x2e162e16, cmb(cc_one_sub_t0_mul_primlod_add_t0) },8614// pokemon attack, Pokemon Stadium 2. Added by Gonetz8615// (1-t0)*primlod+t0, (prim-0)*cmb+0 **INC**8616{ 0x2e16e0f3, cmb(cc_t0_mul_prim) },8617// zelda 2. Added by Gonetz8618// (t1-t1)*primlod+t0, (prim-env)*cmb+env8619{ 0x2e22a053, cmb(cc_prim_sub_env_mul_t0_add_env) },8620// Shadow Ball, Pokemon Stadium 2 [gokuss4]. Added by Gonetz8621// (0-t1)*primlod+t0, (prim-env)*cmb+env ** INC **8622{ 0x2e2fa053, cmb(cc_prim_sub_env_mul_t0_add_env) },8623// Skulltula coin solid, zelda8624// (t0-prim)*primlod+t0, (prim-env)*cmb+env8625{ 0x2e31a053, cmb(cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t0__add_env) },8626// Triforce lines, zelda8627// (t1-prim)*primlod+t0, (prim-shade)*cmb+shade8628{ 0x2e328043, cmb(cc_prim_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade) },8629// moon when majora defeated, zelda 2. Added by Gonetz8630// (t1-prim)*primlod+t0, (1-shade)*cmb+shade8631{ 0x2e328046, cmb(cc_one_sub_shade_mul__t1_sub_prim_mul_primlod_add_t0__add_shade) },8632// Fire, zelda8633//z (t1-prim)*primlod+t0, (prim-env)*cmb+env ** INC **8634{ 0x2e32a053, cmb(cc_prim_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env) },8635// zelda 2 [Ogy]. Added by Gonetz8636// (t1-prim)*primlod+t0, (shade-env)*cmb+env8637{ 0x2e32a054, cmb(cc_shade_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env) },8638// Scary face, pokemon stadium 28639// (t1-prim)*primlod+t0, (1-env)*cmb+env8640{ 0x2e32a056, cmb(cc_one_sub_env_mul__t1_sub_prim_mul_primlod_add_t0__add_env) },8641// zelda 2. Added by Gonetz8642// (t1-prim)*primlod+t0, (prim-0)*cmb+env8643{ 0x2e32a0f3, cmb(cc__t1_sub_prim_mul_primlod_add_t0__mul_prim_add_env) },8644// zelda 2. Added by Gonetz8645// (t1-0)*primlod+t0, (prim-env)*cmb+env8646{ 0x2ef2a053, cmb(cc_prim_sub_env_mul__t1_mul_primlod_add_t0__add_env) },8647// zelda 2. Added by Gonetz8648// (t1-0)*primlod+t0, (cmb-0)*prim+08649{ 0x2ef2e3f0, cmb(cc__t1_mul_primlod_add_t0__mul_prim) },8650// zelda 2. Added by Gonetz8651// (t1-0)*primlod+t0, (cmb-0)*env+08652{ 0x2ef2e5f0, cmb(cc__t1_mul_primlod_add_t0__mul_env) },8653// gun, Doom64. Added by Gonetz8654// (1-0)*primlod+t0, (cmb-0)*prim+env8655{ 0x2ef6a3f0, cmb(cc__t0_add_primlod__mul_prim_add_env) },8656// walls, Doom64. Added by Gonetz8657// (1-0)*primlod+t0, (cmb-0)*shade+env8658{ 0x2ef6a4f0, cmb(cc__t0_add_primlod__mul_shade_add_env) },8659// Pokemon Stadium 2. Added by Gonetz8660// (noise-0)*primlod+t0, (prim-env)*cmb+env ** INC **8661{ 0x2ef7a053, cmb(cc_prim_sub_env_mul_t0_add_env) },8662// Tony Hawk's Pro Skater. Added by Gonetz8663// (t1-t0)*k5+t08664{ 0x2f122f12, cmb(cc_t0_inter_t1_using_k5) },8665// F1 World Grand Prix. Added by Gonetz8666// (t1-t0)*k5+t0, (cmb-0)*shade+0 **INC**8667{ 0x2f12e4f0, cmb(cc__t0_inter_t1_using_k5__mul_shade) },8668// Turok 3 [scorpiove]. Added by Gonetz8669// (t0-k4)*k5+t08670{ 0x2f712f71, cmb(cc_t0) },8671// THPS 38672// (env-0)*k5+t0,8673{ 0x2ff52ff5, cmb(cc_t0_add_env_mul_k5) },8674// super bowling8675// (0-0)*k5+t0,8676{ 0x2fff0000, cmb(cc_t0) },8677// super bowling8678// (0-0)*k5+t08679{ 0x2fff2fff, cmb(cc_t0) },8680// RARE logo, blast corps. Added by Gonetz8681// (t0-0)*0+t08682{ 0x3ff13ff1, cmb(cc_t0) },8683// the ground below the scarecrow in the trading post in town, zelda 2 [Ogy]. Added by Gonetz8684// (t1-0)*0+t0, (cmb-0)*shade+08685{ 0x3ff2e4f0, cmb(cc_t0_mul_shade) },8686// intro, background, Dezaemon 3D8687// (1-0)*0+t08688{ 0x3ff63ff6, cmb(cc_t0) },8689// Tony Hawk's Pro Skater. Added by Gonetz8690// ((0-0)*0+t0, (t1-0)*shade+cmb ** INC **8691{ 0x3fff04f2, cmb(cc_t0) },8692// Dr. Mario [Ogy]. Added by Gonetz8693// ((0-0)*0+t0, (prim-cmb)*env+cmb8694{ 0x3fff0503, cmb(cc_prim_sub_t0_mul_env_add_t0) },8695// Stained glass, quest648696// (0-0)*0+t0, (1-0)*env+cmb8697{ 0x3fff05f6, cmb(cc_t0_add_env) },8698// Health bar, killer instinct gold8699// (0-0)*0+t0, (prim-env)*prim_a+cmb8700{ 0x3fff0a53, cmb(cc_prim_sub_env_mul_prima_add_t0) },8701// Runes, Turok - Dinosaur Hunter. Added by Gonetz8702// (0-0)*0+t0, (env-cmb)*env_a+cmb8703{ 0x3fff0c05, cmb(cc_t0_inter_env_using_enva) },8704// intro, Mission Impossible. Added by Gonetz8705// (k5-k5)*0+t0, (0-0)*scale+t08706{ 0x3fff26ff, cmb(cc_t0) },8707// TM, mario8708//z (k5-k5)*0+t08709{ 0x3fff3fff, cmb(cc_t0) },8710// Intro, CBFD. Added by Gonetz8711// ((0-0)*0+t0, (shade-env)*cmb+prim8712{ 0x3fff6054, cmb(cc_shade_sub_env_mul_t0_add_prim) },8713// paper mario. Added by Gonetz8714// ((0-0)*0+t0, (prim-env)*cmb+env8715{ 0x3fffa053, cmb(cc_prim_sub_env_mul_t0_add_env) },8716// Objects in arena, pokemon stadium 28717// (0-0)*0+t0, (cmb-prim)*shade+env8718{ 0x3fffa430, cmb(cc_t0_mul_prim) },8719// intro, F1 Racing Championship. Added by Gonetz8720// (0-0)*0+t0, (shade-env)*cmb+08721{ 0x3fffe054, cmb(cc_shade_sub_env_mul_t0) },8722// stands, F1 Racing Championship. Added by Gonetz8723// (0-0)*0+t0, (1-env)*cmb+08724{ 0x3fffe056, cmb(cc_one_sub_env_mul_t0) },8725// ? (from log)8726// (0-0)*0+t0, (prim-0)*cmb+08727{ 0x3fffe0f3, cmb(cc_t0_mul_prim) },8728// background, GASP Fighters8729// (0-0)*0+t0, (shade-0)*cmb+08730{ 0x3fffe0f4, cmb(cc_t0_mul_shade) },8731// zelda 2 [Ogy]. Added by Gonetz8732// (0-0)*0+t0, (env-0)*cmb+08733{ 0x3fffe0f5, cmb(cc_t0_mul_env) },8734// logo, v-rally 998735// (0-0)*0+t0, (prim-0)*t0+08736{ 0x3fffe1f3, cmb(cc_t0_mul_prim) },8737// target hit, zelda 2. Added by Gonetz8738// (0-0)*0+t0, (cmb-0)*prim+08739{ 0x3fffe3f0, cmb(cc_t0_mul_prim) },8740// Ms. Pac-Man intro background. Added by Gonetz8741// (0-0)*0+t0, (cmb-0)*shade+08742{ 0x3fffe4f0, cmb(cc_t0_mul_shade) },8743// Wonder Project J2 logo. Added by Gonetz8744// (0-0)*0+t0, (t0-0)*shade+08745{ 0x3fffe4f1, cmb(cc_t0_mul_shade) },8746// tire trace, Monster truck madness. Added by Gonetz8747// (0-0)*0+t0, (cmb-0)*env+08748{ 0x3fffe5f0, cmb(cc_t0_mul_env) },8749// Gauntlet Legends intro. Added by Gonetz8750// (0-0)*0+t0, (cmb-0)*ecale+08751{ 0x3fffe6f0, cmb(cc_t0) },8752// tire trace, beetle adventure racing. Added by Gonetz8753// (t1-t0)*t0+t1, (cmb-t0)*shade+t1 **INC**8754{ 0x41124410, cmb(cc__t0_inter_t1_using_t0__mul_shade) },8755// Paper Mario. Added by Gonetz8756// (t0-t1)*t0+t1 **INC**8757{ 0x41214121, cmb(cc_t1_inter_t0_using_t0) },8758// Powered Star Beam, Paper Mario. Added by Gonetz8759// (t0-t1)*t0+t1, (env-prim)*cmb+prim **INC**8760{ 0x41216035, cmb(cc_env_sub_prim_mul__t1_inter_t0_using_t0__add_prim) },8761// wetrix raiseland [Raziel64]. Added by Gonetz8762// (prim-t1)*t0+t1, (env-t0)*cmb+cmb **INC**8763{ 0x41230015, cmb(cc_env_sub_prim_mul__t0_mul_t1__add_prim) },8764// SCARS. Added by Gonetz8765// (t1-t0)*t0+t1, (cmb-t0)*shade+t1 **INC**8766{ 0x41250b03, cmb(cc__t0_inter_t1_using_half__mul_shade) },8767//beetle adventure racing. Added by Gonetz8768//(env-t1)*t0+t1, (prim-cmb)*shadea+cmb **INC**8769{ 0x4221e4f0, cmb(cc__t1_inter_env_using_t0__inter_prim_using_shadea) },8770// paper mario. Added by Gonetz8771// (t0-t0)*prim+t1, (t1-cmb)*cmb+env **INC** weird8772{ 0x4311a002, cmb(cc_env) },8773// background, Wetrix level 1, [Raziel64]. Added by Gonetz8774// (t0-t1)*prim+t18775{ 0x43214321, cmb(cc_t1_inter_t0_using_prim) },8776// grass, ISS 2k. Added by Gonetz8777// (t0-t1)*prim+t1, (cmb-0)*env+0 **INC**8778{ 0x4321e5f0, cmb(cc__t1_inter_t0_using_prim__mul_env) },8779// intro, Paper Mario8780// (t0-0)*prim+t18781{ 0x43f143f1, cmb(cc_t0_mul_prim_add_t1) },8782// F1 World Grand Prix. Added by Gonetz8783// (t0-0)*prim+t1, (cmb-0)*shade+env **INC**8784{ 0x43f1a4f0, cmb(cc__t0_add_t1__mul_shade_add_env) },8785// field, ISS64. Added by Gonetz8786// (t0-t1)*shade+t1, (cmb-t1)*prim+t1 ** INC **8787{ 0x44214320, cmb(cc_t0_sub_t1_mul_prim_mul_shade_add_t1) },8788// 0x44214320, cmb(cc__t0_add_t1__mul_prim) },8789// water, goemon great adventure8790// (t0-t1)*env+t1 ** INC **8791{ 0x45214521, cmb(cc_t1_inter_t0_using_env) },8792// characters, Ogre Battle. Added by Gonetz8793// (1-t1)*env+t1, (1-cmb)*prim+cmb ** INC **8794{ 0x45260306, cmb(cc_one_sub_t1_mul_prim_add_t1) },8795// characters, Ogre Battle. Added by Gonetz8796// (1-t1)*env+t18797{ 0x45264526, cmb(cc_one_sub_t1_mul_env_add_t1) },8798// characters, Ogre Battle. Added by Gonetz8799// (1-t1)*env+t1, (cmb-0)*prim+0 ** INC **8800{ 0x4526e3f0, cmb(cc__t1_inter_one_using_env__mul_prim) },8801// explosion, body harvest. Added by Gonetz8802// (t0-t1)*scale+t1, (env-prim)*cmb+prim ** INC **8803{ 0x46216035, cmb(cc_env_sub_prim_mul__t0_inter_t1_using_half__add_prim) },8804// Water, AeroGauge. Added by Gonetz8805// (t0-t1)*prima+t1, (0-0)*0+cmb8806{ 0x4a214a21, cmb(cc_t1_inter_t0_using_prima) },8807// flame, castlevania 2. Added by Gonetz8808// (t0-t1)*prima+t1, (prim-env)*cmb+env8809{ 0x4a21a053, cmb(cc_prim_sub_env_mul__t1_inter_t0_using_prima__add_env) },8810// shadows, Mario Tennis. Added by Gonetz8811// (t0-t1)*prima+t1, (prim-0)*cmb+08812{ 0x4a21e0f3, cmb(cc__t1_inter_t0_using_prima__mul_prim) },8813// menu, Mario Golf. Added by Gonetz8814// (t0-t1)*prima+t1, (shade-0)*cmb+08815{ 0x4a21e0f4, cmb(cc__t1_inter_t0_using_prima__mul_shade) },8816// intro, castlevania 2. Added by Gonetz8817// (t0-t1)*prima+t1, (cmb-0)*prim+08818{ 0x4a21e3f0, cmb(cc__t1_inter_t0_using_prima__mul_prim) },8819// water on map, Ogre Battle64. Added by Gonetz8820// (t0-t1)*prima+t1, (cmb-0)*shade+08821{ 0x4a21e4f0, cmb(cc__t1_inter_t0_using_prima__mul_shade) },8822// Ice, Paper Mario8823// (t0-t1)*shade_a+t18824{ 0x4b214b21, cmb(cc_t1_inter_t0_using_shadea) },8825// Grass, Beetle Adventure Racing8826// (t0-t1)*shade_a+t1, (cmb-0)*shade+08827{ 0x4b21e4f0, cmb(cc__t1_inter_t0_using_shadea__mul_shade) },8828// Ground at kotake & koume, zelda8829// (t1-t0)*env_a+t0, (prim-env)*cmb+env8830{ 0x4c12a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_enva__add_env) },8831// Tony Hawk's Pro Skater. Added by Gonetz8832// (t0-t1)*env_a+t1, (cmb-0)*shade+cmb ** INC **8833{ 0x4c2104f0, cmb(cc__t1_inter_t0_using_enva__mul_shade) },8834// bikes, xg2. Added by Gonetz8835// (t0-t1)*env_a+t1, (cmb-prim)*prima+prim8836{ 0x4c216a30, cmb(cc__t1_inter_t0_using_enva__sub_prim_mul_prima_add_prim) },8837// Yoshi Story8838// (t0-t1)*env_a+t1, (prim-env)*cmb+env8839{ 0x4c21a053, cmb(cc_prim_sub_env_mul__t1_inter_t0_using_enva__add_env) },8840// arena, Pokemon Stadium 1. Added by Gonetz8841// (t0-t1)*env_a+t1, (cmb-0)*prim+08842{ 0x4c21e3f0, cmb(cc__t1_inter_t0_using_enva__mul_prim) },8843// "end of chapter" text, paper mario. Added by Gonetz8844// (1-t1)*env_a+t1, (cmb-0)*t1+0 ** INC **8845{ 0x4c26e2f0, cmb(cc_t0_mul_t1) },8846// 0x4c26e2f0, cmb(cc_t1_mul_enva) },8847// Zelda opening door, zelda8848// (t0-prim)*env_a+t1, (prim-env)*t0+env8849{ 0x4c31a053, cmb(cc_prim_sub_env_mul_t0_add_env) },8850// Kotake & koume magic poof, zelda8851// (t0-0)*env_a+t1, (prim-env)*cmb+env8852{ 0x4cf1a053, cmb(cc_prim_sub_env_mul__t0_mul_enva_add_t1__add_env) },8853// ground in stone temple, zelda 2. Added by Gonetz8854// (t1-t0)*primlod+t1, (cmb-0)*prim+08855{ 0x4e12e3f0, cmb(cc__t0_inter_t1_using_primlod__mul_prim) },8856// pokemon attack, Pokemon Stadium 2. Added by Gonetz8857// (noise-t0)*primlod+t1, (prim-env)*cmb+env ** INC **8858{ 0x4e17a053, cmb(cc_prim_sub_env_mul__t0_inter_t1_using_primlod__add_env) },8859// menu, pokemon stadium 1, [Raziel64]8860// (t0-t1)*lodf+t1, (prim-env)*cmb+env8861{ 0x4e214e21, cmb(cc_t1_inter_t0_using_primlod) },8862// Pokemon backgrounds, pokemon stadium 28863// (t0-t1)*lodf+t1, (prim-env)*cmb+env8864{ 0x4e21a053, cmb(cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env) },8865// zelda 2 [Ogy]. Added by Gonetz8866// (t0-t1)*primlod+t1, (t1-cmb)*prim+env ** INC **8867{ 0x4e21a302, cmb(cc_env_sub__t0_sub_t1_mul_primlod__mul_prim) },8868// Magnitude, pokemon stadium 28869// (t0-t1)*primlod+t1, (prim-env)*cmb_a+env8870{ 0x4e21a753, cmb(cc_prim_sub_env_mul__t1_inter_t0_using_primlod__add_env) },8871// zelda 2 [Ogy]. Added by Gonetz8872// (t0-t1)*primlod+t1, (cmb-0)*shade+08873{ 0x4e21e4f0, cmb(cc__t1_inter_t0_using_primlod__mul_shade) },8874// lava in snowhead temple, zelda 2. Added by Gonetz8875// (t0-prim)*primlod+t1, (cmb-prim)*shade+cmb ** INC **8876{ 0x4e310430, cmb(cc_lavatex_sub_prim_mul_shade_add_lavatex) },8877// Skulltula coin, zelda8878// (t0-prim)*primlod+t1, (prim-env)*cmb+env8879{ 0x4e31a053, cmb(cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_t1__add_env) },8880// Pokemon background, pokemon stadium 28881// (noise-shade)*primlod+t1, (prim-env)*cmb+env8882{ 0x4e47a053, cmb(cc_prim_sub_env_mul_t1_add_env) },8883// Reflect, Pokemon Stadium 2 [gokuss4]. Added by Gonetz8884// (t0-0)*primlod+t1, (prim-env)*cmb+env8885{ 0x4ef1a053, cmb(cc_prim_sub_env_mul__t0_add_t1__add_env) },8886//beetle adventure racing. Added by Gonetz8887//(t0-t1)*k5+t1, (cmb-0)*shade+08888{ 0x4f21e4f0, cmb(cc__t1_inter_t0_using_k5__mul_shade) },8889// Spiderman. Added by Gonetz8890//(t0-t1)*k5+t1, (cmb-0)*env+08891{ 0x4f21e5f0, cmb(cc_t1_mul_env) },8892// N64 logo, Ogre Battle. Added by Gonetz8893//(0-0)*0+t18894{ 0x5fff5fff, cmb(cc_t1) },8895// reversing light, Monster truck madness. Added by Gonetz8896//(0-0)*0+t0, (0-0)*0+prim8897{ 0x5fff7fff, cmb(cc_prim) },8898// battle tanks [Ogy]8899// (0-0)*0+t1, (env-shade)*cmb+shade8900{ 0x5fff8045, cmb(cc_env_sub_shade_mul_t1_add_shade) },8901// minigame, pokemon stadium 1. Added by Gonetz8902// (0-0)*0+t1, (prim-env)*cmb+env8903{ 0x5fffa053, cmb(cc_prim_sub_env_mul_t1_add_env) },8904// F1 World Grand Prix. Added by Gonetz8905// (t0-prim)*t0+prim, (cmb-0)*shade8906{ 0x6131e4f0, cmb(cc__prim_inter_t0_using_t0__mul_shade) },8907// aerofighter's assault [Ogy]8908// (shade-prim)*t0+prim8909{ 0x61346134, cmb(cc_shade_sub_prim_mul_t0_add_prim) },8910// club blow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz8911// (shade-prim)*t0+prim, (cmb-env)*cmb_a+env ** INC **8912{ 0x6134a750, cmb(cc_shade_sub_prim_mul_t0_add_prim) },8913// lava, beetle adventure racing8914// (shade-prim)*t0+prim, (cmb-0)*t1+0 ** INC **8915{ 0x6134e2f0, cmb(cc_shade_sub_prim_mul__t0_mul_t1__add_prim) },8916// Monster truck madness intro. Added by Gonetz8917// (env-prim)*t0+prim, (cmb-0)*scale+cmb ** INC **8918{ 0x613506f0, cmb(cc_env_sub_prim_mul_t0_add_prim) },8919// pokemon attack, Pokemon stadium 18920// (env-prim)*t0+prim, (cmb-0)*0+cmb8921{ 0x61351ff0, cmb(cc_env_sub_prim_mul_t0_add_prim) },8922// Paper Mario, fortune teller spheres8923// (env-prim)*t0+prim, (cmb-0)*t1+t0 ** INC **8924{ 0x613522f0, cmb(cc_t0_mul_t1_add_t0) },8925// Later hearts, zelda8926// (env-prim)*t0+prim8927{ 0x61356135, cmb(cc_env_sub_prim_mul_t0_add_prim) },8928// Mission Impossible. Added by Gonetz8929// (env-prim)*t0+prim, (shade-0)*cmb+0 ** INC **8930{ 0x6135e0f4, cmb(cc_t0_mul_shade) },8931// crashing other vehicle, Monster truck madness [Raziel64]. Added by Gonetz8932// (env-prim)*t0+prim, (cmb-0)*t0+0 ** INC **8933{ 0x6135e1f0, cmb(cc_env_sub_prim_mul_t0_add_prim) },8934// Tony Hawk's Pro Skater. Added by Gonetz8935// (env-prim)*t0+prim, (cmb-0)*t1+0 ** INC **8936{ 0x6135e2f0, cmb(cc_env_sub_prim_mul_t0_add_prim) },8937// aerofighter's assault [Ogy]8938// (env-prim)*t0+prim, (cmb-0)*shade+0 ** INC **8939{ 0x6135e4f0, cmb(cc__prim_inter_env_using_t0__mul_shade) },8940// "time out", paper mario. Added by Gonetz8941// (1-prim)*t0+prim, (1-cmb)*enva+cmb ** INC **8942{ 0x61360c06, cmb(cc_one_sub_prim_mul_t0_add_prim) },8943// intro, paper mario. Added by Gonetz8944// (1-prim)*t0+prim, (cmb-0)*prima+t0 ** INC **8945{ 0x61362af0, cmb(cc__one_sub_prim_mul_t0_add_prim__mul_prima_add__one_sub_prim_mul_t0_add_prim) },8946// paper mario. Added by Gonetz8947// (1-prim)*t0+prim8948{ 0x61366136, cmb(cc_one_sub_prim_mul_t0_add_prim) },8949// arena, Pokemon Stadium 2. Added by Gonetz8950// (1-prim)*t0+prim, (cmb-env)*shade+shade ** INC **8951{ 0x61368450, cmb(cc_t0_mul_shade) },8952// F1 World Grand Prix. Added by Gonetz8953// (1-prim)*t0+prim, (cmb-0)*shade+0 ** INC **8954{ 0x6136e4f0, cmb(cc_t0_mul_shade) },8955// Xena. Added by Gonetz8956// (0-prim)*t0+prim8957{ 0x613f613f, cmb(cc_one_sub_t0_mul_prim) },8958// Kirby64 end [Raziel64]. Added by Gonetz8959// (prim-env)*t0+prim8960{ 0x61536153, cmb(cc_prim_sub_env_mul_t0_add_prim) },8961// Xena. Added by Gonetz8962// (shade-env)*t0+prim8963{ 0x61546154, cmb(cc_shade_sub_env_mul_t0_add_prim) },8964// Karts, mario kart8965//z (center-env)*t0+prim8966{ 0x61566156, cmb(cc_t0_mul_1menv_add_prim) },8967// Famista64. Added by Gonetz8968//(t0-0)*t0+prim8969{ 0x61f161f1, cmb(cc_t0_mul_prim) },8970// Pokemon Stadium 2. Added by Gonetz8971//(shade-0)*t0+prim8972{ 0x61f461f4, cmb(cc_t0_mul_shade_add_prim) },8973// Doom. Added by Gonetz8974//(1-0)*t0+prim8975{ 0x61f661f6, cmb(cc_t0_add_prim) },8976// tire trace, beetle adventure racing. Added by Gonetz8977// (shade-prim)*t1+prim, (cmb-0)*t1+0 **INC**8978{ 0x6234e2f0, cmb(cc_shade_sub_prim_mul_t1_add_prim) },8979// Text, turok8980// (env-prim)*t1+prim8981{ 0x62356235, cmb(cc_env_sub_prim_mul_t1_add_prim) },8982// Pokemon Stadium 2, [gokuss4]. Added by Gonetz8983// (env-prim)*t1+prim, (cmb-0)*t1+0 ** INC **8984{ 0x6235e2f0, cmb(cc_env_sub_prim_mul_t1_add_prim) },8985// bike trace, xg2 intro. Added by Gonetz8986// (1-prim)*t1+prim8987{ 0x62366236, cmb(cc_one_sub_prim_mul_t1_add_prim) },8988// aerofighter's assault [Ogy]8989// (1-prim)*t1+prim, (cmb-0)*0+env8990{ 0x6236bff0, cmb(cc_one_sub_prim_mul_t1_add_prim) },8991// Tennis court, mario tennis8992// (t0-0)*t1+prim8993{ 0x62f162f1, cmb(cc__t0_mul_t1__add_prim) },8994// Rush2. Added by Gonetz8995// (prim-prim)*prim+prim8996{ 0x63336333, cmb(cc_prim) },8997//Bowser in final battle, Paper Mario. Added by Gonetz8998// (t1-0)*prim+prim8999{ 0x63f263f2, cmb(cc_t1_mul_prim_add_prim) },9000// wetrix, icelayer, [Raziel64]. Added by Gonetz9001// (t0-prim)*shade+prim ** INC **9002{ 0x64316431, cmb(cc_t0_mul_shade) },9003// KI. Added by Gonetz9004// (env-prim)*shade+prim9005{ 0x64356435, cmb(cc_env_sub_prim_mul_shade_add_prim) },9006// xg2. Added by Gonetz9007// (1-prim)*shade+prim, (t0-0)*cmb+0 ** INC **9008{ 0x6436e0f1, cmb(cc_t0_mul_one_sub_prim_mul_shade) },9009// Intro, CBFD. Added by Gonetz9010// (t0-env)*shade+prim9011{ 0x64516451, cmb(cc_t0_sub_env_mul_shade_add_prim) },9012// sword in final battle, zelda 2. Added by Gonetz9013// (t0-env)*shade+prim, (cmb-0)*shade+0 ** INC **9014{ 0x6451e4f0, cmb(cc__t0_sub_env_mul_shade_add_prim__mul_shade) },9015// Road Rush. Added by Gonetz9016// (t0-0)*shade+prim9017{ 0x64f164f1, cmb(cc_t0_mul_shade_add_prim) },9018// paper mario. Added by Gonetz9019// (1-0)*shade+prim9020{ 0x64f664f6, cmb(cc_prim_add_shade) },9021// Character select, smash bros9022// (t0-prim)*env+prim9023{ 0x65316531, cmb(cc_t0_sub_prim_mul_env_add_prim) },9024// Clear screen intro, banjo kazooie9025// (t0-prim)*env+prim, (cmb-0)*shade+09026// 0x6531e4f0, cmb(cc_t0_mul_env_mul_shade) },9027{ 0x6531e4f0, cmb(cc__prim_inter_t0_using_env__mul_shade) },9028// Dragonfly feet, banjo kazooie9029// (1-prim)*env+prim, (cmb-0)*shade+0 ** INC **9030{ 0x6536e4f0, cmb(cc_env_mul_shade) },9031// Lava piranha atack, Paper Mario9032// (t1-k4)*env+prim ** INC **9033{ 0x65726572, cmb(cc_t1_mul_env_add_prim) },9034// zelda 2 [Ogy]. Added by Gonetz9035// (t0-0)*env+prim, (1-t1)*t0a+cmb ** INC **9036{ 0x65f10826, cmb(cc_one_sub_t1_mul_t0a_add_t0_mul_env_add_prim) },9037// clocks while warping through time, zelda 29038// (t0-0)*env+prim, (cmb-0)*0+cmb9039{ 0x65f11ff0, cmb(cc_t0_mul_env_add_prim) },9040// Helicopter, Nuclear Strike. Added by Gonetz9041// (t0-0)*env+prim9042{ 0x65f165f1, cmb(cc_t0_mul_env_add_prim) },9043// Mystical Ninja9044// (1-0)*env+prim9045{ 0x65f665f6, cmb(cc_prim_add_env) },9046// duke nukem: zero hour [Ogy]9047// (noise-0)*env+prim ** INC **9048{ 0x65f765f7, cmb(cc_prim_add_env) },9049// "terminator", CBFD9050// (0-0)*env+prim9051{ 0x65ff65ff, cmb(cc_prim) },9052// Cliffs, Taz express. Added by Gonetz9053// (t0-0)*scale+prim9054{ 0x66f166f1, cmb(cc_t0_add_prim) },9055// Taz express. Added by Gonetz9056// (t0-0)*scale+prim, (cmb-0)*shade+09057{ 0x66f1e4f0, cmb(cc_t0_add_prim_mul_shade) },9058// NFL Quarterback Club 98 Menu [CpUMasteR]9059// (prim-0)*scale+prim9060{ 0x66f366f3, cmb(cc_prim) },9061// Character, dual heroes9062// (t0-prim)*t0_a+prim9063{ 0x68316831, cmb(cc_t0_sub_prim_mul_t0a_add_prim) },9064// Indy Racing 2000. Added by Gonetz9065// (t0-prim)*t0_a+prim, (cmb-0)*shade+0 ** INC **9066{ 0x6831e4f0, cmb(cc_t0_mul_shade) },9067// text, Sin and Punishmen. Added by Gonetz9068// (env-prim)*t0_a+prim ** INC **9069{ 0x68356835, cmb(cc_env_sub_prim_mul_t0a_add_prim) },9070// menu, PD. Added by Gonetz9071// (env-prim)*t1_a+prim9072{ 0x69356935, cmb(cc_env_sub_prim_mul_t1a_add_prim) },9073// 0x69356935, cmb(cc_t1) },9074//xg2. Added by Gonetz9075// (t0-prim)*prima+prim9076{ 0x6a316a31, cmb(cc_t0_sub_prim_mul_prima_add_prim) },9077// menu, battle phoenix 64. Added by Gonetz9078// (env-prim)*prima+prim9079{ 0x6a356a35, cmb(cc_env_sub_prim_mul_prima_add_prim) },9080// ground, KI. Added by Gonetz9081// (shade-env)*prima+prim9082{ 0x6a546a54, cmb(cc_shade_sub_env_mul_prima_add_prim) },9083// F1 World Grand Prix. Added by Gonetz9084// (t0-0)*prima+prim, (shade-0)*cmb+env **INC**9085{ 0x6af1a0f4, cmb(cc__t0_mul_prima_add_prim_mul__shade_add_env) },9086//broken wall, beetle adventure racing. Added by Gonetz9087// (t0-0)*prima+prim, (cmb-0)*shade+0 **INC**9088{ 0x6af1e4f0, cmb(cc__t0_mul_prima_add_prim_mul__shade) },9089// Genie, diddy kong racing9090// (t0-prim)*shade_alpha+prim, (env-cmb)*shade+cmb9091// 0x6b310405, cmb(cc_env_sub__prim_inter_t0_using_shadea__mul_shade_add_env) },9092{ 0x6b310405, cmb(cc_t0_mul_shadea) },9093// Extreme G. Added by Gonetz9094// (t0-prim)*shade_alpha+prim ** INC **9095{ 0x6b316b31, cmb(cc_t0_sub_prim_mul_shadea_add_prim) },9096// water block, Paper Mario. Added by Gonetz9097// (t0-prim)*shade_alpha+prim, (prim-env)*cmb+env ** INC **9098{ 0x6b31a053, cmb(cc_prim_sub_env_mul__prim_inter_t0_using_shadea__add_env) },9099// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz9100// (t0-prim)*shade_alpha+prim, (cmb-0)*shade+0 ** INC **9101{ 0x6b31e4f0, cmb(cc__prim_inter_t0_using_shadea__mul_shade) },9102// F1 World Grand Prix. Added by Gonetz9103// (env-prim)*shade_alpha+prim, (shade-cmb)*cmb_a+cmb ** INC **9104{ 0x6b350704, cmb(cc_env_sub_prim_mul_shade_add_prim) },9105// lullaby, Paper Mario. Added by Gonetz9106// (env-prim)*shade_alpha+prim9107{ 0x6b356b35, cmb(cc_env_sub_prim_mul_shadea_add_prim) },9108// Some gannon spell, zelda9109// (noise-t0)*env_a+prim, (0-prim)*cmb+1 ** INC **9110{ 0x6c17c03f, cmb(cc_one_sub__one_sub_t0_mul_enva_add_prim__mul_prim) },9111//Goldeneye, [Jeremy]. Added by Gonetz9112// (t0-prim)*env_a+prim9113{ 0x6c316c31, cmb(cc_t0_sub_prim_mul_enva_add_prim) },9114// button, Sin and Punishmen. Added by Gonetz9115// (env-prim)*env_a+prim9116{ 0x6c356c35, cmb(cc_env_sub_prim_mul_enva_add_prim) },9117// fallen stars at star summit, Paper Mario. Added by Gonetz9118// (t0-env)*env_a+prim, (1-0)*primlod+cmb9119{ 0x6c510ef6, cmb(cc_t0_sub_env_mul_enva_add_prim) },9120// focus, Paper Mario. Added by Gonetz9121// (t0-env)*env_a+prim, (cmb-shade)*shadea+shade ** INC **9122{ 0x6c518b40, cmb(cc_t0_sub_shade_mul_shadea_add_shade) },9123// Ring, pokemon stadium 29124// (t0-0)*env_a+prim, (1-0)*cmb+09125{ 0x6cf1e0f6, cmb(cc_t0_mul_enva_add_prim) },9126// Jet Force9127// (noise-0)*env_a+prim9128{ 0x6cf76cf7, cmb(cc_prim) },9129// snowhead temple, zelda 2. Added by Gonetz9130// (t1-t0)*primlod+prim, (cmb-0)*shade+shade9131{ 0x6e1284f0, cmb(cc__t1_sub_t0_mul_primlod_add_prim__mul_shade_add_shade) },9132// zelda 2. Added by Gonetz9133// (t1-t0)*primlod+prim, (cmb-0)*shade+0 ** INC **9134{ 0x6e12e4f0, cmb(cc__t1_sub_t0_mul_primlod_add_prim__mul_shade) },9135// sky, daikatana. Added by Gonetz9136// (t0-prim)*primlod+prim, (cmb-0)*shade+09137{ 0x6e31e4f0, cmb(cc_t0_mul_shade) },9138// ball's track, NFL Blitz. Added by Gonetz9139// (t0-0)*primlod+prim9140{ 0x6ef16ef1, cmb(cc_t0_mul_primlod_add_prim) },9141// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz9142// (t0-0)*primlod+prim, (cmb-env)*cmb_a+env ** INC **9143{ 0x6ef1a750, cmb(cc_t0_mul_primlod_add_prim) },9144// rope, CBFD9145// (t0-env)*k5+prim9146{ 0x6f516f51, cmb(cc_t0_sub_env_mul_k5_add_prim) },9147// super bowling9148// (0-0)*k5+prim9149{ 0x6fff6fff, cmb(cc_prim) },9150// intro, Aidyn Chronicles. Added by Gonetz9151// (0-0)*0+prim, (0-0)*0+prim9152{ 0x79fb7788, cmb(cc_prim) },9153// Menu, megaman9154// (1-0)*0+prim9155{ 0x7ff67ff6, cmb(cc_prim) },9156// sky, PGA European Tour9157// (0-0)*0+prim, (env-0)*t0+cmb9158{ 0x7fff01f5, cmb(cc_t0_mul_env_add_prim) },9159// sky, Spiderman. Added by Gonetz9160// (0-0)*0+prim, (t1-0)*shade+cmb9161{ 0x7fff04f2, cmb(cc_t1_mul_shade_add_prim) },9162// ball's shadow, ISS 2k. Added by Gonetz9163// (0-0)*0+prim, (1-cmb)*env+cmb9164{ 0x7fff0506, cmb(cc_one_sub_prim_mul_env_add_prim) },9165// Necklace, quest649166// (0-0)*0+prim, (1-0)*env+cmb9167{ 0x7fff05f6, cmb(cc_prim_add_env) },9168// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz9169// (0-0)*0+prim, (1-cmb)*cmba+cmb ** INC **9170{ 0x7fff0706, cmb(cc_prim) },9171// Dobutsu no Mori. Added by Gonetz9172//(k5-k5)*0+prim, (cmb-0)*0+cmb9173{ 0x7fff1ff0, cmb(cc_prim) },9174// Intro background, starfox9175//z (k5-k5)*0+prim9176{ 0x7fff7fff, cmb(cc_prim) },9177// train smoke, Dobutsu No Mori. Added by Gonetz9178//(0-0)*0+prim, (shade-0)*cmb+09179{ 0x7fffe0f4, cmb(cc_prim_mul_shade) },9180// Donald Duck intro. Added by Gonetz9181//(0-0)*0+prim, (cmb-0)*prim+09182{ 0x7fffe3f0, cmb(cc_prim_mul_prim) },9183// Ms. Pac-Man intro. Added by Gonetz9184//(0-0)*0+prim, (cmb-0)*shade+09185{ 0x7fffe4f0, cmb(cc_prim_mul_shade) },9186// zelda 2. Added by Gonetz9187//(t1-t0)*t0+shade, (cmb-0)*shade+09188{ 0x8112e4f0, cmb(cc__t1_sub_t0_mul_t0_add_shade__mul_shade) },9189// branches, Beetle Adventure Racing9190//(t0-shade)*t0+shade, (t0-cmb)*prim+cmb **INC**9191{ 0x81410301, cmb(cc_t0_mul_prim) },9192// Namco logo, Famista 649193//(prim-shade)*t0+shade, (env-cmb)*t0+cmb **INC**9194{ 0x81430105, cmb(cc_prim_sub_shade_mul_t0_add_shade) },9195// pikachu, hey you pikachu9196//(prim-shade)*t0+shade, (env-cmb)*enva+cmb **INC**9197{ 0x81430c05, cmb(cc_prim_sub_shade_mul_t0_add_shade) },9198// Mario's head, mario //Added by Gonetz9199//(prim-shade)*t0+shade9200{ 0x81438143, cmb(cc_prim_sub_shade_mul_t0_add_shade) },9201// Iguana background, turok9202// (env-shade)*t0+shade9203{ 0x81458145, cmb(cc_env_sub_shade_mul_t0_add_shade) },9204// Bubbles in Jabu-Jabu's belly, zelda9205// (1-shade)*t0+shade9206{ 0x81468146, cmb(cc_one_sub_shade_mul_t0_add_shade) },9207// duck dodgers intro. Added by Gonetz9208// (1-shade)*t0+shade, (cmb-0)*shade+0 **INC**9209{ 0x8146e4f0, cmb(cc_one_sub_shade_mul_t0_add_shade) },9210// intro, Madden Footbal9211// (1-env)*t0+shade9212{ 0x81568156, cmb(cc_one_sub_env_mul_t0_add_shade) },9213// sky in doom. Added by Gonetz9214// (prim-0)*t0+shade, (cmb-0)*primlod+env **INC**9215{ 0x81f3aef0, cmb(cc_t0_mul_prim_add_shade) },9216// commercial? in IIS98. Added by Gonetz9217// (1-0)*t0+shade9218{ 0x81f681f6, cmb(cc_t0_add_shade) },9219//beetle adventure racing. Added by Gonetz9220//(prim-shade)*t1+shade, (cmb-0)*t1+0 **INC**9221{ 0x8243e2f0, cmb(cc_prim_sub_shade_mul_t1_add_shade) },9222// Scorpion fire breath, MK4 [Jeremy]. Added by Gonetz9223// (t0-shade)*prim+shade9224{ 0x83418341, cmb(cc_t0_mul_prim_add_one_sub_prim_mul_shade) },9225// Menu background, wwf no mercy9226// (env-shade)*prim+shade9227{ 0x83458345, cmb(cc_prim_mul_env_add_one_sub_prim_mul_shade) },9228// Pokemon selection window background, pokemon stadium 29229// (noise-shade)*prim+shade9230{ 0x83478347, cmb(cc_shade) },9231// crown of king of ikana, zelda 2. Added by Gonetz9232// (t0-env)*prim+shade9233{ 0x83518351, cmb(cc_t0_sub_env_mul_prim_add_shade) },9234// crown of king of ikana, zelda 2. Added by Gonetz9235// (t0-env)*prim+shade, (cmb-0)*cmb+0 ** INC **9236{ 0x8351e0f0, cmb(cc_t0_sub_env_mul_prim_add_shade) },9237// salesman's shirt in the bomb shop in town, zelda 2 [Ogy]. Added by Gonetz9238// (t0-env)*prim+shade, (cmb-0)*shade+0 ** INC **9239{ 0x8351e4f0, cmb(cc_t0_mul_prim_mul_shade) },9240// intro, Madden Footbal9241// (1-env)*prim+shade9242{ 0x83568356, cmb(cc_one_sub_env_mul_prim_add_shade) },9243// Buss hunter 64. Added by Gonetz9244// (t0-0)*prim+shade9245{ 0x83f183f1, cmb(cc_t0_mul_prim_add_shade) },9246// huge water lilies, zelda 2 [Ogy]. Added by Gonetz9247// (t0-0)*prim+shade, (cmb-env)*shade+0 ** INC **9248{ 0x83f1e450, cmb(cc__t0_mul_prim_add_shade__sub_env_mul_shade) },9249// Objects in arena, pokemon stadium 29250// (t1-0)*prim+shade, (cmb-0)*prim_a+0 - not going to bother with prim_a since it is FF9251{ 0x83f2eaf0, cmb(cc_t1_mul_prim_add_shade) },9252// Pokemon Stadium 2. Added by Gonetz9253// (t0-prim)*shade+shade ** INC **9254{ 0x84318431, cmb(cc_t0_mul_shade) },9255// big N, Pokemon Stadium 2. Added by Gonetz9256// (1-prim)*shade+shade ** INC **9257{ 0x84368436, cmb(cc_one_sub_prim_mul_shade_add_shade) },9258// arena, PokemonStadium2, [Raziel64]9259// (t0-0)*shade+shade, (cmb-0)*prim+09260{ 0x84f1e3f0, cmb(cc_t0_mul_prim_mul_shade_add_prim_mul_shade) },9261// Spiderman. Added by Gonetz9262// (1-0)*shade+shade9263{ 0x84f684f6, cmb(cc_shade) },9264// the "gekko" ( a monster in a room above the 3rd room of woodfall temple ) }, zelda 2 [Ogy]. Added by Gonetz9265// (t0-prim)*env+shade ** INC **9266{ 0x85318531, cmb(cc_t0_sub_prim_mul_env_add_shade) },9267// clothes, zelda 2. Added by Gonetz9268// (t0-prim)*env+shade, (cmb-0)*shade+0 ** INC **9269{ 0x8531e4f0, cmb(cc_t0_mul_env_mul_shade) },9270// Robotron 64, [scorpiove]9271// (env-shade)*env+shade ** INC **9272{ 0x85458545, cmb(cc_one_sub_env_mul_shade_add_env) },9273// Enemy dying, quest649274// (1-shade)*env+shade **changed by Gonetz9275{ 0x85468546, cmb(cc_one_sub_shade_mul_env_add_shade) },9276// Sky, Beetle Adventure Racing ** INC **9277//(t0-shade)*t0_a+shade, (env-cmb)*enva+cmb9278{ 0x88410c05, cmb(cc_t0_sub_shade_mul_t0a_add_shade) },9279// Mario's eyes, mario9280//z (t0-shade)*t0_a+shade9281{ 0x88418841, cmb(cc_t0_sub_shade_mul_t0a_add_shade) },9282//beetle adventure racing. Added by Gonetz9283// (prim-shade)*t1_a+shade, (t1-0)*cmb+0 **INC**9284{ 0x8843e0f2, cmb(cc_t1_mul_shade) },9285// blast corps [Ogy]9286// (prim-shade)*t1_a+shade9287{ 0x89438943, cmb(cc_prim_sub_shade_mul_t1a_add_shade) },9288//broken wall, beetle adventure racing. Added by Gonetz9289// (t0-shade)*prima+shade, (1-0)*0+cmb9290{ 0x8a411ff6, cmb(cc_t0_sub_shade_mul_prima_add_shade) },9291// menu, battle phoenix 64. Added by Gonetz9292// (t0-shade)*prima+shade9293{ 0x8a418a41, cmb(cc_t0_add_shade) },9294// intro, castlevania 2. Added by Gonetz9295// (prim-shade)*prim_a+shade9296{ 0x8a438a43, cmb(cc_prim_sub_shade_mul_prima_add_shade) },9297// ?9298// (1-shade)*shade_a+shade9299{ 0x8b468b46, cmb(cc_one_sub_shade_mul_shadea_add_shade) },9300// arena, Pokemon Stadium. Added by Gonetz9301// (t0-t1)*env_a+shade, (cmb-env)*prim+0 ** INC **9302{ 0x8c21e350, cmb(cc_t0_add_prim_mul_shade) },9303//diddy kong racing background fill. Added by Gonetz ** Modified by Dave20019304// (env-shade)*env_a+shade, (cmb-0)*prim+09305{ 0x8c458c45, cmb(cc_shade) }, // note: previous combiner used other_alpha; doesn't work9306//diddy kong racing. Added by Gonetz9307// (env-shade)*env_a+shade, (cmb-0)*prim+0 ** INC **9308{ 0x8c45e3f0, cmb(cc_prim_mul_shade) },9309// sky, Pokemon Stadium, [Raziel64]9310// (t0-0)*env_a+shade, (cmb-env)*prim+0 ** INC **9311{ 0x8cf1e350, cmb(cc_t0_mul_prim_add_shade_sub_env_mul_prim) },9312// zelda 2 [Ogy]. Added by Gonetz9313// (t0-prim)*primlod+shade, (prim-env)*cmb+env ** INC **9314{ 0x8e31a053, cmb(cc_prim_sub_env_mul__t0_sub_prim_mul_primlod_add_shade__add_env) },9315// fallen leaves, Dobutsu no Mori. Added by Gonetz9316// (t0-shade)*primlod+shade, (prim-env)*cmb+env ** INC **9317{ 0x8e41a053, cmb(cc_prim_sub_env_mul__t0_sub_shade_mul_primlod_add_shade__add_env) },9318// the icicle above the part just before the entrance to the mountain village, zelda 2 [Ogy]. Added by Gonetz9319// (t0-prim)*0+shade, (prim-env)*cmb+env ** INC ** ?9320{ 0x9f31a053, cmb(cc_prim_sub_env_mul_shade_add_env) },9321// background on level 3-1, kirby 64 [Raziel64]. Added by Gonetz9322// (0-env)*0+shade9323{ 0x9f5f9f5f, cmb(cc_shade) },9324// Spotlight, smash bros9325// (1-0)*0+shade9326{ 0x9ff69ff6, cmb(cc_shade) },9327// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz9328// (0-0)*0+shade, (cmb-cmb)*cmb+cmb9329{ 0x9fff0000, cmb(cc_shade) },9330// menu, Dr.Mario. Added by Gonetz9331// (0-0)*0+shade, (prim-cmb)*env+cmb9332{ 0x9fff0503, cmb(cc_prim_sub_shade_mul_env_add_shade) },9333// pikachu, hey you pikachu. Added by Gonetz9334// (0-0)*0+shade, (env-cmb)*enva+cmb9335{ 0x9fff0c05, cmb(cc_env_sub_shade_mul_enva_add_shade) },9336// mega shock, paper mario9337//(0-0)*0+shade, (env-prim)*cmb+prim9338{ 0x9fff6035, cmb(cc_env_sub_prim_mul_shade_add_prim) },9339// Super Mario 64 logo background9340//z (k5-k5)*0+shade9341{ 0x9fff9fff, cmb(cc_shade) },9342// Zelda 2 final movie. Added by Gonetz9343// (0-0)*0+shade, (prim-0)*cmb+09344{ 0x9fffe0f3, cmb(cc_prim_mul_shade) },9345// tree shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz9346// (0-0)*0+shade, (env-0)*cmb+09347{ 0x9fffe0f5, cmb(cc_env_mul_shade) },9348// N64 logo, Aidyn Chronicles. Added by Gonetz9349// (0-0)*0+shade, (cmb-0)*prim+09350{ 0x9fffe3f0, cmb(cc_prim_mul_shade) },9351// Hand, smash bros9352// (0-0)*0+shade, (cmb-0)*env+09353{ 0x9fffe5f0, cmb(cc_env_mul_shade) },9354// Lave piranha atack, Paper Mario9355// (t1-t0)*t0+env, (cmb-t1)*t0+prim ** INC **9356{ 0xa1126120, cmb(cc__t0_mul_t1__mul_env_add_prim) },9357// Kirby64 end [Raziel64]. Added by Gonetz9358// (prim-shade)*t0+env9359{ 0xa143a143, cmb(cc_prim_sub_shade_mul_t0_add_env) },9360// Superman [scorpiove]. Added by Gonetz9361// (t0-env)*t0+env9362{ 0xa151a151, cmb(cc_t0_sub_env_mul_t0_add_env) },9363// powder keg, zelda 2. Added by Gonetz9364// (prim-env)*t0+env, (0-0)*shade_a+cmb9365{ 0xa1530bff, cmb(cc_prim_sub_env_mul_t0_add_env) },9366// Kotake & koume defeated, going into sky, zelda9367// (prim-env)*t0+env, (prim-env)*0+cmb9368{ 0xa1531f53, cmb(cc_prim_sub_env_mul_t0_add_env) },9369// water, Dobutsu no Mori. Added by Gonetz9370// (prim-env)*t0+env, (cmb-0)*shade+t09371{ 0xa15324f0, cmb(cc_t0_add_shade_mul_env) },9372//broken wall, beetle adventure racing. Added by Gonetz9373// (prim-env)*t0+env, (cmb-shade)*t1+shade **INC** can't be done in one step9374{ 0xa1538240, cmb(cc_prim_sub_env_mul__t0_mul_t1__add_shade) },9375//couple's mask, zelda2. Added by Gonetz9376// (prim-env)*t0+env, (prim-cmb)*shade+shade **INC** can't be done in one step9377{ 0xa1538403, cmb(cc_t0_mul_shade) },9378// stadium, Pokemon Stadium 2. Added by Gonetz9379// (prim-env)*t0+env, (cmb-0)*shade+shade **INC** can't be done in one step9380{ 0xa15384f0, cmb(cc_t0_mul_shade) },9381//clothes on girl in inn, zelda2. Added by Gonetz9382// (prim-env)*t0+env, (cmb-prim)*env+shade **INC** can't be done in one step9383{ 0xa1538530, cmb(cc_t0_mul_env_add_shade) },9384// Getting light arrows for the first time, zelda9385// (prim-env)*t0+env, (prim-env)*cmb+env ** INC **9386{ 0xa153a053, cmb(cc_prim_sub_env_mul_t0_add_env) },9387// Fire, starfox9388// (prim-env)*t0+env9389{ 0xa153a153, cmb(cc_prim_sub_env_mul_t0_add_env) },9390// a spell, Fushigi no Dungeon: Fuurai no Shiren 29391// (prim-env)*t0+env, (cmb-env)*enva+env9392{ 0xa153ac50, cmb(cc_prim_sub_env_mul__t0_mul_enva__add_env) },9393// wizrobe's attack, zelda 2. Added by Gonetz.9394// (prim-env)*t0+env, (cmb-0)*cmb+09395{ 0xa153e0f0, cmb(cc_prim_sub_env_mul_t0_add_env) },9396// dress, zelda 2. Added by Gonetz.9397// also for Great Farie's hair - changed to use texture mod by Dave2001.9398// (prim-env)*t0+env, (shade-0)*cmb+09399{ 0xa153e0f4, cmb(cc__env_inter_prim_using_t0__mul_shade) },9400// Start menu, paper mario9401// (prim-env)*t0+env, (cmb-0)*t0+09402{ 0xa153e1f0, cmb(cc_prim_sub_env_mul_t0_add_env) },9403// { 0xa153e0f4, cmb(cc_prim_sub_env_mul_t0_add_env) },9404// Jellyfish tentacles in Jabu-Jabu's belly, zelda9405// (prim-env)*t0+env, (cmb-0)*prim+09406{ 0xa153e3f0, cmb(cc__env_inter_prim_using_t0__mul_prim) },9407// Dust, zelda9408//z (prim-env)*t0+env, (cmb-k5)*shade+cmb_a ** INC **9409{ 0xa153e4f0, cmb(cc__env_inter_prim_using_t0__mul_shade) },9410//0xa153e4f0, cmb(cc_prim_sub_env_mul_t0_add_env) },9411// roof, Kirby 64. Added by Gonetz9412// (prim-env)*t0+env, (cmb-0)*env+0 ** INC **9413{ 0xa153e5f0, cmb(cc_prim_sub_env_mul_t0_add_env) },9414// Something weird in intro, monster truck madness9415// (prim-env)*t0+env, (cmb-0)*k5+09416{ 0xa153eff0, cmb(cc__prim_sub_env_mul_t0_add_env__mul_k5) },9417// clothes, kirby 64. Added by Gonetz9418// (shade-env)*t0+env9419{ 0xa154a154, cmb(cc_shade_sub_env_mul_t0_add_env) },9420// field, Derby Stallion9421// (shade-env)*t0+env, (cmb-0)*prim+0 ** INC **9422{ 0xa154e3f0, cmb(cc_shade_sub_env_mul_t0_mul_prim_add_prim_mul_env) },9423// background, level 3-5, kirby 64, [Raziel64]9424// (shade-env)*t0+env, (cmb-0)*shade+0 ** INC **9425{ 0xa154e4f0, cmb(cc_shade_sub_env_mul_t0_add_env) },9426// quake 2 intro9427// (prim-0)*t0+env, (prim-0)*primlod+cmb ** INC **9428{ 0xa1f30ef3, cmb(cc_t0_mul_prim_add_env) },9429// Kotake or koume's hair, zelda9430// (prim-0)*t0+env9431{ 0xa1f3a1f3, cmb(cc_t0_mul_prim_add_env) },9432// track, ridge racer. Added by Gonetz9433// (t0-env)*t1+env, (cmb-0)*shade+0 ** INC **9434{ 0xa251e4f0, cmb(cc__t0_mul_t1__mul_shade) },9435// lava, beetle adventure racing9436// (t0-env)*t1+env, (cmb-0)*enva+0 ** INC **9437{ 0xa251ecf0, cmb(cc__t0_mul_t1__mul_enva) },9438// Ded Moroz, Paper Mario9439// (prim-env)*t1+env, (1-cmb)*t1+cmb ** INC **9440{ 0xa2530206, cmb(cc_prim_sub_env_mul_t1_add_env) },9441// text, monster truck madness9442// (prim-env)*t1+env9443{ 0xa253a253, cmb(cc_prim_sub_env_mul_t1_add_env) },9444// car position, Top Gear Rally. Added by Gonetz9445// (prim-env)*t1+env, (cmb-t0)*t1+0 ** INC **9446{ 0xa253e210, cmb(cc_prim_sub_env_mul_t1_add_env_mul_t0) },9447// text, Top Gear Rally. Added by Gonetz9448// (prim-env)*t1+env, (cmb-0)*t1+0 ** INC **9449{ 0xa253e2f0, cmb(cc_prim_sub_env_mul_t1_add_env_mul_t0) },9450// 0xa253e2f0, cmb(cc_prim_sub_env_mul_t1_add_env) },9451// a pole in the cut-scene that appears after you receive odolwa's mask, zelda 2 [Ogy]. Added by Gonetz9452// (prim-env)*t1+env, (cmb-0)*shade+0 ** INC **9453{ 0xa253e4f0, cmb(cc_t1_mul_prim_mul_shade) },9454// Quake 2 intro. Added by Gonetz9455// (t0-0)*t1+env, (t0-0)*primlod+cmb ** INC **9456{ 0xa2f10ef1, cmb(cc__t0_mul_t1__add_env) },9457// Quake64. Added by Gonetz9458// (t0-0)*t1+env9459{ 0xa2f1a2f1, cmb(cc__t0_mul_t1__add_env) },9460// Quake II. Added by Gonetz ** INC **9461// (t0-0)*t1+env, (cmb-0)*prim+env9462{ 0xa2f1a3f0, cmb(cc__t0_mul_t1__mul_prim_add_env) },9463// Dr Mario [Ogy]. Added by Gonetz9464// (t0-env)*prim+env9465// 0xa351a351, cmb(cc_t0_mul_prim_add_env) },9466{ 0xa351a351, cmb(cc_t0_sub_env_mul_prim_add_env) },9467// menu, Dr.Mario. Added by Gonetz9468// (prim-env)*prim+env9469{ 0xa353a353, cmb(cc_prim_sub_env_mul_prim_add_env) },9470// Razor sword, zelda 2. Added by Gonetz9471// (shade-env)*prim+env, (cmb-0)*shade+0 ** INC **9472{ 0xa354e4f0, cmb(cc_shade_sub_env_mul_prim_add_env) },9473// bomberman 64-2 intro. Added by Gonetz9474// (1-env)*prim+env9475{ 0xa356a356, cmb(cc_one_sub_env_mul_prim_add_env) },9476// thing that escapes from the well, zelda9477// (noise-env)*prim+env9478{ 0xa357a357, cmb(cc_prim_add_env) },9479// Bongo Bongo, zelda9480// (noise-env)*prim+env, (cmb-0)*shade+09481{ 0xa357e4f0, cmb(cc_env_mul_shade) },9482// paper mario. Added by Gonetz9483// (t0-0)*prim+env9484{ 0xa3f1a3f1, cmb(cc_t0_mul_prim_add_env) },9485// paper mario. Added by Gonetz9486// (t0-0)*prim+env, (t0-env)*prim+09487{ 0xa3f1e351, cmb(cc_t0_mul_prim_add_env) },9488// paper mario. Added by Gonetz9489// (t0-0)*prim+env, (t0-0)*prim+09490{ 0xa3f1e3f1, cmb(cc_t0_mul_prim) },9491// squirt, paper mario. Added by Gonetz9492// (t1-0)*prim+env, (1-cmb)*t1+cmb9493{ 0xa3f20206, cmb(cc_t1_mul_prim_add_env) },9494// paper mario. Added by Gonetz9495// (shade-0)*prim+env9496{ 0xa3f4a3f4, cmb(cc_prim_mul_shade_add_env) },9497// Doraemon 2. Added by Gonetz9498// (1-0)*prim+env9499{ 0xa3f6a3f6, cmb(cc_prim_add_env) },9500// Pokemon Stadium 2, [Jeremy]. Added by Gonetz9501// (noise-0)*prim+env ** INC ** ?9502{ 0xa3f7a3f7, cmb(cc_prim_add_env) },9503// monsters, Pokemon Stadium. Added by Gonetz9504// (t0-t1)*shade+env, (cmb-0)*prim+0 ** INC **9505{ 0xa421e3f0, cmb(cc_t0_mul_prim_mul_shade_add_prim_mul_env) },9506// background, pokemon stadium 29507// (t0-prim)*shade+env9508{ 0xa431a431, cmb(cc_t0_mul_shade) },9509// Buildings, pokemon stadium 29510// (t1-prim)*shade+env9511{ 0xa432a432, cmb(cc_t1_mul_shade) },9512// bomberman 64 [Ogy]9513// (t0-env)*shade+env9514{ 0xa451a451, cmb(cc_t0_mul_shade_add_env) },9515// kirby drill, kirby 64. Added by Gonetz9516// (prim-env)*shade+env9517{ 0xa453a453, cmb(cc_prim_sub_env_mul_shade_add_env) },9518// ball, ISS98 intro. Added by Gonetz9519// (t0-0)*shade+env9520{ 0xa4f1a4f1, cmb(cc_t0_mul_shade_add_env) },9521// score, ISS98 intro. Added by Gonetz9522// (prim-0)*shade+env9523{ 0xa4f3a4f3, cmb(cc_prim_mul_shade_add_env) },9524// magic fist, Rayman2. Added by Gonetz9525// (env-0)*shade+env9526{ 0xa4f5a4f5, cmb(cc_env_mul_shade_add_env) },9527// gunfire, Quake64. Added by Gonetz9528// (1-0)*shade+env9529{ 0xa4f6a4f6, cmb(cc_env_add_shade) },9530// Paper Mario. Added by Gonetz9531// (t0-center)*scale+env, (0-prim)*cmb+env9532{ 0xa661a03f, cmb(cc_t0_add_env) },9533// pink car, f-zero x9534// (t0-env)*t0_a+env, cmb*shade9535{ 0xa851e4f0, cmb(cc__env_inter_t0_using_t0a__mul_shade) },9536// PokemonStadium1, [Raziel64]9537// (prim-env)*t0_a+env, (cmb-cmb)*cmb+cmb9538{ 0xa8530000, cmb(cc_prim_sub_env_mul_t0a_add_env) },9539// N64 logo, Ogre Battle9540// (prim-env)*t0_a+env9541{ 0xa853a853, cmb(cc_prim_sub_env_mul_t0a_add_env) },9542// Mud Slap, Pokemon Stadium 2 [gokuss4]. Added by Gonetz9543// (prim-env)*t0_a+env, (cmb-0)*cmb+09544{ 0xa853e0f0, cmb(cc_prim_sub_env_mul_t0a_add_env) },9545// Tree background, mace9546// (prim-env)*t0_a+env, (cmb-0)*t0+09547{ 0xa853e1f0, cmb(cc__env_inter_prim_using_t0a__mul_t0) },9548// logo, Deadly Arts. Added by Gonetz9549// (prim-env)*t1_a+env9550{ 0xa953a953, cmb(cc_prim_sub_env_mul_t1a_add_env) },9551// Girl, PD intro. Added by Gonetz9552// (t0-env)*shade_alpha+env, (cmb-0)*shade+0 ** INC **9553{ 0xab51e4f0, cmb(cc_t0_mul_shade) },9554// 0xab51e4f0, cmb(cc_t0_sub_env_mul_shade_mul_shadea_add_env) },9555// Some gannon spell, zelda9556// (prim-env)*shade_alpha+env9557{ 0xab53ab53, cmb(cc_prim_sub_env_mul_shadea_add_env) },9558// Boxes, Taz express. Added by Gonetz9559// (t0-env)*env_a+env9560{ 0xac51ac51, cmb(cc_t0_sub_env_mul_enva_add_env) },9561// paper mario. Added by Gonetz9562// (t0-env)*env_a+env, (cmb-0)*shade+0 **INC**9563{ 0xac51e4f0, cmb(cc_t0_mul_env_mul_shade) },9564// goal, Monster Truck Madness 649565// (noise-0)*env_a+env, (cmb-0)*t1+0 **INC**9566{ 0xacf7e2f0, cmb(cc_t1_mul_env) },9567// sword on forge, zelda 2. Added by Gonetz9568// (t1-t1)*lodf+env, (t1-t0)*cmb+prim9569{ 0xae226012, cmb(cc__t1_sub_t0__mul_env_add_prim) },9570// menu background, Pokemon Stadium 2, [Raziel64]9571// (t0-prim)*lodf+env9572{ 0xae31ae31, cmb(cc_t0_sub_prim_mul_primlod_add_env) },9573// odd mushroom, zelda oot. Added by Gonetz9574// (t0-shade)*lodf+env, (prim-env)*cmb+env ** INC **9575{ 0xae41a053, cmb(cc__env_inter_prim_using__t0_sub_shade_mul_primlod_add_env) },9576// 0xae41a053, cmb(cc_prim_sub_env_mul__t0_mul_shade__add_env) },9577// Morning Sun, Pokemon Stadium 2 [gokuss4]. Added by Gonetz9578// (t0-env)*lodf+env, (cmb-0)*prim+09579{ 0xae51e3f0, cmb(cc__env_inter_t0_using_primlod__mul_prim) },9580//Spacestation Silicon Valley intro. Added by Gonetz9581// (prim-env)*lodf+env9582{ 0xae53ae53, cmb(cc_env_inter_prim_using_primlod) },9583// Doom, intro. Added by Gonetz9584// (t0-0)*lodf+env, (t0-0)*lodf+env9585{ 0xaef1aef1, cmb(cc_t0_add_env) },9586// Dobutsu no Mori. Added by Gonetz9587// (prim-0)*lodf+env9588{ 0xaef3aef3, cmb(cc_prim_add_env) },9589// light from window, Dobutsu no Mori. Added by Gonetz9590// (prim-0)*lodf+env, (t1-0)*cmb+09591{ 0xaef3e0f2, cmb(cc_t1_mul__prim_add_env) },9592// intro, Mission Impossible. Added by Gonetz9593// (k5-k5)*0+env, (0-0)*scale+env9594{ 0xbfffa6ff, cmb(cc_env) },9595// Something blocking the screen, waverace9596//z (k5-k5)*0+env9597{ 0xbfffbfff, cmb(cc_env) },9598// Derby Stallion . Added by Gonetz9599// (0-0)*0+env, (cmb-0)*prim+09600{ 0xbfffe3f0, cmb(cc_prim_mul_env) },9601// zelda 2 [Ogy]. Added by Gonetz9602// (k5-k5)*0+env, ((cmb-0)*shade+09603{ 0xbfffe4f0, cmb(cc_env_mul_shade) },9604// flame, paper mario. Added by Gonetz9605// (t0-t1)*t0+1, (0-prim)*cmb+env **INC** weird9606{ 0xc121a03f, cmb(cc__t0_inter_t1_using_half__mul_prim_add_env) },9607// tube near big monster on level 5, Kirby64 [Raziel64]9608// (prim-env)*t0+1, (cmb-0)*shade+0 ** INC **9609{ 0xc153e4f0, cmb(cc_prim_sub_env_mul_t0_mul_shade) },9610// paper mario. Added by Gonetz9611// (0-env)*t0+1, (prim-cmb)*t0+prim **INC**9612{ 0xc15f6103, cmb(cc_env_sub_prim_mul_t0_add_prim) },9613// HAL, smash bros9614// (0-0)*0+19615{ 0xdfffdfff, cmb(cc_one) },9616// arena, Pokemon Stadium 1, [Raziel64]9617// (0-0)*0+1, (cmb-0)*prim+09618{ 0xdfffe3f0, cmb(cc_prim) },9619// skis, Spacestation Silicon Valley. Added by Gonetz9620// (shade-0)*cmb+0, (t1-t0)*primlod+t09621{ 0xe0f42d12, cmb(cc_t0_inter_t1_using_primlod) },9622// paper mario. Added by Gonetz9623// (1-t1)*t0+0, (env-prim)*cmb+prim ** INC **9624{ 0xe1266035, cmb(cc_env_sub_prim_mul__t0_mul_t1__add_prim) },9625// ground, zelda 2. Added by Gonetz.9626// (t1-prim)*t0+0, (cmb-0)*shade+09627{ 0xe132e4f0, cmb(cc__t1_sub_prim_mul_t0__mul_shade) },9628// carmagedon9629// (shade-prim)*t0+09630{ 0xe134e134, cmb(cc_shade_sub_prim_mul_t0) },9631// skeleton, castlevania 2. Added by Gonetz9632// (1-prim)*t0+0, (cmb-0)*shade+09633{ 0xe136e4f0, cmb(cc_t0_mul_1mprim_mul_shade) },9634// Starshot logo. Added by Gonetz9635// (shade-env)*t0+0, (1-0)*cmb+cmb9636{ 0xe15400f6, cmb(cc_shade_sub_env_mul_t0) },9637// Kirby morfing, smash bros. Added by Gonetz9638// (shade-env)*t0+09639{ 0xe154e154, cmb(cc_shade_sub_env_mul_t0) },9640// menu, PGA euro tour. Added by Gonetz9641// (1-env)*t0+09642{ 0xe156e156, cmb(cc_one_sub_env_mul_t0) },9643// paper mario. Added by Gonetz9644// (t0-0)*t0+0, (1-cmb)*prim+cmb9645{ 0xe1f10306, cmb(cc_one_sub_t0_mul_prim_add_t0) },9646// F1 World Grand Prix. Added by Gonetz9647// (t0-0)*t0+0, (shade-prim)*cmb+prim9648{ 0xe1f16034, cmb(cc_shade_sub_prim_mul_t0_add_prim) },9649// paper mario. Added by Gonetz9650// (t0-0)*t0+0, (env-prim)*cmb+prim9651{ 0xe1f16035, cmb(cc_env_sub_prim_mul_t0_add_prim) },9652// sparkles, F1 World Grand Prix. Added by Gonetz9653// (t0-0)*t0+0, (1-prim)*cmb+prim9654{ 0xe1f16036, cmb(cc_one_sub_prim_mul_t0_add_prim) },9655// Tony Hawk's Pro Skater. Added by Gonetz9656// (t0-0)*t0+0, (cmb-0)*t0+09657{ 0xe1f1e1f0, cmb(cc_t0) },9658// something in upper left corner, mario tennis9659// (t0-0)*t0+09660{ 0xe1f1e1f1, cmb(cc_t0) },9661// zelda 2. Added by Gonetz9662// (t0-0)*t0+0, (cmb-0)*prim+09663{ 0xe1f1e3f0, cmb(cc_t0_mul_prim) },9664// zelda 2 final movie. Added by Gonetz9665// (t0-0)*t0+0, (cmb-0)*shade+09666{ 0xe1f1e4f0, cmb(cc_t0_mul_shade) },9667// paper mario. Added by Gonetz9668// (t0-t1)*t0+1, (env-cmb)*prima+cmb ** INC **9669{ 0xe1f20a05, cmb(cc_t1_mul_prima) },9670// terrain, SCARS. Added by Gonetz9671// (t1-0)*t0+0, (env-prim)*cmb+prim9672{ 0xe1f26035, cmb(cc_env_sub_prim_mul__t0_mul_t1__add_prim) },9673// Trees, Zelda 29674// (t1-0)*t0+0, (cmb-0)*shade+prim9675{ 0xe1f264f0, cmb(cc__t0_mul_t1__mul_shade_add_prim) },9676// terrain, SCARS. Added by Gonetz9677// (t1-0)*t0+0, (env-shade)*cmb+shade9678{ 0xe1f28045, cmb(cc_env_sub_shade_mul__t0_mul_t1__add_shade) },9679// arena, Pokemon Stadium 2. Added by Gonetz9680// (t1-0)*t0+0, (cmb-prim)*shade+shade ** INC **9681{ 0xe1f28430, cmb(cc__t0_mul_t1__mul_shade) },9682// Zelda 2, [Ogy]. Added by Gonetz9683// (t1-0)*t0+0, (cmb-prim)*env+shade ** INC **9684{ 0xe1f28530, cmb(cc__t0_mul_t1__mul_env_add_shade) },9685// pokemon attack, Pokemon Stadium 2. Added by Gonetz9686// (t1-0)*t0+0, (prim-env)*cmb+env9687{ 0xe1f2a053, cmb(cc_prim_sub_env_mul__t0_mul_t1__add_env) },9688// paper mario. Added by Gonetz9689// (t1-0)*t0+0, (cmb-0)*prim+env9690{ 0xe1f2a3f0, cmb(cc__t0_mul_t1__mul_prim_add_env) },9691// Sand, pokemon stadium 29692// (t1-0)*t0+0, (cmb-prim)*shade+env ** INC **9693{ 0xe1f2a430, cmb(cc__t0_mul_t1__mul_shade) },9694// grass, Mission Impossible. Added by Gonetz9695// (t1-0)*t0+0, (shade-0)*cmb+09696{ 0xe1f2e0f4, cmb(cc__t0_mul_t1__mul_shade) },9697// lighthouse's beam, zelda 2. Added by Gonetz9698// (t1-0)*t0+0, (cmb-0)*prim+09699{ 0xe1f2e3f0, cmb(cc__t0_mul_t1__mul_prim) },9700// Bottom of wings, pilotwings9701// (t1-0)*t0+0, (cmb-0)*shade+09702{ 0xe1f2e4f0, cmb(cc__t0_mul_t1__mul_shade) },9703// zelda 2. Added by Gonetz9704// (t1-0)*t0+0, (cmb-0)*prima+09705{ 0xe1f2eaf0, cmb(cc__t0_mul_t1__mul_prima) },9706// lava, Roadsters. Added by Gonetz9707// (prim-0)*t0+0, (1-prim)*t0+cmb9708{ 0xe1f30136, cmb(cc_t0) },9709// sky, Pokemon Stadium 2. Added by Gonetz9710// (prim-0)*t0+0, (cmb-0)*shadea+env9711{ 0xe1f3abf0, cmb(cc_t0_mul_prim_mul_shadea_add_env) },9712// cars, Indy Racing 2000. Added by Gonetz9713// (prim-0)*t0+0, (shade-0)*cmb+09714{ 0xe1f3e0f4, cmb(cc_t0_mul_prim_mul_shade) },9715// Sign shadows, zelda9716//z (prim-k5)*t0+cmb_a9717{ 0xe1f3e1f3, cmb(cc_t0_mul_prim) },9718// Table, mace9719// (prim-0)*t0+0, (cmb-0)*shade+09720{ 0xe1f3e4f0, cmb(cc_t0_mul_prim_mul_shade) },9721// Gauntlet Legends intro9722// (prim-0)*t0+0, (cmb-0)*prima+09723{ 0xe1f3eaf0, cmb(cc_t0_mul_prim_mul_prima) },9724// walls, beetle adventure racing. Added by Gonetz9725// (shade-0)*t0+0, (prim-0)*t0+cmb9726{ 0xe1f401f3, cmb(cc_t0_mul_shade) },9727// cars, ridge racer. Added by Gonetz9728// (shade-0)*t0+0, (prim-cmb)*cmb_a+cmb **INC**9729{ 0xe1f40703, cmb(cc_t0_mul_shade) },9730// water block, Paper Mario. Added by Gonetz9731// (shade-0)*t0+0, (prim-env)*cmb+env9732{ 0xe1f4a053, cmb(cc_prim_sub_env_mul__t0_mul_shade__add_env) },9733// a lot in TWINE. Added by Gonetz9734// (shade-0)*t0+0, (cmb-0)*prim+env9735{ 0xe1f4a3f0, cmb(cc_t0_mul_prim_mul_shade_add_env) },9736// Xena. Added by Gonetz9737// (shade-0)*t0+0, (env-0)*cmb+09738{ 0xe1f4e0f5, cmb(cc_t0_mul_env_mul_shade) },9739// Starshot logo. Added by Gonetz9740// (shade-0)*t0+0, (1-0)*cmb+09741{ 0xe1f4e0f6, cmb(cc_t0_mul_shade) },9742// Duck Dodgers intro. Added by Gonetz9743// (shade-0)*t0+09744{ 0xe1f4e1f4, cmb(cc_t0_mul_shade) },9745// shadow, Mission Impossible. Added by Gonetz9746// (shade-0)*t0+0, (cmb-0)*prim+09747{ 0xe1f4e3f0, cmb(cc_t0_mul_prim_mul_shade) },9748// Tony Hawk's Pro Skater 3. Added by Gonetz9749// (env-0)*t0+0, (t1-0)*shade+cmb ** INC **9750{ 0xe1f504f2, cmb(cc__t0_add_t1__mul_shade) },9751// text, tonic trouble. Added by Gonetz9752// (env-0)*t0+09753{ 0xe1f5e1f5, cmb(cc_t0_mul_env) },9754// powder keg, zelda 2. Added by Gonetz9755// (env-0)*t0+0, (cmb-0)*shade+09756{ 0xe1f5e4f0, cmb(cc_t0_mul_env_mul_shade) },9757// water, Starshot. Added by Gonetz9758// (1-0)*t0+0, (1-0)*cmb+09759{ 0xe1f6e0f6, cmb(cc_t0) },9760// bomberman 64 [Ogy]9761// (1-0)*t0+09762{ 0xe1f6e1f6, cmb(cc_t0) },9763// Mermaid attack, Mystical Ninja9764// (noise-0)*t0+09765{ 0xe1f7e1f7, cmb(cc_t0) },9766// paper mario. Added by Gonetz * changed because of odd palette copy9767// (t0-0)*t1+0, (shade-env)*cmb+cmb **INC** ?9768{ 0xe2f10054, cmb(cc_shade_sub_env_mul__t0_mul_t1__add__t0_mul_t1) },9769// water, PGA European Tour9770// (t0-0)*t1+0, (env-cmb)*prim+cmb9771{ 0xe2f10305, cmb(cc_one_sub_prim_mul__t0_mul_t1__add__prim_mul_env) },9772// Grass, mario golf9773// (t0-0)*t1+0, (cmb-t0)*cmb_a+t09774{ 0xe2f12710, cmb(cc_t0_mul_t1) },9775// xg2, Added by Gonetz9776// (t0-0)*t1+0, (env-prim)*cmb+prim9777{ 0xe2f16035, cmb(cc_env_sub_prim_mul__t0_mul_t1__add_prim) },9778// poo, CBFD, Added by Gonetz9779// (t0-0)*t1+0, (cmb-env)*shade+prim ** INC **9780{ 0xe2f16450, cmb(cc__t0_mul_t1__mul_shade_add_prim) },9781// sky, xg2, Added by Gonetz9782// (t0-0)*t1+0, (cmb-prim)*cmb_a+prim9783{ 0xe2f16730, cmb(cc__t0_mul_t1__sub_prim_mul__t0t1a__add_prim ) },9784// Sin and Punishment, [scorpiove], Added by Gonetz9785// (t0-0)*t1+0, (env-prim)*cmb_a+prim9786{ 0xe2f16735, cmb(cc_env_sub_prim_mul__t0t1a__add_prim) },9787// light, Ridge Racer. Added by Gonetz9788// (t0-0)*t1+0, (prim-env)*cmb+env9789{ 0xe2f1a053, cmb(cc_prim_sub_env_mul__t0_mul_t1__add_env) },9790// Waterfall, duck dodgers. Added by Gonetz9791// (t0-0)*t1+0, (shade-env)*cmb+env9792{ 0xe2f1a054, cmb(cc_shade_sub_env_mul__t0_mul_t1__add_env) },9793// bikes, xg29794// (t0-0)*t1+0, (shade-0)*cmb+09795{ 0xe2f1e0f4, cmb(cc__t0_mul_t1__mul_shade) },9796// Sky background, xg29797// (t0-0)*t1+09798{ 0xe2f1e2f1, cmb(cc_t0_mul_t1) },9799// statistics, Banjo 2. Added by Gonetz9800// (t0-0)*t1+0, (cmb-0)*prim+09801{ 0xe2f1e3f0, cmb(cc__t0_mul_t1__mul_prim) },9802// Water, pilotwings9803// (t0-0)*t1+0, (cmb-0)*shade+09804{ 0xe2f1e4f0, cmb(cc__t0_mul_t1__mul_shade) },9805//beetle adventure racing. A dded by Gonetz9806// (t0-0)*t1+0, (cmb-0)*env+09807{ 0xe2f1e5f0, cmb(cc__t0_mul_t1__mul_env) },9808//fall headwaters, zelda 2. Added by Gonetz9809// (t1-0)*t1+0, (cmb-0)*shade+09810{ 0xe2f2e4f0, cmb(cc_t1_mul_shade) },9811//text, Paper Mario9812// (prim-0)*t1+09813{ 0xe2f3e2f3, cmb(cc_t1_mul_prim) },9814//terrain, Beetle Adventure Racing. Added by Gonetz9815// (shade-0)*t1+09816{ 0xe2f4e2f4, cmb(cc_t1_mul_shade) },9817// lens of truth, zelda 2 [Ogy]. Added by Gonetz9818// (1-t0)*prim+09819{ 0xe316e316, cmb(cc_one_sub_t0_mul_prim) },9820// Magnitude, pokemon stadium 29821// (t0-0)*prim+0, (t0-0)*env+cmb9822{ 0xe3f105f1, cmb(cc_t0_mul__prim_add_env) },9823// night vision, jet force gemini9824// (t0-0)*prim+0, (noise-0)*env+cmb9825{ 0xe3f105f7, cmb(cc_t0_mul_prim_add_env) },9826// Smoke, diddy kong racing9827// (t0-0)*prim+0, (env-cmb)*env_alpha+cmb9828{ 0xe3f10c05, cmb(cc_t0_mul_prim) },9829// battle menu, Paper Mario. Added by Gonetz9830// (t0-0)*prim+0, (t0-env)*env_alpha+cmb ** INC **9831{ 0xe3f10c51, cmb(cc_t0_mul_prim) },9832// stalactites, Beetle adventure Racing. Added by Gonetz9833// (t0-0)*prim+0, (cmb-shade)*t1_alpha+shade ** INC **9834{ 0xe3f18940, cmb(cc_t0_mul_prim_add_shade ) },9835// ? in Jabu-Jabu's belly, submitted by gokuss49836// 0xe4f1a053, (t0-0)*prim+0, (prim-env)*cmb+env9837{ 0xe3f1a053, cmb(cc_prim_sub_env_mul__t0_mul_prim__add_env) },9838// kirby drill, kirby 64. Added by Gonetz9839// (t0-0)*prim+0, (cmb-env)*shade+env **INC**9840{ 0xe3f1a450, cmb(cc_t0_mul_prim_mul_shade_add_env) },9841// ? sign, zelda 2. Added by Gonetz9842// (t0-0)*prim+0, (cmb-0)*cmb+0 ** INC **9843{ 0xe3f1e0f0, cmb(cc_t0_mul_prim) },9844// vehicle, Star Wars Ep.1 Racer, [Raziel64]. Added by Gonetz9845// (t0-0)*prim+0, (shade-0)*cmb+09846{ 0xe3f1e0f4, cmb(cc_t0_mul_prim_mul_shade) },9847// magic stuff, buck bumble. Added by Gonetz9848// (t0-0)*prim+0, (cmb-0)*prim+09849{ 0xe3f1e3f0, cmb(cc_t0_mul_prim_mul_prim) },9850// The mario face, mario9851//z (t0-k5)*prim+cmb_a9852{ 0xe3f1e3f1, cmb(cc_t0_mul_prim) },9853// Butterflies at Jabu-Jabu's lake, zelda9854// (t0-0)*prim+0, (cmb-0)*shade+09855{ 0xe3f1e4f0, cmb(cc_t0_mul_prim_mul_shade) },9856// Sprites, Ogre Battle. Added by Gonetz9857// (t1-0)*prim+09858{ 0xe3f2e3f2, cmb(cc_t1_mul_prim) },9859// F1 World Grand Prix. Added by Gonetz9860// (t1-0)*prim+0, (cmb-0)*shade+09861{ 0xe3f2e4f0, cmb(cc_t1_mul_prim_mul_shade) },9862// intro background, bio freaks. Added by Gonetz9863// (prim-0)*prim+09864{ 0xe3f3e3f3, cmb(cc_prim_mul_prim) },9865// player, Ohzumou29866// (shade-0)*prim+0, (env-cmb)*t0+cmb9867{ 0xe3f40105, cmb(cc_env_sub_primshade_mul_t0_add_primshade) },9868// floor in pyramides, beetle adventure racing.9869// (shade-0)*prim+0, (t1-0)*cmb+09870{ 0xe3f4e0f2, cmb(cc_t1_mul_prim_mul_shade) },9871// Slingshot string, zelda9872// (shade-0)*prim+09873{ 0xe3f4e3f4, cmb(cc_prim_mul_shade) },9874// ???, zelda9875// (env-0)*prim+0, (0-0)*0+cmb9876{ 0xe3f5e3f5, cmb(cc_prim_mul_env) },9877// Option selection, zelda9878//z (center-k5)*prim+cmb_a9879{ 0xe3f6e3f6, cmb(cc_t0_mul_prim) },9880// ranco monster, zelda 2. Added by Gonetz9881// (noise-0)*prim+0, (cmb-0)*prim_a+prim9882{ 0xe3f76af0, cmb(cc_prim_mul_prima_add_prim) },9883// zelda 2 [Ogy]. Added by Gonetz9884// (noise-0)*prim+09885{ 0xe3f7e3f7, cmb(cc_prim) },9886// Road rush. Added by Gonetz9887// (0-0)*prim+0 ** INC ** ?9888{ 0xe3ffe3ff, cmb(cc_prim) },9889// Letter to Kafei's mom, zelda 2. Added by Gonetz9890// (0-0)*prim+0, (cmb-0)*shade+09891{ 0xe3ffe4f0, cmb(cc_prim_mul_shade) },9892// Jabu-Jabu's Belly, zelda. Added by Gonetz9893// (1-t0)*shade+0, (cmb-0)*prim+09894{ 0xe416e3f0, cmb(cc_one_sub_t0_mul_prim_mul_shade) },9895// bomb mask, zelda 2. Added by Gonetz9896// (t0-env)*shade+0, (cmb-prim)*shade+shade ** INC **9897{ 0xe4518430, cmb(cc__t0_sub_env_mul_shade__sub_prim_mul_shade) },9898// terrain, Top Gear Rally 2. Added by Gonetz9899// (t0-env)*shade+09900{ 0xe451e451, cmb(cc_t0_sub_env_mul_shade) },9901// closes, Nightmire Creatures9902// (1-env)*shade+09903{ 0xe456e456, cmb(cc_one_sub_env_mul_shade) },9904// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz9905// (t0-0)*shade+0, (cmb-cmb)*cmb+cmb9906{ 0xe4f10000, cmb(cc_t0_mul_shade) },9907// Monster truck madness intro. Added by Gonetz9908// (t0-0)*shade+0, (1-0)*cmb+cmb ** INC **9909{ 0xe4f100f6, cmb(cc_t0_mul_shade) },9910// terrain, SCARS. Added by Gonetz9911// (t0-0)*shade+0, (prim-cmb)*t0+cmb ** INC **9912{ 0xe4f10103, cmb(cc_t0_mul_shade) },9913// Boomerang circle, zelda9914// (t0-0)*shade+0, (1-cmb)*t0+cmb9915{ 0xe4f10106, cmb(cc_t0_mul_shade) },9916// THPS3.9917// (t0-0)*shade+0, (1-0)*t0+cmb9918{ 0xe4f101f6, cmb(cc_t0_mul_shade) },9919// ???, WWF No Mercy [CpuMaster]9920// (t0-0)*shade+0, (env-cmb)*prim+cmb9921{ 0xe4f10305, cmb(cc_t0_mul_one_sub_prim_mul_shade_add_prim_mul_env) },9922// magic bubble, zelda2. Added by Gonetz9923// (t0-0)*shade+0, (t1-0)*shade+09924{ 0xe4f104f2, cmb(cc_t0_mul_shade) },9925// bike select, xg2. Added by Gonetz9926// (t0-0)*shade+0, (1-cmb)*env+cmb ** INC **9927{ 0xe4f10506, cmb(cc_t0_mul_shade) },9928// a bugs life [Ogy]9929// (t0-0)*shade+0, (cmb-0)*env+cmb9930// 0xe4f105f0, cmb(cc_t0_mul_env_mul_shade) },9931{ 0xe4f105f0, cmb(cc_t0_mul_shade) },9932// Wall, quest649933// (t0-0)*shade+0, (1-0)*env+cmb9934{ 0xe4f105f6, cmb(cc_t0_mul_shade_add_env) },9935//lava, beetle adventure racing. Added by Gonetz9936// (t0-0)*shade+0, (prim-cmb)*cmb_a+cmb **INC**9937{ 0xe4f10703, cmb(cc_t0_mul_shade) },9938// course map, Ridge Racer. Added by Gonetz9939// (t0-0)*shade+0, (prim-cmb)*prima+cmb **INC**9940{ 0xe4f10a03, cmb(cc_t0_mul_shade) },9941// arena, custom robo. Added by Gonetz9942// (t0-0)*shade+0, (noise-cmb)*prima+cmb **INC**9943{ 0xe4f10a07, cmb(cc_t0_mul_shade) },9944// arena, custom robo 2. Added by Gonetz9945// (t0-0)*shade+0, (0-cmb)*prima+cmb **INC**9946{ 0xe4f10a0f, cmb(cc_t0_mul_shade) },9947//floor in a cave, Paper mario. Added by Gonetz9948// (t0-0)*shade+0, (cmb-prim)*prima+cmb **INC**9949{ 0xe4f10a30, cmb(cc_t0_mul_shade) },9950//beetle adventure racing. Added by Gonetz9951// (t0-0)*shade+0, (t1-prim)*prima+cmb **INC**9952{ 0xe4f10a32, cmb(cc_t0_mul_shade) },9953// Monster truck madness intro. Added by Gonetz9954// (t0-0)*shade+0, (shade-cmb)*shade_a+cmb ** INC **9955{ 0xe4f10b04, cmb(cc_t0_mul_shade) },9956// xg2 intro. Added by Gonetz9957// (t0-0)*shade+0, (1-cmb)*shade_a+cmb ** INC **9958{ 0xe4f10b06, cmb(cc__t0_mul_shade__inter_one_using_shadea) },9959// Link's bomb, smash bros9960// (t0-0)*shade+0, (env-cmb)*env_a+cmb ** INC **9961{ 0xe4f10c05, cmb(cc__t0_mul_shade__inter_env_using_enva) },9962// A Bugs Life, [Raziel64]9963// (t0-0)*shade+0, (cmb-0)*k5+cmb9964{ 0xe4f10ff0, cmb(cc_t0_mul_shade) },9965// car, Top Gear Rally. Added by Gonetz9966// (t0-0)*shade+0, (cmb-t0)*t0a+t0 **INC**9967{ 0xe4f12810, cmb(cc_t0_mul_shade) },9968// logo, SCARS. Added by Gonetz9969// (t0-0)*shade+0, (cmb-t0)*shadea+t0 **INC**9970{ 0xe4f12b10, cmb(cc_t0_mul_shade) },9971// ? sign, Spiderman. Added by Gonetz9972// (t0-0)*shade+0, (0-0)*0+t19973{ 0xe4f15fff, cmb(cc_t0_mul_shade) },9974// plants, CBFD. Added by Gonetz9975// (t0-0)*shade+0, (cmb-env)*shade+prim ** INC **9976{ 0xe4f16450, cmb(cc_t0_sub_env_mul_shade_add_prim) },9977// Kirby64. Added by Gonetz9978// (t0-0)*shade+0, (cmb-prim)*prima+prim9979{ 0xe4f16a30, cmb(cc_t0_mul_prima_mul_shade_add_prim_mul_one_sub_prima) },9980// building shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz9981// (t0-0)*shade+0, (0-0)*0+prim9982{ 0xe4f17fff, cmb(cc_prim) },9983// tire trace, beetle adventure racing. Added by Gonetz9984// (t0-0)*shade+0, (env-cmb)*t1+shade **INC**9985{ 0xe4f18205, cmb(cc_env_sub_shade_mul_t0_add_shade) },9986// Gold Skulltula, zelda9987// (t0-0)*shade+0, (prim-env)*cmb+env9988{ 0xe4f1a053, cmb(cc_prim_sub_env_mul_t0_mul_shade_add_env) },9989// 0xe4f1a053, cmb(cc_t0_mul_prim_mul_shade) },9990// fighters, GASP Fighters9991// (t0-0)*shade+0, (1-env)*cmb+env9992{ 0xe4f1a056, cmb(cc_t0_mul_one_sub_env_mul_shade_add_env) },9993// Brian, quest649994// (t0-0)*shade+0, (cmb-0)*prim+env9995{ 0xe4f1a3f0, cmb(cc_t0_mul_prim_mul_shade_add_env) },9996// Objects in arena, pokemon stadium 29997// (t0-0)*shade+09998// (cmb-prim)*shade+env9999{ 0xe4f1a430, cmb(cc_t0_mul_shade) },10000// Monster truck madness intro. Added by Gonetz10001// (t0-0)*shade+0, (cmb-env)*shadea+env **INC**10002// 0xe4f1ab50, cmb(cc_t0_mul_shade_add_env) },10003{ 0xe4f1ab50, cmb(cc__t0_mul_shade__sub_env_mul_shadea_add_env) },10004// Taz express. Added by Gonetz10005// (t0-0)*shade+0, (cmb-env)*enva+env **INC**10006{ 0xe4f1ac50, cmb(cc_t0_mul_shade_add_env) },10007// sky in doom. Added by Gonetz10008// (t0-0)*shade+0, (cmb-0)*primlod+env **INC**10009{ 0xe4f1aef0, cmb(cc_t0_mul_shade_add_env) },10010// fighters, GASP Fighters10011// (t0-0)*shade+0, (1-env)*cmb+010012{ 0xe4f1e056, cmb(cc_t0_mul_one_sub_env_mul_shade) },10013// walls, beetle adventure racing. Added by Gonetz10014// (t0-0)*shade+0, (t0-0)*cmb+0 **INC**10015{ 0xe4f1e0f1, cmb(cc_t0_mul_shade) },10016// Link's face, zelda10017//z (t0-k5)*shade+cmb_a, (prim-k5)*cmb+cmb_a10018{ 0xe4f1e0f3, cmb(cc_t0_mul_prim_mul_shade) },10019// Link's suit, zelda10020//z (t0-k5)*shade+cmb_a, (env-k5)*cmb+cmb_a10021{ 0xe4f1e0f5, cmb(cc_t0_mul_env_mul_shade) },10022// Window, starfox10023//z (t0-k5)*shade+cmb_a, (cmb-k5)*prim+cmb_a10024{ 0xe4f1e3f0, cmb(cc_t0_mul_prim_mul_shade) },10025// crystal, Doraemon 210026//(t0-0)*shade+0, (t0-0)*prim+010027{ 0xe4f1e3f1, cmb(cc_t0_mul_prim) },10028// Characters, mace10029// (t0-0)*shade+0, (cmb-0)*shade+010030{ 0xe4f1e4f0, cmb(cc_t0_mul_shade) },10031// Super Mario 64 logo10032//z (t0-k5)*shade+cmb_a10033{ 0xe4f1e4f1, cmb(cc_t0_mul_shade) },10034// Kokiri's hat, zelda10035// (t0-0)*shade+0, (cmb-0)*env+010036{ 0xe4f1e5f0, cmb(cc_t0_mul_env_mul_shade) },10037// Gauntlet Legends intro10038// (t0-0)*shade+0, (cmb-0)*scale+010039{ 0xe4f1e6f0, cmb(cc_t0_mul_shade) },10040// Something on a tree, Paper Mario. Added by Gonetz10041// (t0-0)*shade+0, (cmb-0)*prima+010042{ 0xe4f1eaf0, cmb(cc_t0_mul_prima_mul_shade) },10043// Course map, Ridge Racer. Added by Gonetz10044// (t0-0)*shade+0, (cmb-0)*shadea+010045{ 0xe4f1ebf0, cmb(cc_t0_mul_shade_mul_shadea) },10046// Dodongo skull's eyes, zelda10047// (t0-0)*shade+0, (cmb-0)*env_alpha+010048{ 0xe4f1ecf0, cmb(cc_t0_mul_enva_mul_shade) },10049// lava, beetle adventure racing. Added by Gonetz10050// (t1-0)*shade+0, (cmb-prim)*cmb_a+prim **INC**10051{ 0xe4f26730, cmb(cc_t1_mul_shade) },10052// headlight, beetle adventure racing. Added by Gonetz10053// (t1-0)*shade+0, (env-cmb)*t0+shade **INC**10054{ 0xe4f28105, cmb(cc_one_sub__t0_mul_t1__mul_shade) },10055// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz10056// (prim-0)*shade+0, (cmb-cmb)*cmb+cmb10057{ 0xe4f30000, cmb(cc_prim_mul_shade) },10058// lamp shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz10059// (prim-0)*shade+0, (cmb-cmb)*t0+cmb10060{ 0xe4f30100, cmb(cc_prim_mul_shade) },10061// Yoshi, mario golf10062// (prim-0)*shade+0, (env-cmb)*t0+cmb10063{ 0xe4f30105, cmb(cc_env_sub_primshade_mul_t0_add_primshade) },10064//Spacestation Silicon Valley intro. Added by Gonetz10065// (prim-0)*shade+0, (env-cmb)*t1+cmb10066{ 0xe4f30205, cmb(cc_env_sub_primshade_mul_t1_add_primshade) },10067// Tip of brian's hair, quest6410068// (prim-0)*shade+0, (1-0)*env+cmb10069{ 0xe4f305f6, cmb(cc_prim_mul_shade_add_env) },10070// Background circle, xg210071// (prim-0)*shade+0, (1-cmb)*shade_a+cmb10072{ 0xe4f30b06, cmb(cc_prim_mul_shade) },10073// circle, waverace. Added by Gonetz10074// (prim-0)*shade+0, (t0-cmb)*enva+cmb10075{ 0xe4f30c01, cmb(cc_t0_sub__prim_mul_shade__mul_enva_add__prim_mul_shade) },10076// player, super bowling10077// (prim-0)*shade+0, (0-0)*k5+cmb10078{ 0xe4f30fff, cmb(cc_prim_mul_shade) },10079// walls, beetle adventure racing. Added by Gonetz10080// (prim-0)*shade+0, (cmb-shade)*t1+shade **INC**10081{ 0xe4f38240, cmb(cc_prim_sub_shade_mul_t1_add_shade) },10082// GASP fighters10083//(prim-0)*shade+0, (1-env)*cmb+010084{ 0xe4f3e056, cmb(cc_prim_mul_one_sub_env_mul_shade) },10085// Flag, mario kart10086//z (prim-k5)*shade+cmb_a10087{ 0xe4f3e4f3, cmb(cc_prim_mul_shade) },10088// Characters, smash bros10089// (prim-0)*shade+0, (cmb-0)*env+010090{ 0xe4f3e5f0, cmb(cc_prim_mul_env_mul_shade) },10091// N64 logo, ridge race. Added by Gonetz10092// (shade-0)*shade+0, (prim-cmb)*prima+cmb **INC**10093{ 0xe4f40a03, cmb(cc_shade) },10094// fighter, shield mode, bio freaks. Added by Gonetz10095// (shade-0)*shade+010096{ 0xe4f4e4f4, cmb(cc_shade) },10097// truck crush, Monster truck madness. Added by Gonetz10098// (env-0)*shade+0, (env-0)*shade+cmb10099{ 0xe4f504f5, cmb(cc_env_mul_shade) },10100// Course map, Ridge Racer. Added by Gonetz10101// (env-0)*shade+010102{ 0xe4f5e4f5, cmb(cc_env_mul_shade) },10103// lava, beetle adventure racing10104// (1-0)*shade+0, (prim-cmb)*cmb_a+cmb10105{ 0xe4f60703, cmb(cc_prim_sub_shade_mul_shadea_add_shade) },10106// the wings in the song of soaring cut-scene, zelda2 [Ogy]. Added by Gonetz10107// (1-0)*shade+0, (prim-0)*cmb+010108{ 0xe4f6e0f3, cmb(cc_prim_mul_shade) },10109// parts of vehicle, Star Wars Ep.I Racer. Added by Gonetz10110// (1-0)*shade+0, (cmb-0)*prim+010111{ 0xe4f6e3f0, cmb(cc_prim_mul_shade) },10112// Snowflakes??? (gokuss4) }, mario kart10113// (1-0)*shade+0, (1-0)*shade+010114{ 0xe4f6e4f6, cmb(cc_shade) },10115// ???10116// (noise-0)*shade+010117{ 0xe4f7e4f7, cmb(cc_shade) },10118// quest64 [Ogy]10119// (prim-t0)*env+0, (0-0)*0+prim10120{ 0xe5137fff, cmb(cc_prim) },10121// field, Mike Piazza's Strike Zone10122// (t0-prim)*env+0 ** INC **10123{ 0xe531e531, cmb(cc_t0_mul_env) },10124// Mike Piazza's Strike Zone10125// (shade-prim)*env+010126{ 0xe534e534, cmb(cc_shade_sub_prim_mul_env) },10127// rope, CBFD. Added by Gonetz10128// (t0-0)*env+0, (1-env)*prim+cmb10129{ 0xe5f10356, cmb(cc_one_sub_env_mul_prim_add__t0_mul_env) },10130// Bell, Pokemon Stadium 2. Added by Gonetz10131// (t0-0)*env+0, (shade-0)*prim+cmb10132{ 0xe5f103f4, cmb(cc_t0_mul_env_add_prim_mul_shade) },10133// aerofighter's assault [Ogy]10134// (t0-0)*env+0, (1-t0)*shade+cmb10135{ 0xe5f10416, cmb(cc_t0_mul_env_add_1mt0_mul_shade) },10136// foto, Armorines - Project S.W.A.R.M. Added by Gonetz10137// (t0-0)*env+0, (noise-0)*scale+cmb10138{ 0xe5f106f7, cmb(cc_t0_mul_env) },10139// Extreme G2, score. Added by Gonetz10140// (t0-0)*env+0, (1-cmb)*enva+cmb ** INC **10141{ 0xe5f10c06, cmb(cc_t0_mul_env) },10142// many objects in Tonic Trouble10143// (t0-0)*env+0, (shade-0)*cmb+010144{ 0xe5f1e0f4, cmb(cc_t0_mul_env_mul_shade) },10145// Flying skull's eyes, zelda10146// (t0-0)*env+0, (cmb-0)*prim+010147{ 0xe5f1e3f0, cmb(cc_t0_mul_prim_mul_env) },10148// Rock spell, quest6410149// (t0-0)*env+0, (cmb-0)*shade+010150{ 0xe5f1e4f0, cmb(cc_t0_mul_env_mul_shade) },10151// Text, mario10152//z (t0-k5)*env+cmb_a10153{ 0xe5f1e5f1, cmb(cc_t0_mul_env) },10154// kirby 64. Added by Gonetz10155// (prim-0)*env+0, (cmb-0)*shade+010156{ 0xe5f3e4f0, cmb(cc_prim_mul_env_mul_shade) },10157// wings, kirby 64. Added by Gonetz10158// (prim-0)*env+010159{ 0xe5f3e5f3, cmb(cc_prim_mul_env) },10160// Text, xg210161// (shade-0)*env+0, (1-cmb)*env_a+cmb10162{ 0xe5f40c06, cmb(cc_env_mul_shade) },10163// Text box, mario10164//z (shade-k5)*env+cmb_a10165{ 0xe5f4e5f4, cmb(cc_env_mul_shade) },10166// bomberman 64 [Ogy]10167// (1-0)*env+010168{ 0xe5f6e5f6, cmb(cc_env) },10169// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz10170// (1-t0)*scale+010171{ 0xe616e616, cmb(cc_zero) },10172// Gauntlet Legends intro. Added by Gonetz10173// (t0-0)*scale+0, (cmb-0)*shade+010174{ 0xe6f1e4f0, cmb(cc_t0_mul_shade) },10175// shadows, Taz express. Added by Gonetz10176// (t0-0)*scale+010177{ 0xe6f1e6f1, cmb(cc_t0) },10178// shadows, Knockout Kings 2000. Added by Gonetz10179// (shade-0)*scale+010180{ 0xe6f4e6f4, cmb(cc_shade) },10181// bomberman 64 2 [Ogy]. Added by Gonetz10182// (1-0)*scale+0 **INC** what "scale" is ?10183{ 0xe6f6e6f6, cmb(cc_one) },10184// walls, beetle adventure racing. Added by Gonetz10185// (t1-0)*t0_a+0, (1-t1)*cmb+t1 **INC**10186{ 0xe8f24026, cmb(cc_t1) },10187// house on rancho, zelda2. Added by Gonetz10188// (t1-0)*t0_a+0, (cmb-0)*prim+010189{ 0xe8f2e3f0, cmb(cc__t0a_mul_t1__mul_prim) },10190// zelda2 [Ogy]. Added by Gonetz10191// (t1-0)*t0_a+0, (cmb-0)*shade+010192{ 0xe8f2e4f0, cmb(cc__t0a_mul_t1__mul_shade) },10193// logo, Deadly Arts. Added by Gonetz10194// (t0-0)*t1_a+0, (cmb-0)*shade+010195{ 0xe9f1e4f0, cmb(cc__t0_mul_t1a__mul_shade) },10196// car, Roadsters. Added by Gonetz10197// (prim-t0)*prim_a+0, (prim-cmb)*shade+0 ** INC **10198{ 0xea13e403, cmb(cc_prim_sub__prim_sub_t0_mul_prima__mul_shade) },10199// arena, Pokemon Stadium 2. Added by Gonetz10200// (1-t0)*prim_a+0, (0-prim)*cmb+prim ** INC **10201{ 0xea16603f, cmb(cc_t0_mul_prim) },10202// match start, Mario Tennis. Added by Gonetz10203// (t0-0)*prim_a+0, (1-t0)*cmb+t0 ** INC **10204{ 0xeaf12016, cmb(cc_one_sub_t0_mul_prima_add_t0) },10205// blast corps [Ogy]10206// (t0-0)*prim_a+010207{ 0xeaf1eaf1, cmb(cc_t0_mul_prima) },10208// final battle, CBFD. Added by Gonetz10209// (prim-0)*prim_a+010210{ 0xeaf3eaf3, cmb(cc_prim_mul_prima) },10211// flower's stalk, Paper Mario. Added by Gonetz10212// (shade-0)*prim_a+010213{ 0xeaf4eaf4, cmb(cc_shade_mul_prima) },10214// blast corps [Ogy]10215// (noise-0)*prim_a+0, (t1-0)*shade+cmb ** INC **10216{ 0xeaf704f2, cmb(cc_t1_mul_shade) },10217// F1 World Grand Prix. Added by Gonetz10218// (noise-0)*prim_a+0, (t1-0)*env_a+cmb ** INC **10219{ 0xeaf70cf2, cmb(cc_t1_mul_enva) },10220// shadows, killer instinct gold10221// (0-0)*prim_a+010222{ 0xeaffeaff, cmb(cc_zero) },10223// Wreslters, WWF No Mercy, [CpUMasteR]10224// (t0-0)*shade_alpha+0, (env-cmb)*prim+cmb10225{ 0xebf10305, cmb(cc_t0_mul_one_sub_prim_mul_shadea_add_prim_mul_env) },10226// map, Pilot wings. Added by Gonetz10227// (t0-0)*shade_alpha+0, (1-cmb)*shade+cmb10228{ 0xebf10406, cmb(cc_one_sub_shade_mul__t0_mul_shadea__add_shade) },10229// Indy Racing 2000. Added by Gonetz10230// (t0-0)*shade_alpha+0, (1-0)*shade+cmb10231{ 0xebf104f6, cmb(cc_t0_mul_shadea_add_shade) },10232// logo, WCW-nWo Revenge10233// (t0-0)*shade_alpha+0, (cmb-0)*prim+010234{ 0xebf1e3f0, cmb(cc_t0_mul_prim_mul_shadea) },10235// Wrestlers in Game, WWF No mercy [CpUMasteR]10236// (t0-0)*shade_alpha+010237{ 0xebf1ebf1, cmb(cc_t0_mul_shadea) },10238// flag, top gear overdrive10239// (prim-0)*shade_alpha+010240{ 0xebf3ebf3, cmb(cc_prim_mul_shadea) },10241// Ropes, WWF games10242// (shade-0)*shade_alpha+0, (env-cmb)*prim+cmb10243{ 0xebf40305, cmb(cc_shade_mul_shadea) },10244// Ropes, WWF games10245// (shade-0)*shade_alpha+010246{ 0xebf4ebf4, cmb(cc_shade_mul_shadea) },10247// arena, custom robo 210248// (noise-0)*shade_alpha+010249{ 0xebf7ebf7, cmb(cc_shadea) },10250// Bell, Pokemon Stadium 2. Added by Gonetz10251// (t0-0)*enva+0, (shade-0)*prim+cmb10252{ 0xecf103f4, cmb(cc_t0_mul_enva_add_prim_mul_shade) },10253// blastcorps, unimp log. Added by Gonetz10254// (t0-0)*enva+010255{ 0xecf1ecf1, cmb(cc_t0_mul_enva) },10256// car, Top Gear Rally. Added by Gonetz10257// (env-0)*enva+010258{ 0xecf5ecf5, cmb(cc_env_mul_enva) },10259// Walls of well through lens of truth, zelda10260// (prim-t0)*primlod+0 ** INC **10261{ 0xee13ee13, cmb(cc_t0) }, // JUST t0 b/c the other combiner handles the subtraction10262// something on a flor in stone temple, zelda 2. Added by Gonetz10263// (t0-0)*primlod+0, (cmb-0)*prim+010264{ 0xeef1e3f0, cmb(cc_t0_mul_primlod_mul_prim) },10265// entrance to oceanside spider house, zelda 2. Added by Gonetz10266// (t0-0)*primlod+0, (cmb-0)*shade+010267{ 0xeef1e4f0, cmb(cc_t0_mul_primlod_mul_shade) },10268// Haze/(all powder status changers) }, Pokemon Stadium 2 [gokuss4]. Added by Gonetz10269// (noise-0)*primlod+0, (prim-env)*cmb+env ** INC **10270{ 0xeef7a053, cmb(cc_env) },10271// pokemon attack, Pokemon Stadium 2. Added by Gonetz10272// (noise-0)*primlod+0, (prim-cmb)*cmb+0 ** INC **10273{ 0xeef7e003, cmb(cc_zero) },10274// Night trees, Monster truck madness. Added by Gonetz10275// (t0-0)*k5+010276{ 0xeff1eff1, cmb(cc_t0_mul_k5) },10277// submitted by gokuss410278// (0-0)*0+0, (0-0)*0+prim10279{ 0xfffd5fe6, cmb(cc_prim) },10280// intro, Bettle Adventure Racing, [Raziel64]10281// (0-0)*0+0, (0-0)*0+t010282{ 0xffff3fff, cmb(cc_t0) },10283// Conker's face, CBFD10284// (0-0)*0+0, (shade-env)*k5+prim10285{ 0xffff6f54, cmb(cc_shade_sub_env_mul_k5_add_prim) },10286// Boost, Beetle Adventure Racing. Added by Gonetz10287// (0-0)*0+0, (0-0)*0+prim10288{ 0xffff7fff, cmb(cc_prim) },10289// headlight, beetle adventure racing. Added by Gonetz10290// (0-0)*0+0, (0-0)*0+shade10291{ 0xffff9fff, cmb(cc_shade) },10292// intro, Bettle Adventure Racing, [Raziel64]10293// (0-0)*0+0, (shade-env)*t1+env10294{ 0xffffa254, cmb(cc_shade_sub_env_mul_t1_add_env) },10295// Fly Swooping in, Pokemon Stadium 2 [gokuss4]. Added by Gonetz10296// (0-0)*0+0, (1-env)*cmb_a+env10297{ 0xffffa756, cmb(cc_env) },10298// Waterfall, Donkey Kong 6410299// (0-0)*0+0, (t0-0)*t1+010300{ 0xffffe1f2, cmb(cc_t0_mul_t1) },10301// Screen clear, banjo kazooie10302// (0-0)*0+010303{ 0xffffffff, cmb(cc_zero) },10304// { #CCEND }10305};1030610307static cmb_list_entry alpha_cmb_list[] = {10308// { #ACSTART }10309//Tony Hawk's Pro Skater. Added by Gonetz10310// (0-0)*0+010311{ 0x01ff01ff, cmb(ac_zero) },10312//terminal, Spacestation Silicon Valley. Added by Gonetz10313// (0-0)*0+0, (0-0)*0+prim10314{ 0x01ff07ff, cmb(ac_prim) },10315// kirby drill, kirby 64. Added by Gonetz10316// (0-0)*0+cmb, (0-0)*0+110317{ 0x01ff0dff, cmb(ac_one) },10318//chip in Spacestation Silicon Valley intro. Added by Gonetz10319// (0-0)*0+cmb, (prim-0)*shade+010320{ 0x01ff0f3b, cmb(ac_prim_mul_shade) },10321//Goldeneye, [Jeremy]. Added by Gonetz10322// (t0-t0)*lodf+t0, (cmb-0)*prim+010323{ 0x02090ef8, cmb(ac_t0_mul_prim) },10324// Indy Racing 2000. Added by Gonetz10325// (t1-t0)*lodf+t0, (env-cmb)*prim+cmb ** INC **10326{ 0x020a00c5, cmb(ac_t0_inter_t1_using_primlod) },10327// water, Spacestation Silicon Valley. Added by Gonetz10328// (t1-t0)*lodf+t0, (0-shade)*0+cmb10329{ 0x020a01e7, cmb(ac_t0_inter_t1_using_primlod) },10330// Bridge, sf rush10331//z (t1-t0)*lodf+t010332{ 0x020a020a, cmb(ac_t0_inter_t1_using_primlod) },10333// explosion, body harvest. Added by Gonetz10334//(t1-t0)*lodf+t0, (0-0)*0+t010335{ 0x020a03ff, cmb(ac_t0) },10336// cars, PD intro. Added by Gonetz10337// (t1-t0)*lodf+t0, (cmb-0)*shade+prim10338{ 0x020a0738, cmb(ac__t0_inter_t1_using_primlod__mul_shade_add_prim) },10339// Rocket Robot in Wheels intro10340//(t1-t0)*lodf+t0, (0-0)*0+prim10341{ 0x020a07ff, cmb(ac_prim) },10342// Iguana background ground, turok10343// (t1-t0)*lodf+t0, (0-0)*0+shade10344{ 0x020a09ff, cmb(ac_shade) },10345// Ground, monster truck madness10346// (t1-t0)*lodf+t0, (0-0)*0+env10347{ 0x020a0bff, cmb(ac_env) },10348// Taz express. Added by Gonetz10349// (t1-t0)*lodf+t0, (0-0)*0+110350{ 0x020a0dff, cmb(ac_one) },10351// Mike Piazza's Strike Zone10352// (t1-t0)*lodf+t0, (cmb-0)*t0+010353{ 0x020a0e78, cmb(ac_t0_inter_t1_using_primlod) },10354// N64 logo, tetrisphere. Added by Gonetz10355// (t1-t0)*lodf+t0, (cmb-0)*prim+010356{ 0x020a0ef8, cmb(ac__t0_inter_t1_using_primlod__mul_prim) },10357// Ground, mace10358// (t1-t0)*lodf+t0, (cmb-0)*shade+010359// { 0x020a0f38, cmb(ac_t0_mul_shade) },10360{ 0x020a0f38, cmb(ac__t0_inter_t1_using_primlod__mul_shade) },10361// blast corps [Ogy]10362// (t1-t0)*lodf+t0, (cmb-0)*env+010363{ 0x020a0f78, cmb(ac__t0_inter_t1_using_primlod__mul_env) },10364// blast corps [Ogy]10365// (t1-t0)*lodf+t0, (t0-0)*env+010366{ 0x020a0f79, cmb(ac_t0_mul_env) },10367// blast corps. Added by Gonetz10368// (t1-t0)*lodf+t0, (shade-0)*env+010369{ 0x020a0f7c, cmb(ac_env_mul_shade) },10370// field, Mike Piazza's Strike Zone10371// (t1-t0)*lodf+t0, (0-0)*0+010372{ 0x020a0fff, cmb(ac_t0_inter_t1_using_primlod) },10373// blast corps, unimp log. Added by Gonetz10374// (t1-t0)*t0+t010375{ 0x024a024a, cmb(ac_t0_inter_t1_using_t0a) },10376// zelda 2 [Ogy]. Added by Gonetz10377// (t1-t0)*t0+t0, (cmb-0)*prim+0 **INC**10378{ 0x024a0ef8, cmb(ac__t0_inter_t1_using_t0a__mul_prim) },10379// text in a menu, Twisted_Edge_Extreme_Snowboarding [Razeil64]. Added by Gonetz10380// (prim-t0)*t0+t0 **INC**10381{ 0x024b024b, cmb(ac_t0) },10382// enemy's shot, battle tanks 210383// (env-prim)*t0+t0 **INC**10384{ 0x025d025d, cmb(ac_t0) },10385//Bowser in final battle, Paper Mario. Added by Gonetz10386// (t1-env)*t0+t0, (cmb-env)*prim+0 ** INC **10387{ 0x026a0ee8, cmb(ac__t0_mul_t1__mul_prim) },10388// paper mario. Added by Gonetz10389// (t1-env)*t0+t0, (cmb-0)*prim+0 ** INC **10390{ 0x026a0ef8, cmb(ac__t0_mul_t1__mul_prim) },10391// THPS3. Added by Gonetz10392// (0-0)*t0+t010393{ 0x027f027f, cmb(ac_t0) },10394// zelda 2. Added by Gonetz10395// (0-0)*t0+t0, (cmb-0)*prim+010396{ 0x027f0ef8, cmb(ac_t0_mul_prim) },10397// teleportation, Spacestation Silicon Valley. Added by Gonetz10398// (t1-t0)*t1+t010399{ 0x028a028a, cmb(ac_t0_inter_t1_using_t1a) },10400// mega shock, paper mario. Added by Gonetz10401// (t1-t0)*t1+t0, (cmb-0)*prim+010402{ 0x028a0ef8, cmb(ac__t0_inter_t1_using_t1a__mul_prim) },10403// Magnitude, pokemon stadium 210404// (shade-t0)*t1+t0, (cmb-0)*shade+env10405{ 0x028c0b38, cmb(ac__t0_mul_t1__mul_shade) },10406// paper mario. Added by Gonetz10407// (1-t0)*t1+t0, (t1-0)*prim+0 ** INC **10408{ 0x028e0efa, cmb(ac__one_sub_t0_mul_t1_add_t0__mul_prim) },10409// { 0x028e0efa, cmb(ac_t1_mul_prim) },10410// paper mario. Added by Gonetz10411// (t1-env)*t1+t0, (cmb-0)*shade+010412{ 0x02aa0f38, cmb(ac__t0_inter_t1_using_enva__mul_shade) },10413// Scary dead boss thing, zelda10414// (env-1)*t1+t0, (cmb-0)*prim+0 * MAY need t1_inter_t0 instead...10415{ 0x02b50ef8, cmb(ac__env_sub_one_mul_t1_add_t0__mul_prim) },10416// first screen, castlevania. Added by Gonetz10417// (env-0)*t1+t0 **INC**10418{ 0x02bd02bd, cmb(ac_t0) },10419// enemy's shot, battle tanks 2 [Flash]10420// (1-0)*t1+t0, (0-0)*0+env10421{ 0x02be0bff, cmb(ac_env) },10422// battle tanks 2 [Ogy]10423// (1-0)*t1+t0, (0-0)*0+110424{ 0x02be0dff, cmb(ac_one) },10425// menu screen, Rayman2. Added by Gonetz10426// (1-0)*t1+t0, (cmb-0)*shade+010427{ 0x02be0f38, cmb(ac__t0_add_t1__mul_shade) },10428// Sky, zelda10429//z (t1-t0)*prim+t010430{ 0x02ca02ca, cmb(ac_t0_inter_t1_using_prima) },10431// F1 World Grand Prix. Added by Gonetz10432// (t1-t0)*prim+t0, (0-0)*0+110433{ 0x02ca0dff, cmb(ac_t0_inter_t1_using_prima) },10434// logo, PD. Added by Gonetz10435// (t1-t0)*prim+t0, (cmb-0)*shade+010436{ 0x02ca0f38, cmb(ac__t0_inter_t1_using_prima__mul_shade) },10437// battle tanks [Ogy]10438// (t1-t0)*prim+t0, (cmb-0)*env+010439{ 0x02ca0f78, cmb(ac__t0_inter_t1_using_prima__mul_env) },10440// logo, Deadly Arts. Added by Gonetz10441// (env-t0)*prim+t010442{ 0x02cd02cd, cmb(ac_one_sub_prim_mul_t0_add__prim_mul_env) },10443// intro, castlevania 2. Added by Gonetz10444// (1-t0)*prim+t010445{ 0x02ce02ce, cmb(ac_one_sub_t0_mul_prim_add_t0) },10446// intro, diddy kong racing. Added by Gonetz10447// (1-t0)*prim+t0, (cmb-0)*shade+0 **INC**10448{ 0x02ce0f38, cmb(ac_t0_mul_shade) },10449// submitted by Scorpiove, mario party 110450// (0-t0)*prim+t010451{ 0x02cf02cf, cmb(ac_one_sub_prim_mul_t0) },10452// Ground, pokemon stadium 210453// (t0-0)*prim+t010454{ 0x02f902f9, cmb(ac_t0_mul_prim) },10455// GASP Fighters10456// (t1-0)*prim+t0, ** INC **10457{ 0x02fa02fa, cmb(ac_t1_mul_prima_add_t0) },10458// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz10459// (t1-0)*prim+t0, (cmb-0)*shade+010460{ 0x02fa0f38, cmb(ac__t1_mul_prima_add_t0__mul_shade) },10461// Paper Mario, fortune teller10462// (t1-0)*prim+t0, (cmb-0)*env+010463{ 0x02fa0f78, cmb(ac__t1_mul_prima_add_t0__mul_env) },10464// map, Ogre Battle 64. Added by Gonetz10465// (1-0)*prim+t010466{ 0x02fe02fe, cmb(ac_t0_add_prim) },10467// borders, Tony Hawk's Pro Skater 2. Added by Gonetz10468// (t1-t0)*shade+t0 ** INC **10469{ 0x030a030a, cmb(ac_t0_inter_t1_using_shadea) },10470// Mickey USA10471// (t1-t0)*shade+t0, (cmb-0)*prim+0 ** INC **10472{ 0x030a0ef8, cmb(ac__t0_inter_t1_using_shadea__mul_prim) },10473// Rocket Robot in Wheels intro10474// (t1-t0)*shade+t0, (cmb-0)*env+0 ** INC **10475{ 0x030a0f78, cmb(ac__t0_inter_t1_using_shadea__mul_env) },10476// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz10477// (1-t0)*shade+t0, (cmb-0)*shade+0 ** INC **10478{ 0x030e0f38, cmb(ac_t0_mul_shade) },10479// sky, f-zero x10480// (0-t0)*shade+t010481{ 0x030f030f, cmb(ac_one_sub_shade_mul_t0) },10482// Deku tree from kokiri villiage, zelda10483//z (t1-t0)*env+t0, (t1-0)*primlod+cmb10484{ 0x034a01ba, cmb(ac_t0_inter_t1_using_enva) },10485// Hearts, zelda10486//z (t1-t0)*env+t010487{ 0x034a034a, cmb(ac_t0_inter_t1_using_enva) },10488// Faries, zelda10489//z (t1-t0)*env+t0, (cmb-0)*prim+010490{ 0x034a0ef8, cmb(ac__t0_inter_t1_using_enva__mul_prim) },10491// zelda, waterfall. Added by Gonetz10492//z (t1-t0)*env+t0, (cmb-0)*shade+010493{ 0x034a0f38, cmb(ac__t0_inter_t1_using_enva__mul_shade) },10494// pokemon stadium 1. Added by Gonetz10495//(t1-t0)*env+t0, (cmb-0)*primlod+010496{ 0x034a0fb8, cmb(ac__t0_inter_t1_using_enva__mul_primlod) },10497// fruits, Yoshi Story. Added by Gonetz10498//(prim-t0)*env+t010499{ 0x034b034b, cmb(ac_prim_sub_t0_mul_env_add_t0) },10500// window, Rayman2. Added by Gonetz10501//(1-t0)*env+t010502{ 0x034e034e, cmb(ac_one_sub_t0_mul_env_add_t0) },10503// menu, PokemonStadium1, [Raziel64]10504//(1-t0)*env+t0, (cmb-0)*shade+0 ** INC **10505{ 0x034e0f38, cmb(ac_t0_mul_shade) },10506// Ganon's sword swinging, zelda10507// (t0-t1)*env+t0, (cmb-0)*prim+0 ** INC **10508{ 0x03510ef8, cmb(ac__t0_sub_t1_mul_enva_add_t0__mul_prim) },10509// Lave piranha atack, Paper Mario10510// (t1-prim)*env+t0, (0-cmb)*t1+0 ** INC **10511{ 0x035a0e87, cmb(ac_t0_mul_t1) },10512// Reflected fire at kotake & koume's, zelda10513// (t0-1)*env+t0, (cmb-0)*prim+0 ** INC **10514{ 0x03710ef8, cmb(ac__t0_sub_one_mul_enva_add_t0__mul_prim) },10515// thing that escapes from the well, zelda10516// (t1-1)*env+t0 ** INC **10517{ 0x03720372, cmb(ac_t1_sub_one_mul_enva_add_t0) },10518// Sword charge, zelda10519// (t1-1)*env+t0, (cmb-0)*prim+010520{ 0x03720ef8, cmb(ac__t1_sub_one_mul_enva_add_t0__mul_prim) },10521// Gannon hitting the ground, zelda10522// (t1-1)*env+t0, (cmb-0)*shade+0 ** INC **10523{ 0x03720f38, cmb(ac__t1_sub_one_mul_enva_add_t0__mul_shade) },10524// Tony Hawk's Pro Skater 3. Added by Gonetz10525// (t0-0)*env+t010526{ 0x03790379, cmb(ac_t0_mul_env) },10527// paper mario. Added by Gonetz10528// (t0-0)*env+t0, (cmb-0)*prim+010529{ 0x03790ef8, cmb(ac_t0_mul_prim) },10530// pads, Pokemon Stadium 2. Added by Gonetz10531// (t1-0)*env+t0, (cmb-0)*prim+env ** INC **10532{ 0x037a0af8, cmb(ac__t0_inter_t1_using_enva__mul_prim_add_env) },10533// Ice arrow gfx, zelda10534// (t1-0)*env+t0, (cmb-0)*prim+010535{ 0x037a0ef8, cmb(ac__t1_mul_enva_add_t0__mul_prim) },10536// Scary face move, pokemon stadium 210537// (t1-0)*env+t0, (cmb-prim)*shade+010538{ 0x037a0f18, cmb(ac__t0_inter_t1_using_enva__mul_prim_mul_shade) },10539// Saria's song, zelda10540// (t1-0)*env+t0, (cmb-0)*shade+010541{ 0x037a0f38, cmb(ac__t1_mul_enva_add_t0__mul_shade) },10542// eye drops bottle, zelda10543// (t0-t0)*prim_lodfrac+t010544{ 0x03890389, cmb(ac_t0) },10545// lighthouse's beam, zelda 2. Added by Gonetz10546// (t0-t0)*prim_lodfrac+t0, (cmb-0)*prim+010547{ 0x03890ef8, cmb(ac_t0_mul_prim) },10548// zelda 2. Added by Gonetz10549// (t1-t0)*primlod+t0, (cmb-0)*env+cmb ** INC **10550{ 0x038a0178, cmb(ac__t0_inter_t1_using_primlod__mul_env_add__t0_inter_t1_using_primlod) },10551// Enter name letter background, zelda10552//z (t1-t0)*primlod+t010553{ 0x038a038a, cmb(ac_t0_inter_t1_using_primlod) },10554// Sunny Day, Pokemon Stadium 2 [gokuss4]. Added by Gonetz10555// (t1-t0)*primlod+t0, (cmb-0)*0+prim ** INC **?10556{ 0x038a07f8, cmb(ac_t0_inter_t1_using_primlod) },10557// blastcorps, unimp log. Added by Gonetz10558// (t1-t0)*primlod+t0, (0-0)*0+shade **INC**?10559{ 0x038a09ff, cmb(ac_t0_inter_t1_using_primlod) },10560// sky, PGA European Tour10561// (t1-t0)*primlod+t0, (0-0)*0+110562{ 0x038a0dff, cmb(ac_one) },10563// Ice surrounding enemy, zelda10564// (t1-t0)*primlod+t0, (env-0)*lodf+010565{ 0x038a0e3d, cmb(ac__t0_inter_t1_using_primlod__mul_env) },10566// the bridge out side the mountain smithy shop, zelda 2 [Ogy]. Added by Gonetz10567// (t1-t0)*primlod+t0, (cmb-0)*t0+010568{ 0x038a0e78, cmb(ac_t0_inter_t1_using_primlod) },10569// zelda 2, [Ogy]. Added by Gonetz10570// (t1-t0)*primlod+t0, (cmb-0)*t1+010571{ 0x038a0eb8, cmb(ac_t0_inter_t1_using_primlod) },10572// Kirby's pool, smash bros10573// (t1-t0)*primlod+t0, (cmb-0)*prim+010574{ 0x038a0ef8, cmb(ac__t0_inter_t1_using_primlod__mul_prim) },10575// Samus stage fire, smash bros10576// (t1-t0)*primlod+t0, (cmb-0)*shade+010577{ 0x038a0f38, cmb(ac__t0_inter_t1_using_primlod__mul_shade) },10578// something about ice, zelda10579// (t1-t0)*primlod+t0, (cmb-0)*env+010580{ 0x038a0f78, cmb(ac__t0_inter_t1_using_primlod__mul_env) },10581// Blast Corps. Added by Gonetz10582// (t1-t0)*primlod+t0, (shade-0)*env+010583{ 0x038a0f7c, cmb(ac_env_mul_shade) },10584// goals, J. League Tactics Soccer. Added by Gonetz10585// (prim-t0)*primlod+t0 ** INC **10586{ 0x038b038b, cmb(ac_t0) },10587// zelda 2, [Ogy]. Added by Gonetz10588// (t0-t1)*primlod+t0, (cmb-0)*prim+010589{ 0x03910ef8, cmb(ac__t0_sub_t1_mul_primlod_add_t0__mul_prim) },10590// a plane in the entrance to the mountain village zelda 2, [Ogy]. Added by Gonetz10591// (t1-t1)*primlod+t0, (cmb-0)*prim+0 ** INC **?10592{ 0x03920ef8, cmb(ac_t0_mul_prim) },10593// zelda 2. Added by Gonetz10594// (t1-prim)*primlod+t0, (cmb-0)*prim+0 ** INC **10595{ 0x039a0ef8, cmb(ac__t1_sub_prim_mul_primlod_add_t0__mul_prim) },10596// zelda 2. Added by Gonetz10597// (t1-shade)*primlod+t0, (cmb-0)*shade+0 ** INC **10598{ 0x03a20f38, cmb(ac__t1_sub_shade_mul_primlod_add_t0__mul_shade) },10599// Candle flame in ganon's castle, zelda10600// (t1-1)*primlod+t0 ** INC **10601{ 0x03b203b2, cmb(ac_t1_sub_one_mul_primlod_add_t0) },10602// Fire, zelda10603//z (t1-1)*primlod+t0, (cmb-0)*prim+0 ** INC **10604{ 0x03b20ef8, cmb(ac__t1_sub_one_mul_primlod_add_t0__mul_prim) },10605// explosion, zelda 2. Added by Gonetz10606// (t1-1)*primlod+t0, (t0-0)*prim+0 ** INC **10607{ 0x03b20ef9, cmb(ac_t0_mul_prim) },10608// Din's fire, zelda10609// (t1-1)*prim_lodfrac+t0, (cmb-0)*shade+0 ** INC **10610{ 0x03b20f38, cmb(ac__t1_sub_one_mul_primlod_add_t0__mul_shade) },10611// Fire cloud, zelda10612// (t1-1)*prim_lodfrac+t0, (cmb-0)*env+0 ** INC **10613{ 0x03b20f78, cmb(ac__t1_sub_one_mul_primlod_add_t0__mul_env) },10614// zelda 2 [Ogy]. Added by Gonetz10615// (prim-1)*prim_lodfrac+t0, (cmb-0)*env+0 ** INC **10616{ 0x03b30f78, cmb(ac__prim_sub_one_mul_primlod_add_t0__mul_env) },10617// fairy's spirit, zelda oot10618// (t0-0)*primlod+t010619{ 0x03b903b9, cmb(ac_t0_mul_primlod_add_t0) },10620// Scary face, pokemon stadium 210621// (t0-0)*primlod+t0, (cmb-0)*prim+010622{ 0x03b90ef8, cmb(ac_t0_mul_prim) },10623// Leftovers Recovery, Pokemon Stadium 2 [gokuss4]. Added by Gonetz10624// (t1-0)*prim_lodfrac+t0, (cmb-env)*prim+0 ** INC **10625{ 0x03ba0ee8, cmb(ac__t1_mul_primlod_add_t0__sub_env_mul_prim) },10626// zelda 2 [Ogy]. Added by Gonetz10627// (t1-0)*prim_lodfrac+t0, (cmb-0)*prim+010628{ 0x03ba0ef8, cmb(ac__t1_mul_primlod_add_t0__mul_prim) },10629// zelda 2 [Ogy]. Added by Gonetz10630// (t1-0)*prim_lodfrac+t0, (cmb-0)*shade+010631{ 0x03ba0f38, cmb(ac__t1_mul_primlod_add_t0__mul_shade) },10632// chuchu monsters, zelda 2 [Ogy]. Added by Gonetz10633// (t1-0)*prim_lodfrac+t0, (cmb-0)*env+010634{ 0x03ba0f78, cmb(ac__t1_mul_primlod_add_t0__mul_env) },10635// Scary face, pokemon stadium 210636// (env-0)*primlod+t0, (cmb-0)*prim+010637{ 0x03bd0ef8, cmb(ac_t0_mul_prim) },10638// ground, zelda 2. Added by Gonetz10639// (t1-t0)*0+t0, (cmb-0)*0+cmb10640{ 0x03ca01f8, cmb(ac_t0) },10641// zelda 2. Added by Gonetz10642// (t1-t0)*0+t0, (cmb-0)*prim+010643{ 0x03ca0ef8, cmb(ac_t0_mul_prim) },10644// smoke in a night, zelda 2. Added by Gonetz10645// (t1-t0)*0+t0, (cmb-0)*shade+010646{ 0x03ca0f38, cmb(ac_t0_mul_shade) },10647//the ice plane out side the mountain smithy shop, zelda 2 [Ogy]. Added by Gonetz10648//(t1-1)*0+t0, (cmb-0)*env+010649{ 0x03f20f78, cmb(ac_t0_mul_env) },10650//something on level 5, Kirby64 [Raziel64]10651//(t0-0)*0+t010652{ 0x03f903f9, cmb(ac_t0) },10653//spider house, zelda 2 [Ogy]. Added by Gonetz10654//(t0-0)*0+t0, (cmb-0)*prim+010655{ 0x03f90ef8, cmb(ac_t0_mul_prim) },10656//Darmani's fire spin, zelda 2 [Ogy]. Added by Gonetz10657//(t1-0)*0+t0, (cmb-0)*prim+010658{ 0x03fa0ef8, cmb(ac_t0_mul_prim) },10659// headlight, beetle adventure racing. Added by Gonetz10660//(1-0)*0+t010661{ 0x03fe03fe, cmb(ac_t0) },10662// player, super bowling10663// (0-0)*0+t0,10664{ 0x03ff0000, cmb(ac_t0) },10665// Ghost's lantern, zelda10666// (0-0)*0+t0, (t1-0)*prim_lod+cmb10667{ 0x03ff01ba, cmb(ac_t1_mul_primlod_add_t0) },10668// Hand cursor, mario10669//z (0-0)*0+t010670{ 0x03ff03ff, cmb(ac_t0) },10671// Taz express. Added by Gonetz10672// (0-0)*0+t0, (0-0)*0+t110673{ 0x03ff05ff, cmb(ac_t0) },10674// powder keg, zelda2. Added by Gonetz10675// (0-0)*0+t0, (0-0)*0+prim10676{ 0x03ff07ff, cmb(ac_t0) },10677// water, Spacestation Silicon Valley. Added by Gonetz10678// (0-0)*0+t0, (0-0)*0+shade10679{ 0x03ff09ff, cmb(ac_t0) },10680// Characters, Ogre Battle. Added by Gonetz.10681// (0-0)*0+t0, (cmb-0)*prim+env10682{ 0x03ff0af8, cmb(ac_t0_mul_prim_add_env) },10683// Monster truck madness intro. Added by Gonetz10684// (0-0)*0+t0, (0-0)*0+env10685{ 0x03ff0bff, cmb(ac_t0) },10686// Zoras, zelda10687// (0-0)*0+t0, (env-0)*lodf+010688{ 0x03ff0e3d, cmb(ac_env) },10689// logo, v-rally 9910690// (0-0)*0+t0, (prim-0)*t0+010691{ 0x03ff0e7b, cmb(ac_t0_mul_prim) },10692// intro, WWF-War Zone10693// (0-0)*0+t0, (env-0)*t0+010694{ 0x03ff0e7d, cmb(ac_t0_mul_env) },10695// Window, starfox10696//z (0-0)*0+t0, (cmb-0)*prim+010697{ 0x03ff0ef8, cmb(ac_t0_mul_prim) },10698//beetle adventure racing. Added by Gonetz10699// (0-0)*0+t0, (cmb-0)*shade+010700{ 0x03ff0f38, cmb(ac_t0_mul_shade) },10701// Wonder Project J2 logo. Added by Gonetz10702// (0-0)*0+t0, (t0-0)*shade+010703{ 0x03ff0f39, cmb(ac_t0_mul_shade) },10704// Saria's suit, zelda10705// (0-0)*0+t0, (cmb-0)*env+010706{ 0x03ff0f78, cmb(ac_t0_mul_env) },10707// Pokemon Stadium 2, [Jeremy]. Added by Gonetz10708// (0-0)*0+t0, (cmb-0)*primlod+010709{ 0x03ff0fb8, cmb(ac_t0_mul_primlod) },10710// Tony Hawk's Pro Skater. Added by Gonetz10711// (0-0)*0+t0, (0-0)*0+010712{ 0x03ff0fff, cmb(ac_zero) },10713// Powered Star Beam, Paper Mario. Added by Gonetz10714// (t0-t1)*t0+t1, (cmb-0)*prim+0 **INC**10715{ 0x04510ef8, cmb(ac__t1_inter_t0_using_t0a__mul_prim) },10716// Deadly Arts logo. Added by Gonetz10717// (1-0)*t0+t1, (1-0)*prim+cmb10718{ 0x047e00fe, cmb(ac__t0_add_t1__add_prim) },10719// Spiderman. Added by Gonetz10720// (1-0)*t0+t110721{ 0x047e047e, cmb(ac_t0_add_t1) },10722// water, Dobutsu no Mori. Added by Gonetz10723// (1-0)*t0+t1, (cmb-0)*primlod+prim10724{ 0x047e07b8, cmb(ac__t0_add_t1__mul_primlod_add_prim) },10725// paper mario. Added by Gonetz10726// (1-t0)*t1+t1, (cmb-0)*t1+0 **INC**10727{ 0x048e0eb8, cmb(ac_t0_mul_t1) },10728// Pokemon Stadium 2. Added by Gonetz10729// (t0-prim)*t1+t1, (cmb-0)*shade+0 **INC**10730{ 0x04990f38, cmb(ac_t1_mul_shade) },10731// light, Dobutsu no Mori. Added by Gonetz10732// (t0-0)*t1+t1, (cmb-0)*primlod+0 ** INC **10733{ 0x04b90fb8, cmb(ac__t0_add_t1__mul_primlod) },10734// lava, beetle adventure racing10735// (t1-0)*t1+t1, (cmb-0)*shade+0 ** INC **10736{ 0x04ba0f38, cmb(ac__t1_mul_t1_add_t1__mul_shade) },10737// wheels, F1 World Grand Prix. Added by Gonetz10738// (t0-t1)*prim+t110739{ 0x04d104d1, cmb(ac_t1_inter_t0_using_prima) },10740// intro, castlevania 2. Added by Gonetz10741// (t0-t1)*prim+t1, (cmb-0)*shade+010742{ 0x04d10f38, cmb(ac__t1_inter_t0_using_prima__mul_shade) },10743// flame, castlevania 2. Added by Gonetz10744// (t0-t1)*prim+t1, (cmb-0)*env+010745{ 0x04d10f78, cmb(ac__t1_inter_t0_using_prima__mul_env) },10746// walls, beetle adventure racing. Added by Gonetz10747// (t0-0)*prim+t1 **INC**10748{ 0x04f904f9, cmb(ac_t0_mul_prim) },10749// Reflect pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz10750// (t0-0)*prim+t1, (cmb-0)*prim+env **INC**10751{ 0x04f90af8, cmb(ac__t0_add_t1__mul_prim_add_env) },10752// Psychic pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz10753// (t0-0)*prim+t1, (cmb-0)*shade+0 **INC**10754{ 0x04f90f38, cmb(ac__t0_add_t1__mul_shade) },10755// Rayman2. Added by Gonetz10756// (0-0)*shade+t1, (cmb-0)*env+010757{ 0x053f0f78, cmb(ac_t1_mul_env) },10758// Ground at kotake & koume, zelda10759// (t1-t0)*env+t1, (cmb-0)*prim+0 ** INC **10760{ 0x054a0ef8, cmb(ac__t1_sub_t0_mul_enva_add_t1__mul_prim) },10761// Tony Hawk's Pro Skater. Added by Gonetz10762// (t0-t1)*env+t110763{ 0x05510551, cmb(ac_t1_inter_t0_using_enva) },10764// Shiek's disappearance, zelda10765// (t0-1)*env+t110766{ 0x05710571, cmb(ac_t0_sub_one_mul_enva_add_t1) },10767// Kotake or koume's magic poof, zelda10768// (t0-1)*env+t1, (cmb-0)*prim+0 ** INC **10769{ 0x05710ef8, cmb(ac__t0_sub_one_mul_enva_add_t1__mul_prim) },10770// Gauntlet Legends intro10771// (t0-0)*env+t1, (cmb-0)*prim+0 ** INC **10772{ 0x05790ef8, cmb(ac__t0_add_t1__mul_prim) },10773// Zelda opening door, zelda10774// (t0-0)*env+t1, (cmb-0)*shade+010775{ 0x05790f38, cmb(ac_t1_mul_shade) },10776// paper mario. Added by Gonetz10777// (t1-0)*env+t1, (cmb-0)*prim+0 ** INC **10778{ 0x057a0ef8, cmb(ac_t1_mul_prim) },10779// Skulltula coin, zelda10780// (t0-1)*primlod+t1 ** INC **10781{ 0x05b105b1, cmb(ac_t0_mul_t1) },10782// Bell, Pokemon Stadium 2. Added by Gonetz10783// (t0-0)*primlod+t1, (cmb-env)*prim ** INC **10784{ 0x05b90ee8, cmb(ac__t0_add_t1__mul_prim) },10785// intro, Aidyn Chronicles. Added by Gonetz10786// (0-cmb)*0+t1, (t1-1)*0+cmb10787{ 0x05c701f2, cmb(ac_t1) },10788// zelda 2 [Ogy]. Added by Gonetz10789// (t1-t0)*0+t1, (cmb-0)*prim+010790{ 0x05ca0ef8, cmb(ac_t1_mul_prim) },10791// beaver's river, zelda 2. Added by Gonetz10792// (t1-0)*0+t1, (cmb-0)*prim+010793{ 0x05fa0ef8, cmb(ac_t1_mul_prim) },10794// Ogre Battle, unimp log. Added by Gonetz10795// (0-0)*0+t1, (0-0)*0+cmb10796{ 0x05ff05ff, cmb(ac_t1) },10797// lullaby, Paper Mario. Added by Gonetz10798// (0-0)*0+t1, (cmb-0)*prim+010799{ 0x05ff0ef8, cmb(ac_t1_mul_prim) },10800// aerofighter's assault [Ogy]10801// (0-0)*0+t1, (cmb-0)*shade+010802{ 0x05ff0f38, cmb(ac_t1_mul_shade) },10803// magic fist, Rayman2. Added by Gonetz10804// (0-0)*0+t1, (cmb-0)*env+010805{ 0x05ff0f78, cmb(ac_t1_mul_env) },10806// Pokemon selection background, Pokemon stadium 210807// (env-prim)*t0+prim10808{ 0x065d065d, cmb(ac_env_sub_prim_mul_t0_add_prim) },10809// text background, Ganbare Goemon - Mononoke Sugoroku10810// (1-prim)*t0+prim10811{ 0x065e065e, cmb(ac_one_sub_prim_mul_t0_add_prim) },10812// shadows, star wars: ep1 racer10813// (0-prim)*t0+prim10814{ 0x065f065f, cmb(ac_zero_sub_prim_mul_t0_add_prim) },10815// lava, beetle adventure racing10816// (0-1)*t0+prim, (cmb-0)*prim+0 ** INC **10817{ 0x06770ef8, cmb(ac_t0_mul_prim) },10818// menu, Ganbare Goemon - Mononoke Sugoroku10819// (t0-0)*t0+prim10820{ 0x06790679, cmb(ac_t0_add_prim) },10821// Water, pokemon stadium 210822// (t1-0)*t0+prim10823{ 0x067a067a, cmb(ac_t0_mul_t1_add_prim) },10824// Smackdown Mall Menu, WWF No Mercy10825// (shade-0)*t0+prim10826{ 0x067c067c, cmb(ac_t0_mul_shade_add_prim) },10827// flag, Top Gear Rally 2. Added by Gonetz10828// (env-0)*t0+prim10829{ 0x067d067d, cmb(ac_t0_mul_env_add_prim) },10830// Mario Tennis. Added by Gonetz10831// (1-0)*t0+prim10832{ 0x067e067e, cmb(ac_t0_add_prim) },10833// sky, PGA European Tour10834// (t0-0)*t1+prim10835{ 0x06b906b9, cmb(ac_t0_mul_t1_add_prim) },10836// lava, beetle adventure racing10837// (t0-0)*t1+prim, (0-0)*0+1 **INC**?10838{ 0x06b90dff, cmb(ac_one) },10839// Pokemon Stadium 2, [Jeremy]. Added by Gonetz10840// (prim-0)*t1+prim10841{ 0x06bb06bb, cmb(ac_t1_mul_prim_add_prim) },10842// pokemon psyattack, Pokemon Stadium 2. Added by Gonetz10843// (1-0)*t1+prim, (cmb-0)*env+010844{ 0x06be0f78, cmb(ac_t1_add_prim_mul_env) },10845// Rush2 2. Added by Gonetz10846// (prim-prim)*prim+prim10847{ 0x06db06db, cmb(ac_prim) },10848//Spacestation Silicon Valley intro. Added by Gonetz10849// (t1-prim)*shade+prim10850// { 0x071a071a, cmb(ac_t1_mul_shade) },10851{ 0x071a071a, cmb(ac_t1_sub_prim_mul_shade_add_prim) },10852//KI logos. Added by Gonetz10853// (env-prim)*shade+prim10854{ 0x071d071d, cmb(ac_env_sub_prim_mul_shade_add_prim) },10855// Deadly Arts, arena. Added by Gonetz10856// (1-0)*shade+prim10857{ 0x073e073e, cmb(ac_prim_add_shade) },10858// Phantom Gannon's portal, zelda10859// (t1-t0)*env+prim, (cmb-0)*shade+0 ** INC **10860{ 0x074a0f38, cmb(ac__t0_mul_t1__mul_prim_mul_shade) },10861// Road rush. Added by Gonetz10862// (t0-0)*env+prim10863{ 0x07790779, cmb(ac_t0_mul_env_add_prim) },10864// telescope, zelda 2. Added by Gonetz10865// (1-t0)*primlod+prim10866{ 0x078e078e, cmb(ac_one_sub_t0_mul_primlod_add_prim) },10867// zelda 2 [Ogy]. Added by Gonetz10868// (t0-t1)*primlod+prim, (cmb-0)*t0+010869{ 0x07910e78, cmb(ac_t0_inter_t1_using_primlod) },10870// Dobutsu no Mori. Added by Gonetz10871// (t0-0)*primlod+prim10872{ 0x07b907b9, cmb(ac_t0_mul_primlod_add_prim) },10873// water, DK6410874// (0-0)*0+0, (0-t1)*0+prim10875{ 0x07d707d7, cmb(ac_prim) },10876// Menu, megaman10877// (1-0)*0+prim10878{ 0x07fe07fe, cmb(ac_prim) },10879// super bowling10880//(0-0)*0+prim,10881{ 0x07ff0000, cmb(ac_prim) },10882// menu, Ganbare Goemon - Mononoke Sugoroku10883// (0-0)*0+prim, (0-0)*0+t010884{ 0x07ff03ff, cmb(ac_t0) },10885// Intro background, starfox10886//z (0-0)*0+prim10887{ 0x07ff07ff, cmb(ac_prim) },10888// gem, castlevania 2. Added by Gonetz10889// (0-0)*0+prim, (cmb-0)*t0+010890{ 0x07ff0e78, cmb(ac_t0_mul_prim) },10891// text, Tony Hawk's Pro Skater. Added by Gonetz10892// (0-0)*0+prim, (cmb-0)*t1+010893{ 0x07ff0eb8, cmb(ac_t1_mul_prim) }, //weird, but implementing this makes text unreadable10894// zelda 2. Added by Gonetz10895// (0-0)*0+prim, (cmb-0)*prim+010896{ 0x07ff0ef8, cmb(ac_prim_mul_prim) },10897// explosion, Blast Corps. Added by Gonetz10898// (0-0)*0+prim, (t0-0)*prim+010899{ 0x07ff0ef9, cmb(ac_t0_mul_prim) },10900// zelda 2, [Ogy]. Added by Gonetz10901// (0-0)*0+prim, (cmb-0)*shade+010902{ 0x07ff0f38, cmb(ac_prim_mul_shade) },10903// Fox's ears and arms, smash bros10904// (0-0)*0+prim, (cmb-0)*env+010905{ 0x07ff0f78, cmb(ac_prim_mul_env) },10906// monsters, Pokemon Stadium. Added by Gonetz10907// (0-0)*0+prim, (cmb-0)*primlod+010908{ 0x07ff0fb8, cmb(ac_prim_mul_primlod) },10909// focus, Paper Mario. Added by Gonetz10910//(t0-shade)*t0+shade, (cmb-0)*prim+0 * INC **10911{ 0x08610ef8, cmb(ac_t0_mul_prim) },10912// Mario's head, mario //Added by Gonetz10913//(prim-shade)*t0+shade10914{ 0x08630863, cmb(ac_prim_sub_shade_mul_t0_add_shade) },10915// Earthquake pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz10916//(t0-t1)*prim+shade, (cmb-0)*shade+0 ** INC **10917{ 0x08d10f38, cmb(ac_t0_mul_prim_mul_shade) },10918// ?10919//(t0-shade)*prim+shade10920{ 0x08e108e1, cmb(ac_t0_mul_prim_add_shade_mul_one_minus_prim) },10921// Paper Mario10922// (t0-prim)*shade+shade, (cmb-0)*env+010923{ 0x09190f78, cmb(ac__t0_sub_prim_mul_shade_add_shade__mul_env) },10924// pads, Pokemon Stadium 2. Added by Gonetz10925// (0-t0)*env+shade, (cmb-0)*prim+0 ** INC **10926{ 0x094f0ef8, cmb(ac_one_sub_t0_mul_prim_mul_shade) },10927// Huge turtle appearance, zelda 2. Added by Gonetz10928// (t1-0)*primlod+shade, (cmb-0)*shade+0 ** INC **10929{ 0x09ba0f38, cmb(ac_t1_mul_shade) },10930// roof, Kirby 64. Added by Gonetz10931// (t0-0)*0+shade10932{ 0x09f909f9, cmb(ac_shade) },10933// water, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz10934// (0-0)*0+shade, (cmb-cmb)*lodf+cmb10935{ 0x09ff0000, cmb(ac_shade) },10936// water temple, zelda 2. Added by Gonetz10937// (0-0)*0+shade, (cmb-0)*prim+cmb10938{ 0x09ff00f8, cmb(ac_prim_mul_shade_add_shade) },10939// damaged car, SCARS. Added by Gonetz10940// (0-0)*0+shade, (t0-t1)*primlod+prim ** INC **10941{ 0x09ff0791, cmb(ac_t0_mul_primlod_add_prim) },10942// Hyrule castle gate, zelda10943//z (0-0)*0+shade, (0-0)*0+prim10944{ 0x09ff07ff, cmb(ac_prim) },10945// Super Mario 64 logo10946//z (0-0)*0+shade10947{ 0x09ff09ff, cmb(ac_shade) },10948// terrain, SCARS. Added by Gonetz10949// (0-0)*0+shade, (0-0)*0+110950{ 0x09ff0dff, cmb(ac_one) },10951// terrain, SCARS. Added by Gonetz10952// (0-0)*0+shade, (t0-0)*t1+010953{ 0x09ff0eb9, cmb(ac_t0_mul_t1) },10954// N64 logo, Aidyn Chronicles. Added by Gonetz10955// (0-0)*0+shade, (cmb-0)*prim+010956{ 0x09ff0ef8, cmb(ac_prim_mul_shade) },10957// birds?, custom robo. Added by Gonetz10958// (0-0)*0+shade, (cmb-0)*shade+010959{ 0x09ff0f38, cmb(ac_shade) },10960// sky, Glover, [Raziel64]. Added by Gonetz10961// (0-0)*0+shade, (t0-0)*shade+010962{ 0x09ff0f39, cmb(ac_t0_mul_shade) },10963// Hand, smash bros10964// (0-0)*0+shade, (cmb-0)*env+010965{ 0x09ff0f78, cmb(ac_env_mul_shade) },10966// Conker's helicopter tail, CBFD10967// (0-0)*0+shade, (shade-0)*env+010968{ 0x09ff0f7c, cmb(ac_env_mul_shade) },10969// menu, PokemonStadium1, [Raziel64]10970// (0-0)*0+shade, (cmb-0)*primlod+010971{ 0x09ff0fb8, cmb(ac_primlod_mul_shade) },10972// Link's sword slashing, smash bros10973// (prim-env)*t0+env10974{ 0x0a6b0a6b, cmb(ac_prim_sub_env_mul_t0_add_env) },10975// Reflected beam at kotake & koume's, zelda10976// (prim-env)*t0+env, (cmb-0)*prim+0 ** INC **10977{ 0x0a6b0ef8, cmb(ac_t0_mul_prim) },10978// teleporter, Spacestation Silicon Valley. Added by Gonetz10979// (prim-env)*t0+env, (cmb-0)*shade+0 ** INC **10980{ 0x0a6b0f38, cmb(ac_t0_mul_shade) },10981// Ridge Racer, unimp log. Added by Gonetz10982// (prim-env)*t0+env, (cmb-0)*primlod+010983{ 0x0a6b0fb8, cmb(ac_prim_sub_env_mul_t0_add_env) },10984// Kotake or koume's hair, zelda10985// (prim-0)*t0+env10986{ 0x0a7b0a7b, cmb(ac_t0_mul_prim_add_env) },10987// menu, doubut no mori10988// (1-0)*t0+env10989{ 0x0a7e0a7e, cmb(ac_t0_add_env) },10990// Grass, mario golf10991// (env-shade)*t1+env, (0-0)*0+110992{ 0x0aa50dff, cmb(ac_one) },10993// Ridge Racer, cars select. Added by Gonetz10994// (prim-env)*t1+env10995{ 0x0aab0aab, cmb(ac_prim_sub_env_mul_t1_add_env) },10996// text, monster truck madness10997// (prim-env)*t1+env, (cmb-0)*t1+010998{ 0x0aab0eb8, cmb(ac_t1_mul_env) },10999// zelda 2 [Ogy]. Added by Gonetz11000// (1-0)*t1+env, (0-0)*0+cmb11001{ 0x0abe0abe, cmb(ac_one) },11002// { 0x0abe0abe, cmb(ac_t1_add_env) },11003// arena, Pokemon Stadium 2. Added by Gonetz11004// (1-t0)*prim+env, (cmb-0)*shade+011005{ 0x0ace0f38, cmb(ac_one_sub_t0_mul_prim_mul_shade) },11006// intro, Bomberman 64 - 2. Added by Gonetz11007// (t0-env)*prim+env11008{ 0x0ae90ae9, cmb(ac_t0_sub_env_mul_prim_add_env) },11009// N64 logo, Ogre Battle. Added by Gonetz11010// (t0-0)*prim+env11011{ 0x0af90af9, cmb(ac_t0_mul_prim_add_env) },11012// girls, PD intro. Added by Gonetz11013// (t0-env)*shade+env ** INC **11014{ 0x0b290b29, cmb(ac_t0_mul_shade_add_env) },11015// shadows, Mario Tennis. Added by Gonetz11016// (prim-env)*shade+env, (0-cmb)*t1+cmb ** INC **11017{ 0x0b2b0087, cmb(ac_prim_sub_env_mul_shade_add_env_mul_t1) },11018// lamppost?, Ridge Racer. Added by Gonetz11019// (prim-env)*shade+env, (0-0)*0+cmb11020{ 0x0b2b0b2b, cmb(ac_prim_sub_env_mul_shade_add_env) },11021// ground, zelda2. Added by Gonetz11022// (1-env)*shade+env, (t1-0)*prim+011023{ 0x0b2e0efa, cmb(ac_t1_mul_prim) },11024// GASP Fighters11025// (t0-0)*shade+env11026{ 0x0b390b39, cmb(ac_t0_mul_shade_add_env) },11027// destroying stuff, golden eye11028// (1-0)*shade+env11029{ 0x0b3e0b3e, cmb(ac_env_add_shade) },11030// Papeer Mario. Added by Gonetz11031// (t0-t1)*env+env, (0-0)*0+111032{ 0x0b510dff, cmb(ac_one) },11033// International Track and Field 2000. Added by Gonetz11034// (t0-0)*0+env11035{ 0x0bf90bf9, cmb(ac_env) },11036// TM, mario11037//z (0-0)*0+env11038{ 0x0bff0bff, cmb(ac_env) },11039// rancho monster, zelda2. Added by Gonetz11040// (0-0)*0+env, (cmb-0)*t1+011041{ 0x0bff0eb8, cmb(ac_t1_mul_env) },11042// Rocket Robot in Wheels intro11043// (0-0)*0+env, (cmb-0)*prim+011044{ 0x0bff0ef8, cmb(ac_prim_mul_env) },11045// Tony Hawk's Pro Skater. Added by Gonetz11046// (1-t0)*t1+1, (cmb-t1)*t1+t1 ** INC **11047{ 0x0c770c77, cmb(ac_t0_mul_t1) },11048// flame, paper mario. Added by Gonetz11049// (1-t0)*t1+1, (cmb-t1)*t1+t111050{ 0x0c8e0490, cmb(ac_t0_mul_t1) },11051// Ring boundary, dual heroes11052// (0-1)*prim+111053{ 0x0cf70cf7, cmb(ac_one_sub_prim) },11054// Kirby64, level 6, [Raziel64]11055// (0-0)*prim+111056{ 0x0cff0cff, cmb(ac_one) },11057// Mystical Ninja11058// (0-1)*env+111059{ 0x0d770d77, cmb(ac_one) },11060// Deku shield in shop, zelda11061// (1-1)*primlod+111062{ 0x0db60db6, cmb(ac_one) },11063// water near gorons willage. Added by Gonetz11064// (t1-t0)*0+1, (cmb-0)*prim+011065{ 0x0dca0ef8, cmb(ac_prim) },11066// background, kirby 64. Added by Gonetz11067// (t0-0)*0+111068{ 0x0df90df9, cmb(ac_one) },11069// kirby 64. Added by Gonetz11070// (1-0)*0+111071{ 0x0dfe0dfe, cmb(ac_one) },11072// background on level 2-1, kirby 64 [Raziel64]. Added by Gonetz11073// (1-0)*0+1, (0-0)*0+111074{ 0x0dfe0dff, cmb(ac_one) },11075// duck dodgers intro. Added by Gonetz11076// (0-0)*0+1, (cmb-cmb)*primlod+cmb11077{ 0x0dff0000, cmb(ac_one) },11078// duck dodgers intro. Added by Gonetz11079// (0-0)*0+1, (0-0)*0+t1 **INC**?11080{ 0x0dff05ff, cmb(ac_t1) },11081// ?11082// (0-0)*0+1, (0-0)*0+prim11083{ 0x0dff07ff, cmb(ac_prim) },11084// arena, custom robo. Added by Gonetz11085// (0-0)*0+1, (0-0)*0+shade11086{ 0x0dff09ff, cmb(ac_shade) },11087// field, Mario Golf11088// (0-0)*0+1, (1-env)*shade+env11089{ 0x0dff0b2e, cmb(ac_one_sub_env_mul_shade_add_env) },11090// battle tanks 2 [Ogy]11091// (0-0)*0+1, (0-0)*0+env11092{ 0x0dff0bff, cmb(ac_env) },11093// helmet, F1 World Grand Prix. Added by Gonetz11094// (0-0)*0+1, (0-1)*0+111095{ 0x0dff0df7, cmb(ac_one) },11096// secret in level 3-4, Kirby64, [Raziel64]11097// (0-0)*0+1, (cmb-0)*0+111098{ 0x0dff0df8, cmb(ac_one) },11099// Menu options, starfox11100// (0-0)*0+111101{ 0x0dff0dff, cmb(ac_one) },11102// Water, zelda11103//z (0-0)*0+primlod, (cmb-0)*prim+011104{ 0x0dff0ef8, cmb(ac_prim) },11105// Desert ground, zelda11106// (0-0)*0+1, (cmb-0)*shade+011107{ 0x0dff0f38, cmb(ac_shade) },11108// Characters, smash bros11109// (0-0)*0+1, (cmb-0)*env+011110{ 0x0dff0f78, cmb(ac_env) },11111// end of level 3-4, Kirby64, [Raziel64]11112// (0-0)*0+1, (cmb-0)*0+011113{ 0x0dff0ff8, cmb(ac_zero) },11114// Kirby6411115// (0-0)*0+1, (0-0)*0+011116{ 0x0dff0fff, cmb(ac_zero) },11117// floor, Spiderman [Raziel64]. Added by Gonetz11118// (env-t1)*t0+0 ** INC **11119{ 0x0e550e55, cmb(ac_t0_mul_env) },11120// skeleton, castlevania 2. Added by Gonetz11121// (1-prim)*t0+011122{ 0x0e5e0e5e, cmb(ac_one_sub_prim_mul_t0) },11123// player select, Forsaken [Raziel64]. Added by Gonetz11124// (prim-shade)*t0+011125{ 0x0e630e63, cmb(ac_prim_sub_shade_mul_t0) },11126// castlevania 2 [Ogy]. Added by Gonetz11127// (1-shade)*t0+011128{ 0x0e660e66, cmb(ac_one_sub_shade_mul_t0) },11129// background, level3-4, Kirby64, [Raziel64]11130// (shade-env)*t0+011131{ 0x0e6c0e6c, cmb(ac_shade_sub_env_mul_t0) },11132// Goemon, mystical ninja. Added by Gonetz11133// (1-env)*t0+011134{ 0x0e6e0e6e, cmb(ac_one_sub_env_mul_t0) },11135// fist attack, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz11136// (t0-0)*t0+0, (t1-cmb)*prim+cmb11137{ 0x0e7900c2, cmb(ac_t0_inter_t1_using_prima) },11138// Clay Fighter [Ogy]. Added by Gonetz11139// (t0-0)*t0+011140{ 0x0e790e79, cmb(ac_t0_mul_t0) },11141// Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz11142// (t0-0)*t0+0, (prim-0)*t1+011143{ 0x0e790ebb, cmb(ac_t1_mul_prim) },11144// zelda 2 [Ogy]. Added by Gonetz11145// (t0-0)*t0+0, (cmb-0)*prim+011146{ 0x0e790ef8, cmb(ac_t0_mul_prim) },11147// zelda 2. Added by Gonetz11148// (t0-0)*t0+0, (cmb-0)*shade+011149{ 0x0e790f38, cmb(ac_t0_mul_shade) },11150// zelda 2. Added by Gonetz11151// (t0-0)*t0+0, (cmb-0)*env+011152{ 0x0e790f78, cmb(ac_t0_mul_env) },11153// the ice plane just before the entrance to gorons village (where tingle is) }, zelda 2 [Ogy]. Added by Gonetz11154// (t1-0)*t0+0, (cmb-0)*0+cmb11155{ 0x0e7a01f8, cmb(ac_t0_mul_t1) },11156// paper mario. Added by Gonetz11157// (t1-0)*t0+0, (cmb-env)*prim+env ** INC **11158{ 0x0e7a0ae8, cmb(ac_t1_mul_prim) },11159// Tony Hawk's Pro Skater. Added by Gonetz11160// (t1-0)*t0+0, (cmb-0)*t0+011161{ 0x0e7a0e78, cmb(ac_t0_mul_t1) },11162// bike trace, xg2. Added by Gonetz11163// (t1-0)*t0+011164{ 0x0e7a0e7a, cmb(ac_t0_mul_t1) },11165// Kotake & koume defeated, zelda11166// (t1-0)*t0+0, (cmb-0)*prim+011167{ 0x0e7a0ef8, cmb(ac__t0_mul_t1__mul_prim) },11168// Magnitude, pokemon stadium 211169// (t1-0)*t0+0, (cmb-env)*shade+011170{ 0x0e7a0f28, cmb(ac__t0_mul_t1__mul_env_mul_shade) },11171// Bongo Bongo, zelda11172// (t1-0)*t0+0, (cmb-0)*shade+011173{ 0x0e7a0f38, cmb(ac__t0_mul_t1__mul_shade) },11174// Back of doors, megaman11175// (prim-0)*t0+0, (cmb-0)*lodfrac+011176{ 0x0e7b0e38, cmb(ac_t0_mul_prim) },11177// Karts, mario kart11178//z (prim-0)*t0+011179{ 0x0e7b0e7b, cmb(ac_t0_mul_prim) },11180// paper mario. Added by Gonetz11181// (prim-0)*t0+0, (t0-0)*prim+011182{ 0x0e7b0ef9, cmb(ac_t0_mul_prim) },11183// Table, mace11184// (prim-0)*t0+0, (cmb-0)*shade+011185{ 0x0e7b0f38, cmb(ac_t0_mul_prim_mul_shade) },11186// lamp shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz11187// (shade-0)*t0+0, (cmb-cmb)*lodf+cmb11188{ 0x0e7c0000, cmb(ac_t0_mul_shade) },11189// Game logo, Aerofighters Assault [Raziel64]11190//(shade-0)*t0+0, (0-0)*0+111191{ 0x0e7c0dff, cmb(ac_one) },11192// Higher sky, waverace11193//z (shade-0)*t0+011194{ 0x0e7c0e7c, cmb(ac_t0_mul_shade) },11195// duck dodgers, intro. Added by Gonetz11196// (shade-0)*t0+0, (cmb-0)*prim+011197{ 0x0e7c0ef8, cmb(ac_t0_mul_prim_mul_shade) },11198// waterwheel in water temple, zelda 2. Added by Gonetz11199// (shade-0)*t0+0, (cmb-0)*env+011200{ 0x0e7c0f78, cmb(ac_t0_mul_env_mul_shade) },11201// Blowing up mine at bowser's, mario11202// (env-0)*t0+011203{ 0x0e7d0e7d, cmb(ac_t0_mul_env) },11204// castlevania 2, intro. Added by Gonetz11205// (1-0)*t0+011206{ 0x0e7e0e7e, cmb(ac_t0) },11207// moon, castlevania 2. Added by Gonetz11208// (1-0)*t0+0, (cmb-0)*prim+011209{ 0x0e7e0ef8, cmb(ac_t0_mul_prim) },11210//beetle adventure racing. Added by Gonetz11211// (1-0)*t0+0, (cmb-0)*shade+011212{ 0x0e7e0f38, cmb(ac_t0_mul_shade) },11213// lava, beetle adventure racing11214// (t0-prim)*t1+0, (0-0)*0+shade ** INC **11215{ 0x0e9909ff, cmb(ac_shade) },11216// Rain Dance, Pokemon Stadium 2 [gokuss4]. Added by Gonetz11217// (t0-env)*t1+0, (cmb-0)*0+prim ** INC **11218{ 0x0ea90ef8, cmb(ac__t0_mul_t1__mul_prim) },11219// airboarder 64 [Ogy]11220// (t0-0)*t1+0, (0-0)*0+prim11221{ 0x0eb907ff, cmb(ac_prim) },11222// explosion, body harvest. Added by Gonetz11223// (t0-0)*t1+0, (0-0)*0+shade11224{ 0x0eb909ff, cmb(ac_shade) },11225// Text off top, banjo kazooie11226// (t0-0)*t1+011227{ 0x0eb90eb9, cmb(ac_t0_mul_t1) },11228// smoke, daikatana. Added by Gonetz11229// (t0-0)*t1+0, (cmb-0)*prim+011230{ 0x0eb90ef8, cmb(ac__t0_mul_t1__mul_prim) },11231// Water, pilotwings11232// (t0-0)*t1+0, (cmb-0)*shade+011233{ 0x0eb90f38, cmb(ac__t0_mul_t1__mul_shade) },11234// Tony Hawk's Pro Skater. Added by Gonetz11235// (t0-0)*t1+0, (cmb-0)*env+011236{ 0x0eb90f78, cmb(ac__t0_mul_t1__mul_env) },11237// light from window, Dobutsu no Mori. Added by Gonetz11238// (t0-0)*t1+0, (cmb-0)*primlod+011239{ 0x0eb90fb8, cmb(ac__t0_mul_t1__mul_primlod) },11240// chandelier in spider house, zelda 2. Added by Gonetz11241// (t1-0)*t1+0, (cmb-0)*prim+011242{ 0x0eba0ef8, cmb(ac_t1_mul_prim) },11243// cars, ridge racer. Added by Gonetz11244// (prim-0)*t1+0, (0-0)*0+111245{ 0x0ebb0dff, cmb(ac_t1_mul_prim) },11246// aerofighter's assault [Ogy]11247// (prim-0)*t1+011248{ 0x0ebb0ebb, cmb(ac_t1_mul_prim) },11249// tire trace, beetle adventure racing. Added by Gonetz11250// (shade-0)*t1+011251{ 0x0ebc0ebc, cmb(ac_t1_mul_shade) },11252// smoke, Starshot. Added by Gonetz11253// (env-0)*t1+011254{ 0x0ebd0ebd, cmb(ac_t1_mul_env) },11255// lots of things, goldeneye11256// (1-0)*t1+0, (0-0)*0+shade11257{ 0x0ebe09ff, cmb(ac_shade) },11258// zelda 2 [Ogy]. Added by Gonetz11259// (1-0)*t1+0, (cmb-0)*prim+011260{ 0x0ebe0ef8, cmb(ac_t1_mul_prim) },11261// walls, perfect dark. Added by Gonetz11262// (1-0)*t1+0, (cmb-0)*shade+011263{ 0x0ebe0f38, cmb(ac_t1_mul_shade) },11264// sand, perfect dark. Added by Gonetz11265// (1-0)*t1+0, (cmb-0)*env+011266{ 0x0ebe0f78, cmb(ac_t1_mul_env) },11267// light, Ridge Racer. Added by Gonetz11268// (1-t0)*prim+011269{ 0x0ece0ece, cmb(ac_one_sub_t0_mul_prim) },11270// exaust, star wars ep1 racer11271// (1-t0)*prim+0, (cmb-0)*shade+011272{ 0x0ece0f38, cmb(ac_one_sub_t0_mul_primshade) },11273// iguana, Forsaken, [Raziel64]. Added by Gonetz11274// (t0-shade)*prim+0 ** INC **11275{ 0x0ee10ee1, cmb(ac_t0_sub_prim_mul_shade) },11276// stands, NASCAR 200011277// (prim-shade)*prim+0 ** INC **11278{ 0x0ee30ee3, cmb(ac_prim) },11279// arena, Pokemon Stadium 2. Added by Gonetz11280// (t0-env)*prim+0 ** INC **11281{ 0x0ee90ee9, cmb(ac_t0_mul_prim) },11282// explosion, body harvest. Added by Gonetz11283// (t0-0)*prim+0, (t0-0)*env+cmb11284{ 0x0ef90179, cmb(ac_prim_add_env_mul_t0) },11285// frog's eyes, zelda11286// (t0-0)*prim+0, (1-1)*prim_lod+cmb11287{ 0x0ef901b6, cmb(ac_t0_mul_prim) },11288// Monster truck madness intro. Added by Gonetz11289// (t0-0)*prim+0, (cmb-0)*prim_lod+cmb ** INC **11290{ 0x0ef901b8, cmb(ac_t0_mul_prim) },11291// Road, zelda11292//z (t0-0)*prim+0, (t1-0)*primlod+cmb11293{ 0x0ef901ba, cmb(ac__t0_mul_prim__add__t1_mul_primlod) },11294// Track, wipeout. Addded by Gonetz11295// (t0-0)*prim+0, (0-0)*0+prim11296{ 0x0ef907ff, cmb(ac_t0_mul_prim) },11297// magic stuff, buck bumble. Added by Gonetz11298// (t0-0)*prim+0, (cmb-0)*prim+011299{ 0x0ef90ef8, cmb(ac_t0_mul_prim_mul_prim) },11300// The mario face, mario11301//z (t0-0)*prim+011302{ 0x0ef90ef9, cmb(ac_t0_mul_prim) },11303// paper mario. Added by Gonetz11304// (t0-0)*prim+0, (cmb-0)*shade+011305{ 0x0ef90f38, cmb(ac_t0_mul_prim_mul_shade) },11306// Pik achu's mouth, smash bros11307// (t0-0)*prim+0, (cmb-0)*env+011308{ 0x0ef90f78, cmb(ac_t0_mul_prim_mul_env) },11309// bomb mask, zelda 2. Added by Gonetz11310// (t0-0)*prim+0, (1-0)*env+011311{ 0x0ef90f7e, cmb(ac_t0_mul_prim) },11312// Charmander's tail, pokemon stadium 211313// (t0-0)*prim+0, (cmb-0)*primlod+011314{ 0x0ef90fb8, cmb(ac_t0_mul_prim_mul_primlod) },11315// stalactites, Beetle adventure Racing. Added by Gonetz11316// (t1-0)*prim+0, (1-cmb)*shade+cmb11317{ 0x0efa0106, cmb(ac_one_sub_shade_mul_t1_add_shade) },11318// Sprites, Ogre Battle. Added by Gonetz11319// (t1-0)*prim+0, (0-0)*0+cmb11320{ 0x0efa0efa, cmb(ac_t1_mul_prim) },11321// Something about kotake & koume's combined attack, zelda11322// (t1-0)*prim+0, (cmb-0)*shade+011323{ 0x0efa0f38, cmb(ac_t1_mul_prim_mul_shade) },11324// intro background, bio freaks. Added by Gonetz11325// (prim-0)*prim+011326{ 0x0efb0efb, cmb(ac_prim_mul_prim) },11327// sky, xg2. Added by Gonetz11328// (shade-0)*prim+0, (0-0)*0+111329{ 0x0efc0dff, cmb(ac_one) },11330// Zelda, unimp log. Added by Gonetz11331// (shade-0)*prim+011332{ 0x0efc0efc, cmb(ac_prim_mul_shade) },11333// Baby mario's hat shadow, mario golf11334// (env-0)*prim+011335{ 0x0efd0efd, cmb(ac_prim_mul_env) },11336// Menu, doom11337// (1-0)*prim+011338{ 0x0efe0efe, cmb(ac_prim) },11339// Conker's shadow, CBFD. Added by Gonetz11340// (1-t0)*shade+011341{ 0x0f0e0f0e, cmb(ac_one_sub_t0_mul_shade) },11342// Rock smash, pokemon stadium 211343// (1-t0)*shade+011344{ 0x0f0f0ee8, cmb(ac_one_sub_t0_mul_shade) },11345//waterfall, Paper Mario11346// (t0-t1)*shade+011347{ 0x0f110f11, cmb(ac__t0_sub_t1__mul_shade) },11348// Boomerang circle, zelda11349// (t0-0)*shade+0, (1-cmb)*t0+cmb11350{ 0x0f390046, cmb(ac_t0_mul_shade) },11351// THPS311352// (t0-0)*shade+0, (1-0)*t0+cmb11353{ 0x0f39007e, cmb(ac_t0_mul_shade) },11354// ???11355// (t0-0)*shade+0, (env-0)*t1+cmb11356{ 0x0f3900bd, cmb(ac_t0_mul_shade) },11357// Forest temple doorway, zelda11358// (t0-0)*shade+0, (t1-0)*primlod+cmb11359{ 0x0f3901ba, cmb(ac_t0_mul_shade) },11360// skis, Spacestation Silicon Valley. Added by Gonetz11361// (t0-0)*shade+0, (0-0)*0+t011362{ 0x0f3903ff, cmb(ac_t0) },11363// paper mario. Added by Gonetz11364// (t0-0)*shade+0, (cmb-t0)*prim+011365{ 0x0f390ec8, cmb(ac_t0_mul_prim_mul_shade) },11366// House windows, zelda intro11367//z (t0-0)*shade+0, (cmb-0)*prim+011368{ 0x0f390ef8, cmb(ac_t0_mul_prim_mul_shade) },11369// Characters, mace11370// (t0-0)*shade+0, (cmb-0)*shade+011371{ 0x0f390f38, cmb(ac_t0_mul_shade) },11372// Shadows, mario11373//z (t0-0)*shade+011374{ 0x0f390f39, cmb(ac_t0_mul_shade) },11375// Clear screen intro, banjo kazooie11376// (t0-0)*shade+0, (cmb-0)*env+011377{ 0x0f390f78, cmb(ac_t0_mul_env_mul_shade) },11378// ridge racer, unimp log. Added by Gonetz11379// (t0-0)*shade+0, (cmb-0)*primlod+0 **INC**?11380{ 0x0f390fb8, cmb(ac_t0_mul_shade) },11381// Reflecting combined attack at kotake & koume's, zelda11382// (t1-0)*shade+0, (cmb-0)*prim+011383{ 0x0f3a0ef8, cmb(ac_t1_mul_prim_mul_shade) },11384// aerofighter's assault [Ogy]11385// (t1-0)*shade+011386{ 0x0f3a0f3a, cmb(ac_t1_mul_shade) },11387//beetle adventure racing. Added by Gonetz11388//(t1-0)*shade+0, (cmb-0)*env+011389{ 0x0f3a0f78, cmb(ac_t1_mul_env_mul_shade) },11390// building shadow, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz11391// (prim-0)*shade+0, (cmb-cmb)*lodf+cmb11392{ 0x0f3b0000, cmb(ac_prim_mul_shade) },11393//chip in Spacestation Silicon Valley intro. Added by Gonetz11394// (prim-0)*shade+0, (env-cmb)*t1+cmb11395{ 0x0f3b0085, cmb(ac_env_sub_primshade_mul_t1_add_primshade) },11396// N64 logo, tetrisphere. Added by Gonetz11397// (prim-0)*shade+0, (prim-0)*shade+011398{ 0x0f3b0f3b, cmb(ac_prim_mul_shade) },11399// rays, Fushigi no Dungeon - Furai no Shiren 2. Added by Gonetz11400// (shade-0)*shade+0, (cmb-0)*prim+011401{ 0x0f3c0ef8, cmb(ac_prim_mul_shade) },11402// light, dracula resurrection, castlevania 2. Added by Gonetz11403// (env-0)*shade+011404{ 0x0f3d0f3d, cmb(ac_env_mul_shade) },11405// zelda 2 [Ogy]. Added by Gonetz11406// (1-0)*shade+011407{ 0x0f3e0f3e, cmb(ac_shade) },11408// surf pokemon attack, Pokemon Stadium 2 [gokuss4]. Added by Gonetz11409// (1-t0)*env+0, (1-cmb)*shade+0 ** INC **11410{ 0x0f4e0f06, cmb(ac_t0_mul_shade) },11411//beetle adventure racing. Added by Gonetz11412//(t0-0)*env+0, (1-t0)*prim+cmb11413{ 0x0f7900ce, cmb(ac_t0_mul_env) }, //this one looks better11414// { 0x0f7900ce, cmb(ac_env_sub_prim_mul_t0_add_prim) },11415//Zelda, logo ? Added by Gonetz11416//(t0-0)*env+0, (t1-0)*primlod+0 **INC** changed to mul_env for gannon's organ disappearing [Dave2001]11417{ 0x0f7901ba, cmb(ac__t0_inter_t1_using_primlod__mul_env) },11418// Skeleton guy's eyes, zelda11419// (t0-0)*env+0, (cmb-0)*prim+011420{ 0x0f790ef8, cmb(ac_t0_mul_prim_mul_env) },11421// Dust from rock spell, quest6411422// (t0-0)*env+0, (cmb-0)*shade+011423{ 0x0f790f38, cmb(ac_t0_mul_env_mul_shade) },11424// eyes of poe, zelda11425// (t0-0)*env+0, (cmb-0)*env+011426{ 0x0f790f78, cmb(ac_t0_mul_env) },11427// Text, mario11428//z (t0-0)*env+011429{ 0x0f790f79, cmb(ac_t0_mul_env) },11430// Shadows, pokemon stadeom 211431// (t0-0)*env+0, (cmb-0)*primlod+011432{ 0x0f790fb8, cmb(ac_t0_mul_env_mul_primlod) },11433//gauge, PGA11434// (t1-0)*env+0, (cmb-0)*t1+0 ** INC **11435{ 0x0f7a0eb8, cmb(ac_t1_mul_env) },11436//text and shadows, Rayman2. Added by Gonetz11437// (t1-0)*env+0, (cmb-0)*shade+011438{ 0x0f7a0f38, cmb(ac_t1_mul_env_mul_shade) },11439// shadows, tom and jerry. Added by Gonetz11440// (t1-0)*env+011441{ 0x0f7a0f7a, cmb(ac_t1_mul_env) },11442// Bomberman64-2 intro. Added by Gonetz11443// (prim-0)*env+011444{ 0x0f7b0f7b, cmb(ac_prim_mul_env) },11445// Text box, mario11446//z (shade-0)*env+011447{ 0x0f7c0f7c, cmb(ac_env_mul_shade) },11448// Ogre battle 6411449// (env-0)*env+011450{ 0x0f7d0f7d, cmb(ac_env) },11451//Goldeneye, [Jeremy]. Added by Gonetz11452// (1-0)*env+0, (cmb-0)*shade+011453{ 0x0f7e0f38, cmb(ac_env_mul_shade) },11454// Status items, megaman11455// (1-0)*env+011456{ 0x0f7e0f7e, cmb(ac_env) },11457// gun fire, Beast_Wars_Transmetal [Raziel64]11458// (0-0)*env+011459{ 0x0f7f0f7f, cmb(ac_zero) },11460// Shadow Ball, Pokemon Stadium 2 [gokuss4]. Added by Gonetz11461// (t1-t0)*primlod+0, (t1-cmb)*prim+0 ** INC **11462{ 0x0f8a0ec2, cmb(ac_t0_mul_prim) },11463// Walls of well through lens of truth, zelda11464// (prim-t0)*primlod+011465{ 0x0f8b0f8b, cmb(ac_prim_sub_t0) },11466// N64 logo, ridge racer. Added by Gonetz11467// (1-prim)*primlod+0 **INC**11468{ 0x0f9e0f9e, cmb(ac_zero) },11469// Vines that covers a door in the third room of woodfall temple, zelda 2 [Ogy]. Added by Gonetz11470// (t0-0)*primlod+0, (cmb-0)*prim+011471{ 0x0fb90ef8, cmb(ac_t0_mul_primlod_mul_prim) },11472// zelda 2. Added by Gonetz11473// (t0-0)*primlod+011474{ 0x0fb90fb9, cmb(ac_t0_mul_primlod) },11475// NFL Blitz logo. Added by Gonetz11476// (t1-0)*primlod+011477{ 0x0fba0fba, cmb(ac_t1_mul_primlod) }, //causes issues11478// fallen stars at star summit, Paper Mario. Added by Gonetz11479// (shade-0)*primlod+011480{ 0x0fbc0fbc, cmb(ac_primlod_mul_shade) },11481// expansion pack, Jeremy McGrath Supercross 2000. Added by Gonetz11482// (1-0)*primlod+011483{ 0x0fbe0fbe, cmb(ac_primlod) },11484// intro, Aidyn Chronicles. Added by Gonetz11485// (0-0)*primlod+0, (prim-env)*t0+prim **INC**11486{ 0x0fbf066b, cmb(ac_t0_mul_prim) },11487// sky, Rayman2. Added by Gonetz11488// (0-shade)*0+011489{ 0x0fe70fe7, cmb(ac_zero) },11490// flame, PokemonStadium1 [Raziel64]11491// (t0-0)*0+011492{ 0x0ff90ff9, cmb(ac_zero) },11493// Screen clear, banjo kazooie11494// (0-0)*0+011495{ 0x0fff0fff, cmb(ac_zero) },11496// { #ACEND }11497};1149811499// CountCombine - count the # of entries in the combine lists11500void CountCombine ()11501{11502int size = sizeof(color_cmb_list) >> 3;11503int i=0, index=0, a, b;11504do {11505a = color_cmb_list[index].key >> 24;11506for (; i<=a; i++)11507cc_lookup[i] = index;1150811509while (index < size)11510{11511b = color_cmb_list[index].key >> 24;11512if (b != a) break;11513index ++;11514}11515} while (index < size);11516for (; i<257; i++) cc_lookup[i] = index;1151711518size = sizeof(alpha_cmb_list) >> 3;11519i=0, index=0;11520do {11521a = (alpha_cmb_list[index].key >> 20) & 0xFF;11522for (; i<=a; i++)11523ac_lookup[i] = index;1152411525while (index < size)11526{11527b = (alpha_cmb_list[index].key >> 20) & 0xFF;11528if (b != a) break;11529index ++;11530}11531} while (index < size);11532for (; i<257; i++) ac_lookup[i] = index;1153311534//color_cmb_list_count = sizeof(color_cmb_list) >> 3; // #bytes/4/211535//alpha_cmb_list_count = sizeof(alpha_cmb_list) >> 3;11536}1153711538//****************************************************************11539// Main Combine11540//****************************************************************1154111542void Combine ()11543{11544FRDP (" | |- color combine: %08lx, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",11545((rdp.cycle1 & 0xFFFF) << 16) | (rdp.cycle2 & 0xFFFF),11546Mode0[rdp.cycle1&0xF], Mode1[(rdp.cycle1>>4)&0xF], Mode2[(rdp.cycle1>>8)&0x1F], Mode3[(rdp.cycle1>>13)&7],11547Mode0[rdp.cycle2&0xF], Mode1[(rdp.cycle2>>4)&0xF], Mode2[(rdp.cycle2>>8)&0x1F], Mode3[(rdp.cycle2>>13)&7]);11548FRDP (" | |- alpha combine: %08lx, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",11549(rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 & 0x0FFF0000) >> 16),11550Alpha0[(rdp.cycle1>>16)&7], Alpha1[(rdp.cycle1>>19)&7], Alpha2[(rdp.cycle1>>22)&7], Alpha3[(rdp.cycle1>>25)&7],11551Alpha0[(rdp.cycle2>>16)&7], Alpha1[(rdp.cycle2>>19)&7], Alpha2[(rdp.cycle2>>22)&7], Alpha3[(rdp.cycle2>>25)&7]);1155211553if (settings.lodmode == 0 || rdp.cur_tile == rdp.mipmap_level)11554lod_frac = rdp.prim_lodfrac;11555else11556lod_frac = 10;1155711558rdp.noise = noise_none;1155911560DWORD found = TRUE;1156111562rdp.col[0] = rdp.col[1] = rdp.col[2] = rdp.col[3] =11563rdp.coladd[0] = rdp.coladd[1] = rdp.coladd[2] = rdp.coladd[3] = 1.0f;11564rdp.cmb_flags = rdp.cmb_flags_2 = 0;1156511566rdp.uncombined = 0;1156711568cmb.tex = 0;11569cmb.tmu0_func = cmb.tmu1_func = cmb.tmu0_a_func = cmb.tmu1_a_func = GR_COMBINE_FUNCTION_ZERO;11570cmb.tmu0_fac = cmb.tmu1_fac = cmb.tmu0_a_fac = cmb.tmu1_a_fac = GR_COMBINE_FACTOR_NONE;11571cmb.tmu0_invert = cmb.tmu0_a_invert = cmb.tmu1_invert = cmb.tmu1_a_invert = FXFALSE;1157211573cmb.dc0_detailmax = cmb.dc1_detailmax = 0;1157411575cmb.mod_0 = cmb.mod_1 = 0; // remove all modifications11576cmb.modcolor_0 = cmb.modcolor1_0 = cmb.modcolor2_0 = cmb.modcolor_1 = cmb.modcolor1_1 = cmb.modcolor2_111577= cmb.modfactor_0 = cmb.modfactor_1 = 0;1157811579cmb.ccolor = cmb.tex_ccolor = 0;11580if (cmb.cmb_ext_use || cmb.tex_cmb_ext_use)11581{11582//have to draw something to allow use of standard combine functions11583if (fullscreen)11584{11585VERTEX v;11586memset(&v,0,sizeof(v));11587grDrawPoint(&v);11588}11589cmb.cmb_ext_use = 0;11590cmb.tex_cmb_ext_use = 0;11591}1159211593DWORD cmb_mode_c = (rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF);11594DWORD cmb_mode_a = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF);1159511596cmb.abf1 = GR_BLEND_SRC_ALPHA;11597cmb.abf2 = GR_BLEND_ONE_MINUS_SRC_ALPHA;1159811599#ifdef FASTSEARCH11600// Fast, ordered search11601int current=0x7FFFFFFF, last;11602DWORD actual_combine, current_combine = 0x7fffffff, color_combine, alpha_combine;11603int left, right;1160411605actual_combine = cmb_mode_c;11606color_combine = actual_combine;11607if ((rdp.cycle2 & 0xFFFF) == 0x1FFF)11608actual_combine = (rdp.cycle1 << 16) | (rdp.cycle1 & 0xFFFF);1160911610left = cc_lookup[actual_combine>>24];11611right = cc_lookup[(actual_combine>>24)+1];1161211613while (1)11614{11615last = current;11616current = left + ((right-left) >> 1);11617if (current == last)11618break; // can't be found!1161911620current_combine = color_cmb_list[current].key;11621if (current_combine < actual_combine)11622left = current;11623else if (current_combine > actual_combine)11624right = current;11625else11626break; // found it!11627}1162811629// Check if we didn't find it11630if (actual_combine != current_combine)11631{11632rdp.uncombined |= 1;11633#ifdef UNIMP_LOG11634if (settings.log_unk)11635{11636sprintf (out_buf, "COLOR combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",11637actual_combine,11638Mode0[rdp.cycle1&0xF], Mode1[(rdp.cycle1>>4)&0xF], Mode2[(rdp.cycle1>>8)&0x1F], Mode3[(rdp.cycle1>>13)&7],11639Mode0[rdp.cycle2&0xF], Mode1[(rdp.cycle2>>4)&0xF], Mode2[(rdp.cycle2>>8)&0x1F], Mode3[(rdp.cycle2>>13)&7]);11640UNIMPMODE();11641}11642#endif11643found = FALSE;11644//tex |= 3;1164511646// use t0 as default11647cc_t0 ();11648}11649else11650(color_cmb_list[current].func)();1165111652RDP (" | |- Color done\n");1165311654// Now again for alpha11655current = 0x7FFFFFFF;11656actual_combine = cmb_mode_a;11657alpha_combine = actual_combine;11658if ((rdp.cycle2 & 0x0FFF0000) == 0x01FF0000)11659actual_combine = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle1 >> 16) & 0x00000FFF);11660if ((rdp.cycle1 & 0x0FFF0000) == 0x0FFF0000)11661actual_combine = (rdp.cycle2 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF);1166211663left = ac_lookup[(actual_combine>>20)&0xFF];11664right = ac_lookup[((actual_combine>>20)&0xFF)+1];1166511666while (1)11667{11668last = current;11669current = left + ((right-left) >> 1);11670if (current == last)11671break; // can't be found!1167211673current_combine = alpha_cmb_list[current].key;11674if (current_combine < actual_combine)11675left = current;11676else if (current_combine > actual_combine)11677right = current;11678else11679break; // found it!11680}1168111682// Check if we didn't find it11683if (actual_combine != current_combine || !found)11684{11685if (actual_combine != current_combine)11686{11687rdp.uncombined |= 2;11688#ifdef UNIMP_LOG11689if (settings.log_unk)11690{11691sprintf (out_buf, "ALPHA combine not found: %08x, #1: (%s-%s)*%s+%s, #2: (%s-%s)*%s+%s\n",11692actual_combine,11693Alpha0[(rdp.cycle1>>16)&7], Alpha1[(rdp.cycle1>>19)&7], Alpha2[(rdp.cycle1>>22)&7], Alpha3[(rdp.cycle1>>25)&7],11694Alpha0[(rdp.cycle2>>16)&7], Alpha1[(rdp.cycle2>>19)&7], Alpha2[(rdp.cycle2>>22)&7], Alpha3[(rdp.cycle2>>25)&7]);11695UNIMPMODE();11696}11697#endif11698}11699if (settings.unk_as_red)11700{11701BrightRed ();11702}11703else11704{11705// use full alpha as default11706ac_t0 ();11707}11708//tex |= 3;11709}11710else11711(alpha_cmb_list[current].func)();117121171311714if (color_combine == 0x69351fff) //text, PD, need to change texture alpha11715{11716A_USE_T1();11717}11718else if ((color_combine == 0x3fff1fff) && (alpha_combine == 0x03ff03ff) && (rdp.last_tile > rdp.cur_tile))//Dr. Mario11719{11720cc_t0();11721ac_t1();11722}11723else if (color_combine == 0x613522f0 && settings.PM) //Paper Mario fortune teller spheres11724{11725ac_t0();11726}1172711728RDP (" | |- Alpha done\n");11729#endif // FASTSEARCH1173011731CombineBlender ();11732//*11733// Update textures?11734// if (tex == 2 && rdp.texrecting && (cmb.tmu1_func != GR_COMBINE_FUNCTION_ZERO) && (rdp.last_tile_size == 0))11735if (cmb.tex == 2 && rdp.texrecting && (rdp.cur_tile == rdp.last_tile_size))11736{11737cmb.tex = 0;11738USE_T0();11739A_USE_T0();11740}11741//*/11742rdp.tex = cmb.tex;1174311744if (cmb.tex && rdp.hires_tex && settings.fb_read_alpha)11745{11746if (settings.PM && rdp.hires_tex->width == rdp.ci_width)11747;11748else11749{11750grChromakeyValue(0);11751grChromakeyMode(GR_CHROMAKEY_ENABLE);11752}11753}11754else if (settings.invaders && (rdp.geom_mode == 0x0205))11755{11756grChromakeyValue(0);11757grChromakeyMode(GR_CHROMAKEY_ENABLE);11758}11759else11760grChromakeyMode(GR_CHROMAKEY_DISABLE);1176111762RDP (" | + Combine end\n");11763}1176411765void CombineBlender ()11766{11767// Check force-blending11768if ((rdp.othermode_l & 0x4000) && (rdp.cycle_mode < 2))11769{11770switch (rdp.othermode_l >> 16)11771{11772// Mace objects11773case 0x0382:11774case 0x0091:11775// 1080 sky11776case 0x0c08:11777// Mario kart player select11778// clr_in * 0 + clr_in * 111779// - or just clr_in, no matter what alpha11780case 0x0f0a:11781//DK64 blue prints11782case 0x0302:11783A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);11784break;1178511786// LOT in Zelda: MM11787case 0xaf50:11788case 0x0f5a: //clr_in * 0 + clr_mem * 111789A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);11790break;1179111792case 0x5f50: //clr_mem * 0 + clr_mem * (1-a)11793A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE_MINUS_SRC_ALPHA);11794break;1179511796case 0xf550: //clr_fog * a_fog + clr_mem * (1-a)11797A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);11798rdp.col[0] *= (float)((rdp.fog_color & 0xFF000000) >> 24) / 255.0f;11799rdp.col[1] *= (float)((rdp.fog_color & 0x00FF0000) >> 16) / 255.0f;11800rdp.col[2] *= (float)((rdp.fog_color & 0x0000FF00) >> 8) / 255.0f;11801rdp.col[3] *= (float)(rdp.fog_color & 0xFF) / 255.0f;11802rdp.cmb_flags = CMB_SET | CMB_A_SET;11803break;1180411805// Super Smash Bros, faked fog for flashing characters11806case 0xc411:11807{11808MOD_0 (TMOD_TEX_INTER_COLOR_USING_FACTOR);11809MOD_0_COL (rdp.fog_color & 0x00FFFFFF);11810MOD_0_FAC (rdp.fog_color >> 24);11811INTERSHADE_2 (rdp.fog_color & 0x00FFFFFF, rdp.fog_color >> 24);1181211813float percent = (rdp.fog_color >> 24) / 255.0f;11814cmb.ccolor = (cmb.ccolor & 0xFF000000) |11815((DWORD)(((cmb.ccolor >> 16) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) * percent) << 16) |11816((DWORD)(((cmb.ccolor >> 8) & 0xFF) * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) * percent) << 8) |11817(DWORD)((cmb.ccolor & 0xFF) * (1.0f-percent) + (rdp.fog_color & 0xFF) * percent);1181811819rdp.col[0] = rdp.col[0] * (1.0f-percent) + ((rdp.fog_color>>16) & 0xFF) / 255.0f * percent;11820rdp.col[1] = rdp.col[1] * (1.0f-percent) + ((rdp.fog_color>>8) & 0xFF) / 255.0f * percent;11821rdp.col[2] = rdp.col[2] * (1.0f-percent) + (rdp.fog_color & 0xFF) / 255.0f * percent;11822}11823break;1182411825default:11826A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);11827}11828}11829else11830A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);1183111832// ALPHA_CVG_SEL means full alpha11833// The reason it wasn't working before was because I wasn't handling rdp:setothermode11834// if (rdp.othermode_l & 0x2000)11835if ((rdp.othermode_l & 0x2000) && ((rdp.othermode_l & 0x7000) != 0x7000))11836{11837if (settings.PM && ((rdp.othermode_l >> 16) == 0x5055))11838{11839A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);11840}11841else11842{11843A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);11844}11845}1184611847//hack11848//*11849if (settings.ISS64)11850{11851if ((rdp.othermode_l >> 16) == 0xc302)11852{11853A_BLEND (GR_BLEND_ONE, GR_BLEND_ZERO);11854}11855else if (rdp.othermode_l == 0xff5a6379)11856{11857A_BLEND (GR_BLEND_ZERO, GR_BLEND_SRC_ALPHA);11858}11859else if (rdp.othermode_l == 0x00504dd9)11860{11861A_BLEND (GR_BLEND_ZERO, GR_BLEND_ONE);11862}11863}11864else if (settings.TGR)11865{11866if (rdp.othermode_l == 0x0f0a0235)11867{11868A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);11869}11870}11871//*/11872}1187311874void InitCombine ()11875{11876LOG ("InitCombine() ");11877memset(&cmb, 0, sizeof(cmb));11878const char *extensions = grGetString (GR_EXTENSION);11879const char *extstr = strstr(extensions, "COMBINE");11880if (extstr) {11881if (!strncmp(extstr, "COMBINE", 7)) {11882LOG ("extensions ");11883cmb.grColorCombineExt = (GRCOLORCOMBINEEXT) grGetProcAddress("grColorCombineExt");11884cmb.grAlphaCombineExt = (GRCOLORCOMBINEEXT) grGetProcAddress("grAlphaCombineExt");11885cmb.grTexColorCombineExt = (GRTEXCOLORCOMBINEEXT) grGetProcAddress("grTexColorCombineExt");11886cmb.grTexAlphaCombineExt = (GRTEXCOLORCOMBINEEXT) grGetProcAddress("grTexAlphaCombineExt");11887cmb.grConstantColorValueExt = (GRCONSTANTCOLORVALUEEXT) grGetProcAddress("grConstantColorValueExt");11888if (cmb.grColorCombineExt && cmb.grAlphaCombineExt &&11889cmb.grTexColorCombineExt && cmb.grTexAlphaCombineExt)11890{11891cmb.combine_ext = TRUE;11892LOG ("initialized.");11893}11894else11895{11896cmb.combine_ext = FALSE;11897}11898}11899}11900cmb.dc0_lodbias = cmb.dc1_lodbias = 31;11901cmb.dc0_detailscale = cmb.dc1_detailscale = 7;11902cmb.lodbias0 = cmb.lodbias1 = 1.0f;11903LOG ("\n");11904}1190511906void ColorCombinerToExtension ()11907{11908DWORD ext_local, ext_local_a, ext_other, ext_other_a;11909switch (cmb.c_loc)11910{11911case GR_COMBINE_LOCAL_ITERATED:11912ext_local = GR_CMBX_ITRGB;11913ext_local_a = GR_CMBX_ITALPHA;11914break;11915case GR_COMBINE_LOCAL_CONSTANT:11916ext_local = GR_CMBX_CONSTANT_COLOR;11917ext_local_a = GR_CMBX_CONSTANT_ALPHA;11918break;11919default:11920ext_local = 0;11921ext_local_a = 0;11922break;11923};11924switch (cmb.c_oth)11925{11926case GR_COMBINE_OTHER_ITERATED:11927ext_other = GR_CMBX_ITRGB;11928ext_other_a = GR_CMBX_ITALPHA;11929break;11930case GR_COMBINE_OTHER_TEXTURE:11931ext_other = GR_CMBX_TEXTURE_RGB;11932ext_other_a = GR_CMBX_TEXTURE_ALPHA;11933break;11934case GR_COMBINE_OTHER_CONSTANT:11935ext_other = GR_CMBX_CONSTANT_COLOR;11936ext_other_a = GR_CMBX_CONSTANT_ALPHA;11937break;11938default:11939ext_other = 0;11940ext_other_a = 0;11941break;11942};11943switch (cmb.c_fac)11944{11945case GR_COMBINE_FACTOR_ZERO:11946cmb.c_ext_c = GR_CMBX_ZERO;11947cmb.c_ext_c_invert = 0;11948break;11949case GR_COMBINE_FACTOR_ONE:11950cmb.c_ext_c = GR_CMBX_ZERO;11951cmb.c_ext_c_invert = 1;11952break;11953case GR_COMBINE_FACTOR_LOCAL:11954cmb.c_ext_c = ext_local;11955cmb.c_ext_c_invert = 0;11956break;11957case GR_COMBINE_FACTOR_LOCAL_ALPHA:11958cmb.c_ext_c = ext_local_a;11959cmb.c_ext_c_invert = 0;11960break;11961case GR_COMBINE_FACTOR_OTHER_ALPHA:11962cmb.c_ext_c = ext_other_a;11963cmb.c_ext_c_invert = 0;11964break;11965case GR_COMBINE_FACTOR_TEXTURE_RGB:11966cmb.c_ext_c = GR_CMBX_TEXTURE_RGB;11967cmb.c_ext_c_invert = 0;11968break;11969case GR_COMBINE_FACTOR_TEXTURE_ALPHA:11970cmb.c_ext_c = GR_CMBX_TEXTURE_ALPHA;11971cmb.c_ext_c_invert = 0;11972break;11973case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:11974cmb.c_ext_c = ext_local;11975cmb.c_ext_c_invert = 1;11976break;11977case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:11978cmb.c_ext_c = ext_local_a;11979cmb.c_ext_c_invert = 1;11980break;11981case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:11982cmb.c_ext_c = ext_other_a;11983cmb.c_ext_c_invert = 1;11984break;11985case GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA:11986cmb.c_ext_c = GR_CMBX_TEXTURE_ALPHA;11987cmb.c_ext_c_invert = 1;11988break;11989}1199011991switch (cmb.c_fnc)11992{11993case GR_COMBINE_FUNCTION_ZERO:11994cmb.c_ext_a = GR_CMBX_ZERO;11995cmb.c_ext_a_mode = GR_FUNC_MODE_X;11996cmb.c_ext_b = GR_CMBX_ZERO;11997cmb.c_ext_b_mode = GR_FUNC_MODE_X;11998cmb.c_ext_c = GR_CMBX_ZERO;11999cmb.c_ext_c_invert = 0;12000cmb.c_ext_d = GR_CMBX_ZERO;12001cmb.c_ext_d_invert = 0;12002break;12003case GR_COMBINE_FUNCTION_LOCAL:12004cmb.c_ext_a = ext_local;12005cmb.c_ext_a_mode = GR_FUNC_MODE_X;12006cmb.c_ext_b = GR_CMBX_ZERO;12007cmb.c_ext_b_mode = GR_FUNC_MODE_X;12008cmb.c_ext_c = GR_CMBX_ZERO;12009cmb.c_ext_c_invert = 1;12010cmb.c_ext_d = GR_CMBX_ZERO;12011cmb.c_ext_d_invert = 0;12012break;12013case GR_COMBINE_FUNCTION_LOCAL_ALPHA:12014cmb.c_ext_a = ext_local_a;12015cmb.c_ext_a_mode = GR_FUNC_MODE_X;12016cmb.c_ext_b = GR_CMBX_ZERO;12017cmb.c_ext_b_mode = GR_FUNC_MODE_X;12018cmb.c_ext_c = GR_CMBX_ZERO;12019cmb.c_ext_c_invert = 1;12020cmb.c_ext_d = GR_CMBX_ZERO;12021cmb.c_ext_d_invert = 0;12022break;12023case GR_COMBINE_FUNCTION_SCALE_OTHER:12024cmb.c_ext_a = ext_other;12025cmb.c_ext_a_mode = GR_FUNC_MODE_X;12026cmb.c_ext_b = GR_CMBX_ZERO;12027cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;12028cmb.c_ext_d = GR_CMBX_ZERO;12029cmb.c_ext_d_invert = 0;12030break;12031case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:12032cmb.c_ext_a = ext_other;12033cmb.c_ext_a_mode = GR_FUNC_MODE_X;12034cmb.c_ext_b = ext_local;12035cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;12036cmb.c_ext_d = GR_CMBX_B;12037cmb.c_ext_d_invert = 0;12038break;12039case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:12040cmb.c_ext_a = ext_other;12041cmb.c_ext_a_mode = GR_FUNC_MODE_X;12042cmb.c_ext_b = ext_local_a;12043cmb.c_ext_b_mode = GR_FUNC_MODE_ZERO;12044cmb.c_ext_d = GR_CMBX_B;12045cmb.c_ext_d_invert = 0;12046break;12047case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:12048cmb.c_ext_a = ext_other;12049cmb.c_ext_a_mode = GR_FUNC_MODE_X;12050cmb.c_ext_b = ext_local;12051cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12052cmb.c_ext_d = GR_CMBX_ZERO;12053cmb.c_ext_d_invert = 0;12054break;12055case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:12056cmb.c_ext_a = ext_other;12057cmb.c_ext_a_mode = GR_FUNC_MODE_X;12058cmb.c_ext_b = ext_local;12059cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12060cmb.c_ext_d = GR_CMBX_B;12061cmb.c_ext_d_invert = 0;12062break;12063case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:12064cmb.c_ext_a = ext_other;12065cmb.c_ext_a_mode = GR_FUNC_MODE_X;12066cmb.c_ext_b = ext_local;12067cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12068cmb.c_ext_d = GR_CMBX_ALOCAL;12069cmb.c_ext_d_invert = 0;12070break;12071case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:12072cmb.c_ext_a = GR_CMBX_ZERO;12073cmb.c_ext_a_mode = GR_FUNC_MODE_ZERO;12074cmb.c_ext_b = ext_local;12075cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12076cmb.c_ext_d = GR_CMBX_B;12077cmb.c_ext_d_invert = 0;12078break;12079case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:12080cmb.c_ext_a = GR_CMBX_ZERO;12081cmb.c_ext_a_mode = GR_FUNC_MODE_ZERO;12082cmb.c_ext_b = ext_local;12083cmb.c_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12084cmb.c_ext_d = GR_CMBX_ALOCAL;12085cmb.c_ext_d_invert = 0;12086break;12087}12088}1208912090void AlphaCombinerToExtension ()12091{12092DWORD ext_local, ext_other;12093switch (cmb.a_loc)12094{12095case GR_COMBINE_LOCAL_ITERATED:12096ext_local = GR_CMBX_ITALPHA;12097break;12098case GR_COMBINE_LOCAL_CONSTANT:12099ext_local = GR_CMBX_CONSTANT_ALPHA;12100break;12101default:12102ext_local = GR_CMBX_ZERO;12103};12104switch (cmb.a_oth)12105{12106case GR_COMBINE_OTHER_ITERATED:12107ext_other = GR_CMBX_ITALPHA;12108break;12109case GR_COMBINE_OTHER_TEXTURE:12110ext_other = GR_CMBX_TEXTURE_ALPHA;12111break;12112case GR_COMBINE_OTHER_CONSTANT:12113ext_other = GR_CMBX_CONSTANT_ALPHA;12114break;12115default:12116ext_other = GR_CMBX_ZERO;12117};12118switch (cmb.a_fac)12119{12120case GR_COMBINE_FACTOR_ZERO:12121cmb.a_ext_c = GR_CMBX_ZERO;12122cmb.a_ext_c_invert = 0;12123break;12124case GR_COMBINE_FACTOR_ONE:12125cmb.a_ext_c = GR_CMBX_ZERO;12126cmb.a_ext_c_invert = 1;12127break;12128case GR_COMBINE_FACTOR_LOCAL:12129case GR_COMBINE_FACTOR_LOCAL_ALPHA:12130cmb.a_ext_c = ext_local;12131cmb.a_ext_c_invert = 0;12132break;12133case GR_COMBINE_FACTOR_OTHER_ALPHA:12134cmb.a_ext_c = ext_other;12135cmb.a_ext_c_invert = 0;12136break;12137case GR_COMBINE_FACTOR_TEXTURE_ALPHA:12138cmb.a_ext_c = GR_CMBX_TEXTURE_ALPHA;12139cmb.a_ext_c_invert = 0;12140break;12141case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:12142case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:12143cmb.a_ext_c = ext_local;12144cmb.a_ext_c_invert = 1;12145break;12146case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:12147cmb.a_ext_c = ext_other;12148cmb.a_ext_c_invert = 1;12149break;12150case GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA:12151cmb.a_ext_c = GR_CMBX_TEXTURE_ALPHA;12152cmb.a_ext_c_invert = 1;12153break;12154default:12155cmb.a_ext_c = GR_CMBX_ZERO;12156cmb.a_ext_c_invert = 0;12157}1215812159switch (cmb.a_fnc)12160{12161case GR_COMBINE_FUNCTION_ZERO:12162cmb.a_ext_a = GR_CMBX_ZERO;12163cmb.a_ext_a_mode = GR_FUNC_MODE_X;12164cmb.a_ext_b = GR_CMBX_ZERO;12165cmb.a_ext_b_mode = GR_FUNC_MODE_X;12166cmb.a_ext_c = GR_CMBX_ZERO;12167cmb.a_ext_c_invert = 0;12168cmb.a_ext_d = GR_CMBX_ZERO;12169cmb.a_ext_d_invert = 0;12170break;12171case GR_COMBINE_FUNCTION_LOCAL:12172case GR_COMBINE_FUNCTION_LOCAL_ALPHA:12173cmb.a_ext_a = GR_CMBX_ZERO;12174cmb.a_ext_a_mode = GR_FUNC_MODE_ZERO;12175cmb.a_ext_b = ext_local;12176cmb.a_ext_b_mode = GR_FUNC_MODE_X;12177cmb.a_ext_c = GR_CMBX_ZERO;12178cmb.a_ext_c_invert = 1;12179cmb.a_ext_d = GR_CMBX_ZERO;12180cmb.a_ext_d_invert = 0;12181break;12182case GR_COMBINE_FUNCTION_SCALE_OTHER:12183cmb.a_ext_a = ext_other;12184cmb.a_ext_a_mode = GR_FUNC_MODE_X;12185cmb.a_ext_b = GR_CMBX_ZERO;12186cmb.a_ext_b_mode = GR_FUNC_MODE_ZERO;12187cmb.a_ext_d = GR_CMBX_ZERO;12188cmb.a_ext_d_invert = 0;12189break;12190case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:12191case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:12192cmb.a_ext_a = ext_other;12193cmb.a_ext_a_mode = GR_FUNC_MODE_X;12194cmb.a_ext_b = ext_local;12195cmb.a_ext_b_mode = GR_FUNC_MODE_ZERO;12196cmb.a_ext_d = GR_CMBX_B;12197cmb.a_ext_d_invert = 0;12198break;12199case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:12200cmb.a_ext_a = ext_other;12201cmb.a_ext_a_mode = GR_FUNC_MODE_X;12202cmb.a_ext_b = ext_local;12203cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12204cmb.a_ext_d = GR_CMBX_ZERO;12205cmb.a_ext_d_invert = 0;12206break;12207case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:12208case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:12209cmb.a_ext_a = ext_other;12210cmb.a_ext_a_mode = GR_FUNC_MODE_X;12211cmb.a_ext_b = ext_local;12212cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12213cmb.a_ext_d = GR_CMBX_B;12214cmb.a_ext_d_invert = 0;12215break;12216case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:12217case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:12218cmb.a_ext_a = GR_CMBX_ZERO;12219cmb.a_ext_a_mode = GR_FUNC_MODE_ZERO;12220cmb.a_ext_b = ext_local;12221cmb.a_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12222cmb.a_ext_d = GR_CMBX_B;12223cmb.a_ext_d_invert = 0;12224break;12225}12226}1222712228void TexColorCombinerToExtension (GrChipID_t tmu)12229{12230DWORD tc_ext_a, tc_ext_a_mode, tc_ext_b, tc_ext_b_mode, tc_ext_c, tc_ext_d;12231BOOL tc_ext_c_invert, tc_ext_d_invert;12232DWORD tmu_func, tmu_fac;1223312234if (tmu == GR_TMU0)12235{12236tmu_func = cmb.tmu0_func;12237tmu_fac = cmb.tmu0_fac;12238}12239else12240{12241tmu_func = cmb.tmu1_func;12242tmu_fac = cmb.tmu1_fac;12243}1224412245switch (tmu_fac)12246{12247case GR_COMBINE_FACTOR_ZERO:12248tc_ext_c = GR_CMBX_ZERO;12249tc_ext_c_invert = 0;12250break;12251case GR_COMBINE_FACTOR_LOCAL:12252tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;12253tc_ext_c_invert = 0;12254break;12255case GR_COMBINE_FACTOR_LOCAL_ALPHA:12256tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;12257tc_ext_c_invert = 0;12258break;12259case GR_COMBINE_FACTOR_OTHER_ALPHA:12260tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;12261tc_ext_c_invert = 0;12262break;12263case GR_COMBINE_FACTOR_DETAIL_FACTOR:12264tc_ext_c = GR_CMBX_DETAIL_FACTOR;12265tc_ext_c_invert = 0;12266break;12267case GR_COMBINE_FACTOR_ONE:12268tc_ext_c = GR_CMBX_ZERO;12269tc_ext_c_invert = 1;12270break;12271case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:12272tc_ext_c = GR_CMBX_LOCAL_TEXTURE_RGB;12273tc_ext_c_invert = 1;12274break;12275case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:12276tc_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;12277tc_ext_c_invert = 1;12278break;12279case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:12280tc_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;12281tc_ext_c_invert = 1;12282break;12283case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:12284tc_ext_c = GR_CMBX_DETAIL_FACTOR;12285tc_ext_c_invert = 1;12286break;12287default:12288tc_ext_c = 0;12289tc_ext_c_invert = 0;12290break;12291}1229212293switch (tmu_func)12294{12295case GR_COMBINE_FUNCTION_ZERO:12296tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;12297tc_ext_a_mode = GR_FUNC_MODE_ZERO;12298tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;12299tc_ext_b_mode = GR_FUNC_MODE_ZERO;12300tc_ext_c = GR_CMBX_ZERO;12301tc_ext_c_invert = 0;12302tc_ext_d = GR_CMBX_ZERO;12303tc_ext_d_invert = 0;12304break;12305case GR_COMBINE_FUNCTION_LOCAL:12306tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;12307tc_ext_a_mode = GR_FUNC_MODE_X;12308tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;12309tc_ext_b_mode = GR_FUNC_MODE_ZERO;12310tc_ext_c = GR_CMBX_ZERO;12311tc_ext_c_invert = 1;12312tc_ext_d = GR_CMBX_ZERO;12313tc_ext_d_invert = 0;12314break;12315case GR_COMBINE_FUNCTION_LOCAL_ALPHA:12316tc_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;12317tc_ext_a_mode = GR_FUNC_MODE_X;12318tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;12319tc_ext_b_mode = GR_FUNC_MODE_ZERO;12320tc_ext_c = GR_CMBX_ZERO;12321tc_ext_c_invert = 1;12322tc_ext_d = GR_CMBX_ZERO;12323tc_ext_d_invert = 0;12324break;12325case GR_COMBINE_FUNCTION_SCALE_OTHER:12326tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;12327tc_ext_a_mode = GR_FUNC_MODE_X;12328tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;12329tc_ext_b_mode = GR_FUNC_MODE_ZERO;12330tc_ext_d = GR_CMBX_ZERO;12331tc_ext_d_invert = 0;12332break;12333case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:12334tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;12335tc_ext_a_mode = GR_FUNC_MODE_X;12336tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;12337tc_ext_b_mode = GR_FUNC_MODE_ZERO;12338tc_ext_d = GR_CMBX_B;12339tc_ext_d_invert = 0;12340break;12341case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:12342tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;12343tc_ext_a_mode = GR_FUNC_MODE_X;12344tc_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;12345tc_ext_b_mode = GR_FUNC_MODE_ZERO;12346tc_ext_d = GR_CMBX_B;12347tc_ext_d_invert = 0;12348break;12349case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:12350tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;12351tc_ext_a_mode = GR_FUNC_MODE_X;12352tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;12353tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12354tc_ext_d = GR_CMBX_ZERO;12355tc_ext_d_invert = 0;12356break;12357case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:12358tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;12359tc_ext_a_mode = GR_FUNC_MODE_X;12360tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;12361tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12362tc_ext_d = GR_CMBX_B;12363tc_ext_d_invert = 0;12364break;12365case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:12366tc_ext_a = GR_CMBX_OTHER_TEXTURE_RGB;12367tc_ext_a_mode = GR_FUNC_MODE_X;12368tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;12369tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12370tc_ext_d = GR_CMBX_LOCAL_TEXTURE_ALPHA;12371tc_ext_d_invert = 0;12372break;12373case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:12374tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;12375tc_ext_a_mode = GR_FUNC_MODE_ZERO;12376tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;12377tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12378tc_ext_d = GR_CMBX_B;12379tc_ext_d_invert = 0;12380break;12381case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:12382tc_ext_a = GR_CMBX_LOCAL_TEXTURE_RGB;12383tc_ext_a_mode = GR_FUNC_MODE_ZERO;12384tc_ext_b = GR_CMBX_LOCAL_TEXTURE_RGB;12385tc_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12386tc_ext_d = GR_CMBX_LOCAL_TEXTURE_ALPHA;12387tc_ext_d_invert = 0;12388break;12389default:12390tc_ext_a = 0;12391tc_ext_a_mode = 0;12392tc_ext_b = 0;12393tc_ext_b_mode = 0;12394tc_ext_d = 0;12395tc_ext_d_invert = 0;12396break;12397}1239812399if (tmu == GR_TMU0)12400{12401cmb.t0c_ext_a = tc_ext_a;12402cmb.t0c_ext_a_mode = tc_ext_a_mode;12403cmb.t0c_ext_b = tc_ext_b;12404cmb.t0c_ext_b_mode = tc_ext_b_mode;12405cmb.t0c_ext_c = tc_ext_c;12406cmb.t0c_ext_c_invert = tc_ext_c_invert;12407cmb.t0c_ext_d = tc_ext_d;12408cmb.t0c_ext_d_invert = tc_ext_d_invert;12409}12410else12411{12412cmb.t1c_ext_a = tc_ext_a;12413cmb.t1c_ext_a_mode = tc_ext_a_mode;12414cmb.t1c_ext_b = tc_ext_b;12415cmb.t1c_ext_b_mode = tc_ext_b_mode;12416cmb.t1c_ext_c = tc_ext_c;12417cmb.t1c_ext_c_invert = tc_ext_c_invert;12418cmb.t1c_ext_d = tc_ext_d;12419cmb.t1c_ext_d_invert = tc_ext_d_invert;12420}12421}1242212423void TexAlphaCombinerToExtension (GrChipID_t tmu)12424{12425DWORD ta_ext_a, ta_ext_a_mode, ta_ext_b, ta_ext_b_mode, ta_ext_c, ta_ext_d;12426BOOL ta_ext_c_invert, ta_ext_d_invert;12427DWORD tmu_a_func, tmu_a_fac;1242812429if (tmu == GR_TMU0)12430{12431tmu_a_func = cmb.tmu0_a_func;12432tmu_a_fac = cmb.tmu0_a_fac;12433}12434else12435{12436tmu_a_func = cmb.tmu1_a_func;12437tmu_a_fac = cmb.tmu1_a_fac;12438}1243912440switch (tmu_a_fac)12441{12442case GR_COMBINE_FACTOR_ZERO:12443ta_ext_c = GR_CMBX_ZERO;12444ta_ext_c_invert = 0;12445break;12446case GR_COMBINE_FACTOR_LOCAL:12447case GR_COMBINE_FACTOR_LOCAL_ALPHA:12448ta_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;12449ta_ext_c_invert = 0;12450break;12451case GR_COMBINE_FACTOR_OTHER_ALPHA:12452ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;12453ta_ext_c_invert = 0;12454break;12455case GR_COMBINE_FACTOR_DETAIL_FACTOR:12456ta_ext_c = GR_CMBX_DETAIL_FACTOR;12457ta_ext_c_invert = 0;12458break;12459case GR_COMBINE_FACTOR_ONE:12460ta_ext_c = GR_CMBX_ZERO;12461ta_ext_c_invert = 1;12462break;12463case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL:12464case GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA:12465ta_ext_c = GR_CMBX_LOCAL_TEXTURE_ALPHA;12466ta_ext_c_invert = 1;12467break;12468case GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA:12469ta_ext_c = GR_CMBX_OTHER_TEXTURE_ALPHA;12470ta_ext_c_invert = 1;12471break;12472case GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR:12473ta_ext_c = GR_CMBX_DETAIL_FACTOR;12474ta_ext_c_invert = 1;12475break;12476default:12477ta_ext_c = 0;12478ta_ext_c_invert = 0;12479break;12480}1248112482switch (tmu_a_func)12483{12484case GR_COMBINE_FUNCTION_ZERO:12485ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;12486ta_ext_a_mode = GR_FUNC_MODE_ZERO;12487ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;12488ta_ext_b_mode = GR_FUNC_MODE_ZERO;12489ta_ext_c = GR_CMBX_ZERO;12490ta_ext_c_invert = 0;12491ta_ext_d = GR_CMBX_ZERO;12492ta_ext_d_invert = 0;12493break;12494case GR_COMBINE_FUNCTION_LOCAL:12495case GR_COMBINE_FUNCTION_LOCAL_ALPHA:12496ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;12497ta_ext_a_mode = GR_FUNC_MODE_X;12498ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;12499ta_ext_b_mode = GR_FUNC_MODE_ZERO;12500ta_ext_c = GR_CMBX_ZERO;12501ta_ext_c_invert = 1;12502ta_ext_d = GR_CMBX_ZERO;12503ta_ext_d_invert = 0;12504break;12505case GR_COMBINE_FUNCTION_SCALE_OTHER:12506ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;12507ta_ext_a_mode = GR_FUNC_MODE_X;12508ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;12509ta_ext_b_mode = GR_FUNC_MODE_ZERO;12510ta_ext_d = GR_CMBX_ZERO;12511ta_ext_d_invert = 0;12512break;12513case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL:12514case GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA:12515ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;12516ta_ext_a_mode = GR_FUNC_MODE_X;12517ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;12518ta_ext_b_mode = GR_FUNC_MODE_ZERO;12519ta_ext_d = GR_CMBX_B;12520ta_ext_d_invert = 0;12521break;12522case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL:12523ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;12524ta_ext_a_mode = GR_FUNC_MODE_X;12525ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;12526ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12527ta_ext_d = GR_CMBX_ZERO;12528ta_ext_d_invert = 0;12529break;12530case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:12531case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:12532ta_ext_a = GR_CMBX_OTHER_TEXTURE_ALPHA;12533ta_ext_a_mode = GR_FUNC_MODE_X;12534ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;12535ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12536ta_ext_d = GR_CMBX_B;12537ta_ext_d_invert = 0;12538break;12539case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL:12540case GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA:12541ta_ext_a = GR_CMBX_LOCAL_TEXTURE_ALPHA;12542ta_ext_a_mode = GR_FUNC_MODE_ZERO;12543ta_ext_b = GR_CMBX_LOCAL_TEXTURE_ALPHA;12544ta_ext_b_mode = GR_FUNC_MODE_NEGATIVE_X;12545ta_ext_d = GR_CMBX_B;12546ta_ext_d_invert = 0;12547break;12548default:12549ta_ext_a = 0;12550ta_ext_a_mode = 0;12551ta_ext_b = 0;12552ta_ext_b_mode = 0;12553ta_ext_d = 0;12554ta_ext_d_invert = 0;12555break;12556}1255712558if (tmu == GR_TMU0)12559{12560cmb.t0a_ext_a = ta_ext_a;12561cmb.t0a_ext_a_mode = ta_ext_a_mode;12562cmb.t0a_ext_b = ta_ext_b;12563cmb.t0a_ext_b_mode = ta_ext_b_mode;12564cmb.t0a_ext_c = ta_ext_c;12565cmb.t0a_ext_c_invert = ta_ext_c_invert;12566cmb.t0a_ext_d = ta_ext_d;12567cmb.t0a_ext_d_invert = ta_ext_d_invert;12568}12569else12570{12571cmb.t1a_ext_a = ta_ext_a;12572cmb.t1a_ext_a_mode = ta_ext_a_mode;12573cmb.t1a_ext_b = ta_ext_b;12574cmb.t1a_ext_b_mode = ta_ext_b_mode;12575cmb.t1a_ext_c = ta_ext_c;12576cmb.t1a_ext_c_invert = ta_ext_c_invert;12577cmb.t1a_ext_d = ta_ext_d;12578cmb.t1a_ext_d_invert = ta_ext_d_invert;12579}12580}12581125821258312584