]> 4ch.mooo.com Git - 16.git/blobdiff - 16/v2/source/ENGINE/VERGE.C
refresh wwww
[16.git] / 16 / v2 / source / ENGINE / VERGE.C
diff --git a/16/v2/source/ENGINE/VERGE.C b/16/v2/source/ENGINE/VERGE.C
new file mode 100755 (executable)
index 0000000..3be4de0
--- /dev/null
@@ -0,0 +1,325 @@
+/*\r
+Copyright (C) 1998 BJ Eirich (aka vecna)\r
+This program is free software; you can redistribute it and/or\r
+modify it under the terms of the GNU General Public License\r
+as published by the Free Software Foundation; either version 2\r
+of the License, or (at your option) any later version.\r
+This program is distributed in the hope that it will be useful,\r
+but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r
+See the GNU General Public Lic\r
+See the GNU General Public License for more details.\r
+You should have received a copy of the GNU General Public License\r
+along with this program; if not, write to the Free Software\r
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.\r
+*/\r
+\r
+#include <stdarg.h> // va_*\r
+\r
+#include "verge.h"\r
+\r
+// ================================= Data ====================================\r
+\r
+// declared in VDRIVER.C\r
+extern byte* translucency_table;\r
+\r
+char *strbuf=0;                       // Universal temporary string buffer. :)\r
+char joyflag=0;\r
+int vidxres=0,vidyres=0;              // Joystick on/off | Video mode to use\r
+char logoutput=0;                     // Verbose debugging startup mode\r
+char nocdaudio=0;                     // do not use CD audio\r
+char startmap[80];                    // startup map\r
+FILE *logf=0;                         // logfile file handle\r
+\r
+// ================================= Code ====================================\r
+\r
+void InitializeDefaults()\r
+{\r
+  kb1=28;  kb2=56;  kb3=1;  kb4=57;    // default keyboard controls\r
+  jb1=1;   jb2=2;   jb3=3;  jb4=4;     // default joystick controls\r
+  joyflag=0;                           // joystick defaults to disabled\r
+  vidxres=320; vidyres=200;\r
+  logoutput=0;                         // Don't be annoyingly verbose\r
+  strbuf=(char *) valloc(2000, "strbuf", OID_TEMP);\r
+  memcpy(startmap,"test.map\0",9);\r
+\r
+  md_mixfreq=44100;\r
+  md_dmabufsize=2000;\r
+  md_mode=DMODE_16BITS|DMODE_STEREO;\r
+  md_device=0;\r
+}\r
+\r
+static VFILE *user_cfg_file=0;\r
+static char parse_str[256];\r
+\r
+static char *parse_cfg_token()\r
+{\r
+  vscanf(user_cfg_file, "%s", parse_str);\r
+  return parse_str;\r
+}\r
+\r
+// compares string against parse_str (grabbed by parse_cfg_token)\r
+// 0=mismatch, 1=match\r
+static int parse_match(char *str)\r
+{\r
+  return !strcmp(parse_str, str);\r
+}\r
+\r
+void ParseStartupFiles()\r
+{\r
+  user_cfg_file = vopen("user.cfg");\r
+  if (!user_cfg_file)\r
+  {\r
+    printf("Could not open user.cfg. \n");\r
+    exit(-1);\r
+  }\r
+\r
+  while (1)\r
+  {\r
+    parse_cfg_token();\r
+\r
+    // mounts a pack file; up to 3? (perhaps gaurd against more?)\r
+    if (parse_match("mount"))\r
+      { MountVFile(parse_cfg_token()); continue; }\r
+    // set video resolution\r
+    else if (parse_match("vidmode"))\r
+    {\r
+      vidxres = atoi(parse_cfg_token());\r
+      vidyres = atoi(parse_cfg_token());\r
+\r
+      // check validity\r
+      if (vidxres != 256 && vidxres != 320\r
+      &&  vidxres != 360 && vidxres != 640)\r
+      {\r
+        Log("user.cfg: invalid resolution width %i passed to vidmode",\r
+          vidxres);\r
+      }\r
+      if (vidyres != 200 && vidyres != 240\r
+      &&  vidyres != 256 && vidyres != 480)\r
+      {\r
+        Log("user.cfg: invalid resolution height %i passed to vidmode",\r
+          vidyres);\r
+      }\r
+\r
+      continue;\r
+    }\r
+    // log to VERGE.LOG\r
+    else if (parse_match("log"))\r
+    {\r
+      logoutput=1;\r
+      continue;\r
+    }\r
+    // disable CD playing\r
+    else if (parse_match("nocdaudio"))\r
+    {\r
+      nocdaudio=1;\r
+      continue;\r
+    }\r
+    // map VERGE.EXE will run first when executed\r
+    else if (parse_match("startmap"))\r
+    {\r
+      strcpy(startmap, parse_cfg_token());\r
+      continue;\r
+    }\r
+    // 0=auto detect, 1=???, 2=???, 3=nosound\r
+    else if (parse_match("sound_device"))\r
+    {\r
+      md_device = atoi(parse_cfg_token());\r
+      continue;\r
+    }\r
+    // sound lib setting\r
+    else if (parse_match("mixrate"))\r
+    {\r
+      md_mixfreq = atoi(parse_cfg_token());\r
+      continue;\r
+    }\r
+    // sound lib setting\r
+    else if (parse_match("dmabufsize"))\r
+    {\r
+      md_dmabufsize = atoi(parse_cfg_token());\r
+      continue;\r
+    }\r
+    // sound lib setting\r
+    else if (parse_match("force8bit"))\r
+    {\r
+      continue;\r
+    }\r
+    // sound lib setting\r
+    else if (parse_match("forcemono"))\r
+    {\r
+      continue;\r
+    }\r
+\r
+    // unknown command, assume end\r
+    break;\r
+  }\r
+\r
+  // done parsing config\r
+  vclose(user_cfg_file);\r
+}\r
+\r
+void ParseAutoCFG()\r
+{ VFILE *f;\r
+  int i;\r
+\r
+  if (!(f=vopen("auto.cfg"))) return;\r
+\r
+  while (1)\r
+  {\r
+    vgets((char *) cmd, 40, f);\r
+    for (i=0; i<(signed) strlen((char *) cmd); i++)\r
+      if (cmd[i]==10 || cmd[i]==13) cmd[i]=0;\r
+    if (strlen((char*) cmd)<2) break;\r
+    ProcessCommand();\r
+  }\r
+  vclose(f);\r
+}\r
+\r
+void InitLog()\r
+{\r
+  if (logoutput)\r
+  {\r
+    remove("verge.log");\r
+  }\r
+}\r
+\r
+void Log(char *message, ...)\r
+{\r
+  char tempbuf[256];\r
+  va_list lst;\r
+\r
+  if (!logoutput) return;\r
+\r
+  va_start(lst, message);\r
+  vsprintf(tempbuf, message, lst);\r
+  va_end(lst);\r
+\r
+  logf = fopen("verge.log", "aw");\r
+  if (!logf) err("unable to log to verge.log");\r
+\r
+  fprintf(logf, "%s \n", tempbuf);\r
+  fflush(logf);\r
+\r
+  fclose(logf);\r
+}\r
+\r
+// used in conjunction with LogDone()\r
+void Logp(char *message, ...)\r
+{\r
+  char tempbuf[256];\r
+  va_list lst;\r
+\r
+  if (!logoutput) return;\r
+\r
+  va_start(lst, message);\r
+  vsprintf(tempbuf, message, lst);\r
+  va_end(lst);\r
+\r
+  logf = fopen("verge.log", "aw");\r
+  if (!logf) err("unable to log to verge.log");\r
+\r
+  fprintf(logf, "%s", tempbuf);\r
+  fflush(logf);\r
+\r
+  fclose(logf);\r
+}\r
+\r
+void LogDone()\r
+{\r
+  if (!logoutput) return;\r
+\r
+  logf = fopen("verge.log", "aw");\r
+  if (!logf) err("unable to log to verge.log");\r
+\r
+  fprintf(logf, "... OK \n");\r
+  fflush(logf);\r
+\r
+  fclose(logf);\r
+}\r
+\r
+void InitSystems()\r
+{\r
+  InitLog();\r
+  Log("V2 startup. Logfile initialized.");\r
+  Logp("Sys: Initializing keyboard handler.");\r
+  InitKeyboard();\r
+  LogDone();\r
+#ifdef __DJGPP__\r
+  keyboard_chain(0);\r
+#endif\r
+  Logp("Sys: Initializing timer. Set 100hz.");\r
+  InitTimer();\r
+  LogDone();\r
+\r
+  /*\r
+  Logp("Sys: Initializing CD Audio.");\r
+  CD_Init();\r
+  LogDone();\r
+  */\r
+\r
+  Logp("Sys: Initializing music system.");\r
+  InitMusicSystem();\r
+  LogDone();\r
+\r
+  InitVideo(vidxres, vidyres);\r
+}\r
+\r
+void LoadTransTable()\r
+{\r
+  FILE *fp=0;\r
+\r
+  if (translucency_table)\r
+    { free(translucency_table); translucency_table=0; }\r
+  translucency_table=(byte *)valloc(65536, "translucency_table", OID_MISC);\r
+\r
+  fp = fopen("trans.tbl", "rb");\r
+  if (!fp) err("Could not open trans.tbl.");\r
+\r
+  fread(translucency_table, 65536, 1, fp);\r
+\r
+  fclose(fp);\r
+}\r
+\r
+void vmain(int argc, char *argv[])\r
+{\r
+  char temp[256];\r
+\r
+  InitializeDefaults();\r
+  ParseStartupFiles();\r
+  InitSystems();\r
+  if (argc==2)\r
+  {\r
+    memcpy(startmap, argv[1], strlen(argv[1]));\r
+  }\r
+\r
+  InitConsole();\r
+  sprintf(temp,"VERGE System Version %s", VERSION);\r
+  Con_Printf(temp);\r
+  Con_Printf("Copyright (C)1998 vecna");\r
+\r
+  ParseAutoCFG();\r
+  LoadTransTable();\r
+  LoadSystemVC();\r
+  LoadMAP(startmap);\r
+\r
+  while (1)\r
+  {\r
+    while (timer_count!=0)\r
+    {\r
+       timer_count--;\r
+       GameTick();\r
+    }\r
+    Render();\r
+\r
+    ShowPage();\r
+    if (kill)\r
+    {\r
+      FreeVSP();\r
+      FreeMAP();\r
+      FreeCHRList();\r
+      vcsp=vcstack;\r
+      kill=0;\r
+      LoadMAP(startmap);\r
+    }\r
+  }\r
+}\r