zduke/source/engine/buildprotos.h

441 lines
19 KiB
C
Raw Permalink Normal View History

2020-07-17 08:59:23 +00:00
// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman
// Ken Silverman's official web site: "http://www.advsys.net/ken"
// See the included license file "BUILDLIC.TXT" for license info.
//
// This file was not in Ken Silverman's original release
#ifndef __PROTOS_H__
#define __PROTOS_H__
#include <stdio.h>
#include "doomtype.h"
#ifdef _MSC_VER
#define FP_OFF(x) (x) // What does FP_OFF do?
#else
#endif
#pragma pack(push,1)
//ceilingstat/floorstat:
// bit 0: 1 = parallaxing, 0 = not "P"
// bit 1: 1 = groudraw, 0 = not
// bit 2: 1 = swap x&y, 0 = not "F"
// bit 3: 1 = double smooshiness "E"
// bit 4: 1 = x-flip "F"
// bit 5: 1 = y-flip "F"
// bit 6: 1 = Align texture to first wall of sector "R"
// bits 7-8: "T"
// 00 = normal floors
// 01 = masked floors
// 10 = transluscent masked floors
// 11 = reverse transluscent masked floors
// bits 9-15: reserved
// [RH] I like names for these bits so I know what they are without
// looking at the header file.
#define SSTAT_PARALLAX 0x0001
#define SSTAT_GROUDRAW 0x0002
#define SSTAT_SWAPXY 0x0004
#define SSTAT_DOUBLESMOOSHINESS 0x0008
#define SSTAT_XFLIP 0x0010
#define SSTAT_YFLIP 0x0020
#define SSTAT_ALIGNTOWALL 0x0040
#define SSTAT_NORMAL 0x0000
#define SSTAT_MASKED 0x0080
#define SSTAT_TRANSMASKED 0x0100
#define SSTAT_REVTRANSMASKED 0x0180
#define SSTAT_MASKMASK 0x0180
//40 bytes
typedef struct
{
short wallptr, wallnum;
long ceilingz, floorz;
unsigned short ceilingstat, floorstat;
short ceilingpicnum, ceilingheinum;
signed char ceilingshade;
unsigned char ceilingpal, ceilingxpanning, ceilingypanning;
short floorpicnum, floorheinum;
signed char floorshade;
unsigned char floorpal, floorxpanning, floorypanning;
unsigned char visibility, filler;
short lotag, hitag, extra;
} sectortype;
//cstat:
// bit 0: 1 = Blocking wall (use with clipmove, getzrange) "B"
// bit 1: 1 = bottoms of invisible walls swapped, 0 = not "2"
// bit 2: 1 = align picture on bottom (for doors), 0 = top "O"
// bit 3: 1 = x-flipped, 0 = normal "F"
// bit 4: 1 = masking wall, 0 = not "M"
// bit 5: 1 = 1-way wall, 0 = not "1"
// bit 6: 1 = Blocking wall (use with hitscan / cliptype 1) "H"
// bit 7: 1 = Transluscence, 0 = not "T"
// bit 8: 1 = y-flipped, 0 = normal "F"
// bit 9: 1 = Transluscence reversing, 0 = normal "T"
// bits 10-15: reserved
#define WSTAT_CLIPBLOCKING 0x0001
#define WSTAT_SWAPBOTTOMS 0x0002
#define WSTAT_ALIGNBOTTOM 0x0004
#define WSTAT_XFLIP 0x0008
#define WSTAT_MASKED 0x0010
#define WSTAT_ONEWAY 0x0020
#define WSTAT_HITBLOCKING 0x0040
#define WSTAT_TRANS 0x0080
#define WSTAT_YFLIP 0x0100
#define WSTAT_REVTRANS 0x0200
#define WSTAT_ALLBLOCKING (WSTAT_CLIPBLOCKING|WSTAT_HITBLOCKING)
//32 bytes
typedef struct
{
long x, y;
short point2, nextwall, nextsector;
unsigned short cstat;
short picnum, overpicnum;
signed char shade;
unsigned char pal, xrepeat, yrepeat, xpanning, ypanning;
short lotag, hitag, extra;
} walltype;
//cstat:
// bit 0: 1 = Blocking sprite (use with clipmove, getzrange) "B"
// bit 1: 1 = transluscence, 0 = normal "T"
// bit 2: 1 = x-flipped, 0 = normal "F"
// bit 3: 1 = y-flipped, 0 = normal "F"
// bits 5-4: 00 = FACE sprite (default) "R"
// 01 = WALL sprite (like masked walls)
// 10 = FLOOR sprite (parallel to ceilings&floors)
// bit 6: 1 = 1-sided sprite, 0 = normal "1"
// bit 7: 1 = Real centered centering, 0 = foot center "C"
// bit 8: 1 = Blocking sprite (use with hitscan / cliptype 1) "H"
// bit 9: 1 = Transluscence reversing, 0 = normal "T"
// bits 10-14: reserved
// bit 15: 1 = Invisible sprite, 0 = not invisible
#define CSTAT_CLIPBLOCKING 0x0001
#define CSTAT_TRANS 0x0002
#define CSTAT_XFLIP 0x0004
#define CSTAT_YFLIP 0x0008
#define CSTAT_ONESIDED 0x0040
#define CSTAT_CENTERED 0x0080
#define CSTAT_HITBLOCKING 0x0100
#define CSTAT_REVTRANS 0x0200
#define CSTAT_INVISIBLE 0x8000
#define CSTAT_FACE 0x0000
#define CSTAT_WALL 0x0010 // 16
#define CSTAT_FLOOR 0x0020 // 32
#define CSTAT_VOXEL 0x0030 // 48
#define CSTAT_TYPEMASK 0x0030
#define CSTAT_ALLBLOCKING (CSTAT_CLIPBLOCKING|CSTAT_HITBLOCKING)
#define CSTATB_CLIPBLOCKING 0
#define CSTATB_TRANS 1
#define CSTATB_XFLIP 2
#define CSTATB_YFLIP 3
#define CSTATB_ONESIDED 4
#define CSTATB_CENTERED 5
#define CSTATB_HITBLOCKING 8
#define CSTATB_REVTRANS 9
#define CSTATB_INVISIBLE 15
//44 bytes
typedef struct
{
long x, y, z;
unsigned short cstat;
short picnum;
signed char shade;
unsigned char pal, clipdist, filler;
unsigned char xrepeat, yrepeat;
signed char xoffset, yoffset;
short sectnum, statnum;
short ang, owner, xvel, yvel, zvel;
short lotag, hitag, extra;
} spritetype;
#pragma pack(pop)
void *kmalloc (size_t size);
void kfree (void *buffer);
void drawrooms (long daposx, long daposy, long daposz,
short daang, long dahoriz, short dacursectnum);
void scansector (short sectnum);
long wallfront (long l1, long l2);
long spritewallfront (spritetype *s, long w);
long bunchfront (long b1, long b2);
void drawalls (long bunch);
void prepwall (long z, walltype *wal);
void ceilscan (long x1, long x2, long sectnum);
void florscan (long x1, long x2, long sectnum);
void wallscan (long x1, long x2, short *uwal, short *dwal, long *swal, long *lwal);
void maskwallscan (long x1, long x2, short *uwal, short *dwal, long *swal, long *lwal);
void transmaskvline (long x);
void transmaskvline2 (long x);
void transmaskwallscan (long x1, long x2);
long loadboard (char *filename, long *daposx, long *daposy, long *daposz,
short *daang, short *dacursectnum);
long saveboard (char *filename, long *daposx, long *daposy, long *daposz,
short *daang, short *dacursectnum);
void loadtables (void);
void loadpalette (void);
long setgamemode (char *daframeplace, long daxdim, long daydim, long dabytesperline);
void hline (long xr, long yp);
void slowhline (long xr, long yp);
void initengine (void);
void uninitengine (void);
void nextpage (void);
void loadtile (short tilenume);
unsigned char *allocatepermanenttile (short tilenume, long xsiz, long ysiz);
long loadpics (char *filename);
void qloadkvx (long voxindex, char *filename);
long clipinsidebox (long x, long y, short wallnum, long walldist);
long clipinsideboxline (long x, long y, long x1, long y1, long x2, long y2, long walldist);
long readpixel16 (long p);
long screencapture (char *filename, char inverseit);
long inside (long x, long y, short sectnum);
long getangle (long xvect, long yvect);
long ksqrt (long num);
long krecip (long num);
void initksqrt (void);
void copytilepiece (long tilenume1, long sx1, long sy1, long xsiz, long ysiz,
long tilenume2, long sx2, long sy2);
void drawmasks (void);
void drawmaskwall (short damaskwallcnt);
void drawsprite (long snum);
void drawvox (long dasprx, long daspry, long dasprz, long dasprang, long daxscale, long dayscale, char daindex, signed char dashade,
char dapal, long *daumost, long *dadmost);
void ceilspritescan (long x1, long x2);
void ceilspritehline (long x2, long y);
long setsprite (short spritenum, long newx, long newy, long newz);
long animateoffs (short tilenum, short fakevar);
void initspritelists (void);
short insertsprite (short sectnum, short statnum);
short insertspritesect (short sectnum);
short insertspritestat (short statnum);
long deletesprite (short spritenum);
long deletespritesect (short deleteme);
long deletespritestat (short deleteme);
long changespritesect (short spritenum, short newsectnum);
long changespritestat (short spritenum, short newstatnum);
long nextsectorneighborz (short sectnum, long thez, short topbottom, short direction);
long cansee (long x1, long y1, long z1, short sect1, long x2, long y2, long z2, short sect2);
long hitscan (long xs, long ys, long zs, short sectnum, long vx, long vy, long vz,
short *hitsect, short *hitwall, short *hitsprite,
long *hitx, long *hity, long *hitz, unsigned long cliptype);
long neartag (long xs, long ys, long zs, short sectnum, short ange, short *neartagsector, short *neartagwall, short *neartagsprite, long *neartaghitdist, long neartagrange, char tagsearch);
long lintersect(long x1, long y1, long z1, long x2, long y2, long z2, long x3,
long y3, long x4, long y4, long *intx, long *inty, long *intz);
long rintersect(long x1, long y1, long z1, long vx, long vy, long vz, long x3,
long y3, long x4, long y4, long *intx, long *inty, long *intz);
void dragpoint(short pointhighlight, long dax, long day);
short lastwall(short point);
long clipmove (long *x, long *y, long *z, short *sectnum,
long xvect, long yvect,
long walldist, long ceildist, long flordist, unsigned long cliptype);
void keepaway (long *x, long *y, long w);
long raytrace (long x3, long y3, long *x4, long *y4);
long pushmove (long *x, long *y, long *z, short *sectnum,
long walldist, long ceildist, long flordist, unsigned long cliptype);
void updatesector (long x, long y, short *sectnum);
void rotatepoint (long xpivot, long ypivot, long x, long y, short daang, long *x2, long *y2);
char initmouse (void);
void getmousevalues (short *mousx, short *mousy, short *bstatus);
void printscreeninterrupt (void);
void drawline256 (long x1, long y1, long x2, long y2, char col);
void drawline16 (long x1, long y1, long x2, long y2, char col);
void qsetmode640350 (void);
void qsetmode640480 (void);
void clear2dscreen (void);
void draw2dgrid (long posxe, long posye, short ange, long zoome, short gride);
void draw2dscreen(long posxe, long posye, short ange, long zoome, short gride);
void printext16(long xpos, long ypos, short col, short backcol, char name[82], char fontsize);
void printext256(long xpos, long ypos, short col, short backcol, char name[82], char fontsize);
long krand (void);
void getzrange (long x, long y, long z, short sectnum,
long *ceilz, long *ceilhit, long *florz, long *florhit,
long walldist, unsigned long cliptype);
void setview (long x1, long y1, long x2, long y2);
void setaspect (long daxrange, long daaspect);
void dosetaspect (void);
void flushperms (void);
void rotatesprite (long sx, long sy, long z, short a, short picnum, signed char dashade, char dapalnum, char dastat, long cx1, long cy1, long cx2, long cy2);
void dorotatesprite (long sx, long sy, long z, short a, short picnum, signed char dashade, char dapalnum, char dastat, long cx1, long cy1, long cx2, long cy2);
long clippoly4 (long cx1, long cy1, long cx2, long cy2);
void makepalookup (long palnum, char *remapbuf, signed char r, signed char g, signed char b, char dastat);
void initfastcolorlookup (long rscale, long gscale, long bscale);
long getclosestcol (long r, long g, long b);
void setbrightness (char dabrightness, char *dapal);
void drawmapview (long dax, long day, long zoome, short ang);
long clippoly (long npoints, long clipstat);
void fillpolygon (long npoints);
void clearview (long dacol);
void clearallviews (long dacol);
void plotpixel (long x, long y, char col);
char getpixel (long x, long y);
void setviewtotile (short tilenume, long xsiz, long ysiz);
void setviewback (void);
void squarerotatetile (short tilenume);
void preparemirror (long dax, long day, long daz, short daang, long dahoriz, short dawall, short dasector, long *tposx, long *tposy, short *tang);
void completemirror (void);
long sectorofwall (short theline);
long getceilzofslope (short secnum, long dax, long day);
long getflorzofslope (short sectnum, long dax, long day);
void getzsofslope (short sectnum, long dax, long day, long *ceilz, long *florz);
void alignceilslope (short dasect, long x, long y, long z);
void alignflorslope (short dasect, long x, long y, long z);
long owallmost (short *mostbuf, long w, long z);
long wallmost (short *mostbuf, long w, long sectnum, char dastat);
void grouscan (long dax1, long dax2, long sectnum, char dastat);
long getpalookup (long davis, long dashade);
void parascan (long dax1, long dax2, long sectnum, char dastat, long bunch);
void *engconvalloc32 (unsigned long size);
long loopnumofsector (short sectnum, short wallnum);
void setfirstwall (short sectnum, short newfirstwall);
void initcache (char *dacachestart, long dacachesize);
void allocache (void **newhandle, long newbytes, unsigned char *newlockptr);
void suckcache (long *suckptr);
void agecache (void);
void reportandexit (char *errormessage);
long initgroupfile (char *filename);
void uninitgroupfile (void);
long kopen4load (const char *filename, char searchfirst);
long kread (long handle, void *buffer, long leng);
long klseek (long handle, long offset, long whence);
long ktell (long handle);
long kfilelength (long handle);
void kclose (long handle);
void kdfread (void *buffer, size_t dasizeof, size_t count, long fil);
void dfread (void *buffer, size_t dasizeof, size_t count, FILE *fil);
void dfwrite (void *buffer, size_t dasizeof, size_t count, FILE *fil);
long compress (char *lzwinbuf, long uncompleng, char *lzwoutbuf);
long uncompress (char *lzwinbuf, long compleng, char *lzwoutbuf);
long setvesa (long x, long y);
void uninitvesa ();
void getvalidvesamodes ();
void setactivepage (long dapagenum);
void setvisualpage (long dapagenum);
long VBE_setPalette (long start, long num, char *dapal);
long VBE_getPalette (long start, long num, char *dapal);
#ifdef NEED_DDVID_CALLS
long InitSurfaces (HWND hWnd, DWORD width, DWORD height);
void ReleaseAllSurfaces (HWND hWnd);
void BeginDrawing (void);
void FinishDrawing (void);
#endif
extern "C"
{
extern long mmxoverlay();
extern long sethlinesizes(long,long,char *);
extern long setpalookupaddress(char *);
extern long setuphlineasm4(long,long);
extern long hlineasm4(long,long,long,long,long,char *);
extern long setuprhlineasm4(long,long,long,char *,long,long);
extern long rhlineasm4(long,char *,long,long,long,char *);
extern long setuprmhlineasm4(long,long,long,char *,long,long);
extern long rmhlineasm4(long,char *,long,long,long,char *);
extern long setupqrhlineasm4(long,long,long,char *,long,long);
extern long qrhlineasm4(long,char *,long,long,long,char *);
extern long setvlinebpl(long);
extern long fixtransluscence(char *);
extern long prevlineasm1(long,char *,long,long,char *,char *);
extern long vlineasm1(long,char *,long,long,char *,char *);
extern long setuptvlineasm(long);
extern long tvlineasm1(long,char *,long,long,char *,char *);
extern long setuptvlineasm2(long,char *,char *);
extern long tvlineasm2(long,long,char *,char *,long,char *);
extern long mvlineasm1(long,char *,long,long,char *,char *);
extern long setupvlineasm(long);
extern long vlineasm4(long,char *);
extern long setupmvlineasm(long);
extern long mvlineasm4(long,char *);
extern long mhline(char *,long,long,long,long,char *);
extern long mhlineskipmodify(long,long,long,long,long,long);
extern long msethlineshift(long,long);
extern long thline(char *,long,long,long,long,char *);
extern long thlineskipmodify(long,long,long,long,long,char *);
extern long tsethlineshift(long,long);
extern long setupslopevlin(long,char *,long);
extern long slopevlin(char *,long,long,long,long,long);
extern long settransnormal();
extern long settransreverse();
extern long setupdrawslab(long,char *);
extern long drawslab(long,long,long,long,long,char *);
#ifdef _MSC_VER
extern void setupspritevline(char *,long,long,long,long);
extern void spritevline(long,long,long,char *,char *);
extern void msetupspritevline(char *,long,long,long,long);
extern void mspritevline(long,long,long,char *,char *);
extern void tsetupspritevline(char *,long,long,long,long);
extern void tspritevline(long,long,long,char *,char *);
#define setupspritevline(a,b,c,d,e,f) setupspritevline(a,b,c,d,e) // last parm ignored
#define spritevline(a,b,c,d,e,f) spritevline(b,c,d,e,f) // first parm ignored
#define msetupspritevline(a,b,c,d,e,f) msetupspritevline(a,b,c,d,e) // last parm ignored
#define mspritevline(a,b,c,d,e,f) mspritevline(b,c,d,e,f) // first parm ignored
#define tsetupspritevline(a,b,c,d,e,f) tsetupspritevline(a,b,c,d,e) // last parm ignored
#define tspritevline(a,b,c,d,e,f) tspritevline(b,c,d,e,f) // first parm ignored
#else
extern void setupspritevline(long,long,long,long,long,long);
extern void spritevline(long,long,long,long,long,long);
extern void msetupspritevline(long,long,long,long,long,long);
extern void mspritevline(long,long,long,long,long,long);
extern void tsetupspritevline(long,long,long,long,long,long);
extern void tspritevline(long,long,long,long,long,long);
#pragma aux mmxoverlay modify [eax ebx ecx edx];
#pragma aux sethlinesizes parm [eax][ebx][ecx];
#pragma aux setpalookupaddress parm [eax];
#pragma aux setuphlineasm4 parm [eax][ebx];
#pragma aux hlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux setuprhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux rhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux setuprmhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux rmhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux setupqrhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux qrhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux setvlinebpl parm [eax];
#pragma aux fixtransluscence parm [eax];
#pragma aux prevlineasm1 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux vlineasm1 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux setuptvlineasm parm [eax];
#pragma aux tvlineasm1 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux setuptvlineasm2 parm [eax][ebx][ecx];
#pragma aux tvlineasm2 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux mvlineasm1 parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux setupvlineasm parm [eax];
#pragma aux vlineasm4 parm [ecx][edi] modify [eax ebx ecx edx esi edi];
#pragma aux setupmvlineasm parm [eax];
#pragma aux mvlineasm4 parm [ecx][edi] modify [eax ebx ecx edx esi edi];
#pragma aux setupspritevline parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux spritevline parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux msetupspritevline parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux mspritevline parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux tsetupspritevline parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux tspritevline parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux mhline parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux mhlineskipmodify parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux msethlineshift parm [eax][ebx];
#pragma aux thline parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux thlineskipmodify parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux tsethlineshift parm [eax][ebx];
#pragma aux setupslopevlin parm [eax][ebx][ecx] modify [edx];
#pragma aux slopevlin parm [eax][ebx][ecx][edx][esi][edi];
#pragma aux settransnormal parm;
#pragma aux settransreverse parm;
#pragma aux setupdrawslab parm [eax][ebx];
#pragma aux drawslab parm [eax][ebx][ecx][edx][esi][edi];
#endif
}
#endif // __PROTOS_H__