the cutting room mirror

VR Golf '97 (Sega Saturn)

This page contains no introduction.
What makes this game notable or what is it about? Are you a bad enough dude to save this article?

Uncompiled Source Code#

A lot of uncompiled source code can be found in 0GOLF.BIN starting at 0x62C30.

R_FRT_FRC       (0xfffffe12)
    #define     SH2_REG_ADDR_FRT_FRC_H  (0xfffffe12)
    #define     SH2_REG_ADDR_FRT_FRC_L  (0xfffffe13)
    #define     SH2_REG_ADDR_FRT_OCRA   (0xfffffe14)
    #define     SH2_REG_ADDR_FRT_OCRA_H (0xfffffe14)
    #define     SH2_REG_ADDR_FRT_OCRA_L (0xfffffe15)
    #define     SH2_REG_ADDR_FRT_TCR        (0xfffffe16)
    #define     SH2_REG_ADDR_FRT_TOCR   (0xfffffe17)
    #define     SH2_REG_ADDR_FRT_ICRA   (0xfffffe18)
    #define     SH2_REG_ADDR_FRT_ICRA_H (0xfffffe18)
    #define     SH2_REG_ADDR_FRT_ICRA_L (0xfffffe19)

    #define     SH2_REG_ADDR_DMA_SAR0   (0xffffff80)
    #define     SH2_REG_ADDR_DMA_DAR0   (0xffffff84)
    #define     SH2_REG_ADDR_DMA_TCR0   (0xffffff88)
    #define     SH2_REG_ADDR_DMA_CHCR0  (0xffffff8c)
    #define     SH2_REG_ADDR_DMA_VCR0   (0xffffffa0)
    #define     SH2_REG_ADDR_DMA_DRCR0  (0xffffffb4)

    #define     SH2_REG_ADDR_DMA_SAR1   (0xffffff90)
    #define     SH2_REG_ADDR_DMA_DAR1   (0xffffff94)
    #define     SH2_REG_ADDR_DMA_TCR1   (0xffffff98)
    #define     SH2_REG_ADDR_DMA_CHCR1  (0xffffff9c)
    #define     SH2_REG_ADDR_DMA_VCR1   (0xffffffa8)
    #define     SH2_REG_ADDR_DMA_DRCR1  (0xffffffb8)

    #define     SH2_REG_ADDR_DMA_DMAOR  (0xffffffb0)

    #define     SH2_REG_ADDR_INT_IPRB   (0xfffffe60)
    #define     SH2_REG_ADDR_INT_VCRA   (0xfffffe62)
    #define     SH2_REG_ADDR_INT_VCRB   (0xfffffe64)
    #define     SH2_REG_ADDR_INT_VCRC   (0xfffffe66)
    #define     SH2_REG_ADDR_INT_VCRD   (0xfffffe68)
    #define     SH2_REG_ADDR_INT_ICR        (0xfffffee0)
    #define     SH2_REG_ADDR_INT_IPRA   (0xfffffee2)
    #define     SH2_REG_ADDR_INT_VCRWDT (0xfffffee4)

    #define     SH2_REG_ADDR_WDT_WTCSR  (0xfffffe80)
    #define     SH2_REG_ADDR_WDT_WTCNT  (0xfffffe80)
    #define     SH2_REG_ADDR_WDT_RSTCSR (0xfffffe82)

    #define     SH2_REG_ADDR_DIV_JR     (0xffffff00)
    #define     SH2_REG_ADDR_DIV_HRL32  (0xffffff04)
    #define     SH2_REG_ADDR_DIV_CONT   (0xffffff08)
    #define     SH2_REG_ADDR_DIV_VCT        (0xffffff0c)
    #define     SH2_REG_ADDR_DIV_HRH        (0xffffff10)
    #define     SH2_REG_ADDR_DIV_HRL        (0xffffff14)
    #define     SH2_REG_ADDR_DIV_RAR        (0xffffff18)
    #define     SH2_REG_ADDR_DIV_RSR        (0xffffff1c)

    #define     SH2_REG_ADDR_CACHE_CCR      (0xfffffe92)

    #define     SH2_DMA_CHCR_DM_Fixed   (0x0000)
    #define     SH2_DMA_CHCR_DM_Up      (0x4000)
    #define     SH2_DMA_CHCR_DM_Down        (0x8000)

    #define     SH2_DMA_CHCR_SM_Fixed   (0x0000)
    #define     SH2_DMA_CHCR_SM_Up      (0x1000)
    #define     SH2_DMA_CHCR_SM_Down        (0x2000)

    #define     SH2_DMA_CHCR_TS_1       (0x0000)
    #define     SH2_DMA_CHCR_TS_2       (0x0400)
    #define     SH2_DMA_CHCR_TS_4       (0x0800)
    #define     SH2_DMA_CHCR_TS_16  (0x0c00)

    #define     SH2_DMA_CHCR_AR_Module  (0x0000)
    #define     SH2_DMA_CHCR_AR_Auto        (0x0200)

    #define     SH2_DMA_CHCR_AM_Read        (0x0000)
    #define     SH2_DMA_CHCR_AM_Write   (0x0100)

    #define     SH2_DMA_CHCR_AL_Low (0x0000)
    #define     SH2_DMA_CHCR_AL_High    (0x0080)

    #define     SH2_DMA_CHCR_DS_Level   (0x0000)
    #define     SH2_DMA_CHCR_DS_Edge        (0x0040)

    #define     SH2_DMA_CHCR_DL_Low     (0x0000)
    #define     SH2_DMA_CHCR_DL_High        (0x0020)

    #define     SH2_DMA_CHCR_TB_Steal       (0x0000)
    #define     SH2_DMA_CHCR_TB_Burst       (0x0010)

    #define     SH2_DMA_CHCR_TA_Dual            (0x0000)
    #define     SH2_DMA_CHCR_TA_Single      (0x0008)

    #define     SH2_DMA_CHCR_IE_Disable     (0x0000)
    #define     SH2_DMA_CHCR_IE_Enable      (0x0004)

    #define     SH2_DMA_CHCR_TE_Busy            (0x0000)
    #define     SH2_DMA_CHCR_TE_Normal      (0x0002)

    #define     SH2_DMA_CHCR_DE_Disable     (0x0000)
    #define     SH2_DMA_CHCR_DE_Enable      (0x0001)

    #define     SH2_DMA_DMAOR_DMIE_Disable      (0x0001)
    #define     SH2_DMA_DMAOR_DMIE_Enable       (0x0001)

    #define     SH2_WDT_WTCSR_OVF_NoOverflow    (0x00)
    #define     SH2_WDT_WTCSR_OVF_Overflow      (0x80)

    #define     SH2_WDT_WTCSR_WT_Interval       (0x00)
    #define     SH2_WDT_WTCSR_WT_Timer          (0x40)

    #define     SH2_WDT_WTCSR_TME_Disable       (0x00)
    #define     SH2_WDT_WTCSR_TME_Enable        (0x20)

    #define     SH2_WDT_WTCSR_CKS_2                 (0x00)
    #define     SH2_WDT_WTCSR_CKS_64                    (0x01)
    #define     SH2_WDT_WTCSR_CKS_128               (0x02)
    #define     SH2_WDT_WTCSR_CKS_256               (0x03)
    #define     SH2_WDT_WTCSR_CKS_512               (0x04)
    #define     SH2_WDT_WTCSR_CKS_1024              (0x05)
    #define     SH2_WDT_WTCSR_CKS_4096              (0x06)
    #define     SH2_WDT_WTCSR_CKS_8192              (0x07)

    #define     SH2_SET_REGISTER_8( ADDR, DATA) (*((uint8*)(ADDR)) = (uint8)(DATA))
    #define     SH2_SET_REGISTER_16( ADDR, DATA) (*((uint16*)(ADDR)) = (uint16)(DATA))
    #define     SH2_SET_REGISTER_32( ADDR, DATA) (*((uint32*)(ADDR)) = (uint32)(DATA))
    #define     SH2_GET_REGISTER_8( ADDR) (*((volatile uint8*)(ADDR)))
    #define     SH2_GET_REGISTER_16( ADDR) (*((volatile uint16*)(ADDR)))
    #define     SH2_GET_REGISTER_32( ADDR) (*((volatile uint32*)(ADDR)))

    #define     SH2_SET_INTERRUPT_VECTOR( CPU, ADDR, DATA) (*((uint32*)((uint32)(CPU) + (uint32)(ADDR))) = (uint32)(DATA))

    #define     SH2_SET_WDT_WTCNT_REGISTER( DATA) (*((uint16*)(SH2_REG_ADDR_WDT_WTCSR)) = (uint16)(0x5a00 | (DATA)))
    #define     SH2_SET_WDT_WTCSR_REGISTER( DATA) (*((uint16*)(SH2_REG_ADDR_WDT_WTCSR)) = (uint16)(0xa500 | (DATA)))

    inline int32 SH2_DIV_32_32( int32 Num, int32 Den);
    inline int32 SH2_DIV_64_32( int64 Num, int32 Den);

    uint32  Stack_Fast( void *FuncAddr, uint32 A, uint32 B, uint32 C);
    void    SH2_28MHz( void);
    void    SH2_26MHz( void);
    void    SH2_Reset( void);
    void    SH2_Start_CD_Multiplayer( void);
    void    SH2_DMA_Copy( void *Dest, void *Src, uint32 Size, uint32 Channel);
    void    SH2_DMA_Init( void);

    int32   SH2_MUL_32_32( register int32 Ma, register int32 Mb);
                               

# 18 "c\\golf1.c" 2


# 1 "system/h/fmv.h" 1

    #define     __FMV_H

    
# 1 "system/h/rvd.h" 1

    #define RVD_H

    #define NO_SOUND             0
    #define A_STANDARD_SOUND (1<<0)
    #define A_STEREO         (1<<1)
    #define A_16_BIT         (1<<2)
    #define A_COMPRESSED     (1<<3)

    #define RVD_MAGIC 0xDEADBABE

    typedef struct
    {
        unsigned int magic;                          
        unsigned int no_frames;                     
        unsigned short fps;                           
        unsigned short audio_type;                    
        unsigned short sample_rate;                   
        unsigned short video_type;                    
        unsigned int video_size;                    
        unsigned int width;                          
        unsigned int height;                             
        int pad;
    }RVD_header_s;

    typedef struct 
    {
        unsigned short middle;                               
        unsigned char type;                           
        unsigned char trigger;                               
        unsigned int bs_size;  
    }RVD_frame_header_s;

    typedef struct
    {
        RVD_header_s header;
        RVD_frame_header_s frame_header[1000];
    }RVD_headers_s;


    void RVD_init(char *, char *, char *, char *, int);
    int  RVD_next(void);
    void RVD_start(void);
    void RVD_stop(void);



# 4 "system/h/fmv.h" 2


    
    
    
# 1 "system/h/sound.h" 1

    #define     __SOUND_H

    
    
# 1 "system/h/scsp.h" 1

    #define     __SCSP_H

    

    #define     SCSP_RAM_ADDR_START ((uint32)0x25a00000)
    #define     SCSP_RAM_ADDR_STOP  ((uint32)0x25a80000)

    #define     SCSP_REG_ADDR_SLOT  ((uint32)0x25b00000)
    #define     SCSP_REG_ADDR_SCCR  ((uint32)0x25b00400)
    #define     SCSP_REG_ADDR_SSTACK    ((uint32)0x25b00600)
    #define     SCSP_REG_ADDR_DSPCR ((uint32)0x25b00700)

    #define     SCSP_SLOT_NUMBER    32

    typedef struct  scsp_slot
        {
        uint16  Control;
        uint16  SA;
        uint16  LSA;
        uint16  LEA;
        uint16  Shape1;
        uint16  Shape2;
        uint16  Tl;
        uint16  Mod;
        uint16  Freq;
        uint16  LFO;
        uint16  InputVolume;
        uint8   DirectVolume;
        uint8   DSPVolume;
        uint32  Dummy1;
        uint32  Dummy2;
        }scsp_slot;


# 5 "system/h/sound.h" 2

    

    #define     SOUND_USE_BIOS  0

    #define     SOUND_MAX_PCM   32

    #define     SOUND_MEMORY_TYPE   (memory_raml)
    #define     SOUND_LIST_MEMORY_TYPE  (memory_raml)
    #define     SOUND_DATA_MEMORY_TYPE  (memory_scsp)
    #define     SOUND_DRIVER_BIN_FILENAME   "SFX\\DRIVER.BIN"
    #define     SOUND_DRIVER_MAP_FILENAME   "SFX\\MAP.BIN"

    #define     SOUND_ADDRESS_TO_SCSP(ADDR) ((((uint32)(ADDR)) - SCSP_RAM_ADDR_START)>>4)

    #define     SOUND_VOLUME_MAX    (0xff)
    #define     SOUND_VOLUME_MIN    (0)
    #define     SOUND_VOLUME_MID    (SOUND_VOLUME_MAX)

    #define     SOUND_PAN_LEFT      (-127)
    #define     SOUND_PAN_CENTER    (0x0)
    #define     SOUND_PAN_RIGHT (127)

    typedef uint8   sound_volume;
    typedef int8    sound_pan;

    typedef enum    sound_comm_status
        {
        SOUND_COMM_STATUS_Error,
        SOUND_COMM_STATUS_Idle,
        SOUND_COMM_STATUS_Reading,
        SOUND_COMM_STATUS_Playing
        }sound_comm_status;

    #define     SOUND_PCM_FLAGS_Loop_Wait   0
    #define     SOUND_PCM_FLAGS_Loop_Ready  1
    #define     SOUND_PCM_FLAGS_Loop_Status (SOUND_PCM_FLAGS_Loop_Ready | SOUND_PCM_FLAGS_Loop_Wait)

    typedef struct  sound_pcm
        {
        void        *Address;                
        uint8       Flags;                   
        uint8       Bytes_Per_Sample;        
        uint16  Sample_Rate;             
        uint32  Number_Samples;      
        uint32  SCSP_Addr;               
        struct sound_pcm    *Next;
        }sound_pcm;

    typedef struct  sound_pcm_list
        {
        uint32  Number_Samples;
        sound_pcm   *Samples;
        void    *Data;
        }sound_pcm_list;

    #define     SOUND_BUFFER_FLAGS_Free 0
    #define     SOUND_BUFFER_FLAGS_Playing  1
    #define     SOUND_BUFFER_FLAGS_Status (SOUND_BUFFER_FLAGS_Playing | SOUND_BUFFER_FLAGS_Free)
    #define     SOUND_BUFFER_FLAGS_NoLooping    0
    #define     SOUND_BUFFER_FLAGS_Looping  2
    #define     SOUND_BUFFER_FLAGS_New  4

    typedef struct  sound_pcm_buffer
        {
        int16       Flags;
        int16       Channel;
        scsp_slot   *Slot;

        sound_pcm   *Sound;
        uint16  SCSP_Addr_Inc;
        int16   Page;
        int32   Paragraph;

        uint32  SCSP_Mode;

        uint8   SCSP_Ctrl;
        uint8   SCSP_Volume;
        uint16  SCSP_Address;
        uint16  SCSP_Size;
        uint16  SCSP_Pitch;
        uint8   SCSP_VolumeEffectLeft;
        uint8   SCSP_VolumeEffectRight;
        uint16 SCSP_Tl;
        }sound_pcm_buffer;

    typedef struct  sound_comm
        {
        uint32  Offset;              
        uint32  Size;                    
        }sound_comm;

    typedef struct  sound_com_list
        {
        uint32  Number_Samples;
        sound_comm  *Samples;
        }sound_comm_list;

    #define     SOUND_COMM_BUFFERS  2
    #define     SOUND_COMM_RATE 22050
    #define     SOUND_COMM_BYTES    1
    #define     SOUND_COMM_PAGE_SIZE    2048
    #define     SOUND_COMM_PAGES    5
    #define     SOUND_COMM_SIZE (SOUND_COMM_PAGES * SOUND_COMM_PAGE_SIZE)

    #define     SOUND_COMM_PREREAD_SIZE 10

    typedef struct  sound_comm_data
        {
        sound_comm_status   Status;
        sound_comm_list *List;
        sound_pcm_list  *PCM_List;
        GfsHn   Handle;

        int32   Sound;
        sound_comm  *Present;
        sound_pcm_buffer    *Buffer;

        int32   Read_Size;
        int32   Active_Sound_Number;
        sound_pcm   *Play_Sound;
        sound_pcm   *Read_Sound;
        sound_volume    Volume;
        }sound_comm_data;

    #define     SOUND_FLAGS_NONE    0x0
    #define     SOUND_FLAGS_PAUSED_OFF  0x0
    #define     SOUND_FLAGS_PAUSED_ON   0x1
    #define     SOUND_FLAGS_PAUSED_MASK (SOUND_FLAGS_PAUSED_ON | SOUND_FLAGS_PAUSED_OFF)
    #define     SOUND_FLAGS_COMM_OFF    0x0
    #define     SOUND_FLAGS_COMM_ON 0x2
    #define     SOUND_FLAGS_COMM_MASK (SOUND_FLAGS_COMM_ON | SOUND_FLAGS_COMM_OFF)
    #define     SOUND_FLAGS_OFF 0x0
    #define     SOUND_FLAGS_ON  0x4
    #define     SOUND_FLAGS_MASK (SOUND_FLAGS_ON | SOUND_FLAGS_OFF)
    #define     SOUND_FLAGS_PCM_OFF 0x0
    #define     SOUND_FLAGS_PCM_ON  0x8
    #define     SOUND_FLAGS_PCM_MASK    (SOUND_FLAGS_PCM_ON | SOUND_FLAGS_PCM_OFF)

    typedef struct  sound_data
        {
        uint32  Samples_Per_VSync;   
        uint32  Samples_WRT_VSync;   
        int32   Flags;
        sound_comm_data *Comm;
        sound_pcm_buffer    Buffers[ 32 ];
        }sound_data;

    int32 Sound_Init( void);
    void    Sound_Driver_Init( void);

    void    Sound_On( int8  Flag);
    void    Sound_Pause( int32 Flag);
    void    Sound_Midi( int32 seq_no, int32 seq_pri, uint8 md_com, uint8 ch, uint8 dt1, uint8 dt2);
    void    Sound_Seq_Start(int32 Seq, int32 Bank, int32 Song, int32 Priority);
    void    Sound_Seq_Stop(int32 Seq);
    void    Sound_LoadData(char *Filename, uint16 data_kind, uint16 data_no);
    void    Sound_MoveData(void *source, uint32 size, uint16 data_kind, uint16 data_no);
    void    Sound_Load( char *Filename);
    void    Sound_ChannelEffect( uint8 Effect);
    void    Sound_ChannelMix( uint8 Tone, uint8 Mix);
    void    Sound_ChannelMap( uint8 Map);
    void    Sound_Volume( sound_volume Volume);

    void    Sound_CDDA_PlayTrack( int32 Track);
    void    Sound_CDDA_Volume( sound_volume Volume, sound_pan Pan_Left, sound_pan Pan_Right);

    sound_pcm_list*     Sound_PCM_Create( int32 NumberSounds, int32 SampleRate, int32 BytesPerSample, int32 NumberSamples);
    sound_pcm_list* Sound_PCM_Load( char *Filename);
    sound_pcm_buffer*   Sound_PCM_Free_Buffer( void);
    sound_pcm_buffer*   Sound_PCM_Play( sound_pcm *Sound, int32 Pitch_Bend, int32 Loop, sound_volume Volume, sound_pan Pan);
    void    Sound_PCM_Pause( int32 Flag);
    void    Sound_PCM_Range( sound_pcm *Sound_Full, sound_pcm *Sound_Short, uint32 Start, uint32 Stop);
    void    Sound_PCM_Buffer_Volume( sound_pcm_buffer *Buffer, sound_volume Volume, sound_pan Pan);
    void    Sound_PCM_Change_Volume( sound_pcm_buffer *Buffer, sound_volume Volume, sound_pan Pan);
    void    Sound_PCM_Buffer_Replay( sound_pcm_buffer *Buffer);
    void    Sound_PCM_Free_List( sound_pcm_list *List);
    void    Sound_PCM_Start( sound_pcm_buffer *Buffer);
    void    Sound_PCM_Change( sound_pcm_buffer *Buffer);
    void    Sound_PCM_Stop( sound_pcm_buffer *Buffer);
    int16   Sound_PCM_Calc_Pitch( sound_pcm *Sound, int32 PitchBend);
    void    Sound_PCM_Update( void);
    void    Sound_PCM_Update_In( void);
    void    Sound_PCM_Update_Out( void);

    uint32 Sound_Comm_Size( uint32  Sound);
    void    Sound_Comm_Volume( sound_comm_data *Comm, sound_volume Volume);
    void    Sound_Comm_On( int8 Flag);
    void    Sound_Comm_Read_Buffer( sound_comm_data *Comm);
    void    Sound_Comm_Update( void);
    int32   Sound_Comm_Play( uint32 Sound);
    void    Sound_Comm_Stop( sound_comm_data *Comm);
    int32   Sound_Comm_Open_File( sound_comm_data *Comm, char *Filename);
    void    Sound_Comm_File( char *Filename);
    void    Sound_Comm_Close_File( sound_comm_data *Comm);
    sound_comm_status   Sound_Comm_Status( void);
    sound_comm_data*    Sound_Comm_Init( char *Filename);
    void    Sound_Comm_Close( void);

# 8 "system/h/fmv.h" 2

    

    #define LOADING_BANK 0
    #define FMV_SOUND_COMM 0
    #define FMV_SOUND_LOOP 0
    #define FMV_SOUND_SAMPLE 1

    #define     FMV_COMM_SIZE   (SOUND_COMM_SIZE)
    #define     FMV_COMM_BUFFER_SIZE    (2*FMV_COMM_SIZE)

    #define RVD_BLOCK_SIZE 256*1024
    #define RVD_FRAME_SIZE 25*1024

    #define     FMV_DATA_VDP1_SIZE  (320*256*2)
    #define     FMV_DATA_SRC_SIZE   (3*RVD_BLOCK_SIZE)
    #define     FMV_DATA_DST_SIZE   (FMV_DATA_VDP1_SIZE)

    typedef struct  fmv_data
        {
        void    *Sound_Data_Buffer;
        void    *Sound_Data_Buffer_End;
        void    *Sound_Data_Pointer_New;
        void    *Sound_Data_Pointer_Old;

        sound_pcm_list  *Sound_List;
        sound_pcm_buffer    *Sound_Buffer;
        sound_pcm   *Sound;
        int16   Sound_Index;
        int16 Rewind;
        int32   LastTrigger;
        int32 Time;
        int32   Sound_Time;

        screen_texture  *Texture;
        void    *Data_Src;
        void    *Data_Dst;

        GfsHn   File_Handle;

        RVD_headers_s RVD_headers;  
        RVD_header_s RVD_header;
        RVD_frame_header_s RVD_frame_header;

        int RVD_sound_size;
        int RVD_decode_size;
        int RVD_trigger;
        int RVD_frame;
        int RVD_cd_frame;
        int RVD_bs_size;
        char *RVD_ptr;
        char *RVD_decode_buffer;
        char *RVD_sprite;
        char *RVD_block_next[3];
        char *RVD_data_next[3];
        char *RVD_sound[3];
        int RVD_block;
        int RVD_CD_flag;
        int RVD_buf;
        int RVD_quiet;

        int RVD_palette_flag;
        int RVD_slave_done;

        int RVD_filelength;

        }fmv_data;

    void FMV_Play_Sound( fmv_data *FMV_Data);
    void FMV_send_frame( fmv_data *FMV_Data);
    void FMV_send_sound(fmv_data *FMV_Data, int buf);
    int32   FMV_Next_Frame( fmv_data *FMV_Data);

    int FMV_CD_doread(GfsHn Handle);
    int FMV_CD_finished( fmv_data *FMV_Data);
    void FMV_CD_read(GfsHn Handle,char *dest,int bytes);
    int FMV_cd_block_size( fmv_data *FMV_Data);


    void    FMV_Play( char *Filename);
    void    FMV_Init_Internal( fmv_data *FMV_Data);
    fmv_data*   FMV_Init( char *Filename);
    void    FMV_Close( fmv_data *FMV_Data);
    void    FMV_Rewind( fmv_data    *FMV_Data);
    void    FMV_Rewind_Slave( fmv_data *FMV_Data);

    void    RVD_uncompact( void *, void *, int32, void*);


# 20 "c\\golf1.c" 2


# 1 "h/ccdisk.h" 1

    #define     __CCDISK_H

    #define TIME_ALLOWED 3

    enum 
    {
        SYSTEM,
        CARTRIDGE,
        NO_SPACE=9,
        NOT_FOUND,
        FILE_OK,
        LOAD_FAIL
    };



    int WantCCDisk(void);
    void GetCourseDisk(void);
    int  WhereToSaveFile(void);
    int  SaveValidation(int8);
    void DisplayError(int8);
    void DrawCCScreen(short);
    void QuitActuaGolf(void);       
    void DrawBlankCCScreen(void);
    void DrawWhereToSave(int8);
    void DrawMessageB(void);
    int SaveOutValidation(int8, void*, int);
    void DrawError(int8);
    int CheckValidationFile(void);
    int ValidateFile(void);
    int CheckFileTime(int8);
    int CheckFileCreate(void);  
    void DisplayErrorMessageA(void);
    int LoadValidation(int8);
    void DisplayLoadError(int8);
    void DisplayOkMessage(char **);
    void DrawOKScreen(char**);
    void DeleteValidationFile(int8);



# 22 "c\\golf1.c" 2

# 1 "h/save.h" 1

    #define     __SAVE_H

    
# 1 "h/filename.h" 1

#define     __FILENAMES_H



#define     FILENAME_SIZE   20

#define     FILENAME_COURSE_CHAR    1
#define     FILENAME_COURSE "C0"

#define     FILENAME_FONT0  "FONT1"
#define     FILENAME_FONT1  "FONT0"
#define     FILENAME_FONT2  "FONT2"
#define     FILENAME_FONT3  "FONT3"

#define     FILENAME_ICON   "ICON"
#define     FILENAME_BUFFER "BUFF"

#define     FILENAME_HOLE   "COURSE"
#define     FILENAME_TITLE_SCREEN   "GREMLOGO"

#define     FILENAME_FREND  "FREND"
#define     FILENAME_SPIN "SPINBUT"
#define     FILENAME_CSELECT "CSELBUTS"
#define     FILENAME_LOADWAIT "LOADWAIT"

    #define     FILENAME_C1H1 "C1DAT1"
    #define     FILENAME_C1H2 "C1DAT2"
    #define     FILENAME_C1H3 "C1DAT3"
    #define     FILENAME_C1H4 "C1DAT4"
    #define     FILENAME_C1H5 "C1DAT5"
    #define     FILENAME_C1H6 "C1DAT6"
    #define     FILENAME_C1H7 "C1DAT7"
    #define     FILENAME_C1H8 "C1DAT8"
    #define     FILENAME_C1H9 "C1DAT9"
    #define     FILENAME_C1H10 "C1DAT10"
    #define     FILENAME_C1H11 "C1DAT11"
    #define     FILENAME_C1H12 "C1DAT12"
    #define     FILENAME_C1H13 "C1DAT13"
    #define     FILENAME_C1H14 "C1DAT14"
    #define     FILENAME_C1H15 "C1DAT15"
    #define     FILENAME_C1H16 "C1DAT16"
    #define     FILENAME_C1H17 "C1DAT17"
    #define     FILENAME_C1H18 "C1DAT18"

    #define     FILENAME_C2H1 "C2DAT1"
    #define     FILENAME_C2H2 "C2DAT2"
    #define     FILENAME_C2H3 "C2DAT3"
    #define     FILENAME_C2H4 "C2DAT4"
    #define     FILENAME_C2H5 "C2DAT5"

    #define     FILENAME_C2H6 "C2DAT6"
    #define     FILENAME_C2H7 "C2DAT7"
    #define     FILENAME_C2H8 "C2DAT8"
    #define     FILENAME_C2H9 "C2DAT9"
    #define     FILENAME_C2H10 "C2DAT10"
    #define     FILENAME_C2H11 "C2DAT11"
    #define     FILENAME_C2H12 "C2DAT12"
    #define     FILENAME_C2H13 "C2DAT13"
    #define     FILENAME_C2H14 "C2DAT14"
    #define     FILENAME_C2H15 "C2DAT15"
    #define     FILENAME_C2H16 "C2DAT16"
    #define     FILENAME_C2H17 "C2DAT17"
    #define     FILENAME_C2H18 "C2DAT18"


#define     VRGOLF 1
#define  JAP 0

# 108 "h/filename.h"

    
     

        #define     FILENAME_LIC    "VRLEGAL"
        #define     FILENAME_CCSCREEN "VRLOD"
        #define     FILENAME_TITLE "VRTITLE"
        #define     FILENAME_LANGSELECT "VRLANGSL"
        #define     FILENAME_CREDITS "VRCREDIT"

        #define     FILENAME_MENU_ONE "VRMENU1"
        #define     FILENAME_MENU_TWO "VRMENU2"
        #define     FILENAME_SNDMENU "VRSNDMU"
        #define     FILENAME_GMOMENU "VRGMOMU"
        #define     FILENAME_WETMENU "VRWETMU"
        #define     FILENAME_RANKMENU "VRRANKMU"
        #define     FILENAME_SELMENU "VRSELMU"
        #define     FILENAME_CLUBMENU "VRCLUBMU"
        #define     FILENAME_GOLFRSET "VRGOLFR"
        #define     FILENAME_CONMENU "VRCONMEN"
        #define     FILENAME_LDSVMENU "VRMENU2"
        #define     FILENAME_MULTMENU "VRMULMN"

        #define     FILENAME_ENGTXT "ENGTXT"
        #define     FILENAME_ENGTXT2 "ENGTXT2"
        #define     FILENAME_CCTEXT "CCTEXT"
        #define     FILENAME_LODTEXT "LODTEXT"
        #define     FILENAME_INITMEM "INITMEM"

        #define     FILENAME_FRATXT "FRATXT"
        #define     FILENAME_FRATXT2 "FRATXT2"
        #define     FILENAME_FRACC "FRACC"
        #define     FILENAME_FRALODTX "FRALODTX"
        #define     FILENAME_FRAIMEM "FRAIMEM"

        #define     FILENAME_GERTXT "GERTXT"
        #define     FILENAME_GERTXT2 "GERTXT2"
        #define     FILENAME_GERCC "GERCC"
        #define     FILENAME_GERLODTX "GERLODTX"
        #define     FILENAME_GERIMEM "GERIMEM"

    
# 190 "h/filename.h"




#define     FILENAME_COURSE_HOLE    "HOLE"

#define     FILENAME_COURSE_HIRES   "HIRES"
#define     FILENAME_COURSE_DATA    "CRSE"

#define     FILENAME_MAKE_HOLE_DATA( STRING, COURSE, HOLE)  {   sprintf( (STRING),"COURSE%1ld\\HOLE%02ld.CDT", (uint32)(COURSE), (uint32)(HOLE));   }




#define     FILENAME_MAKE_TREE_DATA( STRING, COURSE, HOLE)  {   sprintf( (STRING),"COURSE%1ld\\HOLE%02ld", (uint32)(COURSE), (uint32)(HOLE));   }




#define     FILENAME_MAKE_BACK_DATA( STRING, COURSE, HOLE)  {   sprintf( (STRING),"COURSE%1ld\\BACK%ld.TDT", (uint32)(COURSE), (uint32)(HOLE)); }




#define     FILENAME_CHANGE_COURSE( FILENAME, COURSE) (*((FILENAME)+ FILENAME_COURSE_CHAR) = (uint8)(COURSE+'0'))
#define     FILENAME_MAKE( STRING, NAME,COURSE) {   strcpy( (STRING), FILENAME_COURSE); strcat( (STRING), (NAME));  FILENAME_CHANGE_COURSE( (STRING), COURSE);  }








# 4 "h/save.h" 2





    
        #define     FILENAME        "VRGOLFGAME"
     
    
    



    






    #define     PLAYERNAME  "VRGOLFPLAY"








enum
{
    LOADQM,
    LOADING=3,
    LOADED=6,
    LOAD_FAILED=9,
    CLEAR_FILESQM=12,
    CLEARED_FILES=15,
    CLEARING=18,
    CLEAR_FAILED=21,
    SAVEQM=24,
    POWER=27,
    SAVEING=32,
    SAVED=35,
    SAVE_FAILED=38,
    MEMORY_INFO=45

};

enum 
{
    NOBOX,
    OKBOX,
    FORMATBOX,
    FORMATING,
    FORMAT_CLEARED,
    FORMAT_ERROR,
    SAVEBOX,
    SAVEOVERBOX,
    SAVE_ERROR,
    LOADBOX,
    LOAD_ERROR,
    LOAD_OK,
    SAVE_OK,
    NO_FREE_BLOCKS
};

enum
{
    SYSMEM,
    CARTMEM,
    BOTHMEM,
    NOMEM,
    OVERCART,
    OVERSYS,
    OVERGEN
};

enum 
{
    LOADBUTTON,
    SAVEBUTTON,
    NOBUTTON        
};

enum 
{

    NORMAL_LOAD_BUTTON = 1,
    NORMAL_SAVE_BUTTON = 2,
    HIDE_LOAD_BUTTON = 4,
    REVEAL_LOAD_BUTTON = 8,
    HIDE_SAVE_BUTTON = 16,
    REVEAL_SAVE_BUTTON = 32,

};



    int32 Load_Save(void);
    void draw_loadsave(short selected, short pressed, uint8 playernum, uint8 type,short MBselected, short editpos, char newname[11], uint16 HideReveal);
    int ExtMem(void);
    int FormatMemory(short);                        
    void DrawMessageBox(short, short, short);
    void DrawBox(void);
    void DrawOKButton(void);
    void DrawFORMATBOX(short, short);
    int GetExistingSaves(short);
    int SaveGame(short,short);
    void StringEdit(short,short);
    int LoadGame(short, short);
    void PutGameData(void);
    void GetGameData(void);
    void DrawLOADBOX(short MBselected, short Device);
    void DrawSAVEBOX(short MBselected, short Device);
    void DoMemInit(void);

    void LoadSavePlayer(short playernum);

    int SavePlayer(short Dev, short slot, short player);
    int LoadPlayer(short Dev, short Slot, short player);
    void GetExistingPlayers(short Dev);
    void GetPlayerData(short player);
    void PutPlayerData(short player);
    int  CheckFreeBlocks(short, int NoBytes);
    int Data2Blocks(int DataSize);
    int FileExists(short, short);
    int NumFreeBlocks(short Dev, short NoBytes);
    void InitAvailableSlots(short);
    int CheckBackupDevices(void);
    void FreeMemLib(void);
    int  CheckBackupInit(void);
    void ShowFormatWarning(short);           
    void DrawMemoryScreen(short Message, short ReqSpace);
    int CheckAvailableSpace(short Dev);
    int ShowOverwriteWarning(short Dev);     
    void DrawNoSaveScreen(short Dev, short selected, short);
    int DeviceFormated(short);          
    int RunCheckBackupDevs(void);
    int ShowNoSaveWarning(short Dev);        
    int BlockDiff(short Dev);
    int SaveOutData(short, short, void*, int);
    int Save_Global(short, short);
    int Save_Tour(short, short);
    int Save_Game(short, short);
    int LoadInData(short,char *,void*);
    void DrawSAVEOVERBOX(short MBselected, short Device);



# 23 "c\\golf1.c" 2

# 1 "h/text.h" 1

    #define     

    

    

    




        #define         extern
        #define         1
    

    #define     TEXT_GROUP_CLUB_S      PE   0
    #define     TEXT_GROUP_CLUB_TYPE        1
    #define     TEXT_GROUP_BALL_VIEW        2
    #define     TEXT_GROUP_CAMERA_VIEW  3
    #define     TEXT_GROUP_CAMERA_REPLAY    4
    #define     TEXT_GROUP_HUMAN_NAMES  5
    #define     TEXT_GROUP_PRO_TOUR     6
    #define     TEXT_GROUP_COURSE_NAMES 7
    #define     TEXT_GROUP_SHOT_TYPES   8
    #define     TEXT_GROUP_GAME_TYPES   9
    #define     TEXT_GROUP_LAND_TYPES   10
    #define     TEXT_GROUP_OPTIONS      11
    #define     TEXT_GROUP_CLIMATE      12
    #define     TEXT_GROUP_SHOT_TYPE_2  13
    #define     TEXT_GROUP_TITLES           14
    #define     TEXT_GROUP_MENU_END_HOLE    15
    #define     TEXT_GROUP_PAR_TYPE     16
    #define     TEXT_GROUP_MISC         17
    #define     TEXT_GROUP_AMM_TOUR     18
    #define     TEXT_GROUP_UNITS            19
    #define     TEXT_GROUP_BOARD            20
    #define     TEXT_GROUP_PLAYER_TYPE  21
    #define     TEXT_GROUP_CLIMATE_CHANGE   22
    #define     TEXT_GROUP_SCORE            23
    #define     TEXT_GROUP_AT_TEE           24
    #define     TEXT_GROUP_COMP_INFO        25
    #define     TEXT_GROUP_TOUR_TYPE        26
    #define     TEXT_GROUP_CONFIRM      27
    #define     TEXT_GROUP_TEE_TIMES        28
    #define     TEXT_GROUP_END_SESSION  29
    #define     TEXT_GROUP_DEMO_MODE        30
    #define     TEXT_GROUP_VR_MODE      31
    #define     TEXT_GROUP_CUT_MESSAGE  32

    #define TEXT_GROUP_MEMORY_WARNING2          0
    #define TEXT_GROUP_MEMORY_WARNING2_NO_SLOTS 1
    #define TEXT_GROUP_CONTINUE                 2
    #define TEXT_GROUP_BLOCK_MESSAGE                3
    #define TEXT_GROUP_MEMORY_WARNING3          4
    #define TEXT_GROUP_MEMORY_WARNING1_SYS      5
    #define TEXT_GROUP_MEMORY_WARNING1_CRT      6
    #define TEXT_GROUP_LOAD_SAVE                    7
    #define TEXT_GROUP_PROWARN                      8
    #define TEXT_GROUP_CC_LOAD          9
    #define TEXT_GROUP_CC_MESSAGE_A         10
    #define TEXT_GROUP_CC_MESSAGE_B         11
    #define TEXT_GROUP_CC_MESSAGE_C         12
    #define TEXT_GROUP_CC_ERROR_MESSAGE_A       13
    #define TEXT_GROUP_CC_ERROR_MESSAGE_B       14
    #define TEXT_GROUP_CC_ERROR_MESSAGE_C       15
    #define TEXT_GROUP_CC_ERROR_MESSAGE_D       16
    #define TEXT_TITLE_SCREEN                       17
    #define TEXT_CREDITS_SCREEN                     18
    #define TEXT_GROUP_RANKING_TITLE                19

    void    Load_Language( void);
    void    Load_Frend_Text(void);
    void    Free_Language( void);

    extern  char psx_set_names[][2][17] 
    
# 170 "h/text.h"

        ;
    

    extern  char *psx_set_names_bugs[]
    






        ;
    

    extern  char psx_set_cheat_names[][2][17] 
    
# 275 "h/text.h"

        ;
    




    extern  char *psx_human_names[]
    
# 294 "h/text.h"

        ;
    

    extern  char *psx_player_type[]
    
# 307 "h/text.h"

        ;
    




    extern  char *nations[] 
    
# 334 "h/text.h"

        ;
    



    extern  char *psx_pro_tour[]
    







        ;
    


    extern  char *psx_amm_tour[] 
    





        ;
    


    extern  char *psx_courses[] 
    





        ;
    




    extern  char *shot_types[] 
    
# 389 "h/text.h"

        ;
    



    extern  char *shot_types_two[] 
    







        ;
    





    extern  char *psx_gametypes[] 
    
# 423 "h/text.h"

        ;
    




    extern  char *psx_landtypes[] 
    
# 442 "h/text.h"

        ;
    


    extern  char *options[] 
    
# 464 "h/text.h"

        ;
    


    extern  char *views_one[]   
    
# 478 "h/text.h"

        ;
    


    extern  char *views_two[]   
    
# 492 "h/text.h"

        ;
    


    extern  char *replay_views_one[]    
    
# 517 "h/text.h"

        ;
    


    extern  char *psx_cond_text[12] 
    
# 538 "h/text.h"

        ;
    


    extern  char *climate_change[12][3] 
    
# 559 "h/text.h"

        ;
    

    extern  char *clubs[]           
    
# 586 "h/text.h"

        ;
    




    extern  char *clubs_two[]
    
# 616 "h/text.h"

        ;
    



    extern  char    *Ball_View_Names[] 
    
# 639 "h/text.h"

        ;
    

    extern  char    *View_View_Names[] 
    
# 660 "h/text.h"

        ;
    


    extern  char    *Shot_Menu_Names[] 
    
# 675 "h/text.h"

        ;
    

    extern  char    *Text_Misc[400] 
    



        ;
    

    extern  char    *Text_Titles[30] 
    



        ;
    

    extern  char    *Text_End_Hole[5] 
    



        ;
    

    extern  char    *Text_Par_Type[8] 
    



        ;
    

    extern  char    *Text_Show_Board[] 
    
# 736 "h/text.h"

        ;
    

    extern  char    *Text_Units[ 3] 
    






        ;
    

    extern  char    *Text_Score[ 4] 
    







        ;
    

    extern  char    *Text_At_Tee[ 3] 
    






        ;
    

    extern  char    *Text_Comp_Info[ 2] 
    





        ;
    

    extern  char    *Text_Tour_Type[ 2] 
    





        ;
    

    extern  char    *Text_Confirm[ 3] 
    






        ;
    

    extern  char    *Text_Tee_Times[ 15] 
    
# 824 "h/text.h"

        ;
    

    extern  char    *Text_End_Session[35] 
    
# 867 "h/text.h"

        ;
    

    #define     TEXT_DEMO_X 160
    #define     TEXT_DEMO_Y 60

    extern  char    *Text_Demo[1] 
    




        ;
    

    
        extern  char    *Text_Cut_Message[] 
        
# 893 "h/text.h"

            ;
        

    
# 911 "h/text.h"


    extern  char    *Text_Memory_W2[7]
    
# 926 "h/text.h"

        ;
    

    
    
    extern  char    *Text_Memory_W2_No_Slots[6]
    
# 944 "h/text.h"

        ;
    

    
    extern  char    *Text_Memory_Continue[3]
    
# 958 "h/text.h"

        ;
    


    
    extern  char    *Text_Memory_Blocks[4]
    
# 974 "h/text.h"

        ;
    

    
    extern  char    *Text_Memory_W3[5]
    
# 990 "h/text.h"

        ;
    

    
    extern  char    *Text_Memory_W1_Sys[7]
    
# 1008 "h/text.h"

        ;
    

    
    extern  char    *Text_Memory_W1_Crt[7]
    
# 1026 "h/text.h"

        ;
    

    extern  char    *Text_Load_Save[61]
    
# 1093 "h/text.h"

        ;
    

    extern  char    *Text_Pro_Warn[6]
    
# 1108 "h/text.h"

        ;
    

    extern  char    *Text_CC_Load[17]
    







        ;
    

    extern  char    *Text_CC_Message_A[18]
    
# 1147 "h/text.h"

        ;
    
    extern  char    *Text_CC_Message_B[15]
    
# 1171 "h/text.h"

        ;
    
    extern  char    *Text_CC_Message_C[15]
    
# 1197 "h/text.h"

        ;
    
    extern  char    *Text_CC_Error_Message_A[15]
    
# 1222 "h/text.h"

        ;
    

    extern  char    *Text_CC_Error_Message_B[15]
    
# 1248 "h/text.h"

        ;
    

    extern  char    *Text_CC_Error_Message_C[15]
    
# 1274 "h/text.h"

        ;
    
    extern  char    *Text_CC_Error_Message_D[15]
    
# 1299 "h/text.h"

        ;
    

    extern  char    *Text_Title_Screen[1]
    






        ;
    
    extern  char    *Text_Credits_Screen[]
    
# 1586 "h/text.h"

        ;
    

    extern  char    *Text_Ranking_Title[2]
    
# 1599 "h/text.h"

        ;
    



# 24 "c\\golf1.c" 2

# 1 "h/game.h" 1

    #define     __GOLF_GAME_H

    
# 1 "h/anim.h" 1

    #define     __GOLF_ANIM_H

    
    

    
# 1 "h/psx.h" 1

#define     __PSX_H



typedef unsigned    char    u_char;
typedef unsigned    short   u_short;
typedef unsigned    long    u_long;

typedef struct  DOTDAT
    {
    short on,
            ya,
            starty,
            sl;

    int32
            cu,
            su,
            vel,
            xvel,
            rxp,
            rzp;
    }DOTDAT;

typedef struct  CdlFILE
    {
    short   size;
    struct
        {
        short   second;
        short minute;
        short   sector;
        }pos;
    }CdlFILE;

typedef struct  DR_MODE
    {
    }DR_MODE;

typedef struct  BLK_FILL
    {
    }BLK_FILL;

typedef struct  SPRT
    {
    short   clut;
    }SPRT;

typedef struct  DRAWENV
    {
    short   ofs[1];
    struct
        {
        short x,y,w,h;
        }clip;
    }DRAWENV;

typedef struct  DISPENV
    {
    }DISPENV;

typedef struct  LINE_F2
    {
    }LINE_F2;

typedef struct  RECT
    {
    long    x,y,h,w;
    }RECT;

typedef struct  MATRIX
    {
    }MATRIX;

typedef struct  VECTOR
    {
    long    vx,vy,vz,a;
    }VECTOR;

typedef struct  SVECTOR
    {
    short   vx,vy,vz,a;
    }SVECTOR;

typedef struct  POLY_F3
    {
    }POLY_F3;

typedef struct  POLY_F4
    {
    }POLY_F4;

typedef struct  POLY_G4
    {
    }POLY_G4;

typedef struct  POLY_G3
    {
    short x0,y0,x1,y1,x2,y2;
    }POLY_G3;

typedef struct  POLY_GT4
    {
    short x0,y0,x1,y1,x2,y2,x3,y3;
    short u0,v0,u1,v1,u2,v2,u3,v3;
    short   clut;
    short   tpage;
    }POLY_GT4;

typedef struct  POLY_FT3
    {
    short   clut;
    }POLY_FT3;

typedef struct  POLY_FT4
    {
    long    *tag;
    char    r0,g0,b0,code;

    short   x0,y0;
    short   x1,y1;
    short   x2,y2;
    short   x3,y3;

    char    u0,v0;
    char    u1,v1;
    char    u2,v2;
    char    u3,v3;

    short   clut;
    short   tpage;
    }POLY_FT4;


# 7 "h/anim.h" 2


    
# 1 "h/golfer.h" 1

    #define     __GOLFER_H

    
# 1 "system/h/world.h" 1

    #define     __WORLD_H

    
    
    
    

    #define     WORLD_MEMORY_TYPE   (memory_raml)
    #define     WORLD_SORTBIN_SIZE  256

    #define     WORLD_ANIMATION_LIST_MEMORY (memory_raml)
    #define     WORLD_MODEL_LIST_MEMORY         (memory_raml)

    #define     WORLD_ANIMATION_LIST_FILE_EXTENTION (".WAN")
    #define     WORLD_MODEL_LIST_FILE_EXTENTION (".WMD")

    #define     WORLD_MODEL_NAME( A, B, C, D) ((uint32)(((A)<<24)|((B)<<16)|((C)<<8)|((D)<<0)))

    typedef struct  world_vector
        {
        int32   X,Y;
        int32   Z;
        int32   Divid;
        }world_vector;

    typedef struct  world_primitive
        {
        struct  world_primitive *Next;
        vdp1_command_table  *Command_Table;
        vdp1_gouraud_table  *Gouraud_Table;
        int32   Depth;
        }world_primitive;

    #define     WORLD_POLYGON_FLAG_Colour       (0x0000)    
    #define     WORLD_POLYGON_FLAG_Texture      (0x0001)    

    #define     WORLD_POLYGON_FLAG_Flat         (0x0000)    
    #define     WORLD_POLYGON_FLAG_Gouraud      (0x0002)    

    #define     WORLD_POLYGON_FLAG_NoLight      (0x0000)    
    #define     WORLD_POLYGON_FLAG_Light        (0x0004)    

    #define     WORLD_POLYGON_FLAG_OneSide      (0x0010)    
    #define     WORLD_POLYGON_FLAG_TwoSides (0x0000)    

    #define     WORLD_POLYGON_SORT          (0x0060)
    #define     WORLD_POLYGON_SORT_Average  (0x0000)
    #define     WORLD_POLYGON_SORT_Near     (0x0020)
    #define     WORLD_POLYGON_SORT_Far      (0x0040)

    #define     WORLD_POLYGON_FLAG_2D       (0x0080)
    #define     WORLD_POLYGON_FLAG_MODE     ((uint32)0x0F00)
    #define     WORLD_POLYGON_FLAG_DONOTPROCESS (0x80000000)

    #define     WORLD_POLYGON_FLAG_Mesh     (0x4000)
    #define     WORLD_POLYGON_FLAG_FLIP     (0x2000)
    #define     WORLD_POLYGON_FLAG_MIRROR   (0x1000)

    typedef struct  world_animation_control
        {
        
            uint8   Angle_X;
            uint8   Angle_Y;
            uint8   Angle_Z;
            uint8   Index;
        
# 81 "system/h/world.h"

        int16   Offset_X;
        int16   Offset_Y;
        int16   Offset_Z;
        }world_animation_control;

    typedef struct  world_animation
        {
        uint16  Number_Frames;
        uint16  Number_Matrices;
        world_animation_control *Matrices;           
        }world_animation;

    typedef struct  world_animation_list
        {
        uint32  Number_Animations;

        world_animation *Animations;
        }world_animation_list;

    typedef struct  world_polygon
        {
        int32   Flags;       
     

        uin         r_Ambient;       
        uint16  Colour_Diffuse;      

        uint16  IndexTL;         
        uint16  IndexTR;         
        uint16  IndexBR;         
        uint16  IndexBL;         
        }world_polygon;

    typedef struct  world_polygon_list
        {
        uint32  Number_Polygons;
        world_polygon   *Polygons;
        }world_polygon_list;

    typedef struct  world_vector_list
        {
        uint16  Number_Vectors;
        uint16  Box_X;
        uint16  Box_Y;
        uint16  Box_Z;
        int32       Radius;
        vector  *Vectors;
        normal  *Normals;
        }world_vector_list;

    typedef struct  world_object
        {
        struct  world_object    *Next;
        struct  world_object    *Along;
        struct  world_object    *Inside;

        void    (*Matrix_Multiply)(matrix*,matrix*,matrix*);

        world_polygon_list  *Polygon_List;
        world_vector_list   *Vector_List;
        screen_texture_list *Texture_List;

        matrix  Matrix;
        matrix  New_Matrix;
        }world_object;

    typedef struct  world_model
        {
        uint32  Name;
        world_polygon_list  *Polygon_List;
        world_vector_list       *Vector_List;
        }world_model;

    typedef struct  world_model_list
        {
        uint32  Number_Models;
        world_model *Models;
        }world_model_list;

    typedef struct  world_data
        {
        uint32  Number_Primitives;
        world_primitive *Primitive_First;
        world_primitive *Primitive_Last;
        world_primitive *Primitive_Present;
        world_primitive *Primitive_Old;

             
             
        world_primitive **SortBinA;
        world_primitive **SortBinB;

        vdp1_command_table  *First_Command_Table;
        vdp1_command_table  *Last_Command_Table;

        uint32  Number_Vectors;
        world_vector    *Vectors;
        }world_data;

         
         
         
    void    World_Free_Model_List(world_model_list *Model_List);
    void    World_Free_Animation_List(world_animation_list *Animation_List);

    world_model_list*               World_Load_Model_List(char *Filename);
    world_animation_list*       World_Load_Animation_List(char *Filename);

    int32                               World_Control_To_Matrix(world_animation_control *Control, matrix *Matrix);
    world_animation_control*    World_Find_Animation_Control( world_animation *Anim, int32 Frame, int32 Index);
    int32                               World_Find_Model_Object_Index( world_model_list *List, uint32 Name);

         
         
         
    void    World_Light_Set_Colours( uint8 AR,uint8 AG,uint8 AB,uint8 DR,uint8 DG,uint8 DB);
    void    World_Light_Set_Direction(trig_fixed X, trig_fixed Y, trig_fixed Z);
          rld_Set_Perspective(uint32    Depth);
    void    World_Add_And_Draw(world_object *Object, matrix *Matrix);
    void    World_Add(world_object *Object, matrix *Matrix);
    void    World_Draw(void);

    int32   World_Init(uint32 Number_Primitives, uint32 Number_Vectors);
    void    World_Perspective_Transform_Vectors( vector *Vectors_Old, world_vector *Vector_New, matrix *Matrix, uint32 Count);

         
         
         
    vdp1_colour World_Calc_Colour(uint16    Ambient, uint16 Diffuse, int8 ACos);
    vdp1_colour World_Calc_Ambient_Colour(uint16    Ambient);
    vdp1_colour World_Calc_Diffuse_Colour(uint16 Diffuse, int8 ACos);

    void            World_Normal_To_ACos( normal *Normals, matrix *Matrix, uint32 Count);
    void            World_Start_Primitive_List(void);
    void            World_Sort_Primitives(void);
    world_primitive*    World_Get_Next_Primitive(void);

    void            World_Polygon_Create(world_polygon *Polygon, world_object *Object, world_vector *Vectors, world_vector_list *Vector_List);
    uint8       World_Polygon_Seen(world_polygon *Polygon, world_vector *Vectors);
    void            World_Process_3D_Polygon_Fast(world_polygon *Polygon, world_object *Object, world_vector *Vectors, world_vector_list *Vector_List);
    void            World_Process_3D_Polygon_Fast_Asm(world_polygon *Polygon, world_object *Object, world_vector *Vectors, world_vector_list *Vector_List);
    void            World_Process_3D_Polygon(world_polygon *Polygon, world_object *Object, world_vector *Vectors, world_vector_list *Vector_List);
    void            World_Process_2D_Polygon(world_polygon *Polygon, world_object *Object, world_vector *Vectors, world_vector_list *Vector_List);
    void            World_Process_Polygon_List(world_object *Object, world_polygon_list *Polygon_List, world_vector *Vectors, world_vector_list *Vector_List);

    uint32      World_Bound( int32 X, int32 Y, int32 Z, int32 Radius);
    void    World_Shadow_Find_Highest( vector *Vectors, int32 Count);
    void    World_Add_Shadows(world_object *Object, matrix *Matrix);

# 4 "h/golfer.h" 2


         
         
         
    #define     GOLFER_TWEEN 0
    #define     GOLFER_TWEEN_MAX_INDEX ((int32)20)
         
    #define     GOLFER_TWEEN_TIME   500

         
    #define     GOLFERS_MAX 4
    #define     GOLFER_MAX_TYPES    5

         
    typedef enum    golfer_skin
        {
        GOLFER_TYPE_WHITE_RED=0,
        GOLFER_TYPE_WHITE_GREEN,
        GOLFER_TYPE_WHITE_BLUE,
        GOLFER_TYPE_WHITE_YELLOW,
        GOLFER_TYPE_WHITE_BLACK,
        GOLFER_TYPE_BLACK_RED,
        GOLFER_TYPE_BLACK_GREEN,
        GOLFER_TYPE_BLACK_BLUE,
        GOLFER_TYPE_BLACK_YELLOW,
        GOLFER_TYPE_BLACK_BLACK,
        GOLFER_TYPE_STTNG,
        GOLFER_TYPE_NONE
        }golfer_skin;

    #define     GOLFER_TYPE_TEXTURE_FILENAME    ""

         
    #define     GOLFER_MALE_NAME    "MALE\\"
    #define     GOLFER_FEMALE_NAME  "FEMALE\\"

    #define     GOLFER_MAX_GENDERS  2

    typedef enum    golfer_gender
        {
        GOLFER_GENDER_MALE = 0,
        GOLFER_GENDER_FEMALE = 1
        }golfer_gender;

    #define     GOLFER_MALE_RF_REF  ((uint32)(('R'<<24)|('_'<<16)|('f'<<8)|('o')))
    #define     GOLFER_MALE_LF_REF  ((uint32)(('L'<<24)|('_'<<16)|('f'<<8)|('o')))
    #define     GOLFER_MALE_HAND_REF    ((uint32)(('r'<<24)|('_'<<16)|('h'<<8)|('a')))
    #define     GOLFER_MALE_HAND_B_REF  ((uint32)(('L'<<24)|('_'<<16)|('h'<<8)|('a')))

    #define     GOLFER_PUTT_REF ((uint32)(('P'<<24)|('U'<<16)|('T'<<8)|('T')))
    #define     GOLFER_WOOD_REF ((uint32)(('W'<<24)|('O'<<16)|('O'<<8)|('D')))
    #define     GOLFER_WEDG_REF ((uint32)(('W'<<24)|('E'<<16)|('D'<<8)|('G')))

    #define     GOLFER_FEMALE_RF_REF    ((uint32)(('R'<<24)|('_'<<16)|('f'<<8)|('o')))
    #define     GOLFER_FEMALE_LF_REF    ((uint32)(('L'<<24)|('_'<<16)|('f'<<8)|('o')))
    #define     GOLFER_FEMALE_HAND_REF  ((uint32)(('L'<<24)|('_'<<16)|('f'<<8)|('o')))
    #define     GOLFER_FEMALE_HAND_B_REF    ((uint32)(('R'<<24)|('_'<<16)|('f'<<8)|('o')))
    #define     GOLFER_FEMALE_CLUB_REF  ((uint32)(('L'<<24)|('_'<<16)|('f'<<8)|('o')))

         
    #define     GOLFER_FPS  20

    typedef enum    golfer_anim_state
        {
        GOLFER_STOPED,
        GOLFER_ANIMATING
        }golfer_anim_state;

    typedef enum    golfer_anim_group
        {
        GOLFER_ANIM_GROUP_STANDARD=0,
        GOLFER_ANIM_GROUP_WAIT_TEE,
        GOLFER_ANIM_GROUP_WAIT_FAIRWAY,
        GOLFER_ANIM_GROUP_WAIT_GREEN,
        GOLFER_ANIM_GROUP_SHOT_NORMAL,
        GOLFER_ANIM_GROUP_SHOT_FADE,
        GOLFER_ANIM_GROUP_SHOT_DRAW,
        GOLFER_ANIM_GROUP_SHOT_HOOK,
        GOLFER_ANIM_GROUP_SHOT_SLICE,
        GOLFER_ANIM_GROUP_SHOT_CHIP,
        GOLFER_ANIM_GROUP_SHOT_CHIP_RUN,
        GOLFER_ANIM_GROUP_SHOT_PITCH,
        GOLFER_ANIM_GROUP_SHOT_PUNCH,
        GOLFER_ANIM_GROUP_SHOT_PUTT_SOFT,
        GOLFER_ANIM_GROUP_SHOT_PUTT_HARD,
        GOLFER_ANIM_GROUP_SHOT_BUNKER,
        GOLFER_ANIM_GROUP_SHOT_SLOPE_UP,
        GOLFER_ANIM_GROUP_SHOT_SLOPE_DOWN,
        GOLFER_ANIM_GROUP_SHOT_INCLINE_UP,
        GOLFER_ANIM_GROUP_SHOT_INCLINE_DOWN,
        GOLFER_ANIM_GROUP_AFTER_PUTT,
        GOLFER_ANIM_GROUP_NONE
        }golfer_anim_group;

    typedef struct  golfer_animations
        {
        world_model_list    *Models;
        world_animation_list    *Standard;
        world_animation_list    *Extra;
        }golfer_animations;

    typedef enum    golfer_state
        {
        GOLFER_STATE_None,
        


        GOLFER_STATE_Animation
        }golfer_state;

    typedef struct  golfer_player
        {
        golfer_gender   Gender;
        golfer_skin     Type;
        }golfer_player;

    typedef struct  golfer
        {
        uint32          Animation_Number;
        golfer_anim_group   Animation_Group;
        uint32          Golfer;
        golfer_state    State;
        world_animation_list    *Animation_List;
        world_animation *Animation;
        uint32          Frame_Number;
        uint32          Time;
        }golfer;

    screen_texture_list*    Golfer_Load_Textures( golfer_skin Type, golfer_gender Gender);
    void Golfer_Free_Textures( void);

    int32   Golfer_Animating(void);
    int32   Golfer_Get_Animation( void);

    void    Golfer_Set_Player( uint32 Player_Number, int32 Skin, int32 Colour);
    void    Golfer_Set_Position( int32 X, int32 Y, int32 Z, int32 Angle);
    void    Golfer_Set_Animation_Finish( void);
    void    Golfer_Set_Animation( int32 Animation);
    void    Golfer_Set_Extra_Animation( int32 Animations);

    golfer_anim_state   Golfer_Update(void);

    void    Golfer_Draw_Model(void);
    golfer_anim_state   Golfer_Draw(void);

    void    Golfer_Setup_Golfer_Data( uint32 Golfer);

    void    Golfer_Free_Anims( void);
    void    Golfer_Load_Anims( golfer_anim_group Type);
    void    Golfer_Initalise_Animations( register golfer_animations *Golfer_Anims, char *Filename);
    int32   Golfer_Initalise( golfer_player *Golfer_Players, uint32 Number_Players);
    void    Golfer_Close(void);

    void            Golfer_Find_Anim_Hand_Vector( vector *Vector);
    void            Golfer_Find_Anim_Club_Vector( vector *Vector);
    void            Golfer_Find_Anim_Vector( vector *Vector);
    trig_angle  Golfer_Find_Anim_Angle( void);

    void            Golfer_Find_Shadow_Grad( void);
    void            Golfer_Shadow_Reset( void);

    void            Golfer_Test_Anim(void);

    void            Golfer_Tween_End( void);
    void            Golfer_Tween_Start( void);
    golfer_anim_state Golfer_Tween( void);


# 9 "h/anim.h" 2


         
    #define     ANIM_TIME_WAIT  45000

    #define     ANIM_LENGTH_Walk    90
    #define     ANIM_LENGTH_Step_Long   38
    #define     ANIM_LENGTH_Step_Medium 29
    #define     ANIM_LENGTH_Step_Short  26

    typedef enum    anim_anim
        {
        ANIM_ANIM_Stand,
        ANIM_ANIM_Wait,
        ANIM_ANIM_Shot1,
        ANIM_ANIM_Shot2,
        ANIM_ANIM_Shot3,
        ANIM_ANIM_Stance,
        ANIM_ANIM_End,
        ANIM_ANIM_None
        }anim_anim;

    typedef enum    anim_section
        {
        ANIM_SECTION_Bunker,
        ANIM_SECTION_Green,
        ANIM_SECTION_Fairway,
        ANIM_SECTION_Tee,
        ANIM_SECTION_None
        }anim_section;

    typedef enum    anim_action
        {
        ANIM_ACTION_None,            
        ANIM_ACTION_Stand,       
        ANIM_ACTION_Stance,
        ANIM_ACTION_Shot,
        ANIM_ACTION_Wait,
        ANIM_ACTION_End
        }anim_action;

     
     
     

    typedef struct  anim_action_data_stance
        {
        golfer_anim_group   Group;
        }anim_action_data_stance;

     
     
     

    typedef enum    anim_action_shot
        {
        ANIM_ACTION_SHOT_Start,
        ANIM_ACTION_SHOT_Middle,
        ANIM_ACTION_SHOT_End
        }anim_action_shot;

    typedef struct  anim_action_data_shot
        {
        anim_action_shot    Action;
        golfer_anim_group   Group;
        uint32  Animation_Playing;
        }anim_action_data_shot;

     
     
     

    typedef enum    anim_action_wait
        {
        ANIM_ACTION_WAIT_TEE,
        }anim_action_wait;

    typedef struct  anim_action_data_wait
        {
        anim_action_wait    Action;
        uint8   Tee_In_Ground;

        int16   Golfer_Pos_X;
        int16   Golfer_Pos_Y;
        int16   Golfer_Pos_Z;
        int16   Golfer_Pos_Angle;

        int32   Animation;

        anim_action Action_Old;
        SVECTOR Camera_Angle;
        VECTOR  Camera_Vector;
        int32   Dist_From_Golfer;
        int32   Height_Above_Ground;
        char    Movemode_Type;
        int8    Arc_On;
        }anim_action_data_wait;

     
     
     

    typedef union   anim_action_data
        {
        anim_action_data_shot   Shot;
        anim_action_data_stance Stance;
        anim_action_data_wait   Wait;
        }anim_action_data;

    typedef struct  anim_data
        {
        anim_action_data    Action_Data;     

        anim_section    Section;     
        anim_action     Action;  

        uint32  Time;                

        uint8   Selected_Golfer;     
        }anim_data;

    void    Anim_Init( void);

    golfer_anim_state   Anim_Update( pad_data Pad);
    void    Anim_Update_Position( int32 X, int32 Y, int32 Z, trig_angle Angle);
    void    Anim_Update_Stance( void);

    golfer_anim_group   Anim_Calc_Stance_Hill( void);
    golfer_anim_group   Anim_Calc_Stance_Group( void);

    void    Anim_Setup_End( void);
    void    Anim_Setup_Wait( void);
    void    Anim_Setup_Stance( void);
    void    Anim_Setup_Shot1( void);
    void    Anim_Setup_Shot2( void);
    void    Anim_Setup_Shot3( void);

    void    Anim_Set_Location( anim_section);
    void    Anim_Set_Animation( anim_anim Anim);

# 4 "h/game.h" 2

    
    

    #define     GAME_MAP_OFFSET_X   ((int32)200)
    #define     GAME_MAP_OFFSET_Y   ((int32)10)

    #define     GAME_MAP_SIZE_X ((int32)100)
    #define     GAME_MAP_SIZE_Y ((int32)100)

    #define     BALL_SIZE_X (4)
    #define     BALL_SIZE_Z (4)

    void    Game_Print_Map(void);
    void    Game_Walk_Hole(void);
    void    Game_Start(uint32   Course_Number, uint32 Hole_Number);

    void    Camera_Set_Angle( int32 X, int32 Y, int32 Z);
    void    Camera_Set_Position( int32 X, int32 Y, int32 Z);

    void    Ball_Draw(void);
    void    Ball_Set_Position( int32 X, int32 Y, int32 Z);

    void    Hole_Draw(void);
    void    Hole_Set_Position( int32 X, int32 Z);

    uint32  Ball_Find_Highest(uint32 Start, uint32 End);

    typedef enum    game_shot_quality
        {
        GAME_SHOT_VERYGOOD,
        GAME_SHOT_GOOD,
        GAME_SHOT_AVERAGE,
        GAME_SHOT_BAD,
        GAME_SHOT_VERYBAD,
        GAME_SHOT_SPECIAL
        }game_shot_quality;

    typedef struct  game_shot_info
        {
        vector  Start;
        vector  End;
        int32 Start_Ground_Type;
        int32 End_Ground_Type;
        int32 Power;
        }game_shot_info;

    typedef enum    partical_type
        {
        PARTICAL_TYPE_NONE,
        PARTICAL_TYPE_WATER,
        PARTICAL_TYPE_ROUGH,
        PARTICAL_TYPE_TEE,
        PARTICAL_TYPE_BUNKER_IN,
        PARTICAL_TYPE_BUNKER_OUT
        }partical_type;

    typedef struct  game_shot_partical
        {
        int32   Index;
        int32   Type;
        }game_shot_partical;

    typedef struct  game_shot
        {
        game_shot_info  Shot_Aim;
        game_shot_info  Shot_Hit;

        game_shot_quality Quality;
        game_shot_quality   Pos_Quality;
        int32   Comm_File;
        int32   Comm_Sound_Swing;
        int32 Comm_Sound_Air;
        int32 Comm_Sound_Land;
        int32 Comm_Pos_File;
        int32 Comm_Pos_Sound;

             
        golfer_anim_group   Anim_Group;
        int32   Anim_Number;
        int32   Anim_End_Number;

             
        int32   Anim_Pot_Number;
            
             
        int32   Power_Angle;
        int32 Hit_Angle;

             
        game_shot_partical  Partical_Hit;
        game_shot_partical  Partical_Special;

             
        int32   Ball_Hide_Index;
        }game_shot;

    void    Game_Shot_Info_Save( game_shot_info *Info);
    void    Game_Shot_Calc_Quality( void);

# 25 "c\\golf1.c" 2

# 1 "h/credits.h" 1

    #define     __CREDITS_H

    void ShowCredits(void);
    void DrawShowCredits(int);
    void DrawHeading(void);




# 26 "c\\golf1.c" 2


# 1 "h/map.h" 1

    #define     __GOLF_MAP_H

    
    
    

    
# 1 "h/psmdef.h" 1

    #define     __PSMDEF_H

    typedef enum    option_type
        {
        OPTION_TYPE_MAP = 0,
        OPTION_TYPE_GRID_GREEN,
        OPTION_TYPE_GRID_ZONE,
        OPTION_TYPE_GIMMIES,
        OPTION_TYPE_MULLIGANS,
        OPTION_TYPE_CADDIE,
        OPTION_TYPE_HANDICAP,
        OPTION_TYPE_ARC_PRO,
        OPTION_TYPE_ARC_ON,
        OPTION_TYPE_SOUND,
        OPTION_TYPE_COMMENTRY,
        OPTION_TYPE_SAVE,
        OPTION_TYPE_QUIT,
        OPTION_TYPE_END
        }option_type;

    typedef enum    shot_type
        {
        SHOT_Normal = 0,
        SHOT_Chip,
        SHOT_Run,
        SHOT_ChipRun,
        SHOT_Pitch,
        SHOT_Punch
        }shot_type;

    #define     MENU_COLOUR 80
    #define     MENU_SHADE  50
    #define     MENU_INDENT_X   5
    #define     MENU_INDENT_Y   15
    #define     MENU_SPACING_Y  14
    #define     MENU_GRAY   32
    #define     MENU_TICK   0
    #define     MENU_TICK_STRING    "@"
    #define     MENU_ITEMS  12
    #define     MENU_SHADOW NOFONTSHADOW

    #define  DRY            0
    #define  DAMP           1
    #define  WET            2
    #define  CALM           0
    #define  BREEZY     1
    #define  WINDY          2


    #define     TIME_OUT        60*60
    #define     TESTING     0
    #define     CLASSIC_COURSES  0
    #define     MAG_DEMO  0
    #define     PUTTING_PRACTICE    0

         
    #define     NTC             0
    #define     THE_DEMO        0


    #define     POLL_HOST pollhost();
    #define     FROM_CD 0

     
     


    #define     PAL_VERSION         1
    #define     BALL_LOGIC_RATE 50
    #define     DEBUG_ONLY          0

    #define     NO_TREE_COLLISION   0
    #define     EASY_GAME           0


    #define     SHOW_LAND_AT_ARC_END 0
    #define     SHOW_TREE_HIT_IN_ARC 1


    #define     DO_A_DEMO           0
    #define     NO_OF_HOLES         18
    #define     FULLMENU                0
    #define     SMALLMENU           0
    #define     MAP_EDIT                0
    #define     UPDATE_GOLFER_POS   1
    #define     PERFECT_SHOT        0
    #define     SAVE_SCREEN_PIC 0

    #define     AUTO_CAM                1
    #define     GOLFER_3D           1
    #define     NO_TREES                0
    #define     TREEOPTFIX          1


    #define     GEOM_OFFSET_X       160
    #define     GEOM_OFFSET_Y       70



    #define GOLF_EXIT           0
    #define GO                  0
    #define JUNE_DEMO           0


    #define NOBUFF              0


    #define COMP_PLYS           0
    #define STAT_ERROR      1


    #define RNDGEN              50

    #define PSX_TOT_PLAY        88

    #define PLAY_MAX            4

    #define MAX_COURSES     30
    #define NEW_COURSES     0



    #define LEADER_BOARD        64


    #define PSX_CLUBS           19
    #define PSX_BAG         16


    #define PSX_STATS           22

    #define PSX_TOT_STATS   32


    #define FUNDS               64
    #define PERCS               16


    #define MPLAY_MAX           16


    #define AMM_MALE            0
    #define AMM_FEMALE      1
    #define PRO_MALE            2
    #define PRO_FEMALE      3


    #define PRACTICE        0
    #define STROKEPLAY  1
    #define MATCHPLAY       2
    #define SKINS             
    #define FOURBALL        4
    #define FOURSOME        5
    #define AMM_TOUR        6
    #define PRO_TOUR        7


    #define PRACTICE_PLAYER 0



    #define UP                  0
    #define DOWN                1
    #define LEFT                2
    #define RIGHT               3
    #define ZERO                0
    #define STRDOWN         1
    #define STRUP               2
    #define SHRDOWN         3
    #define SHRUP               4
    #define STRLEFT         1
    #define STRRIGHT            2
    #define SHRLEFT         3
    #define SHRRIGHT            4


    #define CADDY               1
    #define NO_CADDY            0


    #define     CLUB_D1         0
    #define     CLUB_2W         1
    #define     CLUB_3W         2
    #define     CLUB_4W             3
    #define     CLUB_5W         4
    #define     CLUB_6W             5
    #define  CLUB_1I            6
    #define     CLUB_2I             7
    #define     CLUB_3I         8
    #define     CLUB_4I         9
    #define     CLUB_5I             10
    #define     CLUB_6I             11
    #define     CLUB_7I             12
    #define     CLUB_8I             13
    #define     CLUB_9I             14
    #define     CLUB_SW             15
    #define     CLUB_PW             16
    #define     CLUB_LW             17
    #define     CLUB_PT             18



    #define     SHOT_STRAIGHT  0
    #define     SHOT_FADE       1
    #define     SHOT_DRAW       2


    #define  LEAVE              0
    #define  HIT_BALL           1


    #define  MOVE_MODE      0
    #define  PLAY_MODE      1
    #define  ICON_MODE      2
    #define  PUTT_MODE      3

    #define     USE_SUBGRID 0

    #define     AWORD   2                                   
    #define     ALONG   4                                   


    #define     SCR_Z       (512)                           
    #define     OTSIZE  (1)                 






    #define     SCR_START_X                 0
    #define     SCR_START_Y                 0
    #define     SCR_WID                     320
    #define     SCR_HGT                     256

    #define     SUB_GRID_COUNT              192
    #define     SUB_GRID_SIZE               4

    #define     MAX_TREE_PRIMS          1
    #define     MAX_TREE_SHAD_PRIMS 1


    #define     POLY_YARDS      10
    #define     POLY_SIZE       440                 
    #define     YARD                POLY_SIZE/10
    #define     GWID                1
    #define     TOTAL_GWID      GWID*GWID

    #define     DIST_FROM_BALL POLY_SIZE*3



    #define     DEPTH150            (POLY_SIZE*2/4)
    #define     DEPTH300            (POLY_SIZE*4/4)
    #define     DEPTH600            (POLY_SIZE*8/4)
    #define     USE_HGTS            1


    #define     VRAM_TEMPICONX  832
    #define     VRAM_TEMPICONY  256

    #define     DRAWSCR         1
    #define     DISPSCR         0


    #define     NO_OF_LAND_TEXTURES 96
    #define     VRAMLAND1X      320                 
    #define     VRAMLAND1Y      0                       
    #define     VRAMLAND2X      320+64              
    #define     VRAMLAND2Y      0                       

    #define     VRAMLAND3X      320
    #define     VRAMLAND3Y      256 
    #define     VRAMLAND4X      320+64
    #define     VRAMLAND4Y      256         

    #define     VRAMLAND5X      448
    #define     VRAMLAND5Y      0
    #define     VRAMLAND6X      448+64
    #define     VRAMLAND6Y      0

    #define     VRAMBACKX       576                 
    #define     VRAMBACKY       0
    #define     BACKW               256
    #define     BACKH               100


    #define     VRAMTREEM1X     448
    #define     VRAMTREEM1Y     256
    #define     VRAMTREEM2X     704
    #define     VRAMTREEM2Y     0

    #define     VRAMTREESX      704                 
    #define     VRAMTREESY      256

    #define     VRAMTREETX      704                 
    #define     VRAMTREETY      256                 

    #define     VRAM_HOLEMAP_X  832
    #define     VRAM_HOLEMAP_Y 256



    
    #define     sub_grid_used           0x8001a408      
    #define     sub_grid_map            0x8001a508      
    #define     sub_grid_vecs           0x80022508      
    #define     sub_grid_text_types 0x8002a508      
                                         
    



    #define     BACK_GR_START   5
    #define     COSINE  SINE+256


    #define     TREE_GR_START       9
    
    #define     SUBTEXT_GR_START    29

    #define     NEWLAND_GR_START    0

    #define     VRAM_TEMP_X         704
    #define     VRAM_TEMP_Y         480
    #define     VRAM_STAT_GOLFER_Y 100

    #define     VRAM_ICON_X 576
    #define     VRAM_ICON_Y 256




    #define     xzfix 2


     
    #define     CHARSET1    0
    #define     CHARSET2    1
    #define     CHARSET3    2
    #define     CHARSET4    3

    #define     NOFONTSHADE 0
    #define     FONTSHADE1  1
    #define     FONTSHADE2  2
    #define     FONTSHADE3  3
    #define     FONTSHADE4  4
    #define     FONTSHADE5  5
    #define     FONTSHADE6  6
    #define     FONTSHADE7  7
    #define     FONTSHADE8  8
    #define     FONTSHADE9  9
    #define     FONTSHADE10 10
    #define     FONTSHADE11 11
    #define     FONTSHADE12 12
    #define     FONTSHADE13 13
    #define     FONTSHADE14 14

    #define     FONT_COLOUR_NONE                0
    #define     FONT_COLOUR_BLACK               1
    #define     FONT_COLOUR_WHITE               2
    #define     FONT_COLOUR_RED             3
    #define     FONT_COLOUR_GREEN               4
    #define     FONT_COLOUR_BLUE                5
    #define     FONT_COLOUR_RGB             6
    #define     FONT_COLOUR_LIGHT_GREY      7
    #define     FONT_COLOUR_GREY                8
    #define     FONT_COLOUR_GRAD_RED            9
    #define     FONT_COLOUR_LIGHT_RED       10
    #define     FONT_COLOUR_LIGHT_BLUE      11
    #define     FONT_COLOUR_YELLOW          12
    #define     FONT_COLOUR_PALE                13
    #define     FONT_COLOUR_ORANGE          14
    #define     FONT_COLOUR_Orange          15

    #define     FONTFULL        0
    #define     FONTHALF        1

    #define     NOFONTSHADOW 0
    #define     FONTSHADOW  1



     

    #define     NOTRANS 0
    #define     TRANS1  1
    #define     TRANS2  2
    #define     TRANS3  3
    #define     TRANS4  4


    #define     BORDER1 0
    #define     BORDER2 1
    #define     BORDER3     2
    #define     BORDER4     4
    #define     NOBORDER 3



    #define     SHAD            1
    #define     NOSHAD      0



     

    #define     HIT_AREA_OK 1024                    
    #define     HIT_AREA_R  0                       
    #define     ERROR_R     475                 

    #define     SHOWPOWER   1
    #define     NOSHOWPOWER 0

    #define     ON_TEE  0
    #define     ROUGH       1
    #define     FAIR        2
    #define     GREEN       3
    #define     BUNK        4
    #define     WATER       5
    #define     ROAD        6
    #define     HROUGH  7

    #define     ICON_ARROW_UP       20
    #define     ICON_ARROW_DOWN 21

    #define     LAND_ICON_START 1
    #define     BALL_ICON       7
    #define     HOLE_ICON       9
    #define     MENU_ICON0      10
    #define     MENU_ICON1      12
    #define     MENU_ICON2      15
    #define     MENU_ICON3      17
    #define     MENU_ICONL      13
    #define     MENU_ICONR      14
    #define     MENU_ICONT      11
    #define     MENU_ICONB      16
    #define     BALL_ICON_MFLI      18

    



        #define     MOVEMODE_LO_Y   200
        #define     MOVEMODE_HI_Y   1000
    

    #define     MOVEMODE_MIN_DIST   POLY_SIZE/2
    #define     MOVEMODE_MAX_DIST   POLY_SIZE*4

    #define     MOVEMODE_Y_INC ((MOVEMODE_HI_Y - MOVEMODE_LO_Y)/200)
    #define     MOVEMODE_Y_DEC (-MOVEMODE_Y_INC)

    #define     MOVEMODE_MIN_ANG_X  0
    #define     MOVEMODE_MAX_ANG_X  0x400

        #define     MOVEMODE_TIME_DEFAULT   20
        #define     MOVEMODE_TIME_ACC           3000

             
        #define     MOVEMODE_TIME_ANG_Y( TIME)  (((TIME)*0x1000) / 11000)
             
        #define     MOVEMODE_TIME_DFG_F( TIME)  (((TIME)*(440*64)) / 25000)
             
        #define     MOVEMODE_TIME_Y( TIME)      (((TIME)*(MOVEMODE_HI_Y - MOVEMODE_LO_Y)) / (7000))
             
        #define     MOVEMODE_TIME_DFG( TIME)    (((TIME)*(MOVEMODE_MAX_DIST-MOVEMODE_MIN_DIST)) / (7000))

        #define     ARC_TIME_DIST( TIME)    (((TIME) * (100))/7000)
        #define     ARC_TIME_ROT( TIME) (((TIME) * (0x1000))/20000)

        #define     MOVEMODE_ANG_Y_INC (0x1000 / 200)
        #define     MOVEMODE_ANG_Y_DEC (-MOVEMODE_ANG_Y_INC)

        #define     MOVEMODE_DFG_F_INC  ((MOVEMODE_MAX_DIST - MOVEMODE_MIN_DIST)/100)
        #define     MOVEMODE_DFG_F_DEC  (-MOVEMODE_DFG_F_INC)

        #define     MOVEMODE_DFG_P_INC  ((MOVEMODE_MAX_DIST - MOVEMODE_MIN_DIST)/4000)
        #define     MOVEMODE_DFG_P_DEC  (-MOVEMODE_DFG_P_INC)

        #define     MOVEMODE_ANG_X_INC  ((MOVEMODE_MAX_ANG_X - MOVEMODE_MIN_ANG_X)/4000)
        #define     MOVEMODE_ANG_X_DEC  (-MOVEMODE_ANG_X_INC)

    #define     MOVEMODE_CALC_ANG_X( HIGH)  ((((MOVEMODE_MAX_ANG_X - MOVEMODE_MIN_ANG_X)*((HIGH)-MOVEMODE_LO_Y))/(MOVEMODE_HI_Y-MOVEMODE_LO_Y))+MOVEMODE_MIN_ANG_X)

     
    #define     CAM_BALL_NO     12
    #define     CAM_REPLAY_NO   15
    #define     CAM_OOB_NO      1

    #define     CAM_BALL        0
    #define     CAM_REPLAY  (CAM_BALL + CAM_BALL_NO)
    #define     CAM_OOB     (CAM_REPLAY + CAM_REPLAY_NO)

    
# 518 "h/psmdef.h"

        typedef enum    camera_type
            {
            CAM_QD_F,
            CAM_QD_FH,
            CAM_QD_R,
            CAM_QD_RH,
            CAM_QD_V,
            CAM_MV_BB,
            CAM_MV_IB,
            CAM_MV_PAN,
            CAM_MV_SB,
            CAM_QD_EYE,
            CAM_QD_INTD,
            CAM_QD_INTS,
            CAM_MV_BB2,
            CAM_MV_IB2,
            CAM_MV_BB3,
            CAM_MV_IB3,
            CAM_QD_SIDE,
            CAM_MV_PAN_BALL,
            CAM_MV_PAN_AIR,
            CAM_MV_PAN_EYE,
            CAM_INTELLIGENT
            }camera_type;
    




    #define             CAMPOS_FULL     0
    #define             CAMPOS_L            1
    #define             CAMPOS_R            2
    #define             CAMPOS_TL       3
    #define             CAMPOS_TR       4
    #define             CAMPOS_BL       5
    #define             CAMPOS_BR       6

    #define             CAMPOS_TH       7
    #define             CAMPOS_BH       8

    #define             CAM_START       0xfe
    #define             CAM_STOP            0x81
    #define             CAM_DONE            0xff

    #define             CAM_FIRST       0
    #define             CAM_LAST            1




     
    #define     SAMPLE_VOLUME       12000
    #define     MAX_WIND_VOLUME 12000
    #define     MAX_WATER_VOLUME    8000
    #define     MAX_BIRD_VOLUME 9000



    #define     SAMPLE_WIND_CHAN1   20
    #define     SAMPLE_WIND_CHAN2   21
    #define     SAMPLE_WIND_CHAN3   22
    #define     SAMPLE_SEA_CHAN 23

    #define     SAMPLE_INHOLE   0

    #define     SAMPLE_SWING    1
    #define     SAMPLE_SWINGI   2
    #define     SAMPLE_SWINGB   3
    #define     SAMPLE_PUTT1    4
    #define     SAMPLE_PUTT2    5
    #define     SAMPLE_PUTT3    6

    #define     SAMPLE_SWINGR   7
    #define     SAMPLE_SWINGHR  8

    #define     SAMPLE_WATERL   9
    #define     SAMPLE_WATERS   10

    #define     SAMPLE_FLAGHIT  11
    #define     SAMPLE_TREEHIT  12

    #define     SAMPLE_BOUNCES  13
    #define     SAMPLE_BOUNCE   14
    #define     SAMPLE_BOUNCER  15

    #define     SAMPLE_OOH      16
    #define     SAMPLE_CLAP     17
    #define     SAMPLE_GOOD     18
    #define     SAMPLE_VGOOD    19
    #define     SAMPLE_CHAMP    20

    #define     SAMPLE_WIND     21
    #define     SAMPLE_SEA      22

    #define     SAMPLE_BIRD     23
    #define     SAMPLE_BIRD2    24
    #define     SAMPLE_BIRD3    25
    #define     SAMPLE_BIRD4    26


    #define     USE_SAMPLE_SFX          1
    #define     USE_SAMPLE_BIRDS        2
    #define     USE_SAMPLE_WINDWAT  4 
    #define     USE_SAMPLE_CROWDS       8


         
    #define     DIST_YARD   (44)
         
    #define     DIST_FOOT   (14)
         
    #define     DIST_INCH   (1)

    #define     DIST_DIST_TO_INCH( COORD)   ( ((COORD)*(12*3)) >>8)
    #define     DIST_DIST_TO_FEET( COORD)   ( ((COORD)*3) >>8)
    #define     DIST_DIST_TO_YRDS( COORD)   ( ((COORD)) >>8)
    #define     DIST_COORD_TO_DIST( COORD)  ( ((COORD)*(10<<8))/440)
    #define     DIST_COORD_TO_YRDS( COORD) ( DIST_DIST_TO_YRDS( DIST_COORD_TO_DIST( COORD)))

    #define VALFILENM "ACTUAGOLFVL"

# 8 "h/map.h" 2

    
# 1 "h/psmstruc.h" 1

    #define __PSMSTRUCT_H

    
    

    typedef struct
    {
        short crowd ,
        commentary,
        master,
        coursefx,
        music,
        audio;

    } sound_option;

    typedef enum    game_options_commentry
        {
        OPTION_COMMENTRY_ENG1=0,
        OPTION_COMMENTRY_ENG2=1,
        OPTION_COMMENTRY_USA=2,
        OPTION_COMMENTRY_MIX1=3,
        OPTION_COMMENTRY_MIX2=4,
        OPTION_COMMENTRY_MIX3=5,
        OPTION_COMMENTRY_MIX4=6,
        OPTION_COMMENTRY_FRENCH=7,
        OPTION_COMMENTRY_GERMAN=8,
        OPTION_COMMENTRY_JAPANESS=9
        }game_options_commentry;

    typedef struct
    {
        short gimmies ,
        mulligans,
        arc,
        grid,
        hole_map,
        language,
        commentator,
        PartnerType;

    } game_option;

    typedef struct
    {
        char comment[11];
        short no;       
    
    } game_save_info;


    typedef struct
    {
        short weather,
        wind;

    } weather_option;

    typedef struct
    {
        uint16 HitBall,
        ClubSelect,
        BallCam,
        Cancel;
    } joypad_setup;

    typedef enum    movemode_mode
        {
        MOVEMODE_TYPE_BehindGolfer = 0,
        MOVEMODE_TYPE_Eye,
        MOVEMODE_TYPE_AerialPan,
        MOVEMODE_TYPE_Fairway,
        MOVEMODE_TYPE_Green,
        MOVEMODE_TYPE_GreenLeft,
        MOVEMODE_TYPE_GreenRight,
        MOVEMODE_TYPE_GreenHigh,
        MOVEMODE_TYPE_GreenHighLeft,
        MOVEMODE_TYPE_GreenHighRight,
        MOVEMODE_TYPE_GreenAerial,
        MOVEMODE_TYPE_BehindPin,
        MOVEMODE_TYPE_BehindGolfer_Green,
        MOVEMODE_TYPE_Free
        }movemode_mode;

    typedef struct 
    {
        int32   money;
        int32 money_two;

        char name[17];
        int8 level;

        int16 stats[22 ];        
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             

        int8 clubs[19 ];     
        int8 ranking;
        int8 skill;
        int8 handycap;

        int8 card[18];
        int8 Won_Last:4;
        int8 tour:4;
        uint8 male:2;
        uint8 skin_type:2;
        uint8 clothes:4;
    }play_player;

    typedef struct {
        int8 golfer;
        int8 hole;
        int16 score;
        } play_board ;


    typedef struct {
        short   zero;
        short   one;
        short   two;
        short   three;
        short   four;
        short   five;
        short   six;
        short   seven;
        } move_grafic ;


    typedef struct {
        int16       current_score;
        int16   prev_point;
        int16       pos_x;
        int16       pos_z;
        int32       distance_to_hole;
        int32       distance_last_shot;
        int32       money_won;

        int8        player_no;                  
        int8        current_club;
        int8        shots_taken;

        uint8       camera_type:4;
        uint8       track_shot_type:4;

        uint8   hole_fin:1;
        uint8       grid_on:2;
        uint8       human:1;

 
 
 
 
 
 
 
 
 
        } player_data;


    typedef struct {
        long    ball_start_x, ball_start_y, ball_start_z;
        long    ball_end_x,ball_end_z;
        long    ball_yangle;
        long    loft_angle;
        long    winddir;
        long    xwind;
        signed char club_selected;
        long    strikeangle;
        short   usedirec;
        char    fadedraw;
        long    velp;
        short   bally;
        } REPLAY_DATA;


    typedef struct {
        short   x;
        short   y;
        } RTP_COORDS;


    typedef struct {
        char    tm[8];
        char    val0,val1;
        } TEXTMASK;



    typedef struct {
        u_short vx;
        u_short vz;
        } FAIRWAY_POINTS;


    typedef struct {
        short       x,y,w,h;
        long        posx,posy,posz;
        long        angx,angy;

        long        iposx,iposy,iposz;
        long        iangx,iangy;
        long        ihag;

        short       hag;
        char        type;
        char        full;
        char        moving;
        char        sypos;

        char        *cam_ptr;
        char        *cam_next_ptr;
        short       next_cam;
        char        cam_updated;
        char        enlarge;
        char        rotate_y;
        short       tree_block_otz;
        } CAMERA_DATA;

    typedef struct {
        short       x,y,w,h;
        } SCREEN_POS;

    typedef struct {
        short       bx,by,bw,bw2;
        short       bsx,bsy;
        } BALL_SCREEN_POS;







    typedef struct {
        short   vx;
        short   vy;
        short   vz;
        } BALL_DAT;


    typedef struct                                           
    {
    VECTOR  lvec;
    long        level;
    VECTOR  ang;
    } DARKNESS;




    typedef struct                                           
    {
    u_char  tree_type;
    char        xoff,zoff;
    } TREEDAT;



    typedef struct
    {
    POLY_F4 fp;
    DR_MODE fpdm;
    u_short depth;
    } TRANSPOLY;



    typedef struct                                           
    {
    SVECTOR coord;
    short       topy;
    u_short tree_type;
    u_char  do_shad;
    } NEWTREEDAT;



    typedef struct                                           
    {
    short   w;
    short   h;
    } TREEWH;



    typedef struct                                           
    {
    SVECTOR vecs[ (4 +1) * (4 +1) ];
    } SG_VECS;



    typedef struct                                           
    {
    POLY_GT4    prims[ 4  * 4  ];
    } SG_PRIMS;




         
    typedef struct {

        SVECTOR     golfer_at_ball_pos;
        short           ball            short           golfer_angle;
    
        short           disp_screen_start_x,disp_screen_start_y;
        short           draw_screen_start_x,draw_screen_start_y;
    } DB;




    typedef struct                                           
    {
    long        addr;                                            
    } TEMP_ICONH;


    typedef struct                                           
    {
    u_short tpage;                                       
    u_short corner0x,corner0y;                       
    u_short corner1x,corner1y;                       
    u_short corner2x,corner2y;                       
    u_short corner3x,corner3y;                       
    } GRH;


    typedef struct                                           
    {
    u_short clut_id;
    u_short tpage;                                       
    u_short corner0x,corner0y;                       
    u_short corner1x,corner1y;                       
    u_short corner2x,corner2y;                       
    u_short corner3x,corner3y;                       
    } GRH2;


    typedef struct                                           
    {
    u_char  x,y;                                             
    u_char  w,h;                                             
    } SPRH;


    typedef struct
    {
    short   vx;
    short   vz;
    } HPOS;

    typedef union
    {
    char    c;
    long    l;
    short   s;
    } BYTES;

    typedef struct 
    {
        char level;
        int8 ranking;
        int8 skill;
        int8 handycap;
        short stats[22 ];
        int8 card[18];
        int8 tour;
        long money;
        long money_two;

    }cpu_player;

    typedef struct
    {
        cpu_player Save_cpu_player[88 -4];
        play_player Save_psx_player[4];

    } game_data;

    typedef struct
    {
        play_player Save_psx_player;

        uint8 no_amm_rounds:4;
        uint8 no_pro_rounds:4;

    } save_player_data;





# 9 "h/map.h" 2


    #define     MAP_SIZE_X  28160
    #define     MAP_SIZE_Y  28160

    #define     MAP_DEPTH_OFFSET    ((uint32)0xb00)

    #define     MAP_COORD_TO_INDEX_X( COORD) ((COORD)/440)
    #define     MAP_COORD_TO_INDEX_Y( COORD) ((COORD)/440)

    #define     MAP_INDEX_TO_COORD_X( INDEX) ((INDEX)*440)
    #define     MAP_INDEX_TO_COORD_Y( INDEX) ((INDEX)*440)

    #define     MAP_LOCATION_TYPE   0x7
    #define     MAP_LOCATION_TYPE_Road      1
    #define     MAP_LOCATION_TYPE_Bunker    2
    #define     MAP_LOCATION_TYPE_Rough     3
    #define     MAP_LOCATION_TYPE_Fairway   4
    #define     MAP_LOCATION_TYPE_Green     5
    #define     MAP_LOCATION_TYPE_Water     6
    #define     MAP_LOCATION_TYPE_OutOfBounds   7

    #define     MAP_MIRROR 0x80
    #define     MAP_FLIP 0x40

    #define     TREE_TYPE_TREE  0
    #define     TREE_TYPE_BUSH  1
    #define     TREE_TYPE_ROCK  2

    typedef struct  map_polygon
        {
        int16   Control;
        uint16  Link;
        uint16  Mode;
        uint16  Bank;
        uint16  Character;
        uint16  Size;

        uint16  IndexTL;         
        uint16  IndexTR;         
        uint16  IndexBR;         
        uint16  IndexBL;         

        uint16  GouraudTL;
        uint16  GouraudTR;
        uint16  GouraudBR;
        uint16  GouraudBL;
        }map_polygon;

    typedef struct  map_polygon_list
        {
        uint32  Number_Polygons;
        map_polygon *Polygons;
        }map_polygon_list;

    typedef struct  map_object
        {
        struct  map_object  *Next;

        map_polygon_list    *Polygon_List;
        world_vector_list   *Vector_List;
        screen_texture_list *Texture_List;

        matrix  Matrix;
        matrix  New_Matrix;
        }map_object;

    typedef struct  map_location
        {
        uint8       Type;
        uint8       Water_Volume;

        int16       Height;
        int16       Tree_Index;

        int8        Tree_Number;
        int8        Texture;
             
        }map_location;

    typedef struct  map_tree
        {
        int16   Loc_X;
        int16   Loc_Y;

        uint8 Flag;
        uint8   Type;
        int16   Height;
        }map_tree;

    typedef struct  map_hole
        {
        int32   Loc_X;
        int32   Loc_Y;
        }map_hole;

    typedef struct  golf_map
        {
        uint16  Size_X;
        uint16  Size_Y;
        uint16  Grid_X;
        uint16  Grid_Y;
        uint16  Tee_Loc_X;
        uint16  Tee_Loc_Z;
        uint16  Number_Trees;
        uint16  Number_Holes;
        uint16  Wind_Angle;
        uint16  Wind_Speed;

             
        map_location    *Map_Locations;
        map_tree    *Trees;
        map_hole *Holes;
        uint16  *Demo;

        int32           Offset_X;
        int32           Offset_Y;
        trig_fixed  Scale_X;
        trig_fixed  Scale_Y;
        trig_angle  Angle;

        uint16  Fairway_Points[20][2];
        }golf_map;

    void    Map_Tree_Golfer_Obscure( void);

    void    Map_Make_Camera_Matrix(void);

    void    Map_Init_Polygons( map_object *Object);
    void    Map_Light_Polygons( map_object *Object);

    void    Map_Draw_Ground_Poly(screen_texture *Texture, world_vector *VectorTL, world_vector *VectorTR, world_vector *VectorBR, world_vector *VectorBL, vdp1_gouraud_table *Gouraud);
    void    Map_Draw_Ground_Mark(world_vector *VectorTL, world_vector *VectorTR, world_vector *VectorBR, world_vector *VectorBL, uint16 Colour);
    void    Map_Add_To_World_Sub_Divided( map_polygon *Polygon, screen_texture *Texture, world_vector *VectorTL, world_vector *VectorTR, world_vector *VectorBR, world_vector *VectorBL, uint16 GouraudTL, uint16   GouraudTR, uint16   GouraudBR, uint16   GouraudBL);
    void    Map_Add_To_World(map_object *Object, map_polygon_list *Polygon_List, world_vector *Vectors, world_vector_list *Vector_List);
    inline void Map_Add(map_object *Object, matrix *Matrix);
    void    Map_Draw_Map( void);
    void    Map_Draw_Trees( void);
    void    Map_Draw(void);
    void    Map_Draw_Ball_Path(BALL_DAT *Ball, uint32 Number_Points, uint16 Colour);

    void    Map_Grid_Draw( int32 Rotate);
    void    Map_Grid_Draw_Grid( void);
    void    Map_Grid_Calc_Points( int32 Rotate);


    int32   Map_Get_Height(int32 X, int32 Y);
    int32   Map_Get_Safe_Height(int32 X, int32 Y);
    map_location* Map_Get_Location(int32 X, int32 Y);

    void    Map_Load_Textures( void);
    void    Map_Load_Trees( void);
    void    Map_Load( uint32    Course_Number, uint32 Hole_Number);

    void    Map_Free_Textures( void);
    void    Map_Free_Trees( void);
    void    Map_Free(void);

    void    Map_Copy_VSync_Data( screen_data *Buffer);
    void    Map_Setup_VDP2(void);

    
# 182 "h/map.h"

        
        #define     MAP_EXTERN extern

             
        extern  screen_texture_list *Course_Texture_List;
        extern  screen_texture_list *Course_Texture_List_8x8;
        extern  screen_texture_list *Course_Tree_Texture_List;
        extern  golf_map *Course_Map;
        extern  map_object *Course_Map_Object;
        extern  world_object *Course_Tree_Object;
        extern  void *Course_Ground_Detect;
    

extern  trig_angle  Camera_Angle_X;
extern  trig_angle  Camera_Angle_Y;
extern  trig_angle  Camera_Angle_Z;

extern  int32   Camera_X;
extern  int32   Camera_Y;
extern  int32   Camera_Z;

extern  matrix Camera_Matrix;


# 28 "c\\golf1.c" 2

# 1 "h/sfx.h" 1

    #define     __SFX_H

    
    

    #define     SFX_MEMORY_TYPE memory_raml

    #define     SFX_PCM_FILENAME    "GAME2"
    #define     SFX_MENU_FILENAME   "menu"
    #define     SFX_COMM_FILENAME   "comm"

    #define     SFX_COMM_LIST   3

    #define     SFX_COMM_RND( FIRST, LAST)  static sfx_comm_sound   Comm_List[ (LAST)-(FIRST)] = {-1};  int32 Rnd = Sfx_Comm_Rnd_Sound( (FIRST), (LAST), Comm_List);    




    #define     SFX_COMMENTRY_PAGES 10
    #define     SFX_COMMENTRY_PAGE_SIZE 2048    
    #define     SFX_COMMENTRY_LENGTH    ( SFX_COMMENTRY_PAGES * SFX_COMMENTRY_PAGE_SIZE)
    #define     SFX_COMMENTRY_RATE  11025
    #define     SFX_COMMENTRY_BYTES 1

    #define     SFX_FREND_SOUND_CLICK_A 8
    #define     SFX_FREND_SOUND_CLICK_B 9

    #define     SFX_BIRD_HIGH   6
    #define     SFX_BIRD_LOW    0
    #define     SFX_BIRD_NUMBER (SFX_BIRD_HIGH - SFX_BIRD_LOW)

    #define     SFX_WATER_WAIT  10000
    #define     SFX_WAIT_TIME   80000
    #define     SFX_BIRD_WAIT   11000

    #define     SFX_MENU_BUTTON_Up      14
    #define     SFX_MENU_BUTTON_Down        14
    #define     SFX_MENU_BUTTON_Fire        15

    #define     SFX_MENU_SELECT1A   1
    #define     SFX_MENU_SELECT1B   1
    #define     SFX_MENU_SELECT2    5
    #define     SFX_MENU_SELECT3    6

    #define     SFX_WATER_WAVE      29
    #define     SFX_WATER_STREAM    30

    #define     SFX_SHOT_CLUB_GOOD  8
    #define     SFX_SHOT_CLUB_BAD   7

    #define     SFX_SHOT_PUTT_GOOD  10
    #define     SFX_SHOT_PUTT_BAD   7

    #define     SFX_SHOT_PUTTER 10
    #define     SFX_SHOT_DRIVER 7
    #define     SFX_SHOT_IRON       7
    #define     SFX_SHOT_SAND       11

    #define     SFX_CROWD_MUR1  23
    #define     SFX_CROWD_MUR2  24
    #define     SFX_CROWD_OHH   25
    #define     SFX_CROWD_OOH   26
    #define     SFX_CROWD_TEE1  27
    #define     SFX_CROWD_TEE2  28

    #define     SFX_LAND_BOUNCE 13

    #define     SFX_LAND_BOUNCE1    12
    #define     SFX_LAND_BOUNCE2    13
    #define     SFX_LAND_BOUNCE3    14

    #define     SFX_LAND_FLAG       15
    #define     SFX_LAND_LANDBALL   14
    #define     SFX_LAND_PLOP1      17
    #define     SFX_LAND_PLOP2      18
    #define     SFX_LAND_TARMAC 19
    #define     SFX_LAND_BUSH       21
    #define     SFX_LAND_TREE       20
    #define     SFX_LAND_HOLE       22

    #define     SFX_COMM_BUFFER_SIZE        4

    typedef enum    sfx_comm_lang
        {
        SFX_COMM_LANG_USA=0,
        SFX_COMM_LANG_FRENCH=1,
        SFX_COMM_LANG_GERMAN=2,
        SFX_COMM_LANG_ENG1=3,
        SFX_COMM_LANG_ENG2=4,
        SFX_COMM_LANG_JAP=5
        }sfx_comm_lang;

    typedef enum    sfx_comm_file
        {
        SFX_COMM_FILE_ADD=0,
        SFX_COMM_FILE_BLO,
        SFX_COMM_FILE_COU,
        SFX_COMM_FILE_DRY,
        SFX_COMM_FILE_FIN,
        SFX_COMM_FILE_FOB,
        SFX_COMM_FILE_FOS,
        SFX_COMM_FILE_INT,
        SFX_COMM_FILE_LAY,
        SFX_COMM_FILE_LED,
        SFX_COMM_FILE_MAT,
        SFX_COMM_FILE_NOR,
        SFX_COMM_FILE_POR,
        SFX_COMM_FILE_MIS,
        SFX_COMM_FILE_NAM,
        SFX_COMM_FILE_NAMA,
        SFX_COMM_FILE_QUA,
        SFX_COMM_FILE_QUB,
        SFX_COMM_FILE_QUR,
        SFX_COMM_FILE_QUT,
        SFX_COMM_FILE_SCO,
        SFX_COMM_FILE_SKI,
        SFX_COMM_FILE_TEE,
        SFX_COMM_FILE_TYP,
        SFX_COMM_FILE_USA,
        SFX_COMM_FILE_WAT,
        SFX_COMM_FILE_WET,
        SFX_COMM_FILE_WAS,
        SFX_COMM_FILE_WAG,
        SFX_COMM_FILE_YES,
        SFX_COMM_FILE_USAX,
        SFX_COMM_FILE_SCOX,
        SFX_COMM_FILE_POT
        }sfx_comm_file; 

    typedef uint8   sfx_comm_sound;

    typedef struct  sfx_comm_buffer 
        {
        sfx_comm_file   File;
        int32 Sound;
        }sfx_comm_buffer;

    typedef struct  sfx_list_item
        {
        int32   Sound;
        int32 Index;
        sound_volume    Volume;
        sound_pan       Pan;
        }sfx_list_item;

    #define     SFX_PLAY_LIST_LENGTH    20

    typedef struct  sfx_list_data
        {
        sfx_list_item   Play_List[      
        sfx_list_item *Present;
        sfx_list_item *Last;
        }sfx_list_data;

    typedef struct  sfx_data
        {
        sound_pcm_list  *Sound_List;
        sound_pcm_buffer    *Buffer_Stream;
        sound_pcm_buffer    *Buffer_Sea;
        sound_comm_data *Comm;
        sfx_comm_lang   Comm_Lang;
        sfx_comm_file   Comm_File;
        sfx_list_data   Play_List;

        int8    Birds;
        }sfx_data;

    sound_comm_status Sfx_Comm_Status( void);
    int32   Sfx_Comm_Size( int32 Sound);
    int32 Sfx_Comm_Rnd_Sound(int32 First, int32 Last, sfx_comm_sound *Old);
    void    Sfx_Comm_Play_Name( int32 Player);
    void    Sfx_Comm_Commentator( void);
    void    Sfx_Comm_Lang( sfx_comm_lang Lang);
    void    Sfx_Comm_File( sfx_comm_file File);
                m_Stop( void);
    void    Sfx_Comm_Play( int32 Sound);
    void    Sfx_Comm_File_Close( void);

    void    Sfx_Course_List_Clear( void);
    void    Sfx_Course_List_Add( int32 Sample, int32 Index, sound_volume Volume,        an Pan);
    void    Sfx_Course_List_Play( int32 Index);

    void    Sfx_Course_Wait( pad_data Pad);
    void    Sfx_Course_Play( int32 Sample, sound_volume Volume, sound_pan Pan);
    void    Sfx_Course_Background( void);
    
    void    Sfx_Menu_Play( int32 Sample);
    void    Sfx_Menu_Pad( pad_data Pad);
    void    Sfx_Menu_Init( void);
    void    Sfx_Menu_Free( void);

    int32   Sfx_Init( void);
    void    Sfx_Close( void);

    void    Sfx_Frend_Pad( pad_data Pad);
    void    Sfx_Frend_Play_Sound(int8 Sound);
    
    #define     SFX_SLIDE_TO_VOLUME( SLIDE) (((SLIDE)* SOUND_VOLUME_MAX)/120)

# 29 "c\\golf1.c" 2

# 1 "h/frend.h" 1

    #define     __FREND_H

    
    


    #define     JDEBUG 1

    #define     SOUND_ON    1
    #define     SOUND_OFF 0

    #define     OPT_ON   1
    #define     OPT_OFF 0

    #define     PRO_ARC 0
    #define     AMM_ARC  1
    #define     NO_ARC  2

    #define     TEXT 1
    #define     SPRITE 0

    #define     MAX_VOLUME 102

    #define     NO_PLAYER 97 
    #define     CPUPLAYER 98

    #define     MOVE_UP   0 
    #define     MOVE_DOWN 1

    enum 
        {
            POLYLINE,
            POLYGON,
            TRANSPOL
        };

    enum
        {
            ENGLISH_TEXT,
            FRENCH_TEXT,
            GERMAN_TEXT,
            JAPANESE_TEXT
        };

    enum
        {
            NORMAL,
            HIDE,
            REVEAL,
            DISABLE 

        };

    enum
        {
            HITBALL =21,
            CLUBSELECT,
            CAM,
            CANCELSHOT
        };


    void show_start_menu(short selected, short, short);
    void psx_start_menu(void);

    void psx_name_editor(short);
    void select_partner_oponent(short, short, short);
    void draw_select_partopp(short selected, short pressed, short start, short playernum, short ticked, uint8 CurrPlayer, uint8 shownum);
    void list_players(short start, short finish, short ticked);


    void draw_options_screen(short, short, char newname[16], short, short, short lastlvalue, uint8 numplayers, uint8 HideReveal);
    void gametype_options(void);

    void sound_options(void);
    void draw_sound_options(short selected, short pressed);
    void draw_slide(short selected, uint16 , uint16, short , short);

    void draw_actua(short);
    void draw_spin_buttons(short, short, short, int *, int );
    void draw_small_spin_buttons(short, short, short, 

(Source: Original TCRF research)

Regional Differences#

Title Screen#

Europe

US

Japan