+++ /dev/null
-/*\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