|
|
1.1 root 1: #include <fcntl.h>
2: #include <io.h>
3: #include <sys\types.h>
4: #include <sys\stat.h>
5: #include "stdio.h"
6: #include "stdlib.h"
7: #include "string.h"
8: #include "build.h"
9:
10: #define TEKWAR 1
11:
12: #define AVERAGEFRAMES 16
13:
14: extern volatile char keystatus[256];
15:
16: static char tempbuf[256];
17: extern long qsetmode;
18: extern short searchsector, searchwall, searchstat;
19: extern long zmode, kensplayerheight;
20: extern short defaultspritecstat;
21:
22: extern short temppicnum, tempcstat, templotag, temphitag, tempextra;
23: extern char tempshade, temppal, tempxrepeat, tempyrepeat;
24: extern char somethingintab;
25:
26: static long frameval[AVERAGEFRAMES], framecnt = 0;
27:
28: #define NUMOPTIONS 8
29: #define NUMKEYS 19
30:
31: long chainxres[4] = {256,320,360,400};
32: long chainyres[11] = {200,240,256,270,300,350,360,400,480,512,540};
33: long vesares[7][2] = {320,200,640,400,640,480,800,600,1024,768,
34: 1280,1024,1600,1200};
35: char option[NUMOPTIONS] = {0,0,0,0,0,0,98,0};
36: char keys[NUMKEYS] =
37: {
38: 0xc8,0xd0,0xcb,0xcd,0x2a,0x9d,0x1d,0x39,
39: 0x1e,0x2c,0xd1,0xc9,0x33,0x34,
40: 0x9c,0x1c,0xd,0xc,0xf,
41: };
42:
43:
44: #ifdef TEKWAR
45: #include "stdio.h"
46: #include "stdlib.h"
47: #include "sys\stat.h"
48: #include "sys\types.h"
49: #include "fcntl.h"
50: #include "io.h"
51:
52: #define PULSELIGHT 0
53: #define FLICKERLIGHT 1
54: #define DELAYEFFECT 2
55: #define WPANNING 3
56: #define FPANNING 4
57: #define CPANNING 5
58: #define FLICKERDELAY 6
59: #define BLINKDELAY 7
60: #define STEADYLIGHT 8
61:
62: #define NO_PIC 0
63:
64: #define INANIMATE 0
65: #define INACTIVE 100
66: #define STANDING 201
67: #define AMBUSH 202
68: #define GUARD 203
69: #define STALK 204
70: #define FLEE 205
71: #define CHASE 206
72: #define PATROL 207
73: #define CRAWL 208
74: #define STROLL 209
75: #define PINBALL 403
76: #define FLY 500
77: #define RODENT 502
78:
79: #define GUN2FLAG 2
80: #define GUN3FLAG 3
81: #define GUN4FLAG 4
82: #define GUN5FLAG 5
83: #define GUN6FLAG 6
84: #define GUN7FLAG 7
85:
86: #define CLASS_NULL 0
87: #define CLASS_FCIAGENT 1
88: #define CLASS_CIVILLIAN 2
89: #define CLASS_SPIDERDROID 3
90: #define CLASS_COP 4
91: #define CLASS_MECHCOP 5
92: #define CLASS_TEKBURNOUT 6
93: #define CLASS_TEKGOON 7
94: #define CLASS_ASSASSINDROID 8
95: #define CLASS_SECURITYDROID 9
96: #define CLASS_TEKBOSS 10
97: #define CLASS_TEKLORD 11
98:
99: #define PTS_CIVILLIAN 10
100: #define PTS_SPIDERDROID 15
101: #define PTS_COP 50
102: #define PTS_MECHCOP 100
103: #define PTS_TEKBURNOUT 25
104: #define PTS_TEKGOON 50
105: #define PTS_ASSASSINDROID 100
106: #define PTS_SECURITYDROID 200
107: #define PTS_TEKBOSS 100
108: #define PTS_TEKLORD 200
109:
110: extern long posx,posy,posz;
111: extern short ang,cursectnum;
112: extern short ceilingheinum,floorheinum;
113: extern char names[MAXTILES][17];
114:
115: static char tempbuf[256];
116: static int numsprite[2000];
117: static char lo[32];
118: static char hi[32];
119: static const char *levelname;
120: static short curwall=0,wallpicnum=0,curwallnum=0;
121: static short cursprite=0,curspritenum=0;
122: static char wallsprite=0;
123: static helpon=0;
124: static char once=0;
125:
126: struct picattribtype {
127: char numframes;
128: char animtype;
129: signed char ycenteroffset,xcenteroffset;
130: char animspeed;
131: };
132:
133: struct spriteextension {
134: char class;
135: char hitpoints;
136: unsigned short target;
137: unsigned short fxmask;
138: unsigned short aimask;
139: short basestat;
140: unsigned short basepic;
141: unsigned short standpic;
142: unsigned short walkpic;
143: unsigned short runpic;
144: unsigned short attackpic;
145: unsigned short deathpic;
146: unsigned short painpic;
147: unsigned short squatpic;
148: unsigned short morphpic;
149: unsigned short specialpic;
150: char lock;
151: char weapon;
152: short ext2;
153: };
154: struct spriteextension spriteXT[MAXSPRITES];
155:
156: struct XTsavetype {
157: short XTnum;
158: struct spriteextension sprXT;
159: };
160: struct XTsavetype XTsave;
161:
162: struct XTtrailertype {
163: long numXTs;
164: long start;
165: char mapname[13];
166: char ID[13];
167: };
168: struct XTtrailertype XTtrailer;
169:
170: #define TRAILERID "**MAP_EXTS**"
171:
172: short recordXT = -1;
173: struct spriteextension recXT;
174:
175: #define MAXCLASSES 15
176: short numinclass[MAXCLASSES];
177:
178: char editvelocity=0;
179: char elapsedtime=0;
180: char copyext=0;
181: char recordext=0;
182: char liststates=0;
183: char matchcstats=0;
184: char docleanup=0;
185: char spriteextmodified=0;
186: long tickdelay;
187: #endif
188:
189: #pragma aux wrchar = \
190: "or eax,0x00000900", \
191: "mov ebx,0x0000007F", \
192: "mov ecx,0x00000001", \
193: "int 0x10", \
194: parm [eax] \
195:
196: #pragma aux terminate = \
197: "or eax, 0x00004C00", \
198: "int 0x21", \
199: parm [eax] \
200:
201: #pragma aux scrldn = \
202: "mov eax,0x00000701", \
203: "mov ebx,0x00007700", \
204: "mov ecx,0x00000000", \
205: "mov edx,0x00000F4F", \
206: "int 0x10" \
207:
208: #pragma aux home = \
209: "mov eax,0x00000200", \
210: "mov ebx,0x00000000", \
211: "add edx,0x00000019", \
212: "int 0x10", \
213: parm [edx] \
214:
215: #pragma aux ontherange = \
216: "mov eax,0x00000200", \
217: "mov ebx,0x00000000", \
218: "mov edx,0x00000300", \
219: "int 0x10" \
220:
221: #pragma aux clrscr = \
222: "mov eax,0x00000003", \
223: "int 0x10" \
224:
225:
226: void
227: speaker(int freq)
228: {
229: int i;
230: unsigned char p;
231: union {
232: int divisor;
233: unsigned char c[2];
234: } count;
235:
236: count.divisor=1193280/freq;
237: outp(67,182);
238: outp(66,count.c[0]);
239: outp(66,count.c[1]);
240: p=inp(97);
241: outp(97,p|3);
242:
243: for( i=0; i<640000; i++ )
244: ;
245:
246: outp(97, p);
247: }
248:
249: #ifdef TEKWAR
250: // overrides of engine insert/delete sprite
251: insertsprite(short sectnum, short statnum)
252: {
253: insertspritestat(statnum);
254: return(insertspritesect(sectnum));
255: }
256:
257: deletesprite(short spritenum)
258: {
259: if( (sprite[spritenum].extra!=-1) ) {
260: JS_DeleteExt(spritenum);
261: }
262:
263: deletespritestat(spritenum);
264: return(deletespritesect(spritenum));
265: }
266:
267: void
268: PrintStatus(char *string,int num,char x,char y,char color)
269: {
270: sprintf(tempbuf,"%s %d",string,num);
271: printext16(x*8,y*8,color,-1,tempbuf,0);
272: }
273:
274: void
275: PrintStatusStr(char *string,char *s,char x,char y,char color)
276: {
277: sprintf(tempbuf,"%s %s",string,s);
278: printext16(x*8,y*8,color,-1,tempbuf,0);
279: }
280:
281: void
282: SpriteName(short spritenum, char *lo2)
283: {
284: sprintf(lo2,names[sprite[spritenum].picnum]);
285: }
286:
287: void
288: JS_MatchCstats()
289: {
290: char what[50];
291: int i,ans;
292:
293: putch(0x07);
294: sprintf(what, "1=YES,MATCH SPR CSTATS. 0 TO CANCEL. ");
295: ans=getnumber16(what, 0, 2L);
296:
297: if( ans != 1 ) {
298: printmessage16("Cancelled...");
299: return;
300: }
301:
302: for( i=0; i<MAXSPRITES; i++ ) {
303: if( sprite[i].cstat & 0x0001 ) {
304: sprite[i].cstat|=0x0100;
305: }
306: }
307:
308: printmessage16("All sprite hitscans match blocking...");
309:
310: return;
311: }
312:
313: void
314: JS_CleanupExtensions()
315: {
316: char what[50];
317:
318: sprintf(what, "Checking extras...");
319: printmessage16(what);
320: tickdelay=totalclock;
321: while ( (totalclock-tickdelay)<50 )
322: ;
323: checkextras();
324: }
325:
326: void
327: JS_RecordExt(int sn)
328: {
329: char what[50];
330:
331: clearmidstatbar16();
332:
333: if( sprite[sn].extra < 0 ) {
334: sprintf(what, "Sprite has no EXT to record !");
335: printmessage16(what);
336: tickdelay=totalclock;
337: while ( (totalclock-tickdelay)<50 )
338: ;
339: return;
340: }
341:
342: recordXT=sprite[sn].extra;
343:
344: JS_ShowSpriteExts(sn);
345:
346: sprintf(what, "Recording Ext %d for copying...", sn);
347: printmessage16(what);
348: tickdelay=totalclock;
349: while ( (totalclock-tickdelay)<50 )
350: ;
351:
352: memcpy(&recXT, &spriteXT[recordXT], sizeof(struct spriteextension));
353: }
354:
355: void
356: JS_CopyExt(int sn)
357: {
358: char what[50];
359: short j;
360: int ans;
361:
362: clearmidstatbar16();
363:
364: if( (recordXT < 0) || (recordXT > MAXSPRITES) ) {
365: sprintf(what, "NO current valid copy EXT to copy !");
366: printmessage16(what);
367: tickdelay=totalclock;
368: while ( (totalclock-tickdelay)<50 )
369: ;
370: return;
371: }
372:
373: j=sprite[sn].extra;
374:
375: if( j < 0 ) {
376: sprintf(what, "Mapping EXT for sprite %d...", sn);
377: printmessage16(what);
378: tickdelay=totalclock;
379: while ( (totalclock-tickdelay)<50 )
380: ;
381: j=JS_FirstFreeExt();
382: if( j == -1 ) {
383: printmessage16("ERROR! Not able to map to an extension.");
384: return;
385: }
386: printmessage16("Extension Mapped.");
387: tickdelay=totalclock;
388: while ( (totalclock-tickdelay)<50 )
389: ;
390: sprite[sn].extra=j;
391: JS_InitExtension(sn, j);
392: JS_LockExt(j);
393: JS_ShowSpriteExts(sn);
394: }
395: else {
396: putch(0x07);
397: sprintf(what, "Overwrite existing EXT for sprite %d ? 1=YES 0=NO ", sn);
398: ans=getnumber16(what, 0, 2L);
399: if( ans != 1 ) {
400: printmessage16("Not Copied...");
401: return;
402: }
403: }
404:
405: memcpy(&spriteXT[j], &recXT, sizeof(struct spriteextension));
406:
407: sprintf(what, "Copying Ext %d to sprite %d...", recordXT, sn);
408: printmessage16(what);
409: tickdelay=totalclock;
410: while ( (totalclock-tickdelay)<50 )
411: ;
412:
413: JS_ShowSpriteExts(sn);
414: }
415:
416: void
417: JS_DeleteExt(short sn)
418: {
419: short x=sprite[sn].extra;
420:
421: memset(&spriteXT[x], 0, sizeof(struct spriteextension));
422:
423: if( qsetmode == 480 ) {
424: printmessage16("Deleting Extension...");
425: tickdelay=totalclock;
426: while ( (totalclock-tickdelay)<60 )
427: ;
428: }
429:
430: // reset recordXT
431: if( x == recordXT ) {
432: recordXT=-1;
433: }
434:
435: return;
436: }
437:
438: void
439: JS_ClearAllExts(void)
440: {
441: char what[50];
442: int i,ans;
443:
444: putch(0x07);
445: sprintf(what, "1=YES,DELETE ALL EXTS, 0 TO CANCEL. ");
446: ans=getnumber16(what, 0, 2L);
447:
448: if( ans != 1 ) {
449: printmessage16("Cancelled...");
450: return;
451: }
452:
453: sprintf(what, "REALLY DELETE EXTS ? 1=YES 0=NO ");
454: ans=getnumber16(what, 0, 2L);
455:
456: if( ans != 1 ) {
457: printmessage16("Cancelled...");
458: return;
459: }
460:
461: for( i=0; i<MAXSPRITES; i++ ) {
462: memset(&spriteXT[i], 0, sizeof(struct spriteextension));
463: }
464: for( i=0; i<MAXSPRITES; i++ ) {
465: sprite[i].extra=-1;
466: }
467:
468: printmessage16("All sprite EXTS cleared...");
469:
470: return;
471: }
472:
473: void
474: JS_ClearAllSprites(void)
475: {
476: char what[50];
477: int i,ans;
478:
479: putch(0x07);
480: sprintf(what, "1=YES,DELETE ALL SPRITES, 0 TO CANCEL. ");
481: ans=getnumber16(what, 0, 2L);
482:
483: if( ans != 1 ) {
484: printmessage16("Cancelled...");
485: return;
486: }
487:
488: sprintf(what, "REALLY DELETE SPRITES ? 1=YES 0=NO ");
489: ans=getnumber16(what, 0, 2L);
490:
491: if( ans != 1 ) {
492: printmessage16("Cancelled...");
493: return;
494: }
495:
496: for( i=0; i<MAXSPRITES; i++ ) {
497: deletesprite(i);
498: memset(&spriteXT[i], 0, sizeof(struct spriteextension));
499: sprite[i].extra=-1;
500: }
501:
502: printmessage16("All sprites gone...");
503:
504: return;
505: }
506:
507: // reads ext info into sprXT array then strips .map file of ext info
508: int
509: JS_LoadSpriteExts(const char *mapname)
510: {
511: int fh,i,nr,xn,nex;
512: int bh;
513: long fsize;
514: size_t ssize;
515: int nopen=0;
516: int res;
517: long totr;
518: struct stat st1,st2;
519: char buf[40],rdbuf[512];
520:
521: nopen=flushall();
522:
523: ssize=sizeof(struct spriteextension);
524:
525: for (i=0; i<MAXSPRITES; i++) {
526: memset(&spriteXT[i], 0, ssize);
527: spriteXT[i].lock=0x00;
528: }
529:
530: ssize=sizeof(struct XTtrailertype);
531:
532: fh=open(mapname, O_BINARY | O_RDONLY, S_IREAD | S_IWRITE);
533: if ( fh == -1 ) {
534: return(-1);
535: }
536:
537: // check if file is already open
538: memset(&st1, 0, sizeof( struct stat));
539: memset(&st2, 0, sizeof( struct stat));
540: fstat(fh, &st1);
541: stat(mapname, &st2);
542:
543: //#define DOBACKUPS
544: #ifdef DOBACKUPS
545: // make backup
546: if( (strcmp(mapname, "backup.map") == 0) || (strcmp(mapname, "BACKUP.MAP") == 0) )
547: goto backupdone;
548: bh=open("backup.map", O_CREAT | O_TRUNC | O_BINARY | O_RDWR, S_IREAD | S_IWRITE);
549: if ( bh == -1 ) {
550: goto backupdone;
551: }
552: totr=nr=0;
553: while( 1 ) {
554: nr=0;
555: nr=read(fh, rdbuf, 512);
556: totr+=nr;
557: if( nr > 0 ) {
558: write(bh, rdbuf, nr);
559: }
560: if( nr < 512 ) {
561: goto endof;
562: }
563: }
564: endof:
565: close(bh);
566: lseek(fh, 0, SEEK_SET);
567: backupdone:
568: #endif
569:
570: // read in XTtrailer
571: lseek(fh, -(sizeof(struct XTtrailertype)), SEEK_END);
572: memset(&XTtrailer, 0, sizeof(struct XTtrailertype));
573: read(fh, &XTtrailer, sizeof(struct XTtrailertype));
574:
575: // if no previous extension info then continue
576: if( strcmp(XTtrailer.ID, TRAILERID) != 0 ) {
577: if (qsetmode == 480) {
578: printmessage16("New File - No extension information...");
579: tickdelay=totalclock;
580: while ( (totalclock-tickdelay)<50 )
581: ;
582: }
583: goto noext;
584: }
585:
586: if (qsetmode == 480) {
587: printmessage16("Reading in extensions...");
588: tickdelay=totalclock;
589: while ( (totalclock-tickdelay)<40 )
590: ;
591: }
592:
593: // load and intialize spriteXT array members
594: lseek(fh, XTtrailer.start, SEEK_SET);
595: for( i=0; i<XTtrailer.numXTs; i++ ) {
596: nr=read(fh, &XTsave, sizeof(struct XTsavetype));
597: if( nr != sizeof(struct XTsavetype) )
598: break;
599: spriteXT[XTsave.XTnum]=XTsave.sprXT; // struct assign
600: }
601:
602: nex=JS_CheckExtras();
603: if( nex != i ) {
604: putch(0x07);
605: if (qsetmode == 480) {
606: sprintf(buf, "ERROR: %d Sprite Extras != %d Extensions.", nex,i);
607: printmessage16(buf);
608: tickdelay=totalclock;
609: while ( (totalclock-tickdelay)<200 )
610: ;
611: }
612: }
613: else {
614: if (qsetmode == 480) {
615: sprintf(buf, "Loaded %d extensions.", i);
616: printmessage16(buf);
617: tickdelay=totalclock;
618: while ( (totalclock-tickdelay)<60 )
619: ;
620: }
621: }
622:
623: // strip exension info so build may write map file contiguously
624: lseek(fh, 0, SEEK_SET);
625: res=chsize(fh, XTtrailer.start);
626:
627: noext:
628:
629: flushall();
630: close(fh);
631: nopen=flushall();
632:
633: return(0);
634: }
635:
636: checkextras()
637: {
638: int i,j,ext;
639: char what[50];
640: FILE *fp;
641:
642: fp=fopen("exts", "wt");
643: if( fp == NULL ) {
644: return;
645: }
646:
647: fprintf(fp,"\n\t SPR\t\t EXT\n\n");
648: for( i=0; i<MAXSPRITES; i++ ) {
649: if( sprite[i].extra != -1 ) {
650: fprintf(fp,"\t%4d\t\t%4d\n", i,sprite[i].extra);
651: }
652: }
653:
654: fprintf(fp, "\n");
655: // check for maps to unlocked XT
656: for( i=0; i<MAXSPRITES; i++ ) {
657: ext=sprite[i].extra;
658: if( ext != -1 ) {
659: if( spriteXT[ext].lock == 0x00 ) {
660: sprite[i].extra=-1;
661: sprintf(what, "bad extra for %d", i);
662: printmessage16(what);
663: fprintf(fp, "Sprite %d at %ld,%ld mapped to unlocked XT %4d\n", i,sprite[i].x,sprite[i].y,ext);
664: }
665: }
666: }
667:
668: fprintf(fp, "\n");
669: // check for locked XT with no mapping
670: for( i=0; i<MAXSPRITES; i++ ) {
671: if( spriteXT[i].lock == 0xFF ) {
672: for( j=0; j<MAXSPRITES; j++ ) {
673: if( sprite[j].extra == i ) {
674: break;
675: }
676: }
677: if( j == MAXSPRITES ) {
678: spriteXT[i].lock=0x00;
679: sprintf(what, "extension %d had no map", i);
680: printmessage16(what);
681: fprintf(fp, "No mapping for locked XT %4d\n", i);
682: }
683: }
684: }
685:
686: fprintf(fp, "\n");
687: // check for non-unique mapping
688: for( i=0; i<MAXSPRITES; i++ ) {
689: ext=sprite[i].extra;
690: if( ext != -1 ) {
691: for( j=0; j<MAXSPRITES; j++ ) {
692: if( (j != i) && (sprite[j].extra == ext) ) {
693: sprintf(what, "non unique map for %d",i);
694: printmessage16(what);
695: fprintf(fp, "Non unique mapping for %4d at %d,%d\n", i,sprite[i].x,sprite[i].y);
696: break;
697: }
698: }
699: }
700: }
701:
702: fclose(fp);
703: }
704:
705: // tags on information in sprXT array to end of .map file
706: int
707: JS_SaveSpriteExts(const char *mapname)
708: {
709: int fh,i,nr;
710: int ssize;
711:
712: ssize=sizeof(struct XTtrailertype);
713: ssize=sizeof(struct XTsavetype);
714:
715: if (qsetmode == 480) {
716: printmessage16("Appending extensions...");
717: tickdelay=totalclock;
718: while ( (totalclock-tickdelay)<60 )
719: ;
720: }
721:
722: fh=open(mapname, O_CREAT | O_BINARY | O_WRONLY, S_IREAD | S_IWRITE);
723: if ( fh == -1 ) {
724: return(-1);
725: }
726:
727: //checkextras();
728:
729: // prepare trailer
730: memset(&XTtrailer, 0, sizeof(struct XTtrailertype));
731: strncpy(XTtrailer.mapname, mapname, 12);
732: XTtrailer.mapname[12]='\0';
733: strcpy(XTtrailer.ID, TRAILERID);
734: XTtrailer.ID[12]='\0';
735: XTtrailer.numXTs=0L;
736:
737: // go to end of map = beginning of eXTensions
738: XTtrailer.start=lseek(fh, 0, SEEK_END);
739:
740: // verify extension then
741: // write extensions to end of map file
742: XTtrailer.numXTs=0L;
743: for (i=0; i<MAXSPRITES; i++) {
744: if( spriteXT[i].lock == 0xFF ) {
745: memset(&XTsave, 0, sizeof(struct XTsavetype));
746: XTtrailer.numXTs++;
747: XTsave.XTnum=i;
748: XTsave.sprXT=spriteXT[i];
749: nr=write(fh, &XTsave, sizeof(struct XTsavetype));
750: }
751: }
752:
753: // write trailer
754: write(fh, &XTtrailer, sizeof(struct XTtrailertype));
755: flushall();
756: close(fh);
757:
758: return(0);
759: }
760:
761: int
762: JS_CheckExtras()
763: {
764: int i,nse;
765: spritetype *sprptr;
766:
767: nse=0;
768: for( i=0; i<MAXSPRITES; i++ ) {
769: sprptr=&sprite[i];
770: if( sprite[i].extra != -1 )
771: nse++;
772: }
773:
774: return(nse);
775: }
776:
777: int
778: JS_InitExtension(short sn, short en)
779: {
780: memset(&spriteXT[en], 0, sizeof(struct spriteextension));
781: spriteXT[en].basestat=sprite[sn].statnum;
782: spriteXT[en].basepic=sprite[sn].picnum;
783:
784: return(1);
785: }
786:
787: void
788: JS_GetPicInfo(struct picattribtype *picattr, short picnum)
789: {
790: long amask=picanm[picnum];
791:
792: memset(picattr, 0, sizeof(struct picattribtype));
793:
794: picattr->numframes=amask&0x0000003F;
795: picattr->animtype =( amask&0x000000C0 )>>6;
796: picattr->xcenteroffset=( amask&0x0000FF00 )>>8;
797: picattr->ycenteroffset=( amask&0x00FF0000 )>>16;
798: picattr->animspeed=( amask&0x0F000000 )>>24;
799: }
800:
801: int
802: JS_ShowSpriteExts(short spritenum)
803: {
804: short i=sprite[spritenum].extra;
805: char quip[128];
806: long nf=0L;
807: struct picattribtype picinfo;
808:
809: if (qsetmode == 200) //In 3D mode
810: return(0);
811:
812: clearmidstatbar16();
813: printmessage16(" ");
814:
815: if ( i < 0 ) {
816: printmessage16("Sprite has NO Mapped Extension !!");
817: return(-1);
818: }
819: if( spriteXT[i].lock != 0xFF ) {
820: sprite[spritenum].extra=-1;
821: putch(0x07);
822: printmessage16("Sprite Mapped to unlocked EXT - repaired.");
823: return(-1);
824: }
825:
826: memset(quip, '\0', 128);
827:
828: PrintStatus("Sprite ", ( int)spritenum,1,4,11);
829: PrintStatus("Picnum ", sprite[spritenum].picnum,1,5,11);
830: sprintf(quip, "%s", names[sprite[spritenum].picnum], spritenum);
831: PrintstatusStr(quip,"", 1,6,3);
832:
833: PrintStatus("Status ", sprite[spritenum].statnum,1,7,11);
834: switch( sprite[spritenum].statnum ) {
835: case INANIMATE:
836: PrintStatusStr("","INANIMATE",1,8,3);
837: break;
838: case INACTIVE:
839: PrintStatusStr("","INACTIVE",1,8,3);
840: break;
841: case STANDING:
842: PrintStatusStr("","STANDING",1,8,3);
843: break;
844: case AMBUSH:
845: PrintStatusStr("","AMBUSH",1,8,3);
846: break;
847: case GUARD:
848: PrintStatusStr("","GUARD",1,8,3);
849: break;
850: case CHASE:
851: PrintStatusStr("","CHASE",1,8,3);
852: break;
853: case FLEE:
854: PrintStatusStr("","FLEE",1,8,3);
855: break;
856: case STALK:
857: PrintStatusStr("","STALK",1,8,3);
858: break;
859: case PATROL:
860: PrintStatusStr("","PATROL",1,8,3);
861: break;
862: case CRAWL:
863: PrintStatusStr("","CRAWL",1,8,3);
864: break;
865: case STROLL:
866: PrintStatusStr("","STROLL",1,8,3);
867: break;
868: case FLY:
869: PrintStatusStr("","FLY",1,8,3);
870: break;
871: case RODENT:
872: PrintStatusStr("","RODENT",1,8,3);
873: break;
874: case PINBALL:
875: PrintStatusStr("","PINBALL",1,8,3);
876: break;
877: default:
878: sprite[spritenum].statnum=INACTIVE;
879: PrintStatusStr("","BAD STATNUM",1,8,4);
880: break;
881: }
882:
883: PrintStatus( "Extension ", i,1,9,11);
884:
885: switch ( ( int)spriteXT[i].lock ) {
886: case 0x00:
887: putch(0x07);
888: PrintStatusStr("ERROR Lock", " OFF" ,1,10,2);
889: putch(0x07);
890: break;
891: case 0xFF:
892: PrintStatusStr("Lock ", " ON" ,1,10,3);
893: break;
894: default:
895: PrintStatusStr("BAD LOCK NUM", "" ,1,10,3);
896: break;
897: }
898:
899: if( spriteXT[i].class != CLASS_NULL ) {
900: sprintf(quip, "1 of %d ", numinclass[spriteXT[i].class]);
901: PrintStatusStr(quip,"",1,12,2);
902: }
903: switch ( spriteXT[i].class ) {
904: case CLASS_NULL:
905: break;
906: case CLASS_FCIAGENT:
907: PrintStatusStr("Cosmos Employees","",1,13,2);
908: break;
909: case CLASS_CIVILLIAN:
910: PrintStatusStr("Civillians","",1,13,2);
911: break;
912: case CLASS_SPIDERDROID:
913: PrintStatusStr("Spider Droids","",1,13,2);
914: break;
915: case CLASS_COP:
916: PrintStatusStr("Cops","",1,13,2);
917: break;
918: case CLASS_MECHCOP:
919: PrintStatusStr("Mech Cops","",1,13,2);
920: break;
921: case CLASS_TEKBURNOUT:
922: PrintStatusStr("Tek Burnouts","",1,13,2);
923: break;
924: case CLASS_TEKGOON:
925: PrintStatusStr("Tek Goons","",1,13,2);
926: break;
927: case CLASS_ASSASSINDROID:
928: PrintStatusStr("Assasin Droids","",1,13,2);
929: break;
930: case CLASS_SECURITYDROID:
931: PrintStatusStr("Security Droids","",1,13,2);
932: break;
933: case CLASS_TEKBOSS:
934: PrintStatusStr("Tek Bosses","",1,13,2);
935: break;
936: case CLASS_TEKLORD:
937: PrintStatusStr("Tek Lords","",1,13,2);
938: break;
939: default:
940: PrintStatusStr("UNCLASSIFIED","",1,13,2);
941: break;
942: }
943:
944: PrintStatus("Class ", ( int)spriteXT[i].class ,18,4,11);
945: PrintStatus("Hitpoints ", ( int)spriteXT[i].hitpoints,18,5,11);
946: PrintStatus("Target ", ( int)spriteXT[i].target ,18,6,11);
947: PrintStatus("BaseStat ", ( int)spriteXT[i].basestat ,18,7,11);
948: switch( spriteXT[i].basestat ) {
949: case INANIMATE:
950: PrintStatusStr("","INANIMATE",18,8,3);
951: break;
952: case INACTIVE:
953: PrintStatusStr("","INACTIVE",18,8,3);
954: break;
955: case STANDING:
956: PrintStatusStr("","STANDING",18,8,3);
957: break;
958: case AMBUSH:
959: PrintStatusStr("","AMBUSH",18,8,3);
960: break;
961: case GUARD:
962: PrintStatusStr("","GUARD",18,8,3);
963: break;
964: case CHASE:
965: PrintStatusStr("","CHASE",18,8,3);
966: break;
967: case FLEE:
968: PrintStatusStr("","FLEE",18,8,3);
969: break;
970: case STALK:
971: PrintStatusStr("","STALK",18,8,3);
972: break;
973: case PATROL:
974: PrintStatusStr("","PATROL",18,8,3);
975: break;
976: case CRAWL:
977: PrintStatusStr("","CRAWL",18,8,3);
978: break;
979: case STROLL:
980: PrintStatusStr("","STROLL",18,8,3);
981: break;
982: case FLY:
983: PrintStatusStr("","FLY",18,8,3);
984: break;
985: case RODENT:
986: PrintStatusStr("","RODENT",18,8,3);
987: break;
988: case PINBALL:
989: PrintStatusStr("","PINBALL",18,8,3);
990: break;
991: default:
992: PrintStatusStr("","BAD BASE STAT",18,8,4);
993: spriteXT[i].basestat=INACTIVE;
994: break;
995: }
996:
997: PrintStatus("FXMask ", ( int)spriteXT[i].fxmask ,18,9,11);
998: PrintStatus("AIMask ", ( int)spriteXT[i].aimask ,18,10,11);
999:
1000: /*
1001: #define GUN2FLAG 2
1002: #define GUN3FLAG 3
1003: #define GUN4FLAG 4
1004: #define GUN5FLAG 5
1005: #define GUN6FLAG 6
1006: #define GUN7FLAG 7
1007: case 0: // bare hands
1008: case 1: // baton
1009: case 2: // stunner
1010: case 3: // shrike DBK pistol
1011: case 4: // kralov CEG machine pistol
1012: case 5: // orlow 34S force gun
1013: case 6: // energy weapon
1014: case 7: // explosives
1015: case 8: // sleeping gas
1016: case 9: // flame thrower
1017: case 10: // rocket launcher
1018: */
1019: PrintStatus("Weapon ", ( int)spriteXT[i].weapon ,18,11,11);
1020: switch( spriteXT[i].weapon ) {
1021: case GUN3FLAG:
1022: PrintStatusStr("","STUNNER",18,12,3);
1023: break;
1024: case GUN4FLAG:
1025: PrintStatusStr("","SHRIKE",18,12,3);
1026: break;
1027: case GUN5FLAG:
1028: PrintStatusStr("","KRALOV",18,12,3);
1029: break;
1030: case GUN6FLAG:
1031: PrintStatusStr("","PULSAR",18,12,3);
1032: break;
1033: default:
1034: PrintStatusStr("","BARE HANDS",18,12,4);
1035: spriteXT[i].weapon=0;
1036: break;
1037: }
1038:
1039: PrintStatus("Ext2 ", ( int)spriteXT[i].ext2 ,18,13,11);
1040:
1041: PrintStatus("BasePic ", ( int)spriteXT[i].basepic ,34,4,11);
1042: PrintStatus("StandPic ", ( int)spriteXT[i].standpic ,34,5,11);
1043: PrintStatus("WalkPic ", ( int)spriteXT[i].walkpic ,34,6,11);
1044: PrintStatus("RunPic ", ( int)spriteXT[i].runpic ,34,7,11);
1045: PrintStatus("AttackPic ", ( int)spriteXT[i].attackpic ,34,8,11);
1046:
1047: PrintStatus("DeathPic ", ( int)spriteXT[i].deathpic ,34,9,11);
1048: PrintStatus("PainPic ", ( int)spriteXT[i].painpic ,34,10,11);
1049: PrintStatus("SquatPic ", ( int)spriteXT[i].squatpic ,34,11,11);
1050: PrintStatus("MorphPic ", ( int)spriteXT[i].morphpic ,34,12,11);
1051: PrintStatus("SpecialPic", ( int)spriteXT[i].specialpic,34,13,11);
1052:
1053: PrintStatusStr("", names[spriteXT[i].basepic] ,50,4,3);
1054: PrintStatusStr("", names[spriteXT[i].standpic] ,50,5,3);
1055: PrintStatusStr("", names[spriteXT[i].walkpic] ,50,6,3);
1056: PrintStatusStr("", names[spriteXT[i].runpic] ,50,7,3);
1057: PrintStatusStr("", names[spriteXT[i].attackpic] ,50,8,3);
1058:
1059: PrintStatusStr("", names[spriteXT[i].deathpic] ,50,9,3);
1060: PrintStatusStr("", names[spriteXT[i].painpic] ,50,10,3);
1061: PrintStatusStr("", names[spriteXT[i].squatpic] ,50,11,3);
1062: PrintStatusStr("", names[spriteXT[i].morphpic] ,50,12,3);
1063: PrintStatusStr("", names[spriteXT[i].specialpic],50,13,3);
1064:
1065: JS_GetPicInfo(&picinfo, spriteXT[i].basepic);
1066: switch( picinfo.animtype ) {
1067: case 0: sprintf(quip, "NoANM %2d %2d", picinfo.numframes, picinfo.animspeed); break;
1068: case 1: sprintf(quip, "Oscil %2d %2d", picinfo.numframes,picinfo.animspeed); break;
1069: case 2: sprintf(quip, "AnmFD %2d %2d", picinfo.numframes,picinfo.animspeed); break;
1070: case 3: sprintf(quip, "AnmBK %2d %2d", picinfo.numframes,picinfo.animspeed); break;
1071: default:sprintf(quip, " ??? "); break;
1072: }
1073: PrintStatusStr("", quip,64,4,3);
1074:
1075: JS_GetPicInfo(&picinfo, spriteXT[i].standpic);
1076: switch( picinfo.animtype ) {
1077: case 0: sprintf(quip, "NoANM:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1078: case 1: sprintf(quip, "Oscil:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1079: case 2: sprintf(quip, "AnmFD:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1080: case 3: sprintf(quip, "AnmBK:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1081: default:sprintf(quip, " ??? "); break;
1082: }
1083: PrintStatusStr("", quip,64,5,3);
1084:
1085: JS_GetPicInfo(&picinfo, spriteXT[i].walkpic);
1086: switch( picinfo.animtype ) {
1087: case 0: sprintf(quip, "NoANM:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1088: case 1: sprintf(quip, "Oscil:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1089: case 2: sprintf(quip, "AnmFD:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1090: case 3: sprintf(quip, "AnmBK:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1091: default:sprintf(quip, " ??? "); break;
1092: }
1093: PrintStatusStr("", quip,64,6,3);
1094:
1095: JS_GetPicInfo(&picinfo, spriteXT[i].runpic);
1096: switch( picinfo.animtype ) {
1097: case 0: sprintf(quip, "NoANM:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1098: case 1: sprintf(quip, "Oscil:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1099: case 2: sprintf(quip, "AnmFD:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1100: case 3: sprintf(quip, "AnmBK:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1101: default:sprintf(quip, " ??? "); break;
1102: }
1103: PrintStatusStr("", quip,64,7,3);
1104:
1105: JS_GetPicInfo(&picinfo, spriteXT[i].attackpic);
1106: switch( picinfo.animtype ) {
1107: case 0: sprintf(quip, "NoANM:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1108: case 1: sprintf(quip, "Oscil:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1109: case 2: sprintf(quip, "AnmFD:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1110: case 3: sprintf(quip, "AnmBK:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1111: default:sprintf(quip, " ??? "); break;
1112: }
1113: PrintStatusStr("", quip,64,8,3);
1114:
1115: JS_GetPicInfo(&picinfo, spriteXT[i].deathpic);
1116: switch( picinfo.animtype ) {
1117: case 0: sprintf(quip, "NoANM:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1118: case 1: sprintf(quip, "Oscil:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1119: case 2: sprintf(quip, "AnmFD:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1120: case 3: sprintf(quip, "AnmBK:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1121: default:sprintf(quip, " ??? "); break;
1122: }
1123: PrintStatusStr("", quip,64,9,3);
1124:
1125: JS_GetPicInfo(&picinfo, spriteXT[i].painpic);
1126: switch( picinfo.animtype ) {
1127: case 0: sprintf(quip, "NoANM:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1128: case 1: sprintf(quip, "Oscil:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1129: case 2: sprintf(quip, "AnmFD:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1130: case 3: sprintf(quip, "AnmBK:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1131: default:sprintf(quip, " ??? "); break;
1132: }
1133: PrintStatusStr("", quip,64,10,3);
1134:
1135: JS_GetPicInfo(&picinfo, spriteXT[i].squatpic);
1136: switch( picinfo.animtype ) {
1137: case 0: sprintf(quip, "NoANM:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1138: case 1: sprintf(quip, "Oscil:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1139: case 2: sprintf(quip, "AnmFD:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1140: case 3: sprintf(quip, "AnmBK:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1141: default:sprintf(quip, " ??? "); break;
1142: }
1143: PrintStatusStr("", quip,64,11,3);
1144:
1145: JS_GetPicInfo(&picinfo, spriteXT[i].morphpic);
1146: switch( picinfo.animtype ) {
1147: case 0: sprintf(quip, "NoANM:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1148: case 1: sprintf(quip, "Oscil:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1149: case 2: sprintf(quip, "AnmFD:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1150: case 3: sprintf(quip, "AnmBK:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1151: default:sprintf(quip, " ??? "); break;
1152: }
1153: PrintStatusStr("", quip,64,12,3);
1154:
1155: JS_GetPicInfo(&picinfo, spriteXT[i].specialpic);
1156: switch( picinfo.animtype ) {
1157: case 0: sprintf(quip, "NoANM:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1158: case 1: sprintf(quip, "Oscil:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1159: case 2: sprintf(quip, "AnmFD:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1160: case 3: sprintf(quip, "AnmBK:%2d %2d", picinfo.numframes,picinfo.animspeed); break;
1161: default:sprintf(quip, " ??? "); break;
1162: }
1163: PrintStatusStr("", quip,64,13,3);
1164:
1165: return(0);
1166: }
1167:
1168: int
1169: JS_SpriteXTManual(void)
1170: {
1171: clearmidstatbar16();
1172: printmessage16(" ");
1173:
1174: liststates=0;
1175:
1176: printmessage16(" Manual Page: Sprites...");
1177:
1178: PrintStatusStr(" Valid State Types","",1,4,11);
1179:
1180: PrintStatusStr(" 0","INANIMATE",1,6,0);
1181: PrintStatusStr("100","INACTIVE" ,1,7,0);
1182: PrintStatusStr("500","FLY" ,1,8,0);
1183: PrintStatusStr("500","RODENT" ,1,9,0);
1184: PrintStatusStr("201","STANDING" ,1,10,0);
1185: PrintStatusStr("202","AMBUSH" ,1,11,0);
1186:
1187: PrintStatusStr("203","GUARD" ,16,6,0);
1188: PrintStatusStr("204","STALK" ,16,7,0);
1189: PrintStatusStr("205","FLEE" ,16,8,0);
1190: PrintStatusStr("206","CHASE" ,16,9,0);
1191: PrintStatusStr("207","PATROL" ,16,10,0);
1192: PrintStatusStr("209","STROLL" ,16,11,0);
1193: /*
1194: case 0: // bare hands
1195: case 1: // baton
1196: case 2: // stunner
1197: case 3: // shrike DBK pistol
1198: case 4: // kralov CEG machine pistol
1199: case 5: // orlow 34S force gun
1200: case 6: // energy weapon
1201: case 7: // explosives
1202: case 8: // sleeping gas
1203: case 9: // flame thrower
1204: case 10: // rocket launcher
1205: */
1206: PrintStatusStr(" Valid Weapons ","",30,4,11);
1207:
1208: PrintStatusStr(" 3 STUNNER","" ,30,6,0);
1209: PrintStatusStr(" 4 SHRIKE","" ,30,7,0);
1210: PrintStatusStr(" 5 KRALOW","" ,30,8,0);
1211: PrintStatusStr(" 6 PULSAR","" ,30,9,0);
1212:
1213: PrintStatusStr(" Valid Class Types ","",50,4,11);
1214:
1215: PrintStatusStr("1 FCIAGENT", "" ,48,6,0);
1216: PrintStatusStr("2 CIVILLIAN", "" ,48,7,0);
1217: PrintStatusStr("3 SPIDERDROID", "" ,48,8,0);
1218: PrintStatusStr("4 COP", "" ,48,9,0);
1219: PrintStatusStr("5 MECHCOP", "" ,48,10,0);
1220: PrintStatusStr("6 TEKBURNOUT", "" ,48,11,0);
1221:
1222: PrintStatusStr("7 TEKGOON", "" ,62,6,0);
1223: PrintStatusStr("8 ASSASSINDROID", "",62,7,0);
1224: PrintStatusStr("9 SECURITYDROID", "",62,8,0);
1225: PrintStatusStr("10 TEKBOSS","" ,62,9,0);
1226: PrintStatusStr("11 TEKLORD","" ,62,10,0);
1227:
1228: return(0);
1229: }
1230:
1231: int
1232: JS_FirstFreeExt(void)
1233: {
1234: short i;
1235:
1236: for ( i=0; i<MAXSPRITES; i++ ) {
1237: if ( spriteXT[i].lock == 0x00 )
1238: return(i);
1239: }
1240:
1241: return(-1); // no free spot found
1242: }
1243:
1244: int
1245: JS_LockExt(short j)
1246: {
1247: if ( spriteXT[j].lock == 0xFF ) {
1248: return(-1);
1249: }
1250: spriteXT[j].lock=0xFF;
1251:
1252: return(0);
1253: }
1254:
1255: void
1256: JS_GetNumInClass(void)
1257: {
1258: short i;
1259:
1260: for( i=0; i<MAXCLASSES; i++ ) {
1261: numinclass[i]=0;
1262: }
1263: for( i=0; i<MAXSPRITES; i++ ) {
1264: if( spriteXT[i].lock == 0xFF ) {
1265: numinclass[spriteXT[i].class]++;
1266: }
1267: }
1268:
1269: return;
1270: }
1271:
1272: int
1273: JS_EditSpriteExts(short spritenum)
1274: {
1275: char what[50];
1276: short j;
1277:
1278: spriteextmodified=1;
1279:
1280: clearmidstatbar16();
1281:
1282: j=sprite[spritenum].extra;
1283:
1284: if ( j < 0 ) { // .extra is initialized to -1 in build.obj
1285: printmessage16("No Previous Extension.");
1286: tickdelay=totalclock;
1287: while ( (totalclock-tickdelay)<50 )
1288: ;
1289: j=JS_FirstFreeExt();
1290: if ( j == -1 ) {
1291: printmessage16("ERROR! Not able to map to an extension.");
1292: return(-1);
1293: }
1294: printmessage16("Extension Mapped.");
1295: tickdelay=totalclock;
1296: while ( (totalclock-tickdelay)<100 )
1297: ;
1298: sprite[spritenum].extra=j;
1299: JS_InitExtension(spritenum, j);
1300: JS_LockExt(j);
1301: }
1302: else {
1303: printmessage16("Editing Existing Extension.");
1304: tickdelay=totalclock;
1305: while ( (totalclock-tickdelay)<100 )
1306: ;
1307: }
1308:
1309: JS_ShowSpriteExts(spritenum);
1310:
1311: sprintf(what, "spriteextra[%d].class = ", j);
1312: spriteXT[j].class=getnumber16(what, spriteXT[j].class, 12L);
1313:
1314: sprintf(what, "spriteextra[%d].hitpoints = ", j);
1315: spriteXT[j].hitpoints=getnumber16(what, spriteXT[j].hitpoints, 256L);
1316:
1317: sprintf(what, "spriteextra[%d].target = ", j);
1318: spriteXT[j].target=getnumber16(what, spriteXT[j].target, 4096L);
1319:
1320: sprintf(what, "spriteextra[%d].fxmask = ", j);
1321: spriteXT[j].fxmask=getnumber16(what, spriteXT[j].fxmask, 256L);
1322:
1323: sprintf(what, "spriteextra[%d].aimask = ", j);
1324: spriteXT[j].aimask=getnumber16(what, spriteXT[j].aimask, 256L);
1325:
1326: sprintf(what, "spriteextra[%d].basestat = ", j);
1327: spriteXT[j].basestat=getnumber16(what, spriteXT[j].basestat, 4096L);
1328:
1329: sprintf(what, "spriteextra[%d].basepic = ", j);
1330: spriteXT[j].basepic=getnumber16(what, spriteXT[j].basepic, 4096L);
1331:
1332: sprintf(what, "spriteextra[%d].standpic = ", j);
1333: spriteXT[j].standpic=getnumber16(what, spriteXT[j].standpic, 4096L);
1334:
1335: sprintf(what, "spriteextra[%d].walkpic = ", j);
1336: spriteXT[j].walkpic=getnumber16(what, spriteXT[j].walkpic, 4096L);
1337:
1338: sprintf(what, "spriteextra[%d].runpic = ", j);
1339: spriteXT[j].runpic=getnumber16(what, spriteXT[j].runpic, 4096L);
1340:
1341: sprintf(what, "spriteextra[%d].attackpic = ", j);
1342: spriteXT[j].attackpic=getnumber16(what, spriteXT[j].attackpic, 4096L);
1343:
1344: sprintf(what, "spriteextra[%d].deathpic = ", j);
1345: spriteXT[j].deathpic=getnumber16(what, spriteXT[j].deathpic, 4096L);
1346:
1347: sprintf(what, "spriteextra[%d].painpic = ", j);
1348: spriteXT[j].painpic=getnumber16(what, spriteXT[j].painpic, 4096L);
1349:
1350: sprintf(what, "spriteextra[%d].squatpic = ", j);
1351: spriteXT[j].squatpic=getnumber16(what, spriteXT[j].squatpic, 4096L);
1352:
1353: sprintf(what, "spriteextra[%d].morphpic = ", j);
1354: spriteXT[j].morphpic=getnumber16(what, spriteXT[j].morphpic, 4096L);
1355:
1356: sprintf(what, "spriteextra[%d].specialpic = ", j);
1357: spriteXT[j].specialpic=getnumber16(what, spriteXT[j].specialpic, 4096L);
1358:
1359: sprintf(what, "spriteextra[%d].weapon = ", j);
1360: spriteXT[j].weapon=getnumber16(what, spriteXT[j].weapon, 7L);
1361:
1362: sprintf(what, "spriteextra[%d].ext2 = ", j);
1363: spriteXT[j].ext2=getnumber16(what, spriteXT[j].ext2, 4096L);
1364:
1365: printmessage16("Sprite Extensions Saved.");
1366:
1367: JS_ShowSpriteExts(spritenum);
1368:
1369: return(0);
1370: }
1371:
1372: int
1373: JS_ChangeVelocity(short sn)
1374: {
1375: char what[50];
1376:
1377: sprintf(what, "sprite[%d].xvel = ", sn);
1378: sprite[sn].xvel=getnumber16(what, sprite[sn].xvel, 10L);
1379:
1380: sprintf(what, "sprite[%d].yvel = ", sn);
1381: sprite[sn].yvel=getnumber16(what, sprite[sn].yvel, 10L);
1382:
1383: sprintf(what, "sprite[%d].zvel = ", sn);
1384: sprite[sn].zvel=getnumber16(what, sprite[sn].zvel, 10L);
1385:
1386: tickdelay=totalclock;
1387: while ( (totalclock-tickdelay)<50 )
1388: ;
1389:
1390: printmessage16("Velocities adjusted");
1391:
1392: keystatus[56]=1;
1393: keystatus[15]=1;
1394:
1395: return(0);
1396: }
1397:
1398: #endif
1399:
1400:
1401: //Detecting 2D / 3D mode:
1402: // qsetmode is 200 in 3D mode
1403: // qsetmode is 350/480 in 2D mode
1404: //
1405: //You can read these variables when F5-F8 is pressed in 3D mode only:
1406: //
1407: // If (searchstat == 0) WALL searchsector=sector, searchwall=wall
1408: // If (searchstat == 1) CEILING searchsector=sector
1409: // If (searchstat == 2) FLOOR searchsector=sector
1410: // If (searchstat == 3) SPRITE searchsector=sector, searchwall=sprite
1411: // If (searchstat == 4) MASKED WALL searchsector=sector, searchwall=wall
1412: //
1413: // searchsector is the sector of the selected item for all 5 searchstat's
1414: //
1415: // searchwall is undefined if searchstat is 1 or 2
1416: // searchwall is the wall if searchstat = 0 or 4
1417: // searchwall is the sprite if searchstat = 3 (Yeah, I know - it says wall,
1418: // but trust me, it's the sprite number)
1419:
1420: void ExtInit(void)
1421: {
1422: long i, fil;
1423:
1424: #ifdef TEKWAR
1425: clrscr();
1426: scrldn();
1427: home(0L);
1428: wrchar('T');
1429: home(1L);
1430: wrchar('e');
1431: home(2L);
1432: wrchar('k');
1433: home(3L);
1434: wrchar('w');
1435: home(4L);
1436: wrchar('a');
1437: home(5L);
1438: wrchar('r');
1439: home(7L);
1440: wrchar('B');
1441: home(8L);
1442: wrchar('U');
1443: home(9L);
1444: wrchar('I');
1445: home(10L);
1446: wrchar('L');
1447: home(11L);
1448: wrchar('D');
1449: home(13L);
1450: wrchar('V');
1451: home(14L);
1452: wrchar('1');
1453: home(15L);
1454: wrchar('.');
1455: home(16L);
1456: wrchar('2');
1457: ontherange();
1458: #endif
1459:
1460: initgroupfile("stuff.dat");
1461:
1462: #ifdef LOADSETUP
1463: if ((fil = open("setup.dat",O_BINARY|O_RDWR,S_IREAD)) != -1)
1464: {
1465: read(fil,&option[0],NUMOPTIONS);
1466: read(fil,&keys[0],NUMKEYS);
1467: memcpy((void *)buildkeys,(void *)keys,NUMKEYS); //Trick to make build use setup.dat keys
1468: close(fil);
1469: }
1470: #endif
1471:
1472: if (option[4] > 0) option[4] = 0;
1473: initmouse();
1474:
1475: switch(option[0])
1476: {
1477: case 0: initengine(0,chainxres[option[6]&15],chainyres[option[6]>>4]); break;
1478: case 1: initengine(1,vesares[option[6]&15][0],vesares[option[6]&15][1]); break;
1479: case 2: initengine(2,320L,200L); break;
1480: case 3: initengine(3,320L,200L); break;
1481: case 4: initengine(4,320L,200L); break;
1482: case 5: initengine(5,320L,200L); break;
1483: case 6: initengine(6,320L,200L); break;
1484: }
1485:
1486: //You can load your own palette lookup tables here if you just
1487: //copy the right code!
1488: for(i=0;i<256;i++)
1489: tempbuf[i] = ((i+32)&255); //remap colors for screwy palette sectors
1490: makepalookup(16,tempbuf,0,0,0,1);
1491:
1492: #ifndef TEKWAR
1493: kensplayerheight = 32;
1494: zmode = 0;
1495: defaultspritecstat = 0;
1496: #endif
1497: #ifdef TEKWAR
1498: kensplayerheight = 34;
1499: zmode = 0;
1500: defaultspritecstat = 0;
1501: #endif
1502:
1503: #ifdef TEKWAR
1504: parallaxtype=2;
1505: parallaxyoffs=112;
1506: pskyoff[0]=0;
1507: pskyoff[1]=1;
1508: pskyoff[2]=2;
1509: pskyoff[3]=3;
1510: pskybits=2; // 4 tiles
1511: memset(&recXT, 0, sizeof(struct spriteextension));
1512: recordXT=-1;
1513: #endif
1514: }
1515:
1516: void ExtUnInit(void)
1517: {
1518: uninitgroupfile();
1519: }
1520:
1521: void ExtPreCheckKeys(void)
1522: {
1523: }
1524:
1525: void ExtCheckKeys(void)
1526: {
1527: long i;
1528:
1529: if (qsetmode == 200) //In 3D mode
1530: {
1531: #ifdef TEKWAR
1532: if( somethingintab == 3 ) // prevent extra value copy
1533: somethingintab = 254;
1534: #endif
1535:
1536: i = totalclock;
1537: if (i != frameval[framecnt])
1538: {
1539: sprintf(tempbuf,"%ld",(120*AVERAGEFRAMES)/(i-frameval[framecnt]));
1540: printext256(0L,0L,31,-1,tempbuf,1);
1541: frameval[framecnt] = i;
1542: }
1543: framecnt = ((framecnt+1)&(AVERAGEFRAMES-1));
1544:
1545: editinput();
1546: }
1547: else
1548: {
1549: #ifdef TEKWAR
1550: if( keystatus[39] == 1 ) { // ';' to clear all exts
1551: keystatus[39]=0;
1552: JS_ClearAllExts();
1553: }
1554: if( keystatus[26] == 1 ) { // '[' to clear all exts
1555: keystatus[26]=0;
1556: JS_ClearAllSprites();
1557: }
1558: if( keystatus[47] == 1 ) { // 'V' to edit velocity
1559: keystatus[47]=0;
1560: editvelocity=1;
1561: keystatus[66]=1;
1562: }
1563: if( keystatus[40] == 1 ) { // ''' to cleanup from old versions
1564: keystatus[40]=0;
1565: docleanup=1;
1566: keystatus[66]=1;
1567: }
1568: if( keystatus[27] == 1 ) { // ']' match cstats
1569: keystatus[27]=0;
1570: JS_MatchCstats();
1571: }
1572: if( keystatus[45] == 1 ) { // XT Copy
1573: keystatus[45]=0;
1574: copyext=1;
1575: keystatus[64]=1;
1576: }
1577: if( keystatus[19] == 1 ) { // XT Record
1578: keystatus[19]=0;
1579: recordext=1;
1580: keystatus[64]=1;
1581: }
1582: if( keystatus[50] == 1 ) { // 'M' for Manual on sprites
1583: keystatus[50]=0;
1584: liststates=1;
1585: JS_SpriteXTManual();
1586: }
1587: #endif
1588: }
1589: }
1590:
1591: void ExtCleanUp(void)
1592: {
1593: }
1594:
1595: void ExtLoadMap(const char *mapname)
1596: {
1597: #ifdef TEKWAR
1598: JS_LoadSpriteExts(mapname);
1599: #endif
1600: }
1601:
1602: void ExtSaveMap(const char *mapname)
1603: {
1604: #ifdef TEKWAR
1605: JS_SaveSpriteExts(mapname);
1606: #endif
1607: }
1608:
1609: const char *ExtGetSectorCaption(short sectnum)
1610: {
1611: if ((sector[sectnum].lotag|sector[sectnum].hitag) == 0)
1612: {
1613: tempbuf[0] = 0;
1614: }
1615: else
1616: {
1617: #ifndef TEKWAR
1618: sprintf(tempbuf,"%hu,%hu",(unsigned short)sector[sectnum].hitag,
1619: (unsigned short)sector[sectnum].lotag);
1620: #endif
1621:
1622: #ifdef TEKWAR
1623: switch((unsigned short)sector[sectnum].lotag) {
1624: case 1:
1625: sprintf(lo,"ACTIVATE SECTOR");
1626: break;
1627: case 6:
1628: sprintf(lo,"RISING DOOR");
1629: break;
1630: case 7:
1631: sprintf(lo,"DROP DOOR");
1632: break;
1633: case 8:
1634: sprintf(lo,"HOR SPLIT DOOR");
1635: break;
1636: case 9:
1637: sprintf(lo,"VER SPLIT DOOR");
1638: break;
1639: case 1000:
1640: sprintf(lo,"PLATFORM ELEVATOR");
1641: break;
1642: case 1003:
1643: sprintf(lo,"BOX ELEVATOR");
1644: break;
1645: case 1004:
1646: sprintf(lo,"PLATFORM W/DELAY");
1647: break;
1648: case 1005:
1649: sprintf(lo,"BOX W/DELAY");
1650: break;
1651: default:
1652: sprintf(lo,"%hu",(unsigned short)sector[sectnum].lotag);
1653: break;
1654: }
1655: sprintf(tempbuf,"%hu,%s",(unsigned short)sector[sectnum].hitag,lo);
1656: #endif
1657: }
1658: return(tempbuf);
1659: }
1660:
1661: const char *ExtGetWallCaption(short wallnum)
1662: {
1663: #ifdef TEKWAR
1664: long i=0;
1665: #endif
1666:
1667: #ifndef TEKWAR
1668: if ((wall[wallnum].lotag|wall[wallnum].hitag) == 0)
1669: {
1670: tempbuf[0] = 0;
1671: }
1672: else
1673: {
1674: sprintf(tempbuf,"%hu,%hu",(unsigned short)wall[wallnum].hitag,
1675: (unsigned short)wall[wallnum].lotag);
1676: }
1677: #endif
1678:
1679: #ifdef TEKWAR
1680: if (keystatus[0x57] > 0) { // f11 Grab pic 0x4e +
1681: wallpicnum=wall[curwall].picnum;
1682: sprintf(tempbuf,"Grabed Wall Picnum %ld",wallpicnum);
1683: printmessage16(tempbuf);
1684: }
1685: if (keystatus[0x2b] > 0) { // |
1686: if (wallsprite == 1) {
1687: for (i=curwallnum ; i < MAXWALLS ; i++) {
1688: if (wall[i].picnum == wall[curwall].picnum) {
1689: posx=(wall[i].x)-(((wall[i].x)-(wall[wall[i].point2].x))/2);
1690: posy=(wall[i].y)-(( (wall[i].y)-(wall[wall[i].point2].y))/2);
1691: printmessage16("Wall Found");
1692: curwallnum++;
1693: keystatus[0x2b]=0;
1694: return(tempbuf);
1695: }
1696: curwallnum++;
1697: }
1698: }
1699: if (wallsprite == 2) {
1700: for (i=curspritenum ; i < MAXSPRITES ; i++) {
1701: if (sprite[i].picnum == sprite[cursprite].picnum && sprite[i].statnum == 0) {
1702: posx=sprite[i].x;
1703: posy=sprite[i].y;
1704: ang=sprite[i].ang;
1705: printmessage16("Sprite Found");
1706: curspritenum++;
1707: keystatus[0x2b]=0;
1708: return(tempbuf);
1709: }
1710: curspritenum++;
1711: }
1712: }
1713: }
1714: if ((wall[wallnum].lotag|wall[wallnum].hitag) == 0) {
1715: tempbuf[0]=0;
1716: }
1717: else {
1718: sprintf(tempbuf,"%hu,%hu",(unsigned short)wall[wallnum].hitag,
1719: (unsigned short)wall[wallnum].lotag);
1720: }
1721: #endif
1722: return(tempbuf);
1723: }
1724:
1725: const char *ExtGetSpriteCaption(short spritenum)
1726: {
1727: #ifndef TEKWAR
1728: if ((sprite[spritenum].lotag|sprite[spritenum].hitag) == 0)
1729: {
1730: tempbuf[0] = 0;
1731: }
1732: else
1733: {
1734: sprintf(tempbuf,"%hu,%hu",(unsigned short)sprite[spritenum].hitag,
1735: (unsigned short)sprite[spritenum].lotag);
1736: }
1737: #endif
1738:
1739: #ifdef TEKWAR
1740: tempbuf[0]=0;
1741: if ((sprite[spritenum].lotag|sprite[spritenum].hitag) == 0) {
1742: SpriteName(spritenum,lo);
1743: if (lo[0] != 0) {
1744: sprintf(tempbuf,"%s",lo);
1745: }
1746: }
1747: else if ((unsigned short)sprite[spritenum].picnum == 104) {
1748: sprintf(hi,"%hu",(unsigned short)sprite[spritenum].hitag);
1749: switch((unsigned short)sprite[spritenum].lotag) {
1750: case 1000:
1751: sprintf(lo,"PULSING");
1752: break;
1753: case 1001:
1754: sprintf(lo,"FLICKERING");
1755: break;
1756: case 1002:
1757: sprintf(lo,"TIC DELAY");
1758: break;
1759: case 1003:
1760: sprintf(hi,"A=%d",sprite[spritenum].ang);
1761: sprintf(lo,"PANNING WALLS");
1762: break;
1763: case 1004:
1764: sprintf(hi,"A=%d",sprite[spritenum].ang);
1765: sprintf(lo,"PANNING FLOORS");
1766: break;
1767: case 1005:
1768: sprintf(hi,"A=%d",sprite[spritenum].ang);
1769: sprintf(lo,"PANNING CEILINGS");
1770: break;
1771: case 1006:
1772: sprintf(lo,"FLICKER W/DELAY");
1773: break;
1774: case 1007:
1775: sprintf(lo,"BLINK W/DELAY");
1776: break;
1777: case 1008:
1778: sprintf(lo,"STEADY LIGHT");
1779: break;
1780: case 1009:
1781: sprintf(lo,"WARP");
1782: break;
1783: default:
1784: sprintf(lo,"%hu",(unsigned short)sprite[spritenum].lotag);
1785: break;
1786: }
1787: sprintf(tempbuf,"%s,%s",hi,lo);
1788: }
1789: else {
1790: SpriteName(spritenum,lo);
1791: sprintf(tempbuf,"%hu,%hu %s",(unsigned short)sprite[spritenum].hitag,
1792: (unsigned short)sprite[spritenum].lotag,lo);
1793: }
1794: #endif
1795: return(tempbuf);
1796: }
1797:
1798: //printext16 parameters:
1799: //printext16(long xpos, long ypos, short col, short backcol,
1800: // char name[82], char fontsize)
1801: // xpos 0-639 (top left)
1802: // ypos 0-479 (top left)
1803: // col 0-15
1804: // backcol 0-15, -1 is transparent background
1805: // name
1806: // fontsize 0=8*8, 1=3*5
1807:
1808: //drawline16 parameters:
1809: // drawline16(long x1, long y1, long x2, long y2, char col)
1810: // x1, x2 0-639
1811: // y1, y2 0-143 (status bar is 144 high, origin is top-left of STATUS BAR)
1812: // col 0-15
1813:
1814: void ExtShowSectorData(short sectnum) //F5
1815: {
1816: #ifdef TEKWAR
1817: int i,effect;
1818: int delay=0,rotating=0,switches=0,totsprites=0;
1819: char lighting[16],flooreffect[16],walleffect[16],ceileffect[16];
1820: char *secttype;
1821: #endif
1822:
1823: #ifndef TEKWAR
1824: if (qsetmode == 200) //In 3D mode
1825: {
1826: }
1827: else
1828: {
1829: clearmidstatbar16(); //Clear middle of status bar
1830:
1831: sprintf(tempbuf,"Sector %d",sectnum);
1832: printext16(8,32,11,-1,tempbuf,0);
1833:
1834: printext16(8,48,11,-1,"8*8 font: ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789",0);
1835: printext16(8,56,11,-1,"3*5 font: ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789",1);
1836:
1837: drawline16(320,68,344,80,4); //Draw house
1838: drawline16(344,80,344,116,4);
1839: drawline16(344,116,296,116,4);
1840: drawline16(296,116,296,80,4);
1841: drawline16(296,80,320,68,4);
1842: }
1843: #endif
1844:
1845: #ifdef TEKWAR
1846: switch (sector[sectnum].lotag) {
1847: case 0:
1848: secttype="NORMAL";
1849: break;
1850: case 1:
1851: secttype="ACTIVATE SECTOR";
1852: break;
1853: case 6:
1854: secttype="RISING DOOR";
1855: break;
1856: case 7:
1857: secttype="DROP DOOR";
1858: break;
1859: case 8:
1860: secttype="HOR SPLIT DOOR";
1861: break;
1862: case 9:
1863: secttype="VER SPLIT DOOR";
1864: break;
1865: case 14:
1866: secttype="ROTATING";
1867: break;
1868: case 1000:
1869: secttype="PLATFORM ELEVATOR";
1870: break;
1871: case 1003:
1872: secttype="BOX ELEVATOR";
1873: break;
1874: default:
1875: secttype="UNDEFINED";
1876: break;
1877: }
1878: memset(lighting,0,sizeof(lighting));
1879: memset(flooreffect,0,sizeof(flooreffect));
1880: memset(ceileffect,0,sizeof(ceileffect));
1881: memset(walleffect,0,sizeof(walleffect));
1882: i=headspritesect[sectnum];
1883: while (i != -1) {
1884: if (sprite[i].picnum == 104) {
1885: effect=sprite[i].lotag-1000;
1886: switch (effect) {
1887: case PULSELIGHT:
1888: strcat(lighting,"Pulsing ");
1889: break;
1890: case FLICKERLIGHT:
1891: strcat(lighting,"Flickering ");
1892: break;
1893: case DELAYEFFECT:
1894: delay=sprite[i].hitag;
1895: break;
1896: case WPANNING:
1897: sprintf(walleffect,"Panning (A=%d)",sprite[i].ang);
1898: break;
1899: case FPANNING:
1900: sprintf(flooreffect,"Panning (A=%d)",sprite[i].ang);
1901: break;
1902: case CPANNING:
1903: sprintf(ceileffect,"Panning (A=%d)",sprite[i].ang);
1904: break;
1905: }
1906: }
1907: else if (sprite[i].lotag == 3) {
1908: rotating++;
1909: }
1910: else if (sprite[i].lotag == 4) {
1911: switches++;
1912: }
1913: else {
1914: totsprites++;
1915: }
1916: i=nextspritesect[i];
1917: }
1918: clearmidstatbar16();
1919: sprintf(tempbuf,"Level %s",levelname);
1920: printmessage16(tempbuf);
1921: sprintf(tempbuf,"Effects for Sector %d (type=%s)",sectnum,secttype);
1922: printext16(1*8,4*8,11,-1,tempbuf,0);
1923: PrintStatusStr("Lighting Effect =",lighting,2,6,11);
1924: PrintStatus("Tic Delay =",delay,2,7,11);
1925: PrintStatusStr("Wall Effects =",walleffect,2,8,11);
1926: PrintStatusStr("Floor Effects =",flooreffect,2,9,11);
1927: PrintStatusStr("Ceiling Effects =",ceileffect,2,10,11);
1928: PrintStatus("Rotating Sprites=",rotating,2,11,11);
1929: PrintStatus("Switches =",switches,2,12,11);
1930: PrintStatus("Total Sprites =",totsprites,2,13,11);
1931: #endif
1932: }
1933:
1934: void ExtShowWallData(short wallnum) //F6
1935: {
1936: if (qsetmode == 200) //In 3D mode
1937: {
1938: }
1939: else
1940: {
1941: clearmidstatbar16(); //Clear middle of status bar
1942:
1943: sprintf(tempbuf,"Wall %d",wallnum);
1944: printext16(8,32,11,-1,tempbuf,0);
1945: }
1946: }
1947:
1948: void ExtShowSpriteData(short spritenum) //F6
1949: {
1950: #ifndef TEKWAR
1951: if (qsetmode == 200) //In 3D mode
1952: {
1953: }
1954: else
1955: {
1956: clearmidstatbar16(); //Clear middle of status bar
1957:
1958: sprintf(tempbuf,"Sprite %d",spritenum);
1959: printext16(8,32,11,-1,tempbuf,0);
1960: }
1961: #endif
1962:
1963: #ifdef TEKWAR
1964: if( elapsedtime == 1) {
1965: elapsedtime=0;
1966: }
1967: else if( copyext ) {
1968: copyext=0;
1969: JS_CopyExt(spritenum);
1970: }
1971: else if( recordext ) {
1972: recordext=0;
1973: JS_RecordExt(spritenum);
1974: }
1975: else {
1976: JS_ShowSpriteExts(spritenum);
1977: }
1978: #endif
1979: }
1980:
1981: #ifndef TEKWAR
1982: void ExtEditSectorData(short sectnum) //F7
1983: {
1984: short nickdata;
1985:
1986: if (qsetmode == 200) //In 3D mode
1987: {
1988: //Ceiling
1989: if (searchstat == 1)
1990: sector[searchsector].ceilingpicnum++; //Just a stupid example
1991:
1992: //Floor
1993: if (searchstat == 2)
1994: sector[searchsector].floorshade++; //Just a stupid example
1995: }
1996: else //In 2D mode
1997: {
1998: sprintf(tempbuf,"Sector (%ld) Nick's variable: ",sectnum);
1999: nickdata = 0;
2000: nickdata = getnumber16(tempbuf,nickdata,65536L);
2001:
2002: printmessage16(""); //Clear message box (top right of status bar)
2003: ExtShowSectorData(sectnum);
2004: }
2005: }
2006: #endif
2007:
2008:
2009: #ifdef TEKWAR
2010: void ExtEditSectorData(short sectnum) //F7
2011: {
2012: short nickdata;
2013:
2014: if (qsetmode == 200) //In 3D mode
2015: {
2016: //Ceiling
2017: if (searchstat == 1)
2018: sector[searchsector].ceilingpicnum++; //Just a stupid example
2019:
2020: //Floor
2021: if (searchstat == 2)
2022: sector[searchsector].floorshade++; //Just a stupid example
2023: }
2024: else //In 2D mode
2025: {
2026: sprintf(tempbuf,"Sector (%ld) visibility: %d.",sectnum, visibility); //sector[sectnum].visibility); oog
2027: nickdata = 0;
2028: nickdata = getnumber16(tempbuf,nickdata,65536L);
2029:
2030: printmessage16(""); //Clear message box (top right of status bar)
2031: ExtShowSectorData(sectnum);
2032: }
2033: }
2034: #endif
2035:
2036: void ExtEditWallData(short wallnum) //F8
2037: {
2038: short nickdata;
2039:
2040: if (qsetmode == 200) //In 3D mode
2041: {
2042: }
2043: else
2044: {
2045: sprintf(tempbuf,"Wall (%ld) Nick's variable: ",wallnum);
2046: nickdata = 0;
2047: nickdata = getnumber16(tempbuf,nickdata,65536L);
2048:
2049: printmessage16(""); //Clear message box (top right of status bar)
2050: ExtShowWallData(wallnum);
2051: }
2052: }
2053:
2054: void ExtEditSpriteData(short spritenum) //F8
2055: {
2056: #ifndef TEKWAR
2057: short nickdata;
2058:
2059: if (qsetmode == 200) //In 3D mode
2060: {
2061: }
2062: else
2063: {
2064: sprintf(tempbuf,"Sprite (%ld) Nick's variable: ",spritenum);
2065: nickdata = 0;
2066: nickdata = getnumber16(tempbuf,nickdata,65536L);
2067: printmessage16("");
2068:
2069: printmessage16(""); //Clear message box (top right of status bar)
2070: ExtShowSpriteData(spritenum);
2071: }
2072: #endif
2073:
2074: #ifdef TEKWAR
2075: cursprite=spritenum;
2076: curspritenum=0;
2077: if ( editvelocity == 1 ) {
2078: JS_ChangeVelocity(spritenum);
2079: editvelocity=0;
2080: keystatus[0x42]=0;
2081: return;
2082: }
2083: if ( docleanup == 1 ) {
2084: JS_CleanupExtensions();
2085: docleanup=0;
2086: keystatus[0x42]=0;
2087: return;
2088: }
2089: sprintf(tempbuf,"Current Sprite %ld",cursprite);
2090: printmessage16(tempbuf);
2091: JS_EditSpriteExts(spritenum);
2092: keystatus[0x42]=0;
2093: #endif
2094: }
2095:
2096: faketimerhandler()
2097: {
2098: }
2099:
2100:
2101: void ExtAnalyzeSprites(void)
2102: {
2103: }
2104:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.