// Emacs style mode select -*- C++ -*- //--------------------------------------------------------------------------- // // $Id: swmain.c,v 1.5.2.1 2003/06/08 18:16:38 fraggle Exp $ // // Copyright(C) 1984-2000 David L. Clark // Copyright(C) 2001-2003 Simon Howard // // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the // Free Software Foundation; either version 2 of the License, or (at your // option) any later version. This program is distributed in the hope that // it will be useful, but WITHOUT ANY WARRANTY; without even the implied // warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See // the GNU General Public License for more details. You should have // received a copy of the GNU General Public License along with this // program; if not, write to the Free Software Foundation, Inc., 59 Temple // Place - Suite 330, Boston, MA 02111-1307, USA. // //--------------------------------------------------------------------------- // // swmain - SW mainline // //--------------------------------------------------------------------------- #include #include "timer.h" #include "sw.h" #include "swcollsn.h" #include "swgrpha.h" #include "swinit.h" #include "swmove.h" #include "swsound.h" #include "swtitle.h" #include "swutil.h" // sdh: framerate control #define FPS 10 // sdh 28/10/2001: game options BOOL conf_missiles = 0; // allow missiles: replaces missok BOOL conf_solidground = 0; // draw ground solid like in sopwith 1 BOOL conf_hudsplats = 1; // splatted birds etc BOOL conf_wounded = 1; // enable wounded planes BOOL conf_animals = 1; // birds and oxes BOOL conf_harrykeys = 0; // plane rotation relative to screen playmode_t playmode; /* Mode of play */ GAMES *currgame; /* Game parameters and current game */ OBJECTS *targets[MAX_TARG + MAX_OXEN]; /* Status of targets array */ int numtarg[2]; /* Number of active targets by color */ int savemode; /* Saved PC display mode */ int tickmode; /* Tick action to be performed */ int counttick, countmove; /* Performance counters */ int movetick, movemax; /* Move timing */ int gamenum; /* Current game number */ int gmaxspeed, gminspeed; /* Speed range based on game number */ int targrnge; /* Target range based on game number */ BOOL hires; /* High res flag */ BOOL disppos; /* Display position flag */ BOOL titleflg; /* Title flag */ int dispdbg; /* Debug value to display */ BOOL soundflg; /* Sound flag */ BOOL repflag; /* Report statistics flag */ BOOL joystick; /* Joystick being used */ BOOL ibmkeybd; /* IBM-like keyboard being used */ BOOL inplay; /* Game is in play */ int koveride; /* Keyboard override index number */ int displx; /* Display left and right */ int dispdx; /* Display shift */ BOOL dispinit; /* Inialized display flag */ OBJECTS *drawlist; /* Onscreen object list */ OBJECTS *nobjects; /* Objects list. */ OBJECTS oobjects[MAX_PLYR]; /* Original plane object description */ OBJECTS *objbot, *objtop, /* Top and bottom of object list */ *objfree, /* Free list */ *deltop, *delbot; /* Newly deallocated objects */ OBJECTS topobj, botobj; /* Top and Bottom of obj. x list */ OBJECTS *compnear[MAX_PLYR]; /* Planes near computer planes */ int lcompter[MAX_PLYR] = { /* Computer plane territory */ 0, 1155, 0, 2089 }; int rcompter[MAX_PLYR] = { /* Computer plane territory */ 0, 2088, 1154, 10000 }; OBJECTS *objsmax = 0; /* Maximum object allocated */ int endsts[MAX_PLYR]; /* End of game status and move count */ int endcount; int player; /* Pointer to player's object */ int currobx; /* Current object index */ BOOL plyrplane; /* Current object is player flag */ BOOL compplane; /* Current object is a comp plane */ OLDWDISP wdisp[MAX_OBJS]; /* World display status */ BOOL goingsun; /* Going to the sun flag */ BOOL forcdisp; /* Force display of ground */ char *histin, *histout; /* History input and output files */ unsigned explseed; /* random seed for explosion */ int keydelay = -1; /* Number of displays per keystroke */ int dispcnt; /* Displays to delay keyboard */ int endstat; /* End of game status for curr. move */ int maxcrash; /* Maximum number of crashes */ int shothole; /* Number of shot holes to display */ int splatbird; /* Number of slatted bird symbols */ int splatox; /* Display splatted ox */ int oxsplatted; /* An ox has been splatted */ int sintab[ANGLES] = { /* sine table of pi/8 increments */ 0, 98, 181, 237, /* multiplied by 256 */ 256, 237, 181, 98, 0, -98, -181, -237, -256, -237, -181, -98 }; jmp_buf envrestart; /* Restart environment for restart */ /* long jump. */ int main(int argc, char *argv[]) { int nexttic; nobjects = (OBJECTS *) malloc(100 * sizeof(OBJECTS)); swinit(argc, argv); setjmp(envrestart); // sdh 28/10/2001: playmode is called from here now // makes for a more coherent progression through the setup process if (!playmode) getgamemode(); swinitlevel(); nexttic = Timer_GetMS(); for (;;) { /*----- DLC 96/12/27 ------ while ( movetick < 2 ); movetick = 0; -------------------------*/ //while ( movetick < movemax ); // sdh: in the original, movetick was incremented // automagically by a timed interrupt. we dont // have interrupts so we have to pause between tics nexttic += 1000 / FPS; do { swsndupdate(); // sdh 15/11/2001: dont thrash the // processor while waiting Timer_Sleep(10); } while (Timer_GetMS() < nexttic); movetick -= movemax; // swmove and swdisp should be made to run // asyncronously probably swmove(); swdisp(); swgetjoy(); swcollsn(); swsound(); } return 0; } //--------------------------------------------------------------------------- // // $Log: swmain.c,v $ // Revision 1.5.2.1 2003/06/08 18:16:38 fraggle // Fix networking and some compile bugs // // Revision 1.5 2003/06/04 17:13:26 fraggle // Remove disprx, as it is implied from displx anyway. // // Revision 1.4 2003/06/04 16:02:55 fraggle // Remove broken printscreen function // // Revision 1.3 2003/04/05 22:55:11 fraggle // Remove the FOREVER macro and some unused stuff from std.h // // Revision 1.2 2003/04/05 22:31:29 fraggle // Remove PLAYMODE_MULTIPLE and swnetio.c // // Revision 1.1.1.1 2003/02/14 19:03:14 fraggle // Initial Sourceforge CVS import // // // sdh 14/2/2003: change license header to GPL // sdh 25/11/2001: remove intson, intsoff calls // sdh 15/11/2001: dont thrash the processor while waiting between gametics // sdh 29/10/2001: harrykeys // sdh 28/10/2001: conf_ game options // sdh 28/10/2001: moved auxdisp to swgrpha.c // sdh 21/10/2001: rearranged headers, added cvs tags // sdh 21/10/2001: reformatted with indent // sdh 19/10/2001: removed externs, these are now in headers // sdh 18/10/2001: converted all functions to ANSI-style arguments // // 96-12-26 Speed up game a bit // 87-04-06 Computer plane avoiding oxen. // 87-03-12 Wounded airplanes. // 87-03-09 Microsoft compiler. // 85-10-31 Atari // 84-06-12 PC-jr Speed-up // 84-02-02 Development // //---------------------------------------------------------------------------