1 // SONIC ROBO BLAST 2 2 //----------------------------------------------------------------------------- 3 // Copyright (C) 1993-1996 by id Software, Inc. 4 // Copyright (C) 1998-2000 by DooM Legacy Team. 5 // Copyright (C) 1999-2020 by Sonic Team Junior. 6 // 7 // This program is free software distributed under the 8 // terms of the GNU General Public License, version 2. 9 // See the 'LICENSE' file for more details. 10 //----------------------------------------------------------------------------- 11 /// \file doomdef.h 12 /// \brief Internally used data structures for virtually everything, 13 /// key definitions, lots of other stuff. 14 15 #ifndef __DOOMDEF__ 16 #define __DOOMDEF__ 17 18 // Sound system select 19 // This should actually be in the makefile, 20 // but I can't stand that gibberish. D: 21 #define SOUND_DUMMY 0 22 #define SOUND_SDL 1 23 #define SOUND_MIXER 2 24 #define SOUND_FMOD 3 25 26 #ifndef SOUND 27 #ifdef HAVE_SDL 28 29 // Use Mixer interface? 30 #ifdef HAVE_MIXER 31 #define SOUND SOUND_MIXER 32 #ifdef HW3SOUND 33 #undef HW3SOUND 34 #endif 35 #endif 36 37 // Use generic SDL interface. 38 #ifndef SOUND 39 #define SOUND SOUND_SDL 40 #endif 41 42 #else // No SDL. 43 44 // Use FMOD? 45 #ifdef HAVE_FMOD 46 #define SOUND SOUND_FMOD 47 #ifdef HW3SOUND 48 #undef HW3SOUND 49 #endif 50 #else 51 // No more interfaces. :( 52 #define SOUND SOUND_DUMMY 53 #endif 54 55 #endif 56 #endif 57 58 #ifdef _WINDOWS 59 #define NONET 60 #if !defined (HWRENDER) && !defined (NOHW) 61 #define HWRENDER 62 #endif 63 #endif 64 65 #ifdef _WIN32 66 #define ASMCALL __cdecl 67 #else 68 #define ASMCALL 69 #endif 70 71 #ifdef _MSC_VER 72 #pragma warning(disable : 4127 4152 4213 4514) 73 #ifdef _WIN64 74 #pragma warning(disable : 4306) 75 #endif 76 #endif 77 // warning level 4 78 // warning C4127: conditional expression is constant 79 // warning C4152: nonstandard extension, function/data pointer conversion in expression 80 // warning C4213: nonstandard extension used : cast on l-value 81 82 83 #include "version.h" 84 #include "doomtype.h" 85 86 #include <stdarg.h> 87 #include <stdio.h> 88 #include <stdlib.h> 89 #include <string.h> 90 91 #define _USE_MATH_DEFINES // fixes M_PI errors in r_plane.c for Visual Studio 92 #include <math.h> 93 94 #ifdef GETTEXT 95 #include <libintl.h> 96 #endif 97 #include <locale.h> // locale should not be dependent on GETTEXT -- 11/01/20 Monster Iestyn 98 99 #include <sys/types.h> 100 #include <sys/stat.h> 101 #include <ctype.h> 102 103 #if defined (_WIN32) || defined (__DJGPP__) 104 #include <io.h> 105 #endif 106 107 //#define NOMD5 108 109 // Uncheck this to compile debugging code 110 //#define RANGECHECK 111 //#ifndef PARANOIA 112 //#define PARANOIA // do some tests that never fail but maybe 113 // turn this on by make etc.. DEBUGMODE = 1 or use the Debug profile in the VC++ projects 114 //#endif 115 #if defined (_WIN32) || (defined (__unix__) && !defined (MSDOS)) || defined(__APPLE__) || defined (UNIXCOMMON) || defined (macintosh) 116 #define LOGMESSAGES // write message in log.txt 117 #endif 118 119 #ifdef LOGMESSAGES 120 extern FILE *logstream; 121 extern char logfilename[1024]; 122 #endif 123 124 /* A mod name to further distinguish versions. */ 125 #define SRB2APPLICATION "SRB2" 126 127 //#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3 128 #ifdef DEVELOP 129 #define VERSIONSTRING "Development EXE" 130 // most interface strings are ignored in development mode. 131 // we use comprevision and compbranch instead. 132 // VERSIONSTRING_RC is for the resource-definition script used by windows builds 133 #else 134 #ifdef BETAVERSION 135 #define VERSIONSTRING "v"SRB2VERSION" "BETAVERSION 136 #define VERSIONSTRING_RC SRB2VERSION " " BETAVERSION "\0" 137 #else 138 #define VERSIONSTRING "v"SRB2VERSION 139 #define VERSIONSTRING_RC SRB2VERSION "\0" 140 #endif 141 // Hey! If you change this, add 1 to the MODVERSION below! 142 // Otherwise we can't force updates! 143 #endif 144 145 #define VERSIONSTRINGW WSTRING (VERSIONSTRING) 146 147 /* A custom URL protocol for server links. */ 148 #define SERVER_URL_PROTOCOL "srb2://" 149 150 // Does this version require an added patch file? 151 // Comment or uncomment this as necessary. 152 #define USE_PATCH_DTA 153 154 // Use .kart extension addons 155 //#define USE_KART 156 157 // Modification options 158 // If you want to take advantage of the Master Server's ability to force clients to update 159 // to the latest version, fill these out. Otherwise, just comment out UPDATE_ALERT and leave 160 // the other options the same. 161 162 // Comment out this line to completely disable update alerts (recommended for testing, but not for release) 163 #ifndef BETAVERSION 164 #define UPDATE_ALERT 165 #endif 166 167 // The string used in the alert that pops up in the event of an update being available. 168 // Please change to apply to your modification (we don't want everyone asking where your mod is on SRB2.org!). 169 #define UPDATE_ALERT_STRING \ 170 "A new update is available for SRB2.\n"\ 171 "Please visit SRB2.org to download it.\n"\ 172 "\n"\ 173 "You are using version: %s\n"\ 174 "The newest version is: %s\n"\ 175 "\n"\ 176 "This update is required for online\n"\ 177 "play using the Master Server.\n"\ 178 "You will not be able to connect to\n"\ 179 "the Master Server until you update to\n"\ 180 "the newest version of the game.\n"\ 181 "\n"\ 182 "(Press a key)\n" 183 184 // The string used in the I_Error alert upon trying to host through command line parameters. 185 // Generally less filled with newlines, since Windows gives you lots more room to work with. 186 #define UPDATE_ALERT_STRING_CONSOLE \ 187 "A new update is available for SRB2.\n"\ 188 "Please visit SRB2.org to download it.\n"\ 189 "\n"\ 190 "You are using version: %s\n"\ 191 "The newest version is: %s\n"\ 192 "\n"\ 193 "This update is required for online play using the Master Server.\n"\ 194 "You will not be able to connect to the Master Server\n"\ 195 "until you update to the newest version of the game.\n" 196 197 // For future use, the codebase is the version of SRB2 that the modification is based on, 198 // and should not be changed unless you have merged changes between versions of SRB2 199 // (such as 2.0.4 to 2.0.5, etc) into your working copy. 200 // Will always resemble the versionstring, 205 = 2.0.5, 210 = 2.1, etc. 201 #define CODEBASE 220 202 203 // To version config.cfg, MAJOREXECVERSION is set equal to MODVERSION automatically. 204 // Increment MINOREXECVERSION whenever a config change is needed that does not correspond 205 // to an increment in MODVERSION. This might never happen in practice. 206 // If MODVERSION increases, set MINOREXECVERSION to 0. 207 #define MAJOREXECVERSION MODVERSION 208 #define MINOREXECVERSION 0 209 // (It would have been nice to use VERSION and SUBVERSION but those are zero'd out for DEVELOP builds) 210 211 // Macros 212 #define GETMAJOREXECVERSION(v) (v & 0xFFFF) 213 #define GETMINOREXECVERSION(v) (v >> 16) 214 #define GETEXECVERSION(major,minor) (major + (minor << 16)) 215 #define EXECVERSION GETEXECVERSION(MAJOREXECVERSION, MINOREXECVERSION) 216 217 // ========================================================================= 218 219 // The maximum number of players, multiplayer/networking. 220 // NOTE: it needs more than this to increase the number of players... 221 222 #define MAXPLAYERS 32 223 #define MAXSKINS 32 224 #define PLAYERSMASK (MAXPLAYERS-1) 225 #define MAXPLAYERNAME 21 226 227 #define COLORRAMPSIZE 16 228 #define MAXCOLORNAME 32 229 #define NUMCOLORFREESLOTS 1024 230 231 typedef struct skincolor_s 232 { 233 char name[MAXCOLORNAME+1]; // Skincolor name 234 UINT8 ramp[COLORRAMPSIZE]; // Colormap ramp 235 UINT16 invcolor; // Signpost color 236 UINT8 invshade; // Signpost color shade 237 UINT16 chatcolor; // Chat color 238 boolean accessible; // Accessible by the color command + setup menu 239 } skincolor_t; 240 241 typedef enum 242 { 243 SKINCOLOR_NONE = 0, 244 245 // Greyscale ranges 246 SKINCOLOR_WHITE, 247 SKINCOLOR_BONE, 248 SKINCOLOR_CLOUDY, 249 SKINCOLOR_GREY, 250 SKINCOLOR_SILVER, 251 SKINCOLOR_CARBON, 252 SKINCOLOR_JET, 253 SKINCOLOR_BLACK, 254 255 // Desaturated 256 SKINCOLOR_AETHER, 257 SKINCOLOR_SLATE, 258 SKINCOLOR_BLUEBELL, 259 SKINCOLOR_PINK, 260 SKINCOLOR_YOGURT, 261 SKINCOLOR_BROWN, 262 SKINCOLOR_BRONZE, 263 SKINCOLOR_TAN, 264 SKINCOLOR_BEIGE, 265 SKINCOLOR_MOSS, 266 SKINCOLOR_AZURE, 267 SKINCOLOR_LAVENDER, 268 269 // Viv's vivid colours (toast 21/07/17) 270 SKINCOLOR_RUBY, 271 SKINCOLOR_SALMON, 272 SKINCOLOR_RED, 273 SKINCOLOR_CRIMSON, 274 SKINCOLOR_FLAME, 275 SKINCOLOR_KETCHUP, 276 SKINCOLOR_PEACHY, 277 SKINCOLOR_QUAIL, 278 SKINCOLOR_SUNSET, 279 SKINCOLOR_COPPER, 280 SKINCOLOR_APRICOT, 281 SKINCOLOR_ORANGE, 282 SKINCOLOR_RUST, 283 SKINCOLOR_GOLD, 284 SKINCOLOR_SANDY, 285 SKINCOLOR_YELLOW, 286 SKINCOLOR_OLIVE, 287 SKINCOLOR_LIME, 288 SKINCOLOR_PERIDOT, 289 SKINCOLOR_APPLE, 290 SKINCOLOR_GREEN, 291 SKINCOLOR_FOREST, 292 SKINCOLOR_EMERALD, 293 SKINCOLOR_MINT, 294 SKINCOLOR_SEAFOAM, 295 SKINCOLOR_AQUA, 296 SKINCOLOR_TEAL, 297 SKINCOLOR_WAVE, 298 SKINCOLOR_CYAN, 299 SKINCOLOR_SKY, 300 SKINCOLOR_CERULEAN, 301 SKINCOLOR_ICY, 302 SKINCOLOR_SAPPHIRE, // sweet mother, i cannot weave – slender aphrodite has overcome me with longing for a girl 303 SKINCOLOR_CORNFLOWER, 304 SKINCOLOR_BLUE, 305 SKINCOLOR_COBALT, 306 SKINCOLOR_VAPOR, 307 SKINCOLOR_DUSK, 308 SKINCOLOR_PASTEL, 309 SKINCOLOR_PURPLE, 310 SKINCOLOR_BUBBLEGUM, 311 SKINCOLOR_MAGENTA, 312 SKINCOLOR_NEON, 313 SKINCOLOR_VIOLET, 314 SKINCOLOR_LILAC, 315 SKINCOLOR_PLUM, 316 SKINCOLOR_RASPBERRY, 317 SKINCOLOR_ROSY, 318 319 FIRSTSUPERCOLOR, 320 321 // Super special awesome Super flashing colors! 322 SKINCOLOR_SUPERSILVER1 = FIRSTSUPERCOLOR, 323 SKINCOLOR_SUPERSILVER2, 324 SKINCOLOR_SUPERSILVER3, 325 SKINCOLOR_SUPERSILVER4, 326 SKINCOLOR_SUPERSILVER5, 327 328 SKINCOLOR_SUPERRED1, 329 SKINCOLOR_SUPERRED2, 330 SKINCOLOR_SUPERRED3, 331 SKINCOLOR_SUPERRED4, 332 SKINCOLOR_SUPERRED5, 333 334 SKINCOLOR_SUPERORANGE1, 335 SKINCOLOR_SUPERORANGE2, 336 SKINCOLOR_SUPERORANGE3, 337 SKINCOLOR_SUPERORANGE4, 338 SKINCOLOR_SUPERORANGE5, 339 340 SKINCOLOR_SUPERGOLD1, 341 SKINCOLOR_SUPERGOLD2, 342 SKINCOLOR_SUPERGOLD3, 343 SKINCOLOR_SUPERGOLD4, 344 SKINCOLOR_SUPERGOLD5, 345 346 SKINCOLOR_SUPERPERIDOT1, 347 SKINCOLOR_SUPERPERIDOT2, 348 SKINCOLOR_SUPERPERIDOT3, 349 SKINCOLOR_SUPERPERIDOT4, 350 SKINCOLOR_SUPERPERIDOT5, 351 352 SKINCOLOR_SUPERSKY1, 353 SKINCOLOR_SUPERSKY2, 354 SKINCOLOR_SUPERSKY3, 355 SKINCOLOR_SUPERSKY4, 356 SKINCOLOR_SUPERSKY5, 357 358 SKINCOLOR_SUPERPURPLE1, 359 SKINCOLOR_SUPERPURPLE2, 360 SKINCOLOR_SUPERPURPLE3, 361 SKINCOLOR_SUPERPURPLE4, 362 SKINCOLOR_SUPERPURPLE5, 363 364 SKINCOLOR_SUPERRUST1, 365 SKINCOLOR_SUPERRUST2, 366 SKINCOLOR_SUPERRUST3, 367 SKINCOLOR_SUPERRUST4, 368 SKINCOLOR_SUPERRUST5, 369 370 SKINCOLOR_SUPERTAN1, 371 SKINCOLOR_SUPERTAN2, 372 SKINCOLOR_SUPERTAN3, 373 SKINCOLOR_SUPERTAN4, 374 SKINCOLOR_SUPERTAN5, 375 376 SKINCOLOR_FIRSTFREESLOT, 377 SKINCOLOR_LASTFREESLOT = SKINCOLOR_FIRSTFREESLOT + NUMCOLORFREESLOTS - 1, 378 379 MAXSKINCOLORS, 380 381 NUMSUPERCOLORS = ((SKINCOLOR_FIRSTFREESLOT - FIRSTSUPERCOLOR)/5) 382 } skincolornum_t; 383 384 extern UINT16 numskincolors; 385 386 extern skincolor_t skincolors[MAXSKINCOLORS]; 387 388 // State updates, number of tics / second. 389 // NOTE: used to setup the timer rate, see I_StartupTimer(). 390 #define TICRATE 35 391 #define NEWTICRATERATIO 1 // try 4 for 140 fps :) 392 #define NEWTICRATE (TICRATE*NEWTICRATERATIO) 393 394 #define MUSICRATE 1000 // sound timing is calculated by milliseconds 395 396 #define RING_DIST 512*FRACUNIT // how close you need to be to a ring to attract it 397 398 #define PUSHACCEL (2*FRACUNIT) // Acceleration for MF2_SLIDEPUSH items. 399 400 // Special linedef executor tag numbers! 401 enum { 402 LE_PINCHPHASE = -2, // A boss entered pinch phase (and, in most cases, is preparing their pinch phase attack!) 403 LE_ALLBOSSESDEAD = -3, // All bosses in the map are dead (Egg capsule raise) 404 LE_BOSSDEAD = -4, // A boss in the map died (Chaos mode boss tally) 405 LE_BOSS4DROP = -5, // CEZ boss dropped its cage (also subtract the number of hitpoints it's lost) 406 LE_BRAKVILEATACK = -6, // Brak's doing his LOS attack, oh noes 407 LE_TURRET = 32000, // THZ turret 408 LE_BRAKPLATFORM = 4200, // v2.0 Black Eggman destroys platform 409 LE_CAPSULE2 = 682, // Egg Capsule 410 LE_CAPSULE1 = 681, // Egg Capsule 411 LE_CAPSULE0 = 680, // Egg Capsule 412 LE_KOOPA = 650, // Distant cousin to Gay Bowser 413 LE_AXE = 649, // MKB Axe object 414 LE_PARAMWIDTH = -100 // If an object that calls LinedefExecute has a nonzero parameter value, this times the parameter will be subtracted. (Mostly for the purpose of coexisting bosses...) 415 }; 416 417 // Name of local directory for config files and savegames 418 #if (((defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON)) && !defined (__CYGWIN__)) && !defined (__APPLE__) 419 #define DEFAULTDIR ".srb2" 420 #else 421 #define DEFAULTDIR "srb2" 422 #endif 423 424 #include "g_state.h" 425 426 // commonly used routines - moved here for include convenience 427 428 /** \brief The I_Error function 429 430 \param error the error message 431 432 \return void 433 434 435 */ 436 void I_Error(const char *error, ...) FUNCIERROR; 437 438 /** \brief write a message to stderr (use before I_Quit) for when you need to quit with a msg, but need 439 the return code 0 of I_Quit(); 440 441 \param error message string 442 443 \return void 444 */ 445 void I_OutputMsg(const char *error, ...) FUNCPRINTF; 446 447 // console.h 448 typedef enum 449 { 450 CONS_NOTICE, 451 CONS_WARNING, 452 CONS_ERROR 453 } alerttype_t; 454 455 void CONS_Printf(const char *fmt, ...) FUNCPRINTF; 456 void CONS_Alert(alerttype_t level, const char *fmt, ...) FUNCDEBUG; 457 void CONS_Debug(INT32 debugflags, const char *fmt, ...) FUNCDEBUG; 458 459 // For help debugging functions. 460 #define POTENTIALLYUNUSED CONS_Alert(CONS_WARNING, "(%s:%d) Unused code appears to be used.\n", __FILE__, __LINE__) 461 462 #include "m_swap.h" 463 464 // Things that used to be in dstrings.h 465 #define SAVEGAMENAME "srb2sav" 466 extern char savegamename[256]; 467 extern char liveeventbackup[256]; 468 469 // m_misc.h 470 #ifdef GETTEXT 471 #define M_GetText(String) gettext(String) 472 #else 473 // If no translations are to be used, make a stub 474 // M_GetText function that just returns the string. 475 #define M_GetText(x) (x) 476 #endif 477 void M_StartupLocale(void); 478 extern void *(*M_Memcpy)(void* dest, const void* src, size_t n) FUNCNONNULL; 479 char *va(const char *format, ...) FUNCPRINTF; 480 char *M_GetToken(const char *inputString); 481 void M_UnGetToken(void); 482 UINT32 M_GetTokenPos(void); 483 void M_SetTokenPos(UINT32 newPos); 484 char *sizeu1(size_t num); 485 char *sizeu2(size_t num); 486 char *sizeu3(size_t num); 487 char *sizeu4(size_t num); 488 char *sizeu5(size_t num); 489 490 // d_main.c 491 extern int VERSION; 492 extern int SUBVERSION; 493 extern boolean devparm; // development mode (-debug) 494 // d_netcmd.c 495 extern INT32 cv_debug; 496 497 #define DBG_BASIC 0x0001 498 #define DBG_DETAILED 0x0002 499 #define DBG_PLAYER 0x0004 500 #define DBG_RENDER 0x0008 501 #define DBG_NIGHTSBASIC 0x0010 502 #define DBG_NIGHTS 0x0020 503 #define DBG_POLYOBJ 0x0040 504 #define DBG_GAMELOGIC 0x0080 505 #define DBG_NETPLAY 0x0100 506 #define DBG_MEMORY 0x0200 507 #define DBG_SETUP 0x0400 508 #define DBG_LUA 0x0800 509 #define DBG_RANDOMIZER 0x1000 510 #define DBG_VIEWMORPH 0x2000 511 512 // ======================= 513 // Misc stuff for later... 514 // ======================= 515 516 #define ANG2RAD(angle) ((float)((angle)*M_PI)/ANGLE_180) 517 518 // Modifier key variables, accessible anywhere 519 extern UINT8 shiftdown, ctrldown, altdown; 520 extern boolean capslock; 521 522 // if we ever make our alloc stuff... 523 #define ZZ_Alloc(x) Z_Malloc(x, PU_STATIC, NULL) 524 #define ZZ_Calloc(x) Z_Calloc(x, PU_STATIC, NULL) 525 526 // i_system.c, replace getchar() once the keyboard has been appropriated 527 INT32 I_GetKey(void); 528 529 #ifndef min // Double-Check with WATTCP-32's cdefs.h 530 #define min(x, y) (((x) < (y)) ? (x) : (y)) 531 #endif 532 #ifndef max // Double-Check with WATTCP-32's cdefs.h 533 #define max(x, y) (((x) > (y)) ? (x) : (y)) 534 #endif 535 536 // Max gamepad/joysticks that can be detected/used. 537 #define MAX_JOYSTICKS 4 538 539 #ifndef M_PIl 540 #define M_PIl 3.1415926535897932384626433832795029L 541 #endif 542 543 // Floating point comparison epsilons from float.h 544 #ifndef FLT_EPSILON 545 #define FLT_EPSILON 1.1920928955078125e-7f 546 #endif 547 548 #ifndef DBL_EPSILON 549 #define DBL_EPSILON 2.2204460492503131e-16l 550 #endif 551 552 // An assert-type mechanism. 553 #ifdef PARANOIA 554 #define I_Assert(e) ((e) ? (void)0 : I_Error("assert failed: %s, file %s, line %d", #e, __FILE__, __LINE__)) 555 #else 556 #define I_Assert(e) ((void)0) 557 #endif 558 559 // The character that separates pathnames. Forward slash on 560 // most systems, but reverse solidus (\) on Windows. 561 #if defined (_WIN32) 562 #define PATHSEP "\\" 563 #else 564 #define PATHSEP "/" 565 #endif 566 567 #define PUNCTUATION "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" 568 569 // Compile date and time and revision. 570 extern const char *compdate, *comptime, *comprevision, *compbranch; 571 572 // Disabled code and code under testing 573 // None of these that are disabled in the normal build are guaranteed to work perfectly 574 // Compile them at your own risk! 575 576 /// Allows the use of devmode in multiplayer. AKA "fishcake" 577 //#define NETGAME_DEVMODE 578 579 /// Allows gravity changes in netgames, no questions asked. 580 //#define NETGAME_GRAVITY 581 582 /// Dumps the contents of a network save game upon consistency failure for debugging. 583 //#define DUMPCONSISTENCY 584 585 /// Who put weights on my recycler? ... Inuyasha did. 586 /// \note XMOD port. 587 //#define WEIGHTEDRECYCLER 588 589 /// Allow loading of savegames between different versions of the game. 590 /// \note XMOD port. 591 /// Most modifications should probably enable this. 592 //#define SAVEGAME_OTHERVERSIONS 593 594 /// Shuffle's incomplete OpenGL sorting code. 595 #define SHUFFLE // This has nothing to do with sorting, why was it disabled? 596 597 /// Allow the use of the SOC RESETINFO command. 598 /// \note Builds that are tight on memory should disable this. 599 /// This stops the game from storing backups of the states, sprites, and mobjinfo tables. 600 /// Though this info is compressed under normal circumstances, it's still a lot of extra 601 /// memory that never gets touched. 602 #define ALLOW_RESETDATA 603 604 /// Experimental tweaks to analog mode. (Needs a lot of work before it's ready for primetime.) 605 //#define REDSANALOG 606 607 /// Backwards compatibility with musicslots. 608 /// \note You should leave this enabled unless you're working with a future SRB2 version. 609 #define MUSICSLOT_COMPATIBILITY 610 611 /// Experimental attempts at preventing MF_PAPERCOLLISION objects from getting stuck in walls. 612 //#define PAPER_COLLISIONCORRECTION 613 614 /// FINALLY some real clipping that doesn't make walls dissappear AND speeds the game up 615 /// (that was the original comment from SRB2CB, sadly it is a lie and actually slows game down) 616 /// on the bright side it fixes some weird issues with translucent walls 617 /// \note SRB2CB port. 618 /// SRB2CB itself ported this from PrBoom+ 619 #define NEWCLIP 620 621 /// OpenGL shaders 622 #define GL_SHADERS 623 624 /// Handle touching sector specials in P_PlayerAfterThink instead of P_PlayerThink. 625 /// \note Required for proper collision with moving sloped surfaces that have sector specials on them. 626 #define SECTORSPECIALSAFTERTHINK 627 628 /// Sprite rotation 629 #define ROTSPRITE 630 #define ROTANGLES 72 // Needs to be a divisor of 360 (45, 60, 90, 120...) 631 #define ROTANGDIFF (360 / ROTANGLES) 632 633 /// PNG support 634 #ifndef HAVE_PNG 635 #define NO_PNG_LUMPS 636 #endif 637 638 /// Render flats on walls 639 #define WALLFLATS 640 641 /// Maintain compatibility with older 2.2 demos 642 #define OLD22DEMOCOMPAT 643 644 #if defined (HAVE_CURL) && ! defined (NONET) 645 #define MASTERSERVER 646 #else 647 #undef UPDATE_ALERT 648 #endif 649 650 #endif // __DOOMDEF__ 651