diff --git a/Jenkinsfile b/Jenkinsfile index 2c483075c0..9ea1d6fb93 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -50,7 +50,7 @@ pipeline { branch 'master' } agent { - label 'master' + label 'zeldaret_website' } steps { unstash 'reports' diff --git a/include/functions.h b/include/functions.h index dd3b19ea93..b6efb106a1 100644 --- a/include/functions.h +++ b/include/functions.h @@ -452,7 +452,7 @@ void func_8002F974(Actor* actor, u16 sfxId); void func_8002F994(Actor* actor, s32 arg1); s32 func_8002F9EC(PlayState* play, Actor* actor, CollisionPoly* poly, s32 bgId, Vec3f* pos); void Actor_DisableLens(PlayState* play); -void func_800304DC(PlayState* play, ActorContext* actorCtx, ActorEntry* actorEntry); +void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* playerEntry); void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx); s32 func_800314D4(PlayState* play, Actor* actor, Vec3f* arg2, f32 arg3); void func_800315AC(PlayState* play, ActorContext* actorCtx); @@ -797,8 +797,8 @@ void GetItem_Draw(PlayState* play, s16 drawId); void SfxSource_InitAll(PlayState* play); void SfxSource_UpdateAll(PlayState* play); void SfxSource_PlaySfxAtFixedWorldPos(PlayState* play, Vec3f* worldPos, s32 duration, u16 sfxId); -u16 ElfMessage_GetSariaText(PlayState* play); -u16 ElfMessage_GetCUpText(PlayState* play); +u16 QuestHint_GetSariaTextId(PlayState* play); +u16 QuestHint_GetNaviTextId(PlayState* play); u16 Text_GetFaceReaction(PlayState* play, u32 reactionSet); void Flags_UnsetAllEnv(PlayState* play); void Flags_SetEnv(PlayState* play, s16 flag); @@ -1679,7 +1679,7 @@ void DebugArena_Cleanup(void); u8 DebugArena_IsInitialized(void); void UCodeDisas_Init(UCodeDisas*); void UCodeDisas_Destroy(UCodeDisas*); -// void UCodeDisas_Disassemble(UCodeDisas*, Gfx*); +void UCodeDisas_Disassemble(UCodeDisas*, Gfx*); void UCodeDisas_RegisterUCode(UCodeDisas*, s32, UCodeInfo*); void UCodeDisas_SetCurUCode(UCodeDisas*, void*); Acmd* AudioSynth_Update(Acmd* cmdStart, s32* cmdCnt, s16* aiStart, s32 aiBufLen); @@ -1826,9 +1826,9 @@ void func_800F4524(Vec3f* pos, u16 sfxId, s8 arg2); void func_800F4254(Vec3f* pos, u8 level); void Audio_PlaySfxRiver(Vec3f* pos, f32 freqScale); void Audio_PlaySfxWaterfall(Vec3f* pos, f32 freqScale); -void func_800F47BC(void); -void func_800F47FC(void); -void func_800F483C(u8 targetVol, u8 volFadeTimer); +void Audio_SetBgmVolumeOffDuringFanfare(void); +void Audio_SetBgmVolumeOnDuringFanfare(void); +void Audio_SetMainBgmVolume(u8 targetVol, u8 volFadeTimer); void Audio_SetGanonsTowerBgmVolumeLevel(u8 ganonsTowerLevel); void Audio_LowerMainBgmVolume(u8 volume); void Audio_PlaySfxIncreasinglyTransposed(Vec3f* pos, s16 sfxId, u8* semitones); @@ -1842,12 +1842,12 @@ void Audio_PlaySariaBgm(Vec3f* pos, u16 seqId, u16 distMax); void Audio_ClearSariaBgm2(void); void Audio_PlayMorningSceneSequence(u16 seqId); void Audio_PlaySceneSequence(u16 seqId); -void func_800F574C(f32 scaleTempoAndFreq, u8 duration); -void func_800F5718(void); -void func_800F5918(void); -void func_800F595C(u16); -void func_800F59E8(u16); -s32 func_800F5A58(u8); +void Audio_SetMainBgmTempoFreqAfterFanfare(f32 scaleTempoAndFreq, u8 duration); +void Audio_PlayWindmillBgm(void); +void Audio_SetFastTempoForTimedMinigame(void); +void Audio_PlaySequenceInCutscene(u16 seqId); +void Audio_StopSequenceInCutscene(u16 seqId); +s32 Audio_IsSequencePlaying(u16 seqId); void func_800F5ACC(u16 seqId); void func_800F5B58(void); void func_800F5BF0(u8 natureAmbienceId); @@ -1867,11 +1867,8 @@ void Audio_SetExtraFilter(u8); void Audio_SetCutsceneFlag(s8 flag); void Audio_PlaySfxIfNotInCutscene(u16 sfxId); void func_800F6964(u16); -void func_800F6AB0(u16); -// ? Audio_DisableAllSeq(?); -// ? func_800F6BB8(?); +void Audio_StopBgmAndFanfare(u16 fadeOutDuration); void Audio_PreNMI(void); -// ? func_800F6C34(?); void Audio_SetNatureAmbienceChannelIO(u8 channelIdxRange, u8 ioPort, u8 ioData); void Audio_PlayNatureAmbienceSequence(u8 natureAmbienceId); void Audio_Init(void); @@ -1945,7 +1942,7 @@ s8 PadUtils_GetRelX(Input* input); s8 PadUtils_GetRelY(Input* input); void PadUtils_UpdateRelXY(Input* input); s32 PadSetup_Init(OSMesgQueue* mq, u8* outMask, OSContStatus* status); -f32 Math_FTanF(f32 x); +f32 Math_FTanF(f32 angle); f32 Math_FFloorF(f32 x); f32 Math_FCeilF(f32 x); f32 Math_FRoundF(f32 x); @@ -2043,8 +2040,8 @@ s32 JpegDecoder_ParseNextSymbol(JpegHuffmanTable* hTable, s16* outCoeff, s8* out u16 JpegDecoder_ReadBits(u8 len); s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes); void guScale(Mtx* m, f32 x, f32 y, f32 z); -f32 sinf(f32); -s16 sins(u16); +f32 sinf(f32 angle); +s16 sins(u16 angle); OSTask* _VirtualToPhysicalTask(OSTask* intp); void osSpTaskLoad(OSTask* intp); void osSpTaskStartGo(OSTask* tp); @@ -2108,8 +2105,8 @@ s32 osPfsDeleteFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* s32 __osPfsReleasePages(OSPfs* pfs, __OSInode* inode, u8 initialPage, u8 bank, __OSInodeUnit* finalPage); void guOrthoF(f32[4][4], f32, f32, f32, f32, f32, f32, f32); void guOrtho(Mtx*, f32, f32, f32, f32, f32, f32, f32); -f32 cosf(f32); -s16 coss(u16); +f32 cosf(f32 angle); +s16 coss(u16 angle); void osViSetEvent(OSMesgQueue* mq, OSMesg msg, u32 retraceCount); s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern); void __osPfsRequestData(u8 cmd); diff --git a/include/regs.h b/include/regs.h index b6869cbbcf..d521b01a7f 100644 --- a/include/regs.h +++ b/include/regs.h @@ -59,15 +59,26 @@ #define R_FB_FILTER_ENV_COLOR(c) SREG(85 + (c)) #define R_ENABLE_FB_FILTER SREG(88) #define R_PAUSE_BG_PRERENDER_STATE SREG(94) // `PauseBgPreRenderState` +#define R_CAM_XZ_OFFSET_UPDATE_RATE OREG(2) +#define R_CAM_Y_OFFSET_UPDATE_RATE OREG(3) +#define R_CAM_FOV_UPDATE_RATE OREG(4) #define R_CAM_MAX_PITCH OREG(5) -#define R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV OREG(7) +#define R_CAM_R_UPDATE_RATE_INV OREG(6) +#define R_CAM_PITCH_UPDATE_RATE_INV OREG(7) +#define R_CAM_SLOPE_Y_ADJ_AMOUNT OREG(9) #define R_CAM_PITCH_FLOOR_CHECK_NEAR_DIST_FAC OREG(17) #define R_CAM_PITCH_FLOOR_CHECK_FAR_DIST_FAC OREG(18) #define R_CAM_PITCH_FLOOR_CHECK_OFFSET_Y_FAC OREG(19) #define R_CAM_PITCH_FLOOR_CHECK_NEAR_WEIGHT OREG(20) #define R_CAM_DEFAULT_ANIM_TIME OREG(23) +#define R_CAM_UPDATE_RATE_STEP_SCALE_XZ OREG(25) // also used as a step scale for other data +#define R_CAM_UPDATE_RATE_STEP_SCALE_Y OREG(26) // also used as a step scale for other data +#define R_CAM_JUMP1_EYE_Y_STEP_SCALE OREG(31) #define R_CAM_MIN_PITCH_1 OREG(34) #define R_CAM_MIN_PITCH_2 OREG(35) +#define R_CAM_BATTLE1_ROLL_TARGET_BASE OREG(36) +#define R_CAM_BATTLE1_ROLL_STEP_SCALE OREG(37) +#define R_CAM_BATTLE1_XYZ_OFFSET_UPDATE_RATE_TARGET OREG(40) #define R_CAM_AT_LERP_STEP_SCALE_MIN OREG(41) #define R_CAM_AT_LERP_STEP_SCALE_FAC OREG(42) #define R_CAM_YOFFSET_NORM OREG(46) diff --git a/include/ultra64/gbi.h b/include/ultra64/gbi.h index 63a4f1a4c1..442b68bc97 100644 --- a/include/ultra64/gbi.h +++ b/include/ultra64/gbi.h @@ -18,70 +18,70 @@ # ifndef F3DEX_GBI # define F3DEX_GBI # endif -#define G_NOOP 0x00 -#define G_RDPHALF_2 0xf1 -#define G_SETOTHERMODE_H 0xe3 -#define G_SETOTHERMODE_L 0xe2 -#define G_RDPHALF_1 0xe1 -#define G_SPNOOP 0xe0 -#define G_ENDDL 0xdf -#define G_DL 0xde -#define G_LOAD_UCODE 0xdd -#define G_MOVEMEM 0xdc -#define G_MOVEWORD 0xdb -#define G_MTX 0xda -#define G_GEOMETRYMODE 0xd9 -#define G_POPMTX 0xd8 -#define G_TEXTURE 0xd7 -#define G_DMA_IO 0xd6 -#define G_SPECIAL_1 0xd5 -#define G_SPECIAL_2 0xd4 -#define G_SPECIAL_3 0xd3 +#define G_NOOP 0x00 +#define G_RDPHALF_2 0xF1 +#define G_SETOTHERMODE_H 0xE3 +#define G_SETOTHERMODE_L 0xE2 +#define G_RDPHALF_1 0xE1 +#define G_SPNOOP 0xE0 +#define G_ENDDL 0xDF +#define G_DL 0xDE +#define G_LOAD_UCODE 0xDD +#define G_MOVEMEM 0xDC +#define G_MOVEWORD 0xDB +#define G_MTX 0xDA +#define G_GEOMETRYMODE 0xD9 +#define G_POPMTX 0xD8 +#define G_TEXTURE 0xD7 +#define G_DMA_IO 0xD6 +#define G_SPECIAL_1 0xD5 +#define G_SPECIAL_2 0xD4 +#define G_SPECIAL_3 0xD3 -#define G_VTX 0x01 -#define G_MODIFYVTX 0x02 -#define G_CULLDL 0x03 -#define G_BRANCH_Z 0x04 -#define G_TRI1 0x05 -#define G_TRI2 0x06 -#define G_QUAD 0x07 -#define G_LINE3D 0x08 +#define G_VTX 0x01 +#define G_MODIFYVTX 0x02 +#define G_CULLDL 0x03 +#define G_BRANCH_Z 0x04 +#define G_TRI1 0x05 +#define G_TRI2 0x06 +#define G_QUAD 0x07 +#define G_LINE3D 0x08 #else /* F3DEX_GBI_2 */ /* DMA commands: */ -#define G_SPNOOP 0 /* handle 0 gracefully */ -#define G_MTX 1 -#define G_RESERVED0 2 /* not implemeted */ -#define G_MOVEMEM 3 /* move a block of memory (up to 4 words) to dmem */ -#define G_VTX 4 -#define G_RESERVED1 5 /* not implemeted */ -#define G_DL 6 -#define G_RESERVED2 7 /* not implemeted */ -#define G_RESERVED3 8 /* not implemeted */ +#define G_SPNOOP 0 /* handle 0 gracefully */ +#define G_MTX 1 +#define G_RESERVED0 2 /* not implemeted */ +#define G_MOVEMEM 3 /* move a block of memory (up to 4 words) to dmem */ +#define G_VTX 4 +#define G_RESERVED1 5 /* not implemeted */ +#define G_DL 6 +#define G_RESERVED2 7 /* not implemeted */ +#define G_RESERVED3 8 /* not implemeted */ #define G_SPRITE2D_BASE 9 /* sprite command */ /* IMMEDIATE commands: */ -#define G_IMMFIRST -65 -#define G_TRI1 (G_IMMFIRST-0) -#define G_CULLDL (G_IMMFIRST-1) -#define G_POPMTX (G_IMMFIRST-2) -#define G_MOVEWORD (G_IMMFIRST-3) -#define G_TEXTURE (G_IMMFIRST-4) -#define G_SETOTHERMODE_H (G_IMMFIRST-5) -#define G_SETOTHERMODE_L (G_IMMFIRST-6) -#define G_ENDDL (G_IMMFIRST-7) -#define G_SETGEOMETRYMODE (G_IMMFIRST-8) -#define G_CLEARGEOMETRYMODE (G_IMMFIRST-9) -#define G_LINE3D (G_IMMFIRST-10) -#define G_RDPHALF_1 (G_IMMFIRST-11) -#define G_RDPHALF_2 (G_IMMFIRST-12) -#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) -# define G_MODIFYVTX (G_IMMFIRST-13) -# define G_TRI2 (G_IMMFIRST-14) -# define G_BRANCH_Z (G_IMMFIRST-15) -# define G_LOAD_UCODE (G_IMMFIRST-16) +#define G_IMMFIRST -0x41 +#define G_TRI1 (G_IMMFIRST-0) +#define G_CULLDL (G_IMMFIRST-1) +#define G_POPMTX (G_IMMFIRST-2) +#define G_MOVEWORD (G_IMMFIRST-3) +#define G_TEXTURE (G_IMMFIRST-4) +#define G_SETOTHERMODE_H (G_IMMFIRST-5) +#define G_SETOTHERMODE_L (G_IMMFIRST-6) +#define G_ENDDL (G_IMMFIRST-7) +#define G_SETGEOMETRYMODE (G_IMMFIRST-8) +#define G_CLEARGEOMETRYMODE (G_IMMFIRST-9) +#define G_LINE3D (G_IMMFIRST-10) +#define G_RDPHALF_1 (G_IMMFIRST-11) +#define G_RDPHALF_2 (G_IMMFIRST-12) +#if (defined(F3DEX_GBI) || defined(F3DLP_GBI)) +# define G_MODIFYVTX (G_IMMFIRST-13) +# define G_TRI2 (G_IMMFIRST-14) +# define G_BRANCH_Z (G_IMMFIRST-15) +# define G_LOAD_UCODE (G_IMMFIRST-16) #else -# define G_RDPHALF_CONT (G_IMMFIRST-13) +# define G_RDPHALF_CONT (G_IMMFIRST-13) #endif /* We are overloading 2 of the immediate commands @@ -91,38 +91,38 @@ #define G_SPRITE2D_DRAW (G_IMMFIRST-2) /* RDP commands: */ -#define G_NOOP 0xc0 /* 0 */ +#define G_NOOP 0xC0 /* 0 */ #endif /* F3DEX_GBI_2 */ /* RDP commands: */ -#define G_SETCIMG 0xff /* -1 */ -#define G_SETZIMG 0xfe /* -2 */ -#define G_SETTIMG 0xfd /* -3 */ -#define G_SETCOMBINE 0xfc /* -4 */ -#define G_SETENVCOLOR 0xfb /* -5 */ -#define G_SETPRIMCOLOR 0xfa /* -6 */ -#define G_SETBLENDCOLOR 0xf9 /* -7 */ -#define G_SETFOGCOLOR 0xf8 /* -8 */ -#define G_SETFILLCOLOR 0xf7 /* -9 */ -#define G_FILLRECT 0xf6 /* -10 */ -#define G_SETTILE 0xf5 /* -11 */ -#define G_LOADTILE 0xf4 /* -12 */ -#define G_LOADBLOCK 0xf3 /* -13 */ -#define G_SETTILESIZE 0xf2 /* -14 */ -#define G_LOADTLUT 0xf0 /* -16 */ -#define G_RDPSETOTHERMODE 0xef /* -17 */ -#define G_SETPRIMDEPTH 0xee /* -18 */ -#define G_SETSCISSOR 0xed /* -19 */ -#define G_SETCONVERT 0xec /* -20 */ -#define G_SETKEYR 0xeb /* -21 */ -#define G_SETKEYGB 0xea /* -22 */ -#define G_RDPFULLSYNC 0xe9 /* -23 */ -#define G_RDPTILESYNC 0xe8 /* -24 */ -#define G_RDPPIPESYNC 0xe7 /* -25 */ -#define G_RDPLOADSYNC 0xe6 /* -26 */ -#define G_TEXRECTFLIP 0xe5 /* -27 */ -#define G_TEXRECT 0xe4 /* -28 */ +#define G_SETCIMG 0xFF /* -1 */ +#define G_SETZIMG 0xFE /* -2 */ +#define G_SETTIMG 0xFD /* -3 */ +#define G_SETCOMBINE 0xFC /* -4 */ +#define G_SETENVCOLOR 0xFB /* -5 */ +#define G_SETPRIMCOLOR 0xFA /* -6 */ +#define G_SETBLENDCOLOR 0xF9 /* -7 */ +#define G_SETFOGCOLOR 0xF8 /* -8 */ +#define G_SETFILLCOLOR 0xF7 /* -9 */ +#define G_FILLRECT 0xF6 /* -10 */ +#define G_SETTILE 0xF5 /* -11 */ +#define G_LOADTILE 0xF4 /* -12 */ +#define G_LOADBLOCK 0xF3 /* -13 */ +#define G_SETTILESIZE 0xF2 /* -14 */ +#define G_LOADTLUT 0xF0 /* -16 */ +#define G_RDPSETOTHERMODE 0xEF /* -17 */ +#define G_SETPRIMDEPTH 0xEE /* -18 */ +#define G_SETSCISSOR 0xED /* -19 */ +#define G_SETCONVERT 0xEC /* -20 */ +#define G_SETKEYR 0xEB /* -21 */ +#define G_SETKEYGB 0xEA /* -22 */ +#define G_RDPFULLSYNC 0xE9 /* -23 */ +#define G_RDPTILESYNC 0xE8 /* -24 */ +#define G_RDPPIPESYNC 0xE7 /* -25 */ +#define G_RDPLOADSYNC 0xE6 /* -26 */ +#define G_TEXRECTFLIP 0xE5 /* -27 */ +#define G_TEXRECT 0xE4 /* -28 */ /* @@ -131,16 +131,16 @@ * * The layout of the bits is magical, to save work in the ucode. * These id's are -56, -52, -54, -50, -55, -51, -53, -49, ... - * edge, shade, texture, zbuff bits: estz + * edge, shade, texture, zbuff bits: estz */ -#define G_TRI_FILL 0xc8 /* fill triangle: 11001000 */ -#define G_TRI_SHADE 0xcc /* shade triangle: 11001100 */ -#define G_TRI_TXTR 0xca /* texture triangle: 11001010 */ -#define G_TRI_SHADE_TXTR 0xce /* shade, texture triangle: 11001110 */ -#define G_TRI_FILL_ZBUFF 0xc9 /* fill, zbuff triangle: 11001001 */ -#define G_TRI_SHADE_ZBUFF 0xcd /* shade, zbuff triangle: 11001101 */ -#define G_TRI_TXTR_ZBUFF 0xcb /* texture, zbuff triangle: 11001011 */ -#define G_TRI_SHADE_TXTR_ZBUFF 0xcf /* shade, txtr, zbuff trngl: 11001111 */ +#define G_TRI_FILL 0xC8 /* fill triangle: 11001000 */ +#define G_TRI_SHADE 0xCC /* shade triangle: 11001100 */ +#define G_TRI_TXTR 0xCA /* texture triangle: 11001010 */ +#define G_TRI_SHADE_TXTR 0xCE /* shade, texture triangle: 11001110 */ +#define G_TRI_FILL_ZBUFF 0xC9 /* fill, zbuff triangle: 11001001 */ +#define G_TRI_SHADE_ZBUFF 0xCD /* shade, zbuff triangle: 11001101 */ +#define G_TRI_TXTR_ZBUFF 0xCB /* texture, zbuff triangle: 11001011 */ +#define G_TRI_SHADE_TXTR_ZBUFF 0xCF /* shade, txtr, zbuff trngl: 11001111 */ /* * A TRI_FILL triangle is just the edges. You need to set the DP @@ -156,9 +156,9 @@ */ /* masks to build RDP triangle commands: */ -#define G_RDP_TRI_FILL_MASK 0x08 +#define G_RDP_TRI_FILL_MASK 0x08 #define G_RDP_TRI_SHADE_MASK 0x04 -#define G_RDP_TRI_TXTR_MASK 0x02 +#define G_RDP_TRI_TXTR_MASK 0x02 #define G_RDP_TRI_ZBUFF_MASK 0x01 /* @@ -180,13 +180,13 @@ /* gets added to RDP command, in order to test for addres fixup: */ #define G_RDP_ADDR_FIXUP 3 /* |RDP cmds| <= this, do addr fixup */ #ifdef _LANGUAGE_ASSEMBLY -#define G_RDP_TEXRECT_CHECK ((-1*G_TEXRECTFLIP)& 0xff) +#define G_RDP_TEXRECT_CHECK ((-1 * G_TEXRECTFLIP) & 0xFF) #endif /* macros for command parsing: */ #define GDMACMD(x) (x) -#define GIMMCMD(x) (G_IMMFIRST-(x)) -#define GRDPCMD(x) (0xff-(x)) +#define GIMMCMD(x) (G_IMMFIRST - (x)) +#define GRDPCMD(x) (0xFF - (x)) #define G_DMACMDSIZ 128 #define G_IMMCMDSIZ 64 @@ -197,8 +197,8 @@ */ #define G_TEXTURE_IMAGE_FRAC 2 #define G_TEXTURE_SCALE_FRAC 16 -#define G_SCALE_FRAC 8 -#define G_ROTATE_FRAC 16 +#define G_SCALE_FRAC 8 +#define G_ROTATE_FRAC 16 /* * Parameters to graphics commands @@ -213,13 +213,17 @@ * Note : this number is NOT the viewport z-scale constant. * See the comment next to G_MAXZ for more info. */ -#define G_MAXFBZ 0x3fff /* 3b exp, 11b mantissa */ +#define G_MAXFBZ 0x3FFF /* 3b exp, 11b mantissa */ -#define GPACK_RGBA5551(r, g, b, a) ((((r)<<8) & 0xf800) | \ - (((g)<<3) & 0x7c0) | \ - (((b)>>2) & 0x3e) | ((a) & 0x1)) -#define GPACK_IA16(i, a) (((i) << 8) | (a)) -#define GPACK_ZDZ(z, dz) ((z) << 2 | (dz)) +#define GPACK_RGBA5551(r, g, b, a) \ + ((((r) << 8) & 0xF800) | \ + (((g) << 3) & 0x07C0) | \ + (((b) >> 2) & 0x003E) | \ + ((a) & 1)) + +#define GPACK_IA16(i, a) (((i) << 8) | (a)) + +#define GPACK_ZDZ(z, dz) (((z) << 2) | (dz)) /* * G_MTX: parameter flags @@ -227,17 +231,17 @@ #ifdef F3DEX_GBI_2 # define G_MTX_MODELVIEW 0x00 /* matrix types */ # define G_MTX_PROJECTION 0x04 -# define G_MTX_MUL 0x00 /* concat or load */ -# define G_MTX_LOAD 0x02 +# define G_MTX_MUL 0x00 /* concat or load */ +# define G_MTX_LOAD 0x02 # define G_MTX_NOPUSH 0x00 /* push or not */ -# define G_MTX_PUSH 0x01 +# define G_MTX_PUSH 0x01 #else /* F3DEX_GBI_2 */ # define G_MTX_MODELVIEW 0x00 /* matrix types */ # define G_MTX_PROJECTION 0x01 -# define G_MTX_MUL 0x00 /* concat or load */ -# define G_MTX_LOAD 0x02 +# define G_MTX_MUL 0x00 /* concat or load */ +# define G_MTX_LOAD 0x02 # define G_MTX_NOPUSH 0x00 /* push or not */ -# define G_MTX_PUSH 0x04 +# define G_MTX_PUSH 0x04 #endif /* F3DEX_GBI_2 */ /* @@ -265,42 +269,42 @@ * See the man page for gSP1Triangle(). * */ -#define G_ZBUFFER 0x00000001 -#define G_SHADE 0x00000004 /* enable Gouraud interp */ +#define G_ZBUFFER 0x00000001 +#define G_SHADE 0x00000004 /* enable Gouraud interp */ /* rest of low byte reserved for setup ucode */ #ifdef F3DEX_GBI_2 -# define G_TEXTURE_ENABLE 0x00000000 /* Ignored */ -# define G_SHADING_SMOOTH 0x00200000 /* flat or smooth shaded */ -# define G_CULL_FRONT 0x00000200 -# define G_CULL_BACK 0x00000400 -# define G_CULL_BOTH 0x00000600 /* To make code cleaner */ +# define G_TEXTURE_ENABLE 0x00000000 /* Ignored */ +# define G_SHADING_SMOOTH 0x00200000 /* flat or smooth shaded */ +# define G_CULL_FRONT 0x00000200 +# define G_CULL_BACK 0x00000400 +# define G_CULL_BOTH 0x00000600 /* To make code cleaner */ #else -# define G_TEXTURE_ENABLE 0x00000002 /* Microcode use only */ -# define G_SHADING_SMOOTH 0x00000200 /* flat or smooth shaded */ -# define G_CULL_FRONT 0x00001000 -# define G_CULL_BACK 0x00002000 -# define G_CULL_BOTH 0x00003000 /* To make code cleaner */ +# define G_TEXTURE_ENABLE 0x00000002 /* Microcode use only */ +# define G_SHADING_SMOOTH 0x00000200 /* flat or smooth shaded */ +# define G_CULL_FRONT 0x00001000 +# define G_CULL_BACK 0x00002000 +# define G_CULL_BOTH 0x00003000 /* To make code cleaner */ #endif -#define G_FOG 0x00010000 -#define G_LIGHTING 0x00020000 -#define G_TEXTURE_GEN 0x00040000 +#define G_FOG 0x00010000 +#define G_LIGHTING 0x00020000 +#define G_TEXTURE_GEN 0x00040000 #define G_TEXTURE_GEN_LINEAR 0x00080000 -#define G_LOD 0x00100000 /* NOT IMPLEMENTED */ -#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) -# define G_CLIPPING 0x00800000 +#define G_LOD 0x00100000 /* NOT IMPLEMENTED */ +#if (defined(F3DEX_GBI) || defined(F3DLP_GBI)) +# define G_CLIPPING 0x00800000 #else -# define G_CLIPPING 0x00000000 +# define G_CLIPPING 0x00000000 #endif #ifdef _LANGUAGE_ASSEMBLY -#define G_FOG_H (G_FOG/0x10000) -#define G_LIGHTING_H (G_LIGHTING/0x10000) -#define G_TEXTURE_GEN_H (G_TEXTURE_GEN/0x10000) +#define G_FOG_H (G_FOG/0x10000) +#define G_LIGHTING_H (G_LIGHTING/0x10000) +#define G_TEXTURE_GEN_H (G_TEXTURE_GEN/0x10000) #define G_TEXTURE_GEN_LINEAR_H (G_TEXTURE_GEN_LINEAR/0x10000) -#define G_LOD_H (G_LOD/0x10000) /* NOT IMPLEMENTED */ -#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) -# define G_CLIPPING_H (G_CLIPPING/0x10000) -#endif +#define G_LOD_H (G_LOD/0x10000) /* NOT IMPLEMENTED */ +# if (defined(F3DEX_GBI) || defined(F3DLP_GBI)) +# define G_CLIPPING_H (G_CLIPPING/0x10000) +# endif #endif /* Need these defined for Sprite Microcode */ @@ -308,12 +312,12 @@ #define G_TX_LOADTILE 7 #define G_TX_RENDERTILE 0 -#define G_TX_NOMIRROR 0 -#define G_TX_WRAP 0 -#define G_TX_MIRROR 0x1 -#define G_TX_CLAMP 0x2 -#define G_TX_NOMASK 0 -#define G_TX_NOLOD 0 +#define G_TX_NOMIRROR (0 << 0) +#define G_TX_WRAP (0 << 1) +#define G_TX_MIRROR (1 << 0) +#define G_TX_CLAMP (1 << 1) +#define G_TX_NOMASK 0 +#define G_TX_NOLOD 0 #endif /* @@ -321,18 +325,18 @@ */ #define G_IM_FMT_RGBA 0 #define G_IM_FMT_YUV 1 -#define G_IM_FMT_CI 2 -#define G_IM_FMT_IA 3 -#define G_IM_FMT_I 4 +#define G_IM_FMT_CI 2 +#define G_IM_FMT_IA 3 +#define G_IM_FMT_I 4 /* * G_SETIMG siz: set image pixel size */ -#define G_IM_SIZ_4b 0 -#define G_IM_SIZ_8b 1 +#define G_IM_SIZ_4b 0 +#define G_IM_SIZ_8b 1 #define G_IM_SIZ_16b 2 #define G_IM_SIZ_32b 3 -#define G_IM_SIZ_DD 5 +#define G_IM_SIZ_DD 5 #define G_IM_SIZ_4b_BYTES 0 #define G_IM_SIZ_4b_TILE_BYTES G_IM_SIZ_4b_BYTES @@ -369,123 +373,123 @@ * G_SETCOMBINE: color combine modes */ /* Color combiner constants: */ -#define G_CCMUX_COMBINED 0 -#define G_CCMUX_TEXEL0 1 -#define G_CCMUX_TEXEL1 2 -#define G_CCMUX_PRIMITIVE 3 -#define G_CCMUX_SHADE 4 -#define G_CCMUX_ENVIRONMENT 5 -#define G_CCMUX_CENTER 6 -#define G_CCMUX_SCALE 6 +#define G_CCMUX_COMBINED 0 +#define G_CCMUX_TEXEL0 1 +#define G_CCMUX_TEXEL1 2 +#define G_CCMUX_PRIMITIVE 3 +#define G_CCMUX_SHADE 4 +#define G_CCMUX_ENVIRONMENT 5 +#define G_CCMUX_CENTER 6 +#define G_CCMUX_SCALE 6 #define G_CCMUX_COMBINED_ALPHA 7 #define G_CCMUX_TEXEL0_ALPHA 8 #define G_CCMUX_TEXEL1_ALPHA 9 #define G_CCMUX_PRIMITIVE_ALPHA 10 -#define G_CCMUX_SHADE_ALPHA 11 -#define G_CCMUX_ENV_ALPHA 12 +#define G_CCMUX_SHADE_ALPHA 11 +#define G_CCMUX_ENV_ALPHA 12 #define G_CCMUX_LOD_FRACTION 13 #define G_CCMUX_PRIM_LOD_FRAC 14 -#define G_CCMUX_NOISE 7 -#define G_CCMUX_K4 7 -#define G_CCMUX_K5 15 -#define G_CCMUX_1 6 -#define G_CCMUX_0 31 +#define G_CCMUX_NOISE 7 +#define G_CCMUX_K4 7 +#define G_CCMUX_K5 15 +#define G_CCMUX_1 6 +#define G_CCMUX_0 31 /* Alpha combiner constants: */ -#define G_ACMUX_COMBINED 0 -#define G_ACMUX_TEXEL0 1 -#define G_ACMUX_TEXEL1 2 -#define G_ACMUX_PRIMITIVE 3 -#define G_ACMUX_SHADE 4 -#define G_ACMUX_ENVIRONMENT 5 +#define G_ACMUX_COMBINED 0 +#define G_ACMUX_TEXEL0 1 +#define G_ACMUX_TEXEL1 2 +#define G_ACMUX_PRIMITIVE 3 +#define G_ACMUX_SHADE 4 +#define G_ACMUX_ENVIRONMENT 5 #define G_ACMUX_LOD_FRACTION 0 #define G_ACMUX_PRIM_LOD_FRAC 6 -#define G_ACMUX_1 6 -#define G_ACMUX_0 7 +#define G_ACMUX_1 6 +#define G_ACMUX_0 7 /* typical CC cycle 1 modes */ -#define G_CC_PRIMITIVE 0, 0, 0, PRIMITIVE, 0, 0, 0, PRIMITIVE -#define G_CC_SHADE 0, 0, 0, SHADE, 0, 0, 0, SHADE -#define G_CC_MODULATEI TEXEL0, 0, SHADE, 0, 0, 0, 0, SHADE -#define G_CC_MODULATEIA TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0 -#define G_CC_MODULATEIDECALA TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0 -#define G_CC_MODULATERGB G_CC_MODULATEI -#define G_CC_MODULATERGBA G_CC_MODULATEIA -#define G_CC_MODULATERGBDECALA G_CC_MODULATEIDECALA -#define G_CC_MODULATEI_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE -#define G_CC_MODULATEIA_PRIM TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0 +#define G_CC_PRIMITIVE 0, 0, 0, PRIMITIVE, 0, 0, 0, PRIMITIVE +#define G_CC_SHADE 0, 0, 0, SHADE, 0, 0, 0, SHADE +#define G_CC_MODULATEI TEXEL0, 0, SHADE, 0, 0, 0, 0, SHADE +#define G_CC_MODULATEIA TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0 +#define G_CC_MODULATEIDECALA TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0 +#define G_CC_MODULATERGB G_CC_MODULATEI +#define G_CC_MODULATERGBA G_CC_MODULATEIA +#define G_CC_MODULATERGBDECALA G_CC_MODULATEIDECALA +#define G_CC_MODULATEI_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE +#define G_CC_MODULATEIA_PRIM TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0 #define G_CC_MODULATEIDECALA_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0 -#define G_CC_MODULATERGB_PRIM G_CC_MODULATEI_PRIM -#define G_CC_MODULATERGBA_PRIM G_CC_MODULATEIA_PRIM +#define G_CC_MODULATERGB_PRIM G_CC_MODULATEI_PRIM +#define G_CC_MODULATERGBA_PRIM G_CC_MODULATEIA_PRIM #define G_CC_MODULATERGBDECALA_PRIM G_CC_MODULATEIDECALA_PRIM -#define G_CC_DECALRGB 0, 0, 0, TEXEL0, 0, 0, 0, SHADE -#define G_CC_DECALRGBA 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0 -#define G_CC_BLENDI ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE -#define G_CC_BLENDIA ENVIRONMENT, SHADE, TEXEL0, SHADE, TEXEL0, 0, SHADE, 0 -#define G_CC_BLENDIDECALA ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0 -#define G_CC_BLENDRGBA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, SHADE -#define G_CC_BLENDRGBDECALA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, TEXEL0 -#define G_CC_ADDRGB 1, 0, TEXEL0, SHADE, 0, 0, 0, SHADE -#define G_CC_ADDRGBDECALA 1, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 -#define G_CC_REFLECTRGB ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, SHADE -#define G_CC_REFLECTRGBDECALA ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 -#define G_CC_HILITERGB PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE -#define G_CC_HILITERGBA PRIMITIVE, SHADE, TEXEL0, SHADE, PRIMITIVE, SHADE, TEXEL0, SHADE -#define G_CC_HILITERGBDECALA PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0 -#define G_CC_SHADEDECALA 0, 0, 0, SHADE, 0, 0, 0, TEXEL0 -#define G_CC_BLENDPE PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, SHADE, 0 -#define G_CC_BLENDPEDECALA PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, TEXEL0 +#define G_CC_DECALRGB 0, 0, 0, TEXEL0, 0, 0, 0, SHADE +#define G_CC_DECALRGBA 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0 +#define G_CC_BLENDI ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_BLENDIA ENVIRONMENT, SHADE, TEXEL0, SHADE, TEXEL0, 0, SHADE, 0 +#define G_CC_BLENDIDECALA ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_BLENDRGBA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, SHADE +#define G_CC_BLENDRGBDECALA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_ADDRGB 1, 0, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_ADDRGBDECALA 1, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_REFLECTRGB ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_REFLECTRGBDECALA ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_HILITERGB PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_HILITERGBA PRIMITIVE, SHADE, TEXEL0, SHADE, PRIMITIVE, SHADE, TEXEL0, SHADE +#define G_CC_HILITERGBDECALA PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_SHADEDECALA 0, 0, 0, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_BLENDPE PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, SHADE, 0 +#define G_CC_BLENDPEDECALA PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, TEXEL0 /* oddball modes */ -#define _G_CC_BLENDPE ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, SHADE, 0 -#define _G_CC_BLENDPEDECALA ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, 0, 0, 0, TEXEL0 -#define _G_CC_TWOCOLORTEX PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE +#define _G_CC_BLENDPE ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, SHADE, 0 +#define _G_CC_BLENDPEDECALA ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, 0, 0, 0, TEXEL0 +#define _G_CC_TWOCOLORTEX PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE /* used for 1-cycle sparse mip-maps, primitive color has color of lowest LOD */ -#define _G_CC_SPARSEST PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0, PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0 -#define G_CC_TEMPLERP TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0 +#define _G_CC_SPARSEST PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0, PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0 +#define G_CC_TEMPLERP TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0 /* typical CC cycle 1 modes, usually followed by other cycle 2 modes */ -#define G_CC_TRILERP TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0 -#define G_CC_INTERFERENCE TEXEL0, 0, TEXEL1, 0, TEXEL0, 0, TEXEL1, 0 +#define G_CC_TRILERP TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0 +#define G_CC_INTERFERENCE TEXEL0, 0, TEXEL1, 0, TEXEL0, 0, TEXEL1, 0 /* * One-cycle color convert operation */ -#define G_CC_1CYUV2RGB TEXEL0, K4, K5, TEXEL0, 0, 0, 0, SHADE +#define G_CC_1CYUV2RGB TEXEL0, K4, K5, TEXEL0, 0, 0, 0, SHADE /* * NOTE: YUV2RGB expects TF step1 color conversion to occur in 2nd clock. * Therefore, CC looks for step1 results in TEXEL1 */ -#define G_CC_YUV2RGB TEXEL1, K4, K5, TEXEL1, 0, 0, 0, 0 +#define G_CC_YUV2RGB TEXEL1, K4, K5, TEXEL1, 0, 0, 0, 0 /* typical CC cycle 2 modes */ -#define G_CC_PASS2 0, 0, 0, COMBINED, 0, 0, 0, COMBINED -#define G_CC_MODULATEI2 COMBINED, 0, SHADE, 0, 0, 0, 0, SHADE -#define G_CC_MODULATEIA2 COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0 -#define G_CC_MODULATERGB2 G_CC_MODULATEI2 -#define G_CC_MODULATERGBA2 G_CC_MODULATEIA2 -#define G_CC_MODULATEI_PRIM2 COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE -#define G_CC_MODULATEIA_PRIM2 COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0 -#define G_CC_MODULATERGB_PRIM2 G_CC_MODULATEI_PRIM2 -#define G_CC_MODULATERGBA_PRIM2 G_CC_MODULATEIA_PRIM2 -#define G_CC_DECALRGB2 0, 0, 0, COMBINED, 0, 0, 0, SHADE +#define G_CC_PASS2 0, 0, 0, COMBINED, 0, 0, 0, COMBINED +#define G_CC_MODULATEI2 COMBINED, 0, SHADE, 0, 0, 0, 0, SHADE +#define G_CC_MODULATEIA2 COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0 +#define G_CC_MODULATERGB2 G_CC_MODULATEI2 +#define G_CC_MODULATERGBA2 G_CC_MODULATEIA2 +#define G_CC_MODULATEI_PRIM2 COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE +#define G_CC_MODULATEIA_PRIM2 COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0 +#define G_CC_MODULATERGB_PRIM2 G_CC_MODULATEI_PRIM2 +#define G_CC_MODULATERGBA_PRIM2 G_CC_MODULATEIA_PRIM2 +#define G_CC_DECALRGB2 0, 0, 0, COMBINED, 0, 0, 0, SHADE /* * ? -#define G_CC_DECALRGBA2 COMBINED, SHADE, COMBINED_ALPHA, SHADE, 0, 0, 0, SHADE +#define G_CC_DECALRGBA2 COMBINED, SHADE, COMBINED_ALPHA, SHADE, 0, 0, 0, SHADE */ -#define G_CC_BLENDI2 ENVIRONMENT, SHADE, COMBINED, SHADE, 0, 0, 0, SHADE -#define G_CC_BLENDIA2 ENVIRONMENT, SHADE, COMBINED, SHADE, COMBINED, 0, SHADE, 0 -#define G_CC_CHROMA_KEY2 TEXEL0, CENTER, SCALE, 0, 0, 0, 0, 0 -#define G_CC_HILITERGB2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, SHADE -#define G_CC_HILITERGBA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, ENVIRONMENT, COMBINED, TEXEL0, COMBINED -#define G_CC_HILITERGBDECALA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, TEXEL0 -#define G_CC_HILITERGBPASSA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, COMBINED +#define G_CC_BLENDI2 ENVIRONMENT, SHADE, COMBINED, SHADE, 0, 0, 0, SHADE +#define G_CC_BLENDIA2 ENVIRONMENT, SHADE, COMBINED, SHADE, COMBINED, 0, SHADE, 0 +#define G_CC_CHROMA_KEY2 TEXEL0, CENTER, SCALE, 0, 0, 0, 0, 0 +#define G_CC_HILITERGB2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, SHADE +#define G_CC_HILITERGBA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, ENVIRONMENT, COMBINED, TEXEL0, COMBINED +#define G_CC_HILITERGBDECALA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, TEXEL0 +#define G_CC_HILITERGBPASSA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, COMBINED /* * G_SETOTHERMODE_L sft: shift count */ -#define G_MDSFT_ALPHACOMPARE 0 +#define G_MDSFT_ALPHACOMPARE 0 #define G_MDSFT_ZSRCSEL 2 #define G_MDSFT_RENDERMODE 3 #define G_MDSFT_BLENDER 16 @@ -515,326 +519,326 @@ /* G_SETOTHERMODE_H gSetCycleType */ #define G_CYC_1CYCLE (0 << G_MDSFT_CYCLETYPE) #define G_CYC_2CYCLE (1 << G_MDSFT_CYCLETYPE) -#define G_CYC_COPY (2 << G_MDSFT_CYCLETYPE) -#define G_CYC_FILL (3 << G_MDSFT_CYCLETYPE) +#define G_CYC_COPY (2 << G_MDSFT_CYCLETYPE) +#define G_CYC_FILL (3 << G_MDSFT_CYCLETYPE) /* G_SETOTHERMODE_H gSetTexturePersp */ -#define G_TP_NONE (0 << G_MDSFT_TEXTPERSP) -#define G_TP_PERSP (1 << G_MDSFT_TEXTPERSP) +#define G_TP_NONE (0 << G_MDSFT_TEXTPERSP) +#define G_TP_PERSP (1 << G_MDSFT_TEXTPERSP) /* G_SETOTHERMODE_H gSetTextureDetail */ -#define G_TD_CLAMP (0 << G_MDSFT_TEXTDETAIL) -#define G_TD_SHARPEN (1 << G_MDSFT_TEXTDETAIL) -#define G_TD_DETAIL (2 << G_MDSFT_TEXTDETAIL) +#define G_TD_CLAMP (0 << G_MDSFT_TEXTDETAIL) +#define G_TD_SHARPEN (1 << G_MDSFT_TEXTDETAIL) +#define G_TD_DETAIL (2 << G_MDSFT_TEXTDETAIL) /* G_SETOTHERMODE_H gSetTextureLOD */ -#define G_TL_TILE (0 << G_MDSFT_TEXTLOD) -#define G_TL_LOD (1 << G_MDSFT_TEXTLOD) +#define G_TL_TILE (0 << G_MDSFT_TEXTLOD) +#define G_TL_LOD (1 << G_MDSFT_TEXTLOD) /* G_SETOTHERMODE_H gSetTextureLUT */ -#define G_TT_NONE (0 << G_MDSFT_TEXTLUT) -#define G_TT_RGBA16 (2 << G_MDSFT_TEXTLUT) -#define G_TT_IA16 (3 << G_MDSFT_TEXTLUT) +#define G_TT_NONE (0 << G_MDSFT_TEXTLUT) +#define G_TT_RGBA16 (2 << G_MDSFT_TEXTLUT) +#define G_TT_IA16 (3 << G_MDSFT_TEXTLUT) /* G_SETOTHERMODE_H gSetTextureFilter */ -#define G_TF_POINT (0 << G_MDSFT_TEXTFILT) -#define G_TF_AVERAGE (3 << G_MDSFT_TEXTFILT) -#define G_TF_BILERP (2 << G_MDSFT_TEXTFILT) +#define G_TF_POINT (0 << G_MDSFT_TEXTFILT) +#define G_TF_AVERAGE (3 << G_MDSFT_TEXTFILT) +#define G_TF_BILERP (2 << G_MDSFT_TEXTFILT) /* G_SETOTHERMODE_H gSetTextureConvert */ -#define G_TC_CONV (0 << G_MDSFT_TEXTCONV) -#define G_TC_FILTCONV (5 << G_MDSFT_TEXTCONV) -#define G_TC_FILT (6 << G_MDSFT_TEXTCONV) +#define G_TC_CONV (0 << G_MDSFT_TEXTCONV) +#define G_TC_FILTCONV (5 << G_MDSFT_TEXTCONV) +#define G_TC_FILT (6 << G_MDSFT_TEXTCONV) /* G_SETOTHERMODE_H gSetCombineKey */ -#define G_CK_NONE (0 << G_MDSFT_COMBKEY) -#define G_CK_KEY (1 << G_MDSFT_COMBKEY) +#define G_CK_NONE (0 << G_MDSFT_COMBKEY) +#define G_CK_KEY (1 << G_MDSFT_COMBKEY) /* G_SETOTHERMODE_H gSetColorDither */ #define G_CD_MAGICSQ (0 << G_MDSFT_RGBDITHER) -#define G_CD_BAYER (1 << G_MDSFT_RGBDITHER) -#define G_CD_NOISE (2 << G_MDSFT_RGBDITHER) +#define G_CD_BAYER (1 << G_MDSFT_RGBDITHER) +#define G_CD_NOISE (2 << G_MDSFT_RGBDITHER) #ifndef _HW_VERSION_1 #define G_CD_DISABLE (3 << G_MDSFT_RGBDITHER) -#define G_CD_ENABLE G_CD_NOISE /* HW 1.0 compatibility mode */ +#define G_CD_ENABLE G_CD_NOISE /* HW 1.0 compatibility mode */ #else -#define G_CD_ENABLE (1 << G_MDSFT_COLORDITHER) +#define G_CD_ENABLE (1 << G_MDSFT_COLORDITHER) #define G_CD_DISABLE (0 << G_MDSFT_COLORDITHER) #endif /* G_SETOTHERMODE_H gSetAlphaDither */ #define G_AD_PATTERN (0 << G_MDSFT_ALPHADITHER) #define G_AD_NOTPATTERN (1 << G_MDSFT_ALPHADITHER) -#define G_AD_NOISE (2 << G_MDSFT_ALPHADITHER) +#define G_AD_NOISE (2 << G_MDSFT_ALPHADITHER) #define G_AD_DISABLE (3 << G_MDSFT_ALPHADITHER) /* G_SETOTHERMODE_L gSetAlphaCompare */ -#define G_AC_NONE (0 << G_MDSFT_ALPHACOMPARE) +#define G_AC_NONE (0 << G_MDSFT_ALPHACOMPARE) #define G_AC_THRESHOLD (1 << G_MDSFT_ALPHACOMPARE) -#define G_AC_DITHER (3 << G_MDSFT_ALPHACOMPARE) +#define G_AC_DITHER (3 << G_MDSFT_ALPHACOMPARE) /* G_SETOTHERMODE_L gSetDepthSource */ -#define G_ZS_PIXEL (0 << G_MDSFT_ZSRCSEL) -#define G_ZS_PRIM (1 << G_MDSFT_ZSRCSEL) +#define G_ZS_PIXEL (0 << G_MDSFT_ZSRCSEL) +#define G_ZS_PRIM (1 << G_MDSFT_ZSRCSEL) /* G_SETOTHERMODE_L gSetRenderMode */ -#define AA_EN 0x8 -#define Z_CMP 0x10 -#define Z_UPD 0x20 -#define IM_RD 0x40 -#define CLR_ON_CVG 0x80 -#define CVG_DST_CLAMP 0 -#define CVG_DST_WRAP 0x100 -#define CVG_DST_FULL 0x200 -#define CVG_DST_SAVE 0x300 -#define ZMODE_OPA 0 -#define ZMODE_INTER 0x400 -#define ZMODE_XLU 0x800 -#define ZMODE_DEC 0xc00 -#define CVG_X_ALPHA 0x1000 +#define AA_EN 0x0008 +#define Z_CMP 0x0010 +#define Z_UPD 0x0020 +#define IM_RD 0x0040 +#define CLR_ON_CVG 0x0080 +#define CVG_DST_CLAMP 0x0000 +#define CVG_DST_WRAP 0x0100 +#define CVG_DST_FULL 0x0200 +#define CVG_DST_SAVE 0x0300 +#define ZMODE_OPA 0x0000 +#define ZMODE_INTER 0x0400 +#define ZMODE_XLU 0x0800 +#define ZMODE_DEC 0x0C00 +#define CVG_X_ALPHA 0x1000 #define ALPHA_CVG_SEL 0x2000 -#define FORCE_BL 0x4000 -#define TEX_EDGE 0x0000 /* used to be 0x8000 */ +#define FORCE_BL 0x4000 +#define TEX_EDGE 0x0000 /* used to be 0x8000 */ -#define G_BL_CLR_IN 0 +#define G_BL_CLR_IN 0 #define G_BL_CLR_MEM 1 -#define G_BL_CLR_BL 2 +#define G_BL_CLR_BL 2 #define G_BL_CLR_FOG 3 -#define G_BL_1MA 0 -#define G_BL_A_MEM 1 -#define G_BL_A_IN 0 -#define G_BL_A_FOG 1 +#define G_BL_1MA 0 +#define G_BL_A_MEM 1 +#define G_BL_A_IN 0 +#define G_BL_A_FOG 1 #define G_BL_A_SHADE 2 -#define G_BL_1 2 -#define G_BL_0 3 +#define G_BL_1 2 +#define G_BL_0 3 #define GBL_c1(m1a, m1b, m2a, m2b) \ (m1a) << 30 | (m1b) << 26 | (m2a) << 22 | (m2b) << 18 #define GBL_c2(m1a, m1b, m2a, m2b) \ (m1a) << 28 | (m1b) << 24 | (m2a) << 20 | (m2b) << 16 -#define RM_AA_ZB_OPA_SURF(clk) \ - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ - ZMODE_OPA | ALPHA_CVG_SEL | \ +#define RM_AA_ZB_OPA_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_RA_ZB_OPA_SURF(clk) \ - AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \ - ZMODE_OPA | ALPHA_CVG_SEL | \ +#define RM_RA_ZB_OPA_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_AA_ZB_XLU_SURF(clk) \ - AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ - FORCE_BL | ZMODE_XLU | \ +#define RM_AA_ZB_XLU_SURF(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ + FORCE_BL | ZMODE_XLU | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_ZB_OPA_DECAL(clk) \ - AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | ALPHA_CVG_SEL | \ - ZMODE_DEC | \ +#define RM_AA_ZB_OPA_DECAL(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | ALPHA_CVG_SEL | \ + ZMODE_DEC | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_RA_ZB_OPA_DECAL(clk) \ - AA_EN | Z_CMP | CVG_DST_WRAP | ALPHA_CVG_SEL | \ - ZMODE_DEC | \ +#define RM_RA_ZB_OPA_DECAL(clk) \ + AA_EN | Z_CMP | CVG_DST_WRAP | ALPHA_CVG_SEL | \ + ZMODE_DEC | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_AA_ZB_XLU_DECAL(clk) \ - AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ - FORCE_BL | ZMODE_DEC | \ +#define RM_AA_ZB_XLU_DECAL(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ + FORCE_BL | ZMODE_DEC | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_ZB_OPA_INTER(clk) \ - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ - ALPHA_CVG_SEL | ZMODE_INTER | \ +#define RM_AA_ZB_OPA_INTER(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ALPHA_CVG_SEL | ZMODE_INTER | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_RA_ZB_OPA_INTER(clk) \ - AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \ - ALPHA_CVG_SEL | ZMODE_INTER | \ +#define RM_RA_ZB_OPA_INTER(clk) \ + AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \ + ALPHA_CVG_SEL | ZMODE_INTER | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_AA_ZB_XLU_INTER(clk) \ - AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ - FORCE_BL | ZMODE_INTER | \ +#define RM_AA_ZB_XLU_INTER(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ + FORCE_BL | ZMODE_INTER | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_ZB_XLU_LINE(clk) \ - AA_EN | Z_CMP | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \ - ALPHA_CVG_SEL | FORCE_BL | ZMODE_XLU | \ +#define RM_AA_ZB_XLU_LINE(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_XLU | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_ZB_DEC_LINE(clk) \ - AA_EN | Z_CMP | IM_RD | CVG_DST_SAVE | CVG_X_ALPHA | \ - ALPHA_CVG_SEL | FORCE_BL | ZMODE_DEC | \ +#define RM_AA_ZB_DEC_LINE(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_SAVE | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_DEC | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_ZB_TEX_EDGE(clk) \ - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ - CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ +#define RM_AA_ZB_TEX_EDGE(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_AA_ZB_TEX_INTER(clk) \ - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ - CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_INTER | TEX_EDGE | \ +#define RM_AA_ZB_TEX_INTER(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_INTER | TEX_EDGE | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_AA_ZB_SUB_SURF(clk) \ - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \ - ZMODE_OPA | ALPHA_CVG_SEL | \ +#define RM_AA_ZB_SUB_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_AA_ZB_PCL_SURF(clk) \ - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ - ZMODE_OPA | G_AC_DITHER | \ +#define RM_AA_ZB_PCL_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | G_AC_DITHER | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_ZB_OPA_TERR(clk) \ - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ - ZMODE_OPA | ALPHA_CVG_SEL | \ +#define RM_AA_ZB_OPA_TERR(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_ZB_TEX_TERR(clk) \ - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ - CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ +#define RM_AA_ZB_TEX_TERR(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_ZB_SUB_TERR(clk) \ - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \ - ZMODE_OPA | ALPHA_CVG_SEL | \ +#define RM_AA_ZB_SUB_TERR(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_OPA_SURF(clk) \ - AA_EN | IM_RD | CVG_DST_CLAMP | \ - ZMODE_OPA | ALPHA_CVG_SEL | \ +#define RM_AA_OPA_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_RA_OPA_SURF(clk) \ - AA_EN | CVG_DST_CLAMP | \ - ZMODE_OPA | ALPHA_CVG_SEL | \ +#define RM_RA_OPA_SURF(clk) \ + AA_EN | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_AA_XLU_SURF(clk) \ - AA_EN | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | FORCE_BL | \ - ZMODE_OPA | \ +#define RM_AA_XLU_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | FORCE_BL | \ + ZMODE_OPA | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_XLU_LINE(clk) \ - AA_EN | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \ - ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \ +#define RM_AA_XLU_LINE(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_DEC_LINE(clk) \ - AA_EN | IM_RD | CVG_DST_FULL | CVG_X_ALPHA | \ - ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \ +#define RM_AA_DEC_LINE(clk) \ + AA_EN | IM_RD | CVG_DST_FULL | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_TEX_EDGE(clk) \ - AA_EN | IM_RD | CVG_DST_CLAMP | \ - CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ +#define RM_AA_TEX_EDGE(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_AA_SUB_SURF(clk) \ - AA_EN | IM_RD | CVG_DST_FULL | \ - ZMODE_OPA | ALPHA_CVG_SEL | \ +#define RM_AA_SUB_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_AA_PCL_SURF(clk) \ - AA_EN | IM_RD | CVG_DST_CLAMP | \ - ZMODE_OPA | G_AC_DITHER | \ +#define RM_AA_PCL_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | G_AC_DITHER | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_OPA_TERR(clk) \ - AA_EN | IM_RD | CVG_DST_CLAMP | \ - ZMODE_OPA | ALPHA_CVG_SEL | \ +#define RM_AA_OPA_TERR(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_TEX_TERR(clk) \ - AA_EN | IM_RD | CVG_DST_CLAMP | \ - CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ +#define RM_AA_TEX_TERR(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_AA_SUB_TERR(clk) \ - AA_EN | IM_RD | CVG_DST_FULL | \ - ZMODE_OPA | ALPHA_CVG_SEL | \ +#define RM_AA_SUB_TERR(clk) \ + AA_EN | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_ZB_OPA_SURF(clk) \ - Z_CMP | Z_UPD | CVG_DST_FULL | ALPHA_CVG_SEL | \ - ZMODE_OPA | \ +#define RM_ZB_OPA_SURF(clk) \ + Z_CMP | Z_UPD | CVG_DST_FULL | ALPHA_CVG_SEL | \ + ZMODE_OPA | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_ZB_XLU_SURF(clk) \ - Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_XLU | \ +#define RM_ZB_XLU_SURF(clk) \ + Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_XLU | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_ZB_OPA_DECAL(clk) \ - Z_CMP | CVG_DST_FULL | ALPHA_CVG_SEL | ZMODE_DEC | \ +#define RM_ZB_OPA_DECAL(clk) \ + Z_CMP | CVG_DST_FULL | ALPHA_CVG_SEL | ZMODE_DEC | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) -#define RM_ZB_XLU_DECAL(clk) \ - Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_DEC | \ +#define RM_ZB_XLU_DECAL(clk) \ + Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_DEC | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_ZB_CLD_SURF(clk) \ - Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_XLU | \ +#define RM_ZB_CLD_SURF(clk) \ + Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_XLU | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_ZB_OVL_SURF(clk) \ - Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_DEC | \ +#define RM_ZB_OVL_SURF(clk) \ + Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_DEC | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_ZB_PCL_SURF(clk) \ - Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | \ - G_AC_DITHER | \ +#define RM_ZB_PCL_SURF(clk) \ + Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | \ + G_AC_DITHER | \ GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) -#define RM_OPA_SURF(clk) \ - CVG_DST_CLAMP | FORCE_BL | ZMODE_OPA | \ +#define RM_OPA_SURF(clk) \ + CVG_DST_CLAMP | FORCE_BL | ZMODE_OPA | \ GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) -#define RM_XLU_SURF(clk) \ - IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \ +#define RM_XLU_SURF(clk) \ + IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_TEX_EDGE(clk) \ - CVG_DST_CLAMP | CVG_X_ALPHA | ALPHA_CVG_SEL | FORCE_BL |\ - ZMODE_OPA | TEX_EDGE | AA_EN | \ +#define RM_TEX_EDGE(clk) \ + CVG_DST_CLAMP | CVG_X_ALPHA | ALPHA_CVG_SEL | FORCE_BL | \ + ZMODE_OPA | TEX_EDGE | AA_EN | \ GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) -#define RM_CLD_SURF(clk) \ - IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \ +#define RM_CLD_SURF(clk) \ + IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) -#define RM_PCL_SURF(clk) \ - CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \ - G_AC_DITHER | \ +#define RM_PCL_SURF(clk) \ + CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \ + G_AC_DITHER | \ GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) -#define RM_ADD(clk) \ - IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \ +#define RM_ADD(clk) \ + IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \ GBL_c##clk(G_BL_CLR_IN, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_1) #define RM_NOOP(clk) \ GBL_c##clk(0, 0, 0, 0) -#define RM_VISCVG(clk) \ - IM_RD | FORCE_BL | \ +#define RM_VISCVG(clk) \ + IM_RD | FORCE_BL | \ GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_BL, G_BL_A_MEM) /* for rendering to an 8-bit framebuffer */ -#define RM_OPA_CI(clk) \ - CVG_DST_CLAMP | ZMODE_OPA | \ +#define RM_OPA_CI(clk) \ + CVG_DST_CLAMP | ZMODE_OPA | \ GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) -#define G_RM_AA_ZB_OPA_SURF RM_AA_ZB_OPA_SURF(1) +#define G_RM_AA_ZB_OPA_SURF RM_AA_ZB_OPA_SURF(1) #define G_RM_AA_ZB_OPA_SURF2 RM_AA_ZB_OPA_SURF(2) -#define G_RM_AA_ZB_XLU_SURF RM_AA_ZB_XLU_SURF(1) +#define G_RM_AA_ZB_XLU_SURF RM_AA_ZB_XLU_SURF(1) #define G_RM_AA_ZB_XLU_SURF2 RM_AA_ZB_XLU_SURF(2) #define G_RM_AA_ZB_OPA_DECAL RM_AA_ZB_OPA_DECAL(1) #define G_RM_AA_ZB_OPA_DECAL2 RM_AA_ZB_OPA_DECAL(2) @@ -844,26 +848,26 @@ #define G_RM_AA_ZB_OPA_INTER2 RM_AA_ZB_OPA_INTER(2) #define G_RM_AA_ZB_XLU_INTER RM_AA_ZB_XLU_INTER(1) #define G_RM_AA_ZB_XLU_INTER2 RM_AA_ZB_XLU_INTER(2) -#define G_RM_AA_ZB_XLU_LINE RM_AA_ZB_XLU_LINE(1) +#define G_RM_AA_ZB_XLU_LINE RM_AA_ZB_XLU_LINE(1) #define G_RM_AA_ZB_XLU_LINE2 RM_AA_ZB_XLU_LINE(2) -#define G_RM_AA_ZB_DEC_LINE RM_AA_ZB_DEC_LINE(1) +#define G_RM_AA_ZB_DEC_LINE RM_AA_ZB_DEC_LINE(1) #define G_RM_AA_ZB_DEC_LINE2 RM_AA_ZB_DEC_LINE(2) -#define G_RM_AA_ZB_TEX_EDGE RM_AA_ZB_TEX_EDGE(1) +#define G_RM_AA_ZB_TEX_EDGE RM_AA_ZB_TEX_EDGE(1) #define G_RM_AA_ZB_TEX_EDGE2 RM_AA_ZB_TEX_EDGE(2) #define G_RM_AA_ZB_TEX_INTER RM_AA_ZB_TEX_INTER(1) #define G_RM_AA_ZB_TEX_INTER2 RM_AA_ZB_TEX_INTER(2) -#define G_RM_AA_ZB_SUB_SURF RM_AA_ZB_SUB_SURF(1) +#define G_RM_AA_ZB_SUB_SURF RM_AA_ZB_SUB_SURF(1) #define G_RM_AA_ZB_SUB_SURF2 RM_AA_ZB_SUB_SURF(2) -#define G_RM_AA_ZB_PCL_SURF RM_AA_ZB_PCL_SURF(1) +#define G_RM_AA_ZB_PCL_SURF RM_AA_ZB_PCL_SURF(1) #define G_RM_AA_ZB_PCL_SURF2 RM_AA_ZB_PCL_SURF(2) -#define G_RM_AA_ZB_OPA_TERR RM_AA_ZB_OPA_TERR(1) +#define G_RM_AA_ZB_OPA_TERR RM_AA_ZB_OPA_TERR(1) #define G_RM_AA_ZB_OPA_TERR2 RM_AA_ZB_OPA_TERR(2) -#define G_RM_AA_ZB_TEX_TERR RM_AA_ZB_TEX_TERR(1) +#define G_RM_AA_ZB_TEX_TERR RM_AA_ZB_TEX_TERR(1) #define G_RM_AA_ZB_TEX_TERR2 RM_AA_ZB_TEX_TERR(2) -#define G_RM_AA_ZB_SUB_TERR RM_AA_ZB_SUB_TERR(1) +#define G_RM_AA_ZB_SUB_TERR RM_AA_ZB_SUB_TERR(1) #define G_RM_AA_ZB_SUB_TERR2 RM_AA_ZB_SUB_TERR(2) -#define G_RM_RA_ZB_OPA_SURF RM_RA_ZB_OPA_SURF(1) +#define G_RM_RA_ZB_OPA_SURF RM_RA_ZB_OPA_SURF(1) #define G_RM_RA_ZB_OPA_SURF2 RM_RA_ZB_OPA_SURF(2) #define G_RM_RA_ZB_OPA_DECAL RM_RA_ZB_OPA_DECAL(1) #define G_RM_RA_ZB_OPA_DECAL2 RM_RA_ZB_OPA_DECAL(2) @@ -931,7 +935,7 @@ #define G_RM_FOG_SHADE_A GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA) #define G_RM_FOG_PRIM_A GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_IN, G_BL_1MA) -#define G_RM_PASS GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) +#define G_RM_PASS GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) /* * G_SETCONVERT: K0-5 @@ -951,8 +955,8 @@ #define G_SC_EVEN_INTERLACE 2 /* flags to inhibit pushing of the display list (on branch) */ -#define G_DL_PUSH 0x00 -#define G_DL_NOPUSH 0x01 +#define G_DL_PUSH 0 +#define G_DL_NOPUSH 1 /* * BEGIN C-specific section: (typedef's) @@ -996,27 +1000,27 @@ * Vertex (set up for use with colors) */ typedef struct { - short ob[3]; /* x, y, z */ - unsigned short flag; - short tc[2]; /* texture coord */ - unsigned char cn[4]; /* color & alpha */ + short ob[3]; /* x, y, z */ + unsigned short flag; + short tc[2]; /* texture coord */ + unsigned char cn[4]; /* color & alpha */ } Vtx_t; /* * Vertex (set up for use with normals) */ typedef struct { - short ob[3]; /* x, y, z */ - unsigned short flag; - short tc[2]; /* texture coord */ - signed char n[3]; /* normal */ - unsigned char a; /* alpha */ + short ob[3]; /* x, y, z */ + unsigned short flag; + short tc[2]; /* texture coord */ + signed char n[3]; /* normal */ + unsigned char a; /* alpha */ } Vtx_tn; typedef union { - Vtx_t v; /* Use this one for colors */ - Vtx_tn n; /* Use this one for normals */ - long long int force_structure_alignment; + Vtx_t v; /* Use this one for colors */ + Vtx_tn n; /* Use this one for normals */ + long long int force_structure_alignment; } Vtx; /* @@ -1024,8 +1028,8 @@ typedef union { */ typedef struct { - void *SourceImagePointer; - void *TlutPointer; + void* SourceImagePointer; + void* TlutPointer; short Stride; short SubImageWidth; short SubImageHeight; @@ -1036,25 +1040,66 @@ typedef struct { /* 20 bytes for above */ /* padding to bring structure size to 64 bit allignment */ - char dummy[4]; - + char dummy[4]; } uSprite_t; typedef union { - uSprite_t s; + uSprite_t s; /* Need to make sure this is 64 bit aligned */ - long long int force_structure_allignment[3]; + long long int force_structure_allignment[3]; } uSprite; /* * Triangle face */ typedef struct { - unsigned char flag; - unsigned char v[3]; + unsigned char flag; + unsigned char v[3]; } Tri; +/* + * 4x4 matrix, fixed point s15.16 format. + * First 8 words are integer portion of the 4x4 matrix + * Last 8 words are the fraction portion of the 4x4 matrix + */ +typedef long int Mtx_t[4][4]; +typedef union { + Mtx_t m; + struct { + u16 intPart[4][4]; + u16 fracPart[4][4]; + }; + long long int force_structure_alignment; +} Mtx; + +#define IPART(x) (((s32)((x) * 0x10000) >> 16) & 0xFFFF) +#define FPART(x) ((s32)((x) * 0x10000) & 0xFFFF) + +#define gdSPDefMtx( \ + xx, xy, xz, xw, \ + yx, yy, yz, yw, \ + zx, zy, zz, zw, \ + wx, wy, wz, ww) \ + { { \ + (IPART(xx) << 16) | IPART(yx), \ + (IPART(zx) << 16) | IPART(wx), \ + (IPART(xy) << 16) | IPART(yy), \ + (IPART(zy) << 16) | IPART(wy), \ + (IPART(xz) << 16) | IPART(yz), \ + (IPART(zz) << 16) | IPART(wz), \ + (IPART(xw) << 16) | IPART(yw), \ + (IPART(zw) << 16) | IPART(ww), \ + (FPART(xx) << 16) | FPART(yx), \ + (FPART(zx) << 16) | FPART(wx), \ + (FPART(xy) << 16) | FPART(yy), \ + (FPART(zy) << 16) | FPART(wy), \ + (FPART(xz) << 16) | FPART(yz), \ + (FPART(zz) << 16) | FPART(wz), \ + (FPART(xw) << 16) | FPART(yw), \ + (FPART(zw) << 16) | FPART(ww), \ + } } + /* * Viewport */ @@ -1076,7 +1121,7 @@ typedef struct { * but we don't have the ucode to do that... * */ -#define G_MAXZ 0x03ff /* 10 bits of integer screen-Z precision */ +#define G_MAXZ 0x03FF /* 10 bits of integer screen-Z precision */ /* * The viewport structure elements have 2 bits of fraction, necessary @@ -1090,14 +1135,14 @@ typedef struct { * (SCREEN_WD/2)*4, (SCREEN_HT/2)*4, 0, 0, */ typedef struct { - short vscale[4]; /* scale, 2 bits fraction */ - short vtrans[4]; /* translate, 2 bits fraction */ + short vscale[4]; /* scale, 2 bits fraction */ + short vtrans[4]; /* translate, 2 bits fraction */ /* both the above arrays are padded to 64-bit boundary */ } Vp_t; typedef union { - Vp_t vp; - long long int force_structure_alignment; + Vp_t vp; + long long int force_structure_alignment; } Vp; /* @@ -1110,39 +1155,39 @@ typedef union { */ #ifdef F3DEX_GBI_2 /* 0,4 are reserved by G_MTX */ -# define G_MV_MMTX 2 -# define G_MV_PMTX 6 +# define G_MV_MMTX 2 +# define G_MV_PMTX 6 # define G_MV_VIEWPORT 8 -# define G_MV_LIGHT 10 -# define G_MV_POINT 12 +# define G_MV_LIGHT 10 +# define G_MV_POINT 12 # define G_MV_MATRIX 14 /* NOTE: this is in moveword table */ -# define G_MVO_LOOKATX (0*24) -# define G_MVO_LOOKATY (1*24) -# define G_MVO_L0 (2*24) -# define G_MVO_L1 (3*24) -# define G_MVO_L2 (4*24) -# define G_MVO_L3 (5*24) -# define G_MVO_L4 (6*24) -# define G_MVO_L5 (7*24) -# define G_MVO_L6 (8*24) -# define G_MVO_L7 (9*24) +# define G_MVO_LOOKATX (0 * 24) +# define G_MVO_LOOKATY (1 * 24) +# define G_MVO_L0 (2 * 24) +# define G_MVO_L1 (3 * 24) +# define G_MVO_L2 (4 * 24) +# define G_MVO_L3 (5 * 24) +# define G_MVO_L4 (6 * 24) +# define G_MVO_L5 (7 * 24) +# define G_MVO_L6 (8 * 24) +# define G_MVO_L7 (9 * 24) #else /* F3DEX_GBI_2 */ # define G_MV_VIEWPORT 0x80 # define G_MV_LOOKATY 0x82 # define G_MV_LOOKATX 0x84 -# define G_MV_L0 0x86 -# define G_MV_L1 0x88 -# define G_MV_L2 0x8a -# define G_MV_L3 0x8c -# define G_MV_L4 0x8e -# define G_MV_L5 0x90 -# define G_MV_L6 0x92 -# define G_MV_L7 0x94 +# define G_MV_L0 0x86 +# define G_MV_L1 0x88 +# define G_MV_L2 0x8A +# define G_MV_L3 0x8C +# define G_MV_L4 0x8E +# define G_MV_L5 0x90 +# define G_MV_L6 0x92 +# define G_MV_L7 0x94 # define G_MV_TXTATT 0x96 -# define G_MV_MATRIX_1 0x9e /* NOTE: this is in moveword table */ +# define G_MV_MATRIX_1 0x9E /* NOTE: this is in moveword table */ # define G_MV_MATRIX_2 0x98 -# define G_MV_MATRIX_3 0x9a -# define G_MV_MATRIX_4 0x9c +# define G_MV_MATRIX_3 0x9A +# define G_MV_MATRIX_4 0x9C #endif /* F3DEX_GBI_2 */ /* @@ -1153,97 +1198,97 @@ typedef union { * an immediate word will be stored. * */ -#define G_MW_MATRIX 0x00 /* NOTE: also used by movemem */ +#define G_MW_MATRIX 0x00 /* NOTE: also used by movemem */ #define G_MW_NUMLIGHT 0x02 -#define G_MW_CLIP 0x04 +#define G_MW_CLIP 0x04 #define G_MW_SEGMENT 0x06 -#define G_MW_FOG 0x08 -#define G_MW_LIGHTCOL 0x0a +#define G_MW_FOG 0x08 +#define G_MW_LIGHTCOL 0x0A #ifdef F3DEX_GBI_2 -# define G_MW_FORCEMTX 0x0c +# define G_MW_FORCEMTX 0x0C #else /* F3DEX_GBI_2 */ -# define G_MW_POINTS 0x0c +# define G_MW_POINTS 0x0C #endif /* F3DEX_GBI_2 */ -#define G_MW_PERSPNORM 0x0e +#define G_MW_PERSPNORM 0x0E /* * These are offsets from the address in the dmem table */ -#define G_MWO_NUMLIGHT 0x00 -#define G_MWO_CLIP_RNX 0x04 -#define G_MWO_CLIP_RNY 0x0c -#define G_MWO_CLIP_RPX 0x14 -#define G_MWO_CLIP_RPY 0x1c -#define G_MWO_SEGMENT_0 0x00 -#define G_MWO_SEGMENT_1 0x01 -#define G_MWO_SEGMENT_2 0x02 -#define G_MWO_SEGMENT_3 0x03 -#define G_MWO_SEGMENT_4 0x04 -#define G_MWO_SEGMENT_5 0x05 -#define G_MWO_SEGMENT_6 0x06 -#define G_MWO_SEGMENT_7 0x07 -#define G_MWO_SEGMENT_8 0x08 -#define G_MWO_SEGMENT_9 0x09 -#define G_MWO_SEGMENT_A 0x0a -#define G_MWO_SEGMENT_B 0x0b -#define G_MWO_SEGMENT_C 0x0c -#define G_MWO_SEGMENT_D 0x0d -#define G_MWO_SEGMENT_E 0x0e -#define G_MWO_SEGMENT_F 0x0f -#define G_MWO_FOG 0x00 -#define G_MWO_aLIGHT_1 0x00 -#define G_MWO_bLIGHT_1 0x04 -#ifdef F3DEX_GBI_2 -#define G_MWO_aLIGHT_2 0x18 -#define G_MWO_bLIGHT_2 0x1c -#define G_MWO_aLIGHT_3 0x30 -#define G_MWO_bLIGHT_3 0x34 -#define G_MWO_aLIGHT_4 0x48 -#define G_MWO_bLIGHT_4 0x4c -#define G_MWO_aLIGHT_5 0x60 -#define G_MWO_bLIGHT_5 0x64 -#define G_MWO_aLIGHT_6 0x78 -#define G_MWO_bLIGHT_6 0x7c -#define G_MWO_aLIGHT_7 0x90 -#define G_MWO_bLIGHT_7 0x94 -#define G_MWO_aLIGHT_8 0xa8 -#define G_MWO_bLIGHT_8 0xac +#define G_MWO_NUMLIGHT 0x00 +#define G_MWO_CLIP_RNX 0x04 +#define G_MWO_CLIP_RNY 0x0C +#define G_MWO_CLIP_RPX 0x14 +#define G_MWO_CLIP_RPY 0x1C +#define G_MWO_SEGMENT_0 0x00 +#define G_MWO_SEGMENT_1 0x01 +#define G_MWO_SEGMENT_2 0x02 +#define G_MWO_SEGMENT_3 0x03 +#define G_MWO_SEGMENT_4 0x04 +#define G_MWO_SEGMENT_5 0x05 +#define G_MWO_SEGMENT_6 0x06 +#define G_MWO_SEGMENT_7 0x07 +#define G_MWO_SEGMENT_8 0x08 +#define G_MWO_SEGMENT_9 0x09 +#define G_MWO_SEGMENT_A 0x0A +#define G_MWO_SEGMENT_B 0x0B +#define G_MWO_SEGMENT_C 0x0C +#define G_MWO_SEGMENT_D 0x0D +#define G_MWO_SEGMENT_E 0x0E +#define G_MWO_SEGMENT_F 0x0F +#define G_MWO_FOG 0x00 +#define G_MWO_aLIGHT_1 0x00 +#define G_MWO_bLIGHT_1 0x04 +#ifdef F3DEX_GBI_2 +#define G_MWO_aLIGHT_2 0x18 +#define G_MWO_bLIGHT_2 0x1C +#define G_MWO_aLIGHT_3 0x30 +#define G_MWO_bLIGHT_3 0x34 +#define G_MWO_aLIGHT_4 0x48 +#define G_MWO_bLIGHT_4 0x4C +#define G_MWO_aLIGHT_5 0x60 +#define G_MWO_bLIGHT_5 0x64 +#define G_MWO_aLIGHT_6 0x78 +#define G_MWO_bLIGHT_6 0x7C +#define G_MWO_aLIGHT_7 0x90 +#define G_MWO_bLIGHT_7 0x94 +#define G_MWO_aLIGHT_8 0xA8 +#define G_MWO_bLIGHT_8 0xAC #else -#define G_MWO_aLIGHT_2 0x20 -#define G_MWO_bLIGHT_2 0x24 -#define G_MWO_aLIGHT_3 0x40 -#define G_MWO_bLIGHT_3 0x44 -#define G_MWO_aLIGHT_4 0x60 -#define G_MWO_bLIGHT_4 0x64 -#define G_MWO_aLIGHT_5 0x80 -#define G_MWO_bLIGHT_5 0x84 -#define G_MWO_aLIGHT_6 0xa0 -#define G_MWO_bLIGHT_6 0xa4 -#define G_MWO_aLIGHT_7 0xc0 -#define G_MWO_bLIGHT_7 0xc4 -#define G_MWO_aLIGHT_8 0xe0 -#define G_MWO_bLIGHT_8 0xe4 +#define G_MWO_aLIGHT_2 0x20 +#define G_MWO_bLIGHT_2 0x24 +#define G_MWO_aLIGHT_3 0x40 +#define G_MWO_bLIGHT_3 0x44 +#define G_MWO_aLIGHT_4 0x60 +#define G_MWO_bLIGHT_4 0x64 +#define G_MWO_aLIGHT_5 0x80 +#define G_MWO_bLIGHT_5 0x84 +#define G_MWO_aLIGHT_6 0xA0 +#define G_MWO_bLIGHT_6 0xA4 +#define G_MWO_aLIGHT_7 0xC0 +#define G_MWO_bLIGHT_7 0xC4 +#define G_MWO_aLIGHT_8 0xE0 +#define G_MWO_bLIGHT_8 0xE4 #endif #define G_MWO_MATRIX_XX_XY_I 0x00 #define G_MWO_MATRIX_XZ_XW_I 0x04 #define G_MWO_MATRIX_YX_YY_I 0x08 -#define G_MWO_MATRIX_YZ_YW_I 0x0c +#define G_MWO_MATRIX_YZ_YW_I 0x0C #define G_MWO_MATRIX_ZX_ZY_I 0x10 #define G_MWO_MATRIX_ZZ_ZW_I 0x14 #define G_MWO_MATRIX_WX_WY_I 0x18 -#define G_MWO_MATRIX_WZ_WW_I 0x1c +#define G_MWO_MATRIX_WZ_WW_I 0x1C #define G_MWO_MATRIX_XX_XY_F 0x20 #define G_MWO_MATRIX_XZ_XW_F 0x24 #define G_MWO_MATRIX_YX_YY_F 0x28 -#define G_MWO_MATRIX_YZ_YW_F 0x2c +#define G_MWO_MATRIX_YZ_YW_F 0x2C #define G_MWO_MATRIX_ZX_ZY_F 0x30 #define G_MWO_MATRIX_ZZ_ZW_F 0x34 #define G_MWO_MATRIX_WX_WY_F 0x38 -#define G_MWO_MATRIX_WZ_WW_F 0x3c -#define G_MWO_POINT_RGBA 0x10 -#define G_MWO_POINT_ST 0x14 +#define G_MWO_MATRIX_WZ_WW_F 0x3C +#define G_MWO_POINT_RGBA 0x10 +#define G_MWO_POINT_ST 0x14 #define G_MWO_POINT_XYSCREEN 0x18 -#define G_MWO_POINT_ZSCREEN 0x1c +#define G_MWO_POINT_ZSCREEN 0x1C /* * Light structure. @@ -1256,33 +1301,37 @@ typedef union { */ typedef struct { - unsigned char col[3]; /* diffuse light value (rgba) */ - char pad1; - unsigned char colc[3]; /* copy of diffuse light value (rgba) */ - char pad2; - signed char dir[3]; /* direction of light (normalized) */ - char pad3; + unsigned char col[3]; /* diffuse light value (rgba) */ + char pad1; + unsigned char colc[3]; /* copy of diffuse light value (rgba) */ + char pad2; + signed char dir[3]; /* direction of light (normalized) */ + char pad3; } Light_t; typedef struct { - unsigned char col[3]; /* ambient light value (rgba) */ - char pad1; - unsigned char colc[3]; /* copy of ambient light value (rgba) */ - char pad2; + unsigned char col[3]; /* ambient light value (rgba) */ + char pad1; + unsigned char colc[3]; /* copy of ambient light value (rgba) */ + char pad2; } Ambient_t; typedef struct { - int x1,y1,x2,y2; /* texture offsets for highlight 1/2 */ + /* texture offsets for highlight 1/2 */ + int x1; + int y1; + int x2; + int y2; } Hilite_t; typedef union { Light_t l; - long long int force_structure_alignment[2]; + long long int force_structure_alignment[2]; } Light; typedef union { - Ambient_t l; - long long int force_structure_alignment[1]; + Ambient_t l; + long long int force_structure_alignment[1]; } Ambient; typedef struct { @@ -1335,89 +1384,380 @@ typedef struct { } LookAt; typedef union { - Hilite_t h; - long int force_structure_alignment[4]; + Hilite_t h; + long int force_structure_alignment; } Hilite; -#define gdSPDefLights0(ar,ag,ab) \ - { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ - {{{ { 0, 0, 0},0,{ 0, 0, 0},0,{ 0, 0, 0},0}}} } -#define gdSPDefLights1(ar,ag,ab,r1,g1,b1,x1,y1,z1) \ - { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ - {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}} } -#define gdSPDefLights2(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2) \ - { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ - {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ - {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}} } -#define gdSPDefLights3(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3) \ - { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ - {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ - {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ - {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}} } -#define gdSPDefLights4(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4) \ - { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ - {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ - {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ - {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ - {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}} } -#define gdSPDefLights5(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5) \ - { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ - {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ - {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ - {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ - {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \ - {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}} } +#define gdSPDefLights0(ar, ag, ab) \ + { \ + {{ \ + { ar, ag, ab }, 0, \ + { ar, ag, ab }, 0, \ + }}, \ + { \ + {{ \ + { 0, 0, 0 }, 0, \ + { 0, 0, 0 }, 0, \ + { 0, 0, 0 }, 0, \ + }} \ + } \ + } + +#define gdSPDefLights1(ar, ag, ab, \ + r1, g1, b1, x1, y1, z1) \ + { \ + {{ \ + { ar, ag, ab }, 0, \ + { ar, ag, ab }, 0, \ + }}, \ + { \ + {{ \ + { r1, g1, b1 }, 0, \ + { r1, g1, b1 }, 0, \ + { x1, y1, z1 }, 0, \ + }} \ + } \ + } + +#define gdSPDefLights2(ar, ag, ab, \ + r1, g1, b1, x1, y1, z1, \ + r2, g2, b2, x2, y2, z2) \ + { \ + {{ \ + { ar, ag, ab }, 0, \ + { ar, ag, ab }, 0, \ + }}, \ + { \ + {{ \ + { r1, g1, b1 }, 0, \ + { r1, g1, b1 }, 0, \ + { x1, y1, z1 }, 0, \ + }}, \ + {{ \ + { r2, g2, b2 }, 0, \ + { r2, g2, b2 }, 0, \ + { x2, y2, z2 }, 0, \ + }} \ + } \ + } + +#define gdSPDefLights3(ar, ag, ab, \ + r1, g1, b1, x1, y1, z1, \ + r2, g2, b2, x2, y2, z2, \ + r3, g3, b3, x3, y3, z3) \ + { \ + {{ \ + { ar, ag, ab }, 0, \ + { ar, ag, ab }, 0, \ + }}, \ + { \ + {{ \ + { r1, g1, b1 }, 0, \ + { r1, g1, b1 }, 0, \ + { x1, y1, z1 }, 0, \ + }}, \ + {{ \ + { r2, g2, b2 }, 0, \ + { r2, g2, b2 }, 0, \ + { x2, y2, z2 }, 0, \ + }}, \ + {{ \ + { r3, g3, b3 }, 0, \ + { r3, g3, b3 }, 0, \ + { x3, y3, z3 }, 0, \ + }} \ + } \ + } + +#define gdSPDefLights4(ar, ag, ab, \ + r1, g1, b1, x1, y1, z1, \ + r2, g2, b2, x2, y2, z2, \ + r3, g3, b3, x3, y3, z3, \ + r4, g4, b4, x4, y4, z4) \ + { \ + {{ \ + { ar, ag, ab }, 0, \ + { ar, ag, ab }, 0, \ + }}, \ + { \ + {{ \ + { r1, g1, b1 }, 0, \ + { r1, g1, b1 }, 0, \ + { x1, y1, z1 }, 0, \ + }}, \ + {{ \ + { r2, g2, b2 }, 0, \ + { r2, g2, b2 }, 0, \ + { x2, y2, z2 }, 0, \ + }}, \ + {{ \ + { r3, g3, b3 }, 0, \ + { r3, g3, b3 }, 0, \ + { x3, y3, z3 }, 0, \ + }}, \ + {{ \ + { r4, g4, b4 }, 0, \ + { r4, g4, b4 }, 0, \ + { x4, y4, z4 }, 0, \ + }} \ + } \ + } + +#define gdSPDefLights5(ar, ag, ab, \ + r1, g1, b1, x1, y1, z1, \ + r2, g2, b2, x2, y2, z2, \ + r3, g3, b3, x3, y3, z3, \ + r4, g4, b4, x4, y4, z4, \ + r5, g5, b5, x5, y5, z5) \ + { \ + {{ \ + { ar, ag, ab }, 0, \ + { ar, ag, ab }, 0, \ + }}, \ + { \ + {{ \ + { r1, g1, b1 }, 0, \ + { r1, g1, b1 }, 0, \ + { x1, y1, z1 }, 0, \ + }}, \ + {{ \ + { r2, g2, b2 }, 0, \ + { r2, g2, b2 }, 0, \ + { x2, y2, z2 }, 0, \ + }}, \ + {{ \ + { r3, g3, b3 }, 0, \ + { r3, g3, b3 }, 0, \ + { x3, y3, z3 }, 0, \ + }}, \ + {{ \ + { r4, g4, b4 }, 0, \ + { r4, g4, b4 }, 0, \ + { x4, y4, z4 }, 0, \ + }}, \ + {{ \ + { r5, g5, b5 }, 0, \ + { r5, g5, b5 }, 0, \ + { x5, y5, z5 }, 0, \ + }} \ + } \ + } + +#define gdSPDefLights6(ar, ag, ab, \ + r1, g1, b1, x1, y1, z1, \ + r2, g2, b2, x2, y2, z2, \ + r3, g3, b3, x3, y3, z3, \ + r4, g4, b4, x4, y4, z4, \ + r5, g5, b5, x5, y5, z5, \ + r6, g6, b6, x6, y6, z6) \ + { \ + {{ \ + { ar, ag, ab }, 0, \ + { ar, ag, ab }, 0, \ + }}, \ + { \ + {{ \ + { r1, g1, b1 }, 0, \ + { x1, y1, z1 }, 0, \ + { r1, g1, b1 }, 0, \ + }}, \ + {{ \ + { r2, g2, b2 }, 0, \ + { r2, g2, b2 }, 0, \ + { x2, y2, z2 }, 0, \ + }}, \ + {{ \ + { r3, g3, b3 }, 0, \ + { r3, g3, b3 }, 0, \ + { x3, y3, z3 }, 0, \ + }}, \ + {{ \ + { r4, g4, b4 }, 0, \ + { r4, g4, b4 }, 0, \ + { x4, y4, z4 }, 0, \ + }}, \ + {{ \ + { r5, g5, b5 }, 0, \ + { r5, g5, b5 }, 0, \ + { x5, y5, z5 }, 0, \ + }}, \ + {{ \ + { r6, g6, b6 }, 0, \ + { r6, g6, b6 }, 0, \ + { x6, y6, z6 }, 0, \ + }} \ + } \ + } + +#define gdSPDefLights7(ar, ag, ab, \ + r1, g1, b1, x1, y1, z1, \ + r2, g2, b2, x2, y2, z2, \ + r3, g3, b3, x3, y3, z3, \ + r4, g4, b4, x4, y4, z4, \ + r5, g5, b5, x5, y5, z5, \ + r6, g6, b6, x6, y6, z6, \ + r7, g7, b7, x7, y7, z7) \ + { \ + {{ \ + { ar, ag, ab}, 0, \ + { ar, ag, ab}, 0, \ + }}, \ + { \ + {{ \ + { r1, g1, b1 }, 0, \ + { r1, g1, b1 }, 0, \ + { x1, y1, z1 }, 0, \ + }}, \ + {{ \ + { r2, g2, b2 }, 0, \ + { r2, g2, b2 }, 0, \ + { x2, y2, z2 }, 0, \ + }}, \ + {{ \ + { r3, g3, b3 }, 0, \ + { r3, g3, b3 }, 0, \ + { x3, y3, z3 }, 0, \ + }}, \ + {{ \ + { r4, g4, b4 }, 0, \ + { r4, g4, b4 }, 0, \ + { x4, y4, z4 }, 0, \ + }}, \ + {{ \ + { r5, g5, b5 }, 0, \ + { r5, g5, b5 }, 0, \ + { x5, y5, z5 }, 0, \ + }}, \ + {{ \ + { r6, g6, b6 }, 0, \ + { r6, g6, b6 }, 0, \ + { x6, y6, z6 }, 0, \ + }}, \ + {{ \ + { r7, g7, b7 }, 0, \ + { r7, g7, b7 }, 0, \ + { x7, y7, z7 }, 0, \ + }} \ + } \ + } -#define gdSPDefLights6(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5,r6,g6,b6,x6,y6,z6) \ - { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ - {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ - {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ - {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ - {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \ - {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}, \ - {{ {r6,g6,b6},0,{r6,g6,b6},0,{x6,y6,z6},0}}} } +#define gdSPDefLookAt(rightx, righty, rightz, upx, upy, upz) \ + {{ \ + {{ \ + { 0, 0, 0 }, 0, \ + { 0, 0, 0 }, 0, \ + { rightx, righty, rightz }, 0, \ + }}, \ + {{ \ + { 0, 128, 0 }, 0, \ + { 0, 128, 0 }, 0, \ + { upx, upy, upz }, 0, \ + }}, \ + }} - -#define gdSPDefLights7(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5,r6,g6,b6,x6,y6,z6,r7,g7,b7,x7,y7,z7) \ - { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ - {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ - {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ - {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ - {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \ - {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}, \ - {{ {r6,g6,b6},0,{r6,g6,b6},0,{x6,y6,z6},0}}, \ - {{ {r7,g7,b7},0,{r7,g7,b7},0,{x7,y7,z7},0}}} } - - -#define gdSPDefLookAt(rightx,righty,rightz,upx,upy,upz) \ - { {{ {{0,0,0},0,{0,0,0},0,{rightx,righty,rightz},0}}, \ - { {{0,0x80,0},0,{0,0x80,0},0,{upx,upy,upz},0}}} } +typedef struct { + int cmd : 8; + unsigned int type : 8; + unsigned int len : 16; + union { + // The exact form of this callback is intentionally left unspecified, a display list + // parser may choose the return value and parameters so long as it is consistent. + void (*callback)(); + const char* str; + unsigned int u32; + float f32; + void* addr; + } value; +} Gnoop; /* * Graphics DMA Packet */ typedef struct { - int cmd:8; - unsigned int par:8; - unsigned int len:16; - unsigned int addr; + int cmd : 8; + unsigned int par : 8; + unsigned int len : 16; + unsigned int addr; } Gdma; +#ifdef F3DEX_GBI_2 +typedef struct { + int cmd : 8; + unsigned int len : 8; + unsigned int ofs : 8; + unsigned int par : 8; + unsigned int addr; +} Gdma2; +#endif + +/* + * Graphics Moveword Packet + */ +// Inaccurate for F3DEX2, offset and index are swapped +typedef struct { + int cmd : 8; + unsigned int offset : 16; + unsigned int index : 8; + unsigned int data; +} Gmovewd; + +/* + * Graphics Movemem Packet + */ +typedef struct { + int cmd : 8; + unsigned int size : 8; + unsigned int offset : 8; + unsigned int index : 8; + unsigned int data; +} Gmovemem; + /* * Graphics Immediate Mode Packet types */ typedef struct { - int cmd:8; - int pad:24; - Tri tri; + int cmd : 8; + int pad : 24; + Tri tri; } Gtri; +#if (defined(F3DLP_GBI) || defined(F3DEX_GBI)) typedef struct { - int cmd:8; - int pad1:24; - int pad2:24; - unsigned char param:8; + Tri tri1; /* flag is the command byte */ + Tri tri2; +} Gtri2; + +typedef struct { + Tri tri1; /* flag is the command byte */ + Tri tri2; +} Gquad; + +typedef struct { + int cmd : 8; + unsigned int pad : 8; + unsigned short vstart_x2; + unsigned short pad2; + unsigned short vend_x2; +} Gcull; +#endif + +typedef struct { + int cmd : 8; + unsigned int pad : 24; + unsigned short z; + unsigned short dz; +} Gsetprimdepth; + +typedef struct { + int cmd : 8; + int pad1 : 24; +#ifdef F3DEX_GBI_2 + unsigned int param; +#else + int pad2 : 24; + unsigned char param : 8; +#endif } Gpopmtx; /* @@ -1430,50 +1770,63 @@ typedef struct { * } Gsegment; */ typedef struct { - int cmd:8; - int pad0:8; - int mw_index:8; - int number:8; - int pad1:8; - int base:24; + int cmd : 8; + int pad0 : 8; + int mw_index : 8; + int number : 8; + int pad1 : 8; + int base : 24; } Gsegment; typedef struct { - int cmd:8; - int pad0:8; - int sft:8; - int len:8; - unsigned int data:32; + int cmd : 8; + int pad0 : 8; + unsigned int sft : 8; + unsigned int len : 8; + unsigned int data : 32; } GsetothermodeL; typedef struct { - int cmd:8; - int pad0:8; - int sft:8; - int len:8; - unsigned int data:32; + int cmd : 8; + int pad0 : 8; + unsigned int sft : 8; + unsigned int len : 8; + unsigned int data : 32; } GsetothermodeH; typedef struct { - unsigned char cmd; - unsigned char lodscale; - unsigned char tile; - unsigned char on; - unsigned short s; - unsigned short t; + unsigned char cmd; + unsigned char lodscale; +#ifdef F3DEX_GBI_2 + unsigned char pad : 2; + unsigned char level : 3; + unsigned char tile : 3; +#else + unsigned char tile; +#endif + unsigned char on; + unsigned short s; + unsigned short t; } Gtexture; typedef struct { - int cmd:8; - int pad:24; - Tri line; + int cmd : 8; +#ifdef F3DEX_GBI_2 + unsigned char v0; + unsigned char v1; + unsigned char wd; + unsigned int pad; +#else + int pad : 24; + Tri line; +#endif } Gline3D; typedef struct { - int cmd:8; - int pad1:24; - short int pad2; - short int scale; + int cmd : 8; + int pad1 : 24; + short int pad2; + short int scale; } Gperspnorm; @@ -1481,69 +1834,93 @@ typedef struct { * RDP Packet types */ typedef struct { - int cmd:8; - unsigned int fmt:3; - unsigned int siz:2; - unsigned int pad:7; - unsigned int wd:12; /* really only 10 bits, extra */ - unsigned int dram; /* to account for 1024 */ + int cmd : 8; + unsigned int fmt : 3; + unsigned int siz : 2; + unsigned int pad : 7; + unsigned int wd : 12; /* really only 10 bits, extra */ + unsigned int dram; /* to account for 1024 */ } Gsetimg; typedef struct { - int cmd:8; - unsigned int muxs0:24; - unsigned int muxs1:32; + int cmd : 8; + // muxs0 + unsigned int a0 : 4; + unsigned int c0 : 5; + unsigned int Aa0 : 3; + unsigned int Ac0 : 3; + unsigned int a1 : 4; + unsigned int c1 : 5; + // muxs1 + unsigned int b0 : 4; + unsigned int b1 : 4; + unsigned int Aa1 : 3; + unsigned int Ac1 : 3; + unsigned int d0 : 3; + unsigned int Ab0 : 3; + unsigned int Ad0 : 3; + unsigned int d1 : 3; + unsigned int Ab1 : 3; + unsigned int Ad1 : 3; } Gsetcombine; typedef struct { - int cmd:8; - unsigned char pad; - unsigned char prim_min_level; - unsigned char prim_level; - unsigned long color; + int cmd : 8; + unsigned char pad; + unsigned char prim_min_level; + unsigned char prim_level; + union { + unsigned long color; + struct { + unsigned char r; + unsigned char g; + unsigned char b; + unsigned char a; + }; + }; } Gsetcolor; typedef struct { - int cmd:8; - int x0:10; - int x0frac:2; - int y0:10; - int y0frac:2; - unsigned int pad:8; - int x1:10; - int x1frac:2; - int y1:10; - int y1frac:2; + int cmd : 8; + int x0 : 10; + int x0frac : 2; + int y0 : 10; + int y0frac : 2; + unsigned int pad : 8; + int x1 : 10; + int x1frac : 2; + int y1 : 10; + int y1frac : 2; } Gfillrect; typedef struct { - int cmd:8; - unsigned int fmt:3; - unsigned int siz:2; - unsigned int pad0:1; - unsigned int line:9; - unsigned int tmem:9; - unsigned int pad1:5; - unsigned int tile:3; - unsigned int palette:4; - unsigned int ct:1; - unsigned int mt:1; - unsigned int maskt:4; - unsigned int shiftt:4; - unsigned int cs:1; - unsigned int ms:1; - unsigned int masks:4; - unsigned int shifts:4; + int cmd : 8; + unsigned int fmt : 3; + unsigned int siz : 2; + unsigned int pad0 : 1; + unsigned int line : 9; + unsigned int tmem : 9; + unsigned int pad1 : 5; + unsigned int tile : 3; + unsigned int palette : 4; + unsigned int ct : 1; + unsigned int mt : 1; + unsigned int maskt : 4; + unsigned int shiftt : 4; + unsigned int cs : 1; + unsigned int ms : 1; + unsigned int masks : 4; + unsigned int shifts : 4; } Gsettile; typedef struct { - int cmd:8; - unsigned int sl:12; - unsigned int tl:12; - int pad:5; - unsigned int tile:3; - unsigned int sh:12; - unsigned int th:12; + int cmd : 8; + unsigned int sl : 12; + unsigned int tl : 12; + int pad : 5; + unsigned int tile : 3; + unsigned int sh : 12; + unsigned int th : 12; } Gloadtile; typedef Gloadtile Gloadblock; @@ -1553,17 +1930,17 @@ typedef Gloadtile Gsettilesize; typedef Gloadtile Gloadtlut; typedef struct { - unsigned int cmd:8; /* command */ - unsigned int xl:12; /* X coordinate of upper left */ - unsigned int yl:12; /* Y coordinate of upper left */ - unsigned int pad1:5; /* Padding */ - unsigned int tile:3; /* Tile descriptor index */ - unsigned int xh:12; /* X coordinate of lower right */ - unsigned int yh:12; /* Y coordinate of lower right */ - unsigned int s:16; /* S texture coord at top left */ - unsigned int t:16; /* T texture coord at top left */ - unsigned int dsdx:16;/* Change in S per change in X */ - unsigned int dtdy:16;/* Change in T per change in Y */ + unsigned int cmd : 8; /* command */ + unsigned int xl : 12; /* X coordinate of upper left */ + unsigned int yl : 12; /* Y coordinate of upper left */ + unsigned int pad1 : 5; /* Padding */ + unsigned int tile : 3; /* Tile descriptor index */ + unsigned int xh : 12; /* X coordinate of lower right */ + unsigned int yh : 12; /* Y coordinate of lower right */ + unsigned int s : 16; /* S texture coord at top left */ + unsigned int t : 16; /* T texture coord at top left */ + unsigned int dsdx : 16; /* Change in S per change in X */ + unsigned int dtdy : 16; /* Change in T per change in Y */ } Gtexrect; #define MakeTexRect(xh,yh,flip,tile,xl,yl,s,t,dsdx,dtdy) \ @@ -1579,6 +1956,19 @@ typedef struct { unsigned long w3; } TexRect; +#ifdef F3DEX_GBI_2 +typedef struct { + int cmd : 8; + unsigned int pad : 4; + unsigned int len : 8; // n + unsigned int pad2 : 4; + unsigned char par; // v0 + unsigned int addr; +} Gvtx; +#else +typedef Gdma Gvtx; +#endif + /* * Generic Gfx Packet */ @@ -1592,25 +1982,38 @@ typedef struct { * It is, by law, exactly 64 bits in size. */ typedef union { - Gwords words; - Gdma dma; - Gtri tri; - Gline3D line; - Gpopmtx popmtx; - Gsegment segment; + Gwords words; + Gnoop noop; + Gdma dma; +#ifdef F3DEX_GBI_2 + Gdma2 dma2; +#endif + Gvtx vtx; + Gtri tri; +#if (defined(F3DLP_GBI) || defined(F3DEX_GBI)) + Gtri2 tri2; + Gquad quad; +#endif + Gline3D line; + Gcull cull; + Gmovewd movewd; + Gmovemem movemem; + Gpopmtx popmtx; + Gsegment segment; GsetothermodeH setothermodeH; GsetothermodeL setothermodeL; - Gtexture texture; - Gperspnorm perspnorm; - Gsetimg setimg; - Gsetcombine setcombine; - Gsetcolor setcolor; - Gfillrect fillrect; /* use for setscissor also */ - Gsettile settile; - Gloadtile loadtile; /* use for loadblock also, th is dxt */ + Gtexture texture; + Gperspnorm perspnorm; + Gsetimg setimg; + Gsetcombine setcombine; + Gsetcolor setcolor; + Gfillrect fillrect; /* use for setscissor also */ + Gsettile settile; + Gloadtile loadtile; /* use for loadblock also, th is dxt */ Gsettilesize settilesize; - Gloadtlut loadtlut; - long long int force_structure_alignment; + Gloadtlut loadtlut; + Gsetprimdepth setprimdepth; + long long int force_structure_alignment; } Gfx; /* @@ -1620,60 +2023,71 @@ typedef union { /* * DMA macros */ -#define gDma0p(pkt, c, s, l) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24); \ - _g->words.w1 = (unsigned int)(s); \ +#define gDma0p(pkt, c, s, l) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL((c), 24, 8) | \ + _SHIFTL((l), 0, 24)); \ + _g->words.w1 = (unsigned int)(s); \ }) -#define gsDma0p(c, s, l) \ -{ \ - _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24), (unsigned int)(s) \ +#define gsDma0p(c, s, l) \ +{ \ + (_SHIFTL((c), 24, 8) | \ + _SHIFTL((l), 0, 24)), \ + (unsigned int)(s) \ } -#define gDma1p(pkt, c, s, l, p) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \ - _SHIFTL((l), 0, 16)); \ - _g->words.w1 = (unsigned int)(s); \ +#define gDma1p(pkt, c, s, l, p) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL((c), 24, 8) | \ + _SHIFTL((p), 16, 8) | \ + _SHIFTL((l), 0, 16)); \ + _g->words.w1 = (unsigned int)(s); \ }) -#define gsDma1p(c, s, l, p) \ -{ \ - (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \ - _SHIFTL((l), 0, 16)), \ - (unsigned int)(s) \ +#define gsDma1p(c, s, l, p) \ +{ \ + (_SHIFTL((c), 24, 8) | \ + _SHIFTL((p), 16, 8) | \ + _SHIFTL((l), 0, 16)), \ + (unsigned int)(s) \ } #define gDma2p(pkt, c, adrs, len, idx, ofs) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \ - _SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)); \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL((c), 24, 8) | \ + _SHIFTL(((len) - 1) / 8, 19, 5) | \ + _SHIFTL((ofs) / 8, 8, 8) | \ + _SHIFTL((idx), 0, 8)); \ _g->words.w1 = (unsigned int)(adrs); \ }) -#define gsDma2p(c, adrs, len, idx, ofs) \ -{ \ - (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \ - _SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)), \ - (unsigned int)(adrs) \ + +#define gsDma2p(c, adrs, len, idx, ofs) \ +{ \ + (_SHIFTL((c), 24, 8) | \ + _SHIFTL(((len) - 1) / 8, 19, 5) | \ + _SHIFTL((ofs) / 8, 8, 8) | \ + _SHIFTL((idx), 0, 8)), \ + (unsigned int)(adrs) \ } -#define gSPNoOp(pkt) gDma0p(pkt, G_SPNOOP, 0, 0) -#define gsSPNoOp() gsDma0p(G_SPNOOP, 0, 0) +#define gSPNoOp(pkt) gDma0p(pkt, G_SPNOOP, 0, 0) +#define gsSPNoOp() gsDma0p( G_SPNOOP, 0, 0) #ifdef F3DEX_GBI_2 -# define gSPMatrix(pkt, m, p) \ - gDma2p((pkt),G_MTX,(m),sizeof(Mtx),(p)^G_MTX_PUSH,0) -# define gsSPMatrix(m, p) \ - gsDma2p( G_MTX,(m),sizeof(Mtx),(p)^G_MTX_PUSH,0) +# define gSPMatrix(pkt, m, p) \ + gDma2p((pkt),G_MTX, (m), sizeof(Mtx), (p) ^ G_MTX_PUSH, 0) +# define gsSPMatrix(m, p) \ + gsDma2p( G_MTX, (m), sizeof(Mtx), (p) ^ G_MTX_PUSH, 0) #else /* F3DEX_GBI_2 */ # define gSPMatrix(pkt, m, p) gDma1p(pkt, G_MTX, m, sizeof(Mtx), p) -# define gsSPMatrix(m, p) gsDma1p(G_MTX, m, sizeof(Mtx), p) +# define gsSPMatrix(m, p) gsDma1p( G_MTX, m, sizeof(Mtx), p) #endif /* F3DEX_GBI_2 */ #if defined(F3DEX_GBI_2) @@ -1687,18 +2101,23 @@ _DW({ \ * +-+---+-----------------------------+ */ # define gSPVertex(pkt, v, n, v0) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = \ - _SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7); \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_VTX, 24, 8) | \ + _SHIFTL((n), 12, 8) | \ + _SHIFTL((v0) + (n), 1, 7)); \ _g->words.w1 = (unsigned int)(v); \ }) -# define gsSPVertex(v, n, v0) \ + +# define gsSPVertex(v, n, v0) \ { \ - (_SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7)), \ - (unsigned int)(v) \ + (_SHIFTL(G_VTX, 24, 8) | \ + _SHIFTL((n), 12, 8) | \ + _SHIFTL((v0) + (n), 1, 7)), \ + (unsigned int)(v) \ } -#elif (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +#elif (defined(F3DEX_GBI) || defined(F3DLP_GBI)) /* * F3DEX_GBI: G_VTX GBI format was changed to support 64 vertice. * @@ -1708,158 +2127,168 @@ _DW({ \ * | |seg| address | * +-+---+-----------------------------+ */ -# define gSPVertex(pkt, v, n, v0) \ - gDma1p((pkt),G_VTX,(v),((n)<<10)|(sizeof(Vtx)*(n)-1),(v0)*2) -# define gsSPVertex(v, n, v0) \ - gsDma1p(G_VTX,(v),((n)<<10)|(sizeof(Vtx)*(n)-1),(v0)*2) +# define gSPVertex(pkt, v, n, v0) \ + gDma1p((pkt), G_VTX, (v), ((n) << 10) | (sizeof(Vtx) * (n) - 1), (v0) * 2) +# define gsSPVertex(v, n, v0) \ + gsDma1p( G_VTX, (v), ((n) << 10) | (sizeof(Vtx) * (n) - 1), (v0) * 2) #else -# define gSPVertex(pkt, v, n, v0) \ - gDma1p(pkt, G_VTX, v, sizeof(Vtx)*(n),((n)-1)<<4|(v0)) -# define gsSPVertex(v, n, v0) \ - gsDma1p(G_VTX, v, sizeof(Vtx)*(n), ((n)-1)<<4|(v0)) +# define gSPVertex(pkt, v, n, v0) \ + gDma1p((pkt), G_VTX, (v), sizeof(Vtx) * (n), ((n) - 1) << 4 | (v0)) +# define gsSPVertex(v, n, v0) \ + gsDma1p( G_VTX, (v), sizeof(Vtx) * (n), ((n) - 1) << 4 | (v0)) #endif #ifdef F3DEX_GBI_2 -# define gSPViewport(pkt, v) \ +# define gSPViewport(pkt, v) \ gDma2p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0) -# define gsSPViewport(v) \ +# define gsSPViewport(v) \ gsDma2p( G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0) #else /* F3DEX_GBI_2 */ -# define gSPViewport(pkt,v) \ +# define gSPViewport(pkt,v) \ gDma1p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT) -# define gsSPViewport(v) \ +# define gsSPViewport(v) \ gsDma1p( G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT) #endif /* F3DEX_GBI_2 */ -#define gSPDisplayList(pkt,dl) gDma1p(pkt,G_DL,dl,0,G_DL_PUSH) -#define gsSPDisplayList( dl) gsDma1p( G_DL,dl,0,G_DL_PUSH) +#define gSPDisplayList(pkt,dl) gDma1p(pkt, G_DL, dl, 0, G_DL_PUSH) +#define gsSPDisplayList( dl) gsDma1p( G_DL, dl, 0, G_DL_PUSH) -#define gSPBranchList(pkt,dl) gDma1p(pkt,G_DL,dl,0,G_DL_NOPUSH) -#define gsSPBranchList( dl) gsDma1p( G_DL,dl,0,G_DL_NOPUSH) +#define gSPBranchList(pkt,dl) gDma1p(pkt, G_DL, dl, 0, G_DL_NOPUSH) +#define gsSPBranchList( dl) gsDma1p( G_DL, dl, 0, G_DL_NOPUSH) #define gSPSprite2DBase(pkt, s) gDma1p(pkt, G_SPRITE2D_BASE, s, sizeof(uSprite), 0) -#define gsSPSprite2DBase(s) gsDma1p(G_SPRITE2D_BASE, s, sizeof(uSprite), 0) +#define gsSPSprite2DBase(s) gsDma1p( G_SPRITE2D_BASE, s, sizeof(uSprite), 0) /* * RSP short command (no DMA required) macros */ -#define gImmp0(pkt, c) \ +#define gImmp0(pkt, c) \ _DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL((c), 24, 8); \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ }) -#define gsImmp0(c) \ -{ \ - _SHIFTL((c), 24, 8) \ +#define gsImmp0(c) \ +{ \ + _SHIFTL((c), 24, 8) \ } -#define gImmp1(pkt, c, p0) \ +#define gImmp1(pkt, c, p0) \ _DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL((c), 24, 8); \ - _g->words.w1 = (unsigned int)(p0); \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ + _g->words.w1 = (unsigned int)(p0); \ }) -#define gsImmp1(c, p0) \ -{ \ - _SHIFTL((c), 24, 8), (unsigned int)(p0) \ +#define gsImmp1(c, p0) \ +{ \ + _SHIFTL((c), 24, 8), \ + (unsigned int)(p0) \ } -#define gImmp2(pkt, c, p0, p1) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL((c), 24, 8); \ - _g->words.w1 = _SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8); \ +#define gImmp2(pkt, c, p0, p1) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ + _g->words.w1 = (_SHIFTL((p0), 16, 16) | \ + _SHIFTL((p1), 8, 8)); \ }) -#define gsImmp2(c, p0, p1) \ -{ \ - _SHIFTL((c), 24, 8), _SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8)\ +#define gsImmp2(c, p0, p1) \ +{ \ + _SHIFTL((c), 24, 8), \ + (_SHIFTL((p0), 16, 16) | \ + _SHIFTL((p1), 8, 8)) \ } -#define gImmp3(pkt, c, p0, p1, p2) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL((c), 24, 8); \ - _g->words.w1 = (_SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8) | \ - _SHIFTL((p2), 0, 8)); \ +#define gImmp3(pkt, c, p0, p1, p2) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ + _g->words.w1 = (_SHIFTL((p0), 16, 16) | \ + _SHIFTL((p1), 8, 8) | \ + _SHIFTL((p2), 0, 8)); \ }) -#define gsImmp3(c, p0, p1, p2) \ -{ \ - _SHIFTL((c), 24, 8), (_SHIFTL((p0), 16, 16) | \ - _SHIFTL((p1), 8, 8) | _SHIFTL((p2), 0, 8))\ +#define gsImmp3(c, p0, p1, p2) \ +{ \ + _SHIFTL((c), 24, 8), \ + (_SHIFTL((p0), 16, 16) | \ + _SHIFTL((p1), 8, 8) | \ + _SHIFTL((p2), 0, 8)) \ } -#define gImmp21(pkt, c, p0, p1, dat) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | \ - _SHIFTL((p1), 0, 8)); \ - _g->words.w1 = (unsigned int) (dat); \ +#define gImmp21(pkt, c, p0, p1, dat) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL((c), 24, 8) | \ + _SHIFTL((p0), 8, 16) | \ + _SHIFTL((p1), 0, 8)); \ + _g->words.w1 = (unsigned int) (dat); \ }) -#define gsImmp21(c, p0, p1, dat) \ +#define gsImmp21(c, p0, p1, dat) \ { \ - _SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | _SHIFTL((p1), 0, 8),\ - (unsigned int) (dat) \ + (_SHIFTL((c), 24, 8) | \ + _SHIFTL((p0), 8, 16) | \ + _SHIFTL((p1), 0, 8)), \ + (unsigned int) (dat) \ } #ifdef F3DEX_GBI_2 -#define gMoveWd(pkt, index, offset, data) \ +#define gMoveWd(pkt, index, offset, data) \ gDma1p((pkt), G_MOVEWORD, data, offset, index) -#define gsMoveWd( index, offset, data) \ +#define gsMoveWd( index, offset, data) \ gsDma1p( G_MOVEWORD, data, offset, index) #else /* F3DEX_GBI_2 */ -#define gMoveWd(pkt, index, offset, data) \ +#define gMoveWd(pkt, index, offset, data) \ gImmp21((pkt), G_MOVEWORD, offset, index, data) -#define gsMoveWd( index, offset, data) \ +#define gsMoveWd( index, offset, data) \ gsImmp21( G_MOVEWORD, offset, index, data) #endif /* F3DEX_GBI_2 */ /* Sprite immediate macros, there is also a sprite dma macro above */ -#define gSPSprite2DScaleFlip(pkt, sx, sy, fx, fy) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ +#define gSPSprite2DScaleFlip(pkt, sx, sy, fx, fy) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ _g->words.w0 = (_SHIFTL(G_SPRITE2D_SCALEFLIP, 24, 8) | \ - _SHIFTL((fx), 8, 8) | \ - _SHIFTL((fy), 0, 8)); \ + _SHIFTL((fx), 8, 8) | \ + _SHIFTL((fy), 0, 8)); \ _g->words.w1 = (_SHIFTL((sx), 16, 16) | \ - _SHIFTL((sy), 0, 16)); \ + _SHIFTL((sy), 0, 16)); \ }) -#define gsSPSprite2DScaleFlip(sx, sy, fx, fy) \ -{ \ - (_SHIFTL(G_SPRITE2D_SCALEFLIP, 24, 8) | \ - _SHIFTL((fx), 8, 8) | \ - _SHIFTL((fy), 0, 8)), \ - (_SHIFTL((sx), 16, 16) | \ - _SHIFTL((sy), 0, 16)) \ +#define gsSPSprite2DScaleFlip(sx, sy, fx, fy) \ +{ \ + (_SHIFTL(G_SPRITE2D_SCALEFLIP, 24, 8) | \ + _SHIFTL((fx), 8, 8) | \ + _SHIFTL((fy), 0, 8)), \ + (_SHIFTL((sx), 16, 16) | \ + _SHIFTL((sy), 0, 16)) \ } -#define gSPSprite2DDraw(pkt, px, py) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)); \ - _g->words.w1 = (_SHIFTL((px), 16, 16) | \ - _SHIFTL((py), 0, 16)); \ +#define gSPSprite2DDraw(pkt, px, py) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)); \ + _g->words.w1 = (_SHIFTL((px), 16, 16) | \ + _SHIFTL((py), 0, 16)); \ }) -#define gsSPSprite2DDraw(px, py) \ -{ \ - (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)), \ - (_SHIFTL((px), 16, 16) | \ - _SHIFTL((py), 0, 16)) \ +#define gsSPSprite2DDraw(px, py) \ +{ \ + (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)), \ + (_SHIFTL((px), 16, 16) | \ + _SHIFTL((py), 0, 16)) \ } @@ -1867,70 +2296,86 @@ _DW({ \ * Note: the SP1Triangle() and line macros multiply the vertex indices * by 10, this is an optimization for the microcode. */ -#if (defined(F3DLP_GBI)||defined(F3DEX_GBI)) -# define __gsSP1Triangle_w1(v0, v1, v2) \ - (_SHIFTL((v0)*2,16,8)|_SHIFTL((v1)*2,8,8)|_SHIFTL((v2)*2,0,8)) +#if (defined(F3DLP_GBI) || defined(F3DEX_GBI)) +# define __gsSP1Triangle_w1(v0, v1, v2) \ + (_SHIFTL((v0) * 2, 16, 8) | \ + _SHIFTL((v1) * 2, 8, 8) | \ + _SHIFTL((v2) * 2, 0, 8)) + # define __gsSP1Triangle_w1f(v0, v1, v2, flag) \ - (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2): \ - ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v0): \ - __gsSP1Triangle_w1(v2, v0, v1)) -# define __gsSPLine3D_w1(v0, v1, wd) \ - (_SHIFTL((v0)*2,16,8)|_SHIFT((v1)*2,8,8)|_SHIFT((wd),0,8)) -# define __gsSPLine3D_w1f(v0, v1, wd, flag) \ - (((flag) == 0) ? __gsSPLine3D_w1(v0, v1, wd): \ - __gsSPLine3D_w1(v1, v0, wd)) + (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2) : \ + ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v0) : \ + __gsSP1Triangle_w1(v2, v0, v1)) + +# define __gsSPLine3D_w1(v0, v1, wd) \ + (_SHIFTL((v0) * 2, 16, 8) | \ + _SHIFTL((v1) * 2, 8, 8) | \ + _SHIFTL((wd), 0, 8)) + +# define __gsSPLine3D_w1f(v0, v1, wd, flag) \ + (((flag) == 0) ? __gsSPLine3D_w1(v0, v1, wd) : \ + __gsSPLine3D_w1(v1, v0, wd)) + # define __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag) \ - (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2): \ - ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v3): \ - ((flag) == 2) ? __gsSP1Triangle_w1(v2, v3, v0): \ - __gsSP1Triangle_w1(v3, v0, v1)) + (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2) : \ + ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v3) : \ + ((flag) == 2) ? __gsSP1Triangle_w1(v2, v3, v0) : \ + __gsSP1Triangle_w1(v3, v0, v1)) + # define __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \ - (((flag) == 0) ? __gsSP1Triangle_w1(v0, v2, v3): \ - ((flag) == 1) ? __gsSP1Triangle_w1(v1, v3, v0): \ - ((flag) == 2) ? __gsSP1Triangle_w1(v2, v0, v1): \ - __gsSP1Triangle_w1(v3, v1, v2)) + (((flag) == 0) ? __gsSP1Triangle_w1(v0, v2, v3) : \ + ((flag) == 1) ? __gsSP1Triangle_w1(v1, v3, v0) : \ + ((flag) == 2) ? __gsSP1Triangle_w1(v2, v0, v1) : \ + __gsSP1Triangle_w1(v3, v1, v2)) #else -# define __gsSP1Triangle_w1f(v0, v1, v2, flag) \ - (_SHIFTL((flag), 24,8)|_SHIFTL((v0)*10,16,8)| \ - _SHIFTL((v1)*10, 8,8)|_SHIFTL((v2)*10, 0,8)) -# define __gsSPLine3D_w1f(v0, v1, wd, flag) \ - (_SHIFTL((flag), 24,8)|_SHIFTL((v0)*10,16,8)| \ - _SHIFTL((v1)*10, 8,8)|_SHIFTL((wd), 0,8)) +# define __gsSP1Triangle_w1f(v0, v1, v2, flag) \ + (_SHIFTL((flag), 24, 8) | \ + _SHIFTL((v0) * 10, 16, 8) | \ + _SHIFTL((v1) * 10, 8, 8) | \ + _SHIFTL((v2) * 10, 0, 8)) + +# define __gsSPLine3D_w1f(v0, v1, wd, flag) \ + (_SHIFTL((flag), 24, 8) | \ + _SHIFTL((v0) * 10, 16, 8) | \ + _SHIFTL((v1) * 10, 8, 8) | \ + _SHIFTL((wd), 0, 8)) #endif #ifdef F3DEX_GBI_2 /*** *** 1 Triangle ***/ -#define gSP1Triangle(pkt, v0, v1, v2, flag) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_TRI1, 24, 8)| \ - __gsSP1Triangle_w1f(v0, v1, v2, flag); \ - _g->words.w1 = 0; \ +#define gSP1Triangle(pkt, v0, v1, v2, flag) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TRI1, 24, 8) | \ + __gsSP1Triangle_w1f(v0, v1, v2, flag)); \ + _g->words.w1 = 0; \ }) -#define gsSP1Triangle(v0, v1, v2, flag) \ -{ \ - _SHIFTL(G_TRI1, 24, 8)|__gsSP1Triangle_w1f(v0, v1, v2, flag), \ - 0 \ +#define gsSP1Triangle(v0, v1, v2, flag) \ +{ \ + (_SHIFTL(G_TRI1, 24, 8) | \ + __gsSP1Triangle_w1f(v0, v1, v2, flag)), \ + 0 \ } /*** *** Line ***/ #define gSPLine3D(pkt, v0, v1, flag) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8)| \ - __gsSPLine3D_w1f(v0, v1, 0, flag); \ - _g->words.w1 = 0; \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_LINE3D, 24, 8) | \ + __gsSPLine3D_w1f(v0, v1, 0, flag)); \ + _g->words.w1 = 0; \ }) -#define gsSPLine3D(v0, v1, flag) \ -{ \ - _SHIFTL(G_LINE3D, 24, 8)|__gsSPLine3D_w1f(v0, v1, 0, flag), \ - 0 \ +#define gsSPLine3D(v0, v1, flag) \ +{ \ + (_SHIFTL(G_LINE3D, 24, 8) | \ + __gsSPLine3D_w1f(v0, v1, 0, flag)), \ + 0 \ } /*** @@ -1942,70 +2387,71 @@ _DW({ \ * half-pixel units, so a width of 1 translates to (.5 + 1.5) or * a 2.0 pixels wide line. */ -#define gSPLineW3D(pkt, v0, v1, wd, flag) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8)| \ - __gsSPLine3D_w1f(v0, v1, wd, flag); \ - _g->words.w1 = 0; \ +#define gSPLineW3D(pkt, v0, v1, wd, flag) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_LINE3D, 24, 8) | \ + __gsSPLine3D_w1f(v0, v1, wd, flag)); \ + _g->words.w1 = 0; \ }) -#define gsSPLineW3D(v0, v1, wd, flag) \ -{ \ - _SHIFTL(G_LINE3D, 24, 8)|__gsSPLine3D_w1f(v0, v1, wd, flag), \ - 0 \ +#define gsSPLineW3D(v0, v1, wd, flag) \ +{ \ + (_SHIFTL(G_LINE3D, 24, 8) | \ + __gsSPLine3D_w1f(v0, v1, wd, flag)), \ + 0 \ } /*** *** 1 Quadrangle ***/ -#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_QUAD, 24, 8)| \ - __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \ - _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \ +#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_QUAD, 24, 8) | \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \ + _g->words.w1 = (__gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag)); \ }) -#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \ -{ \ - (_SHIFTL(G_QUAD, 24, 8)| \ - __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \ - __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \ +#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \ +{ \ + (_SHIFTL(G_QUAD, 24, 8) | \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \ + __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \ } #else /* F3DEX_GBI_2 */ /*** *** 1 Triangle ***/ -#define gSP1Triangle(pkt, v0, v1, v2, flag) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_TRI1, 24, 8); \ - _g->words.w1 = __gsSP1Triangle_w1f(v0, v1, v2, flag); \ -} -#define gsSP1Triangle(v0, v1, v2, flag) \ -{ \ - _SHIFTL(G_TRI1, 24, 8), \ - __gsSP1Triangle_w1f(v0, v1, v2, flag) \ +#define gSP1Triangle(pkt, v0, v1, v2, flag) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_TRI1, 24, 8); \ + _g->words.w1 = __gsSP1Triangle_w1f(v0, v1, v2, flag); \ +}) +#define gsSP1Triangle(v0, v1, v2, flag) \ +{ \ + _SHIFTL(G_TRI1, 24, 8), \ + __gsSP1Triangle_w1f(v0, v1, v2, flag) \ } /*** *** Line ***/ #define gSPLine3D(pkt, v0, v1, flag) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8); \ - _g->words.w1 = __gsSPLine3D_w1f(v0, v1, 0, flag); \ -} -#define gsSPLine3D(v0, v1, flag) \ -{ \ - _SHIFTL(G_LINE3D, 24, 8), \ - __gsSPLine3D_w1f(v0, v1, 0, flag) \ + _g->words.w1 = __gsSPLine3D_w1f(v0, v1, 0, flag); \ +}) +#define gsSPLine3D(v0, v1, flag) \ +{ \ + _SHIFTL(G_LINE3D, 24, 8), \ + __gsSPLine3D_w1f(v0, v1, 0, flag) \ } /*** @@ -2018,128 +2464,130 @@ _DW({ \ * a 2.0 pixels wide line. */ #define gSPLineW3D(pkt, v0, v1, wd, flag) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8); \ - _g->words.w1 = __gsSPLine3D_w1f(v0, v1, wd, flag); \ -} -#define gsSPLineW3D(v0, v1, wd, flag) \ -{ \ - _SHIFTL(G_LINE3D, 24, 8), \ - __gsSPLine3D_w1f(v0, v1, wd, flag) \ + _g->words.w1 = __gsSPLine3D_w1f(v0, v1, wd, flag); \ +}) +#define gsSPLineW3D(v0, v1, wd, flag) \ +{ \ + _SHIFTL(G_LINE3D, 24, 8), \ + __gsSPLine3D_w1f(v0, v1, wd, flag) \ } /*** *** 1 Quadrangle ***/ -#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \ - __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \ - _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \ -} +#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8) | \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \ + _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \ +}) -#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \ -{ \ - (_SHIFTL(G_TRI2, 24, 8)| \ - __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \ - __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \ +#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \ +{ \ + (_SHIFTL(G_TRI2, 24, 8) | \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \ + __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \ } #endif /* F3DEX_GBI_2 */ -#if (defined(F3DLP_GBI)||defined(F3DEX_GBI)) +#if (defined(F3DLP_GBI) || defined(F3DEX_GBI)) /*** *** 2 Triangles ***/ #define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \ - __gsSP1Triangle_w1f(v00, v01, v02, flag0)); \ - _g->words.w1 = __gsSP1Triangle_w1f(v10, v11, v12, flag1); \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8) | \ + __gsSP1Triangle_w1f(v00, v01, v02, flag0)); \ + _g->words.w1 = __gsSP1Triangle_w1f(v10, v11, v12, flag1); \ }) #define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \ -{ \ - (_SHIFTL(G_TRI2, 24, 8)| \ - __gsSP1Triangle_w1f(v00, v01, v02, flag0)), \ - __gsSP1Triangle_w1f(v10, v11, v12, flag1) \ +{ \ + (_SHIFTL(G_TRI2, 24, 8) | \ + __gsSP1Triangle_w1f(v00, v01, v02, flag0)), \ + __gsSP1Triangle_w1f(v10, v11, v12, flag1) \ } #endif /* F3DEX_GBI/F3DLP_GBI */ -#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +#if (defined(F3DEX_GBI) || defined(F3DLP_GBI)) #define gSPCullDisplayList(pkt,vstart,vend) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_CULLDL, 24, 8) | \ - _SHIFTL((vstart)*2, 0, 16); \ - _g->words.w1 = _SHIFTL((vend)*2, 0, 16); \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_CULLDL, 24, 8) | \ + _SHIFTL((vstart) * 2, 0, 16)); \ + _g->words.w1 = _SHIFTL((vend) * 2, 0, 16); \ }) -#define gsSPCullDisplayList(vstart,vend) \ -{ \ - _SHIFTL(G_CULLDL, 24, 8) | _SHIFTL((vstart)*2, 0, 16), \ - _SHIFTL((vend)*2, 0, 16) \ +#define gsSPCullDisplayList(vstart,vend) \ +{ \ + (_SHIFTL(G_CULLDL, 24, 8) | \ + _SHIFTL((vstart) * 2, 0, 16)), \ + _SHIFTL((vend) * 2, 0, 16) \ } #else -#define gSPCullDisplayList(pkt,vstart,vend) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_CULLDL, 24, 8) | \ - ((0x0f & (vstart))*40); \ - _g->words.w1 = (unsigned int)((0x0f & ((vend)+1))*40); \ -} +#define gSPCullDisplayList(pkt,vstart,vend) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_CULLDL, 24, 8) | \ + ((0x0F & (vstart)) * 40)); \ + _g->words.w1 = (unsigned int)((0x0F & ((vend) + 1)) * 40); \ +}) -#define gsSPCullDisplayList(vstart,vend) \ -{ \ - _SHIFTL(G_CULLDL, 24, 8) | ((0x0f & (vstart))*40), \ - ((0x0f & ((vend)+1))*40) \ +#define gsSPCullDisplayList(vstart,vend) \ +{ \ + (_SHIFTL(G_CULLDL, 24, 8) | \ + ((0x0F & (vstart)) * 40)), \ + ((0x0F & ((vend) + 1)) * 40) \ } #endif -#define gSPSegment(pkt, segment, base) \ - gMoveWd(pkt, G_MW_SEGMENT, (segment)*4, base) +#define gSPSegment(pkt, segment, base) \ + gMoveWd(pkt, G_MW_SEGMENT, (segment) * 4, base) #define gsSPSegment(segment, base) \ - gsMoveWd( G_MW_SEGMENT, (segment)*4, base) + gsMoveWd( G_MW_SEGMENT, (segment) * 4, base) /* * Clipping Macros */ #define FR_NEG_FRUSTRATIO_1 0x00000001 -#define FR_POS_FRUSTRATIO_1 0x0000ffff +#define FR_POS_FRUSTRATIO_1 0x0000FFFF #define FR_NEG_FRUSTRATIO_2 0x00000002 -#define FR_POS_FRUSTRATIO_2 0x0000fffe +#define FR_POS_FRUSTRATIO_2 0x0000FFFE #define FR_NEG_FRUSTRATIO_3 0x00000003 -#define FR_POS_FRUSTRATIO_3 0x0000fffd +#define FR_POS_FRUSTRATIO_3 0x0000FFFD #define FR_NEG_FRUSTRATIO_4 0x00000004 -#define FR_POS_FRUSTRATIO_4 0x0000fffc +#define FR_POS_FRUSTRATIO_4 0x0000FFFC #define FR_NEG_FRUSTRATIO_5 0x00000005 -#define FR_POS_FRUSTRATIO_5 0x0000fffb +#define FR_POS_FRUSTRATIO_5 0x0000FFFB #define FR_NEG_FRUSTRATIO_6 0x00000006 -#define FR_POS_FRUSTRATIO_6 0x0000fffa +#define FR_POS_FRUSTRATIO_6 0x0000FFFA /* * r should be one of: FRUSTRATIO_1, FRUSTRATIO_2, FRUSTRATIO_3, ... FRUSTRATIO_6 */ -#define gSPClipRatio(pkt, r) \ -_DW({ \ - gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r); \ - gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r); \ - gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r); \ - gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPY, FR_POS_##r); \ +#define gSPClipRatio(pkt, r) \ +_DW({ \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r); \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r); \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r); \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPY, FR_POS_##r); \ }) -#define gsSPClipRatio(r) \ - gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r), \ - gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r), \ - gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r), \ +#define gsSPClipRatio(r) \ + gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r), \ + gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r), \ + gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r), \ gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RPY, FR_POS_##r) /* @@ -2149,16 +2597,16 @@ _DW({ \ * num = new element (32 bit value replacing 2 int or 2 frac matrix * componants */ -#ifdef F3DEX_GBI_2 -#define gSPInsertMatrix(pkt, where, num) \ +#ifdef F3DEX_GBI_2 +#define gSPInsertMatrix(pkt, where, num) \ ERROR!! gSPInsertMatrix is no longer supported. -#define gsSPInsertMatrix(where, num) \ +#define gsSPInsertMatrix(where, num) \ ERROR!! gsSPInsertMatrix is no longer supported. #else -#define gSPInsertMatrix(pkt, where, num) \ +#define gSPInsertMatrix(pkt, where, num) \ gMoveWd(pkt, G_MW_MATRIX, where, num) -#define gsSPInsertMatrix(where, num) \ - gsMoveWd(G_MW_MATRIX, where, num) +#define gsSPInsertMatrix(where, num) \ + gsMoveWd( G_MW_MATRIX, where, num) #endif /* @@ -2167,28 +2615,28 @@ _DW({ \ * mptr = pointer to matrix */ #ifdef F3DEX_GBI_2 -#define gSPForceMatrix(pkt, mptr) \ -_DW({ \ - gDma2p((pkt),G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0); \ - gMoveWd((pkt), G_MW_FORCEMTX,0,0x00010000); \ +#define gSPForceMatrix(pkt, mptr) \ +_DW({ \ + gDma2p((pkt), G_MOVEMEM, (mptr), sizeof(Mtx), G_MV_MATRIX, 0); \ + gMoveWd((pkt), G_MW_FORCEMTX, 0, 0x00010000); \ }) -#define gsSPForceMatrix(mptr) \ - gsDma2p(G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0), \ - gsMoveWd(G_MW_FORCEMTX,0,0x00010000) +#define gsSPForceMatrix(mptr) \ + gsDma2p( G_MOVEMEM, (mptr), sizeof(Mtx), G_MV_MATRIX, 0), \ + gsMoveWd( G_MW_FORCEMTX, 0, 0x00010000) #else /* F3DEX_GBI_2 */ -#define gSPForceMatrix(pkt, mptr) \ -{ \ - gDma1p(pkt, G_MOVEMEM, mptr, 16, G_MV_MATRIX_1); \ - gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+16, 16, G_MV_MATRIX_2); \ - gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+32, 16, G_MV_MATRIX_3); \ - gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+48, 16, G_MV_MATRIX_4); \ -} -#define gsSPForceMatrix(mptr) \ - gsDma1p( G_MOVEMEM, mptr, 16, G_MV_MATRIX_1), \ - gsDma1p( G_MOVEMEM, (char *)(mptr)+16, 16, G_MV_MATRIX_2), \ - gsDma1p( G_MOVEMEM, (char *)(mptr)+32, 16, G_MV_MATRIX_3), \ - gsDma1p( G_MOVEMEM, (char *)(mptr)+48, 16, G_MV_MATRIX_4) +#define gSPForceMatrix(pkt, mptr) \ +_DW({ \ + gDma1p(pkt, G_MOVEMEM, mptr, 16, G_MV_MATRIX_1); \ + gDma1p(pkt, G_MOVEMEM, (char *)(mptr) + 16, 16, G_MV_MATRIX_2); \ + gDma1p(pkt, G_MOVEMEM, (char *)(mptr) + 32, 16, G_MV_MATRIX_3); \ + gDma1p(pkt, G_MOVEMEM, (char *)(mptr) + 48, 16, G_MV_MATRIX_4); \ +}) +#define gsSPForceMatrix(mptr) \ + gsDma1p( G_MOVEMEM, mptr, 16, G_MV_MATRIX_1), \ + gsDma1p( G_MOVEMEM, (char *)(mptr) + 16, 16, G_MV_MATRIX_2), \ + gsDma1p( G_MOVEMEM, (char *)(mptr) + 32, 16, G_MV_MATRIX_3), \ + gsDma1p( G_MOVEMEM, (char *)(mptr) + 48, 16, G_MV_MATRIX_4) #endif /* F3DEX_GBI_2 */ /* @@ -2199,27 +2647,30 @@ _DW({ \ * num = new value (32 bit) */ #if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) -# define gSPModifyVertex(pkt, vtx, where, val) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = (_SHIFTL(G_MODIFYVTX,24,8)| \ - _SHIFTL((where),16,8)|_SHIFTL((vtx)*2,0,16)); \ +# define gSPModifyVertex(pkt, vtx, where, val) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_MODIFYVTX, 24, 8) | \ + _SHIFTL((where), 16, 8) | \ + _SHIFTL((vtx) * 2, 0, 16)); \ _g->words.w1 = (unsigned int)(val); \ }) -# define gsSPModifyVertex(vtx, where, val) \ -{ \ - _SHIFTL(G_MODIFYVTX,24,8)| \ - _SHIFTL((where),16,8)|_SHIFTL((vtx)*2,0,16), \ +# define gsSPModifyVertex(vtx, where, val) \ +{ \ + (_SHIFTL(G_MODIFYVTX, 24, 8) | \ + _SHIFTL((where), 16, 8) | \ + _SHIFTL((vtx) * 2, 0, 16)), \ (unsigned int)(val) \ } #else -# define gSPModifyVertex(pkt, vtx, where, val) \ - gMoveWd(pkt, G_MW_POINTS, (vtx)*40+(where), val) +# define gSPModifyVertex(pkt, vtx, where, val) \ + gMoveWd(pkt, G_MW_POINTS, (vtx) * 40 + (where), val) # define gsSPModifyVertex(vtx, where, val) \ - gsMoveWd(G_MW_POINTS, (vtx)*40+(where), val) + gsMoveWd( G_MW_POINTS, (vtx) * 40 + (where), val) #endif -#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +#if (defined(F3DEX_GBI) || defined(F3DLP_GBI)) /* * gSPBranchLessZ Branch DL if (vtx.z) less than or equal (zval). * @@ -2231,40 +2682,55 @@ _DW({ \ * flag = G_BZ_PERSP or G_BZ_ORTHO */ +// From gu.h +#ifndef FTOFIX32 +# define FTOFIX32(x) (long)((x) * (float)0x00010000) +#endif + #define G_BZ_PERSP 0 #define G_BZ_ORTHO 1 #define G_DEPTOZSrg(zval, near, far, flag, zmin, zmax) \ -(((unsigned int)FTOFIX32(((flag) == G_BZ_PERSP ? \ - (1.0f-(float)(near)/(float)(zval)) / \ - (1.0f-(float)(near)/(float)(far )) : \ - ((float)(zval) - (float)(near)) / \ - ((float)(far ) - (float)(near))))) * \ - (((int)((zmax) - (zmin)))&~1) + (int)FTOFIX32(zmin)) + (((unsigned int)FTOFIX32(((flag) == G_BZ_PERSP ? \ + (1.0f - (float)(near) / (float)(zval)) / \ + (1.0f - (float)(near) / (float)(far )) : \ + ((float)(zval) - (float)(near)) / \ + ((float)(far ) - (float)(near))))) * \ + (((int)((zmax) - (zmin))) & ~1) + (int)FTOFIX32(zmin)) #define G_DEPTOZS(zval, near, far, flag) \ G_DEPTOZSrg(zval, near, far, flag, 0, G_MAXZ) -#define gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, zmin, zmax) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \ - _g->words.w1 = (unsigned int)(dl); \ - _g = (Gfx *)(pkt); \ - _g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \ - _SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \ - _g->words.w1 = G_DEPTOZSrg(zval, near, far, flag, zmin, zmax); \ +#define gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, zmin, zmax) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \ + _g->words.w1 = (unsigned int)(dl); \ + \ + _g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_BRANCH_Z, 24, 8) | \ + _SHIFTL((vtx) * 5, 12, 12) | \ + _SHIFTL((vtx) * 2, 0, 12)); \ + _g->words.w1 = G_DEPTOZSrg(zval, near, far, flag, zmin, zmax); \ }) -#define gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, zmin, zmax) \ -{ _SHIFTL(G_RDPHALF_1,24,8), \ - (unsigned int)(dl), }, \ -{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\ - G_DEPTOZSrg(zval, near, far, flag, zmin, zmax), } +#define gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, zmin, zmax) \ +{ \ + _SHIFTL(G_RDPHALF_1, 24, 8), \ + (unsigned int)(dl), \ +}, \ +{ \ + (_SHIFTL(G_BRANCH_Z, 24, 8) | \ + _SHIFTL((vtx) * 5, 12, 12) | \ + _SHIFTL((vtx) * 2, 0, 12)), \ + G_DEPTOZSrg(zval, near, far, flag, zmin, zmax), \ +} -#define gSPBranchLessZ(pkt, dl, vtx, zval, near, far, flag) \ +#define gSPBranchLessZ(pkt, dl, vtx, zval, near, far, flag) \ gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, 0, G_MAXZ) -#define gsSPBranchLessZ(dl, vtx, zval, near, far, flag) \ +#define gsSPBranchLessZ(dl, vtx, zval, near, far, flag) \ gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, 0, G_MAXZ) /* @@ -2274,22 +2740,32 @@ _DW({ \ * vtx = Vertex * zval = Raw value of screen depth */ -#define gSPBranchLessZraw(pkt, dl, vtx, zval) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \ +#define gSPBranchLessZraw(pkt, dl, vtx, zval) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \ _g->words.w1 = (unsigned int)(dl); \ - _g = (Gfx *)(pkt); \ - _g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \ - _SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \ - _g->words.w1 = (unsigned int)(zval); \ + \ + _g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_BRANCH_Z, 24, 8) | \ + _SHIFTL((vtx) * 5, 12, 12) | \ + _SHIFTL((vtx) * 2, 0, 12)); \ + _g->words.w1 = (unsigned int)(zval); \ }) -#define gsSPBranchLessZraw(dl, vtx, zval) \ -{ _SHIFTL(G_RDPHALF_1,24,8), \ - (unsigned int)(dl), }, \ -{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\ - (unsigned int)(zval), } +#define gsSPBranchLessZraw(dl, vtx, zval) \ +{ \ + _SHIFTL(G_RDPHALF_1, 24, 8), \ + (unsigned int)(dl), \ +}, \ +{ \ + (_SHIFTL(G_BRANCH_Z, 24, 8) | \ + _SHIFTL((vtx) * 5, 12, 12) | \ + _SHIFTL((vtx) * 2, 0, 12)), \ + (unsigned int)(zval), \ +} /* * gSPLoadUcode RSP loads specified ucode. @@ -2297,69 +2773,81 @@ _DW({ \ * uc_start = ucode text section start * uc_dstart = ucode data section start */ -#define gSPLoadUcodeEx(pkt, uc_start, uc_dstart, uc_dsize) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \ - _g->words.w1 = (unsigned int)(uc_dstart); \ - _g = (Gfx *)(pkt); \ - _g->words.w0 = (_SHIFTL(G_LOAD_UCODE,24,8)| \ - _SHIFTL((int)(uc_dsize)-1,0,16)); \ - _g->words.w1 = (unsigned int)(uc_start); \ +#define gSPLoadUcodeEx(pkt, uc_start, uc_dstart, uc_dsize) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \ + _g->words.w1 = (unsigned int)(uc_dstart); \ + \ + _g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_LOAD_UCODE, 24, 8) | \ + _SHIFTL((int)(uc_dsize) - 1, 0, 16)); \ + _g->words.w1 = (unsigned int)(uc_start); \ }) -#define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize) \ -{ _SHIFTL(G_RDPHALF_1,24,8), \ - (unsigned int)(uc_dstart), }, \ -{ _SHIFTL(G_LOAD_UCODE,24,8)| \ - _SHIFTL((int)(uc_dsize)-1,0,16), \ - (unsigned int)(uc_start), } +#define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize) \ +{ \ + _SHIFTL(G_RDPHALF_1, 24, 8), \ + (unsigned int)(uc_dstart), \ +}, \ +{ \ + (_SHIFTL(G_LOAD_UCODE, 24, 8) | \ + _SHIFTL((int)(uc_dsize) - 1, 0, 16)), \ + (unsigned int)(uc_start), \ +} -#define gSPLoadUcode(pkt, uc_start, uc_dstart) \ +#define gSPLoadUcode(pkt, uc_start, uc_dstart) \ gSPLoadUcodeEx((pkt), (uc_start), (uc_dstart), SP_UCODE_DATA_SIZE) -#define gsSPLoadUcode(uc_start, uc_dstart) \ +#define gsSPLoadUcode(uc_start, uc_dstart) \ gsSPLoadUcodeEx((uc_start), (uc_dstart), SP_UCODE_DATA_SIZE) -#define gSPLoadUcodeL(pkt, ucode) \ - gSPLoadUcode((pkt), OS_K0_TO_PHYSICAL(& ucode##TextStart), \ - OS_K0_TO_PHYSICAL(& ucode##DataStart)) -#define gsSPLoadUcodeL(ucode) \ - gsSPLoadUcode(OS_K0_TO_PHYSICAL(& ucode##TextStart), \ - OS_K0_TO_PHYSICAL(& ucode##DataStart)) +#define gSPLoadUcodeL(pkt, ucode) \ + gSPLoadUcode((pkt), OS_K0_TO_PHYSICAL(& ucode##TextStart), \ + OS_K0_TO_PHYSICAL(& ucode##DataStart)) +#define gsSPLoadUcodeL(ucode) \ + gsSPLoadUcode( OS_K0_TO_PHYSICAL(& ucode##TextStart), \ + OS_K0_TO_PHYSICAL(& ucode##DataStart)) #endif #ifdef F3DEX_GBI_2 /* * gSPDma_io DMA to/from DMEM/IMEM for DEBUG. */ -#define gSPDma_io(pkt, flag, dmem, dram, size) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \ - _SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12); \ - _g->words.w1 = (unsigned int)(dram); \ +#define gSPDma_io(pkt, flag, dmem, dram, size) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_DMA_IO, 24, 8) | \ + _SHIFTL((flag), 23, 1) | \ + _SHIFTL((dmem) / 8, 13, 10) | \ + _SHIFTL((size) - 1, 0, 12)); \ + _g->words.w1 = (unsigned int)(dram); \ }) -#define gsSPDma_io(flag, dmem, dram, size) \ -{ \ - _SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \ - _SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12), \ - (unsigned int)(dram) \ +#define gsSPDma_io(flag, dmem, dram, size) \ +{ \ + (_SHIFTL(G_DMA_IO, 24, 8) | \ + _SHIFTL((flag), 23, 1) | \ + _SHIFTL((dmem) / 8, 13, 10) | \ + _SHIFTL((size) - 1, 0, 12)), \ + (unsigned int)(dram) \ } #define gSPDmaRead(pkt,dmem,dram,size) gSPDma_io((pkt),0,(dmem),(dram),(size)) -#define gsSPDmaRead(dmem,dram,size) gsSPDma_io(0,(dmem),(dram),(size)) +#define gsSPDmaRead(dmem,dram,size) gsSPDma_io( 0,(dmem),(dram),(size)) #define gSPDmaWrite(pkt,dmem,dram,size) gSPDma_io((pkt),1,(dmem),(dram),(size)) -#define gsSPDmaWrite(dmem,dram,size) gsSPDma_io(1,(dmem),(dram),(size)) +#define gsSPDmaWrite(dmem,dram,size) gsSPDma_io( 1,(dmem),(dram),(size)) #endif /* * Lighting Macros */ #ifdef F3DEX_GBI_2 -# define NUML(n) ((n)*24) +# define NUML(n) ((n) * 24) #else -# define NUML(n) (((n)+1)*32 + 0x80000000) +# define NUML(n) (((n) + 1) * 32 + 0x80000000) #endif #define NUMLIGHTS_0 1 #define NUMLIGHTS_1 1 @@ -2374,9 +2862,9 @@ _DW({ \ * NOTE: in addition to the number of directional lights specified, * there is always 1 ambient light */ -#define gSPNumLights(pkt, n) \ +#define gSPNumLights(pkt, n) \ gMoveWd(pkt, G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n)) -#define gsSPNumLights(n) \ +#define gsSPNumLights(n) \ gsMoveWd( G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n)) #define LIGHT_1 1 @@ -2387,6 +2875,7 @@ _DW({ \ #define LIGHT_6 6 #define LIGHT_7 7 #define LIGHT_8 8 + /* * l should point to a Light struct * n should be one of: LIGHT_1, LIGHT_2, ..., LIGHT_8 @@ -2396,15 +2885,15 @@ _DW({ \ * LIGHT_4 will be the ambient light. */ #ifdef F3DEX_GBI_2 -# define gSPLight(pkt, l, n) \ - gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,(n)*24+24) -# define gsSPLight(l, n) \ - gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,(n)*24+24) +# define gSPLight(pkt, l, n) \ + gDma2p((pkt), G_MOVEMEM, (l), sizeof(Light), G_MV_LIGHT, (n) * 24 + 24) +# define gsSPLight(l, n) \ + gsDma2p( G_MOVEMEM, (l), sizeof(Light), G_MV_LIGHT, (n) * 24 + 24) #else /* F3DEX_GBI_2 */ -# define gSPLight(pkt, l, n) \ - gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),((n)-1)*2+G_MV_L0) -# define gsSPLight(l, n) \ - gsDma1p( G_MOVEMEM, l, sizeof(Light),((n)-1)*2+G_MV_L0) +# define gSPLight(pkt, l, n) \ + gDma1p(pkt, G_MOVEMEM, (l), sizeof(Light), ((n) - 1) * 2 + G_MV_L0) +# define gsSPLight(l, n) \ + gsDma1p( G_MOVEMEM, (l), sizeof(Light), ((n) - 1) * 2 + G_MV_L0) #endif /* F3DEX_GBI_2 */ /* @@ -2413,194 +2902,206 @@ _DW({ \ * n should be one of LIGHT_1, LIGHT_2, ..., LIGHT_8 */ #define gSPLightColor(pkt, n, col) \ -_DW({ \ - gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_a##n, col); \ - gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_b##n, col); \ +_DW({ \ + gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_a##n, col); \ + gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_b##n, col); \ }) #define gsSPLightColor(n, col) \ - gsMoveWd(G_MW_LIGHTCOL, G_MWO_a##n, col), \ + gsMoveWd(G_MW_LIGHTCOL, G_MWO_a##n, col), \ gsMoveWd(G_MW_LIGHTCOL, G_MWO_b##n, col) /* These macros use a structure "name" which is init'd with the gdSPDefLights macros*/ -#define gSPSetLights0(pkt,name) \ -_DW({ \ - gSPNumLights(pkt,NUMLIGHTS_0); \ - gSPLight(pkt,&name.l[0],1); \ - gSPLight(pkt,&name.a,2); \ +#define gSPSetLights0(pkt,name) \ +_DW({ \ + gSPNumLights(pkt, NUMLIGHTS_0); \ + gSPLight(pkt, &name.l[0], 1); \ + gSPLight(pkt, &name.a, 2); \ }) -#define gsSPSetLights0(name) \ - gsSPNumLights(NUMLIGHTS_0), \ - gsSPLight(&name.l[0],1), \ - gsSPLight(&name.a,2) +#define gsSPSetLights0(name) \ + gsSPNumLights(NUMLIGHTS_0), \ + gsSPLight(&name.l[0], 1), \ + gsSPLight(&name.a, 2) -#define gSPSetLights1(pkt,name) \ -_DW({ \ - gSPNumLights(pkt,NUMLIGHTS_1); \ - gSPLight(pkt,&name.l[0],1); \ - gSPLight(pkt,&name.a,2); \ +#define gSPSetLights1(pkt,name) \ +_DW({ \ + gSPNumLights(pkt, NUMLIGHTS_1); \ + gSPLight(pkt, &name.l[0], 1); \ + gSPLight(pkt, &name.a, 2); \ }) -#define gsSPSetLights1(name) \ - gsSPNumLights(NUMLIGHTS_1), \ - gsSPLight(&name.l[0],1), \ - gsSPLight(&name.a,2) +#define gsSPSetLights1(name) \ + gsSPNumLights(NUMLIGHTS_1), \ + gsSPLight(&name.l[0], 1), \ + gsSPLight(&name.a, 2) -#define gSPSetLights2(pkt,name) \ -_DW({ \ - gSPNumLights(pkt,NUMLIGHTS_2); \ - gSPLight(pkt,&name.l[0],1); \ - gSPLight(pkt,&name.l[1],2); \ - gSPLight(pkt,&name.a,3); \ +#define gSPSetLights2(pkt,name) \ +_DW({ \ + gSPNumLights(pkt, NUMLIGHTS_2); \ + gSPLight(pkt, &name.l[0], 1); \ + gSPLight(pkt, &name.l[1], 2); \ + gSPLight(pkt, &name.a, 3); \ }) -#define gsSPSetLights2(name) \ - gsSPNumLights(NUMLIGHTS_2), \ - gsSPLight(&name.l[0],1), \ - gsSPLight(&name.l[1],2), \ +#define gsSPSetLights2(name) \ + gsSPNumLights(NUMLIGHTS_2), \ + gsSPLight(&name.l[0], 1), \ + gsSPLight(&name.l[1], 2), \ gsSPLight(&name.a,3) -#define gSPSetLights3(pkt,name) \ -_DW({ \ - gSPNumLights(pkt,NUMLIGHTS_3); \ - gSPLight(pkt,&name.l[0],1); \ - gSPLight(pkt,&name.l[1],2); \ - gSPLight(pkt,&name.l[2],3); \ - gSPLight(pkt,&name.a,4); \ +#define gSPSetLights3(pkt,name) \ +_DW({ \ + gSPNumLights(pkt, NUMLIGHTS_3); \ + gSPLight(pkt, &name.l[0], 1); \ + gSPLight(pkt, &name.l[1], 2); \ + gSPLight(pkt, &name.l[2], 3); \ + gSPLight(pkt, &name.a, 4); \ }) -#define gsSPSetLights3(name) \ - gsSPNumLights(NUMLIGHTS_3), \ - gsSPLight(&name.l[0],1), \ - gsSPLight(&name.l[1],2), \ - gsSPLight(&name.l[2],3), \ - gsSPLight(&name.a,4) +#define gsSPSetLights3(name) \ + gsSPNumLights(NUMLIGHTS_3), \ + gsSPLight(&name.l[0], 1), \ + gsSPLight(&name.l[1], 2), \ + gsSPLight(&name.l[2], 3), \ + gsSPLight(&name.a, 4) -#define gSPSetLights4(pkt,name) \ -_DW({ \ - gSPNumLights(pkt,NUMLIGHTS_4); \ - gSPLight(pkt,&name.l[0],1); \ - gSPLight(pkt,&name.l[1],2); \ - gSPLight(pkt,&name.l[2],3); \ - gSPLight(pkt,&name.l[3],4); \ - gSPLight(pkt,&name.a,5); \ +#define gSPSetLights4(pkt,name) \ +_DW({ \ + gSPNumLights(pkt, NUMLIGHTS_4); \ + gSPLight(pkt, &name.l[0], 1); \ + gSPLight(pkt, &name.l[1], 2); \ + gSPLight(pkt, &name.l[2], 3); \ + gSPLight(pkt, &name.l[3], 4); \ + gSPLight(pkt, &name.a, 5); \ }) -#define gsSPSetLights4(name) \ - gsSPNumLights(NUMLIGHTS_4), \ - gsSPLight(&name.l[0],1), \ - gsSPLight(&name.l[1],2), \ - gsSPLight(&name.l[2],3), \ - gsSPLight(&name.l[3],4), \ - gsSPLight(&name.a,5) +#define gsSPSetLights4(name) \ + gsSPNumLights(NUMLIGHTS_4), \ + gsSPLight(&name.l[0], 1), \ + gsSPLight(&name.l[1], 2), \ + gsSPLight(&name.l[2], 3), \ + gsSPLight(&name.l[3], 4), \ + gsSPLight(&name.a, 5) -#define gSPSetLights5(pkt,name) \ -_DW({ \ - gSPNumLights(pkt,NUMLIGHTS_5); \ - gSPLight(pkt,&name.l[0],1); \ - gSPLight(pkt,&name.l[1],2); \ - gSPLight(pkt,&name.l[2],3); \ - gSPLight(pkt,&name.l[3],4); \ - gSPLight(pkt,&name.l[4],5); \ - gSPLight(pkt,&name.a,6); \ +#define gSPSetLights5(pkt,name) \ +_DW({ \ + gSPNumLights(pkt, NUMLIGHTS_5); \ + gSPLight(pkt, &name.l[0], 1); \ + gSPLight(pkt, &name.l[1], 2); \ + gSPLight(pkt, &name.l[2], 3); \ + gSPLight(pkt, &name.l[3], 4); \ + gSPLight(pkt, &name.l[4], 5); \ + gSPLight(pkt, &name.a, 6); \ }) -#define gsSPSetLights5(name) \ - gsSPNumLights(NUMLIGHTS_5), \ - gsSPLight(&name.l[0],1), \ - gsSPLight(&name.l[1],2), \ - gsSPLight(&name.l[2],3), \ - gsSPLight(&name.l[3],4), \ - gsSPLight(&name.l[4],5), \ - gsSPLight(&name.a,6) +#define gsSPSetLights5(name) \ + gsSPNumLights(NUMLIGHTS_5), \ + gsSPLight(&name.l[0], 1), \ + gsSPLight(&name.l[1], 2), \ + gsSPLight(&name.l[2], 3), \ + gsSPLight(&name.l[3], 4), \ + gsSPLight(&name.l[4], 5), \ + gsSPLight(&name.a, 6) -#define gSPSetLights6(pkt,name) \ -_DW({ \ - gSPNumLights(pkt,NUMLIGHTS_6); \ - gSPLight(pkt,&name.l[0],1); \ - gSPLight(pkt,&name.l[1],2); \ - gSPLight(pkt,&name.l[2],3); \ - gSPLight(pkt,&name.l[3],4); \ - gSPLight(pkt,&name.l[4],5); \ - gSPLight(pkt,&name.l[5],6); \ - gSPLight(pkt,&name.a,7); \ +#define gSPSetLights6(pkt,name) \ +_DW({ \ + gSPNumLights(pkt, NUMLIGHTS_6); \ + gSPLight(pkt, &name.l[0], 1); \ + gSPLight(pkt, &name.l[1], 2); \ + gSPLight(pkt, &name.l[2], 3); \ + gSPLight(pkt, &name.l[3], 4); \ + gSPLight(pkt, &name.l[4], 5); \ + gSPLight(pkt, &name.l[5], 6); \ + gSPLight(pkt, &name.a, 7); \ }) -#define gsSPSetLights6(name) \ - gsSPNumLights(NUMLIGHTS_6), \ - gsSPLight(&name.l[0],1), \ - gsSPLight(&name.l[1],2), \ - gsSPLight(&name.l[2],3), \ - gsSPLight(&name.l[3],4), \ - gsSPLight(&name.l[4],5), \ - gsSPLight(&name.l[5],6), \ - gsSPLight(&name.a,7) +#define gsSPSetLights6(name) \ + gsSPNumLights(NUMLIGHTS_6), \ + gsSPLight(&name.l[0], 1), \ + gsSPLight(&name.l[1], 2), \ + gsSPLight(&name.l[2], 3), \ + gsSPLight(&name.l[3], 4), \ + gsSPLight(&name.l[4], 5), \ + gsSPLight(&name.l[5], 6), \ + gsSPLight(&name.a, 7) -#define gSPSetLights7(pkt,name) \ -_DW({ \ - gSPNumLights(pkt,NUMLIGHTS_7); \ - gSPLight(pkt,&name.l[0],1); \ - gSPLight(pkt,&name.l[1],2); \ - gSPLight(pkt,&name.l[2],3); \ - gSPLight(pkt,&name.l[3],4); \ - gSPLight(pkt,&name.l[4],5); \ - gSPLight(pkt,&name.l[5],6); \ - gSPLight(pkt,&name.l[6],7); \ - gSPLight(pkt,&name.a,8); \ +#define gSPSetLights7(pkt,name) \ +_DW({ \ + gSPNumLights(pkt, NUMLIGHTS_7); \ + gSPLight(pkt, &name.l[0], 1); \ + gSPLight(pkt, &name.l[1], 2); \ + gSPLight(pkt, &name.l[2], 3); \ + gSPLight(pkt, &name.l[3], 4); \ + gSPLight(pkt, &name.l[4], 5); \ + gSPLight(pkt, &name.l[5], 6); \ + gSPLight(pkt, &name.l[6], 7); \ + gSPLight(pkt, &name.a, 8); \ }) -#define gsSPSetLights7(name) \ - gsSPNumLights(NUMLIGHTS_7), \ - gsSPLight(&name.l[0],1), \ - gsSPLight(&name.l[1],2), \ - gsSPLight(&name.l[2],3), \ - gsSPLight(&name.l[3],4), \ - gsSPLight(&name.l[4],5), \ - gsSPLight(&name.l[5],6), \ - gsSPLight(&name.l[6],7), \ - gsSPLight(&name.a,8) +#define gsSPSetLights7(name) \ + gsSPNumLights(NUMLIGHTS_7), \ + gsSPLight(&name.l[0], 1), \ + gsSPLight(&name.l[1], 2), \ + gsSPLight(&name.l[2], 3), \ + gsSPLight(&name.l[3], 4), \ + gsSPLight(&name.l[4], 5), \ + gsSPLight(&name.l[5], 6), \ + gsSPLight(&name.l[6], 7), \ + gsSPLight(&name.a, 8) /* * Reflection/Hiliting Macros */ #ifdef F3DEX_GBI_2 -# define gSPLookAtX(pkt, l) \ - gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATX) -# define gsSPLookAtX(l) \ - gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATX) -# define gSPLookAtY(pkt, l) \ - gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATY) -# define gsSPLookAtY(l) \ - gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATY) +# define gSPLookAtX(pkt, l) \ + gDma2p((pkt),G_MOVEMEM, (l), sizeof(Light), G_MV_LIGHT, G_MVO_LOOKATX) +# define gsSPLookAtX(l) \ + gsDma2p( G_MOVEMEM, (l), sizeof(Light), G_MV_LIGHT, G_MVO_LOOKATX) +# define gSPLookAtY(pkt, l) \ + gDma2p((pkt),G_MOVEMEM, (l), sizeof(Light), G_MV_LIGHT, G_MVO_LOOKATY) +# define gsSPLookAtY(l) \ + gsDma2p( G_MOVEMEM, (l), sizeof(Light), G_MV_LIGHT, G_MVO_LOOKATY) #else /* F3DEX_GBI_2 */ -# define gSPLookAtX(pkt, l) \ - gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATX) -# define gsSPLookAtX(l) \ - gsDma1p( G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATX) -# define gSPLookAtY(pkt, l) \ - gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATY) -# define gsSPLookAtY(l) \ - gsDma1p( G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATY) +# define gSPLookAtX(pkt, l) \ + gDma1p(pkt, G_MOVEMEM, l, sizeof(Light), G_MV_LOOKATX) +# define gsSPLookAtX(l) \ + gsDma1p( G_MOVEMEM, l, sizeof(Light), G_MV_LOOKATX) +# define gSPLookAtY(pkt, l) \ + gDma1p(pkt, G_MOVEMEM, l, sizeof(Light), G_MV_LOOKATY) +# define gsSPLookAtY(l) \ + gsDma1p( G_MOVEMEM, l, sizeof(Light), G_MV_LOOKATY) #endif /* F3DEX_GBI_2 */ -#define gSPLookAt(pkt, la) \ +#define gSPLookAt(pkt, la) \ _DW({ \ - gSPLookAtX(pkt,la); \ - gSPLookAtY(pkt,(char *)(la)+16); \ + gSPLookAtX(pkt, la); \ + gSPLookAtY(pkt, (char*)(la) + 16); \ }) -#define gsSPLookAt(la) \ - gsSPLookAtX(la), \ - gsSPLookAtY((char *)(la)+16) +#define gsSPLookAt(la) \ + gsSPLookAtX(la), \ + gsSPLookAtY((char*)(la) + 16) -#define gDPSetHilite1Tile(pkt, tile, hilite, width, height) \ - gDPSetTileSize(pkt, tile, (hilite)->h.x1 & 0xfff, (hilite)->h.y1 & 0xfff, \ - ((((width)-1)*4)+(hilite)->h.x1) & 0xfff, ((((height)-1)*4)+(hilite)->h.y1) & 0xfff) -#define gsDPSetHilite1Tile(tile, hilite, width, height) \ - gsDPSetTileSize(tile, (hilite)->h.x1 & 0xfff, (hilite)->h.y1 & 0xfff, \ - ((((width)-1)*4)+(hilite)->h.x1) & 0xfff, ((((height)-1)*4)+(hilite)->h.y1) & 0xfff) +#define gDPSetHilite1Tile(pkt, tile, hilite, width, height) \ + gDPSetTileSize(pkt, tile, \ + (hilite)->h.x1 & 0xFFF, \ + (hilite)->h.y1 & 0xFFF, \ + ((((width) - 1) * 4) + (hilite)->h.x1) & 0xFFF, \ + ((((height) - 1) * 4) + (hilite)->h.y1) & 0xFFF) +#define gsDPSetHilite1Tile(tile, hilite, width, height) \ + gsDPSetTileSize(tile, \ + (hilite)->h.x1 & 0xFFF, \ + (hilite)->h.y1 & 0xFFF, \ + ((((width) - 1) * 4) + (hilite)->h.x1) & 0xFFF, \ + ((((height) - 1) * 4) + (hilite)->h.y1) & 0xFFF) -#define gDPSetHilite2Tile(pkt, tile, hilite, width, height) \ - gDPSetTileSize(pkt, tile, (hilite)->h.x2 & 0xfff, (hilite)->h.y2 & 0xfff, \ - ((((width)-1)*4)+(hilite)->h.x2) & 0xfff, ((((height)-1)*4)+(hilite)->h.y2) & 0xfff) -#define gsDPSetHilite2Tile(tile, hilite, width, height) \ - gsDPSetTileSize(tile, (hilite)->h.x2 & 0xfff, (hilite)->h.y2 & 0xfff, \ - ((((width)-1)*4)+(hilite)->h.x2) & 0xfff, ((((height)-1)*4)+(hilite)->h.y2) & 0xfff) +#define gDPSetHilite2Tile(pkt, tile, hilite, width, height) \ + gDPSetTileSize(pkt, tile, \ + (hilite)->h.x2 & 0xFFF, \ + (hilite)->h.y2 & 0xFFF, \ + ((((width) - 1) * 4) + (hilite)->h.x2) & 0xFFF, \ + ((((height) - 1) * 4) + (hilite)->h.y2) & 0xFFF) +#define gsDPSetHilite2Tile(tile, hilite, width, height) \ + gsDPSetTileSize(tile, \ + (hilite)->h.x2 & 0xFFF, \ + (hilite)->h.y2 & 0xFFF, \ + ((((width) - 1) * 4) + (hilite)->h.x2) & 0xFFF, \ + ((((height) - 1) * 4) + (hilite)->h.y2) & 0xFFF) /* * FOG macros @@ -2615,101 +3116,128 @@ _DW({ \ * max is where fog is thickest (usually 1000) * */ -#define gSPFogFactor(pkt, fm, fo) \ - gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \ - (_SHIFTL(fm,16,16) | _SHIFTL(fo,0,16))) +#define gSPFogFactor(pkt, fm, fo) \ + gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL(fm, 16, 16) | _SHIFTL(fo, 0, 16))) -#define gsSPFogFactor(fm, fo) \ - gsMoveWd(G_MW_FOG, G_MWO_FOG, \ - (_SHIFTL(fm,16,16) | _SHIFTL(fo,0,16))) +#define gsSPFogFactor(fm, fo) \ + gsMoveWd(G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL(fm, 16, 16) | _SHIFTL(fo, 0, 16))) -#define gSPFogPosition(pkt, min, max) \ - gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \ - (_SHIFTL((128000/((max)-(min))),16,16) | \ - _SHIFTL(((500-(min))*256/((max)-(min))),0,16))) +#define gSPFogPosition(pkt, min, max) \ + gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL((128000 / ((max) - (min))), 16, 16) | \ + _SHIFTL(((500 - (min)) * 256 / ((max) - (min))), 0, 16))) -#define gsSPFogPosition(min, max) \ - gsMoveWd(G_MW_FOG, G_MWO_FOG, \ - (_SHIFTL((128000/((max)-(min))),16,16) | \ - _SHIFTL(((500-(min))*256/((max)-(min))),0,16))) +#define gsSPFogPosition(min, max) \ + gsMoveWd(G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL((128000 / ((max) - (min))), 16, 16) | \ + _SHIFTL(((500 - (min)) * 256 / ((max) - (min))), 0, 16))) #ifdef F3DEX_GBI_2 /* * Macros to turn texture on/off */ -# define gSPTexture(pkt, s, t, level, tile, on) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8) | \ - _SHIFTL(BOWTIE_VAL,16,8) | \ - _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | \ - _SHIFTL((on),1,7)); \ - _g->words.w1 = (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)); \ +# define gSPTexture(pkt, s, t, level, tile, on) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE, 24, 8) | \ + _SHIFTL(BOWTIE_VAL, 16, 8) | \ + _SHIFTL((level), 11, 3) | \ + _SHIFTL((tile), 8, 3) | \ + _SHIFTL((on), 1, 7)); \ + _g->words.w1 = (_SHIFTL((s), 16, 16) | \ + _SHIFTL((t), 0, 16)); \ }) -# define gsSPTexture(s, t, level, tile, on) \ -{ \ - (_SHIFTL(G_TEXTURE,24,8) | _SHIFTL(BOWTIE_VAL,16,8) | \ - _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\ - (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \ +# define gsSPTexture(s, t, level, tile, on) \ +{ \ + (_SHIFTL(G_TEXTURE, 24, 8) | \ + _SHIFTL(BOWTIE_VAL, 16, 8) | \ + _SHIFTL((level), 11, 3) | \ + _SHIFTL((tile), 8, 3) | \ + _SHIFTL((on), 1, 7)), \ + (_SHIFTL((s), 16, 16) | \ + _SHIFTL((t), 0, 16)) \ } + /* * Different version of SPTexture macro, has an additional parameter * which is currently reserved in the microcode. */ -# define gSPTextureL(pkt, s, t, level, xparam, tile, on) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8) | \ - _SHIFTL((xparam),16,8) | \ - _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | \ - _SHIFTL((on),1,7)); \ - _g->words.w1 = (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)); \ +# define gSPTextureL(pkt, s, t, level, xparam, tile, on) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE, 24, 8) | \ + _SHIFTL((xparam), 16, 8) | \ + _SHIFTL((level), 11, 3) | \ + _SHIFTL((tile), 8, 3) | \ + _SHIFTL((on), 1, 7)); \ + _g->words.w1 = (_SHIFTL((s), 16, 16) | \ + _SHIFTL((t), 0, 16)); \ }) -# define gsSPTextureL(s, t, level, xparam, tile, on) \ -{ \ - (_SHIFTL(G_TEXTURE,24,8) | _SHIFTL((xparam),16,8) | \ - _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\ - (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \ +# define gsSPTextureL(s, t, level, xparam, tile, on) \ +{ \ + (_SHIFTL(G_TEXTURE, 24, 8) | \ + _SHIFTL((xparam), 16, 8) | \ + _SHIFTL((level), 11, 3) | \ + _SHIFTL((tile), 8, 3) | \ + _SHIFTL((on), 1, 7)), \ + (_SHIFTL((s), 16, 16) | \ + _SHIFTL((t), 0, 16)) \ } #else /* * Macros to turn texture on/off */ -# define gSPTexture(pkt, s, t, level, tile, on) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL(BOWTIE_VAL,16,8)|\ - _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)| \ - _SHIFTL((on),0,8)); \ - _g->words.w1 = (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)); \ -} -# define gsSPTexture(s, t, level, tile, on) \ -{ \ - (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL(BOWTIE_VAL,16,8)| \ - _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \ - (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \ +# define gSPTexture(pkt, s, t, level, tile, on) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE, 24, 8) | \ + _SHIFTL(BOWTIE_VAL, 16, 8) | \ + _SHIFTL((level), 11, 3) | \ + _SHIFTL((tile), 8, 3) | \ + _SHIFTL((on), 0, 8)); \ + _g->words.w1 = (_SHIFTL((s), 16, 16) | \ + _SHIFTL((t), 0, 16)); \ +}) +# define gsSPTexture(s, t, level, tile, on) \ +{ \ + (_SHIFTL(G_TEXTURE, 24, 8) | \ + _SHIFTL(BOWTIE_VAL, 16, 8) | \ + _SHIFTL((level), 11, 3) | \ + _SHIFTL((tile), 8, 3) | \ + _SHIFTL((on), 0, 8)), \ + (_SHIFTL((s), 16, 16) | \ + _SHIFTL((t), 0, 16)) \ } /* * Different version of SPTexture macro, has an additional parameter * which is currently reserved in the microcode. */ -# define gSPTextureL(pkt, s, t, level, xparam, tile, on) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL((xparam),16,8)| \ - _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)| \ - _SHIFTL((on),0,8)); \ - _g->words.w1 = (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)); \ -} -# define gsSPTextureL(s, t, level, xparam, tile, on) \ -{ \ - (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL((xparam),16,8)| \ - _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \ - (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \ +# define gSPTextureL(pkt, s, t, level, xparam, tile, on) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE, 24, 8) | \ + _SHIFTL((xparam), 16, 8) | \ + _SHIFTL((level), 11, 3) | \ + _SHIFTL((tile), 8, 3) | \ + _SHIFTL((on), 0, 8)); \ + _g->words.w1 = (_SHIFTL((s), 16, 16) | \ + _SHIFTL((t), 0, 16)); \ +}) +# define gsSPTextureL(s, t, level, xparam, tile, on) \ +{ \ + (_SHIFTL(G_TEXTURE,24, 8) | \ + _SHIFTL((xparam), 16, 8) | \ + _SHIFTL((level), 11, 3) | \ + _SHIFTL((tile), 8, 3) | \ + _SHIFTL((on), 0, 8)), \ + (_SHIFTL((s), 16, 16) | \ + _SHIFTL((t), 0, 16)) \ } #endif @@ -2717,29 +3245,30 @@ _DW({ \ #define gsSPPerspNormalize(s) gsMoveWd( G_MW_PERSPNORM, 0, (s)) #ifdef F3DEX_GBI_2 -# define gSPPopMatrixN(pkt, n, num) gDma2p((pkt),G_POPMTX,(num)*64,64,2,0) -# define gsSPPopMatrixN(n, num) gsDma2p( G_POPMTX,(num)*64,64,2,0) +# define gSPPopMatrixN(pkt, n, num) gDma2p((pkt), G_POPMTX, (num) * 64, 64, 2, 0) +# define gsSPPopMatrixN(n, num) gsDma2p( G_POPMTX, (num) * 64, 64, 2, 0) # define gSPPopMatrix(pkt, n) gSPPopMatrixN((pkt), (n), 1) -# define gsSPPopMatrix(n) gsSPPopMatrixN( (n), 1) +# define gsSPPopMatrix(n) gsSPPopMatrixN( (n), 1) #else /* F3DEX_GBI_2 */ -# define gSPPopMatrix(pkt, n) gImmp1(pkt, G_POPMTX, n) +# define gSPPopMatrix(pkt, n) gImmp1(pkt, G_POPMTX, n) # define gsSPPopMatrix(n) gsImmp1( G_POPMTX, n) #endif /* F3DEX_GBI_2 */ -#define gSPEndDisplayList(pkt) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_ENDDL, 24, 8); \ +#define gSPEndDisplayList(pkt) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_ENDDL, 24, 8); \ _g->words.w1 = 0; \ }) -#define gsSPEndDisplayList() \ -{ \ - _SHIFTL(G_ENDDL, 24, 8), 0 \ +#define gsSPEndDisplayList() \ +{ \ + _SHIFTL(G_ENDDL, 24, 8), \ + 0 \ } -#ifdef F3DEX_GBI_2 +#ifdef F3DEX_GBI_2 /* * One gSPGeometryMode(pkt,c,s) GBI is equal to these two GBIs. * @@ -2748,79 +3277,93 @@ _DW({ \ * * gSPLoadGeometryMode(pkt, word) sets GeometryMode directly. */ -#define gSPGeometryMode(pkt, c, s) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24);\ - _g->words.w1 = (u32)(s); \ +#define gSPGeometryMode(pkt, c, s) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_GEOMETRYMODE, 24, 8) | \ + _SHIFTL(~(u32)(c), 0, 24)); \ + _g->words.w1 = (u32)(s); \ }) -#define gsSPGeometryMode(c, s) \ -{ \ - (_SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24)),(u32)(s) \ +#define gsSPGeometryMode(c, s) \ +{ \ + (_SHIFTL(G_GEOMETRYMODE, 24, 8) | \ + _SHIFTL(~(u32)(c), 0, 24)), \ + (u32)(s) \ } -#define gSPSetGeometryMode(pkt, word) gSPGeometryMode((pkt),0,(word)) -#define gsSPSetGeometryMode(word) gsSPGeometryMode(0,(word)) -#define gSPClearGeometryMode(pkt, word) gSPGeometryMode((pkt),(word),0) -#define gsSPClearGeometryMode(word) gsSPGeometryMode((word),0) -#define gSPLoadGeometryMode(pkt, word) gSPGeometryMode((pkt),-1,(word)) -#define gsSPLoadGeometryMode(word) gsSPGeometryMode(-1,(word)) + +#define gSPSetGeometryMode(pkt, word) gSPGeometryMode((pkt), 0, (word)) +#define gsSPSetGeometryMode(word) gsSPGeometryMode( 0, (word)) +#define gSPClearGeometryMode(pkt, word) gSPGeometryMode((pkt), (word), 0) +#define gsSPClearGeometryMode(word) gsSPGeometryMode( (word), 0) +#define gSPLoadGeometryMode(pkt, word) gSPGeometryMode((pkt), -1, (word)) +#define gsSPLoadGeometryMode(word) gsSPGeometryMode( -1, (word)) #else /* F3DEX_GBI_2 */ #define gSPSetGeometryMode(pkt, word) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_SETGEOMETRYMODE, 24, 8); \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETGEOMETRYMODE, 24, 8); \ _g->words.w1 = (unsigned int)(word); \ -} +}) -#define gsSPSetGeometryMode(word) \ -{ \ - _SHIFTL(G_SETGEOMETRYMODE, 24, 8), (unsigned int)(word) \ +#define gsSPSetGeometryMode(word) \ +{ \ + _SHIFTL(G_SETGEOMETRYMODE, 24, 8), \ + (unsigned int)(word) \ } #define gSPClearGeometryMode(pkt, word) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8); \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8); \ _g->words.w1 = (unsigned int)(word); \ -} +}) -#define gsSPClearGeometryMode(word) \ -{ \ - _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8), (unsigned int)(word) \ +#define gsSPClearGeometryMode(word) \ +{ \ + _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8), \ + (unsigned int)(word) \ } #endif /* F3DEX_GBI_2 */ #ifdef F3DEX_GBI_2 #define gSPSetOtherMode(pkt, cmd, sft, len, data) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = (_SHIFTL(cmd,24,8)|_SHIFTL(32-(sft)-(len),8,8)| \ - _SHIFTL((len)-1,0,8)); \ - _g->words.w1 = (unsigned int)(data); \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(cmd, 24, 8) | \ + _SHIFTL(32 - (sft)- ( len), 8, 8)| \ + _SHIFTL((len) - 1, 0, 8)); \ + _g->words.w1 = (unsigned int)(data); \ }) -#define gsSPSetOtherMode(cmd, sft, len, data) \ -{ \ - _SHIFTL(cmd,24,8)|_SHIFTL(32-(sft)-(len),8,8)|_SHIFTL((len)-1,0,8), \ +#define gsSPSetOtherMode(cmd, sft, len, data) \ +{ \ + (_SHIFTL(cmd, 24, 8) | \ + _SHIFTL(32 - (sft) - (len), 8, 8) | \ + _SHIFTL((len) - 1, 0, 8)), \ (unsigned int)(data) \ } #else -#define gSPSetOtherMode(pkt, cmd, sft, len, data) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(cmd, 24, 8) | _SHIFTL(sft, 8, 8) | \ - _SHIFTL(len, 0, 8)); \ - _g->words.w1 = (unsigned int)(data); \ -} +#define gSPSetOtherMode(pkt, cmd, sft, len, data) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(cmd, 24, 8) | \ + _SHIFTL(sft, 8, 8) | \ + _SHIFTL(len, 0, 8)); \ + _g->words.w1 = (unsigned int)(data); \ +}) -#define gsSPSetOtherMode(cmd, sft, len, data) \ -{ \ - _SHIFTL(cmd, 24, 8) | _SHIFTL(sft, 8, 8) | _SHIFTL(len, 0, 8), \ +#define gsSPSetOtherMode(cmd, sft, len, data) \ +{ \ + (_SHIFTL(cmd, 24, 8) | \ + _SHIFTL(sft, 8, 8) | \ + _SHIFTL(len, 0, 8)), \ (unsigned int)(data) \ } #endif @@ -2831,189 +3374,197 @@ _DW({ \ #define gDPPipelineMode(pkt, mode) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode) #define gsDPPipelineMode(mode) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode) #define gDPSetCycleType(pkt, type) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type) #define gsDPSetCycleType(type) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type) #define gDPSetTexturePersp(pkt, type) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type) #define gsDPSetTexturePersp(type) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type) #define gDPSetTextureDetail(pkt, type) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type) #define gsDPSetTextureDetail(type) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type) #define gDPSetTextureLOD(pkt, type) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type) #define gsDPSetTextureLOD(type) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type) #define gDPSetTextureLUT(pkt, type) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type) #define gsDPSetTextureLUT(type) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type) #define gDPSetTextureFilter(pkt, type) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type) #define gsDPSetTextureFilter(type) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type) #define gDPSetTextureConvert(pkt, type) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type) #define gsDPSetTextureConvert(type) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type) #define gDPSetCombineKey(pkt, type) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type) #define gsDPSetCombineKey(type) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type) #ifndef _HW_VERSION_1 #define gDPSetColorDither(pkt, mode) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode) #define gsDPSetColorDither(mode) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode) #else #define gDPSetColorDither(pkt, mode) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COLORDITHER, 1, mode) #define gsDPSetColorDither(mode) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_COLORDITHER, 1, mode) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_COLORDITHER, 1, mode) #endif #ifndef _HW_VERSION_1 #define gDPSetAlphaDither(pkt, mode) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode) #define gsDPSetAlphaDither(mode) \ - gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode) + gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode) #endif /* 'blendmask' is not supported anymore. * The bits are reserved for future use. * Fri May 26 13:45:55 PDT 1995 */ -#define gDPSetBlendMask(pkt, mask) gDPNoOp(pkt) +#define gDPSetBlendMask(pkt, mask) gDPNoOp(pkt) #define gsDPSetBlendMask(mask) gsDPNoOp() #define gDPSetAlphaCompare(pkt, type) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type) #define gsDPSetAlphaCompare(type) \ - gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type) + gsSPSetOtherMode( G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type) #define gDPSetDepthSource(pkt, src) \ gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src) #define gsDPSetDepthSource(src) \ - gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src) + gsSPSetOtherMode( G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src) #define gDPSetRenderMode(pkt, c0, c1) \ - gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, \ - (c0) | (c1)) + gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, (c0) | (c1)) #define gsDPSetRenderMode(c0, c1) \ - gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, \ - (c0) | (c1)) + gsSPSetOtherMode( G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, (c0) | (c1)) -#define gSetImage(pkt, cmd, fmt, siz, width, i) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \ - _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12); \ +#define gSetImage(pkt, cmd, fmt, siz, width, i) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(cmd, 24, 8) | \ + _SHIFTL(fmt, 21, 3) | \ + _SHIFTL(siz, 19, 2) | \ + _SHIFTL((width) - 1, 0, 12)); \ _g->words.w1 = (unsigned int)(i); \ }) -#define gsSetImage(cmd, fmt, siz, width, i) \ -{ \ - _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \ - _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12), \ +#define gsSetImage(cmd, fmt, siz, width, i) \ +{ \ + (_SHIFTL(cmd, 24, 8) | \ + _SHIFTL(fmt, 21, 3) | \ + _SHIFTL(siz, 19, 2) | \ + _SHIFTL((width) - 1, 0, 12)), \ (unsigned int)(i) \ } #define gDPSetColorImage(pkt, f, s, w, i) gSetImage(pkt, G_SETCIMG, f, s, w, i) -#define gsDPSetColorImage(f, s, w, i) gsSetImage(G_SETCIMG, f, s, w, i) +#define gsDPSetColorImage(f, s, w, i) gsSetImage( G_SETCIMG, f, s, w, i) /* use these for new code */ #define gDPSetDepthImage(pkt, i) gSetImage(pkt, G_SETZIMG, 0, 0, 1, i) -#define gsDPSetDepthImage(i) gsSetImage(G_SETZIMG, 0, 0, 1, i) +#define gsDPSetDepthImage(i) gsSetImage( G_SETZIMG, 0, 0, 1, i) /* kept for compatibility */ #define gDPSetMaskImage(pkt, i) gDPSetDepthImage(pkt, i) -#define gsDPSetMaskImage(i) gsDPSetDepthImage(i) +#define gsDPSetMaskImage(i) gsDPSetDepthImage( i) #define gDPSetTextureImage(pkt, f, s, w, i) gSetImage(pkt, G_SETTIMG, f, s, w, i) -#define gsDPSetTextureImage(f, s, w, i) gsSetImage(G_SETTIMG, f, s, w, i) +#define gsDPSetTextureImage(f, s, w, i) gsSetImage( G_SETTIMG, f, s, w, i) /* * RDP macros */ -#define gDPSetCombine(pkt, muxs0, muxs1) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) | _SHIFTL(muxs0, 0, 24);\ - _g->words.w1 = (unsigned int)(muxs1); \ +#define gDPSetCombine(pkt, muxs0, muxs1) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETCOMBINE, 24, 8) | \ + _SHIFTL(muxs0, 0, 24)); \ + _g->words.w1 = (unsigned int)(muxs1); \ }) -#define gsDPSetCombine(muxs0, muxs1) \ -{ \ - _SHIFTL(G_SETCOMBINE, 24, 8) | _SHIFTL(muxs0, 0, 24), \ - (unsigned int)(muxs1) \ +#define gsDPSetCombine(muxs0, muxs1) \ +{ \ + (_SHIFTL(G_SETCOMBINE, 24, 8) | \ + _SHIFTL(muxs0, 0, 24)), \ + (unsigned int)(muxs1) \ } -#define GCCc0w0(saRGB0, mRGB0, saA0, mA0) \ - (_SHIFTL((saRGB0), 20, 4) | _SHIFTL((mRGB0), 15, 5) | \ - _SHIFTL((saA0), 12, 3) | _SHIFTL((mA0), 9, 3)) +#define GCCc0w0(saRGB0, mRGB0, saA0, mA0) \ + (_SHIFTL((saRGB0), 20, 4) | \ + _SHIFTL((mRGB0), 15, 5) | \ + _SHIFTL((saA0), 12, 3) | \ + _SHIFTL((mA0), 9, 3)) -#define GCCc1w0(saRGB1, mRGB1) \ - (_SHIFTL((saRGB1), 5, 4) | _SHIFTL((mRGB1), 0, 5)) +#define GCCc1w0(saRGB1, mRGB1) \ + (_SHIFTL((saRGB1), 5, 4) | \ + _SHIFTL((mRGB1), 0, 5)) -#define GCCc0w1(sbRGB0, aRGB0, sbA0, aA0) \ - (_SHIFTL((sbRGB0), 28, 4) | _SHIFTL((aRGB0), 15, 3) | \ - _SHIFTL((sbA0), 12, 3) | _SHIFTL((aA0), 9, 3)) +#define GCCc0w1(sbRGB0, aRGB0, sbA0, aA0) \ + (_SHIFTL((sbRGB0), 28, 4) | \ + _SHIFTL((aRGB0), 15, 3) | \ + _SHIFTL((sbA0), 12, 3) | \ + _SHIFTL((aA0), 9, 3)) -#define GCCc1w1(sbRGB1, saA1, mA1, aRGB1, sbA1, aA1) \ - (_SHIFTL((sbRGB1), 24, 4) | _SHIFTL((saA1), 21, 3) | \ - _SHIFTL((mA1), 18, 3) | _SHIFTL((aRGB1), 6, 3) | \ - _SHIFTL((sbA1), 3, 3) | _SHIFTL((aA1), 0, 3)) +#define GCCc1w1(sbRGB1, saA1, mA1, aRGB1, sbA1, aA1) \ + (_SHIFTL((sbRGB1), 24, 4) | \ + _SHIFTL((saA1), 21, 3) | \ + _SHIFTL((mA1), 18, 3) | \ + _SHIFTL((aRGB1), 6, 3) | \ + _SHIFTL((sbA1), 3, 3) | \ + _SHIFTL((aA1), 0, 3)) -#define gDPSetCombineLERP(pkt, a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \ - a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) | \ - _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \ - G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \ - GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), \ - 0, 24); \ - _g->words.w1 = (unsigned int)(GCCc0w1(G_CCMUX_##b0, \ - G_CCMUX_##d0, \ - G_ACMUX_##Ab0, \ - G_ACMUX_##Ad0) | \ - GCCc1w1(G_CCMUX_##b1, \ - G_ACMUX_##Aa1, \ - G_ACMUX_##Ac1, \ - G_CCMUX_##d1, \ - G_ACMUX_##Ab1, \ - G_ACMUX_##Ad1)); \ +#define gDPSetCombineLERP(pkt, a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \ + a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETCOMBINE, 24, 8) | \ + _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \ + G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \ + GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), \ + 0, 24)); \ + _g->words.w1 = (unsigned int)(GCCc0w1(G_CCMUX_##b0, G_CCMUX_##d0, \ + G_ACMUX_##Ab0, G_ACMUX_##Ad0) | \ + GCCc1w1(G_CCMUX_##b1, G_ACMUX_##Aa1, \ + G_ACMUX_##Ac1, G_CCMUX_##d1, \ + G_ACMUX_##Ab1, G_ACMUX_##Ad1)); \ }) -#define gsDPSetCombineLERP(a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \ - a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \ -{ \ - _SHIFTL(G_SETCOMBINE, 24, 8) | \ - _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \ - G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \ - GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), 0, 24), \ - (unsigned int)(GCCc0w1(G_CCMUX_##b0, G_CCMUX_##d0, \ - G_ACMUX_##Ab0, G_ACMUX_##Ad0) | \ - GCCc1w1(G_CCMUX_##b1, G_ACMUX_##Aa1, \ - G_ACMUX_##Ac1, G_CCMUX_##d1, \ - G_ACMUX_##Ab1, G_ACMUX_##Ad1)) \ +#define gsDPSetCombineLERP(a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \ + a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \ +{ \ + (_SHIFTL(G_SETCOMBINE, 24, 8) | \ + _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \ + G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \ + GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), \ + 0, 24)), \ + (unsigned int)(GCCc0w1(G_CCMUX_##b0, G_CCMUX_##d0, \ + G_ACMUX_##Ab0, G_ACMUX_##Ad0) | \ + GCCc1w1(G_CCMUX_##b1, G_ACMUX_##Aa1, \ + G_ACMUX_##Ac1, G_CCMUX_##d1, \ + G_ACMUX_##Ab1, G_ACMUX_##Ad1)) \ } /* @@ -3027,70 +3578,90 @@ _DW({ \ */ #define gDPSetCombineMode(pkt, a, b) gDPSetCombineLERP(pkt, a, b) -#define gsDPSetCombineMode(a, b) gsDPSetCombineLERP(a, b) +#define gsDPSetCombineMode(a, b) gsDPSetCombineLERP( a, b) -#define gDPSetColor(pkt, c, d) \ +#define gDPSetColor(pkt, c, d) \ _DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(c, 24, 8); \ - _g->words.w1 = (unsigned int)(d); \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(c, 24, 8); \ + _g->words.w1 = (unsigned int)(d); \ }) -#define gsDPSetColor(c, d) \ -{ \ - _SHIFTL(c, 24, 8), (unsigned int)(d) \ +#define gsDPSetColor(c, d) \ +{ \ + _SHIFTL(c, 24, 8), \ + (unsigned int)(d) \ } -#define DPRGBColor(pkt, cmd, r, g, b, a) \ - gDPSetColor(pkt, cmd, \ - (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \ - _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8))) -#define sDPRGBColor(cmd, r, g, b, a) \ - gsDPSetColor(cmd, \ - (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \ - _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8))) +#define DPRGBColor(pkt, cmd, r, g, b, a) \ + gDPSetColor(pkt, cmd, \ + (_SHIFTL(r, 24, 8) | \ + _SHIFTL(g, 16, 8) | \ + _SHIFTL(b, 8, 8) | \ + _SHIFTL(a, 0, 8))) -#define gDPSetEnvColor(pkt, r, g, b, a) \ - DPRGBColor(pkt, G_SETENVCOLOR, r,g,b,a) -#define gsDPSetEnvColor(r, g, b, a) \ - sDPRGBColor(G_SETENVCOLOR, r,g,b,a) -#define gDPSetBlendColor(pkt, r, g, b, a) \ - DPRGBColor(pkt, G_SETBLENDCOLOR, r,g,b,a) -#define gsDPSetBlendColor(r, g, b, a) \ - sDPRGBColor(G_SETBLENDCOLOR, r,g,b,a) -#define gDPSetFogColor(pkt, r, g, b, a) \ - DPRGBColor(pkt, G_SETFOGCOLOR, r,g,b,a) -#define gsDPSetFogColor(r, g, b, a) \ - sDPRGBColor(G_SETFOGCOLOR, r,g,b,a) -#define gDPSetFillColor(pkt, d) \ +#define sDPRGBColor(cmd, r, g, b, a) \ + gsDPSetColor(cmd, \ + (_SHIFTL(r, 24, 8) | \ + _SHIFTL(g, 16, 8) | \ + _SHIFTL(b, 8, 8) | \ + _SHIFTL(a, 0, 8))) + +#define gDPSetEnvColor(pkt, r, g, b, a) \ + DPRGBColor(pkt, G_SETENVCOLOR, r, g, b, a) + +#define gsDPSetEnvColor(r, g, b, a) \ + sDPRGBColor( G_SETENVCOLOR, r, g, b, a) + +#define gDPSetBlendColor(pkt, r, g, b, a) \ + DPRGBColor(pkt, G_SETBLENDCOLOR, r, g, b, a) + +#define gsDPSetBlendColor(r, g, b, a) \ + sDPRGBColor( G_SETBLENDCOLOR, r, g, b, a) + +#define gDPSetFogColor(pkt, r, g, b, a) \ + DPRGBColor(pkt, G_SETFOGCOLOR, r, g, b, a) + +#define gsDPSetFogColor(r, g, b, a) \ + sDPRGBColor( G_SETFOGCOLOR, r, g, b, a) + +#define gDPSetFillColor(pkt, d) \ gDPSetColor(pkt, G_SETFILLCOLOR, (d)) -#define gsDPSetFillColor(d) \ - gsDPSetColor(G_SETFILLCOLOR, (d)) -#define gDPSetPrimDepth(pkt, z, dz) \ - gDPSetColor(pkt, G_SETPRIMDEPTH, \ - _SHIFTL(z, 16, 16) | _SHIFTL(dz, 0, 16)) -#define gsDPSetPrimDepth(z, dz) \ - gsDPSetColor(G_SETPRIMDEPTH, _SHIFTL(z, 16, 16) | \ - _SHIFTL(dz, 0, 16)) +#define gsDPSetFillColor(d) \ + gsDPSetColor( G_SETFILLCOLOR, (d)) -#define gDPSetPrimColor(pkt, m, l, r, g, b, a) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \ - _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8)); \ - _g->words.w1 = (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \ - _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8)); \ +#define gDPSetPrimDepth(pkt, z, dz) \ + gDPSetColor(pkt, G_SETPRIMDEPTH, \ + _SHIFTL(z, 16, 16) | _SHIFTL(dz, 0, 16)) + +#define gsDPSetPrimDepth(z, dz) \ + gsDPSetColor(G_SETPRIMDEPTH, \ + _SHIFTL(z, 16, 16) | _SHIFTL(dz, 0, 16)) + +#define gDPSetPrimColor(pkt, m, l, r, g, b, a) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \ + _SHIFTL(m, 8, 8) | \ + _SHIFTL(l, 0, 8)); \ + _g->words.w1 = (_SHIFTL(r, 24, 8) | \ + _SHIFTL(g, 16, 8) | \ + _SHIFTL(b, 8, 8) | \ + _SHIFTL(a, 0, 8)); \ }) -#define gsDPSetPrimColor(m, l, r, g, b, a) \ -{ \ - (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | _SHIFTL(m, 8, 8) | \ - _SHIFTL(l, 0, 8)), \ - (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | _SHIFTL(b, 8, 8) | \ - _SHIFTL(a, 0, 8)) \ +#define gsDPSetPrimColor(m, l, r, g, b, a) \ +{ \ + (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \ + _SHIFTL(m, 8, 8) | \ + _SHIFTL(l, 0, 8)), \ + (_SHIFTL(r, 24, 8) | \ + _SHIFTL(g, 16, 8) | \ + _SHIFTL(b, 8, 8) | \ + _SHIFTL(a, 0, 8)) \ } /* @@ -3122,17 +3693,19 @@ _DW({ \ * modeB = G_AC_* | G_ZS_* | G_RM_* | G_RM_*2; */ #define gDPSetOtherMode(pkt, mode0, mode1) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_RDPSETOTHERMODE,24,8)|_SHIFTL(mode0,0,24);\ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_RDPSETOTHERMODE, 24, 8) | \ + _SHIFTL(mode0, 0, 24)); \ _g->words.w1 = (unsigned int)(mode1); \ }) -#define gsDPSetOtherMode(mode0, mode1) \ -{ \ - _SHIFTL(G_RDPSETOTHERMODE,24,8)|_SHIFTL(mode0,0,24), \ - (unsigned int)(mode1) \ +#define gsDPSetOtherMode(mode0, mode1) \ +{ \ + (_SHIFTL(G_RDPSETOTHERMODE, 24, 8) | \ + _SHIFTL(mode0, 0, 24)), \ + (unsigned int)(mode1) \ } /* @@ -3144,21 +3717,21 @@ _DW({ \ #define G_TX_LOADTILE 7 #define G_TX_RENDERTILE 0 -#define G_TX_NOMIRROR 0 -#define G_TX_WRAP 0 -#define G_TX_MIRROR 0x1 -#define G_TX_CLAMP 0x2 -#define G_TX_NOMASK 0 -#define G_TX_NOLOD 0 - +#define G_TX_NOMIRROR (0 << 0) +#define G_TX_WRAP (0 << 1) +#define G_TX_MIRROR (1 << 0) +#define G_TX_CLAMP (1 << 1) +#define G_TX_NOMASK 0 +#define G_TX_NOLOD 0 #ifndef MAX -#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) #endif #ifndef MIN -#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif + /* * Dxt is the inverse of the number of 64-bit words in a line of * the texture being loaded using the load_block command. If @@ -3185,64 +3758,85 @@ _DW({ \ #define G_TX_LDBLK_MAX_TXL 2047 #endif /* _HW_VERSION_1 */ -#define TXL2WORDS(txls, b_txl) MAX(1, ((txls)*(b_txl)/8)) +#define TXL2WORDS(txls, b_txl) \ + MAX(1, ((txls) * (b_txl) / 8)) + #define CALC_DXT(width, b_txl) \ - (((1 << G_TX_DXT_FRAC) + TXL2WORDS(width, b_txl) - 1) / \ - TXL2WORDS(width, b_txl)) + (((1 << G_TX_DXT_FRAC) + TXL2WORDS(width, b_txl) - 1) / TXL2WORDS(width, b_txl)) + +#define TXL2WORDS_4b(txls) \ + MAX(1, ((txls) / 16)) -#define TXL2WORDS_4b(txls) MAX(1, ((txls)/16)) #define CALC_DXT_4b(width) \ - (((1 << G_TX_DXT_FRAC) + TXL2WORDS_4b(width) - 1) / \ - TXL2WORDS_4b(width)) + (((1 << G_TX_DXT_FRAC) + TXL2WORDS_4b(width) - 1) / TXL2WORDS_4b(width)) -#define gDPLoadTileGeneric(pkt, c, tile, uls, ult, lrs, lrt) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(c, 24, 8) | _SHIFTL(uls, 12, 12) | \ - _SHIFTL(ult, 0, 12); \ - _g->words.w1 = _SHIFTL(tile, 24, 3) | _SHIFTL(lrs, 12, 12) | \ - _SHIFTL(lrt, 0, 12); \ +#define gDPLoadTileGeneric(pkt, c, tile, uls, ult, lrs, lrt) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(c, 24, 8) | \ + _SHIFTL(uls, 12, 12) | \ + _SHIFTL(ult, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(lrs, 12, 12) | \ + _SHIFTL(lrt, 0, 12)); \ }) -#define gsDPLoadTileGeneric(c, tile, uls, ult, lrs, lrt) \ -{ \ - _SHIFTL(c, 24, 8) | _SHIFTL(uls, 12, 12) | _SHIFTL(ult, 0, 12), \ - _SHIFTL(tile, 24, 3) | _SHIFTL(lrs, 12, 12) | _SHIFTL(lrt, 0, 12)\ +#define gsDPLoadTileGeneric(c, tile, uls, ult, lrs, lrt) \ +{ \ + (_SHIFTL(c, 24, 8) | \ + _SHIFTL(uls, 12, 12) | \ + _SHIFTL(ult, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(lrs, 12, 12) | \ + _SHIFTL(lrt, 0, 12)) \ } -#define gDPSetTileSize(pkt, t, uls, ult, lrs, lrt) \ +#define gDPSetTileSize(pkt, t, uls, ult, lrs, lrt) \ gDPLoadTileGeneric(pkt, G_SETTILESIZE, t, uls, ult, lrs, lrt) -#define gsDPSetTileSize(t, uls, ult, lrs, lrt) \ - gsDPLoadTileGeneric(G_SETTILESIZE, t, uls, ult, lrs, lrt) -#define gDPLoadTile(pkt, t, uls, ult, lrs, lrt) \ +#define gsDPSetTileSize(t, uls, ult, lrs, lrt) \ + gsDPLoadTileGeneric( G_SETTILESIZE, t, uls, ult, lrs, lrt) +#define gDPLoadTile(pkt, t, uls, ult, lrs, lrt) \ gDPLoadTileGeneric(pkt, G_LOADTILE, t, uls, ult, lrs, lrt) -#define gsDPLoadTile(t, uls, ult, lrs, lrt) \ - gsDPLoadTileGeneric(G_LOADTILE, t, uls, ult, lrs, lrt) +#define gsDPLoadTile(t, uls, ult, lrs, lrt) \ + gsDPLoadTileGeneric( G_LOADTILE, t, uls, ult, lrs, lrt) #define gDPSetTile(pkt, fmt, siz, line, tmem, tile, palette, cmt, \ - maskt, shiftt, cms, masks, shifts) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_SETTILE, 24, 8) | _SHIFTL(fmt, 21, 3) |\ - _SHIFTL(siz, 19, 2) | _SHIFTL(line, 9, 9) | \ - _SHIFTL(tmem, 0, 9); \ - _g->words.w1 = _SHIFTL(tile, 24, 3) | _SHIFTL(palette, 20, 4) | \ - _SHIFTL(cmt, 18, 2) | _SHIFTL(maskt, 14, 4) | \ - _SHIFTL(shiftt, 10, 4) |_SHIFTL(cms, 8, 2) | \ - _SHIFTL(masks, 4, 4) | _SHIFTL(shifts, 0, 4); \ + maskt, shiftt, cms, masks, shifts) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETTILE, 24, 8) | \ + _SHIFTL(fmt, 21, 3) | \ + _SHIFTL(siz, 19, 2) | \ + _SHIFTL(line, 9, 9) | \ + _SHIFTL(tmem, 0, 9)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(palette, 20, 4) | \ + _SHIFTL(cmt, 18, 2) | \ + _SHIFTL(maskt, 14, 4) | \ + _SHIFTL(shiftt, 10, 4) | \ + _SHIFTL(cms, 8, 2) | \ + _SHIFTL(masks, 4, 4) | \ + _SHIFTL(shifts, 0, 4)); \ }) -#define gsDPSetTile(fmt, siz, line, tmem, tile, palette, cmt, \ - maskt, shiftt, cms, masks, shifts) \ -{ \ - (_SHIFTL(G_SETTILE, 24, 8) | _SHIFTL(fmt, 21, 3) | \ - _SHIFTL(siz, 19, 2) | _SHIFTL(line, 9, 9) | _SHIFTL(tmem, 0, 9)),\ - (_SHIFTL(tile, 24, 3) | _SHIFTL(palette, 20, 4) | \ - _SHIFTL(cmt, 18, 2) | _SHIFTL(maskt, 14, 4) | \ - _SHIFTL(shiftt, 10, 4) | _SHIFTL(cms, 8, 2) | \ - _SHIFTL(masks, 4, 4) | _SHIFTL(shifts, 0, 4)) \ +#define gsDPSetTile(fmt, siz, line, tmem, tile, palette, cmt, \ + maskt, shiftt, cms, masks, shifts) \ +{ \ + (_SHIFTL(G_SETTILE, 24, 8) | \ + _SHIFTL(fmt, 21, 3) | \ + _SHIFTL(siz, 19, 2) | \ + _SHIFTL(line, 9, 9) | \ + _SHIFTL(tmem, 0, 9)), \ + (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(palette, 20, 4) | \ + _SHIFTL(cmt, 18, 2) | \ + _SHIFTL(maskt, 14, 4) | \ + _SHIFTL(shiftt, 10, 4) | \ + _SHIFTL(cms, 8, 2) | \ + _SHIFTL(masks, 4, 4) | \ + _SHIFTL(shifts, 0, 4)) \ } /* @@ -3255,319 +3849,313 @@ _DW({ \ * the g*DPLoadBlock macros directly, you will need to handle this * tile manipulation yourself. RJM. */ -#define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_LOADBLOCK, 24, 8) | \ - _SHIFTL(uls, 12, 12) | _SHIFTL(ult, 0, 12)); \ - _g->words.w1 = (_SHIFTL(tile, 24, 3) | \ - _SHIFTL((MIN(lrs,G_TX_LDBLK_MAX_TXL)), 12, 12) |\ - _SHIFTL(dxt, 0, 12)); \ +#define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_LOADBLOCK, 24, 8) | \ + _SHIFTL(uls, 12, 12) | \ + _SHIFTL(ult, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(MIN(lrs, G_TX_LDBLK_MAX_TXL), 12, 12) | \ + _SHIFTL(dxt, 0, 12)); \ }) -#define gsDPLoadBlock(tile, uls, ult, lrs, dxt) \ -{ \ - (_SHIFTL(G_LOADBLOCK, 24, 8) | _SHIFTL(uls, 12, 12) | \ - _SHIFTL(ult, 0, 12)), \ - (_SHIFTL(tile, 24, 3) | \ - _SHIFTL((MIN(lrs,G_TX_LDBLK_MAX_TXL)), 12, 12) | \ - _SHIFTL(dxt, 0, 12)) \ +#define gsDPLoadBlock(tile, uls, ult, lrs, dxt) \ +{ \ + (_SHIFTL(G_LOADBLOCK, 24, 8) | \ + _SHIFTL(uls, 12, 12) | \ + _SHIFTL(ult, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | \ + _SHIFTL((MIN(lrs, G_TX_LDBLK_MAX_TXL)), 12, 12) | \ + _SHIFTL(dxt, 0, 12)) \ } -#define gDPLoadTLUTCmd(pkt, tile, count) \ -_DW({ \ +#define gDPLoadTLUTCmd(pkt, tile, count) \ +_DW({ \ Gfx *_g = (Gfx *)pkt; \ - \ - _g->words.w0 = _SHIFTL(G_LOADTLUT, 24, 8); \ - _g->words.w1 = _SHIFTL((tile), 24, 3) | _SHIFTL((count), 14, 10);\ + \ + _g->words.w0 = _SHIFTL(G_LOADTLUT, 24, 8); \ + _g->words.w1 = (_SHIFTL((tile), 24, 3) | \ + _SHIFTL((count), 14, 10)); \ }) -#define gsDPLoadTLUTCmd(tile, count) \ -{ \ - _SHIFTL(G_LOADTLUT, 24, 8), \ - _SHIFTL((tile), 24, 3) | _SHIFTL((count), 14, 10) \ +#define gsDPLoadTLUTCmd(tile, count) \ +{ \ + _SHIFTL(G_LOADTLUT, 24, 8), \ + (_SHIFTL((tile), 24, 3) | \ + _SHIFTL((count), 14, 10)) \ } -#define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ - gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ - 0 , cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT) -1, \ - CALC_DXT(width, siz##_BYTES)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, siz, \ - (((width) * siz##_LINE_BYTES)+7)>>3, 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) -1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES) + 7) >> 3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) -#define gDPLoadTextureBlockYuv(pkt, timg, fmt, siz, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ - gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ - 0 , cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT) -1, \ - CALC_DXT(width, siz##_BYTES)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, siz, \ - (((width) * 1)+7)>>3, 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define gDPLoadTextureBlockYuv(pkt, timg, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) -1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * 1) + 7) >> 3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) /* Load fix rww 27jun95 */ /* The S at the end means odd lines are already word Swapped */ -#define gDPLoadTextureBlockS(pkt, timg, fmt, siz, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ - gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ - 0 , cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, siz, \ - (((width) * siz##_LINE_BYTES)+7)>>3, 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define gDPLoadTextureBlockS(pkt, timg, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, 0); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES) + 7) >> 3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) /* * Allow tmem address and render tile to be specified. * The S at the end means odd lines are already word Swapped */ -#define gDPLoadMultiBlockS(pkt, timg, tmem, rtile, fmt, siz, width, \ - height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ - gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ - 0 , cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, siz, \ - (((width) * siz##_LINE_BYTES)+7)>>3, tmem, \ - rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, rtile, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define gDPLoadMultiBlockS(pkt, timg, tmem, rtile, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,0); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) -#define gDPLoadTextureBlockYuvS(pkt, timg, fmt, siz, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ - gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ - 0 , cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, siz, \ - (((width) * 1)+7)>>3, 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define gDPLoadTextureBlockYuvS(pkt, timg, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,0); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * 1) + 7) >> 3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) /* * allows tmem address to be specified */ -#define _gDPLoadTextureBlock(pkt, timg, tmem, fmt, siz, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ - gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ - 0, cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ - CALC_DXT(width, siz##_BYTES)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \ - tmem, G_TX_RENDERTILE, pal, cmt, \ - maskt, shiftt, cms, masks, shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define _gDPLoadTextureBlock(pkt, timg, tmem, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) /* * allows tmem address and render tile to be specified */ -#define _gDPLoadTextureBlockTile(pkt, timg, tmem, rtile, fmt, siz, width, \ - height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ - gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0,\ - cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ - CALC_DXT(width, siz##_BYTES)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \ - tmem, rtile, pal, cmt, \ - maskt, shiftt, cms, masks, shifts); \ - gDPSetTileSize(pkt, rtile, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define _gDPLoadTextureBlockTile(pkt, timg, tmem, rtile, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) /* * allows tmem address and render tile to be specified */ -#define gDPLoadMultiBlock(pkt, timg, tmem, rtile, fmt, siz, width, \ - height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ - gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0,\ - cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ - CALC_DXT(width, siz##_BYTES)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \ - tmem, rtile, pal, cmt, \ - maskt, shiftt, cms, masks, shifts); \ - gDPSetTileSize(pkt, rtile, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define gDPLoadMultiBlock(pkt, timg, tmem, rtile, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) -#define gsDPLoadTextureBlock(timg, fmt, siz, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ - gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, \ - G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \ - masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ - CALC_DXT(width, siz##_BYTES)), \ - gsDPPipeSync(), \ - gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) +#define gsDPLoadTextureBlock(timg, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT) - 1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES) + 7) >> 3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC) /* Here is the static form of the pre-swapped texture block loading */ /* See gDPLoadTextureBlockS() for reference. Basically, just don't calculate DxT, use 0 */ -#define gsDPLoadTextureBlockS(timg, fmt, siz, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ - gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, 0 , \ - cmt, maskt,shiftt, cms, masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, 0 ),\ - gsDPPipeSync(), \ - gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) +#define gsDPLoadTextureBlockS(timg, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0, cmt, maskt,shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, 0 ), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES) + 7) >> 3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC) /* * Allow tmem address to be specified */ -#define _gsDPLoadTextureBlock(timg, tmem, fmt, siz, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ - gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ - 0 , cmt, maskt, shiftt, cms, masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ - CALC_DXT(width, siz##_BYTES)), \ - gsDPPipeSync(), \ - gsDPSetTile(fmt, siz, \ - ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) +#define _gsDPLoadTextureBlock(timg, tmem, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC) /* * Allow tmem address and render_tile to be specified */ -#define _gsDPLoadTextureBlockTile(timg, tmem, rtile, fmt, siz, width, \ - height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ - gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ - 0 , cmt, maskt, shiftt, cms, masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ - CALC_DXT(width, siz##_BYTES)), \ - gsDPPipeSync(), \ - gsDPSetTile(fmt, siz, \ - ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \ - rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(rtile, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) +#define _gsDPLoadTextureBlockTile(timg, tmem, rtile, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC) /* * Allow tmem address and render_tile to be specified, useful when loading * mutilple tiles at a time. */ -#define gsDPLoadMultiBlock(timg, tmem, rtile, fmt, siz, width, \ - height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ - gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ - 0 , cmt, maskt, shiftt, cms, masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ - CALC_DXT(width, siz##_BYTES)), \ - gsDPPipeSync(), \ - gsDPSetTile(fmt, siz, \ - ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \ - rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(rtile, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) +#define gsDPLoadMultiBlock(timg, tmem, rtile, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC) /* * Allows tmem and render tile to be specified. Useful when loading @@ -3578,180 +4166,182 @@ _DW({ \ * calculate DxT, use 0 */ -#define gsDPLoadMultiBlockS(timg, tmem, rtile, fmt, siz, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ - gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0 , \ - cmt, maskt,shiftt, cms, masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ - (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, 0 ),\ - gsDPPipeSync(), \ - gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), tmem,\ - rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(rtile, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) +#define gsDPLoadMultiBlockS(timg, tmem, rtile, fmt, siz, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt,shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, 0), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC) -#define gDPLoadTextureBlock_4b(pkt, timg, fmt, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, \ - cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height)+3)>>2)-1, \ - CALC_DXT_4b(width)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define gDPLoadTextureBlock_4b(pkt, timg, fmt, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + 3) >> 2) - 1, \ + CALC_DXT_4b(width)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ + ((((width) >> 1) + 7) >> 3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) /* Load fix rww 27jun95 */ /* The S at the end means odd lines are already word Swapped */ -#define gDPLoadTextureBlock_4bS(pkt, timg, fmt, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, \ - cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height)+3)>>2)-1, 0 ); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define gDPLoadTextureBlock_4bS(pkt, timg, fmt, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + 3) >> 2) - 1, \ + 0); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ + ((((width) >> 1) + 7) >> 3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) /* * 4-bit load block. Useful when loading multiple tiles */ -#define gDPLoadMultiBlock_4b(pkt, timg, tmem, rtile, fmt, width, height,\ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \ - cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height)+3)>>2)-1, \ - CALC_DXT_4b(width)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ - rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, rtile, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define gDPLoadMultiBlock_4b(pkt, timg, tmem, rtile, fmt, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + 3) >> 2) - 1, \ + CALC_DXT_4b(width)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ + ((((width) >> 1) + 7) >> 3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) /* * 4-bit load block. Allows tmem and render tile to be specified. Useful when * loading multiple tiles. The S means odd lines are already word swapped. */ -#define gDPLoadMultiBlock_4bS(pkt, timg, tmem, rtile, fmt, width, height,\ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \ - cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height)+3)>>2)-1, 0 ); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ - rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, rtile, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define gDPLoadMultiBlock_4bS(pkt, timg, tmem, rtile, fmt, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + 3) >> 2) - 1, \ + 0); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ + ((((width) >> 1) + 7) >> 3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) -#define _gDPLoadTextureBlock_4b(pkt, timg, tmem, fmt, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \ - cmt, maskt, shiftt, cms, masks, shifts); \ - gDPLoadSync(pkt); \ - gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ - (((width)*(height)+3)>>2)-1, \ - CALC_DXT_4b(width)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +#define _gDPLoadTextureBlock_4b(pkt, timg, tmem, fmt, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + 3) >> 2) - 1, \ + CALC_DXT_4b(width)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ + ((((width) >> 1) + 7) >> 3), tmem, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \ }) -#define gsDPLoadTextureBlock_4b(timg, fmt, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ - gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0 , cmt, \ - maskt, shiftt, cms, masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \ - CALC_DXT_4b(width)), \ - gsDPPipeSync(), \ - gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) +#define gsDPLoadTextureBlock_4b(timg, fmt, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + 3) >> 2) - 1, \ + CALC_DXT_4b(width)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, \ + ((((width) >> 1) + 7) >> 3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC) -#define gsDPLoadTextureBlock_4bS(timg, fmt, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ - gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0 , cmt, \ - maskt, shiftt, cms, masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1,0),\ - gsDPPipeSync(), \ - gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) +#define gsDPLoadTextureBlock_4bS(timg, fmt, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + 3) >> 2) - 1, \ + 0), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, \ + ((((width) >> 1) + 7) >> 3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC) /* * 4-bit load block. Allows tmem address and render tile to be specified. * Useful when loading multiple tiles. */ -#define gsDPLoadMultiBlock_4b(timg, tmem, rtile, fmt, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ - gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \ - maskt, shiftt, cms, masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \ - CALC_DXT_4b(width)), \ - gsDPPipeSync(), \ - gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ - rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(rtile, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ +#define gsDPLoadMultiBlock_4b(timg, tmem, rtile, fmt, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + 3) >> 2) - 1, \ + CALC_DXT_4b(width)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, \ + ((((width) >> 1) + 7) >> 3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ ((height)-1) << G_TEXTURE_IMAGE_FRAC) @@ -3759,88 +4349,88 @@ _DW({ \ * 4-bit load block. Allows tmem address and render tile to be specified. * Useful when loading multiple tiles. S means odd lines are already swapped. */ -#define gsDPLoadMultiBlock_4bS(timg, tmem, rtile, fmt, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ - gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \ - maskt, shiftt, cms, masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1,0),\ - gsDPPipeSync(), \ - gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ - rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(rtile, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) +#define gsDPLoadMultiBlock_4bS(timg, tmem, rtile, fmt, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + 3) >> 2) - 1, \ + 0), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, \ + ((((width) >> 1) + 7) >> 3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC) /* * Allows tmem address to be specified */ -#define _gsDPLoadTextureBlock_4b(timg, tmem, fmt, width, height, \ - pal, cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ - gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \ - maskt, shiftt, cms, masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \ - CALC_DXT_4b(width)), \ - gsDPPipeSync(), \ - gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ - ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) +#define _gsDPLoadTextureBlock_4b(timg, tmem, fmt, width, height, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width) * (height) + 3) >> 2) - 1, \ + CALC_DXT_4b(width)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, \ + ((((width) >> 1) + 7) >> 3), tmem, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \ + ((height) - 1) << G_TEXTURE_IMAGE_FRAC) #ifndef _HW_VERSION_1 -#define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \ - uls, ult, lrs, lrt, pal, \ - cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, siz, width, timg); \ - gDPSetTile(pkt, fmt, siz, \ - (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), 0, \ - G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPLoadSync(pkt); \ - gDPLoadTile( pkt, G_TX_LOADTILE, \ - (uls)<>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, \ - (uls)<> 3), 0, \ + G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile(pkt, G_TX_LOADTILE, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC); \ }) #else /******** WORKAROUND hw 1 load tile bug ********/ -#define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \ - uls, ult, lrs, lrt, pal, \ - cms, cmt, masks, maskt, shifts, shiftt) \ - \ -{ \ - int _loadtile_i, _loadtile_nw; Gfx *_loadtile_temp = pkt; \ - guDPLoadTextureTile(_loadtile_temp, timg, fmt, siz, \ - width, height, \ - uls, ult, lrs, lrt, pal, \ - cms, cmt, masks, maskt, shifts, shiftt); \ - _loadtile_nw = guGetDPLoadTextureTileSz(ult, lrt) - 1; \ - for(_loadtile_i = 0; _loadtile_i < _loadtile_nw; _loadtile_i++) \ - pkt; \ -} +#define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \ + uls, ult, lrs, lrt, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +_DW({ \ + int _loadtile_i, _loadtile_nw; \ + Gfx *_loadtile_temp = pkt; \ + \ + guDPLoadTextureTile(_loadtile_temp, timg, fmt, siz, width, height, \ + uls, ult, lrs, lrt, pal, \ + cms, cmt, masks, maskt, shifts, shiftt); \ + _loadtile_nw = guGetDPLoadTextureTileSz(ult, lrt) - 1; \ + for(_loadtile_i = 0; _loadtile_i < _loadtile_nw; _loadtile_i++) \ + pkt; \ +}) #endif /* HW_VERSION_1 */ @@ -3848,199 +4438,186 @@ _DW({ \ * Load texture tile. Allows tmem address and render tile to be specified. * Useful for loading multiple tiles. */ -#define gDPLoadMultiTile(pkt, timg, tmem, rtile, fmt, siz, width, height,\ - uls, ult, lrs, lrt, pal, \ - cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, siz, width, timg); \ - gDPSetTile(pkt, fmt, siz, \ - (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), tmem, \ - G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPLoadSync(pkt); \ - gDPLoadTile( pkt, G_TX_LOADTILE, \ - (uls)<>3), tmem, \ - rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, rtile, \ - (uls)<> 3), tmem, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile(pkt, G_TX_LOADTILE, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, rtile, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC); \ }) -#define gsDPLoadTextureTile(timg, fmt, siz, width, height, \ - uls, ult, lrs, lrt, pal, \ - cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, siz, width, timg), \ - gsDPSetTile(fmt, siz, \ - (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), 0, \ - G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPLoadSync(), \ - gsDPLoadTile( G_TX_LOADTILE, \ - (uls)<>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks,\ - shifts), \ - gsDPSetTileSize(G_TX_RENDERTILE, \ - (uls)<> 3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC) /* * Load texture tile. Allows tmem address and render tile to be specified. * Useful for loading multiple tiles. */ #define gsDPLoadMultiTile(timg, tmem, rtile, fmt, siz, width, height, \ - uls, ult, lrs, lrt, pal, \ - cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, siz, width, timg), \ - gsDPSetTile(fmt, siz, \ - (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), \ - tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \ - masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadTile( G_TX_LOADTILE, \ - (uls)<>3), \ - tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(rtile, \ - (uls)<> 3), tmem, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile(G_TX_LOADTILE, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), \ + tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(rtile, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC) -#define gDPLoadTextureTile_4b(pkt, timg, fmt, width, height, \ - uls, ult, lrs, lrt, pal, \ - cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, G_IM_SIZ_8b, ((width)>>1), timg); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \ - (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ - G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPLoadSync(pkt); \ - gDPLoadTile( pkt, G_TX_LOADTILE, \ - (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ - (ult)<<(G_TEXTURE_IMAGE_FRAC), \ - (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ - (lrt)<<(G_TEXTURE_IMAGE_FRAC)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ - (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, \ - masks, shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, \ - (uls)<> 1), timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \ + (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile(pkt, G_TX_LOADTILE, \ + (uls) << (G_TEXTURE_IMAGE_FRAC - 1), \ + (ult) << (G_TEXTURE_IMAGE_FRAC), \ + (lrs) << (G_TEXTURE_IMAGE_FRAC - 1), \ + (lrt) << (G_TEXTURE_IMAGE_FRAC)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ + (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC); \ }) /* * Load texture tile. Allows tmem address and render tile to be specified. * Useful for loading multiple tiles. */ -#define gDPLoadMultiTile_4b(pkt, timg, tmem, rtile, fmt, width, height, \ - uls, ult, lrs, lrt, pal, \ - cms, cmt, masks, maskt, shifts, shiftt) \ -_DW({ \ - gDPSetTextureImage(pkt, fmt, G_IM_SIZ_8b, ((width)>>1), timg); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \ - (((((lrs)-(uls)+1)>>1)+7)>>3), tmem, \ - G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPLoadSync(pkt); \ - gDPLoadTile( pkt, G_TX_LOADTILE, \ - (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ - (ult)<<(G_TEXTURE_IMAGE_FRAC), \ - (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ - (lrt)<<(G_TEXTURE_IMAGE_FRAC)); \ - gDPPipeSync(pkt); \ - gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ - (((((lrs)-(uls)+1)>>1)+7)>>3), tmem, \ - rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, rtile, \ - (uls)<> 1), timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \ + (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile(pkt, G_TX_LOADTILE, \ + (uls) << (G_TEXTURE_IMAGE_FRAC - 1), \ + (ult) << (G_TEXTURE_IMAGE_FRAC), \ + (lrs) << (G_TEXTURE_IMAGE_FRAC - 1), \ + (lrt) << (G_TEXTURE_IMAGE_FRAC)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ + (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, rtile, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC); \ }) -#define gsDPLoadTextureTile_4b(timg, fmt, width, height, \ - uls, ult, lrs, lrt, pal, \ - cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, G_IM_SIZ_8b, ((width)>>1), timg), \ - gsDPSetTile(fmt, G_IM_SIZ_8b, (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ - G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPLoadSync(), \ - gsDPLoadTile( G_TX_LOADTILE, \ - (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ - (ult)<<(G_TEXTURE_IMAGE_FRAC), \ - (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ - (lrt)<<(G_TEXTURE_IMAGE_FRAC)), \ - gsDPPipeSync(), \ - gsDPSetTile(fmt, G_IM_SIZ_4b, (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(G_TX_RENDERTILE, \ - (uls)<> 1), timg), \ + gsDPSetTile(fmt, G_IM_SIZ_8b, \ + (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile(G_TX_LOADTILE, \ + (uls) << (G_TEXTURE_IMAGE_FRAC - 1), \ + (ult) << (G_TEXTURE_IMAGE_FRAC), \ + (lrs) << (G_TEXTURE_IMAGE_FRAC - 1), \ + (lrt) << (G_TEXTURE_IMAGE_FRAC)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, \ + (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC) /* * Load texture tile. Allows tmem address and render tile to be specified. * Useful for loading multiple tiles. */ -#define gsDPLoadMultiTile_4b(timg, tmem, rtile, fmt, width, height, \ - uls, ult, lrs, lrt, pal, \ - cms, cmt, masks, maskt, shifts, shiftt) \ - \ - gsDPSetTextureImage(fmt, G_IM_SIZ_8b, ((width)>>1), timg), \ - gsDPSetTile(fmt, G_IM_SIZ_8b, (((((lrs)-(uls)+1)>>1)+7)>>3), \ - tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \ - masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadTile( G_TX_LOADTILE, \ - (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ - (ult)<<(G_TEXTURE_IMAGE_FRAC), \ - (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ - (lrt)<<(G_TEXTURE_IMAGE_FRAC)), \ - gsDPPipeSync(), \ - gsDPSetTile(fmt, G_IM_SIZ_4b, (((((lrs)-(uls)+1)>>1)+7)>>3), \ - tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(rtile, \ - (uls)<> 1), timg), \ + gsDPSetTile(fmt, G_IM_SIZ_8b, \ + (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem, \ + G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls) << (G_TEXTURE_IMAGE_FRAC - 1), \ + (ult) << (G_TEXTURE_IMAGE_FRAC), \ + (lrs) << (G_TEXTURE_IMAGE_FRAC - 1), \ + (lrt) << (G_TEXTURE_IMAGE_FRAC)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, \ + (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPSetTileSize(rtile, \ + (uls) << G_TEXTURE_IMAGE_FRAC, \ + (ult) << G_TEXTURE_IMAGE_FRAC, \ + (lrs) << G_TEXTURE_IMAGE_FRAC, \ + (lrt) << G_TEXTURE_IMAGE_FRAC) /* * Load a 16-entry palette (for 4-bit CI textures) @@ -4048,24 +4625,23 @@ _DW({ \ */ #ifndef _HW_VERSION_1 -#define gDPLoadTLUT_pal16(pkt, pal, dram) \ -_DW({ \ +#define gDPLoadTLUT_pal16(pkt, pal, dram) \ +_DW({ \ gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \ - gDPTileSync(pkt); \ - gDPSetTile(pkt, 0, 0, 0, (256+(((pal)&0xf)*16)), \ - G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0); \ - gDPLoadSync(pkt); \ - gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, 15); \ - gDPPipeSync(pkt); \ + gDPTileSync(pkt); \ + gDPSetTile(pkt, 0, 0, 0, (256 + (((pal) & 0xF) * 16)), \ + G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0); \ + gDPLoadSync(pkt); \ + gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, 15); \ + gDPPipeSync(pkt); \ }) #else /* **** WORKAROUND hardware 1 load_tlut bug ****** */ -#define gDPLoadTLUT_pal16(pkt, pal, dram) \ - \ - _gDPLoadTextureBlock(pkt, dram, (256+(((pal)&0xf)*16)), \ - G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*16, 1, \ - pal, 0, 0, 0, 0, 0, 0) +#define gDPLoadTLUT_pal16(pkt, pal, dram) \ + _gDPLoadTextureBlock(pkt, dram, (256 + (((pal) & 0xF) * 16)), \ + G_IM_FMT_RGBA, G_IM_SIZ_16b, 4 * 16, 1, \ + pal, 0, 0, 0, 0, 0, 0) #endif /* _HW_VERSION_1 */ @@ -4076,23 +4652,21 @@ _DW({ \ */ #ifndef _HW_VERSION_1 -#define gsDPLoadTLUT_pal16(pal, dram) \ - \ +#define gsDPLoadTLUT_pal16(pal, dram) \ gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \ - gsDPTileSync(), \ - gsDPSetTile(0, 0, 0, (256+(((pal)&0xf)*16)), \ - G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0), \ - gsDPLoadSync(), \ - gsDPLoadTLUTCmd(G_TX_LOADTILE, 15), \ + gsDPTileSync(), \ + gsDPSetTile(0, 0, 0, (256 + (((pal) & 0xF) * 16)), \ + G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0), \ + gsDPLoadSync(), \ + gsDPLoadTLUTCmd(G_TX_LOADTILE, 15), \ gsDPPipeSync() #else /* **** WORKAROUND hardware 1 load_tlut bug ****** */ -#define gsDPLoadTLUT_pal16(pal, dram) \ - \ - _gsDPLoadTextureBlock(dram, (256+(((pal)&0xf)*16)), \ - G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*16, 1, \ - pal, 0, 0, 0, 0, 0, 0) +#define gsDPLoadTLUT_pal16(pal, dram) \ + _gsDPLoadTextureBlock(dram, (256 + (((pal) & 0xF) * 16)), \ + G_IM_FMT_RGBA, G_IM_SIZ_16b, 4 * 16, 1, \ + pal, 0, 0, 0, 0, 0, 0) #endif /* _HW_VERSION_1 */ @@ -4102,24 +4676,23 @@ _DW({ \ */ #ifndef _HW_VERSION_1 -#define gDPLoadTLUT_pal256(pkt, dram) \ -_DW({ \ - gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \ - gDPTileSync(pkt); \ - gDPSetTile(pkt, 0, 0, 0, 256, \ - G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0); \ - gDPLoadSync(pkt); \ - gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, 255); \ - gDPPipeSync(pkt); \ +#define gDPLoadTLUT_pal256(pkt, dram) \ +_DW({ \ + gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \ + gDPTileSync(pkt); \ + gDPSetTile(pkt, 0, 0, 0, 256, \ + G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0); \ + gDPLoadSync(pkt); \ + gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, 255); \ + gDPPipeSync(pkt); \ }) #else /* **** WORKAROUND hardware 1 load_tlut bug ****** */ #define gDPLoadTLUT_pal256(pkt, dram) \ - \ - _gDPLoadTextureBlock(pkt, dram, 256, \ - G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*256, 1, \ - 0, 0, 0, 0, 0, 0, 0) + _gDPLoadTextureBlock(pkt, dram, 256, \ + G_IM_FMT_RGBA, G_IM_SIZ_16b, 4 * 256, 1, \ + 0, 0, 0, 0, 0, 0, 0) #endif /* _HW_VERSION_1 */ @@ -4127,222 +4700,240 @@ _DW({ \ #ifndef _HW_VERSION_1 -#define gsDPLoadTLUT_pal256(dram) \ - \ +#define gsDPLoadTLUT_pal256(dram) \ gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \ - gsDPTileSync(), \ - gsDPSetTile(0, 0, 0, 256, \ - G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0), \ - gsDPLoadSync(), \ - gsDPLoadTLUTCmd(G_TX_LOADTILE, 255), \ + gsDPTileSync(), \ + gsDPSetTile(0, 0, 0, 256, \ + G_TX_LOADTILE, 0, 0, 0, 0, 0, 0, 0), \ + gsDPLoadSync(), \ + gsDPLoadTLUTCmd(G_TX_LOADTILE, 255), \ gsDPPipeSync() #else /* **** WORKAROUND hardware 1 load_tlut bug ****** */ -#define gsDPLoadTLUT_pal256(dram) \ - \ +#define gsDPLoadTLUT_pal256(dram) \ _gsDPLoadTextureBlock(dram, 256, \ - G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*256, 1, \ - 0, 0, 0, 0, 0, 0, 0) + G_IM_FMT_RGBA, G_IM_SIZ_16b, 4 * 256, 1, \ + 0, 0, 0, 0, 0, 0, 0) #endif /* _HW_VERSION_1 */ #ifndef _HW_VERSION_1 -#define gDPLoadTLUT(pkt, count, tmemaddr, dram) \ -_DW({ \ +#define gDPLoadTLUT(pkt, count, tmemaddr, dram) \ +_DW({ \ gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \ - gDPTileSync(pkt); \ - gDPSetTile(pkt, 0, 0, 0, tmemaddr, \ - G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0); \ - gDPLoadSync(pkt); \ - gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, ((count)-1)); \ - gDPPipeSync(pkt); \ + gDPTileSync(pkt); \ + gDPSetTile(pkt, 0, 0, 0, tmemaddr, \ + G_TX_LOADTILE, 0, 0, 0, 0, 0, 0, 0); \ + gDPLoadSync(pkt); \ + gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, ((count) - 1)); \ + gDPPipeSync(pkt); \ }) #else /* **** WORKAROUND hardware 1 load_tlut bug ****** */ -#define gDPLoadTLUT(pkt, count, tmemaddr, dram) \ - \ - _gDPLoadTextureBlock(pkt, dram, tmemaddr, \ - G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, count, \ - 0, 0, 0, 0, 0, 0, 0) +#define gDPLoadTLUT(pkt, count, tmemaddr, dram) \ + _gDPLoadTextureBlock(pkt, dram, tmemaddr, \ + G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, count, \ + 0, 0, 0, 0, 0, 0, 0) #endif /* _HW_VERSION_1 */ #ifndef _HW_VERSION_1 -#define gsDPLoadTLUT(count, tmemaddr, dram) \ - \ +#define gsDPLoadTLUT(count, tmemaddr, dram) \ gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \ - gsDPTileSync(), \ - gsDPSetTile(0, 0, 0, tmemaddr, \ - G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0), \ - gsDPLoadSync(), \ - gsDPLoadTLUTCmd(G_TX_LOADTILE, ((count)-1)), \ + gsDPTileSync(), \ + gsDPSetTile(0, 0, 0, tmemaddr, \ + G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0), \ + gsDPLoadSync(), \ + gsDPLoadTLUTCmd(G_TX_LOADTILE, ((count) - 1)), \ gsDPPipeSync() #else /* **** WORKAROUND hardware 1 load_tlut bug ****** */ + #define gsDPLoadTLUT(count, tmemaddr, dram) \ - \ _gsDPLoadTextureBlock(dram, tmemaddr, \ - G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, count, \ - 0, 0, 0, 0, 0, 0, 0) + G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, count, \ + 0, 0, 0, 0, 0, 0, 0) #endif /* _HW_VERSION_1 */ -#define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry) \ -_DW({ \ - Gfx *_g = (Gfx *)pkt; \ - \ - _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \ - _SHIFTL((int)((float)(ulx)*4.0F), 12, 12) | \ - _SHIFTL((int)((float)(uly)*4.0F), 0, 12); \ - _g->words.w1 = _SHIFTL(mode, 24, 2) | \ - _SHIFTL((int)((float)(lrx)*4.0F), 12, 12) | \ - _SHIFTL((int)((float)(lry)*4.0F), 0, 12); \ +#define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry) \ +_DW({ \ + Gfx *_g = (Gfx *)pkt; \ + \ + _g->words.w0 = (_SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((float)(ulx) * 4.0f), 12, 12) | \ + _SHIFTL((int)((float)(uly) * 4.0f), 0, 12)); \ + _g->words.w1 = (_SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)((float)(lrx) * 4.0f), 12, 12) | \ + _SHIFTL((int)((float)(lry) * 4.0f), 0, 12)); \ }) -#define gDPSetScissorFrac(pkt, mode, ulx, uly, lrx, lry) \ -_DW({ \ - Gfx *_g = (Gfx *)pkt; \ - \ - _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \ - _SHIFTL((int)((ulx)), 12, 12) | \ - _SHIFTL((int)((uly)), 0, 12); \ - _g->words.w1 = _SHIFTL(mode, 24, 2) | \ - _SHIFTL((int)((lrx)), 12, 12) | \ - _SHIFTL((int)((lry)), 0, 12); \ +#define gDPSetScissorFrac(pkt, mode, ulx, uly, lrx, lry) \ +_DW({ \ + Gfx *_g = (Gfx *)pkt; \ + \ + _g->words.w0 = (_SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((ulx)), 12, 12) | \ + _SHIFTL((int)((uly)), 0, 12)); \ + _g->words.w1 = (_SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)((lrx)), 12, 12) | \ + _SHIFTL((int)((lry)), 0, 12)); \ }) -#define gsDPSetScissor(mode, ulx, uly, lrx, lry) \ -{ \ - _SHIFTL(G_SETSCISSOR, 24, 8) | \ - _SHIFTL((int)((float)(ulx)*4.0F), 12, 12) | \ - _SHIFTL((int)((float)(uly)*4.0F), 0, 12), \ - _SHIFTL(mode, 24, 2) | \ - _SHIFTL((int)((float)(lrx)*4.0F), 12, 12) | \ - _SHIFTL((int)((float)(lry)*4.0F), 0, 12) \ +#define gsDPSetScissor(mode, ulx, uly, lrx, lry) \ +{ \ + (_SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((float)(ulx) * 4.0f), 12, 12) | \ + _SHIFTL((int)((float)(uly) * 4.0f), 0, 12)), \ + (_SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)((float)(lrx) * 4.0f), 12, 12) | \ + _SHIFTL((int)((float)(lry) * 4.0f), 0, 12)) \ } -#define gsDPSetScissorFrac(mode, ulx, uly, lrx, lry) \ -{ \ - _SHIFTL(G_SETSCISSOR, 24, 8) | \ - _SHIFTL((int)((ulx)), 12, 12) | \ - _SHIFTL((int)((uly)), 0, 12), \ - _SHIFTL(mode, 24, 2) | \ - _SHIFTL((int)(lrx), 12, 12) | \ - _SHIFTL((int)(lry), 0, 12) \ +#define gsDPSetScissorFrac(mode, ulx, uly, lrx, lry) \ +{ \ + (_SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((ulx)), 12, 12) | \ + _SHIFTL((int)((uly)), 0, 12)), \ + (_SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)(lrx), 12, 12) | \ + _SHIFTL((int)(lry), 0, 12)) \ } /* Fraction never used in fill */ -#define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \ - _SHIFTL((lrx), 14, 10) | _SHIFTL((lry), 2, 10));\ - _g->words.w1 = (_SHIFTL((ulx), 14, 10) | _SHIFTL((uly), 2, 10));\ +#define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \ + _SHIFTL((lrx), 14, 10) | \ + _SHIFTL((lry), 2, 10)); \ + _g->words.w1 = (_SHIFTL((ulx), 14, 10) | \ + _SHIFTL((uly), 2, 10)); \ }) -#define gsDPFillRectangle(ulx, uly, lrx, lry) \ -{ \ - (_SHIFTL(G_FILLRECT, 24, 8) | _SHIFTL((lrx), 14, 10) | \ - _SHIFTL((lry), 2, 10)), \ - (_SHIFTL((ulx), 14, 10) | _SHIFTL((uly), 2, 10)) \ +#define gsDPFillRectangle(ulx, uly, lrx, lry) \ +{ \ + (_SHIFTL(G_FILLRECT, 24, 8) | \ + _SHIFTL((lrx), 14, 10) | \ + _SHIFTL((lry), 2, 10)), \ + (_SHIFTL((ulx), 14, 10) | \ + _SHIFTL((uly), 2, 10)) \ } /* like gDPFillRectangle but accepts negative arguments */ -#define gDPScisFillRectangle(pkt, ulx, uly, lrx, lry) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \ - _SHIFTL(MAX((lrx),0), 14, 10) | \ - _SHIFTL(MAX((lry),0), 2, 10)); \ - _g->words.w1 = (_SHIFTL(MAX((ulx),0), 14, 10) | \ - _SHIFTL(MAX((uly),0), 2, 10)); \ +#define gDPScisFillRectangle(pkt, ulx, uly, lrx, lry) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \ + _SHIFTL(MAX((lrx), 0), 14, 10) | \ + _SHIFTL(MAX((lry), 0), 2, 10)); \ + _g->words.w1 = (_SHIFTL(MAX((ulx), 0), 14, 10) | \ + _SHIFTL(MAX((uly), 0), 2, 10)); \ }) -#define gDPSetConvert(pkt, k0, k1, k2, k3, k4, k5) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_SETCONVERT, 24, 8) | \ - _SHIFTL(k0, 13, 9) | _SHIFTL(k1, 4, 9) | \ - _SHIFTR(k2, 5, 4)); \ - _g->words.w1 = (_SHIFTL(k2, 27, 5) | _SHIFTL(k3, 18, 9) | \ - _SHIFTL(k4, 9, 9) | _SHIFTL(k5, 0, 9)); \ +#define gDPSetConvert(pkt, k0, k1, k2, k3, k4, k5) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETCONVERT, 24, 8) | \ + _SHIFTL(k0, 13, 9) | \ + _SHIFTL(k1, 4, 9) | \ + _SHIFTR(k2, 5, 4)); \ + _g->words.w1 = (_SHIFTL(k2, 27, 5) | \ + _SHIFTL(k3, 18, 9) | \ + _SHIFTL(k4, 9, 9) | \ + _SHIFTL(k5, 0, 9)); \ }) -#define gsDPSetConvert(k0, k1, k2, k3, k4, k5) \ -{ \ - (_SHIFTL(G_SETCONVERT, 24, 8) | \ - _SHIFTL(k0, 13, 9) | _SHIFTL(k1, 4, 9) | _SHIFTL(k2, 5, 4)), \ - (_SHIFTL(k2, 27, 5) | _SHIFTL(k3, 18, 9) | _SHIFTL(k4, 9, 9) | \ - _SHIFTL(k5, 0, 9)) \ +#define gsDPSetConvert(k0, k1, k2, k3, k4, k5) \ +{ \ + (_SHIFTL(G_SETCONVERT, 24, 8) | \ + _SHIFTL(k0, 13, 9) | \ + _SHIFTL(k1, 4, 9) | \ + _SHIFTL(k2, 5, 4)), \ + (_SHIFTL(k2, 27, 5) | \ + _SHIFTL(k3, 18, 9) | \ + _SHIFTL(k4, 9, 9) | \ + _SHIFTL(k5, 0, 9)) \ } -#define gDPSetKeyR(pkt, cR, sR, wR) \ -_DW({ \ +#define gDPSetKeyR(pkt, cR, sR, wR) \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(G_SETKEYR, 24, 8); \ - _g->words.w1 = (_SHIFTL(wR, 16, 12) | _SHIFTL(cR, 8, 8) | \ - _SHIFTL(sR, 0, 8)); \ + \ + _g->words.w0 = _SHIFTL(G_SETKEYR, 24, 8); \ + _g->words.w1 = (_SHIFTL(wR, 16, 12) | \ + _SHIFTL(cR, 8, 8) | \ + _SHIFTL(sR, 0, 8)); \ }) -#define gsDPSetKeyR(cR, sR, wR) \ -{ \ - _SHIFTL(G_SETKEYR, 24, 8), \ - _SHIFTL(wR, 16, 12) | _SHIFTL(cR, 8, 8) | _SHIFTL(sR, 0, 8) \ +#define gsDPSetKeyR(cR, sR, wR) \ +{ \ + _SHIFTL(G_SETKEYR, 24, 8), \ + (_SHIFTL(wR, 16, 12) | \ + _SHIFTL(cR, 8, 8) | \ + _SHIFTL(sR, 0, 8)) \ } -#define gDPSetKeyGB(pkt, cG, sG, wG, cB, sB, wB) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_SETKEYGB, 24, 8) | \ - _SHIFTL(wG, 12, 12) | _SHIFTL(wB, 0, 12)); \ - _g->words.w1 = (_SHIFTL(cG, 24, 8) | _SHIFTL(sG, 16, 8) | \ - _SHIFTL(cB, 8, 8) | _SHIFTL(sB, 0, 8)); \ +#define gDPSetKeyGB(pkt, cG, sG, wG, cB, sB, wB) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETKEYGB, 24, 8) | \ + _SHIFTL(wG, 12, 12) | \ + _SHIFTL(wB, 0, 12)); \ + _g->words.w1 = (_SHIFTL(cG, 24, 8) | \ + _SHIFTL(sG, 16, 8) | \ + _SHIFTL(cB, 8, 8) | \ + _SHIFTL(sB, 0, 8)); \ }) -#define gsDPSetKeyGB(cG, sG, wG, cB, sB, wB) \ -{ \ - (_SHIFTL(G_SETKEYGB, 24, 8) | _SHIFTL(wG, 12, 12) | \ - _SHIFTL(wB, 0, 12)), \ - (_SHIFTL(cG, 24, 8) | _SHIFTL(sG, 16, 8) | _SHIFTL(cB, 8, 8) | \ - _SHIFTL(sB, 0, 8)) \ +#define gsDPSetKeyGB(cG, sG, wG, cB, sB, wB) \ +{ \ + (_SHIFTL(G_SETKEYGB, 24, 8) | \ + _SHIFTL(wG, 12, 12) | \ + _SHIFTL(wB, 0, 12)), \ + (_SHIFTL(cG, 24, 8) | \ + _SHIFTL(sG, 16, 8) | \ + _SHIFTL(cB, 8, 8) | \ + _SHIFTL(sB, 0, 8)) \ } -#define gDPNoParam(pkt, cmd) \ +#define gDPNoParam(pkt, cmd) \ _DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(cmd, 24, 8); \ - _g->words.w1 = 0; \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(cmd, 24, 8); \ + _g->words.w1 = 0; \ }) -#define gsDPNoParam(cmd) \ -{ \ - _SHIFTL(cmd, 24, 8), 0 \ +#define gsDPNoParam(cmd) \ +{ \ + _SHIFTL(cmd, 24, 8), \ + 0 \ } -#define gDPParam(pkt, cmd, param) \ +#define gDPParam(pkt, cmd, param) \ _DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = _SHIFTL(cmd, 24, 8); \ - _g->words.w1 = (param); \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(cmd, 24, 8); \ + _g->words.w1 = (param); \ }) -#define gsDPParam(cmd, param) \ -{ \ - _SHIFTL(cmd, 24, 8), (param) \ +#define gsDPParam(cmd, param) \ +{ \ + _SHIFTL(cmd, 24, 8), \ + (param) \ } /* Notice that textured rectangles are 128-bit commands, therefore @@ -4351,142 +4942,186 @@ _DW({ \ * That is also why there is no gDPTextureRectangle() macros. */ #define gsDPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ -{ \ - (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ - _SHIFTL(yh, 0, 12)), \ - (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \ -}, \ -{ \ - _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \ - _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \ +{ \ + (_SHIFTL(G_TEXRECT, 24, 8) | \ + _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)), \ +}, \ +{ \ + (_SHIFTL(s, 16, 16) | \ + _SHIFTL(t, 0, 16)), \ + (_SHIFTL(dsdx, 16, 16) | \ + _SHIFTL(dtdy, 0, 16)) \ } -#define gDPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - if (pkt); \ - _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ - _SHIFTL(yh, 0, 12)); \ - _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ - _SHIFTL(yl, 0, 12)); \ - _g ++; \ - _g->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \ - _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \ +#define gDPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + if (pkt); \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \ + _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + _g ++; \ + _g->words.w0 = (_SHIFTL(s, 16, 16) | \ + _SHIFTL(t, 0, 16)); \ + _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | \ + _SHIFTL(dtdy, 0, 16)); \ }) -#define gsDPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ -{ \ - (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ - _SHIFTL(yh, 0, 12)), \ - (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \ -}, \ -{ \ - _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \ - _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \ +#define gsDPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + (_SHIFTL(G_TEXRECTFLIP, 24, 8) | \ + _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)), \ +}, \ +{ \ + (_SHIFTL(s, 16, 16) | \ + _SHIFTL(t, 0, 16)), \ + (_SHIFTL(dsdx, 16, 16) | \ + _SHIFTL(dtdy, 0, 16)) \ } -#define gDPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - if (pkt); \ - _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ - _SHIFTL(yh, 0, 12)); \ - _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ - _SHIFTL(yl, 0, 12)); \ - _g ++; \ - _g->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \ - _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \ +#define gDPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + if (pkt); \ + _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | \ + _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + _g ++; \ + _g->words.w0 = (_SHIFTL(s, 16, 16) | \ + _SHIFTL(t, 0, 16)); \ + _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | \ + _SHIFTL(dtdy, 0, 16)); \ }) #define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ - (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\ - (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \ - gsImmp1(G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \ - gsImmp1(G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))) + (_SHIFTL(G_TEXRECT, 24, 8) | \ + _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)), \ + gsImmp1(G_RDPHALF_1, \ + (_SHIFTL(s, 16, 16) | \ + _SHIFTL(t, 0, 16))), \ + gsImmp1(G_RDPHALF_2, \ + (_SHIFTL(dsdx, 16, 16) | \ + _SHIFTL(dtdy, 0, 16))) -#define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ - _SHIFTL(yh, 0, 12)); \ - _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ - _SHIFTL(yl, 0, 12)); \ - gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \ - gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)));\ +#define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \ + _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + gImmp1(pkt, G_RDPHALF_1, \ + (_SHIFTL(s, 16, 16) | \ + _SHIFTL(t, 0, 16))); \ + gImmp1(pkt, G_RDPHALF_2, \ + (_SHIFTL(dsdx, 16, 16) | \ + _SHIFTL(dtdy, 0, 16))); \ }) /* like gSPTextureRectangle but accepts negative position arguments */ -#define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \ - _SHIFTL(MAX((s16)(xh),0), 12, 12) | \ - _SHIFTL(MAX((s16)(yh),0), 0, 12)); \ - _g->words.w1 = (_SHIFTL((tile), 24, 3) | \ - _SHIFTL(MAX((s16)(xl),0), 12, 12) | \ - _SHIFTL(MAX((s16)(yl),0), 0, 12)); \ - gImmp1(pkt, G_RDPHALF_1, \ - (_SHIFTL(((s) - \ - (((s16)(xl) < 0) ? \ - (((s16)(dsdx) < 0) ? \ - (MAX((((s16)(xl)*(s16)(dsdx))>>7),0)) : \ - (MIN((((s16)(xl)*(s16)(dsdx))>>7),0))) : 0)), \ - 16, 16) | \ - _SHIFTL(((t) - \ - (((yl) < 0) ? \ - (((s16)(dtdy) < 0) ? \ - (MAX((((s16)(yl)*(s16)(dtdy))>>7),0)) : \ - (MIN((((s16)(yl)*(s16)(dtdy))>>7),0))) : 0)), \ - 0, 16))); \ - gImmp1(pkt, G_RDPHALF_2, (_SHIFTL((dsdx), 16, 16) | \ - _SHIFTL((dtdy), 0, 16))); \ +#define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \ + _SHIFTL(MAX((s16)(xh),0), 12, 12) | \ + _SHIFTL(MAX((s16)(yh),0), 0, 12)); \ + _g->words.w1 = (_SHIFTL((tile), 24, 3) | \ + _SHIFTL(MAX((s16)(xl),0), 12, 12) | \ + _SHIFTL(MAX((s16)(yl),0), 0, 12)); \ + gImmp1(pkt, G_RDPHALF_1, \ + (_SHIFTL(((s) - \ + (((s16)(xl) < 0) ? \ + (((s16)(dsdx) < 0) ? \ + (MAX((((s16)(xl) * (s16)(dsdx)) >> 7), 0)) : \ + (MIN((((s16)(xl) * (s16)(dsdx)) >> 7), 0))) : 0)), 16, 16) | \ + _SHIFTL(((t) - \ + (( (yl) < 0) ? \ + (((s16)(dtdy) < 0) ? \ + (MAX((((s16)(yl) * (s16)(dtdy)) >> 7), 0)) : \ + (MIN((((s16)(yl) * (s16)(dtdy)) >> 7), 0))) : 0)), 0, 16))); \ + gImmp1(pkt, G_RDPHALF_2, \ + (_SHIFTL((dsdx), 16, 16) | \ + _SHIFTL((dtdy), 0, 16))); \ }) -#define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ - (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ - _SHIFTL(yh, 0, 12)), \ - (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \ - gsImmp1(G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \ - gsImmp1(G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))) +#define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ + (_SHIFTL(G_TEXRECTFLIP, 24, 8) | \ + _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)), \ + gsImmp1(G_RDPHALF_1, \ + (_SHIFTL(s, 16, 16) | \ + _SHIFTL(t, 0, 16))), \ + gsImmp1(G_RDPHALF_2, \ + (_SHIFTL(dsdx, 16, 16) | \ + _SHIFTL(dtdy, 0, 16))) -#define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) |\ - _SHIFTL(yh, 0, 12)); \ - _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ - _SHIFTL(yl, 0, 12)); \ - gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \ - gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))); \ +#define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | \ + _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | \ + _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + gImmp1(pkt, G_RDPHALF_1, \ + (_SHIFTL(s, 16, 16) | \ + _SHIFTL(t, 0, 16))); \ + gImmp1(pkt, G_RDPHALF_2, \ + (_SHIFTL(dsdx, 16, 16) | \ + _SHIFTL(dtdy, 0, 16))); \ }) -#define gsDPWord(wordhi, wordlo) \ +#define gsDPWord(wordhi, wordlo) \ gsImmp1(G_RDPHALF_1, (unsigned int)(wordhi)), \ gsImmp1(G_RDPHALF_2, (unsigned int)(wordlo)) -#define gDPWord(pkt, wordhi, wordlo) \ -_DW({ \ - Gfx *_g = (Gfx *)(pkt); \ - \ +#define gDPWord(pkt, wordhi, wordlo) \ +_DW({ \ + Gfx *_g = (Gfx *)(pkt); \ + \ gImmp1(pkt, G_RDPHALF_1, (unsigned int)(wordhi)); \ gImmp1(pkt, G_RDPHALF_2, (unsigned int)(wordlo)); \ }) -#define gDPFullSync(pkt) gDPNoParam(pkt, G_RDPFULLSYNC) -#define gsDPFullSync() gsDPNoParam(G_RDPFULLSYNC) -#define gDPTileSync(pkt) gDPNoParam(pkt, G_RDPTILESYNC) -#define gsDPTileSync() gsDPNoParam(G_RDPTILESYNC) -#define gDPPipeSync(pkt) gDPNoParam(pkt, G_RDPPIPESYNC) -#define gsDPPipeSync() gsDPNoParam(G_RDPPIPESYNC) -#define gDPLoadSync(pkt) gDPNoParam(pkt, G_RDPLOADSYNC) -#define gsDPLoadSync() gsDPNoParam(G_RDPLOADSYNC) -#define gDPNoOp(pkt) gDPNoParam(pkt, G_NOOP) -#define gsDPNoOp() gsDPNoParam(G_NOOP) -#define gDPNoOpTag(pkt, tag) gDPParam(pkt, G_NOOP, tag) -#define gsDPNoOpTag(tag) gsDPParam(G_NOOP, tag) +#define gDPFullSync(pkt) gDPNoParam(pkt, G_RDPFULLSYNC) +#define gsDPFullSync() gsDPNoParam( G_RDPFULLSYNC) +#define gDPTileSync(pkt) gDPNoParam(pkt, G_RDPTILESYNC) +#define gsDPTileSync() gsDPNoParam( G_RDPTILESYNC) +#define gDPPipeSync(pkt) gDPNoParam(pkt, G_RDPPIPESYNC) +#define gsDPPipeSync() gsDPNoParam( G_RDPPIPESYNC) +#define gDPLoadSync(pkt) gDPNoParam(pkt, G_RDPLOADSYNC) +#define gsDPLoadSync() gsDPNoParam( G_RDPLOADSYNC) +#define gDPNoOp(pkt) gDPNoParam(pkt, G_NOOP) +#define gsDPNoOp() gsDPNoParam( G_NOOP) +#define gDPNoOpTag(pkt, tag) gDPParam(pkt, G_NOOP, tag) +#define gsDPNoOpTag(tag) gsDPParam( G_NOOP, tag) #define gDPNoOpHere(pkt, file, line) gDma1p(pkt, G_NOOP, file, line, 1) #define gDPNoOpString(pkt, data, n) gDma1p(pkt, G_NOOP, data, n, 2) diff --git a/include/ultra64/types.h b/include/ultra64/types.h index a90792a552..84ee3cc6cb 100644 --- a/include/ultra64/types.h +++ b/include/ultra64/types.h @@ -23,20 +23,12 @@ typedef float f32; typedef double f64; -typedef long int Mtx_t[4][4]; -typedef union { - Mtx_t m; - struct { - u16 intPart[4][4]; - u16 fracPart[4][4]; - }; - long long int force_structure_alignment; -} Mtx; - typedef float MtxF_t[4][4]; typedef union { MtxF_t mf; struct { + // Note: The order displayed here is the transpose of the order in which matrices are typically written. + // For example, [xw, yw, zw] is the translation part of the matrix, not [wx, wy, wz]. float xx, yx, zx, wx, xy, yy, zy, wy, xz, yz, zz, wz, diff --git a/include/z64.h b/include/z64.h index 0200cbeafb..4ba99c34dd 100644 --- a/include/z64.h +++ b/include/z64.h @@ -1202,7 +1202,7 @@ typedef struct { /* 0x01 */ u8 byte1; /* 0x02 */ u8 byte2; /* 0x03 */ u8 byte3; -} ElfMessage; // size = 0x4 +} QuestHintCmd; // size = 0x4 typedef struct { /* 0x00 */ u8 numActors; @@ -1254,17 +1254,17 @@ typedef struct PlayState { /* 0x11DE4 */ u32 gameplayFrames; /* 0x11DE8 */ u8 linkAgeOnLoad; /* 0x11DE9 */ u8 unk_11DE9; - /* 0x11DEA */ u8 curSpawn; - /* 0x11DEB */ u8 numSetupActors; + /* 0x11DEA */ u8 spawn; + /* 0x11DEB */ u8 numActorEntries; /* 0x11DEC */ u8 numRooms; /* 0x11DF0 */ RomFile* roomList; - /* 0x11DF4 */ ActorEntry* linkActorEntry; - /* 0x11DF8 */ ActorEntry* setupActorList; + /* 0x11DF4 */ ActorEntry* playerEntry; + /* 0x11DF8 */ ActorEntry* actorEntryList; /* 0x11DFC */ void* unk_11DFC; - /* 0x11E00 */ EntranceEntry* setupEntranceList; - /* 0x11E04 */ s16* setupExitList; - /* 0x11E08 */ Path* setupPathList; - /* 0x11E0C */ ElfMessage* cUpElfMsgs; + /* 0x11E00 */ Spawn* spawnList; + /* 0x11E04 */ s16* exitList; + /* 0x11E08 */ Path* pathList; + /* 0x11E0C */ QuestHintCmd* naviQuestHints; /* 0x11E10 */ void* specialEffects; /* 0x11E14 */ u8 skyboxId; /* 0x11E15 */ s8 transitionTrigger; // "fade_direction" @@ -1699,7 +1699,7 @@ typedef struct { } UCodeInfo; // size = 0x8 typedef struct { - /* 0x00 */ u32 segments[NUM_SEGMENTS]; + /* 0x00 */ uintptr_t segments[NUM_SEGMENTS]; /* 0x40 */ Gfx* dlStack[18]; /* 0x88 */ s32 dlDepth; /* 0x8C */ u32 dlCnt; diff --git a/include/z64elf_message.h b/include/z64elf_message.h deleted file mode 100644 index d6f545b3f0..0000000000 --- a/include/z64elf_message.h +++ /dev/null @@ -1,129 +0,0 @@ -#ifndef Z64ELF_MESSAGE_H -#define Z64ELF_MESSAGE_H - -#include "ultra64.h" - -// Checks the condition and exits the script if the check passes -#define ELF_MSG_TYPE_CHECK 0 -// ? (unused) -#define ELF_MSG_TYPE_UNK_1 1 -// ? (unused) -#define ELF_MSG_TYPE_UNK_2 2 -// Checks the condition and skips forward by some number of commands if the check passes -#define ELF_MSG_TYPE_SKIP 3 -// Always ends the script, returning the text id for this command -#define ELF_MSG_TYPE_END 7 - -// Check an eventChkInf flag -#define ELF_MSG_CONDITION_FLAG 0 -// Check a dungeon item (map, compass, boss key) -#define ELF_MSG_CONDITION_DUNGEON_ITEM 1 -// Check if an item is in an item slot -#define ELF_MSG_CONDITION_ITEM 2 -// "Other" conditions described below -#define ELF_MSG_CONDITION_OTHER 3 - -// Check what strength upgrade has been obtained so far -#define ELF_MSG_CONDITION_STRENGTH_UPG 0 -// Check if specific boots have been obtained so far -#define ELF_MSG_CONDITION_BOOTS 1 -// Check if a particular song has been obtained -#define ELF_MSG_CONDITION_SONG 2 -// Check if a particular medallion has been obtained -#define ELF_MSG_CONDITION_MEDALLION 3 -// Check if the magic meter has been obtained -#define ELF_MSG_CONDITION_MAGIC 4 - -/* - * Bitpack byte 0 - */ -#define ELF_MSG_B0(type, cond_type, tf) \ - _SHIFTL(ELF_MSG_TYPE_##type, 5, 3) | \ - _SHIFTL(ELF_MSG_CONDITION_##cond_type, 1, 4) | \ - _SHIFTL(tf, 0, 1) - -/* - * Bitpack byte 1 - */ -#define ELF_MSG_B1(cond_type, data) \ - _SHIFTL(ELF_MSG_CONDITION_##cond_type, 4, 4) | \ - _SHIFTL(data, 0, 4) - -/* - * Other bytes - */ -#define ELF_MSG_B(data) \ - _SHIFTL(data, 0, 8) - -/* - * Command macros - */ - -#define ELF_MSG_FLAG(type, textId, tf, flag) \ - { \ - ELF_MSG_B0(type, FLAG, tf), \ - ELF_MSG_B(flag), \ - ELF_MSG_B(textId), \ - ELF_MSG_B(0), \ - } - -#define ELF_MSG_END(textId) \ - ELF_MSG_FLAG(END, textId, false, 0) - -#define ELF_MSG_DUNGEON_ITEM(type, textId, tf, itemId) \ - { \ - ELF_MSG_B0(type, DUNGEON_ITEM, tf), \ - ELF_MSG_B(itemId), \ - ELF_MSG_B(textId), \ - ELF_MSG_B(0), \ - } - -#define ELF_MSG_ITEM(type, textId, tf, slotItemId, itemId) \ - { \ - ELF_MSG_B0(type, ITEM, tf), \ - ELF_MSG_B(slotItemId), \ - ELF_MSG_B(textId), \ - ELF_MSG_B(itemId), \ - } - -#define ELF_MSG_STRENGTH_UPG(type, textId, tf, strUpg) \ - { \ - ELF_MSG_B0(type, OTHER, tf), \ - ELF_MSG_B1(STRENGTH_UPG, strUpg), \ - ELF_MSG_B(textId), \ - ELF_MSG_B(0), \ - } - -#define ELF_MSG_BOOTS(type, textId, tf, itemId) \ - { \ - ELF_MSG_B0(type, OTHER, tf), \ - ELF_MSG_B1(BOOTS, 0), \ - ELF_MSG_B(textId), \ - ELF_MSG_B(itemId), \ - } - -#define ELF_MSG_SONG(type, textId, tf, itemId) \ - { \ - ELF_MSG_B0(type, OTHER, tf), \ - ELF_MSG_B1(SONG, 0), \ - ELF_MSG_B(textId), \ - ELF_MSG_B(itemId), \ - } - -#define ELF_MSG_MEDALLION(type, textId, tf, itemId) \ - { \ - ELF_MSG_B0(type, OTHER, tf), \ - ELF_MSG_B1(MEDALLION, 0), \ - ELF_MSG_B(textId), \ - ELF_MSG_B(itemId), \ - } - -#define ELF_MSG_MAGIC(type, textId, tf) \ - { \ - ELF_MSG_B0(type, OTHER, tf), \ - ELF_MSG_B1(MAGIC, 0), \ - ELF_MSG_B(textId), \ - ELF_MSG_B(0), \ - } - -#endif diff --git a/include/z64quest_hint_commands.h b/include/z64quest_hint_commands.h new file mode 100644 index 0000000000..62f262f39b --- /dev/null +++ b/include/z64quest_hint_commands.h @@ -0,0 +1,150 @@ +#ifndef Z64QUEST_HINT_COMMANDS_H +#define Z64QUEST_HINT_COMMANDS_H + +#include "ultra64.h" + +/* + * Hint Command Types + */ + +// Checks the condition and exits the script if the check passes +#define QUEST_HINT_TYPE_CHECK 0 + +// Checks a chain of conditions and only evaluates the last entry +// if all conditions leading up to it were also true +#define QUEST_HINT_TYPE_CHAIN 1 + +// Checks a chain of conditionals and will return a randomly chosen entry among +// the conditions that evaluated to true +#define QUEST_HINT_TYPE_RANDOM 2 + +// Checks the condition and skips forward by specified number of commands if the check passes +// Note that the amount of entries to skip is specified in the field where the textId would usually go +#define QUEST_HINT_TYPE_SKIP 3 + +// Always ends the script, returning the text id for this command +#define QUEST_HINT_TYPE_END 7 + +/* + * Hint Condition Types + */ + +// Check an eventChkInf flag +#define QUEST_HINT_CONDITION_FLAG 0 + +// Check a dungeon item (map, compass, boss key) +#define QUEST_HINT_CONDITION_DUNGEON_ITEM 1 + +// Check if an item is in an item slot +#define QUEST_HINT_CONDITION_ITEM 2 + +// "Other" conditions described below +#define QUEST_HINT_CONDITION_OTHER 3 + +/* + * "Other" Condition Types + */ + +// Check what strength upgrade has been obtained so far +#define QUEST_HINT_CONDITION_STRENGTH_UPG 0 + +// Check if specific boots have been obtained so far +#define QUEST_HINT_CONDITION_BOOTS 1 + +// Check if a particular song has been obtained +#define QUEST_HINT_CONDITION_SONG 2 + +// Check if a particular medallion has been obtained +#define QUEST_HINT_CONDITION_MEDALLION 3 + +// Check if the magic meter has been obtained +#define QUEST_HINT_CONDITION_MAGIC 4 + +/* + * Byte pack macros + */ + +#define HINT_B0(type, condType, tf) \ + _SHIFTL(QUEST_HINT_TYPE_##type, 5, 3) | \ + _SHIFTL(condType, 1, 4) | \ + _SHIFTL(tf, 0, 1) + +#define HINT_B1(condType, data) \ + _SHIFTL(condType, 4, 4) | \ + _SHIFTL(data, 0, 4) + +#define HINT_B(data) \ + _SHIFTL(data, 0, 8) + +/* + * Command macros + */ + +#define QUEST_HINT_FLAG(type, flag, tf, textId) \ + { \ + HINT_B0(type, QUEST_HINT_CONDITION_FLAG, tf), \ + HINT_B(flag), \ + HINT_B(textId), \ + HINT_B(0), \ + } + +#define QUEST_HINT_END(textId) \ + QUEST_HINT_FLAG(END, 0, false, textId) + +#define QUEST_HINT_DUNGEON_ITEM(type, itemId, tf, textId) \ + { \ + HINT_B0(type, QUEST_HINT_CONDITION_DUNGEON_ITEM, tf), \ + HINT_B(itemId), \ + HINT_B(textId), \ + HINT_B(0), \ + } + +#define QUEST_HINT_ITEM(type, slotItemId, itemId, tf, textId) \ + { \ + HINT_B0(type, QUEST_HINT_CONDITION_ITEM, tf), \ + HINT_B(slotItemId), \ + HINT_B(textId), \ + HINT_B(itemId), \ + } + +#define QUEST_HINT_STRENGTH_UPG(type, strUpg, tf, textId) \ + { \ + HINT_B0(type, QUEST_HINT_CONDITION_OTHER, tf), \ + HINT_B1(QUEST_HINT_CONDITION_STRENGTH_UPG, strUpg), \ + HINT_B(textId), \ + HINT_B(0), \ + } + +#define QUEST_HINT_BOOTS(type, itemId, tf, textId) \ + { \ + HINT_B0(type, QUEST_HINT_CONDITION_OTHER, tf), \ + HINT_B1(QUEST_HINT_CONDITION_BOOTS, 0), \ + HINT_B(textId), \ + HINT_B(itemId), \ + } + +#define QUEST_HINT_SONG(type, itemId, tf, textId) \ + { \ + HINT_B0(type, QUEST_HINT_CONDITION_OTHER, tf), \ + HINT_B1(QUEST_HINT_CONDITION_SONG, 0), \ + HINT_B(textId), \ + HINT_B(itemId), \ + } + +#define QUEST_HINT_MEDALLION(type, itemId, tf, textId) \ + { \ + HINT_B0(type, QUEST_HINT_CONDITION_OTHER, tf), \ + HINT_B1(QUEST_HINT_CONDITION_MEDALLION, 0), \ + HINT_B(textId), \ + HINT_B(itemId), \ + } + +#define QUEST_HINT_MAGIC(type, tf, textId) \ + { \ + HINT_B0(type, QUEST_HINT_CONDITION_OTHER, tf), \ + HINT_B1(QUEST_HINT_CONDITION_MAGIC, 0), \ + HINT_B(textId), \ + HINT_B(0), \ + } + +#endif diff --git a/include/z64scene.h b/include/z64scene.h index d0d96c91c1..fd12ee3c0b 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -38,9 +38,12 @@ typedef struct { } TransitionActorEntry; // size = 0x10 typedef struct { - /* 0x00 */ u8 spawn; + /* 0x00 */ u8 playerEntryIndex; /* 0x01 */ u8 room; -} EntranceEntry; +} Spawn; + +// TODO: ZAPD Compatibility +typedef Spawn EntranceEntry; typedef struct { /* 0x00 */ u8 ambientColor[3]; @@ -179,13 +182,13 @@ typedef struct { /* 0x00 */ u8 code; /* 0x01 */ u8 length; /* 0x04 */ ActorEntry* data; -} SCmdSpawnList; +} SCmdPlayerEntryList; typedef struct { /* 0x00 */ u8 code; /* 0x01 */ u8 length; /* 0x04 */ ActorEntry* data; -} SCmdActorList; +} SCmdActorEntryList; typedef struct { /* 0x00 */ u8 code; @@ -218,12 +221,12 @@ typedef struct { typedef struct { /* 0x00 */ u8 code; /* 0x01 */ u8 data1; - /* 0x04 */ EntranceEntry* data; -} SCmdEntranceList; + /* 0x04 */ Spawn* data; +} SCmdSpawnList; typedef struct { /* 0x00 */ u8 code; - /* 0x01 */ u8 cUpElfMsgNum; + /* 0x01 */ u8 naviQuestHintFileId; /* 0x04 */ u32 keepObjectId; } SCmdSpecialFiles; @@ -342,11 +345,11 @@ typedef struct { typedef union { SCmdBase base; - SCmdSpawnList spawnList; - SCmdActorList actorList; + SCmdPlayerEntryList playerEntryList; + SCmdActorEntryList actorEntryList; SCmdUnused02 unused02; SCmdRoomList roomList; - SCmdEntranceList entranceList; + SCmdSpawnList spawnList; SCmdObjectList objectList; SCmdLightList lightList; SCmdPathList pathList; @@ -469,6 +472,14 @@ typedef enum { #define SCENE_CAM_TYPE_FIXED_MARKET 0x40 // Camera exhibits fixed behaviors and delays textboxes by a small amount before they start to appear #define SCENE_CAM_TYPE_SHOOTING_GALLERY 0x50 // Unreferenced in code, and used only by the main layer of the shooting gallery scene +// navi hints +// TODO: make ZAPD use this enum for `SCENE_CMD_SPECIAL_FILES` +typedef enum { + NAVI_QUEST_HINTS_NONE, + NAVI_QUEST_HINTS_OVERWORLD, + NAVI_QUEST_HINTS_DUNGEON +} NaviQuestHintFileId; + // Scene commands typedef enum { @@ -522,8 +533,8 @@ typedef enum { #define SCENE_CMD_ENTRANCE_LIST(entranceList) \ { SCENE_CMD_ID_ENTRANCE_LIST, 0, CMD_PTR(entranceList) } -#define SCENE_CMD_SPECIAL_FILES(elfMessageFile, keepObjectId) \ - { SCENE_CMD_ID_SPECIAL_FILES, elfMessageFile, CMD_W(keepObjectId) } +#define SCENE_CMD_SPECIAL_FILES(naviQuestHintFileId, keepObjectId) \ + { SCENE_CMD_ID_SPECIAL_FILES, naviQuestHintFileId, CMD_W(keepObjectId) } #define SCENE_CMD_ROOM_BEHAVIOR(curRoomUnk3, curRoomUnk2, showInvisActors, disableWarpSongs) \ { SCENE_CMD_ID_ROOM_BEHAVIOR, curRoomUnk3, \ diff --git a/src/code/code_80097A00.c b/src/code/code_80097A00.c index 4acd8b4b8b..9b7e2cf99b 100644 --- a/src/code/code_80097A00.c +++ b/src/code/code_80097A00.c @@ -212,16 +212,62 @@ void* gItemIcons[] = { // Used to map item IDs to inventory slots u8 gItemSlots[] = { - SLOT_STICK, SLOT_NUT, SLOT_BOMB, SLOT_BOW, SLOT_ARROW_FIRE, SLOT_DINS_FIRE, - SLOT_SLINGSHOT, SLOT_OCARINA, SLOT_OCARINA, SLOT_BOMBCHU, SLOT_HOOKSHOT, SLOT_HOOKSHOT, - SLOT_ARROW_ICE, SLOT_FARORES_WIND, SLOT_BOOMERANG, SLOT_LENS, SLOT_BEAN, SLOT_HAMMER, - SLOT_ARROW_LIGHT, SLOT_NAYRUS_LOVE, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, - SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, - SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, - SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, - SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, - SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, - SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, + SLOT_STICK, // ITEM_STICK + SLOT_NUT, // ITEM_NUT + SLOT_BOMB, // ITEM_BOMB + SLOT_BOW, // ITEM_BOW + SLOT_ARROW_FIRE, // ITEM_ARROW_FIRE + SLOT_DINS_FIRE, // ITEM_DINS_FIRE + SLOT_SLINGSHOT, // ITEM_SLINGSHOT + SLOT_OCARINA, // ITEM_OCARINA_FAIRY + SLOT_OCARINA, // ITEM_OCARINA_TIME + SLOT_BOMBCHU, // ITEM_BOMBCHU + SLOT_HOOKSHOT, // ITEM_HOOKSHOT + SLOT_HOOKSHOT, // ITEM_LONGSHOT + SLOT_ARROW_ICE, // ITEM_ARROW_ICE + SLOT_FARORES_WIND, // ITEM_FARORES_WIND + SLOT_BOOMERANG, // ITEM_BOOMERANG + SLOT_LENS, // ITEM_LENS + SLOT_BEAN, // ITEM_BEAN + SLOT_HAMMER, // ITEM_HAMMER + SLOT_ARROW_LIGHT, // ITEM_ARROW_LIGHT + SLOT_NAYRUS_LOVE, // ITEM_NAYRUS_LOVE + SLOT_BOTTLE_1, // ITEM_BOTTLE + SLOT_BOTTLE_1, // ITEM_POTION_RED + SLOT_BOTTLE_1, // ITEM_POTION_GREEN + SLOT_BOTTLE_1, // ITEM_POTION_BLUE + SLOT_BOTTLE_1, // ITEM_FAIRY + SLOT_BOTTLE_1, // ITEM_FISH + SLOT_BOTTLE_1, // ITEM_MILK_BOTTLE + SLOT_BOTTLE_1, // ITEM_LETTER_RUTO + SLOT_BOTTLE_1, // ITEM_BLUE_FIRE + SLOT_BOTTLE_1, // ITEM_BUG + SLOT_BOTTLE_1, // ITEM_BIG_POE + SLOT_BOTTLE_1, // ITEM_MILK_HALF + SLOT_BOTTLE_1, // ITEM_POE + SLOT_TRADE_CHILD, // ITEM_WEIRD_EGG + SLOT_TRADE_CHILD, // ITEM_CHICKEN + SLOT_TRADE_CHILD, // ITEM_LETTER_ZELDA + SLOT_TRADE_CHILD, // ITEM_MASK_KEATON + SLOT_TRADE_CHILD, // ITEM_MASK_SKULL + SLOT_TRADE_CHILD, // ITEM_MASK_SPOOKY + SLOT_TRADE_CHILD, // ITEM_MASK_BUNNY + SLOT_TRADE_CHILD, // ITEM_MASK_GORON + SLOT_TRADE_CHILD, // ITEM_MASK_ZORA + SLOT_TRADE_CHILD, // ITEM_MASK_GERUDO + SLOT_TRADE_CHILD, // ITEM_MASK_TRUTH + SLOT_TRADE_CHILD, // ITEM_SOLD_OUT + SLOT_TRADE_ADULT, // ITEM_POCKET_EGG + SLOT_TRADE_ADULT, // ITEM_POCKET_CUCCO + SLOT_TRADE_ADULT, // ITEM_COJIRO + SLOT_TRADE_ADULT, // ITEM_ODD_MUSHROOM + SLOT_TRADE_ADULT, // ITEM_ODD_POTION + SLOT_TRADE_ADULT, // ITEM_SAW + SLOT_TRADE_ADULT, // ITEM_SWORD_BROKEN + SLOT_TRADE_ADULT, // ITEM_PRESCRIPTION + SLOT_TRADE_ADULT, // ITEM_FROG + SLOT_TRADE_ADULT, // ITEM_EYEDROPS + SLOT_TRADE_ADULT, // ITEM_CLAIM_CHECK }; void Inventory_ChangeEquipment(s16 equipment, u16 value) { diff --git a/src/code/code_800EC960.c b/src/code/code_800EC960.c index 7c649b6e33..fb4fd25fe1 100644 --- a/src/code/code_800EC960.c +++ b/src/code/code_800EC960.c @@ -1241,8 +1241,8 @@ u8 sMalonSingingTimer; u8 sAudioSpecPeakNumNotes[0x12]; u8 sMalonSingingDisabled; u8 D_8016B9F3; -u8 D_8016B9F4; -u16 D_8016B9F6; +u8 sFanfareStartTimer; +u16 sFanfareSeqId; OcarinaStaff sPlayingStaff; OcarinaStaff sPlaybackStaff; @@ -3208,7 +3208,7 @@ void AudioDebug_ProcessInput_SndCont(void) { if (CHECK_BTN_ANY(sDebugPadPress, BTN_CDOWN)) { if (sAudioSndContSel == 0) { if (1) {} - func_800F595C(sAudioSndContWork[sAudioSndContSel]); + Audio_PlaySequenceInCutscene(sAudioSndContWork[sAudioSndContSel]); } } @@ -3693,7 +3693,7 @@ void AudioDebug_ProcessInput(void) { } void Audio_UpdateRiverSoundVolumes(void); -void func_800F5CF8(void); +void Audio_UpdateFanfare(void); /** * This is Audio_Update for the graph thread @@ -3707,7 +3707,7 @@ void func_800F3054(void) { Audio_StepFreqLerp(&sWaterfallFreqScaleLerp); Audio_UpdateRiverSoundVolumes(); Audio_UpdateSceneSequenceResumePoint(); - func_800F5CF8(); + Audio_UpdateFanfare(); if (gAudioSpecId == 7) { Audio_ClearSariaBgm(); } @@ -4260,17 +4260,17 @@ void Audio_StepFreqLerp(FreqLerp* lerp) { } } -void func_800F47BC(void) { +void Audio_SetBgmVolumeOffDuringFanfare(void) { Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_FANFARE, 0, 10); Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_FANFARE, 0, 10); } -void func_800F47FC(void) { +void Audio_SetBgmVolumeOnDuringFanfare(void) { Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_FANFARE, 0x7F, 3); Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_FANFARE, 0x7F, 3); } -void func_800F483C(u8 targetVol, u8 volFadeTimer) { +void Audio_SetMainBgmVolume(u8 targetVol, u8 volFadeTimer) { Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_MAIN, targetVol, volFadeTimer); } @@ -4593,7 +4593,7 @@ void Audio_PlaySceneSequence(u16 seqId) { Audio_QueueCmdS32(0xF8000000, 0); } - if ((sSeqFlags[sPrevSceneSeqId] & SEQ_FLAG_RESUME_PREV) && sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_RESUME) { + if ((sSeqFlags[sPrevSceneSeqId] & SEQ_FLAG_RESUME_PREV) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_RESUME)) { // Resume the sequence from the point where it left off last time it was played in the scene if ((sSeqResumePoint & 0x3F) != 0) { fadeInDuration = 30; @@ -4622,7 +4622,7 @@ void Audio_PlaySceneSequence(u16 seqId) { void Audio_UpdateSceneSequenceResumePoint(void) { u16 seqId = Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN); - if ((seqId != NA_BGM_DISABLED) && (sSeqFlags[(u8)seqId & 0xFF] & SEQ_FLAG_RESUME)) { + if ((seqId != NA_BGM_DISABLED) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_RESUME)) { if (sSeqResumePoint != SEQ_RESUME_POINT_NONE) { // Get the current point to resume from sSeqResumePoint = gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].soundScriptIO[3]; @@ -4633,14 +4633,15 @@ void Audio_UpdateSceneSequenceResumePoint(void) { } } -void func_800F5718(void) { +void Audio_PlayWindmillBgm(void) { if (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_WINDMILL) { SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_WINDMILL); } } -void func_800F574C(f32 scaleTempoAndFreq, u8 duration) { +void Audio_SetMainBgmTempoFreqAfterFanfare(f32 scaleTempoAndFreq, u8 duration) { if (scaleTempoAndFreq == 1.0f) { + // Should instead use `SEQCMD_SETUP_RESET_TEMPO` to wait until the fanfare is finished SEQCMD_RESET_TEMPO(SEQ_PLAYER_BGM_MAIN, duration); } else { SEQCMD_SETUP_SCALE_TEMPO(SEQ_PLAYER_FANFARE, SEQ_PLAYER_BGM_MAIN, duration, scaleTempoAndFreq * 100.0f); @@ -4649,52 +4650,51 @@ void func_800F574C(f32 scaleTempoAndFreq, u8 duration) { SEQCMD_SETUP_SET_PLAYER_FREQ(SEQ_PLAYER_FANFARE, SEQ_PLAYER_BGM_MAIN, duration, scaleTempoAndFreq * 100.0f); } -void func_800F5918(void) { - if (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) == NA_BGM_TIMED_MINI_GAME && +/** + * Set the tempo for the timed minigame sequence to 210 bpm, + * which is faster than the default tempo + */ +void Audio_SetFastTempoForTimedMinigame(void) { + if ((Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) == NA_BGM_TIMED_MINI_GAME) && Audio_IsSeqCmdNotQueued(SEQCMD_OP_PLAY_SEQUENCE << 28, SEQCMD_OP_MASK)) { SEQCMD_SET_TEMPO(SEQ_PLAYER_BGM_MAIN, 5, 210); } } -void func_800F595C(u16 arg0) { - u8 arg0b = arg0 & 0xFF; - - if (sSeqFlags[arg0b] & SEQ_FLAG_FANFARE) { - Audio_PlayFanfare(arg0); - } else if (sSeqFlags[arg0b] & SEQ_FLAG_FANFARE_GANON) { - SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_FANFARE, 0, 0, arg0); - +void Audio_PlaySequenceInCutscene(u16 seqId) { + if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE) { + Audio_PlayFanfare(seqId); + } else if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE_GANON) { + SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_FANFARE, 0, 0, seqId); } else { - Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_MAIN, arg0, 0, 7, SEQ_IO_VAL_NONE); + Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_MAIN, seqId, 0, 7, SEQ_IO_VAL_NONE); SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0); } } -void func_800F59E8(u16 arg0) { - u8 arg0b = arg0 & 0xFF; - - if (sSeqFlags[arg0b] & SEQ_FLAG_FANFARE) { +void Audio_StopSequenceInCutscene(u16 seqId) { + if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0); - } else if (sSeqFlags[arg0b] & SEQ_FLAG_FANFARE_GANON) { + } else if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE_GANON) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0); } else { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0); } } -s32 func_800F5A58(u8 arg0) { - u8 phi_a1 = 0; +s32 Audio_IsSequencePlaying(u16 seqId) { + u8 seqPlayerIndex = SEQ_PLAYER_BGM_MAIN; - if (sSeqFlags[arg0 & 0xFF] & SEQ_FLAG_FANFARE) { - phi_a1 = 1; - } else if (sSeqFlags[arg0 & 0xFF] & SEQ_FLAG_FANFARE_GANON) { - phi_a1 = 1; + if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE) { + seqPlayerIndex = SEQ_PLAYER_FANFARE; + } else if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE_GANON) { + seqPlayerIndex = SEQ_PLAYER_FANFARE; } - if (arg0 == (u8)Audio_GetActiveSeqId(phi_a1)) { - return 1; + if ((seqId & 0xFF) == (Audio_GetActiveSeqId(seqPlayerIndex) & 0xFF)) { + return true; } else { - return 0; + return false; } } @@ -4757,31 +4757,35 @@ void func_800F5C2C(void) { } void Audio_PlayFanfare(u16 seqId) { - u16 sp26; - u32 sp20; - u8* sp1C; - u8* sp18; + u16 curSeqId; + u32 outNumFonts; + u8* curFontId; + u8* requestedFontId; - sp26 = Audio_GetActiveSeqId(SEQ_PLAYER_FANFARE); - sp1C = func_800E5E84(sp26 & 0xFF, &sp20); - sp18 = func_800E5E84(seqId & 0xFF, &sp20); - if ((sp26 == NA_BGM_DISABLED) || (*sp1C == *sp18)) { - D_8016B9F4 = 1; + curSeqId = Audio_GetActiveSeqId(SEQ_PLAYER_FANFARE); + + curFontId = func_800E5E84(curSeqId & 0xFF, &outNumFonts); + requestedFontId = func_800E5E84(seqId & 0xFF, &outNumFonts); + + if ((curSeqId == NA_BGM_DISABLED) || (*curFontId == *requestedFontId)) { + sFanfareStartTimer = 1; } else { - D_8016B9F4 = 5; + // Give extra time to start the fanfare if both another fanfare needs to be stopped + // and a new fontId needs to be loaded in + sFanfareStartTimer = 5; SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0); } - D_8016B9F6 = seqId; + sFanfareSeqId = seqId; } -void func_800F5CF8(void) { +void Audio_UpdateFanfare(void) { u16 seqIdFanfare; u16 seqIdBgmMain; u16 seqIdBgmSub; - if (D_8016B9F4 != 0) { - D_8016B9F4--; - if (D_8016B9F4 == 0) { + if (sFanfareStartTimer != 0) { + sFanfareStartTimer--; + if (sFanfareStartTimer == 0) { Audio_QueueCmdS32(0xE3000000, SEQUENCE_TABLE); Audio_QueueCmdS32(0xE3000000, FONT_TABLE); @@ -4802,7 +4806,7 @@ void func_800F5CF8(void) { SEQCMD_SETUP_SET_CHANNEL_DISABLE_MASK(SEQ_PLAYER_FANFARE, SEQ_PLAYER_BGM_SUB, 0); } } - SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_FANFARE, 1, 0, D_8016B9F6); + SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_FANFARE, 1, 0, sFanfareSeqId); SEQCMD_SET_CHANNEL_DISABLE_MASK(SEQ_PLAYER_BGM_MAIN, 0xFFFF); if (seqIdBgmSub != NA_BGM_LONLON) { SEQCMD_SET_CHANNEL_DISABLE_MASK(SEQ_PLAYER_BGM_SUB, 0xFFFF); @@ -4833,7 +4837,7 @@ void Audio_SetSequenceMode(u8 seqMode) { seqMode = SEQ_MODE_IGNORE; } - if ((seqId == NA_BGM_DISABLED) || (sSeqFlags[(u8)(seqId & 0xFF)] & SEQ_FLAG_ENEMY) || + if ((seqId == NA_BGM_DISABLED) || (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_ENEMY) || ((sPrevSeqMode & 0x7F) == SEQ_MODE_ENEMY)) { if (seqMode != (sPrevSeqMode & 0x7F)) { if (seqMode == SEQ_MODE_ENEMY) { @@ -5160,10 +5164,10 @@ void func_800F6964(u16 arg0) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_SUB, (arg0 * 3) / 2); } -void func_800F6AB0(u16 arg0) { - SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, arg0); - SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, arg0); - SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_SUB, arg0); +void Audio_StopBgmAndFanfare(u16 fadeOutDuration) { + SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, fadeOutDuration); + SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, fadeOutDuration); + SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_SUB, fadeOutDuration); Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, 0x7F, 0); Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_FANFARE, 0x7F, 0); } @@ -5223,7 +5227,7 @@ void func_800F6C34(void) { sPrevMainBgmSeqId = NA_BGM_DISABLED; Audio_QueueCmdS8(0x46 << 24 | SEQ_PLAYER_BGM_MAIN << 16, -1); sSariaBgmPtr = NULL; - D_8016B9F4 = 0; + sFanfareStartTimer = 0; D_8016B9F3 = 1; sMalonSingingDisabled = false; } @@ -5297,7 +5301,7 @@ void Audio_PlayNatureAmbienceSequence(u8 natureAmbienceId) { u8 ioData; if ((gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId == NA_BGM_DISABLED) || - !(sSeqFlags[((u8)gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId) & 0xFF] & SEQ_FLAG_NO_AMBIENCE)) { + !(sSeqFlags[gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE)) { Audio_StartNatureAmbienceSequence(sNatureAmbienceDataIO[natureAmbienceId].playerIO, sNatureAmbienceDataIO[natureAmbienceId].channelMask); diff --git a/src/code/code_800FCE80.c b/src/code/code_800FCE80.c index 500e2c01d5..3d73123da0 100644 --- a/src/code/code_800FCE80.c +++ b/src/code/code_800FCE80.c @@ -3,9 +3,13 @@ s32 gUseAtanContFrac; -f32 Math_FTanF(f32 x) { - f32 sin = sinf(x); - f32 cos = cosf(x); +/** + * @param angle radians + * @return tan(angle) + */ +f32 Math_FTanF(f32 angle) { + f32 sin = sinf(angle); + f32 cos = cosf(angle); return sin / cos; } @@ -42,7 +46,7 @@ f32 Math_FAtanTaylorQF(f32 x) { const f32* c = coeffs; f32 term; - while (1) { + while (true) { term = *c++ * exp; if (poly + term == poly) { break; @@ -124,6 +128,9 @@ f32 Math_FAtanContFracF(f32 x) { } } +/** + * @return arctan(x) in radians, in (-pi/2,pi/2) range + */ f32 Math_FAtanF(f32 x) { if (!gUseAtanContFrac) { return Math_FAtanTaylorF(x); @@ -132,6 +139,9 @@ f32 Math_FAtanF(f32 x) { } } +/** + * @return angle to (x,y) from vector (1,0) around (0,0) in radians, in (-pi,pi] range + */ f32 Math_FAtan2F(f32 y, f32 x) { if (x == 0.0f) { if (y == 0.0f) { @@ -152,10 +162,16 @@ f32 Math_FAtan2F(f32 y, f32 x) { } } +/** + * @return arcsin(x) in radians, in [-pi/2,pi/2] range + */ f32 Math_FAsinF(f32 x) { return Math_FAtan2F(x, sqrtf(1.0f - SQ(x))); } +/** + * @return arccos(x) in radians, in [0,pi] range + */ f32 Math_FAcosF(f32 x) { return M_PI / 2 - Math_FAsinF(x); } diff --git a/src/code/db_camera.c b/src/code/db_camera.c index 1018ba21cf..ce96764ecf 100644 --- a/src/code/db_camera.c +++ b/src/code/db_camera.c @@ -111,61 +111,54 @@ Vec3f* DbCamera_AddVecGeoToVec3f(Vec3f* dest, Vec3f* a, VecGeo* geo) { return dest; } -Vec3f* DbCamera_CalcUpFromPitchYawRoll(Vec3f* dest, s16 pitch, s16 yaw, s16 roll) { - f32 sinPitch; - f32 cosPitch; - f32 sinYaw; - f32 cosYaw; - f32 sinNegRoll; - f32 cosNegRoll; - Vec3f spA4; - f32 sp54; - f32 sp4C; - f32 cosPitchCosYawSinRoll; - f32 negSinPitch; - f32 temp_f10_2; - f32 cosPitchcosYaw; - f32 temp_f14; - f32 negSinPitchSinYaw; - f32 negSinPitchCosYaw; - f32 cosPitchSinYaw; - f32 temp_f4_2; - f32 temp_f6; - f32 temp_f8; - f32 temp_f8_2; - f32 temp_f8_3; +/** + * Calculates a new Up vector from the pitch, yaw, roll + */ +Vec3f* DbCamera_CalcUpFromPitchYawRoll(Vec3f* viewUp, s16 pitch, s16 yaw, s16 roll) { + f32 sinP = Math_SinS(pitch); + f32 cosP = Math_CosS(pitch); + f32 sinY = Math_SinS(yaw); + f32 cosY = Math_CosS(yaw); + f32 sinR = Math_SinS(-roll); + f32 cosR = Math_CosS(-roll); + Vec3f up; + Vec3f baseUp; + Vec3f u; + Vec3f rollMtxRow1; + Vec3f rollMtxRow2; + Vec3f rollMtxRow3; - sinPitch = Math_SinS(pitch); - cosPitch = Math_CosS(pitch); - sinYaw = Math_SinS(yaw); - cosYaw = Math_CosS(yaw); - sinNegRoll = Math_SinS(-roll); - cosNegRoll = Math_CosS(-roll); - negSinPitch = -sinPitch; - negSinPitchSinYaw = negSinPitch * sinYaw; - negSinPitchCosYaw = negSinPitch * cosYaw; - temp_f14 = 1.0f - cosNegRoll; - cosPitchSinYaw = cosPitch * sinYaw; - sp54 = SQ(cosPitchSinYaw); - sp4C = (cosPitchSinYaw * sinPitch) * ((void)0, temp_f14); - cosPitchcosYaw = cosPitch * cosYaw; - temp_f4_2 = ((1.0f - sp54) * cosNegRoll) + sp54; - cosPitchCosYawSinRoll = cosPitchcosYaw * sinNegRoll; - temp_f6 = (cosPitchcosYaw * cosPitchSinYaw) * ((void)0, temp_f14); - temp_f10_2 = sinPitch * sinNegRoll; - spA4.x = ((negSinPitchSinYaw * temp_f4_2) + (cosPitch * (sp4C - cosPitchCosYawSinRoll))) + - (negSinPitchCosYaw * (temp_f6 + temp_f10_2)); - sp54 = SQ(sinPitch); - temp_f4_2 = (sinPitch * cosPitchcosYaw) * ((void)0, temp_f14); - temp_f8_3 = cosPitchSinYaw * sinNegRoll; - temp_f8 = sp4C + cosPitchCosYawSinRoll; - spA4.y = ((negSinPitchSinYaw * temp_f8) + (cosPitch * (((1.0f - sp54) * cosNegRoll) + sp54))) + - (negSinPitchCosYaw * (temp_f4_2 - temp_f8_3)); - temp_f8_2 = temp_f6 - temp_f10_2; - spA4.z = ((negSinPitchSinYaw * temp_f8_2) + (cosPitch * (temp_f4_2 + temp_f8_3))) + - (negSinPitchCosYaw * (((1.0f - SQ(cosPitchcosYaw)) * cosNegRoll) + SQ(cosPitchcosYaw))); - *dest = spA4; - return dest; + // Axis to roll around + u.x = cosP * sinY; + u.y = sinP; + u.z = cosP * cosY; + + // Up without roll + baseUp.x = -sinP * sinY; + baseUp.y = cosP; + baseUp.z = -sinP * cosY; + + // Matrix to apply the roll to the Up vector without roll + rollMtxRow1.x = ((1.0f - SQ(u.x)) * cosR) + SQ(u.x); + rollMtxRow1.y = ((1.0f - cosR) * (u.x * u.y)) - (u.z * sinR); + rollMtxRow1.z = ((1.0f - cosR) * (u.z * u.x)) + (u.y * sinR); + + rollMtxRow2.x = ((1.0f - cosR) * (u.x * u.y)) + (u.z * sinR); + rollMtxRow2.y = ((1.0f - SQ(u.y)) * cosR) + SQ(u.y); + rollMtxRow2.z = ((1.0f - cosR) * (u.y * u.z)) - (u.x * sinR); + + rollMtxRow3.x = ((1.0f - cosR) * (u.z * u.x)) - (u.y * sinR); + rollMtxRow3.y = ((1.0f - cosR) * (u.y * u.z)) + (u.x * sinR); + rollMtxRow3.z = ((1.0f - SQ(u.z)) * cosR) + SQ(u.z); + + // rollMtx * baseUp + up.x = DOTXYZ(baseUp, rollMtxRow1); + up.y = DOTXYZ(baseUp, rollMtxRow2); + up.z = DOTXYZ(baseUp, rollMtxRow3); + + *viewUp = up; + + return viewUp; } char* DbCamera_SetTextValue(s16 value, char* str, u8 endIdx) { diff --git a/src/code/sys_math.c b/src/code/sys_math.c index 0a85d5cf61..f19719bb95 100644 --- a/src/code/sys_math.c +++ b/src/code/sys_math.c @@ -38,10 +38,18 @@ f32 Math_PowF(f32 base, s32 exp) { return ret; } +/** + * @param angle radians + * @return sin(angle) + */ f32 Math_SinF(f32 angle) { return sins((s16)(angle * (0x7FFF / M_PI))) * SHT_MINV; } +/** + * @param angle radians + * @return cos(angle) + */ f32 Math_CosF(f32 angle) { return coss((s16)(angle * (0x7FFF / M_PI))) * SHT_MINV; } diff --git a/src/code/sys_math_atan.c b/src/code/sys_math_atan.c index 4e346da4ec..efbe8a2055 100644 --- a/src/code/sys_math_atan.c +++ b/src/code/sys_math_atan.c @@ -1,6 +1,6 @@ #include "global.h" -static u16 sATan2Tbl[] = { +static u16 sAtan2Tbl[] = { 0x0000, 0x000A, 0x0014, 0x001F, 0x0029, 0x0033, 0x003D, 0x0047, 0x0051, 0x005C, 0x0066, 0x0070, 0x007A, 0x0084, 0x008F, 0x0099, 0x00A3, 0x00AD, 0x00B7, 0x00C2, 0x00CC, 0x00D6, 0x00E0, 0x00EA, 0x00F4, 0x00FF, 0x0109, 0x0113, 0x011D, 0x0127, 0x0131, 0x013C, 0x0146, 0x0150, 0x015A, 0x0164, 0x016F, 0x0179, 0x0183, 0x018D, 0x0197, 0x01A1, @@ -77,24 +77,34 @@ static u16 sATan2Tbl[] = { 0x1FF6, 0x1FFB, 0x2000, }; -u16 Math_GetAtan2Tbl(f32 x, f32 y) { +/** + * @param y must be >= 0 and <= x + * @param x must be >= 0 + * @return arctan(y/x) as binang, in [0,0x2000] range + */ +u16 Math_GetAtan2Tbl(f32 y, f32 x) { u16 ret; - if (y == 0.0f) { - ret = sATan2Tbl[0]; + if (x == 0.0f) { + ret = sAtan2Tbl[0]; } else { - s32 tblIdx = ((x / y) * 1024.0f) + 0.5f; + s32 tblIdx = ((y / x) * 1024.0f) + 0.5f; - if (tblIdx >= ARRAY_COUNT(sATan2Tbl)) { - ret = sATan2Tbl[0]; + if (tblIdx >= ARRAY_COUNT(sAtan2Tbl)) { + ret = sAtan2Tbl[0]; } else { - ret = sATan2Tbl[tblIdx]; + ret = sAtan2Tbl[tblIdx]; } } return ret; } +/** + * @return angle to (x,y) from vector (1,0) around (0,0) as binang, in [-0x8000,0x7FFF] range + * + * @note The arguments are (x,y), which is different from atan2's (y,x) + */ s16 Math_Atan2S(f32 x, f32 y) { s32 ret; @@ -107,7 +117,7 @@ s16 Math_Atan2S(f32 x, f32 y) { } } else { if (-x < y) { - ret = Math_GetAtan2Tbl(-x, y) + 0x4000; + ret = 0x4000 + Math_GetAtan2Tbl(-x, y); } else { ret = 0x8000 - Math_GetAtan2Tbl(y, -x); } @@ -115,21 +125,27 @@ s16 Math_Atan2S(f32 x, f32 y) { } else { if (x < 0.0f) { if (-y <= -x) { - ret = Math_GetAtan2Tbl(-y, -x) + 0x8000; + ret = 0x8000 + Math_GetAtan2Tbl(-y, -x); } else { ret = 0xC000 - Math_GetAtan2Tbl(-x, -y); } } else { if (x < -y) { - ret = Math_GetAtan2Tbl(x, -y) + 0xC000; + ret = 0xC000 + Math_GetAtan2Tbl(x, -y); } else { ret = -Math_GetAtan2Tbl(-y, x); } } } - return ret; + + return (s16)ret; } +/** + * @return angle to (x,y) from vector (1,0) around (0,0) in radians, in [-pi,pi) range + * + * @note The arguments are (x,y), which is different from atan2's (y,x) + */ f32 Math_Atan2F(f32 x, f32 y) { return BINANG_TO_RAD(Math_Atan2S(x, y)); } diff --git a/src/code/sys_matrix.c b/src/code/sys_matrix.c index d4b457ef69..f58872d07b 100644 --- a/src/code/sys_matrix.c +++ b/src/code/sys_matrix.c @@ -1,12 +1,12 @@ #include "global.h" // clang-format off -Mtx gMtxClear = { - 65536, 0, 1, 0, - 0, 65536, 0, 1, - 0, 0, 0, 0, - 0, 0, 0, 0, -}; +Mtx gMtxClear = gdSPDefMtx( + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f +); MtxF gMtxFClear = { 1.0f, 0.0f, 0.0f, 0.0f, diff --git a/src/code/ucode_disas.c b/src/code/ucode_disas.c index 539e290f3e..bd3e8662a9 100644 --- a/src/code/ucode_disas.c +++ b/src/code/ucode_disas.c @@ -1,5 +1,7 @@ #include "global.h" +typedef void (*UcodeDisasCallback)(UCodeDisas*, u32); + #define F3DZEX_CONST(name) \ { name, #name } #define F3DZEX_FLAG(set, unset) \ @@ -17,8 +19,8 @@ if (this->enableLog) \ osSyncPrintf -void* UCodeDisas_TranslateAddr(UCodeDisas* this, u32 addr) { - u32 physical = this->segments[SEGMENT_NUMBER(addr)] + SEGMENT_OFFSET(addr); +void* UCodeDisas_TranslateAddr(UCodeDisas* this, uintptr_t addr) { + uintptr_t physical = this->segments[SEGMENT_NUMBER(addr)] + SEGMENT_OFFSET(addr); return PHYSICAL_TO_VIRTUAL(physical); } @@ -38,61 +40,82 @@ F3dzexFlag sUCodeDisasMtxFlags[] = { F3DZEX_FLAG(G_MTX_PUSH, G_MTX_NOPUSH), }; -const char* UCodeDisas_ParseCombineColor(u32 value, u32 idx) { +typedef enum { COMBINER_A = 1, COMBINER_B, COMBINER_C, COMBINER_D } CombinerArg; + +const char* UCodeDisas_GetCombineColorName(u32 value, u32 arg) { const char* ret = "?"; switch (value) { case G_CCMUX_COMBINED: ret = "COMBINED"; break; + case G_CCMUX_TEXEL0: ret = "TEXEL0"; break; + case G_CCMUX_TEXEL1: ret = "TEXEL1"; break; + case G_CCMUX_PRIMITIVE: ret = "PRIMITIVE"; break; + case G_CCMUX_SHADE: ret = "SHADE"; break; + case G_CCMUX_ENVIRONMENT: ret = "ENVIRONMENT"; break; - case 6: - ret = (idx == 2) ? "CENTER" : (idx == 3) ? "SCALE" : "1"; + + case 6: // G_CCMUX_CENTER, G_CCMUX_SCALE, G_CCMUX_1 + ret = (arg == COMBINER_B) ? "CENTER" : (arg == COMBINER_C) ? "SCALE" : "1"; break; - case 7: - ret = (idx == 1) ? "NOISE" : (idx == 2) ? "K4" : (idx == 3) ? "COMBINED_ALPHA" : "0"; + + case 7: // G_CCMUX_NOISE, G_CCMUX_K4, G_CCMUX_COMBINED_ALPHA, G_CCMUX_0 + ret = (arg == COMBINER_A) ? "NOISE" + : (arg == COMBINER_B) ? "K4" + : (arg == COMBINER_C) ? "COMBINED_ALPHA" + : "0"; break; + default: - if (idx == 3) { + if (arg == COMBINER_C) { switch (value) { case G_CCMUX_TEXEL0_ALPHA: ret = "TEXEL0_ALPHA"; break; + case G_CCMUX_TEXEL1_ALPHA: ret = "TEXEL1_ALPHA"; break; + case G_CCMUX_PRIMITIVE_ALPHA: ret = "PRIMITIVE_ALPHA"; break; + case G_CCMUX_SHADE_ALPHA: ret = "SHADE_ALPHA"; break; + case G_CCMUX_ENV_ALPHA: ret = "ENV_ALPHA"; break; + case G_CCMUX_LOD_FRACTION: ret = "LOD_FRACTION"; break; + case G_CCMUX_PRIM_LOD_FRAC: ret = "PRIM_LOD_FRAC"; break; + case G_CCMUX_K5: ret = "K5"; break; + default: ret = "0"; break; @@ -104,30 +127,38 @@ const char* UCodeDisas_ParseCombineColor(u32 value, u32 idx) { return ret; } -const char* UCodeDisas_ParseCombineAlpha(u32 value, u32 idx) { +const char* UCodeDisas_GetCombineAlphaName(u32 value, u32 arg) { const char* ret = "?"; + switch (value) { - case 0: - ret = (idx == 3) ? "LOD_FRACTION" : "COMBINED"; + case 0: // G_ACMUX_LOD_FRACTION, G_ACMUX_COMBINED + ret = (arg == COMBINER_C) ? "LOD_FRACTION" : "COMBINED"; break; + case G_ACMUX_TEXEL0: ret = "TEXEL0"; break; + case G_ACMUX_TEXEL1: ret = "TEXEL1"; break; + case G_ACMUX_PRIMITIVE: ret = "PRIMITIVE"; break; + case G_ACMUX_SHADE: ret = "SHADE"; break; + case G_ACMUX_ENVIRONMENT: ret = "ENVIRONMENT"; break; - case 6: - ret = (idx == 3) ? "PRIM_LOD_FRAC" : "1"; + + case 6: // G_ACMUX_PRIM_LOD_FRAC, G_ACMUX_1 + ret = (arg == COMBINER_C) ? "PRIM_LOD_FRAC" : "1"; break; + case G_ACMUX_0: ret = "0"; break; @@ -162,7 +193,7 @@ void UCodeDisas_SetCurUCodeImpl(UCodeDisas* this, void* ptr) { } } -void UCodeDisas_ParseGeometryMode(UCodeDisas* this, u32 mode) { +void UCodeDisas_PrintGeometryMode(UCodeDisas* this, u32 mode) { u32 first = true; s32 i; @@ -181,7 +212,7 @@ void UCodeDisas_ParseGeometryMode(UCodeDisas* this, u32 mode) { } } -void UCodeDisas_ParseRenderMode(UCodeDisas* this, u32 mode) { +void UCodeDisas_PrintRenderMode(UCodeDisas* this, u32 mode) { static F3dzexRenderMode sUCodeDisasRenderModeFlags[] = { F3DZEX_RENDERMODE(AA_EN, 0x8), F3DZEX_RENDERMODE(Z_CMP, 0x10), @@ -200,7 +231,7 @@ void UCodeDisas_ParseRenderMode(UCodeDisas* this, u32 mode) { F3DZEX_RENDERMODE(ALPHA_CVG_SEL, 0x2000), F3DZEX_RENDERMODE(FORCE_BL, 0x4000), }; - static const char* D_8012DDDC[4][4] = { + static const char* sBlenderInputNames[4][4] = { { "G_BL_CLR_IN", "G_BL_CLR_MEM", "G_BL_CLR_BL", "G_BL_CLR_FOG" }, { "G_BL_A_IN", "G_BL_A_FOG", "G_BL_A_SHADE", "G_BL_0" }, { "G_BL_CLR_IN", "G_BL_CLR_MEM", "G_BL_CLR_BL", "G_BL_CLR_FOG" }, @@ -224,18 +255,19 @@ void UCodeDisas_ParseRenderMode(UCodeDisas* this, u32 mode) { // clang-format off if (this->enableLog == 0) {} else { osSyncPrintf("\nGBL_c1(%s, %s, %s, %s)|", - D_8012DDDC[0][a >> 12 & 3], D_8012DDDC[1][a >> 8 & 3], D_8012DDDC[2][a >> 4 & 3], D_8012DDDC[3][a >> 0 & 3]); + sBlenderInputNames[0][a >> 12 & 3], sBlenderInputNames[1][a >> 8 & 3], sBlenderInputNames[2][a >> 4 & 3], sBlenderInputNames[3][a >> 0 & 3]); } // clang-format on if (this->enableLog) { - osSyncPrintf("\nGBL_c2(%s, %s, %s, %s)", D_8012DDDC[0][b >> 12 & 3], D_8012DDDC[1][b >> 8 & 3], - D_8012DDDC[2][b >> 4 & 3], D_8012DDDC[3][b >> 0 & 3]); + osSyncPrintf("\nGBL_c2(%s, %s, %s, %s)", sBlenderInputNames[0][b >> 12 & 3], sBlenderInputNames[1][b >> 8 & 3], + sBlenderInputNames[2][b >> 4 & 3], sBlenderInputNames[3][b >> 0 & 3]); } } void UCodeDisas_PrintVertices(UCodeDisas* this, Vtx* vtx, s32 count, s32 start) { s32 i; + for (i = 0; i < count; i++) { if (this->geometryMode & G_LIGHTING) { DISAS_LOG("\n{{%6d, %6d, %6d, %d, %6d, %6d, %3d, %3d, %3d, %3d}}, /* vc%d */", vtx->n.ob[0], vtx->n.ob[1], @@ -252,225 +284,32 @@ void UCodeDisas_PrintVertices(UCodeDisas* this, Vtx* vtx, s32 count, s32 start) } } -// Todo: clean this up - -typedef struct { - s8 cmd; - u8 v0; - u8 v1; - u8 wd; +void UCodeDisas_Disassemble(UCodeDisas* this, Gfx* ptr) { u32 pad; -} Gline3DFix; - -typedef struct { - int cmd : 8; - u32 pad : 4; - u32 numv : 8; - s32 pad2 : 4; - u8 vbidx; -} Gvtx; - -typedef struct { - u8 pad : 8; - u8 v0 : 8; - u8 v1 : 8; - u8 v2 : 8; -} Gtrimod; - -typedef struct { - int cmd : 8; - int pad : 24; - Gtrimod tri; -} Gtri1; - -typedef struct { - Gtrimod tri1; - Gtrimod tri2; -} Gtri2; - -typedef struct { - u8 pad : 8; - u8 v0 : 8; - u8 v1 : 8; - u8 v2 : 8; - u8 pad1 : 8; - u8 pad2 : 8; - u8 pad3 : 8; - u8 v3 : 8; -} Gquadmod; - -typedef struct { - u16 pad; - u16 vstart; - u16 pad2; - u16 vend; -} Gcull; - -typedef struct { - u16 pad; - u16 vstart; - u16 pad2; - u16 vend; -} Gbranchz; - -typedef struct { - int cmd : 8; - u8 pad; - u8 prim_min_level; - u8 prim_level; - u8 r; - u8 g; - u8 b; - u8 a; -} GsetcolorMod; - -typedef struct { - u8 cmd; - char pad[3]; - u16 z; - u16 d; -} Gsetprimdepth; - -typedef struct { - u8 cmd; - u8 type; - u16 len; - union { - u32 u32; - f32 f32; - } value; -} Gnoop; - -typedef struct { - u8 cmd; - u8 pad[2]; - u8 params; - u32 addr; -} Gmatrix; - -typedef struct { - u8 cmd; - u32 a : 4; - u32 c : 5; - u32 z : 3; - u32 x : 3; - u32 e : 4; - u32 g : 5; - u32 b : 4; - u32 f : 4; - u32 v : 3; - u32 t : 3; - u32 d : 3; - u32 y : 3; - u32 w : 3; - u32 h : 3; - u32 u : 3; - u32 s : 3; -} GsetcombineMod; - -typedef struct { - u32 cmd : 8; - u32 pad0 : 8; - u32 sft : 8; - u32 len : 8; - u32 data : 32; -} GsetothermodeMod; - -typedef struct { - s32 cmd : 8; - u32 offset : 16; - u32 index : 8; - u32 data; -} Gmovewd; - -typedef struct { - s32 cmd : 8; - u32 size : 8; - u32 offset : 8; - u32 index : 8; - u32 data; -} Gmovemem; - -typedef struct { - u8 cmd : 8; - u8 lodscale : 8; - u8 pad : 2; - u8 level : 3; - u8 tile : 3; - - unsigned char on; - unsigned short s; - unsigned short t; -} Gtexturemod; - -typedef struct { - int cmd : 8; - int pad1 : 24; - u32 param : 26; - unsigned char pad3 : 6; -} Gpopmtxmod; - -typedef union { - Gwords words; - Gnoop noop; - Gmatrix matrix; - Gdma dma; - Gtri1 tri1; - Gtri2 tri2; - Gquadmod quad; - Gcull cull; - Gline3D line; - Gline3DFix linefix; - Gmovewd movewd; - Gmovemem movemem; - Gpopmtx popmtx; - Gpopmtxmod popmtxmod; - Gsegment segment; - GsetothermodeH setothermodeH; - GsetothermodeL setothermodeL; - GsetothermodeMod setothermode; - Gtexture texture; - Gtexturemod texmod; - Gperspnorm perspnorm; - Gsetimg setimg; - GsetcombineMod setcombine; - GsetcolorMod setcolor; // mod - Gfillrect fillrect; /* use for setscissor also */ - Gsettile settile; - Gloadtile loadtile; /* use for loadblock also, th is dxt */ - Gsettilesize settilesize; - Gloadtlut loadtlut; - Gsetprimdepth setprimdepth; - Gvtx vtx; - long long int force_structure_alignment; -} GfxMod; - -void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { - u32 pad; - u32 addr; + uintptr_t addr; u32 rdpHalf; u16 linkDlLow; u8 sid; u8 cmd; - s32 i0; + s32 i; u32 exit; - GfxMod curGfx[1]; + Gfx curGfx[1]; exit = false; while (!exit) { this->dlCnt++; - ptr = UCodeDisas_TranslateAddr(this, (u32)ptr); + ptr = UCodeDisas_TranslateAddr(this, (uintptr_t)ptr); DISAS_LOG("%08x:", ptr); *curGfx = *ptr; - cmd = curGfx->dma.cmd; - addr = (u32)UCodeDisas_TranslateAddr(this, curGfx->dma.addr); + cmd = curGfx->noop.cmd; + addr = (uintptr_t)UCodeDisas_TranslateAddr(this, (uintptr_t)curGfx->noop.value.addr); DISAS_LOG("%08x-%08x:", curGfx->words.w0, curGfx->words.w1); - for (i0 = 0; i0 < this->dlDepth; i0++) { + for (i = 0; i < this->dlDepth; i++) { DISAS_LOG(" "); } @@ -483,15 +322,15 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { Gdma dma = ptr->dma; switch (dma.par) { - case 0: { + case G_DL_PUSH: { DISAS_LOG("gsSPDisplayList(0x%08x),", dma.addr); this->dlStack[this->dlDepth++] = (Gfx*)(ptr + 1); - ptr = (GfxMod*)addr - 1; + ptr = (Gfx*)addr - 1; } break; - case 1: { + case G_DL_NOPUSH: { DISAS_LOG("gsSPBranchList(0x%08x),", dma.addr); - ptr = (GfxMod*)addr - 1; + ptr = (Gfx*)addr - 1; } break; } } break; @@ -513,7 +352,7 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { } break; case G_LOAD_UCODE: { - if (curGfx->dma.len == 0x7FF) { + if (curGfx->dma.len == SP_UCODE_DATA_SIZE - 1) { DISAS_LOG("gsSPLoadUcode(0x%08x, 0x%08x),", curGfx->dma.addr, rdpHalf); } else { DISAS_LOG("gsSPLoadUcodeEx(0x%08x, 0x%08x, 0x%05x),", curGfx->dma.addr, rdpHalf, @@ -528,7 +367,7 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { if (this->dlDepth <= 0) { exit = true; } else { - ptr = (GfxMod*)this->dlStack[--this->dlDepth] - 1; + ptr = this->dlStack[--this->dlDepth] - 1; } } break; @@ -579,20 +418,28 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { } break; case G_SETCOMBINE: { - GsetcombineMod setcombine = ptr->setcombine; + Gsetcombine setcombine = ptr->setcombine; DISAS_LOG("gsDPSetCombineLERP(%s,%s,%s,%s, %s,%s,%s,%s, %s,%s,%s,%s, %s,%s,%s,%s),", - UCodeDisas_ParseCombineColor(setcombine.a, 1), UCodeDisas_ParseCombineColor(setcombine.b, 2), - UCodeDisas_ParseCombineColor(setcombine.c, 3), UCodeDisas_ParseCombineColor(setcombine.d, 4), + UCodeDisas_GetCombineColorName(setcombine.a0, COMBINER_A), + UCodeDisas_GetCombineColorName(setcombine.b0, COMBINER_B), + UCodeDisas_GetCombineColorName(setcombine.c0, COMBINER_C), + UCodeDisas_GetCombineColorName(setcombine.d0, COMBINER_D), - UCodeDisas_ParseCombineAlpha(setcombine.z, 1), UCodeDisas_ParseCombineAlpha(setcombine.y, 2), - UCodeDisas_ParseCombineAlpha(setcombine.x, 3), UCodeDisas_ParseCombineAlpha(setcombine.w, 4), + UCodeDisas_GetCombineAlphaName(setcombine.Aa0, COMBINER_A), + UCodeDisas_GetCombineAlphaName(setcombine.Ab0, COMBINER_B), + UCodeDisas_GetCombineAlphaName(setcombine.Ac0, COMBINER_C), + UCodeDisas_GetCombineAlphaName(setcombine.Ad0, COMBINER_D), - UCodeDisas_ParseCombineColor(setcombine.e, 1), UCodeDisas_ParseCombineColor(setcombine.f, 2), - UCodeDisas_ParseCombineColor(setcombine.g, 3), UCodeDisas_ParseCombineColor(setcombine.h, 4), + UCodeDisas_GetCombineColorName(setcombine.a1, COMBINER_A), + UCodeDisas_GetCombineColorName(setcombine.b1, COMBINER_B), + UCodeDisas_GetCombineColorName(setcombine.c1, COMBINER_C), + UCodeDisas_GetCombineColorName(setcombine.d1, COMBINER_D), - UCodeDisas_ParseCombineAlpha(setcombine.v, 1), UCodeDisas_ParseCombineAlpha(setcombine.u, 2), - UCodeDisas_ParseCombineAlpha(setcombine.t, 3), UCodeDisas_ParseCombineAlpha(setcombine.s, 4)); + UCodeDisas_GetCombineAlphaName(setcombine.Aa1, COMBINER_A), + UCodeDisas_GetCombineAlphaName(setcombine.Ab1, COMBINER_B), + UCodeDisas_GetCombineAlphaName(setcombine.Ac1, COMBINER_C), + UCodeDisas_GetCombineAlphaName(setcombine.Ad1, COMBINER_D)); if (this->pipeSyncRequired) { DISAS_LOG("### PipeSyncが必要です。\n"); @@ -624,34 +471,33 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { -1), }; - u32 len = curGfx->setothermode.len + 1; - u32 sft = (-curGfx->setothermode.sft - len) + 32; - u32 s2 = curGfx->setothermode.data * 1; - u32 i1; - u32 i2; + u32 len = curGfx->setothermodeH.len + 1; + u32 sft = (-curGfx->setothermodeH.sft - len) + 32; + u32 s2 = curGfx->setothermodeH.data * 1; + u32 j; + u32 k; - for (i1 = 0; i1 < ARRAY_COUNTU(sUCodeDisasModeHMacros); i1++) { - if (sft == sUCodeDisasModeHMacros[i1].shift) { - for (i2 = 0; i2 < 4; i2++) { - if (s2 == sUCodeDisasModeHMacros[i1].values[i2].value) { - DISAS_LOG("gsDP%s(%s),", sUCodeDisasModeHMacros[i1].name, - sUCodeDisasModeHMacros[i1].values[i2].name); - goto block_1; + for (j = 0; j < ARRAY_COUNTU(sUCodeDisasModeHMacros); j++) { + if (sft == sUCodeDisasModeHMacros[j].shift) { + for (k = 0; k < ARRAY_COUNTU(sUCodeDisasModeHMacros[j].values); k++) { + if (s2 == sUCodeDisasModeHMacros[j].values[k].value) { + DISAS_LOG("gsDP%s(%s),", sUCodeDisasModeHMacros[j].name, + sUCodeDisasModeHMacros[j].values[k].name); + goto found_othermode_hi_macro; } } } } DISAS_LOG("gsSPSetOtherModeH(%d, %d, 0x%08x),", sft, len, s2); - block_1: - this->modeH &= (((1 - (1 << len)) << sft) - 1); + found_othermode_hi_macro: + this->modeH &= ((1 - (1 << len)) << sft) - 1; this->modeH |= s2; if (this->pipeSyncRequired) { DISAS_LOG("### PipeSyncが必要です。\n"); this->syncErr++; } - } break; case G_SETOTHERMODE_L: { @@ -661,24 +507,24 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { F3DZEX_SETRENDERMACRO("gsDPSetDepthSource", G_MDSFT_ZSRCSEL, 1, G_ZS_PIXEL, G_ZS_PRIM, -1, -1), }; - u32 len = curGfx->setothermode.len + 1; - u32 sft = (-curGfx->setothermode.sft - len) + 32; - u32 s2 = curGfx->setothermode.data * 1; - u32 i1; - u32 i2; + u32 len = curGfx->setothermodeL.len + 1; + u32 sft = (-curGfx->setothermodeL.sft - len) + 32; + u32 s2 = curGfx->setothermodeL.data * 1; + u32 j; + u32 k; if (sft == G_MDSFT_RENDERMODE) { DISAS_LOG("\ngsDPSetRenderBlender("); - UCodeDisas_ParseRenderMode(this, s2); + UCodeDisas_PrintRenderMode(this, s2); DISAS_LOG("\n),"); } else { - for (i1 = 0; i1 * 1 < ARRAY_COUNTU(sUCodeDisasModeLMacros); i1++) { - if (sft == sUCodeDisasModeLMacros[i1].shift) { - for (i2 = 0; i2 < 4; i2++) { - if (s2 == sUCodeDisasModeLMacros[i1].values[i2].value) { - DISAS_LOG("gsDP%s(%s),", sUCodeDisasModeLMacros[i1].name, - sUCodeDisasModeLMacros[i1].values[i2].name); - goto block_2; + for (j = 0; j * 1 < ARRAY_COUNTU(sUCodeDisasModeLMacros); j++) { + if (sft == sUCodeDisasModeLMacros[j].shift) { + for (k = 0; k < ARRAY_COUNTU(sUCodeDisasModeLMacros[j].values); k++) { + if (s2 == sUCodeDisasModeLMacros[j].values[k].value) { + DISAS_LOG("gsDP%s(%s),", sUCodeDisasModeLMacros[j].name, + sUCodeDisasModeLMacros[j].values[k].name); + goto found_othermode_lo_macro; } } } @@ -686,7 +532,7 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { DISAS_LOG("gsSPSetOtherModeL(%d, %d, 0x%08x),", sft, len, s2); } - block_2: + found_othermode_lo_macro: this->modeL &= (((1 - (1 << len)) << sft) - 1); this->modeL |= s2; @@ -758,7 +604,7 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { } break; case G_SETZIMG: { - DISAS_LOG("gsDPSetDepthImage(0x%08x(0x%08x)),", curGfx->words.w1, addr); + DISAS_LOG("gsDPSetDepthImage(0x%08x(0x%08x)),", curGfx->setimg.dram, addr); if (this->pipeSyncRequired) { DISAS_LOG("### PipeSyncが必要です。\n"); @@ -814,7 +660,7 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { } break; case G_SETFILLCOLOR: { - DISAS_LOG("gsDPSetFillColor(0x%08x),", curGfx->words.w1); + DISAS_LOG("gsDPSetFillColor(0x%08x),", curGfx->setcolor.color); if (this->pipeSyncRequired) { DISAS_LOG("### PipeSyncが必要です。\n"); @@ -823,7 +669,7 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { } break; case G_SETPRIMDEPTH: { - DISAS_LOG("gsDPSetPrimDepth(%d, %d),", curGfx->setprimdepth.z, curGfx->setprimdepth.d); + DISAS_LOG("gsDPSetPrimDepth(%d, %d),", curGfx->setprimdepth.z, curGfx->setprimdepth.dz); if (this->pipeSyncRequired) { DISAS_LOG("### PipeSyncが必要です。\n"); @@ -872,19 +718,19 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { } break; case 1: { - DISAS_LOG("count_gsDPNoOpHere([%s:%d]),", curGfx->noop.value.u32, curGfx->noop.len); + DISAS_LOG("count_gsDPNoOpHere([%s:%d]),", curGfx->noop.value.str, curGfx->noop.len); } break; case 7: { - DISAS_LOG("count_gsDPNoOpOpenDisp([%s:%d]),", curGfx->noop.value.u32, curGfx->noop.len); + DISAS_LOG("count_gsDPNoOpOpenDisp([%s:%d]),", curGfx->noop.value.str, curGfx->noop.len); } break; case 8: { - DISAS_LOG("count_gsDPNoOpCloseDisp([%s:%d]),", curGfx->noop.value.u32, curGfx->noop.len); + DISAS_LOG("count_gsDPNoOpCloseDisp([%s:%d]),", curGfx->noop.value.str, curGfx->noop.len); } break; case 2: { - DISAS_LOG("count_gsDPNoOpString(%c%s%c, %d),", '"', curGfx->noop.value.u32, '"', + DISAS_LOG("count_gsDPNoOpString(%c%s%c, %d),", '"', curGfx->noop.value.str, '"', curGfx->noop.len); } break; @@ -906,9 +752,9 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { } break; case 6: { - /*! @bug arguments are not printed */ + //! @bug arguments are not printed DISAS_LOG("count_gsDPNoOpCallBack(%08x,%d),"); - ((void (*)(UCodeDisas*, u32))curGfx->noop.value.u32)(this, curGfx->noop.len); + ((UcodeDisasCallback)curGfx->noop.value.callback)(this, curGfx->noop.len); } break; default: { @@ -924,27 +770,27 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { case UCODE_UNK: { switch (cmd) { case G_MTX: { - Gmatrix gmtx = ptr->matrix; + Gdma2 gmtx = ptr->dma2; u32 params; - MtxF mtx; - s32 i1 = 0; + MtxF mtxF; + s32 j = 0; DISAS_LOG("gsSPMatrix(0x%08x(%08x), 0", gmtx.addr, addr); - params = (gmtx.params ^ G_MTX_PUSH); + params = gmtx.par ^ G_MTX_PUSH; - for (; i1 != ARRAY_COUNT(sUCodeDisasMtxFlags); i1++) { - DISAS_LOG("|%s", (sUCodeDisasMtxFlags[i1].value & params) - ? sUCodeDisasMtxFlags[i1].setName - : sUCodeDisasMtxFlags[i1].unsetName); + for (; j != ARRAY_COUNT(sUCodeDisasMtxFlags); j++) { + DISAS_LOG("|%s", (sUCodeDisasMtxFlags[j].value & params) + ? sUCodeDisasMtxFlags[j].setName + : sUCodeDisasMtxFlags[j].unsetName); } - DISAS_LOG("),", gmtx.addr); /*! @bug gmtx.addr shouldn't be here*/ + DISAS_LOG("),", gmtx.addr); //! @bug gmtx.addr shouldn't be here if (this->enableLog >= 2) { - MtxConv_L2F(&mtx, (Mtx*)addr); + MtxConv_L2F(&mtxF, (Mtx*)addr); DISAS_LOG("\n"); - /*! @bug %.04x.%04x is a typo, should be %04x.%04x */ + //! @bug %.04x.%04x is a typo, should be %04x.%04x // clang-format off DISAS_LOG( "/ %04x.%04x %04x.%04x %04x.%04x %.04x.%04x \\/ %12.6f %12.6f %12.6f %12.6f \\\n" @@ -955,22 +801,22 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { ((Mtx*)addr)->intPart[1][0], ((Mtx*)addr)->fracPart[1][0], ((Mtx*)addr)->intPart[2][0], ((Mtx*)addr)->fracPart[2][0], ((Mtx*)addr)->intPart[3][0], ((Mtx*)addr)->fracPart[3][0], - mtx.mf[0][0], mtx.mf[1][0], mtx.mf[2][0], mtx.mf[3][0], + mtxF.mf[0][0], mtxF.mf[1][0], mtxF.mf[2][0], mtxF.mf[3][0], ((Mtx*)addr)->intPart[0][1], ((Mtx*)addr)->fracPart[0][1], ((Mtx*)addr)->intPart[1][1], ((Mtx*)addr)->fracPart[1][1], ((Mtx*)addr)->intPart[2][1], ((Mtx*)addr)->fracPart[2][1], ((Mtx*)addr)->intPart[3][1], ((Mtx*)addr)->fracPart[3][1], - mtx.mf[0][1], mtx.mf[1][1], mtx.mf[2][1], mtx.mf[3][1], + mtxF.mf[0][1], mtxF.mf[1][1], mtxF.mf[2][1], mtxF.mf[3][1], ((Mtx*)addr)->intPart[0][2], ((Mtx*)addr)->fracPart[0][2], ((Mtx*)addr)->intPart[1][2], ((Mtx*)addr)->fracPart[1][2], ((Mtx*)addr)->intPart[2][2], ((Mtx*)addr)->fracPart[2][2], ((Mtx*)addr)->intPart[3][2], ((Mtx*)addr)->fracPart[3][2], - mtx.mf[0][2], mtx.mf[1][2], mtx.mf[2][2], mtx.mf[3][2], + mtxF.mf[0][2], mtxF.mf[1][2], mtxF.mf[2][2], mtxF.mf[3][2], ((Mtx*)addr)->intPart[0][3], ((Mtx*)addr)->fracPart[0][3], ((Mtx*)addr)->intPart[1][3], ((Mtx*)addr)->fracPart[1][3], ((Mtx*)addr)->intPart[2][3], ((Mtx*)addr)->fracPart[2][3], ((Mtx*)addr)->intPart[3][3], ((Mtx*)addr)->fracPart[3][3], - mtx.mf[0][3], mtx.mf[1][3], mtx.mf[2][3], mtx.mf[3][3]); + mtxF.mf[0][3], mtxF.mf[1][3], mtxF.mf[2][3], mtxF.mf[3][3]); // clang-format on } } break; @@ -981,9 +827,9 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { numv >>= 12; numv &= 0xFF; - vbidx = (curGfx->vtx.vbidx >> 1) - numv; + vbidx = (curGfx->vtx.par >> 1) - numv; - DISAS_LOG("gsSPVertex(0x%08x(0x%08x), %d, %d),", curGfx->words.w1, addr, numv, vbidx); + DISAS_LOG("gsSPVertex(0x%08x(0x%08x), %d, %d),", curGfx->vtx.addr, addr, numv, vbidx); this->vtxCnt += numv; this->spvtxCnt++; @@ -1006,21 +852,21 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { } break; case G_TRI1: { - Gtri1 gtri = ptr->tri1; - Gtrimod tri = gtri.tri; + Gtri gtri = ptr->tri; + Tri tri = gtri.tri; - DISAS_LOG("gsSP1Triangle(%d, %d, %d),", tri.v0 / 2, tri.v1 / 2, tri.v2 / 2); + DISAS_LOG("gsSP1Triangle(%d, %d, %d),", tri.v[0] / 2, tri.v[1] / 2, tri.v[2] / 2); this->tri1Cnt++; this->pipeSyncRequired = true; } break; case G_LINE3D: { - if (curGfx->linefix.wd == 0) { - DISAS_LOG("gsSPLine3D(%d, %d),", curGfx->linefix.v0, curGfx->linefix.v1); + if (curGfx->line.wd == 0) { + DISAS_LOG("gsSPLine3D(%d, %d),", curGfx->line.v0, curGfx->line.v1); } else { - DISAS_LOG("gsSPLineW3D(%d, %d, %d),", curGfx->linefix.v0, curGfx->linefix.v1, - curGfx->linefix.wd); + DISAS_LOG("gsSPLineW3D(%d, %d, %d),", curGfx->line.v0, curGfx->line.v1, + curGfx->line.wd); } this->lineCnt++; @@ -1032,13 +878,13 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { u32 v0, v1, v2; u32 v3, v4, v5; - v0 = tri2.tri1.v0 / 2; - v1 = tri2.tri1.v1 / 2; - v2 = tri2.tri1.v2 / 2; + v0 = tri2.tri1.v[0] / 2; + v1 = tri2.tri1.v[1] / 2; + v2 = tri2.tri1.v[2] / 2; - v3 = tri2.tri2.v0 / 2; - v4 = tri2.tri2.v1 / 2; - v5 = tri2.tri2.v2 / 2; + v3 = tri2.tri2.v[0] / 2; + v4 = tri2.tri2.v[1] / 2; + v5 = tri2.tri2.v[2] / 2; DISAS_LOG("gsSP2Triangles(%d, %d, %d, 0, %d, %d, %d, 0),", v0, v1, v2, v3, v4, v5); @@ -1047,13 +893,13 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { } break; case G_QUAD: { - Gquadmod quad = ptr->quad; + Gquad quad = ptr->quad; u32 v0, v1, v2, v3; - v0 = quad.v0 / 2; - v1 = quad.v1 / 2; - v2 = quad.v2 / 2; - v3 = quad.v3 / 2; + v0 = quad.tri1.v[0] / 2; + v1 = quad.tri1.v[1] / 2; + v2 = quad.tri1.v[2] / 2; + v3 = quad.tri2.v[2] / 2; DISAS_LOG("gsSP1Quadrangle(%d, %d, %d, %d, 0),", v0, v1, v2, v3); @@ -1062,19 +908,19 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { } break; case G_CULLDL: { - DISAS_LOG("gsSPCullDisplayList(%d, %d),", (curGfx->cull.vstart) / 2, - (curGfx->cull.vend) / 2); + DISAS_LOG("gsSPCullDisplayList(%d, %d),", (curGfx->cull.vstart_x2) / 2, + (curGfx->cull.vend_x2) / 2); } break; case G_BRANCH_Z: { - addr = (u32)UCodeDisas_TranslateAddr(this, rdpHalf); + addr = (uintptr_t)UCodeDisas_TranslateAddr(this, rdpHalf); DISAS_LOG("gsSPBranchLessZraw(0x%08x(0x%08x), %d, 0x%08x),", rdpHalf, addr, (curGfx->words.w0 & 0xFFF) / 2, curGfx->words.w1); - ptr = (GfxMod*)addr - 1; + ptr = (Gfx*)addr - 1; } break; case G_TEXTURE: { - Gtexturemod texture = ptr->texmod; + Gtexture texture = ptr->texture; if (texture.lodscale == 0) { DISAS_LOG("gsSPTexture(%d, %d, %d, %d, %s),", texture.s, texture.t, texture.level, @@ -1087,12 +933,12 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { } break; case G_POPMTX: { - Gpopmtxmod popmtx = ptr->popmtxmod; + Gpopmtx popmtx = ptr->popmtx; - if (popmtx.param == 1) { + if (popmtx.param / 64 == 1) { DISAS_LOG("gsSPPopMatrix(G_MTX_MODELVIEW),"); } else { - DISAS_LOG("gsSPPopMatrixN(G_MTX_MODELVIEW, %d),", popmtx.param); + DISAS_LOG("gsSPPopMatrixN(G_MTX_MODELVIEW, %d),", popmtx.param / 64); } } break; @@ -1102,21 +948,21 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { if (clearbits == 0) { DISAS_LOG("gsSPLoadGeometryMode("); - UCodeDisas_ParseGeometryMode(this, setbits); + UCodeDisas_PrintGeometryMode(this, setbits); DISAS_LOG("),"); } else if (setbits == 0) { DISAS_LOG("gsSPClearGeometryMode("); - UCodeDisas_ParseGeometryMode(this, ~clearbits); + UCodeDisas_PrintGeometryMode(this, ~clearbits); DISAS_LOG("),"); } else if (clearbits == 0xFFFFFF) { DISAS_LOG("gsSPSetGeometryMode("); - UCodeDisas_ParseGeometryMode(this, setbits); + UCodeDisas_PrintGeometryMode(this, setbits); DISAS_LOG("),"); } else { DISAS_LOG("gsSPGeometryMode("); - UCodeDisas_ParseGeometryMode(this, ~clearbits); + UCodeDisas_PrintGeometryMode(this, ~clearbits); DISAS_LOG(", "); - UCodeDisas_ParseGeometryMode(this, setbits); + UCodeDisas_PrintGeometryMode(this, setbits); DISAS_LOG("),"); } @@ -1185,7 +1031,7 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { case G_MV_MATRIX: { DISAS_LOG("gsSPForceMatrix(0x%08x),", movemem.data); - ptr += 1; + ptr += 2 - 1; } break; case G_MV_LIGHT: { @@ -1200,7 +1046,7 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { default: { DISAS_LOG("gsSPLight(0x%08x,%d),", movemem.data, - (movemem.offset * 8 - 24) / 24); + (movemem.offset * 8 - 0x18) / 0x18); } break; } } break; @@ -1299,8 +1145,9 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) { case G_SELECT_DL: { Gdma dma = ptr->dma; - u32 dlAddr = (u32)UCodeDisas_TranslateAddr(this, (dma.len << 16) | (linkDlLow)); - u32 dmaAddr = dma.addr; + uintptr_t dlAddr = + (uintptr_t)UCodeDisas_TranslateAddr(this, (dma.len << 16) | (linkDlLow)); + uintptr_t dmaAddr = dma.addr; if (dma.par == 0) { DISAS_LOG("gsSPSelectDL(0x%08x, %d, 0x%08x, 0x%08x),", dlAddr, sid, rdpHalf, diff --git a/src/code/z_actor.c b/src/code/z_actor.c index e1f9390296..e81004620d 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1953,15 +1953,14 @@ void Actor_DisableLens(PlayState* play) { } } -// Actor_InitContext -void func_800304DC(PlayState* play, ActorContext* actorCtx, ActorEntry* actorEntry) { +void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* playerEntry) { ActorOverlay* overlayEntry; SavedSceneFlags* savedSceneFlags; s32 i; savedSceneFlags = &gSaveContext.sceneFlags[play->sceneId]; - bzero(actorCtx, sizeof(*actorCtx)); + bzero(actorCtx, sizeof(ActorContext)); ActorOverlayTable_Init(); Matrix_MtxFCopy(&play->billboardMtxF, &gMtxFClear); @@ -1983,7 +1982,7 @@ void func_800304DC(PlayState* play, ActorContext* actorCtx, ActorEntry* actorEnt actorCtx->absoluteSpace = NULL; - Actor_SpawnEntry(actorCtx, actorEntry, play); + Actor_SpawnEntry(actorCtx, playerEntry, play); func_8002C0C0(&actorCtx->targetCtx, actorCtx->actorLists[ACTORCAT_PLAYER].head, play); func_8002FA60(play); } @@ -2024,12 +2023,12 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { sp74 = NULL; unkFlag = 0; - if (play->numSetupActors != 0) { - actorEntry = &play->setupActorList[0]; - for (i = 0; i < play->numSetupActors; i++) { + if (play->numActorEntries != 0) { + actorEntry = &play->actorEntryList[0]; + for (i = 0; i < play->numActorEntries; i++) { Actor_SpawnEntry(&play->actorCtx, actorEntry++, play); } - play->numSetupActors = 0; + play->numActorEntries = 0; } if (actorCtx->unk_02 != 0) { diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 8baf648b0b..035d25706e 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -156,11 +156,11 @@ void Camera_LERPCeilVec3f(Vec3f* target, Vec3f* cur, f32 yStepScale, f32 xzStepS void func_80043ABC(Camera* camera) { camera->yawUpdateRateInv = 100.0f; - camera->pitchUpdateRateInv = R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV; - camera->rUpdateRateInv = OREG(6); - camera->xzOffsetUpdateRate = CAM_DATA_SCALED(OREG(2)); - camera->yOffsetUpdateRate = CAM_DATA_SCALED(OREG(3)); - camera->fovUpdateRate = CAM_DATA_SCALED(OREG(4)); + camera->pitchUpdateRateInv = R_CAM_PITCH_UPDATE_RATE_INV; + camera->rUpdateRateInv = R_CAM_R_UPDATE_RATE_INV; + camera->xzOffsetUpdateRate = CAM_DATA_SCALED(R_CAM_XZ_OFFSET_UPDATE_RATE); + camera->yOffsetUpdateRate = CAM_DATA_SCALED(R_CAM_Y_OFFSET_UPDATE_RATE); + camera->fovUpdateRate = CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE); } void func_80043B60(Camera* camera) { @@ -928,7 +928,8 @@ s32 Camera_CalcAtDefault(Camera* camera, VecGeo* eyeAtDir, f32 extraYOffset, s16 if (calcSlope) { posOffsetTarget.y -= OLib_ClampMaxDist( - Camera_CalcSlopeYAdj(&camera->floorNorm, playerPosRot->rot.y, eyeAtDir->yaw, OREG(9)), yOffset); + Camera_CalcSlopeYAdj(&camera->floorNorm, playerPosRot->rot.y, eyeAtDir->yaw, R_CAM_SLOPE_Y_ADJ_AMOUNT), + yOffset); } Camera_LERPCeilVec3f(&posOffsetTarget, &camera->posOffset, camera->yOffsetUpdateRate, camera->xzOffsetUpdateRate, @@ -957,7 +958,8 @@ s32 func_800458D4(Camera* camera, VecGeo* eyeAtDir, f32 arg2, f32* arg3, s16 arg posOffsetTarget.z = 0.0f; if (arg4) { - posOffsetTarget.y -= Camera_CalcSlopeYAdj(&camera->floorNorm, playerPosRot->rot.y, eyeAtDir->yaw, OREG(9)); + posOffsetTarget.y -= + Camera_CalcSlopeYAdj(&camera->floorNorm, playerPosRot->rot.y, eyeAtDir->yaw, R_CAM_SLOPE_Y_ADJ_AMOUNT); } deltaY = playerPosRot->pos.y - *arg3; @@ -1005,7 +1007,7 @@ s32 func_80045B08(Camera* camera, VecGeo* eyeAtDir, f32 yExtra, s16 arg3) { phi_f2 = -Math_CosS(playerPosRot->rot.y - eyeAtDir->yaw); } - posOffsetTarget.y -= temp_ret * phi_f2 * OREG(9); + posOffsetTarget.y -= temp_ret * phi_f2 * R_CAM_SLOPE_Y_ADJ_AMOUNT; Camera_LERPCeilVec3f(&posOffsetTarget, &camera->posOffset, camera->yOffsetUpdateRate, camera->xzOffsetUpdateRate, 0.1f); @@ -1038,7 +1040,8 @@ s32 Camera_CalcAtForParallel(Camera* camera, VecGeo* arg1, f32 yOffset, f32* arg posOffsetTarget.z = 0.0f; if (PREG(76) && arg4) { - posOffsetTarget.y -= Camera_CalcSlopeYAdj(&camera->floorNorm, playerPosRot->rot.y, arg1->yaw, OREG(9)); + posOffsetTarget.y -= + Camera_CalcSlopeYAdj(&camera->floorNorm, playerPosRot->rot.y, arg1->yaw, R_CAM_SLOPE_Y_ADJ_AMOUNT); } if (camera->playerGroundY == camera->playerPosRot.pos.y || camera->player->actor.gravity > -0.1f || @@ -1110,7 +1113,7 @@ s32 Camera_CalcAtForLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targetPos, f tmpPos0.y = playerHeight + yOffset; tmpPos0.z = 0.0f; if (PREG(76) && (flags & FLG_ADJSLOPE)) { - tmpPos0.y -= Camera_CalcSlopeYAdj(floorNorm, playerPosRot->rot.y, eyeAtDir->yaw, OREG(9)); + tmpPos0.y -= Camera_CalcSlopeYAdj(floorNorm, playerPosRot->rot.y, eyeAtDir->yaw, R_CAM_SLOPE_Y_ADJ_AMOUNT); } // tmpPos1 is player's head @@ -1219,8 +1222,8 @@ s32 Camera_CalcAtForHorse(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, f32* yP posOffsetTarget.z = 0.0f; if (calcSlope != 0) { - posOffsetTarget.y -= - Camera_CalcSlopeYAdj(&camera->floorNorm, camera->playerPosRot.rot.y, eyeAtDir->yaw, OREG(9)); + posOffsetTarget.y -= Camera_CalcSlopeYAdj(&camera->floorNorm, camera->playerPosRot.rot.y, eyeAtDir->yaw, + R_CAM_SLOPE_Y_ADJ_AMOUNT); } Camera_LERPCeilVec3f(&posOffsetTarget, &camera->posOffset, camera->yOffsetUpdateRate, camera->xzOffsetUpdateRate, @@ -1240,17 +1243,17 @@ f32 Camera_LERPClampDist(Camera* camera, f32 dist, f32 min, f32 max) { if (dist < min) { distTarget = min; - rUpdateRateInvTarget = OREG(6); + rUpdateRateInvTarget = R_CAM_R_UPDATE_RATE_INV; } else if (dist > max) { distTarget = max; - rUpdateRateInvTarget = OREG(6); + rUpdateRateInvTarget = R_CAM_R_UPDATE_RATE_INV; } else { distTarget = dist; rUpdateRateInvTarget = 1.0f; } - camera->rUpdateRateInv = - Camera_LERPCeilF(rUpdateRateInvTarget, camera->rUpdateRateInv, CAM_DATA_SCALED(OREG(25)), 0.1f); + camera->rUpdateRateInv = Camera_LERPCeilF(rUpdateRateInvTarget, camera->rUpdateRateInv, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ), 0.1f); return Camera_LERPCeilF(distTarget, camera->dist, 1.0f / camera->rUpdateRateInv, 0.2f); } @@ -1261,19 +1264,19 @@ f32 Camera_ClampDist(Camera* camera, f32 dist, f32 minDist, f32 maxDist, s16 tim if (dist < minDist) { distTarget = minDist; - rUpdateRateInvTarget = timer != 0 ? OREG(6) * 0.5f : OREG(6); + rUpdateRateInvTarget = timer != 0 ? R_CAM_R_UPDATE_RATE_INV * 0.5f : R_CAM_R_UPDATE_RATE_INV; } else if (maxDist < dist) { distTarget = maxDist; - rUpdateRateInvTarget = timer != 0 ? OREG(6) * 0.5f : OREG(6); + rUpdateRateInvTarget = timer != 0 ? R_CAM_R_UPDATE_RATE_INV * 0.5f : R_CAM_R_UPDATE_RATE_INV; } else { distTarget = dist; - rUpdateRateInvTarget = timer != 0 ? OREG(6) : 1.0f; + rUpdateRateInvTarget = timer != 0 ? R_CAM_R_UPDATE_RATE_INV : 1.0f; } - camera->rUpdateRateInv = - Camera_LERPCeilF(rUpdateRateInvTarget, camera->rUpdateRateInv, CAM_DATA_SCALED(OREG(25)), 0.1f); + camera->rUpdateRateInv = Camera_LERPCeilF(rUpdateRateInvTarget, camera->rUpdateRateInv, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ), 0.1f); return Camera_LERPCeilF(distTarget, camera->dist, 1.0f / camera->rUpdateRateInv, 0.2f); } @@ -1519,9 +1522,9 @@ s32 Camera_Normal1(Camera* camera) { rwData->startSwingTimer--; } - spA0 = camera->speedRatio * CAM_DATA_SCALED(OREG(25)); - sp9C = camera->speedRatio * CAM_DATA_SCALED(OREG(26)); - sp98 = rwData->swing.unk_18 != 0 ? CAM_DATA_SCALED(OREG(25)) : spA0; + spA0 = camera->speedRatio * CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ); + sp9C = camera->speedRatio * CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y); + sp98 = rwData->swing.unk_18 != 0 ? CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ) : spA0; sp94 = (camera->xzSpeed - rwData->unk_20) * (0.333333f); if (sp94 > 1.0f) { @@ -1538,7 +1541,7 @@ s32 Camera_Normal1(Camera* camera) { Camera_LERPCeilF(rwData->swing.swingUpdateRate + (f32)(rwData->swing.swingUpdateRateTimer * 2), camera->yawUpdateRateInv, sp98, rate); camera->pitchUpdateRateInv = - Camera_LERPCeilF((f32)R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV + (f32)(rwData->swing.swingUpdateRateTimer * 2), + Camera_LERPCeilF((f32)R_CAM_PITCH_UPDATE_RATE_INV + (f32)(rwData->swing.swingUpdateRateTimer * 2), camera->pitchUpdateRateInv, sp9C, rate); rwData->swing.swingUpdateRateTimer--; } else { @@ -1546,15 +1549,16 @@ s32 Camera_Normal1(Camera* camera) { ((OREG(49) * 0.01f) * rwData->swing.swingUpdateRate * sp94), camera->yawUpdateRateInv, sp98, rate); camera->pitchUpdateRateInv = - Camera_LERPCeilF(R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV, camera->pitchUpdateRateInv, sp9C, rate); + Camera_LERPCeilF(R_CAM_PITCH_UPDATE_RATE_INV, camera->pitchUpdateRateInv, sp9C, rate); } - camera->pitchUpdateRateInv = - Camera_LERPCeilF(R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV, camera->pitchUpdateRateInv, sp9C, rate); - camera->xzOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(2)), camera->xzOffsetUpdateRate, spA0, rate); - camera->yOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(3)), camera->yOffsetUpdateRate, sp9C, rate); - camera->fovUpdateRate = - Camera_LERPCeilF(CAM_DATA_SCALED(OREG(4)), camera->yOffsetUpdateRate, camera->speedRatio * 0.05f, rate); + camera->pitchUpdateRateInv = Camera_LERPCeilF(R_CAM_PITCH_UPDATE_RATE_INV, camera->pitchUpdateRateInv, sp9C, rate); + camera->xzOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_XZ_OFFSET_UPDATE_RATE), camera->xzOffsetUpdateRate, spA0, rate); + camera->yOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_Y_OFFSET_UPDATE_RATE), camera->yOffsetUpdateRate, sp9C, rate); + camera->fovUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), camera->yOffsetUpdateRate, + camera->speedRatio * 0.05f, rate); if (roData->interfaceFlags & 1) { t = Camera_GetPitchAdjFromFloorHeightDiffs(camera, atEyeGeo.yaw - 0x7FFF, false); @@ -1752,17 +1756,18 @@ s32 Camera_Normal2(Camera* camera) { OLib_Vec3fDiffToVecGeo(&atToEyeNextDir, at, eyeNext); camera->speedRatio *= 0.5f; - spA4 = CAM_DATA_SCALED(OREG(25)) * camera->speedRatio; - spA0 = CAM_DATA_SCALED(OREG(26)) * camera->speedRatio; + spA4 = CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ) * camera->speedRatio; + spA0 = CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y) * camera->speedRatio; camera->yawUpdateRateInv = Camera_LERPCeilF(roData->unk_0C, camera->yawUpdateRateInv * camera->speedRatio, - CAM_DATA_SCALED(OREG(25)), 0.1f); - camera->pitchUpdateRateInv = - Camera_LERPCeilF(R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV, camera->pitchUpdateRateInv, spA0, 0.1f); - camera->xzOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(2)), camera->xzOffsetUpdateRate, spA4, 0.1f); - camera->yOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(3)), camera->yOffsetUpdateRate, spA0, 0.1f); - camera->fovUpdateRate = - Camera_LERPCeilF(CAM_DATA_SCALED(OREG(4)), camera->yOffsetUpdateRate, camera->speedRatio * 0.05f, 0.1f); + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ), 0.1f); + camera->pitchUpdateRateInv = Camera_LERPCeilF(R_CAM_PITCH_UPDATE_RATE_INV, camera->pitchUpdateRateInv, spA0, 0.1f); + camera->xzOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_XZ_OFFSET_UPDATE_RATE), camera->xzOffsetUpdateRate, spA4, 0.1f); + camera->yOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_Y_OFFSET_UPDATE_RATE), camera->yOffsetUpdateRate, spA0, 0.1f); + camera->fovUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), camera->yOffsetUpdateRate, + camera->speedRatio * 0.05f, 0.1f); if (!(roData->interfaceFlags & 0x80)) { Camera_CalcAtDefault(camera, &atToEyeNextDir, roData->unk_00, roData->interfaceFlags & 1); @@ -1900,26 +1905,28 @@ s32 Camera_Normal3(Camera* camera) { rwData->distTimer--; } - sp98 = CAM_DATA_SCALED(OREG(25)) * camera->speedRatio; - sp94 = CAM_DATA_SCALED(OREG(26)) * camera->speedRatio; + sp98 = CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ) * camera->speedRatio; + sp94 = CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y) * camera->speedRatio; if (rwData->swing.swingUpdateRateTimer != 0) { camera->yawUpdateRateInv = Camera_LERPCeilF(roData->yawUpdateSpeed + (rwData->swing.swingUpdateRateTimer * 2), camera->yawUpdateRateInv, sp98, 0.1f); camera->pitchUpdateRateInv = - Camera_LERPCeilF((f32)R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV + (rwData->swing.swingUpdateRateTimer * 2), + Camera_LERPCeilF((f32)R_CAM_PITCH_UPDATE_RATE_INV + (rwData->swing.swingUpdateRateTimer * 2), camera->pitchUpdateRateInv, sp94, 0.1f); if (1) {} rwData->swing.swingUpdateRateTimer--; } else { camera->yawUpdateRateInv = Camera_LERPCeilF(roData->yawUpdateSpeed, camera->yawUpdateRateInv, sp98, 0.1f); camera->pitchUpdateRateInv = - Camera_LERPCeilF(R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV, camera->pitchUpdateRateInv, sp94, 0.1f); + Camera_LERPCeilF(R_CAM_PITCH_UPDATE_RATE_INV, camera->pitchUpdateRateInv, sp94, 0.1f); } - camera->xzOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(2)), camera->xzOffsetUpdateRate, sp98, 0.1f); - camera->yOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(3)), camera->yOffsetUpdateRate, sp94, 0.1f); - camera->fovUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(4)), camera->fovUpdateRate, sp94, 0.1f); + camera->xzOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_XZ_OFFSET_UPDATE_RATE), camera->xzOffsetUpdateRate, sp98, 0.1f); + camera->yOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_Y_OFFSET_UPDATE_RATE), camera->yOffsetUpdateRate, sp94, 0.1f); + camera->fovUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), camera->fovUpdateRate, sp94, 0.1f); t2 = Camera_GetPitchAdjFromFloorHeightDiffs(camera, sp7C.yaw - 0x7FFF, true); sp94 = ((1.0f / roData->unk_10) * 0.5f); @@ -2079,16 +2086,18 @@ s32 Camera_Parallel1(Camera* camera) { camera->animState = 1; } - spB8 = CAM_DATA_SCALED(OREG(25)) * camera->speedRatio; - spB4 = CAM_DATA_SCALED(OREG(26)) * camera->speedRatio; + spB8 = CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ) * camera->speedRatio; + spB4 = CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y) * camera->speedRatio; - camera->rUpdateRateInv = Camera_LERPCeilF(OREG(6), camera->rUpdateRateInv, spB8, 0.1f); + camera->rUpdateRateInv = Camera_LERPCeilF(R_CAM_R_UPDATE_RATE_INV, camera->rUpdateRateInv, spB8, 0.1f); camera->yawUpdateRateInv = Camera_LERPCeilF(roData->unk_08, camera->yawUpdateRateInv, spB8, 0.1f); camera->pitchUpdateRateInv = Camera_LERPCeilF(2.0f, camera->pitchUpdateRateInv, spB4, 0.1f); - camera->xzOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(2)), camera->xzOffsetUpdateRate, spB8, 0.1f); - camera->yOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(3)), camera->yOffsetUpdateRate, spB4, 0.1f); - camera->fovUpdateRate = - Camera_LERPCeilF(CAM_DATA_SCALED(OREG(4)), camera->fovUpdateRate, camera->speedRatio * 0.05f, 0.1f); + camera->xzOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_XZ_OFFSET_UPDATE_RATE), camera->xzOffsetUpdateRate, spB8, 0.1f); + camera->yOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_Y_OFFSET_UPDATE_RATE), camera->yOffsetUpdateRate, spB4, 0.1f); + camera->fovUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), camera->fovUpdateRate, + camera->speedRatio * 0.05f, 0.1f); if (roData->interfaceFlags & 1) { tangle = Camera_GetPitchAdjFromFloorHeightDiffs(camera, atToEyeDir.yaw - 0x7FFF, true); @@ -2263,24 +2272,27 @@ s32 Camera_Jump1(Camera* camera) { } if (rwData->swing.swingUpdateRateTimer != 0) { - camera->yawUpdateRateInv = Camera_LERPCeilF(roData->yawUpateRateTarget + rwData->swing.swingUpdateRateTimer, - camera->yawUpdateRateInv, CAM_DATA_SCALED(OREG(26)), 0.1f); + camera->yawUpdateRateInv = + Camera_LERPCeilF(roData->yawUpateRateTarget + rwData->swing.swingUpdateRateTimer, camera->yawUpdateRateInv, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y), 0.1f); camera->pitchUpdateRateInv = - Camera_LERPCeilF((f32)R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV + rwData->swing.swingUpdateRateTimer, - camera->pitchUpdateRateInv, CAM_DATA_SCALED(OREG(26)), 0.1f); + Camera_LERPCeilF((f32)R_CAM_PITCH_UPDATE_RATE_INV + rwData->swing.swingUpdateRateTimer, + camera->pitchUpdateRateInv, CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y), 0.1f); rwData->swing.swingUpdateRateTimer--; } else { - camera->yawUpdateRateInv = - Camera_LERPCeilF(roData->yawUpateRateTarget, camera->yawUpdateRateInv, CAM_DATA_SCALED(OREG(26)), 0.1f); - camera->pitchUpdateRateInv = Camera_LERPCeilF((f32)R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV, - camera->pitchUpdateRateInv, CAM_DATA_SCALED(OREG(26)), 0.1f); + camera->yawUpdateRateInv = Camera_LERPCeilF(roData->yawUpateRateTarget, camera->yawUpdateRateInv, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y), 0.1f); + camera->pitchUpdateRateInv = Camera_LERPCeilF((f32)R_CAM_PITCH_UPDATE_RATE_INV, camera->pitchUpdateRateInv, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y), 0.1f); } camera->xzOffsetUpdateRate = - Camera_LERPCeilF(CAM_DATA_SCALED(OREG(2)), camera->xzOffsetUpdateRate, CAM_DATA_SCALED(OREG(25)), 0.1f); - camera->yOffsetUpdateRate = - Camera_LERPCeilF(CAM_DATA_SCALED(OREG(3)), camera->yOffsetUpdateRate, CAM_DATA_SCALED(OREG(26)), 0.1f); - camera->fovUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(4)), camera->yOffsetUpdateRate, 0.05f, 0.1f); + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_XZ_OFFSET_UPDATE_RATE), camera->xzOffsetUpdateRate, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ), 0.1f); + camera->yOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_Y_OFFSET_UPDATE_RATE), camera->yOffsetUpdateRate, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y), 0.1f); + camera->fovUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), camera->yOffsetUpdateRate, 0.05f, 0.1f); func_800458D4(camera, &eyeNextAtOffset, roData->atYOffset, &rwData->unk_1C, 0); @@ -2318,7 +2330,7 @@ s32 Camera_Jump1(Camera* camera) { Camera_AddVecGeoToVec3f(&newEye, at, &eyeDiffGeo); eyeNext->x = newEye.x; eyeNext->z = newEye.z; - eyeNext->y += (newEye.y - eyeNext->y) * CAM_DATA_SCALED(OREG(31)); + eyeNext->y += (newEye.y - eyeNext->y) * CAM_DATA_SCALED(R_CAM_JUMP1_EYE_Y_STEP_SCALE); if ((camera->status == CAM_STAT_ACTIVE) && !(roData->interfaceFlags & 0x10)) { func_80046E20(camera, &eyeDiffGeo, roData->distMin, roData->yawUpateRateTarget, &spA4, &rwData->swing); if (roData->interfaceFlags & 4) { @@ -2435,14 +2447,15 @@ s32 Camera_Jump2(Camera* camera) { camera->atLERPStepScale = roData->atLERPStepScale; } - sp90 = CAM_DATA_SCALED(OREG(25)) * camera->speedRatio; - sp8C = CAM_DATA_SCALED(OREG(26)) * camera->speedRatio; + sp90 = CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ) * camera->speedRatio; + sp8C = CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y) * camera->speedRatio; camera->yawUpdateRateInv = Camera_LERPCeilF(roData->yawUpdRateTarget, camera->yawUpdateRateInv, sp90, 0.1f); camera->xzOffsetUpdateRate = Camera_LERPCeilF(roData->xzUpdRateTarget, camera->xzOffsetUpdateRate, sp90, 0.1f); - camera->yOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(3)), camera->yOffsetUpdateRate, sp8C, 0.1f); + camera->yOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_Y_OFFSET_UPDATE_RATE), camera->yOffsetUpdateRate, sp8C, 0.1f); - camera->fovUpdateRate = - Camera_LERPCeilF(CAM_DATA_SCALED(OREG(4)), camera->yOffsetUpdateRate, camera->speedRatio * 0.05f, 0.1f); + camera->fovUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), camera->yOffsetUpdateRate, + camera->speedRatio * 0.05f, 0.1f); camera->rUpdateRateInv = OREG(27); Camera_CalcAtDefault(camera, &atToEyeNextDir, roData->atYOffset, 0); @@ -2481,14 +2494,16 @@ s32 Camera_Jump2(Camera* camera) { if ((sp90 != BGCHECK_Y_MIN) && (playerPosRot->pos.y < sp90)) { // top of the climb is within 2.2x of the player's height. camera->pitchUpdateRateInv = - Camera_LERPCeilF(20.0f, camera->pitchUpdateRateInv, CAM_DATA_SCALED(OREG(26)), 0.1f); - camera->rUpdateRateInv = Camera_LERPCeilF(20.0f, camera->rUpdateRateInv, CAM_DATA_SCALED(OREG(26)), 0.1f); + Camera_LERPCeilF(20.0f, camera->pitchUpdateRateInv, CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y), 0.1f); + camera->rUpdateRateInv = + Camera_LERPCeilF(20.0f, camera->rUpdateRateInv, CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y), 0.1f); adjAtToEyeDir.pitch = Camera_LERPCeilS(0x1F4, atToEyeNextDir.pitch, 1.0f / camera->pitchUpdateRateInv, 0xA); } else if ((playerPosRot->pos.y - rwData->floorY) < playerHeight) { // player is within his height of the ground. camera->pitchUpdateRateInv = - Camera_LERPCeilF(20.0f, camera->pitchUpdateRateInv, CAM_DATA_SCALED(OREG(26)), 0.1f); - camera->rUpdateRateInv = Camera_LERPCeilF(20.0f, camera->rUpdateRateInv, CAM_DATA_SCALED(OREG(26)), 0.1f); + Camera_LERPCeilF(20.0f, camera->pitchUpdateRateInv, CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y), 0.1f); + camera->rUpdateRateInv = + Camera_LERPCeilF(20.0f, camera->rUpdateRateInv, CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y), 0.1f); adjAtToEyeDir.pitch = Camera_LERPCeilS(0x1F4, atToEyeNextDir.pitch, 1.0f / camera->pitchUpdateRateInv, 0xA); } else { camera->pitchUpdateRateInv = 100.0f; @@ -2630,9 +2645,9 @@ s32 Camera_Jump3(Camera* camera) { spB0 = *eye; - spC4 = CAM_DATA_SCALED(OREG(25)) * camera->speedRatio; - spC0 = camera->speedRatio * CAM_DATA_SCALED(OREG(26)); - spBC = rwData->swing.unk_18 != 0 ? CAM_DATA_SCALED(OREG(25)) : spC4; + spC4 = CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ) * camera->speedRatio; + spC0 = camera->speedRatio * CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y); + spBC = rwData->swing.unk_18 != 0 ? CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ) : spC4; if (rwData->swing.swingUpdateRateTimer != 0) { camera->yawUpdateRateInv = @@ -2647,10 +2662,12 @@ s32 Camera_Jump3(Camera* camera) { camera->pitchUpdateRateInv = Camera_LERPCeilF(40.0f, camera->pitchUpdateRateInv, spC0, 0.1f); } - camera->xzOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(2)), camera->xzOffsetUpdateRate, spC4, 0.1f); - camera->yOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(3)), camera->yOffsetUpdateRate, spC0, 0.1f); - camera->fovUpdateRate = - Camera_LERPCeilF(CAM_DATA_SCALED(OREG(4)), camera->yOffsetUpdateRate, camera->speedRatio * 0.05f, 0.1f); + camera->xzOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_XZ_OFFSET_UPDATE_RATE), camera->xzOffsetUpdateRate, spC4, 0.1f); + camera->yOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_Y_OFFSET_UPDATE_RATE), camera->yOffsetUpdateRate, spC0, 0.1f); + camera->fovUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), camera->yOffsetUpdateRate, + camera->speedRatio * 0.05f, 0.1f); Camera_CalcAtDefault(camera, &eyeNextAtOffset, roData->yOffset, roData->interfaceFlags); OLib_Vec3fDiffToVecGeo(&eyeDiffGeo, at, eyeNext); @@ -2805,12 +2822,13 @@ s32 Camera_Battle1(Camera* camera) { if (camera->player->stateFlags1 & PLAYER_STATE1_12) { // charging sword. - rwData->unk_10 = - Camera_LERPCeilF(CAM_DATA_SCALED(OREG(12)) * 0.5f, rwData->unk_10, CAM_DATA_SCALED(OREG(25)), 0.1f); + rwData->unk_10 = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(12)) * 0.5f, rwData->unk_10, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ), 0.1f); camera->xzOffsetUpdateRate = - Camera_LERPCeilF(0.2f, camera->xzOffsetUpdateRate, CAM_DATA_SCALED(OREG(25)), 0.1f); - camera->yOffsetUpdateRate = Camera_LERPCeilF(0.2f, camera->yOffsetUpdateRate, CAM_DATA_SCALED(OREG(25)), 0.1f); - if (rwData->chargeTimer >= -19) { + Camera_LERPCeilF(0.2f, camera->xzOffsetUpdateRate, CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ), 0.1f); + camera->yOffsetUpdateRate = + Camera_LERPCeilF(0.2f, camera->yOffsetUpdateRate, CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ), 0.1f); + if (rwData->chargeTimer > -20) { rwData->chargeTimer--; } else { distance = 250.0f; @@ -2826,14 +2844,17 @@ s32 Camera_Battle1(Camera* camera) { rwData->chargeTimer++; } else { rwData->chargeTimer = 40; - rwData->unk_10 = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(12)), rwData->unk_10, CAM_DATA_SCALED(OREG(25)), 0.1f); - camera->xzOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(40)), camera->xzOffsetUpdateRate, - CAM_DATA_SCALED(OREG(25)) * camera->speedRatio, 0.1f); - camera->yOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(40)), camera->yOffsetUpdateRate, - CAM_DATA_SCALED(OREG(26)) * camera->speedRatio, 0.1f); + rwData->unk_10 = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(12)), rwData->unk_10, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ), 0.1f); + camera->xzOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_BATTLE1_XYZ_OFFSET_UPDATE_RATE_TARGET), camera->xzOffsetUpdateRate, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ) * camera->speedRatio, 0.1f); + camera->yOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_BATTLE1_XYZ_OFFSET_UPDATE_RATE_TARGET), camera->yOffsetUpdateRate, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y) * camera->speedRatio, 0.1f); } - camera->fovUpdateRate = - Camera_LERPCeilF(CAM_DATA_SCALED(OREG(4)), camera->fovUpdateRate, camera->speedRatio * 0.05f, 0.1f); + camera->fovUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), camera->fovUpdateRate, + camera->speedRatio * 0.05f, 0.1f); playerHeight += roData->yOffset; OLib_Vec3fDiffToVecGeo(&atToEyeDir, at, eye); OLib_Vec3fDiffToVecGeo(&atToEyeNextDir, at, eyeNext); @@ -2980,7 +3001,8 @@ s32 Camera_Battle1(Camera* camera) { *eye = *eyeNext; } } - rwData->roll += (((OREG(36) * camera->speedRatio) * (1.0f - distRatio)) - rwData->roll) * CAM_DATA_SCALED(OREG(37)); + rwData->roll += ((R_CAM_BATTLE1_ROLL_TARGET_BASE * camera->speedRatio * (1.0f - distRatio)) - rwData->roll) * + CAM_DATA_SCALED(R_CAM_BATTLE1_ROLL_STEP_SCALE); camera->roll = CAM_DEG_TO_BINANG(rwData->roll); camera->fov = Camera_LERPCeilF((player->meleeWeaponState != 0 ? 0.8f : gSaveContext.health <= 0x10 ? 0.8f @@ -3047,13 +3069,16 @@ s32 Camera_Battle4(Camera* camera) { break; } - camera->yawUpdateRateInv = Camera_LERPCeilF(roData->lerpUpdateRate, camera->yawUpdateRateInv, - CAM_DATA_SCALED(OREG(25)) * camera->speedRatio, 0.1f); + camera->yawUpdateRateInv = + Camera_LERPCeilF(roData->lerpUpdateRate, camera->yawUpdateRateInv, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ) * camera->speedRatio, 0.1f); camera->rUpdateRateInv = 1000.0f; camera->pitchUpdateRateInv = 1000.0f; - camera->xzOffsetUpdateRate = Camera_LERPCeilF(0.025f, camera->xzOffsetUpdateRate, CAM_DATA_SCALED(OREG(25)), 0.1f); - camera->yOffsetUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(OREG(3)), camera->yOffsetUpdateRate, - CAM_DATA_SCALED(OREG(26)) * camera->speedRatio, 0.1f); + camera->xzOffsetUpdateRate = + Camera_LERPCeilF(0.025f, camera->xzOffsetUpdateRate, CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ), 0.1f); + camera->yOffsetUpdateRate = + Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_Y_OFFSET_UPDATE_RATE), camera->yOffsetUpdateRate, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y) * camera->speedRatio, 0.1f); camera->fovUpdateRate = 0.0001f; Camera_CalcAtDefault(camera, &eyeNextAtOffset, roData->yOffset, 1); if (rwData->animTimer != 0) { @@ -3191,12 +3216,14 @@ s32 Camera_KeepOn1(Camera* camera) { rwData->unk_0C = camera->target; camera->atLERPStepScale = 0.0f; } - camera->xzOffsetUpdateRate = Camera_LERPCeilF(1.0f, camera->xzOffsetUpdateRate, - CAM_DATA_SCALED(OREG(25)) * camera->speedRatio, 0.1f); + camera->xzOffsetUpdateRate = + Camera_LERPCeilF(1.0f, camera->xzOffsetUpdateRate, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ) * camera->speedRatio, 0.1f); camera->yOffsetUpdateRate = - Camera_LERPCeilF(1.0f, camera->yOffsetUpdateRate, CAM_DATA_SCALED(OREG(26)) * camera->speedRatio, 0.1f); - camera->fovUpdateRate = - Camera_LERPCeilF(CAM_DATA_SCALED(OREG(4)), camera->fovUpdateRate, camera->speedRatio * 0.05f, 0.1f); + Camera_LERPCeilF(1.0f, camera->yOffsetUpdateRate, + CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y) * camera->speedRatio, 0.1f); + camera->fovUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), camera->fovUpdateRate, + camera->speedRatio * 0.05f, 0.1f); goto cont; case 0x10: rwData->unk_0C = NULL; @@ -3225,16 +3252,17 @@ s32 Camera_KeepOn1(Camera* camera) { OLib_Vec3fDiffToVecGeo(&spD8, at, eyeNext); if (spD8.r < roData->unk_04) { sp104 = roData->unk_04; - spE8 = OREG(6); + spE8 = R_CAM_R_UPDATE_RATE_INV; } else if (roData->unk_08 < spD8.r) { sp104 = roData->unk_08; - spE8 = OREG(6); + spE8 = R_CAM_R_UPDATE_RATE_INV; } else { sp104 = spD8.r; spE8 = 1.0f; } - camera->rUpdateRateInv = Camera_LERPCeilF(spE8, camera->rUpdateRateInv, CAM_DATA_SCALED(OREG(25)), 0.1f); + camera->rUpdateRateInv = + Camera_LERPCeilF(spE8, camera->rUpdateRateInv, CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_XZ), 0.1f); spD8.r = spE8 = camera->dist = Camera_LERPCeilF(sp104, camera->dist, 1.0f / camera->rUpdateRateInv, 0.2f); sp108 = camera->targetPosRot.pos; OLib_Vec3fDiffToVecGeo(&spD0, at, &sp108); @@ -4622,11 +4650,15 @@ s32 Camera_Unique1(Camera* camera) { Actor_GetFocus(&playerhead, &camera->player->actor); // unused - camera->yawUpdateRateInv = Camera_LERPCeilF(100.0f, camera->yawUpdateRateInv, OREG(25) * 0.01f, 0.1f); - camera->pitchUpdateRateInv = Camera_LERPCeilF(100.0f, camera->pitchUpdateRateInv, OREG(25) * 0.01f, 0.1f); - camera->xzOffsetUpdateRate = Camera_LERPCeilF(0.005f, camera->xzOffsetUpdateRate, OREG(25) * 0.01f, 0.01f); - camera->yOffsetUpdateRate = Camera_LERPCeilF(0.01f, camera->yOffsetUpdateRate, OREG(26) * 0.01f, 0.01f); - camera->fovUpdateRate = Camera_LERPCeilF(OREG(4) * 0.01f, camera->fovUpdateRate, 0.05f, 0.1f); + camera->yawUpdateRateInv = + Camera_LERPCeilF(100.0f, camera->yawUpdateRateInv, R_CAM_UPDATE_RATE_STEP_SCALE_XZ * 0.01f, 0.1f); + camera->pitchUpdateRateInv = + Camera_LERPCeilF(100.0f, camera->pitchUpdateRateInv, R_CAM_UPDATE_RATE_STEP_SCALE_XZ * 0.01f, 0.1f); + camera->xzOffsetUpdateRate = + Camera_LERPCeilF(0.005f, camera->xzOffsetUpdateRate, R_CAM_UPDATE_RATE_STEP_SCALE_XZ * 0.01f, 0.01f); + camera->yOffsetUpdateRate = + Camera_LERPCeilF(0.01f, camera->yOffsetUpdateRate, R_CAM_UPDATE_RATE_STEP_SCALE_Y * 0.01f, 0.01f); + camera->fovUpdateRate = Camera_LERPCeilF(R_CAM_FOV_UPDATE_RATE * 0.01f, camera->fovUpdateRate, 0.05f, 0.1f); Camera_CalcAtDefault(camera, &eyeNextAtOffset, roData->yOffset, 1); OLib_Vec3fDiffToVecGeo(&sp8C, at, eyeNext); @@ -6563,8 +6595,8 @@ s32 Camera_Special5(Camera* camera) { } Camera_CalcAtDefault(camera, &sp5C, roData->yOffset, 0); - camera->fov = - Camera_LERPCeilF(roData->fovTarget, camera->fov, camera->atLERPStepScale * CAM_DATA_SCALED(OREG(4)), 1.0f); + camera->fov = Camera_LERPCeilF(roData->fovTarget, camera->fov, + camera->atLERPStepScale * CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), 1.0f); camera->roll = Camera_LERPCeilS(0, camera->roll, 0.5f, 0xA); camera->atLERPStepScale = Camera_ClampLERPScale(camera, roData->atMaxLERPScale); return true; @@ -6958,10 +6990,10 @@ void Camera_Init(Camera* camera, View* view, CollisionContext* colCtx, PlayState camera->up.y = 1.0f; camera->up.z = 0.0f; camera->fov = 60.0f; - camera->pitchUpdateRateInv = R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV; - camera->xzOffsetUpdateRate = CAM_DATA_SCALED(OREG(2)); - camera->yOffsetUpdateRate = CAM_DATA_SCALED(OREG(3)); - camera->fovUpdateRate = CAM_DATA_SCALED(OREG(4)); + camera->pitchUpdateRateInv = R_CAM_PITCH_UPDATE_RATE_INV; + camera->xzOffsetUpdateRate = CAM_DATA_SCALED(R_CAM_XZ_OFFSET_UPDATE_RATE); + camera->yOffsetUpdateRate = CAM_DATA_SCALED(R_CAM_Y_OFFSET_UPDATE_RATE); + camera->fovUpdateRate = CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE); sCameraLetterboxSize = 32; sCameraInterfaceAlpha = 0; camera->unk_14C = 0; diff --git a/src/code/z_camera_data.inc.c b/src/code/z_camera_data.inc.c index 5daad611b9..abe35dae48 100644 --- a/src/code/z_camera_data.inc.c +++ b/src/code/z_camera_data.inc.c @@ -29,21 +29,21 @@ typedef struct { s16 sOREGInit[] = { 0, // OREG(0) 1, // OREG(1) - 5, // OREG(2) - 5, // OREG(3) - 5, // OREG(4) + 5, // R_CAM_XZ_OFFSET_UPDATE_RATE + 5, // R_CAM_Y_OFFSET_UPDATE_RATE + 5, // R_CAM_FOV_UPDATE_RATE 14500, // R_CAM_MAX_PITCH - 20, // OREG(6) - 16, // R_CAM_DEFAULT_PITCH_UPDATE_RATE_INV + 20, // R_CAM_R_UPDATE_RATE_INV + 16, // R_CAM_PITCH_UPDATE_RATE_INV 150, // OREG(8) - 25, // OREG(9) + 25, // R_CAM_SLOPE_Y_ADJ_AMOUNT 150, // OREG(10) 6, // OREG(11) 10, // OREG(12) 10, // OREG(13) - 0, // OREG(14) - 0, // OREG(15) - 1, // OREG(16) + 0, // OREG(14) (unused) + 0, // OREG(15) (unused) + 1, // OREG(16) (unused) 100, // R_CAM_PITCH_FLOOR_CHECK_NEAR_DIST_FAC 250, // R_CAM_PITCH_FLOOR_CHECK_FAR_DIST_FAC 120, // R_CAM_PITCH_FLOOR_CHECK_OFFSET_Y_FAC @@ -52,29 +52,29 @@ s16 sOREGInit[] = { 120, // OREG(22) 4, // R_CAM_DEFAULT_ANIM_TIME 1, // OREG(24) - 50, // OREG(25) - 20, // OREG(26) + 50, // R_CAM_UPDATE_RATE_STEP_SCALE_XZ + 20, // R_CAM_UPDATE_RATE_STEP_SCALE_Y 1800, // OREG(27) 50, // OREG(28) 50, // OREG(29) 50, // OREG(30) - 20, // OREG(31) + 20, // R_CAM_JUMP1_EYE_Y_STEP_SCALE 20, // OREG(32) -10, // OREG(33) -5460, // R_CAM_MIN_PITCH_1 -9100, // R_CAM_MIN_PITCH_2 - -6, // OREG(36) - 8, // OREG(37) + -6, // R_CAM_BATTLE1_ROLL_TARGET_BASE + 8, // R_CAM_BATTLE1_ROLL_STEP_SCALE 15, // OREG(38) 75, // OREG(39) - 60, // OREG(40) + 60, // R_CAM_BATTLE1_XYZ_OFFSET_UPDATE_RATE_TARGET 12, // R_CAM_AT_LERP_STEP_SCALE_MIN 110, // R_CAM_AT_LERP_STEP_SCALE_FAC 40, // OREG(43) 50, // OREG(44) 250, // OREG(45) -10, // R_CAM_YOFFSET_NORM - 30, // OREG(47) + 30, // OREG(47) (unused) 30, // OREG(48) 70, // OREG(49) 20, // OREG(50) @@ -117,22 +117,96 @@ s16 sCamDataRegsInit[CAM_DATA_MAX] = { s16 sCamDataRegsInitCount = ARRAY_COUNT(sCamDataRegsInit); char sCameraSettingNames[][12] = { - "NONE ", "NORMAL0 ", "NORMAL1 ", "DUNGEON0 ", "DUNGEON1 ", "NORMAL3 ", "HORSE0 ", - "BOSS_GOMA ", "BOSS_DODO ", "BOSS_BARI ", "BOSS_FGANON", "BOSS_BAL ", "BOSS_SHADES", "BOSS_MOFA ", - "BOSS_TWIN0 ", "BOSS_TWIN1 ", "BOSS_GANON1", "BOSS_GANON2", "TOWER0 ", "TOWER1 ", "FIXED0 ", - "FIXED1 ", "CIRCLE0 ", "CIRCLE2 ", "CIRCLE3 ", "PREREND0 ", "PREREND1 ", "PREREND3 ", - "DOOR0 ", "DOORC ", "RAIL3 ", "START0 ", "START1 ", "FREE0 ", "FREE2 ", - "CIRCLE4 ", "CIRCLE5 ", "DEMO0 ", "DEMO1 ", "MORI1 ", "ITEM0 ", "ITEM1 ", - "DEMO3 ", "DEMO4 ", "UFOBEAN ", "LIFTBEAN ", "SCENE0 ", "SCENE1 ", "HIDAN1 ", - "HIDAN2 ", "MORI2 ", "MORI3 ", "TAKO ", "SPOT05A ", "SPOT05B ", "HIDAN3 ", - "ITEM2 ", "CIRCLE6 ", "NORMAL2 ", "FISHING ", "DEMOC ", "UO_FIBER ", "DUNGEON2 ", - "TEPPEN ", "CIRCLE7 ", "NORMAL4 ", + "NONE ", // CAM_SET_NONE + "NORMAL0 ", // CAM_SET_NORMAL0 + "NORMAL1 ", // CAM_SET_NORMAL1 + "DUNGEON0 ", // CAM_SET_DUNGEON0 + "DUNGEON1 ", // CAM_SET_DUNGEON1 + "NORMAL3 ", // CAM_SET_NORMAL3 + "HORSE0 ", // CAM_SET_HORSE + "BOSS_GOMA ", // CAM_SET_BOSS_GOHMA + "BOSS_DODO ", // CAM_SET_BOSS_DODONGO + "BOSS_BARI ", // CAM_SET_BOSS_BARINADE + "BOSS_FGANON", // CAM_SET_BOSS_PHANTOM_GANON + "BOSS_BAL ", // CAM_SET_BOSS_VOLVAGIA + "BOSS_SHADES", // CAM_SET_BOSS_BONGO + "BOSS_MOFA ", // CAM_SET_BOSS_MORPHA + "BOSS_TWIN0 ", // CAM_SET_BOSS_TWINROVA_PLATFORM + "BOSS_TWIN1 ", // CAM_SET_BOSS_TWINROVA_FLOOR + "BOSS_GANON1", // CAM_SET_BOSS_GANONDORF + "BOSS_GANON2", // CAM_SET_BOSS_GANON + "TOWER0 ", // CAM_SET_TOWER_CLIMB + "TOWER1 ", // CAM_SET_TOWER_UNUSED + "FIXED0 ", // CAM_SET_MARKET_BALCONY + "FIXED1 ", // CAM_SET_CHU_BOWLING + "CIRCLE0 ", // CAM_SET_PIVOT_CRAWLSPACE + "CIRCLE2 ", // CAM_SET_PIVOT_SHOP_BROWSING + "CIRCLE3 ", // CAM_SET_PIVOT_IN_FRONT + "PREREND0 ", // CAM_SET_PREREND_FIXED + "PREREND1 ", // CAM_SET_PREREND_PIVOT + "PREREND3 ", // CAM_SET_PREREND_SIDE_SCROLL + "DOOR0 ", // CAM_SET_DOOR0 + "DOORC ", // CAM_SET_DOORC + "RAIL3 ", // CAM_SET_CRAWLSPACE + "START0 ", // CAM_SET_START0 + "START1 ", // CAM_SET_START1 + "FREE0 ", // CAM_SET_FREE0 + "FREE2 ", // CAM_SET_FREE2 + "CIRCLE4 ", // CAM_SET_PIVOT_CORNER + "CIRCLE5 ", // CAM_SET_PIVOT_WATER_SURFACE + "DEMO0 ", // CAM_SET_CS_0 + "DEMO1 ", // CAM_SET_CS_TWISTED_HALLWAY + "MORI1 ", // CAM_SET_FOREST_BIRDS_EYE + "ITEM0 ", // CAM_SET_SLOW_CHEST_CS + "ITEM1 ", // CAM_SET_ITEM_UNUSED + "DEMO3 ", // CAM_SET_CS_3 + "DEMO4 ", // CAM_SET_CS_ATTENTION + "UFOBEAN ", // CAM_SET_BEAN_GENERIC + "LIFTBEAN ", // CAM_SET_BEAN_LOST_WOODS + "SCENE0 ", // CAM_SET_SCENE_UNUSED + "SCENE1 ", // CAM_SET_SCENE_TRANSITION + "HIDAN1 ", // CAM_SET_FIRE_PLATFORM + "HIDAN2 ", // CAM_SET_FIRE_STAIRCASE + "MORI2 ", // CAM_SET_FOREST_UNUSED + "MORI3 ", // CAM_SET_FOREST_DEFEAT_POE + "TAKO ", // CAM_SET_BIG_OCTO + "SPOT05A ", // CAM_SET_MEADOW_BIRDS_EYE + "SPOT05B ", // CAM_SET_MEADOW_UNUSED + "HIDAN3 ", // CAM_SET_FIRE_BIRDS_EYE + "ITEM2 ", // CAM_SET_TURN_AROUND + "CIRCLE6 ", // CAM_SET_PIVOT_VERTICAL + "NORMAL2 ", // CAM_SET_NORMAL2 + "FISHING ", // CAM_SET_FISHING + "DEMOC ", // CAM_SET_CS_C + "UO_FIBER ", // CAM_SET_JABU_TENTACLE + "DUNGEON2 ", // CAM_SET_DUNGEON2 + "TEPPEN ", // CAM_SET_DIRECTED_YAW + "CIRCLE7 ", // CAM_SET_PIVOT_FROM_SIDE + "NORMAL4 ", // CAM_SET_NORMAL4 }; char sCameraModeNames[][12] = { - "NORMAL ", "PARALLEL ", "KEEPON ", "TALK ", "BATTLE ", "CLIMB ", "SUBJECT ", - "BOWARROW ", "BOWARROWZ ", "FOOKSHOT ", "BOOMERANG ", "PACHINCO ", "CLIMBZ ", "JUMP ", - "HANG ", "HANGZ ", "FREEFALL ", "CHARGE ", "STILL ", "PUSHPULL ", "BOOKEEPON ", + "NORMAL ", // CAM_MODE_NORMAL + "PARALLEL ", // CAM_MODE_TARGET + "KEEPON ", // CAM_MODE_FOLLOWTARGET + "TALK ", // CAM_MODE_TALK + "BATTLE ", // CAM_MODE_BATTLE + "CLIMB ", // CAM_MODE_CLIMB + "SUBJECT ", // CAM_MODE_FIRSTPERSON + "BOWARROW ", // CAM_MODE_BOWARROW + "BOWARROWZ ", // CAM_MODE_BOWARROWZ + "FOOKSHOT ", // CAM_MODE_HOOKSHOT + "BOOMERANG ", // CAM_MODE_BOOMERANG + "PACHINCO ", // CAM_MODE_SLINGSHOT + "CLIMBZ ", // CAM_MODE_CLIMBZ + "JUMP ", // CAM_MODE_JUMP + "HANG ", // CAM_MODE_HANG + "HANGZ ", // CAM_MODE_HANGZ + "FREEFALL ", // CAM_MODE_FREEFALL + "CHARGE ", // CAM_MODE_CHARGE + "STILL ", // CAM_MODE_STILL + "PUSHPULL ", // CAM_MODE_PUSHPULL + "BOOKEEPON ", // CAM_MODE_FOLLOWBOOMERANG }; /** @@ -1192,935 +1266,935 @@ CameraModeValue sNormal4ModeTalkData[] = { { func, ARRAY_COUNT(data), data } CameraMode sCamSetNormal0Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal0ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeFreeFallData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetNormal1Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal1ModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal1ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal1ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal1ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal1ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal1ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal1ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal1ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal1ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal1ModeFreeFallData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal1ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal1ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal1ModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal1ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal1ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal1ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal1ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal1ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal1ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal1ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal1ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal1ModeFreeFallData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal1ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal1ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetDungeon0Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon0ModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetDungeon0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetDungeon0ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal1ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon0ModeFreeFallData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetDungeon0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon0ModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal1ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetDungeon1Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon1ModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal1ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetDungeon1ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetDungeon0ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon1ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal1ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon1ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon1ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon1ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon1ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon1ModeFreeFallData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetDungeon1ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon1ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon1ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon1ModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal1ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetDungeon1ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon1ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal1ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon1ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon1ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon1ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon1ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon1ModeFreeFallData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetDungeon1ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon1ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon1ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetNormal3Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal3ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal3ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal0ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeBoomerangData), - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal3ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal3ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeBoomerangData), // CAM_MODE_BOOMERANG + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL }; CameraMode sCamSetHorseModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM3, sSetHorseModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM3, sSetHorseModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetHorseModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetHorseModeTalkData), - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetHorseModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM3, sSetHorseModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM3, sSetHorseModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetHorseModeFollowTargetData), // CAM_MODE_FOLLOWTARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetHorseModeTalkData), // CAM_MODE_TALK + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_BATTLE + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_CLIMB + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetHorseModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ }; CameraMode sCamSetBossGohmaModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossGohmaModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossGohmaModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetDungeon0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossGohmaModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossGohmaModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetBossDodongoModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossDodongoModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossDodongoModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossDodongoModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossDodongoModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetBossBarinadeModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossBarinadeModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossBarinadeModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossBarinadeModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossBarinadeModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetBossPhantomGanonModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossPhantomGanonModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossPhantomGanonModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossPhantomGanonModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossPhantomGanonModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetBossVolvagiaModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossVolvagiaModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossVolvagiaModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossVolvagiaModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossVolvagiaModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetBossBongoModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossBongoModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossBongoModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossBongoModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossBongoModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossBongoModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossBongoModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossBongoModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossBongoModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetBossMorphaModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossMorphaModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossMorphaModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossMorphaModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossMorphaModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetBossTwinrovaPlatformModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossTwinrovaPlatformModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossTwinrovaModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossTwinrovaPlatformModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossTwinrovaModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetBossTwinrovaFloorModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossTwinrovaFloorModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossTwinrovaModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossTwinrovaFloorModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossTwinrovaModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetBossGanondorfModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossGanondorfModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossPhantomGanonModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetBossGanondorfModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossGanondorfModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossPhantomGanonModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetBossGanondorfModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetBossGanonModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossGanonModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossGanonModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBossGanonModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBossGanonModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetTowerClimbModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM2, sSetTowerClimbModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal0ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM2, sSetTowerClimbModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM2, sSetTowerClimbModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM2, sSetTowerClimbModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetTowerUnusedModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM2, sSetTowerUnusedModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal0ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM2, sSetTowerUnusedModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM2, sSetTowerUnusedModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM2, sSetTowerUnusedModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetMarketBalconyModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD1, sSetMarketBalconyModeNormalData), - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD1, sSetMarketBalconyModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD1, sSetMarketBalconyModeTalkData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD1, sSetMarketBalconyModeNormalData), // CAM_MODE_NORMAL + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD1, sSetMarketBalconyModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD1, sSetMarketBalconyModeTalkData), // CAM_MODE_TALK }; CameraMode sCamSetChuBowlingModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD1, sSetChuBowlingModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD1, sSetChuBowlingModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetPivotCrawlspaceModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD2, sSetPivotCrawlspaceModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD2, sSetPivotCrawlspaceModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetPivotShopBrowsingModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_DATA4, sSetPivotShopBrowsingModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_DATA4, sSetPivotShopBrowsingModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetPivotInFrontModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD4, sSetPivotInFrontAndFromSideModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD4, sSetPivotInFrontAndFromSideModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_JUMP + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_HANG + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_HANGZ + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetPreRendFixedModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD3, sDataOnlyNullFlags), - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD3, sSetPrerendFixedModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD3, sSetPrerendFixedModeFollowTargetData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD3, sDataOnlyNullFlags), // CAM_MODE_NORMAL + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD3, sSetPrerendFixedModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD3, sSetPrerendFixedModeFollowTargetData), // CAM_MODE_TALK }; CameraMode sCamSetPreRendPivotModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ7, sSetPrerendPivotModeNormalData), - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ7, sSetPrerendPivotModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP0, sSetPrerendPivotModeTalkData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ7, sSetPrerendPivotModeNormalData), // CAM_MODE_NORMAL + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ7, sSetPrerendPivotModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP0, sSetPrerendPivotModeTalkData), // CAM_MODE_TALK }; CameraMode sCamSetPreRendSideScrollModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC6, sDataOnlyNullFlags), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC6, sDataOnlyNullFlags), // CAM_MODE_NORMAL }; CameraMode sCamSetDoor0Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ3, sSetDoor0ModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ3, sSetDoor0ModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetDoorCModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC9, sSetDoorCModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC9, sSetDoorCModeTargetData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC9, sSetDoorCModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC9, sSetDoorCModeTargetData), // CAM_MODE_TARGET }; CameraMode sCamSetCrawlspaceModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ4, sSetCrawlspaceModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ4, sSetCrawlspaceModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetStart0Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ0, sDataOnlyNullFlags), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ0, sDataOnlyNullFlags), // CAM_MODE_NORMAL }; CameraMode sCamSetStart1Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ0, sSetStart1ModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ0, sSetStart1ModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetFree0Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ6, sSetFree0ModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ6, sSetFree0ModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetFree1Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ6, sSetFree1ModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ6, sSetFree1ModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetPivotCornerModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD2, sSetPivotCornerModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD2, sSetPivotCornerModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetPivotDivingModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ2, sSetPivotWaterSurfaceModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ2, sSetPivotWaterSurfaceModeTargetData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ2, sSetPivotWaterSurfaceModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ2, sSetPivotWaterSurfaceModeTargetData), // CAM_MODE_TARGET }; CameraMode sCamSetCs0Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO1, sDataOnlyInterfaceFlags), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO1, sDataOnlyInterfaceFlags), // CAM_MODE_NORMAL }; CameraMode sCamSetCsTwistedHallwayModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO2, sDataOnlyInterfaceFlags), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO2, sDataOnlyInterfaceFlags), // CAM_MODE_NORMAL }; CameraMode sCamSetForestBirdsEyeModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetForestBirdsEyeModeNormalData), - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA3, sSetForestBirdsEyeModeTalkData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetForestBirdsEyeModeNormalData), // CAM_MODE_NORMAL + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_TARGET + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA3, sSetForestBirdsEyeModeTalkData), // CAM_MODE_TALK }; CameraMode sCamSetSlowChestCsModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO3, sSetSlowChestCsModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO3, sSetSlowChestCsModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetItemUnusedModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO4, sSetSlowChestCsModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO4, sSetSlowChestCsModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetCs3Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO9, sSetCs3ModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO9, sSetCs3ModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetCsAttentionModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO5, sDataOnlyInterfaceFlags), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO5, sDataOnlyInterfaceFlags), // CAM_MODE_NORMAL }; CameraMode sCamSetBeanGenericModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBeanGenericModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetBeanGenericModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetBeanGenericModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetBeanGenericModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetBeanGenericModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBeanGenericModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBeanGenericModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetBeanGenericModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetBeanGenericModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetBeanGenericModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetBeanGenericModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBeanGenericModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetBeanLostWoodsModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBeanLostWoodsModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetBeanLostWoodsModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetBeanLostWoodsModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetBeanLostWoodsModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetBeanLostWoodsModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBeanLostWoodsModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBeanLostWoodsModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetBeanLostWoodsModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetBeanLostWoodsModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetBeanLostWoodsModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetBeanLostWoodsModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBeanLostWoodsModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetSceneUnusedModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC9, sSetSceneUnusedModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC9, sSetSceneUnusedModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetSceneTransitionModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ2, sSetSceneTransitionModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ2, sSetSceneTransitionModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetFirePlatformModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC7, sDataOnlyNullFlags), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC7, sDataOnlyNullFlags), // CAM_MODE_NORMAL }; CameraMode sCamSetFireStaircaseModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC4, sDataOnlyInterfaceFlags), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC4, sDataOnlyInterfaceFlags), // CAM_MODE_NORMAL }; CameraMode sCamSetForestUnusedModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ5, sDataOnlyInterfaceFlags), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ5, sDataOnlyInterfaceFlags), // CAM_MODE_NORMAL }; CameraMode sCamSetForestDefeatPoeModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO6, sDataOnlyInterfaceFlags), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO6, sDataOnlyInterfaceFlags), // CAM_MODE_NORMAL }; CameraMode sCamSetBigOctoModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBigOctoModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetDungeon0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBigOctoModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal1ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon0ModeFreeFallData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetDungeon0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBigOctoModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBigOctoModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetBigOctoModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal1ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetBigOctoModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetMeadowBirdsEyeModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetMeadowBirdsEyeModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetMeadowBirdsEyeModeTargetData), - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetMeadowBirdsEyeModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetMeadowBirdsEyeModeClimbData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetMeadowBirdsEyeModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetMeadowBirdsEyeModeTargetData), // CAM_MODE_TARGET + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_FOLLOW + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetMeadowBirdsEyeModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetMeadowBirdsEyeModeClimbData), // CAM_MODE_CLIMB }; CameraMode sCamSetMeadowUnusedModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetMeadowUnusedModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetMeadowUnusedModeTargetData), - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetMeadowUnusedModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetMeadowUnusedModeClimbData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetMeadowUnusedModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetMeadowUnusedModeTargetData), // CAM_MODE_TARGET + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_FOLLOW + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetMeadowUnusedModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetMeadowUnusedModeClimbData), // CAM_MODE_CLIMB }; CameraMode sCamSetFireBirdsEyeModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetFireBirdsEyeModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetFireBirdsEyeModeTargetData), - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetFireBirdsEyeModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetFireBirdsEyeModeClimbData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetFireBirdsEyeModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetFireBirdsEyeModeTargetData), // CAM_MODE_TARGET + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_FOLLOW + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetFireBirdsEyeModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetFireBirdsEyeModeClimbData), // CAM_MODE_CLIMB }; CameraMode sCamSetTurnAroundModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP4, sSetTurnAroundModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP4, sSetTurnAroundModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetPivotVerticalModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC0, sSetPivotVerticalModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC0, sSetPivotVerticalModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetNorm2Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal2and4ModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal2and4ModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetFishingModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetFishingModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetFishingModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetFishingModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetFishingModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetFishingModeFollowTargetData), - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetFishingModeFirstPersonData), - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetFishingModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetFishingModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetFishingModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetFishingModeFreeFallData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetFishingModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetFishingModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetFishingModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetFishingModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetFishingModeFollowTargetData), // CAM_MODE_BATTLE + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetFishingModeFirstPersonData), // CAM_MODE_FIRSTPERSON + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_BOWARROW + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_BOWARROWZ + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_HOOKSHOT + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_BOOMERANG + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_SLINGSHOT + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetFishingModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetFishingModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetFishingModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetFishingModeFreeFallData), // CAM_MODE_FREEFALL }; CameraMode sCamSetCsCModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ9, sSetCsCModeNormalData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ9, sSetCsCModeNormalData), // CAM_MODE_NORMAL }; CameraMode sCamSetJabuTentacleModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetJabuTentacleModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetJabuTentacleModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetJabuTentacleModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetJabuTentacleModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetDungeon2Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon2ModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon2ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetDungeon0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetDungeon2ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon2ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal1ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon2ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon2ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon2ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon2ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon2ModeFreeFallData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon2ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon2ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon2ModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon2ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetDungeon2ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon2ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal1ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon2ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon2ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon2ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetDungeon2ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetDungeon2ModeFreeFallData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDungeon2ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetDungeon2ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetDirectedYawModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDirectedYawModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetDirectedYawModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetDirectedYawModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal0ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetDirectedYawModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetDirectedYawModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetDirectedYawModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraMode sCamSetPivotFromSideModes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD4, sSetPivotInFrontAndFromSideModeNormalData), - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD4, sSetPivotInFrontAndFromSideModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), - { CAM_FUNC_NONE, 0, NULL }, - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - { CAM_FUNC_NONE, 0, NULL }, - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD4, sSetPivotInFrontAndFromSideModeNormalData), // CAM_MODE_NORMAL + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXD4, sSetPivotInFrontAndFromSideModeNormalData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sSetNormal0ModeTalkData), // CAM_MODE_TALK + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_BATTLE + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + { CAM_FUNC_NONE, 0, NULL }, // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT }; CameraMode sCamSetNormal4Modes[] = { - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal2and4ModeNormalData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sNormal4ModeTalkData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), - CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal2and4ModeNormalData), // CAM_MODE_NORMAL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP3, sNormal4ModeTalkData), // CAM_MODE_TALK + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT1, sSetNormal1ModeBattleData), // CAM_MODE_BATTLE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPEC5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJ3, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangData), // CAM_MODE_HANG + CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQ1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ + CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP1, sSetNormal0ModeJumpData), // CAM_MODE_FREEFALL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATT4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE + CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORM1, sSetNormal0ModeStillData), // CAM_MODE_STILL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARA1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL + CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEP1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG }; CameraSetting sCameraSettings[] = { - { { 0x00000000 }, NULL }, - { { 0x051FFFFF }, sCamSetNormal0Modes }, - { { 0x051FFFFF }, sCamSetNormal1Modes }, - { { 0x051FFFFF }, sCamSetDungeon0Modes }, - { { 0x051FFFFF }, sCamSetDungeon1Modes }, - { { 0x050FF7FF }, sCamSetNormal3Modes }, - { { 0x8500018F }, sCamSetHorseModes }, - { { 0x051FFFFF }, sCamSetBossGohmaModes }, - { { 0x051FFFFF }, sCamSetBossDodongoModes }, - { { 0x051FFFFF }, sCamSetBossBarinadeModes }, - { { 0x051FFFFF }, sCamSetBossPhantomGanonModes }, - { { 0x051FFFFF }, sCamSetBossVolvagiaModes }, - { { 0x051FFFFF }, sCamSetBossBongoModes }, - { { 0x051FFFFF }, sCamSetBossMorphaModes }, - { { 0x051FFFFF }, sCamSetBossTwinrovaPlatformModes }, - { { 0x051FFFFF }, sCamSetBossTwinrovaFloorModes }, - { { 0x051FFFFF }, sCamSetBossGanondorfModes }, - { { 0x051FFFFF }, sCamSetBossGanonModes }, - { { 0x851FFFFF }, sCamSetTowerClimbModes }, - { { 0x851FFFFF }, sCamSetTowerUnusedModes }, - { { 0x8500000D }, sCamSetMarketBalconyModes }, - { { 0x85000001 }, sCamSetChuBowlingModes }, - { { 0x85000001 }, sCamSetPivotCrawlspaceModes }, - { { 0x85000001 }, sCamSetPivotShopBrowsingModes }, - { { 0x851E1FFF }, sCamSetPivotInFrontModes }, - { { 0x8C00000D }, sCamSetPreRendFixedModes }, - { { 0x8C00000D }, sCamSetPreRendPivotModes }, - { { 0x8C000001 }, sCamSetPreRendSideScrollModes }, - { { 0xC5000001 }, sCamSetDoor0Modes }, - { { 0xC5000003 }, sCamSetDoorCModes }, - { { 0xC5000001 }, sCamSetCrawlspaceModes }, - { { 0xC5000001 }, sCamSetStart0Modes }, - { { 0xC5000001 }, sCamSetStart1Modes }, - { { 0x05000001 }, sCamSetFree0Modes }, - { { 0x05000001 }, sCamSetFree1Modes }, - { { 0x85000001 }, sCamSetPivotCornerModes }, - { { 0x05000003 }, sCamSetPivotDivingModes }, - { { 0xCE000001 }, sCamSetCs0Modes }, - { { 0x4E000001 }, sCamSetCsTwistedHallwayModes }, - { { 0x05000009 }, sCamSetForestBirdsEyeModes }, - { { 0x45000001 }, sCamSetSlowChestCsModes }, - { { 0x45000001 }, sCamSetItemUnusedModes }, - { { 0x45000001 }, sCamSetCs3Modes }, - { { 0x45000001 }, sCamSetCsAttentionModes }, - { { 0x451FFFFF }, sCamSetBeanGenericModes }, - { { 0x451FFFFF }, sCamSetBeanLostWoodsModes }, - { { 0xC5000001 }, sCamSetSceneUnusedModes }, - { { 0x45000001 }, sCamSetSceneTransitionModes }, - { { 0x05000001 }, sCamSetFirePlatformModes }, - { { 0x45000001 }, sCamSetFireStaircaseModes }, - { { 0x45000001 }, sCamSetForestUnusedModes }, - { { 0x45000001 }, sCamSetForestDefeatPoeModes }, - { { 0x451FFFFF }, sCamSetBigOctoModes }, - { { 0x05000033 }, sCamSetMeadowBirdsEyeModes }, - { { 0x05000033 }, sCamSetMeadowUnusedModes }, - { { 0x05000033 }, sCamSetFireBirdsEyeModes }, - { { 0x4A000001 }, sCamSetTurnAroundModes }, - { { 0x05000001 }, sCamSetPivotVerticalModes }, - { { 0x051FFFFF }, sCamSetNorm2Modes }, - { { 0x0501E05F }, sCamSetFishingModes }, - { { 0x45000001 }, sCamSetCsCModes }, - { { 0x051FFFFF }, sCamSetJabuTentacleModes }, - { { 0x051FFFFF }, sCamSetDungeon2Modes }, - { { 0x051FFFFF }, sCamSetDirectedYawModes }, - { { 0xC5000ECD }, sCamSetPivotFromSideModes }, - { { 0x051FFFFF }, sCamSetNormal4Modes }, + { { 0x00000000 }, NULL }, // CAM_SET_NONE + { { 0x051FFFFF }, sCamSetNormal0Modes }, // CAM_SET_NORMAL0 + { { 0x051FFFFF }, sCamSetNormal1Modes }, // CAM_SET_NORMAL1 + { { 0x051FFFFF }, sCamSetDungeon0Modes }, // CAM_SET_DUNGEON0 + { { 0x051FFFFF }, sCamSetDungeon1Modes }, // CAM_SET_DUNGEON1 + { { 0x050FF7FF }, sCamSetNormal3Modes }, // CAM_SET_NORMAL3 + { { 0x8500018F }, sCamSetHorseModes }, // CAM_SET_HORSE + { { 0x051FFFFF }, sCamSetBossGohmaModes }, // CAM_SET_BOSS_GOHMA + { { 0x051FFFFF }, sCamSetBossDodongoModes }, // CAM_SET_BOSS_DODONGO + { { 0x051FFFFF }, sCamSetBossBarinadeModes }, // CAM_SET_BOSS_BARINADE + { { 0x051FFFFF }, sCamSetBossPhantomGanonModes }, // CAM_SET_BOSS_PHANTOM_GANON + { { 0x051FFFFF }, sCamSetBossVolvagiaModes }, // CAM_SET_BOSS_VOLVAGIA + { { 0x051FFFFF }, sCamSetBossBongoModes }, // CAM_SET_BOSS_BONGO + { { 0x051FFFFF }, sCamSetBossMorphaModes }, // CAM_SET_BOSS_MORPHA + { { 0x051FFFFF }, sCamSetBossTwinrovaPlatformModes }, // CAM_SET_BOSS_TWINROVA_PLATFORM + { { 0x051FFFFF }, sCamSetBossTwinrovaFloorModes }, // CAM_SET_BOSS_TWINROVA_FLOOR + { { 0x051FFFFF }, sCamSetBossGanondorfModes }, // CAM_SET_BOSS_GANONDORF + { { 0x051FFFFF }, sCamSetBossGanonModes }, // CAM_SET_BOSS_GANON + { { 0x851FFFFF }, sCamSetTowerClimbModes }, // CAM_SET_TOWER_CLIMB + { { 0x851FFFFF }, sCamSetTowerUnusedModes }, // CAM_SET_TOWER_UNUSED + { { 0x8500000D }, sCamSetMarketBalconyModes }, // CAM_SET_MARKET_BALCONY + { { 0x85000001 }, sCamSetChuBowlingModes }, // CAM_SET_CHU_BOWLING + { { 0x85000001 }, sCamSetPivotCrawlspaceModes }, // CAM_SET_PIVOT_CRAWLSPACE + { { 0x85000001 }, sCamSetPivotShopBrowsingModes }, // CAM_SET_PIVOT_SHOP_BROWSING + { { 0x851E1FFF }, sCamSetPivotInFrontModes }, // CAM_SET_PIVOT_IN_FRONT + { { 0x8C00000D }, sCamSetPreRendFixedModes }, // CAM_SET_PREREND_FIXED + { { 0x8C00000D }, sCamSetPreRendPivotModes }, // CAM_SET_PREREND_PIVOT + { { 0x8C000001 }, sCamSetPreRendSideScrollModes }, // CAM_SET_PREREND_SIDE_SCROLL + { { 0xC5000001 }, sCamSetDoor0Modes }, // CAM_SET_DOOR0 + { { 0xC5000003 }, sCamSetDoorCModes }, // CAM_SET_DOORC + { { 0xC5000001 }, sCamSetCrawlspaceModes }, // CAM_SET_CRAWLSPACE + { { 0xC5000001 }, sCamSetStart0Modes }, // CAM_SET_START0 + { { 0xC5000001 }, sCamSetStart1Modes }, // CAM_SET_START1 + { { 0x05000001 }, sCamSetFree0Modes }, // CAM_SET_FREE0 + { { 0x05000001 }, sCamSetFree1Modes }, // CAM_SET_FREE2 + { { 0x85000001 }, sCamSetPivotCornerModes }, // CAM_SET_PIVOT_CORNER + { { 0x05000003 }, sCamSetPivotDivingModes }, // CAM_SET_PIVOT_WATER_SURFACE + { { 0xCE000001 }, sCamSetCs0Modes }, // CAM_SET_CS_0 + { { 0x4E000001 }, sCamSetCsTwistedHallwayModes }, // CAM_SET_CS_TWISTED_HALLWAY + { { 0x05000009 }, sCamSetForestBirdsEyeModes }, // CAM_SET_FOREST_BIRDS_EYE + { { 0x45000001 }, sCamSetSlowChestCsModes }, // CAM_SET_SLOW_CHEST_CS + { { 0x45000001 }, sCamSetItemUnusedModes }, // CAM_SET_ITEM_UNUSED + { { 0x45000001 }, sCamSetCs3Modes }, // CAM_SET_CS_3 + { { 0x45000001 }, sCamSetCsAttentionModes }, // CAM_SET_CS_ATTENTION + { { 0x451FFFFF }, sCamSetBeanGenericModes }, // CAM_SET_BEAN_GENERIC + { { 0x451FFFFF }, sCamSetBeanLostWoodsModes }, // CAM_SET_BEAN_LOST_WOODS + { { 0xC5000001 }, sCamSetSceneUnusedModes }, // CAM_SET_SCENE_UNUSED + { { 0x45000001 }, sCamSetSceneTransitionModes }, // CAM_SET_SCENE_TRANSITION + { { 0x05000001 }, sCamSetFirePlatformModes }, // CAM_SET_FIRE_PLATFORM + { { 0x45000001 }, sCamSetFireStaircaseModes }, // CAM_SET_FIRE_STAIRCASE + { { 0x45000001 }, sCamSetForestUnusedModes }, // CAM_SET_FOREST_UNUSED + { { 0x45000001 }, sCamSetForestDefeatPoeModes }, // CAM_SET_FOREST_DEFEAT_POE + { { 0x451FFFFF }, sCamSetBigOctoModes }, // CAM_SET_BIG_OCTO + { { 0x05000033 }, sCamSetMeadowBirdsEyeModes }, // CAM_SET_MEADOW_BIRDS_EYE + { { 0x05000033 }, sCamSetMeadowUnusedModes }, // CAM_SET_MEADOW_UNUSED + { { 0x05000033 }, sCamSetFireBirdsEyeModes }, // CAM_SET_FIRE_BIRDS_EYE + { { 0x4A000001 }, sCamSetTurnAroundModes }, // CAM_SET_TURN_AROUND + { { 0x05000001 }, sCamSetPivotVerticalModes }, // CAM_SET_PIVOT_VERTICAL + { { 0x051FFFFF }, sCamSetNorm2Modes }, // CAM_SET_NORMAL2 + { { 0x0501E05F }, sCamSetFishingModes }, // CAM_SET_FISHING + { { 0x45000001 }, sCamSetCsCModes }, // CAM_SET_CS_C + { { 0x051FFFFF }, sCamSetJabuTentacleModes }, // CAM_SET_JABU_TENTACLE + { { 0x051FFFFF }, sCamSetDungeon2Modes }, // CAM_SET_DUNGEON2 + { { 0x051FFFFF }, sCamSetDirectedYawModes }, // CAM_SET_DIRECTED_YAW + { { 0xC5000ECD }, sCamSetPivotFromSideModes }, // CAM_SET_PIVOT_FROM_SIDE + { { 0x051FFFFF }, sCamSetNormal4Modes }, // CAM_SET_NORMAL4 }; s32 Camera_Normal0(Camera* camera); @@ -2195,77 +2269,77 @@ s32 Camera_Special8(Camera* camera); s32 Camera_Special9(Camera* camera); s32 (*sCameraFunctions[])(Camera*) = { - NULL, - Camera_Normal0, - Camera_Normal1, - Camera_Normal2, - Camera_Normal3, - Camera_Normal4, - Camera_Parallel0, - Camera_Parallel1, - Camera_Parallel2, - Camera_Parallel3, - Camera_Parallel4, - Camera_KeepOn0, - Camera_KeepOn1, - Camera_KeepOn2, - Camera_KeepOn3, - Camera_KeepOn4, - Camera_Subj0, - Camera_Subj1, - Camera_Subj2, - Camera_Subj3, - Camera_Subj4, - Camera_Jump0, - Camera_Jump1, - Camera_Jump2, - Camera_Jump3, - Camera_Jump4, - Camera_Battle0, - Camera_Battle1, - Camera_Battle2, - Camera_Battle3, - Camera_Battle4, - Camera_Fixed0, - Camera_Fixed1, - Camera_Fixed2, - Camera_Fixed3, - Camera_Fixed4, - Camera_Data0, - Camera_Data1, - Camera_Data2, - Camera_Data3, - Camera_Data4, - Camera_Unique0, - Camera_Unique1, - Camera_Unique2, - Camera_Unique3, - Camera_Unique4, - Camera_Unique5, - Camera_Unique6, - Camera_Unique7, - Camera_Unique8, - Camera_Unique9, - Camera_Demo0, - Camera_Demo1, - Camera_Demo2, - Camera_Demo3, - Camera_Demo4, - Camera_Demo5, - Camera_Demo6, - Camera_Demo7, - Camera_Demo8, - Camera_Demo9, - Camera_Special0, - Camera_Special1, - Camera_Special2, - Camera_Special3, - Camera_Special4, - Camera_Special5, - Camera_Special6, - Camera_Special7, - Camera_Special8, - Camera_Special9, + NULL, // CAM_FUNC_NONE + Camera_Normal0, // CAM_FUNC_NORM0 + Camera_Normal1, // CAM_FUNC_NORM1 + Camera_Normal2, // CAM_FUNC_NORM2 + Camera_Normal3, // CAM_FUNC_NORM3 + Camera_Normal4, // CAM_FUNC_NORM4 + Camera_Parallel0, // CAM_FUNC_PARA0 + Camera_Parallel1, // CAM_FUNC_PARA1 + Camera_Parallel2, // CAM_FUNC_PARA2 + Camera_Parallel3, // CAM_FUNC_PARA3 + Camera_Parallel4, // CAM_FUNC_PARA4 + Camera_KeepOn0, // CAM_FUNC_KEEP0 + Camera_KeepOn1, // CAM_FUNC_KEEP1 + Camera_KeepOn2, // CAM_FUNC_KEEP2 + Camera_KeepOn3, // CAM_FUNC_KEEP3 + Camera_KeepOn4, // CAM_FUNC_KEEP4 + Camera_Subj0, // CAM_FUNC_SUBJ0 + Camera_Subj1, // CAM_FUNC_SUBJ1 + Camera_Subj2, // CAM_FUNC_SUBJ2 + Camera_Subj3, // CAM_FUNC_SUBJ3 + Camera_Subj4, // CAM_FUNC_SUBJ4 + Camera_Jump0, // CAM_FUNC_JUMP0 + Camera_Jump1, // CAM_FUNC_JUMP1 + Camera_Jump2, // CAM_FUNC_JUMP2 + Camera_Jump3, // CAM_FUNC_JUMP3 + Camera_Jump4, // CAM_FUNC_JUMP4 + Camera_Battle0, // CAM_FUNC_BATT0 + Camera_Battle1, // CAM_FUNC_BATT1 + Camera_Battle2, // CAM_FUNC_BATT2 + Camera_Battle3, // CAM_FUNC_BATT3 + Camera_Battle4, // CAM_FUNC_BATT4 + Camera_Fixed0, // CAM_FUNC_FIXD0 + Camera_Fixed1, // CAM_FUNC_FIXD1 + Camera_Fixed2, // CAM_FUNC_FIXD2 + Camera_Fixed3, // CAM_FUNC_FIXD3 + Camera_Fixed4, // CAM_FUNC_FIXD4 + Camera_Data0, // CAM_FUNC_DATA0 + Camera_Data1, // CAM_FUNC_DATA1 + Camera_Data2, // CAM_FUNC_DATA2 + Camera_Data3, // CAM_FUNC_DATA3 + Camera_Data4, // CAM_FUNC_DATA4 + Camera_Unique0, // CAM_FUNC_UNIQ0 + Camera_Unique1, // CAM_FUNC_UNIQ1 + Camera_Unique2, // CAM_FUNC_UNIQ2 + Camera_Unique3, // CAM_FUNC_UNIQ3 + Camera_Unique4, // CAM_FUNC_UNIQ4 + Camera_Unique5, // CAM_FUNC_UNIQ5 + Camera_Unique6, // CAM_FUNC_UNIQ6 + Camera_Unique7, // CAM_FUNC_UNIQ7 + Camera_Unique8, // CAM_FUNC_UNIQ8 + Camera_Unique9, // CAM_FUNC_UNIQ9 + Camera_Demo0, // CAM_FUNC_DEMO0 + Camera_Demo1, // CAM_FUNC_DEMO1 + Camera_Demo2, // CAM_FUNC_DEMO2 + Camera_Demo3, // CAM_FUNC_DEMO3 + Camera_Demo4, // CAM_FUNC_DEMO4 + Camera_Demo5, // CAM_FUNC_DEMO5 + Camera_Demo6, // CAM_FUNC_DEMO6 + Camera_Demo7, // CAM_FUNC_DEMO7 + Camera_Demo8, // CAM_FUNC_DEMO8 + Camera_Demo9, // CAM_FUNC_DEMO9 + Camera_Special0, // CAM_FUNC_SPEC0 + Camera_Special1, // CAM_FUNC_SPEC1 + Camera_Special2, // CAM_FUNC_SPEC2 + Camera_Special3, // CAM_FUNC_SPEC3 + Camera_Special4, // CAM_FUNC_SPEC4 + Camera_Special5, // CAM_FUNC_SPEC5 + Camera_Special6, // CAM_FUNC_SPEC6 + Camera_Special7, // CAM_FUNC_SPEC7 + Camera_Special8, // CAM_FUNC_SPEC8 + Camera_Special9, // CAM_FUNC_SPEC9 }; s32 sInitRegs = 1; @@ -2295,14 +2369,78 @@ s32 D_8011D3F0 = 0; s32 sDemo5PrevAction12Frame = -16; char sCameraFunctionNames[][8] = { - "NONE ", "NORM0()", "NORM1()", "NORM2()", "NORM3()", "NORM4()", "PARA0()", "PARA1()", "PARA2()", "PARA3()", - "PARA4()", "KEEP0()", "KEEP1()", "KEEP2()", "KEEP3()", "KEEP4()", "SUBJ0()", "SUBJ1()", "SUBJ2()", "SUBJ3()", - "SUBJ4()", "JUMP0()", "JUMP1()", "JUMP2()", "JUMP3()", "JUMP4()", "BATT0()", "BATT1()", "BATT2()", "BATT3()", - "BATT4()", "FIXD0()", "FIXD1()", "FIXD2()", "FIXD3()", "FIXD4()", "DATA0()", "DATA1()", "DATA2()", "DATA3()", - "DATA4()", "UNIQ0()", "UNIQ1()", "UNIQ2()", "UNIQ3()", "UNIQ4()", "UNIQ5()", "UNIQ6()", "UNIQ7()", "UNIQ8()", - "UNIQ9()", "DEMO0()", "DEMO1()", "DEMO2()", "DEMO3()", "DEMO4()", "DEMO5()", "DEMO6()", "DEMO7()", "DEMO8()", - "DEMO9()", "SPEC0()", "SPEC1()", "SPEC2()", "SPEC3()", "SPEC4()", "SPEC5()", "SPEC6()", "SPEC7()", "SPEC8()", - "SPEC9()", "", "", "", "", "", + "NONE ", // CAM_FUNC_NONE + "NORM0()", // CAM_FUNC_NORM0 + "NORM1()", // CAM_FUNC_NORM1 + "NORM2()", // CAM_FUNC_NORM2 + "NORM3()", // CAM_FUNC_NORM3 + "NORM4()", // CAM_FUNC_NORM4 + "PARA0()", // CAM_FUNC_PARA0 + "PARA1()", // CAM_FUNC_PARA1 + "PARA2()", // CAM_FUNC_PARA2 + "PARA3()", // CAM_FUNC_PARA3 + "PARA4()", // CAM_FUNC_PARA4 + "KEEP0()", // CAM_FUNC_KEEP0 + "KEEP1()", // CAM_FUNC_KEEP1 + "KEEP2()", // CAM_FUNC_KEEP2 + "KEEP3()", // CAM_FUNC_KEEP3 + "KEEP4()", // CAM_FUNC_KEEP4 + "SUBJ0()", // CAM_FUNC_SUBJ0 + "SUBJ1()", // CAM_FUNC_SUBJ1 + "SUBJ2()", // CAM_FUNC_SUBJ2 + "SUBJ3()", // CAM_FUNC_SUBJ3 + "SUBJ4()", // CAM_FUNC_SUBJ4 + "JUMP0()", // CAM_FUNC_JUMP0 + "JUMP1()", // CAM_FUNC_JUMP1 + "JUMP2()", // CAM_FUNC_JUMP2 + "JUMP3()", // CAM_FUNC_JUMP3 + "JUMP4()", // CAM_FUNC_JUMP4 + "BATT0()", // CAM_FUNC_BATT0 + "BATT1()", // CAM_FUNC_BATT1 + "BATT2()", // CAM_FUNC_BATT2 + "BATT3()", // CAM_FUNC_BATT3 + "BATT4()", // CAM_FUNC_BATT4 + "FIXD0()", // CAM_FUNC_FIXD0 + "FIXD1()", // CAM_FUNC_FIXD1 + "FIXD2()", // CAM_FUNC_FIXD2 + "FIXD3()", // CAM_FUNC_FIXD3 + "FIXD4()", // CAM_FUNC_FIXD4 + "DATA0()", // CAM_FUNC_DATA0 + "DATA1()", // CAM_FUNC_DATA1 + "DATA2()", // CAM_FUNC_DATA2 + "DATA3()", // CAM_FUNC_DATA3 + "DATA4()", // CAM_FUNC_DATA4 + "UNIQ0()", // CAM_FUNC_UNIQ0 + "UNIQ1()", // CAM_FUNC_UNIQ1 + "UNIQ2()", // CAM_FUNC_UNIQ2 + "UNIQ3()", // CAM_FUNC_UNIQ3 + "UNIQ4()", // CAM_FUNC_UNIQ4 + "UNIQ5()", // CAM_FUNC_UNIQ5 + "UNIQ6()", // CAM_FUNC_UNIQ6 + "UNIQ7()", // CAM_FUNC_UNIQ7 + "UNIQ8()", // CAM_FUNC_UNIQ8 + "UNIQ9()", // CAM_FUNC_UNIQ9 + "DEMO0()", // CAM_FUNC_DEMO0 + "DEMO1()", // CAM_FUNC_DEMO1 + "DEMO2()", // CAM_FUNC_DEMO2 + "DEMO3()", // CAM_FUNC_DEMO3 + "DEMO4()", // CAM_FUNC_DEMO4 + "DEMO5()", // CAM_FUNC_DEMO5 + "DEMO6()", // CAM_FUNC_DEMO6 + "DEMO7()", // CAM_FUNC_DEMO7 + "DEMO8()", // CAM_FUNC_DEMO8 + "DEMO9()", // CAM_FUNC_DEMO9 + "SPEC0()", // CAM_FUNC_SPEC0 + "SPEC1()", // CAM_FUNC_SPEC1 + "SPEC2()", // CAM_FUNC_SPEC2 + "SPEC3()", // CAM_FUNC_SPEC3 + "SPEC4()", // CAM_FUNC_SPEC4 + "SPEC5()", // CAM_FUNC_SPEC5 + "SPEC6()", // CAM_FUNC_SPEC6 + "SPEC7()", // CAM_FUNC_SPEC7 + "SPEC8()", // CAM_FUNC_SPEC8 + "SPEC9()", // CAM_FUNC_SPEC9 + "", "", "", "", "", }; VecSph D_8011D658[] = { diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 9aba6c7fec..de50eeaa33 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -437,14 +437,14 @@ void Cutscene_Command_SetLighting(PlayState* play, CutsceneContext* csCtx, CsCmd // Command 0x56: Play Background Music void Cutscene_Command_PlayBGM(PlayState* play, CutsceneContext* csCtx, CsCmdMusicChange* cmd) { if (csCtx->frames == cmd->startFrame) { - func_800F595C(cmd->sequence - 1); + Audio_PlaySequenceInCutscene(cmd->sequence - 1); } } // Command 0x57: Stop Background Music void Cutscene_Command_StopBGM(PlayState* play, CutsceneContext* csCtx, CsCmdMusicChange* cmd) { if (csCtx->frames == cmd->startFrame) { - func_800F59E8(cmd->sequence - 1); + Audio_StopSequenceInCutscene(cmd->sequence - 1); } } diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c index e05b5798f0..abb3cfef6b 100644 --- a/src/code/z_elf_message.c +++ b/src/code/z_elf_message.c @@ -1,60 +1,69 @@ #include "global.h" -#include "z64elf_message.h" +#include "z64quest_hint_commands.h" -ElfMessage sChildSariaMsgs[] = { - ELF_MSG_STRENGTH_UPG(SKIP, 3, false, 0), - ELF_MSG_FLAG(CHECK, 0x61, false, EVENTCHKINF_37), - ELF_MSG_END(0x64), - ELF_MSG_FLAG(CHECK, 0x62, false, EVENTCHKINF_25), - ELF_MSG_FLAG(CHECK, 0x63, false, EVENTCHKINF_37), - ELF_MSG_FLAG(CHECK, 0x65, false, EVENTCHKINF_43), - ELF_MSG_MEDALLION(CHECK, 0x66, false, ITEM_MEDALLION_FOREST), - ELF_MSG_MEDALLION(CHECK, 0x66, false, ITEM_MEDALLION_FIRE), - ELF_MSG_MEDALLION(CHECK, 0x66, false, ITEM_MEDALLION_WATER), - ELF_MSG_SONG(CHECK, 0x67, false, ITEM_SONG_STORMS), - ELF_MSG_MEDALLION(CHECK, 0x68, false, ITEM_MEDALLION_SPIRIT), - ELF_MSG_MEDALLION(CHECK, 0x68, false, ITEM_MEDALLION_SHADOW), - ELF_MSG_END(0x69), +QuestHintCmd sChildSariaQuestHints[] = { + QUEST_HINT_STRENGTH_UPG(SKIP, 0, false, 3), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_37, false, 0x61), + QUEST_HINT_END(0x64), + + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_25, false, 0x62), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_37, false, 0x63), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_43, false, 0x65), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_FOREST, false, 0x66), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_FIRE, false, 0x66), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_WATER, false, 0x66), + QUEST_HINT_SONG(CHECK, ITEM_SONG_STORMS, false, 0x67), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_SPIRIT, false, 0x68), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_SHADOW, false, 0x68), + QUEST_HINT_END(0x69), }; -ElfMessage sAdultSariaMsgs[] = { - ELF_MSG_MEDALLION(CHECK, 0x6A, false, ITEM_MEDALLION_FOREST), - ELF_MSG_MEDALLION(CHECK, 0x6B, false, ITEM_MEDALLION_FIRE), - ELF_MSG_MEDALLION(CHECK, 0x6B, false, ITEM_MEDALLION_WATER), - ELF_MSG_MEDALLION(CHECK, 0x6C, false, ITEM_MEDALLION_SPIRIT), - ELF_MSG_MEDALLION(CHECK, 0x6C, false, ITEM_MEDALLION_SHADOW), - ELF_MSG_END(0x6D), +QuestHintCmd sAdultSariaQuestHints[] = { + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_FOREST, false, 0x6A), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_FIRE, false, 0x6B), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_WATER, false, 0x6B), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_SPIRIT, false, 0x6C), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_SHADOW, false, 0x6C), + QUEST_HINT_END(0x6D), }; -u32 ElfMessage_CheckCondition(ElfMessage* msg) { - s32 type = msg->byte0 & 0x1E; +u32 QuestHint_CheckCondition(QuestHintCmd* hintCmd) { + s32 type = hintCmd->byte0 & 0x1E; u16 flag; switch (type) { - case (ELF_MSG_CONDITION_FLAG << 1): - flag = 1 << (msg->byte1 & 0x0F); - return ((msg->byte0 & 1) == 1) == ((flag & gSaveContext.eventChkInf[(msg->byte1 & 0xF0) >> 4]) != 0); - case (ELF_MSG_CONDITION_DUNGEON_ITEM << 1): - return ((msg->byte0 & 1) == 1) == - (CHECK_DUNGEON_ITEM(msg->byte1 - ITEM_KEY_BOSS, gSaveContext.mapIndex) != 0); - case (ELF_MSG_CONDITION_ITEM << 1): - return ((msg->byte0 & 1) == 1) == (msg->byte3 == INV_CONTENT(msg->byte1)); - case (ELF_MSG_CONDITION_OTHER << 1): - switch (msg->byte1 & 0xF0) { - case (ELF_MSG_CONDITION_STRENGTH_UPG << 4): - return ((msg->byte0 & 1) == 1) == ((msg->byte1 & 0x0F) == CUR_UPG_VALUE(UPG_STRENGTH)); - case (ELF_MSG_CONDITION_BOOTS << 4): - return ((msg->byte0 & 1) == 1) == + case (QUEST_HINT_CONDITION_FLAG << 1): + flag = 1 << (hintCmd->byte1 & 0x0F); + return ((hintCmd->byte0 & 1) == 1) == + ((flag & gSaveContext.eventChkInf[(hintCmd->byte1 & 0xF0) >> 4]) != 0); + + case (QUEST_HINT_CONDITION_DUNGEON_ITEM << 1): + return ((hintCmd->byte0 & 1) == 1) == + (CHECK_DUNGEON_ITEM(hintCmd->byte1 - ITEM_KEY_BOSS, gSaveContext.mapIndex) != 0); + + case (QUEST_HINT_CONDITION_ITEM << 1): + return ((hintCmd->byte0 & 1) == 1) == (hintCmd->byte3 == INV_CONTENT(hintCmd->byte1)); + + case (QUEST_HINT_CONDITION_OTHER << 1): + switch (hintCmd->byte1 & 0xF0) { + case (QUEST_HINT_CONDITION_STRENGTH_UPG << 4): + return ((hintCmd->byte0 & 1) == 1) == ((hintCmd->byte1 & 0x0F) == CUR_UPG_VALUE(UPG_STRENGTH)); + + case (QUEST_HINT_CONDITION_BOOTS << 4): + return ((hintCmd->byte0 & 1) == 1) == (CHECK_OWNED_EQUIP(EQUIP_TYPE_BOOTS, - msg->byte3 - ITEM_BOOTS_KOKIRI + EQUIP_INV_BOOTS_KOKIRI) != 0); - case (ELF_MSG_CONDITION_SONG << 4): - return ((msg->byte0 & 1) == 1) == - (CHECK_QUEST_ITEM(msg->byte3 - ITEM_SONG_MINUET + QUEST_SONG_MINUET) != 0); - case (ELF_MSG_CONDITION_MEDALLION << 4): - return ((msg->byte0 & 1) == 1) == - (CHECK_QUEST_ITEM(msg->byte3 - ITEM_MEDALLION_FOREST + QUEST_MEDALLION_FOREST) != 0); - case (ELF_MSG_CONDITION_MAGIC << 4): - return ((msg->byte0 & 1) == 1) == (((void)0, gSaveContext.isMagicAcquired) != 0); + hintCmd->byte3 - ITEM_BOOTS_KOKIRI + EQUIP_INV_BOOTS_KOKIRI) != 0); + + case (QUEST_HINT_CONDITION_SONG << 4): + return ((hintCmd->byte0 & 1) == 1) == + (CHECK_QUEST_ITEM(hintCmd->byte3 - ITEM_SONG_MINUET + QUEST_SONG_MINUET) != 0); + + case (QUEST_HINT_CONDITION_MEDALLION << 4): + return ((hintCmd->byte0 & 1) == 1) == + (CHECK_QUEST_ITEM(hintCmd->byte3 - ITEM_MEDALLION_FOREST + QUEST_MEDALLION_FOREST) != 0); + + case (QUEST_HINT_CONDITION_MAGIC << 4): + return ((hintCmd->byte0 & 1) == 1) == (((void)0, gSaveContext.isMagicAcquired) != 0); } } @@ -64,111 +73,126 @@ u32 ElfMessage_CheckCondition(ElfMessage* msg) { return false; } -u32 func_8006BE88(ElfMessage** msgp) { - u32 temp = true; +u32 QuestHint_CheckConditionChain(QuestHintCmd** hintCmdPtr) { + u32 allConditionsMet = true; - while (((*msgp)->byte0 & 0xE0) == (ELF_MSG_TYPE_UNK_1 << 5)) { - if (!ElfMessage_CheckCondition(*msgp)) { - temp = false; + while (((*hintCmdPtr)->byte0 & 0xE0) == (QUEST_HINT_TYPE_CHAIN << 5)) { + // if any of the conditions checked in the chain are not met, + // the whole chain is considered false + if (!QuestHint_CheckCondition(*hintCmdPtr)) { + allConditionsMet = false; } - *msgp += 1; + + *hintCmdPtr += 1; } - if (temp) { - return ElfMessage_CheckCondition(*msgp); + if (allConditionsMet) { + return QuestHint_CheckCondition(*hintCmdPtr); } else { return false; } } -u32 func_8006BF1C(ElfMessage** msgp) { - ElfMessage* msg = *msgp; - u32 sp44[10]; - s32 temp1 = 0; - s32 temp2 = 0; - s32 temp3; +u32 QuestHint_CheckRandomCondition(QuestHintCmd** hintCmdPtr) { + QuestHintCmd* hintCmd = *hintCmdPtr; + u32 conditions[10]; + s32 i = 0; + s32 totalChecked = 0; + s32 rand; do { - sp44[temp2] = ElfMessage_CheckCondition(msg); - temp1 += sp44[temp2]; - temp2++; - msg++; - } while ((msg->byte0 & 0xE0) == (ELF_MSG_TYPE_UNK_2 << 5)); + conditions[totalChecked] = QuestHint_CheckCondition(hintCmd); + // i is incremented if the condition was met + i += conditions[totalChecked]; + totalChecked++; + hintCmd++; + } while ((hintCmd->byte0 & 0xE0) == (QUEST_HINT_TYPE_RANDOM << 5)); - if (temp1 == 0) { + // if none of the conditions checked were satisfied, there are none to use + if (i == 0) { return false; } - temp3 = Rand_ZeroFloat(temp1); - for (temp1 = 0; temp1 < temp2; temp1++) { - if (sp44[temp1]) { - if (temp3 > 0) { - temp3--; + // choose a random number between 0 and the total amount of conditions met + rand = Rand_ZeroFloat(i); + + for (i = 0; i < totalChecked; i++) { + // keep decrementing the random number until it reaches 0 then use that hint + if (conditions[i]) { + if (rand > 0) { + rand--; } else { return true; } } - *msgp += 1; + + *hintCmdPtr += 1; } return false; } -u16 ElfMessage_GetTextFromMsgs(ElfMessage* msg) { +u16 QuestHint_GetTextIdFromScript(QuestHintCmd* hintCmd) { while (true) { - switch (msg->byte0 & 0xE0) { - case (ELF_MSG_TYPE_CHECK << 5): - if (ElfMessage_CheckCondition(msg)) { - return msg->byte2 | 0x100; + switch (hintCmd->byte0 & 0xE0) { + case (QUEST_HINT_TYPE_CHECK << 5): + if (QuestHint_CheckCondition(hintCmd)) { + return hintCmd->byte2 | 0x100; } break; - case (ELF_MSG_TYPE_UNK_1 << 5): - if (func_8006BE88(&msg)) { - return msg->byte2 | 0x100; + + case (QUEST_HINT_TYPE_CHAIN << 5): + if (QuestHint_CheckConditionChain(&hintCmd)) { + return hintCmd->byte2 | 0x100; } break; - case (ELF_MSG_TYPE_UNK_2 << 5): - if (func_8006BF1C(&msg)) { - return msg->byte2 | 0x100; + + case (QUEST_HINT_TYPE_RANDOM << 5): + if (QuestHint_CheckRandomCondition(&hintCmd)) { + return hintCmd->byte2 | 0x100; } break; - case (ELF_MSG_TYPE_SKIP << 5): - if (ElfMessage_CheckCondition(msg)) { - msg += msg->byte2; - msg--; + + case (QUEST_HINT_TYPE_SKIP << 5): + if (QuestHint_CheckCondition(hintCmd)) { + hintCmd += hintCmd->byte2; // skip the specified amount + hintCmd--; // decrement by 1 because it will be incremented again below } break; - case (ELF_MSG_TYPE_END << 5): - return msg->byte2 | 0x100; + + case (QUEST_HINT_TYPE_END << 5): + return hintCmd->byte2 | 0x100; + default: LOG_STRING("企画外 条件", "../z_elf_message.c", 281); // "Unplanned conditions" ASSERT(0, "0", "../z_elf_message.c", 282); } - msg++; + + hintCmd++; } } -u16 ElfMessage_GetSariaText(PlayState* play) { +u16 QuestHint_GetSariaTextId(PlayState* play) { Player* player = GET_PLAYER(play); - ElfMessage* msgs; + QuestHintCmd* sariaQuestHints; if (!LINK_IS_ADULT) { if (Actor_FindNearby(play, &player->actor, ACTOR_EN_SA, 4, 800.0f) == NULL) { - msgs = sChildSariaMsgs; + sariaQuestHints = sChildSariaQuestHints; } else { return 0x0160; // Special text about Saria preferring to talk to you face-to-face } } else { - msgs = sAdultSariaMsgs; + sariaQuestHints = sAdultSariaQuestHints; } - return ElfMessage_GetTextFromMsgs(msgs); + return QuestHint_GetTextIdFromScript(sariaQuestHints); } -u16 ElfMessage_GetCUpText(PlayState* play) { - if (play->cUpElfMsgs == NULL) { +u16 QuestHint_GetNaviTextId(PlayState* play) { + if (play->naviQuestHints == NULL) { return 0; } else { - return ElfMessage_GetTextFromMsgs(play->cUpElfMsgs); + return QuestHint_GetTextIdFromScript(play->naviQuestHints); } } diff --git a/src/code/z_lib.c b/src/code/z_lib.c index 3dd0030f07..ac5220ab0b 100644 --- a/src/code/z_lib.c +++ b/src/code/z_lib.c @@ -23,10 +23,18 @@ void Lib_MemSet(u8* dest, size_t len, u8 val) { // clang-format on } +/** + * @param angle binang + * @return cos(angle) + */ f32 Math_CosS(s16 angle) { return coss(angle) * SHT_MINV; } +/** + * @param angle binang + * @return sin(angle) + */ f32 Math_SinS(s16 angle) { return sins(angle) * SHT_MINV; } diff --git a/src/code/z_path.c b/src/code/z_path.c index db3c8af4d2..d27530eb3a 100644 --- a/src/code/z_path.c +++ b/src/code/z_path.c @@ -4,7 +4,7 @@ Path* Path_GetByIndex(PlayState* play, s16 index, s16 max) { Path* path; if (index != max) { - path = &play->setupPathList[index]; + path = &play->pathList[index]; } else { path = NULL; } diff --git a/src/code/z_play.c b/src/code/z_play.c index 5377c932fb..5dae761477 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -403,7 +403,7 @@ void Play_Init(GameState* thisx) { (s32)(zAllocAligned + zAllocSize) - (s32)(zAllocAligned - zAlloc)); Fault_AddClient(&D_801614B8, ZeldaArena_Display, NULL, NULL); - func_800304DC(this, &this->actorCtx, this->linkActorEntry); + Actor_InitContext(this, &this->actorCtx, this->playerEntry); while (!func_800973FC(this, &this->roomCtx)) { ; // Empty Loop @@ -1408,14 +1408,17 @@ void Play_InitEnvironment(PlayState* this, s16 skyboxId) { } void Play_InitScene(PlayState* this, s32 spawn) { - this->curSpawn = spawn; - this->linkActorEntry = NULL; + this->spawn = spawn; + + this->playerEntry = NULL; this->unk_11DFC = NULL; - this->setupEntranceList = NULL; - this->setupExitList = NULL; - this->cUpElfMsgs = NULL; - this->setupPathList = NULL; - this->numSetupActors = 0; + this->spawnList = NULL; + this->exitList = NULL; + this->naviQuestHints = NULL; + this->pathList = NULL; + + this->numActorEntries = 0; + Object_InitBank(this, &this->objectCtx); LightContext_Init(this, &this->lightCtx); TransitionActor_InitContext(&this->state, &this->transiActorCtx); diff --git a/src/code/z_room.c b/src/code/z_room.c index 953739f2a7..8447a04605 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -582,7 +582,7 @@ u32 func_80096FE8(PlayState* play, RoomContext* roomCtx) { roomCtx->status = 0; frontRoom = gSaveContext.respawnFlag > 0 ? ((void)0, gSaveContext.respawn[gSaveContext.respawnFlag - 1].roomIndex) - : play->setupEntranceList[play->curSpawn].room; + : play->spawnList[play->spawn].room; func_8009728C(play, roomCtx, frontRoom); return maxRoomSize; diff --git a/src/code/z_scene.c b/src/code/z_scene.c index ac1c779ef5..7f8598fa76 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -1,7 +1,7 @@ #include "global.h" #include "vt.h" -RomFile sNaviMsgFiles[]; +RomFile sNaviQuestHintFiles[]; s32 Object_Spawn(ObjectContext* objectCtx, s16 objectId) { u32 size; @@ -182,22 +182,22 @@ s32 Scene_ExecuteCommands(PlayState* play, SceneCmd* sceneCmd) { return 0; } -void Scene_CommandSpawnList(PlayState* play, SceneCmd* cmd) { - ActorEntry* linkEntry = play->linkActorEntry = - (ActorEntry*)SEGMENTED_TO_VIRTUAL(cmd->spawnList.data) + play->setupEntranceList[play->curSpawn].spawn; +void Scene_CommandPlayerEntryList(PlayState* play, SceneCmd* cmd) { + ActorEntry* playerEntry = play->playerEntry = + (ActorEntry*)SEGMENTED_TO_VIRTUAL(cmd->playerEntryList.data) + play->spawnList[play->spawn].playerEntryIndex; s16 linkObjectId; play->linkAgeOnLoad = ((void)0, gSaveContext.linkAge); linkObjectId = gLinkObjectIds[((void)0, gSaveContext.linkAge)]; - gActorOverlayTable[linkEntry->id].initInfo->objectId = linkObjectId; + gActorOverlayTable[playerEntry->id].initInfo->objectId = linkObjectId; Object_Spawn(&play->objectCtx, linkObjectId); } -void Scene_CommandActorList(PlayState* play, SceneCmd* cmd) { - play->numSetupActors = cmd->actorList.length; - play->setupActorList = SEGMENTED_TO_VIRTUAL(cmd->actorList.data); +void Scene_CommandActorEntryList(PlayState* play, SceneCmd* cmd) { + play->numActorEntries = cmd->actorEntryList.length; + play->actorEntryList = SEGMENTED_TO_VIRTUAL(cmd->actorEntryList.data); } void Scene_CommandUnused2(PlayState* play, SceneCmd* cmd) { @@ -221,8 +221,8 @@ void Scene_CommandRoomList(PlayState* play, SceneCmd* cmd) { play->roomList = SEGMENTED_TO_VIRTUAL(cmd->roomList.data); } -void Scene_CommandEntranceList(PlayState* play, SceneCmd* cmd) { - play->setupEntranceList = SEGMENTED_TO_VIRTUAL(cmd->entranceList.data); +void Scene_CommandSpawnList(PlayState* play, SceneCmd* cmd) { + play->spawnList = SEGMENTED_TO_VIRTUAL(cmd->spawnList.data); } void Scene_CommandSpecialFiles(PlayState* play, SceneCmd* cmd) { @@ -231,8 +231,8 @@ void Scene_CommandSpecialFiles(PlayState* play, SceneCmd* cmd) { gSegments[5] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[play->objectCtx.subKeepIndex].segment); } - if (cmd->specialFiles.cUpElfMsgNum != 0) { - play->cUpElfMsgs = Play_LoadFile(play, &sNaviMsgFiles[cmd->specialFiles.cUpElfMsgNum - 1]); + if (cmd->specialFiles.naviQuestHintFileId != NAVI_QUEST_HINTS_NONE) { + play->naviQuestHints = Play_LoadFile(play, &sNaviQuestHintFiles[cmd->specialFiles.naviQuestHintFileId - 1]); } } @@ -308,10 +308,10 @@ void Scene_CommandLightList(PlayState* play, SceneCmd* cmd) { } void Scene_CommandPathList(PlayState* play, SceneCmd* cmd) { - play->setupPathList = SEGMENTED_TO_VIRTUAL(cmd->pathList.data); + play->pathList = SEGMENTED_TO_VIRTUAL(cmd->pathList.data); } -void Scene_CommandTransitionActorList(PlayState* play, SceneCmd* cmd) { +void Scene_CommandTransitionActorEntryList(PlayState* play, SceneCmd* cmd) { play->transiActorCtx.numActors = cmd->transiActorList.length; play->transiActorCtx.list = SEGMENTED_TO_VIRTUAL(cmd->transiActorList.data); } @@ -386,7 +386,7 @@ void Scene_CommandWindSettings(PlayState* play, SceneCmd* cmd) { } void Scene_CommandExitList(PlayState* play, SceneCmd* cmd) { - play->setupExitList = SEGMENTED_TO_VIRTUAL(cmd->exitList.data); + play->exitList = SEGMENTED_TO_VIRTUAL(cmd->exitList.data); } void Scene_CommandUndefined9(PlayState* play, SceneCmd* cmd) { @@ -470,35 +470,35 @@ void Scene_CommandMiscSettings(PlayState* play, SceneCmd* cmd) { } void (*gSceneCmdHandlers[SCENE_CMD_ID_MAX])(PlayState*, SceneCmd*) = { - Scene_CommandSpawnList, // SCENE_CMD_ID_SPAWN_LIST - Scene_CommandActorList, // SCENE_CMD_ID_ACTOR_LIST - Scene_CommandUnused2, // SCENE_CMD_ID_UNUSED_2 - Scene_CommandCollisionHeader, // SCENE_CMD_ID_COLLISION_HEADER - Scene_CommandRoomList, // SCENE_CMD_ID_ROOM_LIST - Scene_CommandWindSettings, // SCENE_CMD_ID_WIND_SETTINGS - Scene_CommandEntranceList, // SCENE_CMD_ID_ENTRANCE_LIST - Scene_CommandSpecialFiles, // SCENE_CMD_ID_SPECIAL_FILES - Scene_CommandRoomBehavior, // SCENE_CMD_ID_ROOM_BEHAVIOR - Scene_CommandUndefined9, // SCENE_CMD_ID_UNDEFINED_9 - Scene_CommandRoomShape, // SCENE_CMD_ID_ROOM_SHAPE - Scene_CommandObjectList, // SCENE_CMD_ID_OBJECT_LIST - Scene_CommandLightList, // SCENE_CMD_ID_LIGHT_LIST - Scene_CommandPathList, // SCENE_CMD_ID_PATH_LIST - Scene_CommandTransitionActorList, // SCENE_CMD_ID_TRANSITION_ACTOR_LIST - Scene_CommandLightSettingsList, // SCENE_CMD_ID_LIGHT_SETTINGS_LIST - Scene_CommandTimeSettings, // SCENE_CMD_ID_TIME_SETTINGS - Scene_CommandSkyboxSettings, // SCENE_CMD_ID_SKYBOX_SETTINGS - Scene_CommandSkyboxDisables, // SCENE_CMD_ID_SKYBOX_DISABLES - Scene_CommandExitList, // SCENE_CMD_ID_EXIT_LIST - NULL, // SCENE_CMD_ID_END - Scene_CommandSoundSettings, // SCENE_CMD_ID_SOUND_SETTINGS - Scene_CommandEchoSettings, // SCENE_CMD_ID_ECHO_SETTINGS - Scene_CommandCutsceneData, // SCENE_CMD_ID_CUTSCENE_DATA - Scene_CommandAlternateHeaderList, // SCENE_CMD_ID_ALTERNATE_HEADER_LIST - Scene_CommandMiscSettings, // SCENE_CMD_ID_MISC_SETTINGS + Scene_CommandPlayerEntryList, // SCENE_CMD_ID_SPAWN_LIST + Scene_CommandActorEntryList, // SCENE_CMD_ID_ACTOR_LIST + Scene_CommandUnused2, // SCENE_CMD_ID_UNUSED_2 + Scene_CommandCollisionHeader, // SCENE_CMD_ID_COLLISION_HEADER + Scene_CommandRoomList, // SCENE_CMD_ID_ROOM_LIST + Scene_CommandWindSettings, // SCENE_CMD_ID_WIND_SETTINGS + Scene_CommandSpawnList, // SCENE_CMD_ID_ENTRANCE_LIST + Scene_CommandSpecialFiles, // SCENE_CMD_ID_SPECIAL_FILES + Scene_CommandRoomBehavior, // SCENE_CMD_ID_ROOM_BEHAVIOR + Scene_CommandUndefined9, // SCENE_CMD_ID_UNDEFINED_9 + Scene_CommandRoomShape, // SCENE_CMD_ID_ROOM_SHAPE + Scene_CommandObjectList, // SCENE_CMD_ID_OBJECT_LIST + Scene_CommandLightList, // SCENE_CMD_ID_LIGHT_LIST + Scene_CommandPathList, // SCENE_CMD_ID_PATH_LIST + Scene_CommandTransitionActorEntryList, // SCENE_CMD_ID_TRANSITION_ACTOR_LIST + Scene_CommandLightSettingsList, // SCENE_CMD_ID_LIGHT_SETTINGS_LIST + Scene_CommandTimeSettings, // SCENE_CMD_ID_TIME_SETTINGS + Scene_CommandSkyboxSettings, // SCENE_CMD_ID_SKYBOX_SETTINGS + Scene_CommandSkyboxDisables, // SCENE_CMD_ID_SKYBOX_DISABLES + Scene_CommandExitList, // SCENE_CMD_ID_EXIT_LIST + NULL, // SCENE_CMD_ID_END + Scene_CommandSoundSettings, // SCENE_CMD_ID_SOUND_SETTINGS + Scene_CommandEchoSettings, // SCENE_CMD_ID_ECHO_SETTINGS + Scene_CommandCutsceneData, // SCENE_CMD_ID_CUTSCENE_DATA + Scene_CommandAlternateHeaderList, // SCENE_CMD_ID_ALTERNATE_HEADER_LIST + Scene_CommandMiscSettings, // SCENE_CMD_ID_MISC_SETTINGS }; -RomFile sNaviMsgFiles[] = { +RomFile sNaviQuestHintFiles[] = { ROM_FILE(elf_message_field), ROM_FILE(elf_message_ydan), ROM_FILE_UNSET, diff --git a/src/code/z_sram.c b/src/code/z_sram.c index 4e79b22144..24c7e0d481 100644 --- a/src/code/z_sram.c +++ b/src/code/z_sram.c @@ -136,9 +136,52 @@ static ItemEquips sNewSaveEquips = { }; static Inventory sNewSaveInventory = { - { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, // items - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // ammo + // items + { + ITEM_NONE, // SLOT_STICK + ITEM_NONE, // SLOT_NUT + ITEM_NONE, // SLOT_BOMB + ITEM_NONE, // SLOT_BOW + ITEM_NONE, // SLOT_ARROW_FIRE + ITEM_NONE, // SLOT_DINS_FIRE + ITEM_NONE, // SLOT_SLINGSHOT + ITEM_NONE, // SLOT_OCARINA + ITEM_NONE, // SLOT_BOMBCHU + ITEM_NONE, // SLOT_HOOKSHOT + ITEM_NONE, // SLOT_ARROW_ICE + ITEM_NONE, // SLOT_FARORES_WIND + ITEM_NONE, // SLOT_BOOMERANG + ITEM_NONE, // SLOT_LENS + ITEM_NONE, // SLOT_BEAN + ITEM_NONE, // SLOT_HAMMER + ITEM_NONE, // SLOT_ARROW_LIGHT + ITEM_NONE, // SLOT_NAYRUS_LOVE + ITEM_NONE, // SLOT_BOTTLE_1 + ITEM_NONE, // SLOT_BOTTLE_2 + ITEM_NONE, // SLOT_BOTTLE_3 + ITEM_NONE, // SLOT_BOTTLE_4 + ITEM_NONE, // SLOT_TRADE_ADULT + ITEM_NONE, // SLOT_TRADE_CHILD + }, + // ammo + { + 0, // SLOT_STICK + 0, // SLOT_NUT + 0, // SLOT_BOMB + 0, // SLOT_BOW + 0, // SLOT_ARROW_FIRE + 0, // SLOT_DINS_FIRE + 0, // SLOT_SLINGSHOT + 0, // SLOT_OCARINA + 0, // SLOT_BOMBCHU + 0, // SLOT_HOOKSHOT + 0, // SLOT_ARROW_ICE + 0, // SLOT_FARORES_WIND + 0, // SLOT_BOOMERANG + 0, // SLOT_LENS + 0, // SLOT_BEAN + 0, // SLOT_HAMMER + }, // equipment (((1 << EQUIP_INV_TUNIC_KOKIRI) << (EQUIP_TYPE_TUNIC * 4)) | ((1 << EQUIP_INV_BOOTS_KOKIRI) << (EQUIP_TYPE_BOOTS * 4))), @@ -223,13 +266,52 @@ static ItemEquips sDebugSaveEquips = { }; static Inventory sDebugSaveInventory = { + // items { - ITEM_STICK, ITEM_NUT, ITEM_BOMB, ITEM_BOW, ITEM_ARROW_FIRE, ITEM_DINS_FIRE, - ITEM_SLINGSHOT, ITEM_OCARINA_FAIRY, ITEM_BOMBCHU, ITEM_HOOKSHOT, ITEM_ARROW_ICE, ITEM_FARORES_WIND, - ITEM_BOOMERANG, ITEM_LENS, ITEM_BEAN, ITEM_HAMMER, ITEM_ARROW_LIGHT, ITEM_NAYRUS_LOVE, - ITEM_BOTTLE, ITEM_POTION_RED, ITEM_POTION_GREEN, ITEM_POTION_BLUE, ITEM_POCKET_EGG, ITEM_WEIRD_EGG, - }, // items - { 50, 50, 10, 30, 1, 1, 30, 1, 50, 1, 1, 1, 1, 1, 1, 1 }, // ammo + ITEM_STICK, // SLOT_STICK + ITEM_NUT, // SLOT_NUT + ITEM_BOMB, // SLOT_BOMB + ITEM_BOW, // SLOT_BOW + ITEM_ARROW_FIRE, // SLOT_ARROW_FIRE + ITEM_DINS_FIRE, // SLOT_DINS_FIRE + ITEM_SLINGSHOT, // SLOT_SLINGSHOT + ITEM_OCARINA_FAIRY, // SLOT_OCARINA + ITEM_BOMBCHU, // SLOT_BOMBCHU + ITEM_HOOKSHOT, // SLOT_HOOKSHOT + ITEM_ARROW_ICE, // SLOT_ARROW_ICE + ITEM_FARORES_WIND, // SLOT_FARORES_WIND + ITEM_BOOMERANG, // SLOT_BOOMERANG + ITEM_LENS, // SLOT_LENS + ITEM_BEAN, // SLOT_BEAN + ITEM_HAMMER, // SLOT_HAMMER + ITEM_ARROW_LIGHT, // SLOT_ARROW_LIGHT + ITEM_NAYRUS_LOVE, // SLOT_NAYRUS_LOVE + ITEM_BOTTLE, // SLOT_BOTTLE_1 + ITEM_POTION_RED, // SLOT_BOTTLE_2 + ITEM_POTION_GREEN, // SLOT_BOTTLE_3 + ITEM_POTION_BLUE, // SLOT_BOTTLE_4 + ITEM_POCKET_EGG, // SLOT_TRADE_ADULT + ITEM_WEIRD_EGG, // SLOT_TRADE_CHILD + }, + // ammo + { + 50, // SLOT_STICK + 50, // SLOT_NUT + 10, // SLOT_BOMB + 30, // SLOT_BOW + 1, // SLOT_ARROW_FIRE + 1, // SLOT_DINS_FIRE + 30, // SLOT_SLINGSHOT + 1, // SLOT_OCARINA + 50, // SLOT_BOMBCHU + 1, // SLOT_HOOKSHOT + 1, // SLOT_ARROW_ICE + 1, // SLOT_FARORES_WIND + 1, // SLOT_BOOMERANG + 1, // SLOT_LENS + 1, // SLOT_BEAN + 1 // SLOT_HAMMER + }, // equipment ((((1 << EQUIP_INV_SWORD_KOKIRI) << (EQUIP_TYPE_SWORD * 4)) | ((1 << EQUIP_INV_SWORD_MASTER) << (EQUIP_TYPE_SWORD * 4)) | @@ -300,9 +382,22 @@ void Sram_InitDebugSave(void) { } static s16 sDungeonEntrances[] = { - ENTR_YDAN_0, ENTR_DDAN_0, ENTR_BDAN_0, ENTR_BMORI1_0, ENTR_HIDAN_0, ENTR_MIZUSIN_0, - ENTR_JYASINZOU_0, ENTR_HAKADAN_0, ENTR_HAKADANCH_0, ENTR_ICE_DOUKUTO_0, ENTR_GANON_0, ENTR_MEN_0, - ENTR_GERUDOWAY_0, ENTR_GANONTIKA_0, ENTR_GANON_SONOGO_0, ENTR_GANONTIKA_SONOGO_0, + ENTR_YDAN_0, // SCENE_YDAN + ENTR_DDAN_0, // SCENE_DDAN + ENTR_BDAN_0, // SCENE_BDAN + ENTR_BMORI1_0, // SCENE_BMORI1 + ENTR_HIDAN_0, // SCENE_HIDAN + ENTR_MIZUSIN_0, // SCENE_MIZUSIN + ENTR_JYASINZOU_0, // SCENE_JYASINZOU + ENTR_HAKADAN_0, // SCENE_HAKADAN + ENTR_HAKADANCH_0, // SCENE_HAKADANCH + ENTR_ICE_DOUKUTO_0, // SCENE_ICE_DOUKUTO + ENTR_GANON_0, // SCENE_GANON + ENTR_MEN_0, // SCENE_MEN + ENTR_GERUDOWAY_0, // SCENE_GERUDOWAY + ENTR_GANONTIKA_0, // SCENE_GANONTIKA + ENTR_GANON_SONOGO_0, // SCENE_GANON_SONOGO + ENTR_GANONTIKA_SONOGO_0, // SCENE_GANONTIKA_SONOGO }; /** diff --git a/src/elf_message/elf_message_field.c b/src/elf_message/elf_message_field.c index cd48f53ff3..406a975c97 100644 --- a/src/elf_message/elf_message_field.c +++ b/src/elf_message/elf_message_field.c @@ -1,33 +1,33 @@ #include "global.h" -#include "z64elf_message.h" +#include "z64quest_hint_commands.h" -ElfMessage gOverworldNaviMsgs[] = { - ELF_MSG_FLAG(CHECK, 0x40, false, EVENTCHKINF_05), - ELF_MSG_FLAG(CHECK, 0x41, false, EVENTCHKINF_09), - ELF_MSG_FLAG(CHECK, 0x42, false, EVENTCHKINF_12), - ELF_MSG_FLAG(CHECK, 0x43, false, EVENTCHKINF_TALON_RETURNED_FROM_CASTLE), - ELF_MSG_FLAG(CHECK, 0x44, false, EVENTCHKINF_40), - ELF_MSG_SONG(CHECK, 0x45, false, ITEM_SONG_SARIA), - ELF_MSG_STRENGTH_UPG(CHECK, 0x46, true, 0), - ELF_MSG_FLAG(CHECK, 0x47, false, EVENTCHKINF_25), - ELF_MSG_MAGIC(CHECK, 0x48, false), - ELF_MSG_FLAG(CHECK, 0x49, false, EVENTCHKINF_33), - ELF_MSG_FLAG(CHECK, 0x4A, false, EVENTCHKINF_37), - ELF_MSG_FLAG(CHECK, 0x4B, false, EVENTCHKINF_80), - ELF_MSG_FLAG(CHECK, 0x4C, false, EVENTCHKINF_43), - ELF_MSG_FLAG(CHECK, 0x4D, false, EVENTCHKINF_45), - ELF_MSG_ITEM(CHECK, 0x4E, true, ITEM_HOOKSHOT, ITEM_NONE), - ELF_MSG_MEDALLION(CHECK, 0x50, false, ITEM_MEDALLION_FOREST), - ELF_MSG_MEDALLION(CHECK, 0x51, false, ITEM_MEDALLION_FIRE), - ELF_MSG_BOOTS(CHECK, 0x52, false, ITEM_BOOTS_IRON), - ELF_MSG_MEDALLION(CHECK, 0x53, false, ITEM_MEDALLION_WATER), - ELF_MSG_FLAG(CHECK, 0x54, false, EVENTCHKINF_AA), - ELF_MSG_ITEM(CHECK, 0x55, true, ITEM_LENS, ITEM_NONE), - ELF_MSG_MEDALLION(CHECK, 0x57, false, ITEM_MEDALLION_SHADOW), - ELF_MSG_SONG(CHECK, 0x58, false, ITEM_SONG_REQUIEM), - ELF_MSG_STRENGTH_UPG(CHECK, 0x56, true, 1), - ELF_MSG_MEDALLION(CHECK, 0x5A, false, ITEM_MEDALLION_SPIRIT), - ELF_MSG_ITEM(CHECK, 0x5B, true, ITEM_ARROW_LIGHT, ITEM_NONE), - ELF_MSG_FLAG(CHECK, 0x5C, false, EVENTCHKINF_C3), - ELF_MSG_END(0x5F), +QuestHintCmd gOverworldNaviQuestHints[] = { + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_05, false, 0x40), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_09, false, 0x41), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_12, false, 0x42), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_TALON_RETURNED_FROM_CASTLE, false, 0x43), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_40, false, 0x44), + QUEST_HINT_SONG(CHECK, ITEM_SONG_SARIA, false, 0x45), + QUEST_HINT_STRENGTH_UPG(CHECK, 0, true, 0x46), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_25, false, 0x47), + QUEST_HINT_MAGIC(CHECK, false, 0x48), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_33, false, 0x49), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_37, false, 0x4A), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_80, false, 0x4B), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_43, false, 0x4C), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_45, false, 0x4D), + QUEST_HINT_ITEM(CHECK, ITEM_HOOKSHOT, ITEM_NONE, true, 0x4E), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_FOREST, false, 0x50), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_FIRE, false, 0x51), + QUEST_HINT_BOOTS(CHECK, ITEM_BOOTS_IRON, false, 0x52), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_WATER, false, 0x53), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_AA, false, 0x54), + QUEST_HINT_ITEM(CHECK, ITEM_LENS, ITEM_NONE, true, 0x55), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_SHADOW, false, 0x57), + QUEST_HINT_SONG(CHECK, ITEM_SONG_REQUIEM, false, 0x58), + QUEST_HINT_STRENGTH_UPG(CHECK, 1, true, 0x56), + QUEST_HINT_MEDALLION(CHECK, ITEM_MEDALLION_SPIRIT, false, 0x5A), + QUEST_HINT_ITEM(CHECK, ITEM_ARROW_LIGHT, ITEM_NONE, true, 0x5B), + QUEST_HINT_FLAG(CHECK, EVENTCHKINF_C3, false, 0x5C), + QUEST_HINT_END(0x5F), }; diff --git a/src/elf_message/elf_message_ydan.c b/src/elf_message/elf_message_ydan.c index 54050e372e..21b5fe89fa 100644 --- a/src/elf_message/elf_message_ydan.c +++ b/src/elf_message/elf_message_ydan.c @@ -1,6 +1,6 @@ #include "global.h" -#include "z64elf_message.h" +#include "z64quest_hint_commands.h" -ElfMessage gDungeonNaviMsgs[] = { - ELF_MSG_END(0x5F), +QuestHintCmd gDungeonNaviQuestHints[] = { + QUEST_HINT_END(0x5F), }; diff --git a/src/libultra/gu/cosf.c b/src/libultra/gu/cosf.c index cae7159ea8..639084093f 100644 --- a/src/libultra/gu/cosf.c +++ b/src/libultra/gu/cosf.c @@ -14,7 +14,11 @@ static const du pilo = { 0x3E6110B4, 0x611A6263 }; static const fu zero = { 0x00000000 }; -f32 cosf(f32 x) { +/** + * @param angle radians + * @return cos(angle) + */ +f32 cosf(f32 angle) { f32 absx; f64 dx; f64 xSq; @@ -22,13 +26,13 @@ f32 cosf(f32 x) { f64 dn; s32 n; f64 result; - s32 ix = *(s32*)&x; + s32 ix = *(s32*)∠ s32 xpt = (ix >> 22); xpt &= 0x1FF; if (xpt < 0x136) { - absx = (x > 0) ? x : -x; + absx = (angle > 0) ? angle : -angle; dx = absx; dn = dx * rpi.d + 0.5; @@ -51,7 +55,7 @@ f32 cosf(f32 x) { } return -(f32)result; } - if (x != x) { + if (angle != angle) { return __libm_qnan_f; } diff --git a/src/libultra/gu/coss.c b/src/libultra/gu/coss.c index 2dca0234b2..0eb8b5e65d 100644 --- a/src/libultra/gu/coss.c +++ b/src/libultra/gu/coss.c @@ -1,5 +1,9 @@ #include "global.h" +/** + * @param angle binang + * @return cos(angle)*0x7FFF + */ s16 coss(u16 angle) { return sins(angle + 0x4000); } diff --git a/src/libultra/gu/sinf.c b/src/libultra/gu/sinf.c index bb7f58e729..49929e8436 100644 --- a/src/libultra/gu/sinf.c +++ b/src/libultra/gu/sinf.c @@ -14,20 +14,24 @@ static const du pilo = { 0x3E6110B4, 0x611A6263 }; static const fu zero = { 0x00000000 }; -f32 sinf(f32 x) { +/** + * @param angle radians + * @return sin(angle) + */ +f32 sinf(f32 angle) { f64 dx; f64 xSq; f64 polyApprox; f64 dn; s32 n; f64 result; - s32 ix = *(s32*)&x; + s32 ix = *(s32*)∠ s32 xpt = (ix >> 22); xpt &= 0x1FF; if (xpt < 0xFF) { - dx = x; + dx = angle; if (xpt >= 0xE6) { xSq = SQ(dx); @@ -35,11 +39,11 @@ f32 sinf(f32 x) { result = dx + (dx * xSq) * polyApprox; return (f32)result; } - return x; + return angle; } if (xpt < 0x136) { - dx = x; + dx = angle; dn = dx * rpi.d; n = ROUND(dn); dn = n; @@ -57,7 +61,7 @@ f32 sinf(f32 x) { return -(f32)result; } - if (x != x) { + if (angle != angle) { return __libm_qnan_f; } return zero.f; diff --git a/src/libultra/gu/sins.c b/src/libultra/gu/sins.c index b6c2d229a9..636b76bd66 100644 --- a/src/libultra/gu/sins.c +++ b/src/libultra/gu/sins.c @@ -2,18 +2,22 @@ #include "sintable.inc.c" -s16 sins(u16 x) { +/** + * @param angle binang + * @return sin(angle)*0x7FFF + */ +s16 sins(u16 angle) { s16 value; - x >>= 4; + angle >>= 4; - if (x & 0x400) { - value = sintable[0x3FF - (x & 0x3FF)]; + if (angle & 0x400) { + value = sintable[0x3FF - (angle & 0x3FF)]; } else { - value = sintable[x & 0x3FF]; + value = sintable[angle & 0x3FF]; } - if (x & 0x800) { + if (angle & 0x800) { return -value; } else { return value; diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c index 576fd963ed..d2cdbe095b 100644 --- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c +++ b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c @@ -70,7 +70,7 @@ void BgDyYoseizo_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; BgDyYoseizo* this = (BgDyYoseizo*)thisx; - this->fountainType = play->curSpawn; + this->fountainType = play->spawn; if (this->fountainType < 0) { this->fountainType = 0; @@ -82,12 +82,12 @@ void BgDyYoseizo_Init(Actor* thisx, PlayState* play2) { if (play->sceneId == SCENE_DAIYOUSEI_IZUMI) { // "Great Fairy Fountain" - osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 大妖精の泉 ☆☆☆☆☆ %d\n" VT_RST, play->curSpawn); + osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 大妖精の泉 ☆☆☆☆☆ %d\n" VT_RST, play->spawn); SkelAnime_InitFlex(play, &this->skelAnime, &gGreatFairySkel, &gGreatFairySittingTransitionAnim, this->jointTable, this->morphTable, 28); } else { // "Stone/Jewel Fairy Fountain" - osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 石妖精の泉 ☆☆☆☆☆ %d\n" VT_RST, play->curSpawn); + osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 石妖精の泉 ☆☆☆☆☆ %d\n" VT_RST, play->spawn); SkelAnime_InitFlex(play, &this->skelAnime, &gGreatFairySkel, &gGreatFairyLayingDownTransitionAnim, this->jointTable, this->morphTable, 28); } diff --git a/src/overlays/actors/ovl_Bg_Mizu_Movebg/z_bg_mizu_movebg.c b/src/overlays/actors/ovl_Bg_Mizu_Movebg/z_bg_mizu_movebg.c index 939d33f4b8..6731c2b857 100644 --- a/src/overlays/actors/ovl_Bg_Mizu_Movebg/z_bg_mizu_movebg.c +++ b/src/overlays/actors/ovl_Bg_Mizu_Movebg/z_bg_mizu_movebg.c @@ -143,7 +143,7 @@ void BgMizuMovebg_Init(Actor* thisx, PlayState* play) { ((BgMizuMovebg*)thisx)->scrollAlpha4 = 160; waypointId = MOVEBG_POINT_ID(thisx->params); ((BgMizuMovebg*)thisx)->waypointId = waypointId; - func_8089E108(play->setupPathList, &thisx->world.pos, MOVEBG_PATH_ID(thisx->params), waypointId); + func_8089E108(play->pathList, &thisx->world.pos, MOVEBG_PATH_ID(thisx->params), waypointId); ((BgMizuMovebg*)thisx)->actionFunc = func_8089E650; break; } @@ -323,7 +323,7 @@ void func_8089E650(BgMizuMovebg* this, PlayState* play) { f32 dz; this->dyna.actor.speedXZ = MOVEBG_SPEED(this->dyna.actor.params) * 0.1f; - func_8089E108(play->setupPathList, &waypoint, MOVEBG_PATH_ID(this->dyna.actor.params), this->waypointId); + func_8089E108(play->pathList, &waypoint, MOVEBG_PATH_ID(this->dyna.actor.params), this->waypointId); dist = Actor_WorldDistXYZToPoint(&this->dyna.actor, &waypoint); if (dist < this->dyna.actor.speedXZ) { this->dyna.actor.speedXZ = dist; @@ -335,9 +335,9 @@ void func_8089E650(BgMizuMovebg* this, PlayState* play) { dz = waypoint.z - this->dyna.actor.world.pos.z; if (fabsf(dx) < 2.0f && fabsf(dy) < 2.0f && fabsf(dz) < 2.0f) { this->waypointId++; - if (this->waypointId >= play->setupPathList[MOVEBG_PATH_ID(this->dyna.actor.params)].count) { + if (this->waypointId >= play->pathList[MOVEBG_PATH_ID(this->dyna.actor.params)].count) { this->waypointId = 0; - func_8089E108(play->setupPathList, &this->dyna.actor.world.pos, MOVEBG_PATH_ID(this->dyna.actor.params), 0); + func_8089E108(play->pathList, &this->dyna.actor.world.pos, MOVEBG_PATH_ID(this->dyna.actor.params), 0); } } if (!(D_8089EE40 & 1) && MOVEBG_SPEED(this->dyna.actor.params) != 0) { diff --git a/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c b/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c index eeadb6363b..7eafeb9c25 100644 --- a/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c +++ b/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c @@ -60,7 +60,7 @@ void BgRelayObjects_Init(Actor* thisx, PlayState* play) { } else { thisx->world.rot.y = 0x80; } - func_800F5718(); + Audio_PlayWindmillBgm(); thisx->room = -1; thisx->flags |= ACTOR_FLAG_5; if (D_808A9508 & 2) { diff --git a/src/overlays/actors/ovl_Bg_Spot01_Objects2/z_bg_spot01_objects2.c b/src/overlays/actors/ovl_Bg_Spot01_Objects2/z_bg_spot01_objects2.c index f2be2128bf..47fba67a64 100644 --- a/src/overlays/actors/ovl_Bg_Spot01_Objects2/z_bg_spot01_objects2.c +++ b/src/overlays/actors/ovl_Bg_Spot01_Objects2/z_bg_spot01_objects2.c @@ -108,7 +108,7 @@ void func_808AC2BC(BgSpot01Objects2* this, PlayState* play) { CollisionHeader_GetVirtual(&object_spot01_matoyab_col, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, colHeader); if (IS_DAY) { - func_808AC22C(play->setupPathList, &position, ((s32)thisx->params >> 8) & 0xFF, 0); + func_808AC22C(play->pathList, &position, ((s32)thisx->params >> 8) & 0xFF, 0); Actor_SpawnAsChild(&play->actorCtx, thisx, play, ACTOR_EN_DAIKU_KAKARIKO, position.x, position.y, position.z, thisx->world.rot.x, thisx->world.rot.y, thisx->world.rot.z, ((((s32)thisx->params >> 8) & 0xFF) << 8) + 1); diff --git a/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c b/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c index 79e1999f3a..3fb7bc7c26 100644 --- a/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c +++ b/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c @@ -618,7 +618,7 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) { this->csCamEye.z = 300.0f; this->csCamAt.x = 0.0f; - this->unk_704 = 1.2566371f; + this->unk_704 = 2 * M_PI / 5; FALLTHROUGH; case 3: this->envLightMode = 0; @@ -3178,8 +3178,8 @@ void BossGanon_Update(Actor* thisx, PlayState* play2) { this->unk_278.y = this->unk_2EC[0].y + 50.0f + 30.0f; this->unk_278.z = this->unk_2EC[0].z; - xOffset = (sinf(i * 1.2566371f) * 600.0f); - zOffset = (cosf(i * 1.2566371f) * 600.0f); + xOffset = (sinf(i * (2 * M_PI / 5)) * 600.0f); + zOffset = (cosf(i * (2 * M_PI / 5)) * 600.0f); // 5 or 6 light balls that go into the charge. not the same as the ones that he throws Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_BOSS_GANON, this->unk_1FC.x + xOffset, diff --git a/src/overlays/actors/ovl_En_Bb/z_en_bb.c b/src/overlays/actors/ovl_En_Bb/z_en_bb.c index b8f535cb90..308c4ec862 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -858,7 +858,7 @@ void EnBb_FaceWaypoint(EnBb* this) { } void EnBb_SetWaypoint(EnBb* this, PlayState* play) { - Path* path = &play->setupPathList[this->path]; + Path* path = &play->pathList[this->path]; Vec3s* point; if (this->waypoint == (s16)(path->count - 1)) { diff --git a/src/overlays/actors/ovl_En_Cs/z_en_cs.c b/src/overlays/actors/ovl_En_Cs/z_en_cs.c index f5b6c502d6..a5a6448c93 100644 --- a/src/overlays/actors/ovl_En_Cs/z_en_cs.c +++ b/src/overlays/actors/ovl_En_Cs/z_en_cs.c @@ -287,7 +287,7 @@ s32 EnCs_HandleWalking(EnCs* this, PlayState* play) { s16 walkAngle1; s16 walkAngle2; - EnCs_GetPathPoint(play->setupPathList, &pathPos, this->path, this->waypoint); + EnCs_GetPathPoint(play->pathList, &pathPos, this->path, this->waypoint); xDiff = pathPos.x - this->actor.world.pos.x; zDiff = pathPos.z - this->actor.world.pos.z; walkAngle1 = RAD_TO_BINANG(Math_FAtan2F(xDiff, zDiff)); @@ -296,13 +296,13 @@ s32 EnCs_HandleWalking(EnCs* this, PlayState* play) { while (this->walkDist <= 10.44f) { this->waypoint++; - waypointCount = EnCs_GetwaypointCount(play->setupPathList, this->path); + waypointCount = EnCs_GetwaypointCount(play->pathList, this->path); if ((this->waypoint < 0) || (!(this->waypoint < waypointCount))) { this->waypoint = 0; } - EnCs_GetPathPoint(play->setupPathList, &pathPos, this->path, this->waypoint); + EnCs_GetPathPoint(play->pathList, &pathPos, this->path, this->waypoint); xDiff = pathPos.x - this->actor.world.pos.x; zDiff = pathPos.z - this->actor.world.pos.z; walkAngle2 = RAD_TO_BINANG(Math_FAtan2F(xDiff, zDiff)); diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c index a90f2285ee..4969ae3ed6 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -407,7 +407,7 @@ void EnDaiku_InitEscape(EnDaiku* this, PlayState* play) { EnDaiku_InitSubCamera(this, play); exitLoop = false; - path = &play->setupPathList[this->actor.params >> 4 & 0xF]; + path = &play->pathList[this->actor.params >> 4 & 0xF]; while (!exitLoop) { pointPos = (Vec3s*)SEGMENTED_TO_VIRTUAL(path->points) + this->waypoint; dx = pointPos->x - this->actor.world.pos.x; @@ -522,7 +522,7 @@ void EnDaiku_EscapeRun(EnDaiku* this, PlayState* play) { f32 dxz; Vec3s* pointPos; - path = &play->setupPathList[this->actor.params >> 4 & 0xF]; + path = &play->pathList[this->actor.params >> 4 & 0xF]; pointPos = (Vec3s*)SEGMENTED_TO_VIRTUAL(path->points) + this->waypoint; dx = pointPos->x - this->actor.world.pos.x; dz = pointPos->z - this->actor.world.pos.z; diff --git a/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c b/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c index 429a2c57a2..f54462de4f 100644 --- a/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c +++ b/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c @@ -359,7 +359,7 @@ void EnDaikuKakariko_Run(EnDaikuKakariko* this, PlayState* play) { s32 run; do { - path = &play->setupPathList[(this->actor.params >> 8) & 0xFF]; + path = &play->pathList[(this->actor.params >> 8) & 0xFF]; pathPos = &((Vec3s*)SEGMENTED_TO_VIRTUAL(path->points))[this->waypoint]; xDist = pathPos->x - this->actor.world.pos.x; zDist = pathPos->z - this->actor.world.pos.z; diff --git a/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c b/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c index ca952234ef..3c6e9c4d0b 100644 --- a/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c +++ b/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c @@ -507,7 +507,7 @@ void EnDivingGame_Update(Actor* thisx, PlayState* play2) { if (1) {} if (gSaveContext.timer1Value == 10) { - func_800F5918(); + Audio_SetFastTempoForTimedMinigame(); } if (this->eyeTimer == 0) { this->eyeTimer = 2; diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index 202a2910be..44981db664 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -1267,7 +1267,7 @@ void func_80A05040(Actor* thisx, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: // yes - Message_ContinueTextbox(play, ElfMessage_GetSariaText(play)); + Message_ContinueTextbox(play, QuestHint_GetSariaTextId(play)); this->actor.update = func_80A05114; break; case 1: // no @@ -1301,7 +1301,7 @@ void func_80A05188(Actor* thisx, PlayState* play) { func_80A04DE4(this, play); if ((Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(play)) { - Message_ContinueTextbox(play, ElfMessage_GetSariaText(play)); + Message_ContinueTextbox(play, QuestHint_GetSariaTextId(play)); this->actor.update = func_80A05114; } @@ -1310,7 +1310,7 @@ void func_80A05188(Actor* thisx, PlayState* play) { // ask to talk to navi void func_80A05208(Actor* thisx, PlayState* play) { - s32 naviCUpText; + s32 naviTextId; EnElf* this = (EnElf*)thisx; func_80A04DE4(this, play); @@ -1318,10 +1318,10 @@ void func_80A05208(Actor* thisx, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: // yes - naviCUpText = ElfMessage_GetCUpText(play); + naviTextId = QuestHint_GetNaviTextId(play); - if (naviCUpText != 0) { - Message_ContinueTextbox(play, naviCUpText); + if (naviTextId != 0) { + Message_ContinueTextbox(play, naviTextId); } else { Message_ContinueTextbox(play, 0x15F); } @@ -1379,7 +1379,7 @@ void func_80A053F0(Actor* thisx, PlayState* play) { if (player->naviTextId == 0) { if (player->unk_664 == NULL) { if (((gSaveContext.naviTimer >= 600) && (gSaveContext.naviTimer <= 3000)) || (nREG(89) != 0)) { - player->naviTextId = ElfMessage_GetCUpText(play); + player->naviTextId = QuestHint_GetNaviTextId(play); if (player->naviTextId == 0x15F) { player->naviTextId = 0; @@ -1395,7 +1395,7 @@ void func_80A053F0(Actor* thisx, PlayState* play) { func_800F4524(&gSfxDefaultPos, NA_SE_VO_SK_LAUGH, 0x20); thisx->focus.pos = thisx->world.pos; - if (thisx->textId == ElfMessage_GetCUpText(play)) { + if (thisx->textId == QuestHint_GetNaviTextId(play)) { this->fairyFlags |= 0x80; gSaveContext.naviTimer = 3001; } diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index f7a32a99d7..421345fa4a 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -473,7 +473,7 @@ s32 EnGo_FollowPath(EnGo* this, PlayState* play) { return false; } - path = &play->setupPathList[this->actor.params & 0xF]; + path = &play->pathList[this->actor.params & 0xF]; pointPos = SEGMENTED_TO_VIRTUAL(path->points); pointPos += this->unk_218; xDist = pointPos->x - this->actor.world.pos.x; @@ -507,7 +507,7 @@ s32 EnGo_SetMovedPos(EnGo* this, PlayState* play) { if ((this->actor.params & 0xF) == 0xF) { return false; } else { - path = &play->setupPathList[this->actor.params & 0xF]; + path = &play->pathList[this->actor.params & 0xF]; pointPos = SEGMENTED_TO_VIRTUAL(path->points); pointPos += (path->count - 1); this->actor.world.pos.x = pointPos->x; diff --git a/src/overlays/actors/ovl_En_Go2/z_en_go2.c b/src/overlays/actors/ovl_En_Go2/z_en_go2.c index c7736ba151..17a772dac6 100644 --- a/src/overlays/actors/ovl_En_Go2/z_en_go2.c +++ b/src/overlays/actors/ovl_En_Go2/z_en_go2.c @@ -1833,7 +1833,7 @@ void EnGo2_BiggoronEyedrops(EnGo2* this, PlayState* play) { this->eyeMouthTexState = 2; this->unk_20C = 0; this->goronState++; - func_800F483C(0x28, 5); + Audio_SetMainBgmVolume(0x28, 5); OnePointCutscene_Init(play, 4190, -99, &this->actor, CAM_ID_MAIN); break; case 1: @@ -1848,7 +1848,7 @@ void EnGo2_BiggoronEyedrops(EnGo2* this, PlayState* play) { Message_ContinueTextbox(play, 0x305A); this->eyeMouthTexState = 3; this->goronState++; - func_800F483C(0x7F, 5); + Audio_SetMainBgmVolume(0x7F, 5); } break; case 2: diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c index e71402cbe5..dd09e19cb0 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c @@ -137,7 +137,7 @@ void EnGoroiwa_SetSpeed(EnGoroiwa* this, PlayState* play) { } void EnGoroiwa_FaceNextWaypoint(EnGoroiwa* this, PlayState* play) { - Path* path = &play->setupPathList[this->actor.params & 0xFF]; + Path* path = &play->pathList[this->actor.params & 0xFF]; Vec3s* nextPos = (Vec3s*)SEGMENTED_TO_VIRTUAL(path->points) + this->nextWaypoint; Vec3f nextPosF; @@ -150,7 +150,7 @@ void EnGoroiwa_FaceNextWaypoint(EnGoroiwa* this, PlayState* play) { void EnGoroiwa_GetPrevWaypointDiff(EnGoroiwa* this, PlayState* play, Vec3f* dest) { s16 loopMode = (this->actor.params >> 8) & 3; - Path* path = &play->setupPathList[this->actor.params & 0xFF]; + Path* path = &play->pathList[this->actor.params & 0xFF]; s16 prevWaypoint = this->currentWaypoint - this->pathDirection; Vec3s* prevPointPos; Vec3s* currentPointPos; @@ -215,14 +215,14 @@ void EnGoroiwa_ReverseDirection(EnGoroiwa* this) { } void EnGoroiwa_InitPath(EnGoroiwa* this, PlayState* play) { - this->endWaypoint = play->setupPathList[this->actor.params & 0xFF].count - 1; + this->endWaypoint = play->pathList[this->actor.params & 0xFF].count - 1; this->currentWaypoint = 0; this->nextWaypoint = 1; this->pathDirection = 1; } void EnGoroiwa_TeleportToWaypoint(EnGoroiwa* this, PlayState* play, s32 waypoint) { - Path* path = &play->setupPathList[this->actor.params & 0xFF]; + Path* path = &play->pathList[this->actor.params & 0xFF]; Vec3s* pointPos = (Vec3s*)SEGMENTED_TO_VIRTUAL(path->points) + waypoint; this->actor.world.pos.x = pointPos->x; @@ -237,7 +237,7 @@ void EnGoroiwa_InitRotation(EnGoroiwa* this) { s32 EnGoroiwa_GetAscendDirection(EnGoroiwa* this, PlayState* play) { s32 pad; - Path* path = &play->setupPathList[this->actor.params & 0xFF]; + Path* path = &play->pathList[this->actor.params & 0xFF]; Vec3s* nextPointPos = (Vec3s*)SEGMENTED_TO_VIRTUAL(path->points) + this->nextWaypoint; Vec3s* currentPointPos = (Vec3s*)SEGMENTED_TO_VIRTUAL(path->points) + this->currentWaypoint; @@ -301,7 +301,7 @@ s32 EnGoroiwa_MoveAndFall(EnGoroiwa* this, PlayState* play) { Math_StepToF(&this->actor.speedXZ, R_EN_GOROIWA_SPEED * 0.01f, 0.3f); func_8002D868(&this->actor); - path = &play->setupPathList[this->actor.params & 0xFF]; + path = &play->pathList[this->actor.params & 0xFF]; nextPointPos = (Vec3s*)SEGMENTED_TO_VIRTUAL(path->points) + this->nextWaypoint; result = true; result &= Math_StepToF(&this->actor.world.pos.x, nextPointPos->x, fabsf(this->actor.velocity.x)); @@ -311,7 +311,7 @@ s32 EnGoroiwa_MoveAndFall(EnGoroiwa* this, PlayState* play) { } s32 EnGoroiwa_Move(EnGoroiwa* this, PlayState* play) { - Path* path = &play->setupPathList[this->actor.params & 0xFF]; + Path* path = &play->pathList[this->actor.params & 0xFF]; s32 pad; Vec3s* nextPointPos = (Vec3s*)SEGMENTED_TO_VIRTUAL(path->points) + this->nextWaypoint; Vec3s* currentPointPos = (Vec3s*)SEGMENTED_TO_VIRTUAL(path->points) + this->currentWaypoint; @@ -343,7 +343,7 @@ s32 EnGoroiwa_Move(EnGoroiwa* this, PlayState* play) { s32 EnGoroiwa_MoveUpToNextWaypoint(EnGoroiwa* this, PlayState* play) { s32 pad; - Path* path = &play->setupPathList[this->actor.params & 0xFF]; + Path* path = &play->pathList[this->actor.params & 0xFF]; Vec3s* nextPointPos = (Vec3s*)SEGMENTED_TO_VIRTUAL(path->points) + this->nextWaypoint; Math_StepToF(&this->actor.velocity.y, (R_EN_GOROIWA_SPEED * 0.01f) * 0.5f, 0.18f); @@ -354,7 +354,7 @@ s32 EnGoroiwa_MoveUpToNextWaypoint(EnGoroiwa* this, PlayState* play) { s32 EnGoroiwa_MoveDownToNextWaypoint(EnGoroiwa* this, PlayState* play) { s32 pad; - Path* path = &play->setupPathList[this->actor.params & 0xFF]; + Path* path = &play->pathList[this->actor.params & 0xFF]; Vec3s* nextPointPos = (Vec3s*)SEGMENTED_TO_VIRTUAL(path->points) + this->nextWaypoint; f32 nextPointY; f32 thisY; @@ -543,7 +543,7 @@ void EnGoroiwa_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); return; } - if (play->setupPathList[pathIdx].count < 2) { + if (play->pathList[pathIdx].count < 2) { // "Error: Invalid Path Data" osSyncPrintf("Error : レールデータ が不正(%s %d)\n", "../z_en_gr.c", 1043); Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c b/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c index 22064e62a5..f8f9a24a74 100644 --- a/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c +++ b/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c @@ -153,7 +153,7 @@ void EnHeishi1_Walk(EnHeishi1* this, PlayState* play) { } if (!sPlayerIsCaught) { - path = &play->setupPathList[this->path]; + path = &play->pathList[this->path]; pointPos = SEGMENTED_TO_VIRTUAL(path->points); pointPos += this->waypoint; diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index ccfcb39775..2f8997613c 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -2512,7 +2512,7 @@ void EnHorse_UpdateHbaAnim(EnHorse* this) { void EnHorse_UpdateHorsebackArchery(EnHorse* this, PlayState* play) { f32 playSpeed; - s32 sp20; + s32 isFanfarePlaying; if (this->animationIdx == ENHORSE_ANIM_WALK) { EnHorse_PlayWalkingSfx(this); @@ -2521,10 +2521,10 @@ void EnHorse_UpdateHorsebackArchery(EnHorse* this, PlayState* play) { this->hbaTimer++; } - sp20 = func_800F5A58(NA_BGM_HORSE_GOAL); + isFanfarePlaying = Audio_IsSequencePlaying(NA_BGM_HORSE_GOAL); EnHorse_UpdateHbaRaceInfo(this, play, &sHbaInfo); - if (this->hbaFlags & 1 || this->hbaTimer >= 46) { - if (sp20 != 1 && gSaveContext.minigameState != 3) { + if ((this->hbaFlags & 1) || (this->hbaTimer >= 46)) { + if ((isFanfarePlaying != true) && (gSaveContext.minigameState != 3)) { gSaveContext.cutsceneIndex = 0; play->nextEntranceIndex = ENTR_SPOT12_16; play->transitionTrigger = TRANS_TRIGGER_START; diff --git a/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c b/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c index f9596531c7..cdb3b38323 100644 --- a/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c +++ b/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c @@ -286,7 +286,7 @@ void func_80A6B91C(EnHorseNormal* this, PlayState* play) { } void EnHorseNormal_FollowPath(EnHorseNormal* this, PlayState* play) { - Path* path = &play->setupPathList[this->actor.params & 0xF]; + Path* path = &play->pathList[this->actor.params & 0xF]; Vec3s* pointPos = SEGMENTED_TO_VIRTUAL(path->points); f32 dx; f32 dz; diff --git a/src/overlays/actors/ovl_En_Kz/z_en_kz.c b/src/overlays/actors/ovl_En_Kz/z_en_kz.c index c21534016f..0fee522ad9 100644 --- a/src/overlays/actors/ovl_En_Kz/z_en_kz.c +++ b/src/overlays/actors/ovl_En_Kz/z_en_kz.c @@ -279,7 +279,7 @@ s32 EnKz_FollowPath(EnKz* this, PlayState* play) { return 0; } - path = &play->setupPathList[(this->actor.params & 0xFF00) >> 8]; + path = &play->pathList[(this->actor.params & 0xFF00) >> 8]; pointPos = SEGMENTED_TO_VIRTUAL(path->points); pointPos += this->waypoint; @@ -305,7 +305,7 @@ s32 EnKz_SetMovedPos(EnKz* this, PlayState* play) { return 0; } - path = &play->setupPathList[(this->actor.params & 0xFF00) >> 8]; + path = &play->pathList[(this->actor.params & 0xFF00) >> 8]; lastPointPos = SEGMENTED_TO_VIRTUAL(path->points); lastPointPos += path->count - 1; diff --git a/src/overlays/actors/ovl_En_Mb/z_en_mb.c b/src/overlays/actors/ovl_En_Mb/z_en_mb.c index c103703efc..2fdbf9458b 100644 --- a/src/overlays/actors/ovl_En_Mb/z_en_mb.c +++ b/src/overlays/actors/ovl_En_Mb/z_en_mb.c @@ -348,7 +348,7 @@ void EnMb_NextWaypoint(EnMb* this, PlayState* play) { Path* path; Vec3s* waypointPos; - path = &play->setupPathList[this->path]; + path = &play->pathList[this->path]; if (this->waypoint == 0) { this->direction = 1; @@ -404,7 +404,7 @@ s32 EnMb_IsPlayerInCorridor(EnMb* this, PlayState* play) { } void EnMb_FindWaypointTowardsPlayer(EnMb* this, PlayState* play) { - Path* path = &play->setupPathList[this->path]; + Path* path = &play->pathList[this->path]; s16 yawToWaypoint; Vec3f waypointPosF; Vec3s* waypointPosS; diff --git a/src/overlays/actors/ovl_En_Md/z_en_md.c b/src/overlays/actors/ovl_En_Md/z_en_md.c index 0a719c1e62..c9f018ba56 100644 --- a/src/overlays/actors/ovl_En_Md/z_en_md.c +++ b/src/overlays/actors/ovl_En_Md/z_en_md.c @@ -595,7 +595,7 @@ u8 EnMd_FollowPath(EnMd* this, PlayState* play) { return 0; } - path = &play->setupPathList[(this->actor.params & 0xFF00) >> 8]; + path = &play->pathList[(this->actor.params & 0xFF00) >> 8]; pointPos = SEGMENTED_TO_VIRTUAL(path->points); pointPos += this->waypoint; @@ -622,7 +622,7 @@ u8 EnMd_SetMovedPos(EnMd* this, PlayState* play) { return 0; } - path = &play->setupPathList[(this->actor.params & 0xFF00) >> 8]; + path = &play->pathList[(this->actor.params & 0xFF00) >> 8]; lastPointPos = SEGMENTED_TO_VIRTUAL(path->points); lastPointPos += path->count - 1; diff --git a/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/src/overlays/actors/ovl_En_Mm/z_en_mm.c index 6a522cb0e1..499fcd86b8 100644 --- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c +++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c @@ -331,7 +331,7 @@ s32 func_80AADEF0(EnMm* this, PlayState* play) { s32 phi_a2; s32 phi_v1; - func_80AADE60(play->setupPathList, &waypointPos, this->path, this->waypoint); + func_80AADE60(play->pathList, &waypointPos, this->path, this->waypoint); xDiff = waypointPos.x - this->actor.world.pos.x; zDiff = waypointPos.z - this->actor.world.pos.z; @@ -349,7 +349,7 @@ s32 func_80AADEF0(EnMm* this, PlayState* play) { phi_a2 = 0; break; case 1: - phi_a2 = EnMm_GetPointCount(play->setupPathList, this->path) - 1; + phi_a2 = EnMm_GetPointCount(play->pathList, this->path) - 1; break; case 2: phi_a2 = this->unk_1F0; @@ -363,7 +363,7 @@ s32 func_80AADEF0(EnMm* this, PlayState* play) { phi_v1 = 0; break; case 1: - phi_v1 = EnMm_GetPointCount(play->setupPathList, this->path) - 1; + phi_v1 = EnMm_GetPointCount(play->pathList, this->path) - 1; break; case 2: phi_v1 = this->unk_1F0; @@ -376,7 +376,7 @@ s32 func_80AADEF0(EnMm* this, PlayState* play) { this->waypoint = sPathInfo[this->unk_1E8].unk_08; } - func_80AADE60(play->setupPathList, &waypointPos, this->path, this->waypoint); + func_80AADE60(play->pathList, &waypointPos, this->path, this->waypoint); xDiff = waypointPos.x - this->actor.world.pos.x; zDiff = waypointPos.z - this->actor.world.pos.z; diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 6e1b116221..957ae13323 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -106,7 +106,7 @@ void EnNb_UpdatePath(EnNb* this, PlayState* play) { s32 pad; s32 path; - pathList = play->setupPathList; + pathList = play->pathList; if (pathList != NULL) { path = EnNb_GetPath(this); diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c index 9b624f9fe4..e3b3ce3fd7 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -603,7 +603,7 @@ void func_80AB6A38(EnNiw* this, PlayState* play) { this->unk_2FC = this->unk_300 = 0.0f; this->actionFunc = EnNiw_ResetAction; } else { - path = &play->setupPathList[pathIndex]; + path = &play->pathList[pathIndex]; pointPos = SEGMENTED_TO_VIRTUAL(path->points); pointPos += this->waypoint; pathDiffX = pointPos->x - this->actor.world.pos.x; diff --git a/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c b/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c index 69cedb5e55..c948ba2b55 100644 --- a/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c +++ b/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c @@ -101,7 +101,7 @@ void EnNiwGirl_Jump(EnNiwGirl* this, PlayState* play) { } void func_80AB9210(EnNiwGirl* this, PlayState* play) { - Path* path = &play->setupPathList[this->path]; + Path* path = &play->pathList[this->path]; f32 xDistBetween; f32 zDistBetween; diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c index 9bae7993a9..2b4d20a140 100644 --- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c +++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c @@ -243,7 +243,9 @@ void func_80ABF4C8(EnOkarinaTag* this, PlayState* play) { case 2: play->csCtx.segment = D_80ABF9D0; gSaveContext.cutsceneTrigger = 1; - func_800F574C(1.18921f, 90); + // Increase pitch by 3 semitones i.e. 2^(3/12), scale tempo by same ratio + // Applies to the windmill bgm once the song of storms fanfare is complete + Audio_SetMainBgmTempoFreqAfterFanfare(1.18921f, 90); break; case 4: play->csCtx.segment = D_80ABFB40; diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 2f9b4393d6..1177489436 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -471,7 +471,7 @@ void EnOssan_TalkDefaultShopkeeper(PlayState* play) { } void EnOssan_TalkKakarikoPotionShopkeeper(PlayState* play) { - if (play->curSpawn == 0) { + if (play->spawn == 0) { Message_ContinueTextbox(play, 0x5046); } else { Message_ContinueTextbox(play, 0x504E); @@ -487,7 +487,7 @@ void EnOssan_TalkKokiriShopkeeper(PlayState* play) { } void EnOssan_TalkBazaarShopkeeper(PlayState* play) { - if (play->curSpawn == 0) { + if (play->spawn == 0) { Message_ContinueTextbox(play, 0x9D); } else { Message_ContinueTextbox(play, 0x9C); diff --git a/src/overlays/actors/ovl_En_Po_Desert/z_en_po_desert.c b/src/overlays/actors/ovl_En_Po_Desert/z_en_po_desert.c index 3f650fb36b..30a288d66e 100644 --- a/src/overlays/actors/ovl_En_Po_Desert/z_en_po_desert.c +++ b/src/overlays/actors/ovl_En_Po_Desert/z_en_po_desert.c @@ -87,7 +87,7 @@ void EnPoDesert_Destroy(Actor* thisx, PlayState* play) { } void EnPoDesert_SetNextPathPoint(EnPoDesert* this, PlayState* play) { - Path* path = &play->setupPathList[this->actor.params]; + Path* path = &play->pathList[this->actor.params]; Vec3s* pathPoint; Animation_MorphToLoop(&this->skelAnime, &gPoeFieldDisappearAnim, -6.0f); diff --git a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c index 66e0a60591..7f3992a0d6 100644 --- a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c +++ b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c @@ -200,7 +200,7 @@ void EnRiverSound_Update(Actor* thisx, PlayState* play) { if ((thisx->params == RS_RIVER_DEFAULT_LOW_FREQ) || (thisx->params == RS_RIVER_DEFAULT_MEDIUM_FREQ) || (thisx->params == RS_RIVER_DEFAULT_HIGH_FREQ)) { - path = &play->setupPathList[this->pathIndex]; + path = &play->pathList[this->pathIndex]; pos = &thisx->world.pos; if (EnRiverSound_GetSfxPos(SEGMENTED_TO_VIRTUAL(path->points), path->count, &player->actor.world.pos, pos)) { diff --git a/src/overlays/actors/ovl_En_Ta/z_en_ta.c b/src/overlays/actors/ovl_En_Ta/z_en_ta.c index 26c1d6e98c..99416238f1 100644 --- a/src/overlays/actors/ovl_En_Ta/z_en_ta.c +++ b/src/overlays/actors/ovl_En_Ta/z_en_ta.c @@ -797,7 +797,7 @@ void EnTa_RunCuccoGame(EnTa* this, PlayState* play) { } if (gSaveContext.timer1Value == 10) { - func_800F5918(); + Audio_SetFastTempoForTimedMinigame(); } if (gSaveContext.timer1Value == 0 && !Play_InCsMode(play)) { diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index f710ed5765..c73c2378ca 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -308,7 +308,7 @@ s32 EnTk_Orient(EnTk* this, PlayState* play) { return 1; } - path = &play->setupPathList[0]; + path = &play->pathList[0]; point = SEGMENTED_TO_VIRTUAL(path->points); point += this->currentWaypoint; diff --git a/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c b/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c index 91c99fd4e5..e67820f3a8 100644 --- a/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c +++ b/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c @@ -1573,7 +1573,7 @@ s32 func_80B56EE4(EnZl3* this, PlayState* play) { void func_80B56F10(EnZl3* this, PlayState* play) { s32 waypoint; - Path* pathHead = play->setupPathList; + Path* pathHead = play->pathList; if (pathHead != NULL) { waypoint = func_80B54DC4(this); @@ -1838,49 +1838,49 @@ void func_80B57858(PlayState* play) { s32 func_80B57890(EnZl3* this, PlayState* play) { s8 pad[2]; - u8 curSpawn = play->curSpawn; + u8 spawn = play->spawn; s16 sceneId = play->sceneId; s32 result = func_80B54DB4(this); if (play) {} // Needed to match, this if can be almost anywhere and it still matches if (sceneId == SCENE_GANON_SONOGO) { - if ((result == 0x24) && (curSpawn == 0)) { + if ((result == 0x24) && (spawn == 0)) { return 1; } - if ((result == 0x25) && (curSpawn == 2)) { + if ((result == 0x25) && (spawn == 2)) { return 1; } - if ((result == 0x26) && (curSpawn == 4)) { + if ((result == 0x26) && (spawn == 4)) { return 1; } - if ((result == 0x27) && (curSpawn == 6)) { + if ((result == 0x27) && (spawn == 6)) { return 1; } - if ((result == 0x28) && (curSpawn == 6)) { + if ((result == 0x28) && (spawn == 6)) { return 1; } } else if (sceneId == SCENE_GANON_FINAL) { - if ((result == 0x20) && (curSpawn == 0) && Flags_GetSwitch(play, 0x37)) { + if ((result == 0x20) && (spawn == 0) && Flags_GetSwitch(play, 0x37)) { if ((play->sceneId == SCENE_GANON_DEMO) || (play->sceneId == SCENE_GANON_FINAL) || (play->sceneId == SCENE_GANON_SONOGO) || (play->sceneId == SCENE_GANONTIKA_SONOGO)) { return 1; } } - if ((result == 0x21) && (curSpawn == 2)) { + if ((result == 0x21) && (spawn == 2)) { return 1; } - if ((result == 0x22) && (curSpawn == 4)) { + if ((result == 0x22) && (spawn == 4)) { return 1; } - if ((result == 0x23) && (curSpawn == 6)) { + if ((result == 0x23) && (spawn == 6)) { return 1; } } else if (sceneId == SCENE_GANONTIKA_SONOGO) { - if ((result == 0x29) && (curSpawn == 0)) { + if ((result == 0x29) && (spawn == 0)) { return 1; } - if ((result == 0x2A) && (curSpawn == 0)) { + if ((result == 0x2A) && (spawn == 0)) { return 1; } } @@ -2489,9 +2489,9 @@ s32 func_80B59698(EnZl3* this, PlayState* play) { (play->sceneId == SCENE_GANON_SONOGO) || (play->sceneId == SCENE_GANONTIKA_SONOGO)); if (cond) { - u8 curSpawn = play->curSpawn; + u8 spawn = play->spawn; - if ((func_80B54DB4(this) == 0x20) && (curSpawn == 0) && + if ((func_80B54DB4(this) == 0x20) && (spawn == 0) && ((gSaveContext.timer2Value <= 0) || (gSaveContext.timer2State == 0))) { return 1; } @@ -2505,9 +2505,9 @@ s32 func_80B59768(EnZl3* this, PlayState* play) { (play->sceneId == SCENE_GANON_SONOGO) || (play->sceneId == SCENE_GANONTIKA_SONOGO)); if (cond) { - u8 curSpawn = play->curSpawn; + u8 spawn = play->spawn; - if ((func_80B54DB4(this) == 0x20) && (curSpawn == 0) && (gSaveContext.timer2Value <= 0)) { + if ((func_80B54DB4(this) == 0x20) && (spawn == 0) && (gSaveContext.timer2Value <= 0)) { return 1; } } diff --git a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c index ba29d03285..63cd485c65 100644 --- a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c +++ b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c @@ -35,21 +35,55 @@ const ActorInit Item_Etcetera_InitVars = { }; static s16 sObjectIds[] = { - OBJECT_GI_BOTTLE, OBJECT_GI_BOTTLE_LETTER, OBJECT_GI_SHIELD_2, OBJECT_GI_ARROWCASE, OBJECT_GI_SCALE, - OBJECT_GI_SCALE, OBJECT_GI_KEY, OBJECT_GI_M_ARROW, OBJECT_GI_RUPY, OBJECT_GI_RUPY, - OBJECT_GI_RUPY, OBJECT_GI_RUPY, OBJECT_GI_HEARTS, OBJECT_GI_KEY, + OBJECT_GI_BOTTLE, // ITEM_ETC_BOTTLE + OBJECT_GI_BOTTLE_LETTER, // ITEM_ETC_LETTER + OBJECT_GI_SHIELD_2, // ITEM_ETC_SHIELD_HYLIAN + OBJECT_GI_ARROWCASE, // ITEM_ETC_QUIVER + OBJECT_GI_SCALE, // ITEM_ETC_SCALE_SILVER + OBJECT_GI_SCALE, // ITEM_ETC_SCALE_GOLD + OBJECT_GI_KEY, // ITEM_ETC_KEY_SMALL + OBJECT_GI_M_ARROW, // ITEM_ETC_ARROW_FIRE + OBJECT_GI_RUPY, // ITEM_ETC_RUPEE_GREEN_CHEST_GAME + OBJECT_GI_RUPY, // ITEM_ETC_RUPEE_BLUE_CHEST_GAME + OBJECT_GI_RUPY, // ITEM_ETC_RUPEE_RED_CHEST_GAME + OBJECT_GI_RUPY, // ITEM_ETC_RUPEE_PURPLE_CHEST_GAME + OBJECT_GI_HEARTS, // ITEM_ETC_HEART_PIECE_CHEST_GAME + OBJECT_GI_KEY, // ITEM_ETC_KEY_SMALL_CHEST_GAME }; // Indices passed to the item table in z_draw.c static s16 sDrawItemIndices[] = { - GID_BOTTLE, GID_LETTER_RUTO, GID_SHIELD_HYLIAN, GID_QUIVER_40, GID_SCALE_SILVER, - GID_SCALE_GOLDEN, GID_KEY_SMALL, GID_ARROW_FIRE, GID_RUPEE_GREEN, GID_RUPEE_BLUE, - GID_RUPEE_RED, GID_RUPEE_PURPLE, GID_HEART_PIECE, GID_KEY_SMALL, + GID_BOTTLE, // ITEM_ETC_BOTTLE + GID_LETTER_RUTO, // ITEM_ETC_LETTER + GID_SHIELD_HYLIAN, // ITEM_ETC_SHIELD_HYLIAN + GID_QUIVER_40, // ITEM_ETC_QUIVER + GID_SCALE_SILVER, // ITEM_ETC_SCALE_SILVER + GID_SCALE_GOLDEN, // ITEM_ETC_SCALE_GOLD + GID_KEY_SMALL, // ITEM_ETC_KEY_SMALL + GID_ARROW_FIRE, // ITEM_ETC_ARROW_FIRE + GID_RUPEE_GREEN, // ITEM_ETC_RUPEE_GREEN_CHEST_GAME + GID_RUPEE_BLUE, // ITEM_ETC_RUPEE_BLUE_CHEST_GAME + GID_RUPEE_RED, // ITEM_ETC_RUPEE_RED_CHEST_GAME + GID_RUPEE_PURPLE, // ITEM_ETC_RUPEE_PURPLE_CHEST_GAME + GID_HEART_PIECE, // ITEM_ETC_HEART_PIECE_CHEST_GAME + GID_KEY_SMALL, // ITEM_ETC_KEY_SMALL_CHEST_GAME }; static s16 sGetItemIds[] = { - GI_BOTTLE, GI_LETTER_RUTO, GI_SHIELD_HYLIAN, GI_QUIVER_40, GI_SCALE_SILVER, GI_SCALE_GOLD, GI_KEY_SMALL, - GI_ARROW_FIRE, GI_NONE, GI_NONE, GI_NONE, GI_NONE, GI_NONE, GI_NONE, + GI_BOTTLE, // ITEM_ETC_BOTTLE + GI_LETTER_RUTO, // ITEM_ETC_LETTER + GI_SHIELD_HYLIAN, // ITEM_ETC_SHIELD_HYLIAN + GI_QUIVER_40, // ITEM_ETC_QUIVER + GI_SCALE_SILVER, // ITEM_ETC_SCALE_SILVER + GI_SCALE_GOLD, // ITEM_ETC_SCALE_GOLD + GI_KEY_SMALL, // ITEM_ETC_KEY_SMALL + GI_ARROW_FIRE, // ITEM_ETC_ARROW_FIRE + GI_NONE, // ITEM_ETC_RUPEE_GREEN_CHEST_GAME + GI_NONE, // ITEM_ETC_RUPEE_BLUE_CHEST_GAME + GI_NONE, // ITEM_ETC_RUPEE_RED_CHEST_GAME + GI_NONE, // ITEM_ETC_RUPEE_PURPLE_CHEST_GAME + GI_NONE, // ITEM_ETC_HEART_PIECE_CHEST_GAME + GI_NONE, // ITEM_ETC_KEY_SMALL_CHEST_GAME }; void ItemEtcetera_SetupAction(ItemEtcetera* this, ItemEtceteraActionFunc actionFunc) { diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c index 3997e0d1a6..4a977fec9d 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -226,13 +226,13 @@ void ObjBean_SetDrawMode(ObjBean* this, u8 drawFlag) { } void ObjBean_SetupPathCount(ObjBean* this, PlayState* play) { - this->pathCount = play->setupPathList[(this->dyna.actor.params >> 8) & 0x1F].count - 1; + this->pathCount = play->pathList[(this->dyna.actor.params >> 8) & 0x1F].count - 1; this->currentPointIndex = 0; this->nextPointIndex = 1; } void ObjBean_SetupPath(ObjBean* this, PlayState* play) { - Path* path = &play->setupPathList[(this->dyna.actor.params >> 8) & 0x1F]; + Path* path = &play->pathList[(this->dyna.actor.params >> 8) & 0x1F]; Math_Vec3s_ToVec3f(&this->pathPoints, SEGMENTED_TO_VIRTUAL(path->points)); } @@ -250,7 +250,7 @@ void ObjBean_FollowPath(ObjBean* this, PlayState* play) { f32 mag; Math_StepToF(&this->dyna.actor.speedXZ, sBeanSpeeds[this->unk_1F6].velocity, sBeanSpeeds[this->unk_1F6].accel); - path = &play->setupPathList[(this->dyna.actor.params >> 8) & 0x1F]; + path = &play->pathList[(this->dyna.actor.params >> 8) & 0x1F]; nextPathPoint = &((Vec3s*)SEGMENTED_TO_VIRTUAL(path->points))[this->nextPointIndex]; Math_Vec3s_ToVec3f(&pathPointsFloat, nextPathPoint); @@ -480,7 +480,7 @@ void ObjBean_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->dyna.actor); return; } - if (play->setupPathList[path].count < 3) { + if (play->pathList[path].count < 3) { osSyncPrintf(VT_COL(RED, WHITE)); // "Incorrect number of path data" osSyncPrintf("パスデータ数が不正(%s %d)(arg_data %xH)\n", "../z_obj_bean.c", 921, diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 04dea8f5f1..9ccf5999c7 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -493,130 +493,255 @@ static u16 D_8085361C[] = { }; static GetItemEntry sGetItemTable[] = { + // GI_BOMBS_5 GET_ITEM(ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT), + // GI_NUTS_5 GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT), + // GI_BOMBCHUS_10 GET_ITEM(ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT), + // GI_BOW GET_ITEM(ITEM_BOW, OBJECT_GI_BOW, GID_BOW, 0x31, 0x80, CHEST_ANIM_LONG), + // GI_SLINGSHOT GET_ITEM(ITEM_SLINGSHOT, OBJECT_GI_PACHINKO, GID_SLINGSHOT, 0x30, 0x80, CHEST_ANIM_LONG), + // GI_BOOMERANG GET_ITEM(ITEM_BOOMERANG, OBJECT_GI_BOOMERANG, GID_BOOMERANG, 0x35, 0x80, CHEST_ANIM_LONG), + // GI_STICKS_1 GET_ITEM(ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT), + // GI_HOOKSHOT GET_ITEM(ITEM_HOOKSHOT, OBJECT_GI_HOOKSHOT, GID_HOOKSHOT, 0x36, 0x80, CHEST_ANIM_LONG), + // GI_LONGSHOT GET_ITEM(ITEM_LONGSHOT, OBJECT_GI_HOOKSHOT, GID_LONGSHOT, 0x4F, 0x80, CHEST_ANIM_LONG), + // GI_LENS GET_ITEM(ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x39, 0x80, CHEST_ANIM_LONG), + // GI_LETTER_ZELDA GET_ITEM(ITEM_LETTER_ZELDA, OBJECT_GI_LETTER, GID_LETTER_ZELDA, 0x69, 0x80, CHEST_ANIM_LONG), + // GI_OCARINA_OOT GET_ITEM(ITEM_OCARINA_TIME, OBJECT_GI_OCARINA, GID_OCARINA_TIME, 0x3A, 0x80, CHEST_ANIM_LONG), + // GI_HAMMER GET_ITEM(ITEM_HAMMER, OBJECT_GI_HAMMER, GID_HAMMER, 0x38, 0x80, CHEST_ANIM_LONG), + // GI_COJIRO GET_ITEM(ITEM_COJIRO, OBJECT_GI_NIWATORI, GID_COJIRO, 0x02, 0x80, CHEST_ANIM_LONG), + // GI_BOTTLE GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x42, 0x80, CHEST_ANIM_LONG), + // GI_POTION_RED GET_ITEM(ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG), + // GI_POTION_GREEN GET_ITEM(ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG), + // GI_POTION_BLUE GET_ITEM(ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG), + // GI_FAIRY GET_ITEM(ITEM_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x46, 0x80, CHEST_ANIM_LONG), + // GI_MILK_BOTTLE GET_ITEM(ITEM_MILK_BOTTLE, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG), + // GI_LETTER_RUTO GET_ITEM(ITEM_LETTER_RUTO, OBJECT_GI_BOTTLE_LETTER, GID_LETTER_RUTO, 0x99, 0x80, CHEST_ANIM_LONG), + // GI_BEAN GET_ITEM(ITEM_BEAN, OBJECT_GI_BEAN, GID_BEAN, 0x48, 0x80, CHEST_ANIM_SHORT), + // GI_MASK_SKULL GET_ITEM(ITEM_MASK_SKULL, OBJECT_GI_SKJ_MASK, GID_MASK_SKULL, 0x10, 0x80, CHEST_ANIM_LONG), + // GI_MASK_SPOOKY GET_ITEM(ITEM_MASK_SPOOKY, OBJECT_GI_REDEAD_MASK, GID_MASK_SPOOKY, 0x11, 0x80, CHEST_ANIM_LONG), + // GI_CHICKEN GET_ITEM(ITEM_CHICKEN, OBJECT_GI_NIWATORI, GID_CHICKEN, 0x48, 0x80, CHEST_ANIM_LONG), + // GI_MASK_KEATON GET_ITEM(ITEM_MASK_KEATON, OBJECT_GI_KI_TAN_MASK, GID_MASK_KEATON, 0x12, 0x80, CHEST_ANIM_LONG), + // GI_MASK_BUNNY GET_ITEM(ITEM_MASK_BUNNY, OBJECT_GI_RABIT_MASK, GID_MASK_BUNNY, 0x13, 0x80, CHEST_ANIM_LONG), + // GI_MASK_TRUTH GET_ITEM(ITEM_MASK_TRUTH, OBJECT_GI_TRUTH_MASK, GID_MASK_TRUTH, 0x17, 0x80, CHEST_ANIM_LONG), + // GI_POCKET_EGG GET_ITEM(ITEM_POCKET_EGG, OBJECT_GI_EGG, GID_EGG, 0x01, 0x80, CHEST_ANIM_LONG), + // GI_POCKET_CUCCO GET_ITEM(ITEM_POCKET_CUCCO, OBJECT_GI_NIWATORI, GID_CHICKEN, 0x48, 0x80, CHEST_ANIM_LONG), + // GI_ODD_MUSHROOM GET_ITEM(ITEM_ODD_MUSHROOM, OBJECT_GI_MUSHROOM, GID_ODD_MUSHROOM, 0x03, 0x80, CHEST_ANIM_LONG), + // GI_ODD_POTION GET_ITEM(ITEM_ODD_POTION, OBJECT_GI_POWDER, GID_ODD_POTION, 0x04, 0x80, CHEST_ANIM_LONG), + // GI_SAW GET_ITEM(ITEM_SAW, OBJECT_GI_SAW, GID_SAW, 0x05, 0x80, CHEST_ANIM_LONG), + // GI_SWORD_BROKEN GET_ITEM(ITEM_SWORD_BROKEN, OBJECT_GI_BROKENSWORD, GID_SWORD_BROKEN, 0x08, 0x80, CHEST_ANIM_LONG), + // GI_PRESCRIPTION GET_ITEM(ITEM_PRESCRIPTION, OBJECT_GI_PRESCRIPTION, GID_PRESCRIPTION, 0x09, 0x80, CHEST_ANIM_LONG), + // GI_FROG GET_ITEM(ITEM_FROG, OBJECT_GI_FROG, GID_FROG, 0x0D, 0x80, CHEST_ANIM_LONG), + // GI_EYEDROPS GET_ITEM(ITEM_EYEDROPS, OBJECT_GI_EYE_LOTION, GID_EYEDROPS, 0x0E, 0x80, CHEST_ANIM_LONG), + // GI_CLAIM_CHECK GET_ITEM(ITEM_CLAIM_CHECK, OBJECT_GI_TICKETSTONE, GID_CLAIM_CHECK, 0x0A, 0x80, CHEST_ANIM_LONG), + // GI_SWORD_KOKIRI GET_ITEM(ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0xA4, 0x80, CHEST_ANIM_LONG), + // GI_SWORD_KNIFE GET_ITEM(ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x4B, 0x80, CHEST_ANIM_LONG), + // GI_SHIELD_DEKU GET_ITEM(ITEM_SHIELD_DEKU, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, 0x4C, 0xA0, CHEST_ANIM_SHORT), + // GI_SHIELD_HYLIAN GET_ITEM(ITEM_SHIELD_HYLIAN, OBJECT_GI_SHIELD_2, GID_SHIELD_HYLIAN, 0x4D, 0xA0, CHEST_ANIM_SHORT), + // GI_SHIELD_MIRROR GET_ITEM(ITEM_SHIELD_MIRROR, OBJECT_GI_SHIELD_3, GID_SHIELD_MIRROR, 0x4E, 0x80, CHEST_ANIM_LONG), + // GI_TUNIC_GORON GET_ITEM(ITEM_TUNIC_GORON, OBJECT_GI_CLOTHES, GID_TUNIC_GORON, 0x50, 0xA0, CHEST_ANIM_LONG), + // GI_TUNIC_ZORA GET_ITEM(ITEM_TUNIC_ZORA, OBJECT_GI_CLOTHES, GID_TUNIC_ZORA, 0x51, 0xA0, CHEST_ANIM_LONG), + // GI_BOOTS_IRON GET_ITEM(ITEM_BOOTS_IRON, OBJECT_GI_BOOTS_2, GID_BOOTS_IRON, 0x53, 0x80, CHEST_ANIM_LONG), + // GI_BOOTS_HOVER GET_ITEM(ITEM_BOOTS_HOVER, OBJECT_GI_HOVERBOOTS, GID_BOOTS_HOVER, 0x54, 0x80, CHEST_ANIM_LONG), + // GI_QUIVER_40 GET_ITEM(ITEM_QUIVER_40, OBJECT_GI_ARROWCASE, GID_QUIVER_40, 0x56, 0x80, CHEST_ANIM_LONG), + // GI_QUIVER_50 GET_ITEM(ITEM_QUIVER_50, OBJECT_GI_ARROWCASE, GID_QUIVER_50, 0x57, 0x80, CHEST_ANIM_LONG), + // GI_BOMB_BAG_20 GET_ITEM(ITEM_BOMB_BAG_20, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_20, 0x58, 0x80, CHEST_ANIM_LONG), + // GI_BOMB_BAG_30 GET_ITEM(ITEM_BOMB_BAG_30, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_30, 0x59, 0x80, CHEST_ANIM_LONG), + // GI_BOMB_BAG_40 GET_ITEM(ITEM_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, 0x5A, 0x80, CHEST_ANIM_LONG), + // GI_GAUNTLETS_SILVER GET_ITEM(ITEM_GAUNTLETS_SILVER, OBJECT_GI_GLOVES, GID_GAUNTLETS_SILVER, 0x5B, 0x80, CHEST_ANIM_LONG), + // GI_GAUNTLETS_GOLD GET_ITEM(ITEM_GAUNTLETS_GOLD, OBJECT_GI_GLOVES, GID_GAUNTLETS_GOLD, 0x5C, 0x80, CHEST_ANIM_LONG), + // GI_SCALE_SILVER GET_ITEM(ITEM_SCALE_SILVER, OBJECT_GI_SCALE, GID_SCALE_SILVER, 0xCD, 0x80, CHEST_ANIM_LONG), + // GI_SCALE_GOLD GET_ITEM(ITEM_SCALE_GOLDEN, OBJECT_GI_SCALE, GID_SCALE_GOLDEN, 0xCE, 0x80, CHEST_ANIM_LONG), + // GI_STONE_OF_AGONY GET_ITEM(ITEM_STONE_OF_AGONY, OBJECT_GI_MAP, GID_STONE_OF_AGONY, 0x68, 0x80, CHEST_ANIM_LONG), + // GI_GERUDO_CARD GET_ITEM(ITEM_GERUDO_CARD, OBJECT_GI_GERUDO, GID_GERUDO_CARD, 0x7B, 0x80, CHEST_ANIM_LONG), + // GI_OCARINA_FAIRY GET_ITEM(ITEM_OCARINA_FAIRY, OBJECT_GI_OCARINA_0, GID_OCARINA_FAIRY, 0x3A, 0x80, CHEST_ANIM_LONG), + // GI_SEEDS_5 GET_ITEM(ITEM_SEEDS, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT), + // GI_HEART_CONTAINER GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG), + // GI_HEART_PIECE GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG), + // GI_KEY_BOSS GET_ITEM(ITEM_KEY_BOSS, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, 0xC7, 0x80, CHEST_ANIM_LONG), + // GI_COMPASS GET_ITEM(ITEM_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, 0x67, 0x80, CHEST_ANIM_LONG), + // GI_MAP GET_ITEM(ITEM_DUNGEON_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, 0x66, 0x80, CHEST_ANIM_LONG), + // GI_KEY_SMALL GET_ITEM(ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0x60, 0x80, CHEST_ANIM_SHORT), + // GI_MAGIC_SMALL GET_ITEM(ITEM_MAGIC_SMALL, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0x52, 0x6F, CHEST_ANIM_SHORT), + // GI_MAGIC_LARGE GET_ITEM(ITEM_MAGIC_LARGE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0x52, 0x6E, CHEST_ANIM_SHORT), + // GI_WALLET_ADULT GET_ITEM(ITEM_WALLET_ADULT, OBJECT_GI_PURSE, GID_WALLET_ADULT, 0x5E, 0x80, CHEST_ANIM_LONG), + // GI_WALLET_GIANT GET_ITEM(ITEM_WALLET_GIANT, OBJECT_GI_PURSE, GID_WALLET_GIANT, 0x5F, 0x80, CHEST_ANIM_LONG), + // GI_WEIRD_EGG GET_ITEM(ITEM_WEIRD_EGG, OBJECT_GI_EGG, GID_EGG, 0x9A, 0x80, CHEST_ANIM_LONG), + // GI_RECOVERY_HEART GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x55, 0x80, CHEST_ANIM_LONG), + // GI_ARROWS_SMALL GET_ITEM(ITEM_ARROWS_SMALL, OBJECT_GI_ARROW, GID_ARROWS_SMALL, 0xE6, 0x48, CHEST_ANIM_SHORT), + // GI_ARROWS_MEDIUM GET_ITEM(ITEM_ARROWS_MEDIUM, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0xE6, 0x49, CHEST_ANIM_SHORT), + // GI_ARROWS_LARGE GET_ITEM(ITEM_ARROWS_LARGE, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0xE6, 0x4A, CHEST_ANIM_SHORT), + // GI_RUPEE_GREEN GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0x6F, 0x00, CHEST_ANIM_SHORT), + // GI_RUPEE_BLUE GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xCC, 0x01, CHEST_ANIM_SHORT), + // GI_RUPEE_RED GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF0, 0x02, CHEST_ANIM_SHORT), + // GI_HEART_CONTAINER_2 GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG), + // GI_MILK GET_ITEM(ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG), + // GI_MASK_GORON GET_ITEM(ITEM_MASK_GORON, OBJECT_GI_GOLONMASK, GID_MASK_GORON, 0x14, 0x80, CHEST_ANIM_LONG), + // GI_MASK_ZORA GET_ITEM(ITEM_MASK_ZORA, OBJECT_GI_ZORAMASK, GID_MASK_ZORA, 0x15, 0x80, CHEST_ANIM_LONG), + // GI_MASK_GERUDO GET_ITEM(ITEM_MASK_GERUDO, OBJECT_GI_GERUDOMASK, GID_MASK_GERUDO, 0x16, 0x80, CHEST_ANIM_LONG), + // GI_BRACELET GET_ITEM(ITEM_BRACELET, OBJECT_GI_BRACELET, GID_BRACELET, 0x79, 0x80, CHEST_ANIM_LONG), + // GI_RUPEE_PURPLE GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF1, 0x14, CHEST_ANIM_SHORT), + // GI_RUPEE_GOLD GET_ITEM(ITEM_RUPEE_GOLD, OBJECT_GI_RUPY, GID_RUPEE_GOLD, 0xF2, 0x13, CHEST_ANIM_SHORT), + // GI_SWORD_BGS GET_ITEM(ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x0C, 0x80, CHEST_ANIM_LONG), + // GI_ARROW_FIRE GET_ITEM(ITEM_ARROW_FIRE, OBJECT_GI_M_ARROW, GID_ARROW_FIRE, 0x70, 0x80, CHEST_ANIM_LONG), + // GI_ARROW_ICE GET_ITEM(ITEM_ARROW_ICE, OBJECT_GI_M_ARROW, GID_ARROW_ICE, 0x71, 0x80, CHEST_ANIM_LONG), + // GI_ARROW_LIGHT GET_ITEM(ITEM_ARROW_LIGHT, OBJECT_GI_M_ARROW, GID_ARROW_LIGHT, 0x72, 0x80, CHEST_ANIM_LONG), + // GI_SKULL_TOKEN GET_ITEM(ITEM_SKULL_TOKEN, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, 0xB4, 0x80, CHEST_ANIM_SHORT), + // GI_DINS_FIRE GET_ITEM(ITEM_DINS_FIRE, OBJECT_GI_GODDESS, GID_DINS_FIRE, 0xAD, 0x80, CHEST_ANIM_LONG), + // GI_FARORES_WIND GET_ITEM(ITEM_FARORES_WIND, OBJECT_GI_GODDESS, GID_FARORES_WIND, 0xAE, 0x80, CHEST_ANIM_LONG), + // GI_NAYRUS_LOVE GET_ITEM(ITEM_NAYRUS_LOVE, OBJECT_GI_GODDESS, GID_NAYRUS_LOVE, 0xAF, 0x80, CHEST_ANIM_LONG), + // GI_BULLET_BAG_30 GET_ITEM(ITEM_BULLET_BAG_30, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG), + // GI_BULLET_BAG_40 GET_ITEM(ITEM_BULLET_BAG_40, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG), + // GI_STICKS_5 GET_ITEM(ITEM_STICKS_5, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT), + // GI_STICKS_10 GET_ITEM(ITEM_STICKS_10, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT), + // GI_NUTS_5_2 GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT), + // GI_NUTS_10 GET_ITEM(ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT), + // GI_BOMBS_1 GET_ITEM(ITEM_BOMB, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT), + // GI_BOMBS_10 GET_ITEM(ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT), + // GI_BOMBS_20 GET_ITEM(ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT), + // GI_BOMBS_30 GET_ITEM(ITEM_BOMBS_30, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT), + // GI_SEEDS_30 GET_ITEM(ITEM_SEEDS_30, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT), + // GI_BOMBCHUS_5 GET_ITEM(ITEM_BOMBCHUS_5, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT), + // GI_BOMBCHUS_20 GET_ITEM(ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT), + // GI_FISH GET_ITEM(ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG), + // GI_BUGS GET_ITEM(ITEM_BUG, OBJECT_GI_INSECT, GID_BUG, 0x7A, 0x80, CHEST_ANIM_LONG), + // GI_BLUE_FIRE GET_ITEM(ITEM_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, 0x5D, 0x80, CHEST_ANIM_LONG), + // GI_POE GET_ITEM(ITEM_POE, OBJECT_GI_GHOST, GID_POE, 0x97, 0x80, CHEST_ANIM_LONG), + // GI_BIG_POE GET_ITEM(ITEM_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, 0xF9, 0x80, CHEST_ANIM_LONG), + // GI_DOOR_KEY GET_ITEM(ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0xF3, 0x80, CHEST_ANIM_SHORT), + // GI_RUPEE_GREEN_LOSE GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xF4, 0x00, CHEST_ANIM_SHORT), + // GI_RUPEE_BLUE_LOSE GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xF5, 0x01, CHEST_ANIM_SHORT), + // GI_RUPEE_RED_LOSE GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF6, 0x02, CHEST_ANIM_SHORT), + // GI_RUPEE_PURPLE_LOSE GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF7, 0x14, CHEST_ANIM_SHORT), + // GI_HEART_PIECE_WIN GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG), + // GI_STICK_UPGRADE_20 GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x90, 0x80, CHEST_ANIM_SHORT), + // GI_STICK_UPGRADE_30 GET_ITEM(ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x91, 0x80, CHEST_ANIM_SHORT), + // GI_NUT_UPGRADE_30 GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0xA7, 0x80, CHEST_ANIM_SHORT), + // GI_NUT_UPGRADE_40 GET_ITEM(ITEM_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_NUTS, 0xA8, 0x80, CHEST_ANIM_SHORT), + // GI_BULLET_BAG_50 GET_ITEM(ITEM_BULLET_BAG_50, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG_50, 0x6C, 0x80, CHEST_ANIM_LONG), + // GI_ICE_TRAP GET_ITEM_NONE, + // GI_TEXT_0 GET_ITEM_NONE, }; @@ -1026,94 +1151,208 @@ static u8 D_80853E7C[] = { // Used to map item IDs to item actions static s8 sItemActions[] = { - PLAYER_IA_STICK, - PLAYER_IA_NUT, - PLAYER_IA_BOMB, - PLAYER_IA_BOW, - PLAYER_IA_BOW_FIRE, - PLAYER_IA_DINS_FIRE, - PLAYER_IA_SLINGSHOT, - PLAYER_IA_OCARINA_FAIRY, - PLAYER_IA_OCARINA_TIME, - PLAYER_IA_BOMBCHU, - PLAYER_IA_HOOKSHOT, - PLAYER_IA_LONGSHOT, - PLAYER_IA_BOW_ICE, - PLAYER_IA_FARORES_WIND, - PLAYER_IA_BOOMERANG, - PLAYER_IA_LENS, - PLAYER_IA_BEAN, - PLAYER_IA_HAMMER, - PLAYER_IA_BOW_LIGHT, - PLAYER_IA_NAYRUS_LOVE, - PLAYER_IA_BOTTLE, - PLAYER_IA_BOTTLE_POTION_RED, - PLAYER_IA_BOTTLE_POTION_GREEN, - PLAYER_IA_BOTTLE_POTION_BLUE, - PLAYER_IA_BOTTLE_FAIRY, - PLAYER_IA_BOTTLE_FISH, - PLAYER_IA_BOTTLE_MILK, - PLAYER_IA_BOTTLE_LETTER, - PLAYER_IA_BOTTLE_FIRE, - PLAYER_IA_BOTTLE_BUG, - PLAYER_IA_BOTTLE_BIG_POE, - PLAYER_IA_BOTTLE_MILK_HALF, - PLAYER_IA_BOTTLE_POE, - PLAYER_IA_WEIRD_EGG, - PLAYER_IA_CHICKEN, - PLAYER_IA_LETTER_ZELDA, - PLAYER_IA_MASK_KEATON, - PLAYER_IA_MASK_SKULL, - PLAYER_IA_MASK_SPOOKY, - PLAYER_IA_MASK_BUNNY, - PLAYER_IA_MASK_GORON, - PLAYER_IA_MASK_ZORA, - PLAYER_IA_MASK_GERUDO, - PLAYER_IA_MASK_TRUTH, - PLAYER_IA_SWORD_MASTER, - PLAYER_IA_POCKET_EGG, - PLAYER_IA_POCKET_CUCCO, - PLAYER_IA_COJIRO, - PLAYER_IA_ODD_MUSHROOM, - PLAYER_IA_ODD_POTION, - PLAYER_IA_SAW, - PLAYER_IA_SWORD_BROKEN, - PLAYER_IA_PRESCRIPTION, - PLAYER_IA_FROG, - PLAYER_IA_EYEDROPS, - PLAYER_IA_CLAIM_CHECK, - PLAYER_IA_BOW_FIRE, - PLAYER_IA_BOW_ICE, - PLAYER_IA_BOW_LIGHT, - PLAYER_IA_SWORD_KOKIRI, - PLAYER_IA_SWORD_MASTER, - PLAYER_IA_SWORD_BGS, + PLAYER_IA_STICK, // ITEM_STICK + PLAYER_IA_NUT, // ITEM_NUT + PLAYER_IA_BOMB, // ITEM_BOMB + PLAYER_IA_BOW, // ITEM_BOW + PLAYER_IA_BOW_FIRE, // ITEM_ARROW_FIRE + PLAYER_IA_DINS_FIRE, // ITEM_DINS_FIRE + PLAYER_IA_SLINGSHOT, // ITEM_SLINGSHOT + PLAYER_IA_OCARINA_FAIRY, // ITEM_OCARINA_FAIRY + PLAYER_IA_OCARINA_TIME, // ITEM_OCARINA_TIME + PLAYER_IA_BOMBCHU, // ITEM_BOMBCHU + PLAYER_IA_HOOKSHOT, // ITEM_HOOKSHOT + PLAYER_IA_LONGSHOT, // ITEM_LONGSHOT + PLAYER_IA_BOW_ICE, // ITEM_ARROW_ICE + PLAYER_IA_FARORES_WIND, // ITEM_FARORES_WIND + PLAYER_IA_BOOMERANG, // ITEM_BOOMERANG + PLAYER_IA_LENS, // ITEM_LENS + PLAYER_IA_BEAN, // ITEM_BEAN + PLAYER_IA_HAMMER, // ITEM_HAMMER + PLAYER_IA_BOW_LIGHT, // ITEM_ARROW_LIGHT + PLAYER_IA_NAYRUS_LOVE, // ITEM_NAYRUS_LOVE + PLAYER_IA_BOTTLE, // ITEM_BOTTLE + PLAYER_IA_BOTTLE_POTION_RED, // ITEM_POTION_RED + PLAYER_IA_BOTTLE_POTION_GREEN, // ITEM_POTION_GREEN + PLAYER_IA_BOTTLE_POTION_BLUE, // ITEM_POTION_BLUE + PLAYER_IA_BOTTLE_FAIRY, // ITEM_FAIRY + PLAYER_IA_BOTTLE_FISH, // ITEM_FISH + PLAYER_IA_BOTTLE_MILK, // ITEM_MILK_BOTTLE + PLAYER_IA_BOTTLE_LETTER, // ITEM_LETTER_RUTO + PLAYER_IA_BOTTLE_FIRE, // ITEM_BLUE_FIRE + PLAYER_IA_BOTTLE_BUG, // ITEM_BUG + PLAYER_IA_BOTTLE_BIG_POE, // ITEM_BIG_POE + PLAYER_IA_BOTTLE_MILK_HALF, // ITEM_MILK_HALF + PLAYER_IA_BOTTLE_POE, // ITEM_POE + PLAYER_IA_WEIRD_EGG, // ITEM_WEIRD_EGG + PLAYER_IA_CHICKEN, // ITEM_CHICKEN + PLAYER_IA_LETTER_ZELDA, // ITEM_LETTER_ZELDA + PLAYER_IA_MASK_KEATON, // ITEM_MASK_KEATON + PLAYER_IA_MASK_SKULL, // ITEM_MASK_SKULL + PLAYER_IA_MASK_SPOOKY, // ITEM_MASK_SPOOKY + PLAYER_IA_MASK_BUNNY, // ITEM_MASK_BUNNY + PLAYER_IA_MASK_GORON, // ITEM_MASK_GORON + PLAYER_IA_MASK_ZORA, // ITEM_MASK_ZORA + PLAYER_IA_MASK_GERUDO, // ITEM_MASK_GERUDO + PLAYER_IA_MASK_TRUTH, // ITEM_MASK_TRUTH + PLAYER_IA_SWORD_MASTER, // ITEM_SOLD_OUT + PLAYER_IA_POCKET_EGG, // ITEM_POCKET_EGG + PLAYER_IA_POCKET_CUCCO, // ITEM_POCKET_CUCCO + PLAYER_IA_COJIRO, // ITEM_COJIRO + PLAYER_IA_ODD_MUSHROOM, // ITEM_ODD_MUSHROOM + PLAYER_IA_ODD_POTION, // ITEM_ODD_POTION + PLAYER_IA_SAW, // ITEM_SAW + PLAYER_IA_SWORD_BROKEN, // ITEM_SWORD_BROKEN + PLAYER_IA_PRESCRIPTION, // ITEM_PRESCRIPTION + PLAYER_IA_FROG, // ITEM_FROG + PLAYER_IA_EYEDROPS, // ITEM_EYEDROPS + PLAYER_IA_CLAIM_CHECK, // ITEM_CLAIM_CHECK + PLAYER_IA_BOW_FIRE, // ITEM_BOW_ARROW_FIRE + PLAYER_IA_BOW_ICE, // ITEM_BOW_ARROW_ICE + PLAYER_IA_BOW_LIGHT, // ITEM_BOW_ARROW_LIGHT + PLAYER_IA_SWORD_KOKIRI, // ITEM_SWORD_KOKIRI + PLAYER_IA_SWORD_MASTER, // ITEM_SWORD_MASTER + PLAYER_IA_SWORD_BGS, // ITEM_SWORD_BGS }; static s32 (*D_80853EDC[])(Player* this, PlayState* play) = { - func_8083485C, func_8083485C, func_8083485C, func_808349DC, func_808349DC, func_808349DC, func_8083485C, - func_8083485C, func_8083501C, func_8083501C, func_8083501C, func_8083501C, func_8083501C, func_8083501C, - func_8083501C, func_8083501C, func_8083501C, func_8083501C, func_808356E8, func_808356E8, func_80835800, - func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, - func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, - func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, - func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, - func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, - func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, func_8083485C, - func_8083485C, func_8083485C, func_8083485C, func_8083485C, + func_8083485C, // PLAYER_IA_NONE + func_8083485C, // PLAYER_IA_LAST_USED + func_8083485C, // PLAYER_IA_FISHING_POLE + func_808349DC, // PLAYER_IA_SWORD_MASTER + func_808349DC, // PLAYER_IA_SWORD_KOKIRI + func_808349DC, // PLAYER_IA_SWORD_BGS + func_8083485C, // PLAYER_IA_STICK + func_8083485C, // PLAYER_IA_HAMMER + func_8083501C, // PLAYER_IA_BOW + func_8083501C, // PLAYER_IA_BOW_FIRE + func_8083501C, // PLAYER_IA_BOW_ICE + func_8083501C, // PLAYER_IA_BOW_LIGHT + func_8083501C, // PLAYER_IA_BOW_0C + func_8083501C, // PLAYER_IA_BOW_0D + func_8083501C, // PLAYER_IA_BOW_0E + func_8083501C, // PLAYER_IA_SLINGSHOT + func_8083501C, // PLAYER_IA_HOOKSHOT + func_8083501C, // PLAYER_IA_LONGSHOT + func_808356E8, // PLAYER_IA_BOMB + func_808356E8, // PLAYER_IA_BOMBCHU + func_80835800, // PLAYER_IA_BOOMERANG + func_8083485C, // PLAYER_IA_MAGIC_SPELL_15 + func_8083485C, // PLAYER_IA_MAGIC_SPELL_16 + func_8083485C, // PLAYER_IA_MAGIC_SPELL_17 + func_8083485C, // PLAYER_IA_FARORES_WIND + func_8083485C, // PLAYER_IA_NAYRUS_LOVE + func_8083485C, // PLAYER_IA_DINS_FIRE + func_8083485C, // PLAYER_IA_NUT + func_8083485C, // PLAYER_IA_OCARINA_FAIRY + func_8083485C, // PLAYER_IA_OCARINA_TIME + func_8083485C, // PLAYER_IA_BOTTLE + func_8083485C, // PLAYER_IA_BOTTLE_FISH + func_8083485C, // PLAYER_IA_BOTTLE_FIRE + func_8083485C, // PLAYER_IA_BOTTLE_BUG + func_8083485C, // PLAYER_IA_BOTTLE_POE + func_8083485C, // PLAYER_IA_BOTTLE_BIG_POE + func_8083485C, // PLAYER_IA_BOTTLE_LETTER + func_8083485C, // PLAYER_IA_BOTTLE_POTION_RED + func_8083485C, // PLAYER_IA_BOTTLE_POTION_BLUE + func_8083485C, // PLAYER_IA_BOTTLE_POTION_GREEN + func_8083485C, // PLAYER_IA_BOTTLE_MILK + func_8083485C, // PLAYER_IA_BOTTLE_MILK_HALF + func_8083485C, // PLAYER_IA_BOTTLE_FAIRY + func_8083485C, // PLAYER_IA_LETTER_ZELDA + func_8083485C, // PLAYER_IA_WEIRD_EGG + func_8083485C, // PLAYER_IA_CHICKEN + func_8083485C, // PLAYER_IA_BEAN + func_8083485C, // PLAYER_IA_POCKET_EGG + func_8083485C, // PLAYER_IA_POCKET_CUCCO + func_8083485C, // PLAYER_IA_COJIRO + func_8083485C, // PLAYER_IA_ODD_MUSHROOM + func_8083485C, // PLAYER_IA_ODD_POTION + func_8083485C, // PLAYER_IA_SAW + func_8083485C, // PLAYER_IA_SWORD_BROKEN + func_8083485C, // PLAYER_IA_PRESCRIPTION + func_8083485C, // PLAYER_IA_FROG + func_8083485C, // PLAYER_IA_EYEDROPS + func_8083485C, // PLAYER_IA_CLAIM_CHECK + func_8083485C, // PLAYER_IA_MASK_KEATON + func_8083485C, // PLAYER_IA_MASK_SKULL + func_8083485C, // PLAYER_IA_MASK_SPOOKY + func_8083485C, // PLAYER_IA_MASK_BUNNY + func_8083485C, // PLAYER_IA_MASK_GORON + func_8083485C, // PLAYER_IA_MASK_ZORA + func_8083485C, // PLAYER_IA_MASK_GERUDO + func_8083485C, // PLAYER_IA_MASK_TRUTH + func_8083485C, // PLAYER_IA_LENS }; static void (*D_80853FE8[])(PlayState* play, Player* this) = { - func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_8083377C, - func_80833790, func_8083379C, func_8083379C, func_8083379C, func_8083379C, func_8083379C, func_8083379C, - func_8083379C, func_8083379C, func_80833910, func_80833910, func_808337D4, func_808337D4, func_80833984, - func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, - func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, - func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, - func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, - func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, - func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, func_80833770, - func_80833770, func_80833770, func_80833770, func_80833770, + func_80833770, // PLAYER_IA_NONE + func_80833770, // PLAYER_IA_LAST_USED + func_80833770, // PLAYER_IA_FISHING_POLE + func_80833770, // PLAYER_IA_SWORD_MASTER + func_80833770, // PLAYER_IA_SWORD_KOKIRI + func_80833770, // PLAYER_IA_SWORD_BGS + func_8083377C, // PLAYER_IA_STICK + func_80833790, // PLAYER_IA_HAMMER + func_8083379C, // PLAYER_IA_BOW + func_8083379C, // PLAYER_IA_BOW_FIRE + func_8083379C, // PLAYER_IA_BOW_ICE + func_8083379C, // PLAYER_IA_BOW_LIGHT + func_8083379C, // PLAYER_IA_BOW_0C + func_8083379C, // PLAYER_IA_BOW_0D + func_8083379C, // PLAYER_IA_BOW_0E + func_8083379C, // PLAYER_IA_SLINGSHOT + func_80833910, // PLAYER_IA_HOOKSHOT + func_80833910, // PLAYER_IA_LONGSHOT + func_808337D4, // PLAYER_IA_BOMB + func_808337D4, // PLAYER_IA_BOMBCHU + func_80833984, // PLAYER_IA_BOOMERANG + func_80833770, // PLAYER_IA_MAGIC_SPELL_15 + func_80833770, // PLAYER_IA_MAGIC_SPELL_16 + func_80833770, // PLAYER_IA_MAGIC_SPELL_17 + func_80833770, // PLAYER_IA_FARORES_WIND + func_80833770, // PLAYER_IA_NAYRUS_LOVE + func_80833770, // PLAYER_IA_DINS_FIRE + func_80833770, // PLAYER_IA_NUT + func_80833770, // PLAYER_IA_OCARINA_FAIRY + func_80833770, // PLAYER_IA_OCARINA_TIME + func_80833770, // PLAYER_IA_BOTTLE + func_80833770, // PLAYER_IA_BOTTLE_FISH + func_80833770, // PLAYER_IA_BOTTLE_FIRE + func_80833770, // PLAYER_IA_BOTTLE_BUG + func_80833770, // PLAYER_IA_BOTTLE_POE + func_80833770, // PLAYER_IA_BOTTLE_BIG_POE + func_80833770, // PLAYER_IA_BOTTLE_LETTER + func_80833770, // PLAYER_IA_BOTTLE_POTION_RED + func_80833770, // PLAYER_IA_BOTTLE_POTION_BLUE + func_80833770, // PLAYER_IA_BOTTLE_POTION_GREEN + func_80833770, // PLAYER_IA_BOTTLE_MILK + func_80833770, // PLAYER_IA_BOTTLE_MILK_HALF + func_80833770, // PLAYER_IA_BOTTLE_FAIRY + func_80833770, // PLAYER_IA_LETTER_ZELDA + func_80833770, // PLAYER_IA_WEIRD_EGG + func_80833770, // PLAYER_IA_CHICKEN + func_80833770, // PLAYER_IA_BEAN + func_80833770, // PLAYER_IA_POCKET_EGG + func_80833770, // PLAYER_IA_POCKET_CUCCO + func_80833770, // PLAYER_IA_COJIRO + func_80833770, // PLAYER_IA_ODD_MUSHROOM + func_80833770, // PLAYER_IA_ODD_POTION + func_80833770, // PLAYER_IA_SAW + func_80833770, // PLAYER_IA_SWORD_BROKEN + func_80833770, // PLAYER_IA_PRESCRIPTION + func_80833770, // PLAYER_IA_FROG + func_80833770, // PLAYER_IA_EYEDROPS + func_80833770, // PLAYER_IA_CLAIM_CHECK + func_80833770, // PLAYER_IA_MASK_KEATON + func_80833770, // PLAYER_IA_MASK_SKULL + func_80833770, // PLAYER_IA_MASK_SPOOKY + func_80833770, // PLAYER_IA_MASK_BUNNY + func_80833770, // PLAYER_IA_MASK_GORON + func_80833770, // PLAYER_IA_MASK_ZORA + func_80833770, // PLAYER_IA_MASK_GERUDO + func_80833770, // PLAYER_IA_MASK_TRUTH + func_80833770, // PLAYER_IA_LENS }; typedef enum { @@ -2998,14 +3237,14 @@ void func_80836448(PlayState* play, Player* this, LinkAnimationHeader* anim) { func_80832698(this, NA_SE_VO_LI_DOWN); if (this->actor.category == ACTORCAT_PLAYER) { - func_800F47BC(); + Audio_SetBgmVolumeOffDuringFanfare(); if (Inventory_ConsumeFairy(play)) { play->gameOverCtx.state = GAMEOVER_REVIVE_START; this->unk_84F = 1; } else { play->gameOverCtx.state = GAMEOVER_DEATH_START; - func_800F6AB0(0); + Audio_StopBgmAndFanfare(0); Audio_PlayFanfare(NA_BGM_GAME_OVER); gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.natureAmbienceId = NATURE_ID_DISABLED; @@ -4118,7 +4357,7 @@ s32 func_80838FB8(PlayState* play, Player* this) { * The start of each group is indexed by `sReturnEntranceGroupIndices` values. * The resulting groups are then indexed by the spawn value. * - * The spawn value (`PlayState.curSpawn`) is set to a different value depending on the entrance used to enter the + * The spawn value (`PlayState.spawn`) is set to a different value depending on the entrance used to enter the * scene, which allows these dynamic "return entrances" to link back to the previous scene. * * Note: grottos and normal fairy fountains use `ENTR_RETURN_GROTTO` @@ -4189,7 +4428,7 @@ s32 func_80839034(PlayState* play, Player* this, CollisionPoly* poly, u32 bgId) Play_TriggerVoidOut(play); Scene_SetTransitionForNextEntrance(play); } else { - play->nextEntranceIndex = play->setupExitList[exitIndex - 1]; + play->nextEntranceIndex = play->exitList[exitIndex - 1]; if (play->nextEntranceIndex == ENTR_RETURN_GROTTO) { gSaveContext.respawnFlag = 2; @@ -4200,7 +4439,7 @@ s32 func_80839034(PlayState* play, Player* this, CollisionPoly* poly, u32 bgId) play->nextEntranceIndex = sReturnEntranceGroupData[sReturnEntranceGroupIndices[play->nextEntranceIndex - ENTR_RETURN_YOUSEI_IZUMI_YOKO] + - play->curSpawn]; + play->spawn]; Scene_SetTransitionForNextEntrance(play); } else { if (SurfaceType_GetFloorEffect(&play->colCtx, poly, bgId) == FLOOR_EFFECT_2) { @@ -4928,11 +5167,35 @@ void func_8083B010(Player* this) { } static u8 D_80854528[] = { - GI_LETTER_ZELDA, GI_WEIRD_EGG, GI_CHICKEN, GI_BEAN, GI_POCKET_EGG, GI_POCKET_CUCCO, - GI_COJIRO, GI_ODD_MUSHROOM, GI_ODD_POTION, GI_SAW, GI_SWORD_BROKEN, GI_PRESCRIPTION, - GI_FROG, GI_EYEDROPS, GI_CLAIM_CHECK, GI_MASK_SKULL, GI_MASK_SPOOKY, GI_MASK_KEATON, - GI_MASK_BUNNY, GI_MASK_TRUTH, GI_MASK_GORON, GI_MASK_ZORA, GI_MASK_GERUDO, GI_LETTER_RUTO, - GI_LETTER_RUTO, GI_LETTER_RUTO, GI_LETTER_RUTO, GI_LETTER_RUTO, GI_LETTER_RUTO, + GI_LETTER_ZELDA, // EXCH_ITEM_LETTER_ZELDA + GI_WEIRD_EGG, // EXCH_ITEM_WEIRD_EGG + GI_CHICKEN, // EXCH_ITEM_CHICKEN + GI_BEAN, // EXCH_ITEM_BEAN + GI_POCKET_EGG, // EXCH_ITEM_POCKET_EGG + GI_POCKET_CUCCO, // EXCH_ITEM_POCKET_CUCCO + GI_COJIRO, // EXCH_ITEM_COJIRO + GI_ODD_MUSHROOM, // EXCH_ITEM_ODD_MUSHROOM + GI_ODD_POTION, // EXCH_ITEM_ODD_POTION + GI_SAW, // EXCH_ITEM_SAW + GI_SWORD_BROKEN, // EXCH_ITEM_SWORD_BROKEN + GI_PRESCRIPTION, // EXCH_ITEM_PRESCRIPTION + GI_FROG, // EXCH_ITEM_FROG + GI_EYEDROPS, // EXCH_ITEM_EYEDROPS + GI_CLAIM_CHECK, // EXCH_ITEM_CLAIM_CHECK + GI_MASK_SKULL, // EXCH_ITEM_MASK_SKULL + GI_MASK_SPOOKY, // EXCH_ITEM_MASK_SPOOKY + GI_MASK_KEATON, // EXCH_ITEM_MASK_KEATON + GI_MASK_BUNNY, // EXCH_ITEM_MASK_BUNNY + GI_MASK_TRUTH, // EXCH_ITEM_MASK_TRUTH + GI_MASK_GORON, // EXCH_ITEM_MASK_GORON + GI_MASK_ZORA, // EXCH_ITEM_MASK_ZORA + GI_MASK_GERUDO, // EXCH_ITEM_MASK_GERUDO + GI_LETTER_RUTO, // EXCH_ITEM_FISH + GI_LETTER_RUTO, // EXCH_ITEM_BLUE_FIRE + GI_LETTER_RUTO, // EXCH_ITEM_BUG + GI_LETTER_RUTO, // EXCH_ITEM_POE + GI_LETTER_RUTO, // EXCH_ITEM_BIG_POE + GI_LETTER_RUTO, // EXCH_ITEM_LETTER_RUTO }; static LinkAnimationHeader* D_80854548[] = { @@ -8121,7 +8384,7 @@ void func_80843AE8(PlayState* play, Player* this) { } this->unk_A87 = 20; func_80837AFC(this, -20); - func_800F47FC(); + Audio_SetBgmVolumeOnDuringFanfare(); } } else if (this->unk_84F != 0) { this->unk_850 = 60; diff --git a/tools/disasm_elf_msg.py b/tools/disasm_elf_msg.py index 19ef491ddc..81c66064bf 100644 --- a/tools/disasm_elf_msg.py +++ b/tools/disasm_elf_msg.py @@ -210,32 +210,32 @@ def disas_elfmsgs(start): if condition_type == 0: if elf_message_type == 0xE0 and b1 == 0 and not (b0 & 1): - print(f"ELF_MSG_END({ARG_1}),") + print(f"QUEST_HINT_END({ARG_1}),") else: - print(f"ELF_MSG_FLAG({ARG_0}, {ARG_1}, {ARG_2}, 0x{b1:02X}), /* eventChkInf[{(b1 >> 4) & 0xF}] & 0x{1 << (b1 & 0xF):X} */") + print(f"QUEST_HINT_FLAG({ARG_0}, {ARG_1}, {ARG_2}, 0x{b1:02X}), /* eventChkInf[{(b1 >> 4) & 0xF}] & 0x{1 << (b1 & 0xF):X} */") assert b3 == 0 elif condition_type == 2: - print(f"ELF_MSG_DUNGEON_ITEM({ARG_0}, {ARG_1}, {ARG_2}, {item_ids[b1]}),") + print(f"QUEST_HINT_DUNGEON_ITEM({ARG_0}, {ARG_1}, {ARG_2}, {item_ids[b1]}),") assert b3 == 0 elif condition_type == 4: - print(f"ELF_MSG_ITEM({ARG_0}, {ARG_1}, {ARG_2}, {item_ids[b1]}, {item_ids[b3]}),") + print(f"QUEST_HINT_ITEM({ARG_0}, {ARG_1}, {ARG_2}, {item_ids[b1]}, {item_ids[b3]}),") elif condition_type == 6: condition_other_type = b1 & 0xF0 if condition_other_type == 0: - print(f"ELF_MSG_STRENGTH_UPG({ARG_0}, {ARG_1}, {ARG_2}, {b1 & 0xF}),") + print(f"QUEST_HINT_STRENGTH_UPG({ARG_0}, {ARG_1}, {ARG_2}, {b1 & 0xF}),") assert b3 == 0 elif condition_other_type == 0x10: - print(f"ELF_MSG_BOOTS({ARG_0}, {ARG_1}, {ARG_2}, {item_ids[b3]}),") + print(f"QUEST_HINT_BOOTS({ARG_0}, {ARG_1}, {ARG_2}, {item_ids[b3]}),") assert (b1 & 0xF) == 0 elif condition_other_type == 0x20: - print(f"ELF_MSG_SONG({ARG_0}, {ARG_1}, {ARG_2}, {item_ids[b3]}),") + print(f"QUEST_HINT_SONG({ARG_0}, {ARG_1}, {ARG_2}, {item_ids[b3]}),") assert (b1 & 0xF) == 0 elif condition_other_type == 0x30: - print(f"ELF_MSG_MEDALLION({ARG_0}, {ARG_1}, {ARG_2}, {item_ids[b3]}),") + print(f"QUEST_HINT_MEDALLION({ARG_0}, {ARG_1}, {ARG_2}, {item_ids[b3]}),") assert (b1 & 0xF) == 0 elif condition_other_type == 0x40: - print(f"ELF_MSG_MAGIC({ARG_0}, {ARG_1}, {ARG_2}),") + print(f"QUEST_HINT_MAGIC({ARG_0}, {ARG_1}, {ARG_2}),") assert (b1 & 0xF) == 0 assert b3 == 0 else: