If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!
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 );
*/