123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617 |
- /******************************************************************************
- ******************************************************************************/
- //
- // Actua Soccer. (Token Main Routine) 1.9.94
- //
- // Programmed by Andy Findlay.
- //
- /******************************************************************************
- ******************************************************************************/
- #include <stdlib.h>
- #include <stdio.h>
- // Audio includes...
- #include "config.h" // Config file
- #include "basemem.h" //
- #include "sos.h" // SOS stuff
- #include "timer.h" // Timers for Audio
- #include "digi.h" // Digital Sound
- #include "midi.h" // MIDI Sound
- #include "audio.h" // SOS header
- #include "global.h"
- #include "3deng.h"
- #include "defines.h"
- #include "mouse.h"
- #include "front.h"
- #include "eurofrnt\euro_int.h"
- #include "mallocx.h"
- #ifdef ECTS
- extern void write_config_file();
- #endif
- struct goal_info
- {
- char used;
- int scorer;
- int time;
- };
- typedef struct
- {
- goal_info goal_data;
- } goal_table;
- goal_table goals[3*32]={0,0,0};
- extern void claim_key_int(void);
- extern void release_key_int(void);
- extern char practice;
- // NETWORK.C
- extern "C" void read_joystick(char j,int *x, int *y, int *sw);
- extern "C" void read_joy1(int *x, int *y, int *sw);
- extern "C" void read_joy2(int *x, int *y, int *sw);
- extern "C" void calibrate_joy(char j,unsigned short *x,unsigned short *y);
- extern "C" void calibrate_logpad(unsigned short *x,unsigned short *y);
- extern "C" void get_joy_dir1(int *x,int *y,int *f);
- extern "C" void get_joy_dir2(int *x,int *y,int *f);
- extern "C" void get_user_inputs();
- extern "C" void process_user_inputs();
- extern "C" volatile int Teams[MAX_NET_USERS],Players[MAX_NET_USERS];
- extern "C" volatile int net_quit;
- extern "C" volatile char paused;
- extern "C" volatile char pause_request;
- extern "C" volatile char keys[256];
- extern "C" volatile char key_togs[256];
- extern "C" unsigned char machine_no;
- extern "C" void NetTest(void);
- extern "C" void Network_Play_Ready(void);
- extern "C" void Quit_Network_Play(void);
- extern "C" void __far nethandler(void);
- extern "C" unsigned int NetworkHandle;
- extern "C" short wConsoleNode;
- extern "C" int network_on;
- extern "C" volatile int count;
- extern "C" volatile int tick;
- extern "C" volatile int ftick;
- extern "C" volatile int writeptr;
- extern "C" volatile int readptr;
- extern "C" int game_speed; // Currently declared in network.c
- extern "C" char old_mf;
- extern "C" char logpad_on;
- extern "C" char joystick1_on;
- extern "C" char joystick2_on;
- extern "C" unsigned short joy1_cnt_x,joy1_cnt_y;
- extern "C" unsigned short joy2_cnt_x,joy2_cnt_y;
- extern "C" int joy1_max_x,joy1_max_y,joy1_min_x,joy1_min_y;
- extern "C" int joy2_max_x,joy2_max_y,joy2_min_x,joy2_min_y;
- extern "C" char calibrated_1,calibrated_2;
- // Externed game functions...
- extern void add_team_user(short t,short c);
- extern void add_fixed_user(short p,short c);
- extern void init_keyboard();
- extern void init_users();
- extern void init_team();
- extern short conv_conts_back(char c);
- extern setup_info setup;
- extern short rand_seed;
- extern int match(int argc, char **argv);
- match_data match_info;
- extern team_info game_data[];
- extern int players;
- extern int avg1_rate,avg1_power,avg1_bcontrol,avg1_flair,
- avg1_vision,avg1_accuracy,avg1_fitness,avg1_disc;
- extern int avg2_rate,avg2_power,avg2_bcontrol,avg2_flair,
- avg2_vision,avg2_accuracy,avg2_fitness,avg2_disc;
- extern char audio_version;
- extern char need_result;
- extern short injury_time;
- extern "C" int num_of_users; // Currently in network.c
- extern char say_names;
- extern "C" volatile char net_half;
- extern "C" void foot_init_net();
- extern "C" void foot_uninit_net();
- extern int performance;
- int w95;
- short no_front_users;
- /******************************************************************************
- *****************************************************************************/
- void mem_test()
- {
- int i=get_mem_info();
- printf("Free memory = %d\n",i);
- setup.M8=(i>=MEM8);
- if (setup.verbose)
- if (setup.M8)
- puts("Initialising 8 meg game");
- else
- {
- puts("Initialising 4 meg game");
- printf("Need to free %d more bytes to run 8 meg version\n",MEM8-i);
- }
- }
- /******************************************************************************
- *****************************************************************************/
- int go_audio()
- {
- // Initialise Audio Config...
-
- if(ReadConfigFile())
- {
- printf("Error! Cannot read Config File.\n");
- return(EXIT_FAILURE);
- }
- if(InitialiseDIGI(22050,IDF_VERBOSE)) // Initialise Digital Sound Drivers
- return(EXIT_FAILURE);
- return(FALSE);
- }
- /******************************************************************************
- ******************************************************************************/
- // Process command line options...
- void get_command_line(int argc, char **argv)
- {
- short opt,id;
- for (int i=1; i<argc; i++)
- {
- opt=-1;
- id=100;
- // Look for switch!
- if (!strcmp(argv[i],"-i"))
- // Inputs...
- {
- if (!strcmp(argv[i+1],"j1"))
- opt=JOY1_CTRL;
- if (!strcmp(argv[i+1],"j2"))
- opt=JOY2_CTRL;
- if (!strcmp(argv[i+1],"k1"))
- opt=KEY1_CTRL;
- if (!strcmp(argv[i+1],"k2"))
- opt=KEY2_CTRL;
- if (!strcmp(argv[i+1],"m"))
- opt=MOUSE_CTRL;
- if (!strcmp(argv[i+1],"lp"))
- opt=LOGPAD_CTRL;
- if (!strcmp(argv[i+1],"g1"))
- opt=GRAV1_CTRL;
- if (!strcmp(argv[i+1],"g2"))
- opt=GRAV2_CTRL;
- if (!strcmp(argv[i+1],"n"))
- opt=NET_CTRL;
- if (opt>0)
- // Look for user id!
- {
- if (!strcmp(argv[i+2],"a"))
- id=TEAM_A;
- else
- if (!strcmp(argv[i+2],"b"))
- id=TEAM_B;
- else
- {
- id=atoi(argv[i+2]);
- if ((id<1) || (id>players) || (id==1) || (id==12))
- id=100;
- }
- i+=2;
- }
- if (id==100)
- i=argc;
- else
- {
- if (id<0)
- {
- if (id==-1)
- game_data[setup.team_a].player_control+=1<<no_front_users;
- else
- game_data[setup.team_b].player_control+=1<<no_front_users;
- match_info.control_methods[no_front_users++]=conv_conts_back(opt);
- }
- else
- add_fixed_user(id,opt);
- #ifndef FRONT_END
- if (opt==JOY1_CTRL)
- joystick1_on=TRUE;
- if (opt==JOY2_CTRL)
- joystick2_on=TRUE;
- if (opt==LOGPAD_CTRL)
- logpad_on=TRUE;
- #endif
- }
- }
-
- if (!strcmp(argv[i],"-s"))
- // Stats...
- {
- if (!strcmp(argv[i+1],"ds"))
- opt=0;
- if (!strcmp(argv[i+1],"vi"))
- opt=1;
- if (!strcmp(argv[i+1],"bc"))
- opt=2;
- if (!strcmp(argv[i+1],"sp"))
- opt=3;
- if (!strcmp(argv[i+1],"fl"))
- opt=4;
- if (!strcmp(argv[i+1],"ac"))
- opt=5;
- if (!strcmp(argv[i+1],"pp"))
- opt=6;
- if (!strcmp(argv[i+1],"st"))
- opt=7;
- if (opt>=0)
- {
- if (!strcmp(argv[i+2],"a"))
- {
- int avg=atoi(argv[i+3]);
- if (avg>0 && avg<129)
- {
- id=0;
- switch(opt)
- {
- case(0):
- avg1_disc=avg;
- break;
- case(1):
- avg1_vision=avg;
- break;
- case(2):
- avg1_bcontrol=avg;
- break;
- case(3):
- avg1_rate=avg;
- break;
- case(4):
- avg1_flair=avg;
- break;
- case(5):
- avg1_accuracy=avg;
- break;
- case(6):
- avg1_power=avg;
- break;
- case(7):
- avg1_fitness=avg;
- break;
- }
- }
- }
- else
- {
- if (!strcmp(argv[i+2],"b"))
- {
- int avg=atoi(argv[i+3]);
- if (avg>0 && avg<129)
- {
- id=0;
- switch(opt)
- {
- case(0):
- avg2_disc=avg;
- break;
- case(1):
- avg2_vision=avg;
- break;
- case(2):
- avg2_bcontrol=avg;
- break;
- case(3):
- avg2_rate=avg;
- break;
- case(4):
- avg2_flair=avg;
- break;
- case(5):
- avg2_accuracy=avg;
- break;
- case(6):
- avg2_power=avg;
- break;
- case(7):
- avg2_fitness=avg;
- break;
- }
- }
- }
- }
- }
- else
- id=100;
- if (id==100)
- i=argc;
- else
- i+=3;
- }
- if (!strcmp(argv[i],"-r"))
- // Random seed...
- {
- #ifdef ECTS
- machine_no=atoi(argv[i+1]);
- #else
- rand_seed=atoi(argv[i+1]);
- #endif
- }
- if (!strcmp(argv[i],"-a"))
- // Choose team...
- {
- setup.team_a=atoi(argv[i+1]);
- }
- if (!strcmp(argv[i],"-b"))
- // Choose team...
- {
- setup.team_b=atoi(argv[i+1]);
- setup.team_b_kit=atoi(argv[i+1]);
- }
- }
- }
- /*
- void GOAL_SCORED(int t,int s,int tm)
- {
- }
- */
- /******************************************************************************
- *****************************************************************************/
- void SubstituePlayers(int a,int b,int c)
- {
- }
- /******************************************************************************
- *****************************************************************************/
- /* Front End Emulator */
- extern char var_start,var_end;
- extern void init_joys();
- void test_w95()
- {
- //
- union REGS regs;
- struct SREGS sregs;
- memset(&sregs,0,sizeof(sregs)); //clr sregs
- regs.w.ax=0x1600;
- int386x(0x2F,®s,®s,&sregs);
- w95=regs.w.ax & 0xff;
- if (w95==3 || w95==4)
- {
- //running in windows 95!!!
- if (setup.verbose)
- printf("Running windows 95 version\n");
- w95=TRUE;
- }
- else
- {
- if (setup.verbose)
- printf("Running DOS version\n");
- w95=FALSE;
- }
- }
- int main(int argc, char **argv)
- {
- w95=0; // Windows flag!
- test_w95();
- no_front_users=0;
- num_of_users=0;
- init_joys();
- performance=31; // Pentium speed!
- setup.team_a=36;
- setup.team_b=1;
- setup.team_b_kit=1;
- setup.stadium=setup.team_b;
- setup.start_res=0;
- setup.vidi_type=0; // 0=norm, 1=filtered
- setup.verbose=0;
- setup.screen_size=0;
- setup.detail.stadia=1; // 0=simple,1=complex
- setup.detail.pitch=2; // 0=simple,1=lo,2=hi
- setup.detail.sky=1; // 0=off,1=on
- setup.detail.players=1; // 0=simple,1=full
- setup.detail.lines=1; // 0=simple,1=full
- setup.detail.shadows=1; // 0=simple,1=full
- #ifdef ONE_MACHINE
- // game_data[setup.team_a].player_control=1;
- // game_data[setup.team_b].player_control=2;
- // match_info.control_methods[0]=2;
- // match_info.control_methods[1]=0;
- #else
- game_data[setup.team_a].player_control=0;
- game_data[setup.team_b].player_control=0;
- #endif
- #ifdef ECTS
- setup.M8=1;
- #else
- mem_test();
- #endif
- #ifdef MEG4
- setup.M8=0;
- #endif
- // setup.M8=0;
- // Setup Subs...
- for (int i=11; i<15; i++)
- {
- game_data[setup.team_a].players[i].flags=1;
- game_data[setup.team_b].players[i].flags=1;
- }
- InitialiseTimer(); // Initialise timers for sound drivers
- EUROmatch_info.camera=0;
- EUROmatch_info.audio=FALSE;
- EUROmatch_info.timeit=FALSE;
- EUROmatch_info.offside=TRUE;
- EUROmatch_info.bookings=TRUE;
- EUROmatch_info.freekicks=TRUE;
- EUROmatch_info.substitutes=TRUE;
- EUROmatch_info.time=3;
- EUROmatch_info.tac_1=0;
- EUROmatch_info.tac_2=0;
- match_info.CompetitionType=2;
- // match_info.CompetitionType=PRACTICE;
- // match_info.CompetitionType=PENALTIES;
- EUROmatch_info.crowd=0x1fff; // Crowd noise level!
- EUROmatch_info.pitch=0x7fff; // Pitch noise level!
- EUROmatch_info.commentary=0x7fff; // Commentary level!
- EUROmatch_info.master=0x7fff; // Master noise level!
- EUROmatch_info.referee_vision=120;
- EUROmatch_info.referee_discipline=80;
- EUROmatch_info.rand=3523;
- match_info.GameType=0; // 0 Arcade 1 Simulation...
- match_info.referee=0;
- EUROmatch_info.wind=0;
- // EUROmatch_info.tga_enable=TRUE;
- net_half=1; // Network game time...
- say_names=TRUE;
- audio_version=EUROmatch_info.audio;
- if (audio_version)
- {
- if (go_audio())
- {
- UnInitialiseTimer();
- return(FALSE);
- }
- }
- network_on=0;
- // Timer stuff...
- ftick=0;
- tick=0;
- count=0;
- game_speed=REAL_SPEED;
- readptr=writeptr=0;
- AddTimer(TIMER_SPEED,nethandler,NetworkHandle);
- injury_time=0;
- claim_key_int();
- init_users();
- init_team();
- machine_no=1;
- get_command_line(argc,argv);
- InitMouse();
- init_keyboard();
- if (logpad_on)
- calibrate_logpad(&joy1_cnt_x,&joy1_cnt_y);
- if (joystick1_on)
- {
- calibrate_joy(0,&joy1_cnt_x,&joy1_cnt_y);
- calibrated_1=TRUE;
- #ifdef ECTS
- write_config_file();
- #endif
- }
- if (joystick2_on)
- {
- calibrate_joy(1,&joy2_cnt_x,&joy2_cnt_y);
- calibrated_2=TRUE;
- #ifdef ECTS
- write_config_file();
- #endif
- }
- #ifndef NET_GAME
- old_mf=TRUE;
- #else
- old_mf=FALSE;
- #endif
- #ifdef NET_GAME
- foot_init_net();
- #endif
- /**** Call Game ****/
- match(argc,argv);
- #ifdef NET_GAME
- foot_uninit_net();
- #endif
- RemoveTimer(NetworkHandle);
- if (audio_version)
- {
- UnInitialiseDIGI(); // Uninitialise SOS
- }
- UnInitialiseTimer();
- release_key_int();
- return(0);
- }
|