1 // "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman 2 // Ken Silverman's official web site: "http://www.advsys.net/ken" 3 // See the included license file "BUILDLIC.TXT" for license info. 4 // 5 // This file has been modified from Ken Silverman's original release 6 // by Jonathon Fowler (jf@jonof.id.au) 7 8 9 #ifndef __build_h__ 10 #define __build_h__ 11 12 #ifndef USE_POLYMOST 13 # define USE_POLYMOST 0 14 #endif 15 #ifndef USE_OPENGL 16 # define USE_OPENGL 0 17 #endif 18 #define USE_GL2 2 19 #define USE_GL3 3 20 #define USE_GLES2 12 21 22 #include "compat.h" 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 #define MAXSECTORSV8 4096 29 #define MAXWALLSV8 16384 30 #define MAXSPRITESV8 16384 31 32 #define MAXSECTORSV7 1024 33 #define MAXWALLSV7 8192 34 #define MAXSPRITESV7 4096 35 36 #define MAXSECTORSV6 1024 37 #define MAXWALLSV6 8192 38 #define MAXSPRITESV6 4096 39 #define MAXTILESV6 4096 40 41 #define MAXSECTORSV5 1024 42 #define MAXWALLSV5 4096 43 #define MAXSPRITESV5 4096 44 #define MAXTILESV5 4096 45 46 #define MAXSECTORS MAXSECTORSV8 47 #define MAXWALLS MAXWALLSV8 48 #define MAXSPRITES MAXSPRITESV8 49 50 #define MAXTILES 9216 51 #define MAXVOXELS 4096 52 #define MAXSTATUS 1024 53 #define MAXPLAYERS 16 54 #define MAXXDIM 2880 55 #define MAXYDIM 1800 56 #define MAXPALOOKUPS 256 57 #define MAXPSKYTILES 256 58 #define MAXSPRITESONSCREEN 1024 59 #define MAXUNIQHUDID 256 //Extra slots so HUD models can store animation state without messing game sprites 60 61 #define CLIPMASK0 (((1L)<<16)+1L) 62 #define CLIPMASK1 (((256L)<<16)+64L) 63 64 //Make all variables in BUILD.H defined in the ENGINE, 65 //and externed in GAME 66 #ifdef ENGINE 67 # define EXTERN 68 #else 69 # define EXTERN extern 70 #endif 71 72 #ifdef __GNUC__ 73 # if __GNUC__ == 4 && __GNUC_MINOR__ >= 7 74 # define BPACK __attribute__ ((packed, gcc_struct)) 75 # else 76 # define BPACK __attribute__ ((packed)) 77 # endif 78 #else 79 #define BPACK 80 #endif 81 82 #ifdef _MSC_VER 83 #pragma pack(1) 84 #endif 85 86 #ifdef __WATCOMC__ 87 #pragma pack(push,1); 88 #endif 89 90 91 //ceilingstat/floorstat: 92 // bit 0: 1 = parallaxing, 0 = not "P" 93 // bit 1: 1 = groudraw, 0 = not 94 // bit 2: 1 = swap x&y, 0 = not "F" 95 // bit 3: 1 = double smooshiness "E" 96 // bit 4: 1 = x-flip "F" 97 // bit 5: 1 = y-flip "F" 98 // bit 6: 1 = Align texture to first wall of sector "R" 99 // bits 7-8: "T" 100 // 00 = normal floors 101 // 01 = masked floors 102 // 10 = transluscent masked floors 103 // 11 = reverse transluscent masked floors 104 // bits 9-15: reserved 105 106 //40 bytes 107 typedef struct 108 { 109 short wallptr, wallnum; 110 int ceilingz, floorz; 111 short ceilingstat, floorstat; 112 short ceilingpicnum, ceilingheinum; 113 signed char ceilingshade; 114 unsigned char ceilingpal, ceilingxpanning, ceilingypanning; 115 short floorpicnum, floorheinum; 116 signed char floorshade; 117 unsigned char floorpal, floorxpanning, floorypanning; 118 unsigned char visibility, filler; 119 short lotag, hitag, extra; 120 } sectortype; 121 122 //cstat: 123 // bit 0: 1 = Blocking wall (use with clipmove, getzrange) "B" 124 // bit 1: 1 = bottoms of invisible walls swapped, 0 = not "2" 125 // bit 2: 1 = align picture on bottom (for doors), 0 = top "O" 126 // bit 3: 1 = x-flipped, 0 = normal "F" 127 // bit 4: 1 = masking wall, 0 = not "M" 128 // bit 5: 1 = 1-way wall, 0 = not "1" 129 // bit 6: 1 = Blocking wall (use with hitscan / cliptype 1) "H" 130 // bit 7: 1 = Transluscence, 0 = not "T" 131 // bit 8: 1 = y-flipped, 0 = normal "F" 132 // bit 9: 1 = Transluscence reversing, 0 = normal "T" 133 // bits 10-15: reserved 134 135 //32 bytes 136 typedef struct 137 { 138 int x, y; 139 short point2, nextwall, nextsector, cstat; 140 short picnum, overpicnum; 141 signed char shade; 142 unsigned char pal, xrepeat, yrepeat, xpanning, ypanning; 143 short lotag, hitag, extra; 144 } walltype; 145 146 //cstat: 147 // bit 0: 1 = Blocking sprite (use with clipmove, getzrange) "B" 148 // bit 1: 1 = transluscence, 0 = normal "T" 149 // bit 2: 1 = x-flipped, 0 = normal "F" 150 // bit 3: 1 = y-flipped, 0 = normal "F" 151 // bits 5-4: 00 = FACE sprite (default) "R" 152 // 01 = WALL sprite (like masked walls) 153 // 10 = FLOOR sprite (parallel to ceilings&floors) 154 // bit 6: 1 = 1-sided sprite, 0 = normal "1" 155 // bit 7: 1 = Real centered centering, 0 = foot center "C" 156 // bit 8: 1 = Blocking sprite (use with hitscan / cliptype 1) "H" 157 // bit 9: 1 = Transluscence reversing, 0 = normal "T" 158 // bits 10-14: reserved 159 // bit 15: 1 = Invisible sprite, 0 = not invisible 160 161 //44 bytes 162 typedef struct 163 { 164 int x, y, z; 165 short cstat, picnum; 166 signed char shade; 167 unsigned char pal, clipdist, filler; 168 unsigned char xrepeat, yrepeat; 169 signed char xoffset, yoffset; 170 short sectnum, statnum; 171 short ang, owner, xvel, yvel, zvel; 172 short lotag, hitag, extra; 173 } spritetype; 174 175 // 12 bytes 176 typedef struct { 177 unsigned int mdanimtims; 178 short mdanimcur; 179 short angoff; 180 unsigned char flags; 181 char filler[3]; 182 } spriteexttype; 183 #define SPREXT_NOTMD 1 184 #define SPREXT_NOMDANIM 2 185 186 EXTERN sectortype sector[MAXSECTORS]; 187 EXTERN walltype wall[MAXWALLS]; 188 EXTERN spritetype sprite[MAXSPRITES]; 189 EXTERN spriteexttype spriteext[MAXSPRITES+MAXUNIQHUDID]; 190 EXTERN int guniqhudid; 191 192 EXTERN int spritesortcnt; 193 EXTERN spritetype tsprite[MAXSPRITESONSCREEN]; 194 195 //numpages==127 means no persistence. Permanent rotatesprites will be retained until flushed. 196 //The initial frame contents will be invalid after each swap. 197 EXTERN int xdim, ydim, ylookup[MAXYDIM+1], numpages; 198 EXTERN int yxaspect, xyaspect, pixelaspect, widescreen, tallscreen, viewingrange; 199 200 #define MAXVALIDMODES 256 201 EXTERN int validmodecnt; 202 struct validmode_t { 203 int xdim,ydim; 204 unsigned char bpp; 205 unsigned char fs; // bit 0 = fullscreen flag 206 char filler[2]; 207 int extra; // internal use 208 }; 209 EXTERN struct validmode_t validmode[MAXVALIDMODES]; 210 211 EXTERN short numsectors, numwalls; 212 EXTERN /*volatile*/ int totalclock; 213 EXTERN int numframes, randomseed; 214 EXTERN short sintable[2048]; 215 EXTERN unsigned char palette[768]; 216 EXTERN short numpalookups; 217 EXTERN unsigned char *palookup[MAXPALOOKUPS]; 218 EXTERN unsigned char parallaxtype, showinvisibility; 219 EXTERN int parallaxyoffs, parallaxyscale; 220 EXTERN int visibility, parallaxvisibility; 221 222 EXTERN int windowx1, windowy1, windowx2, windowy2; 223 EXTERN short startumost[MAXXDIM], startdmost[MAXXDIM]; 224 225 EXTERN short pskyoff[MAXPSKYTILES], pskybits; 226 227 EXTERN short headspritesect[MAXSECTORS+1], headspritestat[MAXSTATUS+1]; 228 EXTERN short prevspritesect[MAXSPRITES], prevspritestat[MAXSPRITES]; 229 EXTERN short nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES]; 230 231 EXTERN short tilesizx[MAXTILES], tilesizy[MAXTILES]; 232 EXTERN unsigned char walock[MAXTILES]; 233 EXTERN int numtiles, picanm[MAXTILES]; 234 EXTERN intptr_t waloff[MAXTILES]; 235 236 //These variables are for auto-mapping with the draw2dscreen function. 237 //When you load a new board, these bits are all set to 0 - since 238 //you haven't mapped out anything yet. Note that these arrays are 239 //bit-mapped. 240 //If you want draw2dscreen() to show sprite #54 then you say: 241 // spritenum = 54; 242 // show2dsprite[spritenum>>3] |= (1<<(spritenum&7)); 243 //And if you want draw2dscreen() to not show sprite #54 then you say: 244 // spritenum = 54; 245 // show2dsprite[spritenum>>3] &= ~(1<<(spritenum&7)); 246 //Automapping defaults to 0 (do nothing). If you set automapping to 1, 247 // then in 3D mode, the walls and sprites that you see will show up the 248 // next time you flip to 2D mode. 249 250 EXTERN unsigned char show2dsector[(MAXSECTORS+7)>>3]; 251 EXTERN unsigned char show2dwall[(MAXWALLS+7)>>3]; 252 EXTERN unsigned char show2dsprite[(MAXSPRITES+7)>>3]; 253 EXTERN unsigned char automapping; 254 255 EXTERN unsigned char gotpic[(MAXTILES+7)>>3]; 256 EXTERN unsigned char gotsector[(MAXSECTORS+7)>>3]; 257 258 EXTERN int captureformat; 259 extern unsigned char vgapalette[5*256]; 260 extern unsigned int drawlinepat; 261 262 extern void faketimerhandler(void); 263 264 typedef struct { 265 unsigned char r,g,b,f; 266 } palette_t; 267 extern palette_t curpalette[256], curpalettefaded[256], palfadergb; 268 extern unsigned char palfadedelta; 269 270 extern int dommxoverlay, novoxmips; 271 272 extern int tiletovox[MAXTILES]; 273 extern int usevoxels, voxscale[MAXVOXELS]; 274 #if USE_POLYMOST && USE_OPENGL 275 extern int usemodels, usehightile; 276 #endif 277 278 extern char *engineerrstr; 279 extern const char *build_version, *build_date, *build_time; 280 281 /************************************************************************* 282 POSITION VARIABLES: 283 284 POSX is your x - position ranging from 0 to 65535 285 POSY is your y - position ranging from 0 to 65535 286 (the length of a side of the grid in EDITBORD would be 1024) 287 POSZ is your z - position (height) ranging from 0 to 65535, 0 highest. 288 ANG is your angle ranging from 0 to 2047. Instead of 360 degrees, or 289 2 * PI radians, I use 2048 different angles, so 90 degrees would 290 be 512 in my system. 291 292 SPRITE VARIABLES: 293 294 EXTERN short headspritesect[MAXSECTORS+1], headspritestat[MAXSTATUS+1]; 295 EXTERN short prevspritesect[MAXSPRITES], prevspritestat[MAXSPRITES]; 296 EXTERN short nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES]; 297 298 Example: if the linked lists look like the following: 299 ⁄ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒø 300 ≥ Sector lists: Status lists: ≥ 301 √ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ¥ 302 ≥ Sector0: 4, 5, 8 Status0: 2, 0, 8 ≥ 303 ≥ Sector1: 16, 2, 0, 7 Status1: 4, 5, 16, 7, 3, 9 ≥ 304 ≥ Sector2: 3, 9 ≥ 305 ¿ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒŸ 306 Notice that each number listed above is shown exactly once on both the 307 left and right side. This is because any sprite that exists must 308 be in some sector, and must have some kind of status that you define. 309 310 311 Coding example #1: 312 To go through all the sprites in sector 1, the code can look like this: 313 314 sectnum = 1; 315 i = headspritesect[sectnum]; 316 while (i != -1) 317 { 318 nexti = nextspritesect[i]; 319 320 //your code goes here 321 //ex: printf("Sprite %d is in sector %d\n",i,sectnum); 322 323 i = nexti; 324 } 325 326 Coding example #2: 327 To go through all sprites with status = 1, the code can look like this: 328 329 statnum = 1; //status 1 330 i = headspritestat[statnum]; 331 while (i != -1) 332 { 333 nexti = nextspritestat[i]; 334 335 //your code goes here 336 //ex: printf("Sprite %d has a status of 1 (active)\n",i,statnum); 337 338 i = nexti; 339 } 340 341 insertsprite(short sectnum, short statnum); 342 deletesprite(short spritenum); 343 changespritesect(short spritenum, short newsectnum); 344 changespritestat(short spritenum, short newstatnum); 345 346 TILE VARIABLES: 347 NUMTILES - the number of tiles found TILES.DAT. 348 TILESIZX[MAXTILES] - simply the x-dimension of the tile number. 349 TILESIZY[MAXTILES] - simply the y-dimension of the tile number. 350 WALOFF[MAXTILES] - the actual 32-bit offset pointing to the top-left 351 corner of the tile. 352 PICANM[MAXTILES] - flags for animating the tile. 353 354 TIMING VARIABLES: 355 TOTALCLOCK - When the engine is initialized, TOTALCLOCK is set to zero. 356 From then on, it is incremented 120 times a second by 1. That 357 means that the number of seconds elapsed is totalclock / 120. 358 NUMFRAMES - The number of times the draw3dscreen function was called 359 since the engine was initialized. This helps to determine frame 360 rate. (Frame rate = numframes * 120 / totalclock.) 361 362 OTHER VARIABLES: 363 364 STARTUMOST[320] is an array of the highest y-coordinates on each column 365 that my engine is allowed to write to. You need to set it only 366 once. 367 STARTDMOST[320] is an array of the lowest y-coordinates on each column 368 that my engine is allowed to write to. You need to set it only 369 once. 370 SINTABLE[2048] is a sin table with 2048 angles rather than the 371 normal 360 angles for higher precision. Also since SINTABLE is in 372 all integers, the range is multiplied by 16383, so instead of the 373 normal -1<sin(x)<1, the range of sintable is -16383<sintable[]<16383 374 If you use this sintable, you can possibly speed up your code as 375 well as save space in memory. If you plan to use sintable, 2 376 identities you may want to keep in mind are: 377 sintable[ang&2047] = sin(ang * (3.141592/1024)) * 16383 378 sintable[(ang+512)&2047] = cos(ang * (3.141592/1024)) * 16383 379 NUMSECTORS - the total number of existing sectors. Modified every time 380 you call the loadboard function. 381 ***************************************************************************/ 382 383 int preinitengine(void); // a partial setup of the engine used for launch windows 384 int initengine(void); 385 void uninitengine(void); 386 void initspritelists(void); 387 int loadboard(char *filename, char fromwhere, int *daposx, int *daposy, int *daposz, short *daang, short *dacursectnum); 388 int loadmaphack(char *filename); 389 int saveboard(char *filename, int *daposx, int *daposy, int *daposz, short *daang, short *dacursectnum); 390 int saveoldboard(char *filename, int *daposx, int *daposy, int *daposz, short *daang, short *dacursectnum); 391 int loadpics(char *filename, int askedsize); 392 void loadtile(short tilenume); 393 int qloadkvx(int voxindex, char *filename); 394 int allocatepermanenttile(short tilenume, int xsiz, int ysiz); 395 void copytilepiece(int tilenume1, int sx1, int sy1, int xsiz, int ysiz, int tilenume2, int sx2, int sy2); 396 int makepalookup(int palnum, unsigned char *remapbuf, signed char r, signed char g, signed char b, unsigned char dastat); 397 void setvgapalette(void); 398 void setbrightness(int dabrightness, unsigned char *dapal, char noapply); 399 void setpalettefade(unsigned char r, unsigned char g, unsigned char b, unsigned char offset); 400 void squarerotatetile(short tilenume); 401 402 int setgamemode(char davidoption, int daxdim, int daydim, int dabpp); 403 void nextpage(void); 404 void setview(int x1, int y1, int x2, int y2); 405 void setaspect(int daxrange, int daaspect); 406 void flushperms(void); 407 408 void plotpixel(int x, int y, unsigned char col); 409 unsigned char getpixel(int x, int y); 410 void setviewtotile(short tilenume, int xsiz, int ysiz); 411 void setviewback(void); 412 void preparemirror(int dax, int day, int daz, short daang, int dahoriz, short dawall, short dasector, int *tposx, int *tposy, short *tang); 413 void completemirror(void); 414 415 void drawrooms(int daposx, int daposy, int daposz, short daang, int dahoriz, short dacursectnum); 416 void drawmasks(void); 417 void clearview(int dacol); 418 void clearallviews(int dacol); 419 void drawmapview(int dax, int day, int zoome, short ang); 420 void rotatesprite(int sx, int sy, int z, short a, short picnum, signed char dashade, unsigned char dapalnum, unsigned char dastat, int cx1, int cy1, int cx2, int cy2); 421 void drawline256(int x1, int y1, int x2, int y2, unsigned char col); 422 void printext16(int xpos, int ypos, short col, short backcol, const char *name, char fontsize); 423 void printext256(int xpos, int ypos, short col, short backcol, const char *name, char fontsize); 424 425 int clipmove(int *x, int *y, int *z, short *sectnum, int xvect, int yvect, int walldist, int ceildist, int flordist, unsigned int cliptype); 426 int clipinsidebox(int x, int y, short wallnum, int walldist); 427 int clipinsideboxline(int x, int y, int x1, int y1, int x2, int y2, int walldist); 428 int pushmove(int *x, int *y, int *z, short *sectnum, int walldist, int ceildist, int flordist, unsigned int cliptype); 429 void getzrange(int x, int y, int z, short sectnum, int *ceilz, int *ceilhit, int *florz, int *florhit, int walldist, unsigned int cliptype); 430 int hitscan(int xs, int ys, int zs, short sectnum, int vx, int vy, int vz, short *hitsect, short *hitwall, short *hitsprite, int *hitx, int *hity, int *hitz, unsigned int cliptype); 431 int neartag(int xs, int ys, int zs, short sectnum, short ange, short *neartagsector, short *neartagwall, short *neartagsprite, int *neartaghitdist, int neartagrange, unsigned char tagsearch); 432 int cansee(int x1, int y1, int z1, short sect1, int x2, int y2, int z2, short sect2); 433 void updatesector(int x, int y, short *sectnum); 434 void updatesectorz(int x, int y, int z, short *sectnum); 435 int inside(int x, int y, short sectnum); 436 void dragpoint(short pointhighlight, int dax, int day); 437 void setfirstwall(short sectnum, short newfirstwall); 438 439 void getmousevalues(int *mousx, int *mousy, int *bstatus); 440 int krand(void); 441 int ksqrt(int num); 442 int getangle(int xvect, int yvect); 443 void rotatepoint(int xpivot, int ypivot, int x, int y, short daang, int *x2, int *y2); 444 int lastwall(short point); 445 int nextsectorneighborz(short sectnum, int thez, short topbottom, short direction); 446 int getceilzofslope(short sectnum, int dax, int day); 447 int getflorzofslope(short sectnum, int dax, int day); 448 void getzsofslope(short sectnum, int dax, int day, int *ceilz, int *florz); 449 void alignceilslope(short dasect, int x, int y, int z); 450 void alignflorslope(short dasect, int x, int y, int z); 451 int sectorofwall(short theline); 452 int loopnumofsector(short sectnum, short wallnum); 453 454 int insertsprite(short sectnum, short statnum); 455 int deletesprite(short spritenum); 456 int changespritesect(short spritenum, short newsectnum); 457 int changespritestat(short spritenum, short newstatnum); 458 int setsprite(short spritenum, int newx, int newy, int newz); 459 int setspritez(short spritenum, int newx, int newy, int newz); 460 461 int screencapture(char *filename, char mode); // mode&1 == invert, mode&2 == wait for nextpage 462 463 #define STATUS2DSIZ 144 464 void qsetmode640350(void); 465 void qsetmode640480(void); 466 void qsetmodeany(int,int); 467 void clear2dscreen(void); 468 void draw2dgrid(int posxe, int posye, short ange, int zoome, short gride); 469 void draw2dscreen(int posxe, int posye, short ange, int zoome, short gride); 470 void drawline16(int x1, int y1, int x2, int y2, unsigned char col); 471 void drawcircle16(int x1, int y1, int r, unsigned char col); 472 473 #if USE_POLYMOST 474 int setrendermode(int renderer); 475 int getrendermode(void); 476 # define POLYMOST_RENDERMODE_CLASSIC() (getrendermode() == 0) 477 # define POLYMOST_RENDERMODE_POLYMOST() (getrendermode() > 0) 478 # define POLYMOST_RENDERMODE_POLYGL() (getrendermode() == 3) 479 480 void setrollangle(int rolla); 481 #else 482 # define POLYMOST_RENDERMODE_CLASSIC() (1) 483 # define POLYMOST_RENDERMODE_POLYMOST() (0) 484 # define POLYMOST_RENDERMODE_POLYGL() (0) 485 #endif 486 487 #if USE_POLYMOST && USE_OPENGL 488 // pal: pass -1 to invalidate all palettes for the tile, or >=0 for a particular palette 489 // how: pass -1 to invalidate all instances of the tile in texture memory, or a bitfield 490 // bit 0: opaque or masked (non-translucent) texture, using repeating 491 // bit 1: ignored 492 // bit 2: 33% translucence, using repeating 493 // bit 3: 67% translucence, using repeating 494 // bit 4: opaque or masked (non-translucent) texture, using clamping 495 // bit 5: ignored 496 // bit 6: 33% translucence, using clamping 497 // bit 7: 67% translucence, using clamping 498 // clamping is for sprites, repeating is for walls 499 void invalidatetile(short tilenume, int pal, int how); 500 501 void setpolymost2dview(void); // sets up GL for 2D drawing 502 503 int polymost_drawtilescreen(int tilex, int tiley, int wallnum, int dimen); 504 void polymost_glreset(void); 505 void polymost_precache_begin(void); 506 void polymost_precache(int dapicnum, int dapalnum, int datype); 507 int polymost_precache_run(int* done, int* total); 508 509 extern int glanisotropy; 510 extern int glusetexcompr; 511 extern int gltexfiltermode; 512 extern int glredbluemode; 513 extern int glusetexcache; 514 extern int glmultisample, glnvmultisamplehint; 515 void gltexapplyprops (void); 516 517 extern int polymosttexfullbright; // set to the first index of the fullbright palette 518 519 // effect bitset: 1 = greyscale, 2 = invert 520 void hicsetpalettetint(int palnum, unsigned char r, unsigned char g, unsigned char b, unsigned char effect); 521 // flags bitset: 1 = don't compress 522 int hicsetsubsttex(int picnum, int palnum, char *filen, float alphacut, unsigned char flags); 523 int hicsetskybox(int picnum, int palnum, char *faces[6]); 524 int hicclearsubst(int picnum, int palnum); 525 526 int md_loadmodel(const char *fn); 527 int md_setmisc(int modelid, float scale, int shadeoff, float zadd); 528 int md_tilehasmodel(int tilenume); 529 int md_defineframe(int modelid, const char *framename, int tilenume, int skinnum); 530 int md_defineanimation(int modelid, const char *framestart, const char *frameend, int fps, int flags); 531 int md_defineskin(int modelid, const char *skinfn, int palnum, int skinnum, int surfnum); 532 int md_definehud (int modelid, int tilex, double xadd, double yadd, double zadd, double angadd, int flags); 533 int md_undefinetile(int tile); 534 int md_undefinemodel(int modelid); 535 536 #endif //USE_POLYMOST && USE_OPENGL 537 538 int loaddefinitionsfile(const char *fn); 539 540 extern int mapversion; // if loadboard() fails with -2 return, try loadoldboard(). if it fails with -2, board is dodgy 541 int loadoldboard(char *filename, char fromwhere, int *daposx, int *daposy, int *daposz, short *daang, short *dacursectnum); 542 543 void buildprintf(const char *fmt, ...) PRINTF_FORMAT(1, 2); 544 void buildputs(const char *str); 545 void buildsetlogfile(const char *fn); 546 547 #ifdef _MSC_VER 548 #pragma pack() 549 #endif 550 551 #ifdef __WATCOMC__ 552 #pragma pack(pop) 553 #endif 554 555 #undef BPACK 556 557 #ifdef __cplusplus 558 } 559 #endif 560 561 #endif // __build_h__ 562