1 //------------------------------------------------------------------------- 2 /* 3 Copyright (C) 1996, 2003 - 3D Realms Entertainment 4 Copyright (C) 2000, 2003 - Matt Saettler (EDuke Enhancements) 5 Copyright (C) 2004, 2007 - EDuke32 developers 6 7 This file is part of EDuke32 8 9 EDuke32 is free software; you can redistribute it and/or 10 modify it under the terms of the GNU General Public License version 2 11 as published by the Free Software Foundation. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 17 See the GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; if not, write to the Free Software 21 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 22 */ 23 //------------------------------------------------------------------------- 24 25 #ifndef m32def_h_ 26 #define m32def_h_ 27 28 // the parsing routines aren't good at error recovery yet... 29 #define ABORTERRCNT 1 30 31 // these two are for m32def.c 32 #define C_CUSTOMERROR(Text, ...) do { \ 33 C_ReportError(-1); \ 34 initprintf("%s:%d: error: " Text "\n", g_szScriptFileName, g_lineNumber, ## __VA_ARGS__); \ 35 C_PrintErrorPosition(); \ 36 g_numCompilerErrors++; \ 37 } while (0) 38 #define C_CUSTOMWARNING(Text, ...) do { \ 39 C_ReportError(-1); \ 40 initprintf("%s:%d: warning: " Text "\n", g_szScriptFileName, g_lineNumber, ## __VA_ARGS__); \ 41 C_PrintErrorPosition(); \ 42 g_numCompilerWarnings++; \ 43 } while (0) 44 45 extern void C_PrintErrorPosition(); 46 extern void C_ReportError(int32_t iError); 47 48 extern char g_szScriptFileName[BMAX_PATH]; 49 extern int32_t g_totalLines, g_lineNumber; 50 extern int32_t g_numCompilerErrors, g_numCompilerWarnings; 51 52 extern int32_t g_didDefineSomething; 53 54 extern instype *g_scriptPtr; 55 56 void C_Compile(const char *filenameortext, int32_t isfilename); 57 void C_CompilationInfo(void); 58 59 void registerMenuFunction(const char *funcname, int32_t stateidx); 60 void M32_PostScriptExec(void); 61 62 typedef struct 63 { 64 int32_t ofs; // offset into script[] 65 int32_t codesize; 66 uint16_t numlocals; // number of local int32_t vars to allocate 67 char name[MAXLABELLEN]; 68 } statesinfo_t; 69 70 extern statesinfo_t *statesinfo; 71 extern int32_t g_stateCount; 72 73 74 typedef struct 75 { 76 const char *name; 77 int16_t lId; 78 int16_t flags; // 1: read-only 79 int32_t min, max; 80 } memberlabel_t; 81 82 extern memberlabel_t const SectorLabels[]; 83 extern memberlabel_t const WallLabels[]; 84 extern memberlabel_t const SpriteLabels[]; 85 extern memberlabel_t const LightLabels[]; 86 87 88 typedef struct { 89 const char* token; 90 int32_t val; 91 } tokenmap_t; 92 93 extern const tokenmap_t iter_tokens[]; 94 95 enum vmflags 96 { 97 VMFLAG_RETURN = 1, 98 VMFLAG_BREAK = 2, 99 VMFLAG_ERROR = 4, 100 }; 101 102 enum miscvmflags 103 { 104 VMFLAG_MISC_UPDATEHL = 1, 105 VMFLAG_MISC_UPDATEHLSECT = 2, 106 VMFLAG_MISC_INTERACTIVE = 4, 107 }; 108 109 typedef struct { 110 int32_t spriteNum; 111 // VM state: either ==0 (top-level), >=1 and < MAXEVENTS+1 (event), 112 // or >= MAXEVENTS+1 and < MAXEVENTS+1+g_stateCount (state) 113 int32_t g_st; 114 union { 115 spritetype * pSprite; 116 uspritetype const * pUSprite; 117 }; 118 uint32_t flags; // g_errorFlag, g_returnFlag; 119 120 // 1:updatehighlight, 2:updatehighlightsector, 4:interactive (from menu)? 121 uint32_t miscflags; 122 } vmstate_t; 123 124 extern vmstate_t vm; 125 extern vmstate_t vm_default; 126 127 128 extern int32_t g_errorLineNum; 129 extern int32_t g_tw; 130 extern const char *keyw[]; 131 132 enum SystemString_t { 133 STR_MAPFILENAME, 134 STR_VERSION, 135 }; 136 137 enum ScriptError_t 138 { 139 ERROR_CLOSEBRACKET, 140 ERROR_EVENTONLY, 141 // ERROR_EXCEEDSMAXTILES, 142 ERROR_EXPECTEDKEYWORD, 143 ERROR_FOUNDWITHIN, 144 ERROR_ISAKEYWORD, 145 ERROR_NOENDSWITCH, 146 ERROR_NOTAGAMEDEF, 147 ERROR_NOTAGAMEVAR, 148 ERROR_NOTAGAMEARRAY, 149 ERROR_GAMEARRAYBNC, 150 ERROR_GAMEARRAYBNO, 151 ERROR_INVALIDARRAYWRITE, 152 ERROR_EXPECTEDSIMPLEVAR, 153 ERROR_OPENBRACKET, 154 ERROR_PARAMUNDEFINED, 155 ERROR_SYMBOLNOTRECOGNIZED, 156 ERROR_SYNTAXERROR, 157 ERROR_VARREADONLY, 158 ERROR_ARRAYREADONLY, 159 ERROR_VARTYPEMISMATCH, 160 ERROR_LABELINUSE, 161 // WARNING_BADGAMEVAR, 162 WARNING_DUPLICATECASE, 163 WARNING_DUPLICATEDEFINITION, 164 WARNING_LABELSONLY, 165 WARNING_NAMEMATCHESVAR, 166 // WARNING_CONSTANTBITSIZE, 167 WARNING_OUTSIDEDRAWSPRITE, 168 }; 169 170 171 enum SectorLabel_t 172 { 173 SECTOR_WALLPTR, 174 SECTOR_WALLNUM, 175 SECTOR_CEILINGZ, 176 SECTOR_FLOORZ, 177 SECTOR_CEILINGSTAT, 178 SECTOR_FLOORSTAT, 179 SECTOR_CEILINGPICNUM, 180 SECTOR_CEILINGSLOPE, 181 SECTOR_CEILINGSHADE, 182 SECTOR_CEILINGPAL, 183 SECTOR_CEILINGXPANNING, 184 SECTOR_CEILINGYPANNING, 185 SECTOR_FLOORPICNUM, 186 SECTOR_FLOORSLOPE, 187 SECTOR_FLOORSHADE, 188 SECTOR_FLOORPAL, 189 SECTOR_FLOORXPANNING, 190 SECTOR_FLOORYPANNING, 191 SECTOR_VISIBILITY, 192 SECTOR_FOGPAL, 193 SECTOR_LOTAG, 194 SECTOR_HITAG, 195 SECTOR_EXTRA, 196 SECTOR_END 197 }; 198 199 enum WallLabel_t 200 { 201 WALL_X, 202 WALL_Y, 203 WALL_POINT2, 204 WALL_NEXTWALL, 205 WALL_NEXTSECTOR, 206 WALL_CSTAT, 207 WALL_PICNUM, 208 WALL_OVERPICNUM, 209 WALL_SHADE, 210 WALL_PAL, 211 WALL_XREPEAT, 212 WALL_YREPEAT, 213 WALL_XPANNING, 214 WALL_YPANNING, 215 WALL_LOTAG, 216 WALL_HITAG, 217 WALL_EXTRA, 218 WALL_END 219 }; 220 221 enum SpriteLabel_t 222 { 223 SPRITE_X, // 0 224 SPRITE_Y, 225 SPRITE_Z, 226 SPRITE_CSTAT, 227 SPRITE_PICNUM, 228 SPRITE_SHADE, // 5 229 SPRITE_PAL, 230 SPRITE_CLIPDIST, 231 SPRITE_BLEND, 232 SPRITE_XREPEAT, 233 SPRITE_YREPEAT, // 10 234 SPRITE_XOFFSET, 235 SPRITE_YOFFSET, 236 SPRITE_SECTNUM, 237 SPRITE_STATNUM, 238 SPRITE_ANG, // 15 239 SPRITE_OWNER, 240 SPRITE_XVEL, 241 SPRITE_YVEL, 242 SPRITE_ZVEL, 243 SPRITE_LOTAG, // 20 244 SPRITE_HITAG, 245 SPRITE_EXTRA, 246 247 LIGHT_X, // must be first here 248 LIGHT_Y, 249 LIGHT_Z, // 25 250 LIGHT_HORIZ, 251 LIGHT_RANGE, 252 LIGHT_ANGLE, 253 LIGHT_FADERADIUS, 254 LIGHT_RADIUS, // 30 255 LIGHT_SECTOR, 256 LIGHT_R, 257 LIGHT_G, 258 LIGHT_B, 259 LIGHT_PRIORITY, // 35 260 LIGHT_TILENUM, 261 LIGHT_MINSHADE, 262 LIGHT_MAXSHADE, 263 LIGHT_ACTIVE, 264 265 SPRITE_END 266 }; 267 268 enum IterationTypes_t 269 { 270 ITER_ALLSPRITES, 271 ITER_ALLSECTORS, 272 ITER_ALLWALLS, 273 ITER_ACTIVELIGHTS, 274 ITER_SELSPRITES, 275 ITER_SELSECTORS, 276 ITER_SELWALLS, 277 ITER_DRAWNSPRITES, 278 // --- 279 ITER_SPRITESOFSECTOR, 280 ITER_WALLSOFSECTOR, 281 ITER_LOOPOFWALL, 282 ITER_RANGE, 283 ITER_END 284 }; 285 286 enum ScriptKeywords_t 287 { 288 // basic commands 289 CON_NULLOP, 290 CON_DEFINE, 291 CON_INCLUDE, 292 CON_DEFSTATE, 293 CON_ENDS, 294 CON_STATE, 295 CON_ONEVENT, 296 CON_ENDEVENT, 297 CON_GAMEVAR, 298 299 // control flow (except if*) 300 CON_ELSE, 301 CON_RETURN, 302 CON_BREAK, 303 CON_SWITCH, 304 CON_CASE, 305 CON_DEFAULT, 306 CON_ENDSWITCH, 307 CON_GETCURRADDRESS, 308 CON_JUMP, 309 CON_LEFTBRACE, 310 CON_RIGHTBRACE, 311 312 #if 0 313 // more basic commands 314 CON_SETSECTOR, 315 CON_GETSECTOR, 316 CON_SETWALL, 317 CON_GETWALL, 318 CON_SETSPRITE, //+ 319 CON_GETSPRITE, //+ 320 CON_GETTSPR, 321 CON_SETTSPR, 322 #endif 323 324 // arrays 325 CON_GAMEARRAY, 326 CON_SETARRAY, 327 CON_GETARRAYSIZE, 328 CON_RESIZEARRAY, 329 CON_COPY, 330 /// CON_WRITEARRAYTOFILE, 331 /// CON_READARRAYFROMFILE, 332 333 // var ops 334 CON_RANDVAR, 335 CON_DISPLAYRANDVAR, 336 CON_SETVAR, 337 CON_ADDVAR, 338 CON_SUBVAR, 339 CON_MULVAR, 340 CON_DIVVAR, 341 CON_MODVAR, 342 CON_ANDVAR, 343 CON_ORVAR, 344 CON_XORVAR, 345 CON_SHIFTVARL, 346 CON_SHIFTVARR, 347 // varvar ops 348 CON_RANDVARVAR, 349 CON_DISPLAYRANDVARVAR, 350 CON_SETVARVAR, 351 CON_ADDVARVAR, 352 CON_SUBVARVAR, 353 CON_MULVARVAR, 354 CON_DIVVARVAR, 355 CON_MODVARVAR, 356 CON_ANDVARVAR, 357 CON_ORVARVAR, 358 CON_XORVARVAR, 359 CON_SHIFTVARVARL, 360 CON_SHIFTVARVARR, 361 CON_SIN, 362 CON_COS, 363 364 // random 365 CON_DISPLAYRAND, 366 367 // other math 368 CON_ITOF, 369 CON_FTOI, 370 CON_CLAMP, 371 CON_INV, 372 CON_SQRT, 373 CON_MULSCALE, 374 CON_DIVSCALE, 375 CON_SCALEVAR, 376 CON_DIST, 377 CON_LDIST, 378 CON_CALCHYPOTENUSE, 379 CON_GETANGLE, 380 CON_GETINCANGLE, 381 CON_A2XY, 382 CON_AH2XYZ, 383 384 CON_COLLECTSECTORS, 385 CON_SORT, 386 CON_FOR, 387 388 // if & while var 389 CON_IFVARL, 390 CON_IFVARLE, 391 CON_IFVARG, 392 CON_IFVARGE, 393 CON_IFVARA, 394 CON_IFVARAE, 395 CON_IFVARB, 396 CON_IFVARBE, 397 CON_IFVARE, 398 CON_IFVARN, 399 CON_IFVARAND, 400 CON_IFVAROR, 401 CON_IFVARXOR, 402 CON_IFVAREITHER, 403 CON_IFVARBOTH, 404 CON_WHILEVARN, 405 CON_WHILEVARL, 406 407 // if & while varvar 408 CON_IFVARVARL, 409 CON_IFVARVARLE, 410 CON_IFVARVARG, 411 CON_IFVARVARGE, 412 CON_IFVARVARA, 413 CON_IFVARVARAE, 414 CON_IFVARVARB, 415 CON_IFVARVARBE, 416 CON_IFVARVARE, 417 CON_IFVARVARN, 418 CON_IFVARVARAND, 419 CON_IFVARVAROR, 420 CON_IFVARVARXOR, 421 CON_IFVARVAREITHER, 422 CON_IFVARVARBOTH, 423 CON_WHILEVARVARN, 424 CON_WHILEVARVARL, 425 426 // other if* 427 CON_IFHITKEY, 428 CON_IFHOLDKEY, 429 CON_IFRND, 430 431 // if* using current sprite 432 CON_IFANGDIFFL, 433 CON_IFSPRITEPAL, 434 CON_IFHIGHLIGHTED, 435 CON_IFACTOR, 436 CON_IFSOUND, 437 CON_IFPDISTL, 438 CON_IFPDISTG, 439 /// CON_IFGAPZL, 440 /// CON_IFFLOORDISTL, 441 /// CON_IFCEILINGDISTL, 442 443 CON_IFINSIDE, 444 445 CON_IFEITHERALT, 446 CON_IFEITHERCTRL, 447 CON_IFEITHERSHIFT, 448 CON_IFAWAYFROMWALL, 449 CON_IFCANSEE, 450 CON_IFONWATER, 451 CON_IFINWATER, 452 CON_IFOUTSIDE, 453 /// CON_IFHITSPACE, 454 /// CON_IFINSPACE, 455 /// CON_IFINOUTERSPACE, 456 /// CON_IFCANSEETARGET, 457 CON_IFNOSOUNDS, 458 CON_IFIN3DMODE, 459 CON_IFAIMINGSPRITE, 460 CON_IFAIMINGWALL, 461 CON_IFAIMINGSECTOR, 462 CON_IFINTERACTIVE, 463 464 // keyboard 465 CON_RESETKEY, 466 CON_SETKEY, 467 468 // BUILD functions 469 CON_INSERTSPRITE, 470 CON_DUPSPRITE, 471 CON_TDUPSPRITE, 472 CON_DELETESPRITE, 473 CON_GETSPRITELINKTYPE, 474 CON_LASTWALL, 475 CON_UPDATECURSECTNUM, 476 CON_UPDATESECTOR, 477 CON_UPDATESECTORZ, 478 CON_UPDATESECTORNEIGHBOR, 479 CON_UPDATESECTORNEIGHBORZ, 480 CON_GETZRANGE, 481 CON_CLIPMOVE, 482 CON_LINEINTERSECT, 483 CON_RAYINTERSECT, 484 CON_HITSCAN, 485 CON_CANSEE, 486 CON_CANSEESPR, 487 CON_NEARTAG, 488 CON_ROTATEPOINT, 489 CON_DRAGPOINT, 490 CON_GETCEILZOFSLOPE, 491 CON_GETFLORZOFSLOPE, 492 CON_ALIGNCEILSLOPE, 493 CON_ALIGNFLORSLOPE, 494 CON_BSETSPRITE, // was CON_SETSPRITE 495 CON_SETFIRSTWALL, 496 CON_CHANGESPRITESTAT, 497 CON_CHANGESPRITESECT, 498 CON_HEADSPRITESTAT, 499 CON_PREVSPRITESTAT, 500 CON_NEXTSPRITESTAT, 501 CON_HEADSPRITESECT, 502 CON_PREVSPRITESECT, 503 CON_NEXTSPRITESECT, 504 CON_SECTOROFWALL, 505 CON_FIXREPEATS, 506 CON_GETCLOSESTCOL, 507 508 // stuff 509 CON_UPDATEHIGHLIGHT, 510 CON_UPDATEHIGHLIGHTSECTOR, 511 CON_SETHIGHLIGHT, 512 CON_SETHIGHLIGHTSECTOR, 513 CON_ADDLOGVAR, 514 CON_ADDLOG, 515 CON_DEBUG, 516 517 // strings 518 CON_DEFINEQUOTE, 519 CON_REDEFINEQUOTE, 520 CON_PRINT, 521 CON_QUOTE, 522 CON_ERRORINS, 523 CON_PRINTMESSAGE16, 524 CON_PRINTMESSAGE256, 525 CON_PRINTEXT256, 526 CON_PRINTEXT16, 527 CON_DRAWLABEL, 528 CON_GETNUMBER16, 529 CON_GETNUMBER256, 530 CON_GETNUMBERFROMUSER, 531 CON_QSPRINTF, 532 CON_QSTRCAT, 533 CON_QSTRCPY, 534 CON_QSTRLEN, 535 // CON_QGETSYSSTR, 536 CON_QSTRNCAT, 537 CON_QSUBSTR, 538 539 // findnear* 540 CON_FINDNEARSPRITE, 541 CON_FINDNEARSPRITEVAR, 542 CON_FINDNEARSPRITE3D, 543 CON_FINDNEARSPRITE3DVAR, 544 CON_FINDNEARSPRITEZ, 545 CON_FINDNEARSPRITEZVAR, 546 547 CON_GETTICKS, 548 CON_GETTIMEDATE, 549 CON_SETASPECT, 550 551 // vvv stuff using current sprite 552 CON_SETI, 553 CON_SIZEAT, 554 CON_CSTAT, 555 CON_CSTATOR, 556 CON_CLIPDIST, 557 CON_SPRITEPAL, 558 CON_CACTOR, 559 CON_SPGETLOTAG, 560 CON_SPGETHITAG, 561 CON_SECTGETLOTAG, 562 CON_SECTGETHITAG, 563 CON_GETTEXTUREFLOOR, 564 CON_GETTEXTURECEILING, 565 /// CON_KILLIT, 566 567 // left to define later/undecided 568 569 // sound 570 CON_SOUNDVAR, 571 CON_SOUNDONCEVAR, 572 CON_STOPALLSOUNDS, 573 CON_STOPSOUNDVAR, 574 CON_GLOBALSOUNDVAR, 575 CON_GETSOUNDFLAGS, 576 /// CON_SOUND, 577 /// CON_SOUNDONCE, 578 /// CON_STOPSOUND, 579 /// CON_GLOBALSOUND, 580 581 // drawing 582 /// CON_MYOS, 583 /// CON_MYOSPAL, 584 /// CON_MYOSX, 585 /// CON_MYOSPALX, 586 /// CON_MINITEXT, 587 /// CON_GAMETEXT, 588 /// CON_DIGITALNUMBER, 589 /// CON_SHOWVIEW, 590 /// CON_GAMETEXTZ, 591 /// CON_DIGITALNUMBERZ, 592 CON_DRAWLINE16, 593 CON_DRAWLINE16B, 594 CON_DRAWLINE16Z, 595 CON_DRAWLINE256, 596 CON_DRAWCIRCLE16, 597 CON_DRAWCIRCLE16B, 598 CON_DRAWCIRCLE16Z, 599 CON_ROTATESPRITEA, 600 CON_ROTATESPRITE16, 601 CON_ROTATESPRITE, 602 CON_SETGAMEPALETTE, 603 604 /// CON_TIME, 605 /// CON_GETANGLETOTARGET, 606 /// CON_ANGOFF, 607 /// CON_ANGOFFVAR, 608 /// CON_PRECACHE, 609 /// CON_SAVEGAMEVAR, 610 /// CON_READGAMEVAR, 611 /// CON_SETDEFNAME, 612 /// CON_SETCFGNAME, 613 614 CON_END 615 }; 616 617 #endif 618