]> 4ch.mooo.com Git - 16.git/blobdiff - 16/v2/source/verge/MAPED/MAPED.C
renamed: ptmp0.pcx -> data/ptmp0.pcx
[16.git] / 16 / v2 / source / verge / MAPED / MAPED.C
diff --git a/16/v2/source/verge/MAPED/MAPED.C b/16/v2/source/verge/MAPED/MAPED.C
deleted file mode 100644 (file)
index 9e17274..0000000
+++ /dev/null
@@ -1,1624 +0,0 @@
-/*\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
-const char *const ME2_VERSION = "2.01a";\r
-\r
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\r
-// CHANGELOG:\r
-// <vecna, may 14>\r
-// + erased valloc(), replaced with a_memory.c\r
-// + added Log() -- output to MAPED.LOG\r
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\r
-\r
-#include <dos.h>\r
-#include <stdio.h>\r
-\r
-#include <malloc.h>\r
-#include <stdlib.h>\r
-#include <string.h>\r
-#include <stdarg.h>\r
-\r
-#include "config.h"\r
-#include "gui.h"\r
-#include "keyboard.h"\r
-#include "mikmod.h"\r
-#include "mouse.h"\r
-#include "render.h"\r
-#include "timer.h"\r
-#include "vdriver.h"\r
-\r
-#include "ssaver.h"\r
-#include "smalfont.h"\r
-#include "tilesel.h"\r
-#include "minimap.h"\r
-#include "guicomp.h"\r
-#include "config.h"\r
-\r
-#define byte unsigned char\r
-#define word unsigned short\r
-\r
-// Includes for a_memory.c\r
-\r
-void *valloc(int amount, char *desc, int owner);\r
-void *qvalloc(int amount);\r
-int  vfree(void *pointer);\r
-void qvfree(void *pointer);\r
-void FreeByOwner(int owner);\r
-void MemReport(void);\r
-void CheckCorruption(void);\r
-\r
-// ================================= Data ====================================\r
-\r
-typedef struct\r
-{\r
-  unsigned short start;              // strand start\r
-  unsigned short finish;             // strand end\r
-  unsigned short delay;              // tile-switch delay\r
-  unsigned short mode;               // tile-animation mode\r
-} vspanim_r;\r
-\r
-typedef struct\r
-{\r
-  char pmultx,pdivx;                 // parallax multiplier/divisor for X\r
-  char pmulty,pdivy;                 // parallax multiplier/divisor for Y\r
-  unsigned short sizex, sizey;       // layer dimensions.\r
-  unsigned char trans, hline;        // transparency flag | hline (raster fx)\r
-} layer_r;\r
-\r
-typedef struct\r
-{\r
-  char name[40];                     // zone name/desc\r
-  unsigned short script;             // script to call thingy\r
-  unsigned short percent;            // chance of executing\r
-  unsigned short delay;              // step-delay\r
-  unsigned short aaa;                // Accept Adjacent Activation\r
-  unsigned short entityscript;       // script to call for entities\r
-} zoneinfo;\r
-\r
-typedef struct\r
-{\r
-  char zonename[16];                   // zone description\r
-  unsigned short int callevent;        // event number to call\r
-  unsigned char percent;               // chance (in 255) of event occurance\r
-  unsigned char delay;                 // step-delay before last occurance\r
-  unsigned char aaa;                   // accept adjacent activation\r
-  char savedesc[31];                   // savegame description\r
-} oldzone;\r
-\r
-typedef struct\r
-{\r
-  int x, y;                            // xwc, ywx position\r
-  word tx, ty;                         // xtc, ytc position\r
-  byte facing;                         // direction entity is facing\r
-  byte moving, movecnt;                // direction entity is moving\r
-  byte frame;                          // bottom-line frame to display\r
-  byte specframe;                      // special-frame set thingo\r
-  byte chrindex, reset;                // CHR index | Reset animation\r
-  byte obsmode1, obsmode2;             // can be obstructed | Is an obstruction\r
-  byte speed, speedct;                 // entity speed, speedcount :)\r
-  byte delayct;                        // animation frame-delay\r
-  char *animofs, *moveofs;             // anim script | move script\r
-  byte face, actm;                     // auto-face | activation mode\r
-  byte movecode, movescript;           // movement type | movement script\r
-  byte ctr, mode;                      // sub-tile move ctr, mode flag (internal)\r
-  word step, delay;                    // step, delay\r
-  word stepctr, delayctr;              // internal use counters\r
-  word data1, data2, data3;            //\r
-  word data4, data5, data6;            //\r
-  int  actscript;                      // activation script\r
-  int  expand1, expand2;               //\r
-  int  expand3, expand4;               //\r
-  char desc[20];                       // Entity description.\r
-} entity_r;\r
-\r
-typedef struct\r
-{\r
-  char t[60];\r
-} chrlist_r;\r
-\r
-typedef struct\r
-{\r
-  char t[200];\r
-} movescript;\r
-\r
-typedef struct\r
-{\r
-  unsigned short x;                    // xwc position\r
-  unsigned short y;                    // ywc position\r
-  unsigned char facing;                // direction entity is facing\r
-  unsigned char moving;                // direction entity is moving\r
-  unsigned char movcnt;                // how far left to move in this tile\r
-  unsigned char framectr;              // frame sequence counter\r
-  unsigned char specframe;             // special-frame set thingo\r
-  unsigned char chrindex, movecode;    // CHR index / movement pattern code\r
-  unsigned char activmode, obsmode;    // activation mode, obstruction mode\r
-  unsigned char v1,v2,v3;              // packing stuff.\r
-  unsigned int actscript, movescript;  // script references\r
-  unsigned char speed, speedct;        // entity speed, speedcount :)\r
-  unsigned short step, delay,          // Misc data entries\r
-                 data1, data2,         // More misc data\r
-                 data3, data4,         // yet more crappy misc data.\r
-                 delayct,adjactv;      // yet more internal crap\r
-  unsigned short x1,y1,x2,y2;          // bounding box coordinates\r
-  unsigned char curcmd, cmdarg;        // Script commands/arguments\r
-  unsigned char *scriptofs;            // offset in script parsing\r
-  unsigned char face,chasing,          // face player when activated | chasing\r
-                chasespeed, chasedist; // chasing variables\r
-  unsigned short cx,cy;                // current-tile pos (moving adjusted)\r
-  int expand1;                         // always room for improvement\r
-  char entitydesc[20];                 // Editing description\r
-} oldent_r;\r
-\r
-zoneinfo zones[256];                 // zone stuff.\r
-layer_r layer[6];                    // Array of layer data\r
-vspanim_r vspanim[100];              // tile animation data\r
-unsigned short vadelay[100];         // Tile animation delay ctr\r
-oldzone tzone;                       // zone for oldmap-to-v2 converting\r
-entity_r entity[256];                // Entity records.\r
-oldent_r oldent;                     // entity for oldmap-to-v2 converting\r
-byte entities=0;                     // number of allocated entities.\r
-chrlist_r chrlist[100];              // Max. 100 CHRs per map.\r
-movescript ms[100];                  // move scripts arrays\r
-byte nmchr=0;                        // number of active/loaded CHRs.\r
-byte nms=0;                          // number of movement scripts\r
-\r
-char mapname[60];                    // MAP filename\r
-char vspname[60];                    // VSP filemap\r
-char rstring[20];                    // render-order string\r
-char musname[60];                    // MAP default music\r
-char numlayers;                      // number of layers in map\r
-short xstart, ystart;                // MAP start locations\r
-char *obstruct, *zone;               // obstruction and zone buffers\r
-int numzones=0;                      // Number of active zones.\r
-unsigned short *layers[6];           // Raw layer data\r
-char wrap, soundokay=0;\r
-\r
-// -- vsp related data --\r
-\r
-unsigned short numtiles;             // number of allocated tiles in VSP\r
-unsigned char *vsp;                  // VSP ptr\r
-char vsp_locked=0;\r
-char vsp_pw[8];\r
-\r
-// -- map compression\r
-\r
-char *cb,*csrc;                      // compression workspace buffer\r
-int bufsize;                         // how many bytes need to be written\r
-\r
-// -- editing related data --\r
-\r
-int xwin=0, ywin=0;                  // Editing viewplane\r
-short lt=0, rt=0;                    // left-button tile, right-button tile\r
-char curzone=0;                      // current zone.\r
-char scrollmode=0;                   // tile or pixel scroll modes.\r
-char mouse_scroll=1;\r
-char layertoggle[10];                // layer visible toggles\r
-char el=0;                           // current editing layer.\r
-char modified=0;                     // Current buffer modified or not.\r
-\r
-// -- music stuff --\r
-\r
-char is_playing=0;\r
-char cmname[60];\r
-UNIMOD *mf=0;\r
-\r
-// -- copy/paste & block fill --\r
-\r
-word *copybuf=0;\r
-int copybuf_wide=0,copybuf_deep=0;\r
-int selx1=0, sely1=0, selx2=0, sely2=0;\r
-int shifted=0, pasting=0;\r
-extern char curtrack;\r
-\r
-char vcedprog[80];\r
-byte* translucency_table; //zero\r
-\r
-int moving_up=0,moving_down=0,moving_left=0,moving_right=0; // aen\r
-\r
-// ================================= Code ====================================\r
-\r
-//added by zero\r
-void LoadTransTable()\r
-{\r
-  FILE *fp;\r
-\r
-  if (!translucency_table)\r
-    translucency_table=(byte *) valloc(65536,"trans tbl",0);\r
-\r
-  fp=fopen("trans.tbl","rb");\r
-  if (!fp)\r
-  {\r
-    vfree(translucency_table);\r
-    translucency_table=0;\r
-    return;\r
-  }\r
-\r
-  fread(translucency_table, 65536, 1, fp);\r
-  fclose(fp);\r
-}\r
-\r
-int Exist(char *fname)\r
-{ FILE *tempf;\r
-\r
-  tempf=fopen(fname,"rb");\r
-  if (tempf)\r
-  {\r
-     fclose(tempf);\r
-     return 1;\r
-  }\r
-  else return 0;\r
-}\r
-\r
-void err(char *str, ...)\r
-{\r
-   va_list argptr;\r
-   char msg[256];\r
-\r
-   va_start(argptr, str);\r
-   vsprintf(msg, str, argptr);\r
-   va_end(argptr);\r
-\r
-  ShutdownVideo();\r
-  ShutdownTimer();\r
-  ShutdownKeyboard();\r
-  //CD_DeInit(); // wasn't even valid! CD_Deinit() was incorrect <aen, apr 21>\r
-               // Actually, Wat is by default case insensitive, so nyeh.;) <vec>\r
-  //if (curtrack != 1) //CD_Stop();\r
-\r
-  printf("%s \n",msg);\r
-  exit(-1);\r
-}\r
-\r
-void errf(char *str, char *str1)\r
-{\r
-  sprintf(strbuf,str,str1);\r
-  err(strbuf);\r
-}\r
-\r
-void errn(char *str, int n)\r
-{\r
-  sprintf(strbuf,str,n);\r
-  err(strbuf);\r
-}\r
-\r
-int random(int lo, int hi)\r
-{\r
-  int range=hi-lo+1;\r
-  int i=rand() % range;\r
-  return i+lo;\r
-}\r
-\r
-void PlayMusic(char *fname)\r
-{\r
-  if (!soundokay) return;\r
-  if (is_playing)\r
-  {\r
-    MD_PlayStop();\r
-    ML_Free(mf);\r
-    is_playing=0;\r
-  }\r
-  mf=ML_LoadFN(fname);\r
-  if (!mf)\r
-  {\r
-    Message("Could not load specified music.",500);\r
-    return;\r
-  }\r
-  MP_Init(mf);\r
-  md_numchn=mf->numchn; mp_loop=1;\r
-  MD_PlayStart();\r
-  is_playing=1;\r
-}\r
-\r
-void StopMusic()\r
-{\r
-  if (!soundokay) return;\r
-  MD_PlayStop();\r
-  ML_Free(mf);\r
-  is_playing=0;\r
-}\r
-\r
-void LoadVSP(char *fname)\r
-{ FILE *f;\r
-  short ver;\r
-\r
-  if (!(f=fopen(fname,"rb")))\r
-     errf("VSP file %s not found.",fname);\r
-\r
-  fread(&ver, 1, 2, f);\r
-  if (ver!=2 && ver!=3)\r
-     errf("VSP file %s is not the correct VSP format.",fname);\r
-  if (ver==2)\r
-  {\r
-    fread(&pal, 1, 768, f);\r
-    set_intensity(63);\r
-    fread(&numtiles, 1, 2, f);\r
-    vsp=(char *) valloc(256*numtiles, "vsp data", 0);\r
-    fread(vsp, 256, numtiles, f);\r
-    fread(&vspanim, 8, 100, f);\r
-    fclose(f);\r
-  }\r
-  if (ver==3)\r
-  {\r
-    fread(&pal, 1, 768, f);\r
-    set_intensity(63);\r
-    fread(&numtiles, 1, 2, f);\r
-    vsp=(char *) valloc(256*numtiles, "vsp data", 0);\r
-    fread(&bufsize, 1, 4, f);\r
-    ReadCompressedLayer1(vsp, 256*numtiles, f);\r
-    fread(&vspanim, 8, 100, f);\r
-    fclose(f);\r
-  }\r
-}\r
-\r
-void SaveVSP(char *fname)\r
-{ FILE *f;\r
-  short ver;\r
-\r
-  f=fopen(fname,"wb");\r
-  ver=3;\r
-  fwrite(&ver, 1, 2, f);\r
-  fwrite(&pal, 1, 768, f);\r
-  fwrite(&numtiles, 1, 2, f);\r
-  cb=(char *) valloc(numtiles*256, "vsp tempbuf", 0);\r
-  bufsize=0;\r
-  WriteCompressedLayer1(vsp, numtiles*256);\r
-  fwrite(&bufsize, 1, 4, f);\r
-  fwrite(cb, 1, bufsize, f);\r
-  //free(bufsize); // what the hell??? @_@\r
-  fwrite(&vspanim, 8, 100, f);\r
-  fclose(f);\r
-}\r
-\r
-void EmitC (char c)\r
-{\r
-  *csrc=c;\r
-  csrc++;\r
-  bufsize++;\r
-}\r
-\r
-void EmitW (short int w)\r
-{\r
-  char *ptr;\r
-\r
-  ptr=(char *)&w;\r
-  *csrc=*ptr;\r
-  csrc++;\r
-  ptr++;\r
-  *csrc=*ptr;\r
-  csrc++;\r
-  bufsize+=2;\r
-}\r
-\r
-void WriteCompressedLayer1(unsigned char *p, int len)\r
-{ int i;\r
-  unsigned char byt,samect;\r
-  unsigned char repcode;\r
-\r
-  csrc=cb;\r
-  i=0; bufsize=0;\r
-  do\r
-  {   byt=p[i++];\r
-      samect=1;\r
-      while (samect<254 && i<len && byt==p[i])\r
-      {\r
-         samect++;\r
-         i++;\r
-      }\r
-      if (samect==2 && byt != 0xFF) { EmitC(byt); }\r
-      if (samect==3 && byt != 0xFF) { EmitC(byt); EmitC(byt); }\r
-      if (samect>3 || byt == 0xFF)\r
-      {\r
-         repcode=0xFF;\r
-         EmitC(repcode);\r
-         repcode=(char) samect;\r
-         EmitC(repcode);\r
-      }\r
-      EmitC(byt);\r
-  } while (i<len);\r
-}\r
-\r
-void ReadCompressedLayer1(unsigned char *dest, int len, FILE *f)\r
-{ int j,n;\r
-  unsigned char run;\r
-  unsigned char w;\r
-\r
-  n=0;\r
-  do\r
-  {\r
-     fread(&w, 1, 1, f);\r
-     if (w==0xFF)\r
-     {\r
-         fread(&run, 1, 1, f);\r
-         fread(&w, 1, 1, f);\r
-         for (j=0; j<run; j++)\r
-             dest[n+j]=w;\r
-         n+=run;\r
-     }\r
-     else\r
-      {\r
-         dest[n]=w;\r
-         n++;\r
-      }\r
-  } while (n<len);\r
-}\r
-\r
-void WriteCompressedLayer2(unsigned short *p,int len)\r
-{ int i;\r
-  unsigned short byt,samect;\r
-  unsigned char repcode;\r
-\r
-  csrc=cb;\r
-  i=0; bufsize=0;\r
-  do\r
-  {   byt=p[i++];\r
-      samect=1;\r
-      while (samect<255 && i<len && byt==p[i])\r
-      {\r
-         samect++;\r
-         i++;\r
-      }\r
-      if (samect>1)\r
-      {\r
-         repcode=(char) samect;\r
-         EmitC(repcode);\r
-         repcode=0xFF;\r
-         EmitC(repcode);\r
-      }\r
-      EmitW(byt);\r
-  } while (i<len);\r
-}\r
-\r
-void ReadCompressedLayer2(unsigned short *dest, int len, FILE *f)\r
-{ int j,n;\r
-  unsigned char run;\r
-  unsigned short w;\r
-\r
-  n=0;\r
-  do\r
-  {\r
-     fread(&w, 1, 2, f);\r
-     if ((w & 0xFF00)==0xFF00)\r
-     {\r
-        run=(char) (w & 0x00FF);\r
-        fread(&w, 1, 2, f);\r
-        for (j=0; j<run; j++)\r
-            dest[n+j]=w;\r
-        n+=run;\r
-     }\r
-     else\r
-     {\r
-        dest[n]=w;\r
-        n++;\r
-     }\r
-  } while (n<len);\r
-}\r
-\r
-void CountUsedZones()\r
-{ int i;\r
-\r
-  i=255;\r
-  while (i)\r
-  {\r
-     if (zones[i].script) break;\r
-     if (zones[i].percent) break;\r
-     if (zones[i].delay) break;\r
-     if (zones[i].aaa) break;\r
-     if (zones[i].entityscript) break;\r
-     if (strlen(zones[i].name)) break;\r
-     i--;\r
-  }\r
-  numzones=i+1;\r
-}\r
-\r
-void CountMoveScripts()\r
-{ int i;\r
-\r
-  i=99;\r
-  while (i)\r
-  {\r
-     if (strlen(ms[i].t)) break;\r
-     i--;\r
-  }\r
-  nms=i+1;\r
-}\r
-\r
-void CountCHRs()\r
-{ int i;\r
-\r
-  i=99;\r
-  while (i)\r
-  {\r
-     if (strlen(chrlist[i].t)) break;\r
-     i--;\r
-  }\r
-  nmchr=i+1;\r
-}\r
-\r
-void SaveMAP(char *fname)\r
-{ FILE *f;\r
-  int i, ofstbl[100], ct, t;\r
-\r
-  memcpy(strbuf, "MAPù5", 6);\r
-  f=fopen(fname, "wb");\r
-  fwrite(strbuf, 1, 6, f);\r
-  fwrite(strbuf, 1, 4, f);\r
-  fwrite(vspname, 1, 60, f);\r
-  fwrite(musname, 1, 60, f);\r
-  fwrite(rstring, 1, 20, f);\r
-  fwrite(&xstart, 1, 2, f);\r
-  fwrite(&ystart, 1, 2, f);\r
-  fwrite(&wrap, 1, 1, f);\r
-  fwrite(strbuf, 1, 50, f);\r
-  fwrite(&numlayers, 1, 1, f);\r
-  for (i=0; i<numlayers; i++)\r
-      fwrite(&layer[i], 1, 12, f);\r
-\r
-  for (i=0; i<numlayers; i++)\r
-  {\r
-     cb=(char *) valloc(layer[i].sizex*layer[i].sizey*2,"cmprs buf", 0);\r
-     WriteCompressedLayer2(layers[i],(layer[i].sizex*layer[i].sizey));\r
-     fwrite(&bufsize, 1, 4, f);\r
-     fwrite(cb, 1, bufsize, f);\r
-     vfree(cb);\r
-  }\r
-  // Compress and write Obstruction data\r
-\r
-  cb=(char *) valloc(layer[0].sizex*layer[0].sizey*2, "cmprs buf", 0);\r
-  WriteCompressedLayer1(obstruct, (layer[0].sizex*layer[0].sizey));\r
-  fwrite(&bufsize, 1, 4, f);\r
-  fwrite(cb, 1, bufsize, f);\r
-  WriteCompressedLayer1(zone, (layer[0].sizex*layer[0].sizey));\r
-  fwrite(&bufsize, 1, 4, f);\r
-  fwrite(cb, 1, bufsize, f);\r
-  vfree(cb);\r
-\r
-  CountUsedZones();\r
-  fwrite(&numzones, 1, 4, f);\r
-  fwrite(&zones, numzones, 50, f);\r
-\r
-  CountCHRs();\r
-  fwrite(&nmchr, 1, 1, f);\r
-  fwrite(&chrlist, 60, nmchr, f);\r
-\r
-  fwrite(&entities, 1, 1, f);\r
-  fwrite(&entity, sizeof(entity)/256, entities, f);\r
-\r
-  CountMoveScripts();\r
-  fwrite(&nms, 1, 1, f);     // Calc offset buffer\r
-  ct=0;\r
-  for (i=0; i<nms; i++)\r
-  {\r
-    ofstbl[i]=ct;\r
-    t=strlen(&ms[i].t)+1;\r
-    ct+=t;\r
-  }\r
-  fwrite(&ct, 1, 4, f);        // string table length\r
-  fwrite(&ofstbl, nms, 4, f);  // write offset buffer\r
-  for (i=0; i<nms; i++)        // write string table\r
-  {\r
-    fwrite(&ms[i].t, 1, strlen(&ms[i].t)+1, f);\r
-  }\r
-\r
-  ct=0;  // 0 Things\r
-  fwrite(&ct, 1, 4, f);\r
-  ct=ftell(f);\r
-\r
-  i=1; fwrite(&i, 1, 4, f);\r
-  i=0; fwrite(&i, 1, 4, f);\r
-  i=1; fwrite(&i, 1, 4, f);\r
-  i=9; fwrite(&i, 1, 1, f);\r
-\r
-  fseek(f,6,0);\r
-  fwrite(&ct, 1, 4, f);\r
-  fclose(f);\r
-}\r
-\r
-void LoadOldMAP(FILE *f)\r
-{ int i, j, ct, ofstbl[100];\r
-  char pm,pd,pc,c;\r
-\r
-  // Reads a VERGE 1 format version 4 MAP file.\r
-  fseek(f, 1, 0);\r
-  fread(&vspname, 1, 13, f);\r
-  fread(&musname, 1, 13, f);\r
-  fread(&pc, 1, 1, f);             // }\r
-  fread(&pm, 1, 1, f);             // } Parallax controls\r
-  fread(&pd, 1, 1, f);             // }\r
-  fread(strbuf, 1, 32, f);         // unused - misc\r
-  fread(&xstart, 1, 2, f);\r
-  fread(&ystart, 1, 2, f);\r
-  fread(strbuf, 1, 2, f);          // unused - misc\r
-  fread(&layer[0].sizex, 1, 2, f);\r
-  fread(&layer[0].sizey, 1, 2, f);\r
-  layer[1].sizex=layer[0].sizex;\r
-  layer[1].sizey=layer[0].sizey;\r
-  fread(strbuf, 1, 28, f);         // unused - header pad\r
-\r
-  layers[0]=(unsigned short *) valloc((layer[0].sizex*(layer[0].sizey+1)*2)+2, "layer data", 0);\r
-  layers[1]=(unsigned short *) valloc((layer[1].sizex*(layer[1].sizey+1)*2)+2, "layer data", 1);\r
-   obstruct=(char *) valloc(layer[0].sizex*(layer[0].sizey+2), "obstruct map", 0);\r
-       zone=(char *) valloc(layer[0].sizex*(layer[0].sizey+2), "zone map", 0);\r
-         cb=(char *) valloc(layer[0].sizex*(layer[0].sizey+2), "comprs buf", 0);\r
-\r
-  fread(layers[0], 2, layer[0].sizex * layer[0].sizey, f);\r
-  fread(layers[1], 2, layer[1].sizex * layer[1].sizey, f);\r
-  fread(cb,        1, layer[0].sizex * layer[0].sizey, f);\r
-\r
-  // Convert MAP Properties layer to respective Zone and Obstruction layers\r
-\r
-  for (j=0; j<layer[0].sizey; j++)\r
-    for (i=0; i<layer[0].sizex; i++)\r
-    {\r
-      if ((cb[(j*layer[0].sizex)+i] & 1)==1)\r
-         c=1; else c=0;\r
-       obstruct[(j*layer[0].sizex)+i]=c;\r
-       c=cb[(j*layer[0].sizex)+i] >> 1;\r
-       zone[(j*layer[0].sizex)+i]=c;\r
-    }\r
-  vfree(cb);\r
-\r
-  // Load and convert zone data records.\r
-\r
-  for (i=0; i<128; i++)\r
-  {\r
-    fread(&tzone, 1, sizeof tzone, f);\r
-    zones[i].script=tzone.callevent;\r
-    zones[i].percent=tzone.percent;\r
-    zones[i].delay=tzone.delay;\r
-    zones[i].aaa=tzone.aaa;\r
-    zones[i].entityscript=0;\r
-    memcpy(zones[i].name, tzone.zonename, 16);\r
-  }\r
-\r
-  for (i=0; i<100; i++)                  // Load and convert CHR list\r
-    fread(&chrlist[i].t, 1, 13, f);\r
-//  DoCHRdealy();\r
-\r
-  fread(&entities, 1, 1, f); fseek(f, 3, 1);\r
-  memset(&entity, 0, sizeof entity);\r
-  for (i=0; i<entities; i++)             // Load and convert entity records\r
-  {\r
-    fread(&oldent, 1, 88, f);\r
-    entity[i].x=oldent.x;\r
-    entity[i].y=oldent.y;\r
-    entity[i].chrindex=oldent.chrindex-5;\r
-    entity[i].obsmode1=oldent.obsmode^1;\r
-    entity[i].obsmode2=1;\r
-    entity[i].movecode=oldent.movecode;\r
-    if (entity[i].movecode==3) entity[i].movecode=2;\r
-    else if (entity[i].movecode==2) entity[i].movecode=3;\r
-    entity[i].speed=oldent.speed;\r
-    entity[i].face=oldent.face;\r
-    entity[i].actm=oldent.activmode;\r
-    entity[i].movescript=oldent.movescript;\r
-    entity[i].step=oldent.step;\r
-    entity[i].delay=oldent.delay;\r
-    entity[i].data2=0;\r
-    entity[i].data3=0;\r
-    entity[i].data5=0;\r
-    entity[i].data6=0;\r
-    entity[i].actscript=oldent.actscript;\r
-    if (entity[i].movecode==2) entity[i].data2=oldent.data3;\r
-    if (entity[i].movecode==3)\r
-    {\r
-      entity[i].data2=oldent.x1;\r
-      entity[i].data3=oldent.y1;\r
-      entity[i].data5=oldent.x2;\r
-      entity[i].data6=oldent.y2;\r
-    }\r
-    memcpy(entity[i].desc, oldent.entitydesc, 20);\r
-  }\r
-\r
-  fread(&nms, 1, 1, f);\r
-  fread(&ct, 1, 4, f);\r
-  fread(&ofstbl, nms, 4, f);\r
-  ofstbl[nms]=ct;\r
-  for (i=0; i<nms; i++)\r
-   fread(&ms[i].t, 1, (ofstbl[i+1]-ofstbl[i]), f);\r
-  fclose(f);\r
-\r
-  numlayers=2;\r
-  layertoggle[0]=1; layertoggle[1]=1; layertoggle[2]=0; layertoggle[3]=0;\r
-  layertoggle[4]=0; layertoggle[5]=0; layertoggle[6]=0; layertoggle[7]=0;\r
-  memcpy(rstring,"1E2",3);\r
-  switch (pc)\r
-  {\r
-    case 0:\r
-    case 1: layer[0].pmultx=1; layer[0].pmulty=1; layer[0].pdivx=1; layer[0].pdivy=1;\r
-            layer[1].pmultx=1; layer[1].pmulty=1; layer[1].pdivx=1; layer[1].pdivy=1; break;\r
-    case 2: layer[0].pmultx=pm; layer[0].pmulty=pm; layer[0].pdivx=pd; layer[0].pdivy=pd;\r
-            layer[1].pmultx=1; layer[1].pmulty=1; layer[1].pdivx=1; layer[1].pdivy=1; break;\r
-    case 3: layer[0].pmultx=1; layer[0].pmulty=1; layer[0].pdivx=1; layer[0].pdivy=1;\r
-            layer[1].pmultx=pm; layer[1].pmulty=pm; layer[1].pdivx=pd; layer[1].pdivy=pd; break;\r
-  }\r
-\r
-  LoadVSP(vspname);\r
-  sprintf(strbuf, "MapEd %s Copyright (C)1998 vecna", ME2_VERSION);\r
-  Message(strbuf,700);\r
-  Message("Old VERGE format 4 MAP loaded.",300);\r
-  if (strlen(musname))\r
-    PlayMusic(musname);\r
-}\r
-\r
-void LoadMAP(char *fname)\r
-{ FILE *f;\r
-  int i, ct, ofstbl[100];\r
-\r
-  memcpy(strbuf, "MAPù5", 6);\r
-  if (!(f=fopen(fname, "rb"))) errf("Could not find %s.",fname);\r
-  fread(strbuf, 1, 6, f);\r
-  if (strcmp(strbuf,"MAPù5"))\r
-  {\r
-     if (strbuf[0]==4)\r
-     {\r
-        LoadOldMAP(f);\r
-        return;\r
-     }\r
-     errf("%s is not a recognized MAP file.",fname);\r
-  }\r
-\r
-  fread(&i, 1, 4, f);\r
-  fread(vspname, 1, 60, f);\r
-  fread(musname, 1, 60, f);\r
-  fread(rstring, 1, 20, f);\r
-  fread(&xstart, 1, 2, f);\r
-  fread(&ystart, 1, 2, f);\r
-  fread(&wrap, 1, 1, f);\r
-  fread(strbuf, 1, 50, f);\r
-  fread(&numlayers, 1, 1, f);\r
-  for (i=0; i<numlayers; i++)\r
-      fread(&layer[i], 1, 12, f);\r
-\r
-  for (i=0; i<numlayers; i++)\r
-  {\r
-     fread(&bufsize, 1, 4, f);\r
-     layers[i]=(unsigned short *) valloc(layer[i].sizex*(layer[i].sizey+2)*2, "layer data", i);\r
-     ReadCompressedLayer2(layers[i],(layer[i].sizex * layer[i].sizey),f);\r
-     layertoggle[i]=1;\r
-  }\r
-  while (i<10)\r
-  {\r
-     layertoggle[i]=0;\r
-     i++;\r
-  }\r
-  obstruct=(char *) valloc(layer[0].sizex*(layer[0].sizey+2),"obstruct map", 0);\r
-  zone=(char *) valloc(layer[0].sizex*(layer[0].sizey+2), "zone map", 0);\r
-\r
-  fread(&bufsize, 1, 4, f);\r
-  ReadCompressedLayer1(obstruct,(layer[0].sizex * layer[0].sizey), f);\r
-  fread(&bufsize, 1, 4, f);\r
-  ReadCompressedLayer1(zone,(layer[0].sizex * layer[0].sizey), f);\r
-\r
-  memset(&zones, 0, sizeof zones);\r
-  fread(&numzones, 1, 4, f);\r
-  fread(&zones, numzones, 50, f);\r
-\r
-  memset(&chrlist, 0, sizeof chrlist);\r
-  fread(&nmchr, 1, 1, f);\r
-  fread(&chrlist, 60, nmchr, f);\r
-//  DoCHRdealy();\r
-\r
-  fread(&entities, 1, 1, f);\r
-  fread(&entity, sizeof(entity)/256, entities, f);\r
-\r
-  fread(&nms, 1, 1, f);\r
-  fread(&ct, 1, 4, f);\r
-  fread(&ofstbl, nms, 4, f);\r
-  ofstbl[nms]=ct;\r
-  for (i=0; i<nms; i++)\r
-    fread(&ms[i].t, 1, (ofstbl[i+1]-ofstbl[i]), f);\r
-  fclose(f);\r
-\r
-  LoadVSP(vspname);\r
-  sprintf(strbuf, "MapEd %s Copyright (C)1998 vecna", ME2_VERSION);\r
-  Message(strbuf,700);\r
-  Message("V2 MAP loaded.",300);\r
-  if (strlen(musname))\r
-    PlayMusic(musname);\r
-}\r
-\r
-void InitTileIDX()\r
-{ short i;\r
-\r
-  memset(vadelay, 0, 200);\r
-  for (i=0; i<MAXTILES; i++)\r
-      tileidx[i]=i;\r
-}\r
-\r
-void CheckTimerStuff()\r
-{ static inss=0;\r
-\r
-  if (backupct>30000)\r
-  {\r
-    Message("Generating Auto-backup",150);\r
-    SaveMAP("$$BACKUP.MAP");\r
-    SaveVSP("$$BACKUP.VSP");\r
-    backupct=0;\r
-  }\r
-  if (idlect>8000 && !inss)\r
-  {\r
-    inss=1;\r
-    ScreenSaver();\r
-    idlect=0;\r
-    inss=0;\r
-  }\r
-}\r
-\r
-extern int difficulty;\r
-\r
-void SaveNewCFG()\r
-{ FILE *f;\r
-\r
-  f=fopen("maped.cfg","w");\r
-  //if (nocdaudio) fprintf(f,"nocdaudio\n");\r
-  fprintf(f,"vidmode %d \n", vm);\r
-  fprintf(f,"pad %d \n", pad);\r
-  fprintf(f,"scrollmode %d \n",scrollmode);\r
-  fprintf(f,"mouse_scroll %d \n",mouse_scroll&1); // aen\r
-  fprintf(f,"black %d \n",black);\r
-  fprintf(f,"white %d \n",brightw);\r
-  fprintf(f,"winbg %d \n",winbg);\r
-  fprintf(f,"shadow %d \n",darkw);\r
-  fprintf(f,"darkred %d \n",darkred);\r
-  fprintf(f,"titlebg %d \n",titlebg);\r
-  fprintf(f,"th %d \n", th);\r
-  fprintf(f,"mh %d \n", mh);\r
-  fprintf(f,"md_device %d \n", md_device==3?3:0);\r
-  fprintf(f,"amxofs %d \n",amxofs);\r
-  fprintf(f,"amyofs %d \n",amyofs);\r
-  fprintf(f,"mmxofs %d \n",mmxofs);\r
-  fprintf(f,"mmyofs %d \n",mmyofs);\r
-  fprintf(f,"cnxofs %d \n",cnxofs);\r
-  fprintf(f,"cnyofs %d \n",cnyofs);\r
-  fprintf(f,"lmxofs %d \n",lmxofs);\r
-  fprintf(f,"lmyofs %d \n",lmyofs);\r
-  fprintf(f,"lvxofs %d \n",lvxofs);\r
-  fprintf(f,"lvyofs %d \n",lvyofs);\r
-  fprintf(f,"mpxofs %d \n",mpxofs);\r
-  fprintf(f,"mpyofs %d \n",mpyofs);\r
-  fprintf(f,"vaxofs %d \n",vaxofs);\r
-  fprintf(f,"vayofs %d \n",vayofs);\r
-  fprintf(f,"zexofs %d \n",zexofs);\r
-  fprintf(f,"zeyofs %d \n",zeyofs);\r
-  fprintf(f,"exofs %d \n",exofs);\r
-  fprintf(f,"eyofs %d \n",eyofs);\r
-  fprintf(f,"prxofs %d \n",prxofs);\r
-  fprintf(f,"pryofs %d \n",pryofs);\r
-  fprintf(f,"rsxofs %d \n",rsxofs);\r
-  fprintf(f,"rsyofs %d \n",rsyofs);\r
-  fprintf(f,"vced %s \n",vcedprog);\r
-  fprintf(f,"difficulty %d \n",difficulty);\r
-  fclose(f);\r
-}\r
-\r
-#include "controls.c"\r
-\r
-void ShellToDOS()\r
-{\r
-  ShutdownVideo();\r
-  ShutdownKeyboard();\r
-  ShutdownTimer();\r
-  MD_PlayStop();\r
-  MD_Exit();\r
-\r
-  system("COMMAND.COM");\r
-\r
-  if (!MD_Init())\r
-  {\r
-    printf("Couldn't initialize sound: %s.\n", myerr);\r
-    delay(500);\r
-    soundokay=0;\r
-  }\r
-  if (strlen(musname)) PlayMusic(musname);\r
-  InitVideo(vm);\r
-  set_intensity(63);\r
-  InitMouse();\r
-  InitKeyboard();\r
-  InitTimer();\r
-}\r
-\r
-void ShellVERGE()\r
-{\r
-  ShutdownVideo();\r
-  ShutdownKeyboard();\r
-  ShutdownTimer();\r
-  MD_PlayStop();\r
-  MD_Exit();\r
-\r
-  system("VERGE");\r
-\r
-  if (!MD_Init())\r
-  {\r
-    printf("Couldn't initialize sound: %s.\n", myerr);\r
-    delay(500);\r
-    soundokay=0;\r
-  }\r
-  if (strlen(musname)) PlayMusic(musname);\r
-  InitVideo(vm);\r
-  set_intensity(63);\r
-  InitMouse();\r
-  InitKeyboard();\r
-  InitTimer();\r
-}\r
-\r
-void ShellMAP()\r
-{\r
-  ShutdownVideo();\r
-  ShutdownKeyboard();\r
-  ShutdownTimer();\r
-  MD_PlayStop();\r
-  MD_Exit();\r
-\r
-  sprintf(strbuf,"verge %s",mapname);\r
-  system(strbuf);\r
-\r
-  if (!MD_Init())\r
-  {\r
-    printf("Couldn't initialize sound: %s.\n", myerr);\r
-    delay(500);\r
-    soundokay=0;\r
-  }\r
-  if (strlen(musname)) PlayMusic(musname);\r
-  InitVideo(vm);\r
-  set_intensity(63);\r
-  InitMouse();\r
-  InitKeyboard();\r
-  InitTimer();\r
-}\r
-\r
-void ShellEditMAP()\r
-{\r
-  char fn[80],*p;\r
-\r
-  key[SCAN_ALT]=0;\r
-  key[SCAN_V]=0;\r
-  ShutdownVideo();\r
-  ShutdownKeyboard();\r
-  ShutdownTimer();\r
-  MD_PlayStop();\r
-  MD_Exit();\r
-\r
-  sprintf(fn,"%s",mapname);\r
-  p=fn;\r
-  while (*p)\r
-  {\r
-    if (*p=='.') *p=0;\r
-    p++;\r
-  }\r
-  sprintf(strbuf,"%s %s.vc", vcedprog, fn);\r
-  system(strbuf);\r
-\r
-  if (!MD_Init())\r
-  {\r
-    printf("Couldn't initialize sound: %s.\n", myerr);\r
-    delay(500);\r
-    soundokay=0;\r
-  }\r
-  if (strlen(musname)) PlayMusic(musname);\r
-  InitVideo(vm);\r
-  set_intensity(63);\r
-  InitMouse();\r
-  InitKeyboard();\r
-  InitTimer();\r
-}\r
-\r
-void ShellEditSystem()\r
-{\r
-  key[SCAN_ALT]=0;\r
-  key[SCAN_S]=0;\r
-  ShutdownVideo();\r
-  ShutdownKeyboard();\r
-  ShutdownTimer();\r
-  MD_PlayStop();\r
-  MD_Exit();\r
-\r
-  sprintf(strbuf,"%s system.vc", vcedprog);\r
-  system(strbuf);\r
-\r
-  if (!MD_Init())\r
-  {\r
-    printf("Couldn't initialize sound: %s.\n", myerr);\r
-    delay(500);\r
-    soundokay=0;\r
-  }\r
-  if (strlen(musname)) PlayMusic(musname);\r
-  InitVideo(vm);\r
-  set_intensity(63);\r
-  InitMouse();\r
-  InitKeyboard();\r
-  InitTimer();\r
-}\r
-\r
-char s[256];\r
-\r
-void CompileAll()\r
-{\r
-  FILE *f;\r
-  char *p;\r
-\r
-  MD_PlayStop();\r
-  MD_Exit();\r
-\r
-  sprintf(strbuf,"vcc all q",mapname);\r
-  system(strbuf);\r
-\r
-  if (!MD_Init())\r
-  {\r
-    printf("Couldn't initialize sound: %s.\n", myerr);\r
-    delay(500);\r
-    soundokay=0;\r
-  }\r
-  if (strlen(musname)) PlayMusic(musname);\r
-\r
-  if (!(f=fopen("error.txt","r")))\r
-  {\r
-    Message("All VC scripts sucessfully compiled.",300);\r
-    return;\r
-  }\r
-\r
-  fgets(s,99,f);\r
-  fclose(f);\r
-  p=s;\r
-  while (*p)\r
-  {\r
-    if (*p==13 || *p==10) *p=0;\r
-    p++;\r
-  }\r
-  VCNotify(s);\r
-}\r
-\r
-void CompileMAP()\r
-{\r
-  FILE *f;\r
-  char *p;\r
-\r
-  MD_PlayStop();\r
-  MD_Exit();\r
-\r
-  sprintf(strbuf,"vcc %s q",mapname);\r
-  system(strbuf);\r
-\r
-  if (!MD_Init())\r
-  {\r
-    printf("Couldn't initialize sound: %s.\n", myerr);\r
-    delay(500);\r
-    soundokay=0;\r
-  }\r
-  if (strlen(musname)) PlayMusic(musname);\r
-\r
-  if (!(f=fopen("error.txt","r"))) return;\r
-\r
-  fgets(s,99,f);\r
-  fclose(f);\r
-  p=s;\r
-  while (*p)\r
-  {\r
-    if (*p==13 || *p==10) *p=0;\r
-    p++;\r
-  }\r
-  VCNotify(s);\r
-}\r
-\r
-void tickhandler(void)\r
-{\r
-  MP_HandleTick();\r
-  MD_SetBPM(mp_bpm);\r
-}\r
-\r
-void RenderHighlight()\r
-{ int zx, zy;\r
-  int xw, yw;\r
-\r
-  if (mh)\r
-  {\r
-    xw=xwin&15;\r
-    yw=ywin&15;\r
-    zx=((mx+xw)&~15)-xw;\r
-    zy=((my+yw)&~15)-yw;\r
-\r
-    DrawHighlight(zx-1, zy-1);\r
-  }\r
-}\r
-\r
-int EntityThere(int xw, int yw)\r
-{ int i;\r
-\r
-  for (i=0; i<entities; i++)\r
-  {\r
-    if (entity[i].x==xw && entity[i].y==yw) return i+1;\r
-  }\r
-  return 0;\r
-}\r
-\r
-void AllocateEntity(int xw, int yw)\r
-{\r
-  memset(&entity[entities], 0, sizeof(entity) / 256);\r
-  entity[entities].x=xw;\r
-  entity[entities].y=yw;\r
-  entities++;\r
-}\r
-\r
-void ProcessEntity(int xw, int yw)\r
-{ int a;\r
-\r
-  a=EntityThere(xw,yw);\r
-  if (!a)\r
-  {\r
-     AllocateEntity(xw,yw);\r
-     while (mb)\r
-       ReadMouse(); // har! this was readmouse() @_@ <aen, apr 21>\r
-     mb=0;\r
-     return;\r
-  }\r
-  EntityEditor(a-1);\r
-}\r
-\r
-void DeleteEntity(int xw, int yw)\r
-{ int i,a;\r
-  char t[60];\r
-\r
-  a=EntityThere(xw,yw)-1;\r
-  sprintf(t,"Delete entity %d?",a);\r
-  if (!Confirm(t)) return;\r
-  for (i=a; i<entities; i++)\r
-  {\r
-    entity[i]=entity[i+1];\r
-  }\r
-  entities--;\r
-}\r
-\r
-int bxsize=130, bysize=170;\r
-int bxofs=80, byofs=25;\r
-int bmode=0;\r
-\r
-void Browse(char n, char *m1, char *m2, char *m3, char *m4, char *dest)\r
-{ struct find_t *f;\r
-  char i, *d, mode;\r
-  char *blah;\r
-  int fc=0, ofs=0, cfs=0, a, b;\r
-  char done=0, moving=0;\r
-  int mxo, myo, cursorblink;\r
-  char ctf=0, cb=0, c, t, *str;\r
-  //int zx,zy,zw;\r
-  char dragging=0;\r
-\r
-  f=(struct find_t *) valloc(sizeof *f, "browse() tmp",0);\r
-  blah=(char *) valloc(13*256,"browse()tmp2", 0);\r
-  //memset(blah, 0, 13*256);\r
-  n++;\r
-\r
-  for (i=0; i<n; i++)\r
-  {\r
-    switch (i)\r
-    {\r
-      case 0: d="AJDLMMZZ.GAH"; mode=0xFF; break;\r
-      case 1: d=m1; mode=0xFF; break;\r
-      case 2: d=m2; mode=0xFF; break;\r
-      case 3: d=m3; mode=0xFF; break;\r
-      case 4: d=m4; mode=0xFF; break;\r
-      default: err("uhh..."); break;\r
-    }\r
-    if (_dos_findfirst(d, mode, f)) continue;\r
-    memcpy(blah+(fc*13), f->name, 13); fc++;\r
-    while (!_dos_findnext(f))\r
-    {\r
-      memcpy(blah+(fc*13), f->name, 13); fc++;\r
-    }\r
-  }\r
-  vfree(f);\r
-  last_pressed=0;\r
-  a=fc<22?117:2574/fc;\r
-//  errn("%d",fc);\r
-  do\r
-  {\r
-    if (!bmode)\r
-    {\r
-      RenderMap();\r
-      RenderGUI();\r
-    }\r
-    else\r
-    {\r
-      RenderSelector();\r
-      RenderMessages();\r
-    }\r
-    if (ctf && systemtime >= cursorblink)\r
-    {\r
-      cb ^= 1;\r
-      cursorblink = systemtime+40;\r
-    }\r
-    if (moving)\r
-    {\r
-      bxofs = (mx-mxo);\r
-      byofs = (my-myo);\r
-      if (!mb) moving=0;\r
-      if (bxofs<16) bxofs = 16;\r
-      if (byofs<16) byofs = 16;\r
-      if (bxofs+bxsize>335) bxofs = 336-bxsize;\r
-      if (byofs+bysize>sy+16) byofs = (sy+16)-bysize;\r
-    }\r
-\r
-    Window(bxofs, byofs, bxofs+bxsize, byofs+bysize, "Browse");\r
-    Button(bxofs+65, byofs+157, "OK");\r
-    Button(bxofs+96, byofs+157, "Cancel");\r
-    FilledBox(bxofs+20, byofs+15, 80, 135, black);\r
-    FilledBox(bxofs+100, byofs+15, 10, 135, 2);\r
-    HLine(bxofs+20, byofs+15, 90, darkw);\r
-    VLine(bxofs+20, byofs+15, 135, darkw);\r
-    VLine(bxofs+99, byofs+16, 134, white);\r
-    VLine(bxofs+109, byofs+16, 134, white);\r
-    HLine(bxofs+21, byofs+149, 89, white);\r
-    stdwindow(bxofs+100, byofs+16, bxofs+109, byofs+25);\r
-    stdwindow(bxofs+100, byofs+140, bxofs+109, byofs+149);\r
-    b=byofs+24+(fc != 22 ? ((117-a)*ofs)/(fc-22) : 0);\r
-\r
-    //draws the drag box\r
-    stdwindow(bxofs+100, b, bxofs+109, b+a);\r
-\r
-    FilledBox(bxofs+21, byofs+((cfs-ofs)*6)+16, 78, 6, darkw);\r
-\r
-    // Render actual filename thingies\r
-    i=0;\r
-    while (1)\r
-    {\r
-      if (i+ofs<fc && i<22)\r
-      {\r
-        GotoXY(bxofs+22, byofs+17+(i*6));\r
-        printstring(blah+((i+ofs)*13));\r
-      }\r
-      else break;\r
-      i++;\r
-    }\r
-\r
-    DrawMouse();\r
-    ShowPage();\r
-    CheckTimerStuff();\r
-\r
-    // input phase\r
-\r
-    if(dragging&&!mb)\r
-    {\r
-      dragging=0;\r
-    }\r
-\r
-    if((mb==1&&mx>bxofs+100&&mx<bxofs+110&&my>byofs+25&&my<byofs+135)||dragging)\r
-    {\r
-      if(my>b&&my<b+a)\r
-      {\r
-        dragging=1;\r
-      }\r
-      else\r
-      {\r
-        if(my<b)\r
-        {\r
-          if (ofs<22) ofs=0;\r
-          else ofs-=22;\r
-          cfs=ofs;\r
-        }\r
-        if(my>b+a)\r
-        {\r
-          if (ofs+45>fc) ofs=fc-22;\r
-          else ofs+=22;\r
-          cfs=ofs;\r
-        }\r
-      }\r
-    }\r
-    if(!dragging)\r
-    {\r
-    if (mb==1 && mx>bxofs+20 && mx<bxofs+100 && my>byofs+15 && my<byofs+149)\r
-    {\r
-      i=(my-byofs-16)/6;\r
-      i+=ofs;\r
-      memcpy(dest,blah+(i*13),13);\r
-      done=1;\r
-      break;\r
-    }\r
-    if (mb==1 && mx>bxofs+100 && mx<bxofs+110 && my>byofs+15 && my<byofs+25)\r
-    {\r
-      WaitRelease();\r
-      key[SCAN_UP]=1;\r
-      last_pressed=SCAN_UP;\r
-    }\r
-    if (mb==1 && mx>bxofs+100 && mx<bxofs+110 && my>byofs+139 && my<byofs+149)\r
-    {\r
-      WaitRelease();\r
-      key[SCAN_DOWN]=1;\r
-      last_pressed=SCAN_DOWN;\r
-    }\r
-    if (mb==1 && mx>bxofs+65 && mx<bxofs+30+65 && my>byofs+157 && my<byofs+10+157 && !moving)\r
-    {\r
-      memcpy(dest, blah, 13); done=1;\r
-      ButtonPressed(bxofs+65, byofs+157, "OK");\r
-      DrawMouse();\r
-      while (mb)\r
-      {\r
-        ReadMouse();\r
-        ShowPage();\r
-        ReadMouse();\r
-      }\r
-      WaitRelease(); continue;\r
-    }\r
-\r
-    if (mb==1 && mx>bxofs+96 && mx<bxofs+30+96 && my>byofs+157 && my<byofs+10+157 && !moving)\r
-    {\r
-      *dest=0; done=1;\r
-      ButtonPressed(bxofs+96, byofs+157, "Cancel");\r
-      DrawMouse();\r
-      while (mb)\r
-      {\r
-        ReadMouse();\r
-        ShowPage();\r
-        ReadMouse();\r
-      }\r
-      WaitRelease(); continue;\r
-    }\r
-\r
-    if (mb==1 && mx>(bxofs+bxsize-9) && (mx<bxofs+bxsize-2)\r
-    && my>(byofs+1) && (my<byofs+8) && !moving)\r
-    {\r
-      done=1;\r
-      WaitRelease();\r
-      break;\r
-    }\r
-\r
-    if (mb==1 && mx>bxofs && mx<bxofs+bxsize && my>byofs && my<(byofs+9) && !moving)\r
-    {\r
-      moving=1;\r
-      mxo=mx-bxofs;\r
-      myo=my-byofs;\r
-      continue;\r
-    }\r
-\r
-    if (mb==1 && !moving)\r
-    {\r
-      ctf=0;\r
-      cb=0;\r
-      str=0;\r
-    }\r
-\r
-    if (last_pressed)\r
-    {\r
-      if (key[SCAN_LSHIFT] || key[SCAN_RSHIFT]) c=key_shift_tbl[last_pressed];\r
-      else c=key_ascii_tbl[last_pressed];\r
-\r
-      if (last_pressed==SCAN_ESC)\r
-      {\r
-        key[SCAN_ESC]=0;\r
-        done=1;\r
-        break;\r
-      }\r
-      if (key[SCAN_PGUP])\r
-      {\r
-        if (ofs<22) ofs=0;\r
-        else ofs-=22;\r
-        cfs=ofs;\r
-        key[SCAN_PGUP]=0;\r
-        continue;\r
-      }\r
-      if (key[SCAN_PGDN])\r
-      {\r
-        if (ofs+45>fc) ofs=fc-22;\r
-        else ofs+=22;\r
-        if (fc<22) ofs=0;\r
-        cfs=ofs;\r
-        key[SCAN_PGDN]=0;\r
-        continue;\r
-      }\r
-      if (key[SCAN_UP])\r
-      {\r
-        if (cfs) cfs--;\r
-        if (ofs>cfs) ofs--;\r
-        key[SCAN_UP]=0;\r
-        last_pressed=0;\r
-        continue;\r
-      }\r
-      if (key[SCAN_DOWN])\r
-      {\r
-        if (cfs<fc-1) cfs++;\r
-        if (cfs-ofs>21) ofs++;\r
-        key[SCAN_DOWN]=0;\r
-        last_pressed=0;\r
-        continue;\r
-      }\r
-      if (last_pressed==SCAN_ENTER)\r
-      {\r
-        memcpy(dest,blah+(cfs*13),13);\r
-        key[SCAN_ENTER]=0;\r
-        done=1;\r
-        ctf=0;\r
-        str=0;\r
-        last_pressed=0;\r
-        break;\r
-      }\r
-\r
-      if (last_pressed==SCAN_TAB)\r
-      {\r
-        switch (ctf)\r
-        {\r
-          case 0: ctf=0; str=0; break;\r
-        }\r
-        key[SCAN_TAB]=0;\r
-        last_pressed=0;\r
-        cb=1; cursorblink=systemtime+40;\r
-        continue;\r
-      }\r
-\r
-      if (!ctf)\r
-        continue;\r
-\r
-      if (last_pressed==SCAN_BACKSP && strlen(str))\r
-      {\r
-        str[strlen(str)-1]=0;\r
-        key[SCAN_BACKSP]=0;\r
-        last_pressed=0;\r
-        continue;\r
-      }\r
-      else if (last_pressed==SCAN_BACKSP)\r
-      {\r
-        last_pressed=0;\r
-        continue;\r
-      }\r
-\r
-      t=strlen(str);\r
-      str[t]=c;\r
-      str[t+1]=0;\r
-      last_pressed=0;\r
-      }\r
-    }\r
-  } while (!done);\r
-  vfree(blah);\r
-}\r
-\r
-#include "vergepal.h"\r
-#define LOGFILE "maped.log"\r
-\r
-void Log(char *text, ...)\r
-{\r
-   va_list argptr;\r
-   char msg[256];\r
-   FILE *logf;\r
-\r
-   va_start(argptr, text);\r
-   vsprintf(msg, text, argptr);\r
-   va_end(argptr);\r
-\r
-   logf=fopen(LOGFILE,"aw");\r
-   fprintf(logf,"%s\n",msg);\r
-   fflush(logf);\r
-   fclose(logf);\r
-}\r
-\r
-int main(int argc, char *argv[])\r
-{\r
-\r
-  remove(LOGFILE);\r
-  md_mixfreq=44100;\r
-  md_dmabufsize=5000;\r
-  md_mode=DMODE_16BITS|DMODE_STEREO;\r
-  md_device=0;\r
-  memset(&chrs, 0, sizeof chrs);\r
-\r
-  Log("GetConfig");\r
-  GetConfig("maped.cfg");\r
-  Log("LoadTransTbl");\r
-  translucency_table=0; //zero\r
-  LoadTransTable(); //zero\r
-\r
-  Log("RegisterModLoaders");\r
-  ML_RegisterLoader(&load_mod);\r
-  ML_RegisterLoader(&load_s3m);\r
-  ML_RegisterLoader(&load_xm);\r
-  ML_RegisterLoader(&load_uni);\r
-\r
-  Log("RegisterSndDrivers");\r
-  MD_RegisterDriver(&drv_nos);\r
-  MD_RegisterDriver(&drv_sb);\r
-  MD_RegisterDriver(&drv_gus);\r
-  MD_RegisterPlayer(tickhandler);\r
-  soundokay=1;\r
-  Log("Initialize snd lib");\r
-  if (!MD_Init())\r
-  {\r
-    printf("Couldn't initialize sound: %s.\n", myerr);\r
-    delay(500);\r
-    soundokay=0;\r
-  }\r
-\r
-  //Log("Initialize CD audio");\r
-  //CD_Init();\r
-\r
-  Log("Initialize timer");\r
-  InitTimer();\r
-  Log("Initialize video");\r
-  InitVideo(vm);\r
-  Log("Initialize mouse");\r
-  InitMouse();\r
-  Log("Initialize keyboard IRQ handler");\r
-  InitKeyboard();\r
-\r
-  Log("Initializing map data");\r
-  if (argc==1 && !Exist("untitled.map"))\r
-  {\r
-    SetPalette(vergepal);\r
-    memcpy(pal, vergepal, 768);\r
-    memcpy(mapname,"UNTITLED.MAP",13);\r
-    memcpy(vspname,"UNTITLED.VSP",13);\r
-    memcpy(rstring,"1E",2);\r
-    numlayers=1;\r
-\r
-    // aen: default newmap dimensions set to 100x100\r
-    layer[0].pmultx=1;  layer[0].pmulty=1;\r
-    layer[0].pdivx=1;   layer[0].pdivy=1;\r
-    layer[0].sizex=100; layer[0].sizey=100;\r
-    layer[0].trans=0;   layer[0].hline=0;\r
-\r
-    layers[0]=(unsigned short *) valloc((layer[0].sizex*layer[0].sizey*2)+4,"layer data",0);\r
-    //memset(layers[0],0,(layer[0].sizex*layer[0].sizey)*2);\r
-    obstruct=(char *) valloc((layer[0].sizex*layer[0].sizey)+4,"obstruct map",0);\r
-    zone=(char *) valloc((layer[0].sizex*layer[0].sizey)+4,"zone map", 0);\r
-\r
-    // aen: default number of tiles set to 100\r
-    numtiles=100;\r
-    vsp=(char *) valloc(256 * numtiles,"vsp data", 0);\r
-    wrap=0; el=0; layertoggle[0]=1;\r
-    InitTileIDX();\r
-  }\r
-  else\r
-  {\r
-    if (argc==1) memcpy(mapname, "untitled.map",13);\r
-    else memcpy(mapname, argv[1], strlen(argv[1]));\r
-    LoadMAP(mapname);\r
-    InitTileIDX();\r
- }\r
-Log("Entering main loop");\r
-thingy:\r
-  while (!(key[SCAN_ALT] && key[SCAN_X]))\r
-  {\r
-    ProcessControls();\r
-    while (tick)\r
-    {\r
-      tick--;\r
-      PollMovement();\r
-    }\r
-    RenderMap();\r
-    RenderHighlight();\r
-    RenderGUI();\r
-    ShowPage();\r
-  }\r
-  if (modified)\r
-     if (!Confirm("Lose unsaved changes?"))\r
-     {\r
-       key[SCAN_ALT]=0;\r
-       key[SCAN_X]=0;\r
-       goto thingy;\r
-     }\r
-\r
-  ShutdownVideo();\r
-  ShutdownKeyboard();\r
-  ShutdownTimer();\r
-  SaveNewCFG();\r
-  remove("$$BACKUP.MAP");\r
-  remove("$$BACKUP.VSP");\r
-\r
-  //if (curtrack != 1) CD_Stop();\r
-  //CD_DeInit(); // wasn't even valid! CD_Deinit() was incorrect <aen, apr 21>\r
-  MD_PlayStop(); // Mordred\r
-  ML_Free(mf);\r
-\r
-  MD_Exit();\r
-  if (translucency_table)\r
-    vfree(translucency_table); //zero\r
-  return 0;\r
-}\r