Hydro Thunder (Dreamcast)/Uncompiled Source Code
This is a sub-page of Hydro Thunder (Dreamcast).
To do:
|
A decent portion of source code somehow found its way throughout track 37. The length of these fragments range from just a few lines to entire source files.
Contents
- 1 Program Listings
- 1.1 tmem.h
- 1.2 material.h
- 1.3 glide.h
- 1.4 worldob.h
- 1.5 sky.h
- 1.6 gendefs.h
- 1.7 xmath.h
- 1.8 audio.h
- 1.9 eorocom.h
- 1.10 gentypes.h
- 1.11 world.h
- 1.12 worldit.h
- 1.13 mesh3d.h
- 1.14 vec2.h
- 1.15 wpr_attract.c
- 1.16 xfm.h
- 1.17 waterfall.h
- 1.18 wpr_banker.c
- 1.19 hud_text.c
- 1.20 bt_tblade.c
- 1.21 report.c
- 1.22 scissor.c
- 2 Raw Source Code
Program Listings
tmem.h
Found at 0x3F85E10:
muSelIndex; M�0��� + /* Which TMU this texture was last selected in M�0��� +to:*/ M�1��� tmem.h 49 X M�1��� + /* 0=selected into TMU0,*/ M�2��� tmem.h 50 X M�2��� + /* 1=selected into TMU1,*/ M�3��� tmem.h 51 X M�3��� + /* 2=selected into both (twi M�3��� +ns),*/ M�4��� tmem.h 52 X M�4��� + /* 3=selected into both (mip M�4��� +mapped)*/ M�5��� tmem.h 53 X u32 nWidth; M�5��� + /* Width in texels (if mipmap, highest M�5��� +-res)*/ M�6��� tmem.h 54 X u32 nHeight; M�6��� + /* Height in texels (if mipmap, highest-res)*/ M�7��� tmem.h 55 X u32 *pPalette; M�7��� + /* pointer to palette in system mem (NULL=not M�7��� +paletted)*/ M�8��� tmem.h 56 X BOOL bOddLODsOnTMU0; M�8��� + /* Indicates if the odd LODs are on TMU0*/ M�9��� tmem.h 57 X GrTexInfo TexInfo; M�9��� + /* smallLOD, largeLOD, aspectRatio, format, *d M�9��� +ata*/ M�:��� tmem.h 58 X TMUTexInfo_t aTMUTexInfo[2]; /* One M�:��� + for each TMU*/ M�;��� tmem.h 59 X } TexDef_t; M�<��� tmem.h 60 X M�=��� tmem.h 61 X M�>��� tmem.h 62 X #if defined(__cplusplus) M�?��� tmem.h 63 X extern "C" { M�@��� tmem.h 64 X #endif M�A��� tmem.h 65 X M�B��� tmem.h 66 X extern TexDef_t Tmem_TexDef[ TMEM_MAX_TEXTURE_DEFS ]; M�C��� tmem.h 67 X extern int Tmem_nTMUCount; M�C��� + /* Number of TMUs, up to 2*/ M�D��� tmem.h 68 X extern BOOL Tmem_bDisableMipmapping; /* TRUE=disabl M�D��� +e mipmapping, FALSE=enable mipmapping*/ M�E��� tmem.h 69 X extern const float Tmem_afTexScale_S[7]; M�F��� tmem.h 70 X extern const float Tmem_afTexScale_T[7]; M�G��� tmem.h 71 X M�H��� tmem.h 72 X M�I��� tmem.h 73 X M�J��� tmem.h 74 X #if TARGET==ULTRA64 M�K��� tmem.h 75 X extern void AnimateN64textures(); M�L��� tmem.h 76 X #endif /*ULTRA64*/ M�M��� tmem.h 77 X extern BOOL tmem_ModuleInit( void ); M�N��� tmem.h 78 X extern void tmem_Init( void ); M�O��� tmem.h 79 X extern void tmem_ReleaseAll( void ); M�P��� tmem.h 80 X extern void tmem_InvalidateCacheState( void ); M�Q��� tmem.h 81 X extern TexDef_t *tmem_GetCurrentTexdef( void ); M�R��� tmem.h 82 X extern u32 tmem_obsys_GetBlock( void ); /* for obsys u M�R��� +se only*/ M�S��� tmem.h 83 X extern void tmem_obsys_ReleaseBlock( u32 nTableIndex, M�S��� +void *pFreedObsysMem ); /* for obsys use only*/ M�T��� tmem.h 84 X extern TexDef_t *tmem_FindTexture( cchar *pszObName ); M�U��� tmem.h 85 X extern TexDef_t *tmem_LoadTexture( cchar *pszObName, u M�U��� +32 nWidth, u32 nHeight, GrTextureFormat_t Format, void M�U��� + *pImage, int nTMU, u32 *pPalette ); M�V��� tmem.h 86 X extern TexDef_t *tmem_LoadTextureOppositeName( cchar * M�V��� +pszObName, u32 nWidth, u32 nHeight, GrTextureFormat_t M�V��� +Format, void *pImage, cchar *pszOppositeObName, u32 *p M�V��� +Palette ); M�W��� tmem.h 87 X extern TexDef_t *tmem_LoadTextureOppositeTexDef( cchar M�W��� + *pszObName, u32 nWidth, u32 nHeight, GrTextureFormat_ M�W��� +t Format, void *pImage, TexDef_t *pOppositeTexDef, u32 M�W��� + *pPalette ); M�X��� tmem.h 88 X extern TexDef_t *tmem_LoadTextureTwins( cchar *pszObNa M�X��� +me, u32 nWidth, u32 nHeight, GrTextureFormat_t Format, M�X��� + void *pImage, u32 *pPalette ); M�Y��� tmem.h 89 X extern TexDef_t *tmem_LoadMipmap( cchar *pszObName, u3 M�Y��� +2 nWidth, u32 nHeight, GrTextureFormat_t Format, void M�Y��� +*pImage, u32 *pPalette ); M�Z��� tmem.h 90 X extern void tmem_Replace( TexDef_t *pTexDef, void *pIm M�Z��� +age ); M�[��� tmem.h 91 X extern void tmem_PaletteChange( TexDef_t *pTexDef, voi M�[��� +d *pPalette ); M�\��� tmem.h 92 X extern void tmem_GetTileMode( TexDef_t *pTexDef, BOOL M�\��� +*pbTileS, BOOL *pbTileT ); M�]��� tmem.h 93 X extern void tmem_SetTileMode( TexDef_t *pTexDef, BOOL M�]��� +bTileS, BOOL bTileT ); M�^��� tmem.h 94 X extern int tmem_Select( TexDef_t *pTexDef ); M�_��� tmem.h 95 X extern void tmem_SetTexCombineMode( GrCombineFunction_ M�_��� +t RgbFunction, GrCombineFactor_t RgbFactor, M�`��� tmem.h 96 X M�`��� + GrCombineFunction_t AlphaFunction, GrCombineFactor_ M�`��� + t AlphaFactor, M�a��� tmem.h 97 X M�a��� + BOOL bRgbInvert, BOOL bAlphaInvert ); M�b��� tmem.h 98 X extern void tmem_SelectTextureTwins( TexDef_t *pTexDef M�b��� + ); M�c��� tmem.h 99 X extern void tmem_SelectModulate_Projection( TexDef_t * M�c��� +pProjTexDef, TexDef_t *pModelTexDef ); M�d��� tmem.h 100 X extern void tmem_SelectModulate_Model( TexDef_t *pMode M�d��� +lTexDef ); M�e��� tmem.h 101 X extern u32 tmem_GetFreeMem( u32 nTMU ); M�f��� tmem.h 102 X M�g��� tmem.h 103 X #if defined(__cplusplus) M�h��� tmem.h 104 X } M�i��� tmem.h 105 X #endif M�j��� tmem.h 106 X M�k��� tmem.h 107 #endif r�����
material.h
The fragment begins at 0x3F87D60 but more fragments can be found throughout the track.
r����� material.h 25 #include "glide.h" r����� material.h 26 r����� material.h 27 r����� material.h 28 r����� material.h 29 #define MATERIAL_DEFAULT_ALPHABLENDFUNCTION_SRCRGBFACT r����� +OR GR_BLEND_SRC_ALPHA r����� material.h 30 #define MATERIAL_DEFAULT_ALPHABLENDFUNCTION_DESTRGBFAC r����� +TOR GR_BLEND_ONE_MINUS_SRC_ALPHA r����� material.h 31 #define MATERIAL_DEFAULT_ALPHACOMBINE_FUNC r����� + GR_COMBINE_FUNCTION_SCALE_OTHE r����� +R r� ��� material.h 32 #define MATERIAL_DEFAULT_ALPHACOMBINE_FACTOR r� ��� + GR_COMBINE_FACTOR_ONE r�!��� material.h 33 #define MATERIAL_DEFAULT_ALPHACOMBINE_LOCAL r�!��� + GR_COMBINE_LOCAL_ITERATED r�"��� material.h 34 #define MATERIAL_DEFAULT_ALPHACOMBINE_OTHER r�"��� + GR_COMBINE_OTHER_TEXTURE r�#��� material.h 35 #define MATERIAL_DEFAULT_ALPHACOMBINE_INVERT r�#��� + K FALSE r�$��� material.h 36 #define MATERIAL_DEFAULT_ALPHACONTROLSITRGBLIGHTING_EN r�$��� +ABLE FALSE r�%��� material.h 37 #define MATERIAL_DEFAULT_ALPHATESTFUNCTION_TESTFUNC r�%��� + GR_CMP_GEQUAL r�&��� material.h 38 #define MATERIAL_DEFAULT_ALPHATESTREFERENCEVALUE_VALUE r�&��� + ((GrAlpha_t)16) r�'��� material.h 39 #define MATERIAL_DEFAULT_CHROMAKEYMODE_MODE r�'��� + GR_CHROMAKEY_DISABLE r�(��� material.h 40 #define MATERIAL_DEFAULT_CHROMAKEYVALUE_VALUE r�(��� + GFXDEFS_INTRGB_TO_GRCOLOR( 0, 0, 0 ) r�)��� material.h 41 #define MATERIAL_DEFAULT_COLORCOMBINE_FUNC r�)��� + GR_COMBINE_FUNCTION_SCALE_OTHE r�)��� +R_ADD_LOCAL_ALPHA r�*��� material.h 42 #define MATERIAL_DEFAULT_COLORCOMBINE_FACTOR r�*��� + GR_COMBINE_FACTOR_LOCAL r�+��� material.h 43 #define MATERIAL_DEFAULT_COLORCOMBINE_LOCAL r�+��� + GR_COMBINE_LOCAL_ITERATED r�,��� material.h 44 #define MATERIAL_DEFAULT_COLORCOMBINE_OTHER r�,��� + GR_COMBINE_OTHER_TEXTURE r�-��� material.h 45 #define MATERIAL_DEFAULT_COLORCOMBINE_INVERT r�-��� + FALSE r�.��� material.h 46 #define MATERIAL_DEFAULT_CONSTANTCOLORVALUE_COLOR r�.��� + GFXDEFS_INTARGB_TO_GRCOLOR( 255, 255, r�.��� +255, 255 ) r�/��� material.h 47 r�0��� material.h 48 #define MATERIAL_COMBINE_CONSTANT_COLOR { materi r�0��� +al_ColorCombine( GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE r�0��� +_FACTOR_NONE, GR_COMBINE_LOCAL_CONSTANT, GR_COMBINE_OT r�0��� +HER_NONE, FXFALSE ); material_AlphaCombine( GR_COMB r�0��� +INE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE, GR_COMBINE r�0��� +_LOCAL_CONSTANT, GR_COMBINE_OTHER_NONE, FXFALSE ); r�0��� + } r�4��� material.h 52 r�5��� material.h 53 r�6��� material.h 54 r�7��� material.h 55 typedef struct { r�8��� material.h 56 GrAlphaBlendFnc_t AlphaBlendFunction_SrcRgbFac r�8��� +tor; r�9��� material.h 57 GrAlphaBlendFnc_t AlphaBlendFunction_DestRgbFa r�9��� +ctor; r�:��� material.h 58 r�;��� material.h 59 GrCombineFunction_t AlphaCombine_Func; r�<��� material.h 60 GrCombineFactor_t AlphaCombine_Factor; r�=��� material.h 61 GrCombineLocal_t AlphaCombine_Local; r�>��� material.h 62 GrCombineOther_t AlphaCombine_Other; r�?��� material.h 63 E int bAlphaCombine_Invert; r�@��� material.h 64 r�A��� material.h 65 E int bAlphaControlsITRGBLighting_Enable; r�B��� material.h 66 r�C��� material.h 67 GrCmpFnc_t AlphaTestFunction_TestFunc; r�D��� material.h 68 GrAlpha_t nAlphaTestReferenceValue_Value; r�E��� material.h 69 r�F��� material.h 70 GrChromakeyMode_t ChromakeyMode_Mode; r�G��� material.h 71 GrColor_t ChromakeyValue_Value; r�H��� material.h 72 r�I��� material.h 73 GrCombineFunction_t ColorCombine_Func; r�J��� material.h 74 GrCombineFactor_t ColorCombine_Factor; r�K��� material.h 75 GrCombineLocal_t ColorCombine_Local; r�L��� material.h 76 GrCombineOther_t ColorCombine_Other; r�M��� í¾ "����� material.h 77 E int bColorCombine_Invert; r�N��� material.h 78 r�O��� material.h 79 GrColor_t ConstantColorValue_Color; r�P��� material.h 80 r�Q��� material.h 81 E int bTmemTileS; r�R��� material.h 82 E int bTmemTileT; r�S��� material.h 83 TexDef_t *pTmemTexDef; r�T��� material.h 84 } MaterialState_t; r�U��� material.h 85 r�V��� material.h 86 r�W��� material.h 87 r�X��� material.h 88 #if defined(__cplusplus) r�Y��� material.h 89 X extern "C" { r�Z��� material.h 90 #endif r�[��� material.h 91 r�\��� material.h 92 E extern int material_ModuleInit( void ); r�]��� material.h 93 extern void material_Reset( void ); r�^��� material.h 94 extern MaterialState_t *material_GetState( MaterialSta r�^��� +te_t *pState ); r�_��� material.h 95 extern MaterialState_t *material_SetState( MaterialSta r�_��� +te_t *pState ); r�`��� material.h 96 extern MaterialState_t *material_SetStateToDefaults( M r�`��� +aterialState_t *pState ); r�a��� material.h 97 extern void material_Defaults( void ); r�b��� material.h 98 extern void material_PushState( void ); r�c��� material.h 99 extern void material_PopState( u32 nNumPops ); r�d��� material.h 100 extern void material_AlphaBlendFunction( GrAlphaBlendF r�d��� +nc_t SrcRgbFactor, GrAlphaBlendFnc_t DestRgbFactor ); r�e��� material.h 101 extern void material_AlphaCombine( GrCombineFunction_t r�e��� + Func, GrCombineFactor_t Factor, r�f��� material.h 102 E GrC r�f��� +ombineLocal_t Local, GrCombineOther_t Other, int bInve r�f��� +rt ); r�g��� material.h 103 E extern void material_AlphaControlsITRGBLighting( int b r�g��� +Enable ); r�h��� material.h 104 extern void material_AlphaTestFunction( GrCmpFnc_t Tes r�h��� +tFunc ); r�i��� material.h 105 extern void material_AlphaTestReferenceValue( GrAlpha_ r�i��� +t TestValue ); r�j��� material.h 106 extern void material_ChromakeyMode( GrChromakeyMode_t r�j��� +Mode ); r�k��� material.h 107 extern void material_ChromakeyValue( GrColor_t Value ) r�k��� +; r�l��� material.h 108 extern void material_ColorCombine( GrCombineFunction_t r�l��� + Func, GrCombineFactor_t Factor, r�m��� material.h 109 E GrC r�m��� +ombineLocal_t Local, GrCombineOther_t Other, int bInve r�m��� +rt ); r�n��� material.h 110 extern void material_ConstantColorValue( GrColor_t Col r�n��� +or ); r�o��� material.h 111 extern void material_Default_AlphaBlendFunction( void r�o��� +); r�p��� material.h 112 extern void material_Default_AlphaCombine( void ); r�q��� material.h 113 extern void material_Default_AlphaControlsITRGBLightin r�q��� +g( void ); r�r��� material.h 114 extern void material_Default_AlphaTestFunction( void ) r�r��� +; r�s��� material.h 115 extern void material_Default_AlphaTestReferenceValue( r�s��� +void ); r�t��� material.h 116 extern void material_Default_ChromakeyMode( void ); r�u��� material.h 117 extern void material_Default_ChromakeyValue( void ); r�v��� material.h 118 extern void material_Default_ColorCombine( void ); r�w��� material.h 119 extern void material_Default_ConstantColorValue( void r�w��� +); r�x��� material.h 120 r�y��� material.h 121 r�z��� material.h 122 #if defined(__cplusplus) r�{��� material.h 123 X } r�|��� material.h 124 #endif r�}��� material.h 125 r�~��� material.h 126 #endif r�?��� material.h 127 ��'���
glide.h
Found at 0x3F87D90:
������ glide.h 1 /* ������ glide.h 2 */ ������ glide.h 3 ������ glide.h 4 #ifndef __GLIDE_H__ ������ glide.h 5 X #define __GLIDE_H__ ������ glide.h 6 X ������ glide.h 7 X ������ glide.h 8 X #include "3dfx.h" �� ��� glide.h 9 X #include "glidesys.h" �� ��� glide.h 10 X ������ glide.h 11 X #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplu ������ +s)||defined(c_plusplus) ������ glide.h 12 X #undef FX_ENTRY �� ��� glide.h 13 X #define FX_ENTRY extern "C" ������ glide.h 14 X #else ������ glide.h 15 X #undef FX_ENTRY ������ glide.h 16 X #define FX_ENTRY ������ glide.h 17 X #endif ������ glide.h 18 X ������ glide.h 19 X #undef FX_CALL ������ glide.h 20 X #define FX_CALL ������ glide.h 21 X ������ glide.h 22 X /* Video defines */ ������ glide.h 23 X typedef FxI32 GrScreenRefresh_t; ������ glide.h 24 X #define GR_REFRESH_60Hz 0x0 ������ glide.h 25 X ������ glide.h 26 X typedef FxI32 GrScreenResolution_t; ������ glide.h 27 X #define GR_RESOLUTION_320x200 0x0 ������ glide.h 28 X #define GR_RESOLUTION_320x240 0x1 ������ glide.h 29 X #define GR_RESOLUTION_400x256 0x2 ������ glide.h 30 X #define GR_RESOLUTION_512x384 0x3 ������ glide.h 31 X #define GR_RESOLUTION_640x200 0x4 �� ��� glide.h 32 X #define GR_RESOLUTION_640x350 0x5 ��!��� glide.h 33 X #define GR_RESOLUTION_640x400 0x6 ��"��� glide.h 34 X #define GR_RESOLUTION_640x480 0x7 ��#��� glide.h 35 X #define GR_RESOLUTION_800x600 0x8 ��$��� glide.h 36 X #define GR_RESOLUTION_960x720 0x9 ��%��� glide.h 37 X #define GR_RESOLUTION_856x480 0xa ��&��� glide.h 38 X #define GR_RESOLUTION_512x256 0xb ��'��� glide.h 39 X #define GR_RESOLUTION_1024x768 0xC ��(��� glide.h 40 X #define GR_RESOLUTION_1280x1024 0xD ��)��� glide.h 41 X #define GR_RESOLUTION_1600x1200 0xE ��*��� glide.h 42 X #define GR_RESOLUTION_400x300 0xF ��+��� glide.h 43 X #define GR_RESOLUTION_NONE 0xff ��,��� glide.h 44 X ��-��� glide.h 45 X /* ��.��� glide.h 46 X ** --------------------------------------------------- ��.��� +-------------------- ��/��� glide.h 47 X ** TYPE DEFINITIONS ��0��� glide.h 48 X ** --------------------------------------------------- ��0��� +-------------------- ��1��� glide.h 49 X */ ��2��� glide.h 50 X typedef FxU32 GrColor_t; ��3��� glide.h 51 X typedef FxU8 GrAlpha_t; ��4��� glide.h 52 X typedef FxU32 GrMipMapId_t; ��5��� glide.h 53 X typedef FxU8 GrFog_t; ��6��� glide.h 54 X ��7��� glide.h 55 X /* ��8��� glide.h 56 X ** --------------------------------------------------- ��8��� +-------------------- ��9��� glide.h 57 X ** CONSTANTS AND TYPES ��:��� glide.h 58 X ** --------------------------------------------------- ��:��� +-------------------- ��;��� glide.h 59 X */ ��<��� glide.h 60 X #define MAX_NUM_SST 4 ��=��� glide.h 61 X #define MAX_MIPMAPS_PER_SST 1024 ��>��� glide.h 62 X #define GR_FOG_TABLE_SIZE 64 ��?��� glide.h 63 X #define GR_NULL_MIPMAP_HANDLE ((GrMipMapId_t) -1) ��@��� glide.h 64 X #define GR_ZDEPTHVALUE_NEAREST 0xFFFF ��A��� glide.h 65 X #define GR_ZDEPTHVALUE_FARTHEST 0x0000 ��B��� glide.h 66 X #define GR_WDEPTHVALUE_NEAREST 0x0000 ��C��� glide.h 67 X #define GR_WDEPTHVALUE_FARTHEST 0xFFFF ��D��� glide.h 68 X ��E��� glide.h 69 X #define GR_MIPMAPLEVELMASK_EVEN FXBIT(0) ��F��� glide.h 70 X #define GR_MIPMAPLEVELMASK_ODD FXBIT(1) ��G��� glide.h 71 X #define GR_MIPMAPLEVELMASK_BOTH (GR_MIPMAPLEVELMASK_EV ��G��� +EN | GR_MIPMAPLEVELMASK_ODD ) ��H��� glide.h 72 X ��I��� glide.h 73 X #define GR_LODBIAS_BILINEAR 0.5 ��J��� glide.h 74 X #define GR_LODBIAS_TRILINEAR 0.0 ��K��� glide.h 75 X ��L��� glide.h 76 X typedef FxI32 GrChipID_t; ��M��� glide.h 77 X #define GR_TMU0 0x0 ��N��� glide.h 78 X #define GR_TMU1 0x1 ��O��� glide.h 79 X #define GR_TMU2 0x2 ��P��� glide.h 80 X #define GR_FBI 0x3 ��Q��� glide.h 81 X ��R��� glide.h 82 X typedef FxI32 GrCombineFunction_t; ��S��� glide.h 83 X #define GR_COMBINE_FUNCTION_ZERO 0x0 ��T��� glide.h 84 X #define GR_COMBINE_FUNCTION_NONE GR_COMBINE_FUN ��T��� +CTION_ZERO ��U��� glide.h 85 X #define GR_COMBINE_FUNCTION_LOCAL 0x1 ��V��� glide.h 86 X #define GR_COMBINE_FUNCTION_LOCAL_ALPHA 0x2 ��W��� glide.h 87 X #define GR_COMBINE_FUNCTION_SCALE_OTHER 0x3 ��X��� glide.h 88 X #define GR_COMBINE_FUNCTION_BLEND_OTHER GR_COMBINE_FUN ��X��� +CTION_SCALE_OTHER ��Y��� glide.h 89 X #define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL 0x4 ��Z��� glide.h 90 X #define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPH ��Z��� +A 0x5 ��[��� glide.h 91 X #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL 0x ��[��� +6 ��\��� glide.h 92 X #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_AD ��\��� +D_LOCAL 0x7 ��]��� glide.h 93 X #define GR_COMBINE_FUNCTION_BLEND GR_COMBINE_FUNCTION_ ��]��� +SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL ��^��� glide.h 94 X #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_AD ��^��� +D_LOCAL_ALPHA 0x8 ��_��� glide.h 95 X #define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCA ��_��� +L 0x9 ��`��� glide.h 96 X #define GR_COMBINE_FUNCTION_BLEND_LOCAL GR_COMBINE_FUN ��`��� +CTION_SCALE_MINUS_LOCAL_ADD_LOCAL ��a��� glide.h 97 X #define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCA ��a��� +L_ALPHA 0x10 ��b��� glide.h 98 X ��c��� glide.h 99 X typedef FxI32 GrCombineFactor_t; ��d��� glide.h 100 X #define GR_COMBINE_FACTOR_ZERO 0x0 ��e��� glide.h 101 X #define GR_COMBINE_FACTOR_NONE GR_COMBINE_FAC ��e��� +TOR_ZERO ��f��� glide.h 102 X #define GR_COMBINE_FACTOR_LOCAL 0x1 ��g��� glide.h 103 X #define GR_COMBINE_FACTOR_OTHER_ALPHA 0x2 ��h��� glide.h 104 X #define GR_COMBINE_FACTOR_LOCAL_ALPHA 0x3 ��i��� glide.h 105 X #define GR_COMBINE_FACTOR_TEXTURE_ALPHA 0x4 ��j��� glide.h 106 X #define GR_COMBINE_FACTOR_DETAIL_FACTOR GR_COMBINE_FAC ��j��� +TOR_TEXTURE_ALPHA ��k��� glide.h 107 X #define GR_COMBINE_FACTOR_LOD_FRACTION 0x5 ��l��� glide.h 108 X #define GR_COMBINE_FACTOR_ONE 0x8 ��m��� glide.h 109 X #define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL 0x9 ��n��� glide.h 110 X #define GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA 0xa ��o��� glide.h 111 X #define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA 0xb ��p��� glide.h 112 X #define GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA 0xc ��q��� glide.h 113 X #define GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR GR_C ��q��� +OMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA ��r��� glide.h 114 X #define GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION 0xd ��s��� glide.h 115 X ��t��� glide.h 116 X ��u��� glide.h 117 X typedef FxI32 GrCombineLocal_t; ��v��� glide.h 118 X #define GR_COMBINE_LOCAL_ITERATED 0x0 ��w��� glide.h 119 X #define GR_COMBINE_LOCAL_CONSTANT 0x1 ��x��� glide.h 120 X #define GR_COMBINE_LOCAL_NONE GR_COMBINE_LOCAL_CONSTAN ��x��� +T ��y��� glide.h 121 X #define GR_COMBINE_LOCAL_DEPTH 0x2 ��z��� glide.h 122 X ��{��� glide.h 123 X typedef FxI32 GrCombineOther_t; ��|��� glide.h 124 X #define GR_COMBINE_OTHER_ITERATED 0x0 ��}��� glide.h 125 X #define GR_COMBINE_OTHER_TEXTURE 0x1 ��~��� glide.h 126 X #define GR_COMBINE_OTHER_CONSTANT 0x2 ��?��� glide.h 127 X #define GR_COMBINE_OTHER_NONE GR_COMBINE_OTHER_CONSTAN ��?��� +T ��€��� glide.h 128 X ����� glide.h 129 X ��‚��� glide.h 130 X typedef FxI32 GrAlphaSource_t; ��ƒ��� glide.h 131 X #define GR_ALPHASOURCE_CC_ALPHA 0x0 ��„��� glide.h 132 X #define GR_ALPHASOURCE_ITERATED_ALPHA 0x1 ��…��� glide.h 133 X #define GR_ALPHASOURCE_TEXTURE_ALPHA 0x2 ��†��� glide.h 134 X #define GR_ALPHASOURCE_TEXTURE_ALPHA_TIMES_ITERATED_AL ��†��� +PHA 0x3 ��‡��� glide.h 135 X ��ˆ��� glide.h 136 X ��‰��� glide.h 137 X typedef FxI32 GrColorCombineFnc_t; ��Š��� glide.h 138 X #define GR_COLORCOMBINE_ZERO 0x0 ��‹��� glide.h 139 X #define GR_COLORCOMBINE_CCRGB 0x1 ��Œ��� glide.h 140 X #define GR_COLORCOMBINE_ITRGB 0x2 ����� glide.h 141 X #define GR_COLORCOMBINE_ITRGB_DELTA0 0x3 ��Ž��� glide.h 142 X #define GR_COLORCOMBINE_DECAL_TEXTURE 0x4 ����� glide.h 143 X #define GR_COLORCOMBINE_TEXTURE_TIMES_CCRGB 0x5 ����� glide.h 144 X #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB 0x6 ��‘��� glide.h 145 X #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_DELTA0 0x7 ��’��� glide.h 146 X #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_ADD_ALPHA ��’��� +0x8 ��“��� glide.h 147 X #define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA 0x9 ��”��� glide.h 148 X #define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA_ADD_ITRGB ��”��� +0xa ��•��� glide.h 149 X #define GR_COLORCOMBINE_TEXTURE_ADD_ITRGB 0xb ��–��� glide.h 150 X #define GR_COLORCOMBINE_TEXTURE_SUB_ITRGB 0xc ��—��� glide.h 151 X #define GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA ��—��� +0xd ��˜��� glide.h 152 X #define GR_COLORCOMBINE_DIFF_SPEC_A 0xe ��™��� glide.h 153 X #define GR_COLORCOMBINE_DIFF_SPEC_B 0xf ��š��� glide.h 154 X #define GR_COLORCOMBINE_ONE 0x10 ��›��� glide.h 155 X ��œ��� glide.h 156 X typedef FxI32 GrAlphaBlendFnc_t; ����� glide.h 157 X #define GR_BLEND_ZERO 0x0 ��ž��� glide.h 158 X #define GR_BLEND_SRC_ALPHA 0x1 ��Ÿ��� glide.h 159 X #define GR_BLEND_SRC_COLOR 0x2 �� ��� glide.h 160 X #define GR_BLEND_DST_COLOR GR_BLEND_SRC_COLOR ��¡��� glide.h 161 X #define GR_BLEND_DST_ALPHA 0x3 ��¢��� glide.h 162 X #define GR_BLEND_ONE 0x4 ��£��� glide.h 163 X #define GR_BLEND_ONE_MINUS_SRC_ALPHA 0x5 ��¤��� glide.h 164 X #define GR_BLEND_ONE_MINUS_SRC_COLOR 0x6 ��¥��� glide.h 165 X #define GR_BLEND_ONE_MINUS_DST_COLOR GR_BLEND_ONE_MINU ��¥��� +S_SRC_COLOR ��¦��� glide.h 166 X #define GR_BLEND_ONE_MINUS_DST_ALPHA 0x7 ��§��� glide.h 167 X #define GR_BLEND_RESERVED_8 0x8 ��¨��� glide.h 168 X #define GR_BLEND_RESERVED_9 0x9 ��©��� glide.h 169 X #define GR_BLEND_RESERVED_A 0xa ��ª��� glide.h 170 X #define GR_BLEND_RESERVED_B 0xb ��«��� glide.h 171 X #define GR_BLEND_RESERVED_C 0xc ��¬��� glide.h 172 X #define GR_BLEND_RESERVED_D 0xd ����� glide.h 173 X #define GR_BLEND_RESERVED_E 0xe ��®��� glide.h 174 X #define GR_BLEND_ALPHA_SATURATE 0xf ��¯��� glide.h 175 X #define GR_BLEND_PREFOG_COLOR GR_BLEND_ALPHA_SATURATE ��°��� glide.h 176 X ��±��� glide.h 177 X typedef FxI32 GrAspectRatio_t; ��²��� glide.h 178 X #define GR_ASPECT_8x1 0x0 /* 8W x 1H */ ��³��� glide.h 179 X #define GR_ASPECT_4x1 0x1 /* 4W x 1H */ ��´��� glide.h 180 X #define GR_ASPECT_2x1 0x2 /* 2W x 1H */ ��µ��� glide.h 181 X #define GR_ASPECT_1x1 0x3 /* 1W x 1H */ ��¶��� glide.h 182 X #define GR_ASPECT_1x2 0x4 /* 1W x 2H */ ��·��� glide.h 183 X #define GR_ASPECT_1x4 0x5 /* 1W x 4H */ ��¸��� glide.h 184 X #define GR_ASPECT_1x8 0x6 /* 1W x 8H */ ��¹��� glide.h 185 X ��º��� glide.h 186 X typedef FxI32 GrBuffer_t; ��»��� glide.h 187 X #define GR_BUFFER_FRONTBUFFER 0x0 ��¼��� glide.h 188 X #define GR_BUFFER_BACKBUFFER 0x1 ��½��� glide.h 189 X #define GR_BUFFER_AUXBUFFER 0x2 ��¾��� glide.h 190 X #define GR_BUFFER_DEPTHBUFFER 0x3 ��¿��� glide.h 191 X #define GR_BUFFER_ALPHABUFFER 0x4 ��À��� glide.h 192 X #define GR_BUFFER_TRIPLEBUFFER 0x5 ��Á��� glide.h 193 X ��Â��� glide.h 194 X typedef FxI32 GrChromakeyMode_t; ��Ã��� glide.h 195 X #define GR_CHROMAKEY_DISABLE 0x0 ��Ä��� glide.h 196 X #define GR_CHROMAKEY_ENABLE 0x1 ��Å��� glide.h 197 X ��Æ��� glide.h 198 X typedef FxI32 GrCmpFnc_t; ��Ç��� glide.h 199 X #define GR_CMP_NEVER 0x0 ��È��� glide.h 200 X #define GR_CMP_LESS 0x1 ��É��� glide.h 201 X #define GR_CMP_EQUAL 0x2 ��Ê��� glide.h 202 X #define GR_CMP_LEQUAL 0x3 ��Ë��� glide.h 203 X #define GR_CMP_GREATER 0x4 ��Ì��� glide.h 204 X #define GR_CMP_NOTEQUAL 0x5 ��Í��� glide.h 205 X #define GR_CMP_GEQUAL 0x6 ��Î��� glide.h 206 X #define GR_CMP_ALWAYS 0x7 ��Ï��� glide.h 207 X ��Ð��� glide.h 208 X typedef FxI32 GrColorFormat_t; ��Ñ��� glide.h 209 X #define GR_COLORFORMAT_ARGB 0x0 ��Ò��� glide.h 210 X #define GR_COLORFORMAT_ABGR 0x1 ��Ó��� glide.h 211 X ��Ô��� glide.h 212 X #define GR_COLORFORMAT_RGBA 0x2 ��Õ��� glide.h 213 X #define GR_COLORFORMAT_BGRA 0x3 ��Ö��� glide.h 214 X ��×��� glide.h 215 X typedef FxI32 GrCullMode_t; ��Ø��� glide.h 216 X #define GR_CULL_DISABLE 0x0 ��Ù��� glide.h 217 X #define GR_CULL_NEGATIVE 0x1 ��Ú��� glide.h 218 X #define GR_CULL_POSITIVE 0x2 ��Û��� glide.h 219 X ��Ü��� glide.h 220 X typedef FxI32 GrDepthBufferMode_t; ��Ý��� glide.h 221 X #define GR_DEPTHBUFFER_DISABLE 0x0 ��Þ��� glide.h 222 X #define GR_DEPTHBUFFER_ZBUFFER 0x1 ��ß��� glide.h 223 X #define GR_DEPTHBUFFER_WBUFFER 0x2 ��à��� glide.h 224 X #define GR_DEPTHBUFFER_ZBUFFER_COMPARE_TO_BIAS 0x3 ��á��� glide.h 225 X #define GR_DEPTHBUFFER_WBUFFER_COMPARE_TO_BIAS 0x4 ��â��� glide.h 226 X ��ã��� glide.h 227 X typedef FxI32 GrDitherMode_t; ��ä��� glide.h 228 X #define GR_DITHER_DISABLE 0x0 ��å��� glide.h 229 X #define GR_DITHER_2x2 0x1 ��æ��� glide.h 230 X #define GR_DITHER_4x4 0x2 ��ç��� glide.h 231 X ��è��� glide.h 232 X typedef FxI32 GrFogMode_t; ��é��� glide.h 233 X #define GR_FOG_DISABLE 0x0 ��ê��� glide.h 234 X #define GR_FOG_WITH_ITERATED_ALPHA 0x1 ��ë��� glide.h 235 X #define GR_FOG_WITH_TABLE 0x2 ��ì��� glide.h 236 X #define GR_FOG_WITH_ITERATED_Z 0x3 /* Bug ��ì��� + 735 */ ��í��� glide.h 237 X #define GR_FOG_MULT2 0x100 ��î��� glide.h 238 X #define GR_FOG_ADD2 0x200 ��ï��� glide.h 239 X ��ð��� glide.h 240 X typedef FxU32 GrLock_t; ��ñ��� glide.h 241 X #define GR_LFB_READ_ONLY 0x00 ��ò��� glide.h 242 X #define GR_LFB_WRITE_ONLY 0x01 ��ó��� glide.h 243 X #define GR_LFB_IDLE 0x00 ��ô��� glide.h 244 X #define GR_LFB_NOIDLE 0x10 ��õ��� glide.h 245 X ��ö��� glide.h 246 X typedef FxI32 GrLfbBypassMode_t; ��÷��� glide.h 247 X #define GR_LFBBYPASS_DISABLE 0x0 ��ø��� glide.h 248 X #define GR_LFBBYPASS_ENABLE 0x1 ��ù��� glide.h 249 X ��ú��� glide.h 250 X typedef FxI32 GrLfbWriteMode_t; ��û��� glide.h 251 X #define GR_LFBWRITEMODE_565 0x0 /* RGB:RGB */ ��ü��� glide.h 252 X #define GR_LFBWRITEMODE_555 0x1 /* RGB:RGB */ ��ý��� glide.h 253 X #define GR_LFBWRITEMODE_1555 0x2 /* ARGB:ARGB */ ��þ��� glide.h 254 X #define GR_LFBWRITEMODE_RESERVED1 0x3 ��ÿ��� glide.h 255 X #define GR_LFBWRITEMODE_888 0x4 /* RGB */ ������ glide.h 256 X #define GR_LFBWRITEMODE_8888 0x5 /* ARGB */ ������ glide.h 257 X #define GR_LFBWRITEMODE_RESERVED2 0x6 ������ glide.h 258 X #define GR_LFBWRITEMODE_RESERVED3 0x7 ������ glide.h 259 X #define GR_LFBWRITEMODE_RESERVED4 0x8 ������ glide.h 260 X #define GR_LFBWRITEMODE_RESERVED5 0x9 ������ glide.h 261 X #define GR_LFBWRITEMODE_RESERVED6 0xa ������ glide.h 262 X #define GR_LFBWRITEMODE_RESERVED7 0xb ������ glide.h 263 X #define GR_LFBWRITEMODE_565_DEPTH 0xc /* RGB:DEPTH */ ������ glide.h 264 X #define GR_LFBWRITEMODE_555_DEPTH 0xd /* RGB:DEPTH */ �� ��� glide.h 265 X #define GR_LFBWRITEMODE_1555_DEPTH 0xe /* ARGB:DEPTH * �� ��� +/ �� ��� glide.h 266 X #define GR_LFBWRITEMODE_ZA16 0xf /* DEPTH:DEPTH �� ��� +*/ ������ glide.h 267 X #define GR_LFBWRITEMODE_ANY 0xFF ������ glide.h 268 X �� ��� glide.h 269 X ������ glide.h 270 X typedef FxI32 GrOriginLocation_t; ������ glide.h 271 X #define GR_ORIGIN_UPPER_LEFT 0x0 ������ glide.h 272 X #define GR_ORIGIN_LOWER_LEFT 0x1 ������ glide.h 273 X #define GR_ORIGIN_ANY 0xFF ������ glide.h 274 X ������ glide.h 275 X typedef struct { ������ glide.h 276 X int size; ������ glide.h 277 X void *lfbPtr; ������ glide.h 278 X FxU32 strideInBytes; ������ glide.h 279 X GrLfbWriteMode_t writeMode; ������ glide.h 280 X GrOriginLocation_t origin; ������ glide.h 281 X } GrLfbInfo_t; ������ glide.h 282 X ������ glide.h 283 X typedef FxI32 GrLOD_t; ������ glide.h 284 X #define GR_LOD_256 0x0 ������ glide.h 285 X #define GR_LOD_128 0x1 ������ glide.h 286 X #define GR_LOD_64 0x2 ������ glide.h 287 X #define GR_LOD_32 0x3 �� ��� glide.h 288 X #define GR_LOD_16 0x4 ��!��� glide.h 289 X #define GR_LOD_8 0x5 ��"��� glide.h 290 X #define GR_LOD_4 0x6 ��#��� glide.h 291 X #define GR_LOD_2 0x7 ��$��� glide.h 292 X #define GR_LOD_1 0x8 ��%��� glide.h 293 X ��&��� glide.h 294 X typedef FxI32 GrMipMapMode_t; ��'��� glide.h 295 X #define GR_MIPMAP_DISABLE 0x0 /* no mip ��'��� +mapping */ ��(��� glide.h 296 X #define GR_MIPMAP_NEAREST 0x1 /* use nea ��(��� +rest mipmap */ ��)��� glide.h 297 X #define GR_MIPMAP_NEAREST_DITHER 0x2 /* GR_MIPM ��)��� +AP_NEAREST + LOD dith */ ��*��� glide.h 298 X ��+��� glide.h 299 X ��,��� glide.h 300 X typedef FxI32 GrSmoothingMode_t; ��-��� glide.h 301 X #define GR_SMOOTHING_DISABLE 0x0 ��.��� glide.h 302 X #define GR_SMOOTHING_ENABLE 0x1 ��/��� glide.h 303 X ��0��� glide.h 304 X typedef FxI32 GrTextureClampMode_t; ��1��� glide.h 305 X #define GR_TEXTURECLAMP_WRAP 0x0 ��2��� glide.h 306 X #define GR_TEXTURECLAMP_CLAMP 0x1 ��3��� glide.h 307 X ��4��� glide.h 308 X typedef FxI32 GrTextureCombineFnc_t; ��5��� glide.h 309 X #define GR_TEXTURECOMBINE_ZERO 0x0 /* texout ��5��� += 0 */ ��6��� glide.h 310 X #define GR_TEXTURECOMBINE_DECAL 0x1 /* texout ��6��� += texthis */ ��7��� glide.h 311 X #define GR_TEXTURECOMBINE_OTHER 0x2 /* this TM ��7��� +U in passthru mode */ ��8��� glide.h 312 X #define GR_TEXTURECOMBINE_ADD 0x3 /* tout = ��8��� +tthis + t(this+1) */ ��9��� glide.h 313 X #define GR_TEXTURECOMBINE_MULTIPLY 0x4 /* texout ��9��� += tthis * t(this+1) */ ��:��� glide.h 314 X #define GR_TEXTURECOMBINE_SUBTRACT 0x5 /* Sutract ��:��� + from upstream TMU */ ��;��� glide.h 315 X #define GR_TEXTURECOMBINE_DETAIL 0x6 /* detail- ��;��� +-detail on tthis */ ��<��� glide.h 316 X #define GR_TEXTURECOMBINE_DETAIL_OTHER 0x7 /* detail- ��<��� +-detail on tthis+1 */ ��=��� glide.h 317 X #define GR_TEXTURECOMBINE_TRILINEAR_ODD 0x8 /* triline ��=��� +ar--odd levels tthis*/ ��>��� glide.h 318 X #define GR_TEXTURECOMBINE_TRILINEAR_EVEN 0x9 /*triline ��>��� +ar--even levels tthis*/ ��?��� glide.h 319 X #define GR_TEXTURECOMBINE_ONE 0xa /* texout ��?��� += 0xFFFFFFFF */ ��@��� glide.h 320 X ��A��� glide.h 321 X typedef FxI32 GrTextureFilterMode_t; ��B��� glide.h 322 X #define GR_TEXTUREFILTER_POINT_SAMPLED 0x0 ��C��� glide.h 323 X #define GR_TEXTUREFILTER_BILINEAR 0x1 ��D��� glide.h 324 X ��E��� glide.h 325 X typedef FxI32 GrTextureFormat_t; ��F��� glide.h 326 X #define GR_TEXFMT_8BIT 0x0 ��G��� glide.h 327 X #define GR_TEXFMT_RGB_332 GR_TEXFMT_8BIT ��H��� glide.h 328 X #define GR_TEXFMT_YIQ_422 0x1 ��I��� glide.h 329 X #define GR_TEXFMT_ALPHA_8 0x2 /* (0..0xF ��I��� +F) alpha */ ��J��� glide.h 330 X #define GR_TEXFMT_INTENSITY_8 0x3 /* (0..0xF ��J��� +F) intensity */ ��K��� glide.h 331 X #define GR_TEXFMT_ALPHA_INTENSITY_44 0x4 ��L��� glide.h 332 X #define GR_TEXFMT_P_8 0x5 /* 8-bit p ��L��� +alette */ ��M��� glide.h 333 X #define GR_TEXFMT_RSVD0 0x6 ��N��� glide.h 334 X #define GR_TEXFMT_RSVD1 0x7 ��O��� glide.h 335 X #define GR_TEXFMT_16BIT 0x8 ��P��� glide.h 336 X #define GR_TEXFMT_ARGB_8332 GR_TEXFMT_16BIT ��Q��� glide.h 337 X #define GR_TEXFMT_AYIQ_8422 0x9 ��R��� glide.h 338 X #define GR_TEXFMT_RGB_565 0xa ��S��� glide.h 339 X #define GR_TEXFMT_ARGB_1555 0xb ��T��� glide.h 340 X #define GR_TEXFMT_ARGB_4444 0xc ��U��� glide.h 341 X #define GR_TEXFMT_ALPHA_INTENSITY_88 0xd ��V��� glide.h 342 X #define GR_TEXFMT_AP_88 0xe /* 8-bit a ��V��� +lpha 8-bit palette */ ��W��� glide.h 343 X #define GR_TEXFMT_RSVD2 0xf ��X��� glide.h 344 X ��Y��� glide.h 345 X typedef FxU32 GrTexTable_t; ��Z��� glide.h 346 X #define GR_TEXTABLE_NCC0 0x0 ��[��� glide.h 347 X #define GR_TEXTABLE_NCC1 0x1 ��\��� glide.h 348 X #define GR_TEXTABLE_PALETTE 0x2 ��]��� glide.h 349 X ��^��� glide.h 350 X typedef FxU32 GrNCCTable_t; ��_��� glide.h 351 X #define GR_NCCTABLE_NCC0 0x0 ��`��� glide.h 352 X #define GR_NCCTABLE_NCC1 0x1 ��a��� glide.h 353 X ��b��� glide.h 354 X typedef FxU32 GrTexBaseRange_t; ��c��� glide.h 355 X #define GR_TEXBASE_256 0x0 ��d��� glide.h 356 X #define GR_TEXBASE_128 0x1 ��e��� glide.h 357 X #define GR_TEXBASE_64 0x2 ��f��� glide.h 358 X #define GR_TEXBASE_32_TO_1 0x3 ��g��� glide.h 359 X ��h��� glide.h 360 X /* ��i��� glide.h 361 X ** --------------------------------------------------- ��i��� +-------------------- ��j��� glide.h 362 X ** STRUCTURES ��k��� glide.h 363 X ** --------------------------------------------------- ��k��� +-------------------- ��l��� glide.h 364 X */ ��m��� glide.h 365 X /* ��n��� glide.h 366 X ** 3DF texture file structs ��o��� glide.h 367 X */ ��p��� glide.h 368 X typedef struct ��q��� glide.h 369 X { ��r��� glide.h 370 X FxU32 width, height; ��s��� glide.h 371 X int small_lod, large_lod; ��t��� glide.h 372 X GrAspectRatio_t aspect_ratio; ��u��� glide.h 373 X GrTextureFormat_t format; ��v��� glide.h 374 X } Gu3dfHeader; ��w��� glide.h 375 X ��x��� glide.h 376 X typedef struct ��y��� glide.h 377 X { ��z��� glide.h 378 X FxU8 yRGB[16]; ��{��� glide.h 379 X FxI16 iRGB[4][3]; ��|��� glide.h 380 X FxI16 qRGB[4][3]; ��}��� glide.h 381 X FxU32 packed_data[12]; ��~��� glide.h 382 X } GuNccTable; ��?��� glide.h 383 X ��€��� glide.h 384 X typedef struct { ����� glide.h 385 X FxU32 data[256]; ��‚��� glide.h 386 X } GuTexPalette; ��ƒ��� glide.h 387 X ��„��� glide.h 388 X typedef union { ��…��� glide.h 389 X GuNccTable nccTable; ��†��� glide.h 390 X GuTexPalette palette; ��‡��� glide.h 391 X } GuTexTable; ��ˆ��� glide.h 392 X ��‰��� glide.h 393 X typedef struct ��Š��� glide.h 394 X { ��‹��� glide.h 395 X Gu3dfHeader header; ��Œ��� glide.h 396 X GuTexTable table; ����� glide.h 397 X void data; ��Ž��� glide.h 398 X FxU32 mem_required; /* memory required for ��Ž��� + mip map in bytes. */ ����� glide.h 399 X } Gu3dfInfo; ����� glide.h 400 X ��‘��� glide.h 401 X typedef struct { ��’��� glide.h 402 X GrLOD_t smallLod; ��“��� glide.h 403 X GrLOD_t largeLod; ��”��� glide.h 404 X GrAspectRatio_t aspectRatio; ��•��� glide.h 405 X GrTextureFormat_t format; ��–��� glide.h 406 X void *data; ��—��� glide.h 407 X #if TARGET == DREAMCAST ��˜��� glide.h 408 X int txno; ��™��� glide.h 409 X #endif /* TARGET==DREAMCAST */ ��š��� glide.h 410 X } GrTexInfo; ��›��� glide.h 411 X ��œ��� glide.h 412 X typedef struct ����� glide.h 413 X { ��ž��� glide.h 414 X int sst; /* SST where t ��ž��� +his texture map was stored */ ��Ÿ��� glide.h 415 X FxBool valid; /* set when th ��Ÿ��� +is table entry is allocated*/ �� ��� glide.h 416 X int width, height; ��¡��� glide.h 417 X GrAspectRatio_t aspect_ratio; /* aspect rati ��¡��� +o of the mip map. */ ��¢��� glide.h 418 X void *data; /* actual text ��¢��� +ure data */ ��£��� glide.h 419 X ��¤��� glide.h 420 X GrTextureFormat_t format; /* for ��¤��� +mat of the texture table */ ��¥��� glide.h 421 X GrMipMapMode_t mipmap_mode; /* mip ��¥��� + map mode for this texture */ ��¦��� glide.h 422 X GrTextureFilterMode_t magfilter_mode; /* fil ��¦��� +tering to be used when magnified */ ��§��� glide.h 423 X GrTextureFilterMode_t minfilter_mode; /* fil ��§��� +tering to be used with minified */ ��¨��� glide.h 424 X GrTextureClampMode_t s_clamp_mode; /* how ��¨��� + this texture should be clamped in s */ ��©��� glide.h 425 X GrTextureClampMode_t t_clamp_mode; /* how ��©��� + this texture should be clamped in t */ ��ª��� glide.h 426 X FxU32 tLOD; /* Register va ��ª��� +lue for tLOD register */ ��«��� glide.h 427 X FxU32 tTextureMode; /* Register va ��«��� +lue for tTextureMode register ��¬��� glide.h 428 X not includi ��¬��� +ng non-texture specific bits */ ����� glide.h 429 X FxU32 lod_bias; /* LOD bias of ����� + the mip map in preshifted 4.2*/ ��®��� glide.h 430 X GrLOD_t lod_min, lod_max; /* largest and ��®��� + smallest levels of detail */ ��¯��� glide.h 431 X int tmu; /* tmu on whic ��¯��� +h this texture resides */ ��°��� glide.h 432 X FxU32 odd_even_mask; /* mask specif ��°��� +ying levels on this tmu */ ��±��� glide.h 433 X FxU32 tmu_base_address; /* base addr ( ��±��� +in TMU mem) of this texture */ ��²��� glide.h 434 X FxBool trilinear; /* should we b ��²��� +lend by lod? */ ��³��� glide.h 435 X ��´��� glide.h 436 X GuNccTable ncc_table; /* NCC compres ��´��� +sion table (optional) */ ��µ��� glide.h 437 X } GrMipMapInfo; ��¶��R glide.h 438 X ��·��� glide.h 439 X typedef int GrSstType; ��¸��� glide.h 440 X #define GR_SSTTYPE_VOODOO 0 ��¹��� glide.h 441 X #define GR_SSTTYPE_SST96 1 ��º��� glide.h 442 X #define GR_SSTTYPE_AT3D 2 ��»��� glide.h 443 X #define GR_SSTTYPE_Voodoo2 3 ��¼��� glide.h 444 X ��½��� glide.h 445 X typedef struct GrTMUConfig_St { ��¾��� glide.h 446 X int tmuRev; /* Rev of Texelfx chip ��¾��� + */ ��¿��� glide.h 447 X int tmuRam; /* 1, 2, or 4 MB */ ��À��� glide.h 448 X } GrTMUConfig_t; ��Á��� glide.h 449 X ��Â��� glide.h 450 X typedef struct GrVoodooConfig_St { ��Ã��� glide.h 451 X int fbRam; /* 1, 2, or 4 ��Ã��� +MB */ ��Ä��� glide.h 452 X int fbiRev; /* Rev of Pixe ��Ä��� +lfx chip */ ��Å��� glide.h 453 X int nTexelfx; /* How many te ��Å��� +xelFX chips are there? */ ��Æ��� glide.h 454 X FxBool sliDetect; /* Is it a sca ��Æ��� +n-line interleaved board? */ ��Ç��� glide.h 455 X GrTMUConfig_t tmuConfig[GLIDE_NUM_TMU]; /* Configu ��Ç��� +ration of the Texelfx chips */ ��È��� glide.h 456 X } GrVoodooConfig_t; ��É��� glide.h 457 X ��Ê��� glide.h 458 X typedef struct GrSst96Config_St { ��Ë��� glide.h 459 X int fbRam; /* How much? */ ��Ì��� glide.h 460 X int nTexelfx; ��Í��� glide.h 461 X GrTMUConfig_t tmuConfig; ��Î��� glide.h 462 X } GrSst96Config_t; ��Ï��� glide.h 463 X ��Ð��� glide.h 464 X typedef GrVoodooConfig_t GrVoodoo2Config_t; ��Ñ��� glide.h 465 X ��Ò��� glide.h 466 X typedef struct GrAT3DConfig_St { ��Ó��� glide.h 467 X int rev; ��Ô��� glide.h 468 X } GrAT3DConfig_t; ��Õ��� glide.h 469 X ��Ö��� glide.h 470 X typedef struct { ��×��� glide.h 471 X int num_sst; /* # of HW units in th ��×��� +e system */ ��Ø��� glide.h 472 X struct { ��Ù��� glide.h 473 X GrSstType type; /* Which hardware is i ��Ù��� +t? */ ��Ú��� glide.h 474 X union SstBoard_u { ��Û��� glide.h 475 X GrVoodooConfig_t VoodooConfig; ��Ü��� glide.h 476 X GrSst96Config_t SST96Config; ��Ý��� glide.h 477 X GrAT3DConfig_t AT3DConfig; ��Þ��� glide.h 478 X GrVoodoo2Config_t Voodoo2Config; ��ß��� glide.h 479 X } sstBoard; ��à��� glide.h 480 X } SSTs[MAX_NUM_SST]; /* configuration for e ��à��� +ach board */ ��á��� glide.h 481 X } GrHwConfiguration; ��â��� glide.h 482 X ��ã��� glide.h 483 X typedef struct GrSstPerfStats_s { ��ä��� glide.h 484 X FxU32 pixelsIn; /* # pixels processed ��ä��� +(minus buffer clears) */ ��å��� glide.h 485 X FxU32 chromaFail; /* # pixels not drawn ��å��� +due to chroma key */ ��æ��� glide.h 486 X FxU32 zFuncFail; /* # pixels not drawn ��æ��� +due to Z comparison */ ��ç��� glide.h 487 X FxU32 aFuncFail; /* # pixels not drawn ��ç��� +due to alpha comparison */ ��è��� glide.h 488 X FxU32 pixelsOut; /* # pixels drawn (inc ��è��� +luding buffer clears) */ ��é��� glide.h 489 X } GrSstPerfStats_t; ��ê��� glide.h 490 X ��ë��� glide.h 491 X ��ì��� glide.h 492 X typedef struct { ��í��� glide.h 493 X float sow; /* s texture ordinate ��í��� +(s over w) */ ��î��� glide.h 494 X float tow; /* t texture ordinate ��î��� +(t over w) */ ��ï��� glide.h 495 X float oow; /* 1/w (used mipmappin ��ï��� +g - really 0xfff/w) */ ��ð��� glide.h 496 X } GrTmuVertex; ��ñ��� glide.h 497 X ��ò��� glide.h 498 X /* ��ó��� glide.h 499 X ** GrVertex ��ô��� glide.h 500 X ** If these are changed the C & assembly language tris ��ô��� +etup routines MUST ��õ��� glide.h 501 X ** be changed, for they will no longer work. ��ö��� glide.h 502 X */ ��÷��� glide.h 503 X typedef struct ��ø��� glide.h 504 X { ��ù��� glide.h 505 X float x, y, ooz; /* X, Y, and Z of sc ��ù��� +rn space -- Z is ignored */ ��ú��� glide.h 506 X float r, g, b, a; /* R, G, B, ([0..25 ��ú��� +5.0]) */ ��û��� glide.h 507 X float z; /* 65535/Z (used for Z-b ��û��� +uffering) */ ��ü��� glide.h 508 X float oow; /* 1/W (used for W-buf ��ü��� +fering, texturing) */ ��ý��� glide.h 509 X GrTmuVertex tmuvtx[GLIDE_NUM_TMU]; ��þ��� glide.h 510 X } GrVertex; ��ÿ��� glide.h 511 X ������ glide.h 512 X /* For indexing GrVertex as a float *. ������ glide.h 513 X CHANGE THESE IF THE VERTEX STRUCTURE CHANGES! ������ glide.h 514 X */ ������ glide.h 515 X #define GR_VERTEX_X_OFFSET 0 ������ glide.h 516 X #define GR_VERTEX_Y_OFFSET 1 ������ glide.h 517 X #define GR_VERTEX_Z_OFFSET 2 ������ glide.h 518 X #define GR_VERTEX_R_OFFSET 3 ������ glide.h 519 X #define GR_VERTEX_G_OFFSET 4 ������ glide.h 520 X #define GR_VERTEX_B_OFFSET 5 �� ��� glide.h 521 X #define GR_VERTEX_OOZ_OFFSET 6 �� ��� glide.h 522 X #define GR_VERTEX_A_OFFSET 7 ������ glide.h 523 X #define GR_VERTEX_OOW_OFFSET 8 ������ glide.h 524 X #define GR_VERTEX_SOW_TMU0_OFFSET 9 �� ��� glide.h 525 X #define GR_VERTEX_TOW_TMU0_OFFSET 10 ������ glide.h 526 X #define GR_VERTEX_OOW_TMU0_OFFSET 11 ������ glide.h 527 X #define GR_VERTEX_SOW_TMU1_OFFSET 12 ������ glide.h 528 X #define GR_VERTEX_TOW_TMU1_OFFSET 13 ������ glide.h 529 X #define GR_VERTEX_OOW_TMU1_OFFSET 14 ������ glide.h 530 X #if (GLIDE_NUM_TMU > 2) ������ glide.h 531 X #define GR_VERTEX_SOW_TMU2_OFFSET 15 ������ glide.h 532 X #define GR_VERTEX_TOW_TMU2_OFFSET 16 ������ glide.h 533 X #define GR_VERTEX_OOW_TMU2_OFFSET 17 ������ glide.h 534 X #endif ������ glide.h 535 X ������ glide.h 536 X typedef FxU32 GrLfbSrcFmt_t; ������ glide.h 537 X #define GR_LFB_SRC_FMT_565 0x00 ������ glide.h 538 X #define GR_LFB_SRC_FMT_555 0x01 ������ glide.h 539 X #define GR_LFB_SRC_FMT_1555 0x02 ������ glide.h 540 X #define GR_LFB_SRC_FMT_888 0x04 ������ glide.h 541 X #define GR_LFB_SRC_FMT_8888 0x05 ������ glide.h 542 X #define GR_LFB_SRC_FMT_565_DEPTH 0x0c ������ glide.h 543 X #define GR_LFB_SRC_FMT_555_DEPTH 0x0d �� ��� glide.h 544 X #define GR_LFB_SRC_FMT_1555_DEPTH 0x0e ��!��� glide.h 545 X #define GR_LFB_SRC_FMT_ZA16 0x0f ��"��� glide.h 546 X #define GR_LFB_SRC_FMT_RLE16 0x80 ��#��� glide.h 547 X ��$�›© glide.h 548 X typedef FxI32 GrPassthruMode_t; ��%��� glide.h 549 X #define GR_PASSTHRU_SHOW_VGA 0x0 ��&��� glide.h 550 X #define GR_PASSTHRU_SHOW_SST1 0x1 ��'��� glide.h 551 X ��(��� glide.h 552 X typedef FxU32 GrHint_t; ��)��� glide.h 553 X #define GR_HINTTYPE_MIN 0 ��*��� glide.h 554 X #define GR_HINT_STWHINT 0 ��+��� glide.h 555 X #define GR_HINT_FIFOCHECKHINT 1 ��,��� glide.h 556 X #define GR_HINT_FPUPRECISION 2 ��-��� glide.h 557 X #define GR_HINT_ALLOW_MIPMAP_DITHER 3 ��.��� glide.h 558 X #define GR_HINTTYPE_MAX 3 ��/��� glide.h 559 X ��0��� glide.h 560 X typedef FxU32 GrSTWHint_t; ��1��� glide.h 561 X #define GR_STWHINT_W_DIFF_FBI FXBIT(0) ��2��� glide.h 562 X #define GR_STWHINT_W_DIFF_TMU0 FXBIT(1) ��3��� glide.h 563 X #define GR_STWHINT_ST_DIFF_TMU0 FXBIT(2) ��4��� glide.h 564 X #define GR_STWHINT_W_DIFF_TMU1 FXBIT(3) ��5��� glide.h 565 X #define GR_STWHINT_ST_DIFF_TMU1 FXBIT(4) ��6��� glide.h 566 X #define GR_STWHINT_W_DIFF_TMU2 FXBIT(5) ��7��� glide.h 567 X #define GR_STWHINT_ST_DIFF_TMU2 FXBIT(6) ��8��� glide.h 568 X ��9��� glide.h 569 X typedef FxU32 GrControl_t; ��:��� glide.h 570 X #define GR_CONTROL_ACTIVATE 0x1 ��;��� glide.h 571 X #define GR_CONTROL_DEACTIVATE 0x2 ��<��� glide.h 572 X #define GR_CONTROL_RESIZE 0x3 ��=��� glide.h 573 X #define GR_CONTROL_MOVE 0x4 ��>��� glide.h 574 X ��?��� glide.h 575 X #define GR_GENERATE_FIFOCHECK_HINT_MASK(swHWM, swLWM) ��?��� + (((swHWM & 0xffff) << 16) | (swLWM & 0xffff)) ��A��� glide.h 577 X ��B��� glide.h 578 X ��C��� glide.h 579 X ��D��� glide.h 580 X ��E��� glide.h 581 X ��F��� glide.h 582 X /* Function blanks */ ��G��� glide.h 583 X extern void grTexDownloadTable( GrChipID_t tmu, GrTexT ��G��� +able_t type, void *data ); ��H��� glide.h 584 X extern FxU32 grTexTextureMemRequired( FxU32 evenOdd, G ��H��� +rTexInfo *info ); ��I��� glide.h 585 X extern void grTexSource( GrChipID_t tmu, FxU32 startAd ��I��� +dress, FxU32 evenOdd, GrTexInfo *info ); ��J��� glide.h 586 X extern void grHints( GrHint_t hintType, FxU32 hintMask ��J��� + ); ��K��� glide.h 587 X extern void grDitherMode( GrDitherMode_t mode ); ��L��� glide.h 588 X extern void grFogColorValue( GrColor_t fogcolor ); ��M��� glide.h 589 X extern void grFogMode( GrFogMode_t mode ); ��N��� glide.h 590 X extern void grFogTable( const GrFog_t ft[GR_FOG_TABLE_ ��N��� +SIZE] ); ��O��� glide.h 591 X extern FxBool grLfbLock( GrLock_t type, GrBuffer_t buf ��O��� +fer, GrLfbWriteMode_t writeMode, GrOriginLocation_t or ��O��� +igin, FxBool pixelPipeline, GrLfbInfo_t *info ); ��P��� glide.h 592 X extern FxBool grLfbUnlock( GrLock_t type, GrBuffer_t b ��P��� +uffer ); ��Q��� glide.h 593 X extern void grBufferClear( GrColor_t color, GrAlpha_t ��Q��� +alpha, FxU16 depth ); ��R��� glide.h 594 X extern void grBufferSwap( int swap_interval ); ��S��� glide.h 595 X extern void grColorMask( FxBool rgb, FxBool a ); ��T��� glide.h 596 X extern void grCullMode( GrCullMode_t mode ); ��U��� glide.h 597 X extern void grConstantColorValue( GrColor_t value ); ��V��� glide.h 598 X extern void grDepthBiasLevel( FxI16 level ); ��W��� glide.h 599 X extern void grDepthBufferFunction( GrCmpFnc_t function ��W��� + ); ��X��� glide.h 600 X extern void grDepthMask( FxBool mask ); ��Y��� glide.h 601 X extern void grDepthBufferMode( GrDepthBufferMode_t mod ��Y��� +e ); ��Z��� glide.h 602 X extern void grSstSelect( int which_sst ); ��[��� glide.h 603 X ��\��� glide.h 604 X extern void grTexCombine( GrChipID_t tmu, GrCombineFun ��\��� +ction_t rgb_function, GrCombineFactor_t rgb_factor, Gr ��\��� +CombineFunction_t alpha_function, GrCombineFactor_t al ��\��� +pha_factor, FxBool rgb_invert, FxBool alpha_invert ); ��]��� glide.h 605 X extern void grTexMipMapMode( GrChipID_t tmu, GrMipMapM ��]��� +ode_t mode, FxBool lodBlend ); ��^��� glide.h 606 X extern void grTexDetailControl( GrChipID_t tmu, int lo ��^��� +d_bias, FxU8 detail_scale, float detail_max ); ��_��� glide.h 607 X extern void grTexFilterMode( GrChipID_t tmu, GrTexture ��_��� +FilterMode_t minfilter_mode, GrTextureFilterMode_t mag ��_��� +filter_mode ); ��`��� glide.h 608 X extern void grTexLodBiasValue(GrChipID_t tmu, float bi ��`��� +as ); ��a��� glide.h 609 X /*MAHextern void grTexDownloadMipMap( GrChipID_t tmu, ��a��� +FxU32 startAddress, FxU32 evenOdd, GrTexInfo *info ); ��a��� +*/ ��b��� glide.h 610 X /*MAHextern void grTexDownloadMipMap( GrChipID_t tmu, ��b��� +FxU32 startAddress, FxU32 evenOdd, GrTexInfo *info, u3 ��b��� +2 *pPalette ); */ ��c��� glide.h 611 X extern void grTexDownloadMipMap( GrChipID_t tmu, FxU32 ��c��� + startAddress, FxU32 evenOdd, GrTexInfo *info, u32 *pP ��c��� +alette, int width, int height ,char * tname); ��d��� glide.h 612 X extern void grTexMultibase( GrChipID_t tmu, FxBool ena ��d��� +ble ); ��e��� glide.h 613 X extern void grTexNCCTable( GrChipID_t tmu, GrNCCTable_ ��e��� +t table ); ��f��� glide.h 614 X extern void grTexClampMode( GrChipID_t tmu, GrTextureC ��f��� +lampMode_t s_clampmode, GrTextureClampMode_t t_clampmo ��f��� +de ); ��g��� glide.h 615 X ��h��� glide.h 616 X extern void grDrawPlanarPolygonVertexList( int nverts, ��h��� + const GrVertex vlist[], int argb ); ��i��� glide.h 617 X extern void grDrawTriangle( const GrVertex *a, const G ��i��� +rVertex *b, const GrVertex *c ); ��j��� glide.h 618 X extern void grDrawLine( const GrVertex *v1, const GrVe ��j��� +rtex *v2 ); ��k��� glide.h 619 X extern void grAADrawLine(const GrVertex *v1, const GrV ��k��� +ertex *v2); ��l��� glide.h 620 X extern void grGammaCorrectionValue( float value ); ��m��� glide.h 621 X ��n��� glide.h 622 X extern void grAlphaBlendFunction( GrAlphaBlendFnc_t rg ��n��� +b_sf, GrAlphaBlendFnc_t rgb_df, GrAlphaBlendFnc_t al ��n��� +pha_sf, GrAlphaBlendFnc_t alpha_df ); ��o��� glide.h 623 X extern void grAlphaCombine( GrCombineFunction_t functi ��o��� +on, GrCombineFactor_t factor, GrCombineLocal_t local, ��o��� +GrCombineOther_t other, FxBool invert ); ��p��� glide.h 624 X extern void grAlphaControlsITRGBLighting( FxBool enabl ��p��� +e ); ��q��� glide.h 625 X extern void grAlphaTestFunction( GrCmpFnc_t function ) ��q��� +; ��r��� glide.h 626 X extern void grAlphaTestReferenceValue( GrAlpha_t value ��r��� + ); ��s��� glide.h 627 X extern void grChromakeyMode( GrChromakeyMode_t mode ); ��t��� glide.h 628 X extern void grChromakeyValue( GrColor_t value ); ��u��� glide.h 629 X extern void grClipWindow( FxU32 minx, FxU32 miny, FxU3 ��u��� +2 maxx, FxU32 maxy ); ��v��� glide.h 630 X extern void grColorCombine( GrCombineFunction_t functi ��v��� +on, GrCombineFactor_t factor, GrCombineLocal_t local, ��v��� +GrCombineOther_t other, FxBool invert ); ��w��� glide.h 631 X ��x��� glide.h 632 X extern void grSstVidMode( FxU32 whichSst, void *vidTim ��x��� +ings ); ��y��� glide.h 633 X ��z��� glide.h 634 X typedef void (*GrErrorCallbackFnc_t)( const char *stri ��z��� +ng, FxBool fatal ); ��{��� glide.h 635 X extern void grErrorSetCallback( GrErrorCallbackFnc_t f ��{��� +nc ); ��|��� glide.h 636 X ��}��� glide.h 637 X /* ��~��� glide.h 638 X ** glide management functions ��?��� glide.h 639 X */ ��€��� glide.h 640 X extern void grGlideInit( void ); ����� glide.h 641 X extern FxBool grSstQueryHardware( GrHwConfiguration *h ����� +wconfig ); ��‚��� glide.h 642 X extern FxBool grSstWinOpen( FxU32 hWnd, GrScreenResolu ��‚��� +tion_t screen_resolution, GrScreenRefresh_t refresh_ra ��‚��� +te, GrColorFormat_t color_format ��ƒ��� glide.h 643 X ,GrOriginLocation_t origin_location, int nColBuffers, ��ƒ��� + int nAuxBuffers); ��„��� glide.h 644 X extern void grSstWinClose( void ); ��…��� glide.h 645 X extern FxU32 grTexMinAddress( GrChipID_t tmu ); ��†��� glide.h 646 X extern FxU32 grTexMaxAddress( GrChipID_t tmu ); ��‡��� glide.h 647 X extern void grGlideShutdown( void ); ��ˆ��� glide.h 648 X ��‰��� glide.h 649 X extern int grBufferNumPending( void ); ��Š��� glide.h 650 X ��‹��� glide.h 651 X ��Œ��� glide.h 652 X extern int FrameCounter; ����� glide.h 653 X ��Ž��� glide.h 654 X extern void InitgrDrawTriangle3Cache(); ����� glide.h 655 X extern void EmptygrDrawTriangle3Cache(); ����� glide.h 656 X extern void InitgrWaterCache(unsigned char *Texture); ��‘��� glide.h 657 X extern void AddWaterTriCache(int NumTris); ��’��� glide.h 658 X extern void EmptyWaterTriCache(); ��“��� glide.h 659 X ��”��� glide.h 660 X extern u32 grConstantColor; ��•��� glide.h 661 X extern u32 grCurrentTexture; ��–��� glide.h 662 X ��—��� glide.h 663 #endif /* __GLIDE_H__ */
worldob.h
Found at 0x3F98EA0:
Q����� worldob.h 1 /*//////////////////////////////////////////////////// Q����� +////////////////////////////////*/ Q����� worldob.h 2 /* worldob.c - Functions and definitions to handle wor Q����� +ld objects.*/ Q����� worldob.h 3 /**/ Q����� worldob.h 4 /* Author: Steve Ranck */ Q����� worldob.h 5 /*//////////////////////////////////////////////////// Q����� +////////////////////////////////*/ Q����� worldob.h 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN Q����� +TERTAINMENT.*/ Q����� worldob.h 7 /* Copyright (c) 1997*/ Q����� worldob.h 8 /**/ Q� ��� worldob.h 9 /* The contents of this file may not be disclosed to t Q� ��� +hird*/ Q� ��� worldob.h 10 /* parties, copied or duplicated in any form, in whole Q� ��� + or in part,*/ Q����� worldob.h 11 /* without the prior written permission of Midway Home Q����� + Entertainment.*/ Q����� worldob.h 12 /*//////////////////////////////////////////////////// Q����� +////////////////////////////////*/ Q� ��� worldob.h 13 /* Modification History:*/ Q����� worldob.h 14 /**/ Q����� worldob.h 15 /* Date Who Description*/ Q����� worldob.h 16 /* -------- ---------- ------------------------------ Q����� +--------------------------------*/ Q����� worldob.h 17 /* 06/17/97 Ranck Created.*/ Q����� worldob.h 18 /*//////////////////////////////////////////////////// Q����� +////////////////////////////////*/ Q����� worldob.h 19 #ifndef _WORLDOB_H_ Q����� worldob.h 20 X #define _WORLDOB_H_ 1 Q����� worldob.h 21 X Q����� worldob.h 22 X #include "gendefs.h" Q����� worldob.h 23 X #include "vec3.h" Q����� worldob.h 24 X #include "xfm.h" Q����� worldob.h 25 X #include "linklist.h" Q����� worldob.h 26 X #include "mesh3d.h" Q����� worldob.h 27 X #include "world.h" Q����� worldob.h 28 X #include "orient.h" Q����� worldob.h 29 X #include "motion.h" Q����� worldob.h 30 X Q����� worldob.h 31 X typedef enum { Q� ��� worldob.h 32 X /* Misc Flags:*/ Q�!��� worldob.h 33 X WORLDOB_FLAG_DISABLE = 0x00 Q�!��� +000001, /* Object is entirely disabled (no lights, no Q�!��� +collisions, no drawing, etc.)*/ Q�"��� worldob.h 34 X WORLDOB_FLAG_TRIPWIRE = 0x00 Q�"��� +000004, /* Call tripwire system for this WorldOb*/ Q�#��� worldob.h 35 X WORLDOB_FLAG_FLOAT Q�#��� + = 0x00000008, /* Object is floating on water*/ Q�$��� worldob.h 36 X WORLDOB_FLAG_STATIONARY = 0x00 Q�$��� +000010, /* Object is stationary in world space*/ Q�%��� worldob.h 37 X WORLDOB_FLAG_SUBMERGEDKILL = 0x00 Q�%��� +000200, /* Auto-kill this worldob as soon as it is fM Q�%��� +odelBoundRadius under water*/ Q�&��� worldob.h 38 X WORLDOB_FLAG_OFFWORLDPERSIST = 0x00000400, Q�&��� + /* Don't auto-kill this object if it falls outside t Q�&��� + he world*/ Q�'��� worldob.h 39 X WORLDOB_FLAG_SPECIAL_PHYS = 0x00 Q�'��� +000800, /* If set, motion_Simulate will not be called* Q�'��� +/ Q�(��� worldob.h 40 X WORLDOB_FLAG_AI_AVOID = 0x00 Q�(��� +001000, /* Tells AI to avoid this object*/ Q�)��� worldob.h 41 X WORLDOB_FLAG_FIND_PATH = 0x00 Q�)��� +002000, /* Tells boat to be moved by a path instance*/ Q�*��� worldob.h 42 X WORLDOB_FLAG_DELETED = 0x00 Q�*��� +008000, /* Just a status bit that's set whenever world Q�*��� +ob_Delete() is called*/ Q�+��� worldob.h 43 X Q�,��� worldob.h 44 X /* Drawing Flags: */ Q�-��� worldob.h 45 X WORLDOB_FLAG_DONT_DRAW = 0x00 Q�-��� +000002, /* Don't draw this object (collisions and ligh Q�-��� +ts are still enabled)*/ Q�.��� worldob.h 46 X WORLDOB_FLAG_POSTER_Y = 0x00 Q�.��� +000020, /* Poster around Y axis*/ Q�/��� worldob.h 47 X WORLDOB_FLAG_DRAW_REFLECTED = 0x00 Q�/��� +000040, /* Draw this object reflected (expensive!)*/ Q�0��� worldob.h 48 X WORLDOB_FLAG_DRAW_AFTER_WATER = 0x00004000, Q�0��� + /* Tells World system to draw this object after wate Q�0��� + r instead of before*/ Q�1��� worldob.h 49 X Q�2��� worldob.h 50 X /* Lighting Flags: Q�2��� + */ Q�3��� worldob.h 51 X WORLDOB_FLAG_SAMPLE_LIGHT = 0x00 Q�3��� +000100, /* At draw time, sample the sector ambient and Q�3��� + celestial light at the*/ Q�4��� worldob.h 52 X Q�4��� + /* o Q�4��� +rigin of the object and store in the SensedLight field Q�4��� +.*/ Q�5��� worldob.h 53 X WORLDOB_FLAG_LIT_BY_DIR_ONLY = 0x00000080, Q�5��� + /* This object is to be lit by directional light onl Q�5��� + y*/ Q�6��� worldob.h 54 X Q�7��� worldob.h 55 X /* Unused Flags:*/ Q�8��� worldob.h 56 X WORLDOB_FLAG_17 Q�8��� + = 0x00010000, /* Unused*/ Q�9��� worldob.h 57 X WORLDOB_FLAG_18 Q�9��� + = 0x00020000, /* Unused*/ Q�:��� worldob.h 58 X WORLDOB_FLAG_19 Q�:��� + = 0x00040000, /* Unused*/ Q�;��� worldob.h 59 X WORLDOB_FLAG_20 Q�;��� + = 0x00080000, /* Unused*/ Q�<��� worldob.h 60 X WORLDOB_FLAG_21 Q�<��� + = 0x00100000, /* Unused*/ Q�=��� worldob.h 61 X WORLDOB_FLAG_22 Q�=��� + = 0x00200000, /* Unused*/ Q�>��� worldob.h 62 X WORLDOB_FLAG_23 Q�>��� + = 0x00400000, /* Unused*/ Q�?��� worldob.h 63 X WORLDOB_FLAG_24 Q�?��� + = 0x00800000, /* Unused*/ Q�@��� worldob.h 64 X WORLDOB_FLAG_25 Q�@��� + = 0x01000000, /* Unused*/ Q�A��� worldob.h 65 X WORLDOB_FLAG_26 Q�A��� + = 0x02000000, /* Unused*/ Q�B��� worldob.h 66 X WORLDOB_FLAG_27 Q�B��� + = 0x04000000, /* Unused*/ Q�C��� worldob.h 67 X WORLDOB_FLAG_28 Q�C��� + = 0x08000000, /* Unused*/ Q�D��� worldob.h 68 X WORLDOB_FLAG_29 Q�D��� + = 0x10000000, /* Unused*/ Q�E��� worldob.h 69 X WORLDOB_FLAG_30 Q�E��� + = 0x20000000, /* Unused*/ Q�F��� worldob.h 70 X WORLDOB_FLAG_31 Q�F��� + = 0x40000000, /* Unused*/ Q�G��� worldob.h 71 X WORLDOB_FLAG_32 Q�G��� + = 0x80000000, /* Unused*/ Q�H��� worldob.h 72 X Q�I��� worldob.h 73 X WORLDOB_FLAG_COLLIDE_INVIEW = WORL Q�I��� +DOB_FLAG_17, /*PAB This object is not in view, so i Q�I��� +gnore collisions!!! */ Q�J��� worldob.h 74 X Q�K��� worldob.h 75 X WORLDOB_FLAG_NONE Q�K��� + = 0 Q�L��� worldob.h 76 X } WorldObFlags; Q�M��� worldob.h 77 X Q�N��� worldob.h 78 X struct _WorldOb_s; Q�O��� worldob.h 79 X typedef struct _WorldOb_s WorldOb_t; Q�P��� worldob.h 80 X Q�Q��� worldob.h 81 X #include "floatation.h" Q�R��� worldob.h 82 X #include "worldcoll.h" Q�S��� worldob.h 83 X Q�T��� worldob.h 84 X typedef void WorldobMoveFcn_t( WorldOb_t *pWorldOb ); Q�U��� worldob.h 85 X typedef void WorldobDrawFcn_t( WorldOb_t *pWorldOb ); Q�V��� worldob.h 86 X Q�W��� worldob.h 87 X struct _WorldOb_s { Q�X��� worldob.h 88 X u32 nFlags; Q�X��� + /* See WORLDOB_FLAG_* for info*/ Q�Y��� worldob.h 89 X Q�Z��� worldob.h 90 X u32 nGameId; Q�Z��� + /* Way to identify different type worldobs( 0=none ) Q�Z��� + */ Q�[��� worldob.h 91 X u16 nUserId; Q�[��� + /* User ID field( 0=none )*/ Q�\��� worldob.h 92 X u16 nUserArg; Q�\��� + /* User argument( generally depends on nUserId )*/ Q�]��� worldob.h 93 X Q�^��� worldob.h 94 X Mesh3d_t *pMesh; Q�^��� + /* Pointer to the mesh (NULL=none)*/ Q�_��� worldob.h 95 X void *pUserObject; Q�_��� + /* Pointer to user-defined object*/ Q�`��� worldob.h 96 X Motion_t *pMotion; Q�`��� + /* Pointer to Motion_t data, could be NULL if it is Q�`��� + not used*/ Q�a��� worldob.h 97 X WorldColl_t *pWorldColl; /* Poi Q�a��� +nter to WorldColl_t data (NULL if object can't collide Q�a��� +)*/ Q�b��� worldob.h 98 X Floatation_t *pFloatation; /* Poi Q�b��� +nter to Floatation_t data, could be NULL if it is not Q�b��� +used*/ Q�c��� worldob.h 99 X void *pSoundData; Q�c��� + /* Pointer to app specific sound data, NULL if there Q�c��� + is not a sound attached to this worldob*/ Q�d��� worldob.h 100 X Q�e��� worldob.h 101 X LinkRoot_t LightList; /* Lis Q�e��� +t of WorldLt_t's attached to this world object*/ Q�f��� worldob.h 102 X Q�f��� + /* These fields used when WORLDOB_FLAG Q�f��� +_SAMPLE_LIGHT flag set:*/ Q�g��� worldob.h 103 X ARGBf_t SensedLight; /* Las Q�g��� +t sampled sector light for this world object*/ Q�h��� worldob.h 104 X Vec3_t SensorPos; Q�h��� + /* Model space sensor location*/ Q�i��� worldob.h 105 X Vec3_t SensorDir; Q�i��� + /* Points in the direction to sense (model space)*/ Q�j��� worldob.h 106 X Q�k��� worldob.h 107 X Orient_t Orient; Q�k��� + /* Position and orientation*/ Q�l��� worldob.h 108 X float fScale; Q�l��� + /* Scale of object (none = 1.0f)*/ Q�m��� worldob.h 109 X Q�n��� worldob.h 110 X Vec3_t ModelBoundCenter; /* Mod Q�n��� +el bounding sphere center*/ Q�o��� worldob.h 111 X float fModelBoundRadius; /* Mod Q�o��� +el bounding sphere radius (not including fScale)*/ Q�p��� worldob.h 112 X Tws_t Tws; Q�p��� + /* Tracking World Sphere object*/ Q�q��� worldob.h 113 X Q�r��� worldob.h 114 X u16 nGameFrameDrawn; /* The Q�r��� + game frame this object was last drawn*/ Q�s��� worldob.h 115 X u16 nGameFrameWork; Q�s��� + /* The game frame this object was last drawn*/ Q�t��� worldob.h 116 X Link_t Link; Q�t��� + /* Link to next and previous world objects*/ Q�u��� worldob.h 117 X Q�v��� worldob.h 118 X WorldobMoveFcn_t *pWorkFcn; /* Poi Q�v��� +nter to function responsible for doing work on this ob Q�v��� +ject*/ Q�w��� worldob.h 119 X Q�w��� + /* (NULL = no move function)*/ Q�x��� worldob.h 120 X WorldobDrawFcn_t *pDrawFcn; /* Poi Q�x��� +nter to function responsible for drawing this object*/ Q�y��� worldob.h 121 X Q�y��� + /* (NULL = pMesh automatically drawn Q�y��� +)*/ Q�z��� worldob.h 122 X }; Q�{��� worldob.h 123 X Q�|��� worldob.h 124 X #include "worldlt.h" Q�}��� worldob.h 125 X Q�~��� worldob.h 126 X Q�?��� worldob.h 127 X #if defined(__cplusplus) Q�€��� worldob.h 128 X extern "C" { Q���� worldob.h 129 X #endif Q�‚��� worldob.h 130 X Q�ƒ��� worldob.h 131 X extern LinkRoot_t Worldob_List; /* Linklist of Q�ƒ��� + all objects in world*/ Q�„��� worldob.h 132 X Q�…��� worldob.h 133 X extern BOOL worldob_ModuleInit( void ); Q�†��� worldob.h 134 X extern void worldob_InitSystem( void ); Q�‡��� worldob.h 135 X extern void worldob_Free( void ); Q�ˆ��� worldob.h 136 X extern void worldob_Draw( WorldOb_t *pWorldOb, BOOL bF Q�ˆ��� +laggedAsBeforeWater, BOOL bFlaggedAsAfterWater ); Q�‰��� worldob.h 137 X extern void worldob_ObjectSort_Init( void ); Q�Š��� worldob.h 138 X extern void worldob_ObjectSort_Cleanup( void ); Q�‹��� worldob.h 139 X extern void worldob_ObjectSort_Add( WorldOb_t *pWorldO Q�‹��� +b, BOOL bFlaggedAsBeforeWater, BOOL bFlaggedAsAfterWat Q�‹��� +er ); Q�Œ��� worldob.h 140 X extern void worldob_ObjectSort_Draw( void ); Q���� worldob.h 141 X extern void worldob_DrawObjectsInSector( WorldSector_t Q���� + *pSector, Q�Ž��� worldob.h 142 X Q�Ž��� + BOOL bFlaggedAsBeforeWater, BOOL bFlaggedAsAf Q�Ž��� +terWater, BOOL bSort ); Q���� worldob.h 143 X extern void worldob_DrawObjectsInSectorDisplayList( Wo Q���� +rldSector_t *pSector, Q���� worldob.h 144 X Q���� + BOOL bFlaggedAsBeforeW Q���� +ater, BOOL bFlaggedAsAfterWater, BOOL bSort ); Q�‘��� worldob.h 145 X extern void worldob_DrawAll( BOOL bFlaggedAsBeforeWate Q�‘��� +r, BOOL bFlaggedAsAfterWater ); Q�’��� worldob.h 146 X extern WorldOb_t *worldob_Init( WorldOb_t *pWorldOb ); Q�“��� worldob.h 147 X extern WorldOb_t *worldob_InitMesh( WorldOb_t *pWorldO Q�“��� +b, Mesh3d_t *pMesh ); Q�”��� worldob.h 148 X extern void worldob_InitBoundsFromMesh( WorldOb_t *pWo Q�”��� +rldOb, Mesh3d_t *pMesh ); Q�•��� worldob.h 149 X extern void worldob_Add( WorldOb_t *pWorldOb, WorldSec Q�•��� +tor_t *pHintSector ); Q�–��� worldob.h 150 X extern void worldob_Delete( WorldOb_t *pWorldOb ); Q�—��� worldob.h 151 X extern WorldLt_t *worldob_FindLightId( WorldOb_t *pWor Q�—��� +ldOb, u32 nLightId ); Q�˜��� worldob.h 152 X extern void worldob_UpdateAllTrackingWorldSpheres( voi Q�˜��� +d ); Q�™��� worldob.h 153 X extern u32 worldob_UpdateTrackingWorldSphere( WorldOb_ Q�™��� +t *pWorldOb, BOOL bForceIntersectBuild ); Q�š��� worldob.h 154 X extern BOOL worldob_AttachLightsFromMesh( WorldOb_t *p Q�š��� +WorldOb, Mesh3d_t *pMesh ); Q�›��� worldob.h 155 X extern void worldob_AttachWorldLight( WorldOb_t *pWorl Q�›��� +dOb, WorldLt_t *pWorldLight ); Q�œ��� worldob.h 156 X extern void worldob_DeleteLights( WorldOb_t *pWorldOb Q�œ��� +); Q���� worldob.h 157 X extern void worldob_TransformAllObjectLights( void ); Q�ž��� worldob.h 158 X extern void worldob_EnableObjectLights( WorldOb_t *pWo Q�ž��� +rldOb, BOOL bEnable ); Q�Ÿ��� worldob.h 159 X extern void worldob_CallAllWorkFcns( u32 nNum30ths, u3 Q�Ÿ��� +2 nFrameCounter ); Q� ��� worldob.h 160 X Q�¡��� worldob.h 161 X #if defined(__cplusplus) Q�¢��� worldob.h 162 X } Q�£��� worldob.h 163 X #endif Q�¤��� worldob.h 164 X Q�¥��� worldob.h 165 X Q�¦��� worldob.h 166 X Q�§��� worldob.h 167 #endif
sky.h
Begins at 0x3F9E4C0 but more fragments can be found throughout the track.
s����� sky.h 1 /*//////////////////////////////////////////////////// s����� +///////////////////*/ s����� sky.h 2 /* FILE: sky.h s����� + //*/ s����� sky.h 3 /* CREATED BY: Michael Starich s����� + //*/ s����� sky.h 4 /* s����� + //*/ s����� sky.h 5 /*//////////////////////////////////////////////////// s����� +///////////////////*/ s����� sky.h 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HO s����� +ME ENTERTAINMENT //*/ s����� sky.h 7 /* Copyright (c) 1997, All Rights Reserved. s����� + //*/ s����� sky.h 8 /* s����� + //*/ s� ��� sky.h 9 /* The contents of this file may not be disclosed s� ��� + to third //*/ s� ��� sky.h 10 /* parties, copied or duplicated in any form, in whol s� ��� +e or in part, //*/ s����� sky.h 11 /* without the prior written permission of Midway Hom s����� +e Entertainment //*/ s����� sky.h 12 /*//////////////////////////////////////////////////// s����� +///////////////////*/ s� ��� sky.h 13 /* MODIFICATION HISTORY: s� ��� + //*/ s����� sky.h 14 /* s����� + //*/ s����� sky.h 15 /* DATE WHO DESCRIPTION s����� + //*/ s����� sky.h 16 /* -------------------------------------------------- s����� +-----------------//*/ s����� sky.h 17 /* 4/22/97 STARICH s����� + //*/ s����� sky.h 18 /* 7/07/97 sranck Added code to draw a solid red s����� + sky if all sky //*/ s����� sky.h 19 /* textures couldn't be loaded into t s����� +mem. //*/ s����� sky.h 20 /*//////////////////////////////////////////////////// s����� +///////////////////*/ s����� sky.h 21 #ifndef _SKY_H_ s����� sky.h 22 #define _SKY_H_ 1 s����� sky.h 23 s����� sky.h 24 #include "gendefs.h" s����� sky.h 25 #include "xmath.h" s����� sky.h 26 #include "worldob.h" s����� sky.h 27 s����� sky.h 28 #if defined(__cplusplus) s����� sky.h 29 X extern "C" { s����� sky.h 30 #endif s����� sky.h 31 s� ��� sky.h 32 E extern int sky_ModuleInit( void ); s�!��� sky.h 33 E extern void sky_LoadSkyForATrack( int bLoad1SkyOnly ); s�"��� sky.h 34 extern void sky_Work( int nYaw, int nPitch, int nRoll s�"��� +); s�#��� sky.h 35 extern void sky_Draw( void ); s�$��� sky.h 36 extern void sky_SetColorEffects( f32 fR, f32 fG, f32 f s�$��� +B, f32 fColorIntensity, f32 fWhiteSat , u32 nPlayer); s�%��� sky.h 37 extern void sky_SetWhiteSat( f32 fWhiteSat ); s�&��� sky.h 38 extern f32 sky_GetDefaultHorizonPoint( u32 nTrackNum ) s�&��� +; s�'��� sky.h 39 extern f32 sky_GetDefaultPivotPoint( u32 nTrackNum ); s�(��� sky.h 40 extern void sky_ChangeHorizonPoint( f32 fNewHorizon ); s�)��� sky.h 41 extern void sky_ChangePivotPoint( f32 fNewPivot ); s�*��� sky.h 42 extern void sky_ChangeViewport( void ); s�+��� sky.h 43 E extern void sky_LoadSky( u32 nTrackNum, int bLoad1SkyO s�+��� +nly ); s�,��� sky.h 44 extern void sky_Init( f32 fPivotDY, f32 fHorizonDY ); s�-��� sky.h 45 E extern void sky_TW_SwitchSky( WorldOb_t *pWorldOb, u32 s�-��� + nParm1, int bForward ); s�.��� sky.h 46 E extern void sky_TW_FadeOutSky( WorldOb_t *pWorldOb, u3 s�.��� +2 nStep, int bForward ); s�/��� sky.h 47 E extern void sky_TW_FadeInSky( WorldOb_t *pWorldOb, u32 s�/��� + nStep, int bForward ); s�0��� sky.h 48 E extern void sky_TW_ToggleBlackSky( WorldOb_t *pWorldOb s�0��� +, u32 nParm1, int bForward ); s�1��� sky.h 49 s�2��� sky.h 50 #if defined(__cplusplus) s�3��� sky.h 51 X } s�4��� sky.h 52 #endif s�5��� sky.h 53 s�6��� sky.h 54 #endif s�7��� sky.h 55 s�8��� sky.h 56 s�9��� sky.h 57 s�:��� sky.h 58 s�;��� sky.h 59 s�<��� sky.h 60
gendefs.h
Found at 0x3F9F310:
������ gendefs.h 1 /*//////////////////////////////////////////////////// ������ +////////////////////////////////*/ ������ gendefs.h 2 /* gendefs.h - General purpose definitions and macros* ������ +/ ������ gendefs.h 3 /**/ ������ gendefs.h 4 /* Author: Steve Ranck*/ ������ gendefs.h 5 /*//////////////////////////////////////////////////// ������ +////////////////////////////////*/ ������ gendefs.h 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN ������ +TERTAINMENT.*/ ������ gendefs.h 7 /* Copyright (c) 1997*/ ������ gendefs.h 8 /**/ �� ��� gendefs.h 9 /* The contents of this file may not be disclosed to t �� ��� +hird*/ �� ��� gendefs.h 10 /* parties, copied or duplicated in any form, in whole �� ��� + or in part,*/ ������ gendefs.h 11 /* without the prior written permission of Midway Home ������ + Entertainment.*/ ������ gendefs.h 12 /*//////////////////////////////////////////////////// ������ +////////////////////////////////*/ �� ��� gendefs.h 13 /* Modification History:*/ ������ gendefs.h 14 /**/ ������ gendefs.h 15 /* Date Who Description*/ ������ gendefs.h 16 /* -------- ---------- ---------------------- ������ +----------------------------------------*/ ������ gendefs.h 17 /* 01-17-97 Ranck Created.*/ ������ gendefs.h 18 /*//////////////////////////////////////////////////// ������ +////////////////////////////////*/ ������ gendefs.h 19 ������ gendefs.h 20 #ifndef _GENDEFS_H_ ������ gendefs.h 21 X #define _GENDEFS_H_ 1 ������ gendefs.h 22 X ������ gendefs.h 23 X #include "eurocom.h" /* PAB ������ + Do this BEFORE anything else */ ������ gendefs.h 24 X #include "gentypes.h" ������ gendefs.h 25 X ������ gendefs.h 26 X #if TARGET==ULTRA64 ������ + /* Extra includes */ ������ gendefs.h 27 X #include "system.h" ������ gendefs.h 28 X ������ gendefs.h 29 X ������ gendefs.h 30 X ������ gendefs.h 31 X �� ��� gendefs.h 32 X #undef TARGET_PLATFORM ��!��� gendefs.h 33 X #define TARGET_PLATFORM 1 /* Ass ��!��� +ume arcade defaults */ ��"��� gendefs.h 34 X #endif /*ULTRA64 */ ��#��� gendefs.h 35 X ��$��� gendefs.h 36 X #if TARGET==DREAMCAST ��%��� gendefs.h 37 X #ifdef INCLUDE_SYSTEM_H ��&��� gendefs.h 38 X #include "system.h" ��'��� gendefs.h 39 X #endif ��(��� gendefs.h 40 X #undef TARGET_PLATFORM ��)��� gendefs.h 41 X #define TARGET_PLATFORM 1 ��)��� + /* Assume arcade defaults */ ��*��� gendefs.h 42 X #endif /*DREAMCAST*/ ��+��� gendefs.h 43 X ��,��� gendefs.h 44 X ��-��� gendefs.h 45 X /* Use this macro to allocate memory, shows where code ��-��� + alloc'd with file id :) */ ��.��� gendefs.h 46 X #define SYSMEM_ALLOC(var) sysmem ��.��� +_Alloc(__FILE__, __LINE__,var) ��/��� gendefs.h 47 X #define SYSMEM_ALLOCANDZERO(var) sysmem_AllocAn ��/��� +dZero(__FILE__, __LINE__,var) ��0��� gendefs.h 48 X ��1��� gendefs.h 49 X #if SYS_PRODUCTION_BUILD ��2��� gendefs.h 50 X # define SYS_PRINTF ��2��� + 0 /* 1 = enable printf support (coinop or PC)*/ ��3��� gendefs.h 51 X #else ��4��� gendefs.h 52 X # define SYS_PRINTF ��4��� + 1 /* 1 = enable printf support (coinop or PC)*/ ��5��� gendefs.h 53 X #endif ��6��� gendefs.h 54 X ��7��� gendefs.h 55 X ��8��� gendefs.h 56 X /*---------------------------------------------------- ��8��� +--------------------------------*/ ��9��� gendefs.h 57 X /*---------------------------------------------------- ��9��� +--------------------------------*/ ��:��� gendefs.h 58 X /* NOTE:*/ ��;��� gendefs.h 59 X /**/ ��<��� gendefs.h 60 X /* These definitions must be set up via the compiler ��<��� + command line. Do NOT use these*/ ��=��� gendefs.h 61 X /* as compile-time switches.*/ ��>��� gendefs.h 62 X /**/ ��?��� gendefs.h 63 X /* _DEBUG:*/ ��@��� gendefs.h 64 X /* defined = debug compilation.*/ ��A��� gendefs.h 65 X /* undefined = release compilation.*/ ��B��� gendefs.h 66 X /**/ ��C��� gendefs.h 67 X /* NDEBUG:*/ ��D��� gendefs.h 68 X /* defined = release compilation.*/ ��E��� gendefs.h 69 X /* undefined = debug compilation.*/ ��F��� gendefs.h 70 X /**/ ��G��� gendefs.h 71 X /* TARGET_PLATFORM:*/ ��H��� gendefs.h 72 X /* 0 = target is Win95-based dev system (emulati ��H��� +on of coinop hardware).*/ ��I��� gendefs.h 73 X /* 1 = target is actual coinop hardware (MIPS pr ��I��� +ocessor).*/ ��J��� gendefs.h 74 X /* 2 = target is Win95-based static library.*/ ��K��� gendefs.h 75 X /**/ ��L��� gendefs.h 76 X /* __MSC__:*/ ��M��� gendefs.h 77 X /* defined = compiling with Microsoft C/C++ comp ��M��� +iler (used for Glide).*/ ��N��� gendefs.h 78 X /* undefined = not compiling with Microsoft C/C+ ��N��� ++ compiler.*/ ��O��� gendefs.h 79 X /**/ ��P��� gendefs.h 80 X /**/ ��Q��� gendefs.h 81 X /* These compile-time definitions are set up here. U ��Q��� +se these as compile-time switches.*/ ��R��� gendefs.h 82 X /**/ ��S��� gendefs.h 83 X /* SYS_PLATFORM:*/ ��T��� gendefs.h 84 X /* SYS_PLATFORM_WINDEV = target is Win95-base ��T��� +d dev system (emulation of coinop hardware).*/ ��U��� gendefs.h 85 X /* SYS_PLATFORM_COINOPHW = target is actual coi ��U��� +nop hardware (MIPS processor).*/ ��V��� gendefs.h 86 X /* SYS_PLATFORM_WINLIB = target is Win95-base ��V��� +d static library.*/ ��W��� gendefs.h 87 X /**/ ��X��� gendefs.h 88 X /* SYS_DEBUG:*/ ��Y��� gendefs.h 89 X /* 1 = debug compilation.*/ ��Z��� gendefs.h 90 X /* 0 = release compilation.*/ ��[��� gendefs.h 91 X /**/ ��\��� gendefs.h 92 X /* SYS_RELEASE:*/ ��]��� gendefs.h 93 X /* 1 = release compilation.*/ ��^��� gendefs.h 94 X /* 0 = debug compilation.*/ ��_��� gendefs.h 95 X /**/ ��`��� gendefs.h 96 X /* SYS_COINOPHW_TARGET:*/ ��a��� gendefs.h 97 X /* 1 = target is actual coinop hardware (MIPS p ��a��� +rocessor).*/ ��b��� gendefs.h 98 X /* 0 = target is not coinop hardware.*/ ��c��� gendefs.h 99 X /**/ ��d��� gendefs.h 100 X /* SYS_WINDEV_TARGET:*/ ��e��� gendefs.h 101 X /* 1 = target is Win95-based dev system (emulat ��e��� +ion of coinop hardware).*/ ��f��� gendefs.h 102 X /* 0 = target is not dev system.*/ ��g��� gendefs.h 103 X /**/ ��h��� gendefs.h 104 X /* SYS_WINLIB_TARGET:*/ ��i��� gendefs.h 105 X /* 1 = target is Win95-based static library.*/ ��j��� gendefs.h 106 X /* 0 = target is not static library.*/ ��k��� gendefs.h 107 X /**/ ��l��� gendefs.h 108 X /* SYS_COINOPHW_DEBUG:*/ ��m��� gendefs.h 109 X /* 1 = debug compilation for the coinop hardwar ��m��� +e target.*/ ��n��� gendefs.h 110 X /* 0 = any other configuration.*/ ��o��� gendefs.h 111 X /**/ ��p��� gendefs.h 112 X /* SYS_COINOPHW_RELEASE:*/ ��q��� gendefs.h 113 X /* 1 = release compilation for the coinop hardw ��q��� +are target.*/ ��r��� gendefs.h 114 X /* 0 = any other configuration.*/ ��s��� gendefs.h 115 X /**/ ��t��� gendefs.h 116 X /* SYS_WINDEV_DEBUG:*/ ��u��� gendefs.h 117 X /* 1 = debug compilation for the Win95-based de ��u��� +v system.*/ ��v��� gendefs.h 118 X /* 0 = any other configuration.*/ ��w��� gendefs.h 119 X /**/ ��x��� gendefs.h 120 X /* SYS_WINDEV_RELEASE:*/ ��y��� gendefs.h 121 X /* 1 = release compilation for the Win95-based ��y��� +dev system.*/ ��z��� gendefs.h 122 X /* 0 = any other configuration.*/ ��{��� gendefs.h 123 X /**/ ��|��� gendefs.h 124 X /* SYS_WINLIB_DEBUG:*/ ��}��� gendefs.h 125 X /* 1 = debug compilation for the Win95-based st ��}��� +atic library.*/ ��~��� gendefs.h 126 X /* 0 = any other configuration.*/ ��?��� gendefs.h 127 X /**/ ��€��� gendefs.h 128 X /* SYS_WINLIB_RELEASE:*/ ����� gendefs.h 129 X /* 1 = release compilation for the Win95-based ����� +static library.*/ ��‚��� gendefs.h 130 X /* 0 = any other configuration.*/ ��ƒ��� gendefs.h 131 X ��„��� gendefs.h 132 X #define SYS_PLATFORM_WINDEV 0 ��…��� gendefs.h 133 X #define SYS_PLATFORM_COINOPHW 1 ��†��� gendefs.h 134 X #define SYS_PLATFORM_WINLIB 2 ��‡��� gendefs.h 135 X ��ˆ��� gendefs.h 136 X #define SYS_PLATFORM (TARGET_PLATFO ��ˆ��� +RM) ��‰��� gendefs.h 137 X ��Š��� gendefs.h 138 X #define SYS_WINDEV_TARGET (SYS_PLATFORM= ��Š��� +=SYS_PLATFORM_WINDEV) ��‹��� gendefs.h 139 X #define SYS_COINOPHW_TARGET (SYS_PLATFORM= ��‹��� +=SYS_PLATFORM_COINOPHW) ��Œ��� gendefs.h 140 X #define SYS_WINLIB_TARGET (SYS_PLATFORM= ��Œ��� +=SYS_PLATFORM_WINLIB) ����� gendefs.h 141 X ��Ž��� gendefs.h 142 X #ifdef _DEBUG ����� gendefs.h 143 X /* Debug build flags...*/ ����� gendefs.h 144 X #define SYS_DEBUG 1 ��‘��� gendefs.h 145 X #define SYS_RELEASE 0 ��’��� gendefs.h 146 X #define SYS_COINOPHW_DEBUG (SYS_COINOPHW_ ��’��� +TARGET) ��“��� gendefs.h 147 X #define SYS_COINOPHW_RELEASE 0 ��”��� gendefs.h 148 X #define SYS_WINDEV_DEBUG (SYS_WINDEV_TA ��”��� +RGET) ��•��� gendefs.h 149 X #define SYS_WINDEV_RELEASE 0 ��–��� gendefs.h 150 X #define SYS_WINLIB_DEBUG (SYS_WINLIB_TA ��–��� +RGET) ��—��� gendefs.h 151 X #define SYS_WINLIB_RELEASE 0 ��˜��� gendefs.h 152 X ��™��� gendefs.h 153 X #else ��š��� gendefs.h 154 X /* Release build flags...*/ ��›��� gendefs.h 155 X #define SYS_DEBUG 0 ��œ��� gendefs.h 156 X #define SYS_RELEASE 1 ����� gendefs.h 157 X #define SYS_COINOPHW_DEBUG 0 ��ž��� gendefs.h 158 X #define SYS_COINOPHW_RELEASE (SYS_COINOPHW_TARGET) ��Ÿ��� gendefs.h 159 X #define SYS_WINDEV_DEBUG 0 �� ��� gendefs.h 160 X #define SYS_WINDEV_RELEASE (SYS_WINDEV_TA �� ��� +RGET) ��¡��� gendefs.h 161 X #define SYS_WINLIB_DEBUG 0 ��¢��� gendefs.h 162 X #define SYS_WINLIB_RELEASE (SYS_WINLIB_TA ��¢��� +RGET) ��£��� gendefs.h 163 X ��¤��� gendefs.h 164 X #endif /* _DEBUG*/ ��¥��� gendefs.h 165 X ��¦��� gendefs.h 166 X /*---------------------------------------------------- ��¦��� +--------------------------------*/ ��§��� gendefs.h 167 X /*---------------------------------------------------- ��§��� +--------------------------------*/ ��¨��� gendefs.h 168 X /* Win95 Dev System GUI support externs and macros...* ��¨��� +/ ��©��� gendefs.h 169 X ��ª��� gendefs.h 170 X #define WINGUI_FLAG_READONLY 0x00000001 /* set ��ª��� +s the control to a read-only state*/ ��«��� gendefs.h 171 X ��¬��� gendefs.h 172 X #if SYS_WINDEV_TARGET ����� gendefs.h 173 X /* Win95 Dev System present...*/ ��®��� gendefs.h 174 X ��¯��� gendefs.h 175 X #if defined(__cplusplus) ��°��� gendefs.h 176 X extern "C" { ��±��� gendefs.h 177 X #endif ��²��� gendefs.h 178 X ��³��� gendefs.h 179 X extern void wintap_InitEdit_s32( cchar *pszTabName, in ��³��� +t nSlotNum, cchar *pszTitle, u32 nFlags, cchar *pszFor ��³��� +mat ); ��´��� gendefs.h 180 X extern void wintap_InitEdit_u32( cchar *pszTabName, in ��´��� +t nSlotNum, cchar *pszTitle, u32 nFlags, cchar *pszFor ��´��� +mat ); ��µ��� gendefs.h 181 X extern void wintap_InitEdit_f32( cchar *pszTabName, in ��µ��� +t nSlotNum, cchar *pszTitle, u32 nFlags, cchar *pszFor ��µ��� +mat ); ��¶��� gendefs.h 182 X extern void wintap_InitCheck_s32( cchar *pszTabName, i ��¶��� +nt nSlotNum, cchar *pszTitle, u32 nFlags ); ��·��� gendefs.h 183 X extern void wintap_InitCheck_u32( cchar *pszTabName, i ��·��� +nt nSlotNum, cchar *pszTitle, u32 nFlags ); ��¸��� gendefs.h 184 X extern void wintap_InitCheck_f32( cchar *pszTabName, i ��¸��� +nt nSlotNum, cchar *pszTitle, u32 nFlags ); ��¹��� gendefs.h 185 X extern void wintap_InitSlider_s32( cchar *pszTabName, ��¹��� +int nSlotNum, cchar *pszTitle, u32 nFlags, s32 nMin, s ��¹��� +32 nMax ); ��º��� gendefs.h 186 X extern void wintap_InitSlider_u32( cchar *pszTabName, ��º��� +int nSlotNum, cchar *pszTitle, u32 nFlags, u32 nMin, u ��º��� +32 nMax ); ��»��� gendefs.h 187 X extern void wintap_InitSlider_f32( cchar *pszTabName, ��»��� +int nSlotNum, cchar *pszTitle, u32 nFlags, f32 nMin, f ��»��� +32 nMax ); ��¼��� gendefs.h 188 X ��½��� gendefs.h 189 X extern void wintap_ExportEdit_s32( s32 nVar, cchar *ps ��½��� +zTabName, int nSlotNum ); ��¾��� gendefs.h 190 X extern void wintap_ExportEdit_u32( u32 nVar, cchar *ps ��¾��� +zTabName, int nSlotNum ); ��¿��� gendefs.h 191 X extern void wintap_ExportEdit_f32( f32 nVar, cchar *ps ��¿��� +zTabName, int nSlotNum ); ��À��� gendefs.h 192 X extern void wintap_ExportCheck_s32( s32 nVar, cchar *p ��À��� +szTabName, int nSlotNum ); ��Á��� gendefs.h 193 X extern void wintap_ExportCheck_u32( u32 nVar, cchar *p ��Á��� +szTabName, int nSlotNum ); ��Â��� gendefs.h 194 X extern void wintap_ExportCheck_f32( f32 nVar, cchar *p ��Â��� +szTabName, int nSlotNum ); ��Ã��� gendefs.h 195 X extern void wintap_ExportSlider_s32( s32 nVar, cchar * ��Ã��� +pszTabName, int nSlotNum ); ��Ä��� gendefs.h 196 X extern void wintap_ExportSlider_u32( u32 nVar, cchar * ��Ä��� +pszTabName, int nSlotNum ); ��Å��� gendefs.h 197 X extern void wintap_ExportSlider_f32( f32 nVar, cchar * ��Å��� +pszTabName, int nSlotNum ); ��Æ��� gendefs.h 198 X ��Ç��� gendefs.h 199 X extern void wintap_ImportEdit_s32( s32 *pVar, cchar *p ��Ç��� +szTabName, int nSlotNum ); ��È��� gendefs.h 200 X extern void wintap_ImportEdit_u32( u32 *pVar, cchar *p ��È��� +szTabName, int nSlotNum ); ��É��� gendefs.h 201 X extern void wintap_ImportEdit_f32( f32 *pVar, cchar *p ��É��� +szTabName, int nSlotNum ); ��Ê��� gendefs.h 202 X extern void wintap_ImportCheck_s32( s32 *pVar, cchar * ��Ê��� +pszTabName, int nSlotNum ); ��Ë��� gendefs.h 203 X extern void wintap_ImportCheck_u32( u32 *pVar, cchar * ��Ë��� +pszTabName, int nSlotNum ); ��Ì��� gendefs.h 204 X extern void wintap_ImportCheck_f32( f32 *pVar, cchar * ��Ì��� +pszTabName, int nSlotNum ); ��Í��� gendefs.h 205 X extern void wintap_ImportSlider_s32( s32 *pVar, cchar ��Í��� +*pszTabName, int nSlotNum ); ��Î��� gendefs.h 206 X extern void wintap_ImportSlider_u32( u32 *pVar, cchar ��Î��� +*pszTabName, int nSlotNum ); ��Ï��� gendefs.h 207 X extern void wintap_ImportSlider_f32( f32 *pVar, cchar ��Ï��� +*pszTabName, int nSlotNum ); ��Ð��� gendefs.h 208 X ��Ñ��� gendefs.h 209 X #if defined(__cplusplus) ��Ò��� gendefs.h 210 X } ��Ó��� gendefs.h 211 X #endif ��Ô��� gendefs.h 212 X ��Õ��� gendefs.h 213 X #define WINGUI_INIT_EDIT_S32 wintap_InitEdit_s32 ��Ö��� gendefs.h 214 X #define WINGUI_INIT_EDIT_U32 wintap_InitEdit_u32 ��×��� gendefs.h 215 X #define WINGUI_INIT_EDIT_F32 wintap_InitEdit_f32 ��Ø��� gendefs.h 216 X #define WINGUI_INIT_CHECK_S32 wintap_InitCheck_s32 ��Ù��� gendefs.h 217 X #define WINGUI_INIT_CHECK_U32 wintap_InitCheck_u32 ��Ú��� gendefs.h 218 X #define WINGUI_INIT_CHECK_F32 wintap_InitCheck_f32 ��Û��� gendefs.h 219 X #define WINGUI_INIT_SLIDER_S32 wintap_InitSlider_s32 ��Ü��� gendefs.h 220 X #define WINGUI_INIT_SLIDER_U32 wintap_InitSlider_u32 ��Ý��� gendefs.h 221 X #define WINGUI_INIT_SLIDER_F32 wintap_InitSlider_f32 ��Þ��� gendefs.h 222 X ��ß��� gendefs.h 223 X #define WINGUI_EXPORT_EDIT_S32 wintap_ExportEdit_s32 ��à��� gendefs.h 224 X #define WINGUI_EXPORT_EDIT_U32 wintap_ExportEdit_u32 ��á��� gendefs.h 225 X #define WINGUI_EXPORT_EDIT_F32 wintap_ExportEdit_f32 ��â��� gendefs.h 226 X #define WINGUI_EXPORT_CHECK_S32 wintap_ExportCheck_s32 ��ã��� gendefs.h 227 X #define WINGUI_EXPORT_CHECK_U32 wintap_ExportCheck_u32 ��ä��� gendefs.h 228 X #define WINGUI_EXPORT_CHECK_F32 wintap_ExportCheck_f32 ��å��� gendefs.h 229 X #define WINGUI_EXPORT_SLIDER_S32 wintap_ExportSlider_s ��å��� +32 ��æ��� gendefs.h 230 X #define WINGUI_EXPORT_SLIDER_U32 wintap_ExportSlider_u ��æ��� +32 ��ç��� gendefs.h 231 X #define WINGUI_EXPORT_SLIDER_F32 wintap_ExportSlider_f ��ç��� +32 ��è��� gendefs.h 232 X ��é��� gendefs.h 233 X #define WINGUI_IMPORT_EDIT_S32 wintap_ImportEdit_s32 ��ê��� gendefs.h 234 X #define WINGUI_IMPORT_EDIT_U32 wintap_ImportEdit_u32 ��ë��� gendefs.h 235 X #define WINGUI_IMPORT_EDIT_F32 wintap_ImportEdit_f32 ��ì��� gendefs.h 236 X #define WINGUI_IMPORT_CHECK_S32 wintap_ImportCheck_s32 ��í��� gendefs.h 237 X #define WINGUI_IMPORT_CHECK_U32 wintap_ImportCheck_u32 ��î��� gendefs.h 238 X #define WINGUI_IMPORT_CHECK_F32 wintap_ImportCheck_f32 ��ï��� gendefs.h 239 X #define WINGUI_IMPORT_SLIDER_S32 wintap_ImportSlider_s ��ï��� +32 ��ð��� gendefs.h 240 X #define WINGUI_IMPORT_SLIDER_U32 wintap_ImportSlider_u ��ð��� +32 ��ñ��� gendefs.h 241 X #define WINGUI_IMPORT_SLIDER_F32 wintap_ImportSlider_f ��ñ��� +32 ��ò��� gendefs.h 242 X ��ó��� gendefs.h 243 X #else ��ô��� gendefs.h 244 X /* No Win95 Dev System...*/ ��õ��� gendefs.h 245 X ��ö��� gendefs.h 246 X #define WINGUI_INIT_EDIT_S32 ��÷��� gendefs.h 247 X #define WINGUI_INIT_EDIT_U32 ��ø��� gendefs.h 248 X #define WINGUI_INIT_EDIT_F32 ��ù��� gendefs.h 249 X #define WINGUI_INIT_CHECK_S32 ��ú��� gendefs.h 250 X #define WINGUI_INIT_CHECK_U32 ��û��� gendefs.h 251 X #define WINGUI_INIT_CHECK_F32 ��ü��� gendefs.h 252 X #define WINGUI_INIT_SLIDER_S32 ��ý��� gendefs.h 253 X #define WINGUI_INIT_SLIDER_U32 ��þ��� gendefs.h 254 X #define WINGUI_INIT_SLIDER_F32 ��ÿ��� gendefs.h 255 X ������ gendefs.h 256 X #define WINGUI_EXPORT_EDIT_S32 ������ gendefs.h 257 X #define WINGUI_EXPORT_EDIT_U32 ������ gendefs.h 258 X #define WINGUI_EXPORT_EDIT_F32 ������ gendefs.h 259 X #define WINGUI_EXPORT_CHECK_S32 ������ gendefs.h 260 X #define WINGUI_EXPORT_CHECK_U32 ������ gendefs.h 261 X #define WINGUI_EXPORT_CHECK_F32 ������ gendefs.h 262 X #define WINGUI_EXPORT_SLIDER_S32 ������ gendefs.h 263 X #define WINGUI_EXPORT_SLIDER_U32 ������ gendefs.h 264 X #define WINGUI_EXPORT_SLIDER_F32 �� ��� gendefs.h 265 X �� ��� gendefs.h 266 X #define WINGUI_IMPORT_EDIT_S32 ������ gendefs.h 267 X #define WINGUI_IMPORT_EDIT_U32 ������ gendefs.h 268 X #define WINGUI_IMPORT_EDIT_F32 �� ��� gendefs.h 269 X #define WINGUI_IMPORT_CHECK_S32 ������ gendefs.h 270 X #define WINGUI_IMPORT_CHECK_U32 ������ gendefs.h 271 X #define WINGUI_IMPORT_CHECK_F32 ������ gendefs.h 272 X #define WINGUI_IMPORT_SLIDER_S32 ������ gendefs.h 273 X #define WINGUI_IMPORT_SLIDER_U32 ������ gendefs.h 274 X #define WINGUI_IMPORT_SLIDER_F32 ������ gendefs.h 275 X ������ gendefs.h 276 X #endif ������ gendefs.h 277 X ������ gendefs.h 278 X ������ gendefs.h 279 X ������ gendefs.h 280 X /*---------------------------------------------------- ������ +--------------------------------*/ ������ gendefs.h 281 X /*---------------------------------------------------- ������ +--------------------------------*/ ������ gendefs.h 282 X /* Debugging support definitions and externs...*/ ������ gendefs.h 283 X ������ gendefs.h 284 X #if defined(__cplusplus) ������ gendefs.h 285 X extern "C" { ������ gendefs.h 286 X #endif ������ gendefs.h 287 X �� ��� gendefs.h 288 X ��!��� gendefs.h 289 X /* HALTGAME stuff...*/ ��"��� gendefs.h 290 X #define HALTGAME(s) gerr_Halt( s, __FILE__, __LINE__ ) ��#��� gendefs.h 291 X extern void gerr_Halt( const char *s, const char *fnam ��#��� +e, int linenum ); ��$��� gendefs.h 292 X ��%��� gendefs.h 293 X #if SYS_COINOPHW_TARGET ��&��� gendefs.h 294 X /* XASSERT macro for coinop hardware...*/ ��'��� gendefs.h 295 X #if SYS_DEBUG ��(��� gendefs.h 296 X #define XASSERT(b) if( (!(b)) ) gerr_A ��(��� +ssert( b, __FILE__, __LINE__ ) ��)��� gendefs.h 297 X extern void gerr_Assert( int b, const ��)��� +char *fname, int linenum ); ��*��� gendefs.h 298 X #else ��+��� gendefs.h 299 X #define XASSERT(b) ��,��� gendefs.h 300 X #endif ��-��� gendefs.h 301 X #endif ��.��� gendefs.h 302 X #if SYS_WINDEV_TARGET ��/��� gendefs.h 303 X /* XASSERT macro for Win95...*/ ��0��� gendefs.h 304 X #if SYS_DEBUG ��1��� gendefs.h 305 X /* Route asserts to our print box...*/ ��2��� gendefs.h 306 X #define XASSERT(b) if( (!(b)) ) gerr_A ��2��� +ssert( b, __FILE__, __LINE__ ) ��3��� gendefs.h 307 X extern void gerr_Assert( int b, const ��3��� +char *fname, int linenum ); ��4��� gendefs.h 308 X #else ��5��� gendefs.h 309 X #define XASSERT(b) ��6��� gendefs.h 310 X #endif ��7��� gendefs.h 311 X #endif ��8��� gendefs.h 312 X #if SYS_WINLIB_TARGET ��9��� gendefs.h 313 X /* XASSERT macro for static library...*/ ��:��� gendefs.h 314 X #if SYS_DEBUG ��;��� gendefs.h 315 X /* Route asserts to external handler.. ��;��� +.*/ ��<��� gendefs.h 316 X #define XASSERT(b) if( (!(b)) ) gerr_A ��<��� +ssert( b, __FILE__, __LINE__ ) ��=��� gendefs.h 317 X extern void gerr_Assert( int b, const ��=��� +char *fname, int linenum ); ��>��� gendefs.h 318 X #else ��?��� gendefs.h 319 X #define XASSERT(b) ��@��� gendefs.h 320 X #endif ��A��� gendefs.h 321 X #endif ��B��� gendefs.h 322 X #define XASSERT_NOW XASSERT(0) ��C��� gendefs.h 323 X #define XASSERT_UNIT_FLOAT( q ) XASSERT( ((q)>=0.0f && ��C��� + (q)<=1.0f) ) ��D��� gendefs.h 324 X #define XASSERT_BOOL( b ) XASSERT( ((b)==0 || (b)==1) ��D��� +) ��E��� gendefs.h 325 X ��F��� gendefs.h 326 X ��G��� gendefs.h 327 X #if defined(__cplusplus) ��H��� gendefs.h 328 X } ��I��� gendefs.h 329 X #endif ��J��� gendefs.h 330 X ��K��� gendefs.h 331 X ��L��� gendefs.h 332 X ��M��� gendefs.h 333 X /*---------------------------------------------------- ��M��� +--------------------------------*/ ��N��� gendefs.h 334 X /*---------------------------------------------------- ��N��� +--------------------------------*/ ��O��� gendefs.h 335 X /* Printf support macros...*/ ��P��� gendefs.h 336 X ��Q��� gendefs.h 337 X #if SYS_WINDEV_TARGET ��R��� gendefs.h 338 X #include "wintap.h" ��S��� gendefs.h 339 X #endif ��T��� gendefs.h 340 X ��U��� gendefs.h 341 X #if SYS_COINOPHW_TARGET ��V��� gendefs.h 342 X #if TARGET!=ULTRA64 && TARGET!=DREAMCAST /* Thi ��V��� +s file doesn't actually exist! Doh! */ ��W��� gendefs.h 343 X #include "commport_driver.h" ��X��� gendefs.h 344 X #endif /*ULTRA64 */ ��Y��� gendefs.h 345 X #endif ��Z��� gendefs.h 346 X ��[��� gendefs.h 347 X #if SYS_WINDEV_TARGET ��\��� gendefs.h 348 X #define _printf_target wintap_Printf ��]��� gendefs.h 349 X #define _printferr_target wintap_Printferr ��^��� gendefs.h 350 X #endif ��_��� gendefs.h 351 X #if SYS_COINOPHW_TARGET ��`��� gendefs.h 352 X #if TARGET==ULTRA64||TARGET==DREAMCAST /* Re-direct p ��`��� +rintf's to host I/O */ ��a��� gendefs.h 353 X #define _printf_target CONSOLE ��b��� gendefs.h 354 X #define _printferr_target CONSOLE ��c��� gendefs.h 355 X #else /*ULTRA64 */ ��d��� gendefs.h 356 X #define _printf_target commport_driver_Printf ��e��� gendefs.h 357 X #define _printferr_target commport_driver_Prin ��e��� +tf ��f��� gendefs.h 358 X #endif /*ULTRA64 */ ��g��� gendefs.h 359 X #endif ��h��� gendefs.h 360 X #if SYS_WINLIB_TARGET ��i��� gendefs.h 361 X #define _printf_target ��j��� gendefs.h 362 X #define _printferr_target ��k��� gendefs.h 363 X #endif ��l��� gendefs.h 364 X ��m��� gendefs.h 365 X #if SYS_PRINTF ��n��� gendefs.h 366 X #define xprintf _printf_target ��o��� gendefs.h 367 X #define xprintferr _printferr_target ��p��� gendefs.h 368 X #else ��q��� gendefs.h 369 X #define xprintf 1 ? (void)0 : _printf_target ��r��� gendefs.h 370 X #define xprintferr 1 ? (void)0 : _printferr_ta ��r��� +rget ��s��� gendefs.h 371 X #endif ��t��� gendefs.h 372 X ��u��� gendefs.h 373 X ��v��� gendefs.h 374 X ��w��� gendefs.h 375 X /*---------------------------------------------------- ��w��� +--------------------------------*/ ��x��� gendefs.h 376 X /*---------------------------------------------------- ��x��� +--------------------------------*/ ��y��� gendefs.h 377 X /* Other macros...*/ ��z��� gendefs.h 378 X ��{��� gendefs.h 379 X #if TARGET==ULTRA64 || TARGET==DREAMCAST ��|��� gendefs.h 380 X #define SYS_ENABLE_INLINE_CODE 1 ��}��� gendefs.h 381 X #define XINLINE ��~��� gendefs.h 382 X #else /*ULTRA64*/ ��?��� gendefs.h 383 X ��€��� gendefs.h 384 X #endif /*ULTRA64*/ ����� gendefs.h 385 X ��‚��� gendefs.h 386 #endif ��ƒ��� gendefs.h 387
xmath.h
Found at 0x3FA7D90:
G����� xmath.h 1 /*//////////////////////////////////////////////////// G����� +////////////////////////////////*/ G����� xmath.h 2 /* xmath.h*/ G����� xmath.h 3 /**/ G����� xmath.h 4 /* Author: Steve Ranck*/ G����� xmath.h 5 /*//////////////////////////////////////////////////// G����� +////////////////////////////////*/ G����� xmath.h 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN G����� +TERTAINMENT.*/ G����� xmath.h 7 /* Copyright (c) 1997*/ G����� xmath.h 8 /**/ G� ��� xmath.h 9 /* The contents of this file may not be disclosed to t G� ��� +hird*/ G� ��� xmath.h 10 /* parties, copied or duplicated in any form, in whole G� ��� + or in part,*/ G����� xmath.h 11 /* without the prior written permission of Midway Home G����� + Entertainment.*/ G����� xmath.h 12 /*//////////////////////////////////////////////////// G����� +////////////////////////////////*/ G� ��� xmath.h 13 /* Modification History:*/ G����� xmath.h 14 /**/ G����� xmath.h 15 /* Date Who Description*/ G����� xmath.h 16 /* -------- ---------- ---------------------- G����� +----------------------------------------*/ G����� xmath.h 17 /* 01-17-97 Ranck Created.*/ G����� xmath.h 18 /* 09-10-97 Starich Added lookup var for s G����� +in 90 degree increments, instead of */ G����� xmath.h 19 /* using G����� +sin. Also created a function to index into this table G����� +*/ G����� xmath.h 20 /* and ma G����� +intain an index.*/ G����� xmath.h 21 /*//////////////////////////////////////////////////// G����� +////////////////////////////////*/ G����� xmath.h 22 G����� xmath.h 23 #ifndef _XMATH_H_ G����� xmath.h 24 X #define _XMATH_H_ 1 G����� xmath.h 25 X G����� xmath.h 26 X #include "gendefs.h" G����� xmath.h 27 X G����� xmath.h 28 X G����� xmath.h 29 X #if TARGET==ULTRA64 || TARGET==DREAMCAST /* Don't G����� +use arcade sin table, use own version */ G����� xmath.h 30 X /* 'sinfulltbl' is 0x50000 bytes in hex! Bugger that! G����� +*/ G����� xmath.h 31 X #define XMATH_USE_FULL_SINTBL 0 G� ��� xmath.h 32 X #else /*ULTRA64 */ G�!��� xmath.h 33 X #define XMATH_USE_FULL_SINTBL 1 G�"��� xmath.h 34 X #endif /*ULTRA64 */ G�#��� xmath.h 35 X #define XMATH_USE_INTELASM_TRIG 0 G�#��� + /* XMATH_USE_FULL_SINTBL must be 0 when this flag is G�#��� + 1*/ G�$��� xmath.h 36 X G�%��� xmath.h 37 X #if XMATH_USE_FULL_SINTBL G�&��� xmath.h 38 X #define xmath_sin( nAngle ) (sinfulltbl[ (nAngle)&0xff G�&��� +ff ]) G�'��� xmath.h 39 X #define xmath_cos( nAngle ) (sinfulltbl[ 16384 + ((nAn G�'��� +gle)&0xffff) ]) G�(��� xmath.h 40 X #endif G�)��� xmath.h 41 X G�*��� xmath.h 42 X G�+��� xmath.h 43 X /* Useful constants...*/ G�,��� xmath.h 44 X #define XMATH_SIN0 0.0f G�-��� xmath.h 45 X #define XMATH_SIN15 0.258819045f G�.��� xmath.h 46 X #define XMATH_SIN30 0.5f G�/��� xmath.h 47 X #define XMATH_SIN45 0.707106781f G�0��� xmath.h 48 X #define XMATH_SIN60 0.866025404f G�1��� xmath.h 49 X #define XMATH_SIN75 0.965925826f G�2��� xmath.h 50 X #define XMATH_SIN90 1.0f G�3��� xmath.h 51 X #define XMATH_COS0 1.0f G�4��� xmath.h 52 X #define XMATH_COS15 0.965925826f G�5��� xmath.h 53 X #define XMATH_COS30 0.866025404f G�6��� xmath.h 54 X #define XMATH_COS45 0.707106781f G�7��� xmath.h 55 X #define XMATH_COS60 0.5f G�8��� xmath.h 56 X #define XMATH_COS75 0.258819045f G�9��� xmath.h 57 X #define XMATH_COS90 0.0f G�:��� xmath.h 58 X G�;��� xmath.h 59 X /* Angle macros...*/ G�<��� xmath.h 60 X #define XMATH_PI (3.1415926536f) G�=��� xmath.h 61 X #define XMATH_2PI (XMATH_PI*2.0f) G�>��� xmath.h 62 X #define XMATH_RADIANS_TO_BRADIANS( r ) ( (int)((r)*(65 G�>��� +536.0f/XMATH_2PI)+0.5f) ) G�?��� xmath.h 63 X #define XMATH_BRADIANS_TO_RADIANS( b ) ( (float)(b)*(X G�?��� +MATH_2PI/65536.0f) ) G�@��� xmath.h 64 X #define XMATH_DEGREES_TO_BRADIANS( d ) ( (int)((d)*(65 G�@��� +536.0f/360.0f)) & 0xffff) G�A��� xmath.h 65 X #define XMATH_BRADIANS_TO_DEGREES( r ) ( (float)(r)*(3 G�A��� +60.0f/65536.0f) ) /*PAB Arcade bug! Was 'b'*/ G�B��� xmath.h 66 X #define XMATH_NORMALIZE_BRADIANS( b ) ((b) & 0xffff) G�C��� xmath.h 67 X #define XMATH_POS2NEG_BRADIANS( b ) ( ((b)&0xffff < 32 G�C��� +768) ? ((b)&0xffff) : ((b)&0xffff)-65536 ) G�D��� xmath.h 68 X #define XMATH_NORM2NEG_BRADIANS( b ) ( ((b) < 32768) ? G�D��� + (b) : ((b)-65536) ) G�E��� xmath.h 69 X G�F��� xmath.h 70 X /* Some common angles in bradians ...*/ G�G��� xmath.h 71 X #define XMATH_1_BRADIANS ( 65536/360 ) G�H��� xmath.h 72 X #define XMATH_5_BRADIANS ( 65536/72 ) G�I��� xmath.h 73 X #define XMATH_10_BRADIANS ( 65536/36 ) G�J��� xmath.h 74 X #define XMATH_15_BRADIANS ( 65536/24 ) G�K��� xmath.h 75 X #define XMATH_25_BRADIANS ( XMATH_10_BRADIANS + G�K��� +XMATH_15_BRADIANS ) G�L��� xmath.h 76 X #define XMATH_30_BRADIANS ( 65536/12) G�M��� xmath.h 77 X #define XMATH_35_BRADIANS ( XMATH_30_BRADIANS + G�M��� +XMATH_5_BRADIANS ) G�N��� xmath.h 78 X #define XMATH_45_BRADIANS ( 65536/8 ) G�O��� xmath.h 79 X #define XMATH_60_BRADIANS ( 65536/6 ) G�P��� xmath.h 80 X #define XMATH_75_BRADIANS ( XMATH_60_BRADIANS + G�P��� +XMATH_15_BRADIANS ) G�Q��� xmath.h 81 X #define XMATH_90_BRADIANS ( 65536/4 ) G�R��� xmath.h 82 X #define XMATH_105_BRADIANS ( XMATH_90_BRADIANS + G�R��� +XMATH_15_BRADIANS ) G�S��� xmath.h 83 X #define XMATH_120_BRADIANS ( XMATH_90_BRADIANS + G�S��� +XMATH_30_BRADIANS ) G�T��� xmath.h 84 X #define XMATH_135_BRADIANS ( XMATH_90_BRADIANS + G�T��� +XMATH_45_BRADIANS ) G�U��� xmath.h 85 X #define XMATH_150_BRADIANS ( XMATH_90_BRADIANS + G�U��� +XMATH_60_BRADIANS ) G�V��� xmath.h 86 X #define XMATH_180_BRADIANS ( 65536/2 ) G�W��� xmath.h 87 X #define XMATH_225_BRADIANS ( XMATH_180_BRADIANS + G�W��� + XMATH_45_BRADIANS ) G�X��� xmath.h 88 X #define XMATH_270_BRADIANS ( (65536/4) * 3 ) G�Y��� xmath.h 89 X #define XMATH_300_BRADIANS ( XMATH_270_BRADIANS + G�Y��� + XMATH_30_BRADIANS ) G�Z��� xmath.h 90 X #define XMATH_315_BRADIANS ( XMATH_270_BRADIANS + G�Z��� + XMATH_45_BRADIANS ) G�[��� xmath.h 91 X #define XMATH_330_BRADIANS ( XMATH_315_BRADIANS + G�[��� + XMATH_15_BRADIANS ) G�\��� xmath.h 92 X #define XMATH_345_BRADIANS ( XMATH_330_BRADIANS + G�\��� + XMATH_15_BRADIANS ) G�]��� xmath.h 93 X G�^��� xmath.h 94 X /* Converison ...*/ G�_��� xmath.h 95 X #define XMATH_TIME2INT( m, s, cs ) ( (m)*6000 + ( G�_��� +s)*100 + (cs) ) G�`��� xmath.h 96 X #define XMATH_MIN_TIME ( XMAT G�`��� +H_TIME2INT( -99, 59, 99 ) ) G�a��� xmath.h 97 X #define XMATH_MAX_TIME ( XMAT G�a��� +H_TIME2INT( 99, 59, 99 ) ) G�b��� xmath.h 98 X #define XMATH_TIME2MIN( x ) ( (int G�b��� +)( (x)*(1.0f/60.0f) ) ) G�c��� xmath.h 99 X #define XMATH_TIME2SECS( x ) ( (int)( (x) ) G�c��� + ) G�d��� xmath.h 100 X #define XMATH_TIME2CSEC( x ) ( (int)( (x)*1 G�d��� +00.0f) ) G�e��� xmath.h 101 X #define XMATH_FEETPERSEC_TO_MILESPERHOUR (3600.0f/5280 G�e��� +.0f) /* Multiply by ft/sec to yield mi/hr*/ G�f��� xmath.h 102 X #define XMATH_MILESPERHOUR_TO_FEETPERSEC (5280.0f/3600 G�f��� +.0f) /* Multiply by mi/hr to yield ft/sec*/ G�g��� xmath.h 103 X #define XMATH_TRUNCATE_FLOAT( s, x ) ( ((f32)( (s32 G�g��� +)((s)*(x)) ))*(1.0f/(x)) ) /* x is assumed to be G�g��� +a multipule of 10 (eg. 10.0f, 100.0f...)*/ G�h��� xmath.h 104 X G�i��� xmath.h 105 X /* Common math macros...*/ G�j��� xmath.h 106 X #define XMATH_IABS( a ) ( (a)>=0 ? (a) : -(a) ) G�k��� xmath.h 107 X #define XMATH_FABS( a ) ( (a)>=0.0f ? (a) : -(a) ) G�l��� xmath.h 108 X #define XMATH_ISIGN( a ) ( (a)>=0 ? 1 : -1 ) G�m��� xmath.h 109 X #define XMATH_FSIGN( a ) ( (a)>=0.0f ? 1.0f : -1.0f ) G�n��� xmath.h 110 X #define XMATH_MIN( a, b ) ( (a)<(b) ? (a) : (b) ) G�o��� xmath.h 111 X #define XMATH_MAX( a, b ) ( (a)>(b) ? (a) : (b) ) G�p��� xmath.h 112 X #define XMATH_CLAMPMIN( v, min ) { if((v)<(min)) v=(mi G�p��� +n); } G�q��� xmath.h 113 X #define XMATH_CLAMPMAX( v, max ) { if((v)>(max)) v=(ma G�q��� +x); } G�r��� xmath.h 114 X #define XMATH_CLAMP( v, min, max ) { if((v)<(min)) v=( G�r��� +min); else if((v)>(max)) v=(max); } G�s��� xmath.h 115 X #define XMATH_BIPOLAR_CLAMPMIN( v, min ) { if((v)>=0) G�s��� +{ XMATH_CLAMPMIN(v,min) } else { XMATH_CLAMPMAX(v,-min G�s��� +) } } G�t��� xmath.h 116 X #define XMATH_BIPOLAR_CLAMPMAX( v, max ) { if((v)>=0) G�t��� +{ XMATH_CLAMPMAX(v,max) } else { XMATH_CLAMPMIN(v,-max G�t��� +) } } G�u��� xmath.h 117 X #define XMATH_BIPOLAR_CLAMP( v, min, max ) { if((v)>=0 G�u��� +) { XMATH_CLAMP(v,min,max) } else { XMATH_CLAMP(v,-max G�u��� +,-min) } } G�v��� xmath.h 118 X #define XMATH_FPOT( control, v0, v1 ) ( (control)*(v1) G�v��� + + (1.0f-(control))*(v0) ) G�w��� xmath.h 119 X #define XMATH_FPOTD( control, v0, dv ) ( (control)*(dv G�w��� +) + (v0) ) G�x��� xmath.h 120 X #define XMATH_ISWAP( i1, i2 ) { int tmp; tmp=i1; i1=i2 G�x��� +; i2=tmp; } G�y��� xmath.h 121 X #define XMATH_FSWAP( f1, f2 ) { float tmp; tmp=f1; f1= G�y��� +f2; f2=tmp; } G�z��� xmath.h 122 X #define XMATH_ISAMESIGN( i1, i2 ) ( ((s32)(i1) ^ (s32) G�z��� +(i2)) >= 0 ) G�{��� xmath.h 123 X #define XMATH_FSAMESIGN( f1, f2 ) ( ((*(s32 *)&(f1)) ^ G�{��� + (*(s32 *)&(f2))) >= 0 ) G�|��� xmath.h 124 X #define XMATH_MPH2KPH( fMph ) ((fMph)*(1.0f/0.621f)) G�}��� xmath.h 125 X #define XMATH_KPH2MPH( fKph ) ((fKph)*0.621f) G�~��� xmath.h 126 X #define XMATH_SQUARE( k ) ( (k) * (k) ) G�?��� xmath.h 127 X #define XMATH_CUBE( k ) ( (k) * (k) * (k) ) G�€��� xmath.h 128 X #define XMATH_SETBIT( var, bitmask ) (var |= (bitmask) G�€��� +) G���� xmath.h 129 X #define XMATH_CLEARBIT( var, bitmask ) (var &= ~(bitma G���� +sk)) G�‚��� xmath.h 130 X G�ƒ��� xmath.h 131 X /* Alignment macros...*/ G�„��� xmath.h 132 X /* Returns the adjusted address.*/ G�…��� xmath.h 133 X /* For byte alignment, alignment_byte must be a power G�…��� +of 2 that's greater than 0.*/ G�†��� xmath.h 134 X /* For bit alignment, alignment_bit must be greater th G�†��� +an or equal to 0.*/ G�‡��� xmath.h 135 X #define XMATH_BYTE_ALIGN_UP( address, alignment_byte ) G�‡��� + ( ((address) + (alignment_byte)-1) & (~((alignment_by G�‡��� +te)-1)) ) G�ˆ��� xmath.h 136 X #define XMATH_BYTE_ALIGN_DOWN( address, alignment_byte G�ˆ��� + ) ( (address) & (~((alignment_byte)-1)) ) G�‰��� xmath.h 137 X #define XMATH_BIT_ALIGN_UP( address, alignment_bit ) X G�‰��� +MATH_BYTE_ALIGN_UP( address, 1<<(alignment_bit) ) G�Š��� xmath.h 138 X #define XMATH_BIT_ALIGN_DOWN( address, alignment_bit ) G�Š��� + XMATH_BYTE_ALIGN_DOWN( address, 1<<(alignment_bit) ) G�‹��� xmath.h 139 X G�Œ��� xmath.h 140 X /* These macros provide safe handling of numbers dange G�Œ��� +rously close to zero...*/ G���� xmath.h 141 X #define XMATH_CLOSEST_TO_ZERO (1.0E-20f) G�Ž��� xmath.h 142 X #define XMATH_POS_CLOSEST_TO_ZERO XMATH_CLOSEST_TO_ZER G�Ž��� +O G���� xmath.h 143 X #define XMATH_NEG_CLOSEST_TO_ZERO (-XMATH_CLOSEST_TO_Z G���� +ERO) G���� xmath.h 144 X #define XMATH_POS_ONE_OVER_ZERO (1.0f / XMATH_POS_CLOS G���� +EST_TO_ZERO) G�‘��� xmath.h 145 X #define XMATH_NEG_ONE_OVER_ZERO (1.0f / XMATH_NEG_CLOS G�‘��� +EST_TO_ZERO) G�’��� xmath.h 146 X #define XMATH_ZERO_CLAMP(v) if((v)<XMATH_POS_CLOSEST_T G�’��� +O_ZERO && (v)>XMATH_NEG_CLOSEST_TO_ZERO) v=0.0f G�“��� xmath.h 147 X #define XMATH_SAFE_INV(v) ((v)>=XMATH_POS_CLOSEST_TO_Z G�“��� +ERO || (v)<=XMATH_NEG_CLOSEST_TO_ZERO ? 1.0f/(v) G�“��� + : ((v) G�“��� +>=0 ? XMATH_POS_ONE_OVER_ZERO : XMATH_NEG_ONE_OVER_ZER G�“��� +O)) G�•��� xmath.h 149 X #define XMATH_TOOSMALL_ASSERT(v) XASSERT((v)>=XMATH_PO G�•��� +S_CLOSEST_TO_ZERO || (v)<=XMATH_NEG_CLOSEST_TO_ZERO) G�–��� xmath.h 150 X G�—��� xmath.h 151 X G�˜��� xmath.h 152 X G�™��� xmath.h 153 X /* Return values for xmath_Fcheck()*/ G�š��� xmath.h 154 X enum XMATH_FCHECK_RESULT { G�›��� xmath.h 155 X XMATH_FCHECK_RESULT_OK = 0, /* Floating point bina G�›��� +ry format is ok*/ G�œ��� xmath.h 156 X XMATH_FCHECK_RESULT_SNAN, /* Not-a-number*/ G���� xmath.h 157 X XMATH_FCHECK_RESULT_QNAN, /* Quiet-not-a-number* G���� +/ G�ž��� xmath.h 158 X XMATH_FCHECK_RESULT_INF, /* Infinity*/ G�Ÿ��� xmath.h 159 X XMATH_FCHECK_RESULT_NINF, /* Negative infinity*/ G� ��� xmath.h 160 X XMATH_FCHECK_RESULT_DEN, /* Denormalized*/ G�¡��� xmath.h 161 X XMATH_FCHECK_RESULT_NDEN, /* Negative denormaliz G�¡��� +ed*/ G�¢��� xmath.h 162 X G�£��� xmath.h 163 X XMATH_FCHECK_RESULT_COUNT G�¤��� xmath.h 164 X }; G�¥��� xmath.h 165 X G�¦��� xmath.h 166 X /* SSP - the RangeMapping_t structure is used by the x G�¦��� +math_RangeTransfer function*/ G�§��� xmath.h 167 X typedef struct { G�¨��� xmath.h 168 X f32 fInputHigh; G�©��� xmath.h 169 X f32 fInputLow; G�ª��� xmath.h 170 X f32 fOutputHigh; G�«��� xmath.h 171 X f32 fOutputLow; G�¬��� xmath.h 172 X BOOL bInvert; G���� xmath.h 173 X }RangeMapping_t; G�®��� xmath.h 174 X G�¯��� xmath.h 175 X #if SYS_DEBUG G�°��� xmath.h 176 X #define XMATH_DEBUG_FCHECK(f) xmath_Fcheck(f) G�±��� xmath.h 177 X #else G�²��� xmath.h 178 X #define XMATH_DEBUG_FCHECK(f) G�³��� xmath.h 179 X #endif G�´��� xmath.h 180 X G�µ��� xmath.h 181 X G�¶��� xmath.h 182 X G�·��� xmath.h 183 X #if defined(__cplusplus) G�¸��� xmath.h 184 X extern "C" { G�¹��� xmath.h 185 X #endif G�º��� xmath.h 186 X G�»��� xmath.h 187 X extern f32 Xmath_Sin90Lookup[4]; G�¼��� xmath.h 188 X G�½��� xmath.h 189 X #if SYS_WINDEV_TARGET || SYS_WINLIB_TARGET G�¾��� xmath.h 190 X /* For the WinDev environment, xmath_sqrt is d G�¾��� +efined in wintap.cpp...*/ G�¿��� xmath.h 191 X extern float xmath_sqrt( float fValue ); G�À��� xmath.h 192 X #else G�Á��� xmath.h 193 X /* For the Coinop environment, xmath_sqrt is a G�Á��� +n R5000 assembly function...*/ G�Â��� xmath.h 194 X extern float xmath_sqrt( float fValue ); /* fo G�Â��� +und in sqrtf_s.s*/ G�Ã��� xmath.h 195 X #endif G�Ä��� xmath.h 196 X G�Å��� xmath.h 197 X extern BOOL xmath_ModuleInit( void ); G�Æ��� xmath.h 198 X G�Ç��� xmath.h 199 X #if XMATH_USE_FULL_SINTBL G�È��� xmath.h 200 X #include "sinfulltbl.h" G�É��� xmath.h 201 X #else G�Ê��� xmath.h 202 X #if !XMATH_USE_INTELASM_TRIG G�Ë��� xmath.h 203 X G�Ì��� xmath.h 204 X #if TARGET==ULTRA64 || TARGET==DREAMCAST /* Don G�Ì��� +'t use arcade sin table, use own version */ G�Í��� xmath.h 205 X /* N64 Sin tables! */ G�Î��� xmath.h 206 X #define SIN_TABLE_BRADIANS 8192 G�Ï��� xmath.h 207 X #define SIN_TABLE_BRADIANS_MASK (SIN_TABLE_BRA G�Ï��� +DIANS-1) G�Ð��� xmath.h 208 X extern float SinTableBradianN64[SIN_TABLE_BRAD G�Ð��� +IANS]; /* 32k */ G�Ñ��� xmath.h 209 X G�Ò��� xmath.h 210 X #define xmath_sin(nAngle) ( SinTableBrad G�Ò��� +ianN64[((int)(nAngle)>>3)&SIN_TABLE_BRADIANS_MASK] ) G�Ó��� xmath.h 211 X #define xmath_cos(nAngle) ( SinTableBrad G�Ì��� +ianN64[(((int)(nAngle)+16384)>>3)&SIN_TABLE_BRADIANS_M G�Ó��� +ASK] ) G�Ô��� xmath.h 212 X #else /*ULTRA64 */ G�Õ��� xmath.h 213 X extern float xmath_sin( int nAngle ); G�Ö��� xmath.h 214 X extern float xmath_cos( int nAngle ); G�×��� xmath.h 215 X #endif /*ULTRA64 */ G�Ø��� xmath.h 216 X G�Ù��� xmath.h 217 X #else G�Ú��� xmath.h 218 X XINLINE float xmath_sin( int nAngle ) { G�Û��� xmath.h 219 X static const float fBradiansToRadiansMult = (X G�Û��� +MATH_2PI/65536.0f); G�Ü��� xmath.h 220 X float fRetValue; G�Ý��� xmath.h 221 X G�Þ��� xmath.h 222 X __asm { G�ß��� xmath.h 223 X fild nAngle G�ß��� + ; Convert nAngle to floating point and put int G�ß��� +o ST(0) G�à��� xmath.h 224 X fmul fBradiansToRadiansMult ; Conv G�à��� +ert bradians to radians and put into ST(0) G�á��� xmath.h 225 X fsin G�á��� + ; Compute sine and put into ST(0) G�â��� xmath.h 226 X fstp fRetValue; G�ã��� xmath.h 227 X } G�ä��� xmath.h 228 X return fRetValue; G�å��� xmath.h 229 X } G�æ��� xmath.h 230 X XINLINE float xmath_cos( int nAngle ) { G�ç��� xmath.h 231 X static const float fBradiansToRadiansMult = (X G�ç��� +MATH_2PI/65536.0f); G�è��� xmath.h 232 X float fRetValue; G�é��� xmath.h 233 X G�ê��� xmath.h 234 X __asm { G�ë��� xmath.h 235 X fild nAngle G�ë��� + ; Convert nAngle to floating point and put int G�ë��� +o ST(0) G�ì��� xmath.h 236 X fmul fBradiansToRadiansMult ; Conv G�ì��� +ert bradians to radians and put into ST(0) G�í��� xmath.h 237 X fcos G�í��� + ; Compute cosine and put into ST(0) G�î��� xmath.h 238 X fstp fRetValue; G�ï��� xmath.h 239 X } G�ð��� xmath.h 240 X return fRetValue; G�ñ��� xmath.h 241 X } G�ò��� xmath.h 242 X #endif G�ó��� xmath.h 243 X #endif G�ô��� xmath.h 244 X G�õ��� xmath.h 245 X extern void xmath_sincos( int nAngle, float *pfSin, fl G�õ��� +oat *pfCos ); G�ö��� xmath.h 246 X extern int xmath_atan( float fNumeratorY, float fDenom G�ö��� +inatorX ); G�÷��� xmath.h 247 X extern u16 xmath_AngleInterpolate( u16 nAngleStart, u1 G�÷��� +6 nAngleEnd, float fUnitPercentage ); G�ø��� xmath.h 248 X extern u32 xmath_RandomInt( void ); G�ù��� xmath.h 249 X extern float xmath_RandomFloat( void ); G�ú��� xmath.h 250 X extern int xmath_RandomChoice( u32 nChoice ); G�û��� xmath.h 251 X extern int xmath_RandomRange( s32 min, s32 max ); G�ü��� xmath.h 252 X extern BOOL xmath_RandomChance( float fChanceOfSuccess G�ü��� + ); G�ý��� xmath.h 253 X extern int xmath_Log2( u32 n ); G�þ��� xmath.h 254 X extern u32 xmath_TableLookup_u32( const u32 *pnTable, G�þ��� +float fIndex, int nTableEntries ); G�ÿ��� xmath.h 255 X extern s32 xmath_TableLookup_s32( const s32 *pnTable, G�ÿ��� +float fIndex, int nTableEntries ); G����� xmath.h 256 X extern float xmath_TableLookup_f32( const f32 *pfTable G����� +, float fIndex, int nTableEntries ); G����� xmath.h 257 X extern f32 xmath_NextSin90Value ( void ); G����� xmath.h 258 X extern int xmath_Fcheck( float f ); G����� xmath.h 259 X extern f32 xmath_LimitRange( f32 fGoal, f32 fLowLimit, G����� + f32 fHighLimit ); G����� xmath.h 260 X extern f32 xmath_LimitChange( f32 fGoal, f32 fCurrent, G����� + f32 fDeltaMax ); G����� xmath.h 261 X extern f32 xmath_RangeTransfer( RangeMapping_t *pRange G����� +Mapping, f32 fInput ); G����� xmath.h 262 X extern void xmath_ConvertAFloatSecs2NumOfMinSecCSec( f G����� +32 fTime, int *pMin, int *pSecs, int *pCSecs ); G����� xmath.h 263 X extern BOOL xmath_IsFloatInARange( f32 fNum2Test, f32 G����� +fNum1, f32 fNum2 ); G����� xmath.h 264 X G� ��� xmath.h 265 X #if defined(__cplusplus) G� ��� xmath.h 266 X } G����� xmath.h 267 X #endif G����� xmath.h 268 X G� ��� xmath.h 269 #endif
audio.h
Begins at 0x3FB5110 but more fragments can be found throughout the track.
t����� audio.h 1 /*//////////////////////////////////////////////////// t����� +////////////////////////////////*/ t����� audio.h 2 /* audio.h - interface to game audio system*/ t����� audio.h 3 /**/ t����� audio.h 4 /* Author: Scott Patterson */ t����� audio.h 5 /*//////////////////////////////////////////////////// t����� +////////////////////////////////*/ t����� audio.h 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN t����� +TERTAINMENT.*/ t����� audio.h 7 /* Copyright (c) 1998*/ t����� audio.h 8 /**/ t� ��� audio.h 9 /* The contents of this file may not be disclosed to t t� ��� +hird*/ t� ��� audio.h 10 /* parties, copied or duplicated in any form, in whole t� ��� + or in part,*/ t����� audio.h 11 /* without the prior written permission of Midway Home t����� + Entertainment.*/ t����� audio.h 12 /*//////////////////////////////////////////////////// t����� +////////////////////////////////*/ t� ��� audio.h 13 /* Modification History:*/ t����� audio.h 14 /**/ t����� audio.h 15 /* Date Who Description*/ t����� audio.h 16 /* -------- ---------- ------------------------------ t����� +--------------------------------*/ t����� audio.h 17 /* 02/17/98 Patterson Created.*/ t����� audio.h 18 /*//////////////////////////////////////////////////// t����� +////////////////////////////////*/ t����� audio.h 19 #ifndef _AUDIO_H_ t����� audio.h 20 #define _AUDIO_H_ 1 t����� audio.h 21 t����� audio.h 22 #include "eurocom.h" /* PAB */ t����� audio.h 23 #include "gentypes.h" t����� audio.h 24 t����� audio.h 25 #if defined(__cplusplus) t����� audio.h 26 X extern "C" { t����� audio.h 27 #endif t����� audio.h 28 t����� audio.h 29 #define AUDIO_VOLUME_MAX 255 t����� audio.h 30 #define AUDIO_VOLUME_MIN 0 t����� audio.h 31 t� ��� audio.h 32 #define AUDIO_PAN_CENTER 127 t�!��� audio.h 33 #define AUDIO_PAN_CABINET 0 t�"��� audio.h 34 #define AUDIO_PAN_WOOFER 255 t�#��� audio.h 35 t�$��� audio.h 36 #define AUDIO_ENGINE_VOLUME_MAX 255 t�%��� audio.h 37 #define AUDIO_ENGINE_VOLUME_MIN 0 t�&��� audio.h 38 t�'��� audio.h 39 #define AUDIO_ENGINE_PAN_CENTER 127 t�(��� audio.h 40 #define AUDIO_ENGINE_PAN_CABINET 0 t�)��� audio.h 41 #define AUDIO_ENGINE_PAN_WOOFER 255 t�*��� audio.h 42 t�+��� audio.h 43 #define AUDIO_ENGINE_PITCH_MAX 255 t�,��� audio.h 44 #define AUDIO_ENGINE_PITCH_MIN 0 t�-��� audio.h 45 t�.��� audio.h 46 #define AUDIO_ENGINE_TYPE_MAIN 0 t�/��� audio.h 47 #define AUDIO_ENGINE_TYPE_DRONE1 1 t�0��� audio.h 48 #define AUDIO_ENGINE_TYPE_DRONE2 2 t�1��� audio.h 49 t�2��� audio.h 50 #define AUDIO_MASTER_VOLUME_MAX 255 t�3��� audio.h 51 #define AUDIO_MASTER_VOLUME_MIN 0 t�4��� audio.h 52 t�5��� audio.h 53 #define AUDIO_PAN_MODE_MONO 0 t�6��� audio.h 54 #define AUDIO_PAN_MODE_NORMAL 1 t�7��� audio.h 55 #define AUDIO_PAN_MODE_SWAPLR 2 t�8��� audio.h 56 t�9��� audio.h 57 enum audio_Types t�:��� audio.h 58 { t�;��� audio.h 59 AUDIO_TYPE_MUSIC, t�<��� audio.h 60 AUDIO_TYPE_AMBIENT, t�=��� audio.h 61 AUDIO_TYPE_BOOST, t�>��� audio.h 62 AUDIO_TYPE_PLUNGE, t�?��� audio.h 63 AUDIO_TYPE_COLLISION, /* res t�?��� +erved for use by scraping sounds*/ t�@��� audio.h 64 AUDIO_TYPE_GENERAL, t�A��� audio.h 65 AUDIO_TYPE_CONCURRENT_SPEECH, /* reserved fo t�A��� +r use by the audio_mgr system*/ t�B��� audio.h 66 AUDIO_TYPE_SPEECH, t�B��� + /* reserved for use by the audio_mgr system*/ t�C��� audio.h 67 AUDIO_TYPE_POWERUP, t�D��� audio.h 68 AUDIO_TYPE_BULLHORN, t�E��� audio.h 69 AUDIO_TYPE_WATERFALL, t�F��� audio.h 70 AUDIO_TYPE_SPEAKER1, /* res t�F��� +erved for use by the audio_spkr system*/ t�G��� audio.h 71 AUDIO_TYPE_SPEAKER2, /* res t�G��� +erved for use by the audio_spkr system*/ t�H��� audio.h 72 AUDIO_TYPE_SPEAKER3, /* res t�H��� +erved for use by the audio_spkr system*/ t�I��� audio.h 73 AUDIO_TYPE_WRAPPER1, /* use t�I��� +d by the wrapper system*/ t�J��� audio.h 74 AUDIO_TYPE_WRAPPER2, /* use t�J��� +d by the wrapper system*/ t�K��� audio.h 75 AUDIO_TYPE_FINISHLINE, /* use t�K��� +d for the finishline crowd*/ t�L��� audio.h 76 AUDIO_TYPE_LIGHTNING, t�M��� audio.h 77 AUDIO_TYPE_COINDROP, /* use t�M��� +d for coin drop sound*/ t�N��� audio.h 78 AUDIO_TYPE_SECRET_SOUND /* use t�N��� +d for secret boat gunning*/ t�O��� audio.h 79 }; t�P��� audio.h 80 t�Q��� audio.h 81 enum audio_Priority t�R��� audio.h 82 { t�S��� audio.h 83 AUDIO_PRIORITY_MUSIC = 127, t�T��� audio.h 84 AUDIO_PRIORITY_AMBIENT = 126, t�U��� audio.h 85 AUDIO_PRIORITY_BOOST = 121, t�V��� audio.h 86 AUDIO_PRIORITY_PLUNGE = 120, t�W��� audio.h 87 AUDIO_PRIORITY_COLLISION = 119, t�X��� audio.h 88 AUDIO_PRIORITY_GENERAL = 110, t�Y��� audio.h 89 AUDIO_PRIORITY_CONCURRENT_SPEECH = 106, t�Z��� audio.h 90 AUDIO_PRIORITY_SPEECH = 105, t�[��� audio.h 91 AUDIO_PRIORITY_POWERUP = 100, t�\��� audio.h 92 AUDIO_PRIORITY_BULLHORN = 95, t�]��� audio.h 93 AUDIO_PRIORITY_WATERFALL = 90, t�^��� audio.h 94 AUDIO_PRIORITY_SPEAKER1 = 104, t�_��� audio.h 95 AUDIO_PRIORITY_SPEAKER2 = 103, t�`��� audio.h 96 AUDIO_PRIORITY_SPEAKER3 = 102, t�a��� audio.h 97 AUDIO_PRIORITY_WRAPPER1 = 104, t�b��� audio.h 98 AUDIO_PRIORITY_WRAPPER2 = 103, t�c��� audio.h 99 AUDIO_PRIORITY_FINISHLINE = 111, t�d��� audio.h 100 AUDIO_PRIORITY_LIGHTNING = 112, t�e��� audio.h 101 AUDIO_PRIORITY_COINDROP = 113, t�f��� audio.h 102 AUDIO_PRIORITY_SECRET_SOUND = 102 t�g��� audio.h 103 }; t�h��� audio.h 104 t�i��� audio.h 105 enum audio_Bank t�j��� audio.h 106 { t�k��� audio.h 107 AUDIO_BANK_TRACK_AMAZON, t�l��� audio.h 108 AUDIO_BANK_TRACK_ARCTIC_CIRCLE, t�m��� audio.h 109 AUDIO_BANK_TRACK_LAKE_POWELL, t�n��� audio.h 110 AUDIO_BANK_TRACK_NEWYORK, t�o��� audio.h 111 AUDIO_BANK_TRACK_NILE, t�p��� audio.h 112 AUDIO_BANK_TRACK_CHINA, t�q��� audio.h 113 AUDIO_BANK_TRACK_SHIP_GRAVEYARD, t�r��� audio.h 114 AUDIO_BANK_TRACK_VENICE, t�s��� audio.h 115 AUDIO_BANK_TRACK_GREECE, t�t��� audio.h 116 AUDIO_BANK_BOAT_BANSHEE, t�u��� audio.h 117 AUDIO_BANK_BOAT_CUT_THROAT, t�v��� audio.h 118 AUDIO_BANK_BOAT_DAMN_THE_TORPEDOES, t�w��� audio.h 119 AUDIO_BANK_BOAT_MIDWAY, t�x��� audio.h 120 AUDIO_BANK_BOAT_MISS_BEHAVE, t�y��� audio.h 121 AUDIO_BANK_BOAT_RAD_HAZARD, t�z��� audio.h 122 AUDIO_BANK_BOAT_RAZORBACK, t�{��� audio.h 123 AUDIO_BANK_BOAT_TIDAL_BLADE, t�|��� audio.h 124 AUDIO_BANK_BOAT_THRESHER, t�}��� audio.h 125 AUDIO_BANK_BOAT_SECRET1, t�~��� audio.h 126 AUDIO_BANK_BOAT_SECRET2, t�?��� audio.h 127 AUDIO_BANK_BOAT_SECRET3, t�€��� audio.h 128 AUDIO_BANK_BOAT_SECRET4, t���� audio.h 129 AUDIO_BANK_WRAPPERS, t�‚��� audio.h 130 AUDIO_BANK_GAME_COMMON, t�ƒ��� audio.h 131 AUDIO_BANK_COMMON, t�„��� audio.h 132 AUDIO_BANK_DIAGNOSTIC, t�…��� audio.h 133 AUDIO_BANK_TRACK_LOOP_1, t�†��� audio.h 134 AUDIO_BANK_TRACK_LOOP_2, t�‡��� audio.h 135 AUDIO_BANK_COUNT t�ˆ��� audio.h 136 }; t�‰��� audio.h 137 t�Š��� audio.h 138 enum audio_EngineSample t�‹��� audio.h 139 { t�Œ��� audio.h 140 AUDIO_ENGINE_SAMPLE_BANSHEE_HIGH, t���� audio.h 141 AUDIO_ENGINE_SAMPLE_BANSHEE_MEDIUM, t�Ž��� audio.h 142 AUDIO_ENGINE_SAMPLE_BANSHEE_LOW, t���� audio.h 143 AUDIO_ENGINE_SAMPLE_CUT_THROAT_HIGH, t���� audio.h 144 AUDIO_ENGINE_SAMPLE_CUT_THROAT_MEDIUM, t�‘��� audio.h 145 AUDIO_ENGINE_SAMPLE_CUT_THROAT_LOW, t�’��� audio.h 146 AUDIO_ENGINE_SAMPLE_DAMN_THE_TORPEDOES_HIGH, t�“��� audio.h 147 AUDIO_ENGINE_SAMPLE_DAMN_THE_TORPEDOES_MEDIUM, t�”��� audio.h 148 AUDIO_ENGINE_SAMPLE_DAMN_THE_TORPEDOES_LOW, t�•��� audio.h 149 AUDIO_ENGINE_SAMPLE_MIDWAY_HIGH, t�–��� audio.h 150 AUDIO_ENGINE_SAMPLE_MIDWAY_MEDIUM, t�—��� audio.h 151 AUDIO_ENGINE_SAMPLE_MIDWAY_LOW, t�˜��� audio.h 152 AUDIO_ENGINE_SAMPLE_MISS_BEHAVE_HIGH, t�™��� audio.h 153 AUDIO_ENGINE_SAMPLE_MISS_BEHAVE_MEDIUM, t�š��� audio.h 154 AUDIO_ENGINE_SAMPLE_MISS_BEHAVE_LOW, t�›��� audio.h 155 AUDIO_ENGINE_SAMPLE_RAD_HAZARD_HIGH, t�œ��� audio.h 156 AUDIO_ENGINE_SAMPLE_RAD_HAZARD_MEDIUM, t���� audio.h 157 AUDIO_ENGINE_SAMPLE_RAD_HAZARD_LOW, t�ž��� audio.h 158 AUDIO_ENGINE_SAMPLE_RAZORBACK_HIGH, t�Ÿ��� audio.h 159 AUDIO_ENGINE_SAMPLE_RAZORBACK_MEDIUM, t� ��� audio.h 160 AUDIO_ENGINE_SAMPLE_RAZORBACK_LOW, t�¡��� audio.h 161 AUDIO_ENGINE_SAMPLE_TIDAL_BLADE_HIGH, t�¢��� audio.h 162 AUDIO_ENGINE_SAMPLE_TIDAL_BLADE_MEDIUM, t�£��� audio.h 163 AUDIO_ENGINE_SAMPLE_TIDAL_BLADE_LOW, t�¤��� audio.h 164 AUDIO_ENGINE_SAMPLE_THRESHER_HIGH, t�¥��� audio.h 165 AUDIO_ENGINE_SAMPLE_THRESHER_MEDIUM, t�¦��� audio.h 166 AUDIO_ENGINE_SAMPLE_THRESHER_LOW, t�§��� audio.h 167 AUDIO_ENGINE_SAMPLE_SECRET1_HIGH, t�¨��� audio.h 168 AUDIO_ENGINE_SAMPLE_SECRET1_MEDIUM, t�©��� audio.h 169 AUDIO_ENGINE_SAMPLE_SECRET1_LOW, t�ª��� audio.h 170 AUDIO_ENGINE_SAMPLE_SECRET2_HIGH, t�«��� audio.h 171 AUDIO_ENGINE_SAMPLE_SECRET2_MEDIUM, t�¬��� audio.h 172 AUDIO_ENGINE_SAMPLE_SECRET2_LOW, t���� audio.h 173 AUDIO_ENGINE_SAMPLE_SECRET3_HIGH, t�®��� audio.h 174 AUDIO_ENGINE_SAMPLE_SECRET3_MEDIUM, t�¯��� audio.h 175 AUDIO_ENGINE_SAMPLE_SECRET3_LOW, t�°��� audio.h 176 AUDIO_ENGINE_SAMPLE_SECRET4_HIGH, t�±��� audio.h 177 AUDIO_ENGINE_SAMPLE_SECRET4_MEDIUM, t�²��� audio.h 178 AUDIO_ENGINE_SAMPLE_SECRET4_LOW, t�³��� audio.h 179 AUDIO_ENGINE_SAMPLE_DRONE_A, t�´��� audio.h 180 AUDIO_ENGINE_SAMPLE_DRONE_B, t�µ��� audio.h 181 AUDIO_ENGINE_SAMPLE_DRONE_C, t�¶��� audio.h 182 AUDIO_ENGINE_SAMPLE_DRONE_D, t�·��� audio.h 183 AUDIO_ENGINE_SAMPLE_DRONE_E, t�¸��� audio.h 184 AUDIO_ENGINE_SAMPLE_DRONE_F, t�¹��� audio.h 185 AUDIO_ENGINE_SAMPLE_DRONE_G, t�º��� audio.h 186 AUDIO_ENGINE_SAMPLE_DRONE_H, t�»��� audio.h 187 AUDIO_ENGINE_SAMPLE_COUNT t�¼��� audio.h 188 }; t�½��� audio.h 189 t�¾��� audio.h 190 typedef struct { t�¿��� audio.h 191 u32 nFlags; t�À��� audio.h 192 }AudioInitParams_t; t�Á��� audio.h 193 t�Â��� audio.h 194 /* audio module init & close*/ t�Ã��� audio.h 195 E extern int audio_ModuleInit( void ); t�Ä��� audio.h 196 extern void audio_ModuleClose( void ); t�Å��� audio.h 197 t�Æ��� audio.h 198 /* audio system init & shutdown*/ t�Ç��� audio.h 199 typedef void (*AudioErrorCallbackProc)( char *errstrin t�Ç��� +g, int errnum1, int errnum2 ); t�È��� audio.h 200 t�É��� audio.h 201 extern void audio_Set_ErrorCallback( AudioErrorCallbac t�É��� +kProc errcall ); t�Ê��� audio.h 202 t�Ë��� audio.h 203 E extern int audio_Init( AudioInitParams_t *pAIP ); t�Ì��� audio.h 204 E extern int audio_Shutdown( void ); t�Í��� audio.h 205 extern void audio_Work( void ); t�Î��� audio.h 206 t�Ï��� audio.h 207 /* audio sound calls*/ t�Ð��� audio.h 208 E extern int audio_Trigger( u32 nGameID, u32 nVolum t�Ð��� +e, u32 nPan, u32 nType, u32 nPriority ); t�Ñ��� audio.h 209 E extern int audio_TriggerAndFadeIn( u32 nGameID, u t�Ñ��� +32 nDestVol, f32 fRampTime, u32 nPan, u32 nType, u32 n t�Ñ��� +Priority ); t�Ò��� audio.h 210 t�Ó��� audio.h 211 E extern int audio_GameIDFadeOutAndStop( u32 nGameI t�Ó��� +D, f32 fRampTime ); t�Ô��� audio.h 212 E extern int audio_GameIDFadeTo( u32 nGameID, u32 n t�Ô��� +DestVol, f32 fRampTime ); t�Õ��� audio.h 213 E extern int audio_GameIDPanTo( u32 nGameID, u32 nDestPa t�Õ��� +n, f32 fRampTime ); t�Ö��� audio.h 214 E extern int audio_GameIDVolume( u32 nGameID, u32 nVol ) t�Ö��� +; t�×��� audio.h 215 E extern int audio_GameIDPan( u32 nGameID, u32 nPan ); t�Ø��� audio.h 216 E extern int audio_GameIDStop( u32 nGameID ); t�Ù��� audio.h 217 t�Ú��� audio.h 218 E extern int audio_TypeFadeOutAndStop( u32 nType, f t�Ú��� +32 fRampTime ); t�Û��� audio.h 219 E extern int audio_TypeFadeTo( u32 nType, u32 nDest t�Û��� +Vol, f32 fRampTime ); t�Ü��� audio.h 220 E extern int audio_TypePanTo( u32 nType, u32 nDestPan, f t�Ü��� +32 fRampTime ); t�Ý��� audio.h 221 E extern int audio_TypeVolume( u32 nType, u32 nVol ); t�Þ��� audio.h 222 E extern int audio_TypePan( u32 nType, u32 nPan ); t�ß��� audio.h 223 E extern int audio_TypeStop( u32 nType ); t�à��� audio.h 224 t�á��� audio.h 225 E extern int audio_FadeOutAndStopAll( f32 fRampTime t�á��� + ); t�â��� audio.h 226 E extern int audio_StopAll( void ); t�ã��� audio.h 227 t�ä��� audio.h 228 /* audio status calls*/ t�å��� audio.h 229 E extern int audio_Status_GetGameIDPlaybackTime( u32 nGa t�å��� +meID, f32 *pfPlaybackTime ); t�æ��� audio.h 230 E extern int audio_Status_IsGameIDPlaying( u32 nGameID ) t�æ��� +; t�ç��� audio.h 231 E extern int audio_Status_IsTypePlaying( u32 nType ); t�è��� audio.h 232 /*extern u32 audio_Status_GetActiveBits( void ); // t�è��� + if a bit is set, that channel is active*/ t�é��� audio.h 233 E extern void audio_Status_EnableDraw( int bEnableDraw ) t�é��� +; /* enable drawing sound status lines on the hud*/ t�ê��� audio.h 234 t�ë��� audio.h 235 /* audio bank load & unload*/ t�ì��� audio.h 236 E extern int audio_LoadBank( u32 nBankNum ); t�í��� audio.h 237 extern void audio_UnloadToBank( u32 nBankNum ); t�î��� audio.h 238 extern void audio_UnloadAllBanks( void ); t�ï��� audio.h 239 extern void audio_CacheAllBanks( void ); t�ð��� audio.h 240 t�ñ��� audio.h 241 /* audio engine calls*/ t�ò��� audio.h 242 E extern int a
eorocom.h
Found at 0x3FB5A10:
������ eurocom.h 1 /***************************************************** ������ +***********************/ ������ eurocom.h 2 /* ������ eurocom.h 3 EUROCOM.H ������ eurocom.h 4 Common header file of definitions for HydroThunder ������ +/MK4DC ������ eurocom.h 5 Original Author : Mark Hetherington ������ eurocom.h 6 Created : 24 August 1998 ������ eurocom.h 7 Last Revision : 24 August 1998 ������ eurocom.h 8 Description : Defines target and other commo ������ +n defs. �� ��� eurocom.h 9 */ �� ��� eurocom.h 10 /***************************************************** �� ��� +***********************/ ������ eurocom.h 11 #ifndef _EUROCOM_H_ ������ eurocom.h 12 X #define _EUROCOM_H_ �� ��� eurocom.h 13 X /***************************************************** �� ��� +***********************/ ������ eurocom.h 14 X /* TARGET DEFINITIONS - Set compilation hardware ������ + target */ ������ eurocom.h 15 X /***************************************************** ������ +***********************/ ������ eurocom.h 16 X #define ARCADE 0 /* Specific for Hydro/MK4 if n ������ +eeded */ ������ eurocom.h 17 X #define IBMPC 1 ������ eurocom.h 18 X #define SONYPSX 2 ������ eurocom.h 19 X #define ULTRA64 3 ������ eurocom.h 20 X #define DREAMCAST 4 ������ eurocom.h 21 X #define UNKNOWN -1 /* Generate compile error on n ������ +o target defined */ ������ eurocom.h 22 X ������ eurocom.h 23 X /* N64 output string */ ������ eurocom.h 24 X #if TARGET!=DREAMCAST ������ eurocom.h 25 X #ifndef CONSOLE ������ eurocom.h 26 X #define CONSOLE ������ eurocom.h 27 X #endif ������ eurocom.h 28 X #endif // DREAMCAST ������ eurocom.h 29 X ������ eurocom.h 30 X /* ������ eurocom.h 31 X �� ��� eurocom.h 32 X TARGET must be defined on the compiler command line e. �� ��� +g. /DTARGET=2 would ��!��� eurocom.h 33 X define TARGET=SONYPSX for the compiler. (In MSVC use p ��!��� +roject options) ��"��� eurocom.h 34 X ��#��� eurocom.h 35 X To use: ��$��� eurocom.h 36 X #if TARGET==SONYPSX ��%��� eurocom.h 37 X ...some code... ��&��� eurocom.h 38 X [#elif TARGET==ULTRA64 ��'��� eurocom.h 39 X .. some more code ��(��� eurocom.h 40 X ] ��)��� eurocom.h 41 X [#else // TARGET ��*��� eurocom.h 42 X .. some more code ��+��� eurocom.h 43 X ] ��,��� eurocom.h 44 X #endif // TARGET ��-��� eurocom.h 45 X ��.��� eurocom.h 46 X ([] - Optional, Always comment #else, #endif for legib ��.��� +ility) ��/��� eurocom.h 47 X ��0��� eurocom.h 48 X TARGETSTRUCTS is defined if we are using different gam ��0��� +e structures. ��1��� eurocom.h 49 X ie. HComp needs to save data out using defines as for ��1��� +PC/ARCADE but structures are for N64 ��2��� eurocom.h 50 X So, define TARGET as UNKNOWN(ie don't care) and TARGET ��2��� +STRUCTS as ULTRA64 (or UNKNOWN for arcade/dreamcast) ��3��� eurocom.h 51 X */ ��4��� eurocom.h 52 X ��5��� eurocom.h 53 X /***************************************************** ��5��� +***********************/ ��6��� eurocom.h 54 X /* Default Target value to unknown. Generate compilati ��6��� +on error! */ ��7��� eurocom.h 55 X #ifndef TARGET ��8��� eurocom.h 56 X #define TARGET UNKNOWN ��9��� eurocom.h 57 X #endif ��:��� eurocom.h 58 X #ifndef TARGETSTRUCTS ��;��� eurocom.h 59 X #define TARGETSTRUCTS UNKNOWN ��<��� eurocom.h 60 X #endif ��=��� eurocom.h 61 X /* TARGET */ ��>��� eurocom.h 62 X /***************************************************** ��>��� +***********************/ ��?��� eurocom.h 63 X ��@��� eurocom.h 64 X #define NTSC 0 ��A��� eurocom.h 65 X #define PAL 1 ��B��� eurocom.h 66 X ��C��� eurocom.h 67 X #define USA 0 ��D��� eurocom.h 68 X #define EUROPE 1 ��E��� eurocom.h 69 X #define JAPAN 2 ��F��� eurocom.h 70 X ��G��� eurocom.h 71 X #define TERRITORY USA ��H��� eurocom.h 72 X ��I��� eurocom.h 73 X #define VIDEOTYPE NTSC ��J��� eurocom.h 74 X ��K��� eurocom.h 75 X /***************************************************** ��K��� +***********************/ ��L��� eurocom.h 76 #endif /* _EUROCOM_H_ */ ��M��� eurocom.h 77 /***************************************************** ��M��� +***********************/ ��N��� eurocom.h 78 ��O��� eurocom.h 79 extern void StartDebugTimer(void); ��P��� eurocom.h 80 extern void EndDebugTimer(void); ��Q��� eurocom.h 81 ��R��� eurocom.h 82 #define GAMMA_CORRECT_VALUE 0.75 ��R��� + /* Gamma correction value to restore N64 'colours' * ��R��� + / ��S��� eurocom.h 83 ��T��� eurocom.h 84 E #if 4==3 ��U��� eurocom.h 85 X #define SYS_PRODUCTION_BUILD ��U��� + /* More Hydro code defines... */ ��V��� eurocom.h 86 X #define ULTRA64_HARDWAREROTATION ��V��� + /* Use hardware to rotate meshes */ ��W��� eurocom.h 87 X // #define EUROCOM_SKIPWRAPPER ��W��� + /* Skip attract mode and go straight into chos ��W��� +en level(statemgr.c) */ ��X��� eurocom.h 88 X #define EUROCOM_NOTIMERS ��X��� + /* No in-game countdown timers */ ��Y��� eurocom.h 89 X #define EUROCOM_SELECTALL ��Y��� + /* Select any track/boat */ ��Z��� eurocom.h 90 X // #define EUROCOM_NODRONES ��Z��� + /* No drones */ ��[��� eurocom.h 91 X #define EUROCOM_WORLDOBWORKFUNCS ��[��� + /* Only process work functions for objects in view! ��[��� + */ ��\��� eurocom.h 92 X #define EUROCOM_SECTORSCANPHYS ��\��� + /* Scan to see if water collision mesh is inside a s ��\��� + ingle sector */ ��]��� eurocom.h 93 X #define EUROCOM_COLLSCANINVIEW ��]��� + /* Only scan collision objects in view */ ��^��� eurocom.h 94 X #define EUROCOM_PHYSSKIPHULLPOINTS ��^��� + /* Skip every other hull point */ ��_��� eurocom.h 95 X #define EUROCOM_PLAYERSPRAYONLY ��_��� + /* Just have waterspray on player boat(faster) */ ��`��� eurocom.h 96 X #define EUROCOM_DONTDRAWTRACKINGICONS /* Don ��`��� +'t draw yellow/blue tracking icons along bottom of scr ��`��� +een */ ��a��� eurocom.h 97 X // #define EUROCOM_SPLITSCREEN ��a��� + /* Split screen version - ouch!!! */ ��b��� eurocom.h 98 #endif /* ULTRA64 */ ��c��� eurocom.h 99 ��d��� eurocom.h 100 E #if 4==4 ��e��� eurocom.h 101 #define SYS_PRODUCTION_BUILD 1 ��e��� + /* More Hydro code defines... */ ��f��� eurocom.h 102 // #define EUROCOM_SKIPWRAPPER ��f��� + /* Skip attract mode and go straight into chosen lev ��f��� + el(statemgr.c) */ ��g��� eurocom.h 103 // #define EUROCOM_SELECTALL ��g��� + /* Select any track/boat */ ��h��� eurocom.h 104 ��i��� eurocom.h 105 extern int bEUROCOM_NODRONES; ��i��� + /* No drones */ ��j��� eurocom.h 106 extern int bEUROCOM_WORLDOBWORKFUNCS; ��j��� + /* Only process work functions for objects in view! ��j��� + */ ��k��� eurocom.h 107 extern int bEUROCOM_SECTORSCANPHYS; ��k��� + /* Scan to see if water collision mesh is insi ��k��� +de a single sector */ ��l��� eurocom.h 108 extern int bEUROCOM_COLLSCANINVIEW; ��l��� + /* Only scan collision objects in view */ ��m��� eurocom.h 109 extern int bEUROCOM_PHYSSKIPHULLPOINTS; ��m��� + /* Skip every other hull point */ ��n��� eurocom.h 110 extern int bEUROCOM_SPLITSCREEN; ��n��� + /* Split screen version - ouch!!! */ ��o��� eurocom.h 111 extern int bEUROCOM_NOTIMERS; ��o��� + ��p��� eurocom.h 112 ��q��� eurocom.h 113 #endif /* ULTRA64 */ ��r��� eurocom.h 114
gentypes.h
Found at 0x3FB8880:
������ gentypes.h 1 ������ gentypes.h 2 /* gentypes.h - generic types used by lots 'o hydro st ������ +uff*/ ������ gentypes.h 3 ������ gentypes.h 4 #ifndef _GENTYPES_H_ ������ gentypes.h 5 X #define _GENTYPES_H_ ������ gentypes.h 6 X ������ gentypes.h 7 X #if TARGET!=ULTRA64 /* Define s8,s16 types etc... ������ +*/ ������ gentypes.h 8 X typedef unsigned char u8; �� ��� gentypes.h 9 X typedef unsigned short u16; �� ��� gentypes.h 10 X typedef unsigned int u32; ������ gentypes.h 11 X typedef signed char s8; ������ gentypes.h 12 X typedef signed short s16; �� ��� gentypes.h 13 X typedef signed int s32; ������ gentypes.h 14 X typedef float f32; ������ gentypes.h 15 X typedef double f64; ������ gentypes.h 16 X typedef const unsigned char cu8; ������ gentypes.h 17 X typedef const unsigned short cu16; ������ gentypes.h 18 X typedef const unsigned int cu32; ������ gentypes.h 19 X typedef const signed char cs8; ������ gentypes.h 20 X typedef const signed short cs16; ������ gentypes.h 21 X typedef const signed int cs32; ������ gentypes.h 22 X typedef const float cf32; ������ gentypes.h 23 X typedef const double cf64; ������ gentypes.h 24 X #endif /*ULTRA64 */ ������ gentypes.h 25 X ������ gentypes.h 26 X typedef unsigned int uint; ������ gentypes.h 27 X typedef const char cchar; ������ gentypes.h 28 X typedef const int cint; ������ gentypes.h 29 X typedef const unsigned int cuint; ������ gentypes.h 30 X ������ gentypes.h 31 X #ifndef __NO_EXTRA_DEFINES__ �� ��� gentypes.h 32 X ��!��� gentypes.h 33 X #ifndef __NO_NULL_DEFINE__ ��"��� gentypes.h 34 X ��#��� gentypes.h 35 X #ifndef NULL ��$��� gentypes.h 36 X #define NULL 0 ��%��� gentypes.h 37 X #endif ��&��� gentypes.h 38 X ��'��� gentypes.h 39 X #endif /*__NO_EXTRA_DEFINES__*/ ��(��� gentypes.h 40 X ��)��� gentypes.h 41 X #ifndef __NO_LOGIC_DEFINES__ ��*��� gentypes.h 42 X ��+��� gentypes.h 43 X #ifndef FALSE ��,��� gentypes.h 44 X #define FALSE 0 ��-��� gentypes.h 45 X #endif ��.��� gentypes.h 46 X ��/��� gentypes.h 47 X #ifndef TRUE ��0��� gentypes.h 48 X #define TRUE 1 ��1��� gentypes.h 49 X #endif ��2��� gentypes.h 50 X ��3��� gentypes.h 51 X #endif /*__NO_LOGIC_DEFINES__*/ ��4��� gentypes.h 52 X ��5��� gentypes.h 53 X #ifndef __NO_BOOL_DEFINES__ ��6��� gentypes.h 54 X ��7��� gentypes.h 55 X #ifndef BOOL ��8��� gentypes.h 56 X #define BOOL int ��9��� gentypes.h 57 X #endif ��:��� gentypes.h 58 X ��;��� gentypes.h 59 X #ifndef BOOL8 ��<��� gentypes.h 60 X #define BOOL8 s8 ��=��� gentypes.h 61 X #endif ��>��� gentypes.h 62 X ��?��� gentypes.h 63 X #ifndef CBOOL ��@��� gentypes.h 64 X #define CBOOL const int ��A��� gentypes.h 65 X #endif ��B��� gentypes.h 66 X ��C��� gentypes.h 67 X #ifndef CBOOL8 ��D��� gentypes.h 68 X #define CBOOL8 cs8 ��E��� gentypes.h 69 X #endif ��F��� gentypes.h 70 X ��G��� gentypes.h 71 X #endif /*__NO_BOOL_DEFINES__*/ ��H��� gentypes.h 72 X ��I��� gentypes.h 73 X #endif /*__NO_EXTRA_DEFINES__*/ ��J��� gentypes.h 74 X ��K��� gentypes.h 75 X ��L��� gentypes.h 76 #endif /*_GENTYPES_H_*/ ��M��� gentypes.h 77
world.h
Begins at 0xB354CB0 but more fragments can be found throughout the track.
//////////////////////////////////////////// j����� +////////////////////////////////*/ j����� world.h 20 j����� world.h 21 #ifndef __WORLD_H__ j����� world.h 22 X #define __WORLD_H__ j����� world.h 23 X j����� world.h 24 X #include "gendefs.h" j����� world.h 25 X #include "gfxdefs.h" j����� world.h 26 X #include "mesh3d.h" j����� world.h 27 X #include "vec2.h" j����� world.h 28 X #include "linklist.h" j����� world.h 29 X #include "paths.h" j����� world.h 30 X #include "colldef.h" j����� world.h 31 X #include "fog.h" j� ��� world.h 32 X j�!��� world.h 33 X j�"��� world.h 34 X typedef enum { j�#��� world.h 35 X WORLD_INTERSECT_TYPE_WORLDOB = 0, j�$��� world.h 36 X WORLD_INTERSECT_TYPE_LIGHT, j�%��� world.h 37 X WORLD_INTERSECT_TYPE_WATERFALL, j�&��� world.h 38 X WORLD_INTERSECT_TYPE_COUNT j�'��� world.h 39 X } WorldIntersectType_t; j�(��� world.h 40 X j�)��� world.h 41 X j�*��� world.h 42 X struct _tag_WorldSector_t; j�+��� world.h 43 X typedef struct _tag_WorldSector_t WorldSector_t; j�+��� + /* _tag_WorldSector_t redefined later.*/ j�,��� world.h 44 X j�-��� world.h 45 X #include "tws.h" j�.��� world .h 185 X WORLD_EDGE_FLAG_FLARE_WATERFALL_EDGES = 0x0000 @�¹��� +0004, /* If this edge is a waterfall, flare @�¹��� +its edges */ @�º��� world.h 186 X WORLD_EDGE_FLAG_FOG_SKY = 0x00000008, @�º��� + /* If set, fog the sky (ignore @�º��� +d if pFogTable is NULL) */ @�»��� world.h 187 X @�¼��� world.h 188 X WORLD_EDGE_FLAG_NONE = 0 @�½��� world.h 189 X } WorldEdgeFlags; @�¾��� world.h 190 X @�¿��� world.h 191 X typedef struct { @�À��� world.h 192 X XZ_t start; @�Á��� world.h 193 X XZ_t dir; @�Â��� world.h 194 X float length; @�Ã��� world.h 195 X u32 water_type; /* See WorldWa @�Ã��� +terType_t for info */ @�Ä��� world.h 196 X float height; @�Å��� world.h 197 X XZ_t WaterUnitDir; /* NULL vector @�Å��� + not allowed. */ @�Æ��� world.h 198 X float fWaterSpeed; /* 0=water not @�Æ��� + moving */ @�Ç��� world.h 199 X float fWavePeriod; /* 1.0=normal, @�Ç��� + <1.0=low freq, >1.0=high freq */ @�È��� world.h 200 X int nWaveOrientation; /* (0-15) Wave rotatio @�È��� +n about world Y */ @�É��� world.h 201 X float fWaveSpeed; /* 1.0=normal, @�É��� + <1.0=slower, >1.0=faster */ @�Ê��� world.h 202 X float fWaterfallLeft; /* (0->1), 0=left edge @�Ê��� + (facing backwards, looking at waterfall) */ @�Ë��� world.h 203 X float fWaterfallRight; /* (0->1), 1=right edg @�Ë��� +e (facing backwards, looking at waterfall) */ @ +dges; /* count of PathEdge_t array*/ + /* Object starts floating on water */ @�ç��� world.h 231 X INSTANCE_FLAG_FLOATS = 0x00 @�ç��� +10, /* Object floats on water */ @�è��� world.h 232 X INSTANCE_FLAG_DRAW_REFLECTED = 0x0020, @�è��� + /* Object will be drawn reflected */ @�é��� world.h 233 X INSTANCE_FLAG_STATIONARY = 0x00 @�é��� +40, /* Object will not be moved by a collision */ @�ê��� world.h 234 X INSTANCE_FLAG_TETHER = 0x00 @�ê��� +80, /* Object will tether to its original location @�ê��� + */ @�ë��� world.h 235 X INSTANCE_FLAG_STABILIZE = 0x01 @�ë��� +00, /* Object will stabilize roll and pitch */ @�ì��� world.h 236 X INSTANCE_FLAG_UPRIGHT = 0x02 @�ì��� +00, /* Object will try to stay right side up */ @�í��� world.h 237 X INSTANCE_FLAG_AI_AVOID = 0x04 @�í��� +00, /* Ai will try to avoid this object */ @�î��� world.h 238 X INSTANCE_FLAG_FIND_PATH = 0x08 @�î��� +00, /* This object will be moved by the closest pa @�î��� +th instance */ @�ï��� world.h 239 X INSTANCE_FLAG_DRAW_AFTER_WATER = 0x1000, @�ï��� + /* This object should be drawn after water is drawn @�ï��� + */ @�ð��� world.h 240 X @�ñ��� world.h 241 X INSTANCE_FLAG_NONE @�ñ��� + = 0 @�ò��� world.h 242 X } WorldInstanceFlags; @�ó��� world.h 243 X @�ô��� world.h 244 X typedef enum { @�õ��� world.h 245 X COLLISION_TYPES_FAST = 1, @�õ��� + /* test object with the racing boats */ @�ö��� world.h 246 X COLLISION_TYPES_MEDIUM = 2, @�ö��� + /* test object with the racing boats and terrain */ @�÷��� world.h 247 X COLLISION_TYPES_POWERUPS = 3, @�÷��� + /* x z test (used for powerup objects) */ @�ø��� world.h 248 X COLLISION_TYPES_ACCURATE = 4, @�ø��� + /* test object with the racing boats, terrain, and o @�ø��� + ther collidable worldobs */ @�ù��� world.h 249 X @�ú��� world.h 250 X COLLISION_TYPES_NONE = 0 @�û��� world.h 251 X } WorldCollisionTypes; @�ü��� world.h 252 X @�ý��� world.h 253 X typedef enum { @�þ��� world.h 254 X WORLD_COLLISION_FLAG_TERRAIN = 0x00000001, @�þ��� + /* Collide this object with the terrain */ @�ÿ��� world.h 255 X @����� world.h 256 X WORLD_COLLISION_FLAG_NONE = 0x00000000 @����� world.h 257 X } WorldCollisionFlags_t; @����� world.h 258 X @����� world.h 259 X typedef enum { @����� world.h 260 X WORLD_COLLISION_CLASS_NONE, @����� + /* No object-to-object collisions for this object */ @����� world.h 261 X WORLD_COLLISION_CLASS_SIMPLE, /* Sim @����� +ple classifiction: can collide only with objects of co @����� +mplex classification */ @����� world.h 262 X WORLD_COLLISION_CLASS_COMPLEX, /* Com @����� +plex classification: can collide with objects of eithe @����� +r simple or complex class */ @����� world.h 263 X @����� world.h 264 X WORLD_COLLISION_CLASS_COUNT @� ��� world.h 265 X } WorldCollisionClass_t; @� ��� world.h 266 X @����� world.h 267 X #define WORLD_COLLISION_ID_STRING_LENGTH 4 @����� world.h 268 X @� ��� world.h 269 X typedef struct { @����� world.h 270 X Vec3_t pos; @����� + /* Initial world position */ @����� world.h 271 X u16 @����� + angle_x; /* Initial pitch (bradians) */ @����� world.h 272 X u16 @����� + angle_y; /* Initial heading (bradians) */ @����� world.h 273 X u16 @����� + angle_z; /* Initial roll (bradians) */ @����� world.h 274 X u16 @����� + flags; /* See WorldInstanceFlags */ @����� world.h 275 X u32 @����� + nCollisionType; /* See WorldCollisionTypes */ @����� world.h 276 X u16 @����� + id; /* Used to identify objects */ @����� world.h 277 X +******************************** */ @�+��� world.h 299 X /* SectorWalls_t */ @�,��� world.h 300 X @�-��� world.h 301 X typedef struct SectorWalls_s { @�.��� world.h 302 X CollTList_t CollTL @�.��� +ist; /* the @�.��� + collision wall list for this sector */ @�/��� world.h 303 X } SectorWalls_t; @�0��� world.h 304 X @�1��� world.h 305 X /***************************************************** @�1��� +******************************** */ @�2��� world.h 306 X /* SectorCollide_t */ @�3��� world.h 307 X @�4��� world.h 308 X typedef struct SectorCollide_s { @�5��� world.h 309 X SectorWalls_t SectorWalls; @�5��� + /* the collisi @�5��� +on wall list for this sector */ @�6��� world.h 310 X } SectorCollide_t; @�7��� world.h 311 X @�8��� world.h 312 X /***************************************************** @�8��� +******************************** */ @�9��� world.h 313 X /* WorldSector_t */ @�:��� world.h 314 X @�;��� world.h 315 X typedef enum { @�<��� world.h 316 X SECTOR_FLAG_NWONE = 0, @�=��� world.h 317 X SECTOR_FLAG_HIGHLIGHT = 0x00000001 @�>��� world.h 318 X } WorldSectorFlags; @�?��� world.h 319 X @�@��� world.h 320 X typedef enum { @�A��� world.h 321 X SECTOR_DIRECTION_FORWARD = 0, @�B��� world.h 322 X SECTOR_DIRECTION_REVERSE, @�C��� world.h 323 X SECTOR_DIRECTION_LEFT, @�D��� world.h 324 X SECTOR_DIRECTION_RIGHT, @�E��� world.h 325 X SECTOR_DIRECTION_COUNT @�F��� world.h 326 X } WorldSectorDirections; @�G��� world.h 327 X @�H��� world.h 328 X struct _tag_WorldSector_t { @�I��� world.h 329 X WorldEdge_t * leading_edge; @�I��� + /* Index of leading edge in ed @�I��� +ge list */ @�J��� world.h 330 X WorldEdge_t * trailing_edge; @�J��� + /* Index of trailing e @�J��� +dge in edge list. */ @�K��� world.h 331 X XZ_t forwar @�K��� +d; /* Forward vec @�K��� +tor (normalized) */ @�L��� world.h 332 X Limits_t leadin @�L��� +g_boundry; /* Glass wall */ @�M��� world.h 333 X Limits_t traili @�M��� +ng_boundry; /* Glass wall */ @�N��� world.h 334 X Limits_t leadin @�N��� +g_water; /* Water edge @�N��� +*/ @�O��� world.h 335 X Limits_t traili @�O��� +ng_water; /* Water edge @�O��� +*/ @�P��� world.h 336 X Limits_t leadin @�P��� +g_extents; /* Sector outer bounda @�P��� +ry */ @�Q��� world.h 337 X Limits_t traili @�Q��� +ng_extents; /* Sector outer bounda @�Q��� +ry */ @�R��� world.h 338 X u32 @�R��� + flags; @�R��� + /* See WorldSectorFlags */ @�S��� world.h 339 X f32 @�S��� + fractal_factor; /* fra @�S��� +ctalizing factor for auto-tessilation. */ @�T��� world.h 340 X float water_ @�T��� +opacity; /* Water Opaci @�T��� +ty magnitude */ @�U��� world.h 341 X float water_ @�U��� +reflect; /* Water Refle @�U��� +ction magnitude */ @�V��� world.h 342 X u32 @�V��� + group_count; /* Display lis @�V��� +t */ @�W��� world.h 343 X Mesh3dGrpDef_t * groups; @�X��� world.h 344 X u32 @�X��� + instance_count; @�Y��� world.h 345 X WorldInstance_t * instances; @�Z��� world.h 346 X WorldSectorList_t display[SE j�ß��� world.h 479 u32 nPathS j�ß��� +ectorChoices; /* count of PathSectorChoices_t array*/ j�à��� world.h 480 u32 nPathS j�à��� +ectorList; /* count of PathSector_t pointer array*/ j�á��� world.h 481 u32 nPathS j�á��� +ectorGroups; /* count of PathSectorGroup_t array*/ j�â��� world.h 482 u32 nPathL j�â��� +oopInstances; /* count of PathLoopInstance_t array*/ j�ã��� world.h 483 u32 nFogTa j�ã��� +bleCount; /* Number of fog tables in array pFogT j�ã��� +ables*/ j�ä��� world.h 484 j�å��� world.h 485 WorldSector_t * pSectors; j�å��� + /* pointer to start of WorldSector_t array*/ j�æ��� world.h 486 WorldEdge_t * pEdges; j�æ��� + /* pointer to start of WorldEdge_t array*/ j�ç��� world.h 487 WorldConnection_t * pConnections; /* poi j�ç��� +nter to start of WorldConnection_t array*/ j�è��� world.h 488 WorldInstance_t * pInstances; j�è��� + /* pointer to start of WorldInstance_t array*/ j�é��� world.h 489 WorldWaterfall_t * pWaterfalls; /* poi j�é��� +nter to start of WorldWaterfall_t array*/ j�ê��� world.h 490 WorldFx_t * pFxs; j�ê��� + /* pointer to start of WorldFx_t array*/ j�ë��� world.h 491 WorldCollide_tWorldCollide; /* the j�ë��� + world collision data*/ j�ì��� world.h 492 PathSector_t * pPathSector; /* poi j�ì��� +nter to start of PathSector_t array*/ j�í��� world.h 493 PathEdge_t * pPathEdge; j�í��� + /* pointer to start of PathEdge_t array*/ j�î��� world.h 494 PathSectorChoices_t *pPathSectorChoices; /* po j�î��� +inter to start of PathSectorChoices_t array*/ j�ï��� world.h 495 PathSector_t ** pPathSectorList; /* po j�ï��� +inter to start of PathSector_t pointer array*/ j�ð��� world.h 496 PathSectorGroup_t * pPathSectorGroups; /* j�ð��� +pointer to start of PathSectorGroup_t array*/ j�ñ��� world.h 497 PathLoopInstance_t *pPathLoopInstances; /* poi j�ñ��� +nter to start of PathLoopInstance_t array*/ j�ò��� world.h 498 FogTable_t *pFogTables; j�ò��� + /* Points to an array of fog tables*/ j�ó��� world.h 499 j�ô��� world.h 500 /* These lists set-up 1-to-N relationships bet j�ô��� +ween objects.*/ j�õ��� world.h 501 u32 nSecto j�õ��� +rList; /* count of WorldSector_t pointer arra j�õ��� +y*/ j�ö��� world.h 502 u32 nConne j�ö��� +ctionList; /* count of WorldSector_t pointer arra j�ö��� +y*/ j�÷��� world.h 503 j�ø��� world.h 504 WorldSector_t ** pSectorList; j�ø��� + /* pointer to start of WorldSector_t pointer array*/ j�ù��� world.h 505 WorldConnection_t** pConnectionList; j�ù��� + /* pointer to start of WorldConnection_t pointer arr j�ù��� + ay*/ j�ú��� world.h 506 j�û��� world.h 507 /* Following is the geometry*/ j�ü��� world.h 508 Mesh3d_t mesh; j�ý��� world.h 509 j�þ��� world.h 510 } World_t; j�ÿ��� world.h 511 j����� world.h 512 typedef struct { j����� world.h 513 WorldSector_t *pSector; j����� world.h 514 Vec3_t WorldPos; j����� world.h 515 } WorldPoint_t; j����� world.h 516 j����� world.h 517 E typedef void WorldTripwireCallbackFcn_t( u32 nTripwire j����� +Id, int bForward ); j����� world.h 518 j����� world.h 519 j����� world.h 520 #include "worldlt.h"
worldit.h
Found at 0xB3562E0:
p����� worldlt.h 1 /*//////////////////////////////////////////////////// p����� +////////////////////////////////*/ p����� worldlt.h 2 /* worldlt.h - World lighting module.*/ p����� worldlt.h 3 /**/ p����� worldlt.h 4 /* Author: Steve Ranck */ p����� worldlt.h 5 /*//////////////////////////////////////////////////// p����� +////////////////////////////////*/ p����� worldlt.h 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN p����� +TERTAINMENT.*/ p����� worldlt.h 7 /* Copyright (c) 1997*/ p����� worldlt.h 8 /**/ p� ��� worldlt.h 9 /* The contents of this file may not be disclosed to t p� ��� +hird*/ p� ��� worldlt.h 10 /* parties, copied or duplicated in any form, in whole p� ��� + or in part,*/ p����� worldlt.h 11 /* without the prior written permission of Midway Home p����� + Entertainment.*/ p����� worldlt.h 12 /*//////////////////////////////////////////////////// p����� +////////////////////////////////*/ p� ��� worldlt.h 13 /* Modification History:*/ p����� worldlt.h 14 /**/ p����� worldlt.h 15 /* Date Who Description*/ p����� worldlt.h 16 /* -------- ---------- ------------------------------ p����� +--------------------------------*/ p����� worldlt.h 17 /* 07/16/97 Ranck Created.*/ p����� worldlt.h 18 /*//////////////////////////////////////////////////// p����� +////////////////////////////////*/ p����� worldlt.h 19 p����� worldlt.h 20 #ifndef _WORLDLT_H_ p����� worldlt.h 21 #define _WORLDLT_H_ 1 p����� worldlt.h 22 p����� worldlt.h 23 #include "gendefs.h"
mesh3d.h
Found at 1x5F88DA1:
e�ó��� + /* private:*/ e�ô��� mesh3d.h 500 X RGBf_t ScaledColor; /* Color with e�ô��� +components multiplied by fIntensity (0.0 to 1.0)*/ e�õ��� mesh3d.h 501 X u32 nScaledOpaqueness; /* (0<<24 to 255<<24)* e�õ��� +/ e�ö��� mesh3d.h 502 X } Mesh3dAmbient_t; e�÷��� mesh3d.h 503 X e�ø��� mesh3d.h 504 X #include "light.h" e�ù��� mesh3d.h 505 X e�ú��� mesh3d.h 506 X e�û��� mesh3d.h 507 X #if MESH3D_TRI_HIGHLIGHT_CODE e�ü��� mesh3d.h 508 X /* Return code:*/ e�ý��� mesh3d.h 509 X /* FALSE: Engine should not draw this triangle nor i e�ý��� +ts wireframe.*/ e�þ��� mesh3d.h 510 X /* TRUE: Engine should draw the triangle and, if app e�þ��� +ropriate, its wireframe.*/ e�ÿ��� mesh3d.h 511 X typedef BOOL Mesh3dPolyDrawFcn_t( e����� mesh3d.h 512 X BOOL bClipped, const M e����� +esh3dMtlDef_t *pMaterial, u32 nTriIndex, e����� mesh3d.h 513 X int nNumClippedVerts, e����� +const Mesh3dVtxCache_t *apClippedVtxCache[], e����� mesh3d.h 514 X const Mesh3dVtxCache_t e����� + *apUnclippedVtxCache[3] e����� mesh3
vec2.h
Found at 1xA93C780:
.����� vec2.h 1 /***************************************************** .����� +******************************** */ .����� vec2.h 2 /* vec2.h */ .����� vec2.h 3 /* */ .����� vec2.h 4 /* Author: Steve Ranck */ .����� vec2.h 5 /***************************************************** .����� +******************************** */ .����� vec2.h 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN .����� +TERTAINMENT. */ .����� vec2.h 7 /* Copyright (c) 1997 */ .����� vec2.h 8 /* */ .� ��� vec2.h 9 /* The contents of this file may not be disclosed to t .� ��� +hird */ .� ��� vec2.h 10 /* parties, copied or duplicated in any form, in whole .� ��� + or in part, */ .����� vec2.h 11 /* without the prior written permission of Midway Home .����� + Entertainment. */ .����� vec2.h 12 /***************************************************** .����� +******************************** */ .� ��� vec2.h 13 /* Modification History: */ .����� vec2.h 14 /* */ .����� vec2.h 15 /* Date Who Description */ .����� vec2.h 16 /* -------- ---------- ---------------------- .����� +---------------------------------------- */ .����� vec2.h 17 /* 01-17-97 Ranck Created. */ .����� vec2.h 18 /**************************************************** .����� +******************************** */ .����� vec2.h 19 .����� vec2.h 20 #ifndef _VEC2_H_ .����� vec2.h 21 #define _VEC2_H_ 1 .����� vec2.h 22 .����� vec2.h 23 #include "gendefs.h"
wpr_attract.c
Found at 1xA8D62F0:
SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:23:10 PAGE 1 ************ OBJECT LISTING ************ FILE NAME: wpr_attract.c SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT wpr_attrac 1 /***************************************************** +******************************** */ wpr_attrac 2 /* wpr_attract.c - */ wpr_attrac 3 /* */ wpr_attrac 4 /* Author: Michael Starich */ wpr_attrac 5 /***************************************************** +******************************** */ wpr_attrac 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN +TERTAINMENT. */ wpr_attrac 7 /* Copyright (c) 1998 */ wpr_attrac 8 /* */ wpr_attrac 9 /* The contents of this file may not be disclosed to t +hird */ wpr_attrac 10 /* parties, copied or duplicated in any form, in whole + or in part, */ wpr_attrac 11 /* without the prior written permission of Midway Home + Entertainment. */ wpr_attrac 12 /***************************************************** +******************************** */ wpr_attrac 13 /* Modification History: */ wpr_attrac 14 /* */ wpr_attrac 15 /* Date Who Description */ wpr_attrac 16 /* -------- ---------- ------------------------------ +-------------------------------- */ wpr_attrac 17 /* 03/30/98 Starich Created. */ wpr_attrac 18 /***************************************************** +******************************** */ wpr_attrac 19 #include "gendefs.h" wpr_attrac 20 #include "wpr_attract.h" wpr_attrac 21 #include "wpr_defs.h" wpr_attrac 22 #include "gutil.h" wpr_attrac 23 #include "text.h" wpr_attrac 24 #include "controls.h" wpr_attrac 25 #include "wpr_memmgr.h" wpr_attrac 26 #include "mesh3d.h" wpr_attrac 27 #include "obsys.h" wpr_attrac 28 #include "blit.h" wpr_attrac 29 #include "tracks.h" wpr_attrac 30 #include "terrain.h" wpr_attrac 31 #include "wpr_hiscore.h" wpr_attrac 32 #include "xclib.h" wpr_attrac 33 #include "temp.h" wpr_attrac 34 #include "gameloop.h" wpr_attrac 35 #include "particle.h" wpr_attrac 36 #include "tripwire.h" wpr_attrac 37 #include "objectid.h" wpr_attrac 38 #include "fx.h" wpr_attrac 39 #include "fx_splash.h" wpr_attrac 40 #include "sky.h" wpr_attrac 41 #include "boats.h" wpr_attrac 42 #include "anim_fish.h" wpr_attrac 43 #include "hud_wrongway.h" wpr_attrac 44 #include "collide_obj.h" wpr_attrac 45 #include "waterspray.h" wpr_attrac 46 /*#include "audio_mgr.h" */ wpr_attrac 47 #include "anim_air.h" wpr_attrac 48 #include "mtx3.h" wpr_attrac 49 #include "audio.h" wpr_attrac 50 #include "soundcall.h" wpr_attrac 51 wpr_attrac 52 /*==================== */ wpr_attrac 53 /* private definitions */ wpr_attrac 54 wpr_attrac 55 #define _FLAG_TRACKDEMO 0x1 wpr_attrac 56 #define _FLAG_HISCORE 0x2 wpr_attrac 57 #define _FLAG_CREDITS 0x4 wpr_attrac 58 wpr_attrac 59 #define _FLAG_ACTIVE ( _FLAG_TRACKDEMO | _FLAG_HISC +ORE | _FLAG_CREDITS ) wpr_attrac 60 wpr_attrac 61 #define _NUM_ATTRACT_RACERS + 8 wpr_attrac 62 #define _MAX_SCREEN_AREA_SUM ( 512. +0f * 400.0f * 7.0f ) wpr_attrac 63 #define _MAX_SPRAY_PARTICLES 200 wpr_attrac 64 #define _FRAMES_TO_GET_UP_AND_RUNNING 13 wpr_attrac 65 wpr_attrac 66 typedef enum wpr_attrac 67 { wpr_attrac 68 _GAME_CAM1 = 0, wpr_attrac 69 _GAME_CAM2, wpr_attrac 70 _GAME_CAM3, wpr_attrac 71 _ESPN_CAM, wpr_attrac 72 _MOUNTED_CAM, wpr_attrac 73 _CIRCLE_CAM, wpr_attrac 74 _ESPN2_CAM, wpr_attrac 75 _ESPN3_CAM, wpr_attrac 76 _STATIONARY_CAM, wpr_attrac 77 _CHASE_CAM, wpr_attrac 78 wpr_attrac 79 _CAM_COUNT wpr_attrac 80 } CamTypes_t; wpr_attrac 81 wpr_attrac 82 typedef struct wpr_attrac 83 { wpr_attrac 84 u8 nFlags; wpr_attrac 85 u8 nNextStage; wpr_attrac 86 u8 nNextActiveStage; wpr_attrac 87 u8 nR; wpr_attrac 88 u8 nG; wpr_attrac 89 u8 nB; wpr_attrac 90 u16 nTimeInStage; /* in 60ths of a sec * +/ wpr_attrac 91 char *pszObName; wpr_attrac 92 u16 nParm1; /* track num */ wpr_attrac 93 u16 nParm2; /* start offset */ wpr_attrac 94 u16 nParm3; /* ai boat offset */ wpr_attrac 95 u16 nParm4; /* */ wpr_attrac 96 } AttractInfo_t; wpr_attrac 97 /* in demomode nParm1 = track num, nParm2 = starting p +os offset, nParm3 = ai boat type offset */ wpr_attrac 98 /* in hiscore nParm1 = 1st track num, nParm2 = 2nd tr +ack num */ wpr_attrac 99 wpr_attrac 100 /*================= */ wpr_attrac 101 /* public variables */ wpr_attrac 102 wpr_attrac 103 /*================== */ wpr_attrac 104 /* private variables */ wpr_attrac 105 wpr_attrac 106 const static AttractInfo_t _StageInfo[WPR_ATTRACT_STAG +E_COUNT] = { wpr_attrac 107 /*==================================================== +==== */ wpr_attrac 108 /* WPR_ATTRACT_ENTER */ wpr_attrac 109 0, + /* nFlags */ wpr_attrac 110 WPR_ATTRACT_STAGE_1, /* nNextStage */ wpr_attrac 111 WPR_ATTRACT_STAGE_1, /* nNextActiveStage */ wpr_attrac 112 0, 0, 255, /* nR +nG, nB */ wpr_attrac 113 300, /* nTi +meInStage */ wpr_attrac 114 "BWWLOGOAT10", /* pszObName * +/ wpr_attrac 115 0, + /* nParm1 */ wpr_attrac 116 0, + /* nParm2 */ wpr_attrac 117 0, + /* nParm3 */ wpr_attrac 118 0, + /* nParm4 */ wpr_attrac 119 /*==================================================== +==== */ wpr_attrac 120 /* WPR_ATTRACT_HYDRO_LOGO */ wpr_attrac 121 0, + /* nFlags */ wpr_attrac 122 WPR_ATTRACT_STAGE_2, /* nNextStage */ wpr_attrac 123 WPR_ATTRACT_STAGE_2, /* nNextActiveStage */ wpr_attrac 124 0, 255, 0, /* nR +nG, nB */ wpr_attrac 125 300, /* nTi +meInStage */ wpr_attrac 126 "BWWHYDRAT10", /* pszObName * +/ wpr_attrac 127 0, + /* nParm1 */ wpr_attrac 128 0, + /* nParm2 */ wpr_attrac 129 0, + /* nParm3 */ wpr_attrac 130 0, + /* nParm4 */ wpr_attrac 131 /*==================================================== +==== */ wpr_attrac 132 /* WPR_ATTRACT_3DFX_LOGO */ wpr_attrac 133 0, + /* nFlags */ wpr_attrac 134 WPR_ATTRACT_STAGE_3, /* nNextStage */ wpr_attrac 135 WPR_ATTRACT_STAGE_3, /* nNextActiveStage */ wpr_attrac 136 255, 0, 0, /* nR +nG, nB */ wpr_attrac 137 300, /* nTi +meInStage */ wpr_attrac 138 "BWW3DFXAT10", /* pszObName * +/ wpr_attrac 139 0, + /* nParm1 */ wpr_attrac 140 0, + /* nParm2 */ wpr_attrac 141 0, + /* nParm3 */ wpr_attrac 142 0, + /* nParm4 */ wpr_attrac 143 /*==================================================== +==== */ wpr_attrac 144 /* WPR_ATTRACT_HTRA_LOGO */ wpr_attrac 145 0, + /* nFlags */ wpr_attrac 146 WPR_ATTRACT_STAGE_4, /* nNextStage */ wpr_attrac 147 WPR_ATTRACT_STAGE_4, /* nNextActiveStage */ wpr_attrac 148 0, 255, 255, /* nR nG, nB * +/ wpr_attrac 149 300, /* nTi +meInStage */ wpr_attrac 150 "BWWHTRAAT10", /* pszObName * +/ wpr_attrac 151 0, + /* nParm1 */ wpr_attrac 152 0, + /* nParm2 */ wpr_attrac 153 0, + /* nParm3 */ wpr_attrac 154 0, + /* nParm4 */ wpr_attrac 155 /*==================================================== +==== */ wpr_attrac 156 /* WPR_ATTRACT_BANSHEE */ wpr_attrac 157 0, + /* nFlags */ wpr_attrac 158 WPR_ATTRACT_STAGE_5, /* nNextStage */ wpr_attrac 159 WPR_ATTRACT_STAGE_5, /* nNextActiveStage + */ wpr_attrac 160 255, 255, 0, /* nR nG, nB * +/ wpr_attrac 161 300, /* nTi +meInStage */ wpr_attrac 162 "BWWBANSAT10", /* pszObName * +/ wpr_attrac 163 0, + /* nParm1 */ wpr_attrac 164 0, + /* nParm2 */ wpr_attrac 165 0, + /* nParm3 */ wpr_attrac 166 0, + /* nParm4 */ wpr_attrac 167 /*==================================================== +==== */ wpr_attrac 168 /* WPR_ATTRACT_CUT */ wpr_attrac 169 0, + /* nFlags */ wpr_attrac 170 WPR_ATTRACT_STAGE_6, /* nNextStage */ wpr_attrac 171 WPR_ATTRACT_STAGE_6, /* nNextActiveStage */ wpr_attrac 172 255, 0, 255, /* nR nG, nB * +/ wpr_attrac 173 300, /* nTi +meInStage */ wpr_attrac 174 "BWWCUTTAT10", /* pszObName * +/ wpr_attrac 175 0, + /* nParm1 */ wpr_attrac 176 0, + /* nParm2 */ wpr_attrac 177 0, + /* nParm3 */ wpr_attrac 178 0, + /* nParm4 */ wpr_attrac 179 /*==================================================== +==== */ wpr_attrac 180 /* WPR_ATTRACT_DAMN */ wpr_attrac 181 0, + /* nFlags */ wpr_attrac 182 WPR_ATTRACT_STAGE_7, /* nNextStage + */ wpr_attrac 183 WPR_ATTRACT_STAGE_7, /* nNextActiveStage + */ wpr_attrac 184 0, 128, 128, /* nR nG, nB + */ wpr_attrac 185 300, /* nTi +meInStage */ wpr_attrac 186 "BWWDAMNAT10", /* pszObName * +/ wpr_attrac 187 0, + /* nParm1 */ wpr_attrac 188 0, + /* nParm2 */ wpr_attrac 189 0, + /* nParm3 */ wpr_attrac 190 0, + /* nParm4 */ wpr_attrac 191 /*==================================================== +==== */ wpr_attrac 192 /* WPR_ATTRACT_MISS */ wpr_attrac 193 0, + /* nFlags */ wpr_attrac 194 WPR_ATTRACT_STAGE_8, /* nNextStage + */ wpr_attrac 195 WPR_ATTRACT_STAGE_8, /* nNextActiveStage + */ wpr_attrac 196 128, 128, 0, /* nR nG, nB * +/ wpr_attrac 197 300, /* nTi +meInStage */ wpr_attrac 198 "BWWMISSAT10", /* pszObName + */ wpr_attrac 199 0, + /* nParm1 */ wpr_attrac 200 0, + /* nParm2 */ wpr_attrac 201 0, + /* nParm3 */ wpr_attrac 202 0, + /* nParm4 */ wpr_attrac 203 /*==================================================== +==== */ wpr_attrac 204 /* WPR_ATTRACT_RAD */ wpr_attrac 205 0, + /* nFlags */ wpr_attrac 206 WPR_ATTRACT_STAGE_9, /* nNextStage */ wpr_attrac 207 WPR_ATTRACT_STAGE_9, /* nNextActiveStage */ wpr_attrac 208 128, 0, 128, /* nR nG, nB * +/ wpr_attrac 209 300, /* nTi +meInStage */ wpr_attrac 210 "BWWRADHAT10", /* pszObName + */ wpr_attrac 211 0, + /* nParm1 */ wpr_attrac 212 0, + /* nParm2 */ wpr_attrac 213 0, + /* nParm3 */ wpr_attrac 214 0, + /* nParm4 */ wpr_attrac 215 /*==================================================== +==== */ wpr_attrac 216 /* WPR_ATTRACT_RAZOR */ wpr_attrac 217 E 0, /* nFl +ags */ wpr_attrac 218 WPR_ATTRACT_STAGE_10, /* nNextStage */ wpr_attrac 219 WPR_ATTRACT_STAGE_10, /* nNextActiveStage + */ wpr_attrac 220 128, 128, 128, /* nR nG, nB */ wpr_attrac 221 300, /* nTi +meInStage */ wpr_attrac 222 "BWWRAZRAT10", /* pszObName + + */ wpr_attrac 223 0, + /* nParm1 */ wpr_attrac 224 0, + /* nParm2 */ wpr_attrac 225 0, + /* nParm3 */ wpr_attrac 226 0, + /* nParm4 */ wpr_attrac 227 /*==================================================== +==== */ wpr_attrac 228 /* WPR_ATTRACT_THRESHER */ wpr_attrac 229 0, + /* nFlags */ wpr_attrac 230 WPR_ATTRACT_STAGE_11, /* nNextStage */ wpr_attrac 231 WPR_ATTRACT_STAGE_11, /* nNextActiveStage + */ wpr_attrac 232 255, 128, 64, /* nR nG, nB + */ wpr_attrac 233 300, /* nTi +meInStage */ wpr_attrac 234 "BWWTHREAT10", /* pszObName * +/ wpr_attrac 235 0, + /* nParm1 */ wpr_attrac 236 0, + /* nParm2 */ wpr_attrac 237 0, + /* nParm3 */ wpr_attrac 238 0, + /* nParm4 */ wpr_attrac 239 /*==================================================== +==== */ wpr_attrac 240 /* WPR_ATTRACT_TIDAL */ wpr_attrac 241 0, + /* nFlags */ wpr_attrac 242 WPR_ATTRACT_STAGE_12, /* nNextStage + */ wpr_attrac 243 WPR_ATTRACT_STAGE_12, /* nNextActiveStage + */ wpr_attrac 244 128, 64, 255, /* nR nG, nB + */ wpr_attrac 245 300, /* nTi +meInStage */ wpr_attrac 246 "BWWTIDAAT10", /* pszObName + + */ wpr_attrac 247 0, + /* nParm1 */ wpr_attrac 248 0, + /* nParm2 */ wpr_attrac 249 0, + /* nParm3 */ wpr_attrac 250 0, + /* nParm4 */ wpr_attrac 251 /*==================================================== +==== */ wpr_attrac 252 /* WPR_ATTRACT_DIRECTIONS1 */ wpr_attrac 253 0, + /* nFlags */ wpr_attrac 254 WPR_ATTRACT_STAGE_1, /* nNextStage + */ wpr_attrac 255 WPR_ATTRACT_STAGE_1, /* nNextActiveStage + */ wpr_attrac 256 64, 255, 128, /* nR nG, nB + */ wpr_attrac 257 300, /* nTi +meInStage */ wpr_attrac 258 "BWWDIREAT10", /* pszObName + + */ wpr_attrac 259 0, + /* nParm1 */ wpr_attrac 260 0, + /* nParm2 */ wpr_attrac 261 0, + /* nParm3 */ wpr_attrac 262 0, + /* nParm4 */ wpr_attrac 263 /*==================================================== +==== */ wpr_attrac 264 /* WPR_ATTRACT_JOIN */ wpr_attrac 265 0, + /* nFlags */ wpr_attrac 266 WPR_ATTRACT_ENTER, /* nNextStage + */ wpr_attrac 267 WPR_ATTRACT_STAGE_1, /* nNextActiveStage + */ wpr_attrac 268 0, 0, 0, + /* nR nG, nB */ wpr_attrac 269 0, + /* nTimeInStage */ wpr_attrac 270 "GWWJOINATH0", /* pszObName + */ wpr_attrac 271 0, + /* nParm1 */ wpr_attrac 272 0, + /* nParm2 */ wpr_attrac 273 0, + /* nParm3 */ wpr_attrac 274 0, + /* nParm4 */ wpr_attrac 275 wpr_attrac 276 wpr_attrac 277 /*==================================================== +==== */ wpr_attrac 278 /* WPR_ATTRACT_STAGE_1 */ wpr_attrac 279 E 0x1, /* nFlags */ wpr_attrac 280 WPR_ATTRACT_HYDRO_LOGO, /* nNextStage */ wpr_attrac 281 WPR_ATTRACT_STAGE_2, /* nNextActiveStage */ wpr_attrac 282 255, 128, 64, /* nR nG, nB * +/ wpr_attrac 283 2850, /* nTi +meInStage */ wpr_attrac 284 "H2WPWELTRH0", /* pszObName + */ wpr_attrac 285 TRACKS_LAKEPOWELL, /* nParm1 */ wpr_attrac 286 0, + /* nParm2 */ wpr_attrac 287 0, + /* nParm3 */ wpr_attrac 288 0, + /* nParm4 */ wpr_attrac 289 /*==================================================== +==== */ wpr_attrac 290 /* WPR_ATTRACT_STAGE_2 */ wpr_attrac 291 E 0x2, /* nFlags */ wpr_attrac 292 WPR_ATTRACT_3DFX_LOGO, /* nNextStage + */ wpr_attrac 293 WPR_ATTRACT_STAGE_3, /* nNextActiveStage */ wpr_attrac 294 128, 64, 32, /* nR +nG, nB */ wpr_attrac 295 1250, /* nTi +meInStage */ wpr_attrac 296 "HWTHISCTRH0", /* pszObName + */ wpr_attrac 297 TRACKS_SHIPGRAVEYARD, /* nParm1 */ wpr_attrac 298 TRACKS_AMAZON, /* nParm2 */ wpr_attrac 299 0, + /* nParm3 */ wpr_attrac 300 0, + /* nParm4 */ wpr_attrac 301 /*==================================================== +==== */ wpr_attrac 302 /* WPR_ATTRACT_STAGE_3 */ wpr_attrac 303 E 0x1, /* nFlags */ wpr_attrac 304 WPR_ATTRACT_HTRA_LOGO, /* nNextStage */ wpr_attrac 305 WPR_ATTRACT_STAGE_4, /* nNextActiveStage */ wpr_attrac 306 64, 32, 16, + /* nR nG, nB */ wpr_attrac 307 2800, /* nTi +meInStage */ wpr_attrac 308 "H1WARCTTRH0", /* pszObName + */ wpr_attrac 309 TRACKS_ARTIC, /* nParm1 */ wpr_attrac 310 0, + /* nParm2 */ wpr_attrac 311 1, + /* nParm3 */ wpr_attrac 312 0, + /* nParm4 */ wpr_attrac 313 /*==================================================== +==== */ wpr_attrac 314 /* WPR_ATTRACT_STAGE_4 */ wpr_attrac 315 E 0x2, /* nFlags */ wpr_attrac 316 WPR_ATTRACT_BANSHEE, /* nNextStage */ wpr_attrac 317 WPR_ATTRACT_STAGE_5, /* nNextActiveStage */ wpr_attrac 318 128, 255, 0, /* nR nG, nB * +/ wpr_attrac 319 1250, /* nTi +meInStage */ wpr_attrac 320 "HWTHISCTRH0", /* pszObName + */ wpr_attrac 321 TRACKS_VENICE, /* nParm1 */ wpr_attrac 322 TRACKS_LAKEPOWELL, /* nParm2 */ wpr_attrac 323 0, + /* nParm3 */ wpr_attrac 324 0, + /* nParm4 */ wpr_attrac 325 /*==================================================== +==== */ wpr_attrac 326 /* WPR_ATTRACT_STAGE_5 */ wpr_attrac 327 E 0x1, /* nFlags */ wpr_attrac 328 WPR_ATTRACT_CUT, /* nNextStage + */ wpr_attrac 329 WPR_ATTRACT_STAGE_6, /* nNextActiveStage */ wpr_attrac 330 128, 255, 255, /* nR nG, nB */ wpr_attrac 331 2950, /* nTi +meInStage */ wpr_attrac 332 "H3WAMAZTRH0", /* pszObName + */ wpr_attrac 333 TRACKS_AMAZON, /* nParm1 */ wpr_attrac 334 0, + /* nParm2 */ wpr_attrac 335 2, + /* nParm3 */ wpr_attrac 336 0, + /* nParm4 */ wpr_attrac 337 /*==================================================== +==== */ wpr_attrac 338 /* WPR_ATTRACT_STAGE_6 */ wpr_attrac 339 E 0x2, /* nFlags */ wpr_attrac 340 WPR_ATTRACT_DAMN, /* nNextStage + */ wpr_attrac 341 WPR_ATTRACT_STAGE_7, /* nNextActiveStage */ wpr_attrac 342 128, 0, 255, /* nR nG, nB + */ wpr_attrac 343 1250, /* nTi +meInStage */ wpr_attrac 344 "HWTHISCTRH0", /* pszObName + */ wpr_attrac 345 TRACKS_ARTIC, /* nParm1 */ wpr_attrac 346 TRACKS_NILE, /* nParm2 */ wpr_attrac 347 0, + /* nParm3 */ wpr_attrac 348 0, + /* nParm4 */ wpr_attrac 349 /*==================================================== +==== */ wpr_attrac 350 /* WPR_ATTRACT_STAGE_7 */ wpr_attrac 351 E 0x1, /* nFlags */ wpr_attrac 352 WPR_ATTRACT_MISS, /* nNextStage + */ wpr_attrac 353 WPR_ATTRACT_STAGE_8, /* nNextActiveStage + */ wpr_attrac 354 255, 0, 255, /* nR nG, nB + */ wpr_attrac 355 2850, /* nTi +meInStage */ wpr_attrac 356 "H2WPWELTRH0", /* pszObName + */ wpr_attrac 357 TRACKS_LAKEPOWELL, /* nParm1 */ wpr_attrac 358 0, + /* nParm2 */ wpr_attrac 359 0, + /* nParm3 */ wpr_attrac 360 0, + /* nParm4 */ wpr_attrac 361 /*==================================================== +==== */ wpr_attrac 362 /* WPR_ATTRACT_STAGE_8 */ wpr_attrac 363 E 0x2, /* nFlags + */ wpr_attrac 364 WPR_ATTRACT_RAD, /* nNextStage + */ wpr_attrac 365 WPR_ATTRACT_STAGE_9, /* nNextActiveStage + */ wpr_attrac 366 255, 0, 0, /* nR +nG, nB */ wpr_attrac 367 1250, /* nTi +meInStage */ wpr_attrac 368 "HWTHISCTRH0", /* pszObName * +/ wpr_attrac 369 TRACKS_NY, /* nPa +rm1 */ wpr_attrac 370 TRACKS_GREECE, /* nParm2 */ wpr_attrac 371 0, + /* nParm3 */ wpr_attrac 372 0, + /* nParm4 */ wpr_attrac 373 /*==================================================== +==== */ wpr_attrac 374 /* WPR_ATTRACT_STAGE_9 */ wpr_attrac 375 E 0x1, /* nFlags + */ wpr_attrac 376 WPR_ATTRACT_RAZOR, /* nNextStage + */ wpr_attrac 377 WPR_ATTRACT_STAGE_10, /* nNextActiveStage + */ wpr_attrac 378 128, 128, 0, /* nR nG, nB + */ wpr_attrac 379 2850, /* nTi +meInStage */ wpr_attrac 380 "H1WARCTTRH0", /* pszObName + */ wpr_attrac 381 TRACKS_ARTIC, /* nParm1 */ wpr_attrac 382 0, + /* nParm2 */ wpr_attrac 383 1, + /* nParm3 */ wpr_attrac 384 0, + /* nParm4 */ wpr_attrac 385 /*==================================================== +==== */ wpr_attrac 386 /* WPR_ATTRACT_STAGE_10 */ wpr_attrac 387 E 0x2, /* nFlags + */ wpr_attrac 388 WPR_ATTRACT_THRESHER, /* nNextStage + */ wpr_attrac 389 WPR_ATTRACT_STAGE_11, /* nNextActiveStage + */ wpr_attrac 390 0, 0, 255, /* nR +nG, nB */ wpr_attrac 391 1250, /* nTi +meInStage */ wpr_attrac 392 "HWTHISCTRH0", /* pszObName + */ wpr_attrac 393 TRACKS_CHINA, /* nParm1 */ wpr_attrac 394 TRACKS_VENICE, /* nParm2 */ wpr_attrac 395 0, + /* nParm3 */ wpr_attrac 396 0, + /* nParm4 */ wpr_attrac 397 /*==================================================== +==== */ wpr_attrac 398 /* WPR_ATTRACT_STAGE_11 */ wpr_attrac 399 E 0x1, /* nFlags */ wpr_attrac 400 WPR_ATTRACT_TIDAL, /* nNextStage + */ wpr_attrac 401 WPR_ATTRACT_STAGE_12, /* nNextActiveStage + */ wpr_attrac 402 128, 0, 128, /* nR nG, nB + */ wpr_attrac 403 2800, /* nTi +meInStage */ wpr_attrac 404 "H3WAMAZTRH0", /* pszObName + */ wpr_attrac 405 TRACKS_AMAZON, /* nParm1 */ wpr_attrac 406 0, + /* nParm2 */ wpr_attrac 407 2, + /* nParm3 */ wpr_attrac 408 0, + /* nParm4 */ wpr_attrac 409 /*==================================================== +==== */ wpr_attrac 410 /* WPR_ATTRACT_STAGE_12 */ wpr_attrac 411 E 0x2, /* nFlags + */ wpr_attrac 412 WPR_ATTRACT_DIRECTIONS1,/* nNextStage + */ wpr_attrac 413 WPR_ATTRACT_STAGE_1, /* nNextActiveStage + */ wpr_attrac 414 0, 128, 128, /* nR nG, nB + */ wpr_attrac 415 1250, /* nTi +meInStage */ wpr_attrac 416 "HWTHISCTRH0", /* pszObName * +/ wpr_attrac 417 TRACKS_NILE, /* nParm1 */ wpr_attrac 418 TRACKS_LAKEPOWELL, /* nParm2 */ wpr_attrac 419 0, + /* nParm3 */ wpr_attrac 420 0, + /* nParm4 */ wpr_attrac 421 }; wpr_attrac 422 wpr_attrac 423 static WprAttractStage_t _StageNum; wpr_attrac 424 static u32 _nR, _nG, _nB; wpr_attrac 425 E static int _bActive; wpr_attrac 426 E static int _bLoadOk; wpr_attrac 427 static Mesh3d_t *_pJoinNetGame; wpr_attrac 428 static u8 *_pCurStaticScreen; wpr_attrac 429 static TerrainInit_t CurWorld; wpr_attrac 430 E static int _bReleaseWorldObs = 0; wpr_attrac 431 static ControlState_t _HumanControls; wpr_attrac 432 static u32 _nFrameCount; wpr_attrac 433 wpr_attrac 434 /*=================== */ wpr_attrac 435 /* private prototypes */ wpr_attrac 436 wpr_attrac 437 static void _DrawOldTextSystem( f32 fTime ); wpr_attrac 438 E static int _InitDemoMode( u32 nTrack, char *pszObName, + u16 nStartPosOffset, u16 nAiOffSet ); wpr_attrac 439 static void _EndDemoMode( void ); wpr_attrac 440 static void _DemoModeWork( void ); wpr_attrac 441 static void _DemoModeDraw( void ); wpr_attrac 442 static void _DemoModeCamera( u32 nStageNum, u32 nMode +); wpr_attrac 443 static void _InitCam( u16 nPlayer, u16 nCamType, Vec3_ +t *pPos, u16 nAngle, u16 n2ndPlayer ); wpr_attrac 444 static void _CamWork( void ); wpr_attrac 445 static void _CamDraw( void ); wpr_attrac 446 static void _OverLayLoad( void ); wpr_attrac 447 static void _OverLayWork( void ); wpr_attrac 448 static void _OverLayDraw( void ); wpr_attrac 449 wpr_attrac 450 /*================= */ wpr_attrac 451 /* public functions */ wpr_attrac 452 wpr_attrac 453 E int wpr_attract_ModuleInit( void ) { P 00000000 _wpr_attract_ModuleInit: ; function: wpr_attra + ct_ModuleInit ; frame size=0 wpr_attrac 454 E return 1; wpr_attrac 455 } 00000000 000B RTS 00000002 E001 MOV #1,R0 wpr_attrac 456 wpr_attrac 457 /* Call when you would like to make wpr_attract the ac +tive wrapper module */ wpr_attrac 458 /* loads up no artwork but resets all variables to the +ir default values. */ wpr_attrac 459 /* only needs to be called once at the beginning of at +tract mode */ wpr_attrac 460 void wpr_attract_Init( void ) { 00000004 _wpr_attract_Init: ; function: wpr_attra + ct_Init ; frame size=12 00000004 2FE6 MOV.L R14,@-R15 wpr_attrac 461 wpr_attrac 462 E _bLoadOk = 0; 00000006 EE00 MOV #0,R14 00000008 D33F MOV.L L2562+4,R3 ; L2046 0000000A 4F22 STS.L PR,@-R15 0000000C 23E2 MOV.L R14,@R3 wpr_attrac 463 E _bActive = 0; 0000000E D23F MOV.L L2562+8,R2 ; L2045 00000010 22E2 MOV.L R14,@R2 wpr_attrac 464 _StageNum = WPR_ATTRACT_ENTER; 00000012 D13F MOV.L L2562+12,R1; L2041 wpr_attrac 465 /* clear out all old memory */ wpr_attrac 466 wpr_memmgr_FreeNonCommonStuff(); 00000014 D33F MOV.L L2562+16, + R3; _wpr_memmgr_FreeNonC + ommonStuff 00000016 430B JSR @R3 00000018 21E2 MOV.L R14,@R1 wpr_attrac 467 wpr_attrac 468 E _pJoinNetGame = 0; 0000001A D23F MOV.L L2562+20,R2; L2047 wpr_attrac 469 E _pCurStaticScreen = 0; wpr_attrac 470 E _bReleaseWorldObs = 0; wpr_attrac 471 _nFrameCount = 0; wpr_attrac 472 wpr_attrac 473 /* start the attract music */ wpr_attrac 474 E audio_Trigger( 330 , 90, 0, AUDIO_TYPE_MUSIC, +AUDIO_PRIORITY_MUSIC ); 0000001C 66E3 MOV R14,R6 0000001E 67E3 MOV R14,R7 00000020 22E2 MOV.L R14,@R2 00000022 D33E MOV.L L2562+24,R3; L2048 00000024 23E2 MOV.L R14,@R3 00000026 E37F MOV #127,R3 00000028 D13D MOV.L L2562+28,R1; L2050 0000002A 21E2 MOV.L R14,@R1 0000002C D23D MOV.L L2562+32,R2; L2052 0000002E 22E2 MOV.L R14,@R2 00000030 2F36 MOV.L R3,@-R15 00000032 9467 MOV.W L2562,R4 ; H'014A 00000034 D13C MOV.L L2562+36,R1; _audio_Trigger 00000036 410B JSR @R1 00000038 E55A MOV #90,R5 wpr_attrac 475 } 0000003A 7F04 ADD #4,R15 0000003C 4F26 LDS.L @R15+,PR 0000003E 000B RTS 00000040 6EF6 MOV.L @R15+,R14 wpr_attrac 476 wpr_attrac 477 /* call before leaving the attract module */ wpr_attrac 478 void wpr_attract_Close( void ) { 00000042 _wpr_attract_Close: ; function: wpr_attra + ct_Close ; frame size=4 wpr_attrac 479 if( _bLoadOk ) { 00000042 D431 MOV.L L2562+4,R4 ; L2046 00000044 4F22 STS.L PR,@-R15 00000046 6342 MOV.L @R4,R3 00000048 2338 TST R3,R3 0000004A 8905 BT L2393 wpr_attrac 480 E _bLoadOk = 0; wpr_attrac 481 wpr_hiscore_Close(); 0000004C D237 MOV.L L2562+40,R2; _wpr_hiscore_Close 0000004E E300 MOV #0,R3 00000050 420B JSR @R2 00000052 2432 MOV.L R3,@R4 wpr_attrac 482 _EndDemoMode(); 00000054 A43A BRA L2055 00000056 4F26 LDS.L @R15+,PR 00000058 L2393: wpr_attrac 483 } wpr_attrac 484 } 00000058 4F26 LDS.L @R15+,PR 0000005A 000B RTS 0000005C 0009 NOP wpr_attrac 485 wpr_attrac 486 /* loads a particular stage of attract mode, if we are + loading */ wpr_attrac 487 /* a static stage we release a allocated memory first, + if we are */ wpr_attrac 488 /* loading an active stage we will simply load the sta +ge and not */ wpr_attrac 489 /* free any memory. */ wpr_attrac 490 /* if the load fails, we will use the old text based s +ystem */ wpr_attrac 491 void wpr_attract_LoadStage( WprAttractStage_t StageNum + ) { 0000005E _wpr_attract_LoadStage: ; function: wpr_attra + ct_LoadStage ; frame size=32 0000005E 2FE6 MOV.L R14,@-R15 wpr_attrac 492 wpr_attrac 493 E if( (!(StageNum < WPR_ATTRACT_STAGE_COUNT)) ) +gerr_Assert( StageNum < WPR_ATTRACT_STAGE_COUNT, "wpr_ +attract.c", 493 ); 00000060 E31A MOV #26,R3 00000062 2FD6 MOV.L R13,@-R15 00000064 2FC6 MOV.L R12,@-R15 00000066 6C43 MOV R4,R12 00000068 2FB6 MOV.L R11,@-R15 0000006A 3C33 CMP/GE R3,R12 0000006C 2FA6 MOV.L R10,@-R15 0000006E 2F96 MOV.L R9,@-R15 00000070 4F22 STS.L PR,@-R15 00000072 7FFC ADD #-4,R15 00000074 8B07 BF L2394 00000076 3C33 CMP/GE R3,R12 00000078 D12E MOV.L L2562+48,R1; _gerr_Assert 0000007A 0429 MOVT R4 0000007C D52C MOV.L L2562+44,R5; L2071 0000007E 9642 MOV.W L2562+2,R6 ; H'01ED 00000080 74FF ADD #-1,R4 00000082 410B JSR @R1 00000084 644B NEG R4,R4 00000086 L2394: wpr_attrac 494 wpr_attrac 495 _nR = _StageInfo[StageNum].nR; 00000086 6EC3 MOV R12,R14 00000088 4E08 SHLL2 R14 0000008A 63C3 MOV R12,R3 0000008C 3E3C ADD R3,R14 0000008E 4E08 SHLL2 R14 00000090 DD29 MOV.L L2562+52,R13; L2022 00000092 6EEF EXTS.W R14,R14 00000094 D329 MOV.L L2562+56,R3; L2042 00000096 64E3 MOV R14,R4 00000098 34DC ADD R13,R4 0000009A 8443 MOV.B @(3,R4),R0 wpr_attrac 496 _nG = _StageInfo[StageNum].nG; wpr_attrac 497 _nB = _StageInfo[StageNum].nB; wpr_attrac 498 wpr_attrac 499 E _bLoadOk = 0; 0000009C E900 MOV #0,R9 0000009E 600C EXTU.B R0,R0 000000A0 2302 MOV.L R0,@R3 000000A2 8444 MOV.B @(4,R4),R0 000000A4 D226 MOV.L L2562+60,R2; L2043 000000A6 600C EXTU.B R0,R0 000000A8 2202 MOV.L R0,@R2 000000AA 8445 MOV.B @(5,R4),R0 000000AC D325 MOV.L L2562+64,R3; L2044 000000AE 600C EXTU.B R0,R0 000000B0 2302 MOV.L R0,@R3 000000B2 DB15 MOV.L L2562+4,R11; L2046 000000B4 2B92 MOV.L R9,@R11 wpr_attrac 500 wpr_attrac 501 /* if the requested load is not active, free a +ll memory and then load our screen */ wpr_attrac 502 E if( !(_StageInfo[StageNum].nFlags & ( 0x1 | 0x +2 | 0x4 )) ) { 000000B6 6040 MOV.B @R4,R0 000000B8 600C EXTU.B R0,R0 000000BA C807 TST #7,R0 000000BC 8F46 BF/S L2395 000000BE EA01 MOV #1,R10 wpr_attrac 503 wpr_hiscore_Close(); 000000C0 D11A MOV.L L2562+40,R1; _wpr_hiscore_Close 000000C2 410B JSR @R1 000000C4 0009 NOP wpr_attrac 504 _EndDemoMode(); 000000C6 B401 BSR L2055 000000C8 0009 NOP wpr_attrac 505 wpr_memmgr_FreeNonCommonStuff(); 000000CA D212 MOV.L L2562+16, + R2; _wpr_memmgr_FreeNonC + ommonStuff 000000CC 420B JSR @R2 000000CE 0009 NOP wpr_attrac 506 wpr_attrac 507 if( StageNum != WPR_ATTRACT_JOIN ) { 000000D0 60C3 MOV R12,R0 000000D2 0009 NOP 000000D4 880D CMP/EQ #13,R0 000000D6 890A BT L2396 wpr_attrac 508 _pCurStaticScreen = obsys_Load +( _StageInfo[StageNum].pszObName ); 000000D8 D31B MOV.L L2562+68,R3; _obsys_Load 000000DA 64E3 MOV R14,R4 000000DC 34DC ADD R13,R4 000000DE 430B JSR @R3 000000E0 5442 MOV.L @(8,R4),R4 000000E2 D20E MOV.L L2562+24,R2; L2048 wpr_attrac 509 if( _pCurStaticScreen ) { 000000E4 2008 TST R0,R0 000000E6 8D67 BT/S L2400 000000E8 2202 MOV.L R0,@R2 wpr_attrac 510 E _bLoadOk = 1; 000000EA A065 BRA L2400 000000EC 2BA2 MOV.L R10,@R11 000000EE L2396: wpr_attrac 511 } wpr_attrac 512 } else { wpr_attrac 513 /* load the join netgame stuff + */ wpr_attrac 514 _pJoinNetGame = (Mesh3d_t *)ob +sys_Load( _StageInfo[StageNum].pszObName ); 000000EE D316 MOV.L L2562+68,R3; _obsys_Load 000000F0 64E3 MOV R14,R4 000000F2 34DC ADD R13,R4 000000F4 430B JSR @R3 000000F6 5442 MOV.L @(8,R4),R4 000000F8 D207 MOV.L L2562+20,R2; L2047 wpr_attrac 515 if( _pJoinNetGame ) { 000000FA 2008 TST R0,R0 000000FC 8D5C BT/S L2400 000000FE 2202 MOV.L R0,@R2 wpr_attrac 516 E _bLoadOk = 1; 00000100 A05A BRA L2400 00000102 2BA2 MOV.L R10,@R11 00000104 L2562: 00000104 014A .DATA.W H'014A 00000106 01ED .DATA.W H'01ED 00000108 <00000000> .DATA.L L2046 0000010C <00000000> .DATA.L L2045 00000110 <00000000> .DATA.L L2041 00000114 <00000000> .DATA.L _wpr_memmgr_FreeNonCommonStuff 00000118 <00000000> .DATA.L L2047 0000011C <00000000> .DATA.L L2048 00000120 <00000000> .DATA.L L2050 00000124 <00000000> .DATA.L L2052 00000128 <00000000> .DATA.L _audio_Trigger 0000012C <00000000> .DATA.L _wpr_hiscore_Close 00000130 <00000000> .DATA.L L2071 00000134 <00000000> .DATA.L _gerr_Assert 00000138 <00000000> .DATA.L L2022 0000013C <00000000> .DATA.L L2042 00000140 <00000000> .DATA.L L2043 00000144 <00000000> .DATA.L L2044 00000148 <00000000> .DATA.L _obsys_Load 0000014C L2395: 0000014C D542 MOV.L L2563+2,R5 ; L2052 0000014E 64D3 MOV R13,R4 00000150 60E3 MOV R14,R0 00000152 0009 NOP 00000154 004C MOV.B @(R0,R4),R0 00000156 600C EXTU.B R0,R0 00000158 C802 TST #2,R0 0000015A 8911 BT L2401 wpr_attrac 517 } wpr_attrac 518 } wpr_attrac 519 } else { wpr_attrac 520 /* the the requested load is active, j +ust load it and don't free any memory */ wpr_attrac 521 wpr_attrac 522 E if( _StageInfo[StageNum].nFlags & 0x2 +) { wpr_attrac 523 _nFrameCount = 0; wpr_attrac 524 terrain_Load( _StageInfo[Stage +Num].pszObName, &CurWorld ); 0000015C 64E3 MOV R14,R4 0000015E 2592 MOV.L R9,@R5 00000160 34DC ADD R13,R4 00000162 D53E MOV.L L2563+6,R5 ; L2049 00000164 2F42 MOV.L R4,@R15 00000166 D23E MOV.L L2563+10,R2; _terrain_Load 00000168 420B JSR @R2 0000016A 5442 MOV.L @(8,R4),R4 wpr_attrac 525 E wpr_hiscore_Init( 0, _StageInf +o[StageNum].nParm1, 0.0f, 0 ); 0000016C 65F2 MOV.L @R15,R5 0000016E E600 MOV #0,R6 00000170 D33C MOV.L L2563+14,R3; _wpr_hiscore_Init 00000172 8556 MOV.W @(12,R5),R0 00000174 F48D FLDI0 FR4 00000176 650D EXTU.W R0,R5 00000178 430B JSR @R3 0000017A 6463 MOV R6,R4 wpr_attrac 526 E _bLoadOk = 1; 0000017C A01C BRA L2400 0000017E 2BA2 MOV.L R10,@R11 00000180 L2401: wpr_attrac 527 E } else if( _StageInfo[StageNum].nFlags + & 0x1 ) { 00000180 34EC ADD R14,R4 00000182 6140 MOV.B @R4,R1 00000184 611C EXTU.B R1,R1 00000186 21A8 TST R10,R1 00000188 8916 BT L2400 wpr_attrac 528 _nFrameCount = 0; wpr_attrac 529 _bLoadOk = _InitDemoMode( _Sta +geInfo[StageNum].nParm1, _StageInfo[StageNum].pszObNam +e, wpr_attrac 530 + _StageInfo[StageNum].nParm2, _StageI +nfo[StageNum].nParm3 ); 0000018A 6AE3 MOV R14,R10 0000018C 3ADC ADD R13,R10 0000018E 2592 MOV.L R9,@R5 00000190 85A8 MOV.W @(16,R10),R0 00000192 55A2 MOV.L @(8,R10),R5 00000194 6703 MOV R0,R7 00000196 85A7 MOV.W @(14,R10),R0 00000198 6603 MOV R0,R6 0000019A 85A6 MOV.W @(12,R10),R0 0000019C B206 BSR L2054 0000019E 640D EXTU.W R0,R4 wpr_attrac 531 _DemoModeCamera( StageNum, 0 ) +; 000001A0 7F04 ADD #4,R15 000001A2 2B02 MOV.L R0,@R11 000001A4 4F26 LDS.L @R15+,PR 000001A6 64C3 MOV R12,R4 000001A8 E500 MOV #0,R5 000001AA 69F6 MOV.L @R15+,R9 000001AC 6AF6 MOV.L @R15+,R10 000001AE 6BF6 MOV.L @R15+,R11 000001B0 6CF6 MOV.L @R15+,R12 000001B2 6DF6 MOV.L @R15+,R13 000001B4 A4E8 BRA L2058 000001B6 6EF6 MOV.L @R15+,R14 000001B8 L2400: wpr_attrac 532 } wpr_attrac 533 } wpr_attrac 534 wpr_attrac 535 /* switch( StageNum ) wpr_attrac 536 { wpr_attrac 537 case WPR_ATTRACT_ENTER: wpr_attrac 538 wpr_attrac 539 break; wpr_attrac 540 case WPR_ATTRACT_STAGE_1: wpr_attrac 541 wpr_attrac 542 break; wpr_attrac 543 case WPR_ATTRACT_STAGE_2: wpr_attrac 544 wpr_attrac 545 break; wpr_attrac 546 case WPR_ATTRACT_STAGE_3: wpr_attrac 547 wpr_attrac 548 break; wpr_attrac 549 case WPR_ATTRACT_STAGE_4: wpr_attrac 550 wpr_attrac 551 break; wpr_attrac 552 case WPR_ATTRACT_STAGE_5: wpr_attrac 553 wpr_attrac 554 break; wpr_attrac 555 case WPR_ATTRACT_STAGE_6: wpr_attrac 556 wpr_attrac 557 break; wpr_attrac 558 case WPR_ATTRACT_JOIN: wpr_attrac 559 wpr_attrac 560 break; wpr_attrac 561 default: wpr_attrac 562 XASSERT_NOW; wpr_attrac 563 break; wpr_attrac 564 } wpr_attrac 565 */ wpr_attrac 566 } 000001B8 7F04 ADD #4,R15 000001BA 4F26 LDS.L @R15+,PR 000001BC 69F6 MOV.L @R15+,R9 000001BE 6AF6 MOV.L @R15+,R10 000001C0 6BF6 MOV.L @R15+,R11 000001C2 6CF6 MOV.L @R15+,R12 000001C4 6DF6 MOV.L @R15+,R13 000001C6 000B RTS 000001C8 6EF6 MOV.L @R15+,R14 wpr_attrac 567 wpr_attrac 568 /* returns the current stage that attract mode is in * +/ wpr_attrac 569 WprAttractStage_t wpr_attract_GetCurrentStage( void ) +{ 000001CA _wpr_attract_GetCurrentStage: ; function: wpr_attra + ct_GetCurrentStage ; frame size=0 wpr_attrac 570 return _StageNum; 000001CA D327 MOV.L L2563+18,R3; L2041 wpr_attrac 571 } 000001CC 000B RTS 000001CE 6032 MOV.L @R3,R0 wpr_attrac 572 wpr_attrac 573 /* returns the next stage that should be loaded, activ +e or not */ wpr_attrac 574 WprAttractStage_t wpr_attract_GetNextStage( void ) { 000001D0 _wpr_attract_GetNextStage: ; function: wpr_attra + ct_GetNextStage ; frame size=0 wpr_attrac 575 wpr_attrac 576 return ( _StageInfo[_StageNum].nNextStage ); 000001D0 D225 MOV.L L2563+18,R2; L2041 000001D2 D126 MOV.L L2563+22,R1; H'00000001+L2022 000001D4 6021 MOV.W @R2,R0 000001D6 6303 MOV R0,R3 000001D8 4008 SHLL2 R0 000001DA 303C ADD R3,R0 000001DC 4008 SHLL2 R0 000001DE 600F EXTS.W R0,R0 000001E0 001C MOV.B @(R0,R1),R0 wpr_attrac 577 } 000001E2 000B RTS 000001E4 600C EXTU.B R0,R0 wpr_attrac 578 wpr_attrac 579 /* returns the number of the next ACTIVE stage */ wpr_attrac 580 WprAttractStage_t wpr_attract_GetNextActiveStage() { 000001E6 _wpr_attract_GetNextActiveStage: ; function: wpr_attra + ct_GetNextActiveStage ; frame size=0 wpr_attrac 581 wpr_attrac 582 return ( _StageInfo[_StageNum].nNextActiveStag +e ); 000001E6 D220 MOV.L L2563+18,R2; L2041 000001E8 D121 MOV.L L2563+26,R1; H22 000001EA 6021 MOV.W @R2,R0 000001EC 6303 MOV R0,R3 000001EE 4008 SHLL2 R0 000001F0 303C ADD R3,R0 000001F2 4008 SHLL2 R0 000001F4 600F EXTS.W R0,R0 000001F6 001C MOV.B @(R0,R1),R0 wpr_attrac 583 } 000001F8 000B RTS 000001FA 600C EXTU.B R0,R0 wpr_attrac 584 wpr_attrac 585 /* set the current stage */ wpr_attrac 586 void wpr_attract_SetCurrentStage( WprAttractStage_t St +ageNum ) { 000001FC _wpr_attract_SetCurrentStage: ; function: wpr_attra + ct_SetCurrentStage ; frame size=8 000001FC 2FE6 MOV.L R14,@-R15 wpr_attrac 587 wpr_attrac 588 E if( (!(StageNum < WPR_ATTRACT_STAGE_COUNT)) ) +gerr_Assert( StageNum < WPR_ATTRACT_STAGE_COUNT, "wpr_ +attract.c", 588 ); 000001FE E31A MOV #26,R3 00000200 4F22 STS.L PR,@-R15 00000202 6E43 MOV R4,R14 00000204 3E33 CMP/GE R3,R14 00000206 8B07 BF L2407 00000208 3E33 CMP/GE R3,R14 0000020A D11B MOV.L L2563+34,R1; _gerr_Assert 0000020C 0429 MOVT R4 0000020E D519 MOV.L L2563+30,R5; L2071 00000210 9621 MOV.W L2563,R6 ; H'024C 00000212 74FF ADD #-1,R4 00000214 410B JSR @R1 00000216 644B NEG R4,R4 00000218 ì�‘³���������r¹ºËúQ�Ï+6Žkª�¬€6�Š‡¹a½�ên¶€•…�ŽG{v„ÕÞÊ™� À¦Í¤àáÔ–�l0ª*w²¼j�mfubº‘(ÿ$ÈüUìujnïP1з¬ë¶íUƒ¤ ŸDFór�ú�±�öÒ=;€×ßz²l‚/¿Ó̃+Ù,uK¡æó°Ð'0™Ù±¨ùÃı%'&ý Kõç$Urk%uûQû ˆÓ1…ófˆ?nU¤ç牆Öù�÷3¢¹Î�MnlÞß ö×Ó֎Τg³TKq=�Æ[IV Ì(€Û�ç�¼vÂj9¦ßŸ�hrMåÄ/¤£V�˸ Nµ=�Rú�Ô«°Éx;½š×^–£GI®µó0k•Çô5[n¬4w1 ñ‡2b�ÿÿÿÿÿÿÿÿÿÿ�©&�� L2407: wpr_attrac 589 wpr_attrac 590 _StageNum = StageNum; 00000218 D513 MOV.L L2563+18,R5; L2041 0000021A 25E2 MOV.L R14,@R5 0000021C 60E3 MOV R14,R0 0000021E 0009 NOP 00000220 4008 SHLL2 R0 00000222 63E3 MOV R14,R3 00000224 303C ADD R3,R0 00000226 D115 MOV.L L2563+38,R1; L2022 00000228 4008 SHLL2 R0 wpr_attrac 591 _bActive = wpr_attract_IsCurrentStageActive(); 0000022A D215 MOV.L L2563+42,R2; L2045 0000022C 600F EXTS.W R0,R0 0000022E 001C MOV.B @(R0,R1),R0 00000230 E407 MOV #7,R4 wpr_attrac 592 } 00000232 4F26 LDS.L @R15+,PR 00000234 600C EXTU.B R0,R0 00000236 2409 AND R0,R4 00000238 2242 MOV.L R4,@R2 0000023A 000B RTS 0000023C 6EF6 MOV.L @R15+,R14 wpr_attrac 593 wpr_attrac 594 /* tells us whether we are currently in an active or s +tatic stage */ wpr_attrac 595 E int wpr_attract_IsCurrentStageActive( void ) { 0000023E _wpr_attract_IsCurrentStageActive: ; function: wpr_attra + ct_IsCurrentStageActi + ve ; frame size=0 wpr_attrac 596 wpr_attrac 597 E return ( _StageInfo[_StageNum].nFlags & ( 0x1 +| 0x2 | 0x4 ) ); 0000023E D10A MOV.L L2563+18,R1; L2041 00000240 D20E MOV.L L2563+38,R2; L2022 00000242 6011 MOV.W @R1,R0 00000244 6303 MOV R0,R3 00000246 4008 SHLL2 R0 00000248 303C ADD R3,R0 0000024A 4008 SHLL2 R0 0000024C 600F EXTS.W R0,R0 0000024E 002C MOV.B @(R0,R2),R0 00000250 600C EXTU.B R0,R0 wpr_attrac 598 } 00000252 000B RTS 00000254 C907 AND #7,R0 00000256 L2563: 00000256 024C .DATA.W H'024C 00000258 <00000000> .DATA.L L2052 0000025C <00000000> .DATA.L L2049 00000260 <00000000> .DATA.L _terrain_Load 00000264 <00000000> .DATA.L _wpr_hiscore_Init 00000268 <00000000> .DATA.L L2041 0000026C <00000001> .DATA.L H'00000001+L2022 00000270 <00000002> .DATA.L H'00000002+L2022 00000274 <00000000> .DATA.L L2071 00000278 <00000000> .DATA.L _gerr_Assert 0000027C <00000000> .DATA.L L2022 00000280 <00000000> .DATA.L L2045 wpr_attrac 599 wpr_attrac 600 void wpr_attract_Work( void ) { 00000284 _wpr_attract_Work: ; function: wpr_attra + ct_Work ; frame size=0 wpr_attrac 601 /* there is only work to do if we were able to + load everything that we needed */ wpr_attrac 602 if( _bLoadOk ) { 00000284 D245 MOV.L L2564+2,R2 ; L2046 00000286 6322 MOV.L @R2,R3 00000288 2338 TST R3,R3 0000028A 892F BT L2409 0000028C D144 MOV.L L2564+6,R1 ; L2041 0000028E E407 MOV #7,R4 00000290 6511 MOV.W @R1,R5 00000292 6353 MOV R5,R3 00000294 4508 SHLL2 R5 00000296 353C ADD R3,R5 00000298 D342 MOV.L L2564+10,R3; L2022 0000029A 4508 SHLL2 R5 0000029C 655F EXTS.W R5,R5 0000029E 353C ADD R3,R5 000002A0 6050 MOV.B @R5,R0 000002A2 600C EXTU.B R0,R0 000002A4 2409 AND R0,R4 000002A6 2448 TST R4,R4 000002A8 8920 BT L2409 wpr_attrac 603 /* only active screens have work to be + done... */ wpr_attrac 604 if( wpr_attract_IsCurrentStageActive() + ) { wpr_attrac 605 E if( _StageInfo[_StageNum].nFla +gs & 0x2 ) { 000002AA 6050 MOV.B @R5,R0 000002AC D43E MOV.L L2564+14,R4; L2052 000002AE 600C EXTU.B R0,R0 000002B0 C802 TST #2,R0 000002B2 8915 BT L2411 wpr_attrac 606 ++_nFrameCount; 000002B4 6242 MOV.L @R4,R2 000002B6 7201 ADD #1,R2 wpr_attrac 607 if( _nFrameCount == 29 +0 ) { 000002B8 6123 MOV R2,R1 000002BA 2422 MOV.L R2,@R4 000002BC 936D MOV.W L2564,R3 ; H'0122 000002BE 3130 CMP/EQ R3,R1 000002C0 8B0B BF L2412 wpr_attrac 608 wpr_hiscore_Sw +itchDisplay2NewTrack( _StageInfo[_StageNum].nParm2 ); 000002C2 D037 MOV.L L2564+6,R0 ; L2041 000002C4 6401 MOV.W @R0,R4 000002C6 D039 MOV.L L2564+18,R0; H'0000000E+L2022 000002C8 6243 MOV R4,R2 000002CA 4408 SHLL2 R4 000002CC 342C ADD R2,R4 000002CE D238 MOV.L L2564+22, + R2; _wpr_hiscore_SwitchD + isplay2NewTrack 000002D0 4408 SHLL2 R4 000002D2 644F EXTS.W R4,R4 000002D4 044D MOV.W @(R0,R4),R4 000002D6 422B JMP @R2 000002D8 644D EXTU.W R4,R4 000002DA L2412: wpr_attrac 609 } else { wpr_attrac 610 wpr_hiscore_Wo +rk(); 000002DA D236 MOV.L L2564+26,R2; _wpr_hiscore_Work 000002DC 422B JMP @R2 000002DE 0009 NOP 000002E0 L2411: wpr_attrac 611 } wpr_attrac 612 E } else if( _StageInfo[_StageNu +m].nFlags & 0x1 ) { 000002E0 C801 TST #1,R0 000002E2 8903 BT L2409 wpr_attrac 613 ++_nFrameCount; 000002E4 6242 MOV.L @R4,R2 000002E6 7201 ADD #1,R2 wpr_attrac 614 _DemoModeWork(); 000002E8 A32A BRA L2056 000002EA 2422 MOV.L R2,@R4 000002EC L2409: wpr_attrac 615 } wpr_attrac 616 } wpr_attrac 617 } wpr_attrac 618 } 000002EC 000B RTS 000002EE 0009 NOP wpr_attrac 619 wpr_attrac 620 void wpr_attract_Draw( f32 fTime ) { 000002F0 _wpr_attract_Draw: ; function: wpr_attra + ct_Draw ; frame size=24 000002F0 2FE6 MOV.L R14,@-R15 000002F2 2FD6 MOV.L R13,@-R15 000002F4 FFFB FMOV.S FR15,@-R15 000002F6 FFEB FMOV.S FR14,@-R15 wpr_attrac 621 if( !_bLoadOk ) { 000002F8 D128 MOV.L L2564+2,R1 ; L2046 000002FA 4F22 STS.L PR,@-R15 000002FC 6312 MOV.L @R1,R3 000002FE 2338 TST R3,R3 00000300 7FFC ADD #-4,R15 00000302 8B06 BF L2416 wpr_attrac 622 _DrawOldTextSystem( fTime ); 00000304 7F04 ADD #4,R15 00000306 4F26 LDS.L @R15+,PR 00000308 FEF9 FMOV.S @R15+,FR14 0000030A FFF9 FMOV.S @R15+,FR15 0000030C 6DF6 MOV.L @R15+,R13 0000030E A0B4 BRA L2053 00000310 6EF6 MOV.L @R15+,R14 00000312 L2416: 00000312 D323 MOV.L L2564+6,R3 ; L2041 00000314 DD23 MOV.L L2564+10,R13; L2022 00000316 6732 MOV.L @R3,R7 00000318 6073 MOV R7,R0 0000031A 0009 NOP 0000031C 4008 SHLL2 R0 0000031E 6273 MOV R7,R2 00000320 302C ADD R2,R0 00000322 4008 SHLL2 R0 00000324 600F EXTS.W R0,R0 00000326 00DC MOV.B @(R0,R13),R0 00000328 600C EXTU.B R0,R0 0000032A C907 AND #7,R0 0000032C 2F02 MOV.L R0,@R15 0000032E D322 MOV.L L2564+30,R3; L2048 00000330 D222 MOV.L L2564+34,R2; L2044 00000332 D123 MOV.L L2564+38,R1; L2043 00000334 6622 MOV.L @R2,R6 00000336 6203 MOV R0,R2 00000338 6432 MOV.L @R3,R4 0000033A 2228 TST R2,R2 0000033C 6512 MOV.L @R1,R5 0000033E D321 MOV.L L2564+42,R3; L2042 00000340 74FC ADD #-4,R4 00000342 FF8D FLDI0 FR15 00000344 8F4C BF/S L2418 00000346 6E32 MOV.L @R3,R14 wpr_attrac 623 } else { wpr_attrac 624 /* current stage is not active, just b +lit the image to the screen */ wpr_attrac 625 if( !wpr_attract_IsCurrentStageActive( +) ) { wpr_attrac 626 if( _StageNum != WPR_ATTRACT_J +OIN ) { 00000348 6073 MOV R7,R0 0000034A 0009 NOP 0000034C 880D CMP/EQ #13,R0 0000034E 8909 BT L2419 wpr_attrac 627 blit_Raw( _pCurStaticS +creen-sizeof(u32), 0, 0 ); 00000350 7F04 ADD #4,R15 00000352 D21D MOV.L L2564+46,R2; _blit_Raw 00000354 4F26 LDS.L @R15+,PR 00000356 E600 MOV #0,R6 00000358 6563 MOV R6,R5 0000035A FEF9 FMOV.S @R15+,FR14 0000035C FFF9 FMOV.S @R15+,FR15 0000035E 6DF6 MOV.L @R15+,R13 00000360 422B JMP @R2 00000362 6EF6 MOV.L @R15+,R14 00000364 L2419: wpr_attrac 628 } else { wpr_attrac 629 /* clear the frame buf +fer... */ wpr_attrac 630 gutil_ClearFrameBuffer +3( _nR, _nG, _nB ); 00000364 D219 MOV.L L2564+50, + R2; _gutil_ClearFrameBuf + fer3 00000366 420B JSR @R2 00000368 64E3 MOV R14,R4 wpr_attrac 631 wpr_attrac 632 /* draw the shadow of +the screen shot window */ wpr_attrac 633 mesh3d_SetOrthoEffects +( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); 0000036A D319 MOV.L L2564+54, + R3; _mesh3d_SetOrthoEffe + cts 0000036C FE9D FLDI1 FR14 0000036E F5EC FMOV.S FR14,FR5 00000370 F6EC FMOV.S FR14,FR6 00000372 F8FC FMOV.S FR15,FR8 00000374 F7EC FMOV.S FR14,FR7 00000376 430B JSR @R3 00000378 F4EC FMOV.S FR14,FR4 wpr_attrac 634 E mesh3d_DrawOrtho( _pJo +inNetGame, 0.0f, 0.0f, 32000.0f, 0, 1.0f ); 0000037A 7F04 ADD #4,R15 0000037C F7EC FMOV.S FR14,FR7 0000037E 4F26 LDS.L @R15+,PR 00000380 F4FC FMOV.S FR15,FR4 00000382 C714 MOVA L2564+58,R0 00000384 F5FC FMOV.S FR15,FR5 00000386 E500 MOV #0,R5 00000388 FEF9 FMOV.S @R15+,FR14 0000038A D313 MOV.L L2564+62,R3; L2047 0000038C FFF9 FMOV.S @R15+,FR15 0000038E D213 MOV.L L2564+66,R2; _mesh3d_DrawOrtho 00000390 6DF6 MOV.L @R15+,R13 00000392 F608 FMOV.S @R0,FR6 00000394 6432 MOV.L @R3,R4 00000396 422B JMP @R2 00000398 6EF6 MOV.L @R15+,R14 0000039A L2564: 0000039A 0122 .DATA.W H'0122 0000039C <00000000> .DATA.L L2046 000003A0 <00000000> .DATA.L L2041 000003A4 <00000000> .DATA.L L2022 000003A8 <00000000> .DATA.L L2052 000003AC <0000000E> .DATA.L H2022 000003B0 <00000000> .DATA.L _wpr_hiscore_SwitchDisplay2NewTr + ack 000003B4 <00000000> .DATA.L _wpr_hiscore_Work 000003B8 <00000000> .DATA.L L2048 000003BC <00000000> .DATA.L L2044 000003C0 <00000000> .DATA.L L2043 000003C4 <00000000> .DATA.L L2042 000003C8 <00000000> .DATA.L _blit_Raw 000003CC <00000000> .DATA.L _gutil_ClearFrameBuffer3 000003D0 <00000000> .DATA.L _mesh3d_SetOrthoEffects 000003D4 46FA0000 .DATA.L H'46FA0000 000003D8 <00000000> .DATA.L L2047 000003DC <00000000> .DATA.L _mesh3d_DrawOrtho 000003E0 L2418: wpr_attrac 635 } wpr_attrac 636 } else { /* the current stage i +s active... */ wpr_attrac 637 /* let hiscore draw its stuff +if it is the active stage */ wpr_attrac 638 E if( _StageInfo[_StageNum].nFla +gs & 0x2 ) { 000003E0 6073 MOV R7,R0 000003E2 0009 NOP 000003E4 4008 SHLL2 R0 000003E6 6273 MOV R7,R2 000003E8 302C ADD R2,R0 000003EA 4008 SHLL2 R0 000003EC 600F EXTS.W R0,R0 000003EE 00DC MOV.B @(R0,R13),R0 000003F0 600C EXTU.B R0,R0 000003F2 C802 TST #2,R0 000003F4 8908 BT L2422 wpr_attrac 639 wpr_hiscore_Draw( 0.0f + ); 000003F6 7F04 ADD #4,R15 000003F8 F4FC FMOV.S FR15,FR4 000003FA 4F26 LDS.L @R15+,PR 000003FC D24F MOV.L L2565,R2 ; _wpr_hiscore_Draw 000003FE FEF9 FMOV.S @R15+,FR14 00000400 FFF9 FMOV.S @R15+,FR15 00000402 6DF6 MOV.L @R15+,R13 00000404 422B JMP @R2 00000406 6EF6 MOV.L @R15+,R14 00000408 L2422: wpr_attrac 640 E } else if( _StageInfo[_StageNu +m].nFlags & 0x1 ) { 00000408 6073 MOV R7,R0 0000040A 0009 NOP 0000040C 4008 SHLL2 R0 0000040E 6273 MOV R7,R2 00000410 302C ADD R2,R0 00000412 4008 SHLL2 R0 00000414 600F EXTS.W R0,R0 00000416 00DC MOV.B @(R0,R13),R0 00000418 600C EXTU.B R0,R0 0000041A C801 TST #1,R0 0000041C 8919 BT L2424 wpr_attrac 641 /* just draw the last +static screen until we are up and running... */ wpr_attrac 642 E if( _nFrameCount < 13 +) { 0000041E D348 MOV.L L2565+4,R3 ; L2052 00000420 E20D MOV #13,R2 00000422 6032 MOV.L @R3,R0 00000424 3022 CMP/HS R2,R0 00000426 890D BT L2425 wpr_attrac 643 blit_Raw( _pCu +rStaticScreen-sizeof(u32), 0, 0 ); 00000428 D346 MOV.L 0000042A E600 MOV #0,R6 0000042C 430B JSR @R3 0000042E 6563 MOV R6,R5 wpr_attrac 644 _DemoModeCamer +a( _StageNum, 2 ); 00000430 7F04 ADD #4,R15 00000432 D245 MOV.L L2565+12,R2; L2041 00000434 4F26 LDS.L @R15+,PR 00000436 6422 MOV.L @R2,R4 00000438 E502 MOV #2,R5 0000043A FEF9 FMOV.S @R15+,FR14 0000043C FFF9 FMOV.S @R15+,FR15 0000043E 6DF6 MOV.L @R15+,R13 00000440 A3A2 BRA L2058 00000442 6EF6 MOV.L @R15+,R14 00000444 L2425: wpr_attrac 645 } else { wpr_attrac 646 _DemoModeDraw( +); 00000444 7F04 ADD #4,R15 00000446 4F26 LDS.L @R15+,PR 00000448 FEF9 FMOV.S @R15+,FR14 0000044A FFF9 FMOV.S @R15+,FR15 0000044C 6DF6 MOV.L @R15+,R13 0000044E A335 BRA L2057 00000450 6EF6 MOV.L @R15+,R14 00000452 L2424: wpr_attrac 647 } wpr_attrac 648 } else { wpr_attrac 649 /* clear the frame buf +fer... */ wpr_attrac 650 gutil_ClearFrameBuffer +3( _nR, _nG, _nB ); 00000452 7F04 ADD #4,R15 00000454 D23D MOV.L L2565+16, + R2; _gutil_ClearFrameBuf + fer3 00000456 4F26 LDS.L @R15+,PR 00000458 64E3 MOV R14,R4 0000045A FEF9 FMOV.S @R15+,FR14 0000045C FFF9 FMOV.S @R15+,FR15 0000045E 6DF6 MOV.L @R15+,R13 00000460 422B JMP @R2 00000462 6EF6 MOV.L @R15+,R14 wpr_attrac 651 } wpr_attrac 652 } wpr_attrac 653 } wpr_attrac 654 } wpr_attrac 655 wpr_attrac 656 u32 wpr_attract_GetCurrentStageTimeLimit( void ) { 00000464 _wpr_attract_GetCurrentStageTimeLimit: ; function: wpr_attra + ct_GetCurrentStageTim + eLimit ; frame size=0 wpr_attrac 657 wpr_attrac 658 return ( _StageInfo[_StageNum].nTimeInStage ); 00000464 D238 MOV.L L2565+12,R2; L2041 00000466 D13A MOV.L L2565+20,R1; H'00000006+L2022 00000468 6021 MOV.W @R2,R0 0000046A 6303 MOV R0,R3 0000046C 4008 SHLL2 R0 0000046E 303C ADD R3,R0 00000470 4008 SHLL2 R0 00000472 600F EXTS.W R0,R0 00000474 001D MOV.W @(R0,R1),R0 wpr_attrac 659 } 00000476 000B RTS 00000478 600D EXTU.W R0,R0 wpr_attrac 660 wpr_attrac 661 /*================== */ wpr_attrac 662 /* private functions */ wpr_attrac 663 wpr_attrac 664 static void _DrawOldTextSystem( f32 fTime ) { 0000047A L2053: ; function: _DrawOldT + extSystem ; frame size=32 0000047A 2FE6 MOV.L R14,@-R15 0000047C 2FD6 MOV.L R13,@-R15 0000047E 2FC6 MOV.L R12,@-R15 00000480 FFFB FMOV.S FR15,@-R15 00000482 4F22 STS.L PR,@-R15 00000484 7FFC ADD #-4,R15 00000486 FF4A FMOV.S FR4,@R15 wpr_attrac 665 /* clear the frame buffer */ wpr_attrac 666 gutil_ClearFrameBuffer3( _nR, _nG, _nB ); 00000488 D332 MOV.L L2565+24,R3; L2044 0000048A D233 MOV.L L2565+28,R2; L2043 0000048C 6632 MOV.L @R3,R6 0000048E 6522 MOV.L @R2,R5 00000490 D132 MOV.L L2565+32,R1; L2042 00000492 D32E MOV.L L2565+16, + R3; _gutil_ClearFrameBuf + fer3 00000494 430B JSR @R3 00000496 6412 MOV.L @R1,R4 wpr_attrac 667 wpr_attrac 668 /* for join mode, draw something a little diff +erent */ wpr_attrac 669 if( _StageNum == WPR_ATTRACT_JOIN ) { 00000498 D22B MOV.L L2565+12,R2; L2041 0000049A DE33 MOV.L L2565+44,R14; _text_SetFont 0000049C 6022 MOV.L @R2,R0 0000049E DC30 MOV.L L2565+36,R12; _text_PrintStr 000004A0 DD30 MOV.L L2565+40,R13; _Text_fScale 000004A2 880D CMP/EQ #13,R0 000004A4 8B0D BF L2429 wpr_attrac 670 text_SetFont( TEXT_FONT_LARGE ); 000004A6 4E0B JSR @R14 000004A8 E400 MOV #0,R4 wpr_attrac 671 Text_fScale = 1.25f; 000004AA C730 MOVA L2565+48,R0 000004AC F308 FMOV.S @R0,FR3 wpr_attrac 672 text_PrintStr( 75.0f, 150.0f, "Join Ne +twork Game\n" ); 000004AE C731 MOVA L2565+56,R0 000004B0 FD3A FMOV.S FR3,@R13 000004B2 F508 FMOV.S @R0,FR5 000004B4 C730 MOVA L2565+60,R0 000004B6 D42E MOV.L L2565+52,R4; L2110 000004B8 4C0B JSR @R12 000004BA F408 FMOV.S @R0,FR4 wpr_attrac 673 Text_fScale = 1.0f; 000004BC F39D FLDI1 FR3 000004BE A036 BRA L2430 000004C0 FD3A FMOV.S FR3,@R13 000004C2 L2429: wpr_attrac 674 } else { /* all other stages... */ wpr_attrac 675 /* draw the stage number */ wpr_attrac 676 text_SetFont( TEXT_FONT_LARGE ); 000004C2 4E0B JSR @R14 000004C4 E400 MOV #0,R4 wpr_attrac 677 Text_fScale = 1.20f; 000004C6 C72D MOVA L2565+64,R0 000004C8 F308 FMOV.S @R0,FR3 wpr_attrac 678 text_PrintStr( 25.0f, 15.0f, "ATTRACT +MODE\n" ); 000004CA C72D MOVA L2565+68,R0 000004CC FD3A FMOV.S FR3,@R13 000004CE FF08 FMOV.S @R0,FR15 000004D0 C72D MOVA L2565+76,R0 000004D2 F508 FMOV.S @R0,FR5 000004D4 D42B MOV.L L2565+72,R4; L2112 000004D6 4C0B JSR @R12 000004D8 F4FC FMOV.S FR15,FR4 wpr_attrac 679 Text_fScale = 1.0f; wpr_attrac 680 text_PrintF( 25.0f, 75.0f, "Stage numb +er %d\n", _StageNum ); 000004DA C727 MOVA L2565+60,R0 000004DC F39D FLDI1 FR3 000004DE FD3A FMOV.S FR3,@R13 000004E0 D219 MOV.L L2565+12,R2; L2041 000004E2 6322 MOV.L @R2,R3 000004E4 2F36 MOV.L R3,@-R15 000004E6 D129 MOV.L L2565+80,R1; L2113 000004E8 2F16 MOV.L R1,@-R15 000004EA F508 FMOV.S @R0,FR5 000004EC D328 MOV.L L2565+84,R3; _text_PrintF 000004EE 430B JSR @R3 000004F0 F4FC FMOV.S FR15,FR4 wpr_attrac 681 wpr_attrac 682 /* if this is an active page go ahead +and print the time */ wpr_attrac 683 if( _bActive ) { 000004F2 D328 MOV.L L2565+88,R3; L2045 000004F4 6232 MOV.L @R3,R2 000004F6 2228 TST R2,R2 000004F8 8D0D BT/S L2431 000004FA 7F08 ADD #8,R15 wpr_attrac 684 text_SetFont( TEXT_FONT_SMALL +); 000004FC 4E0B JSR @R14 000004FE E401 MOV #1,R4 wpr_attrac 685 text_PrintF( 25.0f, 110.0f, "T +ime (secs) %f\n", fTime ); 00000500 F3F8 FMOV.S @R15,FR3 00000502 C726 MOVA L2565+96,R0 00000504 FF3B FMOV.S FR3,@-R15 00000506 D324 MOV.L L2565+92,R3; L2115 00000508 2F36 MOV.L R3,@-R15 0000050A F508 FMOV.S @R0,FR5 0000050C D220 MOV.L L2565+84,R2; _text_PrintF 0000050E 420B JSR @R2 00000510 F4FC FMOV.S FR15,FR4 00000512 A00C BRA L2430 00000514 7F08 ADD #8,R15 00000516 L2431: wpr_attrac 686 } else { wpr_attrac 687 text_SetFont( TEXT_FONT_SMALL +); 00000516 4E0B JSR @R14 00000518 E401 MOV #1,R4 wpr_attrac 688 text_PrintStr( 25.0f, 110.0f, +"Static screen here.\n" ); 0000051A C720 MOVA L2565+96,R0 0000051C D420 MOV.L L2565+100,R4; L2117 0000051E F508 FMOV.S @R0,FR5 00000520 4C0B JSR @R12 00000522 F4FC FMOV.S FR15,FR4 wpr_attrac 689 text_PrintStr( 25.0f, 145.0f, +"Waiting to sync up.\n" ); 00000524 C720 MOVA L2565+108,R0 00000526 D41F MOV.L L2565+104,R4; L2118 00000528 F508 FMOV.S @R0,FR5 0000052A 4C0B JSR @R12 0000052C F4FC FMOV.S FR15,FR4 0000052E L2430: wpr_attrac 690 } wpr_attrac 691 } wpr_attrac 692 } 0000052E 7F04 ADD #4,R15 00000530 4F26 LDS.L @R15+,PR 00000532 FFF9 FMOV.S @R15+,FR15 00000534 6CF6 MOV.L @R15+,R12 00000536 6DF6 MOV.L @R15+,R13 00000538 000B RTS 0000053A 6EF6 MOV.L @R15+,R14 0000053C L2565: 0000053C <00000000> .DATA.L _wpr_hiscore_Draw 00000540 <00000000> .DATA.L L2052 00000544 <00000000> .DATA.L _blit_Raw 00000548 <00000000> .DATA.L L2041 0000054C <00000000> .DATA.L _gutil_ClearFrameBuffer3 00000550 <00000006> .DATA.L H'00000006+L2022 00000554 <00000000> .DATA.L L2044 00000558 <00000000> .DATA.L L2043 0000055C <00000000> .DATA.L L2042 00000560 <00000000> .DATA.L _text_PrintStr 00000564 <00000000> .DATA.L _Text_fScale 00000568 <00000000> .DATA.L _text_SetFont 0000056C 3FA00000 .DATA.L H'3FA00000 00000570 <00000000> .DATA.L L2110 00000574 43160000 .DATA.L H'43160000 00000578 42960000 .DATA.L H'42960000 0000057C 3F999999 .DATA.L H'3F999999 00000580 41C80000 .DATA.L H'41C80000 00000584 <00000000> .DATA.L L2112 00000588 41700000 .DATA.L H'41700000 0000058C <00000000> .DATA.L L2113 00000590 <00000000> .DATA.L _text_PrintF 00000594 <000000000> .DATA.L L2045 00000598 <00000000> .DATA.L L2115 0000059C 42DC0000 .DATA.L H'42DC0000 000005A0 <00000000> .DATA.L L2117 000005A4 <00000000> .DATA.L L2118 000005A8 43110000 .DATA.L H'43110000 wpr_attrac 693 wpr_attrac 694 E static int _InitDemoMode( u32 nTrack, char *pszObName, + u16 nStartPosOffset, u16 nAiOffSet ) { 000005AC L2054: ; function: _InitDemo + Mode ; frame size=52 000005AC 2FE6 MOV.L R14,@-R15 000005AE 6E43 MOV R4,R14 000005B0 2FD6 MOV.L R13,@-R15 000005B2 2FC6 MOV.L R12,@-R15 000005B4 2FB6 MOV.L R11,@-R15 000005B6 2FA6 MOV.L R10,@-R15 000005B8 2F96 MOV.L R9,@-R15 000005BA 2F86 MOV.L R8,@-R15 000005BC 4F22 STS.L PR,@-R15 000005BE 7FF4 ADD #-12,R15 000005C0 2F52 MOV.L R5,@R15 000005C2 6063 MOV R6,R0 000005C4 0009 NOP wpr_attrac 695 u32 i; wpr_attrac 696 wpr_attrac 697 E if( (!(nTrack < TRACKS_COUNT)) ) gerr_Assert( +nTrack < TRACKS_COUNT, "wpr_attract.c", 697 ); 000005C6 E30A MOV #10,R3 000005C8 81F2 MOV.W R0,@(4,R15) 000005CA 3E32 CMP/HS R3,R14 000005CC 6073 MOV R7,R0 000005CE 8F08 BF/S L2433 000005D0 81F4 MOV.W R0,@(8,R15) 000005D2 3E32 CMP/HS R3,R14 000005D4 D144 MOV.L L2566+12,R1; _gerr_Assert 000005D6 0429 MOVT R4 000005D8 D542 MOV.L L2566+8,R5 ; L2071 000005DA 967F MOV.W L2566,R6 ; H'02B9 000005DC 74FF ADD #-1,R4 000005DE 410B JSR @R1 000005E0 644B NEG R4,R4 000005E2 L2433: wpr_attrac 698 wpr_attrac 699 E _bReleaseWorldObs = 0; 000005E2 D242 MOV.L L2566+16,R2; L2050 000005E4 E300 MOV #0,R3 wpr_attrac 700 /* set our track and timing values */ wpr_attrac 701 tracks_SetCurrentTrack( nTrack, TRACKS_DIFFICU +LTY_NOVICE ); 000005E6 6533 MOV R3,R5 000005E8 2232 MOV.L R3,@R2 000005EA D341 MOV.L L2566+20, + R3; _tracks_SetCurrentTr + ack 000005EC 430B JSR @R3 000005EE 64E3 MOV R14,R4 wpr_attrac 702 wpr_attrac 703 gutil_ScreenCoverage_ResetTotal(); 000005F0 D240 MOV.L L2566+24, + R2; _gutil_ScreenCoverag + e_ResetTotal 000005F2 420B JSR @R2 000005F4 0009 NOP wpr_attrac 704 E gutil_ScreenCoverage_SetLimit( ( 512.0f * 400. +0f * 7.0f ) ); 000005F6 D341 MOV.L L2566+32, + R3; _gutil_ScreenCoverag + e_SetLimit 000005F8 C73F MOVA L2566+28,R0 000005FA 430B JSR @R3 000005FC F408 FMOV.S @R0,FR4 wpr_attrac 705 wpr_attrac 706 /* Flag to draw water... */ wpr_attrac 707 E water_EnableCalc( 1 ); 000005FE D240 MOV.L L2566+36,R2; _water_EnableCalc 00000600 420B JSR @R2 00000602 E401 MOV #1,R4 wpr_attrac 708 E water_EnableDraw( 1 ); 00000604 D33F MOV.L L2566+40,R3; _water_EnableDraw 00000606 430B JSR @R3 00000608 E401 MOV #1,R4 wpr_attrac 709 wpr_attrac 710 /* reset stuff... */ wpr_attrac 711 wpr_attrac 712 /* reset our player array to the defaults */ wpr_attrac 713 E for( i=0; i < 8; i++ ) { 0000060A 9A68 MOV.W L2566+2,R10; H'01F0 0000060C EE00 MOV #0,R14 0000060E DD40 MOV.L L2566+52,R13; _Player_aData 00000610 EB08 MOV #8,R11 00000612 D93E MOV.L L2566+48, + R9; _controls_ZeroContro + lStruct 00000614 D83C MOV.L L2566+44, + R8; _powerup_ResetBooste + r 00000616 L2435: wpr_attrac 714 xclib_MemSet( &Player_aData[i], 0, siz +eof( Player_t ) ); 00000616 9C62 MOV.W L2566+2,R12; H'01F0 00000618 66A3 MOV R10,R6 0000061A D33E MOV.L L2566+56,R3; _xclib_MemSet 0000061C E500 MOV #0,R5 0000061E 2ECF MULS R12,R14 00000620 0C1A STS MACL,R12 00000622 6CCF EXTS.W R12,R12 00000624 3CDC ADD R13,R12 00000626 430B JSR @R3 00000628 64C3 MOV R12,R4 wpr_attrac 715 Player_aData[i].nPlace = i+1; 0000062A 64E3 MOV R14,R4 0000062C 7401 ADD #1,R4 0000062E 1C48 MOV.L R4,@(32,R12) wpr_attrac 716 Player_aData[i].nEarnedStartPlace = i+ +1; 00000630 1C4B MOV.L R4,@(44,R12) wpr_attrac 717 controls_ZeroControlStruct( &Player_aD +ata[i].Controls ); 00000632 64C3 MOV R12,R4 00000634 490B JSR @R9 00000636 7434 ADD #52,R4 wpr_attrac 718 powerup_ResetBooster( &Player_aData[i] +.Powerup ); 00000638 64C3 MOV R12,R4 0000063A 480B JSR @R8 0000063C 7424 ADD #36,R4 0000063E 9C4E MOV.W L2566+2,R12; H'01F0 00000640 7E01 ADD #1,R14 00000642 D334 MOV.L L2566+56,R3; _xclib_MemSet 00000644 66A3 MOV R10,R6 00000646 2ECF MULS R12,R14 00000648 E500 MOV #0,R5 0000064A 0C1A STS MACL,R12 0000064C 6CCF EXTS.W R12,R12 0000064E 3CDC ADD R13,R12 00000650 430B JSR @R3 00000652 64C3 MOV R12,R4 00000654 64E3 MOV R14,R4 00000656 7401 ADD #1,R4 00000658 1C48 MOV.L R4,@(32,R12) 0000065A 1C4B MOV.L R4,@(44,R12) 0000065C 64C3 MOV R12,R4 0000065E 490B JSR @R9 00000660 7434 ADD #52,R4 00000662 64C3 MOV R12,R4 00000664 480B JSR @R8 00000666 7424 ADD #36,R4 00000668 7E01 ADD #1,R14 0000066A 3EB2 CMP/HS R11,R14 0000066C 8BD3 BF L2435 wpr_attrac 719 } wpr_attrac 720 controls_ZeroControlStruct( &_HumanControls ); 0000066E D42A MOV.L L2566+60,R4; L2051 00000670 490B JSR @R9 00000672 0009 NOP wpr_attrac 721 /* set the number of human racers */ wpr_attrac 722 Player_nHumanCount = 0; 00000674 D229 MOV.L L2566+64,R2; _Player_nHumanCount 00000676 E300 MOV #0,R3 00000678 2232 MOV.L R3,@R2 wpr_attrac 723 /* set the number of ai racers */ wpr_attrac 724 E Player_nAiCount = 8; wpr_attrac 725 /* set the total number of racers */ wpr_attrac 726 Player_nTotalCount = Player_nHumanCount + Play +er_nAiCount; wpr_attrac 727 E Temp_bLoadAi = 1; 0000067A E201 MOV #1,R2 0000067C D128 MOV.L L2566+68,R1; _Player_nAiCount 0000067E 21B2 MOV.L R11,@R1 00000680 D328 MOV.L L2566+A72,R3; _Player_nTotalCount 00000682 23B2 MOV.L R11,@R3 00000684 D028 MOV.L L2566+76,R0; _Temp_bLoadAi wpr_attrac 728 wpr_attrac 729 gameloop_ResetCounter(); 00000686 D129 MOV.L L2566+80, + R1; _gameloop_ResetCount + er 00000688 410B JSR @R1 0000068A 2022 MOV.L R2,@R0 wpr_attrac 730 particle_ResetSystem(); 0000068C D328 MOV.L L2566+84, + R3; _particle_ResetSyste + m 0000068E 430B JSR @R3 00000690 0009 NOP wpr_attrac 731 tripwire_Reset(); 00000692 D128 MOV.L L2566+88,R1; _tripwire_Reset 00000694 410B JSR @R1 00000696 0009 NOP wpr_attrac 732 objectid_Reset(); 00000698 D327 MOV.L L2566+92,R3; _objectid_Reset 0000069A 430B JSR @R3 0000069C 0009 NOP wpr_attrac 733 fx_ResetSystem(); 0000069E D127 MOV.L L2566+96,R1; _fx_ResetSystem 000006A0 410B JSR @R1 000006A2 0009 NOP wpr_attrac 734 fx_splash_ResetSystem(); 000006A4 D326 MOV.L L2566+100, + R3; _fx_splash_ResetSys + tem 000006A6 430B JSR @R3 000006A8 0009 NOP wpr_attrac 735 collide_obj_Reset(); 000006AA D126 MOV.L L2566+104,R1; _collide_obj_Reset 000006AC 410B JSR @R1 000006AE 0009 NOP wpr_attrac 736 E if( waterspray_InitSystem( 200 ) == 0 ) { 000006B0 D325 MOV.L L2566+108, + R3; _waterspray_InitSys + tem 000006B2 9415 MOV.W L2566+4,R4 ; H'00C8 000006B4 430B JSR @R3 000006B6 0009 NOP 000006B8 2008 TST R0,R0 000006BA 8B04 BF L2436 wpr_attrac 737 E if( (!(0)) ) gerr_Assert( 0, "wpr_attr +act.c", 737 ); 000006BC D30A MOV.L L2566+12,R3; _gerr_Assert 000006BE D509 MOV.L L2566+8,R5 ; L2071 000006C0 960F MOV.W L2566+6,R6 ; H'02E1 000006C2 430B JSR @R3 000006C4 E400 MOV #0,R4 000006C6 L2436: wpr_attrac 738 } wpr_attrac 739 wpr_attrac 740 /* Load all objects including track... */ wpr_attrac 741 tracks_LoadWaterTextures( Tracks_nCurrentTrack + ); 000006C6 D322 MOV.L L2566+116, + R3; _tracks_LoadWaterTe + xtures 000006C8 D220 MOV.L L2566+112, + R2; _Tracks_nCurrentTra + ck 000006CA 430B JSR @R3 000006CC 6422 MOV.L @R2,R4 wpr_attrac 742 terrain_Load( pUszObName, &CurWorld ); 000006CE D322 MOV.L L2566+124,R3; _terrain_Load 000006D0 D520 MOV.L L2566+120,R5; L2049 000006D2 430B JSR @R3 000006D4 64F2 MOV.L @R15,R4 wpr_attrac 743 E if( CurWorld.pWorld == 0 ) { 000006D6 D31F MOV.L L2566+120,R3; L2049 000006D8 A040 BRA L2500 000006DA 0009 NOP 000006DC L2566: 000006DC 02B9 .DATA.W H'02B9 000006DE 01F0 .DATA.W H'01F0 000006E0 00C8 .DATA.W H'00C8 000006E2 02E1 .DATA.W H'02E1 000006E4 <00000000> .DATA.L L2071 000006E8 <00000000> .DATA.L _gerr_Assert 000006EC <00000000> .DATA.L L2050 000006F0 <00000000> .DATA.L _tracks_SetCurrentTrack 000006F4 <00000000> .DATA.L _gutil_ScreenCoverage_ResetTotal 000006F8 49AF0000 .DATA.L H'49AF0000 000006FC <00000000> .DATA.L _gutil_ScreenCoverage_SetLimit 00000700 <00000000> .DATA.L _water_EnableCalc 00000704 <00000000> .DATA.L _water_EnableDraw 00000708 <00000000> .DATA.L _powerup_ResetBooster 0000070C <00000000> .DATA.L _controls_ZeroControlStruct 00000710 <00000000> .DATA.L _Player_aData 00000714 <00000000> .DATA.L _xclib_MemSet 00000718 <00000000> .DATA.L L2051 0000071C <00000000> .DATA.L _Player_nHumanCount 00000720 <00000000> .DATA.L _Player_nAiCount 00000724 <00000000> .DATA.L _Player_nTotalCount 00000728 <00000000> .DATA.L _Temp_bLoadAi 0000072C <00000000> .DATA.L _gameloop_ResetCounter 00000730 <00000000> .DATA.L _particle_ResetSystem 00000734 <00000000> .DATA.L _tripwire_Reset 00000738 <00000000> .DATA.L _objectid_Reset 0000073C <00000000> .DATA.L _fx_ResetSystem 00000740 <00000000> .DATA.L _fx_splash_ResetSystem 00000744 <00000000> .DATA.L _collide_obj_Reset 00000748 <00000000> .DATA.L _waterspray_InitSystem 0000074C <00000000> .DATA.L _Tracks_nCurrentTrack 00000750 <00000000> .DATA.L _tracks_LoadWaterTextures 00000754 <00000000> .DATA.L L2049 00000758 <00000000> .DATA.L _terrain_Load 0000075C L2500: 0000075C 6232 MOV.L @R3,R2 0000075E 2228 TST R2,R2 00000760 8B01 BF L2438 wpr_attrac 744 E return 0; 00000762 A079 BRA L2439 00000764 E000 MOV #0,R0 00000766 L2438: wpr_attrac 745 } wpr_attrac 746 /* attach the loaded track */ wpr_attrac 747 terrain_Attach( &CurWorld ); 00000766 D245 MOV.L L2567+16,R2; _terrain_Attach 00000768 D443 MOV.L L2567+12,R4; L2049 0000076A 420B JSR @R2 0000076C 0009 NOP wpr_attrac 748 /* SSP - fill in angle values for each path ed +ge */ wpr_attrac 749 paths_CalcEdgeAngles( World_pWorld->pPathEdge, + World_pWorld->nPathEdges ); 0000076E DE44 MOV.L L2567+20,R14; _World_pWorld 00000770 907C MOV.W L2567,R0 ; H'0160 00000772 65E2 MOV.L @R14,R5 00000774 D343 MOV.L L2567+24, + R3; _paths_CalcEdgeAngle + s 00000776 64E2 MOV.L @R14,R4 00000778 055E MOV.L @(R0,R5),R5 0000077A 7044 ADD #68,R0 0000077C 430B JSR @R3 0000077E 044E MOV.L @(R0,R4),R4 wpr_attrac 750 /* SSP - check for wrong null pointers problem + */ wpr_attrac 751 paths_FixWrongNullPointers( World_pWorld->pPat +hSector, World_pWorld->nPathSectors ); 00000780 9075 MOV.W L2567+2,R0 ; H'015C 00000782 65E2 MOV.L @R14,R5 00000784 D340 MOV.L L2567+28, + R3; _paths_FixWrongNullP + ointers 00000786 64E2 MOV.L @R14,R4 00000788 055E MOV.L @(R0,R5),R5 0000078A 7044 ADD #68,R0 0000078C 430B JSR @R3 0000078E 044E MOV.L @(R0,R4),R4 wpr_attrac 752 /* SSP - set our path sector data from the wor +ld that was just loaded */ wpr_attrac 753 paths_TrackPathSet( World_pWorld->pPathSector, + World_pWorld->nPathSectors ); 00000790 906D MOV.W L2567+2,R0 ; H'015C 00000792 65E2 MOV.L @R14,R5 00000794 D33D MOV.L L2567+32,R3; _paths_TrackPathSet 00000796 64E2 MOV.L @R14,R4 00000798 055E MOV.L @(R0,R5),R5 0000079A 7044 ADD #68,R0 0000079C 430B JSR @R3 0000079E 044E MOV.L @(R0,R4),R4 wpr_attrac 754 wpr_attrac 755 terrain_LoadObjects( objectid_Process ); 000007A0 D23C MOV.L L2567+40, + R2; _terrain_LoadObjects 000007A2 D43B MOV.L L2567+36,R4; _objectid_Process 000007A4 420B JSR @R2 000007A6 0009 NOP wpr_attrac 756 terrain_LoadWaterfalls(); 000007A8 D33B MOV.L L2567+44, + R3; _terrain_LoadWaterfa + lls 000007AA 430B JSR @R3 000007AC 0009 NOP wpr_attrac 757 terrain_LoadFx(); 000007AE D23B MOV.L L2567+48,R2; _terrain_LoadFx 000007B0 420B JSR @R2 000007B2 0009 NOP wpr_attrac 758 wpr_attrac 759 /* hud_Load(); */ wpr_attrac 760 _OverLayLoad(); 000007B4 D33A MOV.L L2567+52,R3; L2062 000007B6 430B JSR @R3 000007B8 0009 NOP wpr_attrac 761 sky_LoadSkyForATrack(); 000007BA D23A MOV.L L2567+56, + R2; _sky_LoadSkyForATrac + k 000007BC 420B JSR @R2 000007BE 0009 NOP wpr_attrac 762 /* audio_mgr_LoadALevel( Tracks_nCurrentTrack, Pl +ayer_aData[0].nBoatType ); */ wpr_attrac 763 wpr_attrac 764 /* Init stuff... */ wpr_attrac 765 /* setup boat types and pole positions */ wpr_attrac 766 E ai_player_SetPolePositionsAndBoatTypes( 0, nAi +OffSet ); 000007C0 85F4 MOV.W @(8,R15),R0 000007C2 D339 MOV.L L2567+60, + R3; _ai_player_SetPolePo + sitionsAndBoatTypes 000007C4 6503 MOV R0,R5 000007C6 655D EXTU.W R5,R5 000007C8 430B JSR @R3 000007CA E400 MOV #0,R4 wpr_attrac 767 E for( i=0; i < 8; i++ ) { 000007CC 9950 MOV.W L2567+4,R9 ; H'0200 000007CE ECEF MOV #-17,R12 000007D0 D836 MOV.L L2567+64,R8; _boats_Init 000007D2 EE00 MOV #0,R14 000007D4 L2441: wpr_attrac 768 boats_Init( Player_aData[i].nBoatType, + BOATS_LOD_HIGH, i, &Player_aData[i], nStartPosOffset +); 000007D4 85F2 MOV.W @(4,R15),R0 000007D6 E501 MOV #1,R5 000007D8 66E3 MOV R14,R6 000007DA 600D EXTU.W R0,R0 000007DC 2F02 MOV.L R0,@R15 000007DE 2F06 MOV.L R0,@-R15 000007E0 9A47 MOV.W L2567+6,R10; H'01F0 000007E2 2EAF MULS R10,R14 000007E4 0A1A STS MACL,R10 000007E6 6AAF EXTS.W R10,R10 000007E8 3ADC ADD R13,R10 000007EA 85A3 MOV.W @(6,R10),R0 000007EC 67A3 MOV R10,R7 000007EE 480B JSR @R8 000007F0 640D EXTU.W R0,R4 wpr_attrac 769 Player_aData[i].Phys.nControlFlags &= +~PHYS_CONTROLFLAG_STARTINGLINE_321GO; 000007F2 903F MOV.W L2567+8,R0 ; H'0130 000007F4 7E01 ADD #1,R14 000007F6 E501 MOV #1,R5 000007F8 66E3 MOV R14,R6 000007FA 03AE MOV.L @(R0,R10),R3 000007FC 23C9 AND R12,R3 000007FE 0A36 MOV.L R3,@(R0,R10) wpr_attrac 770 /* turn off boat sounds */ wpr_attrac 771 Player_aData[i].Phys.nControlFlags |= +PHYS_CONTROLFLAG_SILENT; 00000800 02AE MOV.L @(R0,R10),R2 00000802 229B OR R9,R2 00000804 0A26 MOV.L R2,@(R0,R10) 00000806 53F1 MOV.L @(4,R15),R3 00000808 2F36 MOV.L R3,@-R15 0000080A 9A32 MOV.W L2567+6,R10; H'01F0 0000080C 2EAF MULS R10,R14 0000080E 0A1A STS MACL,R10 00000810 6AAF EXTS.W R10,R10 00000812 3ADC ADD R13,R10 00000814 85A3 MOV.W @(6,R10),R0 00000816 67A3 MOV R10,R7 00000818 480B JSR @R8 0000081A 640D EXTU.W R0,R4 0000081C 902A MOV.W L2567+8,R0 ; H'0130 0000081E 7E01 ADD #1,R14 00000820 3EB2 CMP/HS R11,R14 00000822 7F08 ADD #8,R15 00000824 03AE MOV.L @(R0,R10),R3 00000826 23C9 AND R12,R3 00000828 0A36 MOV.L R3,@(R0,R10) 0000082A 02AE MOV.L @(R0,R10),R2 0000082C 229B OR R9,R2 0000082E 8FD1 BF/S L2441 00000830 0A26 MOV.L R2,@(R0,R10) wpr_attrac 772 } wpr_attrac 773 E _bReleaseWorldObs = 1; wpr_attrac 774 wpr_attrac 775 ai_player_Init(); 00000832 D120 MOV.L L2567+72,R1; _ai_player_Init 00000834 E201 MOV #1,R2 00000836 D31E MOV.L L2567+68,R3; L2050 00000838 410B JSR @R1 0000083A 2322 MOV.L R2,@R3 wpr_attrac 776 /* hud_Init(); */ wpr_attrac 777 /* boats_InitBoatTrackingSystem(); */ wpr_attrac 778 anim_fish_LoadTanksForATrack( Tracks_nCurrentT +rack ); 0000083C D31F MOV.L L2567+80, + R3; _anim_fish_LoadTanks + ForATrack 0000083E D01E MOV.L L2567+76, + R0; _Tracks_nCurrentTrac + k 00000840 430B JSR @R3 00000842 6402 MOV.L @R0,R4 wpr_attrac 779 hud_wrongway_Init(); 00000844 D21E MOV.L L2567+84,R2; _hud_wrongway_Init 00000846 420B JSR @R2 00000848 0009 NOP wpr_attrac 780 wpr_attrac 781 /* we update our rank here so that it is corre +ct for the first time we run race_Work() */ wpr_attrac 782 player_InitPathSectorStuff(); 0000084A D31E MOV.L L2567+88, + R3; _player_InitPathSect + orStuff 0000084C 430B JSR @R3 0000084E 0009 NOP wpr_attrac 783 player_UpdateRank(); 00000850 D21D MOV.L L2567+92,R2; _player_UpdateRank 00000852 420B JSR @R2 00000854 0009 NOP wpr_attrac 784 wpr_attrac 785 E return 1; 00000856 E001 MOV #1,R0 wpr_attrac 786 } 00000858 L2439: 00000858 7F0C ADD #12,R15 0000085A 4F26 LDS.L @R15+,PR 0000085C 68F6 MOV.L @R15+,R8 0000085E 69F6 MOV.L @R15+,R9 00000860 6AF6 MOV.L @R15+,R10 00000862 6BF6 MOV.L @R15+,R11 00000864 6CF6 MOV.L @R15+,R12 00000866 6DF6 MOV.L @R15+,R13 00000868 000B RTS 0000086A 6EF6 MOV.L @R15+,R14 0000086C L2567: 0000086C 0160 .DATA.W H'0160 0000086E 015C .DATA.W H'015C 00000870 0200 .DATA.W H'0200 00000872 01F0 .DATA.W H'01F0 00000874 0130 .DATA.W H'0130 00000876 00000002 .RES.W 1 00000878 <00000000> .DATA.L L2049 0000087C <00000000> .DATA.L _terrain_Attach 00000880 <00000000> .DATA.L _World_pWorld 00000884 <00000000> .DATA.L _paths_CalcEdgeAngles 00000888 <00000000> .DATA.L _paths_FixWrongNullPointers 0000088C <00000000> .DATA.L _paths_TrackPathSet 00000890 <00000000> .DATA.L _objectid_Process 00000894 <00000000> .DATA.L _terrain_LoadObjects 00000898 <00000000> .DATA.L _terrain_LoadWaterfalls 0000089C <00000000> .DATA.L _terrain_LoadFx 000008A0 <00000000> .DATA.L L2062 000008A4 <00000000> .DATA.L _sky_LoadSkyForATrack 000008A8 <00000000> .DATA.L _ai_player_SetPolePositionsAndBo + atTypes 000008AC <00000000> .DATA.L _boats_Init 000008B0 <00000000> .DATA.L L2050 000008B4 <00000000> .DATA.L _ai_player_Init 000008B8 <00000000> .DATA.L _Tracks_nCurrentTrack 000008BC <00000000> .DATA.L _anim_fish_LoadTanksForATrack 000008C0 <00000000> .DATA.L _hud_wrongway_Init 000008C4 <00000000> .DATA.L _player_InitPathSectorStuff 000008C8 <00000000> .DATA.L _player_UpdateRank wpr_attrac 787 wpr_attrac 788 static void _EndDemoMode( void ) { 000008CC L2055: ; function: _EndDemoM + ode ; frame size=20 000008CC 2FE6 MOV.L R14,@-R15 000008CE 2FD6 MOV.L R13,@-R15 000008D0 2FC6 MOV.L R12,@-R15 000008D2 2FB6 MOV.L R11,@-R15 wpr_attrac 789 u32 i; wpr_attrac 790 wpr_attrac 791 if( _bReleaseWorldObs ) { 000008D4 D241 MOV.L L2568+8,R2 ; L2050 000008D6 4F22 STS.L PR,@-R15 000008D8 6322 MOV.L @R2,R3 000008DA 2338 TST R3,R3 000008DC 8925 BT L2442 wpr_attrac 792 E for( i=0; i < 8; i++ ) { 000008DE DC40 MOV.L L2568+12,R12; _boats_Free 000008E0 EE00 MOV #0,R14 000008E2 DD40 MOV.L L2568+16,R13; _Player_aData 000008E4 EB08 MOV #8,R11 000008E6 L2444: wpr_attrac 793 boats_Free( &Player_aData[i] ) +; 000008E6 9475 MOV.W L2568,R4 ; H'01F0 000008E8 2E4F MULS R4,R14 000008EA 041A STS MACL,R4 000008EC 644F EXTS.W R4,R4 000008EE 4C0B JSR @R12 000008F0 34DC ADD R13,R4 000008F2 946F MOV.W L2568,R4 ; H'01F0 000008F4 7E01 ADD #1,R14 000008F6 2E4F MULS R4,R14 000008F8 041A STS MACL,R4 000008FA 644F EXTS.W R4,R4 000008FC 4C0B JSR @R12 000008FE 34DC ADD R13,R4 00000900 7E01 ADD #1,R14 00000902 3EB2 CMP/HS R11,R14 00000904 8BEF BF L2444 wpr_attrac 794 } wpr_attrac 795 E _bReleaseWorldObs = 0; wpr_attrac 796 /* phys_AttachMicrophone( NULL ); */ wpr_attrac 797 particle_ResetSystem(); 00000906 D138 MOV.L L2568+20, + R1; _particle_ResetSyste + m 00000908 E200 MOV #0,R2 0000090A D334 MOV.L L2568+8,R3 ; L2050 0000090C 410B JSR @R1 0000090E 2322 MOV.L R2,@R3 wpr_attrac 798 _DemoModeCamera( _StageNum, 1 ); 00000910 D336 MOV.L L2568+24,R3; L2041 00000912 E501 MOV #1,R5 00000914 B138 BSR L2058 00000916 6432 MOV.L @R3,R4 wpr_attrac 799 /* Turn off water */ wpr_attrac 800 E water_EnableCalc( 0 ); 00000918 D335 MOV.L L2568+28,R3; _water_EnableCalc 0000091A 430B JSR @R3 0000091C E400 MOV #0,R4 wpr_attrac 801 E water_EnableDraw( 0 ); 0000091E D235 MOV.L L2568+32,R2; _water_EnableDraw 00000920 420B JSR @R2 00000922 E400 MOV #0,R4 wpr_attrac 802 /* dump all loaded audio */ wpr_attrac 803 /* audio_mgr_UnloadALevel(); */ wpr_attrac 804 /* resets the path sector system */ wpr_attrac 805 paths_TrackPathClear(); 00000924 D334 MOV.L L2568+36, + R3; _paths_TrackPathClea + r 00000926 430B JSR @R3 00000928 0009 NOP 0000092A L2442: wpr_attrac 806 } wpr_attrac 807 world_SetWhiteSat( 0.0f ); 0000092A D234 MOV.L L2568+40,R2; _world_SetWhiteSat 0000092C 420B JSR @R2 0000092E F48D FLDI0 FR4 wpr_attrac 808 sky_SetWhiteSat( 0.0f ); 00000930 4F26 LDS.L @R15+,PR 00000932 D333 MOV.L L2568+44,R3; _sky_SetWhiteSat 00000934 F48D FLDI0 FR4 00000936 6BF6 MOV.L @R15+,R11 00000938 6CF6 MOV.L @R15+,R12 0000093A 6DF6 MOV.L @R15+,R13 0000093C 432B JMP @R3 0000093E 6EF6 MOV.L @R15+,R14 wpr_attrac 809 } wpr_attrac 810 wpr_attrac 811 static void _DemoModeWork( void ) { 00000940 L2056: ; function: _DemoMode + Work ; frame size=12 00000940 2FE6 MOV.L R14,@-R15 00000942 2FD6 MOV.L R13,@-R15 wpr_attrac 812 u32 i; wpr_attrac 813 wpr_attrac 814 /* 1) Handle tripwire triggering. */ wpr_attrac 815 /* 2) Update water, waterfalls. */ wpr_attrac 816 /* 3) Update canned animations. */ wpr_attrac 817 /* 4) Perform AI. */ wpr_attrac 818 controls_CopyControlStruct( &Player_aData[Play +er_nHuman].Controls, &_HumanControls ); 00000944 D130 MOV.L L2568+52,R1; _Player_nHuman 00000946 9345 MOV.W L2568,R3 ; H'01F0 00000948 6211 MOV.W @R1,R2 0000094A 4F22 STS.L PR,@-R15 0000094C 223F MULS R3,R2 0000094E DE25 MOV.L L2568+16,R14; _Player_aData 00000950 D22E MOV.L L2568+56, + R2; _controls_CopyContro + lStruct 00000952 D52C MOV.L L2568+48,R5; L2051 00000954 041A STS MACL,R4 00000956 644F EXTS.W R4,R4 00000958 34EC ADD R14,R4 0000095A 420B JSR @R2 0000095C 7434 ADD #52,R4 wpr_attrac 819 ai_player_Work(); 0000095E D32C MOV.L L2568+60,R3; _ai_player_Work 00000960 430B JSR @R3 00000962 0009 NOP wpr_attrac 820 controls_CopyControlStruct( &_HumanControls, & +Player_aData[Player_nHuman].Controls ); 00000964 D128 MOV.L L2568+52,R1; _Player_nHuman 00000966 9335 MOV.W L2568,R3 ; H'01F0 00000968 6211 MOV.W @R1,R2 0000096A D426 MOV.L L2568+48,R4; L2051 0000096C 223F MULS R3,R2 0000096E D227 MOV.L L2568+56, + R2; _controls_CopyContro + lStruct 00000970 051A STS MACL,R5 00000972 655F EXTS.W R5,R5 00000974 35EC ADD R14,R5 00000976 420B JSR @R2 00000978 7534 ADD #52,R5 wpr_attrac 821 /* 5) Call work function of all WorldOb_t's: +*/ wpr_attrac 822 /* - Calculate new object velocities. * +/ wpr_attrac 823 /* - Move objects by new velocities. */ wpr_attrac 824 /* - Update object TWSs. */ wpr_attrac 825 E for( i=0; i < 8; i++ ) { 0000097A E602 MOV #2,R6 0000097C ED08 MOV #8,R13 0000097E E500 MOV #0,R5 00000980 L2446: wpr_attrac 826 /* Set physics input parameters... */ wpr_attrac 827 E Player_aData[i].Phys.fSteer = Player_a +Data[i].Controls.fWithDeadZone[0]; 00000980 9428 MOV.W L2568,R4 ; H'01F0 00000982 E03C MOV #60,R0 00000984 254F MULS R4,R5 00000986 041A STS MACL,R4 00000988 644F EXTS.W R4,R4 0000098A 34EC ADD R14,R4 0000098C F346 FMOV.S @(R0,R4),FR3 0000098E 9022 MOV.W L2568+2,R0 ; H'0120 00000990 F437 FMOV.S FR3,@(R0,R4) wpr_attrac 828 E Player_aData[i].Phys.fThrottle = Playe +r_aData[i].Controls.fWithDeadZone[1]; 00000992 E040 MOV #64,R0 00000994 F346 FMOV.S @(R0,R4),FR3 00000996 901F MOV.W L2568+4,R0 ; H'0124 00000998 F437 FMOV.S FR3,@(R0,R4) wpr_attrac 829 E Player_aData[i].Phys.bHydroBoostersOn += (Player_aData[i].Controls.nButtons & 0x2) ? 1 : 0; 0000099A E044 MOV #68,R0 0000099C 024E MOV.L @(R0,R4),R2 0000099E 2268 TST R6,R2 000009A0 8901 BT L2447 000009A2 A001 BRA L2448 000009A4 E301 MOV #1,R3 000009A6 L2447: 000009A6 E300 MOV #0,R3 000009A8 L2448: 000009A8 9017 MOV.W L2568+6,R0 ; H'0128 000009AA 7501 ADD #1,R5 000009AC 0436 MOV.L R3,@(R0,R4) 000009AE E03C MOV #60,R0 000009B0 9410 MOV.W L2568,R4 ; H'01F0 000009B2 254F MULS R4,R5 000009B4 041A STS MACL,R4 000009B6 644F EXTS.W R4,R4 000009B8 34EC ADD R14,R4 000009BA F346 FMOV.S @(R0,R4),FR3 000009BC 900B MOV.W L2568+2,R0 ; H'0120 000009BE F437 FMOV.S FR3,@(R0,R4) 000009C0 E040 MOV #64,R0 000009C2 F346 FMOV.S @(R0,R4),FR3 000009C4 9008 MOV.W L2568+4,R0 ; H'0124 000009C6 F437 FMOV.S FR3,@(R0,R4) 000009C8 E044 MOV #68,R0 000009CA 024E MOV.L @(R0,R4),R2 000009CC 2268 TST R6,R2 000009CE 8921 BT L2449 000009D0 A021 BRA L2450 000009D2 E301 MOV #1,R3 000009D4 L2568: 000009D4 01F0 .DATA.W H'01F0 000009D6 0120 .DATA.W H'0120 000009D8 0124 .DATA.W H'0124 000009DA 0128 .DATA.W H'0128 000009DC <00000000> .DATA.L L2050 000009E0 <00000000> .DATA.L _boats_Free 000009E4 <00000000> .DATA.L _Player_aData 000009E8 <00000000> .DATA.L _particle_ResetSystem 000009EC <00000000> .DATA.L L2041 000009F0 <00000000> .DATA.L _water_EnableCalc 000009F4 <00000000> .DATA.L _water_EnableDraw 000009F8 <00000000> .DATA.L _paths_TrackPathClear 000009FC <00000000> .DATA.L _world_SetWhiteSat 00000A00 <00000000> .DATA.L _sky_SetWhiteSat 00000A04 <00000000> .DATA.L L2051 00000A08 <00000000> .DATA.L _Player_nHuman 00000A0C <00000000> .DATA.L _controls_CopyControlStruct 00000A10 <00000000> .DATA.L _ai_player_Work 00000A14 L2449: 00000A14 E300 MOV #0,R3 00000A16 L2450: 00000A16 907C MOV.W L2569,R0 ; H'0128 00000A18 7501 ADD #1,R5 00000A1A 35D2 CMP/HS R13,R5 00000A1C 0436 MOV.L R3,@(R0,R4) 00000A1E 8BAF BF L2446 wpr_attrac 830 } wpr_attrac 831 /* Move and collide all boats... */ wpr_attrac 832 E phys_SimulateAndCollideAll( 1 ); 00000A20 D23E MOV.L L2569+10, + R2; _phys_SimulateAndCol + lideAll 00000A22 420B JSR @R2 00000A24 E401 MOV #1,R4 wpr_attrac 833 /* Update speedometer and tachometer... */ wpr_attrac 834 E for( i=0; i < 8; i++ ) { 00000A26 C73E MOVA L2569+14,R0 00000A28 F408 FMOV.S @R0,FR4 00000A2A E400 MOV #0,R4 00000A2C L2452: wpr_attrac 835 Player_aData[i].fSpeedMph = Player_aDa +ta[i].Phys.fSpeedMPH; 00000A2C 9572 MOV.W L2569+2,R5 ; H'01F0 00000A2E 9072 MOV.W L2569+4,R0 ; H'014C 00000A30 245F MULS R5,R4 00000A32 7401 ADD #1,R4 00000A34 051A STS MACL,R5 00000A36 655F EXTS.W R5,R5 00000A38 35EC ADD R14,R5 00000A3A F356 FMOV.S @(R0,R5),FR3 00000A3C E018 MOV #24,R0 00000A3E F537 FMOV.S FR3,@(R0,R5) wpr_attrac 836 Player_aData[i].fRPM = Player_aData[i] +.Phys.fPropRPM * 10000.0f; 00000A40 906A MOV.W L2569+6,R0 ; H'0150 00000A42 F356 FMOV.S @(R0,R5),FR3 00000A44 E01C MOV #28,R0 00000A46 F342 FMUL FR4,FR3 00000A48 F537 FMOV.S FR3,@(R0,R5) 00000A4A 9563 MOV.W L2569+2,R5 ; H'01F0 00000A4C 9063 MOV.W L2569+4,R0 ; H'014C 00000A4E 245F MULS R5,R4 00000A50 7401 ADD #1,R4 00000A52 34D2 CMP/HS R13,R4 00000A54 051A STS MACL,R5 00000A56 655F EXTS.W R5,R5 00000A58 35EC ADD R14,R5 00000A5A F356 FMOV.S @(R0,R5),FR3 00000A5C E018 MOV #24,R0 00000A5E F537 FMOV.S FR3,@(R0,R5) 00000A60 905A MOV.W L2569+6,R0 ; H'0150 00000A62 F356 FMOV.S @(R0,R5),FR3 00000A64 E01C MOV #28,R0 00000A66 F342 FMUL FR4,FR3 00000A68 8FE0 BF/S L2452 00000A6A F537 FMOV.S FR3,@(R0,R5) wpr_attrac 837 } wpr_attrac 838 worldob_CallAllWorkFcns( Gameloop_nDeltaFrames + ); 00000A6C D32E MOV.L L2569+22, + R3; _worldob_CallAllWork + Fcns 00000A6E D22D MOV.L L2569+18, + R2; _Gameloop_nDeltaFram + es 00000A70 430B JSR @R3 00000A72 6422 MOV.L @R2,R4 wpr_attrac 839 /* 6) Perform object collision detection, adj +usting positions */ wpr_attrac 840 /* and velocities if necessary (update TWS +s again, if position */ wpr_attrac 841 /* changed). */ wpr_attrac 842 worldcoll_Work(); 00000A74 D12D MOV.L L2569+26,R1; _worldcoll_Work 00000A76 410B JSR @R1 00000A78 0009 NOP wpr_attrac 843 collide_obj_Work(); 00000A7A D32D MOV.L L2569+30,R3; _collide_obj_Work 00000A7C 430B JSR @R3 00000A7E 0009 NOP wpr_attrac 844 /* 7) Update camera position and orientation. + */ wpr_attrac 845 _DemoModeCamera( _StageNum, 2 ); 00000A80 D22C MOV.L L2569+34,R2; L2041 00000A82 E502 MOV #2,R5 00000A84 B080 BSR L2058 00000A86 6422 MOV.L @R2,R4 wpr_attrac 846 /* 8) Update particles. */ wpr_attrac 847 particle_CallWorkFunctions(); 00000A88 D22B MOV.L L2569+38, + R2; _particle_CallWorkFu + nctions 00000A8A 420B JSR @R2 00000A8C 0009 NOP wpr_attrac 848 particle_CallCellBlocksWorkFunctions(); 00000A8E D32B MOV.L L2569+42, + R3; _particle_CallCellBl + ocksWorkFunctions 00000A90 430B JSR @R3 00000A92 0009 NOP wpr_attrac 849 waterspray_Work(); 00000A94 D22A MOV.L L2569+46,R2; _waterspray_Work 00000A96 420B JSR @R2 00000A98 0009 NOP wpr_attrac 850 /* 9) Update water effects (rooster tails, wa +kes, wave objects, etc.). */ wpr_attrac 851 /* 10) Transform object lights from model-spac +e to world-space. */ wpr_attrac 852 worldob_TransformAllObjectLights(); 00000A9A D32A MOV.L L2569+50, + R3; _worldob_TransformAl + lObjectLights 00000A9C 430B JSR @R3 00000A9E 0009 NOP wpr_attrac 853 /* 11) Update player positions... */ wpr_attrac 854 player_UpdateRank(); 00000AA0 D229 MOV.L L2569+54,R2; _player_UpdateRank 00000AA2 420B JSR @R2 00000AA4 0009 NOP wpr_attrac 855 _OverLayWork(); 00000AA6 D329 MOV.L L2569+58,R3; L2063 00000AA8 430B JSR @R3 00000AAA 0009 NOP wpr_attrac 856 hud_wrongway_Work(); 00000AAC D228 MOV.L L2569+62,R2; _hud_wrongway_Work 00000AAE 420B JSR @R2 00000AB0 0009 NOP wpr_attrac 857 wpr_attrac 858 phys_Work(); 00000AB2 4F26 LDS.L @R15+,PR 00000AB4 D327 MOV.L L2569+66,R3; _phys_Work 00000AB6 6DF6 MOV.L @R15+,R13 00000AB8 432B JMP @R3 00000ABA 6EF6 MOV.L @R15+,R14 wpr_attrac 859 } wpr_attrac 860 wpr_attrac 861 /* _Draw(): */ wpr_attrac 862 /* */ wpr_attrac 863 /* 1) Call hud_radar_ConstructRadarInfo(1). */ wpr_attrac 864 /* 2) Draw sky and setup the camera. */ wpr_attrac 865 /* 3) Draw all visible terrain. */ wpr_attrac 866 /* 4) Draw all visible world objects. */ wpr_attrac 867 /* 5) Draw all visible water and waterfalls. */ wpr_attrac 868 /* 6) Draw water splash effects. */ wpr_attrac 869 /* 7) Draw opaque particles (sparks, explosions, etc. +). */ wpr_attrac 870 /* 8) Draw high-transparency particles (mist, spray, +etc.). */ wpr_attrac 871 /* 9) Draw HUD and overlay text. */ wpr_attrac 872 /* 10) Draw splashed screen, if appropriate. */ wpr_attrac 873 static void _DemoModeDraw( void ) { 00000ABC L2057: ; function: _DemoMode + Draw ; frame size=4 00000ABC 4F22 STS.L PR,@-R15 wpr_attrac 874 gutil_ScreenCoverage_ResetTotal(); 00000ABE D326 MOV.L L2569+70, + R3; _gutil_ScreenCoverag + e_ResetTotal 00000AC0 430B JSR @R3 00000AC2 0009 NOP wpr_attrac 875 wpr_attrac 876 world_SetWhiteSat( anim_air_GetLensFlareWhiteS +at() ); 00000AC4 D225 MOV.L L2569+74, + R2; _anim_air_GetLensFla + reWhiteSat 00000AC6 420B JSR @R2 00000AC8 0009 NOP 00000ACA D325 MOV.L L2569+78,R3; _world_SetWhiteSat 00000ACC 430B JSR @R3 00000ACE F40C FMOV.S FR0,FR4 wpr_attrac 877 /* Set up lighting... */ wpr_attrac 878 mesh3d_ClearLightList(); 00000AD0 D224 MOV.L L2569+82, + R2; _mesh3d_ClearLightLi + st 00000AD2 420B JSR @R2 00000AD4 0009 NOP wpr_attrac 879 anim_air_Lightning(); 00000AD6 D324 MOV.L L2569+86,R3; _anim_air_Lightning 00000AD8 430B JSR @R3 00000ADA 0009 NOP wpr_attrac 880 wpr_attrac 881 /* 1) Call hud_radar_ConstructRadarInfo( 1 ). + */ wpr_attrac 882 /* hud_radar_ConstructRadarInfo( 1 ); */ wpr_attrac 883 /* 2) Draw sky and setup the camera. */ wpr_attrac 884 _DemoModeCamera( _StageNum, 3 ); 00000ADC D215 MOV.L L2569+34,R2; L2041 00000ADE E503 MOV #3,R5 00000AE0 B052 BSR L2058 00000AE2 6422 MOV.L @R2,R4 wpr_attrac 885 sky_SetWhiteSat( anim_air_GetLensFlareWhiteSat +() ); 00000AE4 D21D MOV.L L2569+74, + R2; _anim_air_GetLensFla + reWhiteSat 00000AE6 420B JSR @R2 00000AE8 0009 NOP 00000AEA D320 MOV.L L2569+90,R3; _sky_SetWhiteSat 00000AEC 430B JSR @R3 00000AEE F40C FMOV.S FR0,FR4 wpr_attrac 886 sky_Draw (); 00000AF0 D21F MOV.L L2569+94,R2; _sky_Draw 00000AF2 420B JSR @R2 00000AF4 0009 NOP wpr_attrac 887 wpr_attrac 888 /* 3) Draw all visible terrain. */ wpr_attrac 889 /* 4) Draw all visible world objects. */ wpr_attrac 890 /* 5) Draw all visible water and waterfalls. +*/ wpr_attrac 891 /* 6) Draw water splash effects. */ wpr_attrac 892 /* 7) Draw opaque particles (sparks, explosio +ns, etc.). */ wpr_attrac 893 /* 8) Draw high-transparency particles (mist, + spray, etc.). */ wpr_attrac 894 world_DrawSectorViewDir( Gamecam_pSector, SECT +OR_DIRECTION_FORWARD ); 00000AF6 D220 MOV.L L2569+102, + R2; _world_DrawSectorVi + ewDir 00000AF8 E500 MOV #0,R5 00000AFA D31E MOV.L L2569+98,R3; _Gamecam_pSector 00000AFC 420B JSR @R2 00000AFE 6432 MOV.L @R3,R4 wpr_attrac 895 wpr_attrac 896 /* 9) Draw HUD and overlay text. */ wpr_attrac 897 anim_air_DoLensFlare(); 00000B00 D11E MOV.L L2569+106, + R1; _anim_air_DoLensFla + re 00000B02 410B JSR @R1 00000B04 0009 NOP wpr_attrac 898 /* 10) Draw splashed screen, if appropriate. * +/ wpr_attrac 899 _OverLayDraw(); 00000B06 D21E MOV.L L2569+110,R2; L2064 00000B08 420B JSR @R2 00000B0A 0009 NOP wpr_attrac 900 /* must be drawn last */ wpr_attrac 901 hud_wrongway_Draw(); 00000B0C D11D MOV.L L2569+114,R1; _hud_wrongway_Draw 00000B0E 412B JMP @R1 00000B10 4F26 LDS.L @R15+,PR 00000B12 L2569: 00000B12 0128 .DATA.W H'0128 00000B14 01F0 .DATA.W H'01F0 00000B16 014C .DATA.W H'014C 00000B18 0150 .DATA.W H'0150 00000B1A 00000002 .RES.W 1 00000B1C <00000000> .DATA.L _phys_SimulateAndCollideAll 00000B20 461C4000 .DATA.L H'461C4000 00000B24 <00000000> .DATA.L _Gameloop_nDeltaFrames 00000B28 <00000000> .DATA.L _worldob_CallAllWorkFcns 00000B2C <00000000> .DATA.L _worldcoll_Work 00000B30 <00000000> .DATA.L _collide_obj_Work 00000B34 <00000000> .DATA.L L2041 00000B38 <00000000> .DATA.L _particle_CallWorkFunctions 00000B3C <00000000> .DATA.L _particle_CallCellBlocksWorkFunc + tions 00000B40 <00000000> .DATA.L _waterspray_Work 00000B44 <00000000> .DATA.L _worldob_TransformAllObjectLight + 00000B48 <00000000> .DATA.L _player_UpdateRank 00000B4C <00000000> .DATA.L L2063 00000B50 <00000000> .DATA.L _hud_wrongway_Work 00000B54 <00000000> .DATA.L _phys_Work 00000B58 <00000000> .DATA.L _gutil_ScreenCoverage_ResetTotal 00000B5C <00000000> .DATA.L _anim_air_GetLensFlareWhiteSat 00000B60 <00000000> .DATA.L _world_SetWhiteSat 00000B64 <00000000> .DATA.L _mesh3d_ClearLightList 00000B68 <00000000> .DATA.L _anim_air_Lightning 00000B6C <00000000> .DATA.L _sky_SetWhiteSat 00000B70 <00000000> .DATA.L _sky_Draw 00000B74 <00000000> .DATA.L _Gamecam_pSector 00000B78 <00000000> .DATA.L _world_DrawSectorViewDir 00000B7C <00000000> .DATA.L _anim_air_DoLensFlare 00000B80 <00000000> .DATA.L L2064 00000B84 <00000000> .DATA.L _hud_wrongway_Draw wpr_attrac 902 } wpr_attrac 903 wpr_attrac 904 wpr_attrac 905 static Vec3_t _CamPos, _CamLook, _BSCamPos; wpr_attrac 906 static Cam_t _Camera; wpr_attrac 907 static u32 _nCurrentCamPlayer; wpr_attrac 908 static u32 _nCurrentCamType; wpr_attrac 909 static int _nCamHeading; wpr_attrac 910 static u32 _n2ndCamPlayer; wpr_attrac 911 wpr_attrac 912 wpr_attrac 913 /* SCRIPT OUT ALL DEMO MODE CAMERA BEHAVIOR HERE!!! */ wpr_attrac 914 /* nStageNum is the current attract mode stage */ wpr_attrac 915 /* nMode is on of the following: */ wpr_attrac 916 /* 0 = init */ wpr_attrac 917 /* 1 = cleanup */ wpr_attrac 918 /* 2 = work call */ wpr_attrac 919 /* 3 = draw call */ wpr_attrac 920 static void _DemoModeCamera( u32 nStagp, u32 nMode +) { 00000B88 L2058: ; function: _DemoMode + Camera ; frame size=56 00000B88 2FE6 MOV.L R14,@-R15 00000B8A 2FD6 MOV.L R13,@-R15 00000B8C 2FC6 MOV.L R12,@-R15 00000B8E 2FB6 MOV.L R11,@-R15 00000B90 2FA6 MOV.L R10,@-R15 00000B92 FFFB FMOV.S FR15,@-R15 00000B94 FFEB FMOV.S FR14,@-R15 00000B96 FFDB FMOV.S FR13,@-R15 00000B98 FFCB FMOV.S FR12,@-R15 00000B9A 4F22 STS.L PR,@-R15 00000B9C 7FF4 ADD #-12,R15 wpr_attrac 921 Vec3_t CamPos; wpr_attrac 922 wpr_attrac 923 /* clean up here */ wpr_attrac 924 if( nMode == 1 ) { 00000B9E 6053 MOV R5,R0 00000BA0 0009 NOP 00000BA2 8801 CMP/EQ #1,R0 00000BA4 8F06 BF/S L2453 00000BA6 EE00 MOV #0,R14 wpr_attrac 925 gamecam_Unattach(); 00000BA8 D22D MOV.L L2570+10,R2; _gamecam_Unattach 00000BAA 420B JSR @R2 00000BAC 0009 NOP wpr_attrac 926 E Gamecam_pSector = 0; 00000BAE D32D MOV.L L2570+14,R3; _Gamecam_pSector wpr_attrac 927 return; 00000BB0 A2A8 BRA L2454 00000BB2 23E2 MOV.L R14,@R3 00000BB4 L2453: wpr_attrac 928 } wpr_attrac 929 wpr_attrac 930 switch( nStageNum ) 00000BB4 C72F MOVA L2570+30,R0 00000BB6 DD31 MOV.L L2570+38,R13; _vec3_Set 00000BB8 FD08 FMOV.S @R0,FR13 00000BBA C72F MOVA L2570+34,R0 00000BBC FE08 FMOV.S @R0,FR14 00000BBE EC01 MOV #1,R12 00000BC0 D62B MOV.L L2570+26,R6; L2052 00000BC2 DB2A MOV.L L2570+22,R11; _gerr_Assert 00000BC4 DA28 MOV.L L2570+18,R10; L2071 00000BC6 6043 MOV R4,R0 00000BC8 0009 NOP 00000BCA 880E CMP/EQ #14,R0 00000BCC 8D14 BT/S L2274 00000BCE FF8D FLDI0 FR15 00000BD0 8810 CMP/EQ #16,R0 00000BD2 8B01 BF L2571 00000BD4 A0B3 BRA L2287 00000BD6 0009 NOP 00000BD8 L2571: 00000BD8 8812 CMP/EQ #18,R0 00000BDA 8B01 BF L2572 00000BDC A1AC BRA L2306 00000BDE 0009 NOP 00000BE0 L2572: 00000BE0 8814 CMP/EQ #20,R0 00000BE2 8909 BT L2275 00000BE4 8816 CMP/EQ #22,R0 00000BE6 8B01 BF L2573 00000BE8 A0A9 BRA L2288 00000BEA 0009 NOP 00000BEC L2573: 00000BEC 8818 CMP/EQ #24,R0 00000BEE 8B01 BF L2574 00000BF0 A1A2 BRA L2307 00000BF2 0009 NOP 00000BF4 L2574: 00000BF4 A282 BRA L2323 00000BF6 0009 NOP 00000BF8 L2274: ; case label wpr_attrac 931 { wpr_attrac 932 case WPR_ATTRACT_STAGE_1: wpr_attrac 933 case WPR_ATTRACT_STAGE_7: 00000BF8 L2275: ; case label wpr_attrac 934 /* powell, 1st set of starts( boats: 0 + razor, 1 cut, 2 tidal, 3 miss ) */ wpr_attrac 935 switch( nMode ) 00000BF8 6053 MOV R5,R0 00000BFA 0009 NOP 00000BFC 8800 CMP/EQ #0,R0 00000BFE 8907 BT L2276 00000C00 8802 CMP/EQ #2,R0 00000C02 8914 BT L2277 00000C04 8803 CMP/EQ #3,R0 00000C06 8B01 BF L2575 00000C08 A26E BRA L2531 00000C0A 0009 NOP 00000C0C L2575: 00000C0C A091 BRA L2286 00000C0E 0009 NOP 00000C10 L2276: ; case label wpr_attrac 936 { wpr_attrac 937 case 0: wpr_attrac 938 vec3_Set( &CamPos, 5787.0f, 12 +50.0f, -898.0f ); 00000C10 C71B MOVA L2570+42,R0 00000C12 F608 FMOV.S @R0,FR6 00000C14 C71B MOVA L2570+46,R0 00000C16 F508 FMOV.S @R0,FR5 00000C18 C71B MOVA L2570+50,R0 00000C1A F408 FMOV.S @R0,FR4 00000C1C 4D0B JSR @R13 00000C1E 64F3 MOV R15,R4 wpr_attrac 939 _InitCam( 0, _CHASE_CAM, &CamP +os, 0, 0 ); 00000C20 2FE6 MOV.L R14,@-R15 00000C22 E509 MOV #9,R5 00000C24 66F3 MOV R15,R6 00000C26 7604 ADD #4,R6 00000C28 E700 MOV #0,R7 wpr_attrac 940 break; 00000C2A A255 BRA L2536 00000C2C 6473 MOV R7,R4 00000C2E L2277: ; case label wpr_attrac 941 case 2: wpr_attrac 942 switch( _nFrameCount ) 00000C2E 6062 MOV.L @R6,R0 00000C30 8864 CMP/EQ #100,R0 00000C32 892B BT L2278 00000C34 910F MOV.W L2570,R1 ; H'00FF 00000C36 3010 CMP/EQ R1,R0 00000C38 892F BT L2279 00000C3A 910D MOV.W L2570+2,R1 ; H'01CC 00000C3C 3010 CMP/EQ R1,R0 00000C3E 8932 BT L2280 00000C40 910B MOV.W L2570+4,R1 ; H'0267 00000C42 3010 CMP/EQ R1,R0 00000C44 893E BT L2281 00000C46 9109 MOV.W L2570+6,R1 ; H'0393 00000C48 3010 CMP/EQ R1,R0 00000C4A 894A BT L2282 00000C4C 9107 MOV.W L2570+8,R1 ; H'04A6 00000C4E 3010 CMP/EQ R1,R0 00000C50 8959 BT L2283 00000C52 A06A BRA L2284 00000C54 0009 NOP 00000C56 L2570: 00000C56 00FF .DATA.W H'00FF 00000C58 01CC .DATA.W H'01CC 00000C5A 0267 .DATA.W H'0267 00000C5C 0393 .DATA.W H'0393 00000C5E 04A6 .DATA.W H'04A6 00000C60 <00000000> .DATA.L _gamecam_Unattach 00000C64 <00000000> .DATA.L _Gamecam_pSector 00000C68 <00000000> .DATA.L L2071 00000C6C <00000000> .DATA.L _gerr_Assert 00000C70 <00000000> .DATA.L L2052 00000C74 40E00000 .DATA.L H'40E00000 00000C78 C1000000 .DATA.L H'C1000000 00000C7C <00000000> .DATA.L _vec3_Set 00000C80 C4608000 .DATA.L H'C4608000 00000C84 449C4000 .DATA.L H'449C4000 00000C88 45B4D800 .DATA.L H'45B4D800 00000C8C L2278: ; case label wpr_attrac 943 { wpr_attrac 944 case 100: wpr_attrac 945 vec3_Set( &CamPos, 460 +2.0f, 72.0f, -3161.0f ); 00000C8C C73A MOVA L2576+4,R0 00000C8E F608 FMOV.S @R0,FR6 00000C90 C73A MOVA L2576+8,R0 00000C92 F508 FMOV.S @R0,FR5 00000C94 C73A MOVA L2576+12,R0 wpr_attrac 946 _InitCam( 2, _ESPN_CAM +, &CamPos, 0, 0 ); wpr_attrac 947 break; 00000C96 A00C BRA L2532 00000C98 F408 FMOV.S @R0,FR4 00000C9A L2279: ; case label wpr_attrac 948 case 255: wpr_attrac 949 E _InitCam( 1, _GAME_CAM +2, 0, 0, 0 ); 00000C9A E700 MOV #0,R7 00000C9C 2FE6 MOV.L R14,@-R15 00000C9E E501 MOV #1,R5 00000CA0 6673 MOV R7,R6 wpr_attrac 950 break; 00000CA2 A03E BRA L2533 00000CA4 6453 MOV R5,R4 00000CA6 L2280: ; case label wpr_attrac 951 case 460: wpr_attrac 952 vec3_Set( &CamPos, 264 +4.0f, -36.0f, -355.0f ); 00000CA6 C737 MOVA L2576+16,R0 00000CA8 F608 FMOV.S @R0,FR6 00000CAA C737 MOVA L2576+20,R0 00000CAC F508 FMOV.S @R0,FR5 00000CAE C737 MOVA L2576+24,R0 00000CB0 F408 FMOV.S @R0,FR4 wpr_attrac 953 _InitCam( 2, _ESPN_CAM +, &CamPos, 0, 0 ); wpr_attrac 954 break; 00000CB2 L2532: 00000CB2 4D0B JSR @R13 00000CB4 64F3 MOV R15,R4 00000CB6 2FE6 MOV.L R14,@-R15 00000CB8 E503 MOV #3,R5 00000CBA 66F3 MOV R15,R6 00000CBC 7604 ADD #4,R6 00000CBE E700 MOV #0,R7 00000CC0 A02F BRA L2533 00000CC2 E402 MOV #2,R4 00000CC4 L2281: ; case label wpr_attrac 955 case 615: wpr_attrac 956 vec3_Set( &CamPos, 7.0 +f, 7.5f, -6.0f ); 00000CC4 C732 MOVA L2576+28,R0 00000CC6 F4DC FMOV.S FR13,FR4 00000CC8 F608 FMOV.S @R0,FR6 00000CCA C732 MOVA L2576+32,R0 00000CCC F508 FMOV.S @R0,FR5 00000CCE 4D0B JSR @R13 00000CD0 64F3 MOV R15,R4 wpr_attrac 957 _InitCam( 3, _ESPN3_CA +M, &CamPos, 0, 1 ); 00000CD2 2FC6 MOV.L R12,@-R15 00000CD4 E507 MOV #7,R5 00000CD6 66F3 MOV R15,R6 00000CD8 E403 MOV #3,R4 00000CDA E700 MOV #0,R7 00000CDC 7604 ADD #4,R6 wpr_attrac 958 break; 00000CDE A020 BRA L2533 00000CE0 0009 NOP 00000CE2 L2282: ; case label wpr_attrac 959 case 915: wpr_attrac 960 vec3_Set( &CamPos, -5. +0f, 9.5f, 25.0f ); 00000CE2 C72D MOVA L2576+36,R0 00000CE4 F608 FMOV.S @R0,FR6 00000CE6 C72D MOVA L2576+40,R0 00000CE8 F508 FMOV.S @R0,FR5 00000CEA C72D MOVA L2576+44,R0 00000CEC F408 FMOV.S @R0,FR4 00000CEE 4D0B JSR @R13 00000CF0 64F3 MOV R15,R4 wpr_attrac 961 _InitCam( 0, _ESPN2_CA +M, &CamPos, 0, 2 ); 00000CF2 E302 MOV #2,R3 00000CF4 2F36 MOV.L R3,@-R15 00000CF6 E506 MOV #6,R5 00000CF8 66F3 MOV R15,R6 00000CFA 7604 ADD #4,R6 00000CFC E700 MOV #0,R7 00000CFE B215 BSR L2059 00000D00 6473 MOV R7,R4 wpr_attrac 962 break; 00000D02 A1EB BRA L2530 00000D04 0009 NOP 00000D06 L2283: ; case label wpr_attrac 963 case 1190: wpr_attrac 964 vec3_Set( &CamPos, -15 +25.0f, -95.0f, 4460.0f ); 00000D06 C727 MOVA L2576+48,R0 00000D08 F608 FMOV.S @R0,FR6 00000D0A C727 MOVA L2576+52,R0 00000D0C F508 FMOV.S @R0,FR5 00000D0E C727 MOVA L2576+56,R0 00000D10 F408 FMOV.S @R0,FR4 00000D12 4D0B JSR @R13 00000D14 64F3 MOV R15,R4 wpr_attrac 965 _InitCam( 0, _ESPN_CAM +, &CamPos, 0, 0 ); 00000D16 2FE6 MOV.L R14,@-R15 00000D18 E503 MOV #3,R5 00000D1A 66F3 MOV R15,R6 00000D1C E400 MOV #0,R4 00000D1E E700 MOV #0,R7 00000D20 7604 ADD #4,R6 wpr_attrac 966 break; 00000D22 L2533: 00000D22 B203 BSR L2059 00000D24 0009 NOP 00000D26 A1D9 BRA L2530 00000D28 0009 NOP 00000D2A L2284: ; default label wpr_attrac 967 default: wpr_attrac 968 _CamWork(); 00000D2A B4E9 BSR L2060 00000D2C 0009 NOP wpr_attrac 969 break; wpr_attrac 970 } wpr_attrac 971 break; 00000D2E A1E9 BRA L2454 00000D30 0009 NOP 00000D32 L2286: ; default label wpr_attrac 972 case 3: wpr_attrac 973 _CamDraw(); wpr_attrac 974 break; wpr_attrac 975 default: wpr_attrac 976 E if( (!(0)) ) gerr_Assert( 0, " +wpr_attract.c", 976 ); 00000D32 961F MOV.W L2576,R6 ; H'03D0 00000D34 65A3 MOV R10,R5 00000D36 4B0B JSR @R11 00000D38 E400 MOV #0,R4 wpr_attrac 977 break; wpr_attrac 978 } wpr_attrac 979 break; 00000D3A A1E3 BRA L2454 00000D3C 0009 NOP 00000D3E L2287: ; case label wpr_attrac 980 case WPR_ATTRACT_STAGE_3: wpr_attrac 981 case WPR_ATTRACT_STAGE_9: 00000D3E L2288: ; case label wpr_attrac 982 /* artic, 1st set of starts( boats: 0 +cut, 1 tidal, 2 miss, 3 damn ) */ wpr_attrac 983 switch( nMode ) 00000D3E 6053 MOV R5,R0 00000D40 0009 NOP 00000D42 8800 CMP/EQ #0,R0 00000D44 8907 BT L2289 00000D46 8802 CMP/EQ #2,R0 00000D48 8938 BT L2290 00000D4A 8803 CMP/EQ #3,R0 00000D4C 8B01 BF L2577 00000D4E A0E9 BRA L2304 00000D50 0009 NOP 00000D52 L2577: 00000D52 A0EB BRA L2305 00000D54 0009 NOP 00000D56 L2289: ; case label wpr_attrac 984 { wpr_attrac 985 case 0: wpr_attrac 986 vec3_Set( &CamPos, -2145.0f, 2 +20.0f, 1008.0f ); 00000D56 C716 MOVA L2576+60,R0 00000D58 F608 FMOV.S @R0,FR6 00000D5A C716 MOVA L2576+64,R0 00000D5C F508 FMOV.S @R0,FR5 00000D5E C716 MOVA L2576+68,R0 00000D60 F408 FMOV.S @R0,FR4 00000D62 4D0B JSR @R13 00000D64 64F3 MOV R15,R4 wpr_attrac 987 _InitCam( 0, _ESPN_CAM, &CamPo +s, 0, 0 ); 00000D66 2FE6 MOV.L R14,@-R15 00000D68 E503 MOV #3,R5 00000D6A 66F3 MOV R15,R6 00000D6C 7604 ADD #4,R6 00000D6E E700 MOV #0,R7 wpr_attrac 988 break; 00000D70 A1B2 BRA L2536 00000D72 6473 MOV R7,R4 00000D74 L2576: 00000D74 03D0 .DATA.W H'03D0 00000D76 00000002 .RES.W 1 00000D78 C5459000 .DATA.L H'C5459000 00000D7C 42900000 .DATA.L H'42900000 00000D80 458FD000 .DATA.L H'458FD000 00000D84 C3B18000 .DATA.L H'C3B18000 00000D88 C2100000 .DATA.L H'C2100000 00000D8C 45254000 .DATA.L H'45254000 00000D90 C0C00000 .DATA.L H'C0C00000 00000D94 40F00000 .DATA.L H'40F00000 00000D98 41C80000 .DATA.L H'41C80000 00000D9C 41180000 .DATA.L H'41180000 00000DA0 C0A00000 .DATA.L H'C0A00000 00000DA4 458B6000 .DATA.L H'458B6000 00000DA8 C2BE0000 .DATA.L H'C2BE0000 00000DAC C4BEA000 .DATA.L H'C4BEA000 00000DB0 447C0000 .DATA.L H'447C0000 00000DB4 435C0000 .DATA.L H'435C0000 00000DB8 C5061000 .DATA.L H'C5061000 00000DBC L2290: ; case label wpr_attrac 989 case 2: wpr_attrac 990 switch( _nFrameCount ) 00000DBC C73B MOVA L2578+24,R0 00000DBE 9169 MOV.W L2578,R1 ; H'00FA 00000DC0 FC08 FMOV.S @R0,FR12 00000DC2 6062 MOV.L @R6,R0 00000DC4 3010 CMP/EQ R1,R0 00000DC6 8922 BT L2291 00000DC8 9165 MOV.W L2578+2,R1 ; H'0177 00000DCA 3010 CMP/EQ R1,R0 00000DCC 8925 BT L2292 00000DCE 9163 MOV.W L2578+4,R1 ; H'01F4 00000DD0 3010 CMP/EQ R1,R0 00000DD2 8928 BT L2293 00000DD4 9161 MOV.W L2578+6,R1 ; H'0271 00000DD6 3010 CMP/EQ R1,R0 00000DD8 892B BT L2294 00000DDA 915F MOV.W L2578+8,R1 ; H'02EE 00000DDC 3010 CMP/EQ R1,R0 00000DDE 892E BT L2295 00000DE0 915D MOV.W L2578+10,R1; H'036B 00000DE2 3010 CMP/EQ R1,R0 00000DE4 8931 BT L2296 00000DE6 915B MOV.W L2578+12,R1; H'039D 00000DE8 3010 CMP/EQ R1,R0 00000DEA 893A BT L2297 00000DEC 9159 MOV.W L2578+14,R1; H'03CF 00000DEE 3010 CMP/EQ R1,R0 00000DF0 8944 BT L2298 00000DF2 9157 MOV.W L2578+16,R1; H'0401 00000DF4 3010 CMP/EQ R1,R0 00000DF6 895D BT L2299 00000DF8 9155 MOV.W L2578+18,R1; H'0433 00000DFA 3010 CMP/EQ R1,R0 00000DFC 8967 BT L2300 00000DFE 9153 MOV.W L2578+20,R1; H'0465 00000E00 3010 CMP/EQ R1,R0 00000E02 8970 BT L2301 00000E04 9151 MOV.W L2578+22,R1; H'04D8 00000E06 3010 CMP/EQ R1,R0 00000E08 897B BT L2302 00000E0A A087 BRA L2303 00000E0C 0009 NOP 00000E0E L2291: ; case label wpr_attrac 991 { wpr_attrac 992 case 250: wpr_attrac 993 E _InitCam( 2, _GAME_CAM +3, 0, 0, 0 ); 00000E0E E700 MOV #0,R7 00000E10 2FE6 MOV.L R14,@-R15 00000E12 E502 MOV #2,R5 00000E14 6673 MOV R7,R6 wpr_attrac 994 break; 00000E16 A15F BRA L2536 00000E18 6453 MOV R5,R4 00000E1A L2292: ; case label wpr_attrac 995 case 375: wpr_attrac 996 E _InitCam( 2, _GAME_CAM +2, 0, 0, 0 ); 00000E1A E700 MOV #0,R7 00000E1C 2FE6 MOV.L R14,@-R15 00000E1E E501 MOV #1,R5 00000E20 6673 MOV R7,R6 wpr_attrac 997 break; 00000E22 A159 BRA L2536 00000E24 E402 MOV #2,R4 00000E26 L2293: ; case label wpr_attrac 998 case 500: wpr_attrac 999 E _InitCam( 2, _GAME_CAM +1, 0, 0, 0 ); 00000E26 E700 MOV #0,R7 00000E28 2FE6 MOV.L R14,@-R15 00000E2A 6573 MOV R7,R5 00000E2C 6673 MOV R7,R6 wpr_attrac 1000 break; 00000E2E A153 BRA L2536 00000E30 E402 MOV #2,R4 00000E32 L2294: ; case label wpr_attrac 1001 case 625: wpr_attrac 1002 E _InitCam( 2, _GAME_CAM +2, 0, 0, 0 ); 00000E32 E700 MOV #0,R7 00000E34 2FE6 MOV.L R14,@-R15 00000E36 E501 MOV #1,R5 00000E38 6673 MOV R7,R6 wpr_attrac 1003 break; 00000E3A A14D BRA L2536 00000E3C E402 MOV #2,R4 00000E3E L2295: ; case label wpr_attrac 1004 case 750: wpr_attrac 1005 E _InitCam( 2, _GAME_CAM +3, 0, 0, 0 ); 00000E3E E700 MOV #0,R7 00000E40 2FE6 MOV.L R14,@-R15 00000E42 E502 MOV #2,R5 00000E44 6673 MOV R7,R6 wpr_attrac 1006 break; 00000E46 A147 BRA L2536 00000E48 6453 MOV R5,R4 00000E4A L2296: ; case label wpr_attrac 1007 case 875: wpr_attrac 1008 vec3_Set( &CamPos, 0.0 +f, 9.0f, -8.0f ); 00000E4A F4FC FMOV.S FR15,FR4 00000E4C F5CC FMOV.S FR12,FR5 00000E4E F6EC FMOV.S FR14,FR6 00000E50 4D0B JSR @R13 00000E52 64F3 MOV R15,R4 wpr_attrac 1009 _InitCam( 1, _ESPN2_CA +M, &CamPos, 0, 0 ); 00000E54 2FE6 MOV.L R14,@-R15 00000E56 E506 MOV #6,R5 00000E58 66F3 MOV R15,R6 00000E5A 7604 ADD #4,R6 00000E5C E700 MOV #0,R7 wpr_attrac 1010 break; 00000E5E A13B BRA L2536 00000E60 E401 MOV #1,R4 00000E62 L2297: ; case label wpr_attrac 1011 case 925: wpr_attrac 1012 vec3_Set( &CamPos, 0.0 +f, 7.0f, 12.0f ); 00000E62 C713 MOVA L2578+28,R0 00000E64 F4FC FMOV.S FR15,FR4 00000E66 F608 FMOV.S @R0,FR6 00000E68 F5DC FMOV.S FR13,FR5 00000E6A 4D0B JSR @R13 00000E6C 64F3 MOV R15,R4 wpr_attrac 1013 _InitCam( 0, _ESPN2_CA +M, &CamPos, 0, 1 ); 00000E6E 2FC6 MOV.L R12,@-R15 00000E70 E506 MOV #6,R5 00000E72 66F3 MOV R15,R6 00000E74 7604 ADD #4,R6 00000E76 E700 MOV #0,R7 wpr_attrac 1014 break; 00000E78 A12E BRA L2536 00000E7A 6473 MOV R7,R4 00000E7C L2298: ; case label wpr_attrac 1015 case 975: wpr_attrac 1016 vec3_Set( &CamPos, 0.0 +f, 9.0f, -8.0f ); 00000E7C F4FC FMOV.S FR15,FR4 00000E7E F5CC FMOV.S FR12,FR5 00000E80 F6EC FMOV.S FR14,FR6 00000E82 4D0B JSR @R13 00000E84 64F3 MOV R15,R4 wpr_attrac 1017 _InitCam( 1, _ESPN2_CA +M, &CamPos, 0, 0 ); 00000E86 2FE6 MOV.L R14,@-R15 00000E88 E506 MOV #6,R5 00000E8A 66F3 MOV R15,R6 00000E8C 7604 ADD #4,R6 00000E8E E700 MOV #0,R7 wpr_attrac 1018 break; 00000E90 A122 BRA L2536 00000E92 E401 MOV #1,R4 00000E94 L2578: 00000E94 00FA .DATA.W H'00FA 00000E96 0177 .DATA.W H'0177 00000E98 01F4 .DATA.W H'01F4 00000E9A 0271 .DATA.W H'0271 00000E9C 02EE .DATA.W H'02EE 00000E9E 036B .DATA.W H'036B 00000EA0 039D .DATA.W H'039D 00000EA2 03CF .DATA.W H'03CF 00000EA4 0401 .DATA.W H'0401 00000EA6 0433 .DATA.W H'0433 00000EA8 0465 .DATA.W H'0465 00000EAA 04D8 .DATA.W H'04D8 00000EAC 41100000 .DATA.L H'41100000 00000EB0 41400000 .DATA.L H'41400000 00000EB4 L2299: ; case label wpr_attrac 1019 case 1025: wpr_attrac 1020 vec3_Set( &CamPos, 0.0 +f, 7.0f, 12.0f ); 00000EB4 C732 MOVA L2579+2,R0 00000EB6 F4FC FMOV.S FR15,FR4 00000EB8 F608 FMOV.S @R0,FR6 00000EBA F5DC FMOV.S FR13,FR5 00000EBC 4D0B JSR @R13 00000EBE 64F3 MOV R15,R4 wpr_attrac 1021 _InitCam( 0, _ESPN2_CA +M, &CamPos, 0, 1 ); 00000EC0 2FC6 MOV.L R12,@-R15 00000EC2 E506 MOV #6,R5 00000EC4 66F3 MOV R15,R6 00000EC6 7604 ADD #4,R6 00000EC8 E700 MOV #0,R7 wpr_attrac 1022 break; 00000ECA A105 BRA L2536 00000ECC 6473 MOV R7,R4 00000ECE L2300: ; case label wpr_attrac 1023 case 1075: wpr_attrac 1024 vec3_Set( &CamPos, 0.0 +f, 9.0f, -8.0f ); 00000ECE F4FC FMOV.S FR15,FR4 00000ED0 F5CC FMOV.S FR12,FR5 00000ED2 F6EC FMOV.S FR14,FR6 00000ED4 4D0B JSR @R13 00000ED6 64F3 MOV R15,R4 wpr_attrac 1025 _InitCam( 1, _ESPN2_CA +M, &CamPos, 0, 0 ); 00000ED8 2FE6 MOV.L R14,@-R15 00000EDA E506 MOV #6,R5 00000EDC 66F3 MOV R15,R6 00000EDE 7604 ADD #4,R6 00000EE0 E700 MOV #0,R7 wpr_attrac 1026 break; 00000EE2 A0F9 BRA L2536 00000EE4 E401 MOV #1,R4 00000EE6 L2301: ; case label wpr_attrac 1027 case 1125: wpr_attrac 1028 vec3_Set( &CamPos, 0.0 +f, 7.0f, 12.0f ); 00000EE6 C726 MOVA L2579+2,R0 00000EE8 F4FC FMOV.S FR15,FR4 00000EEA F608 FMOV.S @R0,FR6 00000EEC F5DC FMOV.S FR13,FR5 00000EEE 4D0B JSR @R13 00000EF0 64F3 MOV R15,R4 wpr_attrac 1029 _InitCam( 0, _ESPN2_CA +M, &CamPos, 0, 1 ); 00000EF2 2FC6 MOV.L R12,@-R15 00000EF4 E506 MOV #6,R5 00000EF6 66F3 MOV R15,R6 00000EF8 E400 MOV #0,R4 00000EFA E700 MOV #0,R7 00000EFC 7604 ADD #4,R6 wpr_attrac 1030 break; 00000EFE A0EB BRA L2536 00000F00 0009 NOP 00000F02 L2302: ; case label wpr_attrac 1031 case 1240: wpr_attrac 1032 vec3_Copy( &CamPos, &_ +CamPos ); 00000F02 D321 MOV.L L2579+10,R3; _vec3_Copy 00000F04 D51F MOV.L L2579+6,R5 ; L2138 00000F06 430B JSR @R3 00000F08 64F3 MOV R15,R4 wpr_attrac 1033 _InitCam( 0, _ESPN_CAM +, &CamPos, 0, 0 ); 00000F0A 2FE6 MOV.L R14,@-R15 00000F0C E503 MOV #3,R5 00000F0E 66F3 MOV R15,R6 00000F10 7604 ADD #4,R6 00000F12 E700 MOV #0,R7 00000F14 B10A BSR L2059 00000F16 6473 MOV R7,R4 wpr_attrac 1034 break; 00000F18 A0E0 BRA L2530 00000F1A 0009 NOP 00000F1C L2303: ; default label wpr_attrac 1035 default: wpr_attrac 1036 _CamWork(); 00000F1C B3F0 BSR L2060 00000F1E 0009 NOP wpr_attrac 1037 break; wpr_attrac 1038 } wpr_attrac 1039 break; 00000F20 A0F0 BRA L2454 00000F22 0009 NOP 00000F24 L2304: ; case label wpr_attrac 1040 case 3: wpr_attrac 1041 _CamDraw(); 00000F24 B5BA BSR L2061 00000F26 0009 NOP wpr_attrac 1042 break; 00000F28 A0EC BRA L2454 00000F2A 0009 NOP 00000F2C L2305: ; default label wpr_attrac 1043 default: wpr_attrac 1044 E if( (!(0)) ) gerr_Assert( 0, " +wpr_attract.c", 1044 ); 00000F2C 9627 MOV.W L2579,R6 ; H'0414 00000F2E 65A3 MOV R10,R5 00000F30 4B0B JSR @R11 00000F32 E400 MOV #0,R4 wpr_attrac 1045 break; wpr_attrac 1046 } wpr_attrac 1047 break; 00000F34 A0E6 BRA L2454 00000F36 0009 NOP 00000F38 L2306: ; case label wpr_attrac 1048 case WPR_ATTRACT_STAGE_5: wpr_attrac 1049 case WPR_ATTRACT_STAGE_11: 00000F38 L2307: ; case label wpr_attrac 1050 /* amazon, 1st set of starts( boats: 0 + tidal, 1 miss, 2 damn, 3 thresher ) */ wpr_attrac 1051 switch( nMode ) 00000F38 6053 MOV R5,R0 00000F3A 0009 NOP 00000F3C 8800 CMP/EQ #0,R0 000003E 8907 BT L2308 00000F40 8802 CMP/EQ #2,R0 00000F42 8931 BT L2309 00000F44 8803 CMP/EQ #3,R0 00000F46 8B01 BF L2580 00000F48 A0CE BRA L2321 00000F4A 0009 NOP 00000F4C L2580: 00000F4C A0D0 BRA L2322 00000F4E 0009 NOP 00000F50 L2308: ; case label wpr_attrac 1052 { wpr_attrac 1053 case 0: wpr_attrac 1054 vec3_Set( &_CamLook, -2807.0f, + -478.0f, 15133.0f ); 00000F50 C70E MOVA L2579+14,R0 00000F52 D411 MOV.L L2579+26,R4; L2139 00000F54 F608 FMOV.S @R0,FR6 00000F56 C70E MOVA L2579+18,R0 00000F58 F508 FMOV.S @R0,FR5 00000F5A C70E MOVA L2579+22,R0 00000F5C 4D0B JSR @R13 00000F5E F408 FMOV.S @R0,FR4 wpr_attrac 1055 vec3_Set( &CamPos, -3086.0f, - +462.0f, 13286.0f ); 00000F60 C70E MOVA L2579+30,R0 00000F62 F608 FMOV.S @R0,FR6 00000F64 C70E MOVA L2579+34,R0 00000F66 F508 FMOV.S @R0,FR5 00000F68 C70E MOVA L2579+38,R0 00000F6A F408 FMOV.S @R0,FR4 00000F6C 4D0B JSR @R13 00000F6E 64F3 MOV R15,R4 wpr_attrac 1056 _InitCam( 0, _STATIONARY_CAM, +&CamPos, 0, 0 ); 00000F70 2FE6 MOV.L R14,@-R15 00000F72 E508 MOV #8,R5 00000F74 66F3 MOV R15,R6 00000F76 7604 ADD #4,R6 00000F78 E700 MOV #0,R7 wpr_attrac 1057 break; 00000F7A A0AD BRA L2536 00000F7C 6473 MOV R7,R4 00000F7E L2579: 00000F7E 0414 .DATA.W H'0414 00000F80 41400000 .DATA.L H'41400000 00000F84 <00000000> .DATA.L L2138 00000F88 <00000000> .DATA.L _vec3_Copy 00000F8C 466C7400 .DATA.L H'466C7400 00000F90 C3EF0000 .DATA.L H'C3EF0000 00000F94 C52F7000 .DATA.L H'C52F7000 00000F98 <00000000> .DATA.L L2139 00000F9C 464F9800 .DATA.L H'464F9800 00000FA0 C3E70000 .DATA.L H'C3E70000 00000FA4 C540E000 .DATA.L H'C540E000 00000FA8 L2309: ; case label wpr_attrac 1058 case 2: wpr_attrac 1059 switch( _nFrameCount ) 00000FA8 6062 MOV.L @R6,R0 00000FAA 8878 CMP/EQ #120,R0 00000FAC 891C BT L2310 00000FAE 9163 MOV.W L2581,R1 ; H'00C8 00000FB0 3010 CMP/EQ R1,R0 00000FB2 8928 BT L2311 00000FB4 9161 MOV.W L2581+2,R1 ; H'0145 00000FB6 3010 CMP/EQ R1,R0 00000FB8 892B BT L2312 00000FBA 915F MOV.W L2581+4,R1 ; H'01C2 00000FBC 3010 CMP/EQ R1,R0 00000FBE 892E BT L2313 00000FC0 915D MOV.W L2581+6,R1 ; H'023F 00000FC2 3010 CMP/EQ R1,R0 00000FC4 8931 BT L2314 00000FC6 915B MOV.W L2581+8,R1 ; H'02BC 00000FC8 3010 CMP/EQ R1,R0 00000FCA 8934 BT L2315 00000FCC 9159 MOV.W L2581+10,R1; H'0339 00000FCE 3010 CMP/EQ R1,R0 00000FD0 8937 BT L2316 00000FD2 9157 MOV.W L2581+12,R1; H'03E8 00000FD4 3010 CMP/EQ R1,R0 00000FD6 8942 BT L2317 00000FD8 9155 MOV.W L2581+14,R1; H'044C 00000FDA 3010 CMP/EQ R1,R0 00000FDC 8962 BT L2318 00000FDE 9153 MOV.W L2581+16,R1; H'04C4 00000FE0 3010 CMP/EQ R1,R0 00000FE2 896D BT L2319 00000FE4 A07C BRA L2320 00000FE6 0009 NOP 00000FE8 L2310: ; case label wpr_attrac 1060 { wpr_attrac 1061 case 120: wpr_attrac 1062 vec3_Set( &CamPos, -31 +00.0f, -455.0f, 14048.0f ); 00000FE8 C728 MOVA L2581+20,R0 00000FEA F608 FMOV.S @R0,FR6 00000FEC C728 MOVA L2581+24,R0 00000FEE F508 FMOV.S @R0,FR5 00000FF0 C728 MOVA L2581+28,R0 00000FF2 F408 FMOV.S @R0,FR4 00000FF4 4D0B JSR @R13 00000FF6 64F3 MOV R15,R4 wpr_attrac 1063 _InitCam( 0, _ESPN_CAM +,&CamPos, 0, 0 ); 00000FF8 2FE6 MOV.L R14,@-R15 00000FFA E503 MOV #3,R5 00000FFC 66F3 MOV R15,R6 00000FFE 7604 ADD #4,R6 00001000 E700 MOV #0,R7 wpr_attrac 1064 break; 00001002 A069 BRA L2536 00001004 6473 MOV R7,R4 00001006 L2311: ; case label wpr_attrac 1065 case 200: wpr_attrac 1066 E _InitCam( 0, _GAME_CAM +3, 0, 0, 0 ); 00001006 E700 MOV #0,R7 00001008 2FE6 MOV.L R14,@-R15 0000100A E502 MOV #2,R5 0000100C 6673 MOV R7,R6 wpr_attrac 1067 break; 0000100E A063 BRA L2536 00001010 6473 MOV R7,R4 00001012 L2312: ; case label wpr_attrac 1068 case 325: wpr_attrac 1069 E _InitCam( 0, _GAME_CAM +2, 0, 0, 0 ); 00001012 E700 MOV #0,R7 00001014 2FE6 MOV.L R14,@-R15 00001016 E501 MOV #1,R5 00001018 6673 MOV R7,R6 wpr_attrac 1070 break; 0000101A A05D BRA L2536 0000101C 6473 MOV R7,R4 0000101E L2313: ; case label wpr_attrac 1071 case 450: wpr_attrac 1072 E _InitCam( 0, _GAME_CAM +1, 0, 0, 0 ); 0000101E E700 MOV #0,R7 00001020 2FE6 MOV.L R14,@-R15 00001022 6573 MOV R7,R5 00001024 6673 MOV R7,R6 wpr_attrac 1073 break; 00001026 A057 BRA L2536 00001028 6473 MOV R7,R4 0000102A L2314: ; case label wpr_attrac 1074 case 575: wpr_attrac 1075 E _InitCam( 0, _GAME_CAM +2, 0, 0, 0 ); 0000102A E700 MOV #0,R7 0000102C 2FE6 MOV.L R14,@-R15 0000102E E501 MOV #1,R5 00001030 6673 MOV R7,R6 wpr_attrac 1076 break; 00001032 A051 BRA L2536 00001034 6473 MOV R7,R4 00001036 L2315: ; case label wpr_attrac 1077 case 700: wpr_attrac 1078 E _InitCam( 0, _GAME_CAM +3, 0, 0, 0 ); 00001036 E700 MOV #0,R7 00001038 2FE6 MOV.L R14,@-R15 0000103A E502 MOV #2,R5 0000103C 6673 MOV R7,R6 wpr_attrac 1079 break; 0000103E A04B BRA L2536 00001040 6473 MOV R7,R4 00001042 L2316: ; case label wpr_attrac 1080 case 825: wpr_attrac 1081 vec3_Set( &CamPos, 0.0 +f, 6.5f, -4.0f ); 00001042 C715 MOVA L2581+32,R0 00001044 F4FC FMOV.S FR15,FR4 00001046 F608 FMOV.S @R0,FR6 00001048 C714 MOVA L2581+36,R0 0000104A F508 FMOV.S @R0,FR5 0000104C 4D0B JSR @R13 0000104E 64F3 MOV R15,R4 wpr_attrac 1082 _InitCam( 1, _ESPN2_CA +M, &CamPos, 0, 0 ); 00001050 2FE6 MOV.L R14,@-R15 00001052 E506 MOV #6,R5 00001054 66F3 MOV R15,R6 00001056 7604 ADD #4,R6 00001058 E700 MOV #0,R7 wpr_attrac 1083 break; 0000105A A03D BRA L2536 0000105C E401 MOV #1,R4 0000105E L2317: ; case label wpr_attrac 1084 case 1000: wpr_attrac 1085 vec3_Set( &CamPos, 0.0 +f, 8.0f, -8.0f ); 0000105E C710 MOVA L2581+40,R0 00001060 F4FC FMOV.S FR15,FR4 00001062 F508 FMOV.S @R0,FR5 00001064 F6EC FMOV.S FR14,FR6 00001066 4D0B JSR @R13 00001068 64F3 MOV R15,R4 wpr_attrac 1086 _InitCam( 0, _ESPN2_CA +M, &CamPos, 0, 1 ); 0000106A 2FC6 MOV.L R12,@-R15 0000106C E506 MOV #6,R5 0000106E 66F3 MOV R15,R6 00001070 7604 ADD #4,R6 00001072 E700 MOV #0,R7 wpr_attrac 1087 break; 00001074 A030 BRA L2536 00001076 6473 MOV R7,R4 00001078 L2581: 00001078 00C8 .DATA.W H'00C8 0000107A 0145 .DATA.W H'0145 0000107C 01C2 .DATA.W H'01C2 0000107E 023F .DATA.W H'023F 00001080 02BC .DATA.W H'02BC 00001082 0339 .DATA.W H'0339 00001084 03E8 .DATA.W H'03E8 00001086 044C .DATA.W H'044C 00001088 04C4 .DATA.W H'04C4 0000108A 00000002 .RES.W 1 0000108C 465B8000 .DATA.L H'465B8000 00001090 C3E38000 .DATA.L H'C3E38000 00001094 C541C000 .DATA.L H'C541C000 00001098 C0800000 .DATA.L H'C0800000 0000109C 40D00000 .DATA.L H'40D00000 000010A0 41000000 .DATA.L H'41000000 000010A4 L2318: ; case label wpr_attrac 1088 case 1100: wpr_attrac 1089 vec3_Set( &CamPos, 0.0 +f, 6.5f, -4.0f ); 000010A4 C71E MOVA L2582+4,R0 000010A6 F4FC FMOV.S FR15,FR4 000010A8 F608 FMOV.S @R0,FR6 000010AA C71E MOVA L2582+8,R0 000010AC F508 FMOV.S @R0,FR5 000010AE 4D0B JSR @R13 000010B0 64F3 MOV R15,R4 wpr_attrac 1090 _InitCam( 1, _ESPN2_CA +M, &CamPos, 0, 0 ); 000010B2 2FE6 MOV.L R14,@-R15 000010B4 E506 MOV #6,R5 000010B6 66F3 MOV R15,R6 000010B8 7604 ADD #4,R6 000010BA E700 MOV #0,R7 wpr_attrac 1091 break; 000010BC A00C BRA L2536 000010BE E401 MOV #1,R4 000010C0 L2319: ; case label wpr_attrac 1092 case 1220: wpr_attrac 1093 vec3_Set( &CamPos, 0.0 +f, 8.0f, -8.0f ); 000010C0 C719 MOVA L2582+12,R0 000010C2 F4FC FMOV.S FR15,FR4 000010C4 F508 FMOV.S @R0,FR5 000010C6 F6EC FMOV.S FR14,FR6 000010C8 4D0B JSR @R13 000010CA 64F3 MOV R15,R4 wpr_attrac 1094 _InitCam( 0, _ESPN2_CA +M, &CamPos, 0, 1 ); 000010CC 2FC6 MOV.L R12,@-R15 000010CE E506 MOV #6,R5 000010D0 66F3 MOV R15,R6 000010D2 E400 MOV #0,R4 000010D4 E700 MOV #0,R7 000010D6 7604 ADD #4,R6 wpr_attrac 1095 break; 000010D8 L2536: 000010D8 B028 BSR L2059 000010DA 0009 NOP 000010DC L2530: 000010DC A012 BRA L2454 000010DE 7F04 ADD #4,R15 000010E0 L2320: ; default label wpr_attrac 1096 default: wpr_attrac 1097 _CamWork(); 000010E0 B30E BSR L2060 000010E2 0009 NOP wpr_attrac 1098 break; wpr_attrac 1099 } wpr_attrac 1100 break; 000010E4 A00E BRA L2454 000010E6 0009 NOP 000010E8 L2321: ; case label wpr_attrac 1101 case 3: wpr_attrac 1102 _CamDraw(); wpr_attrac 1103 break; 000010E8 L2531: 000010E8 B4D8 BSR L2061 000010EA 0009 NOP 000010EC A00A BRA L2454 000010EE 0009 NOP 000010F0 L2322: ; default label wpr_attrac 1104 default: wpr_attrac 1105 E if( (!(0)) ) gerr_Assert( 0, " +wpr_attract.c", 1105 ); 000010F0 9614 MOV.W L2582,R6 ; H'0451 000010F2 65A3 MOV R10,R5 000010F4 4B0B JSR @R11 000010F6 E400 MOV #0,R4 wpr_attrac 1106 break; wpr_attrac 1107 } wpr_attrac 1108 break; 000010F8 A004 BRA L2454 000010FA 0009 NOP 000010FC L2323: ; default label wpr_attrac 1109 default: wpr_attrac 1110 /* we should not try to setup a camera + if this is not a demomode */ wpr_attrac 1111 E if( (!(0)) ) gerr_Assert( 0, "wpr_attr +act.c", 1111 ); 000010FC 960F MOV.W L2582+2,R6 ; H'0457 000010FE 65A3 MOV R10,R5 00001100 4B0B JSR @R11 00001102 E400 MOV #0,R4 wpr_attrac 1112 break; wpr_attrac 1113 } wpr_attrac 1114 } 00001104 L2454: 00001104 7F0C ADD #12,R15 00001106 4F26 LDS.L @R15+,PR 00001108 FCF9 FMOV.S @R15+,FR12 0000110A FDF9 FMOV.S @R15+,FR13 0000110C FEF9 FMOV.S @R15+,FR14 0000110E FFF9 FMOV.S @R15+,FR15 00001110 6AF6 MOV.L @R15+,R10 00001112 6BF6 MOV.L @R15+,R11 00001114 6CF6 MOV.L @R15+,R12 00001116 6DF6 MOV.L @R15+,R13 00001118 000B RTS 0000111A 6EF6 MOV.L @R15+,R14 0000111C L2582: 0000111C 0451 .DATA.W H'0451 0000111E 0457 .DATA.W H'0457 00001120 C0800000 .DATA.L H'C0800000 00001124 40D00000 .DATA.L H'40D00000 00001128 41000000 .DATA.L H'41000000 wpr_attrac 1115 wpr_attrac 1116 static void _InitCam( u16 nPlayer, u16 nCamType, Vec3_ +t *pPos, u16 nAngle, u16 n2ndPlayer ) { 0000112C L2059: ; function: _InitCam ; frame size=108 0000112C 2FE6 MOV.L R14,@-R15 0000112E 2FD6 MOV.L R13,@-R15 00001130 2FC6 MOV.L R12,@-R15 00001132 2FB6 MOV.L R11,@-R15 00001134 2FA6 MOV.L R10,@-R15 00001136 2F96 MOV.L R9,@-R15 00001138 2F86 MOV.L R8,@-R15 0000113A 4F22 STS.L PR,@-R15 0000113C 7FBC ADD #-68,R15 0000113E 6043 MOV R4,R0 00001140 0009 NOP 00001142 81F2 MOV.W R0,@(4,R15) 00001144 6053 MOV R5,R0 00001146 0009 NOP 00001148 81F4 MOV.W R0,@(8,R15) 0000114A E308 MOV #8,R3 0000114C 2F71 MOV.W R7,@R15 0000114E 85F2 MOV.W @(4,R15),R0 00001150 6E03 MOV R0,R14 00001152 6EED EXTU.W R14,R14 00001154 3E33 CMP/GE R3,R14 00001156 8F08 BF/S L2466 00001158 6863 MOV R6,R8 wpr_attrac 1117 Vec2_t Temp; wpr_attrac 1118 Vec3_t Temp2; wpr_attrac 1119 Mtx3_t Mtx; wpr_attrac 1120 wpr_attrac 1121 E if( (!(nPlayer < 8)) ) gerr_Assert( nPlayer < +8, "wpr_attract.c", 1121 ); 0000115A 3E33 CMP/GE R3,R14 0000115C D11D MOV.L L2583+10,R1; _gerr_Assert 0000115E 0429 MOVT R4 00001160 D51B MOV.L L2583+6,R5 ; L2071 00001162 9632 MOV.W L2583,R6 ; H'0461 00001164 74FF ADD #-1,R4 00001166 410B JSR @R1 00001168 644B NEG R4,R4 0000116A L2466: 0000116A D31C MOV.L L2583+18,R3; L2143 0000116C DE1A MOV.L L2583+14,R14; _Player_aData 0000116E 6432 MOV.L @R3,R4 00001170 2448 TST R4,R4 00001172 8907 BT L2468 00001174 6043 MOV R4,R0 00001176 0009 NOP 00001178 8801 CMP/EQ #1,R0 0000117A 8903 BT L2468 0000117C 6043 MOV R4,R0 0000117E 0009 NOP 00001180 8802 CMP/EQ #2,R0 00001182 8B09 BF L2467 00001184 L2468: wpr_attrac 1122 wpr_attrac 1123 if( _nCurrentCamType == _GAME_CAM1 || _nCurren +tCamType == _GAME_CAM2 || _nCurrentCamType == _GAME_CA +M3 ) { wpr_attrac 1124 E player_DoNotDrawBoat( &Player_aData[_n +CurrentCamPlayer], 0 ); 00001184 D116 MOV.L L2583+22,R1; L2142 00001186 E500 MOV #0,R5 00001188 9320 MOV.W L2583+2,R3 ; H'01F0 0000118A 6211 MOV.W @R1,R2 0000118C 223F MULS R3,R2 0000118E D215 MOV.L L2583+26, + R2; _player_DoNotDrawBoa + t 00001190 041A STS MACL,R4 00001192 644F EXTS.W R4,R4 00001194 420B JSR @R2 00001196 34EC ADD R14,R4 00001198 L2467: 00001198 85F2 MOV.W @(4,R15),R0 0000119A 9C17 MOV.W L2583+2,R12; H'01F0 0000119C DB14 MOV.L L2583+38,R11; _vec3_Copy 0000119E 20CF MULS R12,R0 000011A0 E064 MOV #100,R0 000011A2 DD14 MOV.L L2583+42,R13; L2138 000011A4 04FD MOV.W @(R0,R15),R4 000011A6 85F4 MOV.W @(8,R15),R0 000011A8 0C1A STS MACL,R12 000011AA DA10 MOV.L L2583+34,R10; _Gamecam_pSector 000011AC 600D EXTU.W R0,R0 000011AE D90E MOV.L L2583+30,R9; _sky_Work 000011B0 644D EXTU.W R4,R4 000011B2 6CCF EXTS.W R12,R12 000011B4 E10A MOV #10,R1 000011B6 3012 CMP/HS R1,R0 000011B8 8B01 BF L2584 000011BA A270 BRA L2334 000011BC 0009 NOP 000011BE L2584: 000011BE 4000 SHLL R0 000011C0 6103 MOV R0,R1 000011C2 C70D MOVA L2586,R0 000011C4 001D MOV.W @(R0,R1),R0 000011C6 0023 BRAF R0 000011C8 0009 NOP 000011CA L2585: 000011CA L2583: 000011CA 0461 .DATA.W H'0461 000011CC 01F0 .DATA.W H'01F0 000011CE 00000002 .RES.W 1 000011D0 <00000000> .DATA.L L2071 000011D4 <00000000> .DATA.L _gerr_Assert 000011D8 <00000000> .DATA.L _Player_aData 000011DC <00000000> .DATA.L L2143 000011E0 <00000000> .DATA.L L2142 000011E4 <00000000> .DATA.L _player_DoNotDrawBoat 000011E8 <00000000> .DATA.L _sky_Work 000011EC <00000000> .DATA.L _Gamecam_pSector 000011F0 <00000000> .DATA.L _vec3_Copy 000011F4 <00000000> .DATA.L L2138 000011F8 L2586: 000011F8 0042 K-�d��������¶o�HN^Ú$F]��@�\lÕq«¼J�î –ŒÿÆ“ñI��å�nªp¾ñ÷G´T�…õƒdàR‘¿‹î=¯Œ�5wN�*A”Þ�Ügâ�Tè�ú�<¬ T/ý�17L�xRN°Odao:[ zB˜%çÙb^´¼¨âÞõÓž&��äË<)›m¹Éð`æasÁŠñ�5öļÝyÓæInfh���ÒÏn§Uú�,û0î_�õAI)·?(x~ì�""�¿š?Á` bùX,�n{\·nÐß^zaŠ"2œ1"²â¯�;'…�—aD"�¥�"…ø6·Ù¼Á% _hj� @NˆÂ…µ�„hôÒnn�dv*¿[ÂÓgê�X?y6±�ß�ͪ��=D?�ÿÿÿÿÿÿÿÿÿÿ�©(r� .DATA.W L2324-L2585 000011FA 0076 .DATA.W L2325-L2585 000011FC 00AA .DATA.W L2326-L2585 000011FE 00EA .DATA.W L2327-L2585 00001200 0186 .DATA.W L2328-L2585 00001202 020C .DATA.W L2329-L2585 00001204 022A .DATA.W L2330-L2585 00001206 0346 .DATA.W L2331-L2585 00001208 03DE .DATA.W L2332-L2585 0000120A 046A .DATA.W L2333-L2585 wpr_attrac 1125 } wpr_attrac 1126 wpr_attrac 1127 switch( nCamType ) wpr_attrac 1128 { wpr_attrac 1129 case _GAME_CAM1: 0000120C L2324: ; case label wpr_attrac 1130 /* game camera view 1 */ wpr_attrac 1131 if( gamecam_GetAttached() != &Player_a +Data[nPlayer].Phys ) { 0000120C D342 MOV.L L2587+4, + R3 ; _gamecam_GetAttached 0000120E 430B JSR @R3 00001210 0009 NOP 00001212 937F MOV.W L2587,R3 ; H'0100 00001214 62C3 MOV R12,R2 00001216 32EC ADD R14,R2 00001218 332C ADD R2,R3 0000121A 3030 CMP/EQ R3,R0 0000121C 8905 BT L2470 wpr_attrac 1132 gamecam_Attach( &Player_aData[ +nPlayer].Phys ); 0000121E 9379 MOV.W L2587,R3 ; H'0100 00001220 64C3 MOV R12,R4 00001222 D23E MOV.L L2587+8,R2 ; _gamecam_Attach 00001224 34EC ADD R14,R4 00001226 4S20B JSR @R2 00001228 343C ADD R3,R4 0000122A L2470: wpr_attrac 1133 } wpr_attrac 1134 gamecam_SetView( GAMECAM_VIEW_NOBOAT ) +; 0000122A D33D MOV.L L2587+12,R3; _gamecam_SetView 0000122C 430B JSR @R3 0000122E E400 MOV #0,R4 wpr_attrac 1135 gamecam_GameloopWork(); 00001230 D23C MOV.L L2587+16, + R2; _gamecam_GameloopWor + k 00001232 420B JSR @R2 00001234 0009 NOP wpr_attrac 1136 player_DoNotDrawBoat( &Player_aData[nP +layer], !gamecam_ShouldBoatBeDrawn() ); 00001236 D33C MOV.L L2587+20, + R3; _gamecam_ShouldBoatB + eDrawn 00001238 430B JSR @R3 0000123A 0009 NOP wpr_attrac 1137 break; 0000123C A032 BRA L2538 0000123E 0009 NOP 00001240 L2325: ; case label wpr_attrac 1138 case _GAME_CAM2: wpr_attrac 1139 /* game camera view 2 */ wpr_attrac 1140 if( gamecam_GetAttached() != &Player_a +Data[nPlayer].Phys ) { 00001240 D235 MOV.L L2587+4, + R2 ; _gamecam_GetAttached 00001242 420B JSR @R2 00001244 0009 NOP 00001246 9265 MOV.W L2587,R2 ; H'0100 00001248 63C3 MOV R12,R3 0000124A 33EC ADD R14,R3 0000124C 323C ADD R3,R2 0000124E 3020 CMP/EQ R2,R0 00001250 8905 BT L2472 wpr_attrac 1141 gamecam_Attach( &Player_aData[ +nPlayer].Phys ); 00001252 935F MOV.W L2587,R3 ; H'0100 00001254 64C3 MOV R12,R4 00001256 D231 MOV.L L2587+8,R2 ; _gamecam_Attach 00001258 34EC ADD R14,R4 0000125A 420B JSR @R2 0000125C 343C ADD R3,R4 0000125E L2472: wpr_attrac 1142 } wpr_attrac 1143 gamecam_SetView( GAMECAM_VIEW_LOW ); 0000125E D330 MOV.L L2587+12,R3; _gamecam_SetView 00001260 430B JSR @R3 00001262 E401 MOV #1,R4 wpr_attrac 1144 gamecam_GameloopWork(); 00001264 D22F MOV.L L2587+16, + R2; _gamecam_GameloopWor + k 00001266 420B JSR @R2 00001268 0009 NOP wpr_attrac 1145 player_DoNotDrawBoat( &Player_aData[nP +layer], !gamecam_ShouldBoatBeDrawn() ); 0000126A D32F MOV.L L2587+20, + R3; _gamecam_ShouldBoatB + eDrawn 0000126C 430B JSR @R3 0000126E 0009 NOP wpr_attrac 1146 break; 00001270 A018 BRA L2538 00001272 0009 NOP 00001274 L2326: ; case label wpr_attrac 1147 case _GAME_CAM3: wpr_attrac 1148 /* game camera view 3 */ wpr_attrac 1149 if( gamecam_GetAttached() != &Player_a +Data[nPlayer].Phys ) { 00001274 D228 MOV.L L2587+4, + R2 ; _gamecam_GetAttached 00001276 420B JSR @R2 00001278 0009 NOP 0000127A 924B MOV.W L2587,R2 ; H'0100 0000127C 63C3 MOV R12,R3 0000127E 33EC ADD R14,R3 00001280 323C ADD R3,R2 00001282 3020 CMP/EQ R2,R0 00001284 8905 BT L2474 wpr_attrac 1150 gamecam_Attach( &Player_aData[ +nPlayer].Phys ); 00001286 9345 MOV.W L2587,R3 ; H'0100 00001288 64C3 MOV R12,R4 0000128A D224 MOV.L L2587+8,R2 ; _gamecam_Attach 0000128C 34EC ADD R14,R4 0000128E 420B JSR @R2 00001290 343C ADD R3,R4 00001292 L2474: wpr_attrac 1151 } wpr_attrac 1152 gamecam_SetView( GAMECAM_VIEW_HIGH ); 00001292 D323 MOV.L L2587+12,R3; _gamecam_SetView 00001294 430B JSR @R3 00001296 E402 MOV #2,R4 wpr_attrac 1153 gamecam_GameloopWork(); 00001298 D222 MOV.L L2587+16, + R2; _gamecam_GameloopWor + k 0000129A 420B JSR @R2 0000129C 0009 NOP wpr_attrac 1154 player_DoNotDrawBoat( &Player_aData[nP +layer], !gamecam_ShouldBoatBeDrawn() ); 0000129E D322 MOV.L L2587+20, + R3; _gamecam_ShouldBoatB + eDrawn 000012A0 430B JSR @R3 000012A2 0009 NOP wpr_attrac 1155 break; 000012A4 L2538: 000012A4 D221 MOV.L L2587+24, + R2; _player_DoNotDrawBoa + t 000012A6 2008 TST R0,R0 000012A8 64C3 MOV R12,R4 000012AA 0529 MOVT R5 000012AC 420B JSR @R2 000012AE 34EC ADD R14,R4 000012B0 A1FA BRA L2469 000012B2 0009 NOP 000012B4 L2327: ; case label wpr_attrac 1156 case _ESPN_CAM: wpr_attrac 1157 /* non moving camera looking a moving +object */ wpr_attrac 1158 vec3_Copy( &_CamPos, pPos ); 000012B4 D41E MOV.L L2587+28,R4; L2138 000012B6 4B0B JSR @R11 000012B8 6583 MOV R8,R5 wpr_attrac 1159 vec3_Copy( &_CamLook, &Player_aData[nP +layer].pWorldOb->Orient.Pos ); 000012BA 65C3 MOV R12,R5 000012BC E050 MOV #80,R0 000012BE 35EC ADD R14,R5 000012C0 D41C MOV.L L2587+32,R4; L2139 000012C2 055E MOV.L @(R0,R5),R5 000012C4 4B0B JSR @R11 000012C6 7558 ADD #88,R5 wpr_attrac 1160 E Gamecam_pSector = world_FindSectorCont +ainingPoint( 0, _CamPos.p[0], _CamPos.p[2] ); 000012C8 E008 MOV #8,R0 000012CA 63D3 MOV R13,R3 000012CC 6233 MOV R3,R2 000012CE 2F32 MOV.L R3,@R15 000012D0 F536 FMOV.S @(R0,R3),FR5 000012D2 D319 MOV.L L2587+36, + R3; _world_FindSectorCon + tainingPoint 000012D4 F428 FMOV.S @R2,FR4 000012D6 430B JSR @R3 000012D8 E400 MOV #0,R4 000012DA 2A02 MOV.L R0,@R10 wpr_attrac 1161 vec3_CalcSub( &Temp2, &_CamLook, &_Cam +Pos ); 000012DC 64F3 MOV R15,R4 000012DE D515 MOV.L L2587+32,R5; L2139 000012E0 D216 MOV.L L2587+40,R2; _vec3_CalcSub 000012E2 D613 MOV.L L2587+28,R6; L2138 000012E4 420B JSR @R2 000012E6 7430 ADD #48,R4 wpr_attrac 1162 mtx3_BuildFromZVec( &Mtx, &Temp2 ); 000012E8 D315 MOV.L L2587+44,R3; _mtx3_BuildFromZVec 000012EA 65F3 MOV R15,R5 000012EC 64F3 MOV R15,R4 000012EE 7530 ADD #48,R5 000012F0 430B JSR @R3 000012F2 740C ADD #12,R4 wpr_attrac 1163 sky_Work( mtx3_GetHeading( &Mtx ), mtx +3_GetPitch( &Mtx ), mtx3_GetRoll( &Mtx ) ); 000012F4 D213 MOV.L L2587+48,R2; _mtx3_GetRoll 000012F6 64F3 MOV R15,R4 000012F8 420B JSR @R2 000012FA 740C ADD #12,R4 000012FC 2F06 MOV.L R0,@-R15 000012FE D312 MOV.L L2587+52,R3; _mtx3_GetPitch 00001300 64F3 MOV R15,R4 00001302 430B JSR @R3 00001304 7410 ADD #16,R4 00001306 2F06 MOV.L R0,@-R15 00001308 D210 MOV.L L2587+56,R2; _mtx3_GetHeading 0000130A 64F3 MOV R15,R4 0000130C 420B JSR @R2 0000130E 7414 ADD #20,R4 wpr_attrac 1164 break; 00001310 A0D9 BRA L2544 00001312 0009 NOP 00001314 L2587: 00001314 0100 .DATA.W H'0100 00001316 00000002 .RES.W 1 00001318 <00000000> .DATA.L _gamecam_GetAttached 0000131C <00000000> .DATA.L _gamecam_Attach 00001320 <00000000> .DATA.L _gamecam_SetView 00001324 <00000000> .DATA.L _gamecam_GameloopWork 00001328 <00000000> .DATA.L _gamecam_ShouldBoatBeDrawn 0000132C <00000000> .DATA.L _player_DoNotDrawBoat 00001330 <00000000> .DATA.L L2138 00001334 <00000000> .DATA.L L2139 00001338 <00000000> .DATA.L _world_FindSectorContainingPoint 0000133C <00000000> .DATA.L _vec3_CalcSub 00001340 <00000000> .DATA.L _mtx3_BuildFromZVec 00001344 <00000000> .DATA.L _mtx3_GetRoll 00001348 <00000000> .DATA.L _mtx3_GetPitch 0000134C <00000000> .DATA.L _mtx3_GetHeading 00001350 L2328: ; case label wpr_attrac 1165 case _MOUNTED_CAM: wpr_attrac 1166 /* solid mounted camera on moving boat +, looking in a fixed direction */ wpr_attrac 1167 _nCamHeading = nAngle; 00001350 62F1 MOV.W @R15,R2 00001352 D322 MOV.L L2588+2,R3 ; L2144 00001354 622D EXTU.W R2,R2 00001356 2322 MOV.L R2,@R3 wpr_attrac 1168 vec3_Copy( &_BSCamPos, pPos ); 00001358 D421 MOV.L L2588+6,R4 ; L2140 0000135A 4B0B JSR @R11 0000135C 6583 MOV R8,R5 wpr_attrac 1169 Temp.p[0] = _BSCamPos.p[0]; 0000135E D220 MOV.L L2588+6,R2 ; L2140 00001360 E03C MOV #60,R0 wpr_attrac 1170 Temp.p[1] = _BSCamPos.p[2]; wpr_attrac 1171 vec2_RotateBradians( &Temp, Player_aDa +ta[nPlayer].Phys.nHeading ); 00001362 6BC3 MOV R12,R11 00001364 3BEC ADD R14,R11 00001366 F328 FMOV.S @R2,FR3 00001368 64F3 MOV R15,R4 0000136A FF37 FMOV.S FR3,@(R0,R15) 0000136C E040 MOV #64,R0 0000136E D31D MOV.L L2588+10,R3; H'00000008+L2140 00001370 F338 FMOV.S @R3,FR3 00001372 FF37 FMOV.S FR3,@(R0,R15) 00001374 9031 MOV.W L2588,R0 ; H'013C 00001376 D21C MOV.L L2588+14, + R2; _vec2_RotateBradians 00001378 05BE MOV.L @(R0,R11),R5 0000137A 420B JSR @R2 0000137C 743C ADD #60,R4 wpr_attrac 1172 _CamPos.p[0] = Temp.p[0] + Player_aDat +a[nPlayer].pWorldOb->Orient.Pos.p[0]; 0000137E E050 MOV #80,R0 00001380 02BE MOV.L @(R0,R11),R2 00001382 E03C MOV #60,R0 00001384 F2F6 FMOV.S @(R0,R15),FR2 wpr_attrac 1173 _CamPos.p[1] = _BSCamPos.p[1] + Player +_aData[nPlayer].pWorldOb->Orient.Pos.p[1]; 00001386 E050 MOV #80,R0 00001388 7258 ADD #88,R2 0000138A F328 FMOV.S @R2,FR3 0000138C F230 FADD FR3,FR2 0000138E FD2A FMOV.S FR2,@R13 00001390 D316 MOV.L L2588+18,R3; H'00000004+L2140 00001392 02BE MOV.L @(R0,R11),R2 00001394 E05C MOV #92,R0 00001396 F238 FMOV.S @R3,FR2 00001398 F326 FMOV.S @(R0,R2),FR3 0000139A E004 MOV #4,R0 0000139C F230 FADD FR3,FR2 0000139E FD27 FMOV.S FR2,@(R0,R13) wpr_attrac 1174 _CamPos.p[2] = Temp.p[1] + Player_aDat +a[nPlayer].pWorldOb->Orient.Pos.p[2]; 000013A0 E050 MOV #80,R0 000013A2 02BE MOV.L @(R0,R11),R2 000013A4 E060 MOV #96,R0 000013A6 F326 FMOV.S @(R0,R2),FR3 000013A8 E040 MOV #64,R0 000013AA F2F6 FMOV.S @(R0,R15),FR2 000013AC E008 MOV #8,R0 wpr_attrac 1175 E Gamecam_pSector = world_FindSectorCont +ainingPoint( 0, _CamPos.p[0], _CamPos.p[2] ); 000013AE 62D3 MOV R13,R2 000013B0 6123 MOV R2,R1 000013B2 F230 FADD FR3,FR2 000013B4 FD27 FMOV.S FR2,@(R0,R13) 000013B6 E008 MOV #8,R0 000013B8 2F22 MOV.L R2,@R15 000013BA F526 FMOV.S @(R0,R2),FR5 000013BC F418 FMOV.S @R1,FR4 000013BE D20C MOV.L L2588+22, + R2; _world_FindSectorCon + tainingPoint 000013C0 420B JSR @R2 000013C2 E400 MOV #0,R4 000013C4 2A02 MOV.L R0,@R10 wpr_attrac 1176 sky_Work( Player_aData[nPlayer].Phys.n +Heading + _nCamHeading, 0, 0 ); 000013C6 E600 MOV #0,R6 000013C8 D204 MOV.L L2588+2,R2 ; L2144 000013CA 9006 MOV.W L2588,R0 ; H'013C 000013CC 6322 MOV.L @R2,R3 000013CE 04BE MOV.L @(R0,R11),R4 000013D0 343C ADD R3,R4 wpr_attrac 1177 break; 000013D2 A160 BRA L2543 000013D4 6563 MOV R6,R5 000013D6 L2329: ; case label wpr_attrac 1178 case _CIRCLE_CAM: wpr_attrac 1179 break; 000013D6 A167 BRA L2469 000013D8 0009 NOP 000013DA L2588: 000013DA 013C .DATA.W H'013C 000013DC <00000000> .DATA.L L2144 000013E0 <00000000> .DATA.L L2140 000013E4 <00000008> .DATA.L H'00000008+L2140 000013E8 <00000000> .DATA.L _vec2_RotateBradians 000013EC <00000004> .DATA.L H'00000004+L2140 000013F0 <00000000> .DATA.L _world_FindSectorContainingPoint 000013F4 L2330: ; case label wpr_attrac 1180 case _ESPN2_CAM: wpr_attrac 1181 /* camera attached to moving boat ( ro +tating boats heading ), looking at a moving object */ wpr_attrac 1182 _n2ndCamPlayer = n2ndPlayer; 000013F4 D337 MOV.L L2589+6,R3 ; L2145 000013F6 2342 MOV.L R4,@R3 wpr_attrac 1183 vec3_Copy( &_BSCamPos, pPos ); 000013F8 D437 MOV.L L2589+10,R4; L2140 000013FA 4B0B JSR @R11 000013FC 6583 MOV R8,R5 wpr_attrac 1184 Temp.p[0] = _BSCamPos.p[0]; 000013FE D236 MOV.L L2589+10,R2; L2140 00001400 E03C MOV #60,R0 wpr_attrac 1185 Temp.p[1] = _BSCamPos.p[2]; wpr_attrac 1186 vec2_RotateBradians( &Temp, Player_aDa +ta[nPlayer].Phys.nHeading ); 00001402 68C3 MOV R12,R8 00001404 38EC ADD R14,R8 00001406 F328 FMOV.S @R2,FR3 00001408 64F3 MOV R15,R4 0000140A FF37 FMOV.S R3,@(R0,R15) 0000140C E040 MOV #64,R0 0000140E D333 MOV.L L2589+14,R3; H'00000008+L2140 00001410 F338 FMOV.S @R3,FR3 00001412 FF37 FMOV.S FR3,@(R0,R15) 00001414 905B MOV.W L2589,R0 ; H'013C 00001416 D232 MOV.L L2589+18, + R2; _vec2_RotateBradians 00001418 058E MOV.L @(R0,R8),R5 0000141A 420B JSR @R2 0000141C 743C ADD #60,R4 wpr_attrac 1187 _CamPos.p[0] = Temp.p[0] + Player_aDat +a[nPlayer].pWorldOb->Orient.Pos.p[0]; 0000141E E050 MOV #80,R0 00001420 028E MOV.L @(R0,R8),R2 00001422 E03C MOV #60,R0 00001424 F2F6 FMOV.S @(R0,R15),FR2 wpr_attrac 1188 _CamPos.p[1] = _BSCamPos.p[1] + Player +_aData[nPlayer].pWorldOb->Orient.Pos.p[1]; 00001426 E050 MOV #80,R0 00001428 7258 ADD #88,R2 0000142A F328 FMOV.S @R2,FR3 0000142C F230 FADD FR3,FR2 0000142E FD2A FMOV.S FR2,@R13 00001430 D32C MOV.L L2589+22,R3; H'00000004+L2140 00001432 028E MOV.L @(R0,R8),R2 00001434 E05C MOV #92,R0 00001436 F238 FMOV.S @R3,FR2 00001438 F326 FMOV.S @(R0,R2),FR3 0000143A E004 MOV #4,R0 0000143C F230 FADD FR3,FR2 0000143E FD27 FMOV.S FR2,@(R0,R13) wpr_attrac 1189 _CamPos.p[2] = Temp.p[1] + Player_aDat � +a[nPlayer].pWorldOb->Orient.Pos.p[2]; 00001440 E050 MOV #80,R0 00001442 028E MOV.L @(R0,R8),R2 00001444 E060 MOV #96,R0 00001446 F326 FMOV.S @(R0,R2),FR3 00001448 E040 MOV #64,R0 0000144A F2F6 FMOV.S @(R0,R15),FR2 0000144C E008 MOV #8,R0 wpr_attrac 1190 E Gamecam_pSector = world_FindSectorCont +ainingPoint( 0, _CamPos.p[0], _CamPos.p[2] ); 0000144E 62D3 MOV R13,R2 00001450 6123 MOV R2,R1 00001452 F230 FADD FR3,FR2 00001454 FD27 FMOV.S FR2,@(R0,R13) 00001456 E008 MOV #8,R0 00001458 2F22 MOV.L R2,@R15 0000145A F526 FMOV.S @(R0,R2),FR5 0000145C F418 FMOV.S @R1,FR4 0000145E D222 MOV.L L2589+26, + R2; _world_FindSectorCon + tainingPoint 00001460 420B JSR @R2 00001462 E400 MOV #0,R4 00001464 2A02 MOV.L R0,@R10 wpr_attrac 1191 vec3_Copy( &_CamLook, &Player_aData[_n +2ndCamPlayer].pWorldOb->Orient.Pos ); 00001466 E050 MOV #80,R0 00001468 D11A MOV.L L2589+6,R1 ; L2145 0000146A 9331 MOV.W L2589+2,R3 ; H'01F0 0000146C 6211 MOV.W @R1,R2 0000146E D41F MOV.L L2589+30,R4; L2139 00001470 223F MULS R3,R2 00001472 051A STS MACL,R5 00001474 655F EXTS.W R5,R5 00001476 35EC ADD R14,R5 00001478 055E MOV.L @(R0,R5),R5 0000147A 4B0B JSR @R11 0000147C 7558 ADD #88,R5 wpr_attrac 1192 _CamLook.p[1] = ((_CamLook.p[1] - _Cam +Pos.p[1]) * 0.1f) + _CamPos.p[1]; 0000147E D41C MOV.L L2589+34,R4; H'00000004+L2139 00001480 E004 MOV #4,R0 00001482 F4D6 FMOV.S @(R0,R13),FR4 00001484 C71B MOVA L2589+38,R0 00001486 F348 FMOV.S @R4,FR3 00001488 F008 FMOV.S @R0,FR0 0000148A F341 FSUB FR4,FR3 0000148C F24C FMOV.S FR4,FR2 0000148E F23E FMAC FR0,FR3,FR2 00001490 F42A FMOV.S FR2,@R4 wpr_attrac 1193 vec3_CalcSub( &Temp2, &_CamLook, &_Cam +Pos ); 00001492 64F3 MOV R15,R4 00001494 D515 MOV.L L2589+30,R5; L2139 00001496 D319 MOV.L L2589+46,R3; _vec3_CalcSub 00001498 D617 MOV.L L2589+42,R6; L2138 0000149A 430B JSR @R3 0000149C 7430 ADD #48,R4 wpr_attrac 1194 mtx3_BuildFromZVec( &Mtx, &Temp2 ); 0000149E D218 MOV.L L2589+50,R2; _mtx3_BuildFromZVec 000014A0 65F3 MOV R15,R5 000014A2 64F3 MOV R15,R4 000014A4 7530 ADD #48,R5 000014A6 420B JSR @R2 000014A8 740C ADD #12,R4 wpr_attrac 1195 sky_Work( mtx3_GetHeading( &Mtx ), mtx +3_GetPitch( &Mtx ), mtx3_GetRoll( &Mtx ) ); 000014AA D316 MOV.L L2589+54,R3; _mtx3_GetRoll 000014AC 64F3 MOV R15,R4 000014AE 430B JSR @R3 000014B0 740C ADD #12,R4 000014B2 2F06 MOV.L R0,@-R15 000014B4 D214 MOV.L L2589+58,R2; _mtx3_GetPitch 000014B6 64F3 MOV R15,R4 000014B8 420B JSR @R2 000014BA 7410 ADD #16,R4 000014BC 2F06 MOV.L R0,@-R15 000014BE D313 MOV.L L2589+62,R3; _mtx3_GetHeading 000014C0 64F3 MOV R15,R4 000014C2 430B JSR @R3 000014C4 7414 ADD #20,R4 wpr_attrac 1196 break; 000014C6 L2544: 000014C6 65F6 MOV.L @R15+,R5 000014C8 6403 MOV R0,R4 000014CA A0E4 BRA L2543 000014CC 66F6 MOV.L @R15+,R6 000014CE L2589: 000014CE 013C .DATA.W H'013C 000014D0 01F0 .DATA.W H'01F0 000014D2 00000002 .RES.W 1 000014D4 <00000000> .DATA.L L2145 000014D8 <00000000> .DATA.L L2140 000014DC <00000008> .DATA.L H'00000008+L2140 000014E0 <00000000> .DATA.L _vec2_RotateBradians 000014E4 <00000004> .DATA.L H'00000004+L2140 000014E8 <00000000> .DATA.L _world_FindSectorContainingPoint 000014EC <00000000> .DATA.L L2139 000014F0 <00000004> .DATA.L H'00000004+L2139 000014F4 3DCCCCCC .DATA.L H'3DCCCCCC 000014F8 <00000000> .DATA.L L2138 000014FC <00000000> .DATA.L _vec3_CalcSub 00001500 <00000000> .DATA.L _mtx3_BuildFromZVec 00001504 <00000000> .DATA.L _mtx3_GetRoll 00001508 <00000000> .DATA.L _mtx3_GetPitch 0000150C <00000000> .DATA.L _mtx3_GetHeading 00001510 L2331: ; case label wpr_attrac 1197 case _ESPN3_CAM: wpr_attrac 1198 /* camera attached to moving boat ( no +t rotating boats heading ), looking at a moving object + */ wpr_attrac 1199 _n2ndCamPlayer = n2ndPlayer; 00001510 D33B MOV.L L2590+2,R3 ; L2145 00001512 2342 MOV.L R4,@R3 wpr_attrac 1200 vec3_Copy( &_BSCamPos, pPos ); 00001514 D43B MOV.L L2590+6,R4 ; L2140 00001516 4B0B JSR @R11 00001518 6583 MOV R8,R5 wpr_attrac 1201 vec3_CalcSum( &_CamPos, &_BSCamPos, &P +layer_aData[nPlayer].pWorldOb->Orient.Pos ); 0000151A 66C3 MOV R12,R6 0000151C E050 MOV #80,R0 0000151E 36EC ADD R14,R6 00001520 D439 MOV.L L2590+10,R4; L2138 00001522 D33A MOV.L L2590+14,R3; _vec3_CalcSum 00001524 066E MOV.L @(R0,R6),R6 00001526 D537 MOV.L L2590+6,R5 ; L2140 00001528 430B JSR @R3 0000152A 7658 ADD #88,R6 wpr_attrac 1202 E Gamecam_pSector = world_FindSectorCont +ainingPoint( 0, _CamPos.p[0], _CamPos.p[2] ); 0000152C 62D3 MOV R13,R2 0000152E 6323 MOV R2,R3 00001530 E008 MOV #8,R0 00001532 2F22 MOV.L R2,@R15 00001534 F438 FMOV.S @R3,FR4 00001536 D336 MOV.L L2590+18, + R3; _world_FindSectorCon + tainingPoint 00001538 F526 FMOV.S @(R0,R2),FR5 0000153A 430B JSR @R3 0000153C E400 MOV #0,R4 0000153E 2A02 MOV.L R0,@R10 wpr_attrac 1203 vec3_Copy( &_CamLook, &Player_aData[_n +2ndCamPlayer].pWorldOb->Orient.Pos ); 00001540 E050 MOV #80,R0 00001542 D12F MOV.L L2590+2,R1 ; L2145 00001544 935B MOV.W L2590,R3 ; H'01F0 00001546 6211 MOV.W @R1,R2 00001548 D432 MOV.L L2590+22,R4; L2139 0000154A 223F MULS R3,R2 0000154C 051A STS MACL,R5 0000154E 655F EXTS.W R5,R5 00001550 35EC ADD R14,R5 00001552 055E MOV.L @(R0,R5),R5 00001554 4B0B JSR @R11 00001556 7558 ADD #88,R5 wpr_attrac 1204 _CamLook.p[1] = ((_CamLook.p[1] - _Cam +Pos.p[1]) * 0.1f) + _CamPos.p[1]; 00001558 D42F MOV.L L2590+26,R4; H'00000004+L2139 0000155A E004 MOV #4,R0 0000155C F4D6 FMOV.S @(R0,R13),FR4 0000155E C72F MOVA L2590+30,R0 00001560 F348 FMOV.S @R4,FR3 00001562 F008 FMOV.S @R0,FR0 00001564 F341 FSUB FR4,FR3 00001566 F24C FMOV.S FR4,FR2 00001568 F23E FMAC FR0,FR3,FR2 0000156A F42A FMOV.S FR2,@R4 wpr_attrac 1205 vec3_CalcSub( &Temp2, &_CamLook, &_Cam +Pos ); 0000156C 64F3 MOV R15,R4 0000156E D529 MOV.L L2590+22,R5; L2139 00001570 D32B MOV.L L2590+34,R3; _vec3_CalcSub 00001572 D625 MOV.L L2590+10,R6; L2138 00001574 430B JSR @R3 00001576 7430 ADD #48,R4 wpr_attrac 1206 mtx3_BuildFromZVec( &Mtx, &Temp2 ); 00001578 D22A MOV.L L2590+38,R2; _mtx3_BuildFromZVec 0000157A 65F3 MOV R15,R5 0000157C 64F3 MOV R15,R4 0000157E 7530 ADD #48,R5 00001580 420B JSR @R2 00001582 740C ADD #12,R4 wpr_attrac 1207 sky_Work( mtx3_GetHeading( &Mtx ), mtx +3_GetPitch( &Mtx ), mtx3_GetRoll( &Mtx ) ); 00001584 D328 MOV.L L2590+42,R3; _mtx3_GetRoll 00001586 64F3 MOV R15,R4 00001588 430B JSR @R3 0000158A 740C ADD #12,R4 0000158C 2F06 MOV.L R0,@-R15 0000158E D227 MOV.L L2590+46,R2; _mtx3_GetPitch 00001590 64F3 MOV R15,R4 00001592 420B JSR @R2 00001594 7410 ADD #16,R4 00001596 2F06 MOV.L R0,@-R15 00001598 D325 MOV.L L2590+50,R3; _mtx3_GetHeading 0000159A 64F3 MOV R15,R4 0000159C 430B JSR @R3 0000159E 7414 ADD #20,R4 000015A0 65F6 MOV.L @R15+,R5 000015A2 6403 MOV R0,R4 wpr_attrac 1208 break; 000015A4 A077 BRA L2543 000015A6 66F6 MOV.L @R15+,R6 000015A8 L2332: ; case label wpr_attrac 1209 case _STATIONARY_CAM: wpr_attrac 1210 /* pure look at both look and pos are +non moving */ wpr_attrac 1211 vec3_Copy( &_CamPos, pPos ); 000015A8 D417 MOV.L L2590+10,R4; L2138 000015AA 4B0B JSR @R11 000015AC 6583 MOV R8,R5 wpr_attrac 1212 /* the lookat point should be filled i +n by the calling function */ wpr_attrac 1213 wpr_attrac 1214 E Gamecam_pSector = world_FindSectorCont +ainingPoint( 0, _CamPos.p[0], _CamPos.p[2] ); 000015AE E008 MOV #8,R0 000015B0 63D3 MOV R13,R3 000015B2 6233 MOV R3,R2 000015B4 2F32 MOV.L R3,@R15 000015B6 F536 FMOV.S @(R0,R3),FR5 000015B8 D315 MOV.L L2590+18, + R3; _world_FindSectorCon + tainingPoint 000015BA F428 FMOV.S @R2,FR4 000015BC 430B JSR @R3 000015BE E400 MOV #0,R4 000015C0 2A02 MOV.L R0,@R10 wpr_attrac 1215 vec3_CalcSub( &Temp2, &_CamLook, &_Cam +Pos ); 000015C2 64F3 MOV R15,R4 000015C4 D513 MOV.L L2590+22,R5; L2139 000015C6 D216 MOV.L L2590+34,R2; _vec3_CalcSub 000015C8 D60F MOV.L L2590+10,R6; L2138 000015CA 420B JSR @R2 000015CC 7430 ADD #48,R4 wpr_attrac 1216 mtx3_BuildFromZVec( &Mtx, &Temp2 ); 000015CE D315 MOV.L L2590+38,R3; _mtx3_BuildFromZVec 000015D0 65F3 MOV R15,R5 000015D2 64F3 MOV R15,R4 000015D4 7530 ADD #48,R5 000015D6 430B JSR @R3 000015D8 740C ADD #12,R4 wpr_attrac 1217 sky_Work( mtx3_GetHeading( &Mtx ), mtx +3_GetPitch( &Mtx ), mtx3_GetRoll( &Mtx ) ); 000015DA D213 MOV.L L2590+42,R2; _mtx3_GetRoll 000015DC 64F3 MOV R15,R4 000015DE 420B JSR @R2 000015E0 740C ADD #12,R4 000015E2 2F06 MOV.L R0,@-R15 000015E4 D311 MOV.L L2590+46,R3; _mtx3_GetPitch 000015E6 64F3 MOV R15,R4 000015E8 430B JSR @R3 000015EA 7410 ADD #16,R4 000015EC 2F06 MOV.L R0,@-R15 000015EE D210 MOV.L L2590+50,R2; _mtx3_GetHeading 000015F0 64F3 MOV R15,R4 000015F2 420B JSR @R2 000015F4 7414 ADD #20,R4 000015F6 65F6 MOV.L @R15+,R5 000015F8 6403 MOV R0,R4 wpr_attrac 1218 break; 000015FA A04C BRA L2543 000015FC 66F6 MOV.L @R15+,R6 000015FE L2590: 000015FE 01F0 .DATA.W H'01F0 00001600 <00000000> .DATA.L L2145 00001604 <00000000> .DATA.L L2140 00001608 <00000000> .DATA.L L2138 0000160C <00000000> .DATA.L _vec3_CalcSum 00001610 <00000000> .DATA.L _world_FindSectorContainingPoint 00001614 <00000000> .DATA.L L2139 00001618 <00000004> .DATA.L H'00000004+L2139 0000161C 3DCCCCCC .DATA.L H'3DCCCCCC 00001620 <00000000> .DATA.L _vec3_CalcSub 00001624 <00000000> .DATA.L _mtx3_BuildFromZVec 00001628 <00000000> .DATA.L _mtx3_GetRoll 0000162C <00000000> .DATA.L _mtx3_GetPitch 00001630 <00000000> .DATA.L _mtx3_GetHeading 00001634 L2333: ; case label wpr_attrac 1219 case _CHASE_CAM: wpr_attrac 1220 /* start from a fixed position and ani +mate toward a moving boat, doing a look at of the boat + */ wpr_attrac 1221 vec3_Copy( &_CamPos, pPos ); 00001634 D426 MOV.L L2591+4,R4 ; L2138 00001636 4B0B JSR @R11 00001638 6583 MOV R8,R5 wpr_attrac 1222 vec3_Copy( &_CamLook, &Player_aData[nP +layer].pWorldOb->Orient.Pos ); 0000163A 65C3 MOV R12,R5 0000163C E050 MOV #80,R0 0000163E 35EC ADD R14,R5 00001640 D424 MOV.L L2591+8,R4 ; L2139 00001642 055E MOV.L @(R0,R5),R5 00001644 4B0B JSR @R11 00001646 7558 ADD #88,R5 wpr_attrac 1223 E Gamecam_pSector = world_FindSectorCont +ainingPoint( 0, _CamPos.p[0], _CamPos.p[2] ); 00001648 E008 MOV #8,R0 0000164A 63D3 MOV R13,R3 0000164C 6233 MOV R3,R2 0000164E 2F32 MOV.L R3,@R15 00001650 F536 FMOV.S @(R0,R3),FR5 00001652 D321 MOV.L L2591+12, + R3; _world_FindSectorCon + tainingPoint 00001654 F428 FMOV.S @R2,FR4 00001656 430B JSR @R3 00001658 E400 MOV #0,R4 0000165A 2A02 MOV.L R0,@R10 wpr_attrac 1224 vec3_CalcSub( &Temp2, &_CamLook, &_Cam +Pos ); 0000165C 64F3 MOV R15,R4 0000165E D51D MOV.L L2591+8,R5 ; L2139 00001660 D21E MOV.L L2591+16,R2; _vec3_CalcSub 00001662 D61B MOV.L L2591+4,R6 ; L2138 00001664 420B JSR @R2 00001666 7430 ADD #48,R4 wpr_attrac 1225 mtx3_BuildFromZVec( &Mtx, &Temp2 ); 00001668 D31D MOV.L L2591+20,R3; _mtx3_BuildFromZVec 0000166A 65F3 MOV R15,R5 0000166C 64F3 MOV R15,R4 0000166E 7530 ADD #48,R5 00001670 430B JSR @R3 00001672 740C ADD #12,R4 wpr_attrac 1226 sky_Work( mtx3_GetHeading( &Mtx ), mtx +3_GetPitch( &Mtx ), mtx3_GetRoll( &Mtx ) ); 00001674 D21B MOV.L L2591+24,R2; _mtx3_GetRoll 00001676 64F3 MOV R15,R4 00001678 420B JSR @R2 0000167A 740C ADD #12,R4 0000167C 2F06 MOV.L R0,@-R15 0000167E D31A MOV.L L2591+28,R3; _mtx3_GetPitch 00001680 64F3 MOV R15,R4 00001682 430B JSR @R3 00001684 7410 ADD #16,R4 00001686 2F06 MOV.L R0,@-R15 00001688 D218 MOV.L L2591+32,R2; _mtx3_GetHeading 0000168A 64F3 MOV R15,R4 0000168C 420B JSR @R2 0000168E 7414 ADD #20,R4 00001690 65F6 MOV.L @R15+,R5 00001692 6403 MOV R0,R4 00001694 66F6 MOV.L @R15+,R6 wpr_attrac 1227 break; 00001696 L2543: 00001696 490B JSR @R9 00001698 0009 NOP 0000169A A005 BRA L2469 0000169C 0009 NOP 0000169E L2334: ; default label wpr_attrac 1228 default: wpr_attrac 1229 E if( (!(0)) ) gerr_Assert( 0, "wpr_attr +act.c", 1229 ); 0000169E D215 MOV.L L2591+40,R2; _gerr_Assert 000016A0 D513 MOV.L L2591+36,R5; L2071 000016A2 9613 MOV.W L2591,R6 ; H'04CD 000016A4 420B JSR @R2 000016A6 E400 MOV #0,R4 wpr_attrac 1230 break; 000016A8 L2469: wpr_attrac 1231 } wpr_attrac 1232 wpr_attrac 1233 _nCurrentCamPlayer = nPlayer; 000016A8 85F2 MOV.W @(4,R15),R0 000016AA D313 MOV.L L2591+44,R3; L2142 000016AC 600D EXTU.W R0,R0 000016AE 2302 MOV.L R0,@R3 wpr_attrac 1234 _nCurrentCamType = nCamType; 000016B0 85F4 MOV.W @(8,R15),R0 wpr_attrac 1235 } 000016B2 7F44 ADD #68,R15 000016B4 4F26 LDS.L @R15+,PR 000016B6 D211 MOV.L L2591+48,R2; L2143 000016B8 600D EXTU.W R0,R0 000016BA 2202 MOV.L R0,@R2 000016BC 68F6 MOV.L @R15+,R8 000016BE 69F6 MOV.L @R15+,R9 000016C0 6AF6 MOV.L @R15+,R10 000016C2 6BF6 MOV.L @R15+,R11 000016C4 6CF6 MOV.L @R15+,R12 000016C6 6DF6 MOV.L @R15+,R13 000016C8 000B RTS 000016CA 6EF6 MOV.L @R15+,R14 000016CC L2591: 000016CC 04CD .DATA.W H'04CD 000016CE 00000002 .RES.W 1 000016D0 <00000000> .DATA.L L2138 000016D4 <00000000> .DATA.L L2139 000016D8 <00000000> .DATA.L _world_FindSectorContainingPoint 000016DC <00000000> .DATA.L _vec3_CalcSub 000016E0 <00000000> .DATA.L _mtx3_BuildFromZVec 000016E4 <00000000> .DATA.L _mtx3_GetRoll 000016E8 <00000000> .DATA.L _mtx3_GetPitch 000016EC <00000000> .DATA.L _mtx3_GetHeading 000016F0 <00000000> .DATA.L L2071 000016F4 <00000000> .DATA.L _gerr_Assert 000016F8 <00000000> .DATA.L L2142 000016FC <00000000> .DATA.L L2143 wpr_attrac 1236 wpr_attrac 1237 static void _CamWork( void ) { 00001700 L2060: ; function: _CamWork ; frame size=64 00001700 2FE6 MOV.L R14,@-R15 00001702 2FD6 MOV.L R13,@-R15 00001704 2FC6 MOV.L R12,@-R15 00001706 2FB6 MOV.L R11,@-R15 00001708 2FA6 MOV.L R10,@-R15 0000170A 2F96 MOV.L R9,@-R15 0000170C 2F86 MOV.L R8,@-R15 0000170E DC14 MOV.L L2592+18,R12; L2142 00001710 931D MOV.W L2592,R3 ; H'01F0 00001712 60C2 MOV.L @R12,R0 00001714 4F22 STS.L PR,@-R15 00001716 203F MULS R3,R0 00001718 DD12 MOV.L L2592+22,R13; _Player_aData 0000171A 7FE8 ADD #-24,R15 0000171C DA0E MOV.L L2592+10,R10; _xfm_GetCamRoll 0000171E 64F3 MOV R15,R4 00001720 D90C MOV.L L2592+6,R9 ; _sky_Work 00001722 001A STS MACL,R0 00001724 D80A MOV.L L2592+2,R8 ; _xfm_GetCamPitch 00001726 7410 ADD #16,R4 00001728 DE0F MOV.L L2592+26,R14; L2138 0000172A 600F EXTS.W R0,R0 0000172C DB0B MOV.L L2592+14,R11; _xfm_GetCamHeading 0000172E 30DC ADD R13,R0 00001730 2F02 MOV.L R0,@R15 00001732 D20F MOV.L L2592+34,R2; L2143 00001734 D50D MOV.L L2592+30,R5; L2140 00001736 6022 MOV.L @R2,R0 00001738 E10A MOV #10,R1 0000173A 3012 CMP/HS R1,R0 0000173C 8B01 BF L2593 0000173E A185 BRA L2345 00001740 0009 NOP 00001742 L2593: 00001742 4000 SHLL R0 00001744 6103 MOV R0,R1 00001746 C70B MOVA L2595,R0 00001748 001D MOV.W @(R0,R1),R0 0000174A 0023 BRAF R0 0000174C 0009 NOP 0000174E L2594: 0000174E L2592: 0000174E 01F0 .DATA.W H'01F0 00001750 <00000000> .DATA.L _xfm_GetCamPitch 00001754 <00000000> .DATA.L _sky_Work 00001758 <00000000> .DATA.L _xfm_GetCamRoll 0000175C <00000000> .DATA.L _xfm_GetCamHeading 00001760 <00000000> .DATA.L L2142 00001764 <00000000> .DATA.L _Player_aData 00001768 <00000000> .DATA.L L2138 0000176C <00000000> .DATA.L L2140 00001770 <00000000> .DATA.L L2143 00001774 L2595: 00001774 003A .DATA.W L2335-L2594 00001776 003A .DATA.W L2336-L2594 00001778 003A .DATA.W L2337-L2594 0000177A 005E .DATA.W L2338-L2594 0000177C 0086 .DATA.W L2339-L2594 0000177E 0114 .DATA.W L2340-L2594 00001780 0146 .DATA.W L2341-L2594 00001782 0202 .DATA.W L2342-L2594 00001784 0258 .DATA.W L2343-L2594 00001786 0296 .DATA.W L2344-L2594 wpr_attrac 1238 Vec2_t Temp; wpr_attrac 1239 Vec3_t Temp2; wpr_attrac 1240 wpr_attrac 1241 switch( _nCurrentCamType ) wpr_attrac 1242 { wpr_attrac 1243 case _GAME_CAM1: 00001788 L2335: ; case label wpr_attrac 1244 case _GAME_CAM2: 00001788 L2336: ; case label wpr_attrac 1245 case _GAME_CAM3: 00001788 L2337: ; case label wpr_attrac 1246 gamecam_GameloopWork(); 00001788 D138 MOV.L L2596+6, + R1 ; _gamecam_GameloopWor + k 0000178A 410B JSR @R1 0000178C 0009 NOP wpr_attrac 1247 player_DoNotDrawBoat( &Player_aData[_n +CurrentCamPlayer], !gamecam_ShouldBoatBeDrawn() ); 0000178E D338 MOV.L L2596+10, + R3; _gamecam_ShouldBoatB + eDrawn 00001790 430B JSR @R3 00001792 0009 NOP 00001794 64C2 MOV.L @R12,R4 00001796 2008 TST R0,R0 00001798 9365 MOV.W L2596,R3 ; H'01F0 0000179A 0529 MOVT R5 0000179C D235 MOV.L L2596+14, + R2; _player_DoNotDrawBoa + t 0000179E 243F MULS R3,R4 000017A0 041A STS MACL,R4 000017A2 644F EXTS.W R4,R4 000017A4 420B JSR R2 000017A6 34DC ADD R13,R4 wpr_attrac 1248 break; 000017A8 A155 BRA L2477 000017AA 0009 NOP 000017AC L2338: ; case label wpr_attrac 1249 case _ESPN_CAM: wpr_attrac 1250 vec3_Copy( &_CamLook, &Player_aData[_n +CurrentCamPlayer].pWorldOb->Orient.Pos ); 000017AC 65F2 MOV.L @R15,R5 000017AE E050 MOV #80,R0 000017B0 D332 MOV.L L2596+22,R3; _vec3_Copy 000017B2 D431 MOV.L L2596+18,R4; L2139 000017B4 055E MOV.L @(R0,R5),R5 000017B6 430B JSR @R3 000017B8 7558 ADD #88,R5 wpr_attrac 1251 Gamecam_pSector = world_FindSectorCont +ainingPoint( Gamecam_pSector, _CamPos.p[0], _CamPos.p[ +2] ); 000017BA 62E3 MOV R14,R2 000017BC E008 MOV #8,R0 000017BE 6323 MOV R2,R3 000017C0 2F22 MOV.L R2,@R15 000017C2 F438 FMOV.S @R3,FR4 000017C4 F526 FMOV.S @(R0,R2),FR5 000017C6 D32F MOV.L L2596+30, + R3; _world_FindSectorCon + tainingPoint 000017C8 D22D MOV.L L2596+26,R2; _Gamecam_pSector 000017CA 430B JSR @R3 000017CC 6422 MOV.L @R2,R4 000017CE D12C MOV.L L2596+26,R1; _Gamecam_pSector wpr_attrac 1252 sky_Work( xfm_GetCamHeading( &_Camera +), xfm_GetCamPitch( &_Camera ), xfm_GetCamRoll( &_Came +ra ) ); wpr_attrac 1253 break; 000017D0 A12D BRA L2549 000017D2 2102 MOV.L R0,@R1 000017D4 L2339: ; case label wpr_attrac 1254 case _MOUNTED_CAM: wpr_attrac 1255 Temp.p[0] = _BSCamPos.p[0]; 000017D4 F358 FMOV.S @R5,FR3 wpr_attrac 1256 Temp.p[1] = _BSCamPos.p[2]; 000017D6 E014 MOV #20,R0 000017D8 F43A FMOV.S FR3,@R4 wpr_attrac 1257 vec2_RotateBradians( &Temp, Player_aDa +ta[_nCurrentCamPlayer].Phys.nHeading ); 000017DA 64F3 MOV R15,R4 000017DC D12A MOV.L L2596+34,R1; H'00000008+L2140 000017DE F318 FMOV.S @R1,FR3 000017E0 FF37 FMOV.S FR3,@(R0,R15) 000017E2 65C2 MOV.L @R12,R5 000017E4 933F MOV.W L2596,R3 ; H'01F0 000017E6 903F MOV.W L2596+2,R0 ; H'013C 000017E8 253F MULS R3,R5 000017EA D228 MOV.L L2596+38, + R2; _vec2_RotateBradians 000017EC 051A STS MACL,R5 000017EE 655F EXTS.W R5,R5 000017F0 35DC ADD R13,R5 000017F2 055E MOV.L @(R0,R5),R5 000017F4 420B JSR @R2 000017F6 7410 ADD #16,R4 wpr_attrac 1258 _CamPos.p[0] = Temp.p[0] + Player_aDat +a[_nCurrentCamPlayer].pWorldOb->Orient.Pos.p[0]; 000017F8 9235 MOV.W L2596,R2 ; H'01F0 000017FA E050 MOV #80,R0 000017FC 63C2 MOV.L @R12,R3 000017FE 232F MULS R2,R3 00001800 031A STS MACL,R3 00001802 633F EXTS.W R3,R3 00001804 33DC ADD R13,R3 00001806 033E MOV.L @(R0,R3),R3 00001808 E010 MOV #16,R0 0000180A F2F6 FMOV.S @(R0,R15),FR2 wpr_attrac 1259 _CamPos.p[1] = _BSCamPos.p[1] + Player +_aData[_nCurrentCamPlayer].pWorldOb->Orient.Pos.p[1]; 0000180C E050 MOV #80,R0 0000180E 7358 ADD #88,R3 00001810 F338 FMOV.S @R3,FR3 00001812 F230 FADD FR3,FR2 00001814 FE2A FMOV.S FR2,@R14 00001816 61C2 MOV.L @R12,R1 00001818 D31D MOV.L L2596+42,R3; H'00000004+L2140 0000181A 212F MULS R2,R1 0000181C F238 FMOV.S @R3,FR2 0000181E 011A STS MACL,R1 00001820 611F EXTS.W R1,R1 00001822 31DC ADD R13,R1 00001824 001E MOV.L @(R0,R1),R0 00001826 E15C MOV #92,R1 00001828 F316 FMOV.S @(R0,R1),FR3 0000182A E004 MOV #4,R0 0000182C F230 FADD FR3,FR2 0000182E FE27 FMOV.S FR2,@(R0,R14) wpr_attrac 1260 _CamPos.p[2] = Temp.p[1] + Player_aDat +a[_nCurrentCamPlayer].pWorldOb->Orient.Pos.p[2]; 00001830 61C2 MOV.L @R12,R1 00001832 212F MULS R2,R1 00001834 011A STS MACL,R1 00001836 611F EXTS.W R1,R1 00001838 E050 MOV #80,R0 0000183A 31DC ADD R13,R1 0000183C 001E MOV.L @(R0,R1),R0 0000183E E160 MOV #96,R1 00001840 F316 FMOV.S @(R0,R1),FR3 00001842 E014 MOV #20,R0 00001844 F2F6 FMOV.S @(R0,R15),FR2 00001846 E008 MOV #8,R0 wpr_attrac 1261 E Gamecam_pSector = world_FindSectorCont +ainingPoint( 0, _CamPos.p[0], _CamPos.p[2] ); 00001848 61E3 MOV R14,R1 0000184A F230 FADD FR3,FR2 0000184C FE27 FMOV.S FR2,@(R0,R14) 0000184E E008 MOV #8,R0 00001850 2F12 MOV.L R1,@R15 00001852 F418 FMOV.S @R1,FR4 00001854 F516 FMOV.S @(R0,R1),FR5 00001856 D10B MOV.L L2596+30, + R1; _world_FindSectorCon + tainingPoint 00001858 410B JSR @R1 0000185A E400 MOV #0,R4 0000185C D308 MOV.L L2596+26,R3; _Gamecam_pSector wpr_attrac 1262 sky_Work( xfm_GetCamHeading( &_Camera +), xfm_GetCamPitch( &_Camera ), xfm_GetCamRoll( &_Came +ra ) ); wpr_attrac 1263 break; 0000185E A0E6 BRA L2549 00001860 2302 MOV.L R0,@R3 00001862 L2340: ; case label wpr_attrac 1264 case _CIRCLE_CAM: wpr_attrac 1265 break; 00001862 A0F8 BRA L2477 00001864 0009 NOP 00001866 L2596: 00001866 01F0 .DATA.W H'01F0 00001868 013C .DATA.W H'013C 0000186A 00000002 .RES.W 1 0000186C <00000000> .DATA.L _gamecam_GameloopWork 00001870 <00000000> .DATA.L _gamecam_ShouldBoatBeDrawn 00001874 <00000000> .DATA.L _player_DoNotDrawBoat 00001878 <00000000> .DATA.L L2139 0000187C <00000000> .DATA.L _vec3_Copy 00001880 <00000000> .DATA.L _Gamecam_pSector 00001884 <00000000> .DATA.L _world_FindSectorContainingPoint 00001888 <00000008> .DATA.L H'00000008+L2140 0000188C <00000000> .DATA.L _vec2_RotateBradians 00001890 <00000004> .DATA.L H'00000004+L2140 00001894 L2341: ; case label wpr_attrac 1266 case _ESPN2_CAM: wpr_attrac 1267 Temp.p[0] = _BSCamPos.p[0]; 00001894 F358 FMOV.S @R5,FR3 wpr_attrac 1268 Temp.p[1] = _BSCamPos.p[2]; 00001896 E014 MOV #20,R0 00001898 F43A FMOV.S FR3,@R4 wpr_attrac 1269 vec2_RotateBradians( &Temp, Player_aDa +ta[_nCurrentCamPlayer].Phys.nHeading ); 0000189A 64F3 MOV R15,R4 0000189C D344 MOV.L L2597+6,R3 ; H'00000008+L2140 0000189E F338 FMOV.S @R3,FR3 000018A0 FF37 FMOV.S FR3,@(R0,R15) 000018A2 65C2 MOV.L @R12,R5 000018A4 9281 MOV.W L2597,R2 ; H'01F0 000018A6 9081 MOV.W L2597+2,R0 ; H'013C 000018A8 252F MULS R2,R5 000018AA D342 MOV.L L2597+10, + R3; _vec2_RotateBradians 000018AC 051A STS MACL,R5 000018AE 655F EXTS.W R5,R5 000018B0 35DC ADD R13,R5 000018B2 055E MOV.L @(R0,R5),R5 000018B4 430B JSR @R3 000018B6 7410 ADD #16,R4 wpr_attrac 1270 _CamPos.p[0] = Temp.p[0] + Player_aDat +a[_nCurrentCamPlayer].pWorldOb->Orient.Pos.p[0]; 000018B8 9377 MOV.W L2597,R3 ; H'01F0 000018BA E050 MOV #80,R0 000018BC 62C2 MOV.L @R12,R2 000018BE 223F MULS R3,R2 000018C0 021A STS MACL,R2 000018C2 622F EXTS.W R2,R2 000018C4 32DC ADD R13,R2 000018C6 022E MOV.L @(R0,R2),R2 000018C8 E010 MOV #16,R0 000018CA F2F6 FMOV.S @(R0,R15),FR2 wpr_attrac 1271 _CamPos.p[1] = _BSCamPos.p[1] + Player +_aData[_nCurrentCamPlayer].pWorldOb->Orient.Pos.p[1]; 000018CC E050 MOV #80,R0 000018CE 7258 ADD #88,R2 000018D0 F328 FMOV.S @R2,FR3 000018D2 F230 FADD FR3,FR2 000018D4 FE2A FMOV.S FR2,@R14 000018D6 61C2 MOV.L @R12,R1 000018D8 D237 MOV.L L2597+14,R2; H'00000004+L2140 000018DA 213F MULS R3,R1 000018DC F228 FMOV.S @R2,FR2 000018DE 011A STS MACL,R1 000018E0 611F EXTS.W R1,R1 000018E2 31DC ADD R13,R1 000018E4 001E MOV.L @(R0,R1),R0 000018E6 E15C MOV #92,R1 000018E8 F316 FMOV.S @(R0,R1),FR3 000018EA E004 MOV #4,R0 000018EC F230 FADD FR3,FR2 000018EE FE27 FMOV.S FR2,@(R0,R14) wpr_attrac 1272 _CamPos.p[2] = Temp.p[1] + Player_aDat +a[_nCurrentCamPlayer].pWorldOb->Orient.Pos.p[2]; 000018F0 61C2 MOV.L @R12,R1 000018F2 213F MULS R3,R1 000018F4 011A STS MACL,R1 000018F6 611F EXTS.W R1,R1 000018F8 E050 MOV #80,R0 000018FA 31DC ADD R13,R1 000018FC 001E MOV.L @(R0,R1),R0 000018FE E160 MOV #96,R1 00001900 F316 FMOV.S @(R0,R1),FR3 00001902 E014 MOV #20,R0 00001904 F2F6 FMOV.S @(R0,R15),FR2 00001906 E008 MOV #8,R0 wpr_attrac 1273 E Gamecam_pSector = world_FindSectorCont +ainingPoint( 0, _CamPos.p[0], _CamPos.p[2] ); 00001908 61E3 MOV R14,R1 0000190A F230 FADD FR3,FR2 0000190C FE27 FMOV.S FR2,@(R0,R14) 0000190E E008 MOV #8,R0 00001910 2F12 MOV.L R1,@R15 00001912 F418 FMOV.S @R1,FR4 00001914 F516 FMOV.S @(R0,R1),FR5 00001916 D129 MOV.L L2597+18, + R1; _world_FindSectorCon + tainingPoint 00001918 410B JSR @R1 0000191A E400 MOV #0,R4 0000191C D328 MOV.L L2597+22,R3; _Gamecam_pSector 0000191E 2302 MOV.L R0,@R3 wpr_attrac 1274 vec3_Copy( &_CamLook, &Player_aData[_n +2ndCamPlayer].pWorldOb->Orient.Pos ); 00001920 E050 MOV #80,R0 00001922 D328 MOV.L L2597+26,R3; L2145 00001924 9241 MOV.W L2597,R2 ; H'01F0 00001926 6131 MOV.W @R3,R1 00001928 D328 MOV.L L2597+34,R3; _vec3_Copy 0000192A 212F MULS R2,R1 0000192C D426 MOV.L L2597+30,R4; L2139 0000192E 051A STS MACL,R5 00001930 655F EXTS.W R5,R5 00001932 35DC ADD R13,R5 00001934 055E MOV.L @(R0,R5),R5 00001936 430B JSR @R3 00001938 7558 ADD #88,R5 wpr_attrac 1275 _CamLook.p[1] = ((_CamLook.p[1] - _Cam +Pos.p[1]) * 0.1f) + _CamPos.p[1]; 0000193A D425 MOV.L L2597+38,R4; H'00000004+L2139 0000193C E004 MOV #4,R0 0000193E F4E6 FMOV.S @(R0,R14),FR4 00001940 C724 MOVA L2597+42,R0 00001942 F348 FMOV.S @R4,FR3 00001944 F008 FMOV.S @R0,FR0 00001946 F341 FSUB FR4,FR3 00001948 F24C FMOV.S FR4,FR2 0000194A F23E FMAC FR0,FR3,FR2 wpr_attrac 1276 sky_Work( xfm_GetCamHeading( &_Camera +), xfm_GetCamPitch( &_Camera ), xfm_GetCamRoll( &_Came +ra ) ); wpr_attrac 1277 break; 0000194C A06F BRA L2549 0000194E F42A FMOV.S FR2,@R4 00001950 L2342: ; case label wpr_attrac 1278 case _ESPN3_CAM: wpr_attrac 1279 vec3_CalcSum( &_CamPos, &_BSCamPos, &P +layer_aData[_nCurrentCamPlayer].pWorldOb->Orient.Pos ) +; 00001950 66F2 MOV.L @R15,R6 00001952 E050 MOV #80,R0 00001954 D421 MOV.L L2597+50,R4; L2138 00001956 D322 MOV.L L2597+54,R3; _vec3_CalcSum 00001958 066E MOV.L @(R0,R6),R6 0000195A D51F MOV.L L2597+46,R5; L2140 0000195C 430B JSR @R3 0000195E 7658 ADD #88,R6 wpr_attrac 1280 E Gamecam_pSector = world_FindSectorCont +ainingPoint( 0, _CamPos.p[0], _CamPos.p[2] ); 00001960 62E3 MOV R14,R2 00001962 6323 MOV R2,R3 00001964 E008 MOV #8,R0 00001966 2F22 MOV.L R2,@R15 00001968 F438 FMOV.S @R3,FR4 0000196A D314 MOV.L L2597+18, + R3; _world_FindSectorCon + tainingPoint 0000196C F526 FMOV.S @(R0,R2),FR5 0000196E 430B JSR @R3 00001970 E400 MOV #0,R4 00001972 D213 MOV.L L2597+22,R2; _Gamecam_pSector 00001974 2202 MOV.L R0,@R2 wpr_attrac 1281 vec3_Copy( &_CamLook, &Player_aData[_n +2ndCamPlayer].pWorldOb->Orient.Pos ); 00001976 E050 MOV #80,R0 00001978 D212 MOV.L L2597+26,R2; L2145 0000197A 9316 MOV.W L2597,R3 ; H'01F0 0000197C 6121 MOV.W @R2,R1 0000197E D213 MOV.L L2597+34,R2; _vec3_Copy 00001980 213F MULS R3,R1 00001982 D411 MOV.L L2597+30,R4; L2139 00001984 051A STS MACL,R5 00001986 655F EXTS.W R5,R5 00001988 35DC ADD R13,R5 0000198A 055E MOV.L @(R0,R5),R5 0000198C 420B JSR @R2 0000198E 7558 ADD #88,R5 wpr_attrac 1282 _CamLook.p[1] = ((_CamLook.p[1] - _Cam +Pos.p[1]) * 0.1f) + _CamPos.p[1]; 00001990 D40F MOV.L L2597+38,R4; H'00000004+L2139 00001992 E004 MOV #4,R0 00001994 F4E6 FMOV.S @(R0,R14),FR4 00001996 C70F MOVA L2597+42,R0 00001998 F348 FMOV.S @R4,FR3 0000199A F008 FMOV.S @R0,FR0 0000199C F341 FSUB FR4,FR3 0000199E F24C FMOV.S FR4,FR2 000019A0 F23E FMAC FR0,FR3,FR2 wpr_attrac 1283 sky_Work( xfm_GetCamHeading( &_Camera +), xfm_GetCamPitch( &_Camera ), xfm_GetCamRoll( &_Came +ra ) ); wpr_attrac 1284 break; 000019A2 A044 BRA L2549 000019A4 F42A FMOV.S FR2,@R4 000019A6 L2343: ; case label wpr_attrac 1285 case _STATIONARY_CAM: wpr_attrac 1286 sky_Work( xfm_GetCamHeading( &_Camera +), xfm_GetCamPitch( &_Camera ), xfm_GetCamRoll( &_Came +ra ) ); wpr_attrac 1287 break; 000019A6 A042 BRA L2549 000019A8 0009 NOP 000019AA L2597: 000019AA 01F0 .DATA.W H'01F0 000019AC 013C .DATA.W H'013C 000019AE 00000002 .RES.W 1 000019B0 <00000008> .DATA.L H'00000008+L2140 000019B4 <00000000> .DATA.L _vec2_RotateBradians 000019B8 <00000004> .DATA.L H'00000004+L2140 000019BC <00000000> .DATA.L _world_FindSectorContainingPoint 000019C0 <00000000> .DATA.L _Gamecam_pSector 000019C4 <00000000> .DATA.L L2145 000019C8 <00000000> .DATA.L L2139 000019CC <00000000> .DATA.L _vec3_Copy 000019D0 <00000004> .DATA.L H'00000004+L2139 000019D4 3DCCCCCC .DATA.L H'3DCCCCCC 000019D8 <00000000> .DATA.L L2140 000019DC <00000000> .DATA.L L2138 000019E0 <00000000> .DATA.L _vec3_CalcSum 000019E4 L2344: ; case label wpr_attrac 1288 case _CHASE_CAM: wpr_attrac 1289 vec3_Copy( &_CamLook, &Player_aData[_n +CurrentCamPlayer].pWorldOb->Orient.Pos ); 000019E4 65F2 MOV.L @R15,R5 000019E6 E050 MOV #80,R0 000019E8 D321 MOV.L L2598+6,R3 ; _vec3_Copy 000019EA D420 MOV.L L2598+2,R4 ; L2139 000019EC 055E MOV.L @(R0,R5),R5 000019EE 430B JSR @R3 000019F0 7558 ADD #88,R5 wpr_attrac 1290 _CamLook.p[1] += 15.0f; 000019F2 D220 MOV.L L2598+10,R2; H'00000004+L2139 000019F4 C720 MOVA L2598+14,R0 000019F6 F308 FMOV.S @R0,FR3 wpr_attrac 1291 vec3_CalcInterpolate( &Temp2, &_CamPos +, &_CamLook, 0.07f ); 000019F8 C720 MOVA L2598+18,R0 000019FA F228 FMOV.S @R2,FR2 000019FC 64F3 MOV R15,R4 000019FE F230 FADD FR3,FR2 00001A00 F22A FMOV.S FR2,@R2 00001A02 D61A MOV.L L2598+2,R6 ; L2139 00001A04 D51E MOV.L L2598+22,R5; L2138 00001A06 D31F MOV.L L2598+26, + R3; _vec3_CalcInterpolat + e 00001A08 F408 FMOV.S @R0,FR4 00001A0A 430B JSR @R3 00001A0C 7404 ADD #4,R4 wpr_attrac 1292 vec3_Copy( &_CamPos, &Temp2 ); 00001A0E D218 MOV.L L2598+6,R2 ; _vec3_Copy 00001A10 65F3 MOV R15,R5 00001A12 D41B MOV.L L2598+22,R4; L2138 00001A14 420B JSR @R2 00001A16 7504 ADD #4,R5 wpr_attrac 1293 E Gamecam_pSector = world_FindSectorCont +ainingPoint( 0, _CamPos.p[0], _CamPos.p[2] ); 00001A18 E008 MOV #8,R0 00001A1A 63E3 MOV R14,R3 00001A1C 6233 MOV R3,R2 00001A1E 2F32 MOV.L R3,@R15 00001A20 F536 FMOV.S @(R0,R3),FR5 00001A22 D319 MOV.L L2598+30, + R3; _world_FindSectorCon + tainingPoint 00001A24 F428 FMOV.S @R2,FR4 00001A26 430B JSR @R3 00001A28 E400 MOV #0,R4 00001A2A D218 MOV.L L2598+34,R2; _Gamecam_pSector 00001A2C 2202 MOV.L R0,@R2 wpr_attrac 1294 sky_Work( xfm_GetCamHeading( &_Camera +), xfm_GetCamPitch( &_Camera ), xfm_GetCamRoll( &_Came +ra ) ); wpr_attrac 1295 break; 00001A2E L2549: 00001A2E D418 MOV.L L2598+38,R4; L2141 00001A30 4A0B JSR @R10 00001A32 0009 NOP 00001A34 D416 MOV.L L2598+38,R4; L2141 00001A36 480B JSR @R8 00001A38 2F06 MOV.L R0,@-R15 00001A3A D415 MOV.L L2598+38,R4; L2141 00001A3C 4B0B JSR @R11 00001A3E 2F06 MOV.L R0,@-R15 00001A40 65F6 MOV.L @R15+,R5 00001A42 6403 MOV R0,R4 00001A44 490B JSR @R9 00001A46 66F6 MOV.L @R15+,R6 00001A48 A005 BRA L2477 00001A4A 0009 NOP 00001A4C L2345: ; default label wpr_attrac 1296 default: wpr_attrac 1297 E if( (!(0)) ) gerr_Assert( 0, "wpr_attr +act.c", 1297 ); 00001A4C D112 MOV.L L2598+46,R1; _gerr_Assert 00001A4E D511 MOV.L L2598+42,R5; L2071 00001A50 960B MOV.W L2598,R6 ; H'0511 00001A52 410B JSR @R1 00001A54 E400 MOV #0,R4 wpr_attrac 1298 break; 00001A56 L2477: wpr_attrac 1299 } wpr_attrac 1300 } 00001A56 7F18 ADD #24,R15 00001A58 4F26 LDS.L @R15+,PR 00001A5A 68F6 MOV.L @R15+,R8 00001A5C 69F6 MOV.L @R15+,R9 00001A5E 6AF6 MOV.L @R15+,R10 00001A60 6BF6 MOV.L @R15+,R11 00001A62 6CF6 MOV.L @R15+,R12 00001A64 6DF6 MOV.L @R15+,R13 00001A66 000B RTS 00001A68 6EF6 MOV.L @R15+,R14 00001A6A L2598: 00001A6A 0511 .DATA.W H'0511 00001A6C <00000000> .DATA.L L2139 00001A70 <00000000> .DATA.L _vec3_Copy 00001A74 <00000004> .DATA.L H'00000004+L2139 00001A78 41700000 .DATA.L H'41700000 00001A7C 3D8F5C28 .DATA.L H'3D8F5C28 00001A80 <00000000> .DATA.L L2138 00001A84 <00000000> .DATA.L _vec3_CalcInterpolate 00001A88 <00000000> .DATA.L _world_FindSectorContainingPoint 00001A8C <00000000> .DATA.L _Gamecam_pSector 00001A90 <00000000> .DATA.L L2141 00001A94 <00000000> .DATA.L L2071 00001A98 <00000000> .DATA.L _gerr_Assert wpr_attrac 1301 wpr_attrac 1302 static void _CamDraw( void ) { 00001A9C L2061: ; function: _CamDraw ; frame size=8 00001A9C 2FE6 MOV.L R14,@-R15 wpr_attrac 1303 wpr_attrac 1304 switch( _nCurrentCamType ) 00001A9E D306 MOV.L L2599+2,R3 ; L2143 00001AA0 4F22 STS.L PR,@-R15 00001AA2 6032 MOV.L @R3,R0 00001AA4 E10A MOV #10,R1 00001AA6 3012 CMP/HS R1,R0 00001AA8 893E BT L2356 00001AAA 4000 SHLL R0 00001AAC 6103 MOV R0,R1 00001AAE C703 MOVA L2601,R0 00001AB0 001D MOV.W @(R0,R1),R0 00001AB2 0023 BRAF R0 00001AB4 0009 NOP 00001AB6 L2600: 00001AB6 L2599: 00001AB6 00000002 .RES.W 1 00001AB8 <00000000> .DATA.L L2143 00001ABC L2601: 00001ABC 001A .DATA.W L2346-L2600 00001ABE 001A .DATA.W L2347-L2600 00001AC0 001A .DATA.W L2348-L2600 00001AC2 005C .DATA.W L2351-L2600 00001AC4 0022 .DATA.W L2349-L2600 00001AC6 0058 .DATA.W L2350-L2600 00001AC8 005C .DATA.W L2352-L2600 00001ACA 005C .DATA.W L2353-L2600 00001ACC 005C .DATA.W L2354-L2600 00001ACE 005C .DATA.W L2355-L2600 wpr_attrac 1305 { wpr_attrac 1306 case _GAME_CAM1: 00001AD0 L2346: ; case label wpr_attrac 1307 case _GAME_CAM2: 00001AD0 L2347: ; case label wpr_attrac 1308 case _GAME_CAM3: 00001AD0 L2348: ; case label wpr_attrac 1309 gamecam_InitXfmStack(); 00001AD0 4F26 LDS.L @R15+,PR 00001AD2 D239 MOV.L L2602+6, + R2 ; _gamecam_InitXfmStac + k 00001AD4 422B JMP @R2 00001AD6 6EF6 MOV.L @R15+,R14 00001AD8 L2349: ; case label wpr_attrac 1310 break; wpr_attrac 1311 case _MOUNTED_CAM: wpr_attrac 1312 xfm_InitCameraRot( &_Camera, _CamPos.p +[0], _CamPos.p[1], _CamPos.p[2], wpr_attrac 1313 Pla +yer_aData[_nCurrentCamPlayer].Phys.nHeading + _nCamHea +ding, 0, 0 ); 00001AD8 D038 MOV.L L2602+10,R0; L2142 00001ADA E700 MOV #0,R7 00001ADC 9269 MOV.W L2602,R2 ; H'01F0 00001ADE 6673 MOV R7,R6 00001AE0 6101 MOV.W @R0,R1 00001AE2 D038 MOV.L L2602+18, + R0; H'0000013C+_Player_a + Data 00001AE4 212F MULS R2,R1 00001AE6 DE38 MOV.L L2602+22,R14; L2138 00001AE8 D135 MOV.L L2602+14,R1; L2144 00001AEA D438 MOV.L L2602+26,R4; L2141 00001AEC 051A STS MACL,R5 00001AEE 6312 MOV.L @R1,R3 00001AF0 D237 MOV.L L2602+30,R2; _xfm_InitCameraRot 00001AF2 655F EXTS.W R5,R5 00001AF4 055E MOV.L @(R0,R5),R5 00001AF6 E008 MOV #8,R0 00001AF8 F6E6 FMOV.S @(R0,R14),FR6 00001AFA E004 MOV #4,R0 00001AFC F5E6 FMOV.S @(R0,R14),FR5 00001AFE 353C ADD R3,R5 00001B00 420B JSR @R2 00001B02 F4E8 FMOV.S @R14,FR4 wpr_attrac 1314 xfm_BuildCameraXfmAndInitStack( &_Came +ra ); 00001B04 4F26 LDS.L @R15+,PR 00001B06 D333 MOV.L L2602+34, + R3; _xfm_BuildCameraXfmA + ndInitStack 00001B08 D430 MOV.L L2602+26,R4; L2141 00001B0A 432B JMP @R3 00001B0C 6EF6 MOV.L @R15+,R14 00001B0E L2350: ; case label wpr_attrac 1315 break; wpr_attrac 1316 case _CIRCLE_CAM: wpr_attrac 1317 break; 00001B0E A012 BRA L2480 00001B10 0009 NOP 00001B12 L2351: ; case label wpr_attrac 1318 case _ESPN_CAM: wpr_attrac 1319 case _ESPN2_CAM: 00001B12 L2352: ; case label wpr_attrac 1320 case _ESPN3_CAM: 00001B12 L2353: ; case label wpr_attrac 1321 case _STATIONARY_CAM: 00001B12 L2354: ; case label wpr_attrac 1322 case _CHASE_CAM: 00001B12 L2355: ; case label wpr_attrac 1323 xfm_InitCameraLookFromVec( &_Camera, & +_CamPos, &_CamLook ); 00001B12 D42E MOV.L L2602+26,R4; L2141 00001B14 D331 MOV.L L2602+42, + R3; _xfm_InitCameraLookF + romVec 00001B16 D630 MOV.L L2602+38,R6; L2139 00001B18 D52B MOV.L L2602+22,R5; L2138 00001B1A 430B JSR @R3 00001B1C 0009 NOP wpr_attrac 1324 xfm_BuildCameraXfmAndInitStack( &_Came +ra ); 00001B1E 4F26 LDS.L @R15+,PR 00001B20 D22C MOV.L L2602+34, + R2; _xfm_BuildCameraXfmA + ndInitStack 00001B22 D42A MOV.L L2602+26,R4; L2141 00001B24 422B JMP @R2 00001B26 6EF6 MOV.L @R15+,R14 00001B28 L2356: ; default label wpr_attrac 1325 break; wpr_attrac 1326 default: wpr_attrac 1327 E if( (!(0)) ) gerr_Assert( 0, "wpr_attr +act.c", 1327 ); 00001B28 4F26 LDS.L @R15+,PR 00001B2A D22E MOV.L L2602+50,R2; _gerr_Assert 00001B2C E400 MOV #0,R4 00001B2E 9641 MOV.W L2602+2,R6 ; H'052F 00001B30 D52B MOV.L L2602+46,R5; L2071 00001B32 422B JMP @R2 00001B34 6EF6 MOV.L @R15+,R14 00001B36 L2480: wpr_attrac 1328 break; wpr_attrac 1329 } wpr_attrac 1330 } 00001B36 4F26 LDS.L @R15+,PR 00001B38 000B RTS 00001B3A 6EF6 MOV.L @R15+,R14 wpr_attrac 1331 wpr_attrac 1332 static Mesh3d_t *_pViewText; wpr_attrac 1333 static Mesh3d_t *_paActiveView[3]; wpr_attrac 1334 E static int _bOverLayOk; wpr_attrac 1335 static int _nViewWords; wpr_attrac 1336 static u32 _nCounter; wpr_attrac 1337 E static int _bFlashOn; wpr_attrac 1338 wpr_attrac 1339 #define _DO_NOT_DRAW_OVERLAY -1 wpr_attrac 1340 wpr_attrac 1341 static ObsysLoadDef_t _aLoadTable[] = { wpr_attrac 1342 (void *)&_pViewText, "GWWDI +RETXH0", wpr_attrac 1343 (void *)&_paActiveView[0], "GWWPI +LOONH0", wpr_attrac 1344 (void *)&_paActiveView[1], "GWWLO +W_ONH0", wpr_attrac 1345 (void *)&_paActiveView[2], "GWWHI +GHONH0", wpr_attrac 1346 E 0, + 0, wpr_attrac 1347 }; wpr_attrac 1348 wpr_attrac 1349 static void _OverLayLoad( void ) { 00001B3C L2062: ; function: _OverLayL + oad ; frame size=4 00001B3C 4F22 STS.L PR,@-R15 wpr_attrac 1350 wpr_attrac 1351 /* load our textures */ wpr_attrac 1352 E if( obsys_LoadGroup( _aLoadTable, 0 ) != -1 ) +{ 00001B3E D32B MOV.L L2602+58,R3; _obsys_LoadGroup 00001B40 D429 MOV.L L2602+54,R4; L2184 00001B42 430B JSR @R3 00001B44 E500 MOV #0,R5 00001B46 88FF CMP/EQ #-1,R0 00001B48 8903 BT L2482 wpr_attrac 1353 /* all of the textures could not loade +d */ wpr_attrac 1354 E _bOverLayOk = 0; 00001B4A D229 MOV.L L2602+62,R2; L2180 00001B4C E300 MOV #0,R3 00001B4E A00B BRA L2483 00001B50 2232 MOV.L R3,@R2 00001B52 L2482: wpr_attrac 1355 } else { wpr_attrac 1356 /* everything loaded ok */ wpr_attrac 1357 E _bOverLayOk = 1; 00001B52 D327 MOV.L L2602+62,R3; L2180 wpr_attrac 1358 E _nViewWords = -1; 00001B54 E2FF MOV #-1,R2 00001B56 E401 MOV #1,R4 00001B58 2342 MOV.L R4,@R3 wpr_attrac 1359 _nCounter = 0; 00001B5A E000 MOV #0,R0 00001B5C D125 MOV.L L2602+66,R1; L2181 00001B5E 2122 MOV.L R2,@R1 00001B60 D225 MOV.L L2602+70,R2; L2182 00001B62 2202 MOV.L R0,@R2 wpr_attrac 1360 E _bFlashOn = 1; 00001B64 D325 MOV.L L2602+74,R3; L2183 00001B66 2342 MOV.L R4,@R3 00001B68 L2483: wpr_attrac 1361 } wpr_attrac 1362 } 00001B68 4F26 LDS.L @R15+,PR 00001B6A 000B RTS 00001B6C 0009 NOP wpr_attrac 1363 wpr_attrac 1364 static void _OverLayWork( void ) { 00001B6E L2063: ; function: _OverLayW + ork ; frame size=8 00001B6E 2FE6 MOV.L R14,@-R15 00001B70 2FD6 MOV.L R13,@-R15 wpr_attrac 1365 wpr_attrac 1366 if( !_bOverLayOk ) { 00001B72 D11F MOV.L L2602+62,R1; L2180 00001B74 6212 MOV.L @R1,R2 00001B76 2228 TST R2,R2 00001B78 8B01 BF L2603 00001B7A A0B9 BRA L2485 00001B7C 0009 NOP 00001B7E L2603: wpr_attrac 1367 return; wpr_attrac 1368 } wpr_attrac 1369 wpr_attrac 1370 switch( _StageNum ) 00001B7E D320 MOV.L L2602+78,R3; L2041 00001B80 ED02 MOV #2,R13 00001B82 D41D MOV.L L2602+70,R4; L2182 00001B84 E700 MOV #0,R7 00001B86 6032 MOV.L @R3,R0 00001B88 D61C MOV.L L2602+74,R6; L2183 00001B8A DE1A MOV.L L2602+66,R14; L2181 00001B8C 880E CMP/EQ #14,R0 00001B8E 8F02 BF/S L2604 00001B90 E501 MOV #1,R5 00001B92 A0AD BRA L2485 00001B94 0009 NOP 00001B96 L2604: 00001B96 8810 CMP/EQ #16,R0 00001B98 8934 BT L2370 00001B9A 8812 CMP/EQ #18,R0 00001B9C 8962 BT L2379 00001B9E 8814 CMP/EQ #20,R0 00001BA0 8B01 BF L2605 00001BA2 A0A5 BRA L2485 00001BA4 0009 NOP 00001BA6 L2605: 00001BA6 8816 CMP/EQ #22,R0 00001BA8 892C BT L2371 00001BAA 8818 CMP/EQ #24,R0 00001BAC 895A BT L2380 00001BAE A098 BRA L2388 00001BB0 0009 NOP 00001BB2 L2602: 00001BB2 01F0 .DATA.W H'01F0 00001BB4 052F .DATA.W H'052F 00001BB6 00000002 .RES.W 1 00001BB8 <00000000> .DATA.L _gamecam_InitXfmStack 00001BBC <00000000> .DATA.L L2142 00001BC0 <00000000> .DATA.L L2144 00001BC4 <0000013C> .DATA.L H'0000013C+_Player_aData 00001BC8 <00000000> .DATA.L L2138 00001BCC <00000000> .DATA.L L2141 00001BD0 <00000000> .DATA.L _xfm_InitCameraRot 00001BD4 <00000000> .DATA.L _xfm_BuildCameraXfmAndInitStack 00001BD8 <00000000> .DATA.L L2139 00001BDC <00000000> .DATA.L _xfm_InitCameraLookFromVec 00001BE0 <00000000> .DATA.L L2071 00001BE4 <00000000> .DATA.L _gerr_Assert 00001BE8 <00000000> .DATA.L L2184 00001BEC <00000000> .DATA.L _obsys_LoadGroup 00001BF0 <00000000> .DATA.L L2180 00001BF4 <00000000> .DATA.L L2181 00001BF8 <00000000> .DATA.L L2182 00001BFC <00000000> .DATA.L L2183 00001C00 <00000000> .DATA.L L2041 00001C04 L2370: ; case label wpr_attrac 1371 { wpr_attrac 1372 case WPR_ATTRACT_STAGE_1: wpr_attrac 1373 case WPR_ATTRACT_STAGE_7: wpr_attrac 1374 break; wpr_attrac 1375 case WPR_ATTRACT_STAGE_3: wpr_attrac 1376 case WPR_ATTRACT_STAGE_9: 00001C04 L2371: ; case label wpr_attrac 1377 switch( _nFrameCount ) 00001C04 D130 MOV.L L2606+26,R1; L2052 00001C06 6012 MOV.L @R1,R0 00001C08 9151 MOV.W L2606,R1 ; H'00FA 00001C0A 3010 CMP/EQ R1,R0 00001C0C 8910 BT L2372 00001C0E 914F MOV.W L2606+2,R1 ; H'0177 00001C10 3010 CMP/EQ R1,R0 00001C12 890F BT L2373 00001C14 914D MOV.W L2606+4,R1 ; H'01F4 00001C16 3010 CMP/EQ R1,R0 00001C18 890E BT L2374 00001C1A 914B MOV.W L2606+6,R1 ; H'0271 00001C1C 3010 CMP/EQ R1,R0 00001C1E 890D BT L2375 00001C20 9149 MOV.W L2606+8,R1 ; H'02EE 00001C22 3010 CMP/EQ R1,R0 00001C24 890C BT L2376 00001C26 9147 MOV.W L2606+10,R1; H'036B 00001C28 3010 CMP/EQ R1,R0 00001C2A 890B BT L2377 00001C2C A00D BRA L2378 00001C2E 0009 NOP 00001C30 L2372: ; case label wpr_attrac 1378 { wpr_attrac 1379 case 250: wpr_attrac 1380 /* turn on view 3 */ wpr_attrac 1381 _nViewWords = 2; wpr_attrac 1382 _nCounter = 0; wpr_attrac 1383 E _bFlashOn = 1; wpr_attrac 1384 break; 00001C30 A006 BRA L2559 00001C32 0009 NOP 00001C34 L2373: ; case label wpr_attrac 1385 case 375: wpr_attrac 1386 /* turn on view 2 */ wpr_attrac 1387 _nViewWords = 1; wpr_attrac 1388 _nCounter = 0; wpr_attrac 1389 E _bFlashOn = 1; wpr_attrac 1390 break; 00001C34 A035 BRA L2558 00001C36 2E52 MOV.L R5,@R14 00001C38 L2374: ; case label wpr_attrac 1391 case 500: wpr_attrac 1392 /* turn on view 1 */ wpr_attrac 1393 _nViewWords = 0; wpr_attrac 1394 _nCounter = 0; wpr_attrac 1395 E _bFlashOn = 1; wpr_attrac 1396 break; 00001C38 A033 BRA L2558 00001C3A 2E72 MOV.L R7,@R14 00001C3C L2375: ; case label wpr_attrac 1397 case 625: wpr_attrac 1398 /* turn on view 2 */ wpr_attrac 1399 _nViewWords = 1; wpr_attrac 1400 _nCounter = 0; wpr_attrac 1401 E _bFlashOn = 1; wpr_attrac 1402 break; 00001C3C A031 BRA L2558 00001C3E 2E52 MOV.L R5,@R14 00001C40 L2376: ; case label wpr_attrac 1403 case 750: wpr_attrac 1404 /* turn on view 3 */ wpr_attrac 1405 _nViewWords = 2; wpr_attrac 1406 _nCounter = 0; wpr_attrac 1407 E _bFlashOn = 1; wpr_attrac 1408 break; 00001C40 L2559: 00001C40 A02F BRA L2558 00001C42 2ED2 MOV.L R13,@R14 00001C44 L2377: ; case label wpr_attrac 1409 case 875: wpr_attrac 1410 E _nViewWords = -1; 00001C44 E2FF MOV #-1,R2 wpr_attrac 1411 break; 00001C46 A053 BRA L2485 00001C48 2E22 MOV.L R2,@R14 00001C4A L2378: ; default label wpr_attrac 1412 default: wpr_attrac 1413 ++_nCounter; 00001C4A 6142 MOV.L @R4,R1 00001C4C 7101 ADD #1,R1 wpr_attrac 1414 if( (_nCounter & 0x3) == 0x3 ) + { 00001C4E 6013 MOV R1,R0 00001C50 0009 NOP 00001C52 C903 AND #3,R0 00001C54 8803 CMP/EQ #3,R0 00001C56 8F4B BF/S L2485 00001C58 2412 MOV.L R1,@R4 wpr_attrac 1415 _bFlashOn = !_bFlashOn +; 00001C5A 6062 MOV.L @R6,R0 00001C5C 2008 TST R0,R0 00001C5E 0029 MOVT R0 wpr_attrac 1416 } wpr_attrac 1417 break; wpr_attrac 1418 } wpr_attrac 1419 break; 00001C60 A046 BRA L2485 00001C62 2602 MOV.L R0,@R6 00001C64 L2379: ; case label wpr_attrac 1420 case WPR_ATTRACT_STAGE_5: wpr_attrac 1421 case WPR_ATTRACT_STAGE_11: 00001C64 L2380: ; case label wpr_attrac 1422 switch( _nFrameCount ) 00001C64 D118 MOV.L L2606+26,R1; L2052 00001C66 6012 MOV.L @R1,R0 00001C68 9127 MOV.W L2606+12,R1; H'00C8 00001C6A 3010 CMP/EQ R1,R0 00001C6C 8910 BT L2381 00001C6E 9125 MOV.W L2606+14,R1; H'0145 00001C70 3010 CMP/EQ R1,R0 00001C72 890F BT L2382 00001C74 9123 MOV.W L2606+16,R1; H'01C2 00001C76 3010 CMP/EQ R1,R0 00001C78 890E BT L2383 00001C7A 9121 MOV.W L2606+18,R1; H'023F 00001C7C 3010 CMP/EQ R1,R0 00001C7E 890D BT L2384 00001C80 911F MOV.W L2606+20,R1; H'02BC 00001C82 3010 CMP/EQ R1,R0 00001C84 890C BT L2385 00001C86 911D MOV.W L2606+22,R1; H'0339 00001C88 3010 CMP/EQ R1,R0 00001C8A 890D BT L2386 00001C8C A01E BRA L2387 00001C8E 0009 NOP 00001C90 L2381: ; case label wpr_attrac 1423 { wpr_attrac 1424 case 200: wpr_attrac 1425 /* turn on view 3 */ wpr_attrac 1426 _nViewWords = 2; wpr_attrac 1427 _nCounter = 0; wpr_attrac 1428 E _bFlashOn = 1; wpr_attrac 1429 break; 00001C90 A006 BRA L2560 00001C92 0009 NOP 00001C94 L2382: ; case label wpr_attrac 1430 case 325: wpr_attrac 1431 /* turn on view 2 */ wpr_attrac 1432 _nViewWords = 1; wpr_attrac 1433 _nCounter = 0; wpr_attrac 1434 E _bFlashOn = 1; wpr_attrac 1435 break; 00001C94 A005 BRA L2558 00001C96 2E52 MOV.L R5,@R14 00001C98 L2383: ; case label wpr_attrac 1436 case 450: wpr_attrac 1437 /* turn on view 1 */ wpr_attrac 1438 _nViewWords = 0; wpr_attrac 1439 _nCounter = 0; wpr_attrac 1440 E _bFlashOn = 1; wpr_attrac 1441 break; 00001C98 A003 BRA L2558 00001C9A 2E72 MOV.L R7,@R14 00001C9C L2384: ; case label wpr_attrac 1442 case 575: wpr_attrac 1443 /* turn on view 2 */ wpr_attrac 1444 _nViewWords = 1; wpr_attrac 1445 _nCounter = 0; wpr_attrac 1446 E _bFlashOn = 1; wpr_attrac 1447 break; 00001C9C A001 BRA L2558 00001C9E 2E52 MOV.L R5,@R14 00001CA0 L2385: ; case label wpr_attrac 1448 case 700: wpr_attrac 1449 /* turn on view 3 */ wpr_attrac 1450 _nViewWords = 2; wpr_attrac 1451 _nCounter = 0; wpr_attrac 1452 E _bFlashOn = 1; wpr_attrac 1453 break; 00001CA0 L2560: 00001CA0 2ED2 MOV.L R13,@R14 00001CA2 L2558: 00001CA2 2472 MOV.L R7,@R4 00001CA4 A024 BRA L2485 00001CA6 2652 MOV.L R5,@R6 00001CA8 L2386: ; case label wpr_attrac 1454 case 825: wpr_attrac 1455 E _nViewWords = -1; 00001CA8 E1FF MOV #-1,R1 wpr_attrac 1456 break; 00001CAA A021 BRA L2485 00001CAC 2E12 MOV.L R1,@R14 00001CAE L2606: 00001CAE 00FA .DATA.W H'00FA 00001CB0 0177 .DATA.W H'0177 00001CB2 01F4 .DATA.W H'01F4 00001CB4 0271 .DATA.W H'0271 00001CB6 02EE .DATA.W H'02EE 00001CB8 036B .DATA.W H'036B 00001CBA 00C8 .DATA.W H'00C8 00001CBC 0145 .DATA.W H'0145 00001CBE 01C2 .DATA.W H'01C2 00001CC0 023F .DATA.W H'023F 00001CC2 02BC .DATA.W H'02BC 00001CC4 0339 .DATA.W H'0339 00001CC6 00000002 .RES.W 1 00001CC8 <00000000> .DATA.L L2052 00001CCC L2387: ; default label wpr_attrac 1457 default: wpr_attrac 1458 ++_nCounter; 00001CCC 6042 MOV.L @R4,R0 00001CCE 7001 ADD #1,R0 00001CD0 2402 MOV.L R0,@R4 wpr_attrac 1459 if( (_nCounter & 0x3) == 0x3 ) + { 00001CD2 C903 AND #3,R0 00001CD4 8803 CMP/EQ #3,R0 00001CD6 8B0B BF L2485 wpr_attrac 1460 _bFlashOn = !_bFlashOn +; 00001CD8 6062 MOV.L @R6,R0 00001CDA 2008 TST R0,R0 00001CDC 0029 MOVT R0 wpr_attrac 1461 } wpr_attrac 1462 break; wpr_attrac 1463 } wpr_attrac 1464 break; 00001CDE A007 BRA L2485 00001CE0 2602 MOV.L R0,@R6 00001CE2 L2388: ; default label wpr_attrac 1465 default: wpr_attrac 1466 E if( (!(0)) ) gerr_Assert( 0, "wpr_attr +act.c", 1466 ); 00001CE2 D145 MOV.L L2607+6,R1 ; _gerr_Assert 00001CE4 E400 MOV #0,R4 00001CE6 6DF6 MOV.L @R15+,R13 00001CE8 9683 MOV.W L2607,R6 ; H'05BA 00001CEA D542 MOV.L L2607+2,R5 ; L2071 00001CEC 412B JMP @R1 00001CEE 6EF6 MOV.L @R15+,R14 00001CF0 L2485: wpr_attrac 1467 break; wpr_attrac 1468 } wpr_attrac 1469 } 00001CF0 6DF6 MOV.L @R15+,R13 00001CF2 000B RTS 00001CF4 6EF6 MOV.L @R15+,R14 wpr_attrac 1470 wpr_attrac 1471 static void _OverLayDraw( void ) { 00001CF6 L2064: ; function: _OverLayD + raw ; frame size=48 00001CF6 2FE6 MOV.L R14,@-R15 00001CF8 2FD6 MOV.L R13,@-R15 00001CFA 2FC6 MOV.L R12,@-R15 00001CFC 2FB6 MOV.L R11,@-R15 00001CFE 2FA6 MOV.L R10,@-R15 00001D00 2F96 MOV.L R9,@-R15 00001D02 FFFB FMOV.S FR15,@-R15 00001D04 FFEB FMOV.S FR14,@-R15 00001D06 FFDB FMOV.S FR13,@-R15 00001D08 FFCB FMOV.S FR12,@-R15 wpr_attrac 1472 u32 nPriorState; wpr_attrac 1473 int i; wpr_attrac 1474 wpr_attrac 1475 if( !_bOverLayOk ) { 00001D0A D23C MOV.L L2607+10,R2; L2180 00001D0C 4F22 STS.L PR,@-R15 00001D0E 6322 MOV.L @R2,R3 00001D10 2338 TST R3,R3 00001D12 7FFC ADD #-4,R15 00001D14 8960 BT L2495 wpr_attrac 1476 return; wpr_attrac 1477 } wpr_attrac 1478 wpr_attrac 1479 /* draw view text if need be */ wpr_attrac 1480 E if( _nViewWords != -1 ) { 00001D16 DC3A MOV.L L2607+14,R12; L2181 00001D18 60C2 MOV.L @R12,R0 00001D1A 88FF CMP/EQ #-1,R0 00001D1C 895C BT L2495 wpr_attrac 1481 /* setup the ortho draw */ wpr_attrac 1482 mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1. +0f, 1.0f, 0.0f ); 00001D1E FF9D FLDI1 FR15 00001D20 FD8D FLDI0 FR13 00001D22 DD38 MOV.L L2607+18, + R13; _mesh3d_SetOrthoEff + ects 00001D24 F6FC FMOV.S FR15,FR6 00001D26 F5FC FMOV.S FR15,FR5 00001D28 F8DC FMOV.S FR13,FR8 00001D2A F7FC FMOV.S FR15,FR7 00001D2C 4D0B JSR @R13 00001D2E F4FC FMOV.S FR15,FR4 wpr_attrac 1483 wpr_attrac 1484 E nPriorState = gutil_ZbufferSetState( 3 + ); 00001D30 D235 MOV.L L2607+22, + R2; _gutil_ZbufferSetSta + te 00001D32 420B JSR @R2 00001D34 E403 MOV #3,R4 00001D36 2F02 MOV.L R0,@R15 wpr_attrac 1485 E mesh3d_DrawOrtho( _pViewText, -110.0f, + 121.0f, 32000.0f, 0, 1.0f ); 00001D38 C735 MOVA L2607+30,R0 00001D3A FC08 FMOV.S @R0,FR12 00001D3C C735 MOVA L2607+34,R0 00001D3E F508 FMOV.S @R0,FR5 00001D40 C735 MOVA L2607+38,R0 00001D42 DB32 MOV.L L2607+26,R11; _mesh3d_DrawOrtho 00001D44 E500 MOV #0,R5 00001D46 D335 MOV.L L2607+42,R3; L2178 00001D48 F408 FMOV.S @R0,FR4 00001D4A F7FC FMOV.S FR15,FR7 00001D4C F6CC FMOV.S FR12,FR6 00001D4E 4B0B JSR @R11 00001D50 6432 MOV.L @R3,R4 00001D52 C734 MOVA L2607+50,R0 00001D54 D932 MOV.L L2607+46,R9; L2179 00001D56 FE08 FMOV.S @R0,FR14 wpr_attrac 1486 wpr_attrac 1487 for( i=0; i < 3; i++ ) { 00001D58 EE00 MOV #0,R14 00001D5A EA03 MOV #3,R10 00001D5C L2497: wpr_attrac 1488 if( i == _nViewWords && _bFlas +hOn ) { 00001D5C 63C2 MOV.L @R12,R3 00001D5E 3E30 CMP/EQ R3,R14 00001D60 8B09 BF L2498 00001D62 D231 MOV.L L2607+54,R2; L2183 00001D64 6122 MOV.L @R2,R1 00001D66 2118 TST R1,R1 00001D68 8905 BT L2498 wpr_attrac 1489 mesh3d_SetOrthoEffects +( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); 00001D6A F6FC FMOV.S FR15,FR6 00001D6C F5FC FMOV.S FR15,FR5 00001D6E F8DC FMOV.S FR13,FR8 00001D70 F7FC FMOV.S FR15,FR7 00001D72 A005 BRA L2561 00001D74 F4FC FMOV.S FR15,FR4 00001D76 L2498: wpr_attrac 1490 } else { wpr_attrac 1491 mesh3d_SetOrthoEffects +( 0.25f, 0.25f, 0.25f, 1.0f, 0.0f ); 00001D76 F5EC FMOV.S FR14,FR5 00001D78 F4EC FMOV.S FR14,FR4 00001D7A F6EC FMOV.S FR14,FR6 00001D7C F8DC FMOV.S FR13,FR8 00001D7E F7FC FMOV.S FR15,FR7 00001D80 L2561: 00001D80 4D0B JSR @R13 00001D82 0009 NOP wpr_attrac 1492 } wpr_attrac 1493 E mesh3d_DrawOrtho( _paActiveVie +w[i], -200.0f, 30.0f + (i * -43.0f), 32000.0f, 0, 1.0f + ); 00001D84 4E5A LDS R14,FPUL 00001D86 C729 MOVA L2607+58,R0 00001D88 F208 FMOV.S @R0,FR2 00001D8A C729 MOVA L2607+62,R0 00001D8C F508 FMOV.S @R0,FR5 00001D8E C729 MOVA L2607+66,R0 00001D90 F32D FLOAT FPUL,FR3 00001D92 F408 FMOV.S @R0,FR4 00001D94 E500 MOV #0,R5 00001D96 F6CC FMOV.S FR12,FR6 00001D98 F7FC FMOV.S FR15,FR7 00001D9A F322 FMUL FR2,FR3 00001D9C F531 FSUB FR3,FR5 00001D9E 60E3 MOV R14,R0 00001DA0 0009 NOP 00001DA2 4008 SHLL2 R0 00001DA4 4B0B JSR @R11 00001DA6 049E MOV.L @(R0,R9),R4 00001DA8 7E01 ADD #1,R14 00001DAA 3EA3 CMP/GE R10,R14 00001DAC 8BD6 BF L2497 wpr_attrac 1494 } wpr_attrac 1495 mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1. +0f, 1.0f, 0.0f ); 00001DAE F6FC FMOV.S FR15,FR6 00001DB0 F5FC FMOV.S FR15,FR5 00001DB2 F8DC FMOV.S FR13,FR8 00001DB4 F7FC FMOV.S FR15,FR7 00001DB6 4D0B JSR @R13 00001DB8 F4FC FMOV.S FR15,FR4 wpr_attrac 1496 gutil_ZbufferSetState( nPriorState ); 00001DBA 64F2 MOV.L @R15,R4 00001DBC 7F04 ADD #4,R15 00001DBE 4F26 LDS.L @R15+,PR 00001DC0 D311 MOV.L L2607+22, + R3; _gutil_ZbufferSetSta + te 00001DC2 FCF9 FMOV.S @R15+,FR12 00001DC4 FDF9 FMOV.S @R15+,FR13 00001DC6 FEF9 FMOV.S @R15+,FR14 00001DC8 FFF9 FMOV.S @R15+,FR15 00001DCA 69F6 MOV.L @R15+,R9 00001DCC 6AF6 MOV.L @R15+,R10 00001DCE 6BF6 MOV.L @R15+,R11 00001DD0 6CF6 MOV.L @R15+,R12 00001DD2 6DF6 MOV.L @R15+,R13 00001DD4 432B JMP @R3 00001DD6 6EF6 MOV.L @R15+,R14 00001DD8 L2495: wpr_attrac 1497 } wpr_attrac 1498 } 00001DD8 7F04 ADD #4,R15 00001DDA 4F26 LDS.L @R15+,PR 00001DDC FCF9 FMOV.S @R15+,FR12 00001DDE FDF9 FMOV.S @R15+,FR13 00001DE0 FEF9 FMOV.S @R15+,FR14 00001DE2 FFF9 FMOV.S @R15+,FR15 00001DE4 69F6 MOV.L @R15+,R9 00001DE6 6AF6 MOV.L @R15+,R10 00001DE8 6BF6 MOV.L @R15+,R11 00001DEA 6CF6 MOV.L @R15+,R12 00001DEC 6DF6 MOV.L @R15+,R13 00001DEE 000B RTS 00001DF0 6EF6 MOV.L @R15+,R14 00001DF2 L2607: 00001DF2 05BA .DATA.W H'05BA 00001DF4 <00000000> .DATA.L L2071 00001DF8 <00000000> .DATA.L _gerr_Assert 00001DFC <00000000> .DATA.L L2180 00001E00 <00000000> .DATA.L L2181 00001E04 <00000000> .DATA.L _mesh3d_SetOrthoEffects 00001E08 <00000000> .DATA.L _gutil_ZbufferSetState 00001E0C <00000000> .DATA.L _mesh3d_DrawOrtho 00001E10 46FA0000 .DATA.L H'46FA0000 00001E14 42F20000 .DATA.L H'42F20000 00001E18 C2DC0000 .DATA.L H'C2DC0000 00001E1C <00000000> .DATA.L L2178 00001E20 <00000000> .DATA.L L2179 00001E24 3E800000 .DATA.L H'3E800000 00001E28 <00000000> .DATA.L L2183 00001E2C 422C0000 .DATA.L H'422C0000 00001E30 41F00000 .DATA.L H'41F00000 00001E34 C3480000 .DATA.L H'C3480000 wpr_attrac 1499 wpr_attrac 1500 wpr_attrac 1501 C 00000000 L2022: ; static: _StageInfo 00000000 000E0E0000 .DATA.B H'00,H'0E,H'0E,H'00,H'00,H'FF FF 00000006 012C .DATA.W H'012C 00000008 <00000000> .DATA.L L2023 0000000C 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 00000014 000F0F00FF .DATA.B H'00,H'0F,H'0F,H'00,H'FF,H'00 00 0000001A 012C .DATA.W H'012C 0000001C <00000000> .DATA.L L2024 00000020 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 00000028 001010FF00 .DATA.B H'00,H'10,H'10,H'FF,H'00,H'00 00 0000002E 012C .DATA.W H'012C 00000030 <00000000> .DATA.L L2025 00000034 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 0000003C 00111100FF .DATA.B H'00,H'11,H'11,H'00,H'FF,H'FF FF 00000042 012C .DATA.W H'012C 00000044 <00000000> .DATA.L L2026 00000048 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 00000050 001212FFFF .DATA.B H'00,H'12,H'12,H'FF,H'FF,H'00 00 00000056 012C .DATA.W H'012C 00000058 <00000000> .DATA.L L2027 0000005C 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 00000064 001313FF00 .DATA.B H'00,H'13,H'13,H'FF,H'00,H'FF FF 0000006A 012C .DATA.W H'012C 0000006C <00000000> .DATA.L L2028 00000070 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 00000078 0014140080 .DATA.B H'00,H'14,H'14,H'00,H'80,H'80 80 0000007E 012C .DATA.W H'012C 00000080 <00000000> .DATA.L L2029 00000084 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 0000008C 0015158080 .DATA.B H'00,H'15,H'15,H'80,H'80,H'0000 00000092 012C .DATA.W H'012C 00000094 <00000000> .DATA.L L2030 00000098 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 000000A0 0016168000 .DATA.B H'00,H'16,H'16,H'80,H'00,H'80 80 000000A6 012C .DATA.W H'012C 000000A8 <00000000> .DATA.L L2031 000000AC 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 000000B4 0017178080 .DATA.B H'00,H'17,H'17,H'80,H'80,H'80 80 000000BA 012C .DATA.W H'012C 000000BC <00000000> .DATA.L L2032 000000C0 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 000000C8 001818FF80 .DATA.B H'00,H'18,H'18,H'FF,H'80,H'40 40 000000CE 012C .DATA.W H'012C 000000D0 <00000000> .DATA.L L2033 000000D4 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 000000DC 0019198040 .DATA.B H'00,H'19,H'19,H'80,H'40,H'FF FF 000000E2 012C .DATA.W H'012C 000000E4 <00000000> .DATA.L L2034 000000E8 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 000000F0 000E0E40FF .DATA.B H'00,H'0E,H'0E,H'40,H'FF,H'80 80 000000F6 012C .DATA.W H'012C 000000F8 <00000000> .DATA.L L2035 000000FC 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 00000104 00000E0000 .DATA.B H'00,H'00,H'0E,H'00,H'00,H'00 00 0000010A 0000 .DATA.W H'0000 0000010C <00000000> .DATA.L L2036 00000110 0000000000 .DATA.W H'0000,H'0000,H'0000,H'0000 000000 00000118 01010FFF80 .DATA.B H'01,H'01,H'0F,H'FF,H'80,H'40 40 0000011E 0B22 .DATA.W H'0B22 00000120 <00000000> .DATA.L L2037 00000124 0003000000 .DATA.W H'0003,H'0000,H'0000,H'0000 000000 0000012C 0202108040 .DATA.B H'02,H'02,H'10,H'80,H'40,H'20 20 00000132 04E2 .DATA.W H'04E2 00000134 <00000000> .DATA.L L2038 00000138 0000000100 .DATA.W H'0000,H'0001,H'0000,H'0000 000000 00000140 0103114020 .DATA.B H'01,H'03,H'11,H'40,H'20,H'10 10 00000146 0AF0 .DATA.W H'0AF0 00000148 <00000000> .DATA.L L2039 0000014C 0004000000 .DATA.W H'0004,H'0000,H'0001,H'0000 010000 00000154 02041280FF .DATA.B H'02,H'04,H'12,H'80,H'FF,H'00 00 0000015A 04E2 .DATA.W H'04E2 0000015C <00000000> .DATA.L L2038 00000160 0002000300 .DATA.W H'0002,H'0003,H'0000,H'0000 000000 00000168 01051380FF .DATA.B H'01,H'05,H'13,H'80,H'FF,H'FF FF 0000016E 0B86 .DATA.W H'0B86 00000170 <00000000> .DATA.L L2040 00000174 0001000000 .DATA.W H'0001,H'0000,H'0002,H'0000 020000 0000017C 0206148000 .DATA.B H'02,H'06,H'14,H'80,H'00,H'FF FF 00000182 04E2 .DATA.W H'04E2 00000184 <00000000> .DATA.L L2038 00000188 0004000500 .DATA.W H'0004,H'0005,H'0000,H'0000000000 00000190 010715FF00 .DATA.B H'01,H'07,H'15,H'FF,H'00,H'FF FF 00000196 0B22 .DATA.W H'0B22 00000198 <00000000> .DATA.L L2037 0000019C 0003000000 .DATA.W H'0003,H'0000,H'0000,H'0000 000000 000001A4 020816FF00 .DATA.B H'02,H'08,H'16,H'FF,H'00,H'00 00 000001AA 04E2 .DATA.W H'04E2 000001AC <00000000> .DATA.L L2038 000001B0 0006000700 .DATA.W H'0006,H'0007,H'0000,H'0000 000000 000001B8 0109178080 .DATA.B H'01,H'09,H'17,H'80,H'80,H'00 00 000001BE 0B22 .DATA.W H'0B22 000001C0 <00000000> .DATA.L L2039 000001C4 0004000000 .DATA.W H'0004,H'0000,H'0001,H'0000 010000 000001CC 020A180000 .DATA.B H'02,H'0A,H'18,H'00,H'00,H'FF FF 000001D2 04E2 .DATA.W H'04E2 000001D4 <00000000> .DATA.L L2038 000001D8 0008000200 .DATA.W H'0008,H'0002,H'0000,H'0000 000000 000001E0 010B198000 .DATA.B H'01,H'0B,H'19,H'80,H'00,H'80 80 000001E6 0AF0 .DATA.W H'0AF0 000001E8 <00000000> .DATA.L L2040 000001EC 0001000000 .DATA.W H'0001,H'0000,H'0002,H'0000 020000 000001F4 020C0E0080 .DATA.B H'02,H'0C,H'0E,H'00,H'80,H'80 80 000001FA 04E2 .DATA.W H'04E2 000001FC <00000000> .DATA.L L2038 00000200 0005000300 .DATA.W H'0005,H'0003,H'0000,H'0000 000000 00000208 L2071: 00000208 7770725F61 .SDATA "wpr_attract.c" 7474726163 742E63 00000215 00 .DATA.B H'00 00000216 00000002 .RES.W 1 00000218 L2110: 00000218 4A6F696E20 .SDATA "Join Network Game" 4E6574776F 726B204761 6D65 00000229 0A00 .DATA.B H'0A,H'00 0000022B 00000001 .RES.B 1 0000022C L2112: 0000022C 4154545241 .SDATA "ATTRACT MODE" 4354204D4F 4445 00000238 0A00 .DATA.B H'0A,H'00 0000023A 00000002 .RES.W 1 0000023C L2113: 0000023C 5374616765 .SDATA "Stage number %d" 206E756D62 6572202564 0000024B 0A00 .DATA.B H'0A,H'00 0000024D 00000001 .RES.B 1 0000024E 00000002 .RES.W 1 00000250 L2115: 00000250 54696D6520 .SDATA "Time (secs) %f" 2873656373 29202566 0000025E 0A00 .DATA.B H'0A,H'00 00000260 L2117: 00000260 5374617469 .SDATA "Static screen here." 6320736372 65656E2068 6572652E 00000273 0A00 .DATA.B H'0A,H'00 00000275 00000001 .RES.B 1 00000276 00000002 .RES.W 1 00000278 L2118: 00000278 5761697469 .SDATA "Waiting to sync up." 6E6720746F 2073796E63 2075702E 0000028B 0A00 .DATA.B H'0A,H'00 0000028D 00000001 .RES.B 1 0000028E 00000002 .RES.W 1 00000290 L2023: 00000290 4257574C4F .SDATA 474F415431 30 0000029B 00 .DATA.B H'00 0000029C L2024: 0000029C 4257574859 .SDATA "BWWHYDRAT10" 4452415431 30 000002A7 00 .DATA.B H'00 000002A8 L2025: 000002A8 4257573344 .SDATA "BWW3DFXAT10" 4658415431 30 000002B3 00 .DATA.B H'00 000002B4 L2026: 000002B4 4257574854 .SDATA "BWWHTRAAT10" 5241415431 30 000002BF 00 .DATA.B H'00 000002C0 L2027: 000002C0 4257574241 .SDATA "BWWBANSAT10" 4E53415431 30 000002CB 00 .DATA.B H'00 000002CC L2028: 000002CC 4257574355 .SDATA "BWWCUTTAT10" 5454415431 30 000002D7 00 .DATA.B H'00 000002D8 L2029: 000002D8 4257574441 .SDATA "BWWDAMNAT10" 4D4E415431 30 000002E3 00 .DATA.B H'00 000002E4 L2030: 000002E4 4257574D49 .SDATA "BWWMISSAT10" 5353415431 30 000002EF 00 .DATA.B H'00 000002F0 L2031: 000002F0 4257575241 .SDATA "BWWRADHAT10" 4448415431 30 000002FB 00 .DATA.B H'00 000002FC L2032: 000002FC 4257575241 .SDATA "BWWRAZRAT10" 5A52415431 30 00000307 00 .DATA.B H'00 00000308 L2033: 00000308 4257575448 .SDATA "BWWTHREAT10" 5245415431 30 00000313 00 .DATA.B H'00 00000314 L2034: 00000314 4257575449 .SDATA "BWWTIDAAT10" 4441415431 30 0000031F 00 .DATA.B H'00 00000320 L2035: 00000320 4257574449 .SDATA "BWWDIREAT10" 5245415431 30 0000032B 00 .DATA.B H'00 0000032C L2036: 0000032C 4757574A4F .SDATA "GWWJOINATH0" 494E415448 30 00000337 00 .DATA.B H'00 00000338 L2037: 00000338 4832575057 .SDATA "H2WPWELTRH0" 454C545248 30 00000343 00 .DATA.B H'00 00000344 L2038: 00000344 4857544849 .SDATA "HWTHISCTRH0" 5343545248 30 0000034F 00 .DATA.B H'00 00000350 L2039: 00000350 4831574152 .SDATA "H1WARCTTRH0" 4354545248 30 0000035B 00 .DATA.B H'00 0000035C L2040: 0000035C 483357414D .SDATA "H3WAMAZTRH0" 415A545248 30 00000367 00 .DATA.B H'00 00000368 L2185: 00000368 4757574449 .SDATA "GWWDIRETXH0" 5245545848 30 00000373 00 .DATA.B H'00 00000374 L2186: 00000374 4757575049 .SDATA "GWWPILOONH0" 4C4F4F4E48 30 0000037F 00 .DATA.B H'00 00000380 L2187: 00000380 4757574C4F .SDATA "GWWLOW_ONH0" 575F4F4E48 30 0000038B 00 .DATA.B H'00 0000038C L2188: 0000038C 4757574849 .SDATA "GWWHIGHONH0" 47484F4E48 30 00000397 00 .DATA.B H'00 D 00000000 L2050: ; static: _bReleaseWo + rldObs 00000000 00000000 .DATA.L H'00000000 00000004 L2184: ; static: _aLoadTable 00000004 <00000000> .DATA.L L2178,L2185,L2179,L2186, <00000000> + H'00000004+L2179,L2187, <00000000> + H'00000008+L2179,L2188 <00000000> <00000004> <00000000> <00000008> <00000000> 00000024 0000000000 .DATA.L H'00000000,H'00000000 000000 B 00000000 L2041: ; static: _StageNum 00000000 00000004 .RES.L 1 00000004 L2042: ; static: _nR 00000004 00000004 .RES.L 1 00000008 L2043: ; static: _nG 00000008 00000004 .RES.L 1 0000000C L2044: ; static: _nB 0000000C 00000004 .RES.L 1 00000010 L2045: ; static: _bActive 00000010 00000004 .RES.L 1 00000014 L2046: ; static: _bLoadOk 00000014 00000004 .RES.L 1 00000018 L2047: ; static: _pJoinNetGa + me 00000018 00000004 .RES.L 1 0000001C L2048: ; static: _pCurStatic + Screen 0000001C 00000004 .RES.L 1 00000020 L2049: ; static: CurWorld 00000020 00000004 .RES.L 1 00000024 L2051: ; static: _HumanContr + ols 00000024 0000001C .RES.L 7 00000040 L2052: ; static: _nFrameCoun + t 00000040 00000004 .RES.L 1 00000044 L2138: ; static: _CamPos 00000044 0000000C .RES.L 3 00000050 L2139: ; static: _CamLook 00000050 0000000C .RES.L 3 0000005C L2140: ; static: _BSCamPos 0000005C 0000000C .RES.L 3 00000068 L2141: ; static: _Camera 00000068 000000A0 .RES.L 40 00000108 L2142: ; static: _nCurrentCa + mPlayer 00000108 00000004 .RES.L 1 0000010C L2143: ; static: _nCurrentCa + mType 0000010C 00000004 .RES.L 1 00000110 L2144: ; static: _nCamHeadin + g 00000110 00000004 .RES.L 1 00000114 L2145: ; static: _n2ndCamPla + yer 00000114 00000004 .RES.L 1 00000118 L2178: ; static: _pViewText 00000118 00000004 .RES.L 1 0000011C L2179: ; static: _paActiveVi + ew 0000011C 0000000C .RES.L 3 00000128 L2180: ; static: _bOverLayOk 00000128 00000004 .RES.L 1 0000012C L2181: ; static: _nViewWords 0000012C 00000004 .RES.L 1 00000130 L2182: ; static: _nCounter 00000130 00000004 .RES.L 1 00000134 L2183: ; static: _bFlashOn 00000134 00000004 .RES.L 1 SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:23:10 PAGE 1 ******** STATISTICS INFORMATION ******** ********** ERROR INFORMATION *********** NUMBER OF ERRORS: 0 NUMBER OF WARNINGS: 0 ******* SOURCE LINE INFORMATION ******** COMPILED SOURCE LINE: 1501 ******* SECTION SIZE INFORMATION ******* PROGRAM SECTION (P): 00001E38 Byte(s) CONSTANT SECTION (C): 00000398 Byte(s) DATA SECTION (D): 0000002C Byte(s) BSS SECTION (B): 00000138 Byte(s) TOTAL PROGRAM SIZE: 00002334 Byte(s) ********** LABEL INFORMATION *********** NUMBER OF EXTERNAL REFERENCE SYMBOLS: 112 NUMBER OF EXTERNAL DEFINITION SYMBOLS: 12 NUMBER OF INTERNAL/EXTERNAL SYMBOLS: 404 *** COMMAND PARAMETER *** wpr_attract.c -ob=.\obj\wpr_attract.obj -cpu=sh4 -division=cpu -endian=little -fpu=single -pic=0 -macsave=0 -string=const -sub=hydro.sub -optimize=1 -speed -d ebug -listfile=.\obj\wpr_attract.lst
xfm.h
Found at 1xAA36C10:
maximum tra 9�$��� +nsform stack depth ([0] is always current camera) */ 9�%��� xfm.h 37 9�&��� xfm.h 38 #define CAMMODE_LOOK 0 /* camera look mode */ 9�'��� xfm.h 39 #define CAMMODE_ROT 1 /* camera rota 9�'��� +tion mode */ 9�(��� xfm.h 40 9�)��� xfm.h 41 #define XFM_TYPE_GEN 0 /* general transformat 9�)��� +ion (xlat/rot/scale or combos) */ 9�*��� xfm.h 42 #define XFM_TYPE_T 1 /* translation 9�*��� + (no scale) */ 9�+��� xfm.h 43 #define XFM_TYPE_R 2 /* rotation or 9�+��� + rotation/scale */ 9�,��� xfm.h 44 #define XFM_TYPE_S 3 /* scale only 9�,��� +*/ 9�-��� xfm.h 45 9�.��� xfm.h 46 9�/��� xfm.h 47 typedef struct { /* Composite Matrix De 9�/��� +finition: */ 9�0��� xfm.h 48 float mf[4][3]; /* forward transforma 9�0��� +tion: [col][row] */ 9�1��� xfm.h 49 float mr[4][3]; /* reverse transforma 9�1��� +tion: [col][row] */ 9�2��� xfm.h 50 float sf, sr; /* forward and revers 9�2��� +e scales */ 9�3��� xfm.h 51 int type; /* type code 9�3��� +(see XFM_TYPE_* for info) */ 9�4��� xfm.h 52 } Xfm_t; 9�5��� xfm.h 53 9�6��� xfm.h 54 typedef struct { 9�7��� xfm.h 55 Xfm_t xfm; /* camera transformation */ 9�8��� xfm.h 56 Vec3_t pos; /* current camera position */ 9�9��� xfm.h 57 Vec3_t look;/* valid for CAMMODE_LOOK mode onl 9�9��� +y: point camera is looking at */ 9�:��� xfm.h 58 Vec3_t up; /* valid for CAMMODE_LOOK mode 9�:��� + only: points up (used for roll). Must be unit! */ 9�;��� xfm.h 59 int rot[3]; /* valid for CAMMODE_ROT mode 9�;��� +only: yaw/pitch/roll (ry/rx/rz) of camera */ 9�<��� xfm.h 60 int mode; /* current camera mode (CAMMOD 9�<��� +E_LOOK or CAMMODE_ROT) */ 9�=��� xfm.h 61 } Cam_t; 9�>��� xfm.h 62 9�?��� xfm.h 63 9�@��� xfm.h 64 9�A��� xfm.h 65 #if defined(__cplusplus) 9�B��� xfm.h 66 X extern "C" { 9�C��� xfm.h 67 #endif 9�D��� xfm.h 68 9�E��� xfm.h 69 E extern Xfm_t Xfm_aStack[ 32 ]; /* transformation stac 9�E��� +k */ 9�F��� xfm.h 70 extern Xfm_t *Xfm_pStackTop; /* points to the xfm o 9�F��� +n the top of the stack */ 9�G��� xfm.h 71 extern int Xfm_nStackElements; /* number of xfms curr 9�G��� +ently on the stack */ 9�H��� xfm.h 72 extern Cam_t *Xfm_pStackCam; /* points to the camer 9�H��� +a last used to initialize stack */ 9�I��� xfm.h 73 extern u32 Xfm_nCameraKey; /* increments 9�I��� +each time the stack is initialized */ 9�J��� xfm.h 74 extern u32 Xfm_nStackKey; /* increments 9�J��� +each time the stack top changes */ 9�K��� xfm.h 75 extern float Xfm_mIdentity[4][3]; 9�L��� xfm.h 76 9�M��� xfm.h 77 E extern int xfm_ModuleInit( void ); 9�N��� xfm.h 78 extern void xfm_Reset( void ); 9�O��� xfm.h 79 extern Xfm_t *xfm_Zero( Xfm_t *xr ); 9�)
waterfall.h
Found at 1xABA4378:
E����� waterfall. 27 E����� waterfall. 28 E����� waterfall. 29 #define WATERFALL_CALIBRATION_TOOL_ENABLED 0 E����� waterfall. 30 E����� waterfall. 31 #define WATERFALL_TEXTURE_COUNT 4 E� ��� waterfall. 32 #define WATERFALL_TEXINDEX_MAIN 0 E�!��� waterfall. 33 #define WATERFALL_TEXINDEX_LEFT 1 E�"��� waterfall. 34 #define WATERFALL_TEXINDEX_RIGHT 2 E�#��� waterfall. 35 #define WATERFALL_TEXINDEX_MIST 3 E�$��� waterfall. 36 E�%��� waterfall. 37 typedef u32 WaterfallHandle_t; E�&��� waterfall. 38 E�'��� waterfall. 39 typedef enum { E�(��� waterfall. 40 WATERFALL_FLAG_DONT_DRAW = 0x00000001, E�(��� + /* Don't draw this waterfall */ E�)��� waterfall. 41 WATERFALL_FLAG_NO_MIST = 0x00000002, E�)��� + /* Don't draw mist with this waterfall */ E�*��� waterfall. 42 WATERFALL_FLAG_FLAIR_EDGES = 0x00000004, E�*��� + /* Flair the edges outward */ E�+��� waterfall. 43 WATERFALL_FLAG_NO_SOUND = 0x00000008, E�+��� + /* No sound for this waterfall */ E�,��� waterfall. 44 WATERFALL_FLAG_SELECTED = 0x00000010, E�,��� + /* This waterfall is selected (used for tools) */ E�-��� waterfall. 45 E�.��� waterfall. 46 WATERFALL_FLAG_NONE = 0 E�/��� waterfall. 47 } WaterfallFlags_t; E�0��� waterfall. 48 E�1��� waterfall. 49 E�2��� waterfall. 50 #if defined(__cplusplus) E�3��� waterfall. 51 X extern "C" { E�4��� waterfall. 52 #endif E�5��� waterfall. 53 E�6��� waterfall. 54 E #if 0 E�7��� waterfall. 55 X extern float _WHITESAT_PERCENT_TO_END; E�8��� waterfall. 56 X extern float _WHITESAT_MULTIPLIER; E�9��� waterfall. 57 X E�:��� waterfall. 58 X extern float _TEX_T_SCROLL_DELTA1; E�;��� waterfall. 59 X extern float _TEX_T_SCROLL_DELTA2; E�<��� waterfall. 60 X extern float _TEX_T_TILE_DELTA1; E�=��� waterfall. 61 X extern float _TEX_T_TILE_DELTA2; E�>��� waterfall. 62 X extern float _TEX_S_RIGHTEDGE_DELTA; E�?��� waterfall. 63 #endif E�@��� waterfall. 64 E�A��� waterfall. 65 E�B��� waterfall. 66 E extern int waterfall_ModuleInit( void ); E�C��� waterfall. 67 extern float waterfall_GetWhiteSat( void ); E�D��� waterfall. 68 extern void waterfall_SetWhiteSat( float fWhiteSat ); E�E��� waterfall. 69 extern WaterfallHandle_t waterfall_InitInstance( const E�E��� + Vec3_t *pOrigin, float fWidth, float fHeight, E�F��� waterfall. 70
wpr_banker.c
Found at 1xAF2E130:
SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:23:19 PAGE 1 ************ OBJECT LISTING ************ FILE NAME: wpr_banker.c SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT wpr_banker 1 /***************************************************** +******************************** */ wpr_banker 2 /* wpr_banker.h - "handles coin related issues, also d +raws "insert coins" or */ wpr_banker 3 /* "free play" whenever + requested, if required are is loaded + */ wpr_banker 4 /* */ wpr_banker 5 /* Author: Michael Starich */ wpr_banker 6 /***************************************************** +******************************** */ wpr_banker 7 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN +TERTAINMENT. */ wpr_banker 8 /* Copyright (c) 1998 */ wpr_banker 9 /* */ wpr_banker 10 /* The contents of this file may not be disclosed to t +hird */ wpr_banker 11 /* parties, copied or duplicated in any form, in whole + or in part, */ wpr_banker 12 /* without the prior written permission of Midway Home + Entertainment. */ wpr_banker 13 /***************************************************** +******************************** */ wpr_banker 14 /* Modification History: */ wpr_banker 15 /* */ wpr_banker 16 /* Date Who Description */ wpr_banker 17 /* -------- ---------- ------------------------------ +-------------------------------- */ wpr_banker 18 /* 04/10/98 Starich Created. */ wpr_banker 19 /***************************************************** +******************************** */ wpr_banker 20 #include "gendefs.h" wpr_banker 21 #include "wpr_banker.h" wpr_banker 22 #include "text.h" wpr_banker 23 #include "controls.h" wpr_banker 24 #include "gameloop.h" wpr_banker 25 #include "operator.h" wpr_banker 26 wpr_banker 27 /*==================== */ wpr_banker 28 /* private definitions */ wpr_banker 29 wpr_banker 30 #define _FLASH_TIME 0.50f wpr_banker 31 wpr_banker 32 /*================= */ wpr_banker 33 /* public variables */ wpr_banker 34 wpr_banker 35 /*================== */ wpr_banker 36 /* private variables */ wpr_banker 37 wpr_banker 38 /*=================== */ wpr_banker 39 /* private prototypes */ wpr_banker 40 wpr_banker 41 E static int _bDraw; wpr_banker 42 static f32 _fTimer; wpr_banker 43 static u32 _nBalance; wpr_banker 44 static u32 _nCost; wpr_banker 45 wpr_banker 46 /*================= */ wpr_banker 47 /* public functions */ wpr_banker 48 wpr_banker 49 /* resets all global vars */ wpr_banker 50 E int wpr_banker_ModuleInit( void ) { P 00000000 _wpr_banker_ModuleInit: ; function: wpr_banke + r_ModuleInit ; frame size=0 wpr_banker 51 E _bDraw = 0; 00000000 D343 MOV.L L1321+2,R3 ; L1277 00000002 E400 MOV #0,R4 00000004 2342 MOV.L R4,@R3 wpr_banker 52 _fTimer = 0.0f; 00000006 D243 MOV.L L1321+6,R2 ; L1278 00000008 F38D FLDI0 FR3 0000000A F23A FMOV.S FR3,@R2 wpr_banker 53 _nBalance = 0; 0000000C D142 MOV.L L1321+10,R1; L1279 0000000E 2142 MOV.L R4,@R1 wpr_banker 54 _nCost = OperatorSettings.nRequiredCoins; 00000010 D042 MOV.L L1321+14, + R0; H'00000010+_Operator + Settings 00000012 D243 MOV.L L1321+18,R2; L1280 00000014 6302 MOV.L @R0,R3 00000016 2232 MOV.L R3,@R2 wpr_banker 55 wpr_banker 56 E return 1; wpr_banker 57 } 00000018 000B RTS 0000001A E001 MOV #1,R0 wpr_banker 58 wpr_banker 59 /* returns TRUE if the user has enough balance */ wpr_banker 60 /* to cover the cost of a race */ wpr_banker 61 /* returns FALSE otherwise */ wpr_banker 62 E int wpr_banker_BuyAGame( void ) { 0000001C _wpr_banker_BuyAGame: ; function: wpr_banke + r_BuyAGame ; frame size=8 wpr_banker 63 u32 nTemp; wpr_banker 64 wpr_banker 65 /* move our timer forward */ wpr_banker 66 _fTimer += Gameloop_fTargetFrameTime; wpr_banker 67 E if( _fTimer >= 0.50f ) { 0000001C C742 MOVA L1321+26,R0 0000001E 2FE6 MOV.L R14,@-R15 00000020 D43C MOV.L L1321+6,R4 ; L1278 00000022 D340 MOV.L L1321+22, + R3; _Gameloop_fTargetFra + meTime 00000024 F248 FMOV.S @R4,FR2 00000026 F338 FMOV.S @R3,FR3 00000028 4F22 STS.L PR,@-R15 0000002A F230 FADD FR3,FR2 0000002C F42A FMOV.S FR2,@R4 0000002E F408 FMOV.S @R0,FR4 00000030 F32C FMOV.S FR2,FR3 00000032 F435 FCMP/GT FR3,FR4 00000034 890D BT L1308 wpr_banker 68 /* since we timed out switch our draw +state and reset our timer */ wpr_banker 69 _bDraw = !_bDraw; 00000036 D536 MOV.L L1321+2,R5 ; L1277 00000038 6052 MOV.L @R5,R0 0000003A 2008 TST R0,R0 0000003C 0029 MOVT R0 0000003E 2502 MOV.L R0,@R5 wpr_banker 70 E while( _fTimer >= 0.50f ) { 00000040 F348 FMOV.S @R4,FR3 00000042 F435 FCMP/GT FR3,FR4 00000044 8905 BT L1308 00000046 L1311: wpr_banker 71 E _fTimer -= 0.50f; 00000046 F348 FMOV.S @R4,FR3 00000048 F341 FSUB FR4,FR3 0000004A F23C FMOV.S FR3,FR2 0000004C F425 FCMP/GT FR2,FR4 0000004E 8FFA BF/S L1311 00000050 F43A FMOV.S FR3,@R4 00000052 L1308: wpr_banker 72 } wpr_banker 73 } wpr_banker 74 /* check the amount coins deposited */ wpr_banker 75 _nBalance += controls_CheckNumCoins(); 00000052 D236 MOV.L L1321+30, + R2; _controls_CheckNumCo + ins 00000054 DE30 MOV.L L1321+10,R14; L1279 00000056 420B JSR @R2 00000058 0009 NOP 0000005A 63E2 MOV.L @R14,R3 0000005C 330C ADD R0,R3 0000005E 2E32 MOV.L R3,@R14 wpr_banker 76 E nTemp = controls_Click( 0x2 ); 00000060 D233 MOV.L L1321+34,R2; _controls_Click 00000062 420B JSR @R2 00000064 E402 MOV #2,R4 00000066 D32E MOV.L L1321+18,R3; L1280 00000068 62E2 MOV.L @R14,R2 0000006A 6432 MOV.L @R3,R4 0000006C 3242 CMP/HS R4,R2 0000006E 8F0A BF/S L1312 00000070 6503 MOV R0,R5 wpr_banker 77 if( _nBalance >= _nCost ) { wpr_banker 78 /* now we should check for the throttl +e button being pressed */ wpr_banker 79 E if( nTemp & 0x2 ) { 00000072 E002 MOV #2,R0 00000074 2508 TST R0,R5 00000076 8906 BT L1312 wpr_banker 80 _nBalance -= _nCost; 00000078 61E2 MOV.L @R14,R1 wpr_banker 81 E return 1; 0000007A E001 MOV #1,R0 0000007C 4F26 LDS.L @R15+,PR 0000007E 3148 SUB R4,R1 00000080 2E12 MOV.L R1,@R14 00000082 000B RTS 00000084 6EF6 MOV.L @R15+,R14 00000086 L1312: wpr_banker 82 } wpr_banker 83 } wpr_banker 84 wpr_banker 85 E return 0; 00000086 E000 MOV #0,R0 wpr_banker 86 } 00000088 L1314: 00000088 4F26 LDS.L @R15+,PR 0000008A 000B RTS 0000008C 6EF6 MOV.L @R15+,R14 wpr_banker 87 wpr_banker 88 void wpr_banker_ResetFlashTime( void ) { 0000008E _wpr_banker_ResetFlashTime: ; function: wpr_banke + r_ResetFlashTime ; frame size=0 wpr_banker 89 E _bDraw = 0; 0000008E D220 MOV.L L1321+2,R2 ; L1277 00000090 E300 MOV #0,R3 00000092 2232 MOV.L R3,@R2 wpr_banker 90 _fTimer = 0.0f; 00000094 D11F MOV.L L1321+6,R1 ; L1278 00000096 F38D FLDI0 FR3 wpr_banker 91 } 00000098 000B RTS 0000009A F13A FMOV.S FR3,@R1 wpr_banker 92 wpr_banker 93 /* draw text related to coins/free play */ wpr_banker 94 void wpr_banker_Draw( void ) { 0000009C _wpr_banker_Draw: ; function: wpr_banke + r_Draw ; frame size=24 0000009C 2FE6 MOV.L R14,@-R15 0000009E FFFB FMOV.S FR15,@-R15 000000A0 4F22 STS.L PR,@-R15 wpr_banker 95 /* select our font */ wpr_banker 96 text_SetFont( TEXT_FONT_SMALL ); 000000A2 D324 MOV.L L1321+38,R3; _text_SetFont 000000A4 430B JSR @R3 000000A6 E401 MOV #1,R4 wpr_banker 97 wpr_banker 98 /* flash the instruction text */ wpr_banker 99 if( _bDraw ) { 000000A8 D219 MOV.L L1321+2,R2 ; L1277 000000AA C724 MOVA L1321+46,R0 000000AC DE22 MOV.L L1321+42,R14; _text_PrintStr 000000AE 6322 MOV.L @R2,R3 000000B0 2338 TST R3,R3 000000B2 8D11 BT/S L1315 000000B4 FF08 FMOV.S @R0,FR15 wpr_banker 100 /* see if we should draw "insert coins +" or "press throttle" */ wpr_banker 101 if( _nBalance < _nCost ) { 000000B6 D11A MOV.L L1321+18,R1; L1280 000000B8 D017 MOV.L L1321+10,R0; L1279 000000BA 6312 MOV.L @R1,R3 000000BC 6102 MOV.L @R0,R1 000000BE 3132 CMP/HS R3,R1 000000C0 8904 BT L1316 wpr_banker 102 text_PrintStr( 185, 375, "Inse +rt Coins\n" ); 000000C2 D41F MOV.L L1321+50,R4; L1292 000000C4 C71F MOVA L1321+54,R0 000000C6 F5FC FMOV.S FR15,FR5 000000C8 A004 BRA L1320 000000CA F408 FMOV.S @R0,FR4 000000CC L1316: wpr_banker 103 } else { wpr_banker 104 text_PrintStr( 175, 375, "Pres +s Throttle\n" ); 000000CC C71F MOVA L1321+62,R0 000000CE D41E MOV.L L1321+58,R4; L1294 000000D0 F408 FMOV.S @R0,FR4 000000D2 F5FC FMOV.S FR15,FR5 000000D4 L1320: 000000D4 4E0B JSR @R14 000000D6 0009 NOP 000000D8 L1315: 000000D8 D311 MOV.L L1321+18,R3; L1280 000000DA E200 MOV #0,R2 000000DC 6532 MOV.L @R3,R5 000000DE 3526 CMP/HI R2,R5 000000E0 8B0C BF L1318 wpr_banker 105 } wpr_banker 106 } wpr_banker 107 /* see if we should draw "free play" or "num c +oins/cost" */ wpr_banker 108 if( _nCost > 0 ) { wpr_banker 109 text_PrintF( 460, 375, "%d/%d\n", _nBa +lance, _nCost ); 000000E2 2F56 MOV.L R5,@-R15 000000E4 D10C MOV.L L1321+10,R1; L1279 000000E6 6012 MOV.L @R1,R0 000000E8 2F06 MOV.L R0,@-R15 000000EA C71A MOVA L1321+70,R0 000000EC D318 MOV.L L1321+66,R3; L1296 000000EE 2F36 MOV.L R3,@-R15 000000F0 D219 MOV.L L1321+74,R2; _text_PrintF 000000F2 F5FC FMOV.S FR15,FR5 000000F4 420B JSR @R2 000000F6 F408 FMOV.S @R0,FR4 000000F8 A005 BRA L1319 000000FA 7F0C ADD #12,R15 000000FC L1318: wpr_banker 110 } else { wpr_banker 111 text_PrintStr( 400, 375, "Free Play\n" + ); 000000FC D417 MOV.L L1321+78,R4; L1298 000000FE C718 MOVA L1321+82,R0 00000100 F5FC FMOV.S FR15,FR5 00000102 4E0B JSR @R14 00000104 F408 FMOV.S @R0,FR4 00000106 L1319: wpr_banker 112 } wpr_banker 113 } 00000106 4F26 LDS.L @R15+,PR 00000108 FFF9 FMOV.S @R15+,FR15 0000010A 000B RTS 0000010C 6EF6 MOV.L @R15+,R14 0000010E L1321: 0000010E 00000002 .RES.W 1 00000110 <00000000> .DATA.L L1277 00000114 <00000000> .DATA.L L1278 00000118 <00000000> .DATA.L L1279 0000011C <00000010> .DATA.L H'00000010+_OperatorSettings 00000120 <00000000> .DATA.L L1280 00000124 <00000000> .DATA.L _Gameloop_fTargetFrameTime 00000128 3F000000 .DATA.L H'3F000000 0000012C <00000000> .DATA.L _controls_CheckNumCoins 00000130 <00000000> .DATA.L _controls_Click 00000134 <00000000> .DATA.L _text_SetFont 00000138 <00000000> .DATA.L _text_PrintStr 0000013C 43BB8000 .DATA.L H'43BB8000 00000140 <00000000> .DATA.L L1292 00000144 43390000 .DATA.L H'43390000 00000148 <00000000> .DATA.L L1294 0000014C 432F0000 .DATA.L H'432F0000 00000150 <00000000> .DATA.L L1296 00000154 43E60000 .DATA.L H'43E60000 00000158 <00000000> .DATA.L _text_PrintF 0000015C <00000000> .DATA.L L1298 00000160 43C80000 .DATA.L H'43C80000 wpr_banker 114 wpr_banker 115 /*================== */ wpr_banker 116 /* private functions */ C 00000000 L1292: 00000000 496E736572 .SDATA "Insert Coins" 7420436F69 6E73 0000000C 0A00 .DATA.B H'0A,H'00 0000000E 00000002 .RES.W 1 00000010 L1294: 00000010 5072657373 .SDATA "Press Throttle" 205468726F 74746C65 0000001E 0A00 .DATA.B H'0A,H'00 00000020 L1296: 00000020 25642F2564 .SDATA "%d/%d" 00000025 0A00 .DATA.B H'0A,H'00 00000027 00000001 .RES.B 1 00000028 L1298: 00000028 4672656520 .SDATA "Free Play" 506C6179 00000031 0A00 .DATA.B H'0A,H'00 B 00000000 L1277: ; static: _bDraw 00000000 00000004 .RES.L 1 00000004 L1278: ; static: _fTimer 00000004 00000004 .RES.L 1 00000008 L1279: ; static: _nBalance 00000008 00000004 .RES.L 1 0000000C L1280: ; static: _nCost 0000000C 00000004 .RES.L 1 SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:23:19 PAGE 1 ******** STATISTICS INFORMATION ******** ********** ERROR INFORMATION *********** NUMBER OF ERRORS: 0 NUMBER OF WARNINGS: 0 ******* SOURCE LINE INFORMATION ******** COMPILED SOURCE LINE: 116 ******* SECTION SIZE INFORMATION ******* PROGRAM SECTION (P): 00000164 Byte(s) CONSTANT SECTION (C): 00000033 Byte(s) DATA SECTION (D): 00000000 Byte(s) BSS SECTION (B): 00000010 Byte(s) TOTAL PROGRAM SIZE: 000001A7 Byte(s) ********** LABEL INFORMATION *********** NUMBER OF EXTERNAL REFERENCE SYMBOLS: 7 NUMBER OF EXTERNAL DEFINITION SYMBOLS: 4 NUMBER OF INTERNAL/EXTERNAL SYMBOLS: 29 *** COMMAND PARAMETER *** wpr_banker.c -ob=.\obj\wpr_banker.obj -cpu=sh4 -division=cpu -endian=little -f pu=single -pic=0 -macsave=0 -string=const -sub=hydro.sub -optimize=1 -speed -deb ug -listfile=.\obj\wpr_banker.lst
hud_text.c
Found at 1xAF830F0:
SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:16:49 PAGE 1 ************ OBJECT LISTING ************ FILE NAME: hud_text.c SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT hud_text.c 1 /***************************************************** +******************************** */ hud_text.c 2 /* hud_text.c - */ hud_text.c 3 /* */ hud_text.c 4 /* Author: Michael Starich */ hud_text.c 5 /***************************************************** +******************************** */ hud_text.c 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN +TERTAINMENT. */ hud_text.c 7 /* Copyright (c) 1998 */ hud_text.c 8 /* */ hud_text.c 9 /* The contents of this file may not be disclosed to t +hird */ hud_text.c 10 /* parties, copied or duplicated in any form, in whole + or in part, */ hud_text.c 11 /* without the prior written permission of Midway Home + Entertainment. */ hud_text.c 12 /***************************************************** +******************************** */ hud_text.c 13 /* Modification History: */ hud_text.c 14 /* */ hud_text.c 15 /* Date Who Description */ hud_text.c 16 /* -------- ---------- ------------------------------ +-------------------------------- */ hud_text.c 17 /* 07/09/98 Starich Created. */ hud_text.c 18 /***************************************************** +******************************** */ hud_text.c 19 #include "gendefs.h" hud_text.c 20 #include "hud_text.h" hud_text.c 21 #include "text.h" hud_text.c 22 #include "player.h" hud_text.c 23 #include "glcount.h" hud_text.c 24 #include "viewport.h" hud_text.c 25 #include "obsys.h" hud_text.c 26 #include "mesh3d.h" hud_text.c 27 #include "hud_wrongway.h" hud_text.c 28 hud_text.c 29 /*==================== */ hud_text.c 30 /* private definitions */ hud_text.c 31 hud_text.c 32 #define _Z_DEPTH 1.0f hud_text.c 33 #define _MESHES_COLON 10 hud_text.c 34 #define _MESHES_PERIOD 11 hud_text.c 35 hud_text.c 36 #define _NUM_FRAMES_TIME_EXTENDED 30 hud_text.c 37 #define _NUM_FRAMES_BOOSTER 30 hud_text.c 38 hud_text.c 39 /* checkpt/split time defs */ hud_text.c 40 #define _CHECKPT_TARGET_X 445.0f hud_text.c 41 #define _CHECKPT_STARTING_X 570.0f hud_text.c 42 #define _CHECKPT_LINE1_Y 175.0f hud_text.c 43 #define _CHECKPT_LINE2_Y ( -195.0f + 20 +0.0f ) hud_text.c 44 #define _CHECKPT_LINE3_Y 215.0f hud_text.c 45 #define _CHECKPT_LINE4_Y ( -235.0f + 20 +0.0f ) hud_text.c 46 #define _CHECKPT_SLIDEIN( x ) ( ( _CHECKPT_TARGET_X +- (x) ) * 0.30f ) hud_text.c 47 #define _CHECKPT_SLIDEOUT( x ) ( ( _CHECKPT_STARTING_ +X - (x) ) * 0.30f ) hud_text.c 48 hud_text.c 49 /* push throttle vars */ hud_text.c 50 #define _INITIAL_PUSH_WAIT 2.0f hud_text.c 51 #define _DISPLAY_PUSH_TIME 4.0f hud_text.c 52 #define _REG_SAMPLE_TIME 6.0f hud_text.c 53 hud_text.c 54 /* coordinates for drawing, origin upper left corner * +/ hud_text.c 55 #define _321GO_Y 140.0f hud_text.c 56 hud_text.c 57 #define _RANK1D1_X 414.0f hud_text.c 58 #define _RANK1D2_X 405.0f hud_text.c 59 #define _RANK1_Y 140.0f hud_text.c 60 #define _RANK2_X 445.0f hud_text.c 61 #define _RANK2_Y 145.0f hud_text.c 62 #define _RANK3_X 478.0f hud_text.c 63 #define _RANK3_Y 143.0f hud_text.c 64 hud_text.c 65 #define _COUNTDOWN_Y 25.0f hud_text.c 66 hud_text.c 67 #define _TIME_OUT1_Y 120.0f hud_text.c 68 #define _TIME_OUT2_Y 165.0f hud_text.c 69 hud_text.c 70 #define _WINNER_Y 100.0f hud_text.c 71 hud_text.c 72 #define _ELAPSED_X -150.0f hud_text.c 73 #define _ELAPSED_Y 182.0f hud_text.c 74 hud_text.c 75 #define _TIME_EXTENDED1_Y 120.0f hud_text.c 76 #define _TIME_EXTENDED2_Y 165.0f hud_text.c 77 hud_text.c 78 #define _BOOSTER_Y 355.0f hud_text.c 79 hud_text.c 80 #define _FINISH_STATS1_Y 195.0f hud_text.c 81 #define _FINISH_STATS2_X 315.0f hud_text.c 82 #define _FINISH_STATS2_X2D 330.0f hud_text.c 83 #define _FINISH_STATS2_Y 167.0f hud_text.c 84 #define _FINISH_STATS3_Y 265.0f hud_text.c 85 #define _FINISH_STATS4_Y 325.0f hud_text.c 86 hud_text.c 87 #define _FINISH_STATS5_X -70.0f hud_text.c 88 #define _FINISH_STATS5_Y -95.0f hud_text.c 89 #define _FINISH_STATS5_X2 315.0f hud_text.c 90 #define _FINISH_STATS5_Y2 297.0f hud_text.c 91 hud_text.c 92 #define _FINISH_STATS6_X -40.0f hud_text.c 93 #define _FINISH_STATS6_Y -155.0f hud_text.c 94 hud_text.c 95 #define _PUSH_THROTTLE1_Y 130.0f hud_text.c 96 #define _PUSH_THROTTLE2_Y 175.0f hud_text.c 97 #define _PUSH_THROTTLE3_Y 220.0f hud_text.c 98 hud_text.c 99 /*================= */ hud_text.c 100 /* public variables */ hud_text.c 101 hud_text.c 102 /*================== */ hud_text.c 103 /* private variables */ hud_text.c 104 hud_text.c 105 E static int _bForceOn; hud_text.c 106 E static int _bTexturesLoaded; hud_text.c 107 static u32 _nDrawFlags; hud_text.c 108 static u16 _nTimeExtendedCounter; hud_text.c 109 static u16 _nBoosterCounter; hud_text.c 110 static Mesh3d_t *_paDigits[12]; hud_text.c 111 static ObsysLoadDef_t _aLoadTable[] = { hud_text.c 112 (void *)&_paDigits[0], "GHWTIME__H0", /* NUM +_0, */ hud_text.c 113 (void *)&_paDigits[1], "GHWTIME__H1", /* NUM +_1, */ hud_text.c 114 (void *)&_paDigits[2], "GHWTIME__H2", /* NUM +_2, */ hud_text.c 115 (void *)&_paDigits[3], "GHWTIME__H3", /* NUM +_3, */ hud_text.c 116 (void *)&_paDigits[4], "GHWTIME__H4", /* NUM +_4, */ hud_text.c 117 (void *)&_paDigits[5], "GHWTIME__H5", /* NUM +_5, */ hud_text.c 118 (void *)&_paDigits[6], "GHWTIME__H6", /* NUM +_6, */ hud_text.c 119 (void *)&_paDigits[7], "GHWTIME__H7", /* NUM +_7, */ hud_text.c 120 (void *)&_paDigits[8], "GHWTIME__H8", /* NUM +_8, */ hud_text.c 121 (void *)&_paDigits[9], "GHWTIME__H9", /* NUM +_9, */ hud_text.c 122 (void *)&_paDigits[10], "GHWCOLN__H0", /* COL +ON, */ hud_text.c 123 (void *)&_paDigits[11], "GHWPERD__H0", /* PER +IOD, */ hud_text.c 124 E 0, 0, hud_text.c 125 }; hud_text.c 126 /* checkpt/split time vars */ hud_text.c 127 static f32 _fBestX1, _fBestX2, _fYourX1, _fYourX2, _fY +ourTime, _fBestTime; hud_text.c 128 E static int _bNewHighScore, _bSlideOn; hud_text.c 129 static u32 _nCheckPtCounter; hud_text.c 130 /* finish stats vars */ hud_text.c 131 static f32 _fBestFinishTime; hud_text.c 132 static char _pszBestTimeInitials[4]; hud_text.c 133 /* push throttle vars */ hud_text.c 134 static f32 _fTimer, _fDisplayTime; hud_text.c 135 E static int _bInitialWait, _bDisplay; hud_text.c 136 hud_text.c 137 /*=================== */ hud_text.c 138 /* private prototypes */ hud_text.c 139 hud_text.c 140 E static int _Flash2On2Off( void ); hud_text.c 141 E static int _Flash3On3Off( void ); hud_text.c 142 E static int _Flash4On4Off( void ); hud_text.c 143 E static int _Flash8On8Off( void ); hud_text.c 144 static void _DrawTime( f32 fTime, f32 fX, f32 fY, f32 +fScale ); hud_text.c 145 hud_text.c 146 /*================= */ hud_text.c 147 /* public functions */ hud_text.c 148 hud_text.c 149 E int hud_text_ModuleInit( void ) { P 00000000 _hud_text_ModuleInit: ; function: hud_text_ + ModuleInit ; frame size=0 hud_text.c 150 E return 1; hud_text.c 151 } 00000000 000B RTS 00000002 E001 MOV #1,R0 hud_text.c 152 hud_text.c 153 void hud_text_Load( void ) { 00000004 _hud_text_Load: ; function: hud_text_ + Load ; frame size=8 00000004 2FE6 MOV.L R14,@-R15 00000006 4F22 STS.L PR,@-R15 hud_text.c 154 text_ResetSystem(); 00000008 D344 MOV.L L2246,R3 ; _text_ResetSystem 0000000A 430B JSR @R3 0000000C 0009 NOP hud_text.c 155 text_LoadFont( TEXT_FONT_HUD2 ); 0000000E D244 MOV.L L2246+4,R2 ; _text_LoadFont 00000010 420B JSR @R2 00000012 E404 MOV #4,R4 00000014 D343 MOV.L L2246+8,R3 ; L1782 00000016 EE00 MOV #0,R14 00000018 23E2 MOV.L R14,@R3 0000001A D243 MOV.L L2246+12,R2; L1783 0000001C 22E1 MOV.W R14,@R2 0000001E D143 MOV.L L2246+16,R1; L1784 00000020 21E1 MOV.W R14,@R1 00000022 D343 MOV.L L2246+20,R3; L1780 00000024 23E2 MOV.L R14,@R3 hud_text.c 156 hud_text.c 157 hud_text_ResetSystem(); hud_text.c 158 hud_text.c 159 E if( obsys_LoadGroup( _aLoadTable, 0 ) != -1 ) +{ 00000026 D443 MOV.L L2246+24,R4; L1786 00000028 D243 MOV.L L2246+28,R2; _obsys_LoadGroup 0000002A 420B JSR @R2 0000002C 65E3 MOV R14,R5 0000002E 88FF CMP/EQ #-1,R0 00000030 8902 BT L2085 hud_text.c 160 E _bTexturesLoaded = 0; 00000032 D242 MOV.L L2246+32,R2; L1781 00000034 A003 BRA L2086 00000036 22E2 MOV.L R14,@R2 00000038 L2085: hud_text.c 161 } else { hud_text.c 162 E _bTexturesLoaded = 1; 00000038 D340 MOV.L L2246+32,R3; L1781 0000003A E101 MOV #1,R1 0000003C 2312 MOV.L R1,@R3 0000003E L2086: hud_text.c 163 } hud_text.c 164 } 0000003E 4F26 LDS.L @R15+,PR 00000040 000B RTS 00000042 6EF6 MOV.L @R15+,R14 hud_text.c 165 hud_text.c 166 void hud_text_Draw( f32 fDx, f32 fDy, f32 fTime ) { 00000044 _hud_text_Draw: ; function: hud_text_ + Draw ; frame size=88 00000044 2FE6 MOV.L R14,@-R15 00000046 2FD6 MOV.L R13,@-R15 00000048 2FC6 MOV.L R12,@-R15 0000004A 2FB6 MOV.L R11,@-R15 0000004C 2FA6 MOV.L R10,@-R15 0000004E 2F96 MOV.L R9,@-R15 00000050 2F86 MOV.L R8,@-R15 00000052 FFFB FMOV.S FR15,@-R15 00000054 FFEB FMOV.S FR14,@-R15 00000056 FFDB FMOV.S FR13,@-R15 00000058 FFCB FMOV.S FR12,@-R15 hud_text.c 167 u32 nTemp; hud_text.c 168 f32 fX, fY, fTemp; hud_text.c 169 hud_text.c 170 if( _nDrawFlags == HUD_TEXT_FLAGS_DRAW_NOTHING + ) { 0000005A DC32 MOV.L L2246+8,R12; L1782 0000005C 4F22 STS.L PR,@-R15 0000005E 63C2 MOV.L @R12,R3 00000060 FF4C FMOV.S FR4,FR15 00000062 2338 TST R3,R3 00000064 FE5C FMOV.S FR5,FR14 00000066 7FE0 ADD #-32,R15 00000068 8F02 BF/S L2247 0000006A FD6C FMOV.S FR6,FR13 0000006C A5D8 BRA L2088 0000006E 0009 NOP 00000070 L2247: hud_text.c 171 return; hud_text.c 172 } hud_text.c 173 hud_text.c 174 /* do all hud font 1 draws */ hud_text.c 175 text_SetFont( TEXT_FONT_HUD2 ); 00000070 D333 MOV.L L2246+36,R3; _text_SetFont 00000072 430B JSR @R3 00000074 E404 MOV #4,R4 00000076 C737 MOVA L2246+56,R0 00000078 63C2 MOV.L @R12,R3 0000007A DE35 MOV.L L2246+52,R14; _text_PrintStr 0000007C E801 MOV #1,R8 0000007E F308 FMOV.S @R0,FR3 00000080 2388 TST R8,R3 00000082 DA30 MOV.L L2246+40, + R10; _Viewport_half_hres + _f 00000084 DD31 MOV.L L2246+48,R13; _Text_fScale 00000086 DB30 MOV.L L2246+44,R11; _text_SetStyle 00000088 FCEC FMOV.S FR14,FR12 0000008A 8D19 BT/S L2089 0000008C FC30 FADD FR3,FR12 hud_text.c 176 hud_text.c 177 if( _nDrawFlags & HUD_TEXT_FLAGS_DRAW_3 ) { hud_text.c 178 if( fTime < 0.85f ) { 0000008E C732 MOVA L2246+60,R0 00000090 F208 FMOV.S @R0,FR2 00000092 F2D5 FCMP/GT FR13,FR2 00000094 8B14 BF L2089 hud_text.c 179 Text_fScale = ( fTime > 0.35f +) ? ( (1.35f - fTime) * 1.5f ) : 1.5f; 00000096 C731 MOVA L2246+64,R0 00000098 F108 FMOV.S @R0,FR1 0000009A FD15 FCMP/GT FR1,FR13 0000009C 8B06 BF L2091 0000009E C730 MOVA L2246+68,R0 000000A0 F208 FMOV.S @R0,FR2 000000A2 C730 MOVA L2246+72,R0 000000A4 F108 FMOV.S @R0,FR1 000000A6 F2D1 FSUB FR13,FR2 000000A8 A002 BRA L2092 000000AA F212 FMUL FR1,FR2 000000AC L2091: 000000AC C72D MOVA L2246+72,R0 000000AE F208 FMOV.S @R0,FR2 000000B0 L2092: 000000B0 FD2A FMOV.S FR2,@R13 hud_text.c 180 text_SetStyle( FSTYLE_CENTER | + FSTYLE_PITCHED ); 000000B2 4B0B JSR @R11 000000B4 E40D MOV #13,R4 hud_text.c 181 E text_PrintStr( Viewport_half_h +res_f + fDx, 140.0f + fDy, "3\n" ); 000000B6 F4A8 FMOV.S @R10,FR4 000000B8 D42B MOV.L L2246+76,R4; L1834 000000BA F5CC FMOV.S FR12,FR5 000000BC 4E0B JSR @R14 000000BE F4F0 FADD FR15,FR4 000000C0 L2089: hud_text.c 182 } hud_text.c 183 } hud_text.c 184 hud_text.c 185 if( _nDrawFlags & HUD_TEXT_FLAGS_DRAW_2 ) { 000000C0 60C2 MOV.L @R12,R0 000000C2 C802 TST #2,R0 000000C4 8918 BT L2093 hud_text.c 186 if( fTime < 1.85f ) { 000000C6 C729 MOVA L2246+80,R0 000000C8 F308 FMOV.S @R0,FR3 000000CA F3D5 FCMP/GT FR13,FR3 000000CC 8B14 BF L2093 hud_text.c 187 Text_fScale = ( fTime > 1.35f +) ? ( (2.35f - fTime) * 1.5f ) : 1.5f; 000000CE C724 MOVA L2246+68,R0 000000D0 F208 FMOV.S @R0,FR2 000000D2 FD25 FCMP/GT FR2,FR13 000000D4 8B06 BF L2095 000000D6 C726 MOVA L2246+84,R0 000000D8 F308 FMOV.S @R0,FR3 000000DA C722 MOVA L2246+72,R0 000000DC F208 FMOV.S @R0,FR2 000000DE F3D1 FSUB FR13,FR3 000000E0 A002 BRA L2096 000000E2 F322 FMUL FR2,FR3 000000E4 L2095: 000000E4 C71F MOVA L2246+72,R0 000000E6 F308 FMOV.S @R0,FR3 000000E8 L2096: 000000E8 FD3A FMOV.S FR3,@R13 hud_text.c 188 text_SetStyle( FSTYLE_CENTER | + FSTYLE_PITCHED ); 000000EA 4B0B JSR @R11 000000EC E40D MOV #13,R4 hud_text.c 189 E text_PrintStr( Viewport_half_h +res_f + fDx, 140.0f + fDy, "2\n" ); 000000EE F4A8 FMOV.S @R10,FR4 000000F0 D420 MOV.L L2246+88,R4; L1837 000000F2 F5CC FMOV.S FR12,FR5 000000F4 4E0B JSR @R14 000000F6 F4F0 FADD FR15,FR4 000000F8 L2093: hud_text.c 190 } hud_text.c 191 } hud_text.c 192 hud_text.c 193 if( _nDrawFlags & HUD_TEXT_FLAGS_DRAW_1 ) { 000000F8 60C2 MOV.L @R12,R0 000000FA C804 TST #4,R0 000000FC 894A BT L2097 hud_text.c 194 if( fTime < 2.85f ) { 000000FE C71E MOVA L2246+92,R0 00000100 F308 FMOV.S @R0,FR3 00000102 F3D5 FCMP/GT FR13,FR3 00000104 8B46 BF L2097 hud_text.c 195 Text_fScale = ( fTime > 2.35f +) ? ( (3.35f - fTime) * 1.5f ) : 1.5f; 00000106 C71A MOVA L2246+84,R0 00000108 F208 FMOV.S @R0,FR2 0000010A FD25 FCMP/GT FR2,FR13 0000010C 8B38 BF L2099 0000010E C71B MOVA L2246+96,R0 00000110 F308 FMOV.S @R0,FR3 00000112 C714 MOVA L2246+72,R0 00000114 F208 FMOV.S @R0,FR2 00000116 F3D1 FSUB FR13,FR3 00000118 A034 BRA L2100 0000011A F322 FMUL FR2,FR3 0000011C L2246: 0000011C <00000000> .DATA.L _text_ResetSystem 00000120 <00000000> .DATA.L _text_LoadFont 00000124 <00000000> .DATA.L L1782 00000128 <00000000> .DATA.L L1783 0000012C <00000000> .DATA.L L1784 00000130 <00000000> .DATA.L L1780 00000134 <00000000> .DATA.L L1786 00000138 <00000000> .DATA.L _obsys_LoadGroup 0000013C <00000000> .DATA.L L1781 00000140 <00000000> .DATA.L _text_SetFont 00000144 <00000000> .DATA.L _Viewport_half_hres_f 00000148 <00000000> .DATA.L _text_SetStyle 0000014C <00000000> .DATA.L _Text_fScale 00000150 <00000000> .DATA.L _text_PrintStr 00000154 430C0000 .DATA.L H'430C0000 00000158 3F599999 .DATA.L H'3F599999 0000015C 3EB33333 .DATA.L H'3EB33333 00000160 3FACCCCC .DATA.L H'3FACCCCC 00000164 3FC00000 .DATA.L H'3FC00000 00000168 <00000000> .DATA.L L1834 0000016C 3FECCCCC .DATA.L H'3FECCCCC 00000170 40166666 .DATA.L H'40166666 00000174 <00000000> .DATA.L L1837 00000178 40366666 .DATA.L H'40366666 0000017C 40566666 .DATA.L H'40566666 00000180 L2099: 00000180 C740 MOVA L2248+2,R0 00000182 F308 FMOV.S @R0,FR3 00000184 L2100: 00000184 FD3A FMOV.S FR3,@R13 hud_text.c 196 text_SetStyle( FSTYLE_CENTER | + FSTYLE_PITCHED ); 00000186 4B0B JSR @R11 00000188 E40D MOV #13,R4 hud_text.c 197 E text_PrintStr( Viewport_half_h +res_f + fDx, 140.0f + fDy, "1\n" ); 0000018A F4A8 FMOV.S @R10,FR4 0000018C D43E MOV.L L2248+6,R4 ; L1840 0000018E F5CC FMOV.S FR12,FR5 00000190 4E0B JSR @R14 00000192 F4F0 FADD FR15,FR4 00000194 L2097: hud_text.c 198 } hud_text.c 199 } hud_text.c 200 hud_text.c 201 if( _nDrawFlags & HUD_TEXT_FLAGS_DRAW_GO ) { 00000194 60C2 MOV.L @R12,R0 00000196 C808 TST #8,R0 00000198 8909 BT L2101 hud_text.c 202 Text_fScale = 1.5f; 0000019A C73A MOVA L2248+2,R0 0000019C F308 FMOV.S @R0,FR3 0000019E FD3A FMOV.S FR3,@R13 hud_text.c 203 text_SetStyle( FSTYLE_CENTER | FSTYLE_ +PITCHED ); 000001A0 4B0B JSR @R11 000001A2 E40D MOV #13,R4 hud_text.c 204 E text_PrintStr( Viewport_half_hres_f + +fDx, 140.0f + fDy, "GO!\n" ); 000001A4 F4A8 FMOV.S @R10,FR4 000001A6 D439 MOV.L L2248+10,R4; L1842 000001A8 F5CC FMOV.S FR12,FR5 000001AA 4E0B JSR @R14 000001AC F4F0 FADD FR15,FR4 000001AE L2101: hud_text.c 205 } hud_text.c 206 hud_text.c 207 if( _nDrawFlags & HUD_TEXT_FLAGS_DRAW_RANK ) { 000001AE C738 MOVA L2248+14,R0 000001B0 FD08 FMOV.S @R0,FR13 000001B2 60C2 MOV.L @R12,R0 000001B4 C810 TST #16,R0 000001B6 8937 BT L2102 hud_text.c 208 text_SetStyle( FSTYLE_CENTER | FSTYLE_ +PITCHED ); 000001B8 4B0B JSR @R11 000001BA E40D MOV #13,R4 hud_text.c 209 /* draw a 1 or 2 digit place */ hud_text.c 210 E fX = ( Player_aData[Player_nHuman].nPl +ace < 10 ) ? 414.0f + fDx : 405.0f + fDx; 000001BC D135 MOV.L L2248+18,R1; _Player_nHuman 000001BE 9360 MOV.W L2248,R3 ; H'01F0 000001C0 6211 MOV.W @R1,R2 000001C2 E10A MOV #10,R1 000001C4 223F MULS R3,R2 000001C6 D234 MOV.L L2248+22,R2; _Player_aData 000001C8 031A STS MACL,R3 000001CA 633F EXTS.W R3,R3 000001CC 332C ADD R2,R3 000001CE 1F37 MOV.L R3,@(28,R15) 000001D0 5338 MOV.L @(32,R3),R3 000001D2 3312 CMP/HS R1,R3 000001D4 8D03 BT/S L2103 000001D6 F4FC FMOV.S FR15,FR4 000001D8 C730 MOVA L2248+26,R0 000001DA A002 BRA L2233 000001DC F308 FMOV.S @R0,FR3 000001DE L2103: 000001DE C730 MOVA L2248+30,R0 000001E0 F308 FMOV.S @R0,FR3 000001E2 L2233: hud_text.c 211 Text_fScale = 0.75f; 000001E2 C730 MOVA L2248+34,R0 000001E4 F430 FADD FR3,FR4 000001E6 F308 FMOV.S @R0,FR3 000001E8 FD3A FMOV.S FR3,@R13 hud_text.c 212 E text_PrintNumber( fX, 140.0f + fDy, Pl +ayer_aData[Player_nHuman].nPlace ); 000001EA 54F7 MOV.L @(28,R15),R4 000001EC D32E MOV.L L2248+38,R3; _text_PrintNumber 000001EE 5448 MOV.L @(32,R4),R4 000001F0 430B JSR @R3 000001F2 F5CC FMOV.S FR12,FR5 hud_text.c 213 /* draw "of" */ hud_text.c 214 Text_fScale = 0.35f; 000001F4 C72D MOVA L2248+42,R0 000001F6 F308 FMOV.S @R0,FR3 hud_text.c 215 E text_PrintStr( 445.0f + fDx, 145.0f + +fDy, "OF\n" ); 000001F8 C72E MOVA L2248+50,R0 000001FA FD3A FMOV.S FR3,@R13 000001FC F308 FMOV.S @R0,FR3 000001FE F5EC FMOV.S FR14,FR5 00000200 F530 FADD FR3,FR5 00000202 D42B MOV.L L2248+46,R4; L1844 00000204 F4FC FMOV.S FR15,FR4 00000206 4E0B JSR @R14 00000208 F4D0 FADD FR13,FR4 hud_text.c 216 /* draw number of players */ hud_text.c 217 Text_fScale = 0.50f; 0000020A C72B MOVA L2248+54,R0 0000020C F308 FMOV.S @R0,FR3 hud_text.c 218 E text_PrintNumber( 478.0f + fDx, 143.0f + + fDy, Player_nTotalCount ); 0000020E C72C MOVA L2248+62,R0 00000210 FD3A FMOV.S FR3,@R13 00000212 F308 FMOV.S @R0,FR3 00000214 C72B MOVA L2248+66,R0 00000216 F5EC FMOV.S FR14,FR5 00000218 F530 FADD FR3,FR5 0000021A D328 MOV.L L2248+58,R3; _Player_nTotalCount 0000021C D222 MOV.L L2248+38,R2; _text_PrintNumber 0000021E F208 FMOV.S @R0,FR2 00000220 6432 MOV.L @R3,R4 00000222 F4FC FMOV.S FR15,FR4 00000224 420B JSR @R2 00000226 F420 FADD FR2,FR4 00000228 L2102: hud_text.c 219 } hud_text.c 220 hud_text.c 221 if( _nDrawFlags & HUD_TEXT_FLAGS_DRAW_COUNTDOW +N ) { 00000228 60C2 MOV.L @R12,R0 0000022A C820 TST #32,R0 0000022C 8F02 BF/S L2249 0000022E FC9D FLDI1 FR12 00000230 A08C BRA L2105 00000232 0009 NOP 00000234 L2249: hud_text.c 222 text_SetStyle( FSTYLE_CENTER | FSTYLE_ +PITCHED ); 00000234 4B0B JSR @R11 00000236 E40D MOV #13,R4 hud_text.c 223 fX = Viewport_half_hres_f + fDx; hud_text.c 224 E fY = 25.0f + fDy; 00000238 C723 MOVA L2248+70,R0 0000023A F4A8 FMOV.S @R10,FR4 0000023C F308 FMOV.S @R0,FR3 hud_text.c 225 Text_fScale = 0.67f; 0000023E C723 MOVA L2248+74,R0 00000240 F208 FMOV.S @R0,FR2 00000242 C724 MOVA L2248+82,R0 00000244 F4F0 FADD FR15,FR4 00000246 F5EC FMOV.S FR14,FR5 00000248 FD2A FMOV.S FR2,@R13 0000024A D321 MOV.L L2248+78, + R3; _Player_fCountdownSe + cs 0000024C F238 FMOV.S @R3,FR2 0000024E FF2A FMOV.S FR2,@R15 00000250 F208 FMOV.S @R0,FR2 00000252 F1F8 FMOV.S @R15,FR1 00000254 F215 FCMP/GT FR1,FR2 00000256 8D02 BT/S L2106 00000258 F530 FADD FR3,FR5 hud_text.c 226 hud_text.c 227 if( Player_fCountdownSecs >= 99.0f ) { hud_text.c 228 text_PrintNumber( fX, fY, 99 ) +; 0000025A A04A BRA L2239 0000025C E463 MOV #99,R4 0000025E L2106: hud_text.c 229 } else if( Player_fCountdownSecs < 1.0 +f ) { 0000025E FC15 FCMP/GT FR1,FR12 00000260 8B04 BF L2108 hud_text.c 230 text_PrintStr( fX, fY, "00\n" +); 00000262 D41D MOV.L L2248+86,R4; L1848 00000264 4E0B JSR @R14 00000266 0009 NOP 00000268 A070 BRA L2105 0000026A 0009 NOP 0000026C L2108: hud_text.c 231 } else { hud_text.c 232 nTemp = (u32)Player_fCountdown +Secs; 0000026C C71B MOVA L2248+90,R0 0000026E F2F8 FMOV.S @R15,FR2 00000270 F108 FMOV.S @R0,FR1 00000272 F215 FCMP/GT FR1,FR2 00000274 8B36 BF L2110 00000276 C71A MOVA L2248+94,R0 00000278 F1F8 FMOV.S @R15,FR1 0000027A F208 FMOV.S @R0,FR2 0000027C F120 FADD FR2,FR1 0000027E A032 BRA L2111 00000280 F21C FMOV.S FR1,FR2 00000282 L2248: 00000282 01F0 .DATA.W H'01F0 00000284 3FC00000 .DATA.L H'3FC00000 00000288 <00000000> .DATA.L L1840 0000028C <00000000> .DATA.L L1842 00000290 43DE8000 .DATA.L H'43DE8000 00000294 <00000000> .DATA.L _Player_nHuman 00000298 <00000000> .DATA.L _Player_aData 0000029C 43CF0000 .DATA.L H'43CF0000 000002A0 43CA8000 .DATA.L H'43CA8000 000002A4 3F400000 .DATA.L H'3F400000 000002A8 <00000000> .DATA.L _text_PrintNumber 000002AC 3EB33333 .DATA.L H'3EB33333 000002B0 <00000000> .DATA.L L1844 000002B4 43110000 .DATA.L H'43110000 000002B8 3F000000 .DATA.L H'3F000000 000002BC <00000000> .DATA.L _Player_nTotalCount 000002C0 430F0000 .DATA.L H'430F0000 000002C4 43EF0000 .DATA.L H'43EF0000 000002C8 41C80000 .DATA.L H'41C80000 000002CC 3F2B851E .DATA.L H'3F2B851E 000002D0 <00000000> .DATA.L _Player_fCountdownSecs 000002D4 42C60000 .DATA.L H'42C60000 000002D8 <00000000> .DATA.L L1848 000002DC 4F000000 .DATA.L H'4F000000 000002E0 CF800000 .DATA.L H'CF800000 000002E4 L2110: 000002E4 F2F8 FMOV.S @R15,FR2 000002E6 L2111: 000002E6 F23D FTRC FR2,FPUL hud_text.c 233 if( nTemp >= 10 ) { 000002E8 E20A MOV #10,R2 000002EA 095A STS FPUL,R9 000002EC 3922 CMP/HS R2,R9 000002EE 8B05 BF L2112 hud_text.c 234 text_PrintNumber( fX, +fY, nTemp ); 000002F0 6493 MOV R9,R4 000002F2 L2239: 000002F2 D12E MOV.L L2250+2,R1 ; _text_PrintNumber 000002F4 410B JSR @R1 000002F6 0009 NOP 000002F8 A028 BRA L2105 000002FA 0009 NOP 000002FC L2112: hud_text.c 235 } else if( nTemp >= 5 ) { 000002FC E105 MOV #5,R1 000002FE 3912 CMP/HS R1,R9 00000300 8B12 BF L2114 00000302 D32B MOV.L L2250+6,R3 ; L1780 00000304 6032 MOV.L @R3,R0 00000306 2008 TST R0,R0 00000308 8B04 BF L2115 0000030A D22A MOV.L L2250+10, + R2; _Gameloop_nFrameCoun + ter 0000030C 6022 MOV.L @R2,R0 0000030E C908 AND #8,R0 00000310 A001 BRA L1981 00000312 6403 MOV R0,R4 00000314 L2115: 00000314 6483 MOV R8,R4 00000316 L1981: 00000316 2448 TST R4,R4 00000318 8918 BT L2105 hud_text.c 236 if( _Flash8On8Off() ) +{ hud_text.c 237 text_PrintF( f +X, fY, "0%d\n", nTemp ); 0000031A 2F96 MOV.L R9,@-R15 0000031C D327 MOV.L L2250+18,R3; _text_PrintF 0000031E D226 MOV.L L2250+14,R2; L1853 00000320 430B JSR @R3 00000322 2F26 MOV.L R2,@-R15 00000324 A012 BRA L2105 00000326 7F08 ADD #8,R15 00000328 L2114: 00000328 D021 MOV.L L2250+6,R0 ; L1780 0000032A 6302 MOV.L @R0,R3 0000032C 2338 TST R3,R3 0000032E 8B04 BF L2119 00000330 D320 MOV.L L2250+10, + R3; _Gameloop_nFrameCoun + ter 00000332 6032 MOV.L @R3,R0 00000334 C904 AND #4,R0 00000336 A001 BRA L1986 00000338 6403 MOV R0,R4 0000033A L2119: 0000033A 6483 MOV R8,R4 0000033C L1986: 0000033C 2448 TST R4,R4 0000033E 8905 BT L2105 hud_text.c 238 } hud_text.c 239 } else { hud_text.c 240 if( _Flash4On4Off() ) +{ hud_text.c 241 text_PrintF( f +X, fY, "0%d\n", nTemp ); 00000340 2F96 MOV.L R9,@-R15 00000342 D31E MOV.L L2250+18,R3; _text_PrintF 00000344 D21C MOV.L L2250+14,R2; L1853 00000346 430B JSR @R3 00000348 2F26 MOV.L R2,@-R15 0000034A 7F08 ADD #8,R15 0000034C L2105: 0000034C C71C MOVA L2250+22,R0 0000034E F2EC FMOV.S FR14,FR2 00000350 F308 FMOV.S @R0,FR3 00000352 E010 MOV #16,R0 00000354 F230 FADD FR3,FR2 00000356 FF27 FMOV.S FR2,@(R0,R15) 00000358 C71A MOVA L2250+26,R0 0000035A F108 FMOV.S @R0,FR1 0000035C E014 MOV #20,R0 0000035E F0EC FMOV.S FR14,FR0 00000360 F010 FADD FR1,FR0 00000362 FF07 FMOV.S FR0,@(R0,R15) 00000364 60C2 MOV.L @R12,R0 00000366 C840 TST #64,R0 00000368 8913 BT L2122 hud_text.c 242 } hud_text.c 243 } hud_text.c 244 } hud_text.c 245 } hud_text.c 246 hud_text.c 247 if( _nDrawFlags & HUD_TEXT_FLAGS_TIME_EXPIRED +) { hud_text.c 248 text_SetStyle( FSTYLE_CENTER | FSTYLE_ +PITCHED ); 0000036A 4B0B JSR @R11 0000036C E40D MOV #13,R4 hud_text.c 249 Text_fScale = 1.15f; 0000036E C716 MOVA L2250+30,R0 00000370 F308 FMOV.S @R0,FR3 hud_text.c 250 fX = Viewport_half_hres_f + fDx; 00000372 E004 MOV #4,R0 00000374 FD3A FMOV.S FR3,@R13 00000376 F3A8 FMOV.S @R10,FR3 00000378 F3F0 FADD FR15,FR3 0000037A FF37 FMOV.S FR3,@(R0,R15) hud_text.c 251 E text_PrintStr( fX, 120.0f + fDy, "TIME +\n" ); 0000037C E010 MOV #16,R0 0000037E F5F6 FMOV.S @(R0,R15),FR5 00000380 D412 MOV.L L2250+34,R4; L1857 00000382 4E0B JSR @R14 00000384 F43C FMOV.S FR3,FR4 hud_text.c 252 E text_PrintStr( fX, 165.0f + fDy, "EXPI +RED!\n" ); 00000386 E014 MOV #20,R0 00000388 D411 MOV.L L2250+38,R4; L1858 0000038A F5F6 FMOV.S @(R0,R15),FR5 0000038C E004 MOV #4,R0 0000038E 4E0B JSR @R14 00000390 F4F6 FMOV.S @(R0,R15),FR4 00000392 L2122: hud_text.c 253 } hud_text.c 254 hud_text.c 255 if( _nDrawFlags & HUD_TEXT_FLAGS_WINNER ) { 00000392 60C2 MOV.L @R12,R0 00000394 C880 TST #128,R0 00000396 892D BT L2123 00000398 D305 MOV.L L2250+6,R3 ; L1780 0000039A 6232 MOV.L @R3,R2 0000039C 2228 TST R2,R2 0000039E 8B19 BF L2124 000003A0 D204 MOV.L L2250+10, + R2; _Gameloop_nFrameCoun + ter 000003A2 6022 MOV.L @R2,R0 000003A4 C904 AND #4,R0 000003A6 A016 BRA L1991 000003A8 6403 MOV R0,R4 000003AA L2250: 000003AA 00000002 .RES.W 1 000003AC <00000000> .DATA.L _text_PrintNumber 000003B0 <00000000> .DATA.L L1780 000003B4 <00000000> .DATA.L _Gameloop_nFrameCounter 000003B8 <00000000> .DATA.L L1853 000003BC <00000000> .DATA.L _text_PrintF 000003C0 42F00000 .DATA.L H'42F00000 000003C4 43250000 .DATA.L H'43250000 000003C8 3F933333 .DATA.L H'3F933333 000003CC <00000000> .DATA.L L1857 000003D0 <00000000> .DATA.L L1858 000003D4 L2124: 000003D4 6483 MOV R8,R4 000003D6 L1991: 000003D6 2448 TST R4,R4 000003D8 890C BT L2123 hud_text.c 256 if( _Flash4On4Off() ) { hud_text.c 257 text_SetStyle( FSTYLE_CENTER | + FSTYLE_PITCHED ); 000003DA 4B0B JSR @R11 000003DC E40D MOV #13,R4 hud_text.c 258 Text_fScale = 1.10f; 000003DE C733 MOVA L2251+8,R0 000003E0 F308 FMOV.S @R0,FR3 hud_text.c 259 E text_PrintStr( Viewport_half_h +res_f + fDx, 100.0f + fDy, "WINNER!\n" ); 000003E2 C734 MOVA L2251+16,R0 000003E4 FD3A FMOV.S FR3,@R13 000003E6 F308 FMOV.S @R0,FR3 000003E8 F5EC FMOV.S FR14,FR5 000003EA F530 FADD FR3,FR5 000003EC F4A8 FMOV.S @R10,FR4 000003EE D430 MOV.L L2251+12,R4; L1861 000003F0 4E0B JSR @R14 000003F2 F4F0 FADD FR15,FR4 000003F4 L2123: hud_text.c 260 } hud_text.c 261 } hud_text.c 262 hud_text.c 263 if( _nDrawFlags & HUD_TEXT_FLAGS_ELAPSED_TIME +) { 000003F4 62C2 MOV.L @R12,R2 000003F6 9355 MOV.W L2251,R3 ; H'0800 000003F8 2238 TST R3,R2 000003FA 892A BT L2127 hud_text.c 264 mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1. +0f, 1.0f, 0.0f ); 000003FC D22E MOV.L L2251+20, + R2; _mesh3d_SetOrthoEffe + cts 000003FE F5CC FMOV.S FR12,FR5 00000400 F6CC FMOV.S FR12,FR6 00000402 F88D FLDI0 FR8 00000404 F7CC FMOV.S FR12,FR7 00000406 420B JSR @R2 00000408 F4CC FMOV.S FR12,FR4 0000040A D12E MOV.L L2251+32,R1; _Player_nHuman 0000040C C72B MOVA L2251+24,R0 0000040E 934A MOV.W L2251+2,R3 ; H'01F0 00000410 6211 MOV.W @R1,R2 00000412 F308 FMOV.S @R0,FR3 00000414 C72A MOVA L2251+28,R0 00000416 223F MULS R3,R2 00000418 F208 FMOV.S @R0,FR2 0000041A D02B MOV.L L2251+36, + R0; H'00000030+_Player_a + Data 0000041C F18D FLDI0 FR1 0000041E 031A STS MACL,R3 00000420 F6EC FMOV.S FR14,FR6 00000422 F630 FADD FR3,FR6 00000424 F5FC FMOV.S FR15,FR5 00000426 633F EXTS.W R3,R3 00000428 F036 FMOV.S @(R0,R3),FR0 0000042A F014 FCMP/EQ FR1,FR0 0000042C 8F05 BF/S L2128 0000042E F520 FADD FR2,FR5 hud_text.c 265 if( Player_aData[Player_nHuman].fFinis +hTime == 0.0f ) { hud_text.c 266 E _DrawTime( Player_fElapsedSecs +, -150.0f + fDx, 182.0f + fDy, 0.75f ); 00000430 C726 MOVA L2251+40,R0 00000432 D327 MOV.L L2251+44, + R3; _Player_fElapsedSecs 00000434 F708 FMOV.S @R0,FR7 00000436 A00A BRA L2234 00000438 F438 FMOV.S @R3,FR4 0000043A L2128: hud_text.c 267 } else { hud_text.c 268 E _DrawTime( Player_aData[Player +_nHuman].fFinishTime, -150.0f + fDx, 182.0f + fDy, 0.7 +5f ); 0000043A D122 MOV.L L2251+32,R1; _Player_nHuman 0000043C C723 MOVA L2251+40,R0 0000043E 9332 MOV.W L2251+2,R3 ; H'01F0 00000440 6211 MOV.W @R1,R2 00000442 F708 FMOV.S @R0,FR7 00000444 223F MULS R3,R2 00000446 D020 MOV.L L2251+36, + R0; H'00000030+_Player_a + Data 00000448 031A STS MACL,R3 0000044A 633F EXTS.W R3,R3 0000044C F436 FMOV.S @(R0,R3),FR4 0000044E L2234: 0000044E B4B9 BSR L1818 00000450 0009 NOP 00000452 L2127: hud_text.c 269 } hud_text.c 270 } hud_text.c 271 hud_text.c 272 if( _nDrawFlags & HUD_TEXT_FLAGS_TIME_EXTENDED + ) { 00000452 62C2 MOV.L @R12,R2 00000454 9328 MOV.W L2251+4,R3 ; H'1000 00000456 2238 TST R3,R2 00000458 8955 BT L2130 0000045A D11E MOV.L L2251+48,R1; L1780 0000045C 6012 MOV.L @R1,R0 0000045E 2008 TST R0,R0 00000460 8B04 BF L2131 00000462 D21D MOV.L L2251+52, + R2; _Gameloop_nFrameCoun + ter 00000464 6022 MOV.L @R2,R0 00000466 C904 AND #4,R0 00000468 A001 BRA L1996 0000046A 6403 MOV R0,R4 0000046C L2131: 0000046C 6483 MOV R8,R4 0000046E L1996: 0000046E D91B MOV.L L2251+56,R9; L1783 00000470 2448 TST R4,R4 00000472 893B BT L2133 hud_text.c 273 if( _Flash4On4Off() ) { hud_text.c 274 text_SetStyle( FSTYLE_CENTER | + FSTYLE_PITCHED ); 00000474 4B0B JSR @R11 00000476 E40D MOV #13,R4 hud_text.c 275 Text_fScale = 0.65f; 00000478 C719 MOVA L2251+60,R0 0000047A F308 FMOV.S @R0,FR3 hud_text.c 276 fX = Viewport_half_hres_f + fD +x; 0000047C E00C MOV #12,R0 0000047E FD3A FMOV.S FR3,@R13 00000480 F3A8 FMOV.S @R10,FR3 00000482 F3F0 FADD FR15,FR3 00000484 FF37 FMOV.S FR3,@(R0,R15) hud_text.c 277 E text_PrintStr( fX, 120.0f + fD +y, "TIME\n" ); 00000486 E010 MOV #16,R0 00000488 F5F6 FMOV.S @(R0,R15),FR5 0000048A D416 MOV.L L2251+64,R4; L1857 0000048C 4E0B JSR @R14 0000048E F43C FMOV.S FR3,FR4 hud_text.c 278 E text_PrintStr( fX, 165.0f + fD +y, "EXTENDED!\n" ); 00000490 E014 MOV #20,R0 00000492 D415 MOV.L L2251+68,R4; L1867 00000494 F5F6 FMOV.S @(R0,R15),FR5 00000496 E00C MOV #12,R0 00000498 4E0B JSR @R14 0000049A F4F6 FMOV.S @(R0,R15),FR4 hud_text.c 279 hud_text.c 280 ++_nTimeExtendedCounter; 0000049C 6391 MOV.W @R9,R3 0000049E 7301 ADD #1,R3 000004A0 A031 BRA L2130 000004A2 2931 MOV.W R3,@R9 000004A4 L2251: 000004A4 0800 .DATA.W H'0800 000004A6 01F0 .DATA.W H'01F0 000004A8 1000 .DATA.W H'1000 000004AA 00000002 .RES.W 1 000004AC 3F8CCCCC .DATA.L H'3F8CCCCC 000004B0 <00000000> .DATA.L L1861 000004B4 42C80000 .DATA.L H'42C80000 000004B8 <00000000> .DATA.L _mesh3d_SetOrthoEffects 000004BC 43360000 .DATA.L H'43360000 000004C0 C3160000 .DATA.L H'C3160000 000004C4 <00000000> .DATA.L _Player_nHuman 000004C8 <00000030> .DATA.L H'00000030+_Player_aData 000004CC 3F400000 .DATA.L H'3F400000 000004D0 <00000000> .DATA.L _Player_fElapsedSecs 000004D4 <00000000> .DATA.L L1780 000004D8 <00000000> .DATA.L _Gameloop_nFrameCounter 000004DC <00000000> .DATA.L L1783 000004E0 3F266666 .DATA.L H'3F266666 000004E4 <00000000> .DATA.L L1857 000004E8 <00000000> .DATA.L L1867 000004EC L2133: hud_text.c 281 } else { hud_text.c 282 E if( _nTimeExtendedCounter >= 3 +0 ) { 000004EC 6191 MOV.W @R9,R1 000004EE E31E MOV #30,R3 000004F0 611D EXTU.W R1,R1 000004F2 3133 CMP/GE R3,R1 000004F4 8B07 BF L2130 hud_text.c 283 /* auto kill this part +icular message */ hud_text.c 284 _nTimeExtendedCounter += 0; 000004F6 E100 MOV #0,R1 000004F8 2911 MOV.W R1,@R9 hud_text.c 285 E hud_text_SetFlag( 0, H +UD_TEXT_FLAGS_TIME_EXTENDED ); 000004FA 955D MOV.W L2252,R5 ; H'1000 000004FC B3A8 BSR _hud_text_SetFlag 000004FE 6413 MOV R1,R4 hud_text.c 286 E hud_wrongway_EnableTex +t( 1 ); 00000500 D32F MOV.L L2252+8, + R3 ; _hud_wrongway_Enable + Text 00000502 430B JSR @R3 00000504 E401 MOV #1,R4 00000506 L2130: 00000506 C730 MOVA L2252+16,R0 00000508 F2EC FMOV.S FR14,FR2 0000050A F308 FMOV.S @R0,FR3 0000050C E008 MOV #8,R0 0000050E D92D MOV.L L2252+12,R9; L1784 00000510 F230 FADD FR3,FR2 00000512 FF27 FMOV.S FR2,@(R0,R15) 00000514 62C2 MOV.L @R12,R2 00000516 9350 MOV.W L2252+2,R3 ; H'2000 00000518 2238 TST R3,R2 0000051A 8929 BT L2136 0000051C D12B MOV.L L2252+20,R1; L1780 0000051E 6012 MOV.L @R1,R0 00000520 2008 TST R0,R0 00000522 8B04 BF L2137 00000524 D22A MOV.L L2252+24, + R2; _Gameloop_nFrameCoun + ter 00000526 6022 MOV.L @R2,R0 00000528 C902 AND #2,R0 0000052A A001 BRA L2001 0000052C 6403 MOV R0,R4 0000052E L2137: 0000052E 6483 MOV R8,R4 00000530 L2001: 00000530 2448 TST R4,R4 00000532 8913 BT L2139 hud_text.c 287 } hud_text.c 288 } hud_text.c 289 } hud_text.c 290 hud_text.c 291 if( _nDrawFlags & HUD_TEXT_FLAGS_SBOOSTER ) { hud_text.c 292 if( _Flash2On2Off() ) { hud_text.c 293 text_SetStyle( FSTYLE_CENTER | + FSTYLE_PITCHED ); 00000534 4B0B JSR @R11 00000536 E40D MOV #13,R4 hud_text.c 294 Text_fScale = 0.45f; hud_text.c 295 E text_PrintF( Viewport_half_hre +s_f + fDx, 355.0f + fDy, "BOOSTER +%d SECS!\n", (u32)4 +.5f ); 00000538 E304 MOV #4,R3 0000053A C726 MOVA L2252+28,R0 0000053C F308 FMOV.S @R0,FR3 0000053E E010 MOV #16,R0 00000540 FD3A FMOV.S FR3,@R13 00000542 2F36 MOV.L R3,@-R15 00000544 D224 MOV.L L2252+32,R2; L1872 00000546 2F26 MOV.L R2,@-R15 00000548 F4A8 FMOV.S @R10,FR4 0000054A D124 MOV.L L2252+36,R1; _text_PrintF 0000054C F5F6 FMOV.S @(R0,R15),FR5 0000054E 410B JSR @R1 00000550 F4F0 FADD FR15,FR4 hud_text.c 296 hud_text.c 297 ++_nBoosterCounter; 00000552 6391 MOV.W @R9,R3 00000554 7F08 ADD #8,R15 00000556 7301 ADD #1,R3 00000558 A00A BRA L2136 0000055A 2931 MOV.W R3,@R9 0000055C L2139: hud_text.c 298 } else { hud_text.c 299 E if( _nBoosterCounter >= 30 ) +{ 0000055C 6191 MOV.W @R9,R1 0000055E E31E MOV #30,R3 00000560 611D EXTU.W R1,R1 00000562 3133 CMP/GE R3,R1 00000564 8B04 BF L2136 hud_text.c 300 /* auto kill this part +icular message */ hud_text.c 301 _nBoosterCounter = 0; 00000566 E100 MOV #0,R1 00000568 2911 MOV.W R1,@R9 hud_text.c 302 E hud_text_SetFlag( 0, H +UD_TEXT_FLAGS_SBOOSTER ); 0000056A 9526 MOV.W L2252+2,R5 ; H'2000 0000056C B370 BSR _hud_text_SetFlag 0000056E 6413 MOV R1,R4 00000570 L2136: hud_text.c 303 } hud_text.c 304 } hud_text.c 305 } hud_text.c 306 hud_text.c 307 if( _nDrawFlags & HUD_TEXT_FLAGS_LBOOSTER ) { 00000570 62C2 MOV.L @R12,R2 00000572 9323 MOV.W L2252+4,R3 ; H'4000 00000574 2238 TST R3,R2 00000576 893D BT L2142 00000578 D114 MOV.L L2252+20,R1; L1780 0000057A 6012 MOV.L @R1,R0 0000057C 2008 TST R0,R0 0000057E 8B04 BF L2143 00000580 D213 MOV.L L2252+24, + R2; _Gameloop_nFrameCoun + ter 00000582 6022 MOV.L @R2,R0 00000584 C902 AND #2,R0 00000586 A001 BRA L2006 00000588 6403 MOV R0,R4 0000058A L2143: 0000058A 6483 MOV R8,R4 0000058C L2006: 0000058C 2448 TST R4,R4 0000058E 8927 BT L2145 hud_text.c 308 if( _Flash2On2Off() ) { hud_text.c 309 text_SetStyle( FSTYLE_CENTER | + FSTYLE_PITCHED ); 00000590 4B0B JSR @R11 00000592 E40D MOV #13,R4 hud_text.c 310 Text_fScale = 0.45f; hud_text.c 311 E text_PrintF( Viewport_half_hre +s_f + fDx, 355.0f + fDy, "BOOSTER +%d SECS!\n", (u32)9 +.00f ); 00000594 E309 MOV #9,R3 00000596 C70F MOVA L2252+28,R0 00000598 F308 FMOV.S @R0,FR3 0000059A E010 MOV #16,R0 0000059C FD3A FMOV.S FR3,@R13 0000059E 2F36 MOV.L R3,@-R15 000005A0 D20D MOV.L L2252+32,R2; L1872 000005A2 2F26 MOV.L R2,@-R15 000005A4 F4A8 FMOV.S @R10,FR4 000005A6 D10D MOV.L L2252+36,R1; _text_PrintF 000005A8 F5F6 FMOV.S @(R0,R15),FR5 000005AA 410B JSR @R1 000005AC F4F0 FADD FR15,FR4 hud_text.c 312 hud_text.c 313 ++_nBoosterCounter; 000005AE 6391 MOV.W @R9,R3 000005B0 7F08 ADD #8,R15 000005B2 7301 ADD #1,R3 000005B4 A01E BRA L2142 000005B6 2931 MOV.W R3,@R9 000005B8 L2252: 000005B8 1000 .DATA.W H'1000 000005BA 2000 .DATA.W H'2000 000005BC 4000 .DATA.W H'4000 000005BE 00000002 .RES.W 1 000005C0 <00000000> .DATA.L _hud_wrongway_EnableText 000005C4 <00000000> .DATA.L L1784 000005C8 43B18000 .DATA.L H'43B18000 000005CC <00000000> .DATA.L L1780 000005D0 <00000000> .DATA.L _Gameloop_nFrameCounter 000005D4 3EE66666 .DATA.L H'3EE66666 000005D8 <00000000> .DATA.L L1872 000005DC <00000000> .DATA.L _text_PrintF 000005E0 L2145: hud_text.c 314 } else { hud_text.c 315 E if( _nBoosterCounter >= 30 ) +{ 000005E0 6191 MOV.W @R9,R1 000005E2 E31E MOV #30,R3 000005E4 611D EXTU.W R1,R1 000005E6 3133 CMP/GE R3,R1 000005E8 8B04 BF L2142 hud_text.c 316 /* auto kill this part +icular message */ hud_text.c 317 _nBoosterCounter = 0; 000005EA E100 MOV #0,R1 000005EC 2911 MOV.W R1,@R9 hud_text.c 318 E hud_text_SetFlag( 0, H +UD_TEXT_FLAGS_LBOOSTER ); 000005EE 957F MOV.W L2253,R5 ; H'4000 000005F0 B32E BSR _hud_text_SetFlag 000005F2 6413 MOV R1,R4 000005F4 L2142: 000005F4 C73F MOVA L2253+4,R0 000005F6 F2EC FMOV.S FR14,FR2 000005F8 F308 FMOV.S @R0,FR3 000005FA E018 MOV #24,R0 000005FC F230 FADD FR3,FR2 000005FE FF27 FMOV.S FR2,@(R0,R15) 00000600 D33D MOV.L L2253+8,R3 ; H'00008000 00000602 62C2 MOV.L @R12,R2 00000604 2238 TST R3,R2 00000606 8B01 BF L2254 00000608 A15F BRA L2148 0000060A 0009 NOP 0000060C L2254: 0000060C D43B MOV.L L2253+12,R4; L1806 0000060E D23D MOV.L L2253+20,R2; L1799 00000610 6142 MOV.L @R4,R1 00000612 D93B MOV.L L2253+16,R9; L1802 00000614 2118 TST R1,R1 00000616 8F02 BF/S L2255 00000618 F528 FMOV.S @R2,FR5 0000061A A07F BRA L2149 0000061C 0009 NOP 0000061E L2255: hud_text.c 319 } hud_text.c 320 } hud_text.c 321 } hud_text.c 322 hud_text.c 323 if( _nDrawFlags & HUD_TEXT_FLAGS_SPLIT_TIME ) +{ hud_text.c 324 if( _bSlideOn ) { hud_text.c 325 E if( _fBestX1 != 445.0f ) { 0000061E F5D4 FCMP/EQ FR13,FR5 00000620 C739 MOVA L2253+24,R0 00000622 8D10 BT/S L2150 00000624 F408 FMOV.S @R0,FR4 hud_text.c 326 E _fBestX1 += ( ( 445.0f + - (_fBestX1) ) * 0.30f ); 00000626 F1DC FMOV.S FR13,FR1 00000628 F151 FSUB FR5,FR1 0000062A D136 MOV.L L2253+20,R1; L1799 0000062C C737 MOVA L2253+28,R0 0000062E F008 FMOV.S @R0,FR0 00000630 F318 FMOV.S @R1,FR3 00000632 6313 MOV R1,R3 00000634 F31E FMAC FR0,FR1,FR3 00000636 F33A FMOV.S FR3,@R3 hud_text.c 327 E fTemp = 445.0f - _fBes +tX1; 00000638 F318 FMOV.S @R1,FR3 0000063A F5DC FMOV.S FR13,FR5 0000063C F531 FSUB FR3,FR5 hud_text.c 328 if( fTemp > -0.5f ) { 0000063E F545 FCMP/GT FR4,FR5 00000640 8B01 BF L2150 hud_text.c 329 E _fBestX1 = 445 +.0f; 00000642 D030 MOV.L L2253+20,R0; L1799 00000644 F0DA FMOV.S FR13,@R0 00000646 L2150: hud_text.c 330 } hud_text.c 331 } hud_text.c 332 E if( _fBestX2 != 445.0f && _nCh +eckPtCounter > 5 ) { 00000646 D332 MOV.L L2253+32,R3; L1800 00000648 F338 FMOV.S @R3,FR3 0000064A F3D4 FCMP/EQ FR13,FR3 0000064C 8916 BT L2152 0000064E D031 MOV.L L2253+36,R0; L1807 00000650 E105 MOV #5,R1 00000652 6202 MOV.L @R0,R2 00000654 3216 CMP/HI R1,R2 00000656 8B11 BF L2152 hud_text.c 333 E _fBestX2 += ( ( 445.0f + - (_fBestX2) ) * 0.30f ); 00000658 D32D MOV.L L2253+32,R3; L1800 0000065A C72C MOVA L2253+28,R0 0000065C F3DC FMOV.S FR13,FR3 0000065E F038 FMOV.S @R3,FR0 00000660 6233 MOV R3,R2 00000662 F228 FMOV.S @R2,FR2 00000664 6133 MOV R3,R1 00000666 F301 FSUB FR0,FR3 00000668 F008 FMOV.S @R0,FR0 hud_text.c 334 E fTemp = 445.0f - _fBes +tX2; 0000066A F5DC FMOV.S FR13,FR5 0000066C F23E FMAC FR0,FR3,FR2 0000066E F32C FMOV.S FR2,FR3 00000670 F531 FSUB FR3,FR5 hud_text.c 335 if( fTemp > -0.5f ) { 00000672 F545 FCMP/GT FR4,FR5 00000674 8F02 BF/S L2152 00000676 F12A FMOV.S FR2,@R1 hud_text.c 336 E _fBestX2 = 445 +.0f; 00000678 D025 MOV.L L2253+32,R0; L1800 0000067A F0DA FMOV.S FR13,@R0 0000067C L2152: hud_text.c 337 } hud_text.c 338 } hud_text.c 339 E if( _fYourX1 != 445.0f && _nCh +eckPtCounter > 10 ) { 0000067C D326 MOV.L L2253+40,R3; L1801 0000067E F338 FMOV.S @R3,FR3 00000680 F3D4 FCMP/EQ FR13,FR3 00000682 8916 BT L2154 00000684 D023 MOV.L L2253+36,R0; L1807 00000686 E10A MOV #10,R1 00000688 6202 MOV.L @R0,R2 0000068A 3216 CMP/HI R1,R2 0000068C 8B11 BF L2154 hud_text.c 340 E _fYourX1 += ( ( 445.0f + - (_fYourX1) ) * 0.30f ); 0000068E D322 MOV.L L2253+40,R3; L1801 00000690 C71E MOVA L2253+28,R0 00000692 F3DC FMOV.S FR13,FR3 00000694 F038 FMOV.S @R3,FR0 00000696 6233 MOV R3,R2 00000698 F228 FMOV.S @R2,FR2 0000069A 6133 MOV R3,R1 0000069C F301 FSUB FR0,FR3 0000069E F008 FMOV.S @R0,FR0 hud_text.c 341 E fTemp = 445.0f - _fYou +rX1; 000006A0 F5DC FMOV.S FR13,FR5 000006A2 F23E FMAC FR0,FR3,FR2 000006A4 F32C FMOV.S FR2,FR3 000006A6 F531 FSUB FR3,FR5 hud_text.c 342 if( fTemp > -0.5f ) { 000006A8 F545 FCMP/GT FR4,FR5 000006AA 8F02 BF/S L2154 000006AC F12A FMOV.S FR2,@R1 hud_text.c 343 E _fYourX1 = 445 +.0f; 000006AE D01A MOV.L L2253+40,R0; L1801 000006B0 F0DA FMOV.S FR13,@R0 000006B2 L2154: hud_text.c 344 } hud_text.c 345 } hud_text.c 346 E if( _fYourX2 != 445.0f && _nCh +eckPtCounter > 15 ) { 000006B2 F398 FMOV.S @R9,FR3 000006B4 F3D4 FCMP/EQ FR13,FR3 000006B6 8B01 BF L2256 000006B8 A09E BRA L2158 000006BA 0009 NOP 000006BC L2256: 000006BC D115 MOV.L L2253+36,R1; L1807 000006BE E20F MOV #15,R2 000006C0 6312 MOV.L @R1,R3 000006C2 3326 CMP/HI R2,R3 000006C4 8901 BT L2257 000006C6 A097 BRA L2158 000006C8 0009 NOP 000006CA L2257: hud_text.c 347 E _fYourX2 += ( ( 445.0f + - (_fYourX2) ) * 0.30f ); 000006CA F098 FMOV.S @R9,FR0 000006CC C70F MOVA L2253+28,R0 000006CE F3DC FMOV.S FR13,FR3 000006D0 F301 FSUB FR0,FR3 000006D2 F298 FMOV.S @R9,FR2 000006D4 F008 FMOV.S @R0,FR0 hud_text.c 348 E fTemp = 445.0f - _fYou +rX2; 000006D6 F5DC FMOV.S FR13,FR5 000006D8 F23E FMAC FR0,FR3,FR2 000006DA F32C FMOV.S FR2,FR3 000006DC F531 FSUB FR3,FR5 hud_text.c 349 if( fTemp > -0.5f ) { 000006DE F545 FCMP/GT FR4,FR5 000006E0 8D02 BT/S L2258 000006E2 F92A FMOV.S FR2,@R9 000006E4 A088 BRA L2158 000006E6 0009 NOP 000006E8 L2258: hud_text.c 350 E _fYourX2 = 445 +.0f; hud_text.c 351 E _bSlideOn = 0; 000006E8 E200 MOV #0,R2 000006EA F9DA FMOV.S FR13,@R9 000006EC A084 BRA L2158 000006EE 2422 MOV.L R2,@R4 000006F0 L2253: 000006F0 4000 .DATA.W H'4000 000006F2 00000002 .RES.W 1 000006F4 432F0000 .DATA.L H'432F0000 000006F8 00008000 .DATA.L H'00008000 000006FC <00000000> .DATA.L L1806 00000700 <00000000> .DATA.L L1802 00000704 <00000000> .DATA.L L1799 00000708 BF000000 .DATA.L H'BF000000 0000070C 3E999999 .DATA.L H'3E999999 00000710 <00000000> .DATA.L L1800 00000714 <00000000> .DATA.L L1807 00000718 <00000000> .DATA.L L1801 0000071C L2149: hud_text.c 352 } hud_text.c 353 } hud_text.c 354 } else { hud_text.c 355 E if( _fBestX1 != 570.0f && _nCh +eckPtCounter > 130 ) { 0000071C C749 MOVA L2259+8,R0 0000071E F408 FMOV.S @R0,FR4 00000720 F544 FCMP/EQ FR4,FR5 00000722 8916 BT L2159 00000724 D348 MOV.L L2259+12,R3; L1807 00000726 9089 MOV.W L2259,R0 ; H'0082 00000728 6132 MOV.L @R3,R1 0000072A 3106 CMP/HI R0,R1 0000072C 8B11 BF L2159 hud_text.c 356 E _fBestX1 += ( ( 570.0f + - (_fBestX1) ) * 0.30f ) ; 0000072E F34C FMOV.S FR4,FR3 00000730 F351 FSUB FR5,FR3 00000732 D347 MOV.L L2259+20,R3; L1799 00000734 C745 MOVA L2259+16,R0 00000736 F008 FMOV.S @R0,FR0 hud_text.c 357 E fTemp = 570.0f - _fBes +tX1; hud_text.c 358 if( fTemp < 0.5f ) { 00000738 C746 MOVA L2259+24,R0 0000073A F238 FMOV.S @R3,FR2 0000073C 6233 MOV R3,R2 0000073E F23E FMAC FR0,FR3,FR2 00000740 F22A FMOV.S FR2,@R2 00000742 F54C FMOV.S FR4,FR5 00000744 F32C FMOV.S FR2,FR3 00000746 F531 FSUB FR3,FR5 00000748 F208 FMOV.S @R0,FR2 0000074A F255 FCMP/GT FR5,FR2 0000074C 8B01 BF L2159 hud_text.c 359 E _fBestX1 = 570 +.0f; 0000074E D140 MOV.L L2259+20,R1; L1799 00000750 F14A FMOV.S FR4,@R1 00000752 L2159: 00000752 D341 MOV.L L2259+28,R3; L1800 00000754 F538 FMOV.S @R3,FR5 00000756 F544 FCMP/EQ FR4,FR5 00000758 8916 BT L2161 0000075A D03B MOV.L L2259+12,R0; L1807 0000075C 916F MOV.W L2259+2,R1 ; H'0087 0000075E 6202 MOV.L @R0,R2 00000760 3216 CMP/HI R1,R2 00000762 8B11 BF L2161 hud_text.c 360 } hud_text.c 361 } hud_text.c 362 E if( _fBestX2 != 570.0f && _nCh +eckPtCounter > 135 ) { hud_text.c 363 E _fBestX2 += ( ( 570.0f + - (_fBestX2) ) * 0.30f ) ; 00000764 F34C FMOV.S FR4,FR3 00000766 F351 FSUB FR5,FR3 00000768 D33B MOV.L L2259+28,R3; L1800 0000076A C738 MOVA L2259+16,R0 0000076C F008 FMOV.S @R0,FR0 hud_text.c 364 E fTemp = 570.0f - _fBes +tX2; hud_text.c 365 if( fTemp < 0.5f ) { 0000076E C739 MOVA L2259+24,R0 00000770 F238 FMOV.S @R3,FR2 00000772 6233 MOV R3,R2 00000774 F23E FMAC FR0,FR3,FR2 00000776 F22A FMOV.S FR2,@R2 00000778 F54C FMOV.S FR4,FR5 0000077A F32C FMOV.S FR2,FR3 0000077C F531 FSUB FR3,FR5 0000077E F208 FMOV.S @R0,FR2 00000780 F255 FCMP/GT FR5,FR2 00000782 8B01 BF L2161 hud_text.c 366 E _fBestX2 = 570 +.0f; 00000784 D134 MOV.L L2259+28,R1; L1800 00000786 F14A FMOV.S FR4,@R1 00000788 L2161: 00000788 D334 MOV.L L2259+32,R3; L1801 0000078A F538 FMOV.S @R3,FR5 0000078C F544 FCMP/EQ FR4,FR5 0000078E 8916 BT L2163 00000790 D02D MOV.L L2259+12,R0; L1807 00000792 9155 MOV.W L2259+4,R1 ; H'008C 00000794 6202 MOV.L @R0,R2 00000796 3216 CMP/HI R1,R2 00000798 8B11 BF L2163 hud_text.c 367 } hud_text.c 368 } hud_text.c 369 E if( _fYourX1 != 570.0f && _nCh +eckPtCounter > 140 ) { hud_text.c 370 E _fYourX1 += ( ( 570.0f + - (_fYourX1) ) * 0.30f ) ; 0000079A F34C FMOV.S FR4,FR3 0000079C F351 FSUB FR5,FR3 0000079E D32F MOV.L L2259+32,R3; L1801 000007A0 C72A MOVA L2259+16,R0 000007A2 F008 FMOV.S @R0,FR0 hud_text.c 371 E fTemp = 570.0f - _fYou +rX1; hud_text.c 372 if( fTemp < 0.5f ) { 000007A4 C72B MOVA L2259+24,R0 000007A6 F238 FMOV.S @R3,FR2 000007A8 6233 MOV R3,R2 000007AA F23E FMAC FR0,FR3,FR2 000007AC F22A FMOV.S FR2,@R2 000007AE F54C FMOV.S FR4,FR5 000007B0 F32C FMOV.S FR2,FR3 000007B2 F531 FSUB FR3,FR5 000007B4 F208 FMOV.S @R0,FR2 000007B6 F255 FCMP/GT FR5,FR2 000007B8 8B01 BF L2163 hud_text.c 373 E _fYourX1 = 570 +.0f; 000007BA D128 MOV.L L2259+32,R1; L1801 000007BC F14A FMOV.S FR4,@R1 000007BE L2163: hud_text.c 374 } hud_text.c 375 } hud_text.c 376 E if( _fYourX2 != 570.0f && _nCh +eckPtCounter > 145 ) { 000007BE F398 FMOV.S @R9,FR3 000007C0 F344 FCMP/EQ FR4,FR3 000007C2 8919 BT L2158 000007C4 D120 MOV.L L2259+12,R1; L1807 000007C6 923C MOV.W L2259+6,R2 ; H'0091 000007C8 6312 MOV.L @R1,R3 000007CA 3326 CMP/HI R2,R3 000007CC 8B14 BF L2158 hud_text.c 377 E _fYourX2 += ( ( 570.0f + - (_fYourX2) ) * 0.30f ) ; 000007CE F098 FMOV.S @R9,FR0 000007D0 C71E MOVA L2259+16,R0 000007D2 F34C FMOV.S FR4,FR3 000007D4 F301 FSUB FR0,FR3 000007D6 F298 FMOV.S @R9,FR2 000007D8 F008 FMOV.S @R0,FR0 hud_text.c 378 E fTemp = 570.0f - _fYou +rX2; hud_text.c 379 if( fTemp < 0.5f ) { 000007DA C71E MOVA L2259+24,R0 000007DC F23E FMAC FR0,FR3,FR2 000007DE F92A FMOV.S FR2,@R9 000007E0 F54C FMOV.S FR4,FR5 000007E2 F32C FMOV.S FR2,FR3 000007E4 F531 FSUB FR3,FR5 000007E6 F208 FMOV.S @R0,FR2 000007E8 F255 FCMP/GT FR5,FR2 000007EA 8B05 BF L2158 hud_text.c 380 E _fYourX2 = 570 +.0f; hud_text.c 381 E _bSlideOn = 0; 000007EC E200 MOV #0,R2 000007EE F94A FMOV.S FR4,@R9 000007F0 2422 MOV.L R2,@R4 hud_text.c 382 /* auto kill t +his particular message */ hud_text.c 383 E hud_text_SetFl +ag( 0, HUD_TEXT_FLAGS_SPLIT_TIME ); 000007F2 D51B MOV.L L2259+36,R5; H'00008000 000007F4 B22C BSR _hud_text_SetFlag 000007F6 6423 MOV R2,R4 000007F8 L2158: hud_text.c 384 } hud_text.c 385 } hud_text.c 386 } hud_text.c 387 hud_text.c 388 ++_nCheckPtCounter; 000007F8 D413 MOV.L L2259+12,R4; L1807 000007FA 6242 MOV.L @R4,R2 000007FC 7201 ADD #1,R2 000007FE 2422 MOV.L R2,@R4 hud_text.c 389 /* now draw the words */ hud_text.c 390 text_SetStyle( FSTYLE_CENTER | FSTYLE_ +PITCHED ); 00000800 4B0B JSR @R11 00000802 E40D MOV #13,R4 hud_text.c 391 Text_fScale = 0.30f; 00000804 C711 MOVA L2259+16,R0 00000806 F308 FMOV.S @R0,FR3 hud_text.c 392 E text_PrintStr( _fBestX1 + fDx, 175.0f ++ fDy, "BEST TIME\n" ); 00000808 E018 MOV #24,R0 0000080A FD3A FMOV.S FR3,@R13 0000080C D310 MOV.L L2259+20,R3; L1799 0000080E F5F6 FMOV.S @(R0,R15),FR5 00000810 F438 FMOV.S @R3,FR4 00000812 D414 MOV.L L2259+40,R4; L1898 00000814 4E0B JSR @R14 00000816 F4F0 FADD FR15,FR4 hud_text.c 393 E text_PrintStr( _fYourX1 + fDx, 215.0f + + fDy, "YOUR TIME\n" ); 00000818 C714 MOVA L2259+48,R0 0000081A F5EC FMOV.S FR14,FR5 0000081C F308 FMOV.S @R0,FR3 0000081E D30F MOV.L L2259+32,R3; L1801 00000820 F530 FADD FR3,FR5 00000822 D411 MOV.L L2259+44,R4; L1899 00000824 F438 FMOV.S @R3,FR4 00000826 4E0B JSR @R14 00000828 F4F0 FADD FR15,FR4 hud_text.c 394 /* now draw the times */ hud_text.c 395 mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1. +0f, 1.0f, 0.0f ); 0000082A D211 MOV.L L2259+52, + R2; _mesh3d_SetOrthoEffe + cts 0000082C F5CC FMOV.S FR12,FR5 0000082E F6CC FMOV.S FR12,FR6 00000830 F88D FLDI0 FR8 00000832 F7CC FMOV.S FR12,FR7 00000834 420B JSR @R2 00000836 F4CC FMOV.S FR12,FR4 hud_text.c 396 E _DrawTime( _fBestTime, _fBestX2 + fDx +- 275.0f, ( -195.0f + 200.0f ) + fDy, 0.65f ); 00000838 A01C BRA L2240 0000083A 0009 NOP 0000083C L2259: 0000083C 0082 .DATA.W H'0082 0000083E 0087 .DATA.W H'0087 00000840 008C .DATA.W H'008C 00000842 0091 .DATA.W H'0091 00000844 440E8000 .DATA.L H'440E8000 00000848 <00000000> .DATA.L L1807 0000084C 3E999999 .DATA.L H'3E999999 00000850 <00000000> .DATA.L L1799 00000854 3F000000 .DATA.L H'3F000000 00000858 <00000000> .DATA.L L1800 0000085C <00000000> .DATA.L L1801 00000860 00008000 .DATA.L H'00008000 00000864 <00000000> .DATA.L L1898 00000868 <00000000> .DATA.L L1899 0000086C 43570000 .DATA.L H'43570000 00000870 <00000000> .DATA.L _mesh3d_SetOrthoEffects 00000874 L2240: 00000874 D33C MOV.L L2260+14,R3; L1800 00000876 C73A MOVA L2260+6,R0 00000878 F708 FMOV.S @R0,FR7 0000087A C73A MOVA L2260+10,R0 0000087C F238 FMOV.S @R3,FR2 0000087E F308 FMOV.S @R0,FR3 00000880 C73A MOVA L2260+18,R0 00000882 F2F0 FADD FR15,FR2 00000884 F108 FMOV.S @R0,FR1 00000886 F6EC FMOV.S FR14,FR6 00000888 F630 FADD FR3,FR6 0000088A D239 MOV.L L2260+22,R2; L1804 0000088C F52C FMOV.S FR2,FR5 0000088E F510 FADD FR1,FR5 00000890 B298 BSR L1818 00000892 F428 FMOV.S @R2,FR4 hud_text.c 397 if( (_bNewHighScore && _Flash3On3Off() + ) || !_bNewHighScore ) { 00000894 D137 MOV.L L2260+26,R1; L1805 00000896 6312 MOV.L @R1,R3 00000898 2338 TST R3,R3 0000089A 8903 BT L2169 0000089C B264 BSR L1815 0000089E 0009 NOP 000008A0 2008 TST R0,R0 000008A2 8B03 BF L2168 000008A4 L2169: 000008A4 D133 MOV.L L2260+26,R1; L1805 000008A6 6312 MOV.L @R1,R3 000008A8 2338 TST R3,R3 000008AA 8B0E BF L2148 000008AC L2168: hud_text.c 398 E _DrawTime( _fYourTime, _fYourX +2 + fDx - 275.0f, ( -235.0f + 200.0f ) + fDy, 0.65f ) +; 000008AC F298 FMOV.S @R9,FR2 000008AE C72C MOVA L2260+6,R0 000008B0 F708 FMOV.S @R0,FR7 000008B2 C731 MOVA L2260+30,R0 000008B4 F2F0 FADD FR15,FR2 000008B6 F308 FMOV.S @R0,FR3 000008B8 C72C MOVA L2260+18,R0 000008BA F6EC FMOV.S FR14,FR6 000008BC F108 FMOV.S @R0,FR1 000008BE F630 FADD FR3,FR6 000008C0 D32E MOV.L L2260+34,R3; L1803 000008C2 F52C FMOV.S FR2,FR5 000008C4 F510 FADD FR1,FR5 000008C6 B27D BSR L1818 000008C8 F438 FMOV.S @R3,FR4 000008CA L2148: hud_text.c 399 } hud_text.c 400 } hud_text.c 401 hud_text.c 402 if( _nDrawFlags & HUD_TEXT_FLAGS_FINISH_STATS +) { 000008CA 62C2 MOV.L @R12,R2 000008CC 9345 MOV.W L2260,R3 ; H'0100 000008CE 2238 TST R3,R2 000008D0 8B01 BF L2261 000008D2 A0FA BRA L2170 000008D4 0009 NOP 000008D6 L2261: hud_text.c 403 text_SetStyle( FSTYLE_CENTER | FSTYLE_ +PITCHED ); 000008D6 4B0B JSR @R11 000008D8 E40D MOV #13,R4 hud_text.c 404 fX = Viewport_half_hres_f + fDx; hud_text.c 405 hud_text.c 406 /* draw the place */ hud_text.c 407 Text_fScale = 1.6f; 000008DA C729 MOVA L2260+38,R0 000008DC FDA8 FMOV.S @R10,FR13 000008DE F308 FMOV.S @R0,FR3 000008E0 FDF0 FADD FR15,FR13 000008E2 FD3A FMOV.S FR3,@R13 hud_text.c 408 E text_PrintNumber( fX, 195.0f + fDy, Pl +ayer_aData[Player_nHuman].nPlace ); 000008E4 D127 MOV.L L2260+42,R1; _Player_nHuman 000008E6 9339 MOV.W L2260+2,R3 ; H'01F0 000008E8 6211 MOV.W @R1,R2 000008EA D027 MOV.L L2260+46, + R0; H'00000020+_Player_a + Data 000008EC 223F MULS R3,R2 000008EE F5EC FMOV.S FR14,FR5 000008F0 D227 MOV.L L2260+54,R2; _text_PrintNumber 000008F2 041A STS MACL,R4 000008F4 644F EXTS.W R4,R4 000008F6 044E MOV.L @(R0,R4),R4 000008F8 C724 MOVA L2260+50,R0 000008FA F308 FMOV.S @R0,FR3 000008FC F530 FADD FR3,FR5 000008FE 420B JSR @R2 00000900 F4DC FMOV.S FR13,FR4 hud_text.c 409 /* draw the st,nd,rd,th after the plac +e */ hud_text.c 410 Text_fScale = 0.45f; 00000902 C724 MOVA L2260+58,R0 00000904 F308 FMOV.S @R0,FR3 00000906 FD3A FMOV.S FR3,@R13 hud_text.c 411 E fY = ( Player_aData[Player_nHuman].nPl +ace < 10 ) ? 315.0f + fDx : 330.0f + fDx; 00000908 D11E MOV.L L2260+42,R1; _Player_nHuman 0000090A 9327 MOV.W L2260+2,R3 ; H'01F0 0000090C 6211 MOV.W @R1,R2 0000090E D01E MOV.L L2260+46, + R0; H'00000020+_Player_a + Data 00000910 223F MULS R3,R2 00000912 E20A MOV #10,R2 00000914 041A STS MACL,R4 00000916 644F EXTS.W R4,R4 00000918 044E MOV.L @(R0,R4),R4 0000091A 3422 CMP/HS R2,R4 0000091C 8D03 BT/S L2171 0000091E F4FC FMOV.S FR15,FR4 00000920 C71D MOVA L2260+62,R0 00000922 A002 BRA L2235 00000924 F308 FMOV.S @R0,FR3 00000926 L2171: 00000926 C71D MOVA L2260+66,R0 00000928 F308 FMOV.S @R0,FR3 0000092A L2235: 0000092A F430 FADD FR3,FR4 0000092C C71C MOVA L2260+70,R0 0000092E F308 FMOV.S @R0,FR3 00000930 F5EC FMOV.S FR14,FR5 00000932 6043 MOV R4,R0 00000934 0009 NOP 00000936 8801 CMP/EQ #1,R0 00000938 8D06 BT/S L2066 0000093A F530 FADD FR3,FR5 0000093C 8802 CMP/EQ #2,R0 0000093E 8906 BT L2068 00000940 8803 CMP/EQ #3,R0 00000942 8907 BT L2070 00000944 A034 BRA L2072 00000946 0009 NOP 00000948 L2066: ; case label hud_text.c 412 switch( Player_aData[Player_nHuman].nP +lace ) hud_text.c 413 { hud_text.c 414 case 1: hud_text.c 415 /* "st" */ hud_text.c 416 E text_PrintStr( fY, 167.0f + fD +y, "ST\n" ); 00000948 D416 MOV.L L2260+74,R4; L1903 hud_text.c 417 break; 0000094A A032 BRA L2238 0000094C 0009 NOP 0000094E L2068: ; case label hud_text.c 418 case 2: hud_text.c 419 /* "nd" */ hud_text.c 420 E text_PrintStr( fY, 167.0f + fD +y, "ND\n" ); 0000094E D416 MOV.L L2260+78,R4; L1904 hud_text.c 421 break; 00000950 A02F BRA L2238 00000952 0009 NOP 00000954 L2070: ; case label hud_text.c 422 case 3: hud_text.c 423 /* "rd" */ hud_text.c 424 E text_PrintStr( fY, 167.0f + fD +y, "RD\n" ); 00000954 D415 MOV.L L2260+82,R4; L1905 hud_text.c 425 break; 00000956 A02C BRA L2238 00000958 0009 NOP 0000095A L2260: 0000095A 0100 .DATA.W H'0100 0000095C 01F0 .DATA.W H'01F0 0000095E 00000002 .RES.W 1 00000960 3F266666 .DATA.L H'3F266666 00000964 40A00000 .DATA.L H'40A00000 00000968 <00000000> .DATA.L L1800 0000096C C3898000 .DATA.L H'C3898000 00000970 <00000000> .DATA.L L1804 00000974 <00000000> .DATA.L L1805 00000978 C20C0000 .DATA.L H'C20C0000 0000097C <00000000> .DATA.L L1803 00000980 3FCCCCCC .DATA.L H'3FCCCCCC 00000984 <00000000> .DATA.L _Player_nHuman 00000988 <00000020> .DATA.L H'00000020+_Player_aData 0000098C 43430000 .DATA.L H'43430000 00000990 <00000000> .DATA.L _text_PrintNumber 00000994 3EE66666 .DATA.L H'3EE66666 00000998 439D8000 .DATA.L H'439D8000 0000099C 43A50000 .DATA.L H'43A50000 000009A0 43270000 .DATA.L H'43270000 000009A4 <00000000> .DATA.L L1903 000009A8 <00000000> .DATA.L L1904 000009AC <00000000> .DATA.L L1905 000009B0 L2072: ; default label hud_text.c 426 default: hud_text.c 427 /* "th" */ hud_text.c 428 E text_PrintStr( fY, 167.0f + fD +y, "TH\n" ); 000009B0 D431 MOV.L L2262+2,R4 ; L1906 hud_text.c 429 break; 000009B2 L2238: 000009B2 4E0B JSR @R14 000009B4 0009 NOP hud_text.c 430 } hud_text.c 431 /* draw the words "best time" */ hud_text.c 432 Text_fScale = 0.38f; 000009B6 C731 MOVA L2262+6,R0 000009B8 F308 FMOV.S @R0,FR3 hud_text.c 433 E text_PrintStr( fX, 265.0f + fDy, "BEST + TIME\n" ); 000009BA C732 MOVA L2262+14,R0 000009BC FD3A FMOV.S FR3,@R13 000009BE F308 FMOV.S @R0,FR3 000009C0 F5EC FMOV.S FR14,FR5 000009C2 F530 FADD FR3,FR5 000009C4 D42E MOV.L L2262+10,R4; L1898 000009C6 4E0B JSR @R14 000009C8 F4DC FMOV.S FR13,FR4 hud_text.c 434 /* draw the words "your time" */ hud_text.c 435 Text_fScale = 0.38f; 000009CA C72C MOVA L2262+6,R0 000009CC F308 FMOV.S @R0,FR3 hud_text.c 436 E text_PrintStr( fX, 325.0f + fDy, "YOUR + TIME\n" ); 000009CE C72F MOVA L2262+22,R0 000009D0 FD3A FMOV.S FR3,@R13 000009D2 F308 FMOV.S @R0,FR3 000009D4 F5EC FMOV.S FR14,FR5 000009D6 F530 FADD FR3,FR5 000009D8 D42B MOV.L L2262+18,R4; L1899 000009DA 4E0B JSR @R14 000009DC F4DC FMOV.S FR13,FR4 hud_text.c 437 hud_text.c 438 mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1. +0f, 1.0f, 0.0f ); 000009DE D32C MOV.L L2262+26, + R3; _mesh3d_SetOrthoEffe + cts 000009E0 F5CC FMOV.S FR12,FR5 000009E2 F6CC FMOV.S FR12,FR6 000009E4 F88D FLDI0 FR8 000009E6 F7CC FMOV.S FR12,FR7 000009E8 430B JSR @R3 000009EA F4CC FMOV.S FR12,FR4 hud_text.c 439 /* draw the best time, and the person' +s initials who scored that time */ hud_text.c 440 E _DrawTime( _fBestFinishTime, -70.0f + +fDx, -95.0f + fDy, 1.0f ); 000009EC C729 MOVA L2262+30,R0 000009EE F5FC FMOV.S FR15,FR5 000009F0 F308 FMOV.S @R0,FR3 000009F2 C729 MOVA L2262+34,R0 000009F4 F208 FMOV.S @R0,FR2 000009F6 F6EC FMOV.S FR14,FR6 000009F8 F630 FADD FR3,FR6 000009FA F520 FADD FR2,FR5 000009FC D327 MOV.L L2262+38,R3; L1808 000009FE F7CC FMOV.S FR12,FR7 00000A00 B1E0 BSR L1818 00000A02 F438 FMOV.S @R3,FR4 hud_text.c 441 E text_PrintStr( 315.0f + fDx, 297.0f + +fDy, _pszBestTimeInitials ); 00000A04 C727 MOVA L2262+46,R0 00000A06 F5EC FMOV.S FR14,FR5 00000A08 F308 FMOV.S @R0,FR3 00000A0A C727 MOVA L2262+50,R0 00000A0C F208 FMOV.S @R0,FR2 00000A0E F530 FADD FR3,FR5 00000A10 D423 MOV.L L2262+42,R4; L1809 00000A12 F4FC FMOV.S FR15,FR4 00000A14 4E0B JSR @R14 00000A16 F420 FADD FR2,FR4 00000A18 D126 MOV.L L2262+62,R1; _Player_nHuman 00000A1A C724 MOVA L2262+54,R0 00000A1C 932B MOV.W L2262,R3 ; H'01F0 00000A1E 6211 MOV.W @R1,R2 00000A20 F308 FMOV.S @R0,FR3 00000A22 C723 MOVA L2262+58,R0 00000A24 223F MULS R3,R2 00000A26 F208 FMOV.S @R0,FR2 00000A28 F6EC FMOV.S FR14,FR6 00000A2A F630 FADD FR3,FR6 00000A2C F5FC FMOV.S FR15,FR5 00000A2E F520 FADD FR2,FR5 00000A30 091A STS MACL,R9 00000A32 D221 MOV.L L2262+66,R2; _Player_aData 00000A34 699F EXTS.W R9,R9 00000A36 6013 MOV R1,R0 00000A38 0009 NOP 00000A3A 6101 MOV.W @R0,R1 00000A3C E030 MOV #48,R0 00000A3E 213F MULS R3,R1 00000A40 D116 MOV.L L2262+38,R1; L1808 00000A42 F118 FMOV.S @R1,FR1 00000A44 031A STS MACL,R3 00000A46 633F EXTS.W R3,R3 00000A48 332C ADD R2,R3 00000A4A F036 FMOV.S @(R0,R3),FR0 00000A4C F105 FCMP/GT FR0,FR1 00000A4E 8F39 BF/S L2174 00000A50 392C ADD R2,R9 00000A52 D11A MOV.L L2262+70,R1; L1780 00000A54 6312 MOV.L @R1,R3 00000A56 2338 TST R3,R3 00000A58 8B04 BF L2175 00000A5A D319 MOV.L L2262+74, + R3; _Gameloop_nFrameCoun + ter 00000A5C 6032 MOV.L @R3,R0 00000A5E C904 AND #4,R0 00000A60 A001 BRA L2011 00000A62 6403 MOV R0,R4 00000A64 L2175: 00000A64 6483 MOV R8,R4 00000A66 L2011: 00000A66 2448 TST R4,R4 00000A68 892F BT L2170 hud_text.c 442 /* draw your time */ hud_text.c 443 if( Player_aData[Player_nHuman].fFinis +hTime < _fBestFinishTime ) { hud_text.c 444 if( _Flash4On4Off() ) { hud_text.c 445 _DrawTime( Player_aDat +a[Player_nHuman].fFinishTime, hud_text.c 446 E -40 +.0f + fDx, hud_text.c 447 E -15 +5.0f + fDy, 1.0f ); 00000A6A E030 MOV #48,R0 00000A6C F7CC FMOV.S FR12,FR7 00000A6E B1A9 BSR L1818 00000A70 F496 FMOV.S @(R0,R9),FR4 00000A72 A02A BRA L2170 00000A74 0009 NOP 00000A76 L2262: 00000A76 01F0 .DATA.W H'01F0 00000A78 <00000000> .DATA.L L1906 00000A7C 3EC28F5C .DATA.L H'3EC28F5C 00000A80 <00000000> .DATA.L L1898 00000A84 43848000 .DATA.L H'43848000 00000A88 <00000000> .DATA.L L1899 00000A8C 43A28000 .DATA.L H'43A28000 00000A90 <00000000> .DATA.L _mesh3d_SetOrthoEffects 00000A94 C2BE0000 .DATA.L H'C2BE0000 00000A98 C28C0000 .DATA.L H'C28C0000 00000A9C <00000000> .DATA.L L1808 00000AA0 <00000000> .DATA.L L1809 00000AA4 43948000 .DATA.L H'43948000 00000AA8 439D8000 .DATA.L H'439D8000 00000AAC C31B0000 .DATA.L H'C31B0000 00000AB0 C2200000 .DATA.L H'C2200000 00000AB4 <00000000> .DATA.L _Player_nHuman 00000AB8 <00000000> .DATA.L _Player_aData 00000ABC <00000000> .DATA.L L1780 00000AC0 <00000000> .DATA.L _Gameloop_nFrameCounter 00000AC4 L2174: hud_text.c 448 } hud_text.c 449 } else { hud_text.c 450 _DrawTime( Player_aData[Player +_nHuman].fFinishTime, hud_text.c 451 E -40.0f + fD +x, hud_text.c 452 E -155.0f + f +Dy, 1.0f ); 00000AC4 F7CC FMOV.S FR12,FR7 00000AC6 B17D BSR L1818 00000AC8 F496 FMOV.S @(R0,R9),FR4 00000ACA L2170: hud_text.c 453 } hud_text.c 454 } hud_text.c 455 hud_text.c 456 if( _nDrawFlags & HUD_TEXT_FLAGS_PUSH_THROTTLE + ) { 00000ACA 62C2 MOV.L @R12,R2 00000ACC D32B MOV.L L2263+6,R3 ; H'00010000 00000ACE 2238 TST R3,R2 00000AD0 8B01 BF L2264 00000AD2 A096 BRA L2179 00000AD4 0009 NOP 00000AD6 L2264: 00000AD6 D72A MOV.L L2263+10,R7; L1812 00000AD8 D42C MOV.L L2263+22,R4; L1811 00000ADA 6272 MOV.L @R7,R2 00000ADC D629 MOV.L L2263+14,R6; L1810 00000ADE D52A MOV.L L2263+18,R5; L1813 00000AE0 2228 TST R2,R2 00000AE2 8F31 BF/S L2180 00000AE4 F468 FMOV.S @R6,FR4 hud_text.c 457 if( !_bInitialWait ) { hud_text.c 458 if( !_bDisplay ) { 00000AE6 6252 MOV.L @R5,R2 00000AE8 2228 TST R2,R2 00000AEA 8B14 BF L2181 hud_text.c 459 /* we are not currentl +y displaying the message, see if we need to */ hud_text.c 460 E if( _fTimer >= 6.0f ) +{ 00000AEC C728 MOVA L2263+26,R0 00000AEE F308 FMOV.S @R0,FR3 00000AF0 F345 FCMP/GT FR4,FR3 00000AF2 895B BT L2187 hud_text.c 461 _fTimer = 0.0f +; 00000AF4 F38D FLDI0 FR3 00000AF6 F63A FMOV.S FR3,@R6 hud_text.c 462 if( Player_aDa +ta[Player_nHuman].Phys.nStatusBits & PHYS_STATUSBIT_NE +ED_THROTTLE_HELP ) { 00000AF8 D026 MOV.L L2263+30,R0; _Player_nHuman 00000AFA 923C MOV.W L2263,R2 ; H'01F0 00000AFC 6101 MOV.W @R0,R1 00000AFE D026 MOV.L L2263+34, + R0; H'00000154+_Player_a + Data 00000B00 212F MULS R2,R1 00000B02 9339 MOV.W L2263+2,R3 ; H'0800 00000B04 021A STS MACL,R2 00000B06 622F EXTS.W R2,R2 00000B08 012E MOV.L @(R0,R2),R1 00000B0A 2138 TST R3,R1 00000B0C 894E BT L2187 hud_text.c 463 /* tur +n on the message now */ hud_text.c 464 E _bDisp +lay = 1; 00000B0E 2582 MOV.L R8,@R5 hud_text.c 465 _fDisp +layTime = 0.0f; 00000B10 F38D FLDI0 FR3 00000B12 A04B BRA L2187 00000B14 F43A FMOV.S FR3,@R4 00000B16 L2181: hud_text.c 466 } hud_text.c 467 } hud_text.c 468 } else { hud_text.c 469 /* we are currently di +splaying the message */ hud_text.c 470 _fDisplayTime += Gamel +oop_fTargetFrameTime; 00000B16 D221 MOV.L L2263+38, + R2; _Gameloop_fTargetFra + meTime hud_text.c 471 E if( (_fDisplayTime >= +4.0f) || !( Player_aData[Player_nHuman].Phys.nStatusBi +ts & PHYS_STATUSBIT_NEED_THROTTLE_HELP ) ) { 00000B18 C721 MOVA L2263+42,R0 00000B1A F248 FMOV.S @R4,FR2 00000B1C F328 FMOV.S @R2,FR3 00000B1E F230 FADD FR3,FR2 00000B20 F42A FMOV.S FR2,@R4 00000B22 F308 FMOV.S @R0,FR3 00000B24 F325 FCMP/GT FR2,FR3 00000B26 8B0A BF L2186 00000B28 D31A MOV.L L2263+30,R3; _Player_nHuman 00000B2A 9124 MOV.W L2263,R1 ; H'01F0 00000B2C 6031 MOV.W @R3,R0 00000B2E 9323 MOV.W L2263+2,R3 ; H'0800 00000B30 201F MULS R1,R0 00000B32 D019 MOV.L L2263+34, + R0; H'00000154+_Player_a + Data 00000B34 011A STS MACL,R1 00000B36 611F EXTS.W R1,R1 00000B38 021E MOV.L @(R0,R1),R2 00000B3A 2238 TST R3,R2 00000B3C 8B36 BF L2187 00000B3E L2186: hud_text.c 472 /* turn the di +splay off */ hud_text.c 473 E _bDisplay = 0; 00000B3E E300 MOV #0,R3 00000B40 2532 MOV.L R3,@R5 hud_text.c 474 _fDisplayTime += 0.0f; 00000B42 F38D FLDI0 FR3 00000B44 A032 BRA L2187 00000B46 F43A FMOV.S FR3,@R4 00000B48 L2180: hud_text.c 475 } hud_text.c 476 } hud_text.c 477 } else { hud_text.c 478 /* we are waiting for the firs +t time period to be up */ hud_text.c 479 E if( _fTimer >= 2.0f ) { 00000B48 C716 MOVA L2263+46,R0 00000B4A F308 FMOV.S @R0,FR3 00000B4C F345 FCMP/GT FR4,FR3 00000B4E 892D BT L2187 hud_text.c 480 _fTimer = 0.0f; hud_text.c 481 E _bInitialWait = 0; 00000B50 E200 MOV #0,R2 00000B52 F38D FLDI0 FR3 00000B54 F63A FMOV.S FR3,@R6 00000B56 2722 MOV.L R2,@R7 hud_text.c 482 if( Player_aData[Playe +r_nHuman].Phys.nStatusBits & PHYS_STATUSBIT_NEED_THROT +TLE_HELP ) { 00000B58 D00E MOV.L L2263+30,R0; _Player_nHuman 00000B5A 920C MOV.W L2263,R2 ; H'01F0 00000B5C 6101 MOV.W @R0,R1 00000B5E 930B MOV.W L2263+2,R3 ; H'0800 00000B60 212F MULS R2,R1 00000B62 D10D MOV.L L2263+34, + R1; H'00000154+_Player_a + Data 00000B64 001A STS MACL,R0 00000B66 600F EXTS.W R0,R0 00000B68 011E MOV.L @(R0,R1),R1 00000B6A 2138 TST R3,R1 00000B6C 891C BT L2189 hud_text.c 483 /* turn on the + message right now */ hud_text.c 484 E _bDisplay = 1; 00000B6E 2582 MOV.L R8,@R5 hud_text.c 485 _fDisplayTime += 0.0f; 00000B70 F38D FLDI0 FR3 00000B72 A01B BRA L2187 00000B74 F43A FMOV.S FR3,@R4 00000B76 L2263: 00000B76 01F0 .DATA.W H'01F0 00000B78 0800 .DATA.W H'0800 00000B7A 00000002 .RES.W 1 00000B7C 00010000 .DATA.L H'00010000 00000B80 <00000000> .DATA.L L1812 00000B84 <00000000> .DATA.L L1810 00000B88 <00000000> .DATA.L L1813 00000B8C <00000000> .DATA.L L1811 00000B90 40C00000 .DATA.L H'40C00000 00000B94 <00000000> .DATA.L _Player_nHuman 00000B98 <00000154> .DATA.L H'00000154+_Player_aData 00000B9C <00000000> .DATA.L _Gameloop_fTargetFrameTime 00000BA0 40800000 .DATA.L H'40800000 00000BA4 40000000 .DATA.L H'40000000 00000BA8 L2189: hud_text.c 486 } else { hud_text.c 487 E _bDisplay = 0; 00000BA8 E000 MOV #0,R0 00000BAA 2502 MOV.L R0,@R5 00000BAC L2187: hud_text.c 488 } hud_text.c 489 } hud_text.c 490 } hud_text.c 491 _fTimer += Gameloop_fTargetFrameTime; 00000BAC D345 MOV.L L2265+8, + R3 ; _Gameloop_fTargetFra + meTime 00000BAE F268 FMOV.S @R6,FR2 00000BB0 F338 FMOV.S @R3,FR3 00000BB2 F230 FADD FR3,FR2 00000BB4 F62A FMOV.S FR2,@R6 hud_text.c 492 hud_text.c 493 if( _bDisplay ) { 00000BB6 6252 MOV.L @R5,R2 00000BB8 2228 TST R2,R2 00000BBA 891F BT L2191 hud_text.c 494 E hud_wrongway_EnableText( 0 ); 00000BBC D242 MOV.L L2265+12, + R2; _hud_wrongway_Enable + Text 00000BBE 420B JSR @R2 00000BC0 E400 MOV #0,R4 hud_text.c 495 text_SetStyle( FSTYLE_CENTER | + FSTYLE_PITCHED ); 00000BC2 4B0B JSR @R11 00000BC4 E40D MOV #13,R4 hud_text.c 496 Text_fScale = 0.60f; 00000BC6 C741 MOVA L2265+16,R0 00000BC8 F308 FMOV.S @R0,FR3 hud_text.c 497 fX = Viewport_half_hres_f + fD +x; hud_text.c 498 E text_PrintStr( fX, 130.0f + fD +y, "PUSH\n" ); 00000BCA C742 MOVA L2265+24,R0 00000BCC FD3A FMOV.S FR3,@R13 00000BCE F3FC FMOV.S FR15,FR3 00000BD0 FFA8 FMOV.S @R10,FR15 00000BD2 F5EC FMOV.S FR14,FR5 00000BD4 FF30 FADD FR3,FR15 00000BD6 F308 FMOV.S @R0,FR3 00000BD8 D43D MOV.L L2265+20,R4; L1922 00000BDA F530 FADD FR3,FR5 00000BDC 4E0B JSR @R14 00000BDE F4FC FMOV.S FR15,FR4 hud_text.c 499 E text_PrintStr( fX, 175.0f + fD +y, "THROTTLE\n" ); 00000BE0 E018 MOV #24,R0 00000BE2 D43D MOV.L L2265+28,R4; L1923 00000BE4 F5F6 FMOV.S @(R0,R15),FR5 00000BE6 4E0B JSR @R14 00000BE8 F4FC FMOV.S FR15,FR4 hud_text.c 500 E text_PrintStr( fX, 220.0f + fD +y, "FORWARD!\n" ); 00000BEA C73D MOVA L2265+36,R0 00000BEC F5EC FMOV.S FR14,FR5 00000BEE F308 FMOV.S @R0,FR3 00000BF0 D43A MOV.L L2265+32,R4; L1924 00000BF2 F530 FADD FR3,FR5 00000BF4 4E0B JSR @R14 00000BF6 F4FC FMOV.S FR15,FR4 00000BF8 A003 BRA L2179 00000BFA 0009 NOP 00000BFC L2191: hud_text.c 501 } else { hud_text.c 502 E hud_wrongway_EnableText( 1 ); 00000BFC D232 MOV.L L2265+12, + R2; _hud_wrongway_Enable + Text 00000BFE 420B JSR @R2 00000C00 E401 MOV #1,R4 00000C02 L2179: hud_text.c 503 } hud_text.c 504 } hud_text.c 505 hud_text.c 506 text_Flush(); 00000C02 7F20 ADD #32,R15 00000C04 D337 MOV.L L2265+40,R3; _text_Flush 00000C06 4F26 LDS.L @R15+,PR 00000C08 FCF9 FMOV.S @R15+,FR12 00000C0A FDF9 FMOV.S @R15+,FR13 00000C0C FEF9 FMOV.S @R15+,FR14 00000C0E FFF9 FMOV.S @R15+,FR15 00000C10 68F6 MOV.L @R15+,R8 00000C12 69F6 MOV.L @R15+,R9 00000C14 6AF6 MOV.L @R15+,R10 00000C16 6BF6 MOV.L @R15+,R11 00000C18 6CF6 MOV.L @R15+,R12 00000C1A 6DF6 MOV.L @R15+,R13 00000C1C 432B JMP @R3 00000C1E 6EF6 MOV.L @R15+,R14 00000C20 L2088: hud_text.c 507 } 00000C20 7F20 ADD #32,R15 00000C22 4F26 LDS.L @R15+,PR 00000C24 FCF9 FMOV.S @R15+,FR12 00000C26 FDF9 FMOV.S @R15+,FR13 00000C28 FEF9 FMOV.S @R15+,FR14 00000C2A FFF9 FMOV.S @R15+,FR15 00000C2C 68F6 MOV.L @R15+,R8 00000C2E 69F6 MOV.L @R15+,R9 00000C30 6AF6 MOV.L @R15+,R10 00000C32 6BF6 MOV.L @R15+,R11 00000C34 6CF6 MOV.L @R15+,R12 00000C36 6DF6 MOV.L @R15+,R13 00000C38 000B RTS 00000C3A 6EF6 MOV.L @R15+,R14 hud_text.c 508 hud_text.c 509 void hud_text_ResetSystem( void ) { 00000C3C _hud_text_ResetSystem: ; function: hud_text_ + ResetSystem ; frame size=0 hud_text.c 510 _nDrawFlags = HUD_TEXT_FLAGS_DRAW_NOTHING; 00000C3C D32A MOV.L L2265+44,R3; L1782 00000C3E E400 MOV #0,R4 00000C40 2342 MOV.L R4,@R3 hud_text.c 511 hud_text.c 512 _nTimeExtendedCounter = 0; 00000C42 D22A MOV.L L2265+48,R2; L1783 00000C44 2241 MOV.W R4,@R2 hud_text.c 513 _nBoosterCounter = 0; 00000C46 D12A MOV.L L2265+52,R1; L1784 00000C48 2141 MOV.W R4,@R1 hud_text.c 514 E _bForceOn = 0; 00000C4A D32A MOV.L L2265+56,R3; L1780 hud_text.c 515 } 00000C4C 000B RTS 00000C4E 2342 MOV.L R4,@R3 hud_text.c 516 hud_text.c 517 E void hud_text_SetFlag( int bEnable, u32 nFlag ) { 00000C50 _hud_text_SetFlag: ; function: hud_text_ + SetFlag ; frame size=12 00000C50 2FE6 MOV.L R14,@-R15 00000C52 6E53 MOV R5,R14 00000C54 2FD6 MOV.L R13,@-R15 hud_text.c 518 if( bEnable ) { 00000C56 2448 TST R4,R4 00000C58 4F22 STS.L PR,@-R15 00000C5A D523 MOV.L L2265+44,R5; L1782 00000C5C 8926 BT L2193 hud_text.c 519 /* make sure to default to the newest +booster msg */ hud_text.c 520 if( nFlag & ( HUD_TEXT_FLAGS_LBOOSTER +| HUD_TEXT_FLAGS_SBOOSTER ) ) { 00000C5E 942D MOV.W L2265,R4 ; H'6000 00000C60 62E3 MOV R14,R2 00000C62 2248 TST R4,R2 00000C64 8D09 BT/S L2194 00000C66 ED00 MOV #0,R13 hud_text.c 521 if( _nDrawFlags & ( HUD_TEXT_F +LAGS_LBOOSTER | HUD_TEXT_FLAGS_SBOOSTER ) ) { 00000C68 6152 MOV.L @R5,R1 00000C6A 2418 TST R1,R4 00000C6C 8903 BT L2195 hud_text.c 522 /* the booster msg is +currently on, turn it off */ hud_text.c 523 _nDrawFlags &= ~(HUD_T +EXT_FLAGS_LBOOSTER | HUD_TEXT_FLAGS_SBOOSTER); 00000C6E 6252 MOV.L @R5,R2 00000C70 9325 MOV.W L2265+2,R3 ; H'9FFF 00000C72 2239 AND R3,R2 00000C74 2522 MOV.L R2,@R5 00000C76 L2195: hud_text.c 524 } hud_text.c 525 /* reset our booster counter s +o that we can auto kill it */ hud_text.c 526 _nBoosterCounter = 0; 00000C76 D11E MOV.L L2265+52,R1; L1784 00000C78 21D1 MOV.W R13,@R1 00000C7A L2194: hud_text.c 527 } hud_text.c 528 hud_text.c 529 /* set our flag */ hud_text.c 530 _nDrawFlags |= nFlag; 00000C7A 6352 MOV.L @R5,R3 00000C7C 23EB OR R14,R3 00000C7E 2532 MOV.L R3,@R5 hud_text.c 531 hud_text.c 532 if( nFlag & HUD_TEXT_FLAGS_TIME_EXTEND +ED ) { 00000C80 921E MOV.W L2265+4,R2 ; H'1000 00000C82 22E8 TST R14,R2 00000C84 8904 BT L2196 hud_text.c 533 /* reset our time extened coun +ter so that we can auto kill it */ hud_text.c 534 _nTimeExtendedCounter = 0; 00000C86 D119 MOV.L L2265+48,R1; L1783 00000C88 21D1 MOV.W R13,@R1 hud_text.c 535 E hud_wrongway_EnableText( 0 ); 00000C8A D30F MOV.L L2265+12, + R3; _hud_wrongway_Enable + Text 00000C8C 430B JSR @R3 00000C8E E400 MOV #0,R4 00000C90 L2196: hud_text.c 536 } hud_text.c 537 if( nFlag & HUD_TEXT_FLAGS_PUSH_THROTT +LE ) { 00000C90 D219 MOV.L L2265+60,R2; H'00010000 00000C92 2E28 TST R2,R14 00000C94 890E BT L2198 hud_text.c 538 E _bInitialWait = 1; 00000C96 D319 MOV.L L2265+64,R3; L1812 00000C98 E101 MOV #1,R1 00000C9A 2312 MOV.L R1,@R3 hud_text.c 539 E _bDisplay = 0; 00000C9C D018 MOV.L L2265+68,R0; L1813 00000C9E 20D2 MOV.L R13,@R0 hud_text.c 540 _fTimer = 0.0f; 00000CA0 D218 MOV.L L2265+72,R2; L1810 00000CA2 F48D FLDI0 FR4 00000CA4 F24A FMOV.S FR4,@R2 hud_text.c 541 _fDisplayTime = 0.0f; 00000CA6 D318 MOV.L L2265+76,R3; L1811 00000CA8 A004 BRA L2198 00000CAA F34A FMOV.S FR4,@R3 00000CAC L2193: hud_text.c 542 } hud_text.c 543 } else { hud_text.c 544 _nDrawFlags &= ~nFlag; 00000CAC 6352 MOV.L @R5,R3 00000CAE 6EE7 NOT R14,R14 00000CB0 23E9 AND R14,R3 00000CB2 2532 MOV.L R3,@R5 00000CB4 L2198: hud_text.c 545 } hud_text.c 546 } 00000CB4 4F26 LDS.L @R15+,PR 00000CB6 6DF6 MOV.L @R15+,R13 00000CB8 000B RTS 00000CBA 6EF6 MOV.L @R15+,R14 00000CBC L2265: 00000CBC 6000 .DATA.W H'6000 00000CBE 9FFF .DATA.W H'9FFF 00000CC0 1000 .DATA.W H'1000 00000CC2 00000002 .RES.W 1 00000CC4 <00000000> .DATA.L _Gameloop_fTargetFrameTime 00000CC8 <00000000> .DATA.L _hud_wrongway_EnableText 00000CCC 3F199999 .DATA.L H'3F199999 00000CD0 <00000000> .DATA.L L1922 00000CD4 43020000 .DATA.L H'43020000 00000CD8 <00000000> .DATA.L L1923 00000CDC <00000000> .DATA.L L1924 00000CE0 435C0000 .DATA.L H'435C0000 00000CE4 <00000000> .DATA.L _text_Flush 00000CE8 <00000000> .DATA.L L1782 00000CEC <00000000> .DATA.L L1783 00000CF0 <00000000> .DATA.L L1784 00000CF4 <00000000> .DATA.L L1780 00000CF8 00010000 .DATA.L H'00010000 00000CFC <00000000> .DATA.L L1812 00000D00 <00000000> .DATA.L L1813 00000D04 <00000000> .DATA.L L1810 00000D08 <00000000> .DATA.L L1811 hud_text.c 547 hud_text.c 548 E void hud_text_SetupSplitTime( int bNewBestTime, f32 fB +estTime, f32 fMyTime ) { 00000D0C _hud_text_SetupSplitTime: ; function: hud_text_ + SetupSplitTime ; frame size=0 hud_text.c 549 _nCheckPtCounter = 0; hud_text.c 550 hud_text.c 551 _fBestTime = fBestTime; hud_text.c 552 _fYourTime = fMyTime; hud_text.c 553 E _fBestX1 = 570.0f; 00000D0C C721 MOVA L2266+14,R0 00000D0E D51E MOV.L L2266+2,R5 ; L1807 00000D10 E600 MOV #0,R6 00000D12 2562 MOV.L R6,@R5 00000D14 D31D MOV.L L2266+6,R3 ; L1804 00000D16 F34A FMOV.S FR4,@R3 00000D18 D21D MOV.L L2266+10,R2; L1803 00000D1A F25A FMOV.S FR5,@R2 00000D1C F408 FMOV.S @R0,FR4 00000D1E D11E MOV.L L2266+18,R1; L1799 00000D20 F14A FMOV.S FR4,@R1 hud_text.c 554 E _fBestX2 = 570.0f; 00000D22 D31E MOV.L L2266+22,R3; L1800 00000D24 F34A FMOV.S FR4,@R3 hud_text.c 555 E _fYourX1 = 570.0f; 00000D26 D21E MOV.L L2266+26,R2; L1801 00000D28 F24A FMOV.S FR4,@R2 hud_text.c 556 E _fYourX2 = 570.0f; hud_text.c 557 _nCheckPtCounter = 0; hud_text.c 558 _bNewHighScore = bNewBestTime; hud_text.c 559 E _bSlideOn = 1; 00000D2A E201 MOV #1,R2 00000D2C D11D MOV.L L2266+30,R1; L1802 00000D2E F14A FMOV.S FR4,@R1 00000D30 2562 MOV.L R6,@R5 00000D32 D31D MOV.L L2266+34,R3; L1805 00000D34 2342 MOV.L R4,@R3 hud_text.c 560 hud_text.c 561 E hud_text_SetFlag( 1, HUD_TEXT_FLAGS_SPLIT_TIME + ); 00000D36 6423 MOV R2,R4 00000D38 D01C MOV.L L2266+38,R0; L1806 00000D3A 2022 MOV.L R2,@R0 00000D3C D51C MOV.L L2266+42,R5; H'00008000 00000D3E AF87 BRA _hud_text_SetFlag 00000D40 0009 NOP hud_text.c 562 } hud_text.c 563 hud_text.c 564 void hud_text_SetupFinishStats( f32 fBestTime, char cI +nitial1, char cInitial2, char cInitial3 ) { 00000D42 _hud_text_SetupFinishStats: ; function: hud_text_ + SetupFinishStats ; frame size=0 hud_text.c 565 _fBestFinishTime = fBestTime; 00000D42 D31C MOV.L L2266+46,R3; L1808 00000D44 F34A FMOV.S FR4,@R3 hud_text.c 566 _pszBestTimeInitials[0] = cInitial1; 00000D46 D71C MOV.L L2266+50,R7; L1809 00000D48 2740 MOV.B R4,@R7 hud_text.c 567 _pszBestTimeInitials[1] = cInitial2; 00000D4A 6053 MOV R5,R0 00000D4C 0009 NOP 00000D4E 8071 MOV.B R0,@(1,R7) hud_text.c 568 _pszBestTimeInitials[2] = cInitial3; 00000D50 6063 MOV R6,R0 00000D52 0009 NOP 00000D54 8072 MOV.B R0,@(2,R7) hud_text.c 569 _pszBestTimeInitials[3] = 0; 00000D56 E000 MOV #0,R0 00000D58 8073 MOV.B R0,@(3,R7) hud_text.c 570 hud_text.c 571 E hud_text_SetFlag( 1, HUD_TEXT_FLAGS_FINISH_STA +TS ); 00000D5A 9514 MOV.W L2266,R5 ; H'0100 00000D5C AF78 BRA _hud_text_SetFlag 00000D5E E401 MOV #1,R4 hud_text.c 572 } hud_text.c 573 hud_text.c 574 void hud_text_ForceOn( void ) { 00000D60 _hud_text_ForceOn: ; function: hud_text_ + ForceOn ; frame size=0 hud_text.c 575 E _bForceOn = 1; 00000D60 D216 MOV.L L2266+54,R2; L1780 00000D62 E301 MOV #1,R3 hud_text.c 576 } 00000D64 000B RTS 00000D66 2232 MOV.L R3,@R2 hud_text.c 577 hud_text.c 578 /*================== */ hud_text.c 579 /* private functions */ hud_text.c 580 hud_text.c 581 E static int _Flash2On2Off( void ) { hud_text.c 582 if( !_bForceOn ) { hud_text.c 583 return ( (Gameloop_nFrameCounter & 0x2 +) ); hud_text.c 584 } else { hud_text.c 585 E return 1; hud_text.c 586 } hud_text.c 587 } hud_text.c 588 hud_text.c 589 E static int _Flash3On3Off( void ) { 00000D68 L1815: ; function: _Flash3On + 3Off ; frame size=0 hud_text.c 590 if( !_bForceOn ) { 00000D68 D014 MOV.L L2266+54,R0; L1780 00000D6A 6102 MOV.L @R0,R1 00000D6C 2118 TST R1,R1 00000D6E 8B07 BF L2199 hud_text.c 591 return ( (Gameloop_nFrameCounter & 0x5 +) < 0x3 ); 00000D70 D113 MOV.L L2266+58, + R1; _Gameloop_nFrameCoun + ter 00000D72 E303 MOV #3,R3 00000D74 6012 MOV.L @R1,R0 00000D76 C905 AND #5,R0 00000D78 3032 CMP/HS R3,R0 00000D7A 0029 MOVT R0 00000D7C 000B RTS 00000D7E CA01 XOR #1,R0 00000D80 L2199: hud_text.c 592 } else { hud_text.c 593 E return 1; 00000D80 E001 MOV #1,R0 hud_text.c 594 } hud_text.c 595 } 00000D82 L2200: 00000D82 000B RTS 00000D84 0009 NOP 00000D86 L2266: 00000D86 0100 .DATA.W H'0100 00000D88 <00000000> .DATA.L L1807 00000D8C <00000000> .DATA.L L1804 00000D90 <00000000> .DATA.L L1803 00000D94 440E8000 .DATA.L H'440E8000 00000D98 <00000000> .DATA.L L1799 00000D9C <00000000> .DATA.L L1800 00000DA0 <00000000> .DATA.L L1801 00000DA4 <00000000> .DATA.L L1802 00000DA8 <00000000> .DATA.L L1805 00000DAC <00000000> .DATA.L L1806 00000DB0 00008000 .DATA.L H'00008000 00000DB4 <00000000> .DATA.L L1808 00000DB8 <00000000> .DATA.L L1809 00000DBC <00000000> .DATA.L L1780 00000DC0 <00000000> .DATA.L _Gameloop_nFrameCounter hud_text.c 596 hud_text.c 597 E static int _Flash4On4Off( void ) { hud_text.c 598 if( !_bForceOn ) { hud_text.c 599 return ( (Gameloop_nFrameCounter & 0x4 +) ); hud_text.c 600 } else { hud_text.c 601 E return 1; hud_text.c 602 } hud_text.c 603 } hud_text.c 604 hud_text.c 605 E static int _Flash8On8Off( void ) { hud_text.c 606 if( !_bForceOn ) { hud_text.c 607 return ( (Gameloop_nFrameCounter & 0x8 +) ); hud_text.c 608 } else { hud_text.c 609 E return 1; hud_text.c 610 } hud_text.c 611 } hud_text.c 612 hud_text.c 613 static void _DrawTime( f32 fTime, f32 fX, f32 fY, f32 +fScale ) { 00000DC4 L1818: ; function: _DrawTime ; frame size=92 ; used runtime librar + y name: ; __divlu 00000DC4 2FE6 MOV.L R14,@-R15 00000DC6 2FD6 MOV.L R13,@-R15 00000DC8 2FC6 MOV.L R12,@-R15 00000DCA 2FB6 MOV.L R11,@-R15 00000DCC 2FA6 MOV.L R10,@-R15 00000DCE 2F96 MOV.L R9,@-R15 00000DD0 2F86 MOV.L R8,@-R15 00000DD2 FFFB FMOV.S FR15,@-R15 00000DD4 FFEB FMOV.S FR14,@-R15 00000DD6 FFDB FMOV.S FR13,@-R15 00000DD8 FFCB FMOV.S FR12,@-R15 hud_text.c 614 u32 nMin, nSecs, nCSecs, nDigit[6], nTemp, i; hud_text.c 615 hud_text.c 616 if( !_bTexturesLoaded ) { 00000DDA D2A5 MOV.L L2267,R2 ; L1781 00000DDC 4F22 STS.L PR,@-R15 00000DDE 6322 MOV.L @R2,R3 00000DE0 FF5C FMOV.S FR5,FR15 00000DE2 2338 TST R3,R3 00000DE4 FC6C FMOV.S FR6,FR12 00000DE6 7FD4 ADD #-44,R15 00000DE8 8F02 BF/S L2268 00000DEA FD7C FMOV.S FR7,FR13 00000DEC A198 BRA L2203 00000DEE 0009 NOP 00000DF0 L2268: hud_text.c 617 return; hud_text.c 618 } hud_text.c 619 E nMin = ( (int)( (fTime)*(1.0f/60.0f) ) ); 00000DF0 C7A0 MOVA L2267+4,R0 00000DF2 F24C FMOV.S FR4,FR2 00000DF4 F308 FMOV.S @R0,FR3 00000DF6 F232 FMUL FR3,FR2 00000DF8 F23D FTRC FR2,FPUL 00000DFA 055A STS FPUL,R5 hud_text.c 620 fTime -= ((f32)nMin * 60.0f); 00000DFC 455A LDS R5,FPUL 00000DFE 4511 CMP/PZ R5 00000E00 8D04 BT/S L2204 00000E02 F22D FLOAT FPUL,FR2 00000E04 D39C MOV.L L2267+8,R3 ; H'4F800000 00000E06 435A LDS R3,FPUL 00000E08 F10D FSTS FPUL,FR1 00000E0A F210 FADD FR1,FR2 00000E0C L2204: 00000E0C C79B MOVA L2267+12,R0 00000E0E F108 FMOV.S @R0,FR1 00000E10 F212 FMUL FR1,FR2 00000E12 F421 FSUB FR2,FR4 hud_text.c 621 E nSecs = ( (int)( (fTime) ) ); 00000E14 F43D FTRC FR4,FPUL 00000E16 045A STS FPUL,R4 hud_text.c 622 fTime -= ((f32)nSecs); 00000E18 445A LDS R4,FPUL 00000E1A 4411 CMP/PZ R4 00000E1C 8D04 BT/S L2205 00000E1E F22D FLOAT FPUL,FR2 00000E20 D395 MOV.L L2267+8,R3 ; H'4F800000 00000E22 435A LDS R3,FPUL 00000E24 F00D FSTS FPUL,FR0 00000E26 F200 FADD FR0,FR2 00000E28 L2205: 00000E28 F421 FSUB FR2,FR4 hud_text.c 623 E nCSecs = ( (int)( (fTime)*100.0f) ); 00000E2A C795 MOVA L2267+16,R0 00000E2C F208 FMOV.S @R0,FR2 hud_text.c 624 hud_text.c 625 E { if((nMin)>(99)) nMin=(99); }; 00000E2E E763 MOV #99,R7 00000E30 3576 CMP/HI R7,R5 00000E32 F04C FMOV.S FR4,FR0 00000E34 F022 FMUL FR2,FR0 00000E36 F03D FTRC FR0,FPUL 00000E38 8F01 BF/S L2206 00000E3A 065A STS FPUL,R6 00000E3C 6573 MOV R7,R5 00000E3E L2206: hud_text.c 626 E { if((nSecs)>(59)) nSecs=(59); }; 00000E3E E23B MOV #59,R2 00000E40 3426 CMP/HI R2,R4 00000E42 8B00 BF L2207 00000E44 6423 MOV R2,R4 00000E46 L2207: hud_text.c 627 E { if((nCSecs)>(99)) nCSecs=(99); }; 00000E46 3676 CMP/HI R7,R6 00000E48 8B00 BF L2208 00000E4A 6673 MOV R7,R6 00000E4C L2208: hud_text.c 628 hud_text.c 629 nTemp = (u32)(nMin/10); 00000E4C D38D MOV.L L2267+20,R3; __divlu 00000E4E 6153 MOV R5,R1 00000E50 E70A MOV #10,R7 00000E52 430B JSR @R3 00000E54 6073 MOV R7,R0 00000E56 6E03 MOV R0,R14 hud_text.c 630 nDigit[0] = nTemp; hud_text.c 631 nMin -= (nTemp * 10); 00000E58 63E3 MOV R14,R3 00000E5A 4E08 SHLL2 R14 00000E5C 6CF3 MOV R15,R12 00000E5E 3E3C ADD R3,R14 hud_text.c 632 nDigit[1] = nMin; hud_text.c 633 hud_text.c 634 nTemp = (u32)(nSecs/10); 00000E60 6143 MOV R4,R1 00000E62 4E00 SHLL R14 00000E64 35E8 SUB R14,R5 00000E66 7C14 ADD #20,R12 00000E68 2C02 MOV.L R0,@R12 00000E6A 1C51 MOV.L R5,@(4,R12) 00000E6C D285 MOV.L L2267+20,R2; __divlu 00000E6E 420B JSR @R2 00000E70 6073 MOV R7,R0 00000E72 6503 MOV R0,R5 hud_text.c 635 nDigit[2] = nTemp; hud_text.c 636 nSecs -= (nTemp * 10); 00000E74 6353 MOV R5,R3 00000E76 4508 SHLL2 R5 00000E78 1C02 MOV.L R0,@(8,R12) 00000E7A 353C ADD R3,R5 hud_text.c 637 nDigit[3] = nSecs; hud_text.c 638 hud_text.c 639 nTemp = (u32)(nCSecs/10); 00000E7C 6163 MOV R6,R1 00000E7E 4500 SHLL R5 00000E80 3458 SUB R5,R4 00000E82 1C43 MOV.L R4,@(12,R12) 00000E84 D27F MOV.L L2267+20,R2; __divlu 00000E86 420B JSR @R2 00000E88 6073 MOV R7,R0 hud_text.c 640 nDigit[4] = nTemp; 00000E8A 1C04 MOV.L R0,@(16,R12) 00000E8C 6403 MOV R0,R4 00000E8E C77E MOVA L2267+24,R0 hud_text.c 641 nCSecs -= (nTemp * 10); 00000E90 6343 MOV R4,R3 00000E92 4408 SHLL2 R4 00000E94 343C ADD R3,R4 00000E96 4400 SHLL R4 00000E98 3648 SUB R4,R6 hud_text.c 642 nDigit[5] = nCSecs; hud_text.c 643 hud_text.c 644 for( i=0; i < 6; i++ ) { 00000E9A EE00 MOV #0,R14 00000E9C 1C65 MOV.L R6,@(20,R12) 00000E9E F308 FMOV.S @R0,FR3 00000EA0 E010 MOV #16,R0 00000EA2 F2DC FMOV.S FR13,FR2 00000EA4 F232 FMUL FR3,FR2 00000EA6 FF27 FMOV.S FR2,@(R0,R15) 00000EA8 C779 MOVA L2267+32,R0 00000EAA F108 FMOV.S @R0,FR1 00000EAC E00C MOV #12,R0 00000EAE F0DC FMOV.S FR13,FR0 00000EB0 F012 FMUL FR1,FR0 00000EB2 DB76 MOV.L L2267+28,R11; L1785 00000EB4 69B3 MOV R11,R9 00000EB6 6AB3 MOV R11,R10 00000EB8 7A28 ADD #40,R10 00000EBA FF07 FMOV.S FR0,@(R0,R15) 00000EBC C775 MOVA L2267+36,R0 00000EBE F308 FMOV.S @R0,FR3 00000EC0 E008 MOV #8,R0 00000EC2 F2DC FMOV.S FR13,FR2 00000EC4 792C ADD #44,R9 00000EC6 F232 FMUL FR3,FR2 00000EC8 FF27 FMOV.S FR2,@(R0,R15) 00000ECA C773 MOVA L2267+40,R0 00000ECC F0DC FMOV.S FR13,FR0 00000ECE F108 FMOV.S @R0,FR1 00000ED0 E004 MOV #4,R0 00000ED2 E802 MOV #2,R8 00000ED4 F012 FMUL FR1,FR0 00000ED6 FF07 FMOV.S FR0,@(R0,R15) 00000ED8 C770 MOVA L2267+44,R0 00000EDA F308 FMOV.S @R0,FR3 00000EDC F2DC FMOV.S FR13,FR2 00000EDE F232 FMUL FR3,FR2 00000EE0 FF2A FMOV.S FR2,@R15 00000EE2 DD6F MOV.L L2267+48,R13; _mesh3d_DrawOrtho 00000EE4 FE9D FLDI1 FR14 00000EE6 L2210: hud_text.c 645 E mesh3d_DrawOrtho( _paDigits[ nDigit[i] + ], fX, fY, 1.0f, 0, fScale ); 00000EE6 F5CC FMOV.S FR12,FR5 00000EE8 E500 MOV #0,R5 00000EEA F4FC FMOV.S FR15,FR4 00000EEC F6EC FMOV.S FR14,FR6 00000EEE F7DC FMOV.S FR13,FR7 00000EF0 60E3 MOV R14,R0 00000EF2 0009 NOP 00000EF4 4008 SHLL2 R0 00000EF6 00CE MOV.L @(R0,R12),R0 00000EF8 4008 SHLL2 R0 00000EFA 4D0B JSR @R13 00000EFC 04BE MOV.L @(R0,R11),R4 hud_text.c 646 hud_text.c 647 if( i == 1 ) { 00000EFE 60E3 MOV R14,R0 00000F00 0009 NOP 00000F02 8801 CMP/EQ #1,R0 00000F04 8B0D BF L2211 hud_text.c 648 /* colon spacing */ hud_text.c 649 fX += (9.0f * fScale); 00000F06 E010 MOV #16,R0 hud_text.c 650 E mesh3d_DrawOrtho( _paDigits[10 +], fX, fY, 1.0f, 0, fScale ); 00000F08 F5CC FMOV.S FR12,FR5 00000F0A F3F6 FMOV.S @(R0,R15),FR3 00000F0C E500 MOV #0,R5 00000F0E F6EC FMOV.S FR14,FR6 00000F10 FF30 FADD FR3,FR15 00000F12 F7DC FMOV.S FR13,FR7 00000F14 F4FC FMOV.S FR15,FR4 00000F16 4D0B JSR @R13 00000F18 64A2 MOV.L @R10,R4 hud_text.c 651 fX += (11.0f * fScale); 00000F1A E00C MOV #12,R0 00000F1C F3F6 FMOV.S @(R0,R15),FR3 00000F1E A013 BRA L2212 00000F20 FF30 FADD FR3,FR15 00000F22 L2211: hud_text.c 652 } else if( i == 3 ) { 00000F22 60E3 MOV R14,R0 00000F24 0009 NOP 00000F26 8803 CMP/EQ #3,R0 00000F28 8B0C BF L2213 hud_text.c 653 /* period spacing */ hud_text.c 654 fX += (8.0f * fScale); 00000F2A E008 MOV #8,R0 hud_text.c 655 E mesh3d_DrawOrtho( _paDigits[11 +], fX, fY, 1.0f, 0, fScale ); 00000F2C F5CC FMOV.S FR12,FR5 00000F2E F3F6 FMOV.S @(R0,R15),FR3 00000F30 E500 MOV #0,R5 00000F32 F6EC FMOV.S FR14,FR6 00000F34 FF30 FADD FR3,FR15 00000F36 F7DC FMOV.S FR13,FR7 00000F38 F4FC FMOV.S FR15,FR4 00000F3A 4D0B JSR @R13 00000F3C 6492 MOV.L @R9,R4 hud_text.c 656 fX += (13.0f * fScale); 00000F3E E004 MOV #4,R0 00000F40 A001 BRA L2241 00000F42 F3F6 FMOV.S @(R0,R15),FR3 00000F44 L2213: hud_text.c 657 } else { hud_text.c 658 /* reg spacing */ hud_text.c 659 fX += (16.0f * fScale); 00000F44 F3F8 FMOV.S @R15,FR3 00000F46 L2241: 00000F46 FF30 FADD FR3,FR15 00000F48 L2212: 00000F48 F6EC FMOV.S FR14,FR6 00000F4A 7E01 ADD #1,R14 00000F4C F5CC FMOV.S FR12,FR5 00000F4E E500 MOV #0,R5 00000F50 F4FC FMOV.S FR15,FR4 00000F52 F7DC FMOV.S FR13,FR7 00000F54 60E3 MOV R14,R0 00000F56 0009 NOP 00000F58 4008 SHLL2 R0 00000F5A 00CE MOV.L @(R0,R12),R0 00000F5C 4008 SHLL2 R0 00000F5E 4D0B JSR @R13 00000F60 04BE MOV.L @(R0,R11),R4 00000F62 60E3 MOV R14,R0 00000F64 0009 NOP 00000F66 8801 CMP/EQ #1,R0 00000F68 8B0D BF L2215 00000F6A E010 MOV #16,R0 00000F6C F5CC FMOV.S FR12,FR5 00000F6E F3F6 FMOV.S @(R0,R15),FR3 00000F70 E500 MOV #0,R5 00000F72 F6EC FMOV.S FR14,FR6 00000F74 FF30 FADD FR3,FR15 00000F76 F7DC FMOV.S FR13,FR7 00000F78 F4FC FMOV.S FR15,FR4 00000F7A 4D0B JSR @R13 00000F7C 64A2 MOV.L @R10,R4 00000F7E E00C MOV #12,R0 00000F80 F3F6 FMOV.S @(R0,R15),FR3 00000F82 A013 BRA L2216 00000F84 FF30 FADD FR3,FR15 00000F86 L2215: 00000F86 60E3 MOV R14,R0 00000F88 0009 NOP 00000F8A 8803 CMP/EQ #3,R0 00000F8C 8B0C BF L2217 00000F8E E008 MOV #8,R0 00000F90 F5CC FMOV.S FR12,FR5 00000F92 F3F6 FMOV.S @(R0,R15),FR3 00000F94 E500 MOV #0,R5 00000F96 F6EC FMOV.S FR14,FR6 00000F98 FF30 FADD FR3,FR15 00000F9A F7DC FMOV.S FR13,FR7 00000F9C F4FC FMOV.S FR15,FR4 00000F9E 4D0B JSR @R13 00000FA0 6492 MOV.L @R9,R4 00000FA2 E004 MOV #4,R0 00000FA4 A001 BRA L2242 00000FA6 F3F6 FMOV.S @(R0,R15),FR3 00000FA8 L2217: 00000FA8 F3F8 FMOV.S @R15,FR3 00000FAA L2242: 00000FAA FF30 FADD FR3,FR15 00000FAC L2216: 00000FAC F6EC FMOV.S FR14,FR6 00000FAE 7E01 ADD #1,R14 00000FB0 F5CC FMOV.S FR12,FR5 00000FB2 E500 MOV #0,R5 00000FB4 F4FC FMOV.S FR15,FR4 00000FB6 F7DC FMOV.S FR13,FR7 00000FB8 60E3 MOV R14,R0 00000FBA 0009 NOP 00000FBC 4008 SHLL2 R0 00000FBE 00CE MOV.L @(R0,R12),R0 00000FC0 4008 SHLL2 R0 00000FC2 4D0B JSR @R13 00000FC4 04BE MOV.L @(R0,R11),R4 00000FC6 60E3 MOV R14,R0 00000FC8 0009 NOP 00000FCA 8801 CMP/EQ #1,R0 00000FCC 8B0D BF L2219 00000FCE E010 MOV #16,R0 00000FD0 F5CC FMOV.S FR12,FR5 00000FD2 F3F6 FMOV.S @(R0,R15),FR3 00000FD4 E500 MOV #0,R5 00000FD6 F6EC FMOV.S FR14,FR6 00000FD8 FF30 FADD FR3,FR15 00000FDA F7DC FMOV.S FR13,FR7 00000FDC F4FC FMOV.S FR15,FR4 00000FDE 4D0B JSR @R13 00000FE0 64A2 MOV.L @R10,R4 00000FE2 E00C MOV #12,R0 00000FE4 F3F6 FMOV.S @(R0,R15),FR3 00000FE6 A013 BRA L2220 00000FE8 FF30 FADD FR3,FR15 00000FEA L2219: 00000FEA 60E3 MOV R14,R0 00000FEC 0009 NOP 00000FEE 8803 CMP/EQ #3,R0 00000FF0 8B0C BF L2221 00000FF2 E008 MOV #8,R0 00000FF4 F5CC FMOV.S FR12,FR5 00000FF6 F3F6 FMOV.S @(R0,R15),FR3 00000FF8 E500 MOV #0,R5 00000FFA F6EC FMOV.S FR14,FR6 00000FFC FF30 FADD FR3,FR15 00000FFE F7DC FMOV.S FR13,FR7 00001000 F4FC FMOV.S FR15,FR4 00001002 4D0B JSR @R13 00001004 6492 MOV.L @R9,R4 00001006 E004 MOV #4,R0 00001008 A001 BRA L2243 0000100A F3F6 FMOV.S @(R0,R15),FR3 0000100C L2221: 0000100C F3F8 FMOV.S @R15,FR3 0000100E L2243: 0000100E FF30 FADD FR3,FR15 00001010 L2220: 00001010 F6EC FMOV.S FR14,FR6 00001012 7E01 ADD #1,R14 00001014 F5CC FMOV.S FR12,FR5 00001016 E500 MOV #0,R5 00001018 F4FC FMOV.S FR15,FR4 0000101A F7DC FMOV.S FR13,FR7 0000101C 60E3 MOV R14,R0 0000101E 0009 NOP 00001020 4008 SHLL2 R0 00001022 00CE MOV.L @(R0,R12),R0 00001024 4008 SHLL2 R0 00001026 4D0B JSR @R13 00001028 04BE MOV.L @(R0,R11),R4 0000102A 60E3 MOV R14,R0 0000102C 0009 NOP 0000102E 8801 CMP/EQ #1,R0 00001030 8B0D BF L2223 00001032 E010 MOV #16,R0 00001034 F5CC FMOV.S FR12,FR5 00001036 F3F6 FMOV.S @(R0,R15),FR3 00001038 E500 MOV #0,R5 0000103A F6EC FMOV.S FR14,FR6 0000103C FF30 FADD FR3,FR15 0000103E F7DC FMOV.S FR13,FR7 00001040 F4FC FMOV.S FR15,FR4 00001042 4D0B JSR @R13 00001044 64A2 MOV.L @R10,R4 00001046 E00C MOV #12,R0 00001048 F3F6 FMOV.S @(R0,R15),FR3 0000104A A02D BRA L2224 0000104C FF30 FADD FR3,FR15 0000104E L2223: 0000104E 60E3 MOV R14,R0 00001050 0009 NOP 00001052 8803 CMP/EQ #3,R0 00001054 8B26 BF L2225 00001056 E008 MOV #8,R0 00001058 F5CC FMOV.S FR12,FR5 0000105A F3F6 FMOV.S @(R0,R15),FR3 0000105C E500 MOV #0,R5 0000105E F6EC FMOV.S FR14,FR6 00001060 FF30 FADD FR3,FR15 00001062 F7DC FMOV.S FR13,FR7 00001064 F4FC FMOV.S FR15,FR4 00001066 4D0B JSR @R13 00001068 6492 MOV.L @R9,R4 0000106A E004 MOV #4,R0 0000106C A01B BRA L2244 0000106E F3F6 FMOV.S @(R0,R15),FR3 00001070 L2267: 00001070 <00000000> .DATA.L L1781 00001074 3C888888 .DATA.L H'3C888888 00001078 4F800000 .DATA.L H'4F800000 0000107C 42700000 .DATA.L H'42700000 00001080 42C80000 .DATA.L H'42C80000 00001084 <00000000> .DATA.L __divlu 00001088 41100000 .DATA.L H'41100000 0000108C <00000000> .DATA.L L1785 00001090 41300000 .DATA.L H'41300000 00001094 41000000 .DATA.L H'41000000 00001098 41500000 .DATA.L H'41500000 0000109C 41800000 .DATA.L H'41800000 000010A0 <00000000> .DATA.L _mesh3d_DrawOrtho 000010A4 L2225: 000010A4 F3F8 FMOV.S @R15,FR3 000010A6 L2244: 000010A6 FF30 FADD FR3,FR15 000010A8 L2224: 000010A8 7E01 ADD #1,R14 000010AA 3E82 CMP/HS R8,R14 000010AC 8901 BT L2269 000010AE AF1A BRA L2210 000010B0 0009 NOP 000010B2 L2269: 000010B2 E806 MOV #6,R8 000010B4 3E82 CMP/HS R8,R14 000010B6 8933 BT L2203 000010B8 L2228: 000010B8 F5CC FMOV.S FR12,FR5 000010BA E500 MOV #0,R5 000010BC F4FC FMOV.S FR15,FR4 000010BE F6EC FMOV.S FR14,FR6 000010C0 F7DC FMOV.S FR13,FR7 000010C2 60E3 MOV R14,R0 000010C4 0009 NOP 000010C6 4008 SHLL2 R0 000010C8 00CE MOV.L @(R0,R12),R0 000010CA 4008 SHLL2 R0 000010CC 4D0B JSR @R13 000010CE 04BE MOV.L @(R0,R11),R4 000010D0 60E3 MOV R14,R0 000010D2 0009 NOP 000010D4 8801 CMP/EQ #1,R0 000010D6 8B0D BF L2229 000010D8 E010 MOV #16,R0 000010DA F5CC FMOV.S FR12,FR5 000010DC F3F6 FMOV.S @(R0,R15),FR3 000010DE E500 MOV #0,R5 000010E0 F6EC FMOV.S FR14,FR6 000010E2 FF30 FADD FR3,FR15 000010E4 F7DC FMOV.S FR13,FR7 000010E6 F4FC FMOV.S FR15,FR4 000010E8 4D0B JSR @R13 000010EA 64A2 MOV.L @R10,R4 000010EC E00C MOV #12,R0 000010EE F3F6 FMOV.S @(R0,R15),FR3 000010F0 A013 BRA L2230 000010F2 FF30 FADD FR3,FR15 000010F4 L2229: 000010F4 60E3 MOV R14,R0 000010F6 0009 NOP 000010F8 8803 CMP/EQ #3,R0 000010FA 8B0C BF L2231 000010FC E008 MOV #8,R0 000010FE F5CC FMOV.S FR12,FR5 00001100 F3F6 FMOV.S @(R0,R15),FR3 00001102 E500 MOV #0,R5 00001104 F6EC FMOV.S FR14,FR6 00001106 FF30 FADD FR3,FR15 00001108 F7DC FMOV.S FR13,FR7 0000110A F4FC FMOV.S FR15,FR4 0000110C 4D0B JSR @R13 0000110E 6492 MOV.L @R9,R4 00001110 E004 MOV #4,R0 00001112 A001 BRA L2245 00001114 F3F6 FMOV.S @(R0,R15),FR3 00001116 L2231: 00001116 F3F8 FMOV.S @R15,FR3 00001118 L2245: 00001118 FF30 FADD FR3,FR15 0000111A L2230: 0000111A 7E01 ADD #1,R14 0000111C 3E82 CMP/HS R8,R14 0000111E 8BCB BF L2228 00001120 L2203: hud_text.c 660 } hud_text.c 661 } hud_text.c 662 } 00001120 7F2C ADD #44,R15 00001122 4F26 LDS.L @R15+,PR 00001124 FCF9 FMOV.S @R15+,FR12 00001126 FDF9 FMOV.S @R15+,FR13 00001128 FEF9 FMOV.S @R15+,FR14 0000112A FFF9 FMOV.S @R15+,FR15 0000112C 68F6 MOV.L @R15+,R8 0000112E 69F6 MOV.L @R15+,R9 00001130 6AF6 MOV.L @R15+,R10 00001132 6BF6 MOV.L @R15+,R11 00001134 6CF6 MOV.L @R15+,R12 00001136 6DF6 MOV.L @R15+,R13 00001138 000B RTS 0000113A 6EF6 MOV.L @R15+,R14 D 00000000 L1786: ; static: _aLoadTable 00000000 <00000000> .DATA.L L1785,L1787,H'00000004+L1785, <00000000> + L1788,H'00000008+L1785,L1789, <00000004> + H'0000000C+L1785,L1790, <00000000> + H'00000010+L1785,L1791, <00000008> + H'00000014+L1785,L1792, <00000000> + H'00000018+L1785,L1793, <0000000C> + H'0000001C+L1785,L1794, <00000000> + H'00000020+L1785,L1795, <00000010> + H'00000024+L1785,L1796, <00000000> + H'00000028+L1785,L1797, <00000014> + H'0000002C+L1785,L1798 <00000000> <00000018> <00000000> <0000001C> <00000000> <00000020> <00000000> <00000024> <00000000> <00000028> <00000000> <0000002C> <00000000> 00000060 0000000000 .DATA.L H'00000000,H'00000000 000000 C 00000000 L1834: 00000000 33 .SDATA "3" 00000001 0A00 .DATA.B H'0A,H'00 00000003 00000001 .RES.B 1 00000004 L1837: 00000004 32 .SDATA "2" 00000005 0A00 .DATA.B H'0A,H'00 00000007 00000001 .RES.B 1 00000008 L1840: 00000008 31 .SDATA "1" 00000009 0A00 .DATA.B H'0A,H'00 0000000B 00000001 .RES.B 1 0000000C L1842: 0000000C 474F21 .SDATA "GO!" 0000000F 0A00 .DATA.B H'0A,H'00 00000011 00000001 .RES.B 1 00000012 00000002 .RES.W 1 00000014 L1844: 00000014 4F46 .SDATA "OF" 00000016 0A00 .DATA.B H'0A,H'00 00000018 L1848: 00000018 3030 .SDATA "00" 0000001A 0A00 .DATA.B H'0A,H'00 0000001C L1853: 0000001C 302564 .SDATA "0%d" 0000001F 0A00 .DATA.B H'0A,H'00 00000021 00000001 .RES.B 1 00000022 00000002 .RES.W 1 00000024 L1857: 00000024 54494D45 .SDATA "TIME" 00000028 0A00 .DATA.B H'0A,H'00 0000002A 00000002 .RES.W 1 0000002C L1858: 0000002C 4558504952 .SDATA "EXPIRED!" 454421 00000034 0A00 .DATA.B H'0A,H'00 00000036 00000002 .RES.W 1 00000038 L1861: 00000038 57494E4E45 .SDATA "WINNER!" 5221 0000003F 0A00 .DATA.B H'0A,H'00 00000041 00000001 .RES.B 1 00000042 00000002 .RES.W 1 00000044 L1867: 00000044 455854454E .SDATA "EXTENDED!" 44454421 0000004D 0A00 .DATA.B H'0A,H'00 0000004F 00000001 .RES.B 1 00000050 L1872: 00000050 424F4F5354 .SDATA "BOOSTER +%d SECS!" 4552202B25 6420534543 5321 00000061 0A00 .DATA.B H'0A,H'00 00000063 00000001 .RES.B 1 00000064 L1898: 00000064 4245535420 .SDATA "BEST TIME" 54494D45 0000006D 0A00 .DATA.B H'0A,H'00 0000006F 00000001 .RES.B 1 00000070 L1899: 00000070 594F555220 .SDATA "YOUR TIME" 54494D45 00000079 0A00 .DATA.B H'0A,H'00 0000007B 00000001 .RES.B 1 0000007C L1903: 0000007C 5354 .SDATA "ST" 0000007E 0A00 .DATA.B H'0A,H'00 00000080 L1904: 00000080 4E44 .SDATA "ND" 00000082 0A00 .DATA.B H'0A,H'00 00000084 L1905: 00000084 5244 .SDATA "RD" 00000086 0A00 .DATA.B H'0A,H'00 00000088 L1906: 00000088 5448 .SDATA "TH" 0000008A 0A00 .DATA.B H'0A,H'00 0000008C L1922: 0000008C 50555348 .SDATA "PUSH" 00000090 0A00 .DATA.B H'0A,H'00 00000092 00000002 .RES.W 1 00000094 L1923: 00000094 5448524F54 .SDATA "THROTTLE" 544C45 0000009C 0A00 .DATA.B H'0A,H'00 0000009E 00000002 .RES.W 1 000000A0 L1924: 000000A0 464F525741 .SDATA "FORWARD!" 524421 000000A8 0A00 .DATA.B H'0A,H'00 000000AA 00000002 .RES.W 1 000000AC L1787: 000000AC 4748575449 .SDATA "GHWTIME__H0" 4D455F5F48 30 000000B7 00 .DATA.B H'00 000000B8 L1788: 000000B8 4748575449 .SDATA "GHWTIME__H1" 4D455F5F48 31 000000C3 00 .DATA.B H'00 000000C4 L1789: 000000C4 4748575449 .SDATA "GHWTIME__H2" 4D455F5F48 32 000000CF 00 .DATA.B H'00 000000D0 L1790: 000000D0 4748575449 .SDATA "GHWTIME__H3" 4D455F5F48 33 000000DB 00 .DATA.B H'00 000000DC L1791: 000000DC 4748575449 .SDATA "GHWTIME__H4" 4D455F5F48 34 000000E7 00 .DATA.B H'00 000000E8 L1792: 000000E8 4748575449 .SDATA "GHWTIME__H5" 4D455F5F48 35 000000F3 00 .DATA.B H'00 000000F4 L1793: 000000F4 4748575449 .SDATA "GHWTIME__H6" 4D455F5F48 36 000000FF 00 .DATA.B H'00 00000100 L1794: 00000100 4748575449 .SDATA "GHWTIME__H7" 4D455F5F48 37 0000010B 00 .DATA.B H'00 0000010C L1795: 0000010C 4748575449 .SDATA "GHWTIME__H8" 4D455F5F48 38 00000117 00 .DATA.B H'00 00000118 L1796: 00000118 4748575449 .SDATA "GHWTIME__H9" 4D455F5F48 39 00000123 00 .DATA.B H'00 00000124 L1797: 00000124 474857434F .SDATA "GHWCOLN__H0" 4C4E5F5F48 30 0000012F 00 .DATA.B H'00 00000130 L1798: 00000130 4748575045 .SDATA "GHWPERD__H0" 52445F5F48 30 0000013B 00 .DATA.B H'00 B 00000000 L1780: ; static: _bForceOn 00000000 00000004 .RES.L 1 00000004 L1781: ; static: _bTexturesL + oaded 00000004 00000004 .RES.L 1 00000008 L1782: ; static: _nDrawFlags 00000008 00000004 .RES.L 1 0000000C L1783: ; static: _nTimeExten + dedCounter 0000000C 00000002 .RES.W 1 0000000E L1784: ; static: _nBoosterCo + unter 0000000E 00000002 .RES.W 1 00000010 L1785: ; static: _paDigits 00000010 00000030 .RES.L 12 00000040 L1799: ; static: _fBestX1 00000040 00000004 .RES.L 1 00000044 L1800: ; static: _fBestX2 00000044 00000004 .RES.L 1 00000048 L1801: ; static: _fYourX1 00000048 00000004 .RES.L 1 0000004C L1802: ; static: _fYourX2 0000004C 00000004 .RES.L 1 00000050 L1803: ; static: _fYourTime 00000050 00000004 .RES.L 1 00000054 L1804: ; static: _fBestTime 00000054 00000004 .RES.L 1 00000058 L1805: ; static: _bNewHighSc + ore 00000058 00000004 .RES.L 1 0000005C L1806: ; static: _bSlideOn 0000005C 00000004 .RES.L 1 00000060 L1807: ; static: _nCheckPtCo + unter 00000060 00000004 .RES.L 1 00000064 L1808: ; static: _fBestFinis + hTime 00000064 00000004 .RES.L 1 00000068 L1809: ; static: _pszBestTim + eInitials 00000068 00000004 .RES.B 4 0000006C L1810: ; static: _fTimer 0000006C 00000004 .RES.L 1 00000070 L1811: ; static: _fDisplayTi + me 00000070 00000004 .RES.L 1 00000074 L1812: ; static: _bInitialWa + it 00000074 00000004 .RES.L 1 00000078 L1813: ; static: _bDisplay 00000078 00000004 .RES.L 1 SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:16:49 PAGE 1 ******** STATISTICS INFORMATION ******** ********** ERROR INFORMATION *********** NUMBER OF ERRORS: 0 NUMBER OF WARNINGS: 0 ******* SOURCE LINE INFORMATION ******** COMPILED SOURCE LINE: 662 ******* SECTION SIZE INFORMATION ******* PROGRAM SECTION (P): 0000113C Byte(s) CONSTANT SECTION (C): 0000013C Byte(s) DATA SECTION (D): 00000068 Byte(s) BSS SECTION (B): 0000007C Byte(s) TOTAL PROGRAM SIZE: 0000135C Byte(s) ********** LABEL INFORMATION *********** NUMBER OF EXTERNAL REFERENCE SYMBOLS: 22 NUMBER OF EXTERNAL DEFINITION SYMBOLS: 8 NUMBER OF INTERNAL/EXTERNAL SYMBOLS: 223 *** COMMAND PARAMETER *** hud_text.c -ob=.\obj\hud_text.obj -cpu=sh4 -division=cpu -endian=little -fpu=s ingle -pic=0 -macsave=0 -string=const -sub=hydro.sub -optimize=1 -speed -debug - listfile=.\obj\hud_text.lst
bt_tblade.c
Found at 1xAFB5970:
SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:07:45 PAGE 1 ************ OBJECT LISTING ************ FILE NAME: bt_tblade.c SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT bt_tblade. 1 /***************************************************** +******************************** */ bt_tblade. 2 /* bt_tblade.c - */ bt_tblade. 3 /* */ bt_tblade. 4 /* Author: Michael Starich */ bt_tblade. 5 /***************************************************** +******************************** */ bt_tblade. 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN +TERTAINMENT. */ bt_tblade. 7 /* Copyright (c) 1998 */ bt_tblade. 8 /* */ bt_tblade. 9 /* The contents of this file may not be disclosed to t +hird */ bt_tblade. 10 /* parties, copied or duplicated in any form, in whole + or in part, */ bt_tblade. 11 /* without the prior written permission of Midway Home + Entertainment. */ bt_tblade. 12 /***************************************************** +******************************** */ bt_tblade. 13 /* Modification History: */ bt_tblade. 14 /* */ bt_tblade. 15 /* Date Who Description */ bt_tblade. 16 /* -------- ---------- ------------------------------ +-------------------------------- */ bt_tblade. 17 /* 06/15/98 Starich Created. */ bt_tblade. 18 /***************************************************** +******************************** */ bt_tblade. 19 #include "gendefs.h" bt_tblade. 20 #include "bt_tblade.h" bt_tblade. 21 #include "boats.h" bt_tblade. 22 #include "obsys.h" bt_tblade. 23 #include "xfm.h" bt_tblade. 24 #include "anim.h" bt_tblade. 25 #include "controls.h" bt_tblade. 26 #include "sysmem.h" bt_tblade. 27 #include "material.h" bt_tblade. 28 #include "glcount.h" bt_tblade. 29 #include "fx_smoke.h" bt_tblade. 30 #include "gutil.h" bt_tblade. 31 #include "particle.h" bt_tblade. 32 #include "orient.h" bt_tblade. 33 #include "powerup.h" bt_tblade. 34 #include "tmem.h" bt_tblade. 35 bt_tblade. 36 /*==================== */ bt_tblade. 37 /* private definitions */ bt_tblade. 38 #define _NUM_BLUE_FRAMES 5 bt_tblade. 39 #define _NUM_BURST_FRAMES 7 bt_tblade. 40 #define _NUM_REG_FRAMES 10 bt_tblade. 41 #define _FIRST_BLUE_FRAME 0 bt_tblade. 42 #define _LAST_BLUE_FRAME 4 bt_tblade. 43 #define _FIRST_BURST_FRAME 0 bt_tblade. 44 #define _LAST_BURST_FRAME 6 bt_tblade. 45 #define _FIRST_REG_FRAME 7 bt_tblade. 46 #define _LAST_REG_FRAME 16 bt_tblade. 47 #define _NUM_FLAME_GEOMETRY 4 bt_tblade. 48 #define _NUM_ENGINE_FRAME 7 bt_tblade. 49 #define _NUM_ENGINE_PIPES 8 bt_tblade. 50 bt_tblade. 51 #define _COWLING_X_XLAT -1.757f bt_tblade. 52 #define _BOOSTER_PIPE_XLAT -3.0f bt_tblade. 53 #define _ENGINE_VIBRATION 0.05f bt_tblade. 54 bt_tblade. 55 #define BLUE_LIGHT_INTENSITY 0.35f bt_tblade. 56 #define ORANGE_LIGHT_INTENSITY 0.75f bt_tblade. 57 #define _EXTRA_BLUE_INTENSITY ( 1.0f - BLUE_LIGHT_IN +TENSITY ) bt_tblade. 58 #define _EXTRA_ORANGE_INTENSITY ( 1.0f - ORANGE_LIGHT_ +INTENSITY ) bt_tblade. 59 bt_tblade. 60 enum _HB_STATES bt_tblade. 61 { bt_tblade. 62 _HB_CLOSED = 0, bt_tblade. 63 _HB_DEPLOYING, bt_tblade. 64 _HB_OPEN, bt_tblade. 65 _HB_RETRACTING, bt_tblade. 66 bt_tblade. 67 _HB_NUM_STATES bt_tblade. 68 }; bt_tblade. 69 enum _FLAME_STATES bt_tblade. 70 { bt_tblade. 71 F_RESET = 0, bt_tblade. 72 F_OFF, bt_tblade. 73 F_TURNON, bt_tblade. 74 F_TURNOFF, bt_tblade. 75 bt_tblade. 76 F_B_ON, bt_tblade. 77 F_B_USEABLE, bt_tblade. 78 F_B_TURNOFF, bt_tblade. 79 F_O_BURSTON, bt_tblade. 80 F_O_BURSTOFF, bt_tblade. 81 F_O_FIRE, bt_tblade. 82 F_O_TURNOFF, bt_tblade. 83 bt_tblade. 84 F_NUM_STATES bt_tblade. 85 }; bt_tblade. 86 /*================= */ bt_tblade. 87 /* public variables */ bt_tblade. 88 bt_tblade. 89 /*================== */ bt_tblade. 90 /* private variables */ bt_tblade. 91 bt_tblade. 92 /* player LOD vars */ bt_tblade. 93 static Mesh3d_t *_pPLCowling; bt_tblade. 94 static Mesh3d_t *_pPRCowling; bt_tblade. 95 static Mesh3d_t *_pPEngine; bt_tblade. 96 static Mesh3d_t *_pPLBooster; bt_tblade. 97 static Mesh3d_t *_pPRBooster; bt_tblade. 98 static ObsysLoadDef_t aPlayerLoadTable[] = { bt_tblade. 99 (void *)&_pPLCowling, "GBBTIDACWP1", bt_tblade. 100 (void *)&_pPRCowling, "GBBTIDACWP2", bt_tblade. 101 (void *)&_pPEngine, "GBBTIDAENP0", bt_tblade. 102 (void *)&_pPLBooster, "GBBTIDABOP1", bt_tblade. 103 (void *)&_pPRBooster, "GBBTIDABOP2", bt_tblade. 104 E 0, 0, bt_tblade. 105 }; bt_tblade. 106 /* common LOD vars */ bt_tblade. 107 static Mesh3d_t *_pProp; bt_tblade. 108 static Mesh3d_t *_pBFlame; bt_tblade. 109 E static Mesh3d_t *_paOFlameTop[ 4 ]; bt_tblade. 110 E static Mesh3d_t *_paOFlameBottom[ 4 ]; bt_tblade. 111 static Mesh3d_t *_pOFlameBurst; bt_tblade. 112 static Mesh3d_t *_pFlameMiddle; bt_tblade. 113 static Mesh3d_t *_pLEndPiece; bt_tblade. 114 static Mesh3d_t *_pREndPiece; bt_tblade. 115 static Mesh3d_t *_pGlowCard; bt_tblade. 116 static Mesh3d_t *_pLowGeoFlame; bt_tblade. 117 static TexDef_t *_paPropCell[2]; bt_tblade. 118 E static TexDef_t *_paFlameCell[ (7 + 10) ]; bt_tblade. 119 E static TexDef_t *_paBlueCell[ 5 ]; bt_tblade. 120 E static TexDef_t *_pEngFlameCell[7]; bt_tblade. 121 static ObsysLoadDef_t aCommonLoadTable[] = { bt_tblade. 122 (void *)&_pProp, "GBBBO +ATPRP0", bt_tblade. 123 (void *)&_pBFlame, "GBBTI +DABUP1", bt_tblade. 124 (void *)&_paOFlameTop[0], "GBFTIDA_AH1", bt_tblade. 125 (void *)&_paOFlameTop[1], "GBFTIDA_AH2", bt_tblade. 126 (void *)&_paOFlameTop[2], "GBFTIDA_AH3", bt_tblade. 127 (void *)&_paOFlameTop[3], "GBFTIDA_AH4", bt_tblade. 128 (void *)&_paOFlameBottom[0],"GBFTIDA_BH1", bt_tblade. 129 (void *)&_paOFlameBottom[1],"GBFTIDA_BH2", bt_tblade. 130 (void *)&_paOFlameBottom[2],"GBFTIDA_BH3", bt_tblade. 131 (void *)&_paOFlameBottom[3],"GBFTIDA_BH4", bt_tblade. 132 (void *)&_pOFlameBurst, "GBBTIDAFLP5", bt_tblade. 133 (void *)&_pFlameMiddle, "GBFTIDA_AH0", bt_tblade. 134 (void *)&_pLEndPiece, "GBBTIDAFLP3", + bt_tblade. 135 (void *)&_pREndPiece, "GBBTIDAFLP4", bt_tblade. 136 (void *)&_pGlowCard, "GBBTIDAFLPA", bt_tblade. 137 (void *)&_pLowGeoFlame, "GBFTIDA_CH1", bt_tblade. 138 (void *)&_paPropCell[0], "TBBBOATPR10", bt_tblade. 139 (void *)&_paPropCell[1], "TBBBOATPR11", bt_tblade. 140 (void *)&_paFlameCell[0], "TBFEXHABO20", bt_tblade. 141 (void *)&_paFlameCell[1], "TBFEXHABO21", bt_tblade. 142 (void *)&_paFlameCell[2], "TBFEXHABO22", bt_tblade. 143 (void *)&_paFlameCell[3], "TBFEXHABO23", bt_tblade. 144 (void *)&_paFlameCell[4], "TBFEXHABO24", bt_tblade. 145 (void *)&_paFlameCell[5], "TBFEXHABO25", bt_tblade. 146 (void *)&_paFlameCell[6], "TBFEXHABO26", bt_tblade. 147 (void *)&_paFlameCell[7], "TBFFIREBO2A", bt_tblade. 148 (void *)&_paFlameCell[8], "TBFFIREBO2B", bt_tblade. 149 (void *)&_paFlameCell[9], "TBFFIREBO2C", bt_tblade. 150 (void *)&_paFlameCell[10], "TBFFIREBO2D", bt_tblade. 151 (void *)&_paFlameCell[11], "TBFFIREBO2E", bt_tblade. 152 (void *)&_paFlameCell[12], "TBFFIREBO2F", bt_tblade. 153 (void *)&_paFlameCell[13], "TBFFIREBO2G", bt_tblade. 154 (void *)&_paFlameCell[14], "TBFFIREBO2H", bt_tblade. 155 (void *)&_paFlameCell[15], "TBFFIREBO2I", bt_tblade. 156 (void *)&_paFlameCell[16], "TBFFIREBO2J", bt_tblade. 157 (void *)&_paBlueCell[0], "TBBEXHABU50", bt_tblade. 158 (void *)&_paBlueCell[1], "TBBEXHABU51", bt_tblade. 159 (void *)&_paBlueCell[2], "TBBEXHABU52", bt_tblade. 160 (void *)&_paBlueCell[3], "TBBEXHABU53", bt_tblade. 161 (void *)&_paBlueCell[4], "TBBEXHABU54", bt_tblade. 162 (void *)&_pEngFlameCell[0], "TBFTIDAFL20", bt_tblade. 163 (void *)&_pEngFlameCell[1], "TBFTIDAFL21", bt_tblade. 164 (void *)&_pEngFlameCell[2], "TBFTIDAFL22", bt_tblade. 165 (void *)&_pEngFlameCell[3], "TBFTIDAFL23", bt_tblade. 166 (void *)&_pEngFlameCell[4], "TBFTIDAFL24", bt_tblade. 167 (void *)&_pEngFlameCell[5], "TBFTIDAFL25", bt_tblade. 168 (void *)&_pEngFlameCell[6], "TBFTIDAFL26", bt_tblade. 169 E 0, + 0, bt_tblade. 170 }; bt_tblade. 171 static Xfm_t _xfmLFlame; bt_tblade. 172 static Xfm_t _xfmRFlame; bt_tblade. 173 E static Xfm_t _xfmEngFlame[8]; bt_tblade. 174 static f32 _afLStrutVerts[9]; bt_tblade. 175 static f32 _afRStrutVerts[9]; bt_tblade. 176 static f32 _fEngFlameYCoord[6]; bt_tblade. 177 static Particle_t _FlameParticle; bt_tblade. 178 bt_tblade. 179 /*=================== */ bt_tblade. 180 /* private prototypes */ bt_tblade. 181 static void _ProcessHydroBoost( TBlade_t *pTblade, Pla +yer_t *pPlayer ); bt_tblade. 182 static void _ProcessLStrut( TBlade_t *ptblade, Player_ +t *pPlayer ); bt_tblade. 183 static void _ProcessEngineFlames( TBlade_t *ptblade, P +layer_t *pPlayer ); bt_tblade. 184 static void _DrawProp( TBlade_t *ptblade, Player_t *pP +layer ); bt_tblade. 185 static void _ProcessFlame( TBlade_t *ptblade, Player_t + *pPlayer ); bt_tblade. 186 E static int _AnimateRetractingBoosters( TBlade_t *pTbla +de ); bt_tblade. 187 E static int _AnimateDeployingBoosters( TBlade_t *pTblad +e ); bt_tblade. 188 static void _FlameParticleInit( void ); bt_tblade. 189 static void _FlameParticleAdd( Player_t *pPlayer ); bt_tblade. 190 E static int _FlameParticleWork( Particle_t *pParticle ) +; bt_tblade. 191 static void _FlameParticleDraw( Particle_t *pParticle +); bt_tblade. 192 static void _ChangeStaticLightingMotifs( TBlade_t *ptb +lade ); bt_tblade. 193 bt_tblade. 194 /*================= */ bt_tblade. 195 /* public functions */ bt_tblade. 196 E int bt_tblade_ModuleInit( void ) { P 00000000 _bt_tblade_ModuleInit: ; function: bt_tblade + _ModuleInit ; frame size=20 00000000 2FE6 MOV.L R14,@-R15 bt_tblade. 197 xfm_BuildXlatFromPoint( &_xfmLFlame, -4.169f, +3.109f, -9.44f ); 00000002 C739 MOVA L2556+14,R0 00000004 2FD6 MOV.L R13,@-R15 00000006 2FC6 MOV.L R12,@-R15 00000008 FFFB FMOV.S FR15,@-R15 0000000A F608 FMOV.S @R0,FR6 0000000C C737 MOVA L2556+18,R0 0000000E 4F22 STS.L PR,@-R15 00000010 D438 MOV.L L2556+26,R4; L1877 00000012 D339 MOV.L L2556+30, + R3; _xfm_BuildXlatFromPo + int 00000014 F508 FMOV.S @R0,FR5 00000016 C736 MOVA L2556+22,R0 00000018 430B JSR @R3 0000001A F408 FMOV.S @R0,FR4 bt_tblade. 198 xfm_BuildXlatFromPoint( &_xfmRFlame, 4.169f, 3 +.109f, -9.44f ); 0000001C C732 MOVA L2556+14,R0 0000001E D438 MOV.L L2556+38,R4; L1878 00000020 F608 FMOV.S @R0,FR6 00000022 C732 MOVA L2556+18,R0 00000024 D334 MOV.L L2556+30, + R3; _xfm_BuildXlatFromPo + int 00000026 F508 FMOV.S @R0,FR5 00000028 C734 MOVA L2556+34,R0 0000002A 430B JSR @R3 0000002C F408 FMOV.S @R0,FR4 bt_tblade. 199 xfm_BuildRotZ_XlatFromPoint( &_xfmEngFlame[0], + 9472, -2.0f, 3.1f, - 9.8f ); 0000002E C735 MOVA L2556+42,R0 00000030 9C53 MOV.W L2556,R12 ; H'2500 00000032 FF08 FMOV.S @R0,FR15 00000034 C736 MOVA L2556+54,R0 00000036 F608 FMOV.S @R0,FR6 00000038 C736 MOVA L2556+58,R0 0000003A F508 FMOV.S @R0,FR5 0000003C 65C3 MOV R12,R5 0000003E DE33 MOV.L L2556+50, + R14; _xfm_BuildRotZ_Xlat + FromPoint 00000040 DD31 MOV.L L2556+46,R13; L1879 00000042 F4FC FMOV.S FR15,FR4 00000044 4E0B JSR @R14 00000046 64D3 MOV R13,R4 bt_tblade. 200 xfm_BuildRotZ_XlatFromPoint( &_xfmEngFlame[1], + 9472, -2.0f, 3.0f, -10.4f ); 00000048 C733 MOVA L2556+62,R0 0000004A 64D3 MOV R13,R4 0000004C F608 FMOV.S @R0,FR6 0000004E C733 MOVA L2556+66,R0 00000050 F508 FMOV.S @R0,FR5 00000052 65C3 MOV R12,R5 00000054 F4FC FMOV.S FR15,FR4 00000056 4E0B JSR @R14 00000058 746C ADD #108,R4 bt_tblade. 201 xfm_BuildRotZ_XlatFromPoint( &_xfmEngFlame[2], + 9472, -2.0f, 2.9f, -11.3f ); 0000005A C731 MOVA L2556+70,R0 0000005C 943E MOV.W L2556+2,R4 ; H'00D8 0000005E F608 FMOV.S @R0,FR6 00000060 C730 MOVA L2556+74,R0 00000062 F508 FMOV.S @R0,FR5 00000064 65C3 MOV R12,R5 00000066 F4FC FMOV.S FR15,FR4 00000068 4E0B JSR @R14 0000006A 34DC ADD R13,R4 bt_tblade. 202 xfm_BuildRotZ_XlatFromPoint( &_xfmEngFlame[3], + 9472, -2.0f, 2.8f, -12.0f ); 0000006C C72E MOVA L2556+78,R0 0000006E 9436 MOV.W L2556+4,R4 ; H'0144 00000070 F608 FMOV.S @R0,FR6 00000072 C72E MOVA L2556+82,R0 00000074 F508 FMOV.S @R0,FR5 00000076 65C3 MOV R12,R5 00000078 F4FC FMOV.S FR15,FR4 0000007A 4E0B JSR @R14 0000007C 34DC ADD R13,R4 bt_tblade. 203 xfm_BuildRotZ_XlatFromPoint( &_xfmEngFlame[4], + 55552, 2.0f, 3.1f, - 9.8f ); 0000007E C72C MOVA L2556+86,R0 00000080 DC2C MOV.L L2556+90,R12; H'0000D900 00000082 FF08 FMOV.S @R0,FR15 00000084 C722 MOVA L2556+54,R0 00000086 F608 FMOV.S @R0,FR6 00000088 C722 MOVA L2556+58,R0 0000008A 9429 MOV.W L2556+6,R4 ; H'01B0 0000008C 65C3 MOV R12,R5 0000008E F508 FMOV.S @R0,FR5 00000090 F4FC FMOV.S FR15,FR4 00000092 4E0B JSR @R14 00000094 34DC ADD R13,R4 bt_tblade. 204 xfm_BuildRotZ_XlatFromPoint( &_xfmEngFlame[5], + 55552, 2.0f, 3.0f, -10.4f ); 00000096 C720 MOVA L2556+62,R0 00000098 9423 MOV.W L2556+8,R4 ; H'021C 0000009A F608 FMOV.S @R0,FR6 0000009C C71F MOVA L2556+66,R0 0000009E F508 FMOV.S @R0,FR5 000000A0 65C3 MOV R12,R5 000000A2 F4FC FMOV.S FR15,FR4 000000A4 4E0B JSR @R14 000000A6 34DC ADD R13,R4 bt_tblade. 205 xfm_BuildRotZ_XlatFromPoint( &_xfmEngFlame[6], + 55552, 2.0f, 2.9f, -11.3f ); 000000A8 C71D MOVA L2556+70,R0 000000AA 941B MOV.W L2556+10,R4; H'0288 000000AC F608 FMOV.S @R0,FR6 000000AE C71D MOVA L2556+74,R0 000000B0 F508 FMOV.S @R0,FR5 000000B2 65C3 MOV R12,R5 000000B4 F4FC FMOV.S FR15,FR4 000000B6 4E0B JSR @R14 000000B8 34DC ADD R13,R4 bt_tblade. 206 xfm_BuildRotZ_XlatFromPoint( &_xfmEngFlame[7], + 55552, 2.0f, 2.8f, -12.0f ); 000000BA C71B MOVA L2556+78,R0 000000BC 9413 MOV.W L2556+12,R4; H'02F4 000000BE F608 FMOV.S @R0,FR6 000000C0 C71A MOVA L2556+82,R0 000000C2 F508 FMOV.S @R0,FR5 000000C4 65C3 MOV R12,R5 000000C6 F4FC FMOV.S FR15,FR4 000000C8 4E0B JSR @R14 000000CA 34DC ADD R13,R4 bt_tblade. 207 bt_tblade. 208 E return 1; bt_tblade. 209 } 000000CC 4F26 LDS.L @R15+,PR 000000CE E001 MOV #1,R0 000000D0 FFF9 FMOV.S @R15+,FR15 000000D2 6CF6 MOV.L @R15+,R12 000000D4 6DF6 MOV.L @R15+,R13 000000D6 000B RTS 000000D8 6EF6 MOV.L @R15+,R14 000000DA L2556: 000000DA 2500 .DATA.W H'2500 000000DC 00D8 .DATA.W H'00D8 000000DE 0144 .DATA.W H'0144 000000E0 01B0 .DATA.W H'01B0 000000E2 021C .DATA.W H'021C 000000E4 0288 .DATA.W H'0288 000000E6 02F4 .DATA.W H'02F4 000000E8 C1170A3D .DATA.L H'C1170A3D 000000EC 4046F9DB .DATA.L H'4046F9DB 000000F0 C0856872 .DATA.L H'C0856872 000000F4 <00000000> .DATA.L L1877 000000F8 <00000000> .DATA.L _xfm_BuildXlatFromPoint 000000FC 40856872 .DATA.L H'40856872 00000100 <00000000> .DATA.L L1878 00000104 C0000000 .DATA.L H'C0000000 00000108 <00000000> .DATA.L L1879 0000010C <00000000> .DATA.L _xfm_BuildRotZ_XlatFromPoint 00000110 C11CCCCC .DATA.L H'C11CCCCC 00000114 40466666 .DATA.L H'40466666 00000118 C1266666 .DATA.L H'C1266666 0000011C 40400000 .DATA.L H'40400000 00000120 C134CCCC .DATA.L H'C134CCCC 00000124 40399999 .DATA.L H'40399999 00000128 C1400000 .DATA.L H'C1400000 0000012C 40333333 .DATA.L H'40333333 00000130 40000000 .DATA.L H'40000000 00000134 0000D900 .DATA.L H'0000D900 bt_tblade. 210 bt_tblade. 211 E void bt_tblade_Load( u32 nLod, u32 nIndex, Player_t *p +Player, int bInitLights ) { 00000138 _bt_tblade_Load: ; function: bt_tblade + _Load ; frame size=164 00000138 2FE6 MOV.L R14,@-R15 0000013A 2FD6 MOV.L R13,@-R15 0000013C 6D63 MOV R6,R13 0000013E 2FC6 MOV.L R12,@-R15 00000140 2FB6 MOV.L R11,@-R15 00000142 2FA6 MOV.L R10,@-R15 00000144 2F96 MOV.L R9,@-R15 00000146 6943 MOV R4,R9 00000148 2F86 MOV.L R8,@-R15 0000014A FFFB FMOV.S FR15,@-R15 0000014C 4F22 STS.L PR,@-R15 bt_tblade. 212 int nReturn; bt_tblade. 213 Mesh3dBound_t Bound; bt_tblade. 214 Mesh3d_t *pMesh; bt_tblade. 215 void *_pSysmemFrame; bt_tblade. 216 ObsysFrame_t _ObsysFrame; bt_tblade. 217 TBlade_t *ptblade; bt_tblade. 218 u32 i, nTmemBefore, nTmemAfter; bt_tblade. 219 bt_tblade. 220 E pPlayer->pBoatData = sysmem_Alloc("bt_tblade.c +", 220,sizeof(TBlade_t)); 0000014E D450 MOV.L L2557+8,R4 ; L1911 00000150 D350 MOV.L L2557+12,R3; _sysmem_Alloc 00000152 959A MOV.W L2557+2,R5 ; H'00DC 00000154 7F80 ADD #-128,R15 00000156 9697 MOV.W L2557,R6 ; H'0160 00000158 430B JSR @R3 0000015A 2F72 MOV.L R7,@R15 0000015C E160 MOV #96,R1 0000015E 31DC ADD R13,R1 00000160 2102 MOV.L R0,@R1 bt_tblade. 221 E if( (!(pPlayer->pBoatData != 0)) ) gerr_Assert +( pPlayer->pBoatData != 0, "bt_tblade.c", 221 ); 00000162 E060 MOV #96,R0 00000164 03DE MOV.L @(R0,R13),R3 00000166 2338 TST R3,R3 00000168 8B08 BF L2352 0000016A 04DE MOV.L @(R0,R13),R4 0000016C D34A MOV.L L2557+16,R3; _gerr_Assert 0000016E 2448 TST R4,R4 00000170 D547 MOV.L L2557+8,R5 ; L1911 00000172 0429 MOVT R4 00000174 968A MOV.W L2557+4,R6 ; H'00DD 00000176 74FF ADD #-1,R4 00000178 430B JSR @R3 0000017A 644B NEG R4,R4 0000017C L2352: bt_tblade. 222 ptblade = (TBlade_t*)pPlayer->pBoatData; 0000017C E060 MOV #96,R0 0000017E 0EDE MOV.L @(R0,R13),R14 bt_tblade. 223 bt_tblade. 224 /* Init the user object */ bt_tblade. 225 pPlayer->nLod = nLod; bt_tblade. 226 ptblade->nPropRot = 0; 00000180 EC00 MOV #0,R12 00000182 E058 MOV #88,R0 00000184 0D95 MOV.W R9,@(R0,R13) 00000186 2EC2 MOV.L R12,@R14 bt_tblade. 227 ptblade->nHBState = _HB_CLOSED; 00000188 60C3 MOV R12,R0 0000018A 0009 NOP 0000018C 81E2 MOV.W R0,@(4,R14) bt_tblade. 228 ptblade->nHBAnimFrameCount = 0; bt_tblade. 229 ptblade->fHBLeftXlat = 0.0f; bt_tblade. 230 ptblade->fHBBoosterXlat = 0.0f; bt_tblade. 231 ptblade->fHBAnimPercent = 0.0f; bt_tblade. 232 ptblade->nEngFlameFrameCount[0] = 0; 0000018E 63E3 MOV R14,R3 00000190 81E3 MOV.W R0,@(6,R14) 00000192 E008 MOV #8,R0 00000194 FF8D FLDI0 FR15 bt_tblade. 233 ptblade->nEngFlameFrameCount[1] = 6; 00000196 E206 MOV #6,R2 00000198 FEF7 FMOV.S FR15,@(R0,R14) 0000019A E00C MOV #12,R0 0000019C FEF7 FMOV.S FR15,@(R0,R14) 0000019E E010 MOV #16,R0 000001A0 FEF7 FMOV.S FR15,@(R0,R14) 000001A2 E01D MOV #29,R0 000001A4 731C ADD #28,R3 000001A6 23C0 MOV.B R12,@R3 bt_tblade. 234 ptblade->nEngFlameFrameCount[2] = 2; 000001A8 E302 MOV #2,R3 000001AA 0E24 MOV.B R2,@(R0,R14) 000001AC E01E MOV #30,R0 000001AE 0E34 MOV.B R3,@(R0,R14) bt_tblade. 235 ptblade->nEngFlameFrameCount[3] = 4; 000001B0 E01F MOV #31,R0 000001B2 E204 MOV #4,R2 000001B4 0E24 MOV.B R2,@(R0,R14) bt_tblade. 236 ptblade->nEngFlameFrameCount[4] = 1; 000001B6 E020 MOV #32,R0 000001B8 EB01 MOV #1,R11 000001BA 0EB4 MOV.B R11,@(R0,R14) bt_tblade. 237 ptblade->nEngFlameFrameCount[5] = 3; 000001BC E021 MOV #33,R0 000001BE E303 MOV #3,R3 000001C0 0E34 MOV.B R3,@(R0,R14) bt_tblade. 238 ptblade->nEngFlameFrameCount[6] = 5; 000001C2 E022 MOV #34,R0 000001C4 E205 MOV #5,R2 000001C6 0E24 MOV.B R2,@(R0,R14) bt_tblade. 239 ptblade->nEngFlameFrameCount[7] = 0; 000001C8 E023 MOV #35,R0 000001CA 0EC4 MOV.B R12,@(R0,R14) bt_tblade. 240 ptblade->fEngVibration = 0.0f; 000001CC E028 MOV #40,R0 bt_tblade. 241 ptblade->nEngVibration = 0; bt_tblade. 242 ptblade->fEngStaticLightIntensity = 0.0f; bt_tblade. 243 E ptblade->bEngDrawFlames = 0; bt_tblade. 244 E ptblade->bFDrawOrange = 0; bt_tblade. 245 E ptblade->bFDrawBlue = 0; bt_tblade. 246 ptblade->nFState = F_RESET; bt_tblade. 247 ptblade->nFCell = 0; bt_tblade. 248 ptblade->nFGeoCell = 0; bt_tblade. 249 ptblade->nFGeoDir = 0; 000001CE 63C3 MOV R12,R3 000001D0 FEF7 FMOV.S FR15,@(R0,R14) 000001D2 E02C MOV #44,R0 bt_tblade. 250 ptblade->fFIntensity = 0.0f; bt_tblade. 251 /********************************************* +********************************** */ bt_tblade. 252 /* If this is not the player LOD, set the boun +ding info to the player LOD values */ bt_tblade. 253 /********************************************* +********************************** */ bt_tblade. 254 if( nLod != BOATS_LOD_PLAYER ) { 000001D4 2998 TST R9,R9 000001D6 1EC9 MOV.L R12,@(36,R14) 000001D8 FEF7 FMOV.S FR15,@(R0,R14) 000001DA E034 MOV #52,R0 000001DC 0EC4 MOV.B R12,@(R0,R14) 000001DE E035 MOV #53,R0 000001E0 0EC4 MOV.B R12,@(R0,R14) 000001E2 E036 MOV #54,R0 000001E4 0EC4 MOV.B R12,@(R0,R14) 000001E6 E037 MOV #55,R0 000001E8 0EC4 MOV.B R12,@(R0,R14) 000001EA E038 MOV #56,R0 000001EC 0EC5 MOV.W R12,@(R0,R14) 000001EE E03A MOV #58,R0 000001F0 0EC5 MOV.W R12,@(R0,R14) 000001F2 E040 MOV #64,R0 000001F4 1ECF MOV.L R12,@(60,R14) 000001F6 DA29 MOV.L L2557+20,R10; _obsys_Load 000001F8 8D23 BT/S L2354 000001FA FEF7 FMOV.S FR15,@(R0,R14) bt_tblade. 255 /* Get our memory frames... */ bt_tblade. 256 _pSysmemFrame = sysmem_StartFrame(); 000001FC D228 MOV.L L2557+24,R2; _sysmem_StartFrame 000001FE 420B JSR @R2 00000200 0009 NOP bt_tblade. 257 _ObsysFrame = obsys_StartFrame(); 00000202 D328 MOV.L L2557+28,R3; _obsys_StartFrame 00000204 430B JSR @R3 00000206 1F01 MOV.L R0,@(4,R15) bt_tblade. 258 E obsys_SetSpecialMode( 1, 1 ); 00000208 E501 MOV #1,R5 0000020A 1F02 MOV.L R0,@(8,R15) 0000020C D326 MOV.L L2557+32, + R3; _obsys_SetSpecialMod + e 0000020E 430B JSR @R3 00000210 6453 MOV R5,R4 bt_tblade. 259 /* load the player LOD */ bt_tblade. 260 pMesh = (Mesh3d_t*)obsys_Load( "GBBTID +AHUP0" ); 00000212 D426 MOV.L L2557+36,R4; L1913 00000214 4A0B JSR @R10 00000216 0009 NOP bt_tblade. 261 E obsys_SetSpecialMode( 0, 0 ); 00000218 D223 MOV.L L2557+32, + R2; _obsys_SetSpecialMod + e 0000021A E500 MOV #0,R5 0000021C 6803 MOV R0,R8 0000021E 420B JSR @R2 00000220 6453 MOV R5,R4 bt_tblade. 262 /* we must be able to load the bound i +nfo */ bt_tblade. 263 if( !pMesh ) { 00000222 2888 TST R8,R8 00000224 8B01 BF L2558 00000226 A0D3 BRA L2534 00000228 0009 NOP 0000022A L2558: bt_tblade. 264 pPlayer->nLoadFlag = BOATS_DO_ +NOTHING; bt_tblade. 265 return; bt_tblade. 266 } bt_tblade. 267 /* copy this bound info into our local + bound var */ bt_tblade. 268 mesh3d_CopyBoundingData( &Bound, &pMes +h->Bound ); 0000022A D321 MOV.L L2557+40, + R3; _mesh3d_CopyBounding + Data 0000022C 6583 MOV R8,R5 0000022E 64F3 MOV R15,R4 00000230 754C ADD #76,R5 00000232 430B JSR @R3 00000234 740C ADD #12,R4 bt_tblade. 269 /* dump any memory that we used during + this process */ bt_tblade. 270 sysmem_ReleaseFrame( _pSysmemFrame ); 00000236 D31F MOV.L L2557+44, + R3; _sysmem_ReleaseFrame 00000238 430B JSR @R3 0000023A 54F1 MOV.L @(4,R15),R4 bt_tblade. 271 obsys_ReleaseFrame( _ObsysFrame ); 0000023C D31E MOV.L L2557+48,R3; _obsys_ReleaseFrame 0000023E 430B JSR @R3 00000240 54F2 MOV.L @(8,R15),R4 00000242 L2354: bt_tblade. 272 } bt_tblade. 273 /* Init the flame particle */ bt_tblade. 274 _FlameParticleInit(); 00000242 D21E MOV.L L2557+52,R2; L1891 00000244 420B JSR @R2 00000246 0009 NOP bt_tblade. 275 bt_tblade. 276 if( bInitLights ) { 00000248 63F2 MOV.L @R15,R3 0000024A 2338 TST R3,R3 0000024C 8952 BT L2357 bt_tblade. 277 /* Create the booster lights */ bt_tblade. 278 worldlt_Init( &ptblade->FLight, pPlaye +r->pWorldOb ); 0000024E E050 MOV #80,R0 00000250 D31B MOV.L L2557+56,R3; _worldlt_Init 00000252 05DE MOV.L @(R0,R13),R5 00000254 64E3 MOV R14,R4 00000256 430B JSR @R3 00000258 7444 ADD #68,R4 bt_tblade. 279 /*ptblade->FLight.nFlags = MESH3D_LIGH +T_FLAG_LIGHT_SELF; */ bt_tblade. 280 E light_InitOmniLight( &ptblade->FLight. +Light, 0.0f, 0.0f, 0.0f, 50.0f, 1.0f ); 0000025A C71A MOVA L2557+60,R0 0000025C D31A MOV.L L2557+64, + R3; _light_InitOmniLight 0000025E F708 FMOV.S @R0,FR7 00000260 64E3 MOV R14,R4 00000262 F4FC FMOV.S FR15,FR4 00000264 F89D FLDI1 FR8 00000266 F6FC FMOV.S FR15,FR6 00000268 F5FC FMOV.S FR15,FR5 0000026A 430B JSR @R3 0000026C 7444 ADD #68,R4 bt_tblade. 281 light_SetMotif( &ptblade->FLight.Light +, SLMOTIF_BLUEFLAME1 ); 0000026E D217 MOV.L L2557+68,R2; _light_SetMotif 00000270 64E3 MOV R14,R4 00000272 E50F MOV #15,R5 00000274 420B JSR @R2 00000276 7444 ADD #68,R4 bt_tblade. 282 vec3_Set( &ptblade->FLight.OwnerLightP +os, 0.0f, 5.0f, -15.0f ); 00000278 C715 MOVA L2557+72,R0 0000027A 9408 MOV.W L2557+6,R4 ; H'0134 0000027C F608 FMOV.S @R0,FR6 0000027E C715 MOVA L2557+76,R0 00000280 F508 FMOV.S @R0,FR5 00000282 F4FC FMOV.S FR15,FR4 00000284 A028 BRA L2539 00000286 34EC ADD R14,R4 00000288 L2557: 00000288 0160 .DATA.W H'0160 0000028A 00DC .DATA.W H'00DC 0000028C 00DD .DATA.W H'00DD 0000028E 0134 .DATA.W H'0134 00000290 <00000000> .DATA.L L1911 00000294 <00000000> .DATA.L _sysmem_Alloc 00000298 <00000000> .DATA.L _gerr_Assert 0000029C <00000000> .DATA.L _obsys_Load 000002A0 <00000000> .DATA.L _sysmem_StartFrame 000002A4 <00000000> .DATA.L _obsys_StartFrame 000002A8 <00000000> .DATA.L _obsys_SetSpecialMode 000002AC <00000000> .DATA.L L1913 000002B0 <00000000> .DATA.L _mesh3d_CopyBoundingData 000002B4 <00000000> .DATA.L _sysmem_ReleaseFrame 000002B8 <00000000> .DATA.L _obsys_ReleaseFrame 000002BC <00000000> .DATA.L L1891 000002C0 <00000000> .DATA.L _worldlt_Init 000002C4 42480000 .DATA.L H'42480000 000002C8 <00000000> .DATA.L _light_InitOmniLight 000002CC <00000000> .DATA.L _light_SetMotif 000002D0 C1700000 .DATA.L H'C1700000 000002D4 40A00000 .DATA.L H'40A00000 000002D8 L2539: 000002D8 D340 MOV.L L2559+6,R3 ; _vec3_Set 000002DA 430B JSR @R3 000002DC 0009 NOP bt_tblade. 283 worldob_AttachWorldLight( pPlayer->pWo +rldOb, &ptblade->FLight ); 000002DE D340 MOV.L L2559+10, + R3; _worldob_AttachWorld + Light 000002E0 65E3 MOV R14,R5 000002E2 E050 MOV #80,R0 000002E4 7544 ADD #68,R5 000002E6 430B JSR @R3 000002E8 04DE MOV.L @(R0,R13),R4 bt_tblade. 284 E light_TurnOn( &ptblade->FLight.Light, +0 ); 000002EA D23E MOV.L L2559+14,R2; _light_TurnOn 000002EC 64E3 MOV R14,R4 000002EE E500 MOV #0,R5 000002F0 420B JSR @R2 000002F2 7444 ADD #68,R4 000002F4 L2357: bt_tblade. 285 } bt_tblade. 286 /* Load the geometry */ bt_tblade. 287 nTmemBefore = tmem_GetFreeMem( 0 ); 000002F4 D83C MOV.L L2559+18,R8; _tmem_GetFreeMem 000002F6 480B JSR @R8 000002F8 E400 MOV #0,R4 bt_tblade. 288 nTmemBefore += tmem_GetFreeMem( 1 ); 000002FA 480B JSR @R8 000002FC E401 MOV #1,R4 bt_tblade. 289 switch(nLod) 000002FE 6093 MOV R9,R0 00000300 0009 NOP 00000302 8800 CMP/EQ #0,R0 00000304 8905 BT L2200 00000306 8801 CMP/EQ #1,R0 00000308 892C BT L2204 0000030A 8802 CMP/EQ #2,R0 0000030C 8945 BT L2207 0000030E A07F BRA L2210 00000310 0009 NOP 00000312 L2200: ; case label bt_tblade. 290 { bt_tblade. 291 case BOATS_LOD_PLAYER: bt_tblade. 292 /* Load the boat */ bt_tblade. 293 pPlayer->pDasBoot = (Mesh3d_t*)obsys_L +oad("GBBTIDAHUP0"); 00000312 D436 MOV.L L2559+22,R4; L1913 00000314 4A0B JSR @R10 00000316 0009 NOP 00000318 E154 MOV #84,R1 0000031A 31DC ADD R13,R1 0000031C 2102 MOV.L R0,@R1 bt_tblade. 294 ptblade->pRetracted = pPlayer->pDasBoo +t; 0000031E E054 MOV #84,R0 00000320 03DE MOV.L @(R0,R13),R3 bt_tblade. 295 ptblade->pDeployed = (Mesh3d_t *)obsys +_Load( "GBBTIDAHUP1" ); 00000322 D433 MOV.L L2559+26,R4; L1917 00000324 9057 MOV.W L2559,R0 ; H'0154 00000326 4A0B JSR @R10 00000328 0E36 MOV.L R3,@(R0,R14) 0000032A 9155 MOV.W L2559+2,R1 ; H'0158 bt_tblade. 296 ptblade->pNoParts = (Mesh3d_t *)obsys_ +Load( "GBBTIDAHUP2" ); 0000032C D431 MOV.L L2559+30,R4; L1918 0000032E 31EC ADD R14,R1 00000330 4A0B JSR @R10 00000332 2102 MOV.L R0,@R1 00000334 9151 MOV.W L2559+4,R1 ; H'015C 00000336 31EC ADD R14,R1 00000338 2102 MOV.L R0,@R1 bt_tblade. 297 if ( ptblade->pRetracted && ptblade->p +Deployed && ptblade->pNoParts ) { 0000033A 904C MOV.W L2559,R0 ; H'0154 0000033C 03EE MOV.L @(R0,R14),R3 0000033E 2338 TST R3,R3 00000340 8946 BT L2534 00000342 9049 MOV.W L2559+2,R0 ; H'0158 00000344 03EE MOV.L @(R0,R14),R3 00000346 2338 TST R3,R3 00000348 8942 BT L2534 0000034A 9046 MOV.W L2559+4,R0 ; H'015C 0000034C 03EE MOV.L @(R0,R14),R3 0000034E 2338 TST R3,R3 00000350 893E BT L2534 bt_tblade. 298 /* load all of our meshes and +textures from our table */ bt_tblade. 299 E nReturn = obsys_LoadGroup( aPl +ayerLoadTable, 0 ); 00000352 D32A MOV.L L2559+38,R3; _obsys_LoadGroup 00000354 D428 MOV.L L2559+34,R4; L1809 00000356 430B JSR @R3 00000358 E500 MOV #0,R5 bt_tblade. 300 if( nReturn != -1 ) { 0000035A 88FF CMP/EQ #-1,R0 0000035C 8D5D BT/S L2358 0000035E 6403 MOV R0,R4 bt_tblade. 301 pPlayer->nLoadFlag = B +OATS_HULL_ONLY; bt_tblade. 302 E ( "NOT ENOUGH MEMORY F +OR ALL OF TIDAL BLADE!\n" ); bt_tblade. 303 return; 00000360 A08C BRA L2538 00000362 0009 NOP 00000364 L2204: ; case label bt_tblade. 304 } bt_tblade. 305 } else { bt_tblade. 306 pPlayer->nLoadFlag = BOATS_DO_ +NOTHING; bt_tblade. 307 E ( "NOT ENOUGH MEMORY FOR ALL O +F TIDAL BLADE!\n" ); bt_tblade. 308 return; bt_tblade. 309 } bt_tblade. 310 break; bt_tblade. 311 case BOATS_LOD_HIGH: bt_tblade. 312 /* Load the boat */ bt_tblade. 313 pPlayer->pDasBoot = (Mesh3d_t*)obsys_L +oad("GBBTIDAHUH0"); 00000364 D426 MOV.L L2559+42,R4; L1923 00000366 4A0B JSR @R10 00000368 0009 NOP 0000036A E154 MOV #84,R1 0000036C 31DC ADD R13,R1 0000036E 2102 MOV.L R0,@R1 bt_tblade. 314 ptblade->pRetracted = pPlayer->pDasBoo +t; 00000370 E054 MOV #84,R0 00000372 03DE MOV.L @(R0,R13),R3 bt_tblade. 315 ptblade->pDeployed = (Mesh3d_t *)obsys +_Load( "GBBTIDAHUH1" ); 00000374 D423 MOV.L L2559+46,R4; L1924 00000376 902E MOV.W L2559,R0 ; H'0154 00000378 4A0B JSR @R10 0000037A 0E36 MOV.L R3,@(R0,R14) 0000037C 912C MOV.W L2559+2,R1 ; H'0158 0000037E 31EC ADD R14,R1 00000380 2102 MOV.L R0,@R1 bt_tblade. 316 E ptblade->pNoParts = 0; 00000382 902A MOV.W L2559+4,R0 ; H'015C 00000384 0EC6 MOV.L R12,@(R0,R14) bt_tblade. 317 if( ptblade->pRetracted && ptblade->pD +eployed ) { 00000386 70F8 ADD #-8,R0 00000388 03EE MOV.L @(R0,R14),R3 0000038A 2338 TST R3,R3 0000038C 8920 BT L2534 0000038E 9023 MOV.W L2559+2,R0 ; H'0158 00000390 03EE MOV.L @(R0,R14),R3 00000392 2338 TST R3,R3 00000394 891C BT L2534 bt_tblade. 318 /* since this is not a player +lod, we should copy our Bound data into this hull */ bt_tblade. 319 mesh3d_CopyBoundingData( &pPla +yer->pDasBoot->Bound, &Bound ); 00000396 A012 BRA L2535 00000398 0009 NOP 0000039A L2207: ; case label bt_tblade. 320 } else { bt_tblade. 321 pPlayer->nLoadFlag = BOATS_DO_ +NOTHING; bt_tblade. 322 E ( "NOT ENOUGH MEMORY FOR ALL O +F TIDAL BLADE!\n" ); bt_tblade. 323 return; bt_tblade. 324 } bt_tblade. 325 break; bt_tblade. 326 case BOATS_LOD_DRONE: bt_tblade. 327 /* load the boat's hull */ bt_tblade. 328 pPlayer->pDasBoot = (Mesh3d_t*)obsys_L +oad( "GBBDTIDHUH0" ); 0000039A D41B MOV.L L2559+50,R4; L1927 0000039C 4A0B JSR @R10 0000039E 0009 NOP 000003A0 E154 MOV #84,R1 000003A2 31DC ADD R13,R1 000003A4 2102 MOV.L R0,@R1 bt_tblade. 329 ptblade->pRetracted = pPlayer->pDasBoo +t; 000003A6 E054 MOV #84,R0 000003A8 03DE MOV.L @(R0,R13),R3 000003AA 9014 MOV.W L2559,R0 ; H'0154 000003AC 0E36 MOV.L R3,@(R0,R14) bt_tblade. 330 E ptblade->pDeployed = 0; 000003AE 7004 ADD #4,R0 000003B0 0EC6 MOV.L R12,@(R0,R14) bt_tblade. 331 E ptblade->pNoParts = 0; 000003B2 7004 ADD #4,R0 000003B4 0EC6 MOV.L R12,@(R0,R14) bt_tblade. 332 if( ptblade->pRetracted ) { 000003B6 70F8 ADD #-8,R0 000003B8 03EE MOV.L @(R0,R14),R3 000003BA 2338 TST R3,R3 000003BC 8908 BT L2534 000003BE L2535: bt_tblade. 333 /* since this is not a player +lod, we should copy our Bound data into this hull */ bt_tblade. 334 mesh3d_CopyBoundingData( &pPla +yer->pDasBoot->Bound, &Bound ); 000003BE E054 MOV #84,R0 000003C0 D312 MOV.L L2559+54, + R3; _mesh3d_CopyBounding + Data 000003C2 04DE MOV.L @(R0,R13),R4 000003C4 65F3 MOV R15,R5 000003C6 750C ADD #12,R5 000003C8 430B JSR @R3 000003CA 744C ADD #76,R4 000003CC A025 BRA L2358 000003CE 0009 NOP 000003D0 L2534: bt_tblade. 335 } else { bt_tblade. 336 pPlayer->nLoadFlag = BOATS_DO_ +NOTHING; 000003D0 E05A MOV #90,R0 bt_tblade. 337 E ( "NOT ENOUGH MEMORY FOR ALL O +F CUT THROAT!\n" ); bt_tblade. 338 return; 000003D2 A0F8 BRA L2356 000003D4 0DC5 MOV.W R12,@(R0,R13) 000003D6 L2559: 000003D6 0154 .DATA.W H'0154 000003D8 0158 .DATA.W H'0158 000003DA 015C .DATA.W H'015C 000003DC <00000000> .DATA.L _vec3_Set 000003E0 <00000000> .DATA.L _worldob_AttachWorldLight 000003E4 <00000000> .DATA.L _light_TurnOn 000003E8 <00000000> .DATA.L _tmem_GetFreeMem 000003EC <00000000> .DATA.L L1913 000003F0 <00000000> .DATA.L L1917 000003F4 <00000000> .DATA.L L1918 000003F8 <00000000> .DATA.L L1809 000003FC <00000000> .DATA.L _obsys_LoadGroup 00000400 <00000000> .DATA.L L1923 00000404 <00000000> .DATA.L L1924 00000408 <00000000> .DATA.L L1927 0000040C <00000000> .DATA.L _mesh3d_CopyBoundingData 00000410 L2210: ; default label bt_tblade. 339 } bt_tblade. 340 break; bt_tblade. 341 default: bt_tblade. 342 E if( (!(0)) ) gerr_Assert( 0, "bt_tblad +e.c", 342 ); 00000410 D25B MOV.L L2560+20,R2; _gerr_Assert 00000412 D55A MOV.L L2560+16,R5; L1911 00000414 96AA MOV.W L2560,R6 ; H'0156 00000416 420B JSR @R2 00000418 E400 MOV #0,R4 0000041A L2358: bt_tblade. 343 } bt_tblade. 344 bt_tblade. 345 if( nLod != BOATS_LOD_DRONE ) { 0000041A 6093 MOV R9,R0 0000041C 0009 NOP 0000041E 8802 CMP/EQ #2,R0 00000420 8B01 BF L2561 00000422 A0C1 BRA L2367 00000424 0009 NOP 00000426 L2561: bt_tblade. 346 /* Load the engine flame geometry, mus +t be unique per boat because the geometry */ bt_tblade. 347 /* is morphed. */ bt_tblade. 348 ptblade->pEngFlame = (Mesh3d_t*)obsys_ +LoadAnother( "GBBTIDAFLP0" ); 00000426 D458 MOV.L L2560+28,R4; L1932 00000428 DA56 MOV.L L2560+24,R10; _obsys_LoadAnother 0000042A 4A0B JSR @R10 0000042C 0009 NOP bt_tblade. 349 if( !ptblade->pEngFlame ) { 0000042E 6203 MOV R0,R2 00000430 2228 TST R2,R2 00000432 8D23 BT/S L2538 00000434 1E0C MOV.L R0,@(48,R14) 00000436 55EC MOV.L @(48,R14),R5 bt_tblade. 350 pPlayer->nLoadFlag = BOATS_HUL +L_ONLY; bt_tblade. 351 E ( "NOT ENOUGH MEMORY FOR ALL O +F TIDAL BLADE!\n" ); bt_tblade. 352 return; bt_tblade. 353 } bt_tblade. 354 bt_tblade. 355 /* Save the original tcoords of the en +gine flame geometry */ bt_tblade. 356 for( i = 0; i < 6; i++ ) { 00000438 66C3 MOV R12,R6 0000043A D454 MOV.L L2560+32,R4; L1882 0000043C 555E MOV.L @(56,R5),R5 0000043E L2370: bt_tblade. 357 _fEngFlameYCoord[i] = ptblade- +>pEngFlame->pVtx[i].Point.p[1]; 0000043E E004 MOV #4,R0 00000440 F356 FMOV.S @(R0,R5),FR3 00000442 7518 ADD #24,R5 00000444 7603 ADD #3,R6 00000446 F43A FMOV.S FR3,@R4 00000448 7404 ADD #4,R4 0000044A F356 FMOV.S @(R0,R5),FR3 0000044C 7518 ADD #24,R5 0000044E E306 MOV #6,R3 00000450 F43A FMOV.S FR3,@R4 00000452 7404 ADD #4,R4 00000454 F356 FMOV.S @(R0,R5),FR3 00000456 3632 CMP/HS R3,R6 00000458 7518 ADD #24,R5 0000045A F43A FMOV.S FR3,@R4 0000045C 8FEF BF/S L2370 0000045E 7404 ADD #4,R4 bt_tblade. 358 } bt_tblade. 359 bt_tblade. 360 /* Load the struts */ bt_tblade. 361 ptblade->pLHBStruts = (Mesh3d_t*)obsys +_LoadAnother("GBBTIDASRP1"); 00000460 D44B MOV.L L2560+36,R4; L1935 00000462 4A0B JSR @R10 00000464 0009 NOP bt_tblade. 362 if( !ptblade->pLHBStruts ) { 00000466 6303 MOV R0,R3 00000468 2338 TST R3,R3 0000046A 8D07 BT/S L2538 0000046C 1E05 MOV.L R0,@(20,R14) bt_tblade. 363 pPlayer->nLoadFlag = BOATS_HUL +L_ONLY; bt_tblade. 364 E ( "NOT ENOUGH MEMORY FOR ALL O +F TIDAL BLADE!\n" ); bt_tblade. 365 return; bt_tblade. 366 } bt_tblade. 367 ptblade->pRHBStruts = (Mesh3d_t*)obsys +_LoadAnother("GBBTIDASRP2"); 0000046E D449 MOV.L L2560+40,R4; L1937 00000470 4A0B JSR @R10 00000472 0009 NOP bt_tblade. 368 if( !ptblade->pRHBStruts ) { 00000474 6303 MOV R0,R3 00000476 2338 TST R3,R3 00000478 8F03 BF/S L2372 0000047A 1E06 MOV.L R0,@(24,R14) 0000047C L2538: bt_tblade. 369 pPlayer->nLoadFlag = BOATS_HUL +L_ONLY; 0000047C E05A MOV #90,R0 bt_tblade. 370 E ( "NOT ENOUGH MEMORY FOR ALL O +F TIDAL BLADE!\n" ); bt_tblade. 371 return; 0000047E A0A2 BRA L2356 00000480 0DB5 MOV.W R11,@(R0,R13) 00000482 L2372: bt_tblade. 372 } bt_tblade. 373 /* Save the original vertice info */ bt_tblade. 374 _afLStrutVerts[0] = ptblade->pLHBStrut +s->pVtx[1].Point.p[0]; 00000482 53E5 MOV.L @(20,R14),R3 bt_tblade. 375 _afLStrutVerts[1] = ptblade->pLHBStrut +s->pVtx[3].Point.p[0]; 00000484 E004 MOV #4,R0 00000486 D444 MOV.L L2560+44,R4; L1880 00000488 523E MOV.L @(56,R3),R2 0000048A 7218 ADD #24,R2 0000048C F328 FMOV.S @R2,FR3 0000048E F43A FMOV.S FR3,@R4 00000490 53E5 MOV.L @(20,R14),R3 00000492 523E MOV.L @(56,R3),R2 00000494 7248 ADD #72,R2 00000496 F328 FMOV.S @R2,FR3 00000498 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 376 _afLStrutVerts[2] = ptblade->pLHBStrut +s->pVtx[4].Point.p[0]; 0000049A E008 MOV #8,R0 0000049C 53E5 MOV.L @(20,R14),R3 0000049E 523E MOV.L @(56,R3),R2 000004A0 7260 ADD #96,R2 000004A2 F328 FMOV.S @R2,FR3 000004A4 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 377 _afLStrutVerts[3] = ptblade->pLHBStrut +s->pVtx[7].Point.p[0]; 000004A6 E00C MOV #12,R0 000004A8 53E5 MOV.L @(20,R14),R3 000004AA 9760 MOV.W L2560+2,R7 ; H'00A8 000004AC 523E MOV.L @(56,R3),R2 000004AE 327C ADD R7,R2 000004B0 F328 FMOV.S @R2,FR3 000004B2 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 378 _afLStrutVerts[4] = ptblade->pLHBStrut +s->pVtx[9].Point.p[0]; 000004B4 E010 MOV #16,R0 000004B6 53E5 MOV.L @(20,R14),R3 000004B8 955A MOV.W L2560+4,R5 ; H'00D8 000004BA 523E MOV.L @(56,R3),R2 000004BC 325C ADD R5,R2 000004BE F328 FMOV.S @R2,FR3 000004C0 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 379 _afLStrutVerts[5] = ptblade->pLHBStrut +s->pVtx[10].Point.p[0]; 000004C2 53E5 MOV.L @(20,R14),R3 000004C4 E014 MOV #20,R0 000004C6 9654 MOV.W L2560+6,R6 ; H'00F0 000004C8 523E MOV.L @(56,R3),R2 000004CA 326C ADD R6,R2 000004CC F328 FMOV.S @R2,FR3 000004CE F437 FMOV.S FR3,@(R0,R4) bt_tblade. 380 _afLStrutVerts[6] = ptblade->pLHBStrut +s->pVtx[13].Point.p[0]; 000004D0 E018 MOV #24,R0 000004D2 53E5 MOV.L @(20,R14),R3 000004D4 924E MOV.W L2560+8,R2 ; H'0138 000004D6 513E MOV.L @(56,R3),R1 000004D8 312C ADD R2,R1 000004DA F318 FMOV.S @R1,FR3 000004DC F437 FMOV.S FR3,@(R0,R4) bt_tblade. 381 _afLStrutVerts[7] = ptblade->pLHBStrut +s->pVtx[15].Point.p[0]; 000004DE 53E5 MOV.L @(20,R14),R3 000004E0 9149 MOV.W L2560+10,R1; H'0168 000004E2 503E MOV.L @(56,R3),R0 000004E4 F316 FMOV.S @(R0,R1),FR3 000004E6 E01C MOV #28,R0 000004E8 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 382 _afLStrutVerts[8] = ptblade->pLHBStrut +s->pVtx[16].Point.p[0]; 000004EA 53E5 MOV.L @(20,R14),R3 000004EC 9044 MOV.W L2560+12,R0; H'0180 000004EE 533E MOV.L @(56,R3),R3 000004F0 F336 FMOV.S @(R0,R3),FR3 000004F2 E020 MOV #32,R0 000004F4 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 383 bt_tblade. 384 _afRStrutVerts[0] = ptblade->pRHBStrut +s->pVtx[1].Point.p[0]; 000004F6 53E6 MOV.L @(24,R14),R3 000004F8 D428 MOV.L L2560+48,R4; L1881 000004FA 523E MOV.L @(56,R3),R2 000004FC 7218 ADD #24,R2 000004FE F328 FMOV.S @R2,FR3 00000500 F43A FMOV.S FR3,@R4 bt_tblade. 385 _afRStrutVerts[1] = ptblade->pRHBStrut +s->pVtx[3].Point.p[0]; 00000502 53E6 MOV.L @(24,R14),R3 00000504 E004 MOV #4,R0 00000506 523E MOV.L @(56,R3),R2 00000508 7248 ADD #72,R2 0000050A F328 FMOV.S @R2,FR3 0000050C F437 FMOV.S FR3,@(R0,R4) bt_tblade. 386 _afRStrutVerts[2] = ptblade->pRHBStrut +s->pVtx[4].Point.p[0]; 0000050E E008 MOV #8,R0 00000510 53E6 MOV.L @(24,R14),R3 00000512 523E MOV.L @(56,R3),R2 00000514 7260 ADD #96,R2 00000516 F328 FMOV.S @R2,FR3 00000518 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 387 _afRStrutVerts[3] = ptblade->pRHBStrut +s->pVtx[7].Point.p[0]; 0000051A E00C MOV #12,R0 0000051C 53E6 MOV.L @(24,R14),R3 0000051E 523E MOV.L @(56,R3),R2 00000520 372C ADD R2,R7 00000522 F378 FMOV.S @R7,FR3 00000524 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 388 _afRStrutVerts[4] = ptblade->pRHBStrut +s->pVtx[9].Point.p[0]; 00000526 E010 MOV #16,R0 00000528 53E6 MOV.L @(24,R14),R3 0000052A 523E MOV.L @(56,R3),R2 0000052C 352C ADD R2,R5 0000052E F358 FMOV.S @R5,FR3 00000530 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 389 _afRStrutVerts[5] = ptblade->pRHBStrut +s->pVtx[10].Point.p[0]; 00000532 E014 MOV #20,R0 00000534 53E6 MOV.L @(24,R14),R3 00000536 523E MOV.L @(56,R3),R2 00000538 362C ADD R2,R6 0000053A F368 FMOV.S @R6,FR3 0000053C F437 FMOV.S FR3,@(R0,R4) bt_tblade. 390 _afRStrutVerts[6] = ptblade->pRHBStrut +s->pVtx[13].Point.p[0]; 0000053E 53E6 MOV.L @(24,R14),R3 00000540 9218 MOV.W L2560+8,R2 ; H'0138 00000542 503E MOV.L @(56,R3),R0 00000544 F326 FMOV.S @(R0,R2),FR3 00000546 E018 MOV #24,R0 00000548 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 391 _afRStrutVerts[7] = ptblade->pRHBStrut +s->pVtx[15].Point.p[0]; 0000054A 53E6 MOV.L @(24,R14),R3 0000054C 503E MOV.L @(56,R3),R0 0000054E F316 FMOV.S @(R0,R1),FR3 00000550 E01C MOV #28,R0 00000552 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 392 _afRStrutVerts[8] = ptblade->pRHBStrut +s->pVtx[16].Point.p[0]; 00000554 53E6 MOV.L @(24,R14),R3 00000556 910F MOV.W L2560+12,R1; H'0180 00000558 503E MOV.L @(56,R3),R0 0000055A F316 FMOV.S @(R0,R1),FR3 0000055C E020 MOV #32,R0 0000055E F437 FMOV.S FR3,@(R0,R4) bt_tblade. 393 bt_tblade. 394 /* Load the common geometry objects */ bt_tblade. 395 E nReturn = obsys_LoadGroup( aCommonLoad +Table, 0 ); 00000560 D310 MOV.L L2560+56,R3; _obsys_LoadGroup 00000562 D40F MOV.L L2560+52,R4; L1829 00000564 430B JSR @R3 00000566 E500 MOV #0,R5 00000568 A01F BRA L2373 0000056A 6403 MOV R0,R4 0000056C L2560: 0000056C 0156 .DATA.W H'0156 0000056E 00A8 .DATA.W H'00A8 00000570 00D8 .DATA.W H'00D8 00000572 00F0 .DATA.W H'00F0 00000574 0138 .DATA.W H'0138 00000576 0168 .DATA.W H'0168 00000578 0180 .DATA.W H'0180 0000057A 00000002 .RES.W 1 0000057C <00000000> .DATA.L L1911 00000580 <00000000> .DATA.L _gerr_Assert 00000584 <00000000> .DATA.L _obsys_LoadAnother 00000588 <00000000> .DATA.L L1932 0000058C <00000000> .DATA.L L1882 00000590 <00000000> .DATA.L L1935 00000594 <00000000> .DATA.L L1937 00000598 <00000000> .DATA.L L1880 0000059C <00000000> .DATA.L L1881 000005A0 <00000000> .DATA.L L1829 000005A4 <00000000> .DATA.L _obsys_LoadGroup 000005A8 L2367: bt_tblade. 396 } else { bt_tblade. 397 nReturn = -1; 000005A8 E4FF MOV #-1,R4 000005AA L2373: bt_tblade. 398 } bt_tblade. 399 if( nReturn == -1 ) { 000005AA 6043 MOV R4,R0 000005AC 0009 NOP 000005AE 88FF CMP/EQ #-1,R0 000005B0 8B07 BF L2374 bt_tblade. 400 nTmemAfter = tmem_GetFreeMem( 0 ); 000005B2 480B JSR @R8 000005B4 E400 MOV #0,R4 bt_tblade. 401 nTmemAfter += tmem_GetFreeMem( 1 ); 000005B6 480B JSR @R8 000005B8 E401 MOV #1,R4 bt_tblade. 402 E ( "Tidal Blade used %d bytes of textur +e space\n", nTmemBefore - nTmemAfter ); bt_tblade. 403 pPlayer->nLoadFlag = BOATS_EVERYTHING_ +OK; 000005BA E05A MOV #90,R0 000005BC E203 MOV #3,R2 000005BE A002 BRA L2356 000005C0 0D25 MOV.W R2,@(R0,R13) 000005C2 L2374: bt_tblade. 404 } else { bt_tblade. 405 pPlayer->nLoadFlag = BOATS_HULL_ONLY; 000005C2 E05A MOV #90,R0 000005C4 0DB5 MOV.W R11,@(R0,R13) bt_tblade. 406 E ( "NOT ENOUGH MEMORY FOR ALL OF TIDAL +BLADE!\n" ); bt_tblade. 407 } bt_tblade. 408 } 000005C6 L2356: 000005C6 9173 MOV.W L2562,R1 ; H'0080 000005C8 3F1C ADD R1,R15 000005CA 4F26 LDS.L @R15+,PR 000005CC FFF9 FMOV.S @R15+,FR15 000005CE 68F6 MOV.L @R15+,R8 000005D0 69F6 MOV.L @R15+,R9 000005D2 6AF6 MOV.L @R15+,R10 000005D4 6BF6 MOV.L @R15+,R11 000005D6 6CF6 MOV.L @R15+,R12 000005D8 6DF6 MOV.L @R15+,R13 000005DA 000B RTS 000005DC 6EF6 MOV.L @R15+,R14 bt_tblade. 409 bt_tblade. 410 void bt_tblade_Work( WorldOb_t *pWorldOb ) { 000005DE _bt_tblade_Work: ; function: bt_tblade + _Work ; frame size=16 000005DE 2FE6 MOV.L R14,@-R15 bt_tblade. 411 Player_t *pPlayer = (Player_t *)pWorldOb->pUs +erObject; bt_tblade. 412 TBlade_t *ptblade = (TBlade_t *)pPlayer->pBoat +Data; 000005E0 E060 MOV #96,R0 000005E2 2FD6 MOV.L R13,@-R15 bt_tblade. 413 f32 fThrottle; bt_tblade. 414 bt_tblade. 415 if( pPlayer->nLoadFlag > BOATS_HULL_ONLY ) { 000005E4 E201 MOV #1,R2 000005E6 FFFB FMOV.S FR15,@-R15 000005E8 5E43 MOV.L @(12,R4),R14 000005EA 4F22 STS.L PR,@-R15 000005EC 0DEE MOV.L @(R0,R14),R13 000005EE E05A MOV #90,R0 000005F0 03ED MOV.W @(R0,R14),R3 000005F2 633D EXTU.W R3,R3 000005F4 3327 CMP/GT R2,R3 000005F6 8B56 BF L2376 bt_tblade. 416 bt_tblade. 417 switch( pPlayer->nLod ) 000005F8 E058 MOV #88,R0 000005FA 00ED MOV.W @(R0,R14),R0 000005FC 8800 CMP/EQ #0,R0 000005FE 8905 BT L2215 00000600 8801 CMP/EQ #1,R0 00000602 8924 BT L2216 00000604 8802 CMP/EQ #2,R0 00000606 894E BT L2376 00000608 A044 BRA L2218 0000060A 0009 NOP 0000060C L2215: ; case label bt_tblade. 418 { bt_tblade. 419 case BOATS_LOD_PLAYER: bt_tblade. 420 /* Process the engine vibratio +ns */ bt_tblade. 421 E fThrottle = ( (pPlayer->Contro +ls.fWithDeadZone[1])>=0.0f ? (pPlayer->Controls.fWithD +eadZone[1]) : -(pPlayer->Controls.fWithDeadZone[1]) ) ++ 0.25f; 0000060C E040 MOV #64,R0 0000060E F38D FLDI0 FR3 00000610 F4E6 FMOV.S @(R0,R14),FR4 00000612 F345 FCMP/GT FR4,FR3 00000614 8901 BT L2378 00000616 A002 BRA L2379 00000618 F34C FMOV.S FR4,FR3 0000061A L2378: 0000061A F34C FMOV.S FR4,FR3 0000061C F34D FNEG FR3 0000061E L2379: 0000061E C725 MOVA L2562+4,R0 bt_tblade. 422 fThrottle *= xmath_NextSin90Va +lue(); 00000620 D325 MOV.L L2562+8, + R3 ; _xmath_NextSin90Valu + e 00000622 F208 FMOV.S @R0,FR2 00000624 FF3C FMOV.S FR3,FR15 00000626 430B JSR @R3 00000628 FF20 FADD FR2,FR15 bt_tblade. 423 E ptblade->fEngVibration = xmat +h_RandomFloat() * 0.05f * fThrottle; 0000062A D224 MOV.L L2562+12,R2; _xmath_RandomFloat 0000062C 420B JSR @R2 0000062E FF02 FMUL FR0,FR15 00000630 F0F2 FMUL FR15,FR0 00000632 C723 MOVA L2562+16,R0 00000634 F308 FMOV.S @R0,FR3 00000636 E028 MOV #40,R0 bt_tblade. 424 ptblade->nEngVibration = (int) +(xmath_RandomFloat() * 100.0f * fThrottle); 00000638 D320 MOV.L L2562+12,R3; _xmath_RandomFloat 0000063A F032 FMUL FR3,FR0 0000063C 430B JSR @R3 0000063E FD07 FMOV.S FR0,@(R0,R13) 00000640 F0F2 FMUL FR15,FR0 00000642 C720 MOVA L2562+20,R0 00000644 F308 FMOV.S @R0,FR3 00000646 F032 FMUL FR3,FR0 00000648 F03D FTRC FR0,FPUL 0000064A 035A STS FPUL,R3 0000064C 1D39 MOV.L R3,@(36,R13) bt_tblade. 425 case BOATS_LOD_HIGH: 0000064E L2216: ; case label bt_tblade. 426 /* Process the hydro boost ani +m */ bt_tblade. 427 _ProcessHydroBoost( ptblade, p +Player ); 0000064E 65E3 MOV R14,R5 00000650 B141 BSR L1884 00000652 64D3 MOV R13,R4 bt_tblade. 428 /* Process the flames */ bt_tblade. 429 _ProcessFlame( ptblade, pPlaye +r ); 00000654 65E3 MOV R14,R5 00000656 B326 BSR L1888 00000658 64D3 MOV R13,R4 bt_tblade. 430 _ProcessEngineFlames( ptblade, + pPlayer ); 0000065A 65E3 MOV R14,R5 0000065C B262 BSR L1886 0000065E 64D3 MOV R13,R4 bt_tblade. 431 /* ADD A FLAME PARTICLE IF NEE +DED */ bt_tblade. 432 E if( (pPlayer->nLoadFlag == BOA +TS_EVERYTHING_OK) && !(pPlayer->nFlags & 0x0004 ) ) { 00000660 E05A MOV #90,R0 00000662 00ED MOV.W @(R0,R14),R0 00000664 600D EXTU.W R0,R0 00000666 8803 CMP/EQ #3,R0 00000668 8B1D BF L2376 0000066A 60E2 MOV.L @R14,R0 0000066C C804 TST #4,R0 0000066E 8B1A BF L2376 bt_tblade. 433 if( ptblade->bEngDrawF +lames || ptblade->bFDrawOrange || ptblade->bFDrawBlue +) { 00000670 E034 MOV #52,R0 00000672 03DC MOV.B @(R0,R13),R3 00000674 2338 TST R3,R3 00000676 8B07 BF L2382 00000678 E035 MOV #53,R0 0000067A 03DC MOV.B @(R0,R13),R3 0000067C 2338 TST R3,R3 0000067E 8B03 BF L2382 00000680 E036 MOV #54,R0 00000682 03DC MOV.B @(R0,R13),R3 00000684 2338 TST R3,R3 00000686 890E BT L2376 00000688 L2382: bt_tblade. 434 _FlameParticle +Add( pPlayer ); 00000688 4F26 LDS.L @R15+,PR 0000068A 64E3 MOV R14,R4 0000068C FFF9 FMOV.S @R15+,FR15 0000068E 6DF6 MOV.L @R15+,R13 00000690 A685 BRA L1892 00000692 6EF6 MOV.L @R15+,R14 00000694 L2218: ; default label bt_tblade. 435 } bt_tblade. 436 } bt_tblade. 437 break; bt_tblade. 438 case BOATS_LOD_DRONE: bt_tblade. 439 /* no need to do anything, the +se boats can't get powerups */ bt_tblade. 440 break; bt_tblade. 441 default: bt_tblade. 442 E if( (!(0)) ) gerr_Assert( 0, " +bt_tblade.c", 442 ); 00000694 4F26 LDS.L @R15+,PR 00000696 D20D MOV.L L2562+28,R2; _gerr_Assert 00000698 E400 MOV #0,R4 0000069A D50B MOV.L L2562+24,R5; L1911 0000069C FFF9 FMOV.S @R15+,FR15 0000069E 9608 MOV.W L2562+2,R6 ; H'01BA 000006A0 6DF6 MOV.L @R15+,R13 000006A2 422B JMP @R2 000006A4 6EF6 MOV.L @R15+,R14 000006A6 L2376: bt_tblade. 443 break; bt_tblade. 444 } bt_tblade. 445 } bt_tblade. 446 } 000006A6 4F26 LDS.L @R15+,PR 000006A8 FFF9 FMOV.S @R15+,FR15 000006AA 6DF6 MOV.L @R15+,R13 000006AC 000B RTS 000006AE 6EF6 MOV.L @R15+,R14 000006B0 L2562: 000006B0 0080 .DATA.W H'0080 000006B2 01BA .DATA.W H'01BA 000006B4 3E800000 .DATA.L H'3E800000 000006B8 <00000000> .DATA.L _xmath_NextSin90Value 000006BC <00000000> .DATA.L _xmath_RandomFloat 000006C0 3D4CCCCC .DATA.L H'3D4CCCCC 000006C4 42C80000 .DATA.L H'42C80000 000006C8 <00000000> .DATA.L L1911 000006CC <00000000> .DATA.L _gerr_Assert bt_tblade. 447 bt_tblade. 448 void bt_tblade_Draw( WorldOb_t *pWorldOb ) { 000006D0 _bt_tblade_Draw: ; function: bt_tblade + _Draw ; frame size=152 000006D0 2FE6 MOV.L R14,@-R15 bt_tblade. 449 Xfm_t xfm; bt_tblade. 450 int nLod; bt_tblade. 451 Player_t *pPlayer = (Player_t *)pWorldOb->pUs +erObject; bt_tblade. 452 TBlade_t *ptblade = (TBlade_t *)pPlayer->pBoat +Data; 000006D2 E060 MOV #96,R0 000006D4 2FD6 MOV.L R13,@-R15 000006D6 2FC6 MOV.L R12,@-R15 000006D8 2FB6 MOV.L R11,@-R15 000006DA 2FA6 MOV.L R10,@-R15 000006DC FFFB FMOV.S FR15,@-R15 000006DE FFEB FMOV.S FR14,@-R15 000006E0 FFDB FMOV.S FR13,@-R15 000006E2 5C43 MOV.L @(12,R4),R12 000006E4 4F22 STS.L PR,@-R15 000006E6 0ECE MOV.L @(R0,R12),R14 bt_tblade. 453 Mesh3d_t *pMesh; bt_tblade. 454 f32 fX, fZ; bt_tblade. 455 E int bDrawParts = 0; bt_tblade. 456 bt_tblade. 457 if( pPlayer->nLoadFlag > BOATS_DO_NOTHING ) { 000006E8 E05A MOV #90,R0 000006EA 03CD MOV.W @(R0,R12),R3 000006EC 7F8C ADD #-116,R15 000006EE 633D EXTU.W R3,R3 000006F0 4315 CMP/PL R3 000006F2 8D02 BT/S L2563 000006F4 EA00 MOV #0,R10 000006F6 A0E0 BRA L2384 000006F8 0009 NOP 000006FA L2563: bt_tblade. 458 bt_tblade. 459 switch( pPlayer->nLod ) 000006FA E058 MOV #88,R0 000006FC DD0E MOV.L L2564+6,R13; _mesh3d_Draw 000006FE 00CD MOV.W @(R0,R12),R0 00000700 8800 CMP/EQ #0,R0 00000702 8909 BT L2219 00000704 8801 CMP/EQ #1,R0 00000706 8B01 BF L2565 00000708 A091 BRA L2220 0000070A 0009 NOP 0000070C L2565: 0000070C 8802 CMP/EQ #2,R0 0000070E 8B01 BF L2566 00000710 A0A9 BRA L2221 00000712 0009 NOP 00000714 L2566: 00000714 A0CC BRA L2222 00000716 0009 NOP 00000718 L2219: ; case label bt_tblade. 460 { bt_tblade. 461 case BOATS_LOD_PLAYER: bt_tblade. 462 if( ptblade->nHBState == _HB_O +PEN ) { 00000718 85E2 MOV.W @(4,R14),R0 0000071A 600D EXTU.W R0,R0 0000071C 8802 CMP/EQ #2,R0 0000071E 8B02 BF L2386 bt_tblade. 463 pMesh = ptblade->pDepl +oyed; 00000720 9007 MOV.W L2564,R0 ; H'0158 00000722 A004 BRA L2541 00000724 0009 NOP 00000726 L2386: bt_tblade. 464 } else if( ptblade->nHBState = += _HB_CLOSED ) { 00000726 85E2 MOV.W @(4,R14),R0 00000728 2008 TST R0,R0 0000072A 8B07 BF L2388 bt_tblade. 465 pMesh = ptblade->pRetr +acted; 0000072C 9002 MOV.W L2564+2,R0 ; H'0154 0000072E L2541: 0000072E A00E BRA L2387 00000730 0BEE MOV.L @(R0,R14),R11 00000732 L2564: 00000732 0158 .DATA.W H'0158 00000734 0154 .DATA.W H'0154 00000736 00000002 .RES.W 1 00000738 <00000000> .DATA.L _mesh3d_Draw 0000073C L2388: bt_tblade. 466 } else { bt_tblade. 467 pMesh = ptblade->pNoPa +rts; 0000073C 909B MOV.W L2567,R0 ; H'015C bt_tblade. 468 if( pPlayer->nLoadFlag + > BOATS_HULL_ONLY ) { 0000073E E401 MOV #1,R4 00000740 0BEE MOV.L @(R0,R14),R11 00000742 E05A MOV #90,R0 00000744 03CD MOV.W @(R0,R12),R3 00000746 633D EXTU.W R3,R3 00000748 3347 CMP/GT R4,R3 0000074A 8B00 BF L2387 bt_tblade. 469 E bDrawParts = 1 +; 0000074C 6A43 MOV R4,R10 0000074E L2387: bt_tblade. 470 } bt_tblade. 471 } bt_tblade. 472 _ChangeStaticLightingMotifs( p +tblade ); 0000074E D24B MOV.L L2567+6,R2 ; L1895 00000750 420B JSR @R2 00000752 64E3 MOV R14,R4 bt_tblade. 473 bt_tblade. 474 E mesh3d_Draw( pMesh, 0xf, 1); 00000754 E50F MOV #15,R5 00000756 E601 MOV #1,R6 00000758 4D0B JSR @R13 0000075A 64B3 MOV R11,R4 bt_tblade. 475 bt_tblade. 476 if( bDrawParts ) { 0000075C DB48 MOV.L L2567+10,R11; _xfm_Push 0000075E 2AA8 TST R10,R10 00000760 8D4C BT/S L2391 00000762 FF8D FLDI0 FR15 bt_tblade. 477 /* draw the struts */ bt_tblade. 478 E mesh3d_Draw( ptblade-> +pLHBStruts, 0xf, 1 ); 00000764 E50F MOV #15,R5 00000766 E601 MOV #1,R6 00000768 4D0B JSR @R13 0000076A 54E5 MOV.L @(20,R14),R4 bt_tblade. 479 E mesh3d_Draw( ptblade-> +pRHBStruts, 0xf, 1 ); 0000076C E50F MOV #15,R5 0000076E E601 MOV #1,R6 00000770 4D0B JSR @R13 00000772 54E6 MOV.L @(24,R14),R4 bt_tblade. 480 /* Translate the left +cowling */ bt_tblade. 481 fX = ptblade->fHBLeftX +lat; 00000774 E008 MOV #8,R0 bt_tblade. 482 xfm_BuildXlatFromPoint +( &xfm, fX, 0.0f, 0.0f ); 00000776 DA43 MOV.L L2567+14, + R10; _xfm_BuildXlatFromP + oint 00000778 FEE6 FMOV.S @(R0,R14),FR14 0000077A 64F3 MOV R15,R4 0000077C F6FC FMOV.S FR15,FR6 0000077E F4EC FMOV.S FR14,FR4 00000780 F5FC FMOV.S FR15,FR5 00000782 4A0B JSR @R10 00000784 7408 ADD #8,R4 bt_tblade. 483 xfm_Push( &xfm ); 00000786 64F3 MOV R15,R4 00000788 4B0B JSR @R11 0000078A 7408 ADD #8,R4 bt_tblade. 484 E mesh3d_Draw( _pPLCowli +ng, 0xf, 1 ); 0000078C D33E MOV.L L2567+18,R3; L1804 0000078E E50F MOV #15,R5 00000790 E601 MOV #1,R6 00000792 4D0B JSR @R13 00000794 6432 MOV.L @R3,R4 bt_tblade. 485 /* Translate the left +booster */ bt_tblade. 486 fZ = ptblade->fHBBoost +erXlat; 00000796 E00C MOV #12,R0 bt_tblade. 487 xfm_BuildXlatFromPoint +( &xfm, 0.0f, 0.0f, fZ ); 00000798 F4FC FMOV.S FR15,FR4 0000079A FDE6 FMOV.S @(R0,R14),FR13 0000079C 64F3 MOV R15,R4 0000079E F5FC FMOV.S FR15,FR5 000007A0 F6DC FMOV.S FR13,FR6 000007A2 4A0B JSR @R10 000007A4 7408 ADD #8,R4 bt_tblade. 488 xfm_Push( &xfm ); 000007A6 64F3 MOV R15,R4 000007A8 4B0B JSR @R11 000007AA 7408 ADD #8,R4 bt_tblade. 489 E mesh3d_Draw( _pPLBoost +er, 0xf, 1 ); 000007AC D337 MOV.L L2567+22,R3; L1807 000007AE E50F MOV #15,R5 000007B0 E601 MOV #1,R6 000007B2 4D0B JSR @R13 000007B4 6432 MOV.L @R3,R4 bt_tblade. 490 xfm_PopN( 2 ); 000007B6 D236 MOV.L L2567+26,R2; _xfm_PopN 000007B8 420B JSR @R2 000007BA E402 MOV #2,R4 bt_tblade. 491 /* Translate the right + cowling */ bt_tblade. 492 fX = -fX; 000007BC F4EC FMOV.S FR14,FR4 bt_tblade. 493 xfm_BuildXlatFromPoint +( &xfm, fX, 0.0f, 0.0f ); 000007BE 64F3 MOV R15,R4 000007C0 F5FC FMOV.S FR15,FR5 000007C2 F44D FNEG FR4 000007C4 F6FC FMOV.S FR15,FR6 000007C6 4A0B JSR @R10 000007C8 7408 ADD #8,R4 bt_tblade. 494 xfm_Push( &xfm ); 000007CA 64F3 MOV R15,R4 000007CC 4B0B JSR @R11 000007CE 7408 ADD #8,R4 bt_tblade. 495 E mesh3d_Draw( _pPRCowli +ng, 0xf, 1 ); 000007D0 D330 MOV.L L2567+30,R3; L1805 000007D2 E50F MOV #15,R5 000007D4 E601 MOV #1,R6 000007D6 4D0B JSR @R13 000007D8 6432 MOV.L @R3,R4 bt_tblade. 496 /* Translate the right + booster */ bt_tblade. 497 xfm_BuildXlatFromPoint +( &xfm, 0.0f, 0.0f, fZ ); 000007DA F4FC FMOV.S FR15,FR4 000007DC 64F3 MOV R15,R4 000007DE F6DC FMOV.S FR13,FR6 000007E0 F5FC FMOV.S FR15,FR5 000007E2 4A0B JSR @R10 000007E4 7408 ADD #8,R4 bt_tblade. 498 xfm_Push( &xfm ); 000007E6 64F3 MOV R15,R4 000007E8 4B0B JSR @R11 000007EA 7408 ADD #8,R4 bt_tblade. 499 E mesh3d_Draw( _pPRBoost +er, 0xf, 1 ); 000007EC D22A MOV.L L2567+34,R2; L1808 000007EE E50F MOV #15,R5 000007F0 E601 MOV #1,R6 000007F2 4D0B JSR @R13 000007F4 6422 MOV.L @R2,R4 bt_tblade. 500 xfm_PopN( 2 ); 000007F6 D326 MOV.L L2567+26,R3; _xfm_PopN 000007F8 430B JSR @R3 000007FA E402 MOV #2,R4 000007FC L2391: bt_tblade. 501 } bt_tblade. 502 /* draw the engine */ bt_tblade. 503 xfm_BuildRotZ_XlatFromPoint( & +xfm, ptblade->nEngVibration, 0.0f, ptblade->fEngVibrat +ion, 0.0f ); 000007FC E028 MOV #40,R0 000007FE 55E9 MOV.L @(36,R14),R5 00000800 F5E6 FMOV.S @(R0,R14),FR5 00000802 64F3 MOV R15,R4 00000804 D325 MOV.L L2567+38, + R3; _xfm_BuildRotZ_XlatF + romPoint 00000806 F6FC FMOV.S FR15,FR6 00000808 F4FC FMOV.S FR15,FR4 0000080A 430B JSR @R3 0000080C 7408 ADD #8,R4 bt_tblade. 504 xfm_Push( &xfm ); 0000080E 64F3 MOV R15,R4 00000810 4B0B JSR @R11 00000812 7408 ADD #8,R4 bt_tblade. 505 E mesh3d_Draw( _pPEngine, 0xf, 1 + ); 00000814 D222 MOV.L L2567+42,R2; L1806 00000816 E50F MOV #15,R5 00000818 E601 MOV #1,R6 0000081A 4D0B JSR @R13 0000081C 6422 MOV.L @R2,R4 bt_tblade. 506 xfm_Pop(); 0000081E D321 MOV.L L2567+46,R3; _xfm_Pop 00000820 430B JSR @R3 00000822 0009 NOP bt_tblade. 507 /* Draw the propeller */ bt_tblade. 508 _DrawProp( ptblade, pPlayer ); 00000824 65C3 MOV R12,R5 00000826 B201 BSR L1887 00000828 64E3 MOV R14,R4 bt_tblade. 509 break; 0000082A A046 BRA L2384 0000082C 0009 NOP 0000082E L2220: ; case label bt_tblade. 510 case BOATS_LOD_HIGH: bt_tblade. 511 pMesh = ( ptblade->nHBState == + _HB_CLOSED ) ? ptblade->pRetracted : ptblade->pDeploy +ed; 0000082E 85E2 MOV.W @(4,R14),R0 00000830 2008 TST R0,R0 00000832 8B02 BF L2392 00000834 9020 MOV.W L2567+2,R0 ; H'0154 00000836 A001 BRA L2540 00000838 0009 NOP 0000083A L2392: 0000083A 901E MOV.W L2567+4,R0 ; H'0158 0000083C L2540: 0000083C 02EE MOV.L @(R0,R14),R2 0000083E 1F21 MOV.L R2,@(4,R15) bt_tblade. 512 _ChangeStaticLightingMotifs( p +tblade ); 00000840 D30E MOV.L L2567+6,R3 ; L1895 00000842 430B JSR @R3 00000844 64E3 MOV R14,R4 bt_tblade. 513 E mesh3d_Draw( mesh3d_DetermineL +od( pMesh, &nLod ), 0xf, 1 ); 00000846 D318 MOV.L L2567+50, + R3; _mesh3d_DetermineLod 00000848 65F3 MOV R15,R5 0000084A 430B JSR @R3 0000084C 54F1 MOV.L @(4,R15),R4 0000084E E50F MOV #15,R5 00000850 6403 MOV R0,R4 00000852 4D0B JSR @R13 00000854 E601 MOV #1,R6 bt_tblade. 514 if( !nLod ) { 00000856 62F2 MOV.L @R15,R2 00000858 2228 TST R2,R2 0000085A 8B2E BF L2384 bt_tblade. 515 /* Draw the propeller +*/ bt_tblade. 516 _DrawProp( ptblade, pP +layer ); 0000085C 65C3 MOV R12,R5 0000085E B1E5 BSR L1887 00000860 64E3 MOV R14,R4 bt_tblade. 517 } bt_tblade. 518 break; 00000862 A02A BRA L2384 00000864 0009 NOP 00000866 L2221: ; case label bt_tblade. 519 case BOATS_LOD_DRONE: bt_tblade. 520 E mesh3d_DrawWithLod( ptblade->p +Retracted, 0xf, 1); 00000866 9007 MOV.W L2567+2,R0 ; H'0154 00000868 E601 MOV #1,R6 0000086A D310 MOV.L L2567+54,R3; _mesh3d_DrawWithLod 0000086C E50F MOV #15,R5 0000086E 430B JSR @R3 00000870 04EE MOV.L @(R0,R14),R4 bt_tblade. 521 break; 00000872 A022 BRA L2384 00000874 0009 NOP 00000876 L2567: 00000876 015C .DATA.W H'015C 00000878 0154 .DATA.W H'0154 0000087A 0158 .DATA.W H'0158 0000087C <00000000> .DATA.L L1895 00000880 <00000000> .DATA.L _xfm_Push 00000884 <00000000> .DATA.L _xfm_BuildXlatFromPoint 00000888 <00000000> .DATA.L L1804 0000088C <00000000> .DATA.L L1807 00000890 <00000000> .DATA.L _xfm_PopN 00000894 <00000000> .DATA.L L1805 00000898 <00000000> .DATA.L L1808 0000089C <00000000> .DATA.L _xfm_BuildRotZ_XlatFromPoint 000008A0 <00000000> .DATA.L L1806 000008A4 <00000000> .DATA.L _xfm_Pop 000008A8 <00000000> .DATA.L _mesh3d_DetermineLod 000008AC <00000000> .DATA.L _mesh3d_DrawWithLod 000008B0 L2222: ; default label bt_tblade. 522 default: bt_tblade. 523 E if( (!(0)) ) gerr_Assert( 0, " +bt_tblade.c", 523 ); 000008B0 D33F MOV.L L2568+10,R3; _gerr_Assert 000008B2 D53E MOV.L L2568+6,R5 ; L1911 000008B4 9677 MOV.W L2568,R6 ; H'020B 000008B6 430B JSR @R3 000008B8 E400 MOV #0,R4 bt_tblade. 524 break; 000008BA L2384: bt_tblade. 525 } bt_tblade. 526 } bt_tblade. 527 /* always call... */ bt_tblade. 528 boats_DrawTrackingNumber( pPlayer ); 000008BA D33E MOV.L L2568+14, + R3; _boats_DrawTrackingN + umber 000008BC 430B JSR @R3 000008BE 64C3 MOV R12,R4 bt_tblade. 529 } 000008C0 7F74 ADD #116,R15 000008C2 4F26 LDS.L @R15+,PR 000008C4 FDF9 FMOV.S @R15+,FR13 000008C6 FEF9 FMOV.S @R15+,FR14 000008C8 FFF9 FMOV.S @R15+,FR15 000008CA 6AF6 MOV.L @R15+,R10 000008CC 6BF6 MOV.L @R15+,R11 000008CE 6CF6 MOV.L @R15+,R12 000008D0 6DF6 MOV.L @R15+,R13 000008D2 000B RTS 000008D4 6EF6 MOV.L @R15+,R14 bt_tblade. 530 bt_tblade. 531 /*================== */ bt_tblade. 532 /* private functions */ bt_tblade. 533 bt_tblade. 534 static void _ProcessHydroBoost( TBlade_t *pTblade, Pla +yer_t *pPlayer ) { 000008D6 L1884: ; function: _ProcessH + ydroBoost ; frame size=24 000008D6 2FE6 MOV.L R14,@-R15 bt_tblade. 535 bt_tblade. 536 /* check if we have a turbo boost */ bt_tblade. 537 if( (pPlayer->Powerup.fBoosterTime > 0.0f ) && + (pTblade->nHBState <= _HB_OPEN ) ) { 000008D8 E028 MOV #40,R0 000008DA 2FD6 MOV.L R13,@-R15 000008DC 6D53 MOV R5,R13 000008DE 2FC6 MOV.L R12,@-R15 000008E0 6E43 MOV R4,R14 000008E2 2FB6 MOV.L R11,@-R15 000008E4 EC00 MOV #0,R12 000008E6 FFFB FMOV.S FR15,@-R15 000008E8 F2D6 FMOV.S @(R0,R13),FR2 000008EA F38D FLDI0 FR3 000008EC F235 FCMP/GT FR3,FR2 000008EE DB32 MOV.L L2568+18, + R11; _phys_ChangeBooster + State 000008F0 4F22 STS.L PR,@-R15 000008F2 8F4E BF/S L2396 000008F4 FF8D FLDI0 FR15 000008F6 85E2 MOV.W @(4,R14),R0 000008F8 E302 MOV #2,R3 000008FA 600D EXTU.W R0,R0 000008FC 3037 CMP/GT R3,R0 000008FE 8948 BT L2396 bt_tblade. 538 switch( pTblade->nHBState ) 00000900 85E2 MOV.W @(4,R14),R0 00000902 600D EXTU.W R0,R0 00000904 8800 CMP/EQ #0,R0 00000906 8907 BT L2223 00000908 8801 CMP/EQ #1,R0 0000090A 8918 BT L2224 0000090C 8802 CMP/EQ #2,R0 0000090E 8B01 BF L2569 00000910 A093 BRA L2402 00000912 0009 NOP 00000914 L2569: 00000914 A032 BRA L2226 00000916 0009 NOP 00000918 L2223: ; case label bt_tblade. 539 { bt_tblade. 540 case _HB_CLOSED: bt_tblade. 541 /* reset the vars for our anim +ation */ bt_tblade. 542 pTblade->nHBState = _HB_DEPLOY +ING; 00000918 E001 MOV #1,R0 0000091A 81E2 MOV.W R0,@(4,R14) bt_tblade. 543 pTblade->nHBAnimFrameCount = 0 +; 0000091C 60C3 MOV R12,R0 0000091E 0009 NOP 00000920 81E3 MOV.W R0,@(6,R14) bt_tblade. 544 pTblade->fHBLeftXlat = 0.0f; 00000922 E008 MOV #8,R0 00000924 FEF7 FMOV.S FR15,@(R0,R14) bt_tblade. 545 pTblade->fHBBoosterXlat = 0.0f +; 00000926 E00C MOV #12,R0 00000928 FEF7 FMOV.S FR15,@(R0,R14) bt_tblade. 546 pTblade->fHBAnimPercent = 0.0f +; 0000092A E010 MOV #16,R0 0000092C FEF7 FMOV.S FR15,@(R0,R14) bt_tblade. 547 pTblade->nFState = F_RESET; 0000092E E037 MOV #55,R0 bt_tblade. 548 phys_ChangeBoosterState( &pPla +yer->Phys, PHYS_BOOSTERSTATE_DEPLOYING ); 00000930 E501 MOV #1,R5 00000932 0EC4 MOV.B R12,@(R0,R14) 00000934 9438 MOV.W L2568+2,R4 ; H'0100 00000936 4B0B JSR @R11 00000938 34DC ADD R13,R4 bt_tblade. 549 break; 0000093A A07E BRA L2402 0000093C 0009 NOP 0000093E L2224: ; case label bt_tblade. 550 case _HB_DEPLOYING: bt_tblade. 551 /* see if we are fully deploye +d yet */ bt_tblade. 552 if( _AnimateDeployingBoosters( + pTblade ) ) { 0000093E EC02 MOV #2,R12 00000940 B3F2 BSR L1890 00000942 64E3 MOV R14,R4 00000944 2008 TST R0,R0 00000946 8911 BT L2398 bt_tblade. 553 pTblade->nFState = F_T +URNON; bt_tblade. 554 pTblade->nFState = F_B +_USEABLE; 00000948 E305 MOV #5,R3 0000094A E037 MOV #55,R0 0000094C 0E34 MOV.B R3,@(R0,R14) bt_tblade. 555 pTblade->nHBState = _H +B_OPEN; 0000094E 60C3 MOV R12,R0 00000950 0009 NOP 00000952 81E2 MOV.W R0,@(4,R14) bt_tblade. 556 pTblade->fHBAnimPercen +t = 0.0f; 00000954 E010 MOV #16,R0 bt_tblade. 557 powerup_MakeBoosterUse +able( &pPlayer->Powerup ); 00000956 64D3 MOV R13,R4 00000958 FEF7 FMOV.S FR15,@(R0,R14) 0000095A D318 MOV.L L2568+22, + R3; _powerup_MakeBooster + Useable 0000095C 430B JSR @R3 0000095E 7424 ADD #36,R4 bt_tblade. 558 phys_ChangeBoosterStat +e( &pPlayer->Phys, PHYS_BOOSTERSTATE_DEPLOYED ); 00000960 9422 MOV.W L2568+2,R4 ; H'0100 00000962 E502 MOV #2,R5 00000964 4B0B JSR @R11 00000966 34DC ADD R13,R4 00000968 A053 BRA L2542 0000096A 0009 NOP 0000096C L2398: bt_tblade. 559 } else if( pTblade->nHBAnimFra +meCount == 46 ) { 0000096C 85E3 MOV.W @(6,R14),R0 0000096E 600D EXTU.W R0,R0 00000970 882E CMP/EQ #46,R0 00000972 8B4E BF L2542 bt_tblade. 560 /* turn on the blue fl +ame */ bt_tblade. 561 pTblade->nFState = F_T +URNON; 00000974 E037 MOV #55,R0 00000976 0EC4 MOV.B R12,@(R0,R14) bt_tblade. 562 } bt_tblade. 563 _ProcessLStrut( pTblade, pPlay +er ); bt_tblade. 564 break; 00000978 A04B BRA L2542 0000097A 0009 NOP 0000097C L2226: ; default label bt_tblade. 565 case _HB_OPEN: bt_tblade. 566 /* nothing to do here + */ bt_tblade. 567 break; bt_tblade. 568 default: bt_tblade. 569 E if( (!(0)) ) gerr_Assert( 0, " +bt_tblade.c", 569 ); 0000097C 4F26 LDS.L @R15+,PR 0000097E D20C MOV.L L2568+10,R2; _gerr_Assert 00000980 E400 MOV #0,R4 00000982 D50A MOV.L L2568+6,R5 ; L1911 00000984 FFF9 FMOV.S @R15+,FR15 00000986 9610 MOV.W L2568+4,R6 ; H'0239 00000988 6BF6 MOV.L @R15+,R11 0000098A 6CF6 MOV.L @R15+,R12 0000098C 6DF6 MOV.L @R15+,R13 0000098E 422B JMP @R2 00000990 6EF6 MOV.L @R15+,R14 00000992 L2396: bt_tblade. 570 break; bt_tblade. 571 } bt_tblade. 572 } bt_tblade. 573 else { bt_tblade. 574 /* there is no turbo boost left */ bt_tblade. 575 switch( pTblade->nHBState ) 00000992 85E2 MOV.W @(4,R14),R0 00000994 600D EXTU.W R0,R0 00000996 8800 CMP/EQ #0,R0 00000998 894F BT L2402 0000099A 8802 CMP/EQ #2,R0 0000099C 8910 BT L2228 0000099E 8803 CMP/EQ #3,R0 000009A0 8925 BT L2229 000009A2 A03F BRA L2230 000009A4 0009 NOP 000009A6 L2568: 000009A6 020B .DATA.W H'020B 000009A8 0100 .DATA.W H'0100 000009AA 0239 .DATA.W H'0239 000009AC <00000000> .DATA.L L1911 000009B0 <00000000> .DATA.L _gerr_Assert 000009B4 <00000000> .DATA.L _boats_DrawTrackingNumber 000009B8 <00000000> .DATA.L _phys_ChangeBoosterState 000009BC <00000000> .DATA.L _powerup_MakeBoosterUseable 000009C0 L2228: ; case label bt_tblade. 576 { bt_tblade. 577 case _HB_CLOSED: bt_tblade. 578 /* don't need to do anything, +we are already closed */ bt_tblade. 579 break; bt_tblade. 580 case _HB_OPEN: bt_tblade. 581 /* reverse the animation to pu +t everything back in its place */ bt_tblade. 582 pTblade->nHBState = _HB_RETRAC +TING; 000009C0 E003 MOV #3,R0 000009C2 81E2 MOV.W R0,@(4,R14) bt_tblade. 583 pTblade->nHBAnimFrameCount = 0 +; 000009C4 60C3 MOV R12,R0 000009C6 0009 NOP 000009C8 81E3 MOV.W R0,@(6,R14) bt_tblade. 584 E pTblade->fHBLeftXlat = -1.757f +; 000009CA C74F MOVA L2570+4,R0 000009CC F308 FMOV.S @R0,FR3 000009CE E008 MOV #8,R0 bt_tblade. 585 E pTblade->fHBBoosterXlat = -3.0 +f; bt_tblade. 586 pTblade->fHBAnimPercent = 0.0f +; bt_tblade. 587 phys_ChangeBoosterState( &pPla +yer->Phys, PHYS_BOOSTERSTATE_STOWING ); 000009D0 E503 MOV #3,R5 000009D2 FE37 FMOV.S FR3,@(R0,R14) 000009D4 C74D MOVA L2570+8,R0 000009D6 F308 FMOV.S @R0,FR3 000009D8 E00C MOV #12,R0 000009DA FE37 FMOV.S FR3,@(R0,R14) 000009DC E010 MOV #16,R0 000009DE FEF7 FMOV.S FR15,@(R0,R14) 000009E0 9490 MOV.W L2570,R4 ; H'0100 000009E2 4B0B JSR @R11 000009E4 34DC ADD R13,R4 bt_tblade. 588 /* turn out the lights and fla +me */ bt_tblade. 589 pTblade->nFState = F_TURNOFF; 000009E6 E037 MOV #55,R0 000009E8 E303 MOV #3,R3 bt_tblade. 590 break; 000009EA A026 BRA L2402 000009EC 0E34 MOV.B R3,@(R0,R14) 000009EE L2229: ; case label bt_tblade. 591 case _HB_RETRACTING: bt_tblade. 592 /* see if we are fully retract +ed yet */ bt_tblade. 593 if( _AnimateRetractingBoosters +( pTblade ) ) { 000009EE B44D BSR L1889 000009F0 64E3 MOV R14,R4 000009F2 2008 TST R0,R0 000009F4 890D BT L2542 bt_tblade. 594 pTblade->nHBState = _H +B_CLOSED; 000009F6 60C3 MOV R12,R0 000009F8 0009 NOP 000009FA 81E2 MOV.W R0,@(4,R14) bt_tblade. 595 pTblade->nHBAnimFrameC +ount = 0; bt_tblade. 596 pTblade->fHBLeftXlat = + 0.0f; bt_tblade. 597 pTblade->fHBBoosterXla +t = 0.0f; bt_tblade. 598 pTblade->fHBAnimPercen +t = 0.0f; bt_tblade. 599 phys_ChangeBoosterStat +e( &pPlayer->Phys, PHYS_BOOSTERSTATE_STOWED ); 000009FC E500 MOV #0,R5 000009FE 81E3 MOV.W R0,@(6,R14) 00000A00 E008 MOV #8,R0 00000A02 FEF7 FMOV.S FR15,@(R0,R14) 00000A04 E00C MOV #12,R0 00000A06 FEF7 FMOV.S FR15,@(R0,R14) 00000A08 E010 MOV #16,R0 00000A0A FEF7 FMOV.S FR15,@(R0,R14) 00000A0C 947A MOV.W L2570,R4 ; H'0100 00000A0E 4B0B JSR @R11 00000A10 34DC ADD R13,R4 00000A12 L2542: bt_tblade. 600 } bt_tblade. 601 _ProcessLStrut( pTblade, pPlay +er ); 00000A12 4F26 LDS.L @R15+,PR 00000A14 65D3 MOV R13,R5 00000A16 64E3 MOV R14,R4 00000A18 FFF9 FMOV.S @R15+,FR15 00000A1A 6BF6 MOV.L @R15+,R11 00000A1C 6CF6 MOV.L @R15+,R12 00000A1E 6DF6 MOV.L @R15+,R13 00000A20 A012 BRA L1885 00000A22 6EF6 MOV.L @R15+,R14 00000A24 L2230: ; default label bt_tblade. 602 break; bt_tblade. 603 default: bt_tblade. 604 E if( (!(0)) ) gerr_Assert( 0, " +bt_tblade.c", 604 ); 00000A24 4F26 LDS.L @R15+,PR 00000A26 D33B MOV.L L2570+16,R3; _gerr_Assert 00000A28 E400 MOV #0,R4 00000A2A D539 MOV.L L2570+12,R5; L1911 00000A2C FFF9 FMOV.S @R15+,FR15 00000A2E 966A MOV.W L2570+2,R6 ; H'025C 00000A30 6BF6 MOV.L @R15+,R11 00000A32 6CF6 MOV.L @R15+,R12 00000A34 6DF6 MOV.L @R15+,R13 00000A36 432B JMP @R3 00000A38 6EF6 MOV.L @R15+,R14 00000A3A L2402: bt_tblade. 605 break; bt_tblade. 606 } bt_tblade. 607 } bt_tblade. 608 } 00000A3A 4F26 LDS.L @R15+,PR 00000A3C FFF9 FMOV.S @R15+,FR15 00000A3E 6BF6 MOV.L @R15+,R11 00000A40 6CF6 MOV.L @R15+,R12 00000A42 6DF6 MOV.L @R15+,R13 00000A44 000B RTS 00000A46 6EF6 MOV.L @R15+,R14 bt_tblade. 609 bt_tblade. 610 void _ProcessLStrut( TBlade_t *ptblade, Player_t *pPla +yer ) { 00000A48 L1885: ; function: _ProcessL + Strut ; frame size=16 bt_tblade. 611 const static u8 _aVerts2Morph[9] = { 1, 3, 4, +7, 9, 10, 13, 15, 16 }; bt_tblade. 612 u32 i, nVertNum; bt_tblade. 613 f32 fX; bt_tblade. 614 bt_tblade. 615 /* only need to do this for the player lod */ bt_tblade. 616 if( pPlayer->nLod == BOATS_LOD_PLAYER ) { 00000A48 E058 MOV #88,R0 00000A4A 2FE6 MOV.L R14,@-R15 00000A4C 2FD6 MOV.L R13,@-R15 00000A4E 2FC6 MOV.L R12,@-R15 00000A50 2FA6 MOV.L R10,@-R15 00000A52 035D MOV.W @(R0,R5),R3 00000A54 2338 TST R3,R3 00000A56 8B50 BF L2406 bt_tblade. 617 fX = ptblade->fHBLeftXlat; bt_tblade. 618 for( i=0; i < 9; i++ ) { 00000A58 E700 MOV #0,R7 00000A5A DE30 MOV.L L2570+24,R14; L1880 00000A5C 6673 MOV R7,R6 00000A5E 6573 MOV R7,R5 00000A60 E008 MOV #8,R0 00000A62 D72F MOV.L L2570+28,R7; L1881 00000A64 F446 FMOV.S @(R0,R4),FR4 00000A66 EC09 MOV #9,R12 00000A68 DD2B MOV.L L2570+20,R13; L1983 00000A6A L2408: bt_tblade. 619 nVertNum = _aVerts2Morph[i]; 00000A6A 61D4 MOV.B @R13+,R1 bt_tblade. 620 ptblade->pLHBStruts->pVtx[nVer +tNum].Point.p[0] = _afLStrutVerts[i] + fX; 00000A6C 5345 MOV.L @(20,R4),R3 00000A6E 611C EXTU.B R1,R1 00000A70 6213 MOV R1,R2 00000A72 4100 SHLL R1 00000A74 312C ADD R2,R1 00000A76 533E MOV.L @(56,R3),R3 00000A78 4108 SHLL2 R1 00000A7A 4100 SHLL R1 00000A7C 6A13 MOV R1,R10 00000A7E 313C ADD R3,R1 00000A80 6053 MOV R5,R0 00000A82 0009 NOP 00000A84 F3E6 FMOV.S @(R0,R14),FR3 00000A86 7504 ADD #4,R5 00000A88 F340 FADD FR4,FR3 00000A8A F13A FMOV.S FR3,@R1 bt_tblade. 621 bt_tblade. 622 ptblade->pRHBStruts->pVtx[nVer +tNum].Point.p[0] = _afRStrutVerts[i] - fX; 00000A8C F376 FMOV.S @(R0,R7),FR3 00000A8E 5346 MOV.L @(24,R4),R3 00000A90 F341 FSUB FR4,FR3 00000A92 533E MOV.L @(56,R3),R3 00000A94 3A3C ADD R3,R10 00000A96 FA3A FMOV.S FR3,@R10 00000A98 6AD4 MOV.B @R13+,R10 00000A9A 5345 MOV.L @(20,R4),R3 00000A9C 6AAC EXTU.B R10,R10 00000A9E 62A3 MOV R10,R2 00000AA0 4A00 SHLL R10 00000AA2 3A2C ADD R2,R10 00000AA4 533E MOV.L @(56,R3),R3 00000AA6 4A08 SHLL2 R10 00000AA8 4A00 SHLL R10 00000AAA 61A3 MOV R10,R1 00000AAC 3A3C ADD R3,R10 00000AAE 6053 MOV R5,R0 00000AB0 0009 NOP 00000AB2 F3E6 FMOV.S @(R0,R14),FR3 00000AB4 7504 ADD #4,R5 00000AB6 F340 FADD FR4,FR3 00000AB8 FA3A FMOV.S FR3,@R10 00000ABA F376 FMOV.S @(R0,R7),FR3 00000ABC 5346 MOV.L @(24,R4),R3 00000ABE F341 FSUB FR4,FR3 00000AC0 533E MOV.L @(56,R3),R3 00000AC2 313C ADD R3,R1 00000AC4 F13A FMOV.S FR3,@R1 00000AC6 61D4 MOV.B @R13+,R1 00000AC8 5345 MOV.L @(20,R4),R3 00000ACA 611C EXTU.B R1,R1 00000ACC 6213 MOV R1,R2 00000ACE 4100 SHLL R1 00000AD0 312C ADD R2,R1 00000AD2 533E MOV.L @(56,R3),R3 00000AD4 4108 SHLL2 R1 00000AD6 4100 SHLL R1 00000AD8 6A13 MOV R1,R10 00000ADA 313C ADD R3,R1 00000ADC 6053 MOV R5,R0 00000ADE 0009 NOP 00000AE0 F3E6 FMOV.S @(R0,R14),FR3 00000AE2 7603 ADD #3,R6 00000AE4 36C2 CMP/HS R12,R6 00000AE6 F340 FADD FR4,FR3 00000AE8 F13A FMOV.S FR3,@R1 00000AEA F376 FMOV.S @(R0,R7),FR3 00000AEC 5346 MOV.L @(24,R4),R3 00000AEE F341 FSUB FR4,FR3 00000AF0 533E MOV.L @(56,R3),R3 00000AF2 3A3C ADD R3,R10 00000AF4 FA3A FMOV.S FR3,@R10 00000AF6 8FB8 BF/S L2408 00000AF8 7504 ADD #4,R5 00000AFA L2406: bt_tblade. 623 } bt_tblade. 624 } bt_tblade. 625 } 00000AFA 6AF6 MOV.L @R15+,R10 00000AFC 6CF6 MOV.L @R15+,R12 00000AFE 6DF6 MOV.L @R15+,R13 00000B00 000B RTS 00000B02 6EF6 MOV.L @R15+,R14 00000B04 L2570: 00000B04 0100 .DATA.W H'0100 00000B06 025C .DATA.W H'025C 00000B08 BFE0E560 .DATA.L H'BFE0E560 00000B0C C0400000 .DATA.L H'C0400000 00000B10 <00000000> .DATA.L L1911 00000B14 <00000000> .DATA.L _gerr_Assert 00000B18 <00000000> .DATA.L L1983 00000B1C <00000000> .DATA.L L1880 00000B20 <00000000> .DATA.L L1881 bt_tblade. 626 bt_tblade. 627 static void _ProcessEngineFlames( TBlade_t *ptblade, P +layer_t *pPlayer ) { 00000B24 L1886: ; function: _ProcessE + ngineFlames ; frame size=4 bt_tblade. 628 f32 fThrottle, fTemp; bt_tblade. 629 int i; bt_tblade. 630 bt_tblade. 631 E fThrottle = ( (pPlayer->Controls.fWithDeadZone +[1])>=0.0f ? (pPlayer->Controls.fWithDeadZone[1]) : -( +pPlayer->Controls.fWithDeadZone[1]) ); 00000B24 E040 MOV #64,R0 00000B26 2FE6 MOV.L R14,@-R15 00000B28 F456 FMOV.S @(R0,R5),FR4 00000B2A F38D FLDI0 FR3 00000B2C F345 FCMP/GT FR4,FR3 00000B2E 8F01 BF/S L2410 bt_tblade. 632 fTemp = fThrottle - ptblade->fEngStaticLightIn +tensity; 00000B30 E02C MOV #44,R0 00000B32 F44D FNEG FR4 00000B34 L2410: bt_tblade. 633 ptblade->fEngStaticLightIntensity += (fTemp * +0.15f); 00000B34 D13A MOV.L L2571,R1 ; H'3E199999 00000B36 F346 FMOV.S @(R0,R4),FR3 00000B38 415A LDS R1,FPUL 00000B3A F431 FSUB FR3,FR4 00000B3C F00D FSTS FPUL,FR0 00000B3E F34E FMAC FR0,FR4,FR3 00000B40 F437 FMOV.S FR3,@(R0,R4) bt_tblade. 634 if( ptblade->fEngStaticLightIntensity < 0.025f + ) { 00000B42 C738 MOVA L2571+4,R0 00000B44 F208 FMOV.S @R0,FR2 00000B46 E02C MOV #44,R0 00000B48 F346 FMOV.S @(R0,R4),FR3 00000B4A F235 FCMP/GT FR3,FR2 00000B4C 8F01 BF/S L2411 00000B4E F48D FLDI0 FR4 bt_tblade. 635 ptblade->fEngStaticLightIntensity = 0. +0f; 00000B50 F447 FMOV.S FR4,@(R0,R4) 00000B52 L2411: bt_tblade. 636 } bt_tblade. 637 if( ptblade->fEngStaticLightIntensity > 0.0f ) + { 00000B52 F246 FMOV.S @(R0,R4),FR2 00000B54 F38D FLDI0 FR3 00000B56 F235 FCMP/GT FR3,FR2 00000B58 8F5C BF/S L2412 00000B5A E700 MOV #0,R7 bt_tblade. 638 E ptblade->bEngDrawFlames = 1; 00000B5C E034 MOV #52,R0 bt_tblade. 639 bt_tblade. 640 /* Scale the flame height */ bt_tblade. 641 for( i = 0; i < 6; i++ ) { 00000B5E 6E73 MOV R7,R14 00000B60 E201 MOV #1,R2 00000B62 E106 MOV #6,R1 00000B64 0424 MOV.B R2,@(R0,R4) 00000B66 554C MOV.L @(48,R4),R5 00000B68 D62F MOV.L L2571+8,R6 ; L1882 00000B6A 555E MOV.L @(56,R5),R5 00000B6C L2414: bt_tblade. 642 ptblade->pEngFlame->pVtx[i].Po +int.p[1] = _fEngFlameYCoord[i] * ptblade->fEngStaticLi +ghtIntensity; 00000B6C E02C MOV #44,R0 00000B6E F269 FMOV.S @R6+,FR2 00000B70 F346 FMOV.S @(R0,R4),FR3 00000B72 E004 MOV #4,R0 00000B74 7E03 ADD #3,R14 00000B76 F232 FMUL FR3,FR2 00000B78 3E13 CMP/GE R1,R14 00000B7A F527 FMOV.S FR2,@(R0,R5) 00000B7C E02C MOV #44,R0 00000B7E F269 FMOV.S @R6+,FR2 00000B80 7518 ADD #24,R5 00000B82 F346 FMOV.S @(R0,R4),FR3 00000B84 E004 MOV #4,R0 00000B86 F232 FMUL FR3,FR2 00000B88 F527 FMOV.S FR2,@(R0,R5) 00000B8A E02C MOV #44,R0 00000B8C F269 FMOV.S @R6+,FR2 00000B8E 7518 ADD #24,R5 00000B90 F346 FMOV.S @(R0,R4),FR3 00000B92 E004 MOV #4,R0 00000B94 F232 FMUL FR3,FR2 00000B96 F527 FMOV.S FR2,@(R0,R5) 00000B98 8FE8 BF/S L2414 00000B9A 7518 ADD #24,R5 00000B9C 6E43 MOV R4,R14 00000B9E 7E1C ADD #28,R14 00000BA0 66E3 MOV R14,R6 00000BA2 65E3 MOV R14,R5 00000BA4 64E3 MOV R14,R4 bt_tblade. 643 } bt_tblade. 644 /* each pipe is on different texture f +rames */ bt_tblade. 645 E for( i=0; i < 8; i++ ) { 00000BA6 EE07 MOV #7,R14 00000BA8 E008 MOV #8,R0 00000BAA 6173 MOV R7,R1 00000BAC L2416: bt_tblade. 646 ptblade->nEngFlameFrameCount[i +]++; 00000BAC 6250 MOV.B @R5,R2 00000BAE 7201 ADD #1,R2 00000BB0 2520 MOV.B R2,@R5 bt_tblade. 647 E if( ptblade->nEngFlameFrameCou +nt[i] >= 7 ) { 00000BB2 6360 MOV.B @R6,R3 00000BB4 633C EXTU.B R3,R3 00000BB6 33E3 CMP/GE R14,R3 00000BB8 8F01 BF/S L2417 00000BBA 7101 ADD #1,R1 bt_tblade. 648 ptblade->nEngFlameFram +eCount[i] = 0; 00000BBC 2470 MOV.B R7,@R4 00000BBE L2417: 00000BBE 7501 ADD #1,R5 00000BC0 7601 ADD #1,R6 00000BC2 6350 MOV.B @R5,R3 00000BC4 7301 ADD #1,R3 00000BC6 2530 MOV.B R3,@R5 00000BC8 6260 MOV.B @R6,R2 00000BCA 622C EXTU.B R2,R2 00000BCC 32E3 CMP/GE R14,R2 00000BCE 8F01 BF/S L2418 00000BD0 7401 ADD #1,R4 00000BD2 2470 MOV.B R7,@R4 00000BD4 L2418: 00000BD4 7501 ADD #1,R5 00000BD6 7601 ADD #1,R6 00000BD8 6250 MOV.B @R5,R2 00000BDA 7101 ADD #1,R1 00000BDC 7201 ADD #1,R2 00000BDE 2520 MOV.B R2,@R5 00000BE0 6360 MOV.B @R6,R3 00000BE2 633C EXTU.B R3,R3 00000BE4 33E3 CMP/GE R14,R3 00000BE6 8F01 BF/S L2419 00000BE8 7401 ADD #1,R4 00000BEA 2470 MOV.B R7,@R4 00000BEC L2419: 00000BEC 7501 ADD #1,R5 00000BEE 7601 ADD #1,R6 00000BF0 6350 MOV.B @R5,R3 00000BF2 7101 ADD #1,R1 00000BF4 7301 ADD #1,R3 00000BF6 2530 MOV.B R3,@R5 00000BF8 6260 MOV.B @R6,R2 00000BFA 622C EXTU.B R2,R2 00000BFC 32E3 CMP/GE R14,R2 00000BFE 8F01 BF/S L2420 00000C00 7401 ADD #1,R4 00000C02 2470 MOV.B R7,@R4 00000C04 L2420: 00000C04 7101 ADD #1,R1 00000C06 3103 CMP/GE R0,R1 00000C08 7601 ADD #1,R6 00000C0A 7401 ADD #1,R4 00000C0C 8FCE BF/S L2416 00000C0E 7501 ADD #1,R5 00000C10 A004 BRA L2421 00000C12 0009 NOP 00000C14 L2412: bt_tblade. 649 } bt_tblade. 650 } bt_tblade. 651 } else { bt_tblade. 652 /* no engine flames are required at th +is time */ bt_tblade. 653 E ptblade->bEngDrawFlames = 0; 00000C14 E034 MOV #52,R0 00000C16 0474 MOV.B R7,@(R0,R4) bt_tblade. 654 ptblade->fEngStaticLightIntensity = 0. +0f; 00000C18 E02C MOV #44,R0 00000C1A F447 FMOV.S FR4,@(R0,R4) 00000C1C L2421: bt_tblade. 655 } bt_tblade. 656 } 00000C1C 000B RTS 00000C1E 6EF6 MOV.L @R15+,R14 00000C20 L2571: 00000C20 3E199999 .DATA.L H'3E199999 00000C24 3CCCCCCC .DATA.L H'3CCCCCCC 00000C28 <00000000> .DATA.L L1882 bt_tblade. 657 bt_tblade. 658 static void _DrawProp( TBlade_t *ptblade, Player_t *pP +layer ) { 00000C2C L1887: ; function: _DrawProp ; frame size=120 00000C2C 4F22 STS.L PR,@-R15 00000C2E 7F8C ADD #-116,R15 00000C30 2F42 MOV.L R4,@R15 00000C32 1F51 MOV.L R5,@(4,R15) bt_tblade. 659 Xfm_t xfm; bt_tblade. 660 int nPropRot; bt_tblade. 661 bt_tblade. 662 if( pPlayer->nLoadFlag == BOATS_EVERYTHING_OK +) { 00000C34 6053 MOV R5,R0 00000C36 0009 NOP 00000C38 E15A MOV #90,R1 00000C3A 001D MOV.W @(R0,R1),R0 00000C3C 600D EXTU.W R0,R0 00000C3E 8803 CMP/EQ #3,R0 00000C40 8B2D BF L2422 bt_tblade. 663 /* Draw the propeller */ bt_tblade. 664 nPropRot = boats_Prop( pPlayer->fRPM ) +; 00000C42 D33C MOV.L L2572+4,R3 ; _boats_Prop 00000C44 E01C MOV #28,R0 00000C46 52F1 MOV.L @(4,R15),R2 00000C48 430B JSR @R3 00000C4A F426 FMOV.S @(R0,R2),FR4 bt_tblade. 665 ptblade->nPropRot += nPropRot; 00000C4C 62F2 MOV.L @R15,R2 00000C4E 6403 MOV R0,R4 00000C50 6322 MOV.L @R2,R3 00000C52 334C ADD R4,R3 00000C54 2232 MOV.L R3,@R2 bt_tblade. 666 E _pProp->pMtl->pTexDef = (nPropRot == - +( 65536/2 ) ) ? _paPropCell[1] : _paPropCell[0]; 00000C56 D138 MOV.L L2572+8,R1 ; L1815 00000C58 6212 MOV.L @R1,R2 00000C5A 532D MOV.L @(52,R2),R3 00000C5C 9268 MOV.W L2572,R2 ; H'8000 00000C5E 3420 CMP/EQ R2,R4 00000C60 8B02 BF L2423 00000C62 D036 MOV.L L2572+12,R0; H'00000004+L1825 00000C64 A001 BRA L2543 00000C66 0009 NOP 00000C68 L2423: 00000C68 D035 MOV.L L2572+16,R0; L1825 00000C6A L2543: 00000C6A 6002 MOV.L @R0,R0 bt_tblade. 667 xfm_BuildRotZ_XlatFromPoint( &xfm, ptb +lade->nPropRot, 0.0f, -1.211f, -12.62f ); 00000C6C 64F3 MOV R15,R4 00000C6E 1305 MOV.L R0,@(20,R3) 00000C70 C734 MOVA L2572+20,R0 00000C72 65F2 MOV.L @R15,R5 00000C74 F608 FMOV.S @R0,FR6 00000C76 C734 MOVA L2572+24,R0 00000C78 6552 MOV.L @R5,R5 00000C7A D334 MOV.L L2572+28, + R3; _xfm_BuildRotZ_XlatF + romPoint 00000C7C F508 FMOV.S @R0,FR5 00000C7E F48D FLDI0 FR4 00000C80 430B JSR @R3 00000C82 7408 ADD #8,R4 bt_tblade. 668 xfm_Push( &xfm ); 00000C84 D232 MOV.L L2572+32,R2; _xfm_Push 00000C86 64F3 MOV R15,R4 00000C88 420B JSR @R2 00000C8A 7408 ADD #8,R4 bt_tblade. 669 E mesh3d_Draw( _pProp, 0xf, 1 ); 00000C8C D32A MOV.L L2572+8,R3 ; L1815 00000C8E E601 MOV #1,R6 00000C90 D230 MOV.L L2572+36,R2; _mesh3d_Draw 00000C92 E50F MOV #15,R5 00000C94 420B JSR @R2 00000C96 6432 MOV.L @R3,R4 bt_tblade. 670 xfm_Pop(); 00000C98 D12F MOV.L L2572+40,R1; _xfm_Pop 00000C9A 410B JSR @R1 00000C9C 0009 NOP 00000C9E L2422: bt_tblade. 671 } bt_tblade. 672 } 00000C9E 7F74 ADD #116,R15 00000CA0 4F26 LDS.L @R15+,PR 00000CA2 000B RTS 00000CA4 0009 NOP bt_tblade. 673 bt_tblade. 674 static void _ProcessFlame( TBlade_t *ptblade, Player_t + *pPlayer ) { 00000CA6 L1888: ; function: _ProcessF + lame ; frame size=32 00000CA6 2FE6 MOV.L R14,@-R15 00000CA8 6E43 MOV R4,R14 00000CAA 2FD6 MOV.L R13,@-R15 bt_tblade. 675 E int bSwitch = 0; bt_tblade. 676 bt_tblade. 677 switch( ptblade->nFState ) 00000CAC E037 MOV #55,R0 00000CAE 2FC6 MOV.L R12,@-R15 00000CB0 ED00 MOV #0,R13 00000CB2 2FB6 MOV.L R11,@-R15 00000CB4 6C53 MOV R5,R12 00000CB6 2FA6 MOV.L R10,@-R15 00000CB8 6AD3 MOV R13,R10 00000CBA 2F96 MOV.L R9,@-R15 00000CBC E504 MOV #4,R5 00000CBE 2F86 MOV.L R8,@-R15 00000CC0 E806 MOV #6,R8 00000CC2 00EC MOV.B @(R0,R14),R0 00000CC4 4F22 STS.L PR,@-R15 00000CC6 D925 MOV.L L2572+44,R9; _light_SetIntensity 00000CC8 600C EXTU.B R0,R0 00000CCA 8800 CMP/EQ #0,R0 00000CCC F58D FLDI0 FR5 00000CCE 8D0A BT/S L2232 00000CD0 EB01 MOV #1,R11 00000CD2 8801 CMP/EQ #1,R0 00000CD4 8B01 BF L2573 00000CD6 A211 BRA L2425 00000CD8 0009 NOP 00000CDA L2573: 00000CDA 8802 CMP/EQ #2,R0 00000CDC 8942 BT L2234 00000CDE 8803 CMP/EQ #3,R0 00000CE0 8963 BT L2235 00000CE2 A082 BRA L2236 00000CE4 0009 NOP 00000CE6 L2232: ; case label bt_tblade. 678 { bt_tblade. 679 case F_RESET: bt_tblade. 680 /* RESET ALL VARIABLES AND PUT THE FLA +ME INTO AN OFF STATE */ bt_tblade. 681 ptblade->nFState = F_OFF; 00000CE6 E037 MOV #55,R0 00000CE8 0EB4 MOV.B R11,@(R0,R14) bt_tblade. 682 E ptblade->bFDrawOrange = 0; 00000CEA E035 MOV #53,R0 00000CEC 0ED4 MOV.B R13,@(R0,R14) bt_tblade. 683 E ptblade->bFDrawBlue = 0; 00000CEE E036 MOV #54,R0 00000CF0 0ED4 MOV.B R13,@(R0,R14) bt_tblade. 684 E ptblade->nFCell = 0; 00000CF2 E038 MOV #56,R0 00000CF4 0ED5 MOV.W R13,@(R0,R14) bt_tblade. 685 ptblade->fFIntensity = 0.0f; 00000CF6 E040 MOV #64,R0 00000CF8 FE57 FMOV.S FR5,@(R0,R14) bt_tblade. 686 ptblade->nFGeoCell = 0; 00000CFA E03A MOV #58,R0 00000CFC 0ED5 MOV.W R13,@(R0,R14) bt_tblade. 687 ptblade->nFGeoDir = 0; bt_tblade. 688 /* only do lighting stuff if this is t +he player lod */ bt_tblade. 689 if( pPlayer->nLod == BOATS_LOD_PLAYER +) { 00000CFE E058 MOV #88,R0 00000D00 1EDF MOV.L R13,@(60,R14) 00000D02 03CD MOV.W @(R0,R12),R3 00000D04 2338 TST R3,R3 00000D06 8901 BT L2574 00000D08 A1F8 BRA L2425 00000D0A 0009 NOP 00000D0C L2574: bt_tblade. 690 light_SetIntensity( &ptblade-> +FLight.Light, ptblade->fFIntensity ); 00000D0C E040 MOV #64,R0 00000D0E 64E3 MOV R14,R4 00000D10 F4E6 FMOV.S @(R0,R14),FR4 00000D12 490B JSR @R9 00000D14 7444 ADD #68,R4 bt_tblade. 691 E light_TurnOn( &ptblade->FLight +.Light, 0 ); 00000D16 4F26 LDS.L @R15+,PR 00000D18 D311 MOV.L L2572+48,R3; _light_TurnOn 00000D1A 64E3 MOV R14,R4 00000D1C E500 MOV #0,R5 00000D1E 68F6 MOV.L @R15+,R8 00000D20 7444 ADD #68,R4 00000D22 69F6 MOV.L @R15+,R9 00000D24 6AF6 MOV.L @R15+,R10 00000D26 6BF6 MOV.L @R15+,R11 00000D28 6CF6 MOV.L @R15+,R12 00000D2A 6DF6 MOV.L @R15+,R13 00000D2C 432B JMP @R3 00000D2E 6EF6 MOV.L @R15+,R14 00000D30 L2572: 00000D30 8000 .DATA.W H'8000 00000D32 00000002 .RES.W 1 00000D34 <00000000> .DATA.L _boats_Prop 00000D38 <00000000> .DATA.L L1815 00000D3C <00000004> .DATA.L H'00000004+L1825 00000D40 <00000000> .DATA.L L1825 00000D44 C149EB85 .DATA.L H'C149EB85 00000D48 BF9B020C .DATA.L H'BF9B020C 00000D4C <00000000> .DATA.L _xfm_BuildRotZ_XlatFromPoint 00000D50 <00000000> .DATA.L _xfm_Push 00000D54 <00000000> .DATA.L _mesh3d_Draw 00000D58 <00000000> .DATA.L _xfm_Pop 00000D5C <00000000> .DATA.L _light_SetIntensity 00000D60 <00000000> .DATA.L _light_TurnOn 00000D64 L2234: ; case label bt_tblade. 692 } bt_tblade. 693 break; bt_tblade. 694 case F_OFF: bt_tblade. 695 /* THE FLAMES ARE OFF, DON'T DO ANYTHI +NG */ bt_tblade. 696 break; bt_tblade. 697 case F_TURNON: bt_tblade. 698 /* TURN THE BLUE FLAME ON, NOT ALLOWIN +G THE ORANGE TO BE USED */ bt_tblade. 699 E ptblade->bFDrawOrange = 0; 00000D64 E035 MOV #53,R0 00000D66 0ED4 MOV.B R13,@(R0,R14) bt_tblade. 700 E ptblade->bFDrawBlue = 1; 00000D68 E036 MOV #54,R0 00000D6A 0EB4 MOV.B R11,@(R0,R14) bt_tblade. 701 E ptblade->nFCell = 0; 00000D6C E038 MOV #56,R0 00000D6E 0ED5 MOV.W R13,@(R0,R14) bt_tblade. 702 ptblade->nFState = F_B_ON; 00000D70 E037 MOV #55,R0 00000D72 0E54 MOV.B R5,@(R0,R14) bt_tblade. 703 E ptblade->fFIntensity = 0.35f; 00000D74 C73F MOVA L2575,R0 00000D76 F308 FMOV.S @R0,FR3 00000D78 E040 MOV #64,R0 00000D7A FE37 FMOV.S FR3,@(R0,R14) bt_tblade. 704 /* only do lighting stuff if this is t +he player lod */ bt_tblade. 705 if( pPlayer->nLod == BOATS_LOD_PLAYER +) { 00000D7C E058 MOV #88,R0 00000D7E 03CD MOV.W @(R0,R12),R3 00000D80 2338 TST R3,R3 00000D82 8901 BT L2576 00000D84 A1BA BRA L2425 00000D86 0009 NOP 00000D88 L2576: bt_tblade. 706 /* turn on the light */ bt_tblade. 707 light_SetMotif( &ptblade->FLig +ht.Light, SLMOTIF_BLUEFLAME1 ); 00000D88 D33B MOV.L L2575+4,R3 ; _light_SetMotif 00000D8A 64E3 MOV R14,R4 00000D8C E50F MOV #15,R5 00000D8E 430B JSR @R3 00000D90 7444 ADD #68,R4 bt_tblade. 708 E light_TurnOn( &ptblade->FLight +.Light, 1 ); 00000D92 D23A MOV.L L2575+8,R2 ; _light_TurnOn 00000D94 64E3 MOV R14,R4 00000D96 E501 MOV #1,R5 00000D98 420B JSR @R2 00000D9A 7444 ADD #68,R4 bt_tblade. 709 light_SetIntensity( &ptblade-> +FLight.Light, ptblade->fFIntensity ); 00000D9C E040 MOV #64,R0 00000D9E 64E3 MOV R14,R4 00000DA0 F4E6 FMOV.S @(R0,R14),FR4 00000DA2 490B JSR @R9 00000DA4 7444 ADD #68,R4 bt_tblade. 710 } bt_tblade. 711 break; 00000DA6 A1A9 BRA L2425 00000DA8 0009 NOP 00000DAA L2235: ; case label bt_tblade. 712 case F_TURNOFF: bt_tblade. 713 /* TURN OFF THE FLAME FROM ANY STATE, +SETS THE STATE TO F_B_TURNOFF OR F_O_TURNOFF */ bt_tblade. 714 if( ptblade->bFDrawBlue ) { 00000DAA E036 MOV #54,R0 00000DAC 02EC MOV.B @(R0,R14),R2 00000DAE 2228 TST R2,R2 00000DB0 8906 BT L2428 bt_tblade. 715 E ptblade->bFDrawOrange = 0; 00000DB2 E035 MOV #53,R0 00000DB4 0ED4 MOV.B R13,@(R0,R14) bt_tblade. 716 E ptblade->bFDrawBlue = 0; 00000DB6 E036 MOV #54,R0 00000DB8 0ED4 MOV.B R13,@(R0,R14) bt_tblade. 717 ptblade->nFState = F_B_TURNOFF +; 00000DBA E037 MOV #55,R0 00000DBC A19E BRA L2425 00000DBE 0E84 MOV.B R8,@(R0,R14) 00000DC0 L2428: bt_tblade. 718 } else if( ptblade->bFDrawOrange ) { 00000DC0 E035 MOV #53,R0 00000DC2 02EC MOV.B @(R0,R14),R2 00000DC4 2228 TST R2,R2 00000DC6 890D BT L2430 bt_tblade. 719 E ptblade->bFDrawBlue = 0; 00000DC8 E036 MOV #54,R0 00000DCA 0ED4 MOV.B R13,@(R0,R14) bt_tblade. 720 ptblade->nFState = F_O_TURNOFF +; 00000DCC E037 MOV #55,R0 00000DCE E30A MOV #10,R3 00000DD0 0E34 MOV.B R3,@(R0,R14) bt_tblade. 721 E if( ptblade->nFCell > 6 ) { 00000DD2 E038 MOV #56,R0 00000DD4 02ED MOV.W @(R0,R14),R2 00000DD6 622D EXTU.W R2,R2 00000DD8 3287 CMP/GT R8,R2 00000DDA 8901 BT L2577 00000DDC A18E BRA L2425 00000DDE 0009 NOP 00000DE0 L2577: bt_tblade. 722 E ptblade->nFCell = 0; 00000DE0 A18C BRA L2425 00000DE2 0ED5 MOV.W R13,@(R0,R14) 00000DE4 L2430: bt_tblade. 723 } bt_tblade. 724 } else { bt_tblade. 725 ptblade->nFState = F_RESET; 00000DE4 E037 MOV #55,R0 bt_tblade. 726 } bt_tblade. 727 break; 00000DE6 A189 BRA L2425 00000DE8 0ED4 MOV.B R13,@(R0,R14) 00000DEA L2236: ; default label bt_tblade. 728 default: bt_tblade. 729 /* ALL OTHER CASES MUST BE BLUE OR ORA +NGE FLAMES */ bt_tblade. 730 if( ptblade->bFDrawBlue ) { 00000DEA C725 MOVA L2575+12,R0 00000DEC F408 FMOV.S @R0,FR4 00000DEE E036 MOV #54,R0 00000DF0 03EC MOV.B @(R0,R14),R3 00000DF2 2338 TST R3,R3 00000DF4 8D6E BT/S L2433 00000DF6 E402 MOV #2,R4 bt_tblade. 731 switch( ptblade->nFState ) 00000DF8 E037 MOV #55,R0 00000DFA 00EC MOV.B @(R0,R14),R0 00000DFC 600C EXTU.B R0,R0 00000DFE 8804 CMP/EQ #4,R0 00000E00 8905 BT L2237 00000E02 8805 CMP/EQ #5,R0 00000E04 890D BT L2238 00000E06 8806 CMP/EQ #6,R0 00000E08 891F BT L2239 00000E0A A03B BRA L2240 00000E0C 0009 NOP 00000E0E L2237: ; case label bt_tblade. 732 { bt_tblade. 733 case F_B_ON: bt_tblade. 734 /* THE BLUE FLAME IS O +N, BUT IS NOT USEABLE YET */ bt_tblade. 735 ++ptblade->nFCell; 00000E0E E038 MOV #56,R0 00000E10 03ED MOV.W @(R0,R14),R3 00000E12 7301 ADD #1,R3 00000E14 0E35 MOV.W R3,@(R0,R14) bt_tblade. 736 E if( ptblade->nFCell > +4 ) { 00000E16 02ED MOV.W @(R0,R14),R2 00000E18 622D EXTU.W R2,R2 00000E1A 3257 CMP/GT R5,R2 00000E1C 8B37 BF L2434 bt_tblade. 737 E ptblade->nFCel +l = 0; bt_tblade. 738 } bt_tblade. 739 break; 00000E1E A036 BRA L2434 00000E20 0ED5 MOV.W R13,@(R0,R14) 00000E22 L2238: ; case label bt_tblade. 740 case F_B_USEABLE: bt_tblade. 741 /* THE BLUE FLAME IS O +N AND IS USEABLE */ bt_tblade. 742 ++ptblade->nFCell; 00000E22 E038 MOV #56,R0 00000E24 02ED MOV.W @(R0,R14),R2 00000E26 7201 ADD #1,R2 00000E28 0E25 MOV.W R2,@(R0,R14) bt_tblade. 743 E if( ptblade->nFCell > +4 ) { 00000E2A 03ED MOV.W @(R0,R14),R3 00000E2C 633D EXTU.W R3,R3 00000E2E 3357 CMP/GT R5,R3 00000E30 8B00 BF L2436 bt_tblade. 744 E ptblade->nFCel +l = 0; 00000E32 0ED5 MOV.W R13,@(R0,R14) 00000E34 L2436: bt_tblade. 745 } bt_tblade. 746 /* check to see if we +should turn on the orange flame */ bt_tblade. 747 E if( (pPlayer->Controls +.nButtons & 0x2) && (pPlayer->fFinishTime == 0.0f) ) { 00000E34 E044 MOV #68,R0 00000E36 03CE MOV.L @(R0,R12),R3 00000E38 2438 TST R3,R4 00000E3A 8928 BT L2434 00000E3C E030 MOV #48,R0 00000E3E F38D FLDI0 FR3 00000E40 F2C6 FMOV.S @(R0,R12),FR2 00000E42 F234 FCMP/EQ FR3,FR2 00000E44 8B23 BF L2434 bt_tblade. 748 E bSwitch = 1; bt_tblade. 749 } bt_tblade. 750 break; 00000E46 A022 BRA L2434 00000E48 6AB3 MOV R11,R10 00000E4A L2239: ; case label bt_tblade. 751 case F_B_TURNOFF: bt_tblade. 752 ptblade->fFIntensity - += 0.03f; 00000E4A E040 MOV #64,R0 bt_tblade. 753 if( ptblade->fFIntensi +ty <= 0.0f ) { 00000E4C F28D FLDI0 FR2 00000E4E F3E6 FMOV.S @(R0,R14),FR3 00000E50 F341 FSUB FR4,FR3 00000E52 F325 FCMP/GT FR2,FR3 00000E54 8D03 BT/S L2438 00000E56 FE37 FMOV.S FR3,@(R0,R14) bt_tblade. 754 ptblade->fFInt +ensity = 0.0f; 00000E58 FE57 FMOV.S FR5,@(R0,R14) bt_tblade. 755 ptblade->nFSta +te = F_RESET; 00000E5A E037 MOV #55,R0 00000E5C 0ED4 MOV.B R13,@(R0,R14) 00000E5E L2438: bt_tblade. 756 } bt_tblade. 757 /* only do lighting st +uff if this is the player lod */ bt_tblade. 758 if( pPlayer->nLod == B +OATS_LOD_PLAYER ) { 00000E5E E058 MOV #88,R0 00000E60 03CD MOV.W @(R0,R12),R3 00000E62 2338 TST R3,R3 00000E64 8B13 BF L2434 bt_tblade. 759 light_SetInten +sity( &ptblade->FLight.Light, ptblade->fFIntensity ); 00000E66 E040 MOV #64,R0 00000E68 64E3 MOV R14,R4 00000E6A F4E6 FMOV.S @(R0,R14),FR4 00000E6C 490B JSR @R9 00000E6E 7444 ADD #68,R4 bt_tblade. 760 } bt_tblade. 761 break; 00000E70 A00D BRA L2434 00000E72 0009 NOP 00000E74 L2575: 00000E74 3EB33333 .DATA.L H'3EB33333 00000E78 <00000000> .DATA.L _light_SetMotif 00000E7C <00000000> .DATA.L _light_TurnOn 00000E80 3CF5C28F .DATA.L H'3CF5C28F 00000E84 L2240: ; default label bt_tblade. 762 default: bt_tblade. 763 E if( (!(0)) ) gerr_Asse +rt( 0, "bt_tblade.c", 763 ); 00000E84 D23E MOV.L L2578+6,R2 ; _gerr_Assert 00000E86 D53D MOV.L L2578+2,R5 ; L1911 00000E88 9677 MOV.W L2578,R6 ; H'02FB 00000E8A 420B JSR @R2 00000E8C E400 MOV #0,R4 bt_tblade. 764 break; 00000E8E L2434: bt_tblade. 765 } bt_tblade. 766 if( bSwitch ) { 00000E8E 2AA8 TST R10,R10 00000E90 8B01 BF L2579 00000E92 A133 BRA L2425 00000E94 0009 NOP 00000E96 L2579: bt_tblade. 767 /* switch to the orang +e flame */ bt_tblade. 768 E ptblade->bFDrawOrange += 1; 00000E96 E035 MOV #53,R0 00000E98 0EB4 MOV.B R11,@(R0,R14) bt_tblade. 769 E ptblade->bFDrawBlue = +0; 00000E9A E036 MOV #54,R0 00000E9C 0ED4 MOV.B R13,@(R0,R14) bt_tblade. 770 E ptblade->nFCell = 0; 00000E9E E038 MOV #56,R0 00000EA0 0ED5 MOV.W R13,@(R0,R14) bt_tblade. 771 ptblade->nFState = F_O +_BURSTON; 00000EA2 E037 MOV #55,R0 00000EA4 E307 MOV #7,R3 00000EA6 0E34 MOV.B R3,@(R0,R14) bt_tblade. 772 ptblade->nFGeoCell = 0 +; 00000EA8 E03A MOV #58,R0 00000EAA 0ED5 MOV.W R13,@(R0,R14) bt_tblade. 773 ptblade->nFGeoDir = 0; bt_tblade. 774 /* only do lighting st +uff if this is the player lod */ bt_tblade. 775 if( pPlayer->nLod == B +OATS_LOD_PLAYER ) { 00000EAC E058 MOV #88,R0 00000EAE 1EDF MOV.L R13,@(60,R14) 00000EB0 03CD MOV.W @(R0,R12),R3 00000EB2 2338 TST R3,R3 00000EB4 8901 BT L2580 00000EB6 A121 BRA L2425 00000EB8 0009 NOP 00000EBA L2580: bt_tblade. 776 /* change the +light motif to the flame */ bt_tblade. 777 light_SetMotif +( &ptblade->FLight.Light, SLMOTIF_FLAME4 ); 00000EBA 4F26 LDS.L @R15+,PR 00000EBC D331 MOV.L L2578+10,R3; _light_SetMotif 00000EBE 64E3 MOV R14,R4 00000EC0 E505 MOV #5,R5 00000EC2 68F6 MOV.L @R15+,R8 00000EC4 7444 ADD #68,R4 00000EC6 69F6 MOV.L @R15+,R9 00000EC8 6AF6 MOV.L @R15+,R10 00000ECA 6BF6 MOV.L @R15+,R11 00000ECC 6CF6 MOV.L @R15+,R12 00000ECE 6DF6 MOV.L @R15+,R13 00000ED0 432B JMP @R3 00000ED2 6EF6 MOV.L @R15+,R14 00000ED4 L2433: bt_tblade. 778 } bt_tblade. 779 } bt_tblade. 780 } else if( ptblade->bFDrawOrange ) { 00000ED4 E035 MOV #53,R0 00000ED6 03EC MOV.B @(R0,R14),R3 00000ED8 2338 TST R3,R3 00000EDA 8B01 BF L2581 00000EDC A101 BRA L2444 00000EDE 0009 NOP 00000EE0 L2581: bt_tblade. 781 switch( ptblade->nFState ) 00000EE0 E037 MOV #55,R0 00000EE2 00EC MOV.B @(R0,R14),R0 00000EE4 600C EXTU.B R0,R0 00000EE6 8807 CMP/EQ #7,R0 00000EE8 8D0C BT/S L2241 00000EEA E508 MOV #8,R5 00000EEC 8808 CMP/EQ #8,R0 00000EEE 894D BT L2242 00000EF0 8809 CMP/EQ #9,R0 00000EF2 8B01 BF L2582 00000EF4 A07C BRA L2243 00000EF6 0009 NOP 00000EF8 L2582: 00000EF8 880A CMP/EQ #10,R0 00000EFA 8B01 BF L2583 00000EFC A0A6 BRA L2244 00000EFE 0009 NOP 00000F00 L2583: 00000F00 A0C6 BRA L2245 00000F02 0009 NOP 00000F04 L2241: ; case label bt_tblade. 782 { bt_tblade. 783 case F_O_BURSTON: bt_tblade. 784 /* check to see if we +still using our Hydro Boost */ bt_tblade. 785 E if( (pPlayer->Controls +.nButtons & 0x2) && (pPlayer->fFinishTime == 0.0f) ) { 00000F04 E044 MOV #68,R0 00000F06 03CE MOV.L @(R0,R12),R3 00000F08 2438 TST R3,R4 00000F0A 8929 BT L2446 00000F0C E030 MOV #48,R0 00000F0E F38D FLDI0 FR3 00000F10 F2C6 FMOV.S @(R0,R12),FR2 00000F12 F234 FCMP/EQ FR3,FR2 00000F14 8B24 BF L2446 bt_tblade. 786 ++ptblade->nFC +ell; 00000F16 E038 MOV #56,R0 00000F18 02ED MOV.W @(R0,R14),R2 00000F1A 7201 ADD #1,R2 00000F1C 0E25 MOV.W R2,@(R0,R14) bt_tblade. 787 E if( ptblade->n +FCell > 6 ) { 00000F1E C71A MOVA L2578+14,R0 00000F20 F508 FMOV.S @R0,FR5 00000F22 E038 MOV #56,R0 00000F24 03ED MOV.W @(R0,R14),R3 00000F26 633D EXTU.W R3,R3 00000F28 3387 CMP/GT R8,R3 00000F2A 8B04 BF L2447 bt_tblade. 788 ptblad +e->nFState = F_O_FIRE; 00000F2C E037 MOV #55,R0 00000F2E E209 MOV #9,R2 00000F30 0E24 MOV.B R2,@(R0,R14) bt_tblade. 789 E ptblad +e->fFIntensity = 0.75f; 00000F32 E040 MOV #64,R0 00000F34 FE57 FMOV.S FR5,@(R0,R14) 00000F36 L2447: bt_tblade. 790 } bt_tblade. 791 /* fade on the + light */ bt_tblade. 792 ptblade->fFInt +ensity += 0.03f; 00000F36 E040 MOV #64,R0 00000F38 F3E6 FMOV.S @(R0,R14),FR3 00000F3A F340 FADD FR4,FR3 bt_tblade. 793 E if( ptblade->f +FIntensity >= 0.75f ) { 00000F3C F23C FMOV.S FR3,FR2 00000F3E F525 FCMP/GT FR2,FR5 00000F40 8D01 BT/S L2448 00000F42 FE37 FMOV.S FR3,@(R0,R14) bt_tblade. 794 E ptblad +e->fFIntensity = 0.75f; 00000F44 FE57 FMOV.S FR5,@(R0,R14) 00000F46 L2448: bt_tblade. 795 } bt_tblade. 796 /* only do lig +hting stuff if this is the player lod */ bt_tblade. 797 if( pPlayer->n +Lod == BOATS_LOD_PLAYER ) { 00000F46 E058 MOV #88,R0 00000F48 03CD MOV.W @(R0,R12),R3 00000F4A 2338 TST R3,R3 00000F4C 8901 BT L2584 00000F4E A0A4 BRA L2445 00000F50 0009 NOP 00000F52 L2584: bt_tblade. 798 light_ +SetIntensity( &ptblade->FLight.Light, ptblade->fFInten +sity ); 00000F52 E040 MOV #64,R0 00000F54 64E3 MOV R14,R4 00000F56 F4E6 FMOV.S @(R0,R14),FR4 00000F58 490B JSR @R9 00000F5A 7444 ADD #68,R4 00000F5C A09D BRA L2445 00000F5E 0009 NOP 00000F60 L2446: bt_tblade. 799 } bt_tblade. 800 } else { bt_tblade. 801 ++ptblade->nFC +ell; 00000F60 E038 MOV #56,R0 00000F62 02ED MOV.W @(R0,R14),R2 00000F64 7201 ADD #1,R2 00000F66 0E25 MOV.W R2,@(R0,R14) bt_tblade. 802 E if( ptblade->n +FCell > 6 ) { 00000F68 03ED MOV.W @(R0,R14),R3 00000F6A 633D EXTU.W R3,R3 00000F6C 3387 CMP/GT R8,R3 00000F6E 8B01 BF L2451 bt_tblade. 803 E bSwitc +h = 1; 00000F70 A093 BRA L2445 00000F72 6AB3 MOV R11,R10 00000F74 L2451: bt_tblade. 804 } else { bt_tblade. 805 ptblad +e->nFState = F_O_BURSTOFF; 00000F74 E037 MOV #55,R0 bt_tblade. 806 } bt_tblade. 807 } bt_tblade. 808 break; 00000F76 A090 BRA L2445 00000F78 0E54 MOV.B R5,@(R0,R14) 00000F7A L2578: 00000F7A 02FB .DATA.W H'02FB 00000F7C <00000000> .DATA.L L1911 00000F80 <00000000> .DATA.L _gerr_Assert 00000F84 <00000000> .DATA.L _light_SetMotif 00000F88 3F400000 .DATA.L H'3F400000 00000F8C L2242: ; case label bt_tblade. 809 case F_O_BURSTOFF: bt_tblade. 810 ++ptblade->nFCell; 00000F8C E038 MOV #56,R0 00000F8E 02ED MOV.W @(R0,R14),R2 00000F90 7201 ADD #1,R2 00000F92 0E25 MOV.W R2,@(R0,R14) bt_tblade. 811 E if( ptblade->nFCell > +6 ) { 00000F94 03ED MOV.W @(R0,R14),R3 00000F96 633D EXTU.W R3,R3 00000F98 3387 CMP/GT R8,R3 00000F9A 8F01 BF/S L2453 bt_tblade. 812 E bSwitch = 1; bt_tblade. 813 } bt_tblade. 814 E if( (pPlayer->Controls +.nButtons & 0x2) && (pPlayer->fFinishTime == 0.0f) ) { 00000F9C E044 MOV #68,R0 00000F9E 6AB3 MOV R11,R10 00000FA0 L2453: 00000FA0 02CE MOV.L @(R0,R12),R2 00000FA2 2428 TST R2,R4 00000FA4 8908 BT L2454 00000FA6 E030 MOV #48,R0 00000FA8 F38D FLDI0 FR3 00000FAA F2C6 FMOV.S @(R0,R12),FR2 00000FAC F234 FCMP/EQ FR3,FR2 00000FAE 8B03 BF L2454 bt_tblade. 815 ptblade->nFSta +te = F_O_BURSTON; 00000FB0 E037 MOV #55,R0 bt_tblade. 816 E bSwitch = 0; 00000FB2 6AD3 MOV R13,R10 00000FB4 E207 MOV #7,R2 00000FB6 0E24 MOV.B R2,@(R0,R14) 00000FB8 L2454: bt_tblade. 817 } bt_tblade. 818 /* fade out the light +*/ bt_tblade. 819 ptblade->fFIntensity - += 0.03f; 00000FB8 E040 MOV #64,R0 bt_tblade. 820 if( ptblade->fFIntensi +ty <= 0.0f ) { 00000FBA F28D FLDI0 FR2 00000FBC F3E6 FMOV.S @(R0,R14),FR3 00000FBE F341 FSUB FR4,FR3 00000FC0 F325 FCMP/GT FR2,FR3 00000FC2 8D0A BT/S L2455 00000FC4 FE37 FMOV.S FR3,@(R0,R14) bt_tblade. 821 ptblade->fFInt +ensity = 0.0f; 00000FC6 FE57 FMOV.S FR5,@(R0,R14) bt_tblade. 822 /* only do lig +hting stuff if this is the player lod */ bt_tblade. 823 if( pPlayer->n +Lod == BOATS_LOD_PLAYER ) { 00000FC8 E058 MOV #88,R0 00000FCA 03CD MOV.W @(R0,R12),R3 00000FCC 2338 TST R3,R3 00000FCE 8B04 BF L2455 bt_tblade. 824 E light_ +TurnOn( &ptblade->FLight.Light, 0 ); 00000FD0 D32E MOV.L L2585+2,R3 ; _light_TurnOn 00000FD2 64E3 MOV R14,R4 00000FD4 E500 MOV #0,R5 00000FD6 430B JSR @R3 00000FD8 7444 ADD #68,R4 00000FDA L2455: bt_tblade. 825 } bt_tblade. 826 } bt_tblade. 827 /* only do lighting st +uff if this is the player lod */ bt_tblade. 828 if( pPlayer->nLod == B +OATS_LOD_PLAYER ) { 00000FDA E058 MOV #88,R0 00000FDC 02CD MOV.W @(R0,R12),R2 00000FDE 2228 TST R2,R2 00000FE0 8B5B BF L2445 bt_tblade. 829 light_SetInten +sity( &ptblade->FLight.Light, ptblade->fFIntensity ); 00000FE2 E040 MOV #64,R0 00000FE4 64E3 MOV R14,R4 00000FE6 F4E6 FMOV.S @(R0,R14),FR4 00000FE8 490B JSR @R9 00000FEA 7444 ADD #68,R4 bt_tblade. 830 } bt_tblade. 831 break; 00000FEC A055 BRA L2445 00000FEE 0009 NOP 00000FF0 L2243: ; case label bt_tblade. 832 case F_O_FIRE: bt_tblade. 833 if( !ptblade->nFGeoDir + ) { 00000FF0 52EF MOV.L @(60,R14),R2 00000FF2 2228 TST R2,R2 00000FF4 8B09 BF L2458 bt_tblade. 834 ++ptblade->nFG +eoCell; 00000FF6 E03A MOV #58,R0 00000FF8 03ED MOV.W @(R0,R14),R3 00000FFA 7301 ADD #1,R3 00000FFC 0E35 MOV.W R3,@(R0,R14) bt_tblade. 835 E if( ptblade->n +FGeoCell == (4 - 1) ) { 00000FFE 00ED MOV.W @(R0,R14),R0 00001000 600D EXTU.W R0,R0 00001002 8803 CMP/EQ #3,R0 00001004 8B09 BF L2460 bt_tblade. 836 ptblad +e->nFGeoDir = 1; 00001006 A008 BRA L2460 00001008 1EBF MOV.L R11,@(60,R14) 0000100A L2458: bt_tblade. 837 } bt_tblade. 838 } else { bt_tblade. 839 --ptblade->nFG +eoCell; 0000100A E03A MOV #58,R0 0000100C 03ED MOV.W @(R0,R14),R3 0000100E 73FF ADD #-1,R3 00001010 0E35 MOV.W R3,@(R0,R14) bt_tblade. 840 if( ptblade->n +FGeoCell == 0 ) { 00001012 02ED MOV.W @(R0,R14),R2 00001014 2228 TST R2,R2 00001016 8B00 BF L2460 bt_tblade. 841 ptblad +e->nFGeoDir = 0; 00001018 1EDF MOV.L R13,@(60,R14) 0000101A L2460: bt_tblade. 842 } bt_tblade. 843 } bt_tblade. 844 ++ptblade->nFCell; 0000101A E038 MOV #56,R0 0000101C 02ED MOV.W @(R0,R14),R2 0000101E 7201 ADD #1,R2 00001020 0E25 MOV.W R2,@(R0,R14) bt_tblade. 845 E if( ptblade->nFCell > +16 ) { 00001022 E210 MOV #16,R2 00001024 03ED MOV.W @(R0,R14),R3 00001026 633D EXTU.W R3,R3 00001028 3327 CMP/GT R2,R3 0000102A 8B01 BF L2462 bt_tblade. 846 E ptblade->nFCel +l = 7; 0000102C E107 MOV #7,R1 0000102E 0E15 MOV.W R1,@(R0,R14) 00001030 L2462: bt_tblade. 847 } bt_tblade. 848 /* check to see if we +are still using our Hydro Boost */ bt_tblade. 849 E if( !(pPlayer->Control +s.nButtons & 0x2) || (pPlayer->fFinishTime != 0.0f) ) +{ 00001030 E044 MOV #68,R0 00001032 03CE MOV.L @(R0,R12),R3 00001034 2438 TST R3,R4 00001036 8904 BT L2464 00001038 E030 MOV #48,R0 0000103A F38D FLDI0 FR3 0000103C F2C6 FMOV.S @(R0,R12),FR2 0000103E F234 FCMP/EQ FR3,FR2 00001040 892B BT L2445 00001042 L2464: bt_tblade. 850 E ptblade->nFCel +l = 0; 00001042 E038 MOV #56,R0 00001044 0ED5 MOV.W R13,@(R0,R14) bt_tblade. 851 ptblade->nFSta +te = F_O_BURSTOFF; 00001046 E037 MOV #55,R0 bt_tblade. 852 } bt_tblade. 853 break; 00001048 A027 BRA L2445 0000104A 0E54 MOV.B R5,@(R0,R14) 0000104C L2244: ; case label bt_tblade. 854 case F_O_TURNOFF: bt_tblade. 855 /* fade out the light +*/ bt_tblade. 856 ptblade->fFIntensity - += 0.03f; 0000104C E040 MOV #64,R0 bt_tblade. 857 if( ptblade->fFIntensi +ty <= 0.0f ) { 0000104E F28D FLDI0 FR2 00001050 F3E6 FMOV.S @(R0,R14),FR3 00001052 F341 FSUB FR4,FR3 00001054 F325 FCMP/GT FR2,FR3 00001056 8D01 BT/S L2465 00001058 FE37 FMOV.S FR3,@(R0,R14) bt_tblade. 858 ptblade->fFInt +ensity = 0.0f; 0000105A FE57 FMOV.S FR5,@(R0,R14) 0000105C L2465: bt_tblade. 859 } bt_tblade. 860 /* only do lighting st +uff if this is the player lod */ bt_tblade. 861 if( pPlayer->nLod == B +OATS_LOD_PLAYER ) { 0000105C E058 MOV #88,R0 0000105E 03CD MOV.W @(R0,R12),R3 00001060 2338 TST R3,R3 00001062 8B04 BF L2466 bt_tblade. 862 light_SetInten +sity( &ptblade->FLight.Light, ptblade->fFIntensity ); 00001064 E040 MOV #64,R0 00001066 64E3 MOV R14,R4 00001068 F4E6 FMOV.S @(R0,R14),FR4 0000106A 490B JSR @R9 0000106C 7444 ADD #68,R4 0000106E L2466: bt_tblade. 863 } + bt_tblade. 864 E if( ptblade->nFCell < +6 ) { 0000106E E038 MOV #56,R0 00001070 03ED MOV.W @(R0,R14),R3 00001072 633D EXTU.W R3,R3 00001074 3383 CMP/GE R8,R3 00001076 8903 BT L2467 bt_tblade. 865 ++ptblade->nFC +ell; 00001078 02ED MOV.W @(R0,R14),R2 0000107A 7201 ADD #1,R2 0000107C A00D BRA L2445 0000107E 0E25 MOV.W R2,@(R0,R14) 00001080 L2467: bt_tblade. 866 } else { bt_tblade. 867 E ptblade->bFDra +wOrange = 0; 00001080 E035 MOV #53,R0 00001082 0ED4 MOV.B R13,@(R0,R14) bt_tblade. 868 ptblade->nFSta +te = F_RESET; 00001084 E037 MOV #55,R0 bt_tblade. 869 } bt_tblade. 870 break; 00001086 A008 BRA L2445 00001088 0ED4 MOV.B R13,@(R0,R14) 0000108A L2585: 0000108A 00000002 .RES.W 1 0000108C <00000000> .DATA.L _light_TurnOn 00001090 L2245: ; default label bt_tblade. 871 default: bt_tblade. 872 E if( (!(0)) ) gerr_Asse +rt( 0, "bt_tblade.c", 872 ); 00001090 D221 MOV.L L2586+10,R2; _gerr_Assert 00001092 D520 MOV.L L2586+6,R5 ; L1911 00001094 963B MOV.W L2586,R6 ; H'0368 00001096 420B JSR @R2 00001098 E400 MOV #0,R4 bt_tblade. 873 break; 0000109A L2445: bt_tblade. 874 } bt_tblade. 875 if( bSwitch ) { 0000109A 2AA8 TST R10,R10 0000109C 892E BT L2425 bt_tblade. 876 /* switch to the blue +flame */ bt_tblade. 877 E ptblade->bFDrawOrange += 0; 0000109E E035 MOV #53,R0 000010A0 0ED4 MOV.B R13,@(R0,R14) bt_tblade. 878 E ptblade->bFDrawBlue = +1; 000010A2 E036 MOV #54,R0 000010A4 0EB4 MOV.B R11,@(R0,R14) bt_tblade. 879 E ptblade->nFCell = 0; 000010A6 E038 MOV #56,R0 000010A8 0ED5 MOV.W R13,@(R0,R14) bt_tblade. 880 ptblade->nFState = F_B +_USEABLE; 000010AA E037 MOV #55,R0 000010AC E305 MOV #5,R3 000010AE 0E34 MOV.B R3,@(R0,R14) bt_tblade. 881 E ptblade->fFIntensity = + 0.35f; 000010B0 C71A MOVA L2586+14,R0 000010B2 F308 FMOV.S @R0,FR3 000010B4 E040 MOV #64,R0 000010B6 FE37 FMOV.S FR3,@(R0,R14) bt_tblade. 882 /* only do lighting st +uff if this is the player lod */ bt_tblade. 883 if( pPlayer->nLod == B +OATS_LOD_PLAYER ) { 000010B8 E058 MOV #88,R0 000010BA 03CD MOV.W @(R0,R12),R3 000010BC 2338 TST R3,R3 000010BE 8B1D BF L2425 bt_tblade. 884 /* turn on the + light */ bt_tblade. 885 light_SetMotif +( &ptblade->FLight.Light, SLMOTIF_BLUEFLAME1 ); 000010C0 D317 MOV.L L2586+18,R3; _light_SetMotif 000010C2 64E3 MOV R14,R4 000010C4 E50F MOV #15,R5 000010C6 430B JSR @R3 000010C8 7444 ADD #68,R4 bt_tblade. 886 E light_TurnOn( +&ptblade->FLight.Light, 1 ); 000010CA D216 MOV.L L2586+22,R2; _light_TurnOn 000010CC 64E3 MOV R14,R4 000010CE E501 MOV #1,R5 000010D0 420B JSR @R2 000010D2 7444 ADD #68,R4 bt_tblade. 887 light_SetInten +sity( &ptblade->FLight.Light, ptblade->fFIntensity ); 000010D4 E040 MOV #64,R0 000010D6 64E3 MOV R14,R4 000010D8 F4E6 FMOV.S @(R0,R14),FR4 000010DA 490B JSR @R9 000010DC 7444 ADD #68,R4 000010DE A00D BRA L2425 000010E0 0009 NOP 000010E2 L2444: bt_tblade. 888 } bt_tblade. 889 } bt_tblade. 890 } else { bt_tblade. 891 E if( (!(0)) ) gerr_Assert( 0, " +bt_tblade.c", 891 ); 000010E2 4F26 LDS.L @R15+,PR 000010E4 D20C MOV.L L2586+10,R2; _gerr_Assert 000010E6 E400 MOV #0,R4 000010E8 9612 MOV.W L2586+2,R6 ; H'037B 000010EA 68F6 MOV.L @R15+,R8 000010EC D509 MOV.L L2586+6,R5 ; L1911 000010EE 69F6 MOV.L @R15+,R9 000010F0 6AF6 MOV.L @R15+,R10 000010F2 6BF6 MOV.L @R15+,R11 000010F4 6CF6 MOV.L @R15+,R12 000010F6 6DF6 MOV.L @R15+,R13 000010F8 422B JMP @R2 000010FA 6EF6 MOV.L @R15+,R14 000010FC L2425: bt_tblade. 892 break; bt_tblade. 893 } bt_tblade. 894 break; bt_tblade. 895 } bt_tblade. 896 } 000010FC 4F26 LDS.L @R15+,PR 000010FE 68F6 MOV.L @R15+,R8 00001100 69F6 MOV.L @R15+,R9 00001102 6AF6 MOV.L @R15+,R10 00001104 6BF6 MOV.L @R15+,R11 00001106 6CF6 MOV.L @R15+,R12 00001108 6DF6 MOV.L @R15+,R13 0000110A 000B RTS 0000110C 6EF6 MOV.L @R15+,R14 0000110E L2586: 0000110E 0368 .DATA.W H'0368 00001110 037B .DATA.W H'037B 00001112 00000002 .RES.W 1 00001114 <00000000> .DATA.L L1911 00001118 <00000000> .DATA.L _gerr_Assert 0000111C 3EB33333 .DATA.L H'3EB33333 00001120 <00000000> .DATA.L _light_SetMotif 00001124 <00000000> .DATA.L _light_TurnOn bt_tblade. 897 bt_tblade. 898 E static int _AnimateDeployingBoosters( TBlade_t *pTblad +e ) { 00001128 L1890: ; function: _AnimateD + eployingBoosters ; frame size=0 bt_tblade. 899 bt_tblade. 900 switch( pTblade->nHBAnimFrameCount ) 00001128 8543 MOV.W @(6,R4),R0 0000112A 600D EXTU.W R0,R0 0000112C E135 MOV #53,R1 0000112E 3012 CMP/HS R1,R0 00001130 8B01 BF L2587 00001132 A086 BRA L2299 00001134 0009 NOP 00001136 L2587: 00001136 4000 SHLL R0 00001138 6103 MOV R0,R1 0000113A C702 MOVA L2589,R0 0000113C 001D MOV.W @(R0,R1),R0 0000113E 0023 BRAF R0 00001140 0009 NOP 00001142 L2588: 00001142 00000002 .RES.W 1 00001144 L2589: 00001144 006C .DATA.W L2246-L2588 00001146 006C .DATA.W L2247-L2588 00001148 006C .DATA.W L2248-L2588 0000114A 006C .DATA.W L2249-L2588 0000114C 006C .DATA.W L2250-L2588 0000114E 006C .DATA.W L2251-L2588 00001150 006C .DATA.W L2252-L2588 00001152 006C .DATA.W L2253-L2588 00001154 006C .DATA.W L2254-L2588 00001156 006C .DATA.W L2255-L2588 00001158 006C .DATA.W L2256-L2588 0000115A 006C .DATA.W L2257-L2588 0000115C 006C .DATA.W L2258-L2588 0000115E 006C .DATA.W L2259-L2588 00001160 006C .DATA.W L2260-L2588 00001162 006C .DATA.W L2261-L2588 00001164 006C .DATA.W L2262-L2588 00001166 006C .DATA.W L2263-L2588 00001168 006C .DATA.W L2264-L2588 0000116A 006C .DATA.W L2265-L2588 0000116C 006C .DATA.W L2266-L2588 0000116E 006C .DATA.W L2267-L2588 00001170 006C .DATA.W L2268-L2588 00001172 006C .DATA.W L2269-L2588 00001174 006C .DATA.W L2270-L2588 00001176 006C .DATA.W L2271-L2588 00001178 006C .DATA.W L2272-L2588 0000117A 006C .DATA.W L2273-L2588 0000117C 006C .DATA.W L2274-L2588 0000117E 0098 .DATA.W L2275-L2588 00001180 00A4 .DATA.W L2276-L2588 00001182 00AA .DATA.W L2277-L2588 00001184 00B0 .DATA.W L2278-L2588 00001186 00B6 .DATA.W L2279-L2588 00001188 00BE .DATA.W L2280-L2588 0000118A 00BE .DATA.W L2281-L2588 0000118C 00BE .DATA.W L2282-L2588 0000118E 00BE .DATA.W L2283-L2588 00001190 00BE .DATA.W L2284-L2588 00001192 00BE .DATA.W L2285-L2588 00001194 00BE .DATA.W L2286-L2588 00001196 00BE .DATA.W L2287-L2588 00001198 00BE .DATA.W L2288-L2588 0000119A 00BE .DATA.W L2289-L2588 0000119C 00BE .DATA.W L2290-L2588 0000119E 00BE .DATA.W L2291-L2588 000011A0 00BE .DATA.W L2292-L2588 000011A2 00BE .DATA.W L2293-L2588 000011A4 00BE .DATA.W L2294-L2588 000011A6 00DE .DATA.W L2295-L2588 000011A8 00E6 .DATA.W L2296-L2588 000011AA 00EE .DATA.W L2297-L2588 000011AC 00F6 .DATA.W L2298-L2588 bt_tblade. 901 { bt_tblade. 902 /* 30 frames of cowling xlat */ bt_tblade. 903 case 0: 000011AE L2246: ; case label bt_tblade. 904 case 1: 000011AE L2247: ; case label bt_tblade. 905 case 2: 000011AE L2248: ; case label bt_tblade. 906 case 3: 000011AE L2249: ; case label bt_tblade. 907 case 4: 000011AE L2250: ; case label bt_tblade. 908 case 5: 000011AE L2251: ; case label bt_tblade. 909 case 6: 000011AE L2252: ; case label bt_tblade. 910 case 7: 000011AE L2253: ; case label bt_tblade. 911 case 8: 000011AE L2254: ; case label bt_tblade. 912 case 9: 000011AE L2255: ; case label bt_tblade. 913 case 10: 000011AE L2256: ; case label bt_tblade. 914 case 11: 000011AE L2257: ; case label bt_tblade. 915 case 12: 000011AE L2258: ; case label bt_tblade. 916 case 13: 000011AE L2259: ; case label bt_tblade. 917 case 14: 000011AE L2260: ; case label bt_tblade. 918 case 15: 000011AE L2261: ; case label bt_tblade. 919 case 16: 000011AE L2262: ; case label bt_tblade. 920 case 17: 000011AE L2263: ; case label bt_tblade. 921 case 18: 000011AE L2264: ; case label bt_tblade. 922 case 19: 000011AE L2265: ; case label bt_tblade. 923 case 20: 000011AE L2266: ; case label bt_tblade. 924 case 21: 000011AE L2267: ; case label bt_tblade. 925 case 22: 000011AE L2268: ; case label bt_tblade. 926 case 23: 000011AE L2269: ; case label bt_tblade. 927 case 24: 000011AE L2270: ; case label bt_tblade. 928 case 25: 000011AE L2271: ; case label bt_tblade. 929 case 26: 000011AE L2272: ; case label bt_tblade. 930 case 27: 000011AE L2273: ; case label bt_tblade. 931 case 28: 000011AE L2274: ; case label bt_tblade. 932 E pTblade->fHBAnimPercent = ( pTblade->f +HBAnimPercent+((pTblade->fHBAnimPercent*(1.f-pTblade-> +fHBAnimPercent))*.1807280f+.01f) ); 000011AE E010 MOV #16,R0 000011B0 F39D FLDI1 FR3 000011B2 F446 FMOV.S @(R0,R4),FR4 000011B4 C727 MOVA L2590+2,R0 000011B6 F008 FMOV.S @R0,FR0 000011B8 C727 MOVA L2590+6,R0 000011BA F341 FSUB FR4,FR3 000011BC F24C FMOV.S FR4,FR2 000011BE F342 FMUL FR4,FR3 000011C0 F23E FMAC FR0,FR3,FR2 000011C2 F308 FMOV.S @R0,FR3 000011C4 E010 MOV #16,R0 000011C6 F230 FADD FR3,FR2 000011C8 F427 FMOV.S FR2,@(R0,R4) bt_tblade. 933 E pTblade->fHBLeftXlat = -1.757f * pTbla +de->fHBAnimPercent; 000011CA C724 MOVA L2590+10,R0 000011CC F208 FMOV.S @R0,FR2 000011CE E010 MOV #16,R0 000011D0 F146 FMOV.S @(R0,R4),FR1 000011D2 F122 FMUL FR2,FR1 000011D4 F14D FNEG FR1 bt_tblade. 934 break; 000011D6 A021 BRA L2548 000011D8 E008 MOV #8,R0 000011DA L2275: ; case label bt_tblade. 935 case 29: bt_tblade. 936 pTblade->fHBAnimPercent = 0.0f; 000011DA E010 MOV #16,R0 000011DC F38D FLDI0 FR3 000011DE F437 FMOV.S FR3,@(R0,R4) bt_tblade. 937 E pTblade->fHBLeftXlat = (-1.757f + -0.0 +5f); 000011E0 C71F MOVA L2590+14,R0 bt_tblade. 938 break; 000011E2 A00B BRA L2547 000011E4 F308 FMOV.S @R0,FR3 000011E6 L2276: ; case label bt_tblade. 939 /* reverb cowling */ bt_tblade. 940 case 30: bt_tblade. 941 E pTblade->fHBLeftXlat = (-1.757f + 0.04 +f); 000011E6 C71F MOVA L2590+18,R0 bt_tblade. 942 break; 000011E8 A008 BRA L2547 000011EA F308 FMOV.S @R0,FR3 000011EC L2277: ; case label bt_tblade. 943 /* reverb cowling */ bt_tblade. 944 case 31: bt_tblade. 945 E pTblade->fHBLeftXlat = (-1.757f + -0.0 +3f); 000011EC C71E MOVA L2590+22,R0 bt_tblade. 946 break; 000011EE A005 BRA L2547 000011F0 F308 FMOV.S @R0,FR3 000011F2 L2278: ; case label bt_tblade. 947 /* reverb cowling */ bt_tblade. 948 case 32: bt_tblade. 949 E pTblade->fHBLeftXlat = (-1.757f + 0.01 +5f); 000011F2 C71E MOVA L2590+26,R0 bt_tblade. 950 break; 000011F4 A002 BRA L2547 000011F6 F308 FMOV.S @R0,FR3 000011F8 L2279: ; case label bt_tblade. 951 /* reverb cowling */ bt_tblade. 952 case 33: bt_tblade. 953 E pTblade->fHBLeftXlat = -1.757f; 000011F8 C71D MOVA L2590+30,R0 000011FA F308 FMOV.S @R0,FR3 bt_tblade. 954 break; 000011FC L2547: 000011FC A01F BRA L2552 000011FE E008 MOV #8,R0 00001200 L2280: ; case label bt_tblade. 955 /* 15 frames linear booster xlat */ bt_tblade. 956 case 34: bt_tblade. 957 case 35: 00001200 L2281: ; case label bt_tblade. 958 case 36: 00001200 L2282: ; case label bt_tblade. 959 case 37: 00001200 L2283: ; case label bt_tblade. 960 case 38: 00001200 L2284: ; case label bt_tblade. 961 case 39: 00001200 L2285: ; case label bt_tblade. 962 case 40: 00001200 L2286: ; case label bt_tblade. 963 case 41: 00001200 L2287: ; case label bt_tblade. 964 case 42: 00001200 L2288: ; case label bt_tblade. 965 case 43: 00001200 L2289: ; case label bt_tblade. 966 case 44: 00001200 L2290: ; case label bt_tblade. 967 case 45: 00001200 L2291: ; case label bt_tblade. 968 case 46: 00001200 L2292: ; case label bt_tblade. 969 case 47: 00001200 L2293: ; case label bt_tblade. 970 case 48: 00001200 L2294: ; case label bt_tblade. 971 E pTblade->fHBAnimPercent = ( pTblade->f +HBAnimPercent+=0.06666666666667f ); 00001200 D11C MOV.L L2590+34,R1; H'3D888888 00001202 E010 MOV #16,R0 00001204 F246 FMOV.S @(R0,R4),FR2 00001206 415A LDS R1,FPUL 00001208 F30D FSTS FPUL,FR3 0000120A F230 FADD FR3,FR2 0000120C F427 FMOV.S FR2,@(R0,R4) bt_tblade. 972 E pTblade->fHBBoosterXlat = -3.0f * pTbl +ade->fHBAnimPercent; 0000120E C71A MOVA L2590+38,R0 00001210 F208 FMOV.S @R0,FR2 00001212 E010 MOV #16,R0 00001214 F146 FMOV.S @(R0,R4),FR1 00001216 E00C MOV #12,R0 00001218 F122 FMUL FR2,FR1 0000121A F14D FNEG FR1 bt_tblade. 973 break; 0000121C L2548: 0000121C A013 BRA L2474 0000121E F417 FMOV.S FR1,@(R0,R4) 00001220 L2295: ; case label bt_tblade. 974 /* reverb the booster pipe */ bt_tblade. 975 case 49: bt_tblade. 976 E pTblade->fHBBoosterXlat = (-3.0f + -0. +05f); 00001220 C716 MOVA L2590+42,R0 00001222 F308 FMOV.S @R0,FR3 bt_tblade. 977 break; 00001224 A00B BRA L2552 00001226 E00C MOV #12,R0 00001228 L2296: ; case label bt_tblade. 978 /* reverb the booster pipe */ bt_tblade. 979 case 50: bt_tblade. 980 E pTblade->fHBBoosterXlat = (-3.0f + 0.0 +35f); 00001228 C715 MOVA L2590+46,R0 0000122A F308 FMOV.S @R0,FR3 bt_tblade. 981 break; 0000122C A007 BRA L2552 0000122E E00C MOV #12,R0 00001230 L2297: ; case label bt_tblade. 982 /* reverb the booster pipe */ bt_tblade. 983 case 51: bt_tblade. 984 E pTblade->fHBBoosterXlat = (-3.0f + -0. +015f); 00001230 C714 MOVA L2590+50,R0 00001232 F308 FMOV.S @R0,FR3 bt_tblade. 985 break; 00001234 A003 BRA L2552 00001236 E00C MOV #12,R0 00001238 L2298: ; case label bt_tblade. 986 /* reverb the booster pipe */ bt_tblade. 987 case 52: bt_tblade. 988 E pTblade->fHBBoosterXlat = -3.0f; 00001238 C713 MOVA L2590+54,R0 0000123A F308 FMOV.S @R0,FR3 0000123C E00C MOV #12,R0 bt_tblade. 989 break; 0000123E L2552: 0000123E A002 BRA L2474 00001240 F437 FMOV.S FR3,@(R0,R4) 00001242 L2299: ; default label bt_tblade. 990 default: bt_tblade. 991 E return 1; 00001242 000B RTS 00001244 E001 MOV #1,R0 00001246 L2474: bt_tblade. 992 } bt_tblade. 993 bt_tblade. 994 ++pTblade->nHBAnimFrameCount; 00001246 8543 MOV.W @(6,R4),R0 00001248 7001 ADD #1,R0 0000124A 8143 MOV.W R0,@(6,R4) bt_tblade. 995 E return 0; 0000124C E000 MOV #0,R0 bt_tblade. 996 } 0000124E L2475: 0000124E 000B RTS 00001250 0009 NOP 00001252 L2590: 00001252 00000002 .RES.W 1 00001254 3E3910C2 .DATA.L H'3E3910C2 00001258 3C23D70A .DATA.L H'3C23D70A 0000125C 3FE0E560 .DATA.L H'3FE0E560 00001260 BFE74BC6 .DATA.L H'BFE74BC6 00001264 BFDBC6A7 00001268 BFE4BC6A .DATA.L H'BFE4BC6A 0000126C BFDEF9DA .DATA.L H'BFDEF9DA 00001270 BFE0E560 .DATA.L H'BFE0E560 00001274 3D888888 .DATA.L H'3D888888 00001278 40400000 .DATA.L H'40400000 0000127C C0433333 .DATA.L H'C0433333 00001280 C03DC28F .DATA.L H'C03DC28F 00001284 C040F5C2 .DATA.L H'C040F5C2 00001288 C0400000 .DATA.L H'C0400000 bt_tblade. 997 bt_tblade. 998 E static int _AnimateRetractingBoosters( TBlade_t *pTbla +de ) { 0000128C L1889: ; function: _AnimateR + etractingBoosters ; frame size=0 bt_tblade. 999 bt_tblade. 1000 switch( pTblade->nHBAnimFrameCount ) 0000128C 8543 MOV.W @(6,R4),R0 0000128E 600D EXTU.W R0,R0 00001290 E132 MOV #50,R1 00001292 3012 CMP/HS R1,R0 00001294 8963 BT L2350 00001296 4000 SHLL R0 00001298 6103 MOV R0,R1 0000129A C702 MOVA L2592,R0 0000129C 001D MOV.W @(R0,R1),R0 0000129E 0023 BRAF R0 000012A0 0009 NOP 000012A2 L2591: 000012A2 00000002 .RES.W 1 000012A4 L2592: 000012A4 0066 .DATA.W L2300-L2591 000012A6 0066 .DATA.W L2301-L2591 000012A8 0066 .DATA.W L2302-L2591 000012AA 0066 .DATA.W L2303-L2591 000012AC 0066 .DATA.W L2304-L2591 000012AE 0066 .DATA.W L2305-L2591 000012B0 0066 .DATA.W L2306-L2591 000012B2 0066 .DATA.W L2307-L2591 000012B4 0066 .DATA.W L2308-L2591 000012B6 0066 .DATA.W L2309-L2591 000012B8 0066 .DATA.W L2310-L2591 000012BA 0066 .DATA.W L2311-L2591 000012BC 0066 .DATA.W L2312-L2591 000012BE 0066 .DATA.W L2313-L2591 000012C0 0066 .DATA.W L2314-L2591 000012C2 0066 .DATA.W L2315-L2591 000012C4 0066 .DATA.W L2316-L2591 000012C6 0066 .DATA.W L2317-L2591 000012C8 0066 .DATA.W L2318-L2591 000012CA 0066 .DATA.W L2319-L2591 000012CC 0086 .DATA.W L2320-L2591 000012CE 008C .DATA.W L2321-L2591 000012D0 008C .DATA.W L2322-L2591 000012D2 008C .DATA.W L2323-L2591 000012D4 008C .DATA.W L2324-L2591 000012D6 008C .DATA.W L2325-L2591 000012D8 008C .DATA.W L2326-L2591 000012DA 008C .DATA.W L2327-L2591 000012DC 008C .DATA.W L2328-L2591 000012DE 008C .DATA.W L2329-L2591 000012E0 008C .DATA.W L2330-L2591 000012E2 008C .DATA.W L2331-L2591 000012E4 008C .DATA.W L2332-L2591 000012E6 008C .DATA.W L2333-L2591 000012E8 008C .DATA.W L2334-L2591 000012EA 008C .DATA.W L2335-L2591 000012EC 008C .DATA.W L2336-L2591 000012EE 008C .DATA.W L2337-L2591 000012F0 008C .DATA.W L2338-L2591 000012F2 008C .DATA.W L2339-L2591 000012F4 008C .DATA.W L2340-L2591 000012F6 008C .DATA.W L2341-L2591 000012F8 008C .DATA.W L2342-L2591 000012FA 008C .DATA.W L2343-L2591 000012FC 008C .DATA.W L2344-L2591 000012FE 008C .DATA.W L2345-L2591 00001300 008C .DATA.W L2346-L2591 00001302 008C .DATA.W L2347-L2591 00001304 008C .DATA.W L2348-L2591 00001306 008C .DATA.W L2349-L2591 bt_tblade. 1001 { bt_tblade. 1002 /* 20 frames of cowling xlat */ bt_tblade. 1003 case 0: 00001308 L2300: ; case label bt_tblade. 1004 case 1: 00001308 L2301: ; case label bt_tblade. 1005 case 2: 00001308 L2302: ; case label bt_tblade. 1006 case 3: 00001308 L2303: ; case label bt_tblade. 1007 case 4: 00001308 L2304: ; case label bt_tblade. 1008 case 5: 00001308 L2305: ; case label bt_tblade. 1009 case 6: 00001308 L2306: ; case label bt_tblade. 1010 case 7: 00001308 L2307: ; case label bt_tblade. 1011 case 8: 00001308 L2308: ; case label bt_tblade. 1012 case 9: 00001308 L2309: ; case label bt_tblade. 1013 case 10: 00001308 L2310: ; case label bt_tblade. 1014 case 11: 00001308 L2311: ; case label bt_tblade. 1015 case 12: 00001308 L2312: ; case label bt_tblade. 1016 case 13: 00001308 L2313: ; case label bt_tblade. 1017 case 14: 00001308 L2314: ; case label bt_tblade. 1018 case 15: 00001308 L2315: ; case label bt_tblade. 1019 case 16: 00001308 L2316: ; case label bt_tblade. 1020 case 17: 00001308 L2317: ; case label bt_tblade. 1021 case 18: 00001308 L2318: ; case label bt_tblade. 1022 case 19: 00001308 L2319: ; case label bt_tblade. 1023 E pTblade->fHBAnimPercent = ( pTblade->f +HBAnimPercent+=0.05f ); 00001308 D131 MOV.L L2593+2,R1 ; H'3D4CCCCC 0000130A E010 MOV #16,R0 0000130C F246 FMOV.S @(R0,R4),FR2 0000130E 415A LDS R1,FPUL 00001310 F30D FSTS FPUL,FR3 00001312 F230 FADD FR3,FR2 00001314 F427 FMOV.S FR2,@(R0,R4) bt_tblade. 1024 E pTblade->fHBBoosterXlat = -3.0f - (-3. +0f * pTblade->fHBAnimPercent); 00001316 C72F MOVA L2593+6,R0 00001318 F208 FMOV.S @R0,FR2 0000131A C72F MOVA L2593+10,R0 0000 131C F008 FMOV.S @R0,FR0 0000131E E010 MOV #16,R0 00001320 F346 FMOV.S @(R0,R4),FR3 00001322 F23E FMAC FR0,FR3,FR2 bt_tblade. 1025 break; 00001324 A019 BRA L2553 00001326 E00C MOV #12,R0 00001328 L2320: ; case label bt_tblade. 1026 /* 30 frames of cowling xlat */ bt_tblade. 1027 case 20: bt_tblade. 1028 pTblade->fHBAnimPercent = 0.0f; 00001328 E010 MOV #16,R0 0000132A F38D FLDI0 FR3 0000132C F437 FMOV.S FR3,@(R0,R4) bt_tblade. 1029 case 21: 0000132E L2321: ; case label bt_tblade. 1030 case 22: 0000132E L2322: ; case label bt_tblade. 1031 case 23: 0000132E L2323: ; case label bt_tblade. 1032 case 24: 0000132E L2324: ; case label bt_tblade. 1033 case 25: 0000132E L2325: ; case label bt_tblade. 1034 case 26: 0000132E L2326: ; case label bt_tblade. 1035 case 27: 0000132E L2327: ; case label bt_tblade. 1036 case 28: 0000132E L2328: ; case label bt_tblade. 1037 case 29: 0000132E L2329: ; case label bt_tblade. 1038 case 30: 0000132E L2330: ; case label bt_tblade. 1039 case 31: 0000132E L2331: ; case label bt_tblade. 1040 case 32: 0000132E L2332: ; case label bt_tblade. 1041 case 33: 0000132E L2333: ; case label bt_tblade. 1042 case 34: 0000132E L2334: ; case label bt_tblade. 1043 case 35: 0000132E L2335: ; case label bt_tblade. 1044 case 36: 0000132E L2336: ; case label bt_tblade. 1045 case 37: 0000132E L2337: ; case label bt_tblade. 1046 case 38: 0000132E L2338: ; case label bt_tblade. 1047 case 39: 0000132E L2339: ; case label bt_tblade. 1048 case 40: 0000132E L2340: ; case label bt_tblade. 1049 case 41: 0000132E L2341: ; case label bt_tblade. 1050 case 42: 0000132E L2342: ; case label bt_tblade. 1051 case 43: 0000132E L2343: ; case label bt_tblade. 1052 case 44: 0000132E L2344: ; case label bt_tblade. 1053 case 45: 0000132E L2345: ; case label bt_tblade. 1054 case 46: 0000132E L2346: ; case label bt_tblade. 1055 case 47: 0000132E L2347: ; case label bt_tblade. 1056 case 48: 0000132E L2348: ; case label bt_tblade. 1057 case 49: 0000132E L2349: ; case label bt_tblade. 1058 E pTblade->fHBAnimPercent = ( pTblade->f +HBAnimPercent+((pTblade->fHBAnimPercent*(1.f-pTblade-> +fHBAnimPercent))*.1807280f+.01f) ); 0000132E E010 MOV #16,R0 00001330 F39D FLDI1 FR3 00001332 F446 FMOV.S @(R0,R4),FR4 00001334 C729 MOVA L2593+14,R0 00001336 F008 FMOV.S @R0,FR0 00001338 C729 MOVA L2593+18,R0 0000133A F341 FSUB FR4,FR3 0000133C F24C FMOV.S FR4,FR2 0000133E F342 FMUL FR4,FR3 00001340 F23E FMAC FR0,FR3,FR2 00001342 F308 FMOV.S @R0,FR3 00001344 E010 MOV #16,R0 00001346 F230 FADD FR3,FR2 00001348 F427 FMOV.S FR2,@(R0,R4) bt_tblade. 1059 E pTblade->fHBLeftXlat = -1.757f - (-1.7 +57f * pTblade->fHBAnimPercent); 0000134A C726 MOVA L2593+22,R0 0000134C F208 FMOV.S @R0,FR2 0000134E C726 MOVA L2593+26,R0 00001350 F008 FMOV.S @R0,FR0 00001352 E010 MOV #16,R0 00001354 F346 FMOV.S @(R0,R4),FR3 00001356 E008 MOV #8,R0 00001358 F23E FMAC FR0,FR3,FR2 bt_tblade. 1060 break; 0000135A L2553: 0000135A A002 BRA L2476 0000135C F427 FMOV.S FR2,@(R0,R4) 0000135E L2350: ; default label bt_tblade. 1061 default: bt_tblade. 1062 E return 1; 0000135E 000B RTS 00001360 E001 MOV #1,R0 00001362 L2476: bt_tblade. 1063 } bt_tblade. 1064 bt_tblade. 1065 ++pTblade->nHBAnimFrameCount; 00001362 8543 MOV.W @(6,R4),R0 00001364 7001 ADD #1,R0 00001366 8143 MOV.W R0,@(6,R4) bt_tblade. 1066 E return 0; 00001368 E000 MOV #0,R0 bt_tblade. 1067 } 0000136A L2477: 0000136A 000B RTS 0000136C 0009 NOP bt_tblade. 1068 bt_tblade. 1069 static void _FlameParticleInit( void ) { 0000136E L1891: ; function: _FlamePar + ticleInit ; frame size=0 bt_tblade. 1070 E _FlameParticle.nFlags = 0x1; 0000136E D41F MOV.L L2593+30,R4; L1883 bt_tblade. 1071 _FlameParticle.nType = PARTICLE_FLAME; bt_tblade. 1072 _FlameParticle.fScale = 1.0f; 00001370 E020 MOV #32,R0 00001372 E301 MOV #1,R3 00001374 2432 MOV.L R3,@R4 00001376 E203 MOV #3,R2 00001378 1421 MOV.L R2,@(4,R4) bt_tblade. 1073 _FlameParticle.fOpacity = 1.0f; bt_tblade. 1074 _FlameParticle.nAngle = 0; 0000137A E500 MOV #0,R5 0000137C F49D FLDI1 FR4 0000137E F447 FMOV.S FR4,@(R0,R4) 00001380 E024 MOV #36,R0 00001382 F447 FMOV.S FR4,@(R0,R4) bt_tblade. 1075 _FlameParticle.nAge = 0; bt_tblade. 1076 E _FlameParticle.pMesh = 0; bt_tblade. 1077 E _FlameParticle.pUserObj = 0; bt_tblade. 1078 _FlameParticle.pWorkFcn = _FlameParticleWork; 00001384 E044 MOV #68,R0 00001386 145A MOV.L R5,@(40,R4) 00001388 145B MOV.L R5,@(44,R4) 0000138A 145E MOV.L R5,@(56,R4) 0000138C 145F MOV.L R5,@(60,R4) 0000138E D318 MOV.L L2593+34,R3; L1893 00001390 0436 MOV.L R3,@(R0,R4) bt_tblade. 1079 _FlameParticle.pDrawFcn = _FlameParticleDraw; 00001392 E048 MOV #72,R0 00001394 D217 MOV.L L2593+38,R2; L1894 bt_tblade. 1080 } 00001396 000B RTS 00001398 0426 MOV.L R2,@(R0,R4) bt_tblade. 1081 bt_tblade. 1082 /* just needed to kill the particle when it gets calle +d, */ bt_tblade. 1083 /* the skip first move flag is set so this particle wi +ll */ bt_tblade. 1084 /* be drawn and then killed the next loop */ bt_tblade. 1085 E static int _FlameParticleWork( Particle_t *pParticle ) + { 0000139A L1893: ; function: _FlamePar + ticleWork ; frame size=0 bt_tblade. 1086 E return 1; bt_tblade. 1087 } 0000139A 000B RTS 0000139C E001 MOV #1,R0 bt_tblade. 1088 bt_tblade. 1089 static void _FlameParticleAdd( Player_t *pPlayer ) { 0000139E L1892: ; function: _FlamePar + ticleAdd ; frame size=0 bt_tblade. 1090 _FlameParticle.Pos.p[0] = pPlayer->pWorldOb->O +rient.Pos.p[0]; 0000139E E050 MOV #80,R0 000013A0 D512 MOV.L L2593+30,R5; L1883 000013A2 024E MOV.L @(R0,R4),R2 000013A4 E008 MOV #8,R0 000013A6 7258 ADD #88,R2 000013A8 F328 FMOV.S @R2,FR3 000013AA F537 FMOV.S FR3,@(R0,R5) bt_tblade. 1091 _FlameParticle.Pos.p[1] = pPlayer->pWorldOb->O +rient.Pos.p[1]; 000013AC E050 MOV #80,R0 000013AE 034E MOV.L @(R0,R4),R3 000013B0 E05C MOV #92,R0 000013B2 F336 FMOV.S @(R0,R3),FR3 000013B4 E00C MOV #12,R0 000013B6 F537 FMOV.S FR3,@(R0,R5) bt_tblade. 1092 _FlameParticle.Pos.p[2] = pPlayer->pWorldOb->O +rient.Pos.p[2]; 000013B8 E050 MOV #80,R0 000013BA 034E MOV.L @(R0,R4),R3 000013BC E060 MOV #96,R0 000013BE F336 FMOV.S @(R0,R3),FR3 000013C0 E010 MOV #16,R0 000013C2 F537 FMOV.S FR3,@(R0,R5) bt_tblade. 1093 _FlameParticle.pUserObj = pPlayer; 000013C4 154F MOV.L R4,@(60,R5) bt_tblade. 1094 bt_tblade. 1095 E particle_Add( &_FlameParticle, 0 ); 000013C6 D409 MOV.L L2593+30,R4; L1883 000013C8 D30B MOV.L L2593+42,R3; _particle_Add 000013CA 432B JMP @R3 000013CC E500 MOV #0,R5 000013CE L2593: 000013CE 00000002 .RES.W 1 000013D0 3D4CCCCC .DATA.L H'3D4CCCCC 000013D4 C0400000 .DATA.L H'C0400000 000013D8 40400000 .DATA.L H'40400000 000013DC 3E3910C2 .DATA.L H'3E3910C2 000013E0 3C23D70A .DATA.L H'3C23D70A 000013E4 BFE0E560 .DATA.L H'BFE0E560 000013E8 3FE0E560 .DATA.L H'3FE0E560 000013EC <00000000> .DATA.L L1883 000013F0 <00000000> .DATA.L L1893 000013F4 <00000000> .DATA.L L1894 000013F8 <00000000> .DATA.L _particle_Add bt_tblade. 1096 } bt_tblade. 1097 bt_tblade. 1098 static void _FlameParticleDraw( Particle_t *pParticle +) { 000013FC L1894: ; function: _FlamePar + ticleDraw ; frame size=312 000013FC 2FE6 MOV.L R14,@-R15 000013FE 2FD6 MOV.L R13,@-R15 00001400 2FC6 MOV.L R12,@-R15 00001402 2FB6 MOV.L R11,@-R15 00001404 2FA6 MOV.L R10,@-R15 00001406 2F96 MOV.L R9,@-R15 00001408 2F86 MOV.L R8,@-R15 0000140A 6843 MOV R4,R8 0000140C FFFB FMOV.S FR15,@-R15 0000140E FFEB FMOV.S FR14,@-R15 00001410 FFDB FMOV.S FR13,@-R15 00001412 4F22 STS.L PR,@-R15 00001414 9086 MOV.W L2594,R0 ; H'FEF4 bt_tblade. 1099 Player_t *pPlayer = (Player_t *)pParticle->pUs +erObj; 00001416 538F MOV.L @(60,R8),R3 00001418 3F0C ADD R0,R15 bt_tblade. 1100 TBlade_t *ptblade = (TBlade_t *)pPlayer->pBoat +Data; 0000141A E060 MOV #96,R0 0000141C 6E33 MOV R3,R14 bt_tblade. 1101 Xfm_t PosterXfm, xfm; bt_tblade. 1102 f32 fTemp = 1.0f; bt_tblade. 1103 u32 nLightFrame, i, nTemp; bt_tblade. 1104 Mesh3dAmbient_t Ambient; bt_tblade. 1105 Mesh3d_t *pTop, *pBottom; bt_tblade. 1106 E int bScale; bt_tblade. 1107 bt_tblade. 1108 /* push the boat's current xfm */ bt_tblade. 1109 orient_BuildXfm( &xfm, &pPlayer->pWorldOb->Ori +ent ); 0000141E 6533 MOV R3,R5 00001420 2F32 MOV.L R3,@R15 00001422 0EEE MOV.L @(R0,R14),R14 00001424 E050 MOV #80,R0 00001426 055E MOV.L @(R0,R5),R5 00001428 64F3 MOV R15,R4 0000142A D33F MOV.L L2594+4,R3 ; _orient_BuildXfm 0000142C FE9D FLDI1 FR14 0000142E 7558 ADD #88,R5 00001430 FFEC FMOV.S FR14,FR15 00001432 430B JSR @R3 00001434 7434 ADD #52,R4 bt_tblade. 1110 xfm_Push( &xfm ); 00001436 DD3D MOV.L L2594+8,R13; _xfm_Push 00001438 64F3 MOV R15,R4 0000143A 4D0B JSR @R13 0000143C 7434 ADD #52,R4 bt_tblade. 1111 /* calculate the postering xfm */ bt_tblade. 1112 xfm_PosterAboutZ( &PosterXfm ); 0000143E D23C MOV.L L2594+12,R2; _xfm_PosterAboutZ 00001440 9471 MOV.W L2594+2,R4 ; H'00A0 00001442 420B JSR @R2 00001444 34FC ADD R15,R4 bt_tblade. 1113 mesh3d_GetAmbientLightState( &Ambient ); 00001446 D33B MOV.L L2594+16, + R3; _mesh3d_GetAmbientLi + ghtState 00001448 64F3 MOV R15,R4 0000144A 430B JSR @R3 0000144C 7410 ADD #16,R4 bt_tblade. 1114 nLightFrame = mesh3d_StartLightFrame(); 0000144E D23A MOV.L L2594+20, + R2; _mesh3d_StartLightFr + ame 00001450 420B JSR @R2 00001452 0009 NOP bt_tblade. 1115 mesh3d_ClearLightFrame(); 00001454 D339 MOV.L L2594+24, + R3; _mesh3d_ClearLightFr + ame 00001456 430B JSR @R3 00001458 1F03 MOV.L R0,@(12,R15) bt_tblade. 1116 mesh3d_SetAmbientEffects( pParticle->fOpacity +); 0000145A DB39 MOV.L L2594+28, + R11; _mesh3d_SetAmbientE + ffects 0000145C E024 MOV #36,R0 0000145E 4B0B JSR @R11 00001460 F486 FMOV.S @(R0,R8),FR4 bt_tblade. 1117 if( ptblade->bFDrawBlue ) { 00001462 C738 MOVA L2594+32,R0 00001464 DC3A MOV.L L2594+44,R12; _mesh3d_Draw 00001466 F408 FMOV.S @R0,FR4 00001468 E036 MOV #54,R0 0000146A 03EC MOV.B @(R0,R14),R3 0000146C D936 MOV.L L2594+36,R9; _xfm_Mult 0000146E DA37 MOV.L L2594+40,R10; _xfm_Pop 00001470 2338 TST R3,R3 00001472 8B01 BF L2595 00001474 A082 BRA L2479 00001476 0009 NOP 00001478 L2595: bt_tblade. 1118 /* draw the blue flame with end caps * +/ bt_tblade. 1119 _pBFlame->pMtl->pTexDef = _paBlueCell[ +ptblade->nFCell]; 00001478 E038 MOV #56,R0 0000147A D836 MOV.L L2594+48,R8; L1816 0000147C 01ED MOV.W @(R0,R14),R1 0000147E 6382 MOV.L @R8,R3 00001480 D035 MOV.L L2594+52,R0; L1827 00001482 611D EXTU.W R1,R1 00001484 523D MOV.L @(52,R3),R2 00001486 4108 SHLL2 R1 00001488 031E MOV.L @(R0,R1),R3 bt_tblade. 1120 bt_tblade. 1121 E if( ptblade->fFIntensity != 0.35f ) { 0000148A C734 MOVA L2594+56,R0 0000148C 1235 MOV.L R3,@(20,R2) 0000148E FD08 FMOV.S @R0,FR13 00001490 E040 MOV #64,R0 00001492 F3E6 FMOV.S @(R0,R14),FR3 00001494 F3D4 FCMP/EQ FR13,FR3 00001496 8903 BT L2480 bt_tblade. 1122 fTemp = 0.75f - ptblade->fFInt +ensity; 00001498 F3E6 FMOV.S @(R0,R14),FR3 0000149A F34D FNEG FR3 0000149C FF3C FMOV.S FR3,FR15 0000149E FF40 FADD FR4,FR15 000014A0 L2480: bt_tblade. 1123 } bt_tblade. 1124 mesh3d_SetAmbientLight( 0.0f, 0.0f, 1. +0f, fTemp ); 000014A0 D32F MOV.L L2594+60, + R3; _mesh3d_SetAmbientLi + ght 000014A2 F58D FLDI0 FR5 000014A4 F7FC FMOV.S FR15,FR7 000014A6 F6EC FMOV.S FR14,FR6 000014A8 430B JSR @R3 000014AA F48D FLDI0 FR4 bt_tblade. 1125 E mesh3d_Draw( _pLEndPiece, 0xf, 1 ); 000014AC D22D MOV.L L2594+64,R2; L1821 000014AE E50F MOV #15,R5 000014B0 E601 MOV #1,R6 000014B2 4C0B JSR @R12 000014B4 6422 MOV.L @R2,R4 bt_tblade. 1126 E mesh3d_Draw( _pREndPiece, 0xf, 1 ); 000014B6 D32C MOV.L L2594+68,R3; L1822 000014B8 E50F MOV #15,R5 000014BA E601 MOV #1,R6 000014BC 4C0B JSR @R12 000014BE 6432 MOV.L @R3,R4 bt_tblade. 1127 /* draw the left flame */ bt_tblade. 1128 mesh3d_SetAmbientEffects( ( (xmath_Ran +domFloat() * 0.6f) + 0.35f ) ); 000014C0 D22A MOV.L L2594+72,R2; _xmath_RandomFloat 000014C2 420B JSR @R2 000014C4 0009 NOP 000014C6 C72A MOVA L2594+76,R0 000014C8 F30C FMOV.S FR0,FR3 000014CA F008 FMOV.S @R0,FR0 000014CC F4DC FMOV.S FR13,FR4 000014CE 4B0B JSR @R11 000014D0 F43E FMAC FR0,FR3,FR4 bt_tblade. 1129 xfm_Mult( &xfm, &_xfmLFlame, &PosterXf +m ); 000014D2 9628 MOV.W L2594+2,R6 ; H'00A0 000014D4 64F3 MOV R15,R4 000014D6 D527 MOV.L L2594+80,R5; L1877 000014D8 36FC ADD R15,R6 000014DA 490B JSR @R9 000014DC 7434 ADD #52,R4 bt_tblade. 1130 xfm_Push( &xfm ); 000014DE 64F3 MOV R15,R4 000014E0 4D0B JSR @R13 000014E2 7434 ADD #52,R4 bt_tblade. 1131 E mesh3d_Draw( _pBFlame, 0xf, 1 ); 000014E4 E50F MOV #15,R5 000014E6 E601 MOV #1,R6 000014E8 4C0B JSR @R12 000014EA 6482 MOV.L @R8,R4 bt_tblade. 1132 xfm_Pop(); 000014EC 4A0B JSR @R10 000014EE 0009 NOP bt_tblade. 1133 /* draw the right flame */ bt_tblade. 1134 mesh3d_SetAmbientEffects( ( (xmath_Ran +domFloat() * 0.6f) + 0.35f ) ); 000014F0 D31E MOV.L L2594+72,R3; _xmath_RandomFloat 000014F2 430B JSR @R3 000014F4 0009 NOP 000014F6 C71E MOVA L2594+76,R0 000014F8 F30C FMOV.S FR0,FR3 000014FA F008 FMOV.S @R0,FR0 000014FC FD3E FMAC FR0,FR3,FR13 000014FE 4B0B JSR @R11 00001500 F4DC FMOV.S FR13,FR4 bt_tblade. 1135 xfm_Mult( &xfm, &_xfmRFlame, &PosterXf +m ); 00001502 9610 MOV.W L2594+2,R6 ; H'00A0 00001504 64F3 MOV R15,R4 00001506 D51C MOV.L L2594+84,R5; L1878 00001508 36FC ADD R15,R6 0000150A 490B JSR @R9 0000150C 7434 ADD #52,R4 bt_tblade. 1136 xfm_Push( &xfm ); 0000150E 64F3 MOV R15,R4 00001510 4D0B JSR @R13 00001512 7434 ADD #52,R4 bt_tblade. 1137 E mesh3d_Draw( _pBFlame, 0xf, 1 ); 00001514 E50F MOV #15,R5 00001516 E601 MOV #1,R6 00001518 4C0B JSR @R12 0000151A 6482 MOV.L @R8,R4 bt_tblade. 1138 xfm_Pop(); 0000151C 4A0B JSR @R10 0000151E 0009 NOP 00001520 A135 BRA L2481 00001522 0009 NOP 00001524 L2594: 00001524 FEF4 .DATA.W H'FEF4 00001526 00A0 .DATA.W H'00A0 00001528 <00000000> .DATA.L _orient_BuildXfm 0000152C <00000000> .DATA.L _xfm_Push 00001530 <00000000> .DATA.L _xfm_PosterAboutZ 00001534 <00000000> .DATA.L _mesh3d_GetAmbientLightState 00001538 <00000000> .DATA.L _mesh3d_StartLightFrame 0000153C <00000000> .DATA.L _mesh3d_ClearLightFrame 00001540 <00000000> .DATA.L _mesh3d_SetAmbientEffects 00001544 3F400000 .DATA.L H'3F400000 00001548 <00000000> .DATA.L _xfm_Mult 0000154C <00000000> .DATA.L _xfm_Pop 00001550 <00000000> .DATA.L _mesh3d_Draw 00001554 <00000000> .DATA.L L1816 00001558 <00000000> .DATA.L L1827 0000155C 3EB33333 .DATA.L H'3EB33333 00001560 <00000000> .DATA.L _mesh3d_SetAmbientLight 00001564 <00000000> .DATA.L L1821 00001568 <00000000> .DATA.L L1822 0000156C <00000000> .DATA.L _xmath_RandomFloat 00001570 3F199999 .DATA.L H'3F199999 00001574 <00000000> .DATA.L L1877 00001578 <00000000> .DATA.L L1878 0000157C L2479: bt_tblade. 1139 } else if( ptblade->bFDrawOrange) { 0000157C E035 MOV #53,R0 0000157E 02EC MOV.B @(R0,R14),R2 00001580 2228 TST R2,R2 00001582 8B01 BF L2596 00001584 A103 BRA L2481 00001586 0009 NOP 00001588 L2596: 00001588 E038 MOV #56,R0 0000158A D43B MOV.L L2597+4,R4 ; L1826 0000158C 03ED MOV.W @(R0,R14),R3 0000158E E207 MOV #7,R2 00001590 633D EXTU.W R3,R3 00001592 3323 CMP/GE R2,R3 00001594 8D0A BT/S L2483 00001596 6543 MOV R4,R5 bt_tblade. 1140 /* draw the orange flame with end caps + */ bt_tblade. 1141 E if( ptblade->nFCell < 7 ) { bt_tblade. 1142 _pOFlameBurst->pMtl->pTexDef = + _paFlameCell[ptblade->nFCell]; 00001598 D338 MOV.L L2597+8,R3 ; L1819 0000159A 00ED MOV.W @(R0,R14),R0 0000159C 6132 MOV.L @R3,R1 0000159E 600D EXTU.W R0,R0 000015A0 4008 SHLL2 R0 000015A2 521D MOV.L @(52,R1),R2 000015A4 015E MOV.L @(R0,R5),R1 000015A6 1215 MOV.L R1,@(20,R2) 000015A8 A023 BRA L2484 000015AA 0009 NOP 000015AC L2483: bt_tblade. 1143 } else { bt_tblade. 1144 pTop = _paOFlameTop[ ptblade-> +nFGeoCell ]; 000015AC E03A MOV #58,R0 000015AE 06ED MOV.W @(R0,R14),R6 000015B0 D033 MOV.L L2597+12,R0; L1817 000015B2 666D EXTU.W R6,R6 000015B4 4608 SHLL2 R6 000015B6 036E MOV.L @(R0,R6),R3 000015B8 1F31 MOV.L R3,@(4,R15) bt_tblade. 1145 pBottom = _paOFlameBottom[ ptb +lade->nFGeoCell ]; 000015BA D032 MOV.L L2597+16,R0; L1818 000015BC 036E MOV.L @(R0,R6),R3 000015BE 1F32 MOV.L R3,@(8,R15) bt_tblade. 1146 bt_tblade. 1147 _pLowGeoFlame->pMtl->pTexDef = + _paFlameCell[ ptblade->nFCell ]; 000015C0 D031 MOV.L L2597+20,R0; L1824 000015C2 6202 MOV.L @R0,R2 000015C4 E038 MOV #56,R0 000015C6 00ED MOV.W @(R0,R14),R0 000015C8 532D MOV.L @(52,R2),R3 000015CA 600D EXTU.W R0,R0 000015CC 4008 SHLL2 R0 000015CE 025E MOV.L @(R0,R5),R2 bt_tblade. 1148 pTop->pMtl->pTexDef = _paFlame +Cell[ ptblade->nFCell ]; 000015D0 E038 MOV #56,R0 000015D2 1325 MOV.L R2,@(20,R3) 000015D4 00ED MOV.W @(R0,R14),R0 000015D6 53F1 MOV.L @(4,R15),R3 000015D8 600D EXTU.W R0,R0 000015DA 4008 SHLL2 R0 000015DC 523D MOV.L @(52,R3),R2 000015DE 034E MOV.L @(R0,R4),R3 bt_tblade. 1149 pBottom->pMtl->pTexDef = _paFl +ameCell[ ptblade->nFCell ]; 000015E0 E038 MOV #56,R0 000015E2 1235 MOV.L R3,@(20,R2) 000015E4 52F2 MOV.L @(8,R15),R2 000015E6 00ED MOV.W @(R0,R14),R0 000015E8 532D MOV.L @(52,R2),R3 000015EA 600D EXTU.W R0,R0 000015EC 4008 SHLL2 R0 000015EE 024E MOV.L @(R0,R4),R2 000015F0 1325 MOV.L R2,@(20,R3) 000015F2 L2484: bt_tblade. 1150 } bt_tblade. 1151 bt_tblade. 1152 E if( ptblade->fFIntensity != 0.75f ) { 000015F2 E040 MOV #64,R0 000015F4 F3E6 FMOV.S @(R0,R14),FR3 000015F6 F344 FCMP/EQ FR4,FR3 000015F8 8904 BT L2485 bt_tblade. 1153 E fTemp = ptblade->fFIntensity * + (1.0f/0.75f); 000015FA C724 MOVA L2597+24,R0 000015FC F308 FMOV.S @R0,FR3 000015FE E040 MOV #64,R0 00001600 FFE6 FMOV.S @(R0,R14),FR15 00001602 FF32 FMUL FR3,FR15 00001604 L2485: bt_tblade. 1154 } bt_tblade. 1155 mesh3d_SetAmbientLight( 1.0f, 0.945098 +0392157f, 0.5450980392157f, fTemp ); 00001604 C722 MOVA L2597+28,R0 00001606 D324 MOV.L L2597+36, + R3; _mesh3d_SetAmbientLi + ght 00001608 F608 FMOV.S @R0,FR6 0000160A C722 MOVA L2597+32,R0 0000160C F508 FMOV.S @R0,FR5 0000160E F7FC FMOV.S FR15,FR7 00001610 430B JSR @R3 00001612 F4EC FMOV.S FR14,FR4 bt_tblade. 1156 E mesh3d_Draw( _pLEndPiece, 0xf, 1 ); 00001614 D221 MOV.L L2597+40,R2; L1821 00001616 E50F MOV #15,R5 00001618 E601 MOV #1,R6 0000161A 4C0B JSR @R12 0000161C 6422 MOV.L @R2,R4 bt_tblade. 1157 E mesh3d_Draw( _pREndPiece, 0xf, 1 ); 0000161E D320 MOV.L L2597+44,R3; L1822 00001620 E50F MOV #15,R5 00001622 E601 MOV #1,R6 00001624 4C0B JSR @R12 00001626 6432 MOV.L @R3,R4 bt_tblade. 1158 mesh3d_SetAmbientLight( 1.0f, 1.0f, 1. +0f, 1.0f ); 00001628 D21B MOV.L L2597+36, + R2; _mesh3d_SetAmbientLi + ght 0000162A F5EC FMOV.S FR14,FR5 0000162C F7EC FMOV.S FR14,FR7 0000162E F6EC FMOV.S FR14,FR6 00001630 420B JSR @R2 00001632 F4EC FMOV.S FR14,FR4 bt_tblade. 1159 /* draw the left flame */ bt_tblade. 1160 xfm_Mult( &xfm, &_xfmLFlame, &PosterXf +m ); 00001634 961E MOV.W L2597,R6 ; H'00A0 00001636 64F3 MOV R15,R4 00001638 D51A MOV.L L2597+48,R5; L1877 0000163A 36FC ADD R15,R6 0000163C 490B JSR @R9 0000163E 7434 ADD #52,R4 bt_tblade. 1161 xfm_Push( &xfm ); 00001640 64F3 MOV R15,R4 00001642 4D0B JSR @R13 00001644 7434 ADD #52,R4 bt_tblade. 1162 E if( ptblade->nFCell < 7 ) { 00001646 E038 MOV #56,R0 00001648 03ED MOV.W @(R0,R14),R3 0000164A E207 MOV #7,R2 0000164C 633D EXTU.W R3,R3 0000164E 3323 CMP/GE R2,R3 00001650 892C BT L2486 bt_tblade. 1163 mesh3d_SetAmbientEffects( fTem +p ); 00001652 4B0B JSR @R11 00001654 F4FC FMOV.S FR15,FR4 bt_tblade. 1164 E mesh3d_Draw( _pGlowCard, 0xf, +1 ); 00001656 D214 MOV.L L2597+52,R2; L1823 00001658 E50F MOV #15,R5 0000165A E601 MOV #1,R6 0000165C 4C0B JSR @R12 0000165E 6422 MOV.L @R2,R4 bt_tblade. 1165 mesh3d_SetAmbientEffects( pPar +ticle->fOpacity ); 00001660 E024 MOV #36,R0 00001662 4B0B JSR @R11 00001664 F486 FMOV.S @(R0,R8),FR4 bt_tblade. 1166 E mesh3d_Draw( _pOFlameBurst, 0x +f, 1 ); 00001666 D305 MOV.L L2597+8,R3 ; L1819 00001668 E50F MOV #15,R5 0000166A E601 MOV #1,R6 0000166C 4C0B JSR @R12 0000166E 6432 MOV.L @R3,R4 00001670 A047 BRA L2487 00001672 0009 NOP 00001674 L2597: 00001674 00A0 .DATA.W H'00A0 00001676 00000002 .RES.W 1 00001678 <00000000> .DATA.L L1826 0000167C <00000000> .DATA.L L1819 00001680 <00000000> .DATA.L L1817 00001684 <00000000> .DATA.L L1818 00001688 <00000000> .DATA.L L1824 0000168C 3FAAAAAA .DATA.L H'3FAAAAAA 00001690 3F0B8B8B .DATA.L H'3F0B8B8B 00001694 3F71F1F1 .DATA.L H'3F71F1F1 00001698 <00000000> .DATA.L _mesh3d_SetAmbientLight 0000169C <00000000> .DATA.L L1821 000016A0 <00000000> .DATA.L L1822 000016A4 <00000000> .DATA.L L1877 000016A8 <00000000> .DATA.L L1823 000016AC L2486: bt_tblade. 1167 } else { bt_tblade. 1168 fTemp = (xmath_RandomFloat() * + 0.3f) + 0.7f; 000016AC D143 MOV.L L2598+4,R1 ; _xmath_RandomFloat 000016AE 410B JSR @R1 000016B0 0009 NOP 000016B2 C743 MOVA L2598+8,R0 000016B4 F30C FMOV.S FR0,FR3 000016B6 FF08 FMOV.S @R0,FR15 000016B8 C742 MOVA L2598+12,R0 000016BA F008 FMOV.S @R0,FR0 000016BC FF3E FMAC FR0,FR3,FR15 bt_tblade. 1169 mesh3d_SetAmbientEffects( fTem +p ); 000016BE 4B0B JSR @R11 000016C0 F4FC FMOV.S FR15,FR4 bt_tblade. 1170 E mesh3d_Draw( _pGlowCard, 0xf, +1 ); 000016C2 D341 MOV.L L2598+16,R3; L1823 000016C4 E50F MOV #15,R5 000016C6 E601 MOV #1,R6 000016C8 4C0B JSR @R12 000016CA 6432 MOV.L @R3,R4 bt_tblade. 1171 mesh3d_SetAmbientEffects( pPar +ticle->fOpacity ); 000016CC E024 MOV #36,R0 000016CE 4B0B JSR @R11 000016D0 F486 FMOV.S @(R0,R8),FR4 bt_tblade. 1172 bt_tblade. 1173 if( pPlayer->nLod == BOATS_LOD +_PLAYER ) { 000016D2 63F2 MOV.L @R15,R3 000016D4 E058 MOV #88,R0 000016D6 023D MOV.W @(R0,R3),R2 000016D8 2228 TST R2,R2 000016DA 8B0C BF L2488 bt_tblade. 1174 E mesh3d_Draw( pBottom, +0xf, 1 ); 000016DC E50F MOV #15,R5 000016DE E601 MOV #1,R6 000016E0 4C0B JSR @R12 000016E2 54F2 MOV.L @(8,R15),R4 bt_tblade. 1175 E mesh3d_Draw( _pFlameMi +ddle, 0xf, 1 ); 000016E4 D339 MOV.L L2598+20,R3; L1820 000016E6 E50F MOV #15,R5 000016E8 E601 MOV #1,R6 000016EA 4C0B JSR @R12 000016EC 6432 MOV.L @R3,R4 bt_tblade. 1176 E mesh3d_Draw( pTop, 0xf +, 1 ); 000016EE E50F MOV #15,R5 000016F0 E601 MOV #1,R6 000016F2 A004 BRA L2554 000016F4 54F1 MOV.L @(4,R15),R4 000016F6 L2488: bt_tblade. 1177 } else { bt_tblade. 1178 E mesh3d_Draw( _pLowGeoF +lame, 0xf, 1 ); 000016F6 D236 MOV.L L2598+24,R2; L1824 000016F8 E601 MOV #1,R6 000016FA E50F MOV #15,R5 000016FC 6422 MOV.L @R2,R4 000016FE L2554: 000016FE 4C0B JSR @R12 00001700 0009 NOP 00001702 L2487: bt_tblade. 1179 } bt_tblade. 1180 } bt_tblade. 1181 xfm_Pop(); 00001702 4A0B JSR @R10 00001704 0009 NOP bt_tblade. 1182 /* draw the right flame */ bt_tblade. 1183 xfm_Mult( &xfm, &_xfmRFlame, &PosterXf +m ); 00001706 9657 MOV.W L2598,R6 ; H'00A0 00001708 64F3 MOV R15,R4 0000170A D532 MOV.L L2598+28,R5; L1878 0000170C 36FC ADD R15,R6 0000170E 490B JSR @R9 00001710 7434 ADD #52,R4 bt_tblade. 1184 xfm_Push( &xfm ); 00001712 64F3 MOV R15,R4 00001714 4D0B JSR @R13 00001716 7434 ADD #52,R4 bt_tblade. 1185 E if( ptblade->nFCell < 7 ) { 00001718 E038 MOV #56,R0 0000171A 03ED MOV.W @(R0,R14),R3 0000171C E207 MOV #7,R2 0000171E 633D EXTU.W R3,R3 00001720 3323 CMP/GE R2,R3 00001722 8910 BT L2490 bt_tblade. 1186 mesh3d_SetAmbientEffects( fTem +p ); 00001724 4B0B JSR @R11 00001726 F4FC FMOV.S FR15,FR4 bt_tblade. 1187 E mesh3d_Draw( _pGlowCard, 0xf, +1 ); 00001728 D227 MOV.L L2598+16,R2; L1823 0000172A E50F MOV #15,R5 0000172C E601 MOV #1,R6 0000172E 4C0B JSR @R12 00001730 6422 MOV.L @R2,R4 bt_tblade. 1188 mesh3d_SetAmbientEffects( pPar +ticle->fOpacity ); 00001732 E024 MOV #36,R0 00001734 4B0B JSR @R11 00001736 F486 FMOV.S @(R0,R8),FR4 bt_tblade. 1189 E mesh3d_Draw( _pOFlameBurst, 0x +f, 1 ); 00001738 D327 MOV.L L2598+32,R3; L1819 0000173A E50F MOV #15,R5 0000173C E601 MOV #1,R6 0000173E 4C0B JSR @R12 00001740 6432 MOV.L @R3,R4 00001742 A022 BRA L2491 00001744 0009 NOP 00001746 L2490: bt_tblade. 1190 } else { bt_tblade. 1191 mesh3d_SetAmbientEffects( fTem +p ); 00001746 4B0B JSR @R11 00001748 F4FC FMOV.S FR15,FR4 bt_tblade. 1192 E mesh3d_Draw( _pGlowCard, 0xf, +1 ); 0000174A D31F MOV.L L2598+16,R3; L1823 0000174C E50F MOV #15,R5 0000174E E601 MOV #1,R6 00001750 4C0B JSR @R12 00001752 6432 MOV.L @R3,R4 bt_tblade. 1193 mesh3d_SetAmbientEffects( pPar +ticle->fOpacity ); 00001754 E024 MOV #36,R0 00001756 4B0B JSR @R11 00001758 F486 FMOV.S @(R0,R8),FR4 bt_tblade. 1194 bt_tblade. 1195 if( pPlayer->nLod == BOATS_LOD +_PLAYER ) { 0000175A 63F2 MOV.L @R15,R3 0000175C E058 MOV #88,R0 0000175E 023D MOV.W @(R0,R3),R2 00001760 2228 TST R2,R2 00001762 8B0C BF L2492 bt_tblade. 1196 E mesh3d_Draw( pBottom, +0xf, 1 ); 00001764 E50F MOV #15,R5 00001766 E601 MOV #1,R6 00001768 4C0B JSR @R12 0000176A 54F2 MOV.L @(8,R15),R4 bt_tblade. 1197 E mesh3d_Draw( _pFlameMi +ddle, 0xf, 1 ); 0000176C D317 MOV.L L2598+20,R3; L1820 0000176E E50F MOV #15,R5 00001770 E601 MOV #1,R6 00001772 4C0B JSR @R12 00001774 6432 MOV.L @R3,R4 bt_tblade. 1198 E mesh3d_Draw( pTop, 0xf +, 1 ); 00001776 E50F MOV #15,R5 00001778 E601 MOV #1,R6 0000177A A004 BRA L2555 0000177C 54F1 MOV.L @(4,R15),R4 0000177E L2492: bt_tblade. 1199 } else { bt_tblade. 1200 E mesh3d_Draw( _pLowGeoF +lame, 0xf, 1 ); 0000177E D214 MOV.L L2598+24,R2; L1824 00001780 E601 MOV #1,R6 00001782 E50F MOV #15,R5 00001784 6422 MOV.L @R2,R4 00001786 L2555: 00001786 4C0B JSR @R12 00001788 0009 NOP 0000178A L2491: bt_tblade. 1201 } bt_tblade. 1202 } bt_tblade. 1203 xfm_Pop( ); 0000178A 4A0B JSR @R10 0000178C 0009 NOP 0000178E L2481: bt_tblade. 1204 } bt_tblade. 1205 /* draw the engine flame if needed */ bt_tblade. 1206 if( ptblade->bEngDrawFlames ) { 0000178E E034 MOV #52,R0 00001790 03EC MOV.B @(R0,R14),R3 00001792 2338 TST R3,R3 00001794 8B01 BF L2599 00001796 A205 BRA L2494 00001798 0009 NOP 0000179A L2599: bt_tblade. 1207 xfm_PosterAboutY( &PosterXfm ); 0000179A D310 MOV.L L2598+36,R3; _xfm_PosterAboutY 0000179C 940C MOV.W L2598,R4 ; H'00A0 0000179E 430B JSR @R3 000017A0 34FC ADD R15,R4 bt_tblade. 1208 for( i = 0; i < 4; i++ ) { 000017A2 C710 MOVA L2598+44,R0 000017A4 D80E MOV.L L2598+40,R8; L1879 000017A6 FF08 FMOV.S @R0,FR15 000017A8 EB00 MOV #0,R11 000017AA L2496: bt_tblade. 1209 E bScale = ( i == (Gameloop_nFra +meCounter & 0x3) ) ? 1 : 0; 000017AA D20F MOV.L L2598+48, + R2; _Gameloop_nFrameCoun + ter 000017AC 6022 MOV.L @R2,R0 000017AE C903 AND #3,R0 000017B0 3B00 CMP/EQ R0,R11 000017B2 8B1B BF L2497 000017B4 A01B BRA L2498 000017B6 E301 MOV #1,R3 000017B8 L2598: 000017B8 00A0 .DATA.W H'00A0 000017BA 00000002 .RES.W 1 000017BC <00000000> .DATA.L _xmath_RandomFloat 000017C0 3F333333 .DATA.L H'3F333333 000017C4 3E999999 .DATA.L H'3E999999 000017C8 <00000000> .DATA.L L1823 000017CC <00000000> .DATA.L L1820 000017D0 <00000000> .DATA.L L1824 000017D4 <00000000> .DATA.L L1878 000017D8 <00000000> .DATA.L L1819 000017DC <00000000> .DATA.L _xfm_PosterAboutY 000017E0 <00000000> .DATA.L L1879 000017E4 3FA00000 .DATA.L H'3FA00000 000017E8 <00000000> .DATA.L _Gameloop_nFrameCounter 000017EC L2497: 000017EC E300 MOV #0,R3 000017EE L2498: bt_tblade. 1210 bt_tblade. 1211 /* draw the left side */ bt_tblade. 1212 xfm_Mult( &xfm, &_xfmEngFlame[ +i], &PosterXfm ); 000017EE E56C MOV #108,R5 000017F0 64F3 MOV R15,R4 000017F2 2B5F MULS R5,R11 000017F4 2F32 MOV.L R3,@R15 000017F6 9669 MOV.W L2600,R6 ; H'00A0 000017F8 051A STS MACL,R5 000017FA 36FC ADD R15,R6 000017FC 655F EXTS.W R5,R5 000017FE 358C ADD R8,R5 00001800 490B JSR @R9 00001802 7434 ADD #52,R4 bt_tblade. 1213 xfm_Push( &xfm ); 00001804 64F3 MOV R15,R4 00001806 4D0B JSR @R13 00001808 7434 ADD #52,R4 bt_tblade. 1214 if( bScale ) { 0000180A 63F2 MOV.L @R15,R3 0000180C 2338 TST R3,R3 0000180E 8907 BT L2499 bt_tblade. 1215 xfm_BuildScale1( &xfm, + 1.25f ); 00001810 D32F MOV.L L2600+4,R3 ; _xfm_BuildScale1 00001812 64F3 MOV R15,R4 00001814 F4FC FMOV.S FR15,FR4 00001816 430B JSR @R3 00001818 7434 ADD #52,R4 bt_tblade. 1216 xfm_Push( &xfm ); 0000181A 64F3 MOV R15,R4 0000181C 4D0B JSR @R13 0000181E 7434 ADD #52,R4 00001820 L2499: bt_tblade. 1217 } bt_tblade. 1218 ptblade->pEngFlame->pMtl->pTex +Def = _pEngFlameCell[ ptblade->nEngFlameFrameCount[i] +]; 00001820 61E3 MOV R14,R1 00001822 52EC MOV.L @(48,R14),R2 00001824 711C ADD #28,R1 00001826 D02B MOV.L L2600+8,R0 ; L1828 00001828 532D MOV.L @(52,R2),R3 0000182A 31BC ADD R11,R1 0000182C 6210 MOV.B @R1,R2 bt_tblade. 1219 E mesh3d_Draw( ptblade->pEngFlam +e, 0xf, 1 ); 0000182E E50F MOV #15,R5 00001830 E601 MOV #1,R6 00001832 622C EXTU.B R2,R2 00001834 4208 SHLL2 R2 00001836 012E MOV.L @(R0,R2),R1 00001838 1315 MOV.L R1,@(20,R3) 0000183A 4C0B JSR @R12 0000183C 54EC MOV.L @(48,R14),R4 bt_tblade. 1220 if( bScale ) { 0000183E 63F2 MOV.L @R15,R3 00001840 2338 TST R3,R3 00001842 8904 BT L2500 bt_tblade. 1221 xfm_PopN( 2 ); 00001844 D324 MOV.L L2600+12,R3; _xfm_PopN 00001846 430B JSR @R3 00001848 E402 MOV #2,R4 0000184A A002 BRA L2501 0000184C 0009 NOP 0000184E L2500: bt_tblade. 1222 } else { bt_tblade. 1223 xfm_Pop(); 0000184E 4A0B JSR @R10 00001850 0009 NOP 00001852 L2501: bt_tblade. 1224 } bt_tblade. 1225 /* draw the right side */ bt_tblade. 1226 nTemp = i + 4; 00001852 63B3 MOV R11,R3 bt_tblade. 1227 xfm_Mult( &xfm, &_xfmEngFlame[ +nTemp], &PosterXfm ); 00001854 E56C MOV #108,R5 00001856 7304 ADD #4,R3 00001858 64F3 MOV R15,R4 0000185A 235F MULS R5,R3 0000185C 1F31 MOV.L R3,@(4,R15) 0000185E 9635 MOV.W L2600,R6 ; H'00A0 00001860 051A STS MACL,R5 00001862 36FC ADD R15,R6 00001864 655F EXTS.W R5,R5 00001866 358C ADD R8,R5 00001868 490B JSR @R9 0000186A 7434 ADD #52,R4 bt_tblade. 1228 xfm_Push( &xfm ); 0000186C 64F3 MOV R15,R4 0000186E 4D0B JSR @R13 00001870 7434 ADD #52,R4 bt_tblade. 1229 if( bScale ) { 00001872 63F2 MOV.L @R15,R3 00001874 2338 TST R3,R3 00001876 8907 BT L2502 bt_tblade. 1230 xfm_BuildScale1( &xfm, + 1.25f ); 00001878 D315 MOV.L L2600+4,R3 ; _xfm_BuildScale1 0000187A 64F3 MOV R15,R4 0000187C F4FC FMOV.S FR15,FR4 0000187E 430B JSR @R3 00001880 7434 ADD #52,R4 bt_tblade. 1231 xfm_Push( &xfm ); 00001882 64F3 MOV R15,R4 00001884 4D0B JSR @R13 00001886 7434 ADD #52,R4 00001888 L2502: bt_tblade. 1232 } bt_tblade. 1233 ptblade->pEngFlame->pMtl->pTex +Def = _pEngFlameCell[ ptblade->nEngFlameFrameCount[nTe +mp] ]; 00001888 52EC MOV.L @(48,R14),R2 0000188A 61E3 MOV R14,R1 0000188C 711C ADD #28,R1 0000188E D011 MOV.L L2600+8,R0 ; L1828 00001890 532D MOV.L @(52,R2),R3 bt_tblade. 1234 E mesh3d_Draw( ptblade->pEngFlam +e, 0xf, 1 ); 00001892 E50F MOV #15,R5 00001894 52F1 MOV.L @(4,R15),R2 00001896 E601 MOV #1,R6 00001898 312C ADD R2,R1 0000189A 6110 MOV.B @R1,R1 0000189C 611C EXTU.B R1,R1 0000189E 4108 SHLL2 R1 000018A0 001E MOV.L @(R0,R1),R0 000018A2 1305 MOV.L R0,@(20,R3) 000018A4 4C0B JSR @R12 000018A6 54EC MOV.L @(48,R14),R4 bt_tblade. 1235 if( bScale ) { 000018A8 63F2 MOV.L @R15,R3 000018AA 2338 TST R3,R3 000018AC 8904 BT L2503 bt_tblade. 1236 xfm_PopN( 2 ); 000018AE D30A MOV.L L2600+12,R3; _xfm_PopN 000018B0 430B JSR @R3 000018B2 E402 MOV #2,R4 000018B4 A002 BRA L2504 000018B6 0009 NOP 000018B8 L2503: bt_tblade. 1237 } else { bt_tblade. 1238 xfm_Pop(); 000018B8 4A0B JSR @R10 000018BA 0009 NOP 000018BC L2504: 000018BC D207 MOV.L L2600+16, + R2; _Gameloop_nFrameCoun + ter 000018BE 7B01 ADD #1,R11 000018C0 6022 MOV.L @R2,R0 000018C2 C903 AND #3,R0 000018C4 3B00 CMP/EQ R0,R11 000018C6 8B0B BF L2505 000018C8 A00B BRA L2506 000018CA E301 MOV #1,R3 000018CC L2600: 000018CC 00A0 .DATA.W H'00A0 000018CE 00000002 .RES.W 1 000018D0 <00000000> .DATA.L _xfm_BuildScale1 000018D4 <00000000> .DATA.L L1828 000018D8 <00000000> .DATA.L _xfm_PopN 000018DC <00000000> .DATA.L _Gameloop_nFrameCounter 000018E0 L2505: 000018E0 E300 MOV #0,R3 000018E2 L2506: 000018E2 E56C MOV #108,R5 000018E4 64F3 MOV R15,R4 000018E6 2B5F MULS R5,R11 000018E8 2F32 MOV.L R3,@R15 000018EA 9669 MOV.W L2601,R6 ; H'00A0 000018EC 051A STS MACL,R5 000018EE 36FC ADD R15,R6 000018F0 655F EXTS.W R5,R5 000018F2 358C ADD R8,R5 000018F4 490B JSR @R9 000018F6 7434 ADD #52,R4 000018F8 64F3 MOV R15,R4 000018FA 4D0B JSR @R13 000018FC 7434 ADD #52,R4 000018FE 63F2 MOV.L @R15,R3 00001900 2338 TST R3,R3 00001902 8907 BT L2507 00001904 D32F MOV.L L2601+4,R3 ; _xfm_BuildScale1 00001906 64F3 MOV R15,R4 00001908 F4FC FMOV.S FR15,FR4 0000190A 430B JSR @R3 0000190C 7434 ADD #52,R4 0000190E 64F3 MOV R15,R4 00001910 4D0B JSR @R13 00001912 7434 ADD #52,R4 00001914 L2507: 00001914 61E3 MOV R14,R1 00001916 52EC MOV.L @(48,R14),R2 00001918 711C ADD #28,R1 0000191A D02B MOV.L L2601+8,R0 ; L1828 0000191C 532D MOV.L @(52,R2),R3 0000191E 31BC ADD R11,R1 00001920 6210 MOV.B @R1,R2 00001922 E50F MOV #15,R5 00001924 E601 MOV #1,R6 00001926 622C EXTU.B R2,R2 00001928 4208 SHLL2 R2 0000192A 012E MOV.L @(R0,R2),R1 0000192C 1315 MOV.L R1,@(20,R3) 0000192E 4C0B JSR @R12 00001930 54EC MOV.L @(48,R14),R4 00001932 63F2 MOV.L @R15,R3 00001934 2338 TST R3,R3 00001936 8904 BT L2508 00001938 D324 MOV.L L2601+12,R3; _xfm_PopN 0000193A 430B JSR @R3 0000193C E402 MOV #2,R4 0000193E A002 BRA L2509 00001940 0009 NOP 00001942 L2508: 00001942 4A0B JSR @R10 00001944 0009 NOP 00001946 L2509: 00001946 63B3 MOV R11,R3 00001948 E56C MOV #108,R5 0000194A 7304 ADD #4,R3 0000194C 64F3 MOV R15,R4 0000194E 235F MULS R5,R3 00001950 1F31 MOV.L R3,@(4,R15) 00001952 9635 MOV.W L2601,R6 ; H'00A0 00001954 051A STS MACL,R5 00001956 36FC ADD R15,R6 00001958 655F EXTS.W R5,R5 0000195A 358C ADD R8,R5 0000195C 490B JSR @R9 0000195E 7434 ADD #52,R4 00001960 64F3 MOV R15,R4 00001962 4D0B JSR @R13 00001964 7434 ADD #52,R4 00001966 63F2 MOV.L @R15,R3 00001968 2338 TST R3,R3 0000196A 8907 BT L2510 0000196C D315 MOV.L L2601+4,R3 ; _xfm_BuildScale1 0000196E 64F3 MOV R15,R4 00001970 F4FC FMOV.S FR15,FR4 00001972 430B JSR @R3 00001974 7434 ADD #52,R4 00001976 64F3 MOV R15,R4 00001978 4D0B JSR @R13 0000197A 7434 ADD #52,R4 0000197C L2510: 0000197C 52EC MOV.L @(48,R14),R2 0000197E 61E3 MOV R14,R1 00001980 711C ADD #28,R1 00001982 D011 MOV.L L2601+8,R0 ; L1828 00001984 532D MOV.L @(52,R2),R3 00001986 E50F MOV #15,R5 00001988 52F1 MOV.L @(4,R15),R2 0000198A E601 MOV #1,R6 0000198C 312C ADD R2,R1 0000198E 6110 MOV.B @R1,R1 00001990 611C EXTU.B R1,R1 00001992 4108 SHLL2 R1 00001994 001E MOV.L @(R0,R1),R0 00001996 1305 MOV.L R0,@(20,R3) 00001998 4C0B JSR @R12 0000199A 54EC MOV.L @(48,R14),R4 0000199C 63F2 MOV.L @R15,R3 0000199E 2338 TST R3,R3 000019A0 8904 BT L2511 000019A2 D30A MOV.L L2601+12,R3; _xfm_PopN 000019A4 430B JSR @R3 000019A6 E402 MOV #2,R4 000019A8 A002 BRA L2512 000019AA 0009 NOP 000019AC L2511: 000019AC 4A0B JSR @R10 000019AE 0009 NOP 000019B0 L2512: 000019B0 D207 MOV.L L2601+16, + R2; _Gameloop_nFrameCoun + ter 000019B2 7B01 ADD #1,R11 000019B4 6022 MOV.L @R2,R0 000019B6 C903 AND #3,R0 000019B8 3B00 CMP/EQ R0,R11 000019BA 8B0B BF L2513 000019BC A00B BRA L2514 000019BE E301 MOV #1,R3 000019C0 L2601: 000019C0 00A0 .DATA.W H'00A0 000019C2 00000002 .RES.W 1 000019C4 <00000000> .DATA.L _xfm_BuildScale1 000019C8 <00000000> .DATA.L L1828 000019CC <00000000> .DATA.L _xfm_PopN 000019D0 <00000000> .DATA.L _Gameloop_nFrameCounter 000019D4 L2513: 000019D4 E300 MOV #0,R3 000019D6 L2514: 000019D6 E56C MOV #108,R5 000019D8 64F3 MOV R15,R4 000019DA 2B5F MULS R5,R11 000019DC 2F32 MOV.L R3,@R15 000019DE 9669 MOV.W L2602,R6 ; H'00A0 000019E0 051A STS MACL,R5 000019E2 36FC ADD R15,R6 000019E4 655F EXTS.W R5,R5 000019E6 358C ADD R8,R5 000019E8 490B JSR @R9 000019EA 7434 ADD #52,R4 000019EC 64F3 MOV R15,R4 000019EE 4D0B JSR @R13 000019F0 7434 ADD #52,R4 000019F2 63F2 MOV.L @R15,R3 000019F4 2338 TST R3,R3 000019F6 8907 BT L2515 000019F8 D32F MOV.L L2602+4,R3 ; _xfm_BuildScale1 000019FA 64F3 MOV R15,R4 000019FC F4FC FMOV.S FR15,FR4 000019FE 430B JSR @R3 00001A00 7434 ADD #52,R4 00001A02 64F3 MOV R15,R4 00001A04 4D0B JSR @R13 00001A06 7434 ADD #52,R4 00001A08 L2515: 00001A08 61E3 MOV R14,R1 00001A0A 52EC MOV.L @(48,R14),R2 00001A0C 711C ADD #28,R1 00001A0E D02B MOV.L L2602+8,R0 ; L1828 00001A10 532D MOV.L @(52,R2),R3 00001A12 31BC ADD R11,R1 00001A14 6210 MOV.B @R1,R2 00001A16 E50F MOV #15,R5 00001A18 E601 MOV #1,R6 00001A1A 622C EXTU.B R2,R2 00001A1C 4208 SHLL2 R2 00001A1E 012E MOV.L @(R0,R2),R1 00001A20 1315 MOV.L R1,@(20,R3) 00001A22 4C0B JSR @R12 00001A24 54EC MOV.L @(48,R14),R4 00001A26 63F2 MOV.L @R15,R3 00001A28 2338 TST R3,R3 00001A2A 8904 BT L2516 00001A2C D324 MOV.L L2602+12,R3; _xfm_PopN 00001A2E 430B JSR @R3 00001A30 E402 MOV #2,R4 00001A32 A002 BRA L2517 00001A34 0009 NOP 00001A36 L2516: 00001A36 4A0B JSR @R10 00001A38 0009 NOP 00001A3A L2517: 00001A3A 63B3 MOV R11,R3 00001A3C E56C MOV #108,R5 00001A3E 7304 ADD #4,R3 00001A40 64F3 MOV R15,R4 00001A42 235F MULS R5,R3 00001A44 1F31 MOV.L R3,@(4,R15) 00001A46 9635 MOV.W L2602,R6 ; H'00A0 00001A48 051A STS MACL,R5 00001A4A 36FC ADD R15,R6 00001A4C 655F EXTS.W R5,R5 00001A4E 358C ADD R8,R5 00001A50 490B JSR @R9 00001A52 7434 ADD #52,R4 00001A54 64F3 MOV R15,R4 00001A56 4D0B JSR @R13 00001A58 7434 ADD #52,R4 00001A5A 63F2 MOV.L @R15,R3 00001A5C 2338 TST R3,R3 00001A5E 8907 BT L2518 00001A60 D315 MOV.L L2602+4,R3 ; _xfm_BuildScale1 00001A62 64F3 MOV R15,R4 00001A64 F4FC FMOV.S FR15,FR4 00001A66 430B JSR @R3 00001A68 7434 ADD #52,R4 00001A6A 64F3 MOV R15,R4 00001A6C 4D0B JSR @R13 00001A6E 7434 ADD #52,R4 00001A70 L2518: 00001A70 52EC MOV.L @(48,R14),R2 00001A72 61E3 MOV R14,R1 00001A74 711C ADD #28,R1 00001A76 D011 MOV.L L2602+8,R0 ; L1828 00001A78 532D MOV.L @(52,R2),R3 00001A7A E50F MOV #15,R5 00001A7C 52F1 MOV.L @(4,R15),R2 00001A7E E601 MOV #1,R6 00001A80 312C ADD R2,R1 00001A82 6110 MOV.B @R1,R1 00001A84 611C EXTU.B R1,R1 00001A86 4108 SHLL2 R1 00001A88 001E MOV.L @(R0,R1),R0 00001A8A 1305 MOV.L R0,@(20,R3) 00001A8C 4C0B JSR @R12 00001A8E 54EC MOV.L @(48,R14),R4 00001A90 63F2 MOV.L @R15,R3 00001A92 2338 TST R3,R3 00001A94 8904 BT L2519 00001A96 D30A MOV.L L2602+12,R3; _xfm_PopN 00001A98 430B JSR @R3 00001A9A E402 MOV #2,R4 00001A9C A002 BRA L2520 00001A9E 0009 NOP 00001AA0 L2519: 00001AA0 4A0B JSR @R10 00001AA2 0009 NOP 00001AA4 L2520: 00001AA4 D207 MOV.L L2602+16, + R2; _Gameloop_nFrameCoun + ter 00001AA6 7B01 ADD #1,R11 00001AA8 6022 MOV.L @R2,R0 00001AAA C903 AND #3,R0 00001AAC 3B00 CMP/EQ R0,R11 00001AAE 8B0B BF L2521 00001AB0 A00B BRA L2522 00001AB2 E301 MOV #1,R3 00001AB4 L2602: 00001AB4 00A0 .DATA.W H'00A0 00001AB6 00000002 .RES.W 1 00001AB8 <00000000> .DATA.L _xfm_BuildScale1 00001ABC <00000000> .DATA.L L1828 00001AC0 <00000000> .DATA.L _xfm_PopN 00001AC4 <00000000> .DATA.L _Gameloop_nFrameCounter 00001AC8 L2521: 00001AC8 E300 MOV #0,R3 00001ACA L2522: 00001ACA E56C MOV #108,R5 00001ACC 64F3 MOV R15,R4 00001ACE 2B5F MULS R5,R11 00001AD0 2F32 MOV.L R3,@R15 00001AD2 969D MOV.W L2603,R6 ; H'00A0 00001AD4 051A STS MACL,R5 00001AD6 36FC ADD R15,R6 00001AD8 655F EXTS.W R5,R5 00001ADA 358C ADD R8,R5 00001ADC 490B JSR @R9 00001ADE 7434 ADD #52,R4 00001AE0 64F3 MOV R15,R4 00001AE2 4D0B JSR @R13 00001AE4 7434 ADD #52,R4 00001AE6 63F2 MOV.L @R15,R3 00001AE8 2338 TST R3,R3 00001AEA 8907 BT L2523 00001AEC D34A MOV.L L2603+8,R3 ; _xfm_BuildScale1 00001AEE 64F3 MOV R15,R4 00001AF0 F4FC FMOV.S FR15,FR4 00001AF2 430B JSR @R3 00001AF4 7434 ADD #52,R4 00001AF6 64F3 MOV R15,R4 00001AF8 4D0B JSR @R13 00001AFA 7434 ADD #52,R4 00001AFC L2523: 00001AFC 61E3 MOV R14,R1 00001AFE 52EC MOV.L @(48,R14),R2 00001B00 711C ADD #28,R1 00001B02 D046 MOV.L L2603+12,R0; L1828 00001B04 532D MOV.L @(52,R2),R3 00001B06 31BC ADD R11,R1 00001B08 6210 MOV.B @R1,R2 00001B0A E50F MOV #15,R5 00001B0C E601 MOV #1,R6 00001B0E 622C EXTU.B R2,R2 00001B10 4208 SHLL2 R2 00001B12 012E MOV.L @(R0,R2),R1 00001B14 1315 MOV.L R1,@(20,R3) 00001B16 4C0B JSR @R12 00001B18 54EC MOV.L @(48,R14),R4 00001B1A 63F2 MOV.L @R15,R3 00001B1C 2338 TST R3,R3 00001B1E 8904 BT L2524 00001B20 D33F MOV.L L2603+16,R3; _xfm_PopN 00001B22 430B JSR @R3 00001B24 E402 MOV #2,R4 00001B26 A002 BRA L2525 00001B28 0009 NOP 00001B2A L2524: 00001B2A 4A0B JSR @R10 00001B2C 0009 NOP 00001B2E L2525: 00001B2E 63B3 MOV R11,R3 00001B30 E56C MOV #108,R5 00001B32 7304 ADD #4,R3 00001B34 64F3 MOV R15,R4 00001B36 235F MULS R5,R3 00001B38 1F31 MOV.L R3,@(4,R15) 00001B3A 9669 MOV.W L2603,R6 ; H'00A0 00001B3C 051A STS MACL,R5 00001B3E 36FC ADD R15,R6 00001B40 655F EXTS.W R5,R5 00001B42 358C ADD R8,R5 00001B44 490B JSR @R9 00001B46 7434 ADD #52,R4 00001B48 64F3 MOV R15,R4 00001B4A 4D0B JSR @R13 00001B4C 7434 ADD #52,R4 00001B4E 63F2 MOV.L @R15,R3 00001B50 2338 TST R3,R3 00001B52 8907 BT L2526 00001B54 D330 MOV.L L2603+8,R3 ; _xfm_BuildScale1 00001B56 64F3 MOV R15,R4 00001B58 F4FC FMOV.S FR15,FR4 00001B5A 430B JSR @R3 00001B5C 7434 ADD #52,R4 00001B5E 64F3 MOV R15,R4 00001B60 4D0B JSR @R13 00001B62 7434 ADD #52,R4 00001B64 L2526: 00001B64 52EC MOV.L @(48,R14),R2 00001B66 61E3 MOV R14,R1 00001B68 711C ADD #28,R1 00001B6A D02C MOV.L L2603+12,R0; L1828 00001B6C 532D MOV.L @(52,R2),R3 00001B6E E50F MOV #15,R5 00001B70 52F1 MOV.L @(4,R15),R2 00001B72 E601 MOV #1,R6 00001B74 312C ADD R2,R1 00001B76 6110 MOV.B @R1,R1 00001B78 611C EXTU.B R1,R1 00001B7A 4108 SHLL2 R1 00001B7C 001E MOV.L @(R0,R1),R0 00001B7E 1305 MOV.L R0,@(20,R3) 00001B80 4C0B JSR @R12 00001B82 54EC MOV.L @(48,R14),R4 00001B84 63F2 MOV.L @R15,R3 00001B86 2338 TST R3,R3 00001B88 8904 BT L2527 00001B8A D325 MOV.L L2603+16,R3; _xfm_PopN 00001B8C 430B JSR @R3 00001B8E E402 MOV #2,R4 00001B90 A002 BRA L2528 00001B92 0009 NOP 00001B94 L2527: 00001B94 4A0B JSR @R10 00001B96 0009 NOP 00001B98 L2528: 00001B98 E304 MOV #4,R3 00001B9A 7B01 ADD #1,R11 00001B9C 3B32 CMP/HS R3,R11 00001B9E 8901 BT L2604 00001BA0 AE03 BRA L2496 00001BA2 0009 NOP 00001BA4 L2604: 00001BA4 L2494: bt_tblade. 1239 } bt_tblade. 1240 } bt_tblade. 1241 } bt_tblade. 1242 xfm_Pop(); 00001BA4 4A0B JSR @R10 00001BA6 0009 NOP bt_tblade. 1243 mesh3d_ReleaseLightFrame( nLightFrame ); 00001BA8 D31E MOV.L L2603+20, + R3; _mesh3d_ReleaseLight + Frame 00001BAA 430B JSR @R3 00001BAC 54F3 MOV.L @(12,R15),R4 bt_tblade. 1244 mesh3d_SetAmbientLightState( &Ambient ); 00001BAE D21E MOV.L L2603+24, + R2; _mesh3d_SetAmbientLi + ghtState 00001BB0 64F3 MOV R15,R4 00001BB2 420B JSR @R2 00001BB4 7410 ADD #16,R4 bt_tblade. 1245 } 00001BB6 912C MOV.W L2603+2,R1 ; H'010C 00001BB8 3F1C ADD R1,R15 00001BBA 4F26 LDS.L @R15+,PR 00001BBC FDF9 FMOV.S @R15+,FR13 00001BBE FEF9 FMOV.S @R15+,FR14 00001BC0 FFF9 FMOV.S @R15+,FR15 00001BC2 68F6 MOV.L @R15+,R8 00001BC4 69F6 MOV.L @R15+,R9 00001BC6 6AF6 MOV.L @R15+,R10 00001BC8 6BF6 MOV.L @R15+,R11 00001BCA 6CF6 MOV.L @R15+,R12 00001BCC 6DF6 MOV.L @R15+,R13 00001BCE 000B RTS 00001BD0 6EF6 MOV.L @R15+,R14 bt_tblade. 1246 bt_tblade. 1247 static void _ChangeStaticLightingMotifs( TBlade_t *ptb +lade ) { 00001BD2 L1895: ; function: _ChangeSt + aticLightingMotifs ; frame size=0 00001BD2 E035 MOV #53,R0 00001BD4 D715 MOV.L L2603+28, + R7; _Light_aLightMotifTa + ble 00001BD6 034C MOV.B @(R0,R4),R3 00001BD8 2338 TST R3,R3 00001BDA 8D2B BT/S L2529 00001BDC 6573 MOV R7,R5 bt_tblade. 1248 f32 fTemp; bt_tblade. 1249 bt_tblade. 1250 /* always set the booster flame static lightin +g( only the hup1 version has it but thats ok ) */ bt_tblade. 1251 if( ptblade->bFDrawOrange ) { bt_tblade. 1252 Light_aLightMotifTable[SLMOTIF_PROGR1] + = Light_aLightMotifTable[SLMOTIF_FLAME1]; bt_tblade. 1253 E fTemp = ( 1.0f - 0.75f ) + ptblade->fF +Intensity; 00001BDE C714 MOVA L2603+32,R0 00001BE0 9618 MOV.W L2603+4,R6 ; H'00CC 00001BE2 5356 MOV.L @(24,R5),R3 00001BE4 365C ADD R5,R6 00001BE6 2632 MOV.L R3,@R6 00001BE8 5357 MOV.L @(28,R5),R3 00001BEA 1631 MOV.L R3,@(4,R6) 00001BEC 5358 MOV.L @(32,R5),R3 00001BEE 1632 MOV.L R3,@(8,R6) 00001BF0 F308 FMOV.S @R0,FR3 00001BF2 E040 MOV #64,R0 00001BF4 F446 FMOV.S @(R0,R4),FR4 bt_tblade. 1254 Light_aLightMotifTable[SLMOTIF_PROGR1] +.Color.rgb[0] *= fTemp; bt_tblade. 1255 Light_aLightMotifTable[SLMOTIF_PROGR1] +.Color.rgb[1] *= fTemp; 00001BF6 E004 MOV #4,R0 00001BF8 F268 FMOV.S @R6,FR2 00001BFA F430 FADD FR3,FR4 00001BFC F242 FMUL FR4,FR2 00001BFE F62A FMOV.S FR2,@R6 00001C00 F166 FMOV.S @(R0,R6),FR1 00001C02 F142 FMUL FR4,FR1 00001C04 F617 FMOV.S FR1,@(R0,R6) bt_tblade. 1256 Light_aLightMotifTable[SLMOTIF_PROGR1] +.Color.rgb[2] *= fTemp; 00001C06 E008 MOV #8,R0 00001C08 F266 FMOV.S @(R0,R6),FR2 00001C0A F242 FMUL FR4,FR2 00001C0C A030 BRA L2530 00001C0E F627 FMOV.S FR2,@(R0,R6) 00001C10 L2603: 00001C10 00A0 .DATA.W H'00A0 00001C12 010C .DATA.W H'010C 00001C14 00CC .DATA.W H'00CC 00001C16 00000002 .RES.W 1 00001C18 <00000000> .DATA.L _xfm_BuildScale1 00001C1C <00000000> .DATA.L L1828 00001C20 <00000000> .DATA.L _xfm_PopN 00001C24 <00000000> .DATA.L _mesh3d_ReleaseLightFrame 00001C28 <00000000> .DATA.L _mesh3d_SetAmbientLightState 00001C2C <00000000> .DATA.L _Light_aLightMotifTable 00001C30 3E800000 .DATA.L H'3E800000 00001C34 L2529: bt_tblade. 1257 } else if( ptblade->bFDrawBlue ) { 00001C34 E036 MOV #54,R0 00001C36 024C MOV.B @(R0,R4),R2 00001C38 2228 TST R2,R2 00001C3A 8919 BT L2530 bt_tblade. 1258 E fTemp = ( 1.0f - 0.35f ) + ptblade->fF +Intensity; 00001C3C C71B MOVA L2605+6,R0 bt_tblade. 1259 Light_aLightMotifTable[SLMOTIF_PROGR1] + = Light_aLightMotifTable[SLMOTIF_BLUEFLAME1]; 00001C3E 9632 MOV.W L2605,R6 ; H'00CC 00001C40 F308 FMOV.S @R0,FR3 00001C42 E040 MOV #64,R0 00001C44 F446 FMOV.S @(R0,R4),FR4 bt_tblade. 1260 Light_aLightMotifTable[SLMOTIF_PROGR1] +.Color.rgb[0] *= fTemp; bt_tblade. 1261 Light_aLightMotifTable[SLMOTIF_PROGR1] +.Color.rgb[1] *= fTemp; 00001C46 E004 MOV #4,R0 00001C48 365C ADD R5,R6 00001C4A 932D MOV.W L2605+2,R3 ; H'00B4 00001C4C F430 FADD FR3,FR4 00001C4E 335C ADD R5,R3 00001C50 6232 MOV.L @R3,R2 00001C52 2622 MOV.L R2,@R6 00001C54 5231 MOV.L @(4,R3),R2 00001C56 1621 MOV.L R2,@(4,R6) 00001C58 5232 MOV.L @(8,R3),R2 00001C5A 1622 MOV.L R2,@(8,R6) 00001C5C F268 FMOV.S @R6,FR2 00001C5E F242 FMUL FR4,FR2 00001C60 F62A FMOV.S FR2,@R6 00001C62 F166 FMOV.S @(R0,R6),FR1 00001C64 F142 FMUL FR4,FR1 00001C66 F617 FMOV.S FR1,@(R0,R6) bt_tblade. 1262 Light_aLightMotifTable[SLMOTIF_PROGR1] +.Color.rgb[2] *= fTemp; 00001C68 E008 MOV #8,R0 00001C6A F266 FMOV.S @(R0,R6),FR2 00001C6C F242 FMUL FR4,FR2 00001C6E F627 FMOV.S FR2,@(R0,R6) 00001C70 L2530: bt_tblade. 1263 } bt_tblade. 1264 /* always set the engine flame static lighting + */ bt_tblade. 1265 Light_aLightMotifTable[SLMOTIF_PROGR2] = Light +_aLightMotifTable[SLMOTIF_FLAME4]; 00001C70 951B MOV.W L2605+4,R5 ; H'00D8 bt_tblade. 1266 Light_aLightMotifTable[SLMOTIF_PROGR2].Color.r +gb[0] *= ptblade->fEngStaticLightIntensity; 00001C72 E02C MOV #44,R0 00001C74 6373 MOV R7,R3 00001C76 733C ADD #60,R3 00001C78 357C ADD R7,R5 00001C7A 6232 MOV.L @R3,R2 00001C7C 2522 MOV.L R2,@R5 00001C7E 5231 MOV.L @(4,R3),R2 00001C80 1521 MOV.L R2,@(4,R5) 00001C82 5232 MOV.L @(8,R3),R2 00001C84 1522 MOV.L R2,@(8,R5) 00001C86 F346 FMOV.S @(R0,R4),FR3 00001C88 F258 FMOV.S @R5,FR2 00001C8A F232 FMUL FR3,FR2 00001C8C F52A FMOV.S FR2,@R5 bt_tblade. 1267 Light_aLightMotifTable[SLMOTIF_PROGR2].Color.r +gb[1] *= ptblade->fEngStaticLightIntensity; 00001C8E F346 FMOV.S @(R0,R4),FR3 00001C90 E004 MOV #4,R0 00001C92 F256 FMOV.S @(R0,R5),FR2 00001C94 F232 FMUL FR3,FR2 00001C96 F527 FMOV.S FR2,@(R0,R5) bt_tblade. 1268 Light_aLightMotifTable[SLMOTIF_PROGR2].Color.r +gb[2] *= ptblade->fEngStaticLightIntensity; 00001C98 E02C MOV #44,R0 00001C9A F346 FMOV.S @(R0,R4),FR3 00001C9C E008 MOV #8,R0 00001C9E F256 FMOV.S @(R0,R5),FR2 00001CA0 F232 FMUL FR3,FR2 bt_tblade. 1269 } 00001CA2 000B RTS 00001CA4 F527 FMOV.S FR2,@(R0,R5) 00001CA6 L2605: 00001CA6 00CC .DATA.W H'00CC 00001CA8 00B4 .DATA.W H'00B4 00001CAA 00D8 .DATA.W H'00D8 00001CAC 3F266666 .DATA.L H'3F266666 D 00000000 L1809: ; static: aPlayerLoad + Table 00000000 <00000000> .DATA.L L1804,L1810,L1805,L1811,L1806, <00000000> + L1812,L1807,L1813,L1808,L1814 <00000000> <00000000> <00000000> <00000000> <00000000> <00000000> <00000000> <00000000> 00000028 0000000000 .DATA.L H'00000000,H'00000000 000000 00000030 L1829: ; static: aCommonLoad + Table 00000030 <00000000> .DATA.L L1815,L1830,L1816,L1831,L1817, <00000000> + L1832,H'00000004+L1817,L1833, <00000000> + H'00000008+L1817,L1834, <00000000> + H'0000000C+L1817,L1835,L1818, <00000000> + L1836,H'00000004+L1818,L1837, <00000000> + H'00000008+L1818,L1838, <00000004> + H'0000000C+L1818,L1839,L1819, <00000000> + L1840,L1820,L1841,L1821,L1842, <00000008> + L1822,L1843,L1823,L1844,L1824, <00000000> + L1845,L1825,L1846, <0000000C> + H'00000004+L1825,L1847,L1826, <00000000> + L1848,H'00000004+L1826,L1849, <00000000> + H'00000008+L1826,L1850, <00000000> + H'0000000C+L1826,L1851, <00000004> + H'00000010+L1826,L1852, <00000000> + H'00000014+L1826,L1853, <00000008> + H'00000018+L1826,L1854, <00000000> + H'0000001C+L1826,L1855, <0000000C> + H'00000020+L1826,L1856, <00000000> + H'00000024+L1826,L1857, <00000000> + H'00000028+L1826,L1858, <00000000> + H'0000002C+L1826,L1859, <00000000> + H'00000030+L1826,L1860, <00000000> + H'00000034+L1826,L1861, <00000000> + H'00000038+L1826,L1862, <00000000> + H'0000003C+L1826,L1863, <00000000> + H'00000040+L1826,L1864,L1827, <00000000> + L1865,H'00000004+L1827,L1866, <00000000> + H'00000008+L1827,L1867, <00000000> + H'0000000C+L1827,L1868, <00000000> + H'00000010+L1827,L1869,L1828, <00000000> + L1870,H'00000004+L1828,L1871, <00000000> + H'00000008+L1828,L1872, <00000000> + H'0000000C+L1828,L1873, <00000004> + H'00000010+L1828,L1874, <00000000> + H'00000014+L1828,L1875, <00000000> + H'00000018+L1828,L1876 <00000000> <00000004> <00000000> <00000008> <00000000> <0000000C> <00000000> <00000010> <00000000> <00000014> <00000000> <00000018> <00000000> <0000001C> <00000000> <00000020> <00000000> <00000024> <00000000> <00000028> <00000000> <0000002C> <00000000> <00000030> <00000000> <00000034> <00000000> <00000038> <00000000> <0000003C> <00000000> <00000040> <00000000> <00000000> <00000000> <00000004> <00000000> <00000008> <00000000> <0000000C> <00000000> <00000010> <00000000> <00000000> <00000000> <00000004> <00000000> <00000008> <00000000> <0000000C> <00000000> <00000010> <00000000> <00000014> <00000000> <00000018> <00000000> 000001A8 0000000000 .DATA.L H'00000000,H'00000000 000000 C 00000000 L1911: 00000000 62745F7462 .SDATA "bt_tblade.c" 6C6164652E 63 0000000B 00 .DATA.B H'00 0000000C L1913: 0000000C 4742425449 .SDATA "GBBTIDAHUP0" 4441485550 30 00000017 00 .DATA.B H'00 00000018 L1917: 00000018 4742425449 .SDATA "GBBTIDAHUP1" 4441485550 31 00000023 00 .DATA.B H'00 00000024 L1918: 00000024 4742425449 .SDATA "GBBTIDAHUP2" 4441485550 32 0000002F 00 .DATA.B H'00 00000030 L1921: 00000030 4E4F542045 .SDATA "NOT ENOUGH MEMORY FOR ALL OF T" 4E4F554748 204D454D4F 525920464F 5220414C4C 204F462054 0000004E 4944414C20 .SDATA "IDAL BLADE!" 424C414445 21 00000059 0A00 .DATA.B H'0A,H'00 0000005B 00000001 .RES.B 1 0000005C L1923: 0000005C 4742425449 .SDATA "GBBTIDAHUH0" 4441485548 30 00000067 00 .DATA.B H'00 00000068 L1924: 00000068 4742425449 .SDATA "GBBTIDAHUH1" 4441485548 31 00000073 00 .DATA.B H'00 00000074 L1927: 00000074 4742424454 .SDATA "GBBDTIDHUH0" 4944485548 30 0000007F 00 .DATA.B H'00 00000080 L1930: 00000080 4E4F542045 .SDATA "NOT ENOUGH MEMORY FOR ALL OF C" 4E4F554748 204D454D4F 525920464F 5220414C4C 204F462043 0000009E 5554205448 .SDATA "UT THROAT!" 524F415421 000000A8 0A00 .DATA.B H'0A,H'00 000000AA 00000002 .RES.W 1 000000AC L1932: 000000AC 4742425449 .SDATA "GBBTIDAFLP0" 4441464C50 30 000000B7 00 .DATA.B H'00 000000B8 L1935: 000000B8 4742425449 .SDATA "GBBTIDASRP1" 4441535250 31 000000C3 00 .DATA.B H'00 000000C4 L1937: 000000C4 4742425449 .SDATA "GBBTIDASRP2" 4441535250 32 000000CF 00 .DATA.B H'00 000000D0 L1941: 000000D0 546964616C .SDATA "Tidal Blade used %d bytes of t" 20426C6164 6520757365 6420256420 6279746573 206F662074 000000EE 6578747572 .SDATA "exture space" 6520737061 6365 000000FA 0A00 .DATA.B H'0A,H'00 000000FC L1983: ; static: _aVerts2Mor + ph 000000FC 0103040709 .DATA.B H'01,H'03,H'04,H'07,H'09,H'0A, 0A0D0F10 + H'0D,H'0F,H'10 00000105 00000001 .RES.B 1 00000106 00000002 .RES.W 1 00000108 L1810: 00000108 4742425449 .SDATA "GBBTIDACWP1" 4441435750 31 00000113 00 .DATA.B H'00 00000114 L1811: 00000114 4742425449 .SDATA "GBBTIDACWP2" 4441435750 32 0000011F 00 .DATA.B H'00 00000120 L1812: 00000120 4742425449 .SDATA "GBBTIDAENP0" 4441454E50 30 0000012B 00 .DATA.B H'00 0000012C L1813: 0000012C 4742425449 .SDATA "GBBTIDABOP1" 4441424F50 31 00000137 00 .DATA.B H'00 00000138 L1814: 00000138 4742425449 .SDATA "GBBTIDABOP2" 4441424F50 32 00000143 00 .DATA.B H'00 00000144 L1830: 00000144 474242424F .SDATA "GBBBOATPRP0" 4154505250 30 0000014F 00 .DATA.B H'00 00000150 L1831: 00000150 4742425449 .SDATA "GBBTIDABUP1" 4441425550 31 0000015B 00 .DATA.B H'00 0000015C L1832: 0000015C 4742465449 .SDATA "GBFTIDA_AH1" 44415F4148 31 00000167 00 .DATA.B H'00 00000168 L1833: 00000168 4742465449 .SDATA "GBFTIDA_AH2" 44415F4148 32 00000173 00 .DATA.B H'00 00000174 L1834: 00000174 4742465449 .SDATA "GBFTIDA_AH3" 44415F4148 33 0000017F 00 .DATA.B H'00 00000180 L1835: 00000180 4742465449 .SDATA "GBFTIDA_AH4" 44415F4148 34 0000018B 00 .DATA.B H'00 0000018C L1836: 0000018C 4742465449 .SDATA "GBFTIDA_BH1" 44415F4248 31 00000197 00 .DATA.B H'00 00000198 L1837: 00000198 4742465449 .SDATA "GBFTIDA_BH2" 44415F4248 32 000001A3 00 .DATA.B H'00 000001A4 L1838: 000001A4 4742465449 .SDATA "GBFTIDA_BH3" 44415F4248 33 000001AF 00 .DATA.B H'00 000001B0 L1839: 000001B0 4742465449 .SDATA "GBFTIDA_BH4" 44415F4248 34 000001BB 00 .DATA.B H'00 000001BC L1840: 000001BC 4742425449 .SDATA "GBBTIDAFLP5" 4441464C50 35 000001C7 00 .DATA.B H'00 000001C8 L1841: 000001C8 4742465449 .SDATA "GBFTIDA_AH0" 44415F4148 30 000001D3 00 .DATA.B H'00 000001D4 L1842: 000001D4 4742425449 .SDATA "GBBTIDAFLP3" 4441464C50 33 000001DF 00 .DATA.B H'00 000001E0 L1843: 000001E0 4742425449 .SDATA "GBBTIDAFLP4" 4441464C50 34 000001EB 00 .DATA.B H'00 000001EC L1844: 000001EC 4742425449 .SDATA "GBBTIDAFLPA" 4441464C50 41 000001F7 00 .DATA.B H'00 000001F8 L1845: 000001F8 4742465449 .SDATA "GBFTIDA_CH1" 44415F4348 31 00000203 00 .DATA.B H'00 00000204 L1846: 00000204 544242424F .SDATA "TBBBOATPR10" 4154505231 30 0000020F 00 .DATA.B H'00 00000210 L1847: 00000210 544242424F .SDATA "TBBBOATPR11" 4154505231 31 0000021B 00 .DATA.B H'00 0000021C L1848: 0000021C 5442464558 .SDATA "TBFEXHABO20" 4841424F32 30 00000227 00 .DATA.B H'00 00000228 L1849: 00000228 5442464558 .SDATA "TBFEXHABO21" 4841424F32 31 00000233 00 .DATA.B H'00 00000234 L1850: 00000234 5442464558 .SDATA "TBFEXHABO22" 4841424F32 32 0000023F 00 .DATA.B H'00 00000240 L1851: 00000240 5442464558 .SDATA "TBFEXHABO23" 4841424F32 33 0000024B 00 .DATA.B H'00 0000024C L1852: 0000024C 5442464558 .SDATA "TBFEXHABO24" 4841424F32 34 00000257 00 .DATA.B H'00 00000258 L1853: 00000258 5442464558 .SDATA "TBFEXHABO25" 4841424F32 35 00000263 00 .DATA.B H'00 00000264 L1854: 00000264 5442464558 .SDATA "TBFEXHABO26" 4841424F32 36 0000026F 00 .DATA.B H'00 00000270 L1855: 00000270 5442464649 .SDATA "TBFFIREBO2A" 5245424F32 41 0000027B 00 .DATA.B H'00 0000027C L1856: 0000027C 5442464649 .SDATA "TBFFIREBO2B" 5245424F32 42 00000287 00 .DATA.B H'00 00000288 L1857: 00000288 5442464649 .SDATA "TBFFIREBO2C" 5245424F32 43 00000293 00 .DATA.B H'00 00000294 L1858: 00000294 5442464649 .SDATA "TBFFIREBO2D" 5245424F32 44 0000029F 00 .DATA.B H'00 000002A0 L1859: 000002A0 5442464649 .SDATA "TBFFIREBO2E" 5245424F32 45 000002AB 00 .DATA.B H'00 000002AC L1860: 000002AC 5442464649 .SDATA "TBFFIREBO2F" 5245424F32 46 000002B7 00 .DATA.B H'00 000002B8 L1861: 000002B8 5442464649 .SDATA "TBFFIREBO2G" 5245424F32 47 000002C3 00 .DATA.B H'00 000002C4 L1862: 000002C4 5442464649 .SDATA "TBFFIREBO2H" 5245424F32 48 000002CF 00 .DATA.B H'00 000002D0 L1863: 000002D0 5442464649 .SDATA "TBFFIREBO2I" 5245424F32 49 000002DB 00 .DATA.B H'00 000002DC L1864: 000002DC 5442464649 .SDATA "TBFFIREBO2J" 5245424F32 4A 000002E7 00 .DATA.B H'00 000002E8 L1865: 000002E8 5442424558 .SDATA "TBBEXHABU50" 4841425535 30 000002F3 00 .DATA.B H'00 000002F4 L1866: 000002F4 5442424558 .SDATA "TBBEXHABU51" 4841425535 31 000002FF 00 .DATA.B H'00 00000300 L1867: 00000300 5442424558 .SDATA "TBBEXHABU52" 4841425535 32 0000030B 00 .DATA.B H'00 0000030C L1868: 0000030C 5442424558 .SDATA "TBBEXHABU53" 4841425535 33 00000317 00 .DATA.B H'00 00000318 L1869: 00000318 5442424558 .SDATA "TBBEXHABU54" 4841425535 34 00000323 00 .DATA.B H'00 00000324 L1870: 00000324 5442465449 .SDATA "TBFTIDAFL20" 4441464C32 30 0000032F 00 .DATA.B H'00 00000330 L1871: 00000330 5442465449 .SDATA "TBFTIDAFL21" 4441464C32 31 0000033B 00 .DATA.B H'00 0000033C L1872: 0000033C 5442465449 .SDATA "TBFTIDAFL22" 4441464C32 32 00000347 00 .DATA.B H'00 00000348 L1873: 00000348 5442465449 .SDATA "TBFTIDAFL23" 4441464C32 33 00000353 00 .DATA.B H'00 00000354 L1874: 00000354 5442465449 .SDATA "TBFTIDAFL24" 4441464C32 34 0000035F 00 .DATA.B H'00 00000360 L1875: 00000360 5442465449 .SDATA "TBFTIDAFL25" 4441464C32 35 0000036B 00 .DATA.B H'00 0000036C L1876: 0000036C 5442465449 .SDATA "TBFTIDAFL26" 4441464C32 36 00000377 00 .DATA.B H'00 B 00000000 L1804: ; static: _pPLCowling 00000000 00000004 .RES.L 1 00000004 L1805: ; static: _pPRCowling 00000004 00000004 .RES.L 1 00000008 L1806: ; static: _pPEngine 00000008 00000004 .RES.L 1 0000000C L1807: ; static: _pPLBooster 0000000C 00000004 .RES.L 1 00000010 L1808: ; static: _pPRBooster 00000010 00000004 .RES.L 1 00000014 L1815: ; static: _pProp 00000014 00000004 .RES.L 1 00000018 L1816: ; static: _pBFlame 00000018 00000004 .RES.L 1 0000001C L1817: ; static: _paOFlameTo + p 0000001C 00000010 .RES.L 4 0000002C L1818: ; static: _paOFlameBo + ttom 0000002C 00000010 .RES.L 4 0000003C L1819: ; static: _pOFlameBur + st 0000003C 00000004 .RES.L 1 00000040 L1820: ; static: _pFlameMidd + le 00000040 00000004 .RES.L 1 00000044 L1821: ; static: _pLEndPiece 00000044 00000004 .RES.L 1 00000048 L1822: ; static: _pREndPiece 00000048 00000004 .RES.L 1 0000004C L1823: ; static: _pGlowCard 0000004C 00000004 .RES.L 1 00000050 L1824: ; static: _pLowGeoFla + me 00000050 00000004 .RES.L 1 00000054 L1825: ; static: _paPropCell 00000054 00000008 .RES.L 2 0000005C L1826: ; static: _paFlameCel + l 0000005C 00000044 .RES.L 17 000000A0 L1827: ; static: _paBlueCell 000000A0 00000014 .RES.L 5 000000B4 L1828: ; static: _pEngFlameC + ell 000000B4 0000001C .RES.L 7 000000D0 L1877: ; static: _xfmLFlame 000000D0 0000006C .RES.L 27 0000013C L1878: ; static: _xfmRFlame 0000013C 0000006C .RES.L 27 000001A8 L1879: ; static: _xfmEngFlam + e 000001A8 00000360 .RES.L 216 00000508 L1880: ; static: _afLStrutVe + rts 00000508 00000024 .RES.L 9 0000052C L1881: ; static: _afRStrutVe + rts 0000052C 00000024 .RES.L 9 00000550 L1882: ; static: _fEngFlameY + Coord 00000550 00000018 .RES.L 6 00000568 L1883: ; static: _FlameParti + cle 00000568 0000004C .RES.L 19 SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:07:45 PAGE 1 ******** STATISTICS INFORMATION ******** ********** ERROR INFORMATION *********** NUMBER OF ERRORS: 0 NUMBER OF WARNINGS: 0 ******* SOURCE LINE INFORMATION ******** COMPILED SOURCE LINE: 1269 ******* SECTION SIZE INFORMATION ******* PROGRAM SECTION (P): 00001CB0 Byte(s) CONSTANT SECTION (C): 00000378 Byte(s) DATA SECTION (D): 000001B0 Byte(s) BSS SECTION (B): 000005B4 Byte(s) TOTAL PROGRAM SIZE: 0000278C Byte(s) ********** LABEL INFORMATION *********** NUMBER OF EXTERNAL REFERENCE SYMBOLS: 48 NUMBER OF EXTERNAL DEFINITION SYMBOLS: 4 NUMBER OF INTERNAL/EXTERNAL SYMBOLS: 469 *** COMMAND PARAMETER *** bt_tblade.c -ob=.\obj\bt_tblade.obj -cpu=sh4 -division=cpu -endian=little -fpu =single -pic=0 -macsave=0 -string=const -sub=hydro.sub -optimize=1 -speed -debug -listfile=.\obj\bt_tblade.lst
report.c
Found at 1xABA0830:
SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:20:06 PAGE 1 ************ OBJECT LISTING ************ FILE NAME: report.c SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT report.c 1 /***************************************************** +******************************** */ report.c 2 /* report.c - WinDev Environment reporting functions. +*/ report.c 3 /* */ report.c 4 /* Author: Steve Ranck */ report.c 5 /***************************************************** +******************************** */ report.c 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN +TERTAINMENT. */ report.c 7 /* Copyright (c) 1997 */ report.c 8 /* */ report.c 9 /* The contents of this file may not be disclosed to t +hird */ report.c 10 /* parties, copied or duplicated in any form, in whole + or in part, */ report.c 11 /* without the prior written permission of Midway Home + Entertainment. */ report.c 12 /***************************************************** +******************************** */ report.c 13 /* Modification History: */ report.c 14 /* */ report.c 15 /* Date Who Description */ report.c 16 /* -------- ---------- ------------------------------ +-------------------------------- */ report.c 17 /* 08/02/97 Ranck Created. */ report.c 18 /***************************************************** +******************************** */ report.c 19 report.c 20 #include "gendefs.h" report.c 21 report.c 22 E #if !((1 )==0) report.c 23 void report_Open( void ) {} P 00000000 _report_Open: ; function: report_Op + en ; frame size=0 00000000 000B RTS 00000002 0009 NOP report.c 24 void report_Close( void ) {} 00000004 _report_Close: ; function: report_Cl + ose ; frame size=0 00000004 000B RTS 00000006 0009 NOP report.c 25 void report_WriteString( const char *pszString ) {} 00000008 _report_WriteString: ; function: report_Wr + iteString ; frame size=0 00000008 000B RTS 0000000A 0009 NOP report.c 26 #else report.c 27 X report.c 28 X #include <stdio.h> report.c 29 X #include "report.h" report.c 30 X #include "wintap.h" report.c 31 X #include "xclib.h" report.c 32 X #include "tmem.h" report.c 33 X report.c 34 X report.c 35 X #define RECORD_KEYWORD_COMMENT "COM" report.c 36 X #define RECORD_KEYWORD_REFERENCE "REF" report.c 37 X #define RECORD_KEYWORD_GEO_INFO "GEO" report.c 38 X #define RECORD_KEYWORD_TEX_INFO "TEX" report.c 39 X #define RECORD_KEYWORD_RAD_INFO "RAD" report.c 40 X report.c 41 X report.c 42 X report.c 43 X static FILE *_pFile; report.c 44 X static const char *_pszReportPathName; report.c 45 X static BOOL _bReportEnabled; report.c 46 X report.c 47 X report.c 48 X void report_Open( void ) { report.c 49 X _pszReportPathName = Wintap_pGuiSettings->pszR +eportPath; report.c 50 X _bReportEnabled = Wintap_pGuiSettings->bReport +Enabled; report.c 51 X if( xclib_strlen( _pszReportPathName ) == 0 ) +{ report.c 52 X xprintf( "No report filename given.\n" + ); report.c 53 X _bReportEnabled = FALSE; report.c 54 X } report.c 55 X report.c 56 X if( _bReportEnabled ) { report.c 57 X _pFile = fopen( _pszReportPathName, "w +t" ); report.c 58 X if( _pFile == NULL ) { report.c 59 X xprintferr( "ERROR: Trouble op +ening report file '%s'.\n", _pszReportPathName ); report.c 60 X _bReportEnabled = FALSE; report.c 61 X } report.c 62 X } report.c 63 X } report.c 64 X report.c 65 X void report_Close( void ) { report.c 66 X if( _bReportEnabled ) { report.c 67 X fclose( _pFile ); report.c 68 X } report.c 69 X } report.c 70 X report.c 71 X void report_WriteString( const char *pszString ) { report.c 72 X if( _bReportEnabled ) { report.c 73 X fprintf( _pFile, pszString ); report.c 74 X } report.c 75 X } report.c 76 X report.c 77 X /* "COM","string" */ report.c 78 X void report_LogComment( const char *pszString ) { report.c 79 X if( _bReportEnabled ) { report.c 80 X fprintf( _pFile, "\"%s\",\"%s\"\n", RE +CORD_KEYWORD_COMMENT, pszString ); report.c 81 X } report.c 82 X } report.c 83 X report.c 84 X /* "REF","referenced name","referenced-by name","in R2 +: Y/N" */ report.c 85 X void report_LogObRef( const char *pszReferenceName, co +nst char *pszReferencedBy, char cInR2 ) { report.c 86 X if( _bReportEnabled ) { report.c 87 X fprintf( _pFile, "\"%s\",\"%s\",\"%s\" +,\"%c\"\n", RECORD_KEYWORD_REFERENCE, pszReferenceName +, pszReferencedBy, cInR2 ); report.c 88 X } report.c 89 X } report.c 90 X report.c 91 X /* "GEO","name","bytes","tris" */ report.c 92 X void report_LogGeoInfo( const char *pszGeoName, u32 nB +ytes, u32 nTris ) { report.c 93 X if( _bReportEnabled ) { report.c 94 X fprintf( _pFile, "\"%s\",\"%s\",\"%d\" +,\"%d\"\n", RECORD_KEYWORD_GEO_INFO, pszGeoName, nByte +s, nTris ); report.c 95 X } report.c 96 X } report.c 97 X report.c 98 X /* "TEX","name","width","height","in tmem: Y/N" */ report.c 99 X void report_LogTexInfo( const char *pszTexName, u32 nW +idth, u32 nHeight, char cLoaded ) { report.c 100 X if( _bReportEnabled ) { report.c 101 X fprintf( _pFile, "\"%s\",\"%s\",\"%d\" +,\"%d\",\"%c\"\n", RECORD_KEYWORD_TEX_INFO, pszTexName +, nWidth, nHeight, cLoaded ); report.c 102 X } report.c 103 X } report.c 104 X report.c 105 X void report_LogRadInfo( const char *pszRadarName, u32 +nBytes ) { report.c 106 X if( _bReportEnabled ) { report.c 107 X fprintf( _pFile, "\"%s\",\"%s\",\"%d\" +\n", RECORD_KEYWORD_RAD_INFO, pszRadarName, nBytes ); report.c 108 X } report.c 109 X } report.c 110 X report.c 111 X report.c 112 X report.c 113 X report.c 114 #endif SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:20:06 PAGE 1 ******** STATISTICS INFORMATION ******** ********** ERROR INFORMATION *********** NUMBER OF ERRORS: 0 NUMBER OF WARNINGS: 0 ******* SOURCE LINE INFORMATION ******** COMPILED SOURCE LINE: 114 ******* SECTION SIZE INFORMATION ******* PROGRAM SECTION (P): 0000000C Byte(s) CONSTANT SECTION (C): 00000000 Byte(s) DATA SECTION (D): 00000000 Byte(s) BSS SECTION (B): 00000000 Byte(s) TOTAL PROGRAM SIZE: 0000000C Byte(s) ********** LABEL INFORMATION *********** NUMBER OF EXTERNAL REFERENCE SYMBOLS: 0 NUMBER OF EXTERNAL DEFINITION SYMBOLS: 3 NUMBER OF INTERNAL/EXTERNAL SYMBOLS: 3 *** COMMAND PARAMETER *** report.c -ob=.\obj\report.obj -cpu=sh4 -division=cpu -endian=little -fpu=singl e -pic=0 -macsave=0 -string=const -sub=hydro.sub -optimize=1 -speed -debug -list file=.\obj\report.lst
scissor.c
Found at 1xAF12830:
SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:20:08 PAGE 1 ************ OBJECT LISTING ************ FILE NAME: scissor.c SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT scissor.c 1 /***************************************************** +******************************** */ scissor.c 2 /* scissor.c - Screen scissoring functions. */ scissor.c 3 /* */ scissor.c 4 /* Author: Steve Ranck */ scissor.c 5 /***************************************************** +******************************** */ scissor.c 6 /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME EN +TERTAINMENT. */ scissor.c 7 /* Copyright (c) 1997 */ scissor.c 8 /* */ scissor.c 9 /* The contents of this file may not be disclosed to t +hird */ scissor.c 10 /* parties, copied or duplicated in any form, in whole + or in part, */ scissor.c 11 /* without the prior written permission of Midway Home + Entertainment. */ scissor.c 12 /***************************************************** +******************************** */ scissor.c 13 /* Modification History: */ scissor.c 14 /* */ scissor.c 15 /* Date Who Description */ scissor.c 16 /* -------- ---------- ---------------------- +---------------------------------------- */ scissor.c 17 /* 01-21-97 Ranck Created. */ scissor.c 18 /***************************************************** +******************************** */ scissor.c 19 scissor.c 20 #include "gendefs.h" scissor.c 21 #include "scissor.h" scissor.c 22 #include "viewport.h" scissor.c 23 #include "init3dfx.h" scissor.c 24 #include "glide.h" scissor.c 25 scissor.c 26 /* These values indicate the visible rectangle, and ar +e inclusive: */ scissor.c 27 int Scissor_nLeftX; /* 0 is very left of s +creen */ scissor.c 28 int Scissor_nRightX; /* 0 is very left of screen */ scissor.c 29 int Scissor_nBottomY; /* 0 is very bottom of screen +*/ scissor.c 30 int Scissor_nTopY; /* 0 is very bottom of + screen */ scissor.c 31 scissor.c 32 scissor.c 33 void scissor_SetToViewport( void ) { P 00000000 _scissor_SetToViewport: ; function: scissor_S + etToViewport ; frame size=0 scissor.c 34 scissor_Set( 0, Viewport_hres-1, 0, Viewport_v +res-1 ); 00000000 D225 MOV.L L1125+4,R2 ; _Viewport_hres 00000002 E600 MOV #0,R6 00000004 D323 MOV.L L1125,R3 ; _Viewport_vres 00000006 6522 MOV.L @R2,R5 00000008 6732 MOV.L @R3,R7 0000000A 75FF ADD #-1,R5 0000000C 77FF ADD #-1,R7 0000000E A009 BRA _scissor_Set 00000010 6463 MOV R6,R4 scissor.c 35 } scissor.c 36 scissor.c 37 void scissor_SetToScreen( void ) { 00000012 _scissor_SetToScreen: ; function: scissor_S + etToScreen ; frame size=0 scissor.c 38 scissor_Set( 0, Init3dfx_nHorizontalPixels-1, +0, Init3dfx_nVerticalPixels-1 ); 00000012 D223 MOV.L L1125+12, + R2; _Init3dfx_nHorizonta + lPixels 00000014 E600 MOV #0,R6 00000016 D321 MOV.L L1125+8, + R3 ; _Init3dfx_nVerticalP + ixels 00000018 6522 MOV.L @R2,R5 0000001A 6732 MOV.L @R3,R7 0000001C 75FF ADD #-1,R5 0000001E 77FF ADD #-1,R7 00000020 A000 BRA _scissor_Set 00000022 6463 MOV R6,R4 scissor.c 39 } scissor.c 40 scissor.c 41 void scissor_Set( int nLeftX, int nRightX, int nBottom +Y, int nTopY ) { 00000024 _scissor_Set: ; function: scissor_S + et ; frame size=16 00000024 7FF0 ADD #-16,R15 00000026 1F43 MOV.L R4,@(12,R15) 00000028 1F52 MOV.L R5,@(8,R15) 0000002A 1F61 MOV.L R6,@(4,R15) 0000002C 2F72 MOV.L R7,@R15 scissor.c 42 Scissor_nLeftX = nLeftX; 0000002E 53F3 MOV.L @(12,R15),R3 00000030 D21C MOV.L L1125+16,R2; _Scissor_nLeftX 00000032 2232 MOV.L R3,@R2 scissor.c 43 Scissor_nRightX = nRightX; 00000034 D31C MOV.L L1125+20,R3; _Scissor_nRightX 00000036 51F2 MOV.L @(8,R15),R1 00000038 2312 MOV.L R1,@R3 scissor.c 44 Scissor_nBottomY = nBottomY; 0000003A D01C MOV.L L1125+24,R0; _Scissor_nBottomY 0000003C 51F1 MOV.L @(4,R15),R1 0000003E 2012 MOV.L R1,@R0 scissor.c 45 Scissor_nTopY = nTopY; 00000040 D11B MOV.L L1125+28,R1; _Scissor_nTopY 00000042 62F2 MOV.L @R15,R2 00000044 2122 MOV.L R2,@R1 scissor.c 46 scissor.c 47 grClipWindow( nLeftX, nBottomY, nRightX, nTopY + ); 00000046 54F3 MOV.L @(12,R15),R4 00000048 D21A MOV.L L1125+32,R2; _grClipWindow 0000004A 55F1 MOV.L @(4,R15),R5 0000004C 67F2 MOV.L @R15,R7 0000004E 56F2 MOV.L @(8,R15),R6 00000050 422B JMP @R2 00000052 7F10 ADD #16,R15 scissor.c 48 } scissor.c 49 scissor.c 50 void scissor_SaveState( ScissorState_t *pScissorState +) { 00000054 _scissor_SaveState: ; function: scissor_S + aveState ; frame size=0 scissor.c 51 pScissorState->nLeftX = Scissor_nLeftX; 00000054 D213 MOV.L L1125+16,R2; _Scissor_nLeftX 00000056 6322 MOV.L @R2,R3 00000058 2432 MOV.L R3,@R4 scissor.c 52 pScissorState->nRightX = Scissor_nRightX; 0000005A D013 MOV.L L1125+20,R0; _Scissor_nRightX 0000005C 6102 MOV.L @R0,R1 0000005E 1411 MOV.L R1,@(4,R4) scissor.c 53 pScissorState->nBottomY = Scissor_nBottomY; 00000060 D112 MOV.L L1125+24,R1; _Scissor_nBottomY 00000062 6312 MOV.L @R1,R3 00000064 1432 MOV.L R3,@(8,R4) scissor.c 54 pScissorState->nTopY = Scissor_nTopY; 00000066 D312 MOV.L L1125+28,R3; _Scissor_nTopY 00000068 6232 MOV.L @R3,R2 scissor.c 55 } 0000006A 000B RTS 0000006C 1423 MOV.L R2,@(12,R4) scissor.c 56 scissor.c 57 void scissor_RestoreState( ScissorState_t *pScissorSta +te ) { 0000006E _scissor_RestoreState: ; function: scissor_R + estoreState ; frame size=0 scissor.c 58 Scissor_nLeftX = pScissorState->nLeftX; 0000006E 6142 MOV.L @R4,R1 00000070 D00C MOV.L L1125+16,R0; _Scissor_nLeftX 00000072 2012 MOV.L R1,@R0 scissor.c 59 Scissor_nRightX = pScissorState->nRightX; 00000074 5341 MOV.L @(4,R4),R3 00000076 D20C MOV.L L1125+20,R2; _Scissor_nRightX 00000078 2232 MOV.L R3,@R2 scissor.c 60 Scissor_nBottomY = pScissorState->nBottomY; 0000007A D30C MOV.L L1125+24,R3; _Scissor_nBottomY 0000007C 5142 MOV.L @(8,R4),R1 0000007E 2312 MOV.L R1,@R3 scissor.c 61 Scissor_nTopY = pScissorState->nTopY; 00000080 D10B MOV.L L1125+28,R1; _Scissor_nTopY 00000082 5043 MOV.L @(12,R4),R0 scissor.c 62 scissor.c 63 grClipWindow( Scissor_nLeftX, Scissor_nRightX, + Scissor_nBottomY, Scissor_nTopY ); 00000084 6703 MOV R0,R7 00000086 2102 MOV.L R0,@R1 00000088 6522 MOV.L @R2,R5 0000008A D20A MOV.L L1125+32,R2; _grClipWindow 0000008C D005 MOV.L L1125+16,R0; _Scissor_nLeftX 0000008E 6632 MOV.L @R3,R6 00000090 422B JMP @R2 00000092 6402 MOV.L @R0,R4 00000094 L1125: 00000094 <00000000> .DATA.L _Viewport_vres 00000098 <00000000> .DATA.L _Viewport_hres 0000009C <00000000> .DATA.L _Init3dfx_nVerticalPixels 000000A0 <00000000> .DATA.L _Init3dfx_nHorizontalPixels 000000A4 <00000000> .DATA.L _Scissor_nLeftX 000000A8 <00000000> .DATA.L _Scissor_nRightX 000000AC <00000000> .DATA.L _Scissor_nBottomY 000000B0 <00000000> .DATA.L _Scissor_nTopY 000000B4 <00000000> .DATA.L _grClipWindow scissor.c 64 } scissor.c 65 B 00000000 _Scissor_nLeftX: ; static: Scissor_nLe + ftX 00000000 00000004 .RES.L 1 00000004 _Scissor_nRightX: ; static: Scissor_nRi + ghtX 00000004 00000004 .RES.L 1 00000008 _Scissor_nBottomY: ; static: Scissor_nBo + ttomY 00000008 00000004 .RES.L 1 0000000C _Scissor_nTopY: ; static: Scissor_nTo + pY 0000000C 00000004 .RES.L 1 SH SERIES C Compiler (Ver. 5.0(Release27)) 21-Oct-1998 17:20:08 PAGE 1 ******** STATISTICS INFORMATION ******** ********** ERROR INFORMATION *********** NUMBER OF ERRORS: 0 NUMBER OF WARNINGS: 0 ******* SOURCE LINE INFORMATION ******** COMPILED SOURCE LINE: 65 ******* SECTION SIZE INFORMATION ******* PROGRAM SECTION (P): 000000B8 Byte(s) CONSTANT SECTION (C): 00000000 Byte(s) DATA SECTION (D): 00000000 Byte(s) BSS SECTION (B): 00000010 Byte(s) TOTAL PROGRAM SIZE: 000000C8 Byte(s) ********** LABEL INFORMATION *********** NUMBER OF EXTERNAL REFERENCE SYMBOLS: 5 NUMBER OF EXTERNAL DEFINITION SYMBOLS: 9 NUMBER OF INTERNAL/EXTERNAL SYMBOLS: 15 *** COMMAND PARAMETER *** scissor.c -ob=.\obj\scissor.obj -cpu=sh4 -division=cpu -endian=little -fpu=sin gle -pic=0 -macsave=0 -string=const -sub=hydro.sub -optimize=1 -speed -debug -li stfile=.\obj\scissor.lst
Raw Source Code
mesh3d.c
Found at 0x8E94380:
/*////////////////////////////////////////////////////////////////////////////////////*/ /* mesh3d.c - General 3D mesh definitions.*/ /**/ /* Author: Steve Ranck*/ /*////////////////////////////////////////////////////////////////////////////////////*/ /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME ENTERTAINMENT.*/ /* Copyright (c) 1997*/ /**/ /* The contents of this file may not be disclosed to third*/ /* parties, copied or duplicated in any form, in whole or in part,*/ /* without the prior written permission of Midway Home Entertainment.*/ /*////////////////////////////////////////////////////////////////////////////////////*/ /* Modification History:*/ /**/ /* Date Who Description*/ /* -------- ---------- --------------------------------------------------------------*/ /* 04-14-97 Ranck Created.*/ /*////////////////////////////////////////////////////////////////////////////////////*/ #include "gendefs.h" #include "gfxdefs.h" #include "vec3.h" #include "xfm.h" #include "viewport.h" #include "glide.h" #include "gutil.h" #include "xmath.h" #include "tmem.h" #include "mesh3d.h" #include "light.h" #include "blit.h" #include "sysmem.h" #include "glcount.h" #include "material.h" #include "xclib.h" #include "race.h" #include <private.h> #define _INLINE_ASM_ENABLED FALSE #define _ASM_TRANSFORM_ENABLED TRUE #define _ASM_LIGHTING_ENABLED TRUE #define _DYNAMIC_LIGHTING_ENABLED TRUE #define _LIGHTING_CACHE_ENABLED TRUE #define OLD_OOW_CALC_METHOD 0 #define MY_TEMP_TEST 0 #define MY_TEMP_TEST2 0 #define MESH3D_ZTUG_DELTA_DEPTH_BIAS 5 #ifdef MESH3D_USE_32BIT_TC_INDEX_FIELDS static Mesh3dMtlDef_t _UnmappedTextureMtl_1Sided = { 0, 0, 0, 0, 0, 0.0f, 0.0f, NULL, 0.0f, 1.0f, 1.0f, 1.0f }; static Mesh3dMtlDef_t _UnmappedTextureMtl_2Sided = { MESH3D_MTLFLAG_2SIDED, 0, 0, 0, 0, 0.0f, 0.0f, NULL, 0.0f, 1.0f, 1.0f, 1.0f }; #else static Mesh3dMtlDef_t _UnmappedTextureMtl_1Sided = { 0, 0, 0, 0, 0.0f, 0.0f, NULL, 0.0f, 1.0f, 1.0f, 1.0f }; static M�t˜!��������+ð�geR¯+$�ʇ\}ŒxÁ+±CŠá�£lö›[Ê%¡Ç³ÝwœE±0`Ä�ÑWåy¼UÏKÖÏX½W�ç½õ¤j¢…[?q(š��É=;�–èT�í2:¦RjyØ®$!nsá�.�¹×,%ÕTàVÊ�à÷Zæa§•{¿i»ºú„W´/×8~èx¨#©\l‡-Øí'»"Z÷œÄXÅ´/8vk¡�,•áoQG¿s�8Ê8;ì�5z—X,Ÿ�� “5‰�Rÿ‰ÒY•TA„|ÉQû$J$��RÏwtÛG–Á[‰iÛ:Õ¤<“7ñCìo•kö=��Û�ÓŠêTxνùî˜�\]îZ9·?šÁ™©")ÆI~¢Z°©†Bœi-Õè�eð�r�ÿÿÿÿÿÿÿÿÿÿ�%9�esh3dMtlDef_t _UnmappedTextureMtl_2Sided = { MESH3D_MTLFLAG_2SIDED, 0, 0, 0, 0.0f, 0.0f, NULL, 0.0f, 1.0f, 1.0f, 1.0f }; #endif /*==================================================================================*/ /* Public Variables:*/ #if MESH3D_ENABLE_STATS u32 Mesh3d_nTrisCulled_BackfaceTest; u32 Mesh3d_nTrisCulled_TriBoundTest; u32 Mesh3d_nTrisCulled_TriVtxTest; u32 Mesh3d_nTrisCulled_TriClipTest; u32 Mesh3d_nTrisDrawn_Unclipped; u32 Mesh3d_nTrisDrawn_Clipped; #endif #if MESH3D_TRI_HIGHLIGHT_CODE BOOL Mesh3d_bDisplayFaceNorms; BOOL Mesh3d_bDisplayVtxNorms; RGBn_t Mesh3d_FaceNormColor; RGBn_t Mesh3d_VtxNormColor; float Mesh3d_fNormLength; BOOL Mesh3d_bWireframeMode; /* FALSE: normal rendering, TRUE: opaque tris and wireframes*/ RGBn_t Mesh3d_WireframeColor; /* Color when Mesh3d_bWireframeMode is TRUE*/ Mesh3dPolyDrawFcn_t *Mesh3d_pPolyDrawFcn; /* Called for every poly drawn (NULL=none)*/ #endif Mesh3dVtxCache_t *Mesh3d_pVtxCache; Mesh3dVlCache_t *Mesh3d_pVlCache; u32 Mesh3d_nNextAvailVtxCacheIndex; u32 Mesh3d_nNextAvailVlCacheIndex; u32 Mesh3d_nCacheKey; u32 Mesh3d_nLastFrameCounter; u32 Mesh3d_nMaxVtxCacheIndex; u32 Mesh3d_nMaxVlCacheIndex; #if MESH3D_HIGHLIGHT_2SIDED BOOL Mesh3d_bHighlight2Sided; #endif /*==================================================================================*/ /* Private Variables:*/ static BOOL _bCacheEnable; static int _nMaterialFilter; static Mesh3dMtlDef_t *_pCurrentMaterial; static u32 _nMaterialFlags; static TexDef_t *_pMaterialTexDef; static float _fMaterialShininess; static float _fMaterialShinyStrength; static float _fMaterialSpecularProduct; static BOOL _bMaterialTexture; static BOOL _bMaterial2Sided; static BOOL _bMaterialReflective; static BOOL _bMaterialNoDiffuse; BOOL _bMaterialNoDynLight; static BOOL _bMaterialAlphaLit; static BOOL _bMaterialTileS; static BOOL _bMaterialTileT; static BOOL _bMaterialZtug; BOOL _bMaterialNoIncidenceAtten; /* For lighting*/ static u32 _nMaterialAlphÏŒŸ ��������²ÂgÌÄîãàUHñêÚ�³~�[� A6© 6þÁ�ÎôÐS¨6h.~·jë�V�c‹þ�e�¿h/�½¨ªîÐÞ³�Ôê�këpÓeë}üïœRš§üÒ8C�¤tåÕÖä†ÇšD�¾Þ¾~›�'�wBmGŒU<¯¿*«ÜÃ2Ð2)k}ÂL¤é.:ujÒ¦@,�œ"h�ŸÝª–ç‰ïFÚ» NÊ9åwg“O£–k„Êž_{�’êÐœçã]¼Ží0ÜÍn¹ f¥}��Üq¯£hYI¹Y”Õ¤›…ÿˆ›àŒÁ�‹&%NÊI@g6aw�$·„"”l;cô›T�¤�ê§ùG»nf�”�…8WŒÊhi™Ô�Á …�_טc�‘†:"�ÿÿÿÿÿÿÿÿÿÿ�%@�aLightColor; static float _fOrthoYScale = 1.0f; static float _fBackClipPlaneZ = 2500.0f; static int _nUntuggedDepthBiasLevel; static int _nTuggedDepthBiasLevel; static BOOL _bZtugOn; static u32 _nAmbientCol; static RGBf_t _AlphaLightColor; static u32 _nAlphaLightState; Mesh3dAmbient_t _Ambient; /* ambient light*/ static float _fWhiteSat; /* white saturation level (0=normal, 1=fully white)*/ static u32 _dwWhiteSat; static float _fR, _fG, _fB, _fA; /* temporary variables used for lighting*/ static float _fRGBA[4]; static Vec3_t _Vtx3d, _VtxUnitNorm, _VtxToCam; static float _Vtx[6]; static float _fInvMagVtxToCam; static BOOL _bMustCalcInvMagVtxToCam; static u32 _nFindMtlById_ID; static u32 _nFindMtlById_GrpIndex; static u32 _nFindMtlById_TlIndex; static Mesh3d_t *_pFindMtlById_Mesh; static float _fOrthoRedBias; static float _fOrthoGreenBias; static float _fOrthoBlueBias; static float _fOrthoOpaqueness; static float _fOrthoWhiteSat; static u32 _dwOrthoWhiteSat; static BOOL _bOrthoUseScreenCoverageDraw; static GrColor_t _OrthoConstColor; static float _fGlobalAmbientInten = 1.0f; static u32 _nNextPrintedMsgFrameCounter; static MidwayLight_t *_apLightList[MESH3D_MAX_ACTIVE_LIGHTS]; static MidwayLight_t **_ppLightList; static u32 _nNumLights; static u32 _nLightListStartIndex; static u32 _nIncludedPositionalLights; static u32 _nIncludedDirectionalLights; MidwayLight_t *_apPosGrpLight[MESH3D_MAX_ACTIVE_LIGHTS]; MidwayLight_t *_apDirGrpLight[MESH3D_MAX_ACTIVE_LIGHTS]; MidwayLight_t *_apSpotGrpLight[MESH3D_MAX_ACTIVE_LIGHTS]; MidwayLight_t *_apFlashGrpLight[MESH3D_MAX_ACTIVE_LIGHTS]; u32 _nNumGrpLights; u32 _nNumPosGrpLights; u32 _nNumDirGrpLights; u32 _nNumSpotGrpLights; u32 _nNumFlashGrpLights; BOOL _bWorldMesh; /* mesh vertices are in world-space*/ BOOL _bDirLighting; static BOOL _bReflectSurface; static float _fReflectSurfaceHeight_WorldSpace; static Vec3_t _PointOnReflectSurface_Camspace; static Vec3_t _ReflectSurfaceUnitNorm_Camspace; static f�+`Ô��������„DÌ/�p�ÇòØt…!s&¢M>bmF�G§(ƒZH%+ŸÑ`�è �Î�-b±q•¨€ÇmÇ¥hv3ñª�ÏçP2Ž h��ȺqkWï#.W4ü¸ ��yk>�C*}¹o�:qœÞ’Ø â'��…Q��Cfw�‚)áPusJòý�eùutÒ��t„�遼Ø?§(Tc•‚�©ôo8«�$.SÙ½~+'‡Dv�Q·,�N�WzmB�’�ÝÄx&Âœ�ðUä+�ÚäéSÒ�[ìónÒ6Â1�Á”ÿìdûãç?Xëq»Äî-Œ÷Þqåòe“&Fð Ç£«î§ž�#T�½�zØGc�j4¨f¿�Á��¼�z�Ìë!h‰ËzÖõ�_^}"�ÿÿÿÿÿÿÿÿÿÿ�%A�loat _fNegDistAboveReflectSurface_Camspace; static float _fReflectSurfaceAnimateCounter; static float _fZBufferOffset; #if MESH3D_BOUNDING_VIEW_ENABLED static Mesh3dTriDef_t *_pHighlightedTri; /* NULL=none*/ static int _nTriSphereCrossesPlanesMaskTmp; static int _nTriSphereCrossesPlanesMask; static BOOL _bViewOrthoBoundEnabled; static BOOL _bViewBoundEnabled; static BOOL _bViewMeshSphere; static BOOL _bViewMeshVolume; static BOOL _bViewGroupSphere; static BOOL _bViewGroupVolume; static BOOL _bViewTriSphere; static int _nSelectedTriNum; static int _nSelectedMatNum; static int _nSelectedGrpNum; #endif static Mesh3d_t _SensorMesh; static Mesh3dGrpDef_t _SensorGrp; static u32 _LightingModel = LIGHTING_MODEL_LITE; static Vec3_t _avModelViewNorm[4]; /* viewport normals in model space:*/ /* [0]=left, [1]=right, [2]=bottom, [3]=top*/ static Mesh3dVtxCache_t clippedvtx[40], *grvp[40]; extern float dcCullTest(float *pCamPos, float *pPos, float *pNorm); extern void dcTransformVertices(Mesh3dVtxDef_t *pVtx, int NumVerts, Mesh3dVtxCache_t *pDest); extern void dcTransformVerticesA(Mesh3dVtxDef_t *pVtx, int NumVerts, Mesh3dVtxCache_t *pDest); extern void dcComputeDirLight(MidwayLight_t **pLightList, int NumLights, float *pNormal, float Rgb[3] ); extern void dcComputeSpotLight(MidwayLight_t **pLightList, int NumLights, float *pNormal, float Rgb[3] ); extern void dcComputeVtxLighting( Mesh3dGrpDef_t *pGrp, u32 *pArgb, Mesh3dVtxDef_t *pVtx, Mesh3dVlDef_t *pVl, Mesh3dVnDef_t *pVn ); extern void dcComputeMotifLighting( Mesh3dGrpDef_t *pGrp, u32 *pArgb, Mesh3dVtxDef_t *pVtx, Mesh3dVlDef_t *pVl ); extern void dcOutputTri(Mesh3dVtxCache_t*, Mesh3dVtxCache_t*, Mesh3dVtxCache_t*); extern void dcLightTri( Mesh3d_t *pMesh, Mesh3dGrpDef_t * pGrp, Mesh3dVtxCache_t *apVtxCache[3], Mesh3dTriVtx_t *pTriVtx); extern Mesh3dVtxCache_t _dcVertexBuffer[8192]; /*==================================================================================*/ /* Prototypes:*/ static BOOL _SetOrth#P�R��������ÿ�‡Y»ÁnáTïSPsïqÔ�@”„Ò“£_ �íb�PœCè¾+û�4�ñ�<º©²ù«�ë ©¢šT؆î�å¥N1~úû¼ «}'(Íú¼BÊþb�%ÉÁ”k1B’!¡ûXÚXç��mÄhÆLe„ŠïÏÿß[:nÌ�~3ÑU É�¹.�uÿÜa�å›Þ†Ÿ�¦x¼è¼iÝñ®OÌÔ�M�ªþ¦V¬ba^ÿ±Ü�ßÓ<$(¶z,nåOÌ�%ºSonp*“bI31ŠFQt| *|¬N7 �"@WFo�e‡H¨���£Ö ?–Šu�Õ ì…Û�ê�”Ž³ˆæôC�2ö®§qÅç˜�þïÅ�%§¿'»ŒÆ(¢�o�{Šc�WtÎE�þ�ÿÿÿÿÿÿÿÿÿÿ�%B�oMaterial( int *pnTmuIndex, u32 nMtlFlags ); static void _SetMaterial( BOOL bLightAlphaTexels ); #if MESH3D_TRI_HIGHLIGHT_CODE static void _ClipTriToFrustumAndDraw( u32 nTriNum, Mesh3dVtxCache_t **ppVtxCache, int nTriCrossesPlanesMask ); #else static void _ClipTriToFrustumAndDraw( Mesh3dVtxCache_t **ppVtxCache, int nTriCrossesPlanesMask ); #endif //static void _ComputeVtxLighting( Mesh3dGrpDef_t *pGrp, GrVertex *pGrVertex, Mesh3dVtxDef_t *pVtx, Mesh3dVlDef_t *pVl, Mesh3dVnDef_t *pVn ); //static void _ComputeFlashLight( void ); static void _ComputeOmniLight( void ); static void _ComputeDirLight( void ); static void _ComputeSpotLight( void ); static void _ComputeFlashLight_NoNormal( void ); static void _ComputeOmniLight_NoNormal( void ); static void _ComputeDirLight_NoNormal( void ); static void _ComputeSpotLight_NoNormal( void ); static void _DrawOrthoSphere( Vec3_t *pCenter, float fRadius, u32 nColorRGB555, float fViewportX, float fViewportY, int nRoll, float fScale ); static void _DrawProjectedSphere( Vec3_t *pCenter, float fRadius, u32 nColorRGB555 ); #if MESH3D_BOUNDING_VIEW_ENABLED static void _UpdateViewBoundVars( void ); #endif #if MESH3D_TRI_HIGHLIGHT_CODE static void _DrawConvexPolyWireframe( int nNumVerts, Mesh3dVtxCache_t *apVtxCache[] ); #endif static void _IntersectPosLightListWithBound( Mesh3d_t *pMesh, Mesh3dBound_t *pBound, BOOL bTestingGroupBound ); static void _ComputeReflectParameters( void ); static void _WabbleScreenPoint( float *pfScreenX, float *pfScreenY, float fCamspaceX, float fCamspaceY, float fCamspaceZ ); #if MESH3D_TRI_HIGHLIGHT_CODE static void _DisplayFaceNormal( Mesh3dVtxCache_t **ppVtxCache, Vec3_t *pFaceUnitNorm ); static void _DisplayVtxNormal( Mesh3dVtxCache_t *pVtxCache, Mesh3dVnDef_t *pVtxNorm ); static void _DrawNormal( Vec3_t *pHead, Vec3_t *pTail, int nRed, int nGreen, int nBlue ); #endif /*==================================================================================*/ /* Public Functions:*/ /* mesh3d_SystemInit:™š�š��������û®k·¸Ò¯•¯–³”�ŠbO�ôõ�‡.õCÐ�O›�¥ëéf¿U¼ï˜óSQ)á�ˆ{ÎO)fuIßá�2 –ÀÓ‹¬s`G;M2P€5æÉÝB·ˆ�æ.ßo�º³M«�¯ë‹÷¤œ»žì'î)xDÜân¼mƒJÏ5+øN”â�õ>áð¯þ@>/þ�–M¬d�9�>‰–�/5ױ󞄘Z$BR�:�Ï�¼½�¦ÕiHÍIÇwcïÆÎ0náêÂêÄL$��¿3©�RÍç�¡)ÔÚ�xRL5 !ïž�L�_åq&�-è6VÂ!§�1�Õ¨‡Ä±¥‹WÀgúÄ}�ÔU÷Ãd9è¶ ø�Gÿ'8ÿDpÉÏp‡çyé‰��“ЄºÚ3��ÿÿÿÿÿÿÿÿÿÿ�%C�*/ /* Initializes the mesh3d system and sets certain global parameters*/ /* to default values.*/ BOOL mesh3d_ModuleInit( void ) { u32 nVtxCacheBytes, nVlCacheBytes; #if SYS_WINDEV_DEBUG u32 i; #endif mesh3d_EnableCache( TRUE ); Mesh3d_nMaxVtxCacheIndex = 0; Mesh3d_nMaxVlCacheIndex = 0; nVtxCacheBytes = MESH3D_MAX_CACHED_VTX * sizeof(Mesh3dVtxCache_t); nVlCacheBytes = MESH3D_MAX_CACHED_VL * sizeof(Mesh3dVlCache_t); // Mesh3d_pVtxCache = (Mesh3dVtxCache_t *)SYSMEM_ALLOC( nVtxCacheBytes ); Mesh3d_pVlCache = (Mesh3dVlCache_t *)SYSMEM_ALLOC( nVlCacheBytes ); xprintf( "Allocated %i bytes for mesh3d caches.\n", nVtxCacheBytes+nVlCacheBytes ); mesh3d_ResetCache(); _pFindMtlById_Mesh = NULL; _bReflectSurface = FALSE; _nNumLights = 0; _nLightListStartIndex = 0; _ppLightList = _apLightList; _nNumPosGrpLights = 0; _nNumDirGrpLights = 0; _nNumSpotGrpLights = 0; _nNumFlashGrpLights = 0; _nNumGrpLights = 0; mesh3d_SetMaterialFilterMode( 0 ); mesh3d_SetWhiteSat( 0.0f ); mesh3d_SetAmbientLight( 1.0f, 1.0f, 1.0f, 1.0f ); mesh3d_SetAmbientEffects( 1.0f ); /* Normal alpha light color is white...*/ _nAlphaLightState = 0; mesh3d_SetAlphaLightColor( 1.0f, 1.0f, 1.0f, 1.0f ); mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); mesh3d_EnableOrthoScreenCoverageDrawState( FALSE ); /* Init sensor stuff...*/ xclib_MemSet( &_SensorMesh, 0, sizeof(Mesh3d_t) ); xclib_MemSet( &_SensorGrp, 0, sizeof(Mesh3dGrpDef_t) ); _SensorMesh.nGrpCount = 1; _SensorMesh.pGrp = &_SensorGrp; _SensorMesh.Bound.fBoundRadius = 1.0f; _SensorGrp.Bound.fBoundRadius = 1.0f; _nNextPrintedMsgFrameCounter = 0; return TRUE; } /* Sets the mesh reflection-wabble mode and reflection plane world height.*/ /* Returns the prior state of the enable flag.*/ BOOL mesh3d_SetReflectMode( BOOL bEnable, float fWorldReflectPlaneHeight ) { BOOL bOldMode; bOldMode = _bReflectSurface; _bReflectSurface = bEnable; _fReflectSurfaceHeight_WorldSpace = fWorldReflecœÎÙ%��������ûQdìb_x��ç�¹ïÃ�0SÇ‚ƒy”ææ-£##.�k«Ly] £¾Íôѯ G°w¤¼æ�Ös:Hø#iÖªø�¬��YñåhvEOwé«¢ŒŽ„�.Û(× xVAOf��ºGÀÔêgV�Ë¯ç Š×¤�ï5\OyrøûZ~�%ý·ÿצ£�yÆ#Ô Ï[Õ+t-ž±QoÐÝøX•‹�/1›ˆkd69ô�1‘„›Gqñ?¹�.óìÝq� Oô�`°�ÁãØf[Ceà|l~Uà¢5Ev�ÞP%âÇ\ÖùèÙcÕ¨�÷¯½¯iÜžÁ׸»q€�Ù‡œ½[{^ÂûSèIÊ�°O—ºÿUV†L:ÿŽ‹u®ã"�YÜ�æ’øœ\�ÿÿÿÿÿÿÿÿÿÿ�%D�tPlaneHeight; return bOldMode; } /* Returns the current state of the reflection-wabble enable flag.*/ /* If pfWorldReflectPlaneHeight is not NULL, it is filled with the*/ /* current reflection plane world height.*/ BOOL mesh3d_GetReflectMode( float *pfWorldReflectPlaneHeight ) { if( pfWorldReflectPlaneHeight ) { *pfWorldReflectPlaneHeight = _fReflectSurfaceHeight_WorldSpace; } return _bReflectSurface; } /* Fills pAmbientLightState with the current ambient light state.*/ /* Fields within the structure should not be modified.*/ /* This function also saves the state of the ambient effects.*/ void mesh3d_GetAmbientLightState( Mesh3dAmbient_t *pAmbientLightState ) { *pAmbientLightState = _Ambient; } /* Restores the ambient light state to the state contained in pAmbientLightState.*/ /* pAmbientLightState must have been obtained using mesh3d_GetAmbientLightState().*/ /* This function also restores the state of the ambient effects.*/ void mesh3d_SetAmbientLightState( Mesh3dAmbient_t *pAmbientLightState ) { _Ambient = *pAmbientLightState; } /* fRed, fGreen, and fBlue are from 0.0f to 1.0f and indicate the ambient light color.*/ /* fIntensity is from 0.0f to 1.0f and indicates the intensity of the specified*/ /* color.*/ void mesh3d_SetAmbientLight( float fRed, float fGreen, float fBlue, float fIntensity ) { // XASSERT_UNIT_FLOAT( fRed ); // XASSERT_UNIT_FLOAT( fGreen ); // XASSERT_UNIT_FLOAT( fBlue ); // Override if(_LightingModel == LIGHTING_MODEL_LITE){ fRed = _fGlobalAmbientInten; fGreen = _fGlobalAmbientInten; fBlue= _fGlobalAmbientInten; } _Ambient.Color.rgb[2] = fRed; _Ambient.Color.rgb[1] = fGreen; _Ambient.Color.rgb[0] = fBlue; _Ambient.fIntensity = fIntensity; _Ambient.ScaledColor.rgb[2] = fRed * fIntensity; _Ambient.ScaledColor.rgb[1] = fGreen * fIntensity; _Ambient.ScaledColor.rgb[0] = fBlue * fIntensity; _nAmbientCol = dcRGB( (u32)(_Ambient.ScaledColor.rgb[0] * 255.0f), (u32)(_Ambient.ScaledColor.rgb[1] * 255.0f), Ÿlv��������&IR� ?�dŸÔÍ£Õ*º¾�8Ë^ l.�ÍŒ"jÕô†¥É¯†�f»~åÅ�Ot¼ B‹û5AµÿÔ"¬·ºZ´B³Œ‹Ìº©�†Ð0êÚ|4pÃ!�) Ö”%¦\�}-QHMÍÖ¿éï�¿‚�Kº�dQ�.$¯µ�løëÁÞاú=FÝ3ü°~�!…omÂçg Ø´Ð/Áþ•YÚ�¥¼ÍÞñã4ƒÍ�æÄ™‚qé�l;Æ ‡A!Î’²�ÁÀá*Т��^ÀÇ…� Ž��5gÞŽé0ÌÞp��ê�"±17œ'Èp·"ƧÊ} ŠŸ;Q�G, ®(ƒ�º™«:9�B4Þ/�¢Éø$Z4Uþä–@� ôæª���<éWV'üp?ÑñJ�ÿÿÿÿÿÿÿÿÿÿ�%E� (u32)(_Ambient.ScaledColor.rgb[2] * 255.0f) ); } /* Fills *pfRed, *pfGreen, *pfBlue, and *pfIntensity with the current values*/ /* set by the most recent call to mesh3d_SetAmbientLight().*/ /* All values have the range 0.0f to 1.0f.*/ void mesh3d_GetAmbientLight( float *pfRed, float *pfGreen, float *pfBlue, float *pfIntensity ) { *pfRed = _Ambient.Color.rgb[2]; *pfGreen = _Ambient.Color.rgb[1]; *pfBlue = _Ambient.Color.rgb[0]; *pfIntensity = _Ambient.fIntensity; } /* Fills *pfRed, *pfGreen, and *pfBlue with the current values set by the*/ /* most recent call to mesh3d_SetAmbientLight(). The values are pre-scaled*/ /* by the intensity value most recently passed to mesh3d_SetAmbientLight().*/ /* All values have the range 0.0f to 1.0f.*/ void mesh3d_GetAmbientScaledLight( float *pfRed, float *pfGreen, float *pfBlue ) { *pfRed = _Ambient.ScaledColor.rgb[2]; *pfGreen = _Ambient.ScaledColor.rgb[1]; *pfBlue = _Ambient.ScaledColor.rgb[0]; } /* fOpaqueness is a value from 0.0f (transparent) to 1.0f (opaque).*/ void mesh3d_SetAmbientEffects( float fOpaqueness ) { XASSERT_UNIT_FLOAT( fOpaqueness ); _Ambient.fOpaqueness = fOpaqueness; _Ambient.nScaledOpaqueness = (u32)(fOpaqueness * 255.0f); } /* Returns the current white saturation level (0=none, 1=fully white).*/ float mesh3d_GetWhiteSat( void ) { return _fWhiteSat; } /* Sets the current white saturation level (0=none, 1=fully white).*/ void mesh3d_SetWhiteSat( float fWhiteSat ) { XASSERT_UNIT_FLOAT( fWhiteSat ); _fWhiteSat = fWhiteSat; _dwWhiteSat = dcRGB( (u32)(_fWhiteSat * 255.0f), (u32)(_fWhiteSat * 255.0f), (u32)(_fWhiteSat * 255.0f) ); } /* Returns the current material filter mode. See MESH3D_MTL_FILTER for info.*/ /* Note that more than one bit may be set.*/ int mesh3d_GetMaterialFilterMode( void ) { return _nMaterialFilter; } /* Sets the current material filter mode. See MESH3D_MTL_FILTER for info.*/ /* Note that more than one bit may be set.*/ void mesh3d_SetMate�žï4��������’Ó%¼(d�¨Ö��²C£"&² ?�~”*à„€²�� åï�1^›ÄšOp+Ê�†5r~…îÓ¸ò%Ñè/[¹£Š�y©}·I¤®:¹��8èr�|´5œë”§bÅ:Ó?vxúÊXhå?·J�¬E0��¹&¨Ÿé”{�#¹ÜëX m¥œæ^Z(Ñ%®�cvø…«Ùÿ]¥…MpþÊ×^ ÷#ºíjÌË.Ñy�Œ��E6‰0ÏÛâö¢ôÄ��üpôñ¦�ý©0#YaW´”}î3Ûh.xç6�öýmtU|êîKàL1øÇÀ�žŠ£··6v¶EÜi]žçòê³�”�|�ssçÌÕj'óïüô9�…T:\¬š²N²ñø×�”–Xª.�ÿÿÿÿÿÿÿÿÿÿ�%F�rialFilterMode( int nMaterialFilter ) { XASSERT( (nMaterialFilter & ~(MESH3D_MTL_FILTER_OUT_MAIN|MESH3D_MTL_FILTER_OUT_COLLIDE)) == 0 ); _nMaterialFilter = nMaterialFilter; } /* Sets the color used to light alpha lights.*/ /* All parameters have the range of 0.0f to 1.0f.*/ /* Returns the previous state which can be used by mesh3d_SetAlphaLightState()*/ /* to restore the state to its previous condition.*/ u32 mesh3d_SetAlphaLightColor( float fRed, float fGreen, float fBlue, float fIntensity ) { u32 nPriorState; XASSERT_UNIT_FLOAT( fRed ); XASSERT_UNIT_FLOAT( fGreen ); XASSERT_UNIT_FLOAT( fBlue ); XASSERT_UNIT_FLOAT( fIntensity ); nPriorState = _nAlphaLightState; fIntensity *= 255.0f; _AlphaLightColor.rgb[2] = fRed * fIntensity; _AlphaLightColor.rgb[1] = fGreen * fIntensity; _AlphaLightColor.rgb[0] = fBlue * fIntensity; _nAlphaLightState = ((u32)_AlphaLightColor.rgb[2]<<16) | ((u32)_AlphaLightColor.rgb[1]<<8) | ((u32)_AlphaLightColor.rgb[0]); return nPriorState; } /* Returns the current alpha light state. The returned value can be*/ /* passed to mesh3d_SetAlphaLightState() to restore the alpha light state.*/ u32 mesh3d_GetAlphaLightState( void ) { return _nAlphaLightState; } /* Restores the alpha light state. The return value is the prior state.*/ u32 mesh3d_SetAlphaLightState( u32 nAlphaLightState ) { u32 nPreviousState; XASSERT( !(nAlphaLightState & 0xff000000) ); nPreviousState = _nAlphaLightState; if( nAlphaLightState != _nAlphaLightState ) { _AlphaLightColor.rgb[2] = (float)(nAlphaLightState>>16); _AlphaLightColor.rgb[1] = (float)( (nAlphaLightState>>8) & 0xff ); _AlphaLightColor.rgb[0] = (float)( nAlphaLightState & 0xff); _nAlphaLightState = nAlphaLightState; } return nPreviousState; } /* Clears the active light list.*/ /* Invalidates all Light and Dark Frames.*/ /* If you simply want to temporarily disable all current lights*/ /* on the light stack while drawing your object, use*/ /* mesh3d_Cleh‹}F��������=ßÕ�ˆµõî·od#�d,g?ŸÚAì–N4�7F@�[³$�;•,Óú�JbúŒ�{{uú2p)ôÀ7‚[�HAæÍ˶�:§uò ûãÕ�¦�œ\În�A,Åæùc͆‹Ý·<�v"]��,ŒŸr™ƒK�_iMS?`ìÃR%väQ‹Òo�[›Ð�†Z��…Nof¦µd° # <˜ËÛï^,ï�ën葚Ω¢'èL´Jbv?ìÒ�U"»���Ãc�¼LõcX–ûÑó`ª¼‚W¯�oؤ¼Á”à1[Ú#ˆëÊˉ�l´À%dp�z¦b©¼Ùà+HÁ‚ëîN�i Æ�Êh:ý©Z���WHh ��7•^ÃÐTͺƒ7Ïë™^�ÅÏ�ÿÿÿÿÿÿÿÿÿÿ�%G�arLightFrame() instead.*/ void mesh3d_ClearLightList( void ) { _nNumLights = 0; _nLightListStartIndex = 0; _ppLightList = _apLightList; } /* Starts a lighting frame. The value returned can be passed to*/ /* mesh3d_ReleaseLightFrame() to restore the lighting stack state.*/ /* All lights currently in the mesh3d light buffer remain in effect*/ /* and will light objects drawn with mesh3d_Draw() or associated*/ /* functions. To clear the current frame to black, use*/ /* mesh3d_ClearLightFrame().*/ u32 mesh3d_StartLightFrame( void ) { return (_nNumLights | (_nLightListStartIndex<<16) ); } /* Disables all lights in the current light frame.*/ /* Should be called only when a call to mesh3d_StartLightFrame()*/ /* has previously been made.*/ void mesh3d_ClearLightFrame( void ) { _nLightListStartIndex = _nNumLights; _ppLightList = &_apLightList[_nLightListStartIndex]; _nNumLights = 0; } /* Restores the lighting stack to its state at the time nLightFrame*/ /* was sampled.*/ void mesh3d_ReleaseLightFrame( u32 nLightFrame ) { _nNumLights = nLightFrame & 0xffff; _nLightListStartIndex = nLightFrame>>16; _ppLightList = &_apLightList[_nLightListStartIndex]; } /* Adds a light to the active light list.*/ /* If the light already exists in the list, simply returns (TRUE).*/ /* Returns TRUE if successful.*/ /* Returns FALSE if the light list is full.*/ BOOL mesh3d_AddLight( MidwayLight_t *pLight ) { u32 nNewFlags; u32 i; for( i=0; i<_nNumLights; i++ ) { if( _ppLightList[i] == pLight ) { /* Light already exists in list. Simply exit...*/ return TRUE; } } switch( pLight->nType ) { case LIGHT_TYPE_OMNI: nNewFlags = LIGHT_FLAG_HASPOS; break; case LIGHT_TYPE_DIR: case LIGHT_TYPE_FLASH: nNewFlags = LIGHT_FLAG_HASDIR; break; case LIGHT_TYPE_SPOT: nNewFlags = LIGHT_FLAG_HASPOS|LIGHT_FLAG_HASDIR; break; default: XASSERT_NOW; /* Invalid light nType field*/ } if( _nNumLights < MESH3D_MAX_ACTIVE_LIGHTS ) { _ppLightList[_nNumLights+Ê£0@��������àQ�²Áä‘…Ž¦b��Ïü—‰}]s�ø)Måó0ž]�NÐ`hÀ4 †MCñ�ô“®Ä�”îñµË��>*ñÈÜØ�|^"kšÔ0�ÿs$D¹Š�p+0Þdl �˜½”’Ÿ†èKõEAßÜɻ͑ ��B?&ß·]¬)O�«@fÕE�®�`Á�©ñÏîÎWÝ›šÒë\}U~—íµ?����¤�,“Œè|Ê=Q''ÓÌKc‚t¤W]é#Ín� À’ÉL©w�¸¹Õ0ûCè¡¥4”´õ¾ø#ð¸ã�ŽÜ¢åš*ÎBýfZÑÅ�¬jVQÊ0�1Sl},…©X²�.ž�ÚKã‡�c7ñ�L‘X®[™ç=ó à'Í�ÈÐ�ÿÿÿÿÿÿÿÿÿÿ�%H�+] = pLight; pLight->nFlags &= ~(LIGHT_FLAG_HASPOS|LIGHT_FLAG_HASDIR); pLight->nFlags |= nNewFlags; return TRUE; } else { if( Gameloop_nFrameCounter > _nNextPrintedMsgFrameCounter ) { xprintferr( "WARNING: More than %d dynamic lights\nlighting an object.\n", MESH3D_MAX_ACTIVE_LIGHTS ); _nNextPrintedMsgFrameCounter = Gameloop_nFrameCounter+30; } return FALSE; } } static void _ComputeOmniLight( void ) { register float fLightDist2,x,y,z,fDot; register MidwayLight_t *pLight; register s32 i; x = _Vtx[3]; y = _Vtx[4]; z = _Vtx[5]; for(i = _nNumPosGrpLights-1; i >= 0; --i) { pLight = _apPosGrpLight[i]; { register fLx,fLy,fLz; /* Calculate light vector from vertex to light (toward light)...*/ fLx = pLight->ModSpacePos.p[0] - x; fLy = pLight->ModSpacePos.p[1] - y; fLz = pLight->ModSpacePos.p[2] - z; fLightDist2 = fLx*fLx + fLy*fLy + fLz*fLz; if( fLightDist2 > pLight->fModSpaceRadius2 ) continue; fDot = _Vtx[0]*fLx + _Vtx[1]*fLy + _Vtx[2]*fLz; if( fDot < 0 ) continue; } { float fInvLightDist,fRadialAtten,fIntensity; /* Vertex is within light's range... */ fInvLightDist = fsrra(fLightDist2); fRadialAtten = (pLight->fModSpaceRadius2 - pLight->fRadialAttenuation*fLightDist2) * pLight->fModSpaceInvRadius2; if( !(pLight->bNoIncidenceAtten|_bMaterialNoIncidenceAtten) ) { fIntensity = fRadialAtten * fDot * fInvLightDist; } else { fIntensity = fRadialAtten; } _fRGBA[0] += pLight->ScaledColor.rgb[2] * fIntensity; _fRGBA[1] += pLight->ScaledColor.rgb[1] * fIntensity; _fRGBA[2] += pLight->ScaledColor.rgb[0] * fIntensity; } } } static void _ComputeDirLight( void ) { register float fDot,x,y,z; register MidwayLight_t *pLight; register s32 i; x = _Vtx[0]; y = _Vtx[1]; z = _Vtx[2]; for(i = _nNumDirGrpLights-1; i >=0; --i) { pLight = _apDirGrpLight[i]; /* Get light vector from vertex to light (toward light)... */ { å.eÐ��������¯f�Œé¸ƒ�<JÑh�6É�ŸñÁ‡P�Æi�çr^¯±&BŸ²ôj�!wð¥�MfÌGT�éòÚ®ºß6²´C�}PIkÙ�hÚ^_�Ûú®Þäo:²¢‰vƒWmg,"oð„ë�'fˆ�M"ý^…ÛÐà-�Ë�{Ã��‘ÿ�TÕ—TGb/ÿêkÓli›Ton¶ù•Âœ©Uà«94N/FV�+£h>!±ÒDñX²å–€-âJ^L�r’óá†Hu«yVQ%�ÒÚÌÎqã*Çø —�÷pŽëœ<öŽÆ�óæ0ó��ÐØ6Ó=ô¬}û58ª/€h¿õæÅöäYöÃé± Ö®~‰8?�bKFŸ›h �à�b–g@PËÍZLaû�¼S×�ÿÿÿÿÿÿÿÿÿÿ�%I� register float fLx,fLy,fLz; fLx = pLight->ModSpaceUnitDir.p[0]; fLy = pLight->ModSpaceUnitDir.p[1]; fLz = pLight->ModSpaceUnitDir.p[2]; fDot = x * fLx + y * fLy + z * fLz; if(fDot <= 0 ) continue; } { register float r,g,b; r = pLight->ScaledColor.rgb[2]; g = pLight->ScaledColor.rgb[1]; b = pLight->ScaledColor.rgb[0]; if( !(pLight->bNoIncidenceAtten|_bMaterialNoIncidenceAtten) ) { _fRGBA[0] += r * fDot; _fRGBA[1] += g * fDot; _fRGBA[2] += b * fDot; } else { _fRGBA[0] += r; _fRGBA[1] += g; _fRGBA[2] += b; } } } } static void _ComputeSpotLight( void ) { float fIntensity, fDot, fDot2, fLightDist2, fInvLightDist; float fSpotAtten, fLx, fLy, fLz, fRx, fRy, fRz; float fRadialAtten, fDx, fDy, fDz, fT1, fT2, fT3, fT4; MidwayLight_t *pLight; u32 i; for( i=0; i<_nNumSpotGrpLights; i++ ) { pLight = _apSpotGrpLight[i]; /* Calculate light vector from vertex to light (toward light)... */ fLx = pLight->ModSpacePos.p[0] - _Vtx[3]; fLy = pLight->ModSpacePos.p[1] - _Vtx[4]; fLz = pLight->ModSpacePos.p[2] - _Vtx[5]; fLightDist2 = fLx*fLx + fLy*fLy + fLz*fLz; if( fLightDist2 > pLight->fModSpaceRadius2 ) continue; /* Vertex is within light's range... */ fDot = _Vtx[0]*fLx + _Vtx[1]*fLy + _Vtx[2]*fLz; if( fDot <= 0.00001f ) continue; /* Calculate attenuation based on spotlight direction... */ fDx = pLight->ModSpaceUnitDir.p[0]; fDy = pLight->ModSpaceUnitDir.p[1]; fDz = pLight->ModSpaceUnitDir.p[2]; fDot2 = fDx*fLx + fDy*fLy + fDz*fLz; if( fDot2 <= 0.00001f ) continue; fInvLightDist = 1.0f / xmath_sqrt( fLightDist2 ); fDot2 *= fInvLightDist; switch( pLight->nSpotFocusCode ) { case SPOTLIGHT_FOCUS_WIDEST: fT1 = fDot2*fDot2*fDot2; break; case SPOTLIGHT_FOCUS_WIDER: fT2 = fDot2*fDot2*fDot2; fT1 = fT2*fT2; break; case SPOTLIGHT_FOCUS_WIDE: fT2 = fDot2*fDot2*fDot2; fT1 = fT2*fT2*fT2; break; case SPOTLIGHT_
wpr_select.c
Found at 1xF15AAD0:
/*////////////////////////////////////////////////////////////////////////////////////*/ /* wpr_select.c - */ /**/ /* Author: Michael Starich */ /*////////////////////////////////////////////////////////////////////////////////////*/ /* THIS CODE IS PROPRIETARY PROPERTY OF MIDWAY HOME ENTERTAINMENT.*/ /* Copyright (c) 1998*/ /**/ /* The contents of this file may not be disclosed to third*/ /* parties, copied or duplicated in any form, in whole or in part,*/ /* without the prior written permission of Midway Home Entertainment.*/ /*////////////////////////////////////////////////////////////////////////////////////*/ /* Modification History:*/ /**/ /* Date Who Description*/ /* -------- ---------- --------------------------------------------------------------*/ /* 03/30/98 Starich Created.*/ /*////////////////////////////////////////////////////////////////////////////////////*/ #include "gendefs.h" #include "wpr_select.h" #include "wpr_memmgr.h" #include "wpr_defs.h" #include "gutil.h" #include "text.h" #include "controls.h" #include "tracks.h" #include "boats.h" #include "glcount.h" #include "xmath.h" #include "obsys.h" #include "xfm.h" #include "terrain.h" #include "waterspray.h" #include "player.h" #include "paths.h" #include "mesh3d.h" #include "particle.h" #include "material.h" #include "worldob.h" #include "sky.h" #include "audio.h" #include "soundcall.h" #include "fx.h" #include "fx_splash.h" #include "fx_particles.h" #include "gameloop.h" #include "bonuskeys.h" #include "statemgr.h" #if TARGET==ULTRA64 /* Extra includes */ #include "u64draw.h" #include "u64control.h" #endif /*ULTRA64*/ /*====================*/ /* private definitions*/ #define _SELECT_FILE_LOGGING_ON 0 #define _FIRE_VOLUME 200 #define _BLING_SELECT_SOUND_VOLUME 255 #define _OPTION_SLOTS 6 #define _DEFAULT_OPTION_SLOT 2 //#define _TRACK_SLOTS 10 #define _TRACK_SLOTS 12 #define _DEFAULT_TRACK_SLOT 3 #define _NUM_FIRE_FRAMES 10 #define _MAX_SELECTIONS_PER_OBJECT 2 #define _BOAT_SLOTS 13 /* NUMBER OF SELECTABLE BOATS AT ANY ONE TIME*/ #define _NUM_SELECTABLE_BOATS _BOAT_SLOTS /* how many boats are there to select from (some are secrets)*/ #define _DEFAULT_BOAT_SLOT 4 #define _DEFAULT_BOAT_DIFF_SLOT 1 #define _MAX_SCREEN_AREA_SUM (512.0f * 400.0f * 10.0f) #if TARGET==ULTRA64 /*Reduce waterspray polygon limie for select screen*/ #define _MAX_NUM_WATERSPRAY_PARTICLES 50 #else /*ULTRA64*/ #define _MAX_NUM_WATERSPRAY_PARTICLES 500 #endif /*ULTRA64*/ /* screen placement (ortho space, center of screen origin)*/ #define _TRACK_SCREEN_X 0.0f #define _TRACK_SCREEN_Y -20.0f #define _TRACK_FRAME_SHADOW_X ( _TRACK_SCREEN_X + 1.0f ) #define _TRACK_FRAME_SHADOW_Y ( _TRACK_SCREEN_Y - 2.0f ) #define _TRACK_OVAL_SHADOW_X 5.0f #define _TRACK_OVAL_SHADOW_Y -4.0f #define _CHOOSE_TRACK_Y 172.0f #define _CHOOSE_TRACK1_X -60.0f #define _CHOOSE_TRACK2_X 76.0f #define _TRACK_COLUMN_1 -185.0f /* left most col*/ #define _TRACK_COLUMN_2 -185.0f /* 2nd from left*/ #define _TRACK_COLUMN_3 -63.0f /* 3rd from left*/ #define _TRACK_COLUMN_4 63.0f /* 4th from left*/ #define _TRACK_COLUMN_5 180.0f /* 5th from the left*/ #define _TRACK_COLUMN_6 180.0f /* right most col*/ #define _TRACK_ROW_1 130.0f /* top row */ #define _TRACK_ROW_2 98.0f /* 4th from bottom row*/ #define _TRACK_ROW_3 5.0f /* 3rd from bottom row*/ #define _TRACK_ROW_4 -49.0f /* 2nd from bottom row*/ #define _TRACK_ROW_5 -124.0f /* bottom row*/ #define _TRACK_ROW_6 -155.0f /* bottom bottom row*/ #define _CHOOSE_BOAT_Y 172.0f #define _CHOOSE_BOAT1_X -52.0f #define _CHOOSE_BOAT2_X 72.0f #define _BOAT_FRAME_X 4.0f #define _BOAT_FRAME_Y -39.0f #define _BOAT_SHADOW_X 0.0f #define _BOAT_SHADOW_Y -6.0f #define _BOAT_NAME_X 0.0f #define _BOAT_NAME_Y -102.0f #define _BOAT_COLUMN_1 -201.0f /* left most col*/ #define _BOAT_COLUMN_2 -117.0f /* 2nd from left*/ #define _BOAT_COLUMN_3 -4.0f /* 3rd from left*/ #define _BOAT_COLUMN_4 118.0f /* 4th from left*/ #define _BOAT_COLUMN_5 201.0f /* 5th from left*/ #define _BOAT_ROW_1 -120.0f /* bottom row*/ #define _BOAT_ROW_2 -37.0f /* 2nd from bottom row*/ #define _BOAT_ROW_3 34.0f /* 3rd from bottom row*/ #define _BOAT_ROW_4 123.0f /* top row */ #define _TEXT_OPTION_X 0 #define _TEXT_OPTION_Y 162.0f #define _ICON_BUTT_X 200.0f #define _ICON_BUTT_Y 162.0f #define _ICON_ANALOG_X -200.0f #define _ICON_ANALOG_Y 162.0f #define _ICON_GAMEBAR_X -4.0f #define _ICON_GAMEBAR_Y 102.0f #define _ICON_CONFIGBAR_X -199.0f #define _ICON_CONFIGBAR_Y -43.0f #define _ICON_OPTIONBAR_X 201.0f #define _ICON_OPTIONBAR_Y -43.0f #define _ICON_CONFIGCTRL_X -189.0f #define _ICON_CONFIGCTRL_Y 10.0f #define _ICON_VMS_X -189.0f #define _ICON_VMS_Y -80.0f #define _ICON_SOUNDVOL_X 191.0f #define _ICON_SOUNDVOL_Y 10.0f #define _ICON_HIGHSCORES_X 191.0f #define _ICON_HIGHSCORES_Y -80.0f #define _ICON_ONEPLAYER_X -120.0f #define _ICON_ONEPLAYER_Y 122.0f #define _ICON_TWOPLAYER_X 100.0f #define _ICON_TWOPLAYER_Y 132.0f typedef struct { BOOL8 bEnabled; BOOL8 bCurrent; u8 nNumSelections; u8 nCurrentSelection; s16 anTrackNum[_MAX_SELECTIONS_PER_OBJECT]; u16 nDifficultyBar; u16 nArrayIndex; u32 anSelectionSound[_MAX_SELECTIONS_PER_OBJECT]; Mesh3d_t *apScreenShot[_MAX_SELECTIONS_PER_OBJECT]; Mesh3d_t *apSelectedIcon[_MAX_SELECTIONS_PER_OBJECT]; Mesh3d_t *apUnSelectedIcon[_MAX_SELECTIONS_PER_OBJECT]; Mesh3d_t *apTitle[_MAX_SELECTIONS_PER_OBJECT]; Mesh3d_t *pScreenShotFrameShadow; Mesh3d_t *pIconShadow; f32 fMinSteeringRange; f32 fMaxSteeringRange; f32 fX; f32 fY; u16 bBonusTrack; } TrackSelectionObject_t; typedef struct { BOOL8 bEnabled; BOOL8 bCurrent; u8 nNumSelections; u8 nCurrentSelection; s16 anBoatNum[_MAX_SELECTIONS_PER_OBJECT]; u16 nDifficultyBar; u16 nArrayIndex; Player_t *apPlayer[_MAX_SELECTIONS_PER_OBJECT]; WorldOb_t *apWorldOb[_MAX_SELECTIONS_PER_OBJECT]; Motion_t *apMotion[_MAX_SELECTIONS_PER_OBJECT]; u32 anSelectionSound[_MAX_SELECTIONS_PER_OBJECT]; Mesh3d_t *apBoatIcon[_MAX_SELECTIONS_PER_OBJECT]; Mesh3d_t *apBoatShadow[_MAX_SELECTIONS_PER_OBJECT]; Mesh3d_t *apTitle[_MAX_SELECTIONS_PER_OBJECT]; f32 fMinSteeringRange; f32 fMaxSteeringRange; f32 fX; f32 fY; } BoatSelectObject_t; typedef struct { BOOL bEnabled; BOOL bCurrent; u32 nNumSelections; u32 nCurrentSelection; u32 nArrayIndex; Mesh3d_t *pIcon; f32 fMinSteeringRange; f32 fMaxSteeringRange; f32 fX; f32 fY; } OptionSelectObject_t; typedef enum { _CODES_NO_AI = 0x1, _CODES_NO_CATCHUP = 0x2, _CODES_ADVANCED_BOATS = 0x4, _CODES_SECRET_TRACKS = 0x8, _CODES_SECRET_BOATS = 0x10, _CODES_NONE = 0 } SpecialCodes_t; /*=================*/ /* public variables*/ /*==================*/ /* private variables*/ static BOOL _aTrackDiffBarEnabled[5]={ FALSE, FALSE, TRUE, FALSE, FALSE, }; const static Vec2_t _aTrackDiffBar[5] = { -185.0f, -158.0f,/* BONUS1*/ -186.0f, -19.0f, /* YELLOW*/ 0.0f, 0.0f, /* BLUE (not used, see _aTrackBlueDiffBar)*/ 178.0f, -21.0f, /* RED*/ 180.0f, -158.0f,/* BONUS2*/ }; const static Vec2_t _aTrackBlueDiffBar[3] = { -75.0f, 103.0f, /* LEFT*/ 72.0f, 103.0f, /* RIGHT*/ 0.0f, 78.0f, /* EASY*/ }; const static Vec2_t _aBoatDiffBar[3] = { -199.0f, -43.0f, /* YELLOW*/ -4.0f, 102.0f, /* BLUE*/ 201.0f, -43.0f, /* RED*/ }; static BOOL _aBoatDiffBarsEnabled[3]={ FALSE, TRUE, FALSE }; const static Vec2_t _afBoatYCamLookup[_NUM_SELECTABLE_BOATS] = { 18.0f, 6.0f, /* BOATS_TYPE_BANSHEE*/ 18.0f, 3.0f, /* BOATS_TYPE_TIDAL_BLADE*/ 18.0f, 4.0f, /* BOATS_TYPE_RAD_HAZARD*/ 18.0f, 6.0f, /* BOATS_TYPE_MISS_BEHAVE*/ 16.0f, 5.0f, /* BOATS_TYPE_DAMN_THE_TORPEDOES*/ 18.0f, 2.0f, /* BOATS_TYPE_CUT_THROAT*/ 18.0f, 4.0f, /* BOATS_TYPE_RAZORBACK*/ 18.0f, 5.0f, /* BOATS_TYPE_THRESHER*/ 18.0f, 6.0f, /* BOATS_TYPE_MIDWAY*/ #if TARGET!=ULTRA64 /*Don't allow secret boats*/ 18.0f, 6.0f, /* BOATS_TYPE_SEADOG*/ 26.0f, 7.0f, /* BOATS_TYPE_COP*/ 28.0f, 13.0f,/* BOATS_TYPE_HOVERCRAFT*/ 26.0f, 4.0f, /* BOATS_TYPE_TINY */ #endif /*ULTRA64*/ }; const static Vec2_t _afBoatZoomCamLookup[_NUM_SELECTABLE_BOATS] = { 7.0, 28.0f, /* BOATS_TYPE_BANSHEE*/ 5.0, 35.0f, /* BOATS_TYPE_TIDAL_BLADE*/ 7.0, 28.0f, /* BOATS_TYPE_RAD_HAZARD*/ 5.0, 28.0f, /* BOATS_TYPE_MISS_BEHAVE*/ 7.0, 33.0f, /* BOATS_TYPE_DAMN_THE_TORPEDOES*/ 5.0, 28.0f, /* BOATS_TYPE_CUT_THROAT*/ 3.0, 26.0f, /* BOATS_TYPE_RAZORBACK*/ 4.0, 32.0f, /* BOATS_TYPE_THRESHER*/ 7.0, 32.0f, /* BOATS_TYPE_MIDWAY*/ #if TARGET!=ULTRA64 /*Don't allow secret boats*/ 7.0, 26.0f, /* BOATS_TYPE_SEADOG*/ 7.0, 50.0f, /* BOATS_TYPE_COP*/ 9.0, 41.0f, /* BOATS_TYPE_HOVERCRAFT*/ 5.0, 65.0f, /* BOATS_TYPE_TINY */ #endif /*ULTRA64*/ }; #if TARGET==ULTRA64 /* Scale boat icons offsets */ #define BSELOX(var) (((var)*0.2)/2.0) #define BSELOY(var) (((var)*0.2)/2.0) const static f32 _afBoatScaleOffsetX[] = { -BSELOX(98), /* BOATS_TYPE_THRESHER */ -BSELOX(83), /* BOATS_TYPE_TIDAL_BLADE */ -BSELOX(79), /* BOATS_TYPE_BANSHEE */ -BSELOX(81), /* BOATS_TYPE_DAMN_THE_TORPEDOES */ -BSELOX(39), /* BOATS_TYPE_MIDWAY */ -BSELOX(80), /* BOATS_TYPE_MISS_BEHAVE */ -BSELOX(81), /* BOATS_TYPE_CUT_THROAT */ -BSELOX(79), /* BOATS_TYPE_RAD_HAZARD */ -BSELOX(82), /* BOATS_TYPE_RAZORBACK */ }; const static f32 _afBoatScaleOffsetY[] = { -BSELOY(47), /* BOATS_TYPE_THRESHER */ -BSELOY(37), /* BOATS_TYPE_TIDAL_BLADE */ -BSELOY(32), /* BOATS_TYPE_BANSHEE */ -BSELOY(26), /* BOATS_TYPE_DAMN_THE_TORPEDOES */ -BSELOY(33), /* BOATS_TYPE_MIDWAY */ -BSELOY(34), /* BOATS_TYPE_MISS_BEHAVE */ -BSELOY(30), /* BOATS_TYPE_CUT_THROAT */ -BSELOY(34), /* BOATS_TYPE_RAD_HAZARD */ -BSELOY(49), /* BOATS_TYPE_RAZORBACK */ }; #endif /*ULTRA64*/ /* MISC VARS USED FOR ALL MODES*/ static WprSelectStage_t _StageNum; /* what selection mode are we in*/ static BOOL _bAllowSelectionChanges;/* should we allow the current slot to be changed*/ static BOOL _bTexturesLoaded; /* were we able to load all needed artwork, if not use old wrapper text system*/ static f32 _fScreenFadeIntensity; static u32 _nDelayVoice; /* are we waiting to play a voice selection*/ static u32 _nDelayedVoiceSelection;/* what sample are we waiting to play*/ static f32 _fFlameScale; /* what is the current flame scale;*/ static BOOL _bNoAiCodeEntered; /* has the no ai code been satisfied*/ static u32 _nNoAiCodeState; /* what state is the no ai code in*/ static BOOL _bNoCatchUpCodeEntered; /* has the no catchup code been satisfied*/ static u32 _nNoCatchUpCodeState; /* what state is the no catchup code in*/ static BOOL _bAdvancedBoatsCodeEntered; /* has the code or requirement been met to select advanced boats*/ static u32 _nTrackCodeCount; static u32 _nTrackCodeState; static u32 _nBoatCodeCount; static u32 _nBoatCodeState; static u32 _nCurrentBar = 1; /* TRACK SELECTION VARS*/ static TrackSelectionObject_t *_pCurrentSelectedTrack; static TrackSelectionObject_t _aTrackSelections[_TRACK_SLOTS]; /* BOAT SELECTION VARS*/ static BoatSelectObject_t *_pCurrentSelectedBoat; static BoatSelectObject_t _aBoatSelections[_BOAT_SLOTS]; /* OPTION SELECTION VARS */ static OptionSelectObject_t *_pCurrentSelectedOption; static OptionSelectObject_t _aOptionSelections[_OPTION_SLOTS]; static u32 _nBoatSlot; /* which boat slot is currently selected (index into our table for actual boat)*/ static u32 _nBoatDiff; /* what difficulty slot is the currently selected boat (index into our table)*/ static Player_t _aPlayer[_NUM_SELECTABLE_BOATS]; static WorldOb_t _aWorldOb[_NUM_SELECTABLE_BOATS]; static Motion_t _aMotion[_NUM_SELECTABLE_BOATS]; static Cam_t _Camera; static u32 _nCamAngle; static Vec3_t _CamPos; static Vec3_t _CamLook; static PathLoopInstance_t _aLoopPath[_NUM_SELECTABLE_BOATS]; static Vec2_t _aPathPos[_NUM_SELECTABLE_BOATS]; static u32 _naPathIndex[_NUM_SELECTABLE_BOATS]; static u32 _nCounter; static BOOL _bSpecialFlashOn; static f32 _afBoatsTopEnd[_NUM_SELECTABLE_BOATS]; /* MESHES FOR BOTH MODES*/ static Mesh3d_t *_pTrackBG; static Mesh3d_t *_pBoatBG; static Mesh3d_t *_pText_ChooseA; static Mesh3d_t *_pText_Track; static Mesh3d_t *_pText_Boat; static Mesh3d_t *_pText_Numbers[10]; static Mesh3d_t *_pText_Select; static Mesh3d_t *_pText_Accept; static Mesh3d_t *_pText_Difficulty[TRACKS_DIFFICULTY_COUNT]; static Mesh3d_t *_pIcon_Wheel; static Mesh3d_t *_pIcon_Wheel_Shadow; static Mesh3d_t *_pIcon_Throttle; static Mesh3d_t *_pIcon_Arrow; static Mesh3d_t *_pOffFrame[4]; static Mesh3d_t *_pOnFrame[4]; static Mesh3d_t *_pTrackFrameShadow; static Mesh3d_t *_pTrackDiffBars[5]; static Mesh3d_t *_pTrackScreens[TRACKS_COUNT]; static Mesh3d_t *_pText_TrackNames[TRACKS_COUNT]; static Mesh3d_t *_pTrackShadows; static Mesh3d_t *_pTrackTextEasy; static Mesh3d_t *_pLeftBlueBar; static Mesh3d_t *_pLock; static Mesh3d_t *_pHardTrackText; static Mesh3d_t *_pBoatPics[_NUM_SELECTABLE_BOATS]; static Mesh3d_t *_pBoatShadows[_NUM_SELECTABLE_BOATS]; static Mesh3d_t *_pBoatDiffBars[3]; static Mesh3d_t *_pText_BoatNames[_NUM_SELECTABLE_BOATS]; static Mesh3d_t *_pBoatFrame; static Mesh3d_t *_pBoatFrameShadow; /*static Mesh3d_t *_pComingSoon;*/ static Mesh3d_t *_pFlame; static TexDef_t *_pFireCell[_NUM_FIRE_FRAMES]; static Mesh3d_t *_pNoAiIcon; static Mesh3d_t *_pNoCatchUpIcon; static Mesh3d_t *_pBoatBG; static Mesh3d_t *_pIcon_Analog; static Mesh3d_t *_pIcon_Button; static Mesh3d_t *_pIcon_Boats; static Mesh3d_t *_pIcon_Vms; static Mesh3d_t *_pIcon_Volume; static Mesh3d_t *_pIcon_SplitScreen; static Mesh3d_t *_pIcon_PuruPuru; static Mesh3d_t *_pIcon_ConfigBar; static Mesh3d_t *_pIcon_GameBar; static Mesh3d_t *_pIcon_ConfigCtrl; static Mesh3d_t *_pIcon_OptionBar; static Mesh3d_t *_pIcon_HighScores; static Mesh3d_t *_pIcon_OnePlayer; static Mesh3d_t *_pIcon_TwoPlayer; static Mesh3d_t *_pText_Option; static Mesh3d_t *_pText_ConfigCtrl; static Mesh3d_t *_pText_OnePlayer; static Mesh3d_t *_pText_TwoPlayer; static Mesh3d_t *_pText_ChooseTrack; static Mesh3d_t *_pText_ConfigRumble; static Mesh3d_t *_pText_LoadSave; static Mesh3d_t *_pText_MusicSfx; static Mesh3d_t *_pText_SplitScreen; static Mesh3d_t *_pText_HighScores; static Mesh3d_t *_pText_ConfigRumble; static Mesh3d_t *_pText_Option1; static Mesh3d_t *_pText_SelectText; static Mesh3d_t *_pText_AcceptText; static Mesh3d_t *_LeftGreenBar; static Mesh3d_t *_MiddleGreenBar; static Mesh3d_t *_RightGreenBar; static Mesh3d_t *_RedLockIcon; static Mesh3d_t *_BlueLockIcon; static Mesh3d_t *_YellowLockIcon; static Mesh3d_t *_GreenLockIcon; static ObsysLoadDef_t aOptionsLoadTable[] = { // Background and frame (void *)&_pBoatFrame, "GWWFRAMBSH1", (void *)&_pBoatFrameShadow, "GWWFRAMSHH2", (void *)&_pBoatBG, "GWWBOASBGH0", // Icons and text (void *)&_pIcon_Analog, "GWWANALICH1", (void *)&_pIcon_Button, "GWWABUTICH0", (void *)&_pIcon_Boats, "GWWTWOPICH1", (void *)&_pIcon_Vms, "GWWVMSSICH1", (void *)&_pIcon_Volume, "GWWVOLUICH1", (void *)&_pIcon_SplitScreen, "GWWSPLIICH1", (void *)&_pIcon_PuruPuru, "GWWPURUICH0", (void *)&_pIcon_ConfigBar, "GWWPBARINH1", (void *)&_pIcon_GameBar, "GWWPBARBEH1", (void *)&_pIcon_OptionBar, "GWWPBARADH1", (void *)&_pIcon_ConfigCtrl, "GWWJOYPICH1", (void *)&_pIcon_HighScores, "GWWCHAMICH1", (void *)&_pIcon_OnePlayer, "GWWDAMNICH1", (void *)&_pIcon_TwoPlayer, "GWWDAMIICH2", (void *)&_pText_Option, "GWWHYDR__H1", (void *)&_pText_Option1, "GWWTHUN__H1", (void *)&_pText_ConfigCtrl, "GWWTEXA__H1", (void *)&_pText_OnePlayer, "GWWTEXB__H1", (void *)&_pText_TwoPlayer, "GWWTEXC__H1", (void *)&_pText_ChooseTrack, "GWWTEXD__H1", (void *)&_pText_ConfigRumble, "GWWTEXE__H1", (void *)&_pText_LoadSave, "GWWTEXF__H1", (void *)&_pText_MusicSfx, "GWWTEXG__H1", (void *)&_pText_SplitScreen, "GWWTEXH__H1", (void *)&_pText_HighScores, "GWWTEXI__H1", (void *)&_pText_ConfigRumble, "GWWTEXJ__H1", (void *)&_pText_SelectText, "GWWSELE__H1", (void *)&_pText_AcceptText, "GWWACCE__H1", NULL, NULL }; static ObsysLoadDef_t aBoatSelectLoadTable[] = { /* BACKGROUNDS*/ (void *)&_pBoatBG, "GWWBOASBGH0", /* MISC*/ #if TARGET!=ULTRA64 /* No track select shadows */ (void *)&_pText_ChooseA, "GWWCHOO__H1", (void *)&_pText_Boat, "GWWBOAT__H1", #endif /*ULTRA64*/ (void *)&_pText_Numbers[0], "GWWTIME__H0", /* 0*/ (void *)&_pText_Numbers[1], "GWWTIME__H1", /* 1*/ (void *)&_pText_Numbers[2], "GWWTIME__H2", /* 2*/ (void *)&_pText_Numbers[3], "GWWTIME__H3", /* 3*/ (void *)&_pText_Numbers[4], "GWWTIME__H4", /* 4*/ (void *)&_pText_Numbers[5], "GWWTIME__H5", /* 5*/ (void *)&_pText_Numbers[6], "GWWTIME__H6", /* 6*/ (void *)&_pText_Numbers[7], "GWWTIME__H7", /* 7*/ (void *)&_pText_Numbers[8], "GWWTIME__H8", /* 8*/ (void *)&_pText_Numbers[9], "GWWTIME__H9", /* 9*/ (void *)&_pText_SelectText, "GWWSELE__H1", (void *)&_pText_AcceptText, "GWWACCE__H1", (void *)&_pText_Difficulty[0], "GWWNOVI__H1", /* NOVICE*/ (void *)&_pText_Difficulty[1], "GWWBEGI__H1", /* EASY*/ (void *)&_pText_Difficulty[2], "GWWINTE__H1", /* MEDIUM*/ (void *)&_pText_Difficulty[3], "GWWADVA__H1", /* HARD*/ (void *)&_pText_Difficulty[4], "GWWEXPE__H1", /* EXPERT*/ (void *)&_pIcon_Wheel, "GWWWHEEICH1", (void *)&_pIcon_Wheel_Shadow, "GWWWHEESHH1", (void *)&_pIcon_Throttle, "GWWTHOTICH0", (void *)&_pIcon_Arrow, "GWWARRO__H1", /* (void *)&_pComingSoon, "GWWTEXT_XHX", // coming soon*/ (void *)&_pFlame, "GWWSELEFLH0", /* Flame*/ (void *)&_pFireCell[0], "T_FFIRE_A20", (void *)&_pFireCell[1], "T_FFIRE_A21", (void *)&_pFireCell[2], "T_FFIRE_A22", (void *)&_pFireCell[3], "T_FFIRE_A23", (void *)&_pFireCell[4], "T_FFIRE_A24", (void *)&_pFireCell[5], "T_FFIRE_A25", (void *)&_pFireCell[6], "T_FFIRE_A26", (void *)&_pFireCell[7], "T_FFIRE_A27", (void *)&_pFireCell[8], "T_FFIRE_A28", (void *)&_pFireCell[9], "T_FFIRE_A29", (void *)&_pNoAiIcon, "GWWICONAIH1", /* no ai icon*/ (void *)&_pNoCatchUpIcon, "GWWICONNCH1", /* no catchup code icon*/ /* BOAT SELECT */ /* BOAT ICONS*/ (void *)&_pBoatPics[BOATS_TYPE_BANSHEE], "GWWBANSICH1", (void *)&_pBoatPics[BOATS_TYPE_TIDAL_BLADE], "GWWTIDAICH1", (void *)&_pBoatPics[BOATS_TYPE_RAD_HAZARD], "GWWRADHICH1", (void *)&_pBoatPics[BOATS_TYPE_MISS_BEHAVE], "GWWMISSICH1", (void *)&_pBoatPics[BOATS_TYPE_DAMN_THE_TORPEDOES], "GWWDAMNICH1", (void *)&_pBoatPics[BOATS_TYPE_CUT_THROAT], "GWWCUTTICH1", (void *)&_pBoatPics[BOATS_TYPE_RAZORBACK], "GWWRAZRICH1", (void *)&_pBoatPics[BOATS_TYPE_THRESHER], "GWWTHREICH0", (void *)&_pBoatPics[BOATS_TYPE_MIDWAY], "GWWMIDWICH0", #if TARGET!=ULTRA64 /*Don't allow secret boats*/ (void *)&_pBoatPics[BOATS_TYPE_SEADOG], "GWWSEADICH1", (void *)&_pBoatPics[BOATS_TYPE_COP], "GWWCOPBICH1", (void *)&_pBoatPics[BOATS_TYPE_HOVERCRAFT], "GWWHOVRICH1", (void *)&_pBoatPics[BOATS_TYPE_TINY], "GWWTINYICH1", #endif /*ULTRA64*/ /* BOAT SHADOWS*/ #if TARGET!=ULTRA64 /* No boat shadows and easy/medium/hard icons */ (void *)&_pBoatShadows[BOATS_TYPE_BANSHEE], "GWWBANSSHH1", (void *)&_pBoatShadows[BOATS_TYPE_TIDAL_BLADE], "GWWTIDASHH1", (void *)&_pBoatShadows[BOATS_TYPE_RAD_HAZARD], "GWWRADHSHH1", (void *)&_pBoatShadows[BOATS_TYPE_MISS_BEHAVE], "GWWMISSSHH1", (void *)&_pBoatShadows[BOATS_TYPE_DAMN_THE_TORPEDOES], "GWWDAMNSHH1", (void *)&_pBoatShadows[BOATS_TYPE_CUT_THROAT], "GWWCUTTSHH1", (void *)&_pBoatShadows[BOATS_TYPE_RAZORBACK], "GWWRAZRSHH1", (void *)&_pBoatShadows[BOATS_TYPE_THRESHER], "GWWTHRESHH0", (void *)&_pBoatShadows[BOATS_TYPE_MIDWAY], "GWWMIDWSHH0", #if TARGET!=ULTRA64 /*Don't allow secret boats*/ (void *)&_pBoatShadows[BOATS_TYPE_SEADOG], "GWWSEADSHH1", (void *)&_pBoatShadows[BOATS_TYPE_COP], "GWWCOPBSHH1", (void *)&_pBoatShadows[BOATS_TYPE_HOVERCRAFT], "GWWHOVRSHH1", (void *)&_pBoatShadows[BOATS_TYPE_TINY], "GWWTINYSHH1", #endif /*ULTRA64*/ /* COLORED DIFFICULTY BARS*/ (void *)&_pBoatDiffBars[0], "GWWPLATINH1", /* YELLOW */ (void *)&_pBoatDiffBars[1], "GWWPLATBEH1", /* BLUE */ (void *)&_pBoatDiffBars[2], "GWWPLATADH1", /* RED */ #endif /*ULTRA64*/ /* BOAT NAMES*/ (void *)&_pText_BoatNames[BOATS_TYPE_BANSHEE], "GWWBANS__H1", (void *)&_pText_BoatNames[BOATS_TYPE_TIDAL_BLADE], "GWWTIDA__H1", (void *)&_pText_BoatNames[BOATS_TYPE_RAD_HAZARD], "GWWRADH__H1", (void *)&_pText_BoatNames[BOATS_TYPE_MISS_BEHAVE], "GWWMISS__H1", (void *)&_pText_BoatNames[BOATS_TYPE_DAMN_THE_TORPEDOES], "GWWDAMN__H1", (void *)&_pText_BoatNames[BOATS_TYPE_CUT_THROAT], "GWWCUTT__H1", (void *)&_pText_BoatNames[BOATS_TYPE_RAZORBACK], "GWWRAZO__H1", (void *)&_pText_BoatNames[BOATS_TYPE_THRESHER], "GWWTHSH__H1", (void *)&_pText_BoatNames[BOATS_TYPE_MIDWAY], "GWWMIDW__H1", #if TARGET!=ULTRA64 /*Don't allow secret boats*/ (void *)&_pText_BoatNames[BOATS_TYPE_SEADOG], "GWWSEAD__H1", (void *)&_pText_BoatNames[BOATS_TYPE_COP], "GWWCOPB__H1", (void *)&_pText_BoatNames[BOATS_TYPE_HOVERCRAFT], "GWWHOVR__H1", (void *)&_pText_BoatNames[BOATS_TYPE_TINY], "GWWTINY__H1", #endif /*ULTRA64*/ /* BOAT FRAME */ (void *)&_pBoatFrame, "GWWFRAMBSH1", /* BOAT FRAME SHADOW*/ #if TARGET!=ULTRA64 /* No boat frame shadow */ (void *)&_pBoatFrameShadow, "GWWFRAMSHH2", #endif /*ULTRA64*/ (void *)&_pIcon_Analog, "GWWANALICH1", (void *)&_pIcon_Button, "GWWABUTICH0", NULL, NULL, }; static ObsysLoadDef_t aTrackSelectLoadTable[] = { /* BACKGROUNDS*/ (void *)&_pTrackBG, "GWWTRASBGH1", /* MISC*/ (void *)&_pText_ChooseA, "GWWCHOO__H1", (void *)&_pText_Track, "GWWTRAC__H1", (void *)&_pText_Numbers[0], "GWWTIME__H0", /* 0*/ (void *)&_pText_Numbers[1], "GWWTIME__H1", /* 1*/ (void *)&_pText_Numbers[2], "GWWTIME__H2", /* 2*/ (void *)&_pText_Numbers[3], "GWWTIME__H3", /* 3*/ (void *)&_pText_Numbers[4], "GWWTIME__H4", /* 4*/ (void *)&_pText_Numbers[5], "GWWTIME__H5", /* 5*/ (void *)&_pText_Numbers[6], "GWWTIME__H6", /* 6*/ (void *)&_pText_Numbers[7], "GWWTIME__H7", /* 7*/ (void *)&_pText_Numbers[8], "GWWTIME__H8", /* 8*/ (void *)&_pText_Numbers[9], "GWWTIME__H9", /* 9*/ (void *)&_pText_SelectText, "GWWSELE__H1", (void *)&_pText_AcceptText, "GWWACCE__H1", (void *)&_pText_Difficulty[0], "GWWNOVI__H1", /* NOVICE*/ (void *)&_pText_Difficulty[1], "GWWBEGI__H1", /* EASY*/ (void *)&_pText_Difficulty[2], "GWWINTE__H1", /* MEDIUM*/ (void *)&_pText_Difficulty[3], "GWWADVA__H1", /* HARD*/ (void *)&_pText_Difficulty[4], "GWWEXPE__H1", /* EXPERT*/ (void *)&_pIcon_Wheel, "GWWWHEEICH1", (void *)&_pIcon_Wheel_Shadow, "GWWWHEESHH1", (void *)&_pIcon_Throttle, "GWWTHOTICH0", (void *)&_pIcon_Arrow, "GWWARRO__H1", (void *)&_pFlame, "GWWSELEFLH0", /* Flame*/ (void *)&_pFireCell[0], "T_FFIRE_A20", (void *)&_pFireCell[1], "T_FFIRE_A21", (void *)&_pFireCell[2], "T_FFIRE_A22", (void *)&_pFireCell[3], "T_FFIRE_A23", (void *)&_pFireCell[4], "T_FFIRE_A24", (void *)&_pFireCell[5], "T_FFIRE_A25", (void *)&_pFireCell[6], "T_FFIRE_A26", (void *)&_pFireCell[7], "T_FFIRE_A27", (void *)&_pFireCell[8], "T_FFIRE_A28", (void *)&_pFireCell[9], "T_FFIRE_A29", /* TRACK SELECT*/ /* COLORED OVALS OFF*/ (void *)&_pOffFrame[0], "GWWICO_YLH1", /* YELLOW */ (void *)&_pOffFrame[1], "GWWICO_BUH1", /* BLUE */ (void *)&_pOffFrame[2], "GWWICO_RDH1", /* RED*/ (void *)&_pOffFrame[3], "GWWICO_GRH1", /* BONUS*/ /* COLORED OVALS ON */ (void *)&_pOnFrame[0], "GWWICO_YLH2", /* YELLOW*/ (void *)&_pOnFrame[1], "GWWICO_BUH2", /* BLUE */ (void *)&_pOnFrame[2], "GWWICO_RDH2", /* RED*/ (void *)&_pOnFrame[3], "GWWICO_GRH2", /* BONUS*/ /* FRAME SHADOW*/ (void *)&_pTrackFrameShadow, "GWWFRAMSHH1", /* COLORED DIFFICULTY BARS*/ (void *)&_pTrackDiffBars[0], "GWWBONUPTH1", /* BONUS1 */ (void *)&_pTrackDiffBars[1], "GWWPLATINH0", /* YELLOW */ (void *)&_pTrackDiffBars[2], "GWWBEGIPTHL", /* BLUE */ (void *)&_pTrackDiffBars[3], "GWWPLATADH0", /* RED*/ (void *)&_pTrackDiffBars[4], "GWWBONUPTH2", /* BONUS2*/ /* SCREEN SHOTS*/ (void *)&_pTrackScreens[TRACKS_CHINA], "GWWTRS_CHH0", (void *)&_pTrackScreens[TRACKS_SHIPGRAVEYARD], "GWWTRS_SGH0", (void *)&_pTrackScreens[TRACKS_LAKEPOWELL], "GWWTRS_PWH0", (void *)&_pTrackScreens[TRACKS_GREECE], "GWWTRS_GRH0", (void *)&_pTrackScreens[TRACKS_AMAZON], "GWWTRS_SPH0", (void *)&_pTrackScreens[TRACKS_ARTIC], "GWWTRS_ACH0", (void *)&_pTrackScreens[TRACKS_VENICE], "GWWTRS_VCH0", (void *)&_pTrackScreens[TRACKS_NY], "GWWTRS_NYH0", (void *)&_pTrackScreens[TRACKS_NILE], "GWWTRS_NRH0", (void *)&_pTrackScreens[TRACKS_LOOP1], "GWWTRS_LOH1", (void *)&_pTrackScreens[TRACKS_LOOP2], "GWWTRS_LOH2", (void *)&_pTrackScreens[TRACKS_LOOP3], "GWWTRS_LOH3", (void *)&_pTrackScreens[TRACKS_CAVERN], "GWWTRS_LOH3", /* TRACK NAMES*/ (void *)&_pText_TrackNames[TRACKS_CHINA], "GWWCHIN__H1", (void *)&_pText_TrackNames[TRACKS_SHIPGRAVEYARD], "GWWGRAV__H1", (void *)&_pText_TrackNames[TRACKS_LAKEPOWELL], "GWWPOWE__H1", (void *)&_pText_TrackNames[TRACKS_GREECE], "GWWGREE__H1", (void *)&_pText_TrackNames[TRACKS_AMAZON], "GWWAMAZ__H1", (void *)&_pText_TrackNames[TRACKS_ARTIC], "GWWARCT__H1", (void *)&_pText_TrackNames[TRACKS_VENICE], "GWWVENI__H1", (void *)&_pText_TrackNames[TRACKS_NY], "GWWNEWY__H1", (void *)&_pText_TrackNames[TRACKS_NILE], "GWWNILE__H1", (void *)&_pText_TrackNames[TRACKS_LOOP1], "GWWLOOP__H1", (void *)&_pText_TrackNames[TRACKS_LOOP2], "GWWLOOP__H2", (void *)&_pText_TrackNames[TRACKS_LOOP3], "GWWLOOP__H3", (void *)&_pText_TrackNames[TRACKS_LOOP3], "GWWCAST__H1", (void *)&_pText_TrackNames[TRACKS_CAVERN], "GWWCAVE__H1", /* TRACK OVAL SHADOWS*/ (void *)&_pTrackShadows, "GWWHYDRSHH1", /* THE WORD EASY*/ (void *)&_pTrackTextEasy, "GWWEASY__H1", /* THE RIGHT SIDE OF THE BLUE BAR*/ (void *)&_pLeftBlueBar, "GWWBEGIPTHR", /* THE PADLOCK*/ (void *)&_pLock, "GWWLOCKICH0", /* BONUS LOCKED ICON*/ /* the "hard track" plate overlay, used for putting the flame under the plate*/ (void *)&_pHardTrackText, "GWWPLATADHA", // Dreamcast icons (void *)&_pIcon_Analog, "GWWANALICH1", (void *)&_pIcon_Button, "GWWABUTICH0", // New Bar (void *)&_LeftGreenBar, "GWWBONUPTHL", (void *)&_MiddleGreenBar, "GWWBONU__H1", (void *)&_RightGreenBar, "GWWBONUPTHR", // New oval icons (void *)&_RedLockIcon, "GWWICO_RDH3", (void *)&_BlueLockIcon, "GWWICO_BUH3", (void *)&_YellowLockIcon, "GWWICO_YLH3", (void *)&_GreenLockIcon, "GWWICO_GRH3", NULL, NULL, }; #if 0 static ObsysLoadDef_t aLoadTable[] = { /* BACKGROUNDS*/ (void *)&_pTrackBG, "GWWTRASBGH1", /* MISC*/ (void *)&_pText_ChooseA, "GWWCHOO__H1", (void *)&_pText_Track, "GWWTRAC__H1", (void *)&_pText_Numbers[0], "GWWTIME__H0", /* 0*/ (void *)&_pText_Numbers[1], "GWWTIME__H1", /* 1*/ (void *)&_pText_Numbers[2], "GWWTIME__H2", /* 2*/ (void *)&_pText_Numbers[3], "GWWTIME__H3", /* 3*/ (void *)&_pText_Numbers[4], "GWWTIME__H4", /* 4*/ (void *)&_pText_Numbers[5], "GWWTIME__H5", /* 5*/ (void *)&_pText_Numbers[6], "GWWTIME__H6", /* 6*/ (void *)&_pText_Numbers[7], "GWWTIME__H7", /* 7*/ (void *)&_pText_Numbers[8], "GWWTIME__H8", /* 8*/ (void *)&_pText_Numbers[9], "GWWTIME__H9", /* 9*/ (void *)&_pText_Select, "GWWSELE__H1", (void *)&_pText_Accept, "GWWACCE__H1", (void *)&_pText_Difficulty[0], "GWWNOVI__H1", /* NOVICE*/ (void *)&_pText_Difficulty[1], "GWWBEGI__H1", /* EASY*/ (void *)&_pText_Difficulty[2], "GWWINTE__H1", /* MEDIUM*/ (void *)&_pText_Difficulty[3], "GWWADVA__H1", /* HARD*/ (void *)&_pText_Difficulty[4], "GWWEXPE__H1", /* EXPERT*/ (void *)&_pIcon_Wheel, "GWWWHEEICH1", (void *)&_pIcon_Wheel_Shadow, "GWWWHEESHH1", (void *)&_pIcon_Throttle, "GWWTHOTICH0", (void *)&_pIcon_Arrow, "GWWARRO__H1", (void *)&_pFlame, "GWWSELEFLH0", /* Flame*/ (void *)&_pFireCell[0], "T_FFIRE_A20", (void *)&_pFireCell[1], "T_FFIRE_A21", (void *)&_pFireCell[2], "T_FFIRE_A22", (void *)&_pFireCell[3], "T_FFIRE_A23", (void *)&_pFireCell[4], "T_FFIRE_A24", (void *)&_pFireCell[5], "T_FFIRE_A25", (void *)&_pFireCell[6], "T_FFIRE_A26", (void *)&_pFireCell[7], "T_FFIRE_A27", (void *)&_pFireCell[8], "T_FFIRE_A28", (void *)&_pFireCell[9], "T_FFIRE_A29", /* TRACK SELECT*/ /* COLORED OVALS OFF*/ (void *)&_pOffFrame[0], "GWWICO_YLH1", /* YELLOW */ (void *)&_pOffFrame[1], "GWWICO_BUH1", /* BLUE */ (void *)&_pOffFrame[2], "GWWICO_RDH1", /* RED*/ (void *)&_pOffFrame[3], "GWWICO_GRH1", /* BONUS*/ /* COLORED OVALS ON */ (void *)&_pOnFrame[0], "GWWICO_YLH2", /* YELLOW*/ (void *)&_pOnFrame[1], "GWWICO_BUH2", /* BLUE */ (void *)&_pOnFrame[2], "GWWICO_RDH2", /* RED*/ (void *)&_pOnFrame[3], "GWWICO_GRH2", /* BONUS*/ /* FRAME SHADOW*/ (void *)&_pTrackFrameShadow, "GWWFRAMSHH1", /* COLORED DIFFICULTY BARS*/ (void *)&_pTrackDiffBars[0], "GWWBONUPTH1", /* BONUS1 */ (void *)&_pTrackDiffBars[1], "GWWPLATINH0", /* YELLOW */ (void *)&_pTrackDiffBars[2], "GWWBEGIPTHL", /* BLUE */ (void *)&_pTrackDiffBars[3], "GWWPLATADH0", /* RED*/ (void *)&_pTrackDiffBars[4], "GWWBONUPTH2", /* BONUS2*/ /* SCREEN SHOTS*/ (void *)&_pTrackScreens[TRACKS_CHINA], "GWWTRS_CHH0", (void *)&_pTrackScreens[TRACKS_SHIPGRAVEYARD], "GWWTRS_SGH0", (void *)&_pTrackScreens[TRACKS_LAKEPOWELL], "GWWTRS_PWH0", (void *)&_pTrackScreens[TRACKS_GREECE], "GWWTRS_GRH0", (void *)&_pTrackScreens[TRACKS_AMAZON], "GWWTRS_SPH0", (void *)&_pTrackScreens[TRACKS_ARTIC], "GWWTRS_ACH0", (void *)&_pTrackScreens[TRACKS_VENICE], "GWWTRS_VCH0", (void *)&_pTrackScreens[TRACKS_NY], "GWWTRS_NYH0", (void *)&_pTrackScreens[TRACKS_NILE], "GWWTRS_NRH0", (void *)&_pTrackScreens[TRACKS_LOOP1], "GWWTRS_LOH1", (void *)&_pTrackScreens[TRACKS_LOOP2], "GWWTRS_LOH2", (void *)&_pTrackScreens[TRACKS_LOOP3], "GWWTRS_LOH3", /* TRACK NAMES*/ (void *)&_pText_TrackNames[TRACKS_CHINA], "GWWCHIN__H1", (void *)&_pText_TrackNames[TRACKS_SHIPGRAVEYARD], "GWWGRAV__H1", (void *)&_pText_TrackNames[TRACKS_LAKEPOWELL], "GWWPOWE__H1", (void *)&_pText_TrackNames[TRACKS_GREECE], "GWWGREE__H1", (void *)&_pText_TrackNames[TRACKS_AMAZON], "GWWAMAZ__H1", (void *)&_pText_TrackNames[TRACKS_ARTIC], "GWWARCT__H1", (void *)&_pText_TrackNames[TRACKS_VENICE], "GWWVENI__H1", (void *)&_pText_TrackNames[TRACKS_NY], "GWWNEWY__H1", (void *)&_pText_TrackNames[TRACKS_NILE], "GWWNILE__H1", (void *)&_pText_TrackNames[TRACKS_LOOP1], "GWWLOOP__H1", (void *)&_pText_TrackNames[TRACKS_LOOP2], "GWWLOOP__H2", (void *)&_pText_TrackNames[TRACKS_LOOP3], "GWWLOOP__H3", /* TRACK OVAL SHADOWS*/ (void *)&_pTrackShadows, "GWWHYDRSHH1", /* THE WORD EASY*/ (void *)&_pTrackTextEasy, "GWWEASY__H1", /* THE RIGHT SIDE OF THE BLUE BAR*/ (void *)&_pLeftBlueBar, "GWWBEGIPTHR", /* THE PADLOCK*/ (void *)&_pLock, "GWWLOCKICH0", /* BONUS LOCKED ICON*/ /* the "hard track" plate overlay, used for putting the flame under the plate*/ (void *)&_pHardTrackText, "GWWPLATADHA", // Dreamcast icons (void *)&_pIcon_Analog, "GWWANALICH1", (void *)&_pIcon_Button, "GWWABUTICH0", NULL, NULL, }; #endif #if 0 static ObsysLoadDef_t aLoadTable[] = { /* BACKGROUNDS*/ (void *)&_pTrackBG, "GWWTRASBGH1", (void *)&_pBoatBG, "GWWBOASBGH0", /* MISC*/ #if TARGET!=ULTRA64 /* No track select shadows */ (void *)&_pText_ChooseA, "GWWCHOO__H1", (void *)&_pText_Track, "GWWTRAC__H1", (void *)&_pText_Boat, "GWWBOAT__H1", #endif /*ULTRA64*/ (void *)&_pText_Numbers[0], "GWWTIME__H0", /* 0*/ (void *)&_pText_Numbers[1], "GWWTIME__H1", /* 1*/ (void *)&_pText_Numbers[2], "GWWTIME__H2", /* 2*/ (void *)&_pText_Numbers[3], "GWWTIME__H3", /* 3*/ (void *)&_pText_Numbers[4], "GWWTIME__H4", /* 4*/ (void *)&_pText_Numbers[5], "GWWTIME__H5", /* 5*/ (void *)&_pText_Numbers[6], "GWWTIME__H6", /* 6*/ (void *)&_pText_Numbers[7], "GWWTIME__H7", /* 7*/ (void *)&_pText_Numbers[8], "GWWTIME__H8", /* 8*/ (void *)&_pText_Numbers[9], "GWWTIME__H9", /* 9*/ (void *)&_pText_Select, "GWWSELE__H1", (void *)&_pText_Accept, "GWWACCE__H1", (void *)&_pText_Difficulty[0], "GWWNOVI__H1", /* NOVICE*/ (void *)&_pText_Difficulty[1], "GWWBEGI__H1", /* EASY*/ (void *)&_pText_Difficulty[2], "GWWINTE__H1", /* MEDIUM*/ (void *)&_pText_Difficulty[3], "GWWADVA__H1", /* HARD*/ (void *)&_pText_Difficulty[4], "GWWEXPE__H1", /* EXPERT*/ (void *)&_pIcon_Wheel, "GWWWHEEICH1", (void *)&_pIcon_Wheel_Shadow, "GWWWHEESHH1", (void *)&_pIcon_Throttle, "GWWTHOTICH0", (void *)&_pIcon_Arrow, "GWWARRO__H1", /* (void *)&_pComingSoon, "GWWTEXT_XHX", // coming soon*/ (void *)&_pFlame, "GWWSELEFLH0", /* Flame*/ (void *)&_pFireCell[0], "T_FFIRE_A20", (void *)&_pFireCell[1], "T_FFIRE_A21", (void *)&_pFireCell[2], "T_FFIRE_A22", (void *)&_pFireCell[3], "T_FFIRE_A23", (void *)&_pFireCell[4], "T_FFIRE_A24", (void *)&_pFireCell[5], "T_FFIRE_A25", (void *)&_pFireCell[6], "T_FFIRE_A26", (void *)&_pFireCell[7], "T_FFIRE_A27", (void *)&_pFireCell[8], "T_FFIRE_A28", (void *)&_pFireCell[9], "T_FFIRE_A29", (void *)&_pNoAiIcon, "GWWICONAIH1", /* no ai icon*/ (void *)&_pNoCatchUpIcon, "GWWICONNCH1", /* no catchup code icon*/ /* TRACK SELECT*/ /* COLORED OVALS OFF*/ (void *)&_pOffFrame[0], "GWWICO_YLH1", /* YELLOW */ (void *)&_pOffFrame[1], "GWWICO_BUH1", /* BLUE */ (void *)&_pOffFrame[2], "GWWICO_RDH1", /* RED*/ (void *)&_pOffFrame[3], "GWWICO_GRH1", /* BONUS*/ /* COLORED OVALS ON */ (void *)&_pOnFrame[0], "GWWICO_YLH2", /* YELLOW*/ (void *)&_pOnFrame[1], "GWWICO_BUH2", /* BLUE */ (void *)&_pOnFrame[2], "GWWICO_RDH2", /* RED*/ (void *)&_pOnFrame[3], "GWWICO_GRH2", /* BONUS*/ /* FRAME SHADOW*/ #if TARGET!=ULTRA64 /* No track select shadows */ (void *)&_pTrackFrameShadow, "GWWFRAMSHH1", /* COLORED DIFFICULTY BARS*/ (void *)&_pTrackDiffBars[0], "GWWBONUPTH1", /* BONUS1 */ (void *)&_pTrackDiffBars[1], "GWWPLATINH0", /* YELLOW */ (void *)&_pTrackDiffBars[2], "GWWBEGIPTHL", /* BLUE */ (void *)&_pTrackDiffBars[3], "GWWPLATADH0", /* RED*/ (void *)&_pTrackDiffBars[4], "GWWBONUPTH2", /* BONUS2*/ #endif /*ULTRA64*/ /* SCREEN SHOTS*/ (void *)&_pTrackScreens[TRACKS_CHINA], "GWWTRS_CHH0", (void *)&_pTrackScreens[TRACKS_SHIPGRAVEYARD], "GWWTRS_SGH0", (void *)&_pTrackScreens[TRACKS_LAKEPOWELL], "GWWTRS_PWH0", (void *)&_pTrackScreens[TRACKS_GREECE], "GWWTRS_GRH0", (void *)&_pTrackScreens[TRACKS_AMAZON], "GWWTRS_SPH0", (void *)&_pTrackScreens[TRACKS_ARTIC], "GWWTRS_ACH0", (void *)&_pTrackScreens[TRACKS_VENICE], "GWWTRS_VCH0", (void *)&_pTrackScreens[TRACKS_NY], "GWWTRS_NYH0", (void *)&_pTrackScreens[TRACKS_NILE], "GWWTRS_NRH0", (void *)&_pTrackScreens[TRACKS_LOOP1], "GWWTRS_LOH1", (void *)&_pTrackScreens[TRACKS_LOOP2], "GWWTRS_LOH2", (void *)&_pTrackScreens[TRACKS_LOOP3], "GWWTRS_LOH3", /* TRACK NAMES*/ (void *)&_pText_TrackNames[TRACKS_CHINA], "GWWCHIN__H1", (void *)&_pText_TrackNames[TRACKS_SHIPGRAVEYARD], "GWWGRAV__H1", (void *)&_pText_TrackNames[TRACKS_LAKEPOWELL], "GWWPOWE__H1", (void *)&_pText_TrackNames[TRACKS_GREECE], "GWWGREE__H1", (void *)&_pText_TrackNames[TRACKS_AMAZON], "GWWAMAZ__H1", (void *)&_pText_TrackNames[TRACKS_ARTIC], "GWWARCT__H1", (void *)&_pText_TrackNames[TRACKS_VENICE], "GWWVENI__H1", (void *)&_pText_TrackNames[TRACKS_NY], "GWWNEWY__H1", (void *)&_pText_TrackNames[TRACKS_NILE], "GWWNILE__H1", (void *)&_pText_TrackNames[TRACKS_LOOP1], "GWWLOOP__H1", (void *)&_pText_TrackNames[TRACKS_LOOP2], "GWWLOOP__H2", (void *)&_pText_TrackNames[TRACKS_LOOP3], "GWWLOOP__H3", /* TRACK OVAL SHADOWS*/ #if TARGET!=ULTRA64 /* No track select shadows */ (void *)&_pTrackShadows, "GWWHYDRSHH1", #endif /*ULTRA64*/ /* THE WORD EASY*/ (void *)&_pTrackTextEasy, "GWWEASY__H1", /* THE RIGHT SIDE OF THE BLUE BAR*/ (void *)&_pLeftBlueBar, "GWWBEGIPTHR", /* THE PADLOCK*/ (void *)&_pLock, "GWWLOCKICH0", /* BONUS LOCKED ICON*/ /* the "hard track" plate overlay, used for putting the flame under the plate*/ (void *)&_pHardTrackText, "GWWPLATADHA", /* BOAT SELECT */ /* BOAT ICONS*/ (void *)&_pBoatPics[BOATS_TYPE_BANSHEE], "GWWBANSICH1", (void *)&_pBoatPics[BOATS_TYPE_TIDAL_BLADE], "GWWTIDAICH1", (void *)&_pBoatPics[BOATS_TYPE_RAD_HAZARD], "GWWRADHICH1", (void *)&_pBoatPics[BOATS_TYPE_MISS_BEHAVE], "GWWMISSICH1", (void *)&_pBoatPics[BOATS_TYPE_DAMN_THE_TORPEDOES], "GWWDAMNICH1", (void *)&_pBoatPics[BOATS_TYPE_CUT_THROAT], "GWWCUTTICH1", (void *)&_pBoatPics[BOATS_TYPE_RAZORBACK], "GWWRAZRICH1", (void *)&_pBoatPics[BOATS_TYPE_THRESHER], "GWWTHREICH0", (void *)&_pBoatPics[BOATS_TYPE_MIDWAY], "GWWMIDWICH0", #if TARGET!=ULTRA64 /*Don't allow secret boats*/ (void *)&_pBoatPics[BOATS_TYPE_SEADOG], "GWWSEADICH1", (void *)&_pBoatPics[BOATS_TYPE_COP], "GWWCOPBICH1", (void *)&_pBoatPics[BOATS_TYPE_HOVERCRAFT], "GWWHOVRICH1", (void *)&_pBoatPics[BOATS_TYPE_TINY], "GWWTINYICH1", #endif /*ULTRA64*/ /* BOAT SHADOWS*/ #if TARGET!=ULTRA64 /* No boat shadows and easy/medium/hard icons */ (void *)&_pBoatShadows[BOATS_TYPE_BANSHEE], "GWWBANSSHH1", (void *)&_pBoatShadows[BOATS_TYPE_TIDAL_BLADE], "GWWTIDASHH1", (void *)&_pBoatShadows[BOATS_TYPE_RAD_HAZARD], "GWWRADHSHH1", (void *)&_pBoatShadows[BOATS_TYPE_MISS_BEHAVE], "GWWMISSSHH1", (void *)&_pBoatShadows[BOATS_TYPE_DAMN_THE_TORPEDOES], "GWWDAMNSHH1", (void *)&_pBoatShadows[BOATS_TYPE_CUT_THROAT], "GWWCUTTSHH1", (void *)&_pBoatShadows[BOATS_TYPE_RAZORBACK], "GWWRAZRSHH1", (void *)&_pBoatShadows[BOATS_TYPE_THRESHER], "GWWTHRESHH0", (void *)&_pBoatShadows[BOATS_TYPE_MIDWAY], "GWWMIDWSHH0", #if TARGET!=ULTRA64 /*Don't allow secret boats*/ (void *)&_pBoatShadows[BOATS_TYPE_SEADOG], "GWWSEADSHH1", (void *)&_pBoatShadows[BOATS_TYPE_COP], "GWWCOPBSHH1", (void *)&_pBoatShadows[BOATS_TYPE_HOVERCRAFT], "GWWHOVRSHH1", (void *)&_pBoatShadows[BOATS_TYPE_TINY], "GWWTINYSHH1", #endif /*ULTRA64*/ /* COLORED DIFFICULTY BARS*/ (void *)&_pBoatDiffBars[0], "GWWPLATINH1", /* YELLOW */ (void *)&_pBoatDiffBars[1], "GWWPLATBEH1", /* BLUE */ (void *)&_pBoatDiffBars[2], "GWWPLATADH1", /* RED */ #endif /*ULTRA64*/ /* BOAT NAMES*/ (void *)&_pText_BoatNames[BOATS_TYPE_BANSHEE], "GWWBANS__H1", (void *)&_pText_BoatNames[BOATS_TYPE_TIDAL_BLADE], "GWWTIDA__H1", (void *)&_pText_BoatNames[BOATS_TYPE_RAD_HAZARD], "GWWRADH__H1", (void *)&_pText_BoatNames[BOATS_TYPE_MISS_BEHAVE], "GWWMISS__H1", (void *)&_pText_BoatNames[BOATS_TYPE_DAMN_THE_TORPEDOES], "GWWDAMN__H1", (void *)&_pText_BoatNames[BOATS_TYPE_CUT_THROAT], "GWWCUTT__H1", (void *)&_pText_BoatNames[BOATS_TYPE_RAZORBACK], "GWWRAZO__H1", (void *)&_pText_BoatNames[BOATS_TYPE_THRESHER], "GWWTHSH__H1", (void *)&_pText_BoatNames[BOATS_TYPE_MIDWAY], "GWWMIDW__H1", #if TARGET!=ULTRA64 /*Don't allow secret boats*/ (void *)&_pText_BoatNames[BOATS_TYPE_SEADOG], "GWWSEAD__H1", (void *)&_pText_BoatNames[BOATS_TYPE_COP], "GWWCOPB__H1", (void *)&_pText_BoatNames[BOATS_TYPE_HOVERCRAFT], "GWWHOVR__H1", (void *)&_pText_BoatNames[BOATS_TYPE_TINY], "GWWTINY__H1", #endif /*ULTRA64*/ /* BOAT FRAME */ (void *)&_pBoatFrame, "GWWFRAMBSH1", /* BOAT FRAME SHADOW*/ #if TARGET!=ULTRA64 /* No boat frame shadow */ (void *)&_pBoatFrameShadow, "GWWFRAMSHH2", #endif /*ULTRA64*/ NULL, NULL, }; #endif /*===================*/ /* private prototypes*/ static void _DrawTrackSelect( BOOL bPreSelection, u32 nTime ); static void _DrawBoatSelect( BOOL bPreSelection, u32 nTime ); static void _UpdateCamera( Player_t *pPlayer, u32 nBoatNum ); static f32 _InitBoats( u32 nBoatType, u32 nLod, Player_t *pPlayer, WorldOb_t *pWorldOb, Motion_t *pMotion ); static void _MoveAllBoats( BOOL bBoatSelect ); static void _DrawIconsAndTime( u32 nTime, BOOL bDrawIcons ); static void _HandleSpecialCodes( u32 nWhatCode ); static void _DrawATrackSelectionObject( TrackSelectionObject_t *pOb, BOOL bPreSelection ); static void _SetupTrackSelectVars( BOOL bBonus1Enable, BOOL bBonus2Enable ); static void _SetupBoatSelectVars( BOOL bEnableAdvancedBoats ); static Player_t *_GetCurrentBoatSelectPlayerPtr( void ); static void _DrawOptionsSelect(); static void _DrawABoatSelectionObject( BoatSelectObject_t *pOb, BOOL bPreSelection, float fScale ); /*=================*/ /* public functions*/ BOOL wpr_select_ModuleInit( void ) { u32 i; /* very few things need to be reset here, init does it all*/ _bTexturesLoaded = FALSE; for( i=0; i < _NUM_SELECTABLE_BOATS; i++ ) { player_SetAPlayerToDefault( &_aPlayer[i] ); worldob_Init( &_aWorldOb[i] ); motion_StopMotion( &_aMotion[i] ); vec2_Zero( &_aPathPos[i] ); _naPathIndex[i] = 0; _afBoatsTopEnd[i] = 0.0f; } vec3_Zero( &_CamPos ); vec3_Zero( &_CamLook ); _nCamAngle = 0; return TRUE; } static void _SetupOptionSelectVars() { OptionSelectObject_t *pObj; _pCurrentSelectedOption = &_aOptionSelections[_DEFAULT_OPTION_SLOT]; _pCurrentSelectedOption->nArrayIndex = 3; /* Vms */ pObj = &_aOptionSelections[0]; pObj->bEnabled = TRUE; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->pIcon = _pIcon_Vms; pObj->fX = _ICON_VMS_X; pObj->fY = _ICON_VMS_Y; pObj->nArrayIndex = 0; /* Controller */ pObj = &_aOptionSelections[1]; pObj->bEnabled = TRUE; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->pIcon = _pIcon_ConfigCtrl; pObj->fX = _ICON_CONFIGCTRL_X; pObj->fY = _ICON_CONFIGCTRL_Y; pObj->nArrayIndex = 1; /* One Player */ pObj = &_aOptionSelections[2]; pObj->bEnabled = TRUE; pObj->bCurrent = TRUE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->pIcon = _pIcon_OnePlayer; pObj->fX = _ICON_ONEPLAYER_X; pObj->fY = _ICON_ONEPLAYER_Y; pObj->nArrayIndex = 2; /* Two Player */ pObj = &_aOptionSelections[3]; pObj->bEnabled = TRUE; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->pIcon = _pIcon_TwoPlayer; pObj->fX = _ICON_TWOPLAYER_X; pObj->fY = _ICON_TWOPLAYER_Y; pObj->nArrayIndex = 3; /* Volume */ pObj = &_aOptionSelections[4]; pObj->bEnabled = TRUE; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->pIcon = _pIcon_Volume; pObj->fX = _ICON_SOUNDVOL_X; pObj->fY = _ICON_SOUNDVOL_Y; pObj->nArrayIndex = 4; /* High scores */ pObj = &_aOptionSelections[5]; pObj->bEnabled = TRUE; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->pIcon = _pIcon_HighScores; pObj->fX = _ICON_HIGHSCORES_X; pObj->fY = _ICON_HIGHSCORES_Y; pObj->nArrayIndex = 5; } void _DrawAnalogAndButton() { mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pIcon_Analog, _ICON_ANALOG_X, _ICON_ANALOG_Y, WPR_DEFS_LAYER1_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pText_SelectText, _ICON_ANALOG_X, _ICON_ANALOG_Y - 20, WPR_DEFS_LAYER1_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pIcon_Button, _ICON_BUTT_X, _ICON_BUTT_Y, WPR_DEFS_LAYER1_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pText_AcceptText, _ICON_BUTT_X, _ICON_BUTT_Y - 20, WPR_DEFS_LAYER1_Z, 0, 1.0f ); } static void _DrawOptionsSelect( BOOL bPreSelection, u32 nTime ) { OptionSelectObject_t *pObj; int i; mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pBoatBG, 0.0f, 0.0f, WPR_DEFS_LAYER1_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pBoatFrameShadow, (_BOAT_FRAME_X - 4.0f), _BOAT_FRAME_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pBoatFrame, _BOAT_FRAME_X, _BOAT_FRAME_Y, WPR_DEFS_LAYER3_Z, 0, 1.0f ); mesh3d_SetOrthoEffects( 0.3f, 0.3f, 0.3f, 1.0f, 0.0f ); // Draw bars etc if(_nCurrentBar == 1) mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); else mesh3d_SetOrthoEffects( 0.3f, 0.3f, 0.3f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pIcon_GameBar, _ICON_GAMEBAR_X, _ICON_GAMEBAR_Y, WPR_DEFS_LAYER3_Z, 0, 1.0f ); if(_nCurrentBar == 0) mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); else mesh3d_SetOrthoEffects( 0.3f, 0.3f, 0.3f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pIcon_ConfigBar, _ICON_CONFIGBAR_X, _ICON_CONFIGBAR_Y, WPR_DEFS_LAYER3_Z, 0, 1.0f ); if(_nCurrentBar == 2) mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); else mesh3d_SetOrthoEffects( 0.3f, 0.3f, 0.3f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pIcon_OptionBar, _ICON_OPTIONBAR_X, _ICON_OPTIONBAR_Y, WPR_DEFS_LAYER3_Z, 0, 1.0f ); mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); // print title mesh3d_DrawOrtho( _pText_Option, -90, _TEXT_OPTION_Y+5, WPR_DEFS_LAYER1_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pText_Option1, 60, _TEXT_OPTION_Y+5, WPR_DEFS_LAYER1_Z, 0, 1.0f ); _DrawAnalogAndButton(); // mesh3d_DrawOrtho( _pIcon_OnePlayer, _ICON_ONEPLAYER_X, _ICON_ONEPLAYER_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); // mesh3d_DrawOrtho( _pIcon_OnePlayer, _ICON_TWOPLAYER_X, _ICON_TWOPLAYER_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); // Draw selectable icons for(i = 0; i < _OPTION_SLOTS; i++){ pObj = &_aOptionSelections[i]; if(pObj->bCurrent){ if( bPreSelection ) { /* a selection has not been made yet*/ mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); if( _bSpecialFlashOn ) { mesh3d_DrawOrtho( pObj->pIcon, pObj->fX, pObj->fY, WPR_DEFS_LAYER5_Z, 0, 1.15f ); } else { mesh3d_SetOrthoEffects( 0.45f, 0.45f, 0.45f, 1.0f, 0.0f ); mesh3d_DrawOrtho( pObj->pIcon, pObj->fX, pObj->fY, WPR_DEFS_LAYER5_Z, 0, 1.05f ); } } else { /* a selection has been made*/ if( (Gameloop_nFrameCounter & 0x2) ) { mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.9f ); mesh3d_DrawOrtho( pObj->pIcon, pObj->fX, pObj->fY, WPR_DEFS_LAYER5_Z, 0, 1.15f ); } else{ mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( pObj->pIcon, pObj->fX, pObj->fY, WPR_DEFS_LAYER5_Z, 0, 1.05f ); } // if( _bSpecialFlashOn && pObj->bCurrent) { // mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.9f ); // mesh3d_DrawOrtho( pObj->pIcon, pObj->fX, pObj->fY, WPR_DEFS_LAYER5_Z, 0, 1.15f ); // } // else { // mesh3d_SetOrthoEffects( 0.45f, 0.45f, 0.45f, 1.0f, 0.0f ); // mesh3d_DrawOrtho( pObj->pIcon, pObj->fX, pObj->fY, WPR_DEFS_LAYER5_Z, 0, 1.05f ); // } } } else{ mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( pObj->pIcon, pObj->fX, pObj->fY, WPR_DEFS_LAYER5_Z, 0, 1.00f ); } } // mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); // mesh3d_DrawOrtho( _pIcon_ConfigCtrl, _ICON_CONFIGCTRL_X, _ICON_CONFIGCTRL_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); // mesh3d_DrawOrtho( _pIcon_PuruPuru, _ICON_PURUPURU_X, _ICON_PURUPURU_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); // mesh3d_DrawOrtho( _pIcon_Vms, _ICON_VMS_X, _ICON_VMS_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); // mesh3d_DrawOrtho( _pIcon_Volume, _ICON_SOUNDVOL_X, _ICON_SOUNDVOL_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); // mesh3d_DrawOrtho( _pIcon_SplitScreen, _ICON_SPLITSCREEN_X, _ICON_SPLITSCREEN_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); // mesh3d_DrawOrtho( _pIcon_HighScores, _ICON_HIGHSCORES_X, _ICON_HIGHSCORES_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); } void wpr_select_InitOptionsSelect() { wpr_memmgr_FreeNonCommonStuff(); #if _SELECT_FILE_LOGGING_ON dcStartFileLogging("optisel.txt"); #else obsys_LoadR2Objects("optisel.r2"); #endif /* load our textures*/ if( obsys_LoadGroup( aOptionsLoadTable, FALSE ) != -1 ){ /* all of the textures could not loaded*/ _bTexturesLoaded = FALSE; return; } _SetupOptionSelectVars(); _bTexturesLoaded = TRUE; #if _SELECT_FILE_LOGGING_ON dcStopFileLogging(); #else dcEnableCDCaching(FALSE); r2file_OpenForRead("hydrodc.r2"); #endif } // Load up everthing for the track selection screen void wpr_select_InitTrackSelect( BOOL bBonus1Enable, BOOL bBonus2Enable, BOOL bEnableAdvancedBoats ) { TerrainInit_t Temp; u32 i; wpr_memmgr_FreeNonCommonStuff(); #if _SELECT_FILE_LOGGING_ON dcStartFileLogging("trcksel.txt"); #else obsys_LoadR2Objects("trcksel.r2"); #endif /* LOAD AND ALLOCATE MEMORY FOR NEEDED OBJECTS*/ /* clear all unneeded memory*/ controls_SetSteeringFeedback( 0.0f ); controls_TurnAllLightsOff(); /*if( !audio_Status_IsGameIDPlaying( WPR_DEFS_SELECT_MUSIC ) ) {*/ /* audio_Trigger( WPR_DEFS_SELECT_MUSIC, WPR_DEFS_SELECT_MUSIC_VOLUME, AUDIO_PAN_CABINET, AUDIO_TYPE_MUSIC, AUDIO_PRIORITY_MUSIC );*/ /*}*/ /* till we have another tune we just play the attract tune if it is not playing*/ if( !audio_Status_IsGameIDPlaying( WPR_DEFS_ATTRACT_MUSIC ) ) { audio_Trigger( WPR_DEFS_ATTRACT_MUSIC, WPR_DEFS_SELECT_MUSIC_VOLUME, AUDIO_PAN_CABINET, AUDIO_TYPE_MUSIC, AUDIO_PRIORITY_MUSIC ); } else { /* fade to our desired volume*/ audio_GameIDFadeTo( WPR_DEFS_ATTRACT_MUSIC, WPR_DEFS_SELECT_MUSIC_VOLUME, 1.0f ); } /* load our textures*/ if( obsys_LoadGroup( aTrackSelectLoadTable, FALSE ) != -1 ){ /* all of the textures could not loaded*/ _bTexturesLoaded = FALSE; return; } _bTexturesLoaded = TRUE; gameloop_ResetCounter(); /* reset various misc vars*/ _nBoatSlot = _DEFAULT_BOAT_SLOT; _bAllowSelectionChanges = TRUE; _nBoatDiff = _DEFAULT_BOAT_DIFF_SLOT; _StageNum = WPR_SELECT_TRACK; _fScreenFadeIntensity = 0.0f; _nCounter = 0; _bSpecialFlashOn = TRUE; _nDelayVoice = 0; _nDelayedVoiceSelection = 0; _fFlameScale = 0.0f; _bNoAiCodeEntered = FALSE; _nNoAiCodeState = 0; _bNoCatchUpCodeEntered = FALSE; _nNoCatchUpCodeState = 0; _bAdvancedBoatsCodeEntered = bEnableAdvancedBoats; _nTrackCodeCount = 0; _nTrackCodeState = 0; _nBoatCodeCount = 0; _nBoatCodeState = 0; /* setup the track select table*/ _SetupTrackSelectVars( bBonus1Enable, bBonus2Enable ); audio_Trigger( WPR_DEFS_WATER_SLOSHING, WPR_DEFS_WATER_SLOSHING_VOLUME, AUDIO_PAN_CENTER, AUDIO_TYPE_AMBIENT, AUDIO_PRIORITY_AMBIENT ); #if _SELECT_FILE_LOGGING_ON dcStopFileLogging(); #else dcEnableCDCaching(FALSE); r2file_OpenForRead("hydrodc.r2"); #endif } void wpr_select_ReInitBoatSelect() { _SetupBoatSelectVars(FALSE); } // Load up everthing for the boat selection screen void wpr_select_InitBoatSelect( BOOL bBonus1Enable, BOOL bBonus2Enable, BOOL bEnableAdvancedBoats, BOOL bLoad ) { TerrainInit_t Temp; u32 i; wpr_memmgr_FreeNonCommonStuff(); #if _SELECT_FILE_LOGGING_ON dcStartFileLogging("boatsel.txt"); #else if(bLoad) obsys_LoadR2Objects("boatsel.r2"); #endif // dcStartFileLogging("attrsel.txt"); // r2file_OpenForRead("attrsel.r2"); // dcEnableCDCaching(TRUE); /* LOAD AND ALLOCATE MEMORY FOR NEEDED OBJECTS*/ /* clear all unneeded memory*/ controls_SetSteeringFeedback( 0.0f ); controls_TurnAllLightsOff(); /*if( !audio_Status_IsGameIDPlaying( WPR_DEFS_SELECT_MUSIC ) ) {*/ /* audio_Trigger( WPR_DEFS_SELECT_MUSIC, WPR_DEFS_SELECT_MUSIC_VOLUME, AUDIO_PAN_CABINET, AUDIO_TYPE_MUSIC, AUDIO_PRIORITY_MUSIC );*/ /*}*/ /* till we have another tune we just play the attract tune if it is not playing*/ if( !audio_Status_IsGameIDPlaying( WPR_DEFS_ATTRACT_MUSIC ) ) { audio_Trigger( WPR_DEFS_ATTRACT_MUSIC, WPR_DEFS_SELECT_MUSIC_VOLUME, AUDIO_PAN_CABINET, AUDIO_TYPE_MUSIC, AUDIO_PRIORITY_MUSIC ); } else { /* fade to our desired volume*/ audio_GameIDFadeTo( WPR_DEFS_ATTRACT_MUSIC, WPR_DEFS_SELECT_MUSIC_VOLUME, 1.0f ); } /* load our textures*/ if(bLoad){ if( obsys_LoadGroup( aBoatSelectLoadTable, FALSE ) != -1 ) { /* all of the textures could not loaded*/ _bTexturesLoaded = FALSE; return; } else { world_SetWhiteSat( 0.0f ); sky_SetWhiteSat( 0.0f ); /* allow for _MAX_NUM_WATERSPRAY_PARTICLES waterspray particles*/ waterspray_InitSystem( _MAX_NUM_WATERSPRAY_PARTICLES ); /* reset any systems which are used during this module*/ particle_ResetSystem(); fx_ResetSystem(); fx_splash_ResetSystem(); fx_particles_ResetSystem(); gameloop_ResetCounter(); /* load boat select's world file*/ water_EnableCalc( TRUE ); water_EnableDraw( TRUE ); tracks_LoadWaterTextures( WPR_DEFS_BOAT_WATER,FALSE ); /*PAB ULTRA64 Don't fade water */ terrain_Load( "HWTBTS_TRH0", &Temp ); if( !Temp.pWorld ) { _bTexturesLoaded = FALSE; return; } else { /* make our boat select world the currently selected world*/ terrain_Attach( &Temp ); /* load up the boats to race around in boat select*/ for( i=0; i < _NUM_SELECTABLE_BOATS; i++ ) { /* record the boats top end*/ _afBoatsTopEnd[i] = _InitBoats( i, BOATS_LOD_HIGH, &_aPlayer[i], &_aWorldOb[i], &_aMotion[i] ); } /* everything that we need loaded ok*/ _bTexturesLoaded = TRUE; } } } /* INIT VARS*/ /* camera stuff for boat select*/ Gamecam_pSector = NULL; _nCamAngle = XMATH_225_BRADIANS; _CamPos.p[1] = 11.5f; _CamLook.p[1] = 12.0f; if( _bTexturesLoaded ) { _UpdateCamera( &_aPlayer[0], 0 ); } /* init our loop path structs for boat select*/ for( i=0; i < _NUM_SELECTABLE_BOATS; i++ ) { _aLoopPath[i].nTemplateIndex = 0; _aLoopPath[i].nTemplateStartOffset = 5; _aLoopPath[i].fXScale = 3500.0f; _aLoopPath[i].fYScale = 4800.0f; _aLoopPath[i].fXTranslate = 0.0f; _aLoopPath[i].fYTranslate = 2150.0f; _aLoopPath[i].nRotation = 0; paths_GetPathLoopStartPos( &_aPathPos[i], &_naPathIndex[i], &_aLoopPath[i] ); paths_GetPathLoopNextPos( &_aPathPos[i], &_naPathIndex[i], _naPathIndex[i], &_aLoopPath[i] ); } /* reset the screen coverage for waterspray etc.*/ gutil_ScreenCoverage_ResetTotal(); gutil_ScreenCoverage_SetLimit( _MAX_SCREEN_AREA_SUM ); /* reset various misc vars*/ _nBoatSlot = _DEFAULT_BOAT_SLOT; _bAllowSelectionChanges = TRUE; _nBoatDiff = _DEFAULT_BOAT_DIFF_SLOT; _StageNum = WPR_SELECT_TRACK; _fScreenFadeIntensity = 0.0f; _nCounter = 0; _bSpecialFlashOn = TRUE; _nDelayVoice = 0; _nDelayedVoiceSelection = 0; _fFlameScale = 0.0f; _bNoAiCodeEntered = FALSE; _nNoAiCodeState = 0; _bNoCatchUpCodeEntered = FALSE; _nNoCatchUpCodeState = 0; _bAdvancedBoatsCodeEntered = bEnableAdvancedBoats; _nTrackCodeCount = 0; _nTrackCodeState = 0; _nBoatCodeCount = 0; _nBoatCodeState = 0; /* setup the track select table*/ // _SetupTrackSelectVars( bBonus1Enable, bBonus2Enable ); /* setup the boat select table*/ _SetupBoatSelectVars( bEnableAdvancedBoats ); audio_Trigger( WPR_DEFS_WATER_SLOSHING, WPR_DEFS_WATER_SLOSHING_VOLUME, AUDIO_PAN_CENTER, AUDIO_TYPE_AMBIENT, AUDIO_PRIORITY_AMBIENT ); #if _SELECT_FILE_LOGGING_ON dcStopFileLogging(); #else if(bLoad){ dcEnableCDCaching(FALSE); r2file_OpenForRead("hydrodc.r2"); } #endif // dcStopFileLogging(); // dcEnableCDCaching(FALSE); // r2file_OpenForRead("hydrodc.r2"); } /* Call when you would like to make wpr_select the active wrapper module*/ /* loads up all of the artwork needed for all stages of select mode.*/ /* If everything can't be loaded, all selection modes will be turned off and*/ /* will not do anything.*/ /* Also resets all variables to their default values.*/ #if 0 void wpr_select_Init( BOOL bBonus1Enable, BOOL bBonus2Enable, BOOL bEnableAdvancedBoats ) { TerrainInit_t Temp; u32 i; #if TARGET==DREAMCAST // dcStartFileLogging("attrsel.txt"); // r2file_OpenForRead("attrsel.r2"); // dcEnableCDCaching(TRUE); #endif // DREAMCAST #if TARGET==ULTRA64 /* Set input style */ /* N64ResetSteerChoice(ANALOGUESCALE_CHOOSETRACK,_TRACK_SLOTS);*/ #endif /*ULTRA64*/ /* LOAD AND ALLOCATE MEMORY FOR NEEDED OBJECTS*/ /* clear all unneeded memory*/ wpr_memmgr_FreeNonCommonStuff(); controls_SetSteeringFeedback( 0.0f ); controls_TurnAllLightsOff(); /*if( !audio_Status_IsGameIDPlaying( WPR_DEFS_SELECT_MUSIC ) ) {*/ /* audio_Trigger( WPR_DEFS_SELECT_MUSIC, WPR_DEFS_SELECT_MUSIC_VOLUME, AUDIO_PAN_CABINET, AUDIO_TYPE_MUSIC, AUDIO_PRIORITY_MUSIC );*/ /*}*/ /* till we have another tune we just play the attract tune if it is not playing*/ if( !audio_Status_IsGameIDPlaying( WPR_DEFS_ATTRACT_MUSIC ) ) { audio_Trigger( WPR_DEFS_ATTRACT_MUSIC, WPR_DEFS_SELECT_MUSIC_VOLUME, AUDIO_PAN_CABINET, AUDIO_TYPE_MUSIC, AUDIO_PRIORITY_MUSIC ); } else { /* fade to our desired volume*/ audio_GameIDFadeTo( WPR_DEFS_ATTRACT_MUSIC, WPR_DEFS_SELECT_MUSIC_VOLUME, 1.0f ); } /* load our textures*/ if( obsys_LoadGroup( aLoadTable, FALSE ) != -1 ) { /* all of the textures could not loaded*/ _bTexturesLoaded = FALSE; return; } else { world_SetWhiteSat( 0.0f ); sky_SetWhiteSat( 0.0f ); /* allow for _MAX_NUM_WATERSPRAY_PARTICLES waterspray particles*/ waterspray_InitSystem( _MAX_NUM_WATERSPRAY_PARTICLES ); /* reset any systems which are used during this module*/ particle_ResetSystem(); fx_ResetSystem(); fx_splash_ResetSystem(); fx_particles_ResetSystem(); gameloop_ResetCounter(); /* load boat select's world file*/ water_EnableCalc( TRUE ); water_EnableDraw( TRUE ); tracks_LoadWaterTextures( WPR_DEFS_BOAT_WATER,FALSE ); /*PAB ULTRA64 Don't fade water */ terrain_Load( "HWTBTS_TRH0", &Temp ); if( !Temp.pWorld ) { _bTexturesLoaded = FALSE; return; } else { /* make our boat select world the currently selected world*/ terrain_Attach( &Temp ); /* load up the boats to race around in boat select*/ for( i=0; i < _NUM_SELECTABLE_BOATS; i++ ) { /* record the boats top end*/ #if TARGET==ULTRA64 /*Use player LOD for player select*/ _afBoatsTopEnd[i] = _InitBoats( i, BOATS_LOD_PLAYER, &_aPlayer[i], &_aWorldOb[i], &_aMotion[i] ); #else /*ULTRA64*/ _afBoatsTopEnd[i] = _InitBoats( i, BOATS_LOD_HIGH, &_aPlayer[i], &_aWorldOb[i], &_aMotion[i] ); #endif /*ULTRA64*/ } /* everything that we need loaded ok*/ _bTexturesLoaded = TRUE; } } /* INIT VARS*/ /* camera stuff for boat select*/ Gamecam_pSector = NULL; _nCamAngle = XMATH_225_BRADIANS; _CamPos.p[1] = 11.5f; _CamLook.p[1] = 12.0f; if( _bTexturesLoaded ) { _UpdateCamera( &_aPlayer[0], 0 ); } /* init our loop path structs for boat select*/ for( i=0; i < _NUM_SELECTABLE_BOATS; i++ ) { _aLoopPath[i].nTemplateIndex = 0; _aLoopPath[i].nTemplateStartOffset = 5; _aLoopPath[i].fXScale = 3500.0f; _aLoopPath[i].fYScale = 4800.0f; _aLoopPath[i].fXTranslate = 0.0f; _aLoopPath[i].fYTranslate = 2150.0f; _aLoopPath[i].nRotation = 0; paths_GetPathLoopStartPos( &_aPathPos[i], &_naPathIndex[i], &_aLoopPath[i] ); paths_GetPathLoopNextPos( &_aPathPos[i], &_naPathIndex[i], _naPathIndex[i], &_aLoopPath[i] ); } /* reset the screen coverage for waterspray etc.*/ gutil_ScreenCoverage_ResetTotal(); gutil_ScreenCoverage_SetLimit( _MAX_SCREEN_AREA_SUM ); /* reset various misc vars*/ _nBoatSlot = _DEFAULT_BOAT_SLOT; _bAllowSelectionChanges = TRUE; _nBoatDiff = _DEFAULT_BOAT_DIFF_SLOT; _StageNum = WPR_SELECT_TRACK; _fScreenFadeIntensity = 0.0f; _nCounter = 0; _bSpecialFlashOn = TRUE; _nDelayVoice = 0; _nDelayedVoiceSelection = 0; _fFlameScale = 0.0f; _bNoAiCodeEntered = FALSE; _nNoAiCodeState = 0; _bNoCatchUpCodeEntered = FALSE; _nNoCatchUpCodeState = 0; _bAdvancedBoatsCodeEntered = bEnableAdvancedBoats; _nTrackCodeCount = 0; _nTrackCodeState = 0; _nBoatCodeCount = 0; _nBoatCodeState = 0; /* setup the track select table*/ _SetupTrackSelectVars( bBonus1Enable, bBonus2Enable ); /* setup the boat select table*/ _SetupBoatSelectVars( bEnableAdvancedBoats ); audio_Trigger( WPR_DEFS_WATER_SLOSHING, WPR_DEFS_WATER_SLOSHING_VOLUME, AUDIO_PAN_CENTER, AUDIO_TYPE_AMBIENT, AUDIO_PRIORITY_AMBIENT ); #if TARGET==DREAMCAST // dcStopFileLogging(); // dcEnableCDCaching(FALSE); // r2file_OpenForRead("hydrodc.r2"); #endif // DREAMCAST } #endif /* do everything needed to properly shutdown the selection wrappers*/ void wpr_select_Close( void ) { u32 i; Player_t *pTemp; if( _bTexturesLoaded ) { /* Reset terrian for the next time and free all resources...*/ for( i=0; i < _NUM_SELECTABLE_BOATS; i++ ) { pTemp = &_aPlayer[i]; ((PhysData_t *)pTemp->Phys.pPhysData)->fPowerTopMPH = _afBoatsTopEnd[i]; phys_FreeBoat( &_aPlayer[i].Phys ); } _bTexturesLoaded = FALSE; } controls_SetSteeringFeedback( 0.0f ); water_EnableCalc( FALSE ); water_EnableDraw( FALSE ); /* stop most all of our audio calls, just to be safe*/ audio_GameIDStop( WPR_DEFS_CURSOR_CHANGE ); audio_GameIDStop( WPR_DEFS_WATER_SLOSHING ); audio_GameIDStop( WPR_DEFS_ATTRACT_MUSIC ); /*audio_GameIDStop( WPR_DEFS_SELECT_MUSIC );*/ audio_GameIDStop( SOUNDCALL_BONUS_SOUND_2 ); audio_GameIDStop( WPR_DEFS_CURSOR_CHANGE ); audio_GameIDStop( SOUNDCALL_HARD_TRACK_SIREN ); audio_GameIDStop( SOUNDCALL_HARD_TRACK_WARNING ); audio_GameIDStop( SOUNDCALL_HARD_BOAT_SIREN ); audio_GameIDStop( SOUNDCALL_HARD_BOAT_WARNING ); audio_GameIDStop( SOUNDCALL_WRAP_CHOOSE_TRACK_SOUND ); audio_GameIDStop( SOUNDCALL_WRAP_CHOOSE_DESTINATION ); } BOOL wpr_select_LoadStage( WprSelectStage_t Stage ) { if( !_bTexturesLoaded ) { return FALSE; } switch( Stage ) { case WPR_SELECT_TRACK: _pCurrentSelectedTrack = &_aTrackSelections[_DEFAULT_TRACK_SLOT]; _pCurrentSelectedTrack->bCurrent = TRUE; controls_ResetLatches(); break; case WPR_SELECT_TRACK_ANIM: _fScreenFadeIntensity = 0.0f; break; case WPR_SELECT_BOAT: _pCurrentSelectedBoat = &_aBoatSelections[_DEFAULT_BOAT_SLOT]; _pCurrentSelectedBoat->bCurrent = TRUE; controls_ResetLatches(); /* turn the default boat on*/ player_DoNotDrawBoat( _GetCurrentBoatSelectPlayerPtr(), FALSE ); break; case WPR_SELECT_BOAT_ANIM: break; case WPR_SELECT_OPTIONS: case WPR_SELECT_OPTIONS_ANIM: break; default: XASSERT_NOW; break; } return TRUE; } /* returns the current stage of the select module*/ WprSelectStage_t wpr_select_GetCurrentStage( void ) { if( !_bTexturesLoaded ) { return 0; } return _StageNum; } void wpr_select_SetCurrentStage( WprSelectStage_t StageNum ) { XASSERT( StageNum < WPR_SELECT_STAGE_COUNT ); if( !_bTexturesLoaded ) { return; } _StageNum = StageNum; controls_SetSteeringFeedback( 0.0f ); switch( StageNum ) { case WPR_SELECT_TRACK: _fFlameScale = 0.0f; audio_Trigger( SOUNDCALL_WRAP_CHOOSE_DESTINATION, WPR_DEFS_VOICE_SELECTION_VOL, AUDIO_PAN_CABINET, AUDIO_TYPE_SPEECH, AUDIO_PRIORITY_SPEECH ); break; case WPR_SELECT_BOAT: _fFlameScale = 0.0f; audio_Trigger( SOUNDCALL_WRAP_CHOOSE_BOAT, WPR_DEFS_VOICE_SELECTION_VOL, AUDIO_PAN_CABINET, AUDIO_TYPE_SPEECH, AUDIO_PRIORITY_SPEECH ); break; case WPR_SELECT_TRACK_ANIM: audio_GameIDFadeOutAndStop( SOUNDCALL_HARD_TRACK_SIREN, 0.60f ); audio_GameIDFadeOutAndStop( SOUNDCALL_HARD_TRACK_WARNING, 0.60f ); break; case WPR_SELECT_BOAT_ANIM: audio_GameIDFadeOutAndStop( SOUNDCALL_HARD_BOAT_SIREN, 0.60f ); audio_GameIDFadeOutAndStop( SOUNDCALL_HARD_BOAT_WARNING, 0.60f ); break; case WPR_SELECT_OPTIONS: case WPR_SELECT_OPTIONS_ANIM: break; default: break; } } /* depending on what stage we are in, has a selection been made*/ /* returns the track/boat num selected or -1 if no selection has*/ /* been made*/ s32 wpr_select_CheckForSelection( int Player ) { if( !_bTexturesLoaded ) { return -1; } if( controls_Click_Player( CONTROLS_THROTTLE_BUTTON, Player ) & CONTROLS_THROTTLE_BUTTON) { if( _StageNum == WPR_SELECT_TRACK ) { return _pCurrentSelectedTrack->anTrackNum[ _pCurrentSelectedTrack->nCurrentSelection ]; } else if( _StageNum == WPR_SELECT_BOAT ) { return _pCurrentSelectedBoat->anBoatNum[ _pCurrentSelectedBoat->nCurrentSelection ]; } else { return _pCurrentSelectedOption->nCurrentSelection; } } return -1; } /* returns the current selected item, use this for*/ /* timeup situation, where an actual selection might*/ /* not have been made yet*/ s32 wpr_select_GetCurrentSelection( void ) { if( !_bTexturesLoaded ) { return -1; } switch( _StageNum ) { case WPR_SELECT_TRACK: case WPR_SELECT_TRACK_ANIM: return _pCurrentSelectedTrack->anTrackNum[ _pCurrentSelectedTrack->nCurrentSelection ]; break; case WPR_SELECT_BOAT: case WPR_SELECT_BOAT_ANIM: return _pCurrentSelectedBoat->anBoatNum[ _pCurrentSelectedBoat->nCurrentSelection ]; break; case WPR_SELECT_OPTIONS: case WPR_SELECT_OPTIONS_ANIM: return _pCurrentSelectedOption->nCurrentSelection; break; default: XASSERT_NOW; break; } return -1; } void wpr_select_SetSelection( u32 nSelection ) { u32 i; if( !_bTexturesLoaded ) { return; } switch( _StageNum ) { case WPR_SELECT_TRACK_ANIM: case WPR_SELECT_TRACK: XASSERT( nSelection < TRACKS_COUNT ); /* unmark the old selection as the current selection*/ _pCurrentSelectedTrack->bCurrent = FALSE; /* find the new current track*/ for( i=0; i < _TRACK_SLOTS; i++ ) { if( _aTrackSelections[i].anTrackNum[0] == (s32)nSelection ) { _pCurrentSelectedTrack = &_aTrackSelections[i]; _pCurrentSelectedTrack->bEnabled = TRUE; _pCurrentSelectedTrack->bCurrent = TRUE; _pCurrentSelectedTrack->nCurrentSelection = 0; audio_Trigger( SOUNDCALL_WRAP_CHOOSE_TRACK_SOUND, _BLING_SELECT_SOUND_VOLUME, AUDIO_PAN_CENTER, AUDIO_TYPE_WRAPPER1, AUDIO_PRIORITY_WRAPPER1 ); audio_GameIDFadeOutAndStop( SOUNDCALL_WRAP_CHOOSE_DESTINATION, 0.55f ); _nDelayVoice = 1; _nDelayedVoiceSelection = _pCurrentSelectedTrack->anSelectionSound[0]; break; } else if( _aTrackSelections[i].anTrackNum[1] == (s32)nSelection ) { _pCurrentSelectedTrack = &_aTrackSelections[i]; _pCurrentSelectedTrack->bEnabled = TRUE; _pCurrentSelectedTrack->bCurrent = TRUE; _pCurrentSelectedTrack->nCurrentSelection = 1; audio_Trigger( SOUNDCALL_WRAP_CHOOSE_TRACK_SOUND, _BLING_SELECT_SOUND_VOLUME, AUDIO_PAN_CENTER, AUDIO_TYPE_WRAPPER1, AUDIO_PRIORITY_WRAPPER1 ); audio_GameIDFadeOutAndStop( SOUNDCALL_WRAP_CHOOSE_DESTINATION, 0.55f ); _nDelayVoice = 1; _nDelayedVoiceSelection = _pCurrentSelectedTrack->anSelectionSound[1]; break; } } break; case WPR_SELECT_BOAT_ANIM: case WPR_SELECT_BOAT: XASSERT( nSelection < _NUM_SELECTABLE_BOATS ); /* unmark the old selection as the current selection*/ _pCurrentSelectedBoat->bCurrent = FALSE; /* find the new current track*/ for( i=0; i < _BOAT_SLOTS; i++ ) { if( _aBoatSelections[i].anBoatNum[0] == (s32)nSelection ) { _pCurrentSelectedBoat = &_aBoatSelections[i]; _pCurrentSelectedBoat->bEnabled = TRUE; _pCurrentSelectedBoat->bCurrent = TRUE; _pCurrentSelectedBoat->nCurrentSelection = 0; audio_Trigger( SOUNDCALL_WRAP_CHOOSE_TRACK_SOUND, _BLING_SELECT_SOUND_VOLUME, AUDIO_PAN_CENTER, AUDIO_TYPE_WRAPPER1, AUDIO_PRIORITY_WRAPPER1 ); audio_GameIDFadeOutAndStop( SOUNDCALL_WRAP_CHOOSE_DESTINATION, 0.55f ); _nDelayVoice = 1; _nDelayedVoiceSelection = _pCurrentSelectedBoat->anSelectionSound[0]; break; } else if( _aBoatSelections[i].anBoatNum[1] == (s32)nSelection ) { _pCurrentSelectedBoat = &_aBoatSelections[i]; _pCurrentSelectedBoat->bEnabled = TRUE; _pCurrentSelectedBoat->bCurrent = TRUE; _pCurrentSelectedBoat->nCurrentSelection = 1; audio_Trigger( SOUNDCALL_WRAP_CHOOSE_TRACK_SOUND, _BLING_SELECT_SOUND_VOLUME, AUDIO_PAN_CENTER, AUDIO_TYPE_WRAPPER1, AUDIO_PRIORITY_WRAPPER1 ); audio_GameIDFadeOutAndStop( SOUNDCALL_WRAP_CHOOSE_DESTINATION, 0.55f ); _nDelayVoice = 1; _nDelayedVoiceSelection = _pCurrentSelectedBoat->anSelectionSound[1]; break; } } break; case WPR_SELECT_OPTIONS: audio_Trigger( SOUNDCALL_WRAP_CHOOSE_TRACK_SOUND, _BLING_SELECT_SOUND_VOLUME, AUDIO_PAN_CENTER, AUDIO_TYPE_WRAPPER1, AUDIO_PRIORITY_WRAPPER1 ); if(_pCurrentSelectedOption->nArrayIndex == 2) bEUROCOM_SPLITSCREEN = FALSE; else if(_pCurrentSelectedOption->nArrayIndex == 3) bEUROCOM_SPLITSCREEN = TRUE; break; case WPR_SELECT_OPTIONS_ANIM: break; default: XASSERT_NOW; break; } } void wpr_select_EnableSelectionChanges( BOOL bEnable ) { _bAllowSelectionChanges = bEnable; } #define SELECTION_AUTOREPEAT_DELAY 3 // Time before allow auto-repeat #define SELECTION_STEER_CHOICE 0.3 // Amount of steering to latch next option void wpr_select_Work( f32 fPercentOfStageTime ) { f32 fSteering, fMin, fMax, fTemp; BOOL bSelectionChanged; s32 nLastDiff, nNewIndex, nLastIndex; ControlState_t *pControl; u32 nPlayers,i; static int SelectionCount; Player_nHumanCount = bEUROCOM_SPLITSCREEN ? 2 : 1; if( !_bTexturesLoaded ) { return; } switch( _StageNum ) { case WPR_SELECT_TRACK: case WPR_SELECT_TRACK_ANIM: _fScreenFadeIntensity = fPercentOfStageTime; /* if selection is enabled*/ if( _bAllowSelectionChanges ) { /* check for selection changes every 2 frames, */ if( Gameloop_bOddFrame ) { bSelectionChanged = FALSE; nLastDiff = _pCurrentSelectedTrack->nDifficultyBar; nLastIndex = _pCurrentSelectedTrack->nArrayIndex; for(i = 0; i < 2; i++){ pControl = i ? &Controls_InputState1 : &Controls_InputState; fSteering = pControl->fWithDeadZone[CONTROLS_WHEEL]; if (fSteering <= -SELECTION_STEER_CHOICE){ if ( SelectionCount <= 0 ) { nNewIndex = nLastIndex - 1; if(nNewIndex < 0) nNewIndex = _TRACK_SLOTS-1; _pCurrentSelectedTrack->bCurrent = FALSE; _pCurrentSelectedTrack = &_aTrackSelections[nNewIndex]; _pCurrentSelectedTrack->bCurrent = TRUE; bSelectionChanged = TRUE; SelectionCount = SELECTION_AUTOREPEAT_DELAY; // Count before allow next selection } else SelectionCount--; } if (fSteering >= SELECTION_STEER_CHOICE ){ if ( SelectionCount<=0 ) { nNewIndex = nLastIndex + 1; if(nNewIndex == _TRACK_SLOTS) nNewIndex = 0; _pCurrentSelectedTrack->bCurrent = FALSE; _pCurrentSelectedTrack = &_aTrackSelections[nNewIndex]; _pCurrentSelectedTrack->bCurrent = TRUE; bSelectionChanged = TRUE; SelectionCount = SELECTION_AUTOREPEAT_DELAY; // Count before allow next selection } else SelectionCount--; } } fMin = _pCurrentSelectedTrack->fMinSteeringRange; fMax = _pCurrentSelectedTrack->fMaxSteeringRange; if( bSelectionChanged ) { /* make sure that our new selection is enabled*/ if( !_pCurrentSelectedTrack->bEnabled ) { if( nNewIndex == 0 ) { nNewIndex++; fMin = _aTrackSelections[0].fMinSteeringRange; fMax = _aTrackSelections[1].fMaxSteeringRange; } else if( nNewIndex == (_TRACK_SLOTS-1) ) { nNewIndex--; fMin = _aTrackSelections[_TRACK_SLOTS-2].fMinSteeringRange; fMax = _aTrackSelections[_TRACK_SLOTS-1].fMaxSteeringRange; } else { nNewIndex = nLastIndex; /* fTemp = ((_pCurrentSelectedTrack->fMaxSteeringRange + _pCurrentSelectedTrack->fMinSteeringRange)*0.5f); if( fSteering > fTemp ) { nNewIndex++; fMin = fTemp; fMax = _aTrackSelections[nNewIndex].fMaxSteeringRange; } else { nNewIndex--; fMin = _aTrackSelections[nNewIndex].fMaxSteeringRange; fMax = fTemp; } */ } bSelectionChanged = ( nLastIndex != nNewIndex ) ? TRUE : FALSE; _pCurrentSelectedTrack->bCurrent = FALSE; _pCurrentSelectedTrack = &_aTrackSelections[nNewIndex]; _pCurrentSelectedTrack->bCurrent = TRUE; } } wpr_defs_SetForceFeedBack( fMin, fMax, fSteering, FALSE ); if( bSelectionChanged ) { _nTrackCodeState = 0; _nTrackCodeCount = 0; _nCounter = 0; _bSpecialFlashOn = TRUE; audio_Trigger( WPR_DEFS_CURSOR_CHANGE, WPR_DEFS_SELECTION_VOLUME, 200, AUDIO_TYPE_WRAPPER2, AUDIO_PRIORITY_WRAPPER2 ); } /* see if we have changed difficulties*/ if( nLastDiff != _pCurrentSelectedTrack->nDifficultyBar ) { if( _pCurrentSelectedTrack->nDifficultyBar == 3 ) { if( !audio_Status_IsGameIDPlaying( SOUNDCALL_HARD_TRACK_SIREN ) ) { audio_Trigger( SOUNDCALL_HARD_TRACK_SIREN, _FIRE_VOLUME, 50, AUDIO_TYPE_WRAPPER1, AUDIO_PRIORITY_WRAPPER1 ); } else { audio_GameIDFadeTo( SOUNDCALL_HARD_TRACK_SIREN, _FIRE_VOLUME, 0.15f ); } if( !audio_Status_IsGameIDPlaying( SOUNDCALL_HARD_TRACK_WARNING ) && !audio_Status_IsGameIDPlaying( SOUNDCALL_WRAP_CHOOSE_DESTINATION) ) { audio_Trigger( SOUNDCALL_HARD_TRACK_WARNING, WPR_DEFS_SELECTION_VOLUME, 0, AUDIO_TYPE_WRAPPER1, AUDIO_PRIORITY_WRAPPER1 ); } } else if( nLastDiff == 3 ) { audio_GameIDFadeOutAndStop( SOUNDCALL_HARD_TRACK_SIREN, 0.40f ); } } } _HandleSpecialCodes( _CODES_SECRET_TRACKS ); } /*/////////////////////////////////////////////////////////////////////////////////////////////////*/ /* move all of the boats so that when we go into boat select our boats are not at the starting line*/ /*/////////////////////////////////////////////////////////////////////////////////////////////////*/ if( _bTexturesLoaded ) { _MoveAllBoats( FALSE ); } break; case WPR_SELECT_BOAT: case WPR_SELECT_BOAT_ANIM: _fScreenFadeIntensity = fPercentOfStageTime; /* if selection is enabled*/ if( _bAllowSelectionChanges ) { /* check for selection changes every 2 frames, */ if( Gameloop_bOddFrame ) { /* turn off the old selected boat*/ player_DoNotDrawBoat( _GetCurrentBoatSelectPlayerPtr(), TRUE ); /* check our steering wheel so that we can select a new boat*/ bSelectionChanged = FALSE; nLastDiff = _pCurrentSelectedBoat->nDifficultyBar; nLastIndex = _pCurrentSelectedBoat->nArrayIndex; pControl = nPlayerSelecting ? &Controls_InputState1 : &Controls_InputState; fSteering = pControl->fWithDeadZone[CONTROLS_WHEEL]; if (fSteering<=-SELECTION_STEER_CHOICE) { if ( (nLastIndex>0) && (SelectionCount<=0) ) { nNewIndex = nLastIndex - 1; _pCurrentSelectedBoat->bCurrent = FALSE; _pCurrentSelectedBoat = &_aBoatSelections[nNewIndex]; _pCurrentSelectedBoat->bCurrent = TRUE; bSelectionChanged = TRUE; SelectionCount = SELECTION_AUTOREPEAT_DELAY; // Count before allow next selection } else SelectionCount--; } else if(fSteering>=SELECTION_STEER_CHOICE) { if ( (nLastIndex<(_BOAT_SLOTS-1)) && (SelectionCount<=0) ) { nNewIndex = nLastIndex + 1; _pCurrentSelectedBoat->bCurrent = FALSE; _pCurrentSelectedBoat = &_aBoatSelections[nNewIndex]; _pCurrentSelectedBoat->bCurrent = TRUE; bSelectionChanged = TRUE; SelectionCount = SELECTION_AUTOREPEAT_DELAY; // Count before allow next selection } else SelectionCount--; } #ifndef EUROCOM_SELECTALL if( !_bAdvancedBoatsCodeEntered && bSelectionChanged ) { /* selection of an advanced boat is not permited yet*/ if(!_aBoatSelections[nNewIndex].bEnabled){ _pCurrentSelectedBoat->bCurrent = FALSE; _pCurrentSelectedBoat = &_aBoatSelections[nLastIndex]; _pCurrentSelectedBoat->bCurrent = TRUE; bSelectionChanged = FALSE; } /* if( nNewIndex >= 6 ) { _pCurrentSelectedBoat->bCurrent = FALSE; _pCurrentSelectedBoat = &_aBoatSelections[nLastIndex]; _pCurrentSelectedBoat->bCurrent = TRUE; bSelectionChanged = FALSE; } */ } #endif /*EUROCOM_SELECTALL*/ fMin = _pCurrentSelectedBoat->fMinSteeringRange; fMax = _pCurrentSelectedBoat->fMaxSteeringRange; wpr_defs_SetForceFeedBack( fMin, fMax, fSteering, FALSE ); if( bSelectionChanged ) { _nBoatCodeState = 0; _nBoatCodeCount = 0; _nCounter = 0; _bSpecialFlashOn = TRUE; audio_Trigger( WPR_DEFS_CURSOR_CHANGE, WPR_DEFS_SELECTION_VOLUME, 200, AUDIO_TYPE_WRAPPER2, AUDIO_PRIORITY_WRAPPER2 ); } /* turn off the old selected boat*/ player_DoNotDrawBoat( _GetCurrentBoatSelectPlayerPtr(), FALSE ); /* see if we have changed difficulties*/ if( nLastDiff != _pCurrentSelectedBoat->nDifficultyBar ) { if( _pCurrentSelectedBoat->nDifficultyBar == 2 ) { if( !audio_Status_IsGameIDPlaying( SOUNDCALL_HARD_BOAT_SIREN ) ) { audio_Trigger( SOUNDCALL_HARD_BOAT_SIREN, _FIRE_VOLUME, 50, AUDIO_TYPE_WRAPPER1, AUDIO_PRIORITY_WRAPPER1 ); } else { audio_GameIDFadeTo( SOUNDCALL_HARD_BOAT_SIREN, _FIRE_VOLUME, 0.15f ); } if( !audio_Status_IsGameIDPlaying( SOUNDCALL_HARD_BOAT_WARNING ) && !audio_Status_IsGameIDPlaying( SOUNDCALL_WRAP_CHOOSE_DESTINATION) ) { audio_Trigger( SOUNDCALL_HARD_BOAT_WARNING, WPR_DEFS_SELECTION_VOLUME, 0, AUDIO_TYPE_WRAPPER1, AUDIO_PRIORITY_WRAPPER1 ); } } else if( nLastDiff == 2 ) { audio_GameIDFadeOutAndStop( SOUNDCALL_HARD_BOAT_SIREN, 0.40f ); } } } _HandleSpecialCodes( _CODES_NO_AI | _CODES_NO_CATCHUP | _CODES_ADVANCED_BOATS | _CODES_SECRET_BOATS ); } /* move all of the boats*/ if( _bTexturesLoaded ) { _MoveAllBoats( TRUE ); } break; case WPR_SELECT_OPTIONS: case WPR_SELECT_OPTIONS_ANIM: _fScreenFadeIntensity = fPercentOfStageTime; /* if selection is enabled*/ if( _bAllowSelectionChanges ) { /* check for selection changes every 2 frames, */ if( Gameloop_bOddFrame ) { bSelectionChanged = FALSE; nLastIndex = _pCurrentSelectedOption->nArrayIndex; // Pressing left/right? for(i = 0; i < Player_nHumanCount; i++){ fSteering = Player_aData[i].Controls.fWithDeadZone[CONTROLS_WHEEL]; if (fSteering<=-SELECTION_STEER_CHOICE) { if ( (nLastIndex>2) && (SelectionCount<=0) ) { nNewIndex = nLastIndex - 1; _pCurrentSelectedOption->bCurrent = FALSE; _pCurrentSelectedOption = &_aOptionSelections[nNewIndex]; _pCurrentSelectedOption->bCurrent = TRUE; bSelectionChanged = TRUE; SelectionCount = SELECTION_AUTOREPEAT_DELAY; // Count before allow next selection } else SelectionCount--; } else if(fSteering>=SELECTION_STEER_CHOICE) { if ( (nLastIndex<3) && (SelectionCount<=0) ) { nNewIndex = nLastIndex + 1; _pCurrentSelectedOption->bCurrent = FALSE; _pCurrentSelectedOption = &_aOptionSelections[nNewIndex]; _pCurrentSelectedOption->bCurrent = TRUE; bSelectionChanged = TRUE; SelectionCount = SELECTION_AUTOREPEAT_DELAY; // Count before allow next selection } else SelectionCount--; } } fMin = _pCurrentSelectedOption->fMinSteeringRange; fMax = _pCurrentSelectedOption->fMaxSteeringRange; if( bSelectionChanged ) { /* make sure that our new selection is enabled*/ if( !_pCurrentSelectedOption->bEnabled ) { if( nNewIndex == 0 ) { nNewIndex++; fMin = _aOptionSelections[0].fMinSteeringRange; fMax = _aOptionSelections[1].fMaxSteeringRange; } else if( nNewIndex == (_TRACK_SLOTS-1) ) { nNewIndex--; fMin = _aOptionSelections[_OPTION_SLOTS-2].fMinSteeringRange; fMax = _aOptionSelections[_OPTION_SLOTS-1].fMaxSteeringRange; } else { fTemp = ((_pCurrentSelectedOption->fMaxSteeringRange + _pCurrentSelectedOption->fMinSteeringRange)*0.5f); if( fSteering > fTemp ) { nNewIndex++; fMin = fTemp; fMax = _aOptionSelections[nNewIndex].fMaxSteeringRange; } else { nNewIndex--; fMin = _aOptionSelections[nNewIndex].fMaxSteeringRange; fMax = fTemp; } } bSelectionChanged = ( nLastIndex != nNewIndex ) ? TRUE : FALSE; _pCurrentSelectedOption->bCurrent = FALSE; _pCurrentSelectedOption = &_aTrackSelections[nNewIndex]; _pCurrentSelectedOption->bCurrent = TRUE; } if(nNewIndex < 2) _nCurrentBar = 0; else if(nNewIndex < 4) _nCurrentBar = 1; else _nCurrentBar = 2; } if( bSelectionChanged ) { _bSpecialFlashOn = TRUE; audio_Trigger( WPR_DEFS_CURSOR_CHANGE, WPR_DEFS_SELECTION_VOLUME, 200, AUDIO_TYPE_WRAPPER2, AUDIO_PRIORITY_WRAPPER2 ); } wpr_defs_SetForceFeedBack( fMin, fMax, fSteering, FALSE ); } _HandleSpecialCodes( _CODES_SECRET_TRACKS ); } /*/////////////////////////////////////////////////////////////////////////////////////////////////*/ /* move all of the boats so that when we go into boat select our boats are not at the starting line*/ /*/////////////////////////////////////////////////////////////////////////////////////////////////*/ if( _bTexturesLoaded ) { _MoveAllBoats( FALSE ); } break; break; default: XASSERT_NOW; break; } /* take care of our special flash counter that changes everytime there is a selection change*/ ++_nCounter; if( (_nCounter & 0x3) == 0x3 ) { _bSpecialFlashOn = !_bSpecialFlashOn; } if( _nDelayVoice ) { _nDelayVoice++; if( _nDelayVoice == 9 ) { audio_Trigger( _nDelayedVoiceSelection, WPR_DEFS_VOICE_SELECTION_VOL, AUDIO_PAN_CABINET, AUDIO_TYPE_WRAPPER1, AUDIO_PRIORITY_WRAPPER1 ); _nDelayVoice = 0; _nDelayedVoiceSelection = 0; } } } void wpr_select_Draw( f32 fTime ) { /* if the textures could not be loaded, use the old text based system*/ if( !_bTexturesLoaded ) { /* clear the frame buffer*/ gutil_ClearFrameBuffer3( 128, 64, 32 ); /* print an error mode*/ text_SetFont( TEXT_FONT_LARGE ); Text_fScale = 1.10f; text_PrintStr( 50.0f, 50.0f, "ERROR LOADING SELECTION TEXTURES\n" ); return; } else { switch( _StageNum ) { case WPR_SELECT_TRACK: _DrawTrackSelect( TRUE, (u32)fTime ); break; case WPR_SELECT_TRACK_ANIM: _DrawTrackSelect( FALSE, 0 ); break; case WPR_SELECT_BOAT: _DrawBoatSelect( TRUE, (u32)fTime ); break; case WPR_SELECT_BOAT_ANIM: if(nPlayerSelecting == 0) _DrawBoatSelect( TRUE, 0 ); else _DrawBoatSelect( FALSE, 0 ); break; case WPR_SELECT_OPTIONS: _DrawOptionsSelect(TRUE, (u32)fTime); break; case WPR_SELECT_OPTIONS_ANIM: _DrawOptionsSelect(FALSE, 0); break; default: XASSERT_NOW; break; } } } void wpr_select_SetNoAi( void ) { if( !_bTexturesLoaded ) { return; } if( !_bNoAiCodeEntered ) { _bNoAiCodeEntered = TRUE; _nNoAiCodeState = 0; audio_Trigger( SOUNDCALL_BONUS_SOUND_2, 255, 0, AUDIO_TYPE_WRAPPER2, AUDIO_PRIORITY_WRAPPER2 ); } } BOOL wpr_select_GetNoAi( void ) { if( !_bTexturesLoaded ) { return FALSE; } return _bNoAiCodeEntered; } void wpr_select_SetNoCatchUp( void ) { if( !_bTexturesLoaded ) { return; } if( !_bNoCatchUpCodeEntered ) { _bNoCatchUpCodeEntered = TRUE; _nNoCatchUpCodeState = 0; audio_Trigger( SOUNDCALL_BONUS_SOUND_2, 255, 0, AUDIO_TYPE_WRAPPER2, AUDIO_PRIORITY_WRAPPER2 ); } } BOOL wpr_select_GetNoCatchUp( void ) { if( !_bTexturesLoaded ) { return FALSE; } return _bNoCatchUpCodeEntered; } BOOL wpr_select_CanWeSelectAnAdvancedBoat( void ) { return _bAdvancedBoatsCodeEntered; } /*==================*/ /* private functions*/ static void _DrawTrackSelect( BOOL bPreSelection, u32 nTime ) { u32 i, nTemp, nPriorState; /* setup the ortho draw*/ mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); /* draw the back ground image, don't compare these pixels, but enable the z buffer*/ nPriorState = gutil_ZbufferSetState( GUTIL_ZBUFFER_STATE_WRITE_ONLY ); mesh3d_DrawOrtho( _pTrackBG, 0.0f, 0.0f, WPR_DEFS_LAYER1_Z, 0, 1.0f ); gutil_ZbufferSetState( nPriorState ); /* draw the icons and the time*/ // _DrawIconsAndTime( nTime, bPreSelection ); /* draw the heading at the top of the page*/ #if TARGET!=ULTRA64 /* No track select shadows */ mesh3d_DrawOrtho( _pText_ChooseA, _CHOOSE_TRACK1_X, _CHOOSE_TRACK_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pText_Track, _CHOOSE_TRACK2_X, (_CHOOSE_TRACK_Y - 2.0f), WPR_DEFS_LAYER2_Z, 0, 1.0f ); #endif /*ULTRA64*/ /* draw colored bars*/ #if TARGET!=ULTRA64 /* No track select shadows */ for( i=0; i < 6; i++ ) { // Don't draw bonus bars (not used any more) if(i == 0 || i == 4) continue; // Blue Bar if(i == 2){ if( _pCurrentSelectedTrack->nDifficultyBar != 2 ) mesh3d_SetOrthoEffects( 0.3f, 0.3f, 0.3f, 1.0f, 0.0f ); else mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pTrackDiffBars[2], _aTrackBlueDiffBar[0].p[0], _aTrackBlueDiffBar[0].p[1], WPR_DEFS_LAYER2_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pLeftBlueBar, _aTrackBlueDiffBar[1].p[0], _aTrackBlueDiffBar[1].p[1], WPR_DEFS_LAYER2_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pTrackTextEasy, _aTrackBlueDiffBar[2].p[0], _aTrackBlueDiffBar[2].p[1], WPR_DEFS_LAYER2_Z, 0, 1.0f ); } // Bonus track bars else if(i == 5){ if( _pCurrentSelectedTrack->nDifficultyBar != 5 ) mesh3d_SetOrthoEffects( 0.3f, 0.3f, 0.3f, 1.0f, 0.0f ); else mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho(_LeftGreenBar, -75, -145, WPR_DEFS_LAYER2_Z, 0, 1.0f); mesh3d_DrawOrtho(_RightGreenBar, 72, -145, WPR_DEFS_LAYER2_Z, 0, 1.0f); mesh3d_DrawOrtho(_MiddleGreenBar, 0, -115, WPR_DEFS_LAYER2_Z, 0, 1.0f); } // Bar is not selected track bar else if( i != _pCurrentSelectedTrack->nDifficultyBar) { mesh3d_SetOrthoEffects( 0.3f, 0.3f, 0.3f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pTrackDiffBars[i], _aTrackDiffBar[i].p[0], _aTrackDiffBar[i].p[1], WPR_DEFS_LAYER2_Z, 0, 1.0f ); } else{ mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pTrackDiffBars[i], _aTrackDiffBar[i].p[0], _aTrackDiffBar[i].p[1], WPR_DEFS_LAYER2_Z, 0, 1.0f ); } } #endif /*ULTRA64*/ /* draw the selectable objects*/ for( i=0; i < _TRACK_SLOTS; i++ ) { _DrawATrackSelectionObject( &_aTrackSelections[i], bPreSelection ); } /* draw the flames if necessary*/ if( _pCurrentSelectedTrack->nDifficultyBar == 3 ) { /* do we need to scale the flame up*/ if( _fFlameScale < 1.0f ) { _fFlameScale += 0.15f; if( _fFlameScale > 1.0f ) { _fFlameScale = 1.0f; } } else { _fFlameScale = 1.0f + (xmath_RandomFloat() * 0.1f); } } else { /* do we need to scale the flame down*/ if( _fFlameScale != 0.0f ) { _fFlameScale -= 0.15f; if( _fFlameScale <= 0.01f ) { _fFlameScale = 0.0f; } } } if( _fFlameScale != 0.0f ) { /* draw the flames on under the hard heading*/ nTemp = Gameloop_nFrameCounter % _NUM_FIRE_FRAMES; for( i=0; i < 5; i++ ) { nTemp += 4; if( nTemp >= _NUM_FIRE_FRAMES ) { nTemp -= _NUM_FIRE_FRAMES; } _pFlame->pMtl->pTexDef = _pFireCell[nTemp]; #if TARGET==ULTRA64 /* Move flame up on track select */ mesh3d_DrawOrtho( _pFlame, 140.0f + (i * 18.0f), 88.0f, WPR_DEFS_LAYER6_Z, 0, _fFlameScale ); #else /*ULTRA64*/ mesh3d_DrawOrtho( _pFlame, 140.0f + (i * 18.0f), 57.0f, WPR_DEFS_LAYER6_Z, 0, _fFlameScale ); #endif /*ULTRA64*/ } } /* draw hard track plate text over the flame*/ /* if(!_aTrackDiffBarEnabled[3]){ mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, _TRACK_SELECT_GRAYED_ALPHA, 0.0f ); mesh3d_DrawOrtho( _pHardTrackText, _aTrackDiffBar[3].p[0], _aTrackDiffBar[3].p[1], WPR_DEFS_LAYER7_Z, 0, 1.0f ); } else{ if( _pCurrentSelectedTrack->nDifficultyBar == 3 ) { mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pHardTrackText, _aTrackDiffBar[3].p[0], _aTrackDiffBar[3].p[1], WPR_DEFS_LAYER7_Z, 0, 1.0f ); } else { mesh3d_SetOrthoEffects( 0.3f, 0.3f, 0.3f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pHardTrackText, _aTrackDiffBar[3].p[0], _aTrackDiffBar[3].p[1], WPR_DEFS_LAYER7_Z, 0, 1.0f ); } } */ _DrawAnalogAndButton(); } static void _DrawBoatSelect( BOOL bPreSelection, u32 nTime ) { u32 i, nTemp, nPriorState; /*////////////////////////*/ /* draw the boat and water*/ /*////////////////////////*/ gutil_ScreenCoverage_ResetTotal(); /* Set up lighting...*/ mesh3d_ClearLightList(); /* Set up the camera*/ #if TARGET==ULTRA64 /* N64 boat select uses different camera method! */ xfm_InitCameraRot( &_Camera, _CamLook.p[0],_CamLook.p[1],_CamLook.p[2], _nCamAngle,XMATH_DEGREES_TO_BRADIANS(25.0),0); /* Set clipping region for water, to help speed; coords read from screen grab */ gDPSetScissor(N64GfxDlPtr++, G_SC_NON_INTERLACE, 122, 90, 394, 186); ViewDist = -35; /* Distance of camera from point*/ NearPlaneClip = 15; FarPlaneClip = 100; /* Bring far plane in to increase z-buffer accuracy and help speed*/ SetN64CameraMatrix(); #else /*ULTRA64*/ xfm_InitCameraLookFromVec( &_Camera, &_CamPos, &_CamLook ); #endif /*ULTRA64*/ xfm_BuildCameraXfmAndInitStack( &_Camera ); /* clear the z buffer and the screen*/ gutil_ClearFrameBuffer3( 255, 255, 255 ); /* draw the world*/ world_DrawSectorViewDir( Gamecam_pSector, SECTOR_DIRECTION_FORWARD, FALSE ); /*PAB*/ #if TARGET==ULTRA64 /* N64 boat select uses different camera method! */ /* Put clipping region back to normal ready for sprites */ gDPSetScissor(N64GfxDlPtr++, G_SC_NON_INTERLACE, Screen_LeftRight_Clip, Screen_TopBottom_Clip, Screen_Width-Screen_LeftRight_Clip, Screen_Height-Screen_TopBottom_Clip); #endif /*ULTRA64*/ /* setup the ortho draw*/ mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); /*//////////////////*/ /* draw LAYER1 stuff*/ /*//////////////////*/ /* draw the back ground image, don't compare these pixels, but enable the z buffer*/ nPriorState = gutil_ZbufferSetState( GUTIL_ZBUFFER_STATE_WRITE_ONLY ); mesh3d_DrawOrtho( _pBoatBG, 0.0f, 0.0f, WPR_DEFS_LAYER1_Z, 0, 1.0f ); gutil_ZbufferSetState( nPriorState ); /*//////////////////*/ /* draw LAYER2 stuff*/ /*//////////////////*/ /* draw the icons and the time*/ // _DrawIconsAndTime( nTime, bPreSelection ); /*//////////////////*/ /* draw LAYER3 stuff*/ /*//////////////////*/ /* draw the heading at the top of the page*/ #if TARGET!=ULTRA64 /* No track select shadows */ mesh3d_DrawOrtho( _pText_ChooseA, _CHOOSE_BOAT1_X, _CHOOSE_BOAT_Y, WPR_DEFS_LAYER3_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pText_Boat, _CHOOSE_BOAT2_X, (_CHOOSE_BOAT_Y - 1.0f), WPR_DEFS_LAYER3_Z, 0, 1.0f ); #endif /*ULTRA64*/ /* draw colored bars*/ #if TARGET!=ULTRA64 /* No boat shadows */ for( i=0; i < 3; i++ ) { if( i != _pCurrentSelectedBoat->nDifficultyBar ) { if(!_aBoatDiffBarsEnabled[i]) { /* ghosted hard bars*/ mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 0.2779f, 0.0f ); mesh3d_DrawOrtho( _pBoatDiffBars[i], _aBoatDiffBar[i].p[0], _aBoatDiffBar[i].p[1], WPR_DEFS_LAYER3_Z, 0, 1.0f ); } else { /* darkened non selected bars*/ mesh3d_SetOrthoEffects( 0.3f, 0.3f, 0.3f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pBoatDiffBars[i], _aBoatDiffBar[i].p[0], _aBoatDiffBar[i].p[1], WPR_DEFS_LAYER3_Z, 0, 1.0f ); } } else { /* current bar*/ mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pBoatDiffBars[ _pCurrentSelectedBoat->nDifficultyBar ], _aBoatDiffBar[ _pCurrentSelectedBoat->nDifficultyBar ].p[0], _aBoatDiffBar[ _pCurrentSelectedBoat->nDifficultyBar ].p[1], WPR_DEFS_LAYER3_Z, 0, 1.0f ); } } #endif /*ULTRA64*/ /* draw the frame for the boat window, changing the color based on the current diff bar and disabling the z buffer*/ nPriorState = gutil_ZbufferSetState( GUTIL_ZBUFFER_STATE_WRITE_ONLY ); mesh3d_SetOrthoEffects( 0.0f, 0.0f, 0.0f, 1.0f, 0.0f ); /* draw the shadow first*/ #if TARGET!=ULTRA64 /* No boat select shadows */ mesh3d_DrawOrtho( _pBoatFrameShadow, (_BOAT_FRAME_X - 4.0f), _BOAT_FRAME_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); #endif /*ULTRA64*/ #if TARGET!=ULTRA64 /* Draw boat select frame in correct colour */ switch( _pCurrentSelectedBoat->nDifficultyBar ) { case 0: mesh3d_SetOrthoEffects( 1.0f, 1.0f, 0.0f, 1.0f, 0.0f ); break; case 1: mesh3d_SetOrthoEffects( 0.0f, 0.0f, 1.0f, 1.0f, 0.0f ); break; case 2: mesh3d_SetOrthoEffects( 1.0f, 0.0f, 0.0f, 1.0f, 0.0f ); break; default: XASSERT_NOW; break; } mesh3d_DrawOrtho( _pBoatFrame, _BOAT_FRAME_X, _BOAT_FRAME_Y, WPR_DEFS_LAYER3_Z, 0, 1.0f ); #else /*ULTRA64*/ /* Select correct palette for boat frame... Blue,Yellow or Red!*/ mesh3d_DrawOrtho2( _pBoatFrame, _BOAT_FRAME_X, _BOAT_FRAME_Y, WPR_DEFS_LAYER3_Z, 0, 1.0f , 0,0,_nBoatDiff, _pBoatFrame->nFlags); #endif /*ULTRA64*/ mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); gutil_ZbufferSetState( nPriorState ); /*////////////////////////////*/ /* DRAW THE SELECTABLE OBJECTS*/ /*////////////////////////////*/ for( i=0; i < _BOAT_SLOTS; i++ ) { if(i > 8) _DrawABoatSelectionObject( &_aBoatSelections[i], bPreSelection, 1.0f ); else _DrawABoatSelectionObject( &_aBoatSelections[i], bPreSelection, 1.0f ); } mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); /*//////////////////*/ /* draw LAYER6 stuff*/ /*//////////////////*/ /* draw the flames on under the hard heading*/ if( _pCurrentSelectedBoat->nDifficultyBar == 2 ) { /* do we need to scale the flame up*/ if( _fFlameScale < 1.0f ) { _fFlameScale += 0.15f; if( _fFlameScale > 1.0f ) { _fFlameScale = 1.0f; } } else { _fFlameScale = 1.0f + (xmath_RandomFloat() * 0.1f); } } else { /* do we need to scale the flame down*/ if( _fFlameScale != 0.0f ) { _fFlameScale -= 0.15f; if( _fFlameScale <= 0.01f ) { _fFlameScale = 0.0f; } } } if( _fFlameScale != 0.0f ) { nTemp = Gameloop_nFrameCounter % _NUM_FIRE_FRAMES; for( i=0; i < 4; i++ ) { nTemp += 4; if( nTemp >= _NUM_FIRE_FRAMES ) { nTemp -= _NUM_FIRE_FRAMES; } _pFlame->pMtl->pTexDef = _pFireCell[nTemp]; #if TARGET==ULTRA64 /* Move flame up on boat select */ mesh3d_DrawOrtho( _pFlame, 170.0f + (i * 17.0f), 120.0f, WPR_DEFS_LAYER3_Z + 100.0f, 0, _fFlameScale ); #else /*ULTRA64*/ mesh3d_DrawOrtho( _pFlame, 178.0f + (i * 17.0f), 80.0f, WPR_DEFS_LAYER3_Z + 100.0f, 0, _fFlameScale ); #endif /*ULTRA64*/ } } if( _bNoAiCodeEntered ) { mesh3d_DrawOrtho( _pNoAiIcon, 143.0f, -175.0f, WPR_DEFS_LAYER6_Z, 0, 0.5f ); } if( _bNoCatchUpCodeEntered ) { mesh3d_DrawOrtho( _pNoCatchUpIcon, 108.0f, -175.0f, WPR_DEFS_LAYER6_Z, 0, 0.5f ); } _DrawAnalogAndButton(); /* fade the screen if we have made a selection*/ if( !bPreSelection ) { gutil_DrawBlackOrWhiteScreenFade( _fScreenFadeIntensity, FALSE ); } } static void _UpdateCamera( Player_t *pPlayer, u32 nBoatNum ) { Vec2_t Temp; f32 fTemp; if( nBoatNum >= _NUM_SELECTABLE_BOATS ) { nBoatNum = 0; } _nCamAngle += 300; fTemp = xmath_sin( Gameloop_nFrameCounter << 8 ); /* adjust the camera position and lookat point (y values)*/ _CamPos.p[1] = _afBoatYCamLookup[nBoatNum].p[0] + fTemp * 3.5f; _CamLook.p[1] = _afBoatYCamLookup[nBoatNum].p[1] + fTemp * 1.5f; /* spin the camera around the boat*/ vec2_Set( &Temp, pPlayer->pHullDir->p[0], pPlayer->pHullDir->p[2] ); vec2_Unit( &Temp ); /* adjust the camera's zoom (xz values)*/ fTemp *= _afBoatZoomCamLookup[nBoatNum].p[0]; fTemp += _afBoatZoomCamLookup[nBoatNum].p[1]; vec2_Scale1( &Temp, fTemp ); vec2_RotateBradians( &Temp, _nCamAngle ); _CamPos.p[0] = Temp.p[0] + pPlayer->pWorldOb->Tws.CurrentWorldPos.p[0]; _CamPos.p[2] = Temp.p[1] + pPlayer->pWorldOb->Tws.CurrentWorldPos.p[1]; _CamLook.p[0] = pPlayer->pWorldOb->Tws.CurrentWorldPos.p[0]; _CamLook.p[2] = pPlayer->pWorldOb->Tws.CurrentWorldPos.p[1]; Gamecam_pSector = world_FindSectorContainingPoint( pPlayer->Phys.pBoatSector, _CamPos.p[0], _CamPos.p[2] ); } /* do everything needed to get a particular boat into a boat select player struct, (will set the boat's don't draw flag)*/ /* returns the original topspeed of the boat*/ static f32 _InitBoats( u32 nBoatType, u32 nLod, Player_t *pPlayer, WorldOb_t *pWorldOb, Motion_t *pMotion ) { BOOL bReturn; f32 fTemp; XASSERT( nBoatType < BOATS_COUNT ); player_SetAPlayerToDefault( pPlayer ); pPlayer->Powerup.fBoosterTime = 0.0f; pPlayer->nBoatType = nBoatType; pPlayer->Controls.fNoDeadZone[CONTROLS_THROTTLE] = 1.0f; pPlayer->Controls.fWithDeadZone[CONTROLS_THROTTLE] = 1.0f; worldob_Init( pWorldOb ); /* set the boat's worldob flags*/ pWorldOb->nFlags |= ( WORLDOB_FLAG_TRIPWIRE | WORLDOB_FLAG_OFFWORLDPERSIST | WORLDOB_FLAG_SPECIAL_PHYS ); /* set the boat's worldob userdata to point to its player's struct (and vice versa)*/ pWorldOb->pUserObject = pPlayer; pPlayer->pWorldOb = pWorldOb; /* setup the worldob work and draw functions*/ pWorldOb->pWorkFcn = Boats_apWorkFunctions[nBoatType]; pWorldOb->pDrawFcn = Boats_apDrawFunctions[nBoatType]; /* place boats to their start position in the world*/ terrain_SetBoatStartPositions( pPlayer, 0, FALSE ); orient_BuildRotYXZ( &pWorldOb->Orient, pPlayer->Phys.nHeading, 0, 0 ); /* set the boat's pHullDir pointer*/ pPlayer->pHullDir = (Vec3_t *)&pWorldOb->Orient.Rot.m[2]; /* load the boats parts and setup its animations*/ (*Boats_apLoadFunctions[nBoatType])( nLod, 0, pPlayer, FALSE ); /* init worldobs bound*/ worldob_InitBoundsFromMesh( pWorldOb, pPlayer->pDasBoot ); /* set our light sensor*/ vec3_Set( &pWorldOb->SensorDir, 0.0f, 1.0f, -1.0f ); /* add worldob to the system*/ worldob_Add( pWorldOb, NULL ); /* set and init the boat's motion struct*/ pWorldOb->pMotion = pMotion; bReturn = phys_InitBoat( Boats_apszBoatPhysDataNames[nBoatType], &pPlayer->Phys, &pPlayer->pDasBoot->Bound, pWorldOb, TRUE, /* Init shadow*/ TRUE, PHYS_TYPE_SELECT_RACER ); /* turn off boat sounds*/ pPlayer->Phys.nControlFlags |= ( PHYS_CONTROLFLAG_SILENT | PHYS_CONTROLFLAG_NO_BOOSTER | PHYS_CONTROLFLAG_NO_HOVER | PHYS_CONTROLFLAG_NO_STUNTS | PHYS_CONTROLFLAG_NO_FLYSTEER ); XASSERT( bReturn ); fTemp = ((PhysData_t *)pPlayer->Phys.pPhysData)->fPowerTopMPH; /* force all boats to go 300 mph, except rad hazard*/ if( nBoatType != BOATS_TYPE_RAD_HAZARD ) { ((PhysData_t *)pPlayer->Phys.pPhysData)->fPowerTopMPH = 300.0f; } else { ((PhysData_t *)pPlayer->Phys.pPhysData)->fPowerTopMPH = 200.0f; } player_DoNotDrawBoat( pPlayer, TRUE ); return fTemp; } static void _MoveAllBoats( BOOL bBoatSelect ) { Vec2_t Temp; u32 i; f32 fSteering, fDistance; for( i=0; i < _NUM_SELECTABLE_BOATS; i++ ) { _aPlayer[i].Phys.fSteer = _aPlayer[i].Controls.fWithDeadZone[CONTROLS_WHEEL]; _aPlayer[i].Phys.fSteerNoDeadZone = _aPlayer[i].Controls.fNoDeadZone[CONTROLS_WHEEL]; /* SER: Added 980923*/ _aPlayer[i].Phys.fThrottle = _aPlayer[i].Controls.fWithDeadZone[CONTROLS_THROTTLE]; _aPlayer[i].Phys.bHydroBoostersOn = FALSE; } phys_SimulateAll(); for( i=0; i < _NUM_SELECTABLE_BOATS; i++ ) { _aPlayer[i].fSpeedMph = _aPlayer[i].Phys.fSpeedMPH; _aPlayer[i].fRPM = _aPlayer[i].Phys.fPropRPM * 10000.0f; } if( bBoatSelect ) { if(bEUROCOM_WORLDOBWORKFUNCS){ Gamecam_pSector = NULL; } /*EUROCOM_WORLDOBWORKFUNCS*/ /* call the boat's work function*/ worldob_CallAllWorkFcns( Gameloop_nDeltaFrames,Gameloop_n2xFrameCounter ); /* update the camera*/ _UpdateCamera( _GetCurrentBoatSelectPlayerPtr(), _pCurrentSelectedBoat->anBoatNum[ _pCurrentSelectedBoat->nCurrentSelection ] ); } /* do the particles work*/ particle_CallWorkFunctions(); particle_CallCellBlocksWorkFunctions(); waterspray_Work(); worldob_TransformAllObjectLights(); if( bBoatSelect ) { phys_Work(); } /* steer the boats around the path*/ for( i=0; i < _NUM_SELECTABLE_BOATS; i++ ) { Temp.p[0] = _aPlayer[i].pWorldOb->Orient.Pos.p[0] - _aPathPos[i].p[0]; Temp.p[1] = _aPlayer[i].pWorldOb->Orient.Pos.p[2] - _aPathPos[i].p[1]; fDistance = vec2_CalcMag( &Temp ); if( fDistance <= 400.0f ) { paths_GetPathLoopNextPos( &_aPathPos[i], &_naPathIndex[i], _naPathIndex[i], &_aLoopPath[i] ); } fSteering = player_SteerPlayerToPoint( &_aPlayer[i], &_aPathPos[i] ); controls_ComputeAndSetSteerDeadZone( &_aPlayer[i].Controls, fSteering ); } } static void _DrawIconsAndTime( u32 nTime, BOOL bDrawIcons ) { u32 nTemp; f32 fTemp; if( bDrawIcons ) { /* draw the icons in the cornors of the screen*/ nTemp = (u32)( xmath_sin( Gameloop_nFrameCounter << 10 ) * 10000.0f ); mesh3d_DrawOrtho( _pIcon_Wheel_Shadow, WPR_DEFS_ICON_WHEEL_SHADOW_X, WPR_DEFS_ICON_WHEEL_SHADOW_Y, WPR_DEFS_LAYER2_Z, nTemp, 1.0f ); mesh3d_DrawOrtho( _pIcon_Wheel, WPR_DEFS_ICON_WHEEL_X, WPR_DEFS_ICON_WHEEL_Y, WPR_DEFS_LAYER3_Z, nTemp, 1.0f ); mesh3d_DrawOrtho( _pIcon_Throttle, WPR_DEFS_ICON_THROTTLE_X, WPR_DEFS_ICON_THROTTLE_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); fTemp = 28.0f + (xmath_sin( Gameloop_nFrameCounter << 12 ) * 5.0f); mesh3d_DrawOrtho( _pIcon_Arrow, WPR_DEFS_ICON_THROTTLE_X - fTemp, WPR_DEFS_ICON_THROTTLE_ARROW_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pText_Select, WPR_DEFS_ICON_SELECT_X, WPR_DEFS_ICON_SELECT_Y, WPR_DEFS_LAYER4_Z, 0, 1.0f ); mesh3d_DrawOrtho( _pText_Accept, WPR_DEFS_ICON_ACCEPT_X, WPR_DEFS_ICON_ACCEPT_Y, WPR_DEFS_LAYER3_Z, 0, 1.0f ); /* set our throttle button lights*/ if( (Gameloop_nFrameCounter & 0x7) < 0x4 ) { controls_TurnLightsOn( CONTROLS_LIGHT_THROTTLE ); } else { controls_TurnLightsOff( CONTROLS_LIGHT_THROTTLE ); } } else { controls_TurnLightsOff( CONTROLS_LIGHT_THROTTLE ); } /* draw the countdown timer*/ if( nTime > 99 ) { nTime = 99; } nTemp = nTime/10; mesh3d_DrawOrtho( _pText_Numbers[nTemp], WPR_DEFS_TIME_DIGIT1_X, WPR_DEFS_TIME_DIGIT_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); nTemp = nTime - (nTemp * 10); mesh3d_DrawOrtho( _pText_Numbers[nTemp], WPR_DEFS_TIME_DIGIT2_X, WPR_DEFS_TIME_DIGIT_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); } /* call once per game frame*/ static void _HandleSpecialCodes( u32 nWhatCode ) { u32 nViewButtons; return; /* check our controls*/ nViewButtons = controls_Click( CONTROLS_VIEW_BUTTONS ) & CONTROLS_VIEW_BUTTONS; /* CHECK FOR THE NO AI CODE*/ if( nWhatCode & _CODES_NO_AI ) { /* CODE = view1 + view2 (while throttle at 0), then throttle less than -0.75 (while view1 + 2)*/ if( !_bNoAiCodeEntered ) { /* make sure the throttle is set to the reverse half of its range*/ if( Controls_InputState.fWithDeadZone[CONTROLS_THROTTLE] < 0.2f ) { if( _nNoAiCodeState == 0 ) { _nNoAiCodeState = 1; } } else { _nNoAiCodeState = 0; } switch( _nNoAiCodeState ) { case 0: /* do nothing*/ break; case 1: /* look for view button 1 and 2 ( while throttle is around 0 )*/ #ifdef ARCADEPC if( Controls_InputState.nButtons == (CONTROLS_VIEW1_BUTTON | CONTROLS_VIEW2_BUTTON) ) { #else if( Controls_InputState.nButtons == CONTROLS_START_BUTTON ) { #endif if( Controls_InputState.fWithDeadZone[CONTROLS_THROTTLE] < 0.2f && Controls_InputState.fWithDeadZone[CONTROLS_THROTTLE] > -0.5f ) { _nNoAiCodeState++; } else { /* the throttle was not in the correct position*/ _nNoAiCodeState = 0; } } else { /* some other key was hit, reset*/ _nNoAiCodeState = 0; } break; case 2: /* look for view button 1 and 2 ( while throttle is all the way back )*/ #ifdef ARCADEPC if( Controls_InputState.nButtons == (CONTROLS_VIEW1_BUTTON | CONTROLS_VIEW2_BUTTON) ) { #else if( Controls_InputState.nButtons == CONTROLS_START_BUTTON ) { #endif if( Controls_InputState.fWithDeadZone[CONTROLS_THROTTLE] <= -0.5f ) { _nNoAiCodeState = 0; /* the code has been entered*/ audio_Trigger( SOUNDCALL_BONUS_SOUND_2, 255, 0, AUDIO_TYPE_WRAPPER2, AUDIO_PRIORITY_WRAPPER2 ); _bNoAiCodeEntered = TRUE; } } else { /* some other key was hit, reset*/ _nNoAiCodeState = 0; } break; default: XASSERT_NOW; break; } } } /* CHECK FOR THE NO CATCHUP CODE*/ if( nWhatCode & _CODES_NO_CATCHUP ) { /* CODE = view2 + view3 (while throttle at 0), then throttle set to -1 (while view2 + 3)*/ if( !_bNoCatchUpCodeEntered ) { /* make sure the throttle is set to the reverse half of its range*/ if( Controls_InputState.fWithDeadZone[CONTROLS_THROTTLE] < 0.2f ) { if( _nNoCatchUpCodeState == 0 ) { _nNoCatchUpCodeState = 1; } } else { _nNoCatchUpCodeState = 0; } switch( _nNoCatchUpCodeState ) { case 0: /* do nothing*/ break; case 1: /* look for view button 2 and 3 ( while throttle is near 0 )*/ #ifdef ARCADEPC if( Controls_InputState.nButtons == (CONTROLS_VIEW2_BUTTON | CONTROLS_VIEW3_BUTTON) ) { #else if( Controls_InputState.nButtons == CONTROLS_COIN ) { #endif if( Controls_InputState.fWithDeadZone[CONTROLS_THROTTLE] < 0.2f && Controls_InputState.fWithDeadZone[CONTROLS_THROTTLE] > -0.5f ) { _nNoCatchUpCodeState++; } else { /* the throttle was not in the correct position*/ _nNoCatchUpCodeState = 0; } } else { /* some other key was hit, reset*/ _nNoCatchUpCodeState = 0; } break; case 2: /* look for view button 2 and 3 ( while throttle is set to -1 )*/ #ifdef ARCADEPC if( Controls_InputState.nButtons == (CONTROLS_VIEW2_BUTTON | CONTROLS_VIEW3_BUTTON) ) { #else if( Controls_InputState.nButtons == CONTROLS_COIN ) { #endif if( Controls_InputState.fWithDeadZone[CONTROLS_THROTTLE] <= -0.5f ) { _nNoCatchUpCodeState = 0; /* the code has been entered*/ audio_Trigger( SOUNDCALL_BONUS_SOUND_2, 255, 0, AUDIO_TYPE_WRAPPER2, AUDIO_PRIORITY_WRAPPER2 ); _bNoCatchUpCodeEntered = TRUE; } } else { /* some other key was hit, reset*/ _nNoCatchUpCodeState = 0; } break; default: XASSERT_NOW; break; } } } /* CHECK FOR THE ADVANCED BOAT CODE*/ if( nWhatCode & _CODES_ADVANCED_BOATS ) { /* CODE = view1 or view2 or view3*/ if( !_bAdvancedBoatsCodeEntered ) { #ifdef ARCADEPC if( Controls_InputState.nButtons & CONTROLS_VIEW_BUTTONS ) { audio_Trigger( SOUNDCALL_BONUS_SOUND_2, 255, 0, AUDIO_TYPE_WRAPPER2, AUDIO_PRIORITY_WRAPPER2 ); _bAdvancedBoatsCodeEntered = TRUE; /* enable all of the advanced boats*/ _aBoatSelections[6].bEnabled = TRUE; _aBoatSelections[7].bEnabled = TRUE; _aBoatSelections[8].bEnabled = TRUE; } #else if( Controls_InputState.nButtons == CONTROLS_START_BUTTON ) { audio_Trigger( SOUNDCALL_BONUS_SOUND_2, 255, 0, AUDIO_TYPE_WRAPPER2, AUDIO_PRIORITY_WRAPPER2 ); _bAdvancedBoatsCodeEntered = TRUE; /* enable all of the advanced boats*/ _aBoatSelections[6].bEnabled = TRUE; _aBoatSelections[7].bEnabled = TRUE; _aBoatSelections[8].bEnabled = TRUE; } #endif } } /* CHECK FOR THE SECRET TRACK CODE*/ if( nWhatCode & _CODES_SECRET_TRACKS ) { /* CODE = triple tap view1 button while on a track that has alternate selectable tracks*/ if( _pCurrentSelectedTrack->nNumSelections > 1 ) { #ifdef ARCADEPC if( nViewButtons == CONTROLS_VIEW1_BUTTON ) { #else if( Controls_InputState.nButtons == CONTROLS_START_BUTTON && Gameloop_bOddFrame ) { #endif ++_nTrackCodeState; _nTrackCodeCount = 0; if( _nTrackCodeState == 3 ) { _nTrackCodeCount = 0; /* toggle between selectable tracks*/ _pCurrentSelectedTrack->nCurrentSelection = ( _pCurrentSelectedTrack->nCurrentSelection == 0 ) ? 1 : 0; /* the code has been entered*/ audio_Trigger( SOUNDCALL_BONUS_SOUND_2, 255, 0, AUDIO_TYPE_WRAPPER2, AUDIO_PRIORITY_WRAPPER2 ); } } else { ++_nTrackCodeCount; #ifdef ARCADEPC if( _nTrackCodeCount > 20 || nViewButtons ) { #else if( _nTrackCodeCount > 20 || Controls_InputState.nButtons != CONTROLS_START_BUTTON ) { #endif /* not fast enough for a triple tap*/ _nTrackCodeState = 0; _nTrackCodeCount = 0; } } } else { _nTrackCodeState = 0; _nTrackCodeCount = 0; } } /* CHECK FOR THE SECRET BOAT CODE*/ if( nWhatCode & _CODES_SECRET_BOATS ) { /* CODE = any view button while on a boat that has alternate selectable boat*/ if( _pCurrentSelectedBoat->nNumSelections > 1 ) { #ifdef ARCADEPC if( nViewButtons == CONTROLS_VIEW1_BUTTON ) { #else if( Controls_InputState.nButtons == CONTROLS_START_BUTTON && Gameloop_bOddFrame ) { #endif ++_nBoatCodeState; _nBoatCodeCount = 0; if( _nBoatCodeState == 3 ) { _nBoatCodeCount = 0; /* toggle between selectable tracks*/ player_DoNotDrawBoat( _GetCurrentBoatSelectPlayerPtr(), TRUE ); _pCurrentSelectedBoat->nCurrentSelection = ( _pCurrentSelectedBoat->nCurrentSelection == 0 ) ? 1 : 0; player_DoNotDrawBoat( _GetCurrentBoatSelectPlayerPtr(), FALSE ); /* the code has been entered*/ audio_Trigger( SOUNDCALL_BONUS_SOUND_2, 255, 0, AUDIO_TYPE_WRAPPER2, AUDIO_PRIORITY_WRAPPER2 ); } } else { ++_nBoatCodeCount; #ifdef ARCADEPC if( _nBoatCodeCount > 20 || nViewButtons ) { #else if( _nBoatCodeCount > 20 || Controls_InputState.nButtons != CONTROLS_START_BUTTON ) { #endif /* not fast enough for a triple tap*/ _nBoatCodeState = 0; _nBoatCodeCount = 0; } } } else { _nBoatCodeState = 0; _nBoatCodeCount = 0; } } } static void _DrawATrackSelectionObject( TrackSelectionObject_t *pOb, BOOL bPreSelection ) { u16 nIndex, nTemp; mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); nIndex = 0; if( pOb->bCurrent ) { /* draw the shadow of the screen shot window*/ mesh3d_SetOrthoYScale(0.8f); #if TARGET!=ULTRA64 mesh3d_SetOrthoEffects( 0.0f, 0.0f, 0.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( pOb->pScreenShotFrameShadow, _TRACK_FRAME_SHADOW_X, _TRACK_FRAME_SHADOW_Y, WPR_DEFS_LAYER2_Z, 0, 1.0f ); mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); #endif /*ULTRA64*/ /* draw the track screen shot*/ mesh3d_DrawOrtho( pOb->apScreenShot[nIndex], _TRACK_SCREEN_X, _TRACK_SCREEN_Y, WPR_DEFS_LAYER3_Z, 0, 1.0f ); mesh3d_SetOrthoYScale(1.0f); /* draw the difficulty on top of the screen shot*/ if( Gameloop_nFrameCounter%23 < 13 ) { /* change the text based on the current diff bar*/ nTemp = Tracks_Info[ pOb->anTrackNum[nIndex] ].nDifficulty; switch( nTemp ) { case TRACKS_DIFFICULTY_NOVICE: case TRACKS_DIFFICULTY_EASY: mesh3d_SetOrthoEffects( 0.1f, 0.1f, 1.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pText_Difficulty[nTemp], 1.0f, -10.0f, WPR_DEFS_LAYER4_Z, 0, 1.2f ); break; case TRACKS_DIFFICULTY_MEDIUM: mesh3d_SetOrthoEffects( 1.0f, 1.0f, 0.0, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pText_Difficulty[nTemp], -2.5f, -10.0f, WPR_DEFS_LAYER4_Z, 0, 1.2f ); break; case TRACKS_DIFFICULTY_HARD: case TRACKS_DIFFICULTY_EXPERT: mesh3d_SetOrthoEffects( 1.0f, 0.0f, 0.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( _pText_Difficulty[nTemp], 1.0f, -10.0f, WPR_DEFS_LAYER4_Z, 0, 1.2f ); break; default: XASSERT_NOW; break; } mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); } #if TARGET!=ULTRA64 mesh3d_DrawOrtho( pOb->pIconShadow, pOb->fX + _TRACK_OVAL_SHADOW_X, pOb->fY + _TRACK_OVAL_SHADOW_Y, WPR_DEFS_LAYER4_Z, 0, 1.0f ); #endif /*ULTRA64*/ if( bPreSelection ) { if( _bSpecialFlashOn ) { mesh3d_DrawOrtho( pOb->apSelectedIcon[nIndex], pOb->fX, pOb->fY, WPR_DEFS_LAYER5_Z, 0, 1.0f ); } else { mesh3d_DrawOrtho( pOb->apUnSelectedIcon[nIndex], pOb->fX, pOb->fY, WPR_DEFS_LAYER5_Z, 0, 1.0f ); } mesh3d_DrawOrtho( pOb->apTitle[nIndex], pOb->fX - 1.0f, pOb->fY + 2.0f, WPR_DEFS_LAYER6_Z, 0, 1.0f ); } else { /* a selection has been made*/ if( (Gameloop_nFrameCounter & 0x2) ) { mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.9f ); mesh3d_DrawOrtho( pOb->apUnSelectedIcon[nIndex], pOb->fX, pOb->fY, WPR_DEFS_LAYER5_Z, 0, 1.0f ); mesh3d_DrawOrtho( pOb->apTitle[nIndex], pOb->fX - 1.0f, pOb->fY + 2.0f, WPR_DEFS_LAYER6_Z, 0, 1.0f ); mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); } else { mesh3d_DrawOrtho( pOb->apSelectedIcon[nIndex], pOb->fX, pOb->fY, WPR_DEFS_LAYER5_Z, 0, 1.0f ); mesh3d_DrawOrtho( pOb->apTitle[nIndex], pOb->fX - 1.0f, pOb->fY + 2.0f, WPR_DEFS_LAYER6_Z, 0, 1.0f ); } } } else { mesh3d_DrawOrtho( pOb->pIconShadow, pOb->fX + _TRACK_OVAL_SHADOW_X, pOb->fY + _TRACK_OVAL_SHADOW_Y, WPR_DEFS_LAYER4_Z, 0, 1.0f ); if( pOb->bEnabled ) { mesh3d_DrawOrtho( pOb->apUnSelectedIcon[nIndex], pOb->fX, pOb->fY, WPR_DEFS_LAYER5_Z, 0, 1.0f ); mesh3d_DrawOrtho( pOb->apTitle[nIndex], pOb->fX - 1.0f, pOb->fY + 2.0f, WPR_DEFS_LAYER6_Z, 0, 1.0f ); } else { mesh3d_DrawOrtho( pOb->apUnSelectedIcon[1], pOb->fX, pOb->fY, WPR_DEFS_LAYER5_Z, 0, 1.0f ); } } } static void _SetupTrackSelectVars( BOOL bBonus1Enable, BOOL bBonus2Enable ) { TrackSelectionObject_t *pObj; _pCurrentSelectedTrack = &_aTrackSelections[_DEFAULT_TRACK_SLOT]; ///////////////////////////////// MEDIUM TRACKS /////////////////////////////////// /* TRACKS_CHINA*/ pObj = &_aTrackSelections[0]; pObj->bEnabled = bMediumTracksUnlocked; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_CHINA; pObj->anTrackNum[1] = -1; pObj->nDifficultyBar = 1; pObj->nArrayIndex = 0; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_CHINA; pObj->anSelectionSound[1] = 0; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_CHINA]; pObj->apScreenShot[1] = NULL; pObj->apSelectedIcon[0] = _pOnFrame[0]; pObj->apSelectedIcon[1] = NULL; pObj->apUnSelectedIcon[0] = _pOffFrame[0]; pObj->apUnSelectedIcon[1] = _YellowLockIcon; // (Locked out) pObj->apTitle[0] = _pText_TrackNames[TRACKS_CHINA]; pObj->apTitle[1] = NULL; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = -0.85f; pObj->fMaxSteeringRange = -0.55f; pObj->fX = _TRACK_COLUMN_1; pObj->fY = _TRACK_ROW_4; pObj->bBonusTrack = FALSE; /* TRACKS_LAKEPOWELL / TRACKS_LOOP2*/ pObj = &_aTrackSelections[1]; pObj->bEnabled = bMediumTracksUnlocked; pObj->bCurrent = FALSE; #if TARGET!=ULTRA64 /*Don't allow secret tracks*/ pObj->nNumSelections = 1; #else //ULTRA64 pObj->nNumSelections = 1; #endif //ULTRA64 pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_LAKEPOWELL; pObj->anTrackNum[1] = TRACKS_LOOP2; pObj->nDifficultyBar = 1; pObj->nArrayIndex = 1; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_LAKE_POWELL; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_LAKEPOWELL]; pObj->apSelectedIcon[0] = _pOnFrame[0]; pObj->apUnSelectedIcon[0] = _pOffFrame[0]; pObj->apTitle[0] = _pText_TrackNames[TRACKS_LAKEPOWELL]; pObj->anSelectionSound[1] = SOUNDCALL_WRAP_CHOOSE_LOOP2; pObj->apScreenShot[1] = _pTrackScreens[TRACKS_LOOP2]; pObj->apSelectedIcon[1] = _pOnFrame[0]; pObj->apUnSelectedIcon[1] = _YellowLockIcon; // (Locked out) pObj->apTitle[1] = _pText_TrackNames[TRACKS_LOOP2]; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = -0.65f; pObj->fMaxSteeringRange = -0.35f; pObj->fX = _TRACK_COLUMN_1; pObj->fY = _TRACK_ROW_3; pObj->bBonusTrack = FALSE; ///////////////////////////////// EASY TRACKS /////////////////////////////////// /* TRACKS_LOOP1*/ pObj = &_aTrackSelections[2]; pObj->bEnabled = TRUE; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_LOOP1; pObj->anTrackNum[1] = -1; pObj->nDifficultyBar = 2; pObj->nArrayIndex = 2; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_LOOP1; pObj->anSelectionSound[1] = 0; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_LOOP1]; pObj->apScreenShot[1] = NULL; pObj->apSelectedIcon[0] = _pOnFrame[1]; pObj->apSelectedIcon[1] = NULL; pObj->apUnSelectedIcon[0] = _pOffFrame[1]; pObj->apUnSelectedIcon[1] = _BlueLockIcon; // (Locked out) pObj->apTitle[0] = _pText_TrackNames[TRACKS_LOOP1]; pObj->apTitle[1] = NULL; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = -0.45f; pObj->fMaxSteeringRange = -0.15f; pObj->fX = _TRACK_COLUMN_2; pObj->fY = _TRACK_ROW_2; pObj->bBonusTrack = FALSE; /* TRACKS_AMAZON*/ pObj = &_aTrackSelections[3]; pObj->bEnabled = TRUE; pObj->bCurrent = TRUE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_AMAZON; pObj->anTrackNum[1] = -1; pObj->nDifficultyBar = 2; pObj->nArrayIndex = 3; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_SOUTH_PACIFIC; pObj->anSelectionSound[1] = 0; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_AMAZON]; pObj->apScreenShot[1] = NULL; pObj->apSelectedIcon[0] = _pOnFrame[1]; pObj->apSelectedIcon[1] = NULL; pObj->apUnSelectedIcon[0] = _pOffFrame[1]; pObj->apUnSelectedIcon[1] = _BlueLockIcon; // (Locked out) pObj->apTitle[0] = _pText_TrackNames[TRACKS_AMAZON]; pObj->apTitle[1] = NULL; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = -0.25f; pObj->fMaxSteeringRange = 0.05f; pObj->fX = _TRACK_COLUMN_3; pObj->fY = _TRACK_ROW_1; pObj->bBonusTrack = FALSE; /* TRACKS_GREECE*/ pObj = &_aTrackSelections[4]; pObj->bEnabled = TRUE; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_GREECE; pObj->anTrackNum[1] = -1; pObj->nDifficultyBar = 2; pObj->nArrayIndex = 4; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_GREECE; pObj->anSelectionSound[1] = 0; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_GREECE]; pObj->apScreenShot[1] = NULL; pObj->apSelectedIcon[0] = _pOnFrame[1]; pObj->apSelectedIcon[1] = NULL; pObj->apUnSelectedIcon[0] = _pOffFrame[1]; pObj->apUnSelectedIcon[1] = _BlueLockIcon; // (Locked out) pObj->apTitle[0] = _pText_TrackNames[TRACKS_GREECE]; pObj->apTitle[1] = NULL; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = -0.05f; pObj->fMaxSteeringRange = 0.25f; pObj->fX = _TRACK_COLUMN_4; pObj->fY = _TRACK_ROW_1; pObj->bBonusTrack = FALSE; /* TRACKS_ARTIC*/ pObj = &_aTrackSelections[5]; pObj->bEnabled = TRUE; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_ARTIC; pObj->anTrackNum[1] = -1; pObj->nDifficultyBar = 2; pObj->nArrayIndex = 5; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_ARCTIC_CIRCLE; pObj->anSelectionSound[1] = 0; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_ARTIC]; pObj->apScreenShot[1] = NULL; pObj->apSelectedIcon[0] = _pOnFrame[1]; pObj->apSelectedIcon[1] = NULL; pObj->apUnSelectedIcon[0] = _pOffFrame[1]; pObj->apUnSelectedIcon[1] = _BlueLockIcon; // (Locked out) pObj->apTitle[0] = _pText_TrackNames[TRACKS_ARTIC]; pObj->apTitle[1] = NULL; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = 0.15f; pObj->fMaxSteeringRange = 0.45f; pObj->fX = _TRACK_COLUMN_5; pObj->fY = _TRACK_ROW_2; pObj->bBonusTrack = FALSE; ///////////////////////////////// HARD TRACKS /////////////////////////////////// /* TRACKS_SHIPGRAVEYARD*/ pObj = &_aTrackSelections[6]; pObj->bEnabled = bHardTracksUnlocked; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_SHIPGRAVEYARD; pObj->anTrackNum[1] = -1; pObj->nDifficultyBar = 3; pObj->nArrayIndex = 6; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_SHIP_GRAVEYARD; pObj->anSelectionSound[1] = 0; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_SHIPGRAVEYARD]; pObj->apScreenShot[1] = NULL; pObj->apSelectedIcon[0] = _pOnFrame[2]; pObj->apSelectedIcon[1] = NULL; pObj->apUnSelectedIcon[0] = _pOffFrame[2]; pObj->apUnSelectedIcon[1] = _RedLockIcon; // (Locked out) pObj->apTitle[0] = _pText_TrackNames[TRACKS_SHIPGRAVEYARD]; pObj->apTitle[1] = NULL; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = 0.35f; pObj->fMaxSteeringRange = 0.65f; pObj->fX = _TRACK_COLUMN_6; pObj->fY = _TRACK_ROW_3; pObj->bBonusTrack = FALSE; /* TRACKS_VENICE*/ pObj = &_aTrackSelections[7]; pObj->bEnabled = bHardTracksUnlocked; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_VENICE; pObj->anTrackNum[1] = -1; pObj->nDifficultyBar = 3; pObj->nArrayIndex = 7; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_VENICE; pObj->anSelectionSound[1] = 0; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_VENICE]; pObj->apScreenShot[1] = NULL; pObj->apSelectedIcon[0] = _pOnFrame[2]; pObj->apUnSelectedIcon[0] = _pOffFrame[2]; pObj->apUnSelectedIcon[1] = _RedLockIcon; // (Locked out) pObj->apTitle[0] = _pText_TrackNames[TRACKS_VENICE]; pObj->apTitle[1] = NULL; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = 0.55f; pObj->fMaxSteeringRange = 0.85f; pObj->fX = _TRACK_COLUMN_6; pObj->fY = _TRACK_ROW_4; pObj->bBonusTrack = FALSE; ///////////////////////////////// BONUS TRACKS /////////////////////////////////// /* TRACKS_CAVERN (ACTUALLY LOOP3 FOR NOW) */ pObj = &_aTrackSelections[11]; pObj->bEnabled = bBonusTrack1Unlocked; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_LOOP3; pObj->anTrackNum[1] = -1; pObj->nDifficultyBar = 5; pObj->nArrayIndex = 11; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_LOOP2; pObj->anSelectionSound[1] = 0; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_LOOP3]; pObj->apScreenShot[1] = NULL; pObj->apSelectedIcon[0] = _pOnFrame[2]; pObj->apSelectedIcon[1] = NULL; pObj->apUnSelectedIcon[0] = _pOffFrame[2]; pObj->apUnSelectedIcon[1] = _GreenLockIcon; // (Locked out) pObj->apTitle[0] = _pText_TrackNames[TRACKS_LOOP3]; pObj->apTitle[1] = NULL; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = 0.75f; pObj->fMaxSteeringRange = 1.05f; pObj->fX = _TRACK_COLUMN_1; pObj->fY = _TRACK_ROW_5; pObj->bBonusTrack = FALSE; /* TRACKS_NILE (BONUS TRACK) */ pObj = &_aTrackSelections[10]; pObj->bEnabled = bBonusTrack2Unlocked; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_NILE; pObj->anTrackNum[1] = -1; pObj->nDifficultyBar = 5; pObj->nArrayIndex = 10; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_NILE_RIVER; pObj->anSelectionSound[1] = 0; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_NILE]; pObj->apScreenShot[1] = NULL; pObj->apSelectedIcon[0] = _pOnFrame[3]; pObj->apSelectedIcon[1] = NULL; pObj->apUnSelectedIcon[0] = _pOffFrame[3]; pObj->apUnSelectedIcon[1] = _GreenLockIcon; // (Locked out) pObj->apTitle[0] = _pText_TrackNames[TRACKS_NILE]; pObj->apTitle[1] = NULL; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = 0.75f; pObj->fMaxSteeringRange = 1.05f; pObj->fX = _TRACK_COLUMN_3; pObj->fY = _TRACK_ROW_6; pObj->bBonusTrack = TRUE; /* TRACKS_NY */ pObj = &_aTrackSelections[9]; pObj->bEnabled = bBonusTrack3Unlocked; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_NY; pObj->anTrackNum[1] = -1; pObj->nDifficultyBar = 5; pObj->nArrayIndex = 9; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_NEW_YORK; pObj->anSelectionSound[1] = 0; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_NY]; pObj->apScreenShot[1] = NULL; pObj->apSelectedIcon[0] = _pOnFrame[3]; pObj->apSelectedIcon[1] = NULL; pObj->apUnSelectedIcon[0] = _pOffFrame[3]; pObj->apUnSelectedIcon[1] = _GreenLockIcon; // (Locked out) pObj->apTitle[0] = _pText_TrackNames[TRACKS_NY]; pObj->apTitle[1] = NULL; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = -1.05f; pObj->fMaxSteeringRange = -0.75f; pObj->fX = _TRACK_COLUMN_4; pObj->fY = _TRACK_ROW_6; pObj->bBonusTrack = TRUE; /* TRACKS_PRACTICE */ pObj = &_aTrackSelections[8]; pObj->bEnabled = bBonusTrack4Unlocked; pObj->bCurrent = FALSE; pObj->nNumSelections = 1; pObj->nCurrentSelection = 0; pObj->anTrackNum[0] = TRACKS_LOOP2; pObj->anTrackNum[1] = -1; pObj->nDifficultyBar = 5; pObj->nArrayIndex = 8; pObj->anSelectionSound[0] = SOUNDCALL_WRAP_CHOOSE_LOOP2; pObj->anSelectionSound[1] = 0; pObj->apScreenShot[0] = _pTrackScreens[TRACKS_LOOP2]; pObj->apScreenShot[1] = NULL; pObj->apSelectedIcon[0] = _pOnFrame[0]; pObj->apSelectedIcon[1] = NULL; pObj->apUnSelectedIcon[0] = _pOffFrame[0]; pObj->apUnSelectedIcon[1] = _GreenLockIcon; // (Locked out) pObj->apTitle[0] = _pText_TrackNames[TRACKS_LOOP2]; pObj->apTitle[1] = NULL; pObj->pScreenShotFrameShadow = _pTrackFrameShadow; pObj->pIconShadow = _pTrackShadows; pObj->fMinSteeringRange = 0.75f; pObj->fMaxSteeringRange = 1.05f; pObj->fX = _TRACK_COLUMN_6; pObj->fY = _TRACK_ROW_5; pObj->bBonusTrack = FALSE; _aTrackDiffBarEnabled[1] = bMediumTracksUnlocked; _aTrackDiffBarEnabled[3] = bHardTracksUnlocked; } static void _SetupBoatSelectVars( BOOL bEnableAdvancedBoats ) { BoatSelectObject_t *pBoatObj; _pCurrentSelectedBoat = &_aBoatSelections[_DEFAULT_BOAT_SLOT]; /* BOATS_TYPE_THRESHER \ BOATS_TYPE_COP*/ pBoatObj = &_aBoatSelections[0]; pBoatObj->bEnabled = bMediumTracksUnlocked; pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_THRESHER; pBoatObj->anBoatNum[1] = -1; pBoatObj->nDifficultyBar = 0; pBoatObj->nArrayIndex = 0; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_THRESHER]; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_THRESHER]; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_THRESHER]; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_THRESHER; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_THRESHER]; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_THRESHER]; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_THRESHER]; // pBoatObj->apPlayer[1] = &_aPlayer[BOATS_TYPE_COP]; // pBoatObj->apWorldOb[1] = &_aWorldOb[BOATS_TYPE_COP]; // pBoatObj->apMotion[1] = &_aMotion[BOATS_TYPE_COP]; // pBoatObj->anSelectionSound[1] = SOUNDCALL_GCOM_CHOOSE_COP; // pBoatObj->apBoatIcon[1] = _pBoatPics[BOATS_TYPE_COP]; // pBoatObj->apBoatShadow[1] = _pBoatShadows[BOATS_TYPE_COP]; // pBoatObj->apTitle[1] = _pText_BoatNames[BOATS_TYPE_COP]; pBoatObj->fMinSteeringRange = -1.05f; pBoatObj->fMaxSteeringRange = -0.727777778f; pBoatObj->fX = _BOAT_COLUMN_1; pBoatObj->fY = _BOAT_ROW_1; /* BOATS_TYPE_TIDAL_BLADE \ BOATS_TYPE_TINY*/ pBoatObj = &_aBoatSelections[1]; pBoatObj->bEnabled = bMediumTracksUnlocked; pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_TIDAL_BLADE; pBoatObj->anBoatNum[1] = -1; pBoatObj->nDifficultyBar = 0; pBoatObj->nArrayIndex = 1; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_TIDAL_BLADE]; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_TIDAL_BLADE]; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_TIDAL_BLADE]; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_TIDAL_BLADE; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_TIDAL_BLADE]; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_TIDAL_BLADE]; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_TIDAL_BLADE]; // pBoatObj->apPlayer[1] = &_aPlayer[BOATS_TYPE_TINY]; // pBoatObj->apWorldOb[1] = &_aWorldOb[BOATS_TYPE_TINY]; // pBoatObj->apMotion[1] = &_aMotion[BOATS_TYPE_TINY]; // pBoatObj->anSelectionSound[1] = SOUNDCALL_GCOM_CHOOSE_TINY; // pBoatObj->apBoatIcon[1] = _pBoatPics[BOATS_TYPE_TINY]; // pBoatObj->apBoatShadow[1] = _pBoatShadows[BOATS_TYPE_TINY]; // pBoatObj->apTitle[1] = _pText_BoatNames[BOATS_TYPE_TINY]; pBoatObj->fMinSteeringRange = -0.827777778f; pBoatObj->fMaxSteeringRange = -0.505555556f; pBoatObj->fX = _BOAT_COLUMN_1; pBoatObj->fY = _BOAT_ROW_2; /* BOATS_TYPE_BANSHEE*/ pBoatObj = &_aBoatSelections[2]; pBoatObj->bEnabled = bMediumTracksUnlocked; pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_BANSHEE; pBoatObj->anBoatNum[1] = -1; pBoatObj->nDifficultyBar = 0; pBoatObj->nArrayIndex = 2; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_BANSHEE]; pBoatObj->apPlayer[1] = NULL; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_BANSHEE]; pBoatObj->apWorldOb[1] = NULL; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_BANSHEE]; pBoatObj->apMotion[1] = NULL; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_BANSHEE; pBoatObj->anSelectionSound[1] = 0; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_BANSHEE]; pBoatObj->apBoatIcon[1] = NULL; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_BANSHEE]; pBoatObj->apBoatShadow[1] = NULL; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_BANSHEE]; pBoatObj->apTitle[1] = NULL; pBoatObj->fMinSteeringRange = -0.605555556f; pBoatObj->fMaxSteeringRange = -0.283333333f; pBoatObj->fX = _BOAT_COLUMN_1; pBoatObj->fY = _BOAT_ROW_3; /* BOATS_TYPE_DAMN_THE_TORPEDOES*/ pBoatObj = &_aBoatSelections[3]; pBoatObj->bEnabled = TRUE; pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_DAMN_THE_TORPEDOES; pBoatObj->anBoatNum[1] = -1; pBoatObj->nDifficultyBar = 1; pBoatObj->nArrayIndex = 3; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_DAMN_THE_TORPEDOES]; pBoatObj->apPlayer[1] = NULL; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_DAMN_THE_TORPEDOES]; pBoatObj->apWorldOb[1] = NULL; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_DAMN_THE_TORPEDOES]; pBoatObj->apMotion[1] = NULL; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_TORPEDO; pBoatObj->anSelectionSound[1] = 0; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_DAMN_THE_TORPEDOES]; pBoatObj->apBoatIcon[1] = NULL; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_DAMN_THE_TORPEDOES]; pBoatObj->apBoatShadow[1] = NULL; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_DAMN_THE_TORPEDOES]; pBoatObj->apTitle[1] = NULL; pBoatObj->fMinSteeringRange = -0.383333333f; pBoatObj->fMaxSteeringRange = -0.061111111f; pBoatObj->fX = _BOAT_COLUMN_2; pBoatObj->fY = _BOAT_ROW_4; /* BOATS_TYPE_MIDWAY*/ pBoatObj = &_aBoatSelections[4]; pBoatObj->bEnabled = TRUE; pBoatObj->bCurrent = TRUE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_MIDWAY; pBoatObj->anBoatNum[1] = -1; pBoatObj->nDifficultyBar = 1; pBoatObj->nArrayIndex = 4; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_MIDWAY]; pBoatObj->apPlayer[1] = NULL; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_MIDWAY]; pBoatObj->apWorldOb[1] = NULL; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_MIDWAY]; pBoatObj->apMotion[1] = NULL; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_MIDWAY; pBoatObj->anSelectionSound[1] = 0; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_MIDWAY]; pBoatObj->apBoatIcon[1] = NULL; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_MIDWAY]; pBoatObj->apBoatShadow[1] = NULL; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_MIDWAY]; pBoatObj->apTitle[1] = NULL; pBoatObj->fMinSteeringRange = -0.161111111f; pBoatObj->fMaxSteeringRange = 0.161111111f; pBoatObj->fX = _BOAT_COLUMN_3; pBoatObj->fY = _BOAT_ROW_4; /* BOATS_TYPE_MISS_BEHAVE*/ pBoatObj = &_aBoatSelections[5]; pBoatObj->bEnabled = TRUE; pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_MISS_BEHAVE; pBoatObj->anBoatNum[1] = -1; pBoatObj->nDifficultyBar = 1; pBoatObj->nArrayIndex = 5; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_MISS_BEHAVE]; pBoatObj->apPlayer[1] = NULL; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_MISS_BEHAVE]; pBoatObj->apWorldOb[1] = NULL; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_MISS_BEHAVE]; pBoatObj->apMotion[1] = NULL; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_MISS_BEHAVE; pBoatObj->anSelectionSound[1] = 0; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_MISS_BEHAVE]; pBoatObj->apBoatIcon[1] = NULL; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_MISS_BEHAVE]; pBoatObj->apBoatShadow[1] = NULL; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_MISS_BEHAVE]; pBoatObj->apTitle[1] = NULL; pBoatObj->fMinSteeringRange = 0.061111111f; pBoatObj->fMaxSteeringRange = 0.383333333f; pBoatObj->fX = _BOAT_COLUMN_4; pBoatObj->fY = _BOAT_ROW_4; /* BOATS_TYPE_CUT_THROAT*/ pBoatObj = &_aBoatSelections[6]; pBoatObj->bEnabled = bHardTracksUnlocked; pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_CUT_THROAT; pBoatObj->anBoatNum[1] = -1; pBoatObj->nDifficultyBar = 2; pBoatObj->nArrayIndex = 6; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_CUT_THROAT]; pBoatObj->apPlayer[1] = NULL; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_CUT_THROAT]; pBoatObj->apWorldOb[1] = NULL; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_CUT_THROAT]; pBoatObj->apMotion[1] = NULL; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_CUT_THROAT; pBoatObj->anSelectionSound[1] = 0; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_CUT_THROAT]; pBoatObj->apBoatIcon[1] = NULL; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_CUT_THROAT]; pBoatObj->apBoatShadow[1] = NULL; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_CUT_THROAT]; pBoatObj->apTitle[1] = NULL; pBoatObj->fMinSteeringRange = 0.283333333f; pBoatObj->fMaxSteeringRange = 0.605555556f; pBoatObj->fX = _BOAT_COLUMN_5; pBoatObj->fY = _BOAT_ROW_3; /* BOATS_TYPE_RAD_HAZARD \ BOATS_TYPE_HOVERCRAFT*/ pBoatObj = &_aBoatSelections[7]; pBoatObj->bEnabled = bHardTracksUnlocked; pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_RAD_HAZARD; pBoatObj->anBoatNum[1] = -1; pBoatObj->nDifficultyBar = 2; pBoatObj->nArrayIndex = 7; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_RAD_HAZARD]; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_RAD_HAZARD]; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_RAD_HAZARD]; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_RAD_HAZARD; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_RAD_HAZARD]; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_RAD_HAZARD]; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_RAD_HAZARD]; // pBoatObj->apPlayer[1] = &_aPlayer[BOATS_TYPE_HOVERCRAFT]; // pBoatObj->apWorldOb[1] = &_aWorldOb[BOATS_TYPE_HOVERCRAFT]; // pBoatObj->apMotion[1] = &_aMotion[BOATS_TYPE_HOVERCRAFT]; // pBoatObj->anSelectionSound[1] = SOUNDCALL_GCOM_CHOOSE_HOVERCRAFT; // pBoatObj->apBoatIcon[1] = _pBoatPics[BOATS_TYPE_HOVERCRAFT]; // pBoatObj->apBoatShadow[1] = _pBoatShadows[BOATS_TYPE_HOVERCRAFT]; // pBoatObj->apTitle[1] = _pText_BoatNames[BOATS_TYPE_HOVERCRAFT]; pBoatObj->fMinSteeringRange = 0.505555556f; pBoatObj->fMaxSteeringRange = 0.827777778f; pBoatObj->fX = _BOAT_COLUMN_5; pBoatObj->fY = _BOAT_ROW_2; /* BOATS_TYPE_RAZORBACK \ BOATS_TYPE_SEADOG*/ pBoatObj = &_aBoatSelections[8]; pBoatObj->bEnabled = bHardTracksUnlocked; pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_RAZORBACK; pBoatObj->anBoatNum[1] = -1; pBoatObj->nDifficultyBar = 2; pBoatObj->nArrayIndex = 8; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_RAZORBACK]; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_RAZORBACK]; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_RAZORBACK]; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_RAZORBACK; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_RAZORBACK]; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_RAZORBACK]; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_RAZORBACK]; // pBoatObj->apPlayer[1] = &_aPlayer[BOATS_TYPE_SEADOG]; // pBoatObj->apWorldOb[1] = &_aWorldOb[BOATS_TYPE_SEADOG]; // pBoatObj->apMotion[1] = &_aMotion[BOATS_TYPE_SEADOG]; // pBoatObj->anSelectionSound[1] = SOUNDCALL_GCOM_CHOOSE_SEADOG; // pBoatObj->apBoatIcon[1] = _pBoatPics[BOATS_TYPE_SEADOG]; // pBoatObj->apBoatShadow[1] = _pBoatShadows[BOATS_TYPE_SEADOG]; // pBoatObj->apTitle[1] = _pText_BoatNames[BOATS_TYPE_SEADOG]; pBoatObj->fX = _BOAT_COLUMN_5; pBoatObj->fY = _BOAT_ROW_1; /* BOATS_TYPE_SEADOG */ pBoatObj = &_aBoatSelections[9]; pBoatObj->bEnabled = bonuskeys_GetBonus2State(); pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_SEADOG; pBoatObj->nDifficultyBar = 2; pBoatObj->nArrayIndex = 9; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_SEADOG]; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_SEADOG]; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_SEADOG]; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_SEADOG; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_SEADOG]; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_SEADOG]; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_SEADOG]; pBoatObj->fMinSteeringRange = 0.727777778f; pBoatObj->fMaxSteeringRange = 1.05f; pBoatObj->fX = 100.0f; pBoatObj->fY = _BOAT_ROW_1 - 30.0f; /* BOATS_TYPE_HOVERCRAFT */ pBoatObj = &_aBoatSelections[10]; pBoatObj->bEnabled = bonuskeys_GetBonus2State(); pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_HOVERCRAFT; pBoatObj->nDifficultyBar = 2; pBoatObj->nArrayIndex = 10; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_HOVERCRAFT]; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_HOVERCRAFT]; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_HOVERCRAFT]; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_HOVERCRAFT; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_HOVERCRAFT]; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_HOVERCRAFT]; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_HOVERCRAFT]; pBoatObj->fMinSteeringRange = 0.727777778f; pBoatObj->fMaxSteeringRange = 1.05f; pBoatObj->fX = 30.0f; pBoatObj->fY = _BOAT_ROW_1 - 30.0f; /* BOATS_TYPE_COP */ pBoatObj = &_aBoatSelections[11]; pBoatObj->bEnabled = bonuskeys_GetBonus2State(); pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_HOVERCRAFT; pBoatObj->nDifficultyBar = 2; pBoatObj->nArrayIndex = 11; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_COP]; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_COP]; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_COP]; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_COP; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_COP]; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_COP]; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_COP]; pBoatObj->fMinSteeringRange = 0.727777778f; pBoatObj->fMaxSteeringRange = 1.05f; pBoatObj->fX = -30.0f; pBoatObj->fY = _BOAT_ROW_1 - 30.0f; /* BOATS_TYPE_TINY */ pBoatObj = &_aBoatSelections[12]; pBoatObj->bEnabled = bonuskeys_GetBonus2State(); pBoatObj->bCurrent = FALSE; pBoatObj->nNumSelections = 1; pBoatObj->nCurrentSelection = 0; pBoatObj->anBoatNum[0] = BOATS_TYPE_COP; pBoatObj->nDifficultyBar = 2; pBoatObj->nArrayIndex = 12; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_COP]; pBoatObj->apPlayer[0] = &_aPlayer[BOATS_TYPE_TINY]; pBoatObj->apWorldOb[0] = &_aWorldOb[BOATS_TYPE_TINY]; pBoatObj->apMotion[0] = &_aMotion[BOATS_TYPE_TINY]; pBoatObj->anSelectionSound[0] = SOUNDCALL_GCOM_CHOOSE_TINY; pBoatObj->apBoatIcon[0] = _pBoatPics[BOATS_TYPE_TINY]; pBoatObj->apBoatShadow[0] = _pBoatShadows[BOATS_TYPE_TINY]; pBoatObj->apTitle[0] = _pText_BoatNames[BOATS_TYPE_TINY]; pBoatObj->fMinSteeringRange = 0.727777778f; pBoatObj->fMaxSteeringRange = 1.05f; pBoatObj->fX = -100.0f; pBoatObj->fY = _BOAT_ROW_1 - 30.0f; _aBoatDiffBarsEnabled[0] = bMediumTracksUnlocked; _aBoatDiffBarsEnabled[2] = bHardTracksUnlocked; } static Player_t *_GetCurrentBoatSelectPlayerPtr( void ) { return _pCurrentSelectedBoat->apPlayer[ _pCurrentSelectedBoat->nCurrentSelection ]; } static void _DrawABoatSelectionObject( BoatSelectObject_t *pOb, BOOL bPreSelection, float fScale ) { u32 nPriorState, nTemp; u16 nIndex; nIndex = pOb->nCurrentSelection; /* we have some extra stuff to draw if this is the current boat*/ if( pOb->bCurrent ) { /* draw the boat and its shadow*/ if( bPreSelection ) { /* a selection has not been made yet*/ mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); #if TARGET!=ULTRA64 mesh3d_DrawOrtho( pOb->apBoatShadow[nIndex], pOb->fX + _BOAT_SHADOW_X, pOb->fY + _BOAT_SHADOW_Y, WPR_DEFS_LAYER4_Z, 0, fScale ); #endif //ULTRA64 if( _bSpecialFlashOn ) { mesh3d_DrawOrtho( pOb->apBoatIcon[nIndex], pOb->fX, pOb->fY, WPR_DEFS_LAYER5_Z, 0, fScale * 1.15f ); } else { mesh3d_SetOrthoEffects( 0.45f, 0.45f, 0.45f, 1.0f, 0.0f ); mesh3d_DrawOrtho( pOb->apBoatIcon[nIndex], pOb->fX, pOb->fY, WPR_DEFS_LAYER5_Z, 0, fScale * 1.05f ); } } else { /* a selection has been made*/ if( (Gameloop_nFrameCounter & 0x2) ) { mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); #if TARGET!=ULTRA64 mesh3d_DrawOrtho( pOb->apBoatShadow[nIndex], pOb->fX + _BOAT_SHADOW_X, pOb->fY + _BOAT_SHADOW_Y, WPR_DEFS_LAYER4_Z, 0, fScale * 1.15f ); #endif //ULTRA64 mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.9f ); } mesh3d_DrawOrtho( pOb->apBoatIcon[nIndex], pOb->fX, pOb->fY, WPR_DEFS_LAYER5_Z, 0, fScale * 1.15f ); } /* draw the boat's name*/ nPriorState = gutil_ZbufferSetState( GUTIL_ZBUFFER_STATE_WRITE_ONLY ); mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); mesh3d_DrawOrtho( pOb->apTitle[nIndex], _BOAT_NAME_X, _BOAT_NAME_Y, WPR_DEFS_LAYER5_Z, 0, 1.1f ); /* draw the difficulty on top of the boat shot*/ if( Gameloop_nFrameCounter%23 < 13 ) { /* change the text based on the current diff bar*/ nTemp = Boats_Info[ pOb->anBoatNum[nIndex] ].nBoatDifficulty; switch( pOb->nDifficultyBar ) { case 0: mesh3d_SetOrthoEffects( 1.0f, 1.0f, 0.0, 0.75f, 0.0f ); mesh3d_DrawOrtho( _pText_Difficulty[nTemp], 1.5f, 0.0f, WPR_DEFS_LAYER5_Z, 0, 1.5f ); break; case 1: mesh3d_SetOrthoEffects( 0.0f, 0.0f, 1.0f, 0.75f, 0.0f ); mesh3d_DrawOrtho( _pText_Difficulty[nTemp], 5.0f, 0.0f, WPR_DEFS_LAYER5_Z, 0, 1.5f ); break; case 2: mesh3d_SetOrthoEffects( 1.0f, 0.0f, 0.0f, 0.75f, 0.0f ); mesh3d_DrawOrtho( _pText_Difficulty[nTemp], 5.0f, 0.0f, WPR_DEFS_LAYER5_Z, 0, 1.5f ); break; default: XASSERT_NOW; break; } } gutil_ZbufferSetState( nPriorState ); } else { if( pOb->bEnabled ) { /* this is not the currently selected boat*/ mesh3d_SetOrthoEffects( 0.45f, 0.45f, 0.45f, 1.0f, 0.0f ); #if TARGET!=ULTRA64 mesh3d_DrawOrtho( pOb->apBoatShadow[nIndex], pOb->fX + _BOAT_SHADOW_X, pOb->fY + _BOAT_SHADOW_Y, WPR_DEFS_LAYER4_Z, 0, fScale ); #endif //ULTRA64 mesh3d_DrawOrtho( pOb->apBoatIcon[nIndex], pOb->fX, pOb->fY, WPR_DEFS_LAYER5_Z, 0, fScale ); } else { mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 0.283f, 0.0f ); #if TARGET!=ULTRA64 mesh3d_DrawOrtho( pOb->apBoatShadow[nIndex], pOb->fX + _BOAT_SHADOW_X, pOb->fY + _BOAT_SHADOW_Y, WPR_DEFS_LAYER4_Z, 0, fScale ); #endif //ULTRA64 mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 0.3413f, 0.0f ); mesh3d_DrawOrtho( pOb->apBoatIcon[nIndex], pOb->fX, pOb->fY, WPR_DEFS_LAYER5_Z, 0, fScale ); } } } /* WATERY BACKGROUND FX mesh3d_SlideST( _pBackground1, NULL, 0.26f, 0.33f ); nTemp = (Gameloop_nFrameCounter + 2365) << 9; nTemp2 = (Gameloop_nFrameCounter + 6449) << 10; for( i=0; i < _pBackground1->nVtxCount; i++ ) { _pBackground1->pVtx[i].Point.p[0] += (0.32f * xmath_sin( nTemp ) ); _pBackground1->pVtx[i].Point.p[1] += (0.29f * xmath_sin( nTemp2 ) ); nTemp += 25063; nTemp2 += 4698321; } mesh3d_DrawOrtho( _pBackground1, 0.0f, 0.0f, WPR_DEFS_LAYER1_Z, 0, 1.0f ); mesh3d_SlideST( _pBackground2, NULL, -0.28f, 0.69f ); mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 0.75f, 0.0f ); nTemp = (Gameloop_nFrameCounter + 998) << 9; nTemp2 = (Gameloop_nFrameCounter + 234) << 10; for( i=0; i < _pBackground2->nVtxCount; i++ ) { _pBackground2->pVtx[i].Point.p[0] += (0.55f * xmath_sin( nTemp ) ); _pBackground2->pVtx[i].Point.p[1] += (0.47f * xmath_sin( nTemp2 ) ); nTemp += 6913; nTemp2 += 3215649; } mesh3d_DrawOrtho( _pBackground2, 0.0f, 0.0f, WPR_DEFS_LAYER2_Z, 0, 1.0f ); mesh3d_SetOrthoEffects( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f ); */