If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Wayne Gretzky's 3D Hockey '98 (Nintendo 64)/Uncompiled Source Code

From The Cutting Room Floor
Jump to navigation Jump to search

This is a sub-page of Wayne Gretzky's 3D Hockey '98 (Nintendo 64).

In another unusual instance of loads of C code making its way into an N64 game, this game has a bunch of code for all sorts of things. This is primarily for the headers, so much of this is just setting up structures and establishing function prototypes. It begins at 0x7E1000 in the US ROM.

d     *soundArray[1];
} ALInstrument;

typedef struct ALBank_s {
    s16                 instCount;       
    u8                  flags;
    u8                  pad;
    s32                 sampleRate;      
    ALInstrument        *percussion;     
    ALInstrument        *instArray[1];   
} ALBank;

typedef struct {                 
    s16         revision;        
    s16         bankCount;       
    ALBank      *bankArray[1];   
} ALBankFile;

void    alBnkfNew(ALBankFile *f, u8 *table);

 




typedef struct {
    u8          *offset;
    s32         len;
} ALSeqData;

typedef struct {                 
    s16         revision;        
    s16         seqCount;        
    ALSeqData   seqArray[1];     
} ALSeqFile;

void    alSeqFileNew(ALSeqFile *f, u8 *base);

 


typedef ALMicroTime (*ALVoiceHandler)(void *);

typedef struct {
    s32                 maxVVoices;      
    s32                 maxPVoices;
    s32                 maxUpdates;
    s32                 maxFXbusses;
    void                *dmaproc;
    ALHeap              *heap;
    s32                 outputRate;      
    ALFxId              fxType;
    s32                 *params;
} ALSynConfig;

typedef struct ALPlayer_s {
    struct ALPlayer_s   *next;
    void                *clientData;     
    ALVoiceHandler      handler;         
    ALMicroTime         callTime;        
    s32                 samplesLeft;     
} ALPlayer;

typedef struct ALVoice_s {
    ALLink              node;
    struct PVoice_s     *pvoice;
    ALWaveTable         *table;
    void                *clientPrivate;
    s16                 state;
    s16                 priority;
    s16                 fxBus;
    s16                 unityPitch;
} ALVoice;

typedef struct ALVoiceConfig_s {
    s16                 priority;        
    s16                 fxBus;           
    u8                  unityPitch;      
} ALVoiceConfig;

typedef struct {
    ALPlayer    *head;           
    ALLink      pFreeList;       
    ALLink      pAllocList;      
    ALLink      pLameList;       
    s32         paramSamples;
    s32         curSamples;      
    ALDMANew    dma;
    ALHeap      *heap;
    
    struct ALParam_s    *paramList;
    
    struct ALMainBus_s  *mainBus;
    struct ALAuxBus_s   *auxBus;         
    struct ALFilter_s   *outputFilter;   

    s32                 numPVoices;
    s32                 maxAuxBusses;
    s32                 outputRate;      
    s32                 maxOutSamples;   

} ALSynth;

void    alSynNew(ALSynth *s, ALSynConfig *config);
void    alSynDelete(ALSynth *s);

void    alSynAddPlayer(ALSynth *s, ALPlayer *client);
void    alSynRemovePlayer(ALSynth *s, ALPlayer *client);

s32     alSynAllocVoice(ALSynth *s, ALVoice *v, ALVoiceConfig *vc);
void    alSynFreeVoice(ALSynth *s, ALVoice *voice);

void    alSynStartVoice(ALSynth *s, ALVoice *voice, ALWaveTable *w);
void    alSynStartVoiceParams(ALSynth *s, ALVoice *voice, ALWaveTable *w,
                              f32 pitch, s16 vol, ALPan pan, u8 fxmix,
                              ALMicroTime t);
void    alSynStopVoice(ALSynth *s, ALVoice *voice);

void    alSynSetVol(ALSynth *s, ALVoice *v, s16 vol, ALMicroTime delta);
void    alSynSetPitch(ALSynth *s, ALVoice *voice, f32 ratio);
void    alSynSetPan(ALSynth *s, ALVoice *voice, ALPan pan);
void    alSynSetFXMix(ALSynth *s, ALVoice *voice, u8 fxmix);
void    alSynSetPriority(ALSynth *s, ALVoice *voice, s16 priority);
s16     alSynGetPriority(ALSynth *s, ALVoice *voice);

ALFxRef *alSynAllocFX(ALSynth *s, s16 bus, ALSynConfig *c, ALHeap *hp);
ALFxRef alSynGetFXRef(ALSynth *s, s16 bus, s16 index);
void    alSynFreeFX(ALSynth *s, ALFxRef *fx);
void    alSynSetFXParam(ALSynth *s, ALFxRef fx, s16 paramID, void *param);

 


typedef struct {
    ALSynth     drvr;
} ALGlobals;

extern ALGlobals *alGlobals;

void    alInit(ALGlobals *glob, ALSynConfig *c);
void    alClose(ALGlobals *glob);

Acmd    *alAudioFrame(Acmd *cmdList, s32 *cmdLen, s16 *outBuf, s32 outLen);

 



 










 


enum ALMsg {
    AL_SEQ_REF_EVT,	 
    AL_SEQ_MIDI_EVT,
    AL_SEQP_MIDI_EVT,
    AL_TEMPO_EVT,
    AL_SEQ_END_EVT,
    AL_NOTE_END_EVT,
    AL_SEQP_ENV_EVT,
    AL_SEQP_META_EVT,
    AL_SEQP_PROG_EVT,
    AL_SEQP_API_EVT,
    AL_SEQP_VOL_EVT,
    AL_SEQP_LOOP_EVT,
    AL_SEQP_PRIORITY_EVT,
    AL_SEQP_SEQ_EVT,
    AL_SEQP_BANK_EVT,
    AL_SEQP_PLAY_EVT,
    AL_SEQP_STOP_EVT,
    AL_SEQP_STOPPING_EVT,
    AL_TRACK_END,
    AL_CSP_LOOPSTART,
    AL_CSP_LOOPEND,
    AL_CSP_NOTEOFF_EVT,
    AL_TREM_OSC_EVT,
    AL_VIB_OSC_EVT
};

 




enum AL_MIDIstatus {
     
    AL_MIDI_ChannelMask         = 0x0F,
    AL_MIDI_StatusMask          = 0xF0,

     
    AL_MIDI_ChannelVoice        = 0x80,
    AL_MIDI_NoteOff             = 0x80,
    AL_MIDI_NoteOn              = 0x90,
    AL_MIDI_PolyKeyPressure     = 0xA0,
    AL_MIDI_ControlChange       = 0xB0,
    AL_MIDI_ChannelModeSelect   = 0xB0,
    AL_MIDI_ProgramChange       = 0xC0,
    AL_MIDI_ChannelPressure     = 0xD0,
    AL_MIDI_PitchBendChange     = 0xE0,

     
    AL_MIDI_SysEx               = 0xF0,  

     
    AL_MIDI_SystemCommon            = 0xF1,
    AL_MIDI_TimeCodeQuarterFrame    = 0xF1,
    AL_MIDI_SongPositionPointer     = 0xF2,
    AL_MIDI_SongSelect              = 0xF3,
    AL_MIDI_Undefined1              = 0xF4,
    AL_MIDI_Undefined2              = 0xF5,
    AL_MIDI_TuneRequest             = 0xF6,
    AL_MIDI_EOX                     = 0xF7,  

     
    AL_MIDI_SystemRealTime  = 0xF8,
    AL_MIDI_TimingClock     = 0xF8,
    AL_MIDI_Undefined3      = 0xF9,
    AL_MIDI_Start           = 0xFA,
    AL_MIDI_Continue        = 0xFB,
    AL_MIDI_Stop            = 0xFC,
    AL_MIDI_Undefined4      = 0xFD,
    AL_MIDI_ActiveSensing   = 0xFE,
    AL_MIDI_SystemReset     = 0xFF,
    AL_MIDI_Meta            = 0xFF       
};

enum AL_MIDIctrl {
    AL_MIDI_VOLUME_CTRL         = 0x07,
    AL_MIDI_PAN_CTRL            = 0x0A,
    AL_MIDI_PRIORITY_CTRL       = 0x10,  
    AL_MIDI_FX_CTRL_0           = 0x14,
    AL_MIDI_FX_CTRL_1           = 0x15,
    AL_MIDI_FX_CTRL_2           = 0x16,
    AL_MIDI_FX_CTRL_3           = 0x17,
    AL_MIDI_FX_CTRL_4           = 0x18,
    AL_MIDI_FX_CTRL_5           = 0x19,
    AL_MIDI_FX_CTRL_6           = 0x1A,
    AL_MIDI_FX_CTRL_7           = 0x1B,
    AL_MIDI_FX_CTRL_8           = 0x1C,
    AL_MIDI_FX_CTRL_9           = 0x1D,
    AL_MIDI_SUSTAIN_CTRL        = 0x40,
    AL_MIDI_FX1_CTRL            = 0x5B,
    AL_MIDI_FX3_CTRL            = 0x5D
};

enum AL_MIDImeta {
    AL_MIDI_META_TEMPO          = 0x51,
    AL_MIDI_META_EOT            = 0x2f
};










typedef struct {
    u8          *curPtr;                 
    s32         lastTicks;               
    s32	       	curTicks;		 
    s16         lastStatus;              
} ALSeqMarker;

typedef struct {
    s32         ticks;     
    u8          status;
    u8          byte1; 
    u8          byte2;
    u32         duration;
} ALMIDIEvent;

typedef struct {
    s32         ticks;
    u8          status;
    u8          type;
    u8          len;
    u8          byte1;
    u8          byte2;
    u8          byte3;
} ALTempoEvent;

typedef struct {
    s32         ticks;
    u8          status;
    u8          type;
    u8          len;
} ALEndEvent;

typedef struct {
    struct ALVoice_s    *voice;
} ALNoteEvent;

typedef struct {
    struct ALVoice_s    *voice;
    ALMicroTime         delta;
    u8                  vol;
} ALVolumeEvent;

typedef struct {
    s16                 vol;
} ALSeqpVolEvent;

typedef struct {
    ALSeqMarker         *start;
    ALSeqMarker         *end;
    s32                 count;
} ALSeqpLoopEvent;

typedef struct {
    u8			chan;
    u8			priority;
} ALSeqpPriorityEvent;

typedef struct {
    void		*seq;	 
} ALSeqpSeqEvent;

typedef struct {
    ALBank		*bank;
} ALSeqpBankEvent;

typedef struct {
    struct ALVoiceState_s      *vs;
    void                       *oscState;
    u8                         chan;
} ALOscEvent;

typedef struct {
    s16                 	type;
    union {
        ALMIDIEvent     	midi;
        ALTempoEvent    	tempo;
        ALEndEvent      	end;
        ALNoteEvent     	note;
        ALVolumeEvent   	vol;
        ALSeqpLoopEvent 	loop;
        ALSeqpVolEvent  	spvol;
	ALSeqpPriorityEvent	sppriority;
	ALSeqpSeqEvent		spseq;
	ALSeqpBankEvent		spbank;
        ALOscEvent      	osc;
    } msg;
} ALEvent;

typedef struct {
    ALLink      node;
    ALMicroTime delta;
    ALEvent     evt;
} ALEventListItem;

typedef struct {
    ALLink      freeList;
    ALLink      allocList;
    s32         eventCount;
} ALEventQueue;

void            alEvtqNew(ALEventQueue *evtq, ALEventListItem *items,
                          s32 itemCount);
ALMicroTime     alEvtqNextEvent(ALEventQueue *evtq, ALEvent *evt);
void            alEvtqPostEvent(ALEventQueue *evtq, ALEvent *evt,
                                ALMicroTime delta);
void        	alEvtqFlush(ALEventQueue *evtq);
void        	alEvtqFlushType(ALEventQueue *evtq, s16 type);









typedef struct ALVoiceState_s {
    struct ALVoiceState_s *next; 
    ALVoice     voice;
    ALSound     *sound;
    ALMicroTime envEndTime;      
    f32         pitch;           
    f32         vibrato;         
    u8          envGain;         
    u8          channel;         
    u8          key;             
    u8          velocity;        
    u8          envPhase;        
    u8          phase;
    u8          tremelo;         
    u8          flags;           

} ALVoiceState;

typedef struct {
    ALInstrument        *instrument;     
    s16                 bendRange;       
    ALFxId              fxId;            
    ALPan               pan;             
    u8                  priority;        
    u8                  vol;             
    u8                  fxmix;           
    u8                  sustain;         
    f32                 pitchBend;       
} ALChanState;

typedef struct ALSeq_s {
    u8          *base;                   
    u8          *trackStart;             
    u8          *curPtr;                 
    s32         lastTicks;               
    s32         len;                     
    f32         qnpt;                    
    s16         division;                
    s16         lastStatus;              
} ALSeq;

typedef struct {
    u32      trackOffset[16];
    u32      division;
} ALCMidiHdr;

typedef struct ALCSeq_s {
    ALCMidiHdr    *base;              
    u32           validTracks;        
    f32           qnpt;               
    u32           lastTicks;          
    u32           lastDeltaTicks;     
    u32		  deltaFlag;	      
    u8            *curLoc[16];        
                                      
                                      
    u8            *curBUPtr[16];      
    u8            curBULen[16];       
    u8            lastStatus[16];     
    u32           evtDeltaTicks[16];  
} ALCSeq;

typedef struct {
    u32         validTracks;
    s32         lastTicks;
    u32         lastDeltaTicks;
    u8          *curLoc[16];
    u8          *curBUPtr[16];
    u8          curBULen[16];
    u8          lastStatus[16];
    u32         evtDeltaTicks[16];
} ALCSeqMarker;





typedef struct {
    s32         maxVoices;          
    s32         maxEvents;          
    u8          maxChannels;        
    u8          debugFlags;         
    ALHeap      *heap;              
    void        *initOsc;
    void        *updateOsc;
    void        *stopOsc;
} ALSeqpConfig;

typedef ALMicroTime   (*ALOscInit)(void **oscState,f32 *initVal, u8 oscType,
                                   u8 oscRate, u8 oscDepth, u8 oscDelay);
typedef ALMicroTime   (*ALOscUpdate)(void *oscState, f32 *updateVal);
typedef void          (*ALOscStop)(void *oscState);

typedef struct {
    ALPlayer            node;            
    ALSynth             *drvr;           
    ALSeq               *target;         
    ALMicroTime         curTime;
    ALBank              *bank;           
    s32                 uspt;            
    s32                 nextDelta;       
    s32                 state;
    u16                 chanMask;        
    s16                 vol;             
    u8                  maxChannels;     
    u8                  debugFlags;      
    ALEvent             nextEvent;
    ALEventQueue        evtq;
    ALMicroTime         frameTime;
    ALChanState         *chanState;      
    ALVoiceState        *vAllocHead;     
    ALVoiceState        *vAllocTail;     
    ALVoiceState        *vFreeList;      
    ALOscInit           initOsc;
    ALOscUpdate         updateOsc;
    ALOscStop           stopOsc;
    ALSeqMarker         *loopStart;
    ALSeqMarker         *loopEnd;
    s32                 loopCount;       
} ALSeqPlayer;

typedef struct {
    ALPlayer            node;            
    ALSynth             *drvr;           
    ALCSeq              *target;         
    ALMicroTime         curTime;
    ALBank              *bank;           
    s32                 uspt;            
    s32                 nextDelta;       
    s32                 state;
    u16                 chanMask;        
    s16                 vol;             
    u8                  maxChannels;     
    u8                  debugFlags;      
    ALEvent             nextEvent;
    ALEventQueue        evtq;
    ALMicroTime         frameTime;
    ALChanState         *chanState;      
    ALVoiceState        *vAllocHead;     
    ALVoiceState        *vAllocTail;     
    ALVoiceState        *vFreeList;      
    ALOscInit           initOsc;
    ALOscUpdate         updateOsc;
    ALOscStop           stopOsc;
} ALCSPlayer;

 


void    alSeqNew(ALSeq *seq, u8 *ptr, s32 len);
void    alSeqNextEvent(ALSeq *seq, ALEvent *event);
s32     alSeqGetTicks(ALSeq *seq);
f32     alSeqTicksToSec(ALSeq *seq, s32 ticks, u32 tempo);
u32     alSeqSecToTicks(ALSeq *seq, f32 sec, u32 tempo);
void    alSeqNewMarker(ALSeq *seq, ALSeqMarker *m, u32 ticks);
void    alSeqSetLoc(ALSeq *seq, ALSeqMarker *marker);
void    alSeqGetLoc(ALSeq *seq, ALSeqMarker *marker);
 


void    alCSeqNew(ALCSeq *seq, u8 *ptr);
void    alCSeqNextEvent(ALCSeq *seq,ALEvent *evt);
s32     alCSeqGetTicks(ALCSeq *seq);
f32     alCSeqTicksToSec(ALCSeq *seq, s32 ticks, u32 tempo);
u32     alCSeqSecToTicks(ALCSeq *seq, f32 sec, u32 tempo);
void    alCSeqNewMarker(ALCSeq *seq, ALCSeqMarker *m, u32 ticks);
void    alCSeqSetLoc(ALCSeq *seq, ALCSeqMarker *marker);
void    alCSeqGetLoc(ALCSeq *seq, ALCSeqMarker *marker); 

 


f32     alCents2Ratio(s32 cents);

void    alSeqpNew(ALSeqPlayer *seqp, ALSeqpConfig *config);
void    alSeqpDelete(ALSeqPlayer *seqp);
void    alSeqpSetSeq(ALSeqPlayer *seqp, ALSeq *seq);
ALSeq   *alSeqpGetSeq(ALSeqPlayer *seqp);
void    alSeqpPlay(ALSeqPlayer *seqp);
void    alSeqpStop(ALSeqPlayer *seqp);
s32	alSeqpGetState(ALSeqPlayer *seqp);
void    alSeqpSetBank(ALSeqPlayer *seqp, ALBank *b);
void    alSeqpSetTempo(ALSeqPlayer *seqp, s32 tempo);
s32     alSeqpGetTempo(ALSeqPlayer *seqp);
s16     alSeqpGetVol(ALSeqPlayer *seqp);		 
void    alSeqpSetVol(ALSeqPlayer *seqp, s16 vol);
void    alSeqpLoop(ALSeqPlayer *seqp, ALSeqMarker *start, ALSeqMarker *end, s32 count);

void    alSeqpSetChlProgram(ALSeqPlayer *seqp, u8 chan, u8 prog);
s32     alSeqpGetChlProgram(ALSeqPlayer *seqp, u8 chan);
void    alSeqpSetChlFXMix(ALSeqPlayer *seqp, u8 chan, u8 fxmix);
u8      alSeqpGetChlFXMix(ALSeqPlayer *seqp, u8 chan);
void	alSeqpSetChlVol(ALSeqPlayer *seqp, u8 chan, u8 vol);
u8	alSeqpGetChlVol(ALSeqPlayer *seqp, u8 chan);
void    alSeqpSetChlPan(ALSeqPlayer *seqp, u8 chan, ALPan pan);
ALPan   alSeqpGetChlPan(ALSeqPlayer *seqp, u8 chan);
void    alSeqpSetChlPriority(ALSeqPlayer *seqp, u8 chan, u8 priority);
u8      alSeqpGetChlPriority(ALSeqPlayer *seqp, u8 chan);
void    alSeqpSendMidi(ALSeqPlayer *seqp, s32 ticks, u8 status, u8 byte1, u8 byte2);


 











 


void    alCSPNew(ALCSPlayer *seqp, ALSeqpConfig *config);
void    alCSPDelete(ALCSPlayer *seqp);
void    alCSPSetSeq(ALCSPlayer *seqp, ALCSeq *seq);
ALCSeq  *alCSPGetSeq(ALCSPlayer *seqp);
void    alCSPPlay(ALCSPlayer *seqp);
void    alCSPStop(ALCSPlayer *seqp);
s32	alCSPGetState(ALCSPlayer *seqp);
void    alCSPSetBank(ALCSPlayer *seqp, ALBank *b);
void    alCSPSetTempo(ALCSPlayer *seqp, s32 tempo);
s32     alCSPGetTempo(ALCSPlayer *seqp);
s16     alCSPGetVol(ALCSPlayer *seqp);
void    alCSPSetVol(ALCSPlayer *seqp, s16 vol);

void    alCSPSetChlProgram(ALCSPlayer *seqp, u8 chan, u8 prog);
s32     alCSPGetChlProgram(ALCSPlayer *seqp, u8 chan);
void    alCSPSetChlFXMix(ALCSPlayer *seqp, u8 chan, u8 fxmix);
u8      alCSPGetChlFXMix(ALCSPlayer *seqp, u8 chan);
void    alCSPSetChlPan(ALCSPlayer *seqp, u8 chan, ALPan pan);
ALPan   alCSPGetChlPan(ALCSPlayer *seqp, u8 chan);
void	alCSPSetChlVol(ALCSPlayer *seqp, u8 chan, u8 vol);
u8	alCSPGetChlVol(ALCSPlayer *seqp, u8 chan);
void    alCSPSetChlPriority(ALCSPlayer *seqp, u8 chan, u8 priority);
u8      alCSPGetChlPriority(ALCSPlayer *seqp, u8 chan);
void    alCSPSendMidi(ALCSPlayer *seqp, s32 ticks, u8 status,
                       u8 byte1, u8 byte2);


 











 



typedef struct {
    s32         maxSounds;
    s32         maxEvents;
    ALHeap      *heap;
} ALSndpConfig;

typedef struct {
    ALPlayer            node;            
    ALEventQueue        evtq;
    ALEvent             nextEvent;
    ALSynth             *drvr;           
    s32                 target;
    void                *sndState;
    s32                 maxSounds;
    ALMicroTime         frameTime;
    ALMicroTime         nextDelta;       
    ALMicroTime         curTime;
} ALSndPlayer;

typedef s16   ALSndId;
    
void            alSndpNew(ALSndPlayer *sndp, ALSndpConfig *c);
void            alSndpDelete(ALSndPlayer *sndp);

ALSndId         alSndpAllocate(ALSndPlayer *sndp, ALSound *sound);
void            alSndpDeallocate(ALSndPlayer *sndp, ALSndId id);

void            alSndpSetSound(ALSndPlayer *sndp, ALSndId id);
ALSndId         alSndpGetSound(ALSndPlayer *sndp);

void            alSndpPlay(ALSndPlayer *sndp);
void            alSndpPlayAt(ALSndPlayer *sndp, ALMicroTime delta);
void            alSndpStop(ALSndPlayer *sndp);

void            alSndpSetVol(ALSndPlayer *sndp, s16 vol);
void            alSndpSetPitch(ALSndPlayer *sndp, f32 pitch);
void            alSndpSetPan(ALSndPlayer *sndp, ALPan pan);
void            alSndpSetPriority(ALSndPlayer *sndp, ALSndId id, u8 priority);

void            alSndpSetFXMix(ALSndPlayer *sndp, u8 mix);
s32             alSndpGetState(ALSndPlayer *sndp);


void alParseAbiCL(Acmd *cmdList, u32 nbytes);









# 34 "c:\\n64\\include/ultra64.h" 2

# 1 "c:\\n64\\include/PR/gu.h" 1



 











 






























 


typedef struct {
	unsigned char   *base;
	int             fmt, siz;
	int             xsize, ysize;
	int             lsize;
	 
	int             addr;
	int             w, h;
	int             s, t;
} Image;

typedef struct {
	float	col[3];
	float	pos[3];
	float	a1, a2;		 
} PositionalLight;


 



extern int guLoadTextureBlockMipMap(Gfx **glist, unsigned char *tbuf, Image *im, 
		unsigned char startTile, unsigned char pal, unsigned char cms, 
		unsigned char cmt, unsigned char masks, unsigned char maskt, 
		unsigned char shifts, unsigned char shiftt, unsigned char cfs, 
		unsigned char cft);

extern int 	guGetDPLoadTextureTileSz (int ult, int lrt);
extern void 	guDPLoadTextureTile (Gfx *glistp, void *timg,
			int texl_fmt, int texl_size,
			int img_width, int img_height,
			int uls, int ult, int lrs, int lrt,
			int palette,
			int cms, int cmt,
			int masks, int maskt,
			int shifts, int shiftt);


 






extern void guMtxIdent(Mtx *m);
extern void guMtxIdentF(float mf[4][4]);
extern void guOrtho(Mtx *m, float l, float r, float b, float t, 
		    float n, float f, float scale);
extern void guOrthoF(float mf[4][4], float l, float r, float b, float t, 
		     float n, float f, float scale);
extern void guFrustum(Mtx *m, float l, float r, float b, float t, 
		      float n, float f, float scale);
extern void guFrustumF(float mf[4][4], float l, float r, float b, float t, 
		       float n, float f, float scale);
extern void guPerspective(Mtx *m, u16 *perspNorm, float fovy, 
			  float aspect, float near, float far, float scale);
extern void guPerspectiveF(float mf[4][4], u16 *perspNorm, float fovy, 
			   float aspect, float near, float far, float scale);
extern void guLookAt(Mtx *m, 
			float xEye, float yEye, float zEye,
			float xAt,  float yAt,  float zAt,
			float xUp,  float yUp,  float zUp);
extern void guLookAtF(float mf[4][4], float xEye, float yEye, float zEye,
		      float xAt,  float yAt,  float zAt,
		      float xUp,  float yUp,  float zUp);
extern void guLookAtReflect(Mtx *m, LookAt *l,
			float xEye, float yEye, float zEye,
			float xAt,  float yAt,  float zAt,
			float xUp,  float yUp,  float zUp);
extern void guLookAtReflectF(float mf[4][4], LookAt *l, 
		      float xEye, float yEye, float zEye,
		      float xAt,  float yAt,  float zAt,
		      float xUp,  float yUp,  float zUp);
extern void guLookAtHilite(Mtx *m, LookAt *l, Hilite *h,
                float xEye, float yEye, float zEye,
                float xAt,  float yAt,  float zAt,
                float xUp,  float yUp,  float zUp,
                float xl1,  float yl1,  float zl1,
                float xl2,  float yl2,  float zl2,
		int   twidth, int theight);
extern void guLookAtHiliteF(float mf[4][4], LookAt *l, Hilite *h, 
		float xEye, float yEye, float zEye,
		float xAt,  float yAt,  float zAt,
		float xUp,  float yUp,  float zUp,
		float xl1,  float yl1,  float zl1,
		float xl2,  float yl2,  float zl2,
		int twidth, int theight);
extern void guLookAtStereo(Mtx *m, 
			float xEye, float yEye, float zEye,
			float xAt,  float yAt,  float zAt,
			float xUp,  float yUp,  float zUp, 
			float eyedist);
extern void guLookAtStereoF(float mf[4][4], 
		      	float xEye, float yEye, float zEye,
		      	float xAt,  float yAt,  float zAt,
		      	float xUp,  float yUp,  float zUp, 
			float eyedist);
extern void guRotate(Mtx *m, float a, float x, float y, float z);
extern void guRotateF(float mf[4][4], float a, float x, float y, float z);
extern void guRotateRPY(Mtx *m, float r, float p, float y);
extern void guRotateRPYF(float mf[4][4], float r, float p, float h);
extern void guAlign(Mtx *m, float a, float x, float y, float z);
extern void guAlignF(float mf[4][4], float a, float x, float y, float z);
extern void guScale(Mtx *m, float x, float y, float z);
extern void guScaleF(float mf[4][4], float x, float y, float z);
extern void guTranslate(Mtx *m, float x, float y, float z);
extern void guTranslateF(float mf[4][4], float x, float y, float z);
extern void guPosition(Mtx *m, float r, float p, float h, float s,
		       float x, float y, float z);
extern void guPositionF(float mf[4][4], float r, float p, float h, float s,
			float x, float y, float z);
extern void guMtxF2L(float mf[4][4], Mtx *m);
extern void guMtxL2F(float mf[4][4], Mtx *m);
extern void guMtxCatF(float m[4][4], float n[4][4], float r[4][4]);
extern void guMtxCatL(Mtx *m, Mtx *n, Mtx *res);
extern void guMtxXFMF(float mf[4][4], float x, float y, float z, 
		      float *ox, float *oy, float *oz);
extern void guMtxXFML(Mtx *m, float x, float y, float z, 
		      float *ox, float *oy, float *oz);

 
extern void guNormalize(float *x, float *y, float *z);

 
void guPosLight(PositionalLight *pl, Light *l,
                float xOb, float yOb, float zOb);
void guPosLightHilite(PositionalLight *pl1, PositionalLight *pl2,
                Light *l1, Light *l2,
                LookAt *l, Hilite *h,
                float xEye, float yEye, float zEye,
                float xOb,  float yOb,  float zOb,
                float xUp,  float yUp,  float zUp,
                int twidth, int theight);
extern int guRandom(void);

 


extern float sinf(float angle);
extern float cosf(float angle);
extern signed short sins (unsigned short angle);
extern signed short coss (unsigned short angle);
extern float sqrtf(float value);

 


 




                                            
                                            

extern void guParseRdpDL(u64 *rdp_dl, u64 nbytes, u8 flags);
extern void guParseString(char *StringPointer, u64 nbytes);

 



 

 



extern void
guBlinkRdpDL(u64 *rdp_dl_in, u64 nbytes_in,
             u64 *rdp_dl_out, u64 *nbytes_out,
             u32 x, u32 y, u32 radius,
             u8  red, u8 green, u8 blue,
             u8 flags);
 
 






 



extern void guParseGbiDL(u64 *gbi_dl, u32 nbytes, u8 flags);
extern void guDumpGbiDL(OSTask *tp,u8 flags);








typedef struct {
    int    dataSize;
    int    dlType;
    int    flags;
    u32    paddr;
} guDLPrintCB;

void guSprite2DInit(uSprite *SpritePointer,   
		    void *SourceImagePointer,
		    void *TlutPointer,
		    int Stride,
		    int SubImageWidth,
		    int SubImageHeight,
		    int SourceImageType,
		    int SourceImageBitSize,
		    int SourceImageOffsetS,
		    int SourceImageOffsetT);


# 35 "c:\\n64\\include/ultra64.h" 2

# 1 "c:\\n64\\include/PR/ramrom.h" 1



 











 







 


























 

 
















 





typedef struct {
    long type;
    long length;	     
    long magic;
    char userdata[(((4096) *6) - (3*sizeof(long)) ) ];
} RamRomBuffer;

 






























# 36 "c:\\n64\\include/ultra64.h" 2

# 1 "c:\\n64\\include/PR/sp.h" 1
 











 



















struct bitmap {
	s16	width;		 
				 

	s16	width_img;	 
				 

	s16	s;		 
				 

	s16	t;		 

	void	*buf;		 
				 
				 
				 

	s16	actualHeight;	 

	s16	LUToffset;	 
};

typedef struct bitmap Bitmap;

struct sprite {
	s16	x,y;		 

	s16	width, height;	 

	f32	scalex, scaley;	 

	s16	expx, expy;	 

	u16 	attr;		 
	s16	zdepth;		 

	u8	red;		 
	u8	green;		 
	u8	blue;		 
	u8	alpha;		 

	s16	startTLUT;	 
	s16	nTLUT;		 

	int	*LUT;		 

	s16	istart;		 
	s16	istep;		 
				 

	s16	nbitmaps;	 
	s16	ndisplist;	 

	s16	bmheight;	 
	s16	bmHreal;	 
	u8	bmfmt;		 
	u8	bmsiz;		 

	Bitmap	*bitmap;	 

	Gfx	*rsp_dl;	 

	Gfx	*rsp_dl_next;	 

	s16	frac_s,		 
		frac_t;		 
};

typedef struct sprite Sprite;

 






















 















 















 



void spSetAttribute (Sprite *sp, s32 attr);
void spClearAttribute (Sprite *sp, s32 attr);
void spMove (Sprite *sp, s32 x, s32 y);
void spScale (Sprite *sp, f32 sx, f32 sy);
void spSetZ  (Sprite *sp, s32 z );
void spColor (Sprite *sp, u8 red, u8 green, u8 blue, u8 alpha);
Gfx *spDraw (Sprite *sp);
void spInit( Gfx **glistp );
void spScissor( s32 xmin, s32 xmax, s32 ymin, s32 ymax );
void spFinish( Gfx **glistp );






# 37 "c:\\n64\\include/ultra64.h" 2

# 1 "c:\\n64\\include/PR/ucode.h" 1
 











 


















 





 







 







 






   

 





 







 
extern long long int	rspbootTextStart[], rspbootTextEnd[];

 
extern long long int	gspFast3DTextStart[], gspFast3DTextEnd[];
extern long long int	gspFast3DDataStart[], gspFast3DDataEnd[];

 
extern long long int	gspFast3D_dramTextStart[], gspFast3D_dramTextEnd[];
extern long long int	gspFast3D_dramDataStart[], gspFast3D_dramDataEnd[];

 
extern long long int	gspFast3D_fifoTextStart[], gspFast3D_fifoTextEnd[];
extern long long int	gspFast3D_fifoDataStart[], gspFast3D_fifoDataEnd[];

 
extern long long int	gspF3DNoNTextStart[], gspF3DNoNTextEnd[];
extern long long int	gspF3DNoNDataStart[], gspF3DNoNDataEnd[];

 
extern long long int	gspF3DNoN_dramTextStart[];
extern long long int	gspF3DNoN_dramTextEnd[];
extern long long int	gspF3DNoN_dramDataStart[];
extern long long int	gspF3DNoN_dramDataEnd[];

 
extern long long int	gspF3DNoN_fifoTextStart[];
extern long long int	gspF3DNoN_fifoTextEnd[];
extern long long int	gspF3DNoN_fifoDataStart[];
extern long long int	gspF3DNoN_fifoDataEnd[];

 
extern long long int	gspLine3DTextStart[], gspLine3DTextEnd[];
extern long long int	gspLine3DDataStart[], gspLine3DDataEnd[];

 
extern long long int	gspLine3D_dramTextStart[], gspLine3D_dramTextEnd[];
extern long long int	gspLine3D_dramDataStart[], gspLine3D_dramDataEnd[];

 
extern long long int	gspLine3D_fifoTextStart[], gspLine3D_fifoTextEnd[];
extern long long int	gspLine3D_fifoDataStart[], gspLine3D_fifoDataEnd[];

 
extern long long int	gspSprite2DTextStart[], gspSprite2DTextEnd[];
extern long long int	gspSprite2DDataStart[], gspSprite2DDataEnd[];

 
extern long long int	gspSprite2D_dramTextStart[], gspSprite2D_dramTextEnd[];
extern long long int	gspSprite2D_dramDataStart[], gspSprite2D_dramDataEnd[];

 
extern long long int	gspSprite2D_fifoTextStart[], gspSprite2D_fifoTextEnd[];
extern long long int	gspSprite2D_fifoDataStart[], gspSprite2D_fifoDataEnd[];

 
extern long long int 	aspMainTextStart[], aspMainTextEnd[];
extern long long int 	aspMainDataStart[], aspMainDataEnd[];

 
 
extern long long int  gspF3DEX_fifoTextStart[],     gspF3DEX_fifoTextEnd[];
extern long long int  gspF3DEX_fifoDataStart[],     gspF3DEX_fifoDataEnd[];
extern long long int  gspF3DEX_NoN_fifoTextStart[], gspF3DEX_NoN_fifoTextEnd[];
extern long long int  gspF3DEX_NoN_fifoDataStart[], gspF3DEX_NoN_fifoDataEnd[];

extern long long int  gspF3DLX_fifoTextStart[],     gspF3DLX_fifoTextEnd[];
extern long long int  gspF3DLX_fifoDataStart[],     gspF3DLX_fifoDataEnd[];
extern long long int  gspF3DLX_NoN_fifoTextStart[], gspF3DLX_NoN_fifoTextEnd[];
extern long long int  gspF3DLX_NoN_fifoDataStart[], gspF3DLX_NoN_fifoDataEnd[];
extern long long int  gspF3DLX_Rej_fifoTextStart[], gspF3DLX_Rej_fifoTextEnd[];
extern long long int  gspF3DLX_Rej_fifoDataStart[], gspF3DLX_Rej_fifoDataEnd[];

extern long long int  gspF3DLP_Rej_fifoTextStart[], gspF3DLP_Rej_fifoTextEnd[];
extern long long int  gspF3DLP_Rej_fifoDataStart[], gspF3DLP_Rej_fifoDataEnd[];
extern long long int  gspL3DEX_fifoTextStart[],     gspL3DEX_fifoTextEnd[];
extern long long int  gspL3DEX_fifoDataStart[],     gspL3DEX_fifoDataEnd[];

 












# 38 "c:\\n64\\include/ultra64.h" 2

# 1 "c:\\n64\\include/PR/ultraerror.h" 1
 



















 



















 


















































































































typedef	void (*OSErrorHandler)(s16, s16, ...);

OSErrorHandler	osSetErrorHandler(OSErrorHandler);







# 39 "c:\\n64\\include/ultra64.h" 2

# 1 "c:\\n64\\include/PR/ultralog.h" 1
 



















 




















    
typedef struct {
    u32 magic;           
    u32 len;             
    u32 *base;           
    s32 startCount;      
    s32 writeOffset;     
} OSLog;

typedef struct {
    u32 magic;
    u32 timeStamp;
    u16 argCount;
    u16 eventID;
} OSLogItem;

typedef struct {
    u32 magic;           
    u32 version;         
} OSLogFileHdr;

void    osCreateLog(OSLog *log, u32 *base, s32 len);
void    osLogEvent(OSLog *log, s16 code, s16 numArgs, ...);
void    osFlushLog(OSLog *log);
u32	osLogFloat(f32);

extern void osDelay(int count);






# 40 "c:\\n64\\include/ultra64.h" 2



# 7 "c:/WayneWork/pfs.c" 2

# 1 "c:/WayneWork/stdtypes.h" 1




 




typedef volatile signed char VS08;



typedef volatile unsigned char VU08;



typedef unsigned char U08;



typedef signed char S08;



typedef volatile long VS32;



typedef volatile short VS16;



typedef volatile signed char VS8;



typedef volatile unsigned long VU32;



typedef volatile unsigned short VU16;



typedef volatile unsigned char VU8;



typedef volatile float VF32;



typedef volatile double VF64;



typedef int m_int;



typedef unsigned int m_uint;



typedef unsigned char U8;



typedef signed char S8;



typedef unsigned short U16;



typedef short S16;



typedef unsigned long U32;



typedef long S32;



typedef float F32;



typedef double F64;



typedef long MBFLT;
typedef long ANG32;
typedef struct {
	S32 x,y,z;
} S32XYZ;








# 8 "c:/WayneWork/pfs.c" 2



# 1 "c:/WayneWork/pfs.h" 1




# 1 "c:\\n64\\include\\PR/os.h" 1

 



















 








# 979 "c:\\n64\\include\\PR/os.h"

# 5 "c:/WayneWork/pfs.h" 2

# 1 "c:/WayneWork/spentry.h" 1




 
 
 

typedef struct 					 
{
	S8 ctlID;					 
	U8 edge;					 
} SPENTRY;



# 6 "c:/WayneWork/pfs.h" 2



 
 
 













extern S16 practiceMode;


# 37 "c:/WayneWork/pfs.h"


 
 
 

typedef struct 					 
{
	S8	shot;					 
	S8	shot2;
	S8	pass;
	S8	unused[5];				 
	SPENTRY	kneel[4];			 
	SPENTRY	steal[4];
	SPENTRY dive[4];
	SPENTRY	turbo[4];
	SPENTRY check[4];
	SPENTRY hook[4];
	SPENTRY trip[4];
	SPENTRY onetimer[4];
	SPENTRY hotshot[4];
	SPENTRY swplayer[4];
	SPENTRY swcamera[4];
} CONTROLLER;

typedef struct 					 
{
	U8	history[24];			 
	U8	initteamseed[16];		 
	U8	seriestype;				 
	S8	startingdiv;			 
	U8	divisionsbeat;
	U8  teamsbeatindiv;
	S8  nextoteam;				 
	U8	winstreak;				 
	U8	lossstreak;
	U8	wins;					 
	U8	losses;					 
	U8	ties;					 
	U16 goals;					 
	U16 assists;				 
	S16 plusminus;
	U16 randomseed;				 
	U8	playoffwins;			 
	U8	playofflosses;			 
	U8	serieswins;				 
	U8	serieslosses;			 
	U8	city;					 
	U8	line_pos;				 
} LADDER;

typedef struct 					 
{
	U16			wins;						 
	U16			losses;
	U16			ties;
	U16			h2hwins;					 
	U16			h2hlosses;
	U16			h2hties;
	S16			plusminus;					 
	U16			unused[3];					 
	U32			shotsongoal;				 
	U32			goals;
	U32			assists;
} CSTATS;

typedef	struct 								 
{		
	char		name[4];					 
	CSTATS		cstats;						 
	U16			otwins;						 
	U16			otlosses;
	U16			otties;
	S16			plusminus;					 
	U16			fightswon;					 
	U16			fightslost;
	U16			h2hfightswon;				 
	U16			h2hfightslost;
	S16			powerchecks;				 
	S16			crosschecks;
	S16			hooks;
	S16			trips;
	U16			powergoals;					 
	U16			onetimergoals;
	U16			goalieinnet;				 
	U16			seasons;					 
	U16			divchamps;
	U16			confchamps;	
	U16			stanleycups;
	U16			penalties;					 

	 
	U8			tidx;						 
	U8			unused1;					 
	U8			kidx0[4];					 
	U8			kidx1[4];					 
	U16			unused[3];					 



	F32			penaltyseconds;				 
	LADDER		ladder;						 
	CONTROLLER	control;					 
} PFSPLAYER;
 
 
 
 
 


typedef	struct 								 
{		
	char		name1[4];					 
	char		name2[4];					 
	U16			wins;						 
	U16			losses;
	U16			ties;
	U16			age;						 
} PFSTEAM;

typedef struct 								 
{	
	char		sig[8 ];		 
	U32			checksum;					 
	U8			revision;					 
	S8			centerX;					 
	S8			centerY;					 
	S8			arcadeMode;					 
	S8			realRink;
	S8			nPlayers;
	S8			gameDifficulty;
	S8			gameTime;
	S8			penaltiesOn;
	S8			autoSwitchPlayer;
	U8			lineSwitching;
	S8			playSpeed;
	S8			noPuckStreak;
	S8			playerFatigue;
	U8			cameras;	
	S8			fightingOn;
	U8			language;
	U8			languagePicked;
	S8			unused[2];					 
} PFSGLOBAL;


typedef struct
{
	char AllanDataFlag[190];	 
	char CurrentTeamPrefix[510*5];	 
	U8 Stats[510*3];		 
	U16 Teams[26*17];		 
	U8 HatTricks[510];		 
	U8 PlayerOfGame[510];	 
} PFSALDATA;


typedef struct
{
	U8 GoalsAgainstTeam;		 
	U8 Goals;
	char GoalInitials[3];		 

	U8 AssistsAgainstTeam;		 
	U8 Assists;
	char AssistInitials[3];		 

	U8 HatTricksAgainstTeam;	 
	U8 HatTricks;
	char HatTricksInitials[3];	 
} PFSALRECORDS;


 
 
 
 
 
typedef struct 								 
{
	PFSGLOBAL	global;						 
	PFSTEAM		teams[14 ];			 
	PFSPLAYER	players[6 ];		 

	PFSALDATA	AllansData;					 
	PFSALRECORDS	AllansRecords[510];		 

} PFS;






											 

 
 
 




 	S8		pfsPak;						 
 	S8		pfsPaks;					 
 	U8		pfsCheck;					 
 	U8		pfsFailed;					 
 	S16		pfsReturn;					 
 	U8		pfsChanged[4 ];	 
 	S8		pfsController;				 



extern	PFS		pfs[4 ];		 


 
 
 
 

void	PfsSaveAllansData(PFS *p);
void	PfsRestoreAllansData(PFS *p);

void	PfsSaveGlobals(PFS *p);
void	PfsRestoreGlobals(PFS *p);
void	PfsSaveController(PFSPLAYER *player, int kidx);
void	PfsRestoreController(PFSPLAYER *player, int kidx);
void	PfsInit(void);
void	Ascii2Ncode(char *dest, char *src, int n);
int		Ncode2Ascii(char *dest, char *src, int n);
void	PfsLockIO(void);
void	PfsUnlockIO(void);
U32		PfsChecksum(int pak);
int		PfsGetPak(int n);
int		PfsPlayerCount(int pak);
PFSPLAYER *PfsWhichPlayer(int pak, char *name, int *index);
PFSTEAM *PfsAddTeam(int pak, int kid0, int kid1);
PFSPLAYER *PfsAddPlayer(int kidx, char *name);
int		PfsWriteFile(int pak);
void	PfsStatus(void);
void 	PfsStatsScreen(void);
void 	PfsDeleteScreen(void);
void	PfsRestoreStats(void);



# 11 "c:/WayneWork/pfs.c" 2


# 1 "c:/WayneWork/U64main.h" 1





# 1 "c:\\WayneWork/sched.h" 1
 



































typedef struct {
    short type;
    char  misc[30];
} OSScMsg;

typedef struct OSScTask_s {
    struct OSScTask_s   *next;           
    u32                 state;
    u32			flags;
    void		*framebuffer;	 

    OSTask              list;
    OSMesgQueue         *msgQ;
    OSMesg              msg;

} OSScTask;

 











 






typedef struct SCClient_s {
    struct SCClient_s   *next;   
    OSMesgQueue         *msgQ;   
} OSScClient;

typedef struct {
    OSScMsg     retraceMsg;
    OSScMsg     prenmiMsg;
    OSMesgQueue interruptQ;
    OSMesg      intBuf[8 ];
    OSMesgQueue cmdQ;
    OSMesg      cmdMsgBuf[8 ];
    OSThread    thread;
    OSScClient  *clientList;
    OSScTask    *audioListHead;
    OSScTask    *gfxListHead;
    OSScTask    *audioListTail;
    OSScTask    *gfxListTail;
    OSScTask    *curRSPTask;
    OSScTask    *curRDPTask;
    u32         frameCount;
    s32         doAudio;
} OSSched;

void            osCreateScheduler(OSSched *s, void *stack, OSPri priority,
                                  u8 mode, u8 numFields);
void            osScAddClient(OSSched *s, OSScClient *c, OSMesgQueue *msgQ);
void            osScRemoveClient(OSSched *s, OSScClient *c);
OSMesgQueue     *osScGetCmdQ(OSSched *s);



# 6 "c:/WayneWork/U64main.h" 2


# 1 "c:/WayneWork/config.h" 1












































void ROMPRINTF(char *fmt,...);
void ROMPRINTFERR(int errid, char *fmt,...);


# 8 "c:/WayneWork/U64main.h" 2


 
 
 
 











 
 
 








































 
 
 
typedef struct 
{
	Mtx	projection;
	Mtx	viewing;
	Mtx	identity;
	Mtx	mat[400 ];
	Gfx	glist[300 ];
	Gfx	clist[1700 ];
} Dynamic;


typedef union {    

    struct {
        short   type;
    } gen;
    
    struct {
        short   type;
    } done;
    
    OSScMsg      app;
    
} GFXMsg;


typedef struct 
{
    OSScTask	task;
    Dynamic		*dp;
    GFXMsg      msg;
    u16			*cfb;
} GFXInfo;


 
 
 




extern 	OSMesgQueue hockeyMsgQ;
extern 	OSMesg      hockeyMsgBuf[8 ];

extern 	OSMesgQueue	gfxFrameMsgQ;
extern 	OSMesg		gfxFrameMsgBuf[60 ];

extern 	Gfx			*glistp;
extern 	Gfx			*clistp;
extern 	Dynamic 	*dynamicp;
extern 	Mtx			*mtxp;

extern 	float		HFOV;					 
extern 	float		VFOV;
extern 	S16			centerX, centerY;		 

extern 	u32			frameTime;
extern 	OSTime		frameTimeCur;
extern 	u32			BGcolor;

extern 	vu32 		frameCount;				 
extern 	vu32		lastFrameCount;			 
extern 	vu32 		frameCounter;			 
extern 	vu32 		lastFrameCounter;		 
extern  	VF32		SPF;					 







extern 	s16			borderh;				 
extern 	s16			borderv;

extern  	vs8			msgSent;				 
extern  	vs8			msgWorking;				 
extern  	vs8			msgReply;				 

extern 	char 		*relocSegments[16];		 

extern 	vu8			controllerIO;			 
extern 	vu8			pfsIO;					 
extern 	vs8			check4NewControls;		 
extern 	vs8			ignoreControlRead;		 



extern	OSMesgQueue	serialMsgQ;				 

extern	u32			rspStartTime;
extern	u32			rspTime;
extern	u32			rdpTime;


 
 
 
extern char _yieldSegmentEnd[];
extern char _staticSegmentRomStart[], _staticSegmentRomEnd[];
extern char _tableSegmentRomStart[], _tableSegmentRomEnd[];
extern char _seqSegmentRomStart[], _seqSegmentRomEnd[];
extern char _bankSegmentRomStart[], _bankSegmentRomEnd[];


 
 
 
void change2HiresCFB(void);
void change2LoresCFB(void);
extern	void	guRotateRYP(Mtx *mtx, float r, float y, float p);
extern	void	guRotatePYR(Mtx *mtx, float p, float y, float r);

extern	void	Rotate(float m[4][4], float a, float x, float y, float z);
extern	void	RotatePYR(float m[4][4], float p, float y, float r);
extern	void	RotateRYP(float m[4][4], float p, float y, float r);

extern	void	Translate(float m[4][4], float x, float y, float z);

extern	void	MatrixMul3x3(float m[4][4], float mf[4][4]);
extern	void	MatrixMul4x3(float m[4][4], float mf[4][4]);
extern	void	MatrixMul4x4(float m[4][4], float mf[4][4]);

extern	void	StartGfxTask(GFXInfo *);
extern	void	EndGfxTask(GFXInfo *);


extern	void	wayne_main(void);							 




extern	void	cpu(u32 fspcr);

extern void     romCopy(char *src, char *dest, int len);
extern void     romCopy2(char *src, char *dest, int len);

extern void 	guMtxFX2L(float mf[4][4], Mtx *m);
extern void 	guMtxZoidX2L(float mf[3][4], Mtx *m);

extern void		doRelocSegments(void);

extern Gfx		setup_rdpstate[];					 
extern Gfx		setup_rspstate[];
extern Gfx		setup_rdpstate_hires[];
extern Gfx		setup_rspstate_hires[];

extern Dynamic	dynamic[2];							 
extern u64		dram_stack[];
extern u64		gfxYieldBuf[];
extern u64 		audYieldBuf[];

extern	u64		fifo[];					


extern u16 		cfb_16_a[];							 
extern u16		cfb_16_b[];
extern u16		*cfb_16hires_a;
extern u16		*cfb_16hires_b;

extern u16		zbuffer[];							 


# 13 "c:/WayneWork/pfs.c" 2

# 1 "c:/WayneWork/U64attract.h" 1
# 1 "c:/WayneWork/blit.h" 1




# 1 "c:/WayneWork/mbox.h" 1



# 1 "c:/WayneWork/struct.h" 1



# 1 "c:/WayneWork/fmath.h" 1




# 1 "c:\\n64\\include/math.h" 1








 
 
 
 
 
 
 
 

 

 













 















 



# 106 "c:\\n64\\include/math.h"


extern double	acos(double);
#pragma no side effects (acos)
extern float	acosf(float);
#pragma no side effects (acosf)

extern double	asin(double);
#pragma no side effects (asin)
extern float	asinf(float);
#pragma no side effects (asinf)

extern double	atan(double);
#pragma no side effects (atan)
extern float	atanf(float);
#pragma no side effects (atanf)

extern double	atan2(double, double);
#pragma no side effects (atan2)
extern float	atan2f(float, float);
#pragma no side effects (atan2f)

extern double	cos(double);
#pragma no side effects (cos)
extern float	cosf(float);
#pragma no side effects (cosf)

extern double	sin(double);
#pragma no side effects (sin)
extern float	sinf(float);
#pragma no side effects (sinf)

extern double	tan(double);
#pragma no side effects (tan)
extern float	tanf(float);
#pragma no side effects (tanf)

extern double	cosh(double);
#pragma no side effects (cosh)
extern float	coshf(float);
#pragma no side effects (coshf)

extern double	sinh(double);
#pragma no side effects (sinh)
extern float	sinhf(float);
#pragma no side effects (sinhf)

extern double	tanh(double);
#pragma no side effects (tanh)
extern float	tanhf(float);
#pragma no side effects (tanhf)

extern double	exp(double);
#pragma no side effects (exp)
extern float	expf(float);
#pragma no side effects (expf)

extern double	frexp(double, int *);





extern double	ldexp(double, int);





extern double	log(double);
#pragma no side effects (log)
extern float	logf(float);
#pragma no side effects (logf)

extern double	log10(double);
#pragma no side effects (log10)
extern float	log10f(float);
#pragma no side effects (log10f)

extern double	modf(double, double *);
 
extern float	modff(float, float *); 

extern double	pow(double, double);
#pragma no side effects (pow)
 
extern float	powf(float, float);
#pragma no side effects (powf)

extern double	sqrt(double);
#pragma no side effects (sqrt)
extern float	sqrtf(float);
#pragma no side effects (sqrtf)

extern double	ceil(double);
#pragma no side effects (ceil)
extern float	ceilf(float);
#pragma no side effects (ceilf)

extern double	fabs(double);
#pragma no side effects (fabs)
 
extern float	fabsf(float);
#pragma no side effects (fabsf)

extern double	floor(double);
#pragma no side effects (floor)
extern float	floorf(float);
#pragma no side effects (floorf)

extern double	fmod(double, double);
#pragma no side effects (fmod)
 
extern float	fmodf(float, float);
#pragma no side effects (fmodf)


# 239 "c:\\n64\\include/math.h"

 
extern const double __infinity;





extern int errno, signgam;

extern double	atof(const char *);
extern int	rand(void);
extern void	srand(unsigned);





enum version { c_issue_4, ansi_1, strict_ansi };
extern const enum version _lib_version;

 
extern double	rint(double);
#pragma no side effects (rint)
extern double	asinh(double);
#pragma no side effects (asinh)
extern double	acosh(double);
#pragma no side effects (acosh)
extern double	atanh(double);
#pragma no side effects (atanh)
extern double	log1p(double);
#pragma no side effects (log1p)
extern double	erf(double);
#pragma no side effects (erf)
extern double	erfc(double);
#pragma no side effects (erfc)
extern double	expm1(double);
#pragma no side effects (expm1)
extern double	gamma(double);
extern double	hypot(double, double);
#pragma no side effects (hypot)
struct __cabs_s { double a,b; };
extern double	cabs(struct __cabs_s);
#pragma no side effects (cabs)
extern double	copysign(double, double);
#pragma no side effects (copysign)
extern double	drem(double, double);
#pragma no side effects (drem)
extern double	logb(double);
#pragma no side effects (logb)






extern double	scalb(double, double);
#pragma no side effects (scalb)
extern int	finite(double);
#pragma no side effects (finite)
extern double	j0(double);
#pragma no side effects (j0)
extern double	j1(double);
#pragma no side effects (j1)
extern double	jn(int, double);
#pragma no side effects (jn)
extern double	y0(double);
#pragma no side effects (y0)
extern double	y1(double);
#pragma no side effects (y1)
extern double	yn(int, double);
#pragma no side effects (yn)
extern double	cbrt(double);
#pragma no side effects (cbrt)
extern double	atof(const char *);
extern double   strtod(const char *, char **);
extern double   trunc(double);
#pragma no side effects (trunc)

extern int	rand(void);
extern void	srand(unsigned);

extern long	random(void);
extern int	srandom(unsigned); 
extern char *	initstate(unsigned int, char *, int);
extern char *	setstate(char *);

extern double	drand48(void);
extern double	erand48(unsigned short [3]);
extern long	lrand48(void);
extern long	nrand48(unsigned short [3]);
extern long	mrand48(void);
extern long	jrand48(unsigned short [3]);
extern void	srand48(long);
extern unsigned short * seed48(const unsigned short [3]);
extern void	lcong48(const unsigned short [7]);

 


















 











 
extern float	fhypot(float, float);
#pragma no side effects (fhypot)
extern float	hypotf(float, float);
#pragma no side effects (hypotf)
struct __fcabs_s { float a,b; };
extern float	fcabs(struct __fcabs_s);
#pragma no side effects (fcabs)
extern float	fexpm1(float);
#pragma no side effects (fexpm1)
extern float	expm1f(float);
#pragma no side effects (expm1f)
extern float	log1pf(float);
#pragma no side effects (log1pf)
extern float	truncf(float);
#pragma no side effects (truncf)







# 410 "c:\\n64\\include/math.h"


 




































struct exception {
	int type;
	char *name;
	double arg1;
	double arg2;
	double retval;
};

extern int matherr(struct exception *p);


# 1 "c:\\n64\\include/svr4_math.h" 1
 
 















 




















# 460 "c:\\n64\\include/math.h" 2




# 480 "c:\\n64\\include/math.h"






# 5 "c:/WayneWork/fmath.h" 2

# 1 "c:\\WayneWork/ieeefp.h" 1






typedef union 
{
  double value;
  struct 
  {
    unsigned int sign : 1;
    unsigned int exponent: 11;
    unsigned int fraction0:4;
    unsigned int fraction1:16;
    unsigned int fraction2:16;
    unsigned int fraction3:16;
    
  } number;
  struct 
  {
    unsigned int sign : 1;
    unsigned int exponent: 11;
    unsigned int quiet:1;
    unsigned int function0:3;
    unsigned int function1:16;
    unsigned int function2:16;
    unsigned int function3:16;
  } nan;
  struct 
  {
    unsigned long msw;
    unsigned long lsw;
  } parts;
    long aslong[2];
} __ieee_double_shape_type;



# 84 "c:\\WayneWork/ieeefp.h"




typedef union
{
  float value;
  struct 
  {
    unsigned int sign : 1;
    unsigned int exponent: 8;
    unsigned int fraction0: 7;
    unsigned int fraction1: 16;
  } number;
  struct 
  {
    unsigned int sign:1;
    unsigned int exponent:8;
    unsigned int quiet:1;
    unsigned int function0:6;
    unsigned int function1:16;
  } nan;
  long p1;
  
} __ieee_float_shape_type;



# 136 "c:\\WayneWork/ieeefp.h"




# 176 "c:\\WayneWork/ieeefp.h"


int isnan(double);
int isinf(double);
int finite(double);


int isnanf(float);
int isinff(float);
int finitef(float);

double 	maxpowtwo(void);
float 	maxpowtwof(void);



























# 235 "c:\\WayneWork/ieeefp.h"



# 6 "c:/WayneWork/fmath.h" 2






 

 










typedef struct {		 
	F32 uvs[3][3];			 
	F32 pos[3];				 
}MAT3;

typedef struct {		 
	F32 uvs[4][3];			 
}MAT4;

typedef struct {		 
	F32 xuv[3];				 
	F32 yuv[3];				 
	F32 zuv[3];				 
 	F32 pos[3];				 
}MATV;


typedef union {			 
	MAT3 mat3;
	MAT4 mat4;
	MATV matv;
	F32 uvs[4][3];
}MATRIX;

 










 
extern 	F32			unitmatrix[4][3];		 




extern F32 uvector[3];		 
extern F32 dvector[3];		 
extern F32 rvector[3];		 
extern F32 lvector[3];		 
extern F32 fvector[3];		 
extern F32 bvector[3];		 
extern F32 hugevector[3];		 
extern MAT3 lrmat;			 
extern F32 unitquat[4];		 
extern F32 quatyaw180[4];		 

 





















 





































 






 
void CopyUV(F32 a[][3], F32 b[][3]);
void TransposeUV(F32 uv[][3]);
void ScaleUV(F32 a[][3], F32 b[][3], F32 sfactor);
void FixRowUV(F32 a[][3]);
void FixColumnUV(F32 a[][3]);
void RotateUV(F32 rpyv[3], F32 uvs[][3]);
void WYawUV(F32 angle, F32 uv[][3]);
void WPitchUV(F32 angle, F32 uv[][3]);
void WRollUV(F32 angle, F32 uv[][3]);
void YawUV(F32 angle, F32 uv[][3]);
void PitchUV(F32 angle, F32 uv[][3]);
void RollUV(F32 angle, F32 uv[][3]);
void MulMat(MATRIX *BB, MATRIX *AA, MATRIX *CC);
void BodyVector(F32 uvec[3], F32 bodvec[3], F32 uvs[][3]);
F32 BodyX(F32 uvec[3], F32 uvs[][3]);
F32 BodyY(F32 uvec[3], F32 uvs[][3]);
F32 BodyZ(F32 uvec[3], F32 uvs[][3]);
void WorldVector(F32 bodvec[3], F32 uvec[3], F32 uvs[][3]);
F32 WorldX(F32 bodvec[3], F32 uvs[][3]);
F32 WorldY(F32 bodvec[3], F32 uvs[][3]);
F32 WorldZ(F32 bodvec[3], F32 uvs[][3]);
void MulVecMat(F32 vin[3], F32 vout[3], F32 M[4][3]);
F32 NormalVector(F32 v[3]);
F32 SlowNormalVector(F32 v[3]);
F32 NormalVector2D(F32 v[3]);
F32 Det3Vectors(F32 v0[3], F32 v1[3], F32 v2[3]);
void GetYawPitch(F32 dvec[3], F32 *yawp, F32 *pitp);
F32 SubAngle(F32 a, F32 b);
F32 AddAngle(F32 a, F32 b);
F32 FixAngle(F32 a);
F32 SubAngleP(F32 a, F32 b);
F32 AddAngleP(F32 a, F32 b);
F32 FixAngleP(F32 a);
void CreatePYRMatrix(F32 mat[][3], F32 *pyr);
void CreateRYPMatrix(F32 mat[][3], F32 *pyr);
void CreateQuatMat(F32 *mat, F32 q[], int normal);
void NormalizeQuat(F32 *q);
void MulQuat(F32 *q1, F32 *q2, F32 *qr);
void InterpQuats(F32 frac, F32 *q1, F32 *q2, F32 *qr);
void ExtractRYP(F32 mat[][3], F32 *pyr);
void Randomize(U32 seed);
F32 Random(F32 max);
int RandInt(int max);
F32 fqdist(F32 x, F32 y);
int quadratic(F32 a,F32 b,F32 c,F32 *r1,F32 *r2);













	

# 4 "c:/WayneWork/struct.h" 2


 



typedef struct
{
	char	Name[16];			 
	F32		Radius;				 
	S16		Nanims;				
	S16		AnimIndex;
} ObjDef, OBJDEF;



typedef struct
{
	S16		type;				 
	S16		id;					 
	S16		lod;				 
	S16		fid;				 
	S16		odata[2];			 
	S16		udata[2];			 
} ObjAnim, OBJANIM;



 


typedef struct
{
	char	Name[16];
	U16		Width,Height;
 
 
	U16		size;				 
	U16		format;				 
	char	*TexBase;			 
	S16		palIndex;			 
} TexDef, TEXDEF;


 


typedef struct
{
	char	Name[16];
	U8		start,end;			 
 
 
	U16		format;				 
	char	*PalBase;			 
} PalDef, PALDEF;


 



typedef struct
{
	U16		texidx;				 
	U16		flags;				 
	F32		LodRad;				 
	char	*DisplayList;		 
} RomLOD, ROMLOD;







 


typedef struct
{
	S32		LodCount;			 
	ROMLOD	LOD[4];
} RomObject, ROMOBJECT;


 
 
 
 
 
 
 
 
 
 
 
 
 
typedef struct
{
	ObjDef	*ObjDefIdx;			 
	S32		ObjDefCount;		 
	ObjAnim	*ObjAnimIdx;		 
	S32		ObjAnimCount;		 
	TexDef	*TexDefIdx;			 
	S32		TexDefCount;		 
	PalDef	*PalDefIdx;			 
	S32		PalDefCount;		 
} RomObjectList, ROMOBJECTLIST;



# 4 "c:/WayneWork/mbox.h" 2

# 1 "c:/WayneWork/zoid.h" 1



# 1 "c:\\n64\\include\\PR/gbi.h" 1
 










 







# 4124 "c:\\n64\\include\\PR/gbi.h"


# 4 "c:/WayneWork/zoid.h" 2

























typedef struct
{
    F32	x,y,z;			 
    F32 r,g,b;			 
	S16	camlink;		 
} MBLIGHT;


typedef struct {
    U32 flags;			 
	F32 whviewang;		 
	F32 wvviewang;		 
	F32 whvangtan;		 
	F32 wvvangtan;		 
	F32 wihvangtan;		 
	F32 wivvangtan;		 
	F32 wwidth;			 
	F32 wheight;		 
	F32 whcenter;		 
	F32 wvcenter;		 
    F32 frontclip;
    F32 backclip;
    F32 ambient;
    F32 ambientrgb[3];
} MBWININFO;


typedef struct {
    PALDEF	*palette;		 
    TEXDEF	*texture;
	U16		texIndex;		 
    S16	X,Y;
    U16 Z;					 
    S16 Width,Height;
    U8	alpha;
	U8	Flags;				 
	S8	Hide;				 
    S16 top,bot,left,right;  
	U16 color;				 
} BlitInstance, BLITINSTANCE;


typedef struct
{
	U8	r,g,b,a;
} COLOR;


 






















typedef struct
{
    U32 	flags;			 
    MATRIX	*mat;			 
	F32		scale;			 
    S16		index; 			 	
    S16 	child;			 
    S16 	next[1 ]; 			 
	TEXDEF	*texture[4];	 
	PALDEF	*palette;		 
	COLOR	color;			 
} OBJINSTANCE;








typedef struct
{
	S16 	nverts;						 
	U16 	flags;						 
	S16		texidx;						 
	S16		unused;
	Vtx		verts[4 ];	 
} POLYINST;


extern 	OBJINSTANCE ObjInstanceList[];
extern 	MBWININFO 	ZoidWinInfo[1 ];
extern	S16			arenaActive;					 
extern	S16			arenaDlIndex[4 ][2];	 


void ZOID_Reset(void);
void ZOID_Init(void);
S16 ZOID_FindObjInstance(char *name);
S16 ZOID_ObjParent(S16 objnum);
S16 ZOID_ObjPrevObj(S16 objnum, S16 cam);
S16 ZOID_LastSibling(S16 objnum, S16 camlink);
void ZOID_InsertObject(S16 objnum, S16 parent, S16 camlink);
S16 ZOID_AddObject(S32 objidx, MATRIX *mat, S16 camlink, S16 parent, U32 flags);
void ZOID_RemoveObject(S16 objnum);
U32 ZOID_UpdateObject(S32 objnum, MATRIX *mat);
void ZOID_SetObjectDef(S16 objnum, S16 def);
void ZOID_SetObjectParent(S16 objnum, S16 newparent, U16 camlink);
void ZOID_EndFrame(void);
MBWININFO *ZOID_InitializeWindow(int idx, F32 hang, F32 vang, int parallel);
MBWININFO *ZOID_SetWindow(F32 hangle, F32 vangle, U32 winidx);
MBWININFO *ZOID_GetWindow(int winidx);
void ZOID_ProjectWindow(int widx, F32 point[3], MATRIX *mat, F32 *body, S16 screen[2]);
void ZOID_WindowTo3D(int widx, S16 screen[2], MATRIX *mat, F32 zdist, F32 point[3]);

void ZOID_SetAmbient(int idx, F32 ambient, const F32 *rgb);
void ZOID_SetBGColor(U16 rgb555);
U32 ZOID_ObjectFlags(S16 objnum);
U32 ZOID_SetObjectFlags(S32 objnum, U32 flags);

void ZOID_BuildCullingList(F32 *min, F32 *max, S16 dlindex);

void ZOID_SetColor(S16 objnum, COLOR *col);
void ZOID_SetPalette(S16 objnum, PALDEF *pal);
void ZOID_SetTexture(S16 objnum, TEXDEF *tex, int lod);
void ZOID_SetROMLODTexture(U16 mbidx, U16 texidx, int lod);

void ZOID_UpdateBlit(int bl_idx, int texIndex, TEXDEF *texture, PALDEF *palette, int x, int y, int width, int height);
void ZOID_CropBlit(int bl_idx, int top, int bot, int left, int right, U16 color);
void ZOID_SetBlitData(int bl_idx, int hide, int alpha, U16 z);
int ZOID_AddBlit(int texIndex, TEXDEF *texture, PALDEF *palette, int x, int y, int width, int height);
void ZOID_RemoveBlit(int bl_idx);
void ZOID_ReorderBlits(void);
void ZOID_FlipBlit(int bl_idx, int flip);
void ZOID_ColorBlit(int bl_idx, int tl, int tr, int bl, int br);

POLYINST *ZOID_NewPoly(int nverts, F32 xyz[][3], S16 texidx, COLOR *color, U16 flags);
void ZOID_UpdatePoly(POLYINST *poly, int nverts, F32 xyz[][3], S16 texidx, COLOR *color, U16 flags);
void ZOID_HidePoly(POLYINST *poly);
void ZOID_ShowPoly(POLYINST * poly);
void ZOID_RemovePoly(POLYINST * poly);

int ZOID_ChangeTexture(U32 romobjidx, U32 lod, S32 polyidx, U32 texidx);
int ZOID_ChangeXlu(U32 romobjidx, U32 lod, S32 polyidx, U32 xlu);

U32 ZOID_GetTextureAddr(U32 texidx);
void ZOID_SetTextureAddr(U32 texidx, U32 addr);
void ZOID_CopyTexture(U32 srcidx, U32 dstidx);

void ZOID_ChangeObjectTextureAddr(S32 objidx, char *dest, char *src, int lod, S16 skip);

void ZOID_InitLights(F32 ambient);
void ZOID_SetupLight(int idx, F32 vec[3], F32 rgb[3], S16 camlink);
U32 ZOID_AddLight(F32 vec[3], F32 rgb[3], S16 camlink);
void ZOID_DeleteLights(void);
void ZOID_AdjustLights(void);



# 5 "c:/WayneWork/mbox.h" 2









typedef struct
{
	ROMOBJECT	*RomObjDefs;
	S32		Count;
} ROMOBJDEF_LIST;


typedef struct
{
	OBJDEF	*ObjDefs;
	S32		Count;
} OBJDEF_LIST;


typedef struct
{
	OBJANIM *ObjAnims;
	S32		Count;
} OBJANIM_LIST;


typedef struct
{
	TEXDEF	*TexDefs;
	S32		Count;
} TEXDEF_LIST;


typedef struct
{
	PALDEF	*PalDefs;
	S32		Count;
} PALDEF_LIST;


typedef struct
{
	void (*animfunc)(S32 mbidx, S32 dlidx,OBJANIM *oanim);
} MBOXANIMFUNC;









enum
{
	HIDE_ALL = 0,		 
	HIDE_ONLY,			 
	HIDE_EACHCHILD,		 
	HIDE_RECURSIVE		 
};


enum
{
	SHOW_ALL = 0,		 
	SHOW_EACHCHILD,		 
	SHOW_RECURSIVE		 
};


enum
{
	XLU_ONLY = 0,		 
	XLU_CHILDREN,		 
	XLU_RECURSIVE		 
};


extern ROMOBJDEF_LIST	romobjdef_ptrs[16 ];
extern OBJDEF_LIST     	objdef_ptrs[16 ];
extern OBJANIM_LIST    	objanim_ptrs[16 ];
extern TEXDEF_LIST     	texdef_ptrs[16 ];
extern PALDEF_LIST     	paldef_ptrs[16 ];


S16 MBOX_NewObject(S32 obj, MATRIX *mat, S32 parent, U32 flags);
void MBOX_UpdateObject(S32 dlidx, MATRIX *mat);

S32 MBOX_GetMBIndex(S32 dlidx);
S32 MBOX_GetChild(S32 dlidx);
S32 MBOX_GetNext(S32 dlidx);
void MBOX_HideObject(S32 dlidx, int mode);
void MBOX_ShowObject(S32 dlidx, int mode);
void MBOX_ChangeXlu(S16 dlidx, U32 xlu, int mode);
char *MBOX_GetObjectName(int mbidx);
F32 MBOX_GetObjectRadius(int mbidx);
S32 MBOX_FindObject(const char *string);
void MBOX_ObjectAnimation(S32 obj, S32 dlidx);
U32 MBOX_GetObjectAnimInfo(const char *string, OBJANIM **anim);
char *MBOX_GetTextureName(int tidx);
TEXDEF	*MBOX_FindTexture(const char *name, U16 *index);
PALDEF	*MBOX_FindPalette(const char *name, U16 *index);



# 5 "c:/WayneWork/blit.h" 2



typedef struct _Blit
{
	const	char	*Name;
	PALDEF	*palette;
	TEXDEF	*texture;
	U16		TexIndex;
	S16		X,Y;
	U16		Z;
	S16		Width,Height;
	U08		Alpha;
	S08		Hide;
	S16		Top,Bot,Left,Right;
	S16		color; 					 
	int		(* AnimFunc)(struct _Blit *blit);
	U32		AnimID;
	S32 	AnimDTA;
	U16		BLIdx;
	void 	*data;					 
	struct _Blit *child;
} Blit,BLIT;


typedef struct
{
	const char *texname;			 
	S16 dulx,duly,width,height;		 
	S16 top,bot,left,right;			 
									 
	U16 zdepth;						 
	U8	alpha;						 
	U8 	ctlflags;					 
	int (* animfunc)(Blit *blit);	 
	S32 animid;						 
} MULTIBLIT;


 
void InitBlits(void);
void RemoveBlit(Blit *dbp);
void MoveBlitIdx(int from, int to);
void	DumpBlits(void);
void DrawBlits(void);
void InitBlit(Blit *blit);
void UpdateBlit(Blit *blit);
Blit *NewBlit(const char *name, int x, int y);
Blit *NewBlitRect(int x, int y, int width, int height, COLOR *color);
Blit *NewBlitRectNoClip(int x,int y,int w,int h,COLOR *c);
void RenameBlit(Blit *blit, const char *name, int preserve);
void SelectBlit(BLIT *blt, int index, int hSize, int vSize);
BLIT *NewMultiBlit(S16 ulx, S16 uly, const MULTIBLIT *mblit, S16 nblits);
void hideBlit(BLIT *blt);
void showBlit(BLIT *blt);
void MultiBlitHide(BLIT *blt);
void MultiBlitShow(BLIT *blt);
void MultiBlitMove(BLIT *blt, S16 dx, S16 dy);

extern TEXDEF * const TexTable;



# 1 "c:/WayneWork/U64attract.h" 2


void U64Attracts(U16 mode);
void attSetControls(void);
void attResetControls(void);
void initGameOptions(void);

extern U16 att_controls;
extern	U16	changed_options;

typedef struct
{
	u8	sfx;
	u8	announcer;
	u8	music;
	u8	crowd;
} GOPT;

 
 






























 
 







 

 
 

 




















extern char *nickname[];
extern Blit *atit_blits[];
void	TitleBlit(int show);
void	ShowHiscoreTitle(int number);

# 14 "c:/WayneWork/pfs.c" 2

# 1 "c:/WayneWork/main.h" 1




void OncePerFrame(void);

void OncePerFrame_NoPause(void);


void Process3D(S16 game);

void wayne_main(void);






# 15 "c:/WayneWork/pfs.c" 2

# 1 "c:/WayneWork/controls.h" 1



# 1 "c:\\n64\\include\\PR/os.h" 1

 



















 








# 979 "c:\\n64\\include\\PR/os.h"

# 4 "c:/WayneWork/controls.h" 2


# 1 "c:/WayneWork/gamedefs.h" 1




enum {
	MODE_ATTRACT=0,
	MODE_GAME=1,
	MODE_GETNAME,
	MODE_SELECT,
	MODE_CHALLENGE,
	MODE_ENDOFPERIOD,
	MODE_FACEOFF,
	MODE_SCORE,
	MODE_STATS,
	MODE_HISCORE,
	MODE_FIGHT,
	MODE_PENALTY
};







 
 
 











# 6 "c:/WayneWork/controls.h" 2

# 1 "c:/WayneWork/programmer.h" 1







# 7 "c:/WayneWork/controls.h" 2






typedef struct {			 
	F32 ctlupdate;				 
	
	 
	F32 joy[3];					 
	F32 cjoy[3];				 
	S16 joyactive;				 
	S16 shot;					 
	S16 pass;					 
	S16 check;					 
	F32 shottime;				 
	F32 tndm;					 
	F32 tljoy;					 
}CONTROL;



typedef struct {			 
	VS8 swstatebuf[8 ];	 
	VF32 swtimebuf[8 ];	 
	 
	U32 car_flags;				 
	F32 car_initial;			 
	F32 car_repeat;				 
	F32 car_time;				 
}SWITCH;

 












 
 
# 64 "c:/WayneWork/controls.h"












 









 




 
















 
enum {
	P1JOYLID,P1JOYRID,P1JOYUID,P1JOYDID,P1SHOTID,P1PASSID,P1CHECKID,P1STARTID,P1BBUTID,P1CBUTID,P1EBUTID,P1LEFTBID,P1RIGHTBID,P1TRIGID,
	P2JOYLID,P2JOYRID,P2JOYUID,P2JOYDID,P2SHOTID,P2PASSID,P2CHECKID,P2STARTID,P2BBUTID,P2CBUTID,P2EBUTID,P2LEFTBID,P2RIGHTBID,P2TRIGID,
	P3JOYLID,P3JOYRID,P3JOYUID,P3JOYDID,P3SHOTID,P3PASSID,P3CHECKID,P3STARTID,P3BBUTID,P3CBUTID,P3EBUTID,P3LEFTBID,P3RIGHTBID,P3TRIGID,
	P4JOYLID,P4JOYRID,P4JOYUID,P4JOYDID,P4SHOTID,P4PASSID,P4CHECKID,P4STARTID,P4BBUTID,P4CBUTID,P4EBUTID,P4LEFTBID,P4RIGHTBID,P4TRIGID
};

typedef struct {
	F32 maxtime;			 
	F32 holdtime;			 
	F32 dmdelay;			 
	const S16 *spactive;	 
	SPENTRY **spentry;		 
	S32 moveid;				 
	const char *name;
}SPMOVE;


extern 	VU16 	OS_ctl_levels[];
extern 	VU16 	OS_ctl_edges[];
extern	VS8		analog_inputs[4 ][2];
extern	VS8 	use_analog_inputs[4 ];

extern 	volatile F32 	CTLTIME;						 

extern	S16		shotbutton[4];							 
extern	S16		shot2button[4];						 
extern	S16		passbutton[4];							 
extern	SPENTRY kneel_lists[4][4];				 
extern	SPENTRY steal_lists[4][4];				 
extern	SPENTRY burst_lists[4][4];				 
extern	SPENTRY onetimer_lists[4][4];			 
extern	SPENTRY dive_lists[4][4];				 
extern	SPENTRY check_lists[4][4];				 
extern	SPENTRY trip_lists[4][4];				 
extern	SPENTRY hook_lists[4][4];				 
extern	SPENTRY hotshot_lists[4][4];			 
extern	SPENTRY playersw_lists[4][4];
extern	SPENTRY camerasw_lists[4][4];
extern	U8		changed_lists[4];				 


# 172 "c:/WayneWork/controls.h"
























# 1 "c:/WayneWork/player.h" 1



typedef struct player PLAYER;


# 1 "c:/WayneWork/anim.h" 1



typedef struct anim ANIM;
typedef struct animseqinfo ANIMSEQINFO;
typedef struct animseqinfo ANIMSEQ;					 
typedef struct animkey ANIMKEY;
typedef struct animseqheader ANIMSEQHEADER;
typedef struct animdesc ANIMDESC;

typedef struct animheader ANIMHEADER;
typedef struct animinfo ANIMINFO;
typedef struct animobj ANIMOBJ;

typedef struct partdesc PARTDESC;

 


 



















 
 
struct anim		
{
	F32	value;		 
};

 
 
struct animseqinfo
{
	U16	type;		 

	U16 size;		 
	U32 animidx;	 
};

 
struct animseqheader
{
	U08 keys;		 
	U08 control;	 
	U16 keyidx;		 
};

 
struct animkey
{
	U08 key;
};

struct animdesc
{
	char desc[32];
};

struct partdesc
{
	F32 pos[3];
	char desc[16];
	char parent[16];
	char objname[16];
};

 
 
struct animheader {
	F32 *CompressAng;
	F32 *CompressPos;
	F32 *CompressUnit;
	ANIM *blocks;
	ANIMSEQ *seqs;
	ANIMSEQHEADER *seqheader;
	ANIMKEY *keys;
	ANIMDESC *objdescs;
	S32 numseqs;
	S32 numobjs;
	S32 numjoints;
	S32 numsites;
};

 
struct animinfo {
	F32 *CompressAng;
	F32 *CompressPos;
	F32 *CompressUnit;
	ANIM *blocks;				 
	ANIMSEQHEADER *seqheader;	 
	ANIMKEY *keys;				 
	ANIMHEADER *header;			 
	S16 numseqs;				 
	S16 animseq0;				 
	S16 animseq;				 
	S16 transkey;				 
	S16	save0;					 
	S16 unused;
	F32 frac;					 
	S16 idx0;					 
	S16 idx1;					 
	S16 setpanim;				 
	S16 mirror;					 
	 
	S16 active;					 
	U16 prevkey;				 
	F32 starttime;				 
	F32 transtime;				 
	F32 scale;					 
	F32 atime;	
	S16 repeat;					 
	U16 stage;					 
};

struct animobj {
	S16 mbidx;					 
	S16 dlidx;					 
	MATRIX mat;					 
	F32 initpos[3];				 
	struct animobj *next;		 
	struct animobj *child;		 
	struct animobj *parent;		 
	ANIMSEQ	*seq;				 
	S16 pidx;					 
	F32 pyrq[4];				 
	F32 tpyrq[4];				 
	F32 ppos[3];				 
	F32 tpos[3];				 
	S32 objnum;					 
	struct objinfo *objinfo;
};

 
void AnimFixPos(ANIMOBJ *child, ANIMOBJ *parent, ANIMINFO *info);
int AnimateObj(ANIMOBJ *animobj, ANIMINFO *info, int update);
void FreezeAnim(ANIMINFO *info);
void UnFreezeAnim(ANIMINFO *info);
int AnimateTree(ANIMINFO *info, ANIMOBJ *root, int nextseq, int frame, F32 time, int interrupt, int update);
int AnimateTreeFrameInterp(ANIMINFO *info, ANIMOBJ *root, S16 seq, S16 frame0, S16 frame1, F32 frac, int update);
int AnimateTreeFrame(ANIMINFO *info, ANIMOBJ *root, S16 seq, S16 frame, int update);
int AnimateTreeFrameInterp2(ANIMINFO *info,ANIMOBJ *root,
							S16 seq0, S16 seq1, S16 frame0, S16 frame1, F32 frac, int update);
void InitAnimObjs(void);
void RemoveAnimObjParent(ANIMOBJ *animobj, S16 parentdlidx);
void RemoveAnimObj(ANIMOBJ *obj);
void RemoveAnimTree(ANIMOBJ *root);
void AddAnimObj(ANIMOBJ *obj, S32 parentidx, U32 dlflags);
void AddAnimTree(ANIMOBJ *obj, ANIMOBJ *parent, U32 dlflags, F32 *parpos);
void ResetAnimObj(ANIMOBJ *obj);
ANIMOBJ *NewAnimObj(char *objname, S16 objnum, ANIMHEADER *header);
void InsertAnimObj(ANIMOBJ *animobj, ANIMHEADER *header, S32 idx);
ANIMOBJ *BuildAnimTree(PARTDESC *parts, ANIMHEADER *header);
int InitAnim(ANIMINFO *info, int seq, int transframe, F32 transtime, int active);
void SetupAnimHeader(U32 addr, ANIMHEADER *new);
int GetAnimObjIdx(ANIMHEADER *header, const char *name);
char *GetAnimObjName(ANIMHEADER *header, int idx);
int GetPartIdx(PARTDESC *parts, const char *name);
ANIMOBJ *AnimTreeObj(ANIMHEADER *header, ANIMOBJ *root, const char *name);
void InitAnimInfo(ANIMHEADER *header, ANIMINFO *info, int mirror);
void SetAnimObjParent(ANIMOBJ *child, ANIMOBJ *parent);

extern F32 ATime;
extern ANIMOBJ *NewAnimobjs[24 ];







# 7 "c:/WayneWork/player.h" 2

# 1 "c:/WayneWork/animstate.h" 1



 
 
 
 
 
 

 
 




 
 
typedef struct seq {
	S16 idx;        
	U08 frame;      
	U08 time;       
} SEQ;

typedef struct animstate {
	SEQ sequence;   
	U16 special;    
	U16 intcurseq;  
}ANIMSTATE;

typedef struct animseqtrans {
	SEQ nextseq;    
	U16 special;    
	U16 interrupt;  
	U16 repeat;     
	U08 mirror;     
	U08 fixpos;     
	U16 xidx;       
	U16 xcount;     
} ANIMSEQTRANS;

typedef struct animexception {
	U32 state;      
	SEQ sequence;   
	U16 special;    
	U16 intcurseq;  
} ANIMEXCEPTION;

typedef struct desc32 {
	char desc[32];
} DESC32;

typedef struct stateheader {
	S32	nstates;
	S32	nseqs;
	S32	nfuncs;
	S32 firstfunc;
	S32	statedescs;		 
	S32	seqdescs;		 
	S32	funcdescs;		 
	S32 astates;		 
	S32 aseqtrans;		 
	S32 aexceptions;	 
} STATEHEADER;

typedef struct stateinfo {
	S32	nstates;
	S32	nseqs;
	DESC32 *statedescs;
	DESC32 *seqdescs;
	ANIMSTATE *astates;
	ANIMSEQTRANS *aseqtrans;
	ANIMEXCEPTION *aexceptions;
	S32 *astatelookup;		 
	S32 *astatelookupm;		 
} STATEINFO;

# 1 "c:/WayneWork/player.h" 1
# 209 "c:/WayneWork/player.h"

# 78 "c:/WayneWork/animstate.h" 2

# 1 "c:/WayneWork/Player1states.h" 1





typedef struct statetable {
	S32 state;
	char desc[28];
	char mirror[28];
} STATETABLE;

extern const STATETABLE Player1StateTable[];
extern const STATETABLE GoalieStateTable[];

enum {
	PATREST = 0,
	ATREST,
	WATREST,
	PGLIDE,
	GLIDE,
	PSTOPRIGHT,
	PSTOPLEFT,
	STOPLEFT,
	STOPRIGHT,
	BSTOP,
	PSTOPSLOW,
	STOPSLOW,
	WSTOPSLOW,
	PPIVOTLEFT,
	PPIVOTRIGHT,
	PIVOTLEFT,
	PIVOTRIGHT,
	WPIVOTLEFT,
	WPIVOTRIGHT,
	PTURNRIGHT,
	PTURNLEFT,
	TURNLEFT,
	TURNRIGHT,
	BTURNLEFT,
	BTURNRIGHT,
	TRANSRBTF,
	TRANSRFTB,
	TRANSLBTF,
	TRANSLFTB,
	PACCEL,
	ACCEL,
	BACCEL,
	WACCEL,
	WPACCELL,
	WPACCELR,
	HOOKGETUP,
	GETUPBACK,
	GETUPFRONT,
	GETUPBACKL,
	GETUPBACKR,
	CHKDFHRD,
	CHKDKHRD,
	CHKDLHRD,
	CHKDRHRD,
	CHKDFPWR,
	CHKDKPWR,
	CHKDLPWR,
	CHKDRPWR,
	CROSSCHECK,
	TRIPF,
	TRIPPED,
	SLAPSHOT,
	WRISTSHOT,
	FLIPSHOT,
	SNAPSHOT,
	QWRISTSHOT,
	KPUCKL,
	KPUCKR,
	PLYRCOLF,
	PLYRCOLK,
	PLYRCOLL,
	PLYRCOLR,
	REACHF,
	REACHR,
	REACHL,
	SIDESLAPR,
	SIDESNAPR,
	SIDESLAPL,
	SIDESNAPL,
	SIDEWRISTR,
	SIDEWRISTL,
	SCORE1,
	SCORE2,
	SCORE3,
	SCORE4,
	RELEASESHOT,
	ABORTSHOT,
	PASSFORWARD,
	PASSLEFT,
	PASSRIGHT,
	PASSBACKL,
	PASSBACKR,
	FATRESTL,
	FATRESTR,
	FPASSLEFT,
	FPASSRIGHT,
	REFATREST,
	REFREADY,
	RSTOP,
	RACCEL,
	REFDROP,
	REFGLIDE,
	FIGHTREADY,
	FIGHTTHROW,
	JABR,
	JABRREACT,
	JABL,
	JABLREACT,
	PUNCHR,
	PUNCHRREACT,
	PUNCHL,
	PUNCHLREACT,
	UPCUT,
	UPCUTREACT,
	GRAB,
	GRABPUNCH,
	GRABPUNCHREACT,
	COMB1,
	COMB1REACT,
	COMB2,
	COMB2REACT,
	DAZE,
	KNOCKOUT,
	KNOCKOUTHIT,
	TAUNT,
	TAUNT2,
	TAUNT3,
	VICTORY,
	CHALLENGE,
	MOPE1,
	MOPE2,
	MOPE3,
	HOOK,
	HOOKED,
	DIVEL,
	DIVER,
	KNEESAVE,
	KNEEGETUP,
	HITWALLF,
	HITWALLL,
	HITWALLR,
	HITWALLK,
	CHKDFSFT,		
	CHKDKSFT,		
	CHKDLSFT,		
	CHKDRSFT,		
 
 
 
 
 
 
 
 
 
 
	LAST_STATE
};

enum {
	GATREST = 0,
	TOPLEFT1,
	MIDLEFT1,
	BOTTOMLEFT1,
	BOTTOMLEFT2,
	BOTTOMLEFT3,
	TOP1,
	MID1,
	FIVEHOLE1,
	FIVEHOLE2,
	TOPRIGHT1,
	MIDRIGHT1,
	BOTTOMRIGHT1,
	BOTTOMRIGHT2,
	BOTTOMRIGHT3,
	GPASS1,
	GPOKEFORWARD,
	GPOKEFORWARD2,
	GSOB,
	GSOB2,
	GSOB3,
	GACCEL,
	GBACCEL,
	GSHUFFLEL,
	GSHUFFLER,
	GCHECKF,
	GCHECKL,
	GCHECKR,
	GSOFTCHECKL,
	GSOFTCHECKR,
	GSOFTCHECKF,
	GTAUNT,
	GSPLITS,
	GHITWALL,
	GCOVER,
	GFLOP,
	GSIT,
	LAST_GSTATE
};


# 79 "c:/WayneWork/animstate.h" 2


 

extern S32 Player1StateLookup[LAST_STATE];
extern STATEINFO Player1StateInfo;
extern DESC32 *Player1StateDescs;
extern DESC32 *Player1SeqDescs;

extern S32 GoalieStateLookup[LAST_STATE];
extern STATEINFO GoalieStateInfo;

 
char *AnimStateDesc(STATEINFO *stateinfo, S16 state, S16 mirror);
ANIMEXCEPTION *CheckAnimExceptions(ANIMEXCEPTION *exception, S16 base, S16 count, S16 dstate);
void InitAnimation(void);
int ProcessAnim(PLAYER *pp);
S32 AnimBeginShot(PLAYER *pp);
S32 AnimTriggerShot(PLAYER *pp);
S32 AnimTriggerPass(PLAYER *pp);
S32 AnimBackswing(PLAYER *pp);
S32 AnimDoStop(PLAYER *pp);
S32 AnimDoStopSlow(PLAYER *pp);
S32 AnimGoaliePass(PLAYER *pp);
S32 AnimForwards(PLAYER *pp);
S32 AnimBackwards(PLAYER *pp);
S32 FindFunc(STATEHEADER *header, char *s);
void AddAnimFunc(STATEHEADER *header, char *s, S32 (*func)(PLAYER *));
void InitAnimSeqTrans(void);
S16 AnimSeqIdx(char *s);
void BuildPlayer1StateTable(STATEHEADER *header);
void BuildGoalieStateTable(STATEHEADER *header);


# 8 "c:/WayneWork/player.h" 2

# 1 "c:/WayneWork/camera.h" 1









enum							 
{
	CAM_LOWSIDE,
	CAM_MEDIUMSIDE,
	CAM_HIGHSIDE,
	CAM_RIGHTGOAL1,
	CAM_RIGHTGOAL2,
	CAM_LEFTGOAL1,	
	CAM_LEFTGOAL2,
	MAX_CAMERAS					 
};

 

typedef struct {			 
	MATRIX mat;					 
	F32	mtx[4][4];				 
	F32 focus[3];				 
	S32 mode;					 
	S32	dir;					 
	F32 v[3];					 
	F32 sqmagv;					 
	F32 yaw;					 
	F32 pitch;					 
}CAMERA;

 



 
void CAMERA_Update(void);
void CAMERA_Init(const F32 campos[3], const F32 focus[3], void (*camfunc)());
void CAMERA_State(S32 state, void (*camfunc)());
void CAMERA_Hockey(int init);
void CAMERA_FaceoffZoom(int init);
void CAMERA_Faceoff(int init);
void CAMERA_Fight(int init);
void CAMERA_Scored(int init);
void CAMERA_Replay(int init);
void DroneCam(int init);
void PlayerCam(int init);
void SetupCamTarget(const F32 *eye, const F32 *target, const F32 *roll, int init);
void TargetCam(int init);
void JoyCAM(int init);
void JoystickCamera(F32 speed, F32 speeda, F32 *zDist, int replay);
void PuckCAM(int init);
void ChallengeCAM(int init);
void LowHorizCAM(int init);
void MedHorizCAM(int init);
void HighHorizCAM(int init);
void HomeZCam(int init);
void AwayZCam(int init);
void ToggleCamera(void);
void	U64_UpdateCamera(void);
void	ResetCamera(F32 pos[3], F32 focus[3]);


enum {
	XCAM=0,						 
	NXCAM,						 
	LOWHORIZCAM = NXCAM,		
	ZCAM,						 
	AWAYZCAM = ZCAM,
	LEFTGOALCAM = ZCAM,
	NZCAM,						 
	HOMEZCAM = NZCAM,
	RIGHTGOALCAM = NZCAM,
	PLAYERCAM,					 
	JOYCAM,						 
	PUCKCAM,					 
	MEDHORIZCAM,				 
	HIGHHORIZCAM,				 
	GPCAM,
	TGTCAM
};

enum {
	XDIR=0,						 
	NXDIR,						 
	ZDIR,						 
	NZDIR						 
};

extern	CAMERA Camera;							 
extern	S16		cameraView;						 
extern	S16		cameraDefault;					 
extern	S16		cameraToggle;					 
extern	S16		CAMERA_smooth;					 
extern	void 	(*CAMERA_Function)(int init);	 
extern	void 	(*CAMERA_default)(int init);
extern	void 	(*CAMERA_toggle)(int init);
extern	void 	(*cameras[])(int init);			 
extern	char	*cameraMsgs[1 ][7];	 


# 9 "c:/WayneWork/player.h" 2

# 1 "c:/WayneWork/physics.h" 1



typedef struct physics PHYSICS;




struct physics {	 
	F32 time;					 
	F32 dt;						 
	F32 V[3];					 
	F32 RWV[3];					 
	F32 F[3];					 
	F32 TF[3];					 
	F32 D[3];					 
	F32 A[3];					 
	F32 W[3];					 
	F32 GRW[3];					 
	F32 G[3];					 
	F32 mass;					 
	F32 invmass;				 
	F32 Vmag;					 
	MATRIX mat;					 

	 
	F32 vyaw;					 
	F32 pyaw;					 
	F32 jyaw;					 
	F32 dyaw;					 
	F32 yawref;					 
	S32 flags;					 
};



# 1 "c:/WayneWork/player.h" 1
# 209 "c:/WayneWork/player.h"

# 37 "c:/WayneWork/physics.h" 2

# 1 "c:/WayneWork/puck.h" 1






 

# 1 "c:/WayneWork/dobjs.h" 1









typedef struct dobj {		 
	S16 mbidx;					 
	S16 dlidx;					 
	MATRIX mat;					 
	S32 animarg;				 
	S32 lstate;					 
	F32 time;					 
	struct dobj *(*anim)(struct dobj*,S16); 
}DOBJ;


 
void InitMoveables(void);
void AddObject(DOBJ *dbp, S32 parent, U32 dlflags);
DOBJ *NewMoveableObject(const char *objname, char *errmsg, DOBJ *(*anim)(DOBJ*,S16), int animarg);
void RemoveMoveable(DOBJ *dbp);
void AnimateMoveables(void);
void HideMoveable(DOBJ *dobj);
void ShowMoveable(DOBJ *dobj);
void PrintMoveables(S16 x, S16 sy);

extern DOBJ *RootObj;


# 9 "c:/WayneWork/puck.h" 2






typedef struct af_physics {	 
	F32 time;					 
	F32 dt;						 
	F32 V[3];					 
	F32 RWV[3];					 
	F32 F[3];					 
	F32 TF[3];					 
	F32 D[3];					 
	F32 A[3];					 
	F32 W[3];					 
	F32 GRW[3];					 
	F32 G[3];					 
	F32 mass;					 
	F32 invmass;				 
	F32 Vmag;					 
	MATRIX mat;					 

	 
	F32 vyaw;					 
	F32 pyaw;					 
	F32 jyaw;					 
	F32 dyaw;					 
	F32 yawref;					 
	S32 flags;					 
} PUCK_PHYSICS;


typedef struct {			 
	S32 surf;					 
	MATRIX mat;					 
} PUCK_COLLIDE;

# 58 "c:/WayneWork/puck.h"











typedef struct puck {			 
	ANIMOBJ *puk;				 
	void *owner;				 
	void *hitter;				 
	void *hitplayer;			 
	void *lastowner;			 
	void *passreceiver;		 
	PUCK_PHYSICS physics;			 
	PUCK_COLLIDE collide;			 
	F32 lpos[3];				 
	S16 towner;					 
	S16 powner;					 
	S32 flags;					 
	F32 tlhit;					 
	F32 ctime;					 
	F32 tlposess;				 
	F32 radius;					 
	F32 drad;					 
	F32 vpitch;					 
} PUCK;

# 112 "c:/WayneWork/puck.h"









typedef struct shotacc {
	F32 base;
	F32 anglemod;
	F32 timemod;
	F32 power;
} SHOTACC;














extern PUCK Puck;					 
extern DOBJ *PuckShadow;
extern DOBJ *PuckArrow;
extern DOBJ *FlamingGoalObj;		 

extern	F32	puckpos[3];			 


 




 
enum
	{
	PUCKSTATE_LOOSE,
	PUCKSTATE_PASS,
	PUCKSTATE_SHOT,
	PUCKSTATE_OWNED
	};

 
void	PuckColorCycle(void);
void ShrinkPuck(F32 ppos[3], F32 biguvs[][3], F32 shrinkuvs[][3]);
void HitPuck(PLAYER *pp, F32 dir[3], F32 amt);
void NewPuckOwner(PLAYER *pp);
F32 OptimalShotTime(S32 shot);
F32 ApproximateShotBase(PLAYER *pp);
void PrintShotBase(PLAYER *pp);
int GetShotTarget(PLAYER *pp, F32 target[3], S16 shot, F32 *maxpower);   
int ShootThePuck(S16 shot);   
void PassThePuck(PLAYER *who);
void PuckInGoal(PUCK *puk);
DOBJ *FlamingGoal(DOBJ *dobj, S16 init);
void	SetFlamingGoal(int status);
void AnimatePuck(void);
int JoyPuck(void);
void KeepPuckOutOfGoal(void);
void ResetPuck(int init);
void InitPuck(void);
void InitPuckShadow(void);
ANIMOBJ *MakePuck(void);
void AttatchPuck(PLAYER *pp);
void DetatchPuck(PLAYER *pp, S16 removeparent);
void ShotOnGoal(int team,int score,int gteam, PLAYER *gp);
void POdebug(int on);
int PuckOwnershipRules(PLAYER *pp);
int PuckCollisionRules(PLAYER *pp);
void	StreakUpdate(void);
void	PuckFlameUpdate(void);




int	puckState(void);
void ShotOnGoal(int hitteam,int score,int gteam,PLAYER *goaliePlayer);

# 38 "c:/WayneWork/physics.h" 2

# 1 "c:/WayneWork/collide.h" 1



typedef struct bodycol BODYCOL;
































typedef struct colpart {
	U32 parts;		 
	U32 distpart;	 
	F32 dist;		 
	F32 vec[3];		 
} COLPART;

 

struct bodycol {
	U32 type;		 
	COLPART body,rarm,larm,stick,legs;
};

# 1 "c:/WayneWork/player.h" 1
# 209 "c:/WayneWork/player.h"

# 51 "c:/WayneWork/collide.h" 2

 
void SetupPuckBalloon(void);
void SetupCollisions(void);
void InitBodyCol(BODYCOL *bodycol);
void AddCBodyPart(COLPART *source, COLPART *dest);
F32 PointPointDist(F32 *pt1, F32 *pt2);
F32 PointPointDistXZ(F32 *pt1, F32 *pt2);
ANIMOBJ *GetColObj(ANIMOBJ *animobj, U32 puckcol);
int PuckCollide(PLAYER *pp);
void DoBodyCollisions(void);
F32 PointLineCollision(const F32 *cp, const F32 *pt1, const F32 *pt2, F32 *res);
F32 PointLineCollision2D(const F32 *cp, const F32 *pt1, const F32 *pt2, F32 *res);
void PrintCollisions(PLAYER *pp);
int PathIntersection(const F32 p1a[3], const F32 p1b[3], const F32 p2a[3], const F32 p2b[3], F32 ip[3]);
F32 LineLineCollision2D(const F32 p1a[3], const F32 p1b[3], const F32 p2a[3], const F32 p2b[3], F32 res[3]);


# 39 "c:/WayneWork/physics.h" 2

# 1 "c:/WayneWork/rink.h" 1




# 1 "c:/WayneWork/macros.h" 1







 





 





 



 







# 5 "c:/WayneWork/rink.h" 2


# 1 "c:/WayneWork/terrain.h" 1





typedef struct {		 
	F32 x,z;				 
}TVERTEX;

typedef struct {		 
	U8  surf;				 
	U8  flags;				 
	S16 nv;					 
	F32 v1[3];				 
	F32 uvs[3][3];			 
	const TVERTEX *vptr;	 
}TPOLYGON;

typedef struct {		 
	F32 sqrad;				 
	F32 min[3];				 
	F32 max[3];				 
	S16 npolys;				 
	const TPOLYGON *pdata;	 
}TOBJECT;

 



 






# 7 "c:/WayneWork/rink.h" 2




typedef struct {			 
	S32 surf;					 
	MATRIX mat;					 
} COLLIDE;


# 1 "c:/WayneWork/puck.h" 1
# 194 "c:/WayneWork/puck.h"


int	puckState(void);
void ShotOnGoal(int hitteam,int score,int gteam,PLAYER *goaliePlayer);

# 17 "c:/WayneWork/rink.h" 2



typedef struct {			 
	MATRIX initmat;				 
	MATRIX mat;					 
	TOBJECT *tobj;				 
	DOBJ *bottleobj;			 
	PUCK *bottle;				 
	DOBJ *dobj;					 
} GOAL;




extern	GOAL GoalA;
extern	GOAL GoalB;
extern	PUCK BottleA;
extern	PUCK BottleB;
extern 	F32 GoalAPos[3];
extern 	F32 GoalBPos[3];
extern 	F32 CornerOrigin[4][3];
extern 	GOAL * Goals[2];


 
 
 













extern	F32		rink_l;			 
extern	F32		rink_w;
extern	F32		rink_hl;		 
extern	F32		rink_hw;		 
extern	F32		rink_blueline;	 
extern	F32		rink_redline;	 
extern	F32		rink_odzone;	 
extern	F32		corner_radius;	 
extern	F32		corner_radius2;	 






























 
void SetRinkSizes(void);
int	OutsideRink(F32 pos[3], F32 *d);
int CloseToNet(F32 pos[3],F32 dist);
int InsideNet(F32 pA[3],F32 pB[3], F32 mindist);
void CreateWallUVS(F32 N[3], F32 uvs[3][3]);
void WallCollision(F32 spos[3], F32 epos[3], F32 wpos[3], F32 cp[3], F32 uvs[3][3]);
void CornerCollision(const F32 spos[3], const F32 epos[3], const F32 corner[3], F32 cp[3]);
void RinkCollision(int colcode, F32 spos[3], F32 epos[3], COLLIDE *col);
void InitGoals(void);




# 40 "c:/WayneWork/physics.h" 2



 
void InitPhysics(PHYSICS *phys, F32 lbs, int firsttime);
F32 ClosingVelocity(const F32 pA[3], const F32 vA[3], const F32 pB[3], const F32 vB[3], F32 u[3], F32 *dist);
F32 Intercept(PLAYER *pp, F32 pos[3], F32 rwv[3], F32 *d, F32 *v);
void ProjectPosition(PHYSICS *phys, F32 xtime, F32 pos[3]);
void PrintMotion(S16 x, S16 y, S16 motion, char *hdr);
void BufferMotion(S16 motion);
void PrintMotionBuffer(void);
void CoughUpPuck(PLAYER *pp, F32 rwv[3]);
int KickPuck(PLAYER *pp, F32 ppos[3], int kicktest);
void StopWhatImDoing(PLAYER *pp);
void DoCheck(PLAYER *p1, PLAYER *p2, int anim, F32 dyaw, int cough, int power, F32 cvel);
void CheckPlayer(PLAYER *p1, PLAYER *p2, F32 u[3], F32 cvel, int flags);
void ShovePlayer(PLAYER *pp, F32 rwv[3]);
void SetupPlayerPhysics(PLAYER *pp, int init, F32 yaw, const F32 pos[3]);
F32 GetForce(PLAYER *pp, F32 fmult);
void SpeedBurst(PLAYER *pp);
void PlayerPhysics(PLAYER *pp);
void FloorCollision(PUCK *puk);
void DeflectPuck(F32 deflect, F32 frict);
void PuckCollisions(PUCK *puk, F32 lpos[3]);
void NewPuckRotation(PUCK *puk, F32 v);
void PuckPhysics(PUCK *puk);
void SetupPuckPhysics(PUCK *puk, int init);
int CheckPhysics(PHYSICS *phys);



# 10 "c:/WayneWork/player.h" 2

# 1 "c:/WayneWork/sector.h" 1





typedef struct {			 
	S32 shotbits;				 
	S32 tgtidx;					 
	F32 slapacc;				 
	F32 snapflipacc;			 
	F32 wristacc;				 
	F32 sideacc;				 
}SECTOR;

 



























extern SECTOR SectorTable[24 ][14 ];


 
SECTOR *FindSector(F32 pos[3], S16 reverse);
void SectorTarget(SECTOR *secptr, F32 target[3], int reverse, int ongoal);
int GetSectorX(SECTOR *secptr);
int GetSectorZ(SECTOR *secptr);



# 11 "c:/WayneWork/player.h" 2

# 1 "c:/WayneWork/controls.h" 1
# 217 "c:/WayneWork/controls.h"

# 12 "c:/WayneWork/player.h" 2



# 1 "c:/WayneWork/drones.h" 1




# 1 "c:/WayneWork/kid.h" 1










typedef struct {			 
	S16 leftidx;				 
	S16 rightidx;				 
	S16 upidx;					 
	S16 downidx;				 
	S16 conaidx;				 
	S16 condidx;				 
	S16 confidx;				 
	S16 startidx;				 
	S16 conbidx;
	S16 concidx;
	S16 coneidx;
	S16 conlidx;
	S16 conridx;
	S16 congidx;
}KIDCONTROL;

typedef union
{
	KIDCONTROL kctl;
	S16 kctlarray[(sizeof(KIDCONTROL) / sizeof(S16))];
}KCTL;

 
enum
{
	SPJOYL=0,
	SPJOYR,
	SPJOYU,
	SPJOYD,
	SPCONA,
	SPCOND,
	SPCONF,
	SPSTART,
	SPCONB,
	SPCONC,
	SPCONE,
	SPCONL,
	SPCONR,
	SPCONG,
	SPMAXENTRIES
};

typedef struct			 
{
	S16 sog;					 
	S16 goals;					 
	S16 assists;				 

	S16 saved;				 



}GAMESTATS;

typedef struct
{
	S8 state;				 
	S8 position;			 
	S8 prefpos;				 
	S8 tidx;				 
	S8 unused;	
	S8 line;
	S8 gamechecks;
	S8 lastplayer;			 
	S8 pfsPak;				 
	U8 name[4];				 
	F32 saved_anger;
	const KIDCONTROL *kctl;
	PFSPLAYER *pfsplayer;	 
	CSTATS  cstats;			 
	GAMESTATS gstats;
	GAMESTATS pstats;

	void *SelectedPlayer;	 

} KIDINFO;

typedef struct
{
	const char *osarrowr;	 
	const char *osarrowl;	 
	const char *osarrowu;	 
	const char *osarrowd;	 
	const char *idcircle;	 
	const char *idcir;		 
	const char *idcirb;		 
	const char *idstr;		 
	const char *idstrb;		 
	const char *burston;	 
	const char *overtag;	 
} KIDOBJECTDATA;

typedef struct
{
	const KIDOBJECTDATA *kdata;	 
	DOBJ *idcircle;				 
	BLIT *arrow;				 
	BLIT *burstblit;			 
	BLIT *overtagblit;			 
	BLIT *nameblit;				 
	BLIT *angerblit;			 
	PALDEF *cir;				 
	PALDEF *cirb;				 
	PALDEF *str;				 
	PALDEF *strb;				 
	U16		arrowTexidx;		 
	U16		unused;
	TEXDEF *arrowr;				 
	TEXDEF *arrowl;				 
	TEXDEF *arrowu;				 
	TEXDEF *arrowd;				 
	TEXDEF *burston;			 
	TEXDEF *overtag;			 
} KIDOBJECTS;


extern const KIDCONTROL KIDcontrols[4 ];
extern COLOR KidColors[4 ];
extern U16	KidIntColors[4 ];

extern	KIDINFO Kids[4 ];
extern	KIDOBJECTS KIDobjects[4 ];


# 1 "c:/WayneWork/player.h" 1
# 209 "c:/WayneWork/player.h"

# 136 "c:/WayneWork/kid.h" 2

# 1 "c:/WayneWork/controls.h" 1
# 217 "c:/WayneWork/controls.h"

# 137 "c:/WayneWork/kid.h" 2



extern const SPMOVE * const OffensiveMoves[];
extern const int Noffmoves;
extern const SPMOVE * const DefensiveMoves[];
extern const int Ndefmoves;
extern const SPMOVE * const PuckCarrierMoves[];
extern const int Npcmoves;
extern const SPMOVE * const FightMoves[];
extern const int Nfightmoves;
extern const SPMOVE * const FaceoffMoves[];
extern const int Nfomoves;

extern	TEXDEF	*idcircleTex;
extern	TEXDEF	*idstarTex;
extern	PALDEF	*idcirDronePal0;
extern	PALDEF	*idcirDronePal1;


 
void InitControllerConfig(void);
void settoDefaultConfig(int kid);
void InitKids(void);
void InitKidStats(KIDINFO *kidp);
void ReinitKidPStats(KIDINFO *kidp);
void ReinitKidGStats(KIDINFO *kidp);
void ReinitKids(int overtime,short changeTeamsToDefault);
void ReInitKidObjects(PLAYER *pp);
void InitKidObjects(PLAYER *pp);
void ProcessKids(void);
void ResetKidsControl(const KIDCONTROL *kctl);
S32 DirtyMove(const KIDCONTROL *kctl, const SPMOVE * const dirtymoves[], int nmoves, F32 *dmtime, int knum);


# 5 "c:/WayneWork/drones.h" 2


# 1 "c:/WayneWork/polar.h" 1






# 1 "c:/WayneWork/llist.h" 1





 
 
 

typedef struct _LLNODE
{
	void *next;
} LLNODE;

typedef struct _LLIST
{
	LLNODE *head,*tail;
	U32 page_size;
	U32 max_pages;
} LLIST;

void llist_init(LLIST *buf,U32 len,U32 psize,U8 align);
void *llist_new(LLIST *ll);
void llist_prepend(LLIST *ll,void *n);
void llist_append(LLIST *ll,void *n);



# 7 "c:/WayneWork/polar.h" 2



 
typedef struct
{
	F32 d,a;
} POLAR;

 
typedef struct _ARC
{
	struct _ARC *next;
	F32 l,h;   
} ARC;







void arcset_add(LLIST *ll,ARC *a);
F32 best_angle(LLIST *ll,F32 a);
void vector_to_polar(F32 x,F32 z,POLAR *p);



# 7 "c:/WayneWork/drones.h" 2



typedef struct {
	PLAYER *jpp;			 
	F32 ptoj[3];			 
	F32 d;					 
	F32 jdtest;				 
	F32 juketime;			 
	S16 jukestate;			 
	S16 dummy;
}JUKE;

enum {
	JUKELEFT,				 
	JUKERIGHT				 
};

typedef struct {
	F32 pos[3];				 
	S32 decision;			 
}PLAYKEY;

typedef struct {
	const PLAYKEY *keys;
	S32 nkeys;
}PLAY;

typedef struct drone {		 
	F32 tnd;				 
	S16 mode;   
	S16 decision;			 
	S16 state;				 
	S16 newdecision;		 
	F32 target[3];			 
	F32 atarget[3];			 
	F32 targetv[3];			 
	F32 targetrad;   
	F32 relax;   
	S16 withintgtrad;		 
	S16 offmanidx;			 
	DOBJ *idcircle;			 
	JUKE juke;				 
	const PLAY *play;		 
	S32 playkey;			 
	F32 tofcheck;			 
	F32 tofsteal;			 
	 
	POLAR plyrpolar[2][5 ];
	POLAR goalpolar;
	PLAYER *check;   
	S8 zone[4];   
}DRONE;

enum {						 
	ONETIMER = 1,
	FS0,
	FS1,
	FS2,
	FS3
};

enum {						 
	REST,
	FREESKATE,
	PURSUIT,
	GOFORPUCK,
	SETUPFORSHOT,
	GETOPEN,
	SKATEPLAY,
	DEFEND,
	WATCHFIGHT,
	SKATE,
	IDLE
};


 
typedef struct {
	void (*bfunc)(PLAYER *pp);
	char const *desc;
}BEHAVEFUNC;

 
enum {
	BEHINDNET,
	GETPUCK,
	GUARDNET,
	OFORWARD,
	POINTMAN,
	STAYOPEN,
	OFFBEHAVIORS
};

 
enum {
	DEFNULL,
	CHECK,
	DEFENDGOAL,
	DEFENDZONE,
	PENALTYKILL,
	KILLZONE,
	DEFBEHAVIORS
};


# 1 "c:/WayneWork/player.h" 1
# 209 "c:/WayneWork/player.h"

# 113 "c:/WayneWork/drones.h" 2

 
void DroneTeamwork(void);
void Drone(PLAYER *pp);
PLAYER *NewDrone(S16 team, PLAYER *pp, int hires);
void ResetDrones(S16 team);
void PassToDrone(PLAYER *pp);
void CallForPass(PLAYER *to, PLAYER *from);
void CallForShot(PLAYER *caller, PLAYER *shooter);
void LookForDirtyMove(PLAYER *pp, PLAYER *cp);
int LineOfSite(PLAYER *p1, PLAYER *p2, F32 p1POS[3], F32 p2POS[3], F32 time, F32 howopen, F32 *opendist);
PLAYER *FindOpenMan(PLAYER *me, F32 time, F32 zbehind, F32 zforward, F32 howopen);
void ShowOpenMan(PLAYER *me);
int CloseOpponent(PLAYER *pp, int usestick, F32 back, F32 fwd, F32 side);
PLAYER *ChasePuck(S16 team, PLAYER *exclude);
void SkateToTarget(PLAYER *pp,F32 target[3],F32 radius,const F32 *focus,F32 relaxtime,int ap);
void AvoidPlayers(PLAYER *pp);
void AvoidPlayer(PLAYER *pp, PLAYER *ap);
void AvoidWalls(PLAYER *pp);
F32 GetPuckPosition(PLAYER *pp, F32 puckpos[3]);
void LookAhead(int team,F32 latime,int tref);
void DroneCAM(void);
void GetPolarData(PLAYER *d);
void ReenterDrone(PLAYER *pp);


extern F32 LookAheadPos[2 ][5 ][3];





# 15 "c:/WayneWork/player.h" 2



# 1 "c:/WayneWork/balloon.h" 1



typedef struct
{
	F32		BasePos[3];	 
	F32		UnitVec[3];	 
	F32		CurrPos[3];
	F32		CurrVec[3];
	F32		Length;		 
	F32		Radius;		 
} Balloon;

typedef struct
{
	char	Name[16];
	F32		Radius;
	S32 	Surface;
	F32		ShadowRadius;
	F32		Extend[2];
	F32 	LineSeg[2][3];
} BalloonInfo;


extern F32 BCDVec[3];
extern const BalloonInfo PuckBalloons;


F32 BalloonCollide(Balloon *b1, Balloon *b2);
void BalloonInit(Balloon *b, const F32 startp[3], const F32 endp[3], F32 radius);
void BalloonMove(Balloon *b, F32 m[4][3]);



# 18 "c:/WayneWork/player.h" 2

# 1 "c:/WayneWork/cbody.h" 1







typedef struct bodycollision
{
	Balloon		Balloon;
	int			HasBalloon;
	int			Surface;
	DOBJ		*obj0,*obj1;
} BALLOONCOL;

# 1 "c:/WayneWork/player.h" 1
# 209 "c:/WayneWork/player.h"

# 16 "c:/WayneWork/cbody.h" 2

 
void InitCollision(ANIMOBJ *obj, const BalloonInfo *bi);
void InitBodyCollisions(PLAYER *pp, int debug);
void PrintBodyCollisions(PLAYER *pp, int x, int y);
void InitBColObjs(ANIMOBJ *treeobj);
void UpdateBColTree(ANIMOBJ *treeobj, int vis);
U32 CheckPlayerCollision(PLAYER *p1, ANIMOBJ *colobj);
void MoveBalloonTree(MATRIX *mat, ANIMOBJ *obj);
void MakeDeltaBalloon(BALLOONCOL *bcol, F32 *dpos);

extern F32 TreeColVec[3];
extern F32 TreeColDist;
extern U32 TreeDistPart;


# 19 "c:/WayneWork/player.h" 2


# 1 "c:/WayneWork/player_stats.h" 1
















typedef struct
{
	char name[12 ];
	F32  save_perc; 	 
	F32  shot_perc_GAA;	 
	S8   shoots_1; 		 
	S8   shoots_2; 		 
	S8   number;
	S8   right_shot_hand;
	char initial;
	S8   blond;
	S8   speed; 		 
	S8   passing; 		 
	S8   shot_skill; 	 
	S8   defense; 		 
	S8   fight; 		 
	S8   goals;
	S8   assists;
	S8   plus_minus;	 
	S8   dummy;
	char team_prefix[5 ];  
} PLAYER__STATS;

typedef PLAYER__STATS PLAYER_STATS;




 
 
typedef struct
{
	char team_prefix[5 ];  
} PLAYER_CURRENT_TEAMS;


 
 
 
 
typedef struct
{
	U8 ShotOnGoal;		 
	U8 GameGoals;		 
	U8 GameAssists;		 
	U8 HatTricks;		 
	U8 PlayerOfGame;	 
	U8 PlusMinus;		 
	U8 GoalieOnIceGoals; 
	U16 GoalieSaves;	 
} PLAYER_EXTRA_STATS;


 
 
typedef struct
{
	U8 GoalsAgainstTeam;		 
	U8 Goals;
	char GoalInitials[3];		 

	U8 AssistsAgainstTeam;		 
	U8 Assists;
	char AssistInitials[3];		 

	U8 HatTricksAgainstTeam;	 
	U8 HatTricks;
	char HatTricksInitials[3];	 
} PlayerRecords;







 
 
typedef struct
{
	char name[32 ];
	char prefix[5 ];
	U8  dummy[3];
	U8  rgb[2 ][3];  
	U8  div;
	U8  rank_in_div;  
	union
	{
		S16 plyr[(2 + 5  * 3 ) ];  
		struct
		{
			S16 goalie;
			S16 goalie2;
			S16 player[3 ][5 ];
		}line;
	}idx;
} TEAM_STATS;

# 141 "c:/WayneWork/player_stats.h"




# 21 "c:/WayneWork/player.h" 2






typedef struct
{
	const char * const *parts;
	PARTDESC *partdesc;
} PLAYERINFO;

typedef struct
{
	F32 pos[3];
	F32 yaw;
}PLYRFACEOFF;

typedef struct			 
{
	S16 pmotion;				 
	S16 dmotion;				 
	S16 motion;					 
	S16 lmotion;				 
	S16 sequence;				 
	S16 curshot;				 
	S08 passthrough;			 	
	S08 backwards;				 
	S08 bszone;					 
	S08 transition;				 
	F32 transtime;				 
	struct
	{
		S32 powerburst;				 
		S32 powerflags;				 
		F32	powertime;				 
		F32 nextpowertime;			 
		S32 bursting;				 
		F32 addburstspeed;			 
	}power;
	F32 shotangle;				 
	S32 faceoffonetimer;		 
	S32 onetimer;				 
	F32 tofonetimer;			 
	POLYINST *streakid;			 
	F32 streaktime;				 
}STATE;







enum PlayerInjuryStates
{
	INJURY_NONE,
	INJURY_REST_OF_GAME,
	INJURY_REST_OF_PERIOD,
	INJURY_REPLACE,
};



struct player				 
{
	MATRIX	mat;				 
	ANIMOBJ *obj;				 
	ANIMOBJ *mid;				 
	ANIMOBJ *head;				 
	ANIMOBJ *spray;				 
	ANIMOBJ *blade;				 
	ANIMOBJ *handlobj;			 
	ANIMOBJ *handrobj;			 
	ANIMOBJ *stickobj;			 
	ANIMOBJ **puckptr;			 
	ANIMINFO *animinfo;			 
	PALDEF	*pal;				 
	S32	logodlidx;				 
	S32	facedlidx;				 
	S32	jerseydlidx1;			 
	S32	jerseydlidx2;			 

	short BlackPlayer;			 
	short GameFaceNumIdx;		 
	enum PlayerInjuryStates InjuryLevel;	 

	STATEINFO *stateinfo;		 
	BalloonInfo *balloons;		 
	PHYSICS physics;			 
	SECTOR *sector;				 
	STATE state;				 
	CONTROL controls;			 
	DRONE dronedata;			 
	GAMESTATS gstats;			 
	GAMESTATS pstats;			 
	PLAYER_STATS *stats;		 
	F32 tlposess;				 
	F32 speedup;				 
	F32 radius;					 
	S16 puckidx;				 
	S8 tidx;					 
	S8 pidx;					 
	 
	S8 otidx;					 
	S8 kidx;					 
	S8 stat_pos;				 
	S8 stat_line;				 
	S8 orig_stat_line;			 
	S8 caller;					 
	S16 stat_idx;				 
	F32 anger;					 
	struct
	{
		U8 ptype;				 
		U8 offpitch;			 
		U8 doshot;				 
		U8 haspuck;				 
		U8 animpuck;			 
		U8 setpos;				 
		U8 collide;				 
		U8 fighter;				 
		U8 didonetimer;			 
		U8 didcolsetup;			 
		U8 breakaway;			 
		U8 notvisible;			 
		U8 mirror;				 
		U8 AI;   
	} flags;
	const KIDCONTROL *kidctl;	 
	KIDOBJECTS *kidobjs;		 
	BODYCOL bodycol[2 ][5 +1];	 
	S32 tunelevel;
	 
	S16 position;   
	PLYRFACEOFF faceoff;   
};




 








typedef struct objinfo
{
	BALLOONCOL bcol;
} OBJINFO;


enum {				 
	OFFTYPE,
	KIDTYPE,
	DRONETYPE,
	GOALIETYPE,
	REFTYPE,
	BENCHTYPE
};




extern const PLAYERINFO PlayerParts[];


 
void ResetPlayerAnim(PLAYER *pp);
ANIMOBJ *MakePlayer(PLAYER *pp, int flags);
ANIMOBJ *MakeGoalie(PLAYER *pp, int tidx);
ANIMOBJ *MakeRef(PLAYER *pp);
void InitPlayerStreak(void);
void ClearPlayerStreak(PLAYER *);
void ClearPlayerStreaks(void);
void PlayerStreak(PLAYER *pp);
void PlayerStreakUpdate(PLAYER *pp);

void CheckPlayerColour(PLAYER *pp);
void InitGameFaceNumIdx();
void FindGameFaceNumIdx(PLAYER *pp);




# 196 "c:/WayneWork/controls.h" 2




void OS_ctl_upd_clear(void);
void OS_ctl_upd_sw(void);
void ClearControls(U32 skipmask);
void InitControls(void);
void ResetControl(S16 swidx);
void UpdateControls(void);
void ControlIRQ(void);
S16 ControlLevel(S16 swid);
S16 ControlTimedLevel(S16 swid, F32 starttime, F32 endtime);
S16 ControlFrameLevel(S16 swid);
S16 ControlTimedEdge(S16 swid, F32 starttime, F32 endtime, S16 edge, S16 htot, F32 *edgetime);
S16 ControlEdge(S16 swid, S16 edge);
S16 ControlAutoRepeat(S16 swid, F32 initial, F32 repeat);
void InitPlayerControls(void);
void PlayerControls(PLAYER *pp, S16 init);
S16 SpecialMove(const SPMOVE *spmove, const KIDCONTROL *kidctl, F32 *starttime, int knum);


# 16 "c:/WayneWork/pfs.c" 2

# 1 "c:/WayneWork/font.h" 1




# 1 "c:\\n64\\include\\PR/ultratypes.h" 1
# 78 "c:\\n64\\include\\PR/ultratypes.h"


# 5 "c:/WayneWork/font.h" 2

# 1 "c:\\n64\\include\\PR/mbi.h" 1
# 98 "c:\\n64\\include\\PR/mbi.h"

# 6 "c:/WayneWork/font.h" 2

# 1 "c:/WayneWork/U64blit.h" 1




# 1 "c:\\n64\\include\\PR/ultratypes.h" 1
# 78 "c:\\n64\\include\\PR/ultratypes.h"


# 5 "c:/WayneWork/U64blit.h" 2

# 1 "c:\\n64\\include\\PR/os.h" 1

 



















 








# 979 "c:\\n64\\include\\PR/os.h"

# 6 "c:/WayneWork/U64blit.h" 2

# 1 "c:\\n64\\include\\PR/mbi.h" 1
# 98 "c:\\n64\\include\\PR/mbi.h"

# 7 "c:/WayneWork/U64blit.h" 2




 






 











 
 
 
 







 
 








 





typedef struct
{
	unsigned char	r,g,b,a;
} RGBA;


 












 




void	BlitInit(void);
Gfx	*	BlitFinish(void);
void	BlitSetAttribute(u32 attributes);
void	BlitClearAttribute(u32 attributes);
void	BlitZDist(u16 zDist);
void	BlitXLU(u16 xlu);
void	BlitScissor(s32 xmin, s32 xmax, s32 ymin, s32 ymax);
void	BlitClearColors(void);
void	BlitColors(void *address, int format, int size, int pal);
void	BlitTexture(void *address, u16 format, u16 size, u16 width, u16 height, 
 					u16 uls, u16 ult, u16 lrs, u16 lrt, u16 pal, int tile);
void	BlitDraw(s32 x0, s32 y0, s32 x1, s32 y1, int s, int t);
void	BlitRect(s32 x0, s32 y0, s32 x1, s32 y1, u8 color[]);


# 7 "c:/WayneWork/font.h" 2



 




enum
{
	SAME_PAL = 0,
	GRY_PAL,
	BLU_PAL,
	GRN_PAL,
	CYN_PAL,
	RED_PAL,
	MAG_PAL,
	YEL_PAL,
	WHT_PAL,
	YEL_RED,
	RED_YEL,
	RED_RED,
	CYN_CYN,
	CYN_GRN,
	DRK_YEL,
	DRK_GRY,
	BLK_GRY,
	CYCLE_PAL,
	FLASH_PAL,
	LAST_PAL
};





 





typedef struct 
{										 
	s16		uls,ult;					 
	s16		lrs,lrt;					 
} Letter;

typedef struct 
{
    Letter	*letters;
    char 	*img;
	s16		width,height;				 
	s8		lineSize;					 
	s8		autospace;					 
	s8		xOverstrike;				 
	s8		yOverstrike;
} Font;


 






 




void 	FontInit(void);
Gfx	*	FontFinish(void);

void 	FontSetColor( u8 num, u8 r, u8 g, u8 b, u8 a);
void 	FontSetPos( int, int );

void 	FontSetAttribute( int );
void 	FontClearAttribute( int );
void	FontZDist(u16 zDist);
void	FontXLU(u16 xlu);

int 	FontStrSize(const char *str);
int		FontCenter(const char *);
int	 	FontSelect(unsigned int);

void 	FontPrint( const char * );
void	FontPrintf(const char *fmt, ...);

void 	FontXYPrint(int col, int row, int pal, const char *str);
void 	FontXYPrintf(int col, int row, int pal, const char *str, ...);

void 	TextureFontPrint(u16 *origtex, u16 *tex, int w, int h, int c, int r, int pal, char *val_str);


# 17 "c:/WayneWork/pfs.c" 2


# 1 "c:/WayneWork/tune.h" 1




enum {
	ENGLISH_LANG,
	FRENCH_LANG,
	GERMAN_LANG,
	SPANISH_LANG
};

enum {
	DIFF_VERYEASY,
	DIFF_EASY,
	DIFF_MEDIUM,
	DIFF_HARD,
	DIFF_VERYHARD,
	DIFF_MAX,
	TUNELEVELS,
	TOTALLEVELS
};



typedef struct {
	F32 forcetable[10][6];
	F32 spmovedelay;
	F32 statscale[2];
	
	struct {
		F32 slapspeed;
		F32 snapspeed;
		F32 wristspeed;
		F32 flipspeed;
	}shotspeeds;

	struct {
		F32 regburst;
		F32 poburst;
		F32 defburst;
		F32 dregburst;
		F32 dpoburst;
		F32 ddefburst;
		
		F32 capregburst;
		F32 cappoburst;
		F32 capdefburst;
		F32 capdregburst;
		F32 capdpoburst;
		F32 capddefburst;
	}burstspeeds;
	
	struct {
		F32 minmax[2];
		F32 timing;
	}passspeeds;

	struct {
		F32 baseadd[TOTALLEVELS];
		F32 dbaseadd[TOTALLEVELS];
		F32 overtimeadd[TOTALLEVELS];
		F32 dovertimeadd[TOTALLEVELS];
		F32 hotshotadd[TOTALLEVELS];
		F32 dhotshotadd[TOTALLEVELS];
		F32 breakawayadd[TOTALLEVELS];
		F32 dbreakawayadd[TOTALLEVELS];
		F32 angmod[TOTALLEVELS];
		F32 pctgpershot[TOTALLEVELS];
		F32 dpctgpershot[TOTALLEVELS];
		F32 pctgscorediff[TOTALLEVELS];
		F32 dpctgscorediff[TOTALLEVELS];
		F32 mintimingmod[TOTALLEVELS];
		F32 maxtimingmod[TOTALLEVELS];
		F32 gaamultiplier[TOTALLEVELS];
		F32 dgaamultiplier[TOTALLEVELS];
		F32 savepadd[TOTALLEVELS];
		F32 dsavepadd[TOTALLEVELS];
		F32 sweetspot[2][TOTALLEVELS];
		F32 dsweetspot[2][TOTALLEVELS];
		F32 joycontroladd[TOTALLEVELS];
	}shoteq;

	struct {
		F32 gspeed[TOTALLEVELS];
		F32 dgspeed[TOTALLEVELS];
		F32 proximity;
		F32 closingvel;
		F32 weakspotmod[2][TOTALLEVELS];
		F32 dweakspotmod[2][TOTALLEVELS];
		F32 faceoffsavemod;
	}goalie;

	struct {
		F32 doramping;
		F32 difficultyscale;
		F32 winscale;
		F32 lossstreakscale;
		F32 winstreakscale;
		F32 rampinglevels[TUNELEVELS];
		F32 winstreakcap;
		F32 wincap;
	}ramping;

	struct {
		F32 ambient;
		F32 dambient;
		F32 type;
		F32 intensity;
		F32 distance;
	}lighting;

	struct {
		F32 scale;
		F32 maxscale;
		F32 distance;
		F32 color[8];
		F32 intensity[8];
		F32 cycles;
		F32 cycletime;
	}puck;

	struct {
		F32 gametimes[5];
		F32 celebrate;
		F32 faceoff;
	}gametiming;

	struct {
		F32 burstfreq[TOTALLEVELS];
		F32 checkfreq[TOTALLEVELS];
		F32 hotshotfreq[TOTALLEVELS];
	}power;

	F32 goalbonus[3][TOTALLEVELS];

	F32 speedscale[TOTALLEVELS];
	F32 dspeedscale[TOTALLEVELS];
	F32 turnscale[TOTALLEVELS];
	F32 dturnscale[TOTALLEVELS];
	F32 checkfreq[TOTALLEVELS];
	F32 dcheckfreq[TOTALLEVELS];
	F32 passfreq[TOTALLEVELS];
	F32 shotfreq[TOTALLEVELS];
	F32 hotshotfreq[TOTALLEVELS];
	F32 faceoff[TOTALLEVELS];
	F32 droneseperation[TOTALLEVELS];
	F32 droneposition[TOTALLEVELS];
	F32 stealfreq[TOTALLEVELS];
	F32 dstealfreq[TOTALLEVELS];
	F32 tofpressure[TOTALLEVELS];
	F32 dtofpressure[TOTALLEVELS];
	F32 droneonetimerdelta[TOTALLEVELS];
	F32 breakawaydist[TOTALLEVELS];
	F32 dbreakawaydist[TOTALLEVELS];
	F32 fightmultiplier[TOTALLEVELS];
	F32 coughspeed;
	F32 defensemod;
	F32 dronefighttiming[TOTALLEVELS];
}TUNEVARS;




extern	TUNEVARS *tunedata;


extern	S16			oldArcadeMode;			 
extern	S16 		oldnPlayers;			 
extern	S16			oldPenaltiesOn;
extern	S16			arcadeMode;				 
extern	S16			realRink;				 
extern	S16 		nPlayers;				 
extern	S16 		GameDifficulty;			 
extern S16 calcDifficulty;  		 
extern	S16 		GameInitTimeIndex;		 
extern	F32 		GameInitTime;			 
extern	F32			GameTimes[2][4];		 
extern	S16			fightingOn;				 
extern	S16			penaltiesOn;			 
extern	S16			autoSwitchPlayer;		 
extern	S8			lineSwitching[2];			 
extern	S16			playSpeed;				 
extern	S16			noPuckStreak;			 
extern	S16			playerFatigue;			 
extern	S8			changeLine[2];			 
extern	S8			changeGoalie[2];		 
extern	S8			language;				 
extern	S8			languagePicked;			 

extern	F32			headScale;				 
extern	F32			bodyScale;				 
extern	F32			yScale;					 



 
void InitEERoptions(void);
void InitTuneData(void);
void InitTeamTuneData(int team, LADDER *ladder, int diffsetting);
void RampTuneData(void);
F32 TuneSetting(PLAYER *pp, const F32 *ksettings, const F32 *dsettings);
LADDER * GetLadder(int tidx);
void SetGameTuneData(void);


# 19 "c:/WayneWork/pfs.c" 2

# 1 "c:/WayneWork/error.h" 1




# 1 "c:/WayneWork/strings.h" 1



# 1 "c:\\n64\\include/stdarg.h" 1





 
 
 
 
 
 
 
 

 

 

















































 


typedef char *va_list;


 


# 126 "c:\\n64\\include/stdarg.h"


 

# 171 "c:\\n64\\include/stdarg.h"


 



























# 4 "c:/WayneWork/strings.h" 2


extern int (vfprintf)(char *fp, const char *fmt0, va_list ap);
extern int (sprintf)(char *str, char const *fmt, ...);


 


# 68 "c:/WayneWork/strings.h"


































# 5 "c:/WayneWork/error.h" 2













void Error(S16 errid, const char *msg);
void FatalError(S16 errid, const char *msg);
 
 
void WarnMsg(char const *fmt, ...);
void FatalMsg(char const *fmt, ...);



 
 










# 68 "c:/WayneWork/error.h"



# 20 "c:/WayneWork/pfs.c" 2

# 1 "c:/WayneWork/audio.h" 1




 
void AudioTimeInit(void);
void AudioQueResetTime(F32 time);
void AudioQueUpdate(void);
void AudioQueEmpty(void);
int AudioStatName(const char *name);
void AudioInitNames(int tidx);
void Audio(U16 ac);
void AudioInit(void);
void AudioAttract(void);
void AudioAttractSnds(S32 type);
void AudioZamboni(S32 idx, F32 *pos, S32 active);
void AudioGame(void);
void AudioBeginPeriod(void);
void AudioEndPeriod(int gameover);
void AudioEndGame(void);
void AudioGameLoop(F32 timeleft);
void AudioSelect(S32 type, int tidx, int kidx);
void AudioVersus1(S32 team0, S32 team1, F32 time);
void AudioPlayer(S32 type, F32 *pos, F32 cvel, int haspuck);
void AudioFight(S32 type, F32 *pos);
void AudioPuck(S32 type, F32 *pos, F32 vel);
void AudioShot(S32 motion, S32 type, S32 ptype);
void AudioCrowd(S32 level, S32 type, F32 timeleft);
void AudioGoal(S32 type, S32 team, F32 savep);
void AudioName(S32 tidx, S32 stat_pos, S32 stat_line);
void AudioGotPuck(S32 tidx, S32 stat_pos, S32 stat_line, F32 *pos);
void AudioCoin(int type);
void AudioRefWhistle(void);
void AudioBOO(void);
void AudioCHEER(void);
void AudioTITLE(void);
void AudioLineChange(int tidx1, int tidx2);
void AudioPowerPlay(int tidx);
void CheckAudioPenaltyFaceoff(int init);
void AudioPenaltyRelease(int tidx,int type);

extern U8 call_power_play;

enum {
	AUDIO_CHECK = 1,
	AUDIO_TRIP,
	AUDIO_WALL,
	AUDIO_POST,
	AUDIO_NET,
	AUDIO_GLASS,
	AUDIO_SKATE,
	AUDIO_STICK,
	AUDIO_BODY,
	AUDIO_WRISTSHOT,
	AUDIO_SNAPSHOT,
	AUDIO_SLAPSHOT,
	AUDIO_ONETIMER,
	AUDIO_BACKHAND,
	AUDIO_WIDEOPEN,
	AUDIO_POWERSHOT,
	AUDIO_DUMP,
	AUDIO_PASS,
	AUDIO_STOP,
	AUDIO_BOO,
	AUDIO_SAD,
	AUDIO_HAPSAD,
	AUDIO_CHEER,
	AUDIO_SCORE,
	AUDIO_CHANT,
	AUDIO_START,
	AUDIO_END,
	AUDIO_HILITE,
	AUDIO_CHOOSETEAM,
	AUDIO_TURN,
	AUDIO_CHOOSEPLAYER,
	AUDIO_CATCH,
	AUDIO_BLOCK,
	AUDIO_MISS,
	AUDIO_JAB,
	AUDIO_PUNCH,
	AUDIO_UPPERCUT,
	AUDIO_GRAB,
	AUDIO_COMB1,
	AUDIO_COMB2,
	AUDIO_KNOCKOUT,
	AUDIO_KNOCKOUTHIT,
	AUDIO_STEAL,
	AUDIO_SPEED,
	AUDIO_SWITCH,
	AUDIO_NOSWITCH,
	AUDIO_START2,
	AUDIO_END2,
    AUDIO_FIGHT,
	AUDIO_DROP,
	AUDIO_FIRENET,
	AUDIO_FIREPUCK,
	AUDIO_AMBULENCE,
	AUDIO_FIRETRUCK,
	AUDIO_SPECIAL1,
	AUDIO_SPECIAL2,
	AUDIO_SPECIAL3,
	AUDIO_SPECIAL4,
	AUDIO_SPECIAL5,
	AUDIO_NO,
	AUDIO_ENTER,
	AUDIO_EXIT,
	AUDIO_UP,
	AUDIO_DOWN,
	AUDIO_CAMERA1,
	AUDIO_CAMERA2,
	AUDIO_ENDGAME,
	AUDIO_EVEN_STRENGTH,
	AUDIO_FULL_STRENGTH,
	AUDIO_RELEASE_PLAYER,
};


# 21 "c:/WayneWork/pfs.c" 2

# 1 "c:/WayneWork/game.h" 1




# 1 "c:/WayneWork/team.h" 1











 
typedef S8 ZONE[4];
typedef struct _PLAYPOS
{
	S8 play;    
	S8 mode;    
	ZONE zone;   
} PLAYPOS;























typedef struct _CHOOSER
{
	struct _CHOOSER *next;
	F32 value;
	U32 mirror;
	void *data;
} CHOOSER;
typedef struct _PLAYDATA
{
	U32 tag;         
	ZONE *coverage;   
	PLAYPOS *ppos;   
	const char *name;
} PLAYDATA;

typedef struct _PLAYPTRS
{
	PLAYER *player;     
	PLAYPOS *playpos;   
	ZONE *coverage;   
	U8 mirror;   
} PLAYPTRS;


typedef struct				 
{
	PLAYER player[5 + 1 ];	 
	GOAL *goalp;					 
	F32 shotmod;					 
	S16 score;						 
	S16 sog;						 
	S16 shots;						 
	S16 fights;						 
	S16 penalties;   
	S8 city;						 
	S8 home_team;					 
	S8 line;						 
	S8 onIce;						 
	S16 rampval;					 
	struct
	{
		U8 celebrate;				 
		U8 gotkids;					 
		U8 lastSwitchPlayer;		 
		U8 dummy2;
	}flags;
	S8 scoringkid;					 
	S8 kidsonteam;					 
	S8 maxkidsonteam;				 
	S8 firstkid;					 
	S8 goalie;
	S8 lastplayer;					 
	S8 kid[4  ];
	PLAYER 	*passer;				 
	PLAYER 	*lastowner;				 

	TEAM_STATS *stats;
	LADDER	*ladder;				 
	PFSTEAM	*pfsteam0;				 
	PFSTEAM	*pfsteam1;				 

	 
	PLAYPTRS play[5];  				 
	U32 currentplay;    			 
	S32 onoffense;					 
	S32 lastpucker;					 
	PLAYER *FOdrawplayer;  			 

	 
	U8 pref_line[5 ];
	U8 goaliePulled;
} TEAM;












extern TEAM Team[2 ];
extern int changeTeams;

 
int	SwitchPlayer(PLAYER *pp);
void DoSwitchKid(PLAYER *kp,PLAYER *dp);
void DoSwapKids(PLAYER *pp,PLAYER *pp2);
void InitPlayer(PLAYER *pp, int tidx, int pidx);
void ReinitPlayerPStats(PLAYER *pp);
void ReinitPlayerGStats(PLAYER *pp);
void ReinitPlayer(PLAYER *pp, int tidx, int pidx, int overtime);
void InitTeams(void);
void InitTeamsNotFirstKid(void);
void ReinitTeams(int overtime,short changeteams);
void ProcessTeams(void);
void ResetPlayer(PLAYER *pp);
void ResetPlayers(void);
void SetNewPlayer(PLAYER *pp, int redo_physics, int alt_stat_pos, int alt_stat_line, int flags);
PLAYER *NewPlayer(KIDINFO *kidp, S16 tidx, int flags);
void UpdatePlayer(PLAYER *pp);
int WithinSlice(F32 pos[3], PLAYER *pp, F32 offd, F32 defd);
int DefensiveEnd(PLAYER *pp);
int GotKids(int tidx);
int ActivePlayer(PLAYER *pp);
void OffScreenArrows(void);
void SetPlayerID(DOBJ *idcircle, PLAYER *pp, int state);
void UpdatePlayerID(PLAYER *pp);
F32 GetStickYaw(PLAYER *pp);
void GetStickPosition(PLAYER *pp, F32 pos[3]);
void GetMidPosition(PLAYER *pp, F32 pos[3]);
void RebuildPlayers(void);


 


 
 
 
 



void TeamKidInit(void);
void TeamKidDefaultPositionsSet(void);
short TeamKidFind(short kidIndex, short *teamIndex,short *index);
short TeamKidAdd(short teamIndex,short kidIndex);
void TeamKidGetTeammates(short kidIndex,char *teamMates,short *numTeammates);
short TeamKidNumKidsPerTeam(short teamIndex);
short TeamKidAddProportional(short kidIndex);
short TeamKidRemove(short kidIndex);
short TeamKidSwap(short kidIndex,short maxNumberPerTeam);
short TeamKidGetFirstKid(short teamIndex);
short TeamKidGetKidFromIndex(short teamIndex,short index);


# 5 "c:/WayneWork/game.h" 2




enum {
	GTYPE_PLAY=0,
	GTYPE_SSEASON,
	GTYPE_LSEASON,
	GTYPE_ARCADE,
	GTYPE_PLAYOFF
};

extern S16 GameType;
extern S16 GameTimerON;		 
extern S16 GamePeriod;			 
extern F32 GameTimer;			 
extern F32 GameTimerTLU;		 
extern VS32 GameMode;
extern VS32 AttractMode;
extern S16 GameTie;			 
extern S16 GameEnd;			 
extern S8 PG_IcingFlag;
extern U8 PG_Firsttimeflag;
extern U8	InjuredPlayers[2 ][5 + 1 ];
extern U8 nokids_thisteam[2];



 
int TestWaitLoop(void);
void StartGameTimer(F32 inittime);
void StopGameTimer(void);
int EndGameRules(void);
int UpdateGameTimer(void);
int Hockey(void);
int StandbyMode(void);
int GameLoop(F32 timeonclock);
void InitChallengeScreen(PLAYER **p1guy, PLAYER **p2guy);
void ChallengeScreen(void);
void EndOfGame(void);
void UpdateEndOfPeriod(void);
void PatriceMode(void);

void	SetBillboardTextures(int team);






# 22 "c:/WayneWork/pfs.c" 2

# 1 "c:/WayneWork/stats.h" 1


















extern LADDER ram_ladder;
extern S32 num_teams;
extern S32 num_players;
extern TEAM_STATS * team_stats;
extern PLAYER_STATS * player_stats;

extern PLAYER_CURRENT_TEAMS *player_current_teams;
extern PLAYER_EXTRA_STATS *player_extra_stats;
extern PLAYER_EXTRA_STATS player_extra_game_stats[2][(2 + 5  * 3 ) ];
extern PLAYER_EXTRA_STATS player_period_stats[2][(2 + 5  * 3 ) ];
extern PlayerRecords *PlayerCardRecords;
extern short *GameFaceNum;

extern U8 teams_in_div[(4  + 1) ];
extern S8 city_from_rank[(4  + 1) ][7 ];
extern S16 mt_modcity[2];
extern S16 mt_plyrs[2][15];
extern S8 mt_teams[2][15];

extern const U8 div_order[4  ][(4  + 1)  ];

 
void CheckLadder(LADDER * ladderp);
void InitStats(void);
void resetPlayerStats(void);
S32 FindTeam(const char *string);
S32 FindPlayer(const char *string);
U16 FindTeamTexture(char *buf, const char *formatstr, int city, int lineno, int position);
int MakeVirtTeamNum(int div, int num);
void UseVirtTeamNum(int vteam, int *RET_div, int *RET_num);
DOBJ *STATSwanim(DOBJ *dobj, S16 oidx);
void Stats(void);



# 23 "c:/WayneWork/pfs.c" 2

# 1 "c:/WayneWork/timer.h" 1





extern VF32 TIME;			 
extern VU32 ITIME;			 


void TimerResetNearOverflow(void);
void TimerCalc(void);
void InitializeTimerIRQ(void);
void ResetTime(void);



# 24 "c:/WayneWork/pfs.c" 2



# 1 "c:/WayneWork/name.h" 1







 
DOBJ *NAMEwanim(DOBJ *dobj, S16 oidx);
int GetName(void);




enum {
	NOTPLAYING,
	SELECTING,
	INGAME,
	CONTINUING
};

enum {
	SDNOJOY,
	SDJOIN,
	SDSTART,
	SDINITIALS,
	SDPASSWORD,				 
	SDPAK,
	SDWAITING,
	SDVERIFY
};

extern char passarray[];

# 27 "c:/WayneWork/pfs.c" 2








 




extern char *RumblePackMessage[];
extern char *RumblePackMessage1[];



extern	char *W_strs[1 ];
extern	char *L_strs[1 ];
extern	char *T_strs[1 ];
extern	char *PTS_strs[1 ];
extern	char *goals_String[1 ];
extern	char *assist_strs[1 ];
extern	char *games_strs[1 ];
extern	char *overtime_strs[1 ];
extern	char *shots_String[1 ];
extern	char *assist_strs[1 ];
extern	char *points_strs[1 ];













extern	char *player_str[1 ];
extern	PfsHiScore(int pak);
extern	int cntstr(char *str, int n);

extern	volatile OSContStatus statusdata[4 ];
extern	U16		attract_state;
extern	GFXMsg	controllermsg;
extern	U16 	internal_state;
extern	F32		timer;
extern	PFSTEAM	pfsTeamRam[2 ];


GFXMsg	endpfsmsg;						 
OSMesgQueue	pfsMsgQ;					 
OSMesg		pfsMsgBuf[8 ];

OSPfs	pfsHeader[4 ];		 
S8		pfsFileNum[4 ];		 
S8		pfsError[4 ];		 
U8		pfsPattern;						 
S8	 	pfsDelete;						 
OSPfsState	pfsFiles[16 ];	 
S32 	pfsFree;						 
U16 	pfsFileCount;					 
S32		pfsFile;						 
char 	pfsFileName[16  + 1 + 4  + 1];	 

 


char	pfsName[] = 					 
{												 
	0x30, 0x20, 0x0F, 0x13, 
	0x1d, 0x21, 0x28, 0x1c,
	0x24, 0x1e, 0x32, 0x19,
	0x18, 0, 0, 0,	
};
# 114 "c:/WayneWork/pfs.c"

char	pfsExt[] = { 0, 0, 0, 0, };		 

PFSGLOBAL	pfsGlobalData = 
{
	"Ed Logg\0" ,
	0,											 
	1 , 
	0,
	0, 0,
};



 
 
void PfsSaveAllansData(PFS *p)
{
	int i,j,pos;










	 
	memcpy(p->AllansData.CurrentTeamPrefix, player_current_teams, num_players*5);

	 
	for(i = 0; i < num_players; i++)
	{
		 
		pos = FindPlayerTeamCityIdxFromPtr(&player_stats[i]);

		if(pos < 2)
		{
			 
			if(player_stats[i].dummy& 0x08 )
				p->AllansData.Stats[i*3+0] = ((player_extra_stats[i].GoalieSaves>>16)&0x7f)|0x80;
			else
				p->AllansData.Stats[i*3+0] = (player_extra_stats[i].GoalieSaves>>16);
			p->AllansData.Stats[i*3+1] = (player_extra_stats[i].GoalieSaves>>8)&0xff;
			p->AllansData.Stats[i*3+2] = (player_extra_stats[i].GoalieSaves&0xff);
		}
		else
		{
			if(player_stats[i].dummy& 0x08 )
				p->AllansData.Stats[i*3+0] = (player_stats[i].goals&0x7f)|0x80;
			else
				p->AllansData.Stats[i*3+0] = player_stats[i].goals;
			p->AllansData.Stats[i*3+1] = player_stats[i].assists;
			p->AllansData.Stats[i*3+2] = player_stats[i].plus_minus;
		}
		 
		 
		p->AllansData.HatTricks[i] = player_extra_stats[i].HatTricks;
		p->AllansData.PlayerOfGame[i] = player_extra_stats[i].PlayerOfGame;
	}

	 
	for(i = 0; i < 26; i++)
	{
		for(j = 0; j < (2 + 5  * 3 ) ; j++)
			p->AllansData.Teams[i*17+j] = team_stats[i].idx.plyr[j];
	}
}

void PfsRestoreAllansData(PFS *p)
{
	int i,j,pos;










	 
	memcpy(player_current_teams, p->AllansData.CurrentTeamPrefix, num_players*5);

	 
	for(i = 0; i < num_players; i++)
	{
		 
		pos = FindPlayerTeamCityIdxFromPtr(&player_stats[i]);

		if(pos < 2)
		{
			 
			if(p->AllansData.Stats[i*3+0]&0x80)
				player_stats[i].dummy |= 0x08 ;

			player_extra_stats[i].GoalieSaves = (p->AllansData.Stats[i*3+0]&0x7f)<<16;
			player_extra_stats[i].GoalieSaves |= p->AllansData.Stats[i*3+1]<<8;
			player_extra_stats[i].GoalieSaves |= p->AllansData.Stats[i*3+2];

			 
			player_stats[i].goals = 0;
			player_stats[i].assists = 0;
			player_stats[i].plus_minus = 0;
		}
		else
		{
			player_stats[i].goals = p->AllansData.Stats[i*3+0];
			if(player_stats[i].goals&0x80)
			{
				player_stats[i].dummy |= 0x08 ;
				player_stats[i].goals &= 0x7f;
			}
			player_stats[i].assists = p->AllansData.Stats[i*3+1];
			player_stats[i].plus_minus = p->AllansData.Stats[i*3+2];
		}
		player_extra_stats[i].HatTricks = p->AllansData.HatTricks[i];
		player_extra_stats[i].PlayerOfGame = p->AllansData.PlayerOfGame[i];
	}

	 
	for(i = 0; i < 26; i++)
	{
		for(j = 0; j < (2 + 5  * 3 ) ; j++)
			team_stats[i].idx.plyr[j] = p->AllansData.Teams[i*17+j];
	}
}


void PfsSaveRecords(PFS *p)
{
	int i,j;
	extern PlayerRecords *PlayerCardRecords;










	for(i = 0; i < num_players; i++)
	{
		p->AllansRecords[i].GoalsAgainstTeam |= (PlayerCardRecords[i].GoalsAgainstTeam&0x7f);
		p->AllansRecords[i].Goals = PlayerCardRecords[i].Goals;
		strncpy(p->AllansRecords[i].GoalInitials, PlayerCardRecords[i].GoalInitials, 3);

		p->AllansRecords[i].AssistsAgainstTeam = PlayerCardRecords[i].AssistsAgainstTeam;
		p->AllansRecords[i].Assists = PlayerCardRecords[i].Assists;
		strncpy(p->AllansRecords[i].AssistInitials, PlayerCardRecords[i].AssistInitials, 3);

		p->AllansRecords[i].HatTricksAgainstTeam = PlayerCardRecords[i].HatTricksAgainstTeam;
		p->AllansRecords[i].HatTricks = PlayerCardRecords[i].HatTricks;
		strncpy(p->AllansRecords[i].HatTricksInitials, PlayerCardRecords[i].HatTricksInitials, 3);
	}
}

void PfsRestoreRecords(PFS *p)
{
	int i,j;
	extern PlayerRecords *PlayerCardRecords;










	for(i = 0; i < num_players; i++)
	{
		PlayerCardRecords[i].GoalsAgainstTeam = (p->AllansRecords[i].GoalsAgainstTeam&0x7f);
		PlayerCardRecords[i].Goals = p->AllansRecords[i].Goals;
		strncpy(PlayerCardRecords[i].GoalInitials, p->AllansRecords[i].GoalInitials, 3);

		PlayerCardRecords[i].AssistsAgainstTeam = p->AllansRecords[i].AssistsAgainstTeam;
		PlayerCardRecords[i].Assists = p->AllansRecords[i].Assists;
		strncpy(PlayerCardRecords[i].AssistInitials, p->AllansRecords[i].AssistInitials, 3);

		PlayerCardRecords[i].HatTricksAgainstTeam = p->AllansRecords[i].HatTricksAgainstTeam;
		PlayerCardRecords[i].HatTricks = p->AllansRecords[i].HatTricks;
		strncpy(PlayerCardRecords[i].HatTricksInitials, p->AllansRecords[i].HatTricksInitials, 3);
	}
}




void PfsSaveGlobals(PFS *p)
{









	changed_options = 0;						 
	p->global.centerX = centerX;
	p->global.centerY = centerY;	
	p->global.arcadeMode = arcadeMode;
	p->global.realRink = realRink;
	p->global.nPlayers = nPlayers;
	p->global.gameDifficulty = GameDifficulty;
	p->global.gameTime = GameInitTimeIndex;
	p->global.penaltiesOn = penaltiesOn;
	p->global.autoSwitchPlayer = autoSwitchPlayer;
	p->global.lineSwitching = (lineSwitching[0] << 4) + (lineSwitching[1] & 0x0f); 
	p->global.playSpeed = playSpeed;
	p->global.noPuckStreak = noPuckStreak;
	p->global.playerFatigue = playerFatigue;
	p->global.cameras = (cameraToggle << 4) + (cameraDefault & 0x0f);	
	p->global.fightingOn = fightingOn;
	p->global.language = language;
	p->global.languagePicked = languagePicked;
}


void	PfsRestoreGlobals(PFS *p)
{









	changed_options = 0;							 
	centerX = p->global.centerX;					 
	if(osTvType  == 0 )
		centerY = 0;
	else
		centerY = p->global.centerY;
	arcadeMode = p->global.arcadeMode;
	realRink = p->global.realRink;
	nPlayers = p->global.nPlayers;
	GameDifficulty = p->global.gameDifficulty;
	GameInitTimeIndex = p->global.gameTime;
	GameInitTime = GameTimes[arcadeMode][GameInitTimeIndex];
	penaltiesOn = p->global.penaltiesOn;
	autoSwitchPlayer = p->global.autoSwitchPlayer;
	lineSwitching[0] = (p->global.lineSwitching >> 4) & 0x0f;
	lineSwitching[1] = (p->global.lineSwitching & 0x0f); 
	playSpeed = p->global.playSpeed;
	noPuckStreak = p->global.noPuckStreak;
	playerFatigue = p->global.playerFatigue;
	cameraDefault = p->global.cameras & 0x0f;
	cameraToggle = (p->global.cameras & 0xf0) >> 4;
	fightingOn = p->global.fightingOn;




}


static void PfsInitData(int pak)
{
	PFS	*p = &pfs[pak];
	int	i;
	









	memset(((U8 *)p) + sizeof(PFSGLOBAL), 0, sizeof(PFS)-sizeof(PFSGLOBAL));	 
	memcpy(&p->global, &pfsGlobalData, sizeof(pfsGlobalData));	 
	PfsSaveGlobals(p);				 

	 
	if(0)  
	{
		U8 *p1 = (U8 *)(p);

		p1 += sizeof(PFSGLOBAL);
		p1 += sizeof(PFSTEAM);
		p1 += sizeof(PFSPLAYER);
		p1 += sizeof(PFSALDATA);
		memset(p1, 0, sizeof(PFSALRECORDS));	 
	}


	 
	 
	PfsSaveRecords(p);				 

	p->global.checksum = PfsChecksum(pak);	 
}


void PfsSaveController(PFSPLAYER *player, int kid)
{









	changed_lists[kid] = 0;					 
	player->control.shot  		= shotbutton[kid];
	player->control.shot2		= shot2button[kid];
	player->control.pass  		= passbutton[kid];
	memcpy(player->control.turbo, burst_lists[kid], 4*sizeof(SPENTRY));
	memcpy(player->control.kneel, kneel_lists[kid], 4*sizeof(SPENTRY));
	memcpy(player->control.steal, steal_lists[kid], 4*sizeof(SPENTRY));
	memcpy(player->control.onetimer, onetimer_lists[kid], 4*sizeof(SPENTRY));
	memcpy(player->control.dive, dive_lists[kid], 4*sizeof(SPENTRY));
	memcpy(player->control.check, check_lists[kid], 4*sizeof(SPENTRY));
	memcpy(player->control.hook, trip_lists[kid], 4*sizeof(SPENTRY));
	memcpy(player->control.trip, hook_lists[kid], 4*sizeof(SPENTRY));
	memcpy(player->control.hotshot, hotshot_lists[kid], 4*sizeof(SPENTRY));
	memcpy(player->control.swplayer, playersw_lists[kid], 4*sizeof(SPENTRY));
	memcpy(player->control.swcamera, camerasw_lists[kid], 4*sizeof(SPENTRY));
}


void	PfsRestoreController(PFSPLAYER *player, int kid)
{









	if (changed_lists[kid])						 
		return;
	shotbutton[kid] = player->control.shot;
	shot2button[kid] = player->control.shot2;
	passbutton[kid] = player->control.pass;
	memcpy(burst_lists[kid], player->control.turbo, 4*sizeof(SPENTRY));
	memcpy(kneel_lists[kid], player->control.kneel, 4*sizeof(SPENTRY));
	memcpy(steal_lists[kid], player->control.steal, 4*sizeof(SPENTRY));
	memcpy(onetimer_lists[kid], player->control.onetimer, 4*sizeof(SPENTRY));
	memcpy(dive_lists[kid], player->control.dive, 4*sizeof(SPENTRY));
	memcpy(check_lists[kid], player->control.check, 4*sizeof(SPENTRY));
	memcpy(trip_lists[kid], player->control.hook, 4*sizeof(SPENTRY));
	memcpy(hook_lists[kid], player->control.trip, 4*sizeof(SPENTRY));
	memcpy(hotshot_lists[kid], player->control.hotshot, 4*sizeof(SPENTRY));
	memcpy(playersw_lists[kid], player->control.swplayer, 4*sizeof(SPENTRY));
	memcpy(camerasw_lists[kid], player->control.swcamera, 4*sizeof(SPENTRY));
}


char	ncode[256] = 					 
{
	   0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,	 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,	 
	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,	 
	0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,	 
	0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E,	 
	0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,	 
	0x57, 0x58, 0x59, 0x5A, 0x21, 0x22, 0x23, 0x27,	 
	0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x3A, 0x3D,	 
	0x3F, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,	 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,	 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20,AllanEnd


(Source: Shygoo)