srb2lua { name = "SRB2 Lua Script"; comment_begin = "--[[", "/*"; comment_end = "]]", "*/"; comment_line = "--", "//"; case_sensitive = true; block_begin = "{"; block_end = "}"; word_block_begin = "do", "function", "if"; word_block_end = "end"; keywords = { and, break, continue, do, else, elseif, end, false, for, function, if, in, local, nil, not, or, repeat, return, then, true, until, while, $1, $2, $3, $4, $5, $6, $7, $8, $9, } properties = { // Namespaces input, ease, hud, coroutine, string, io, table, os, // Userdata players, mobjs, skins, mapthings, sectors, subsectors, lines, sides, vertexes, polyobjects, } constants = { false, true, nil, // Integer type limits INT8_MIN, INT8_MAX, INT16_MIN, INT16_MAX, INT32_MIN, INT32_MAX, UINT8_MAX, UINT16_MAX, UINT32_MAX, // Angles ANG1, ANG2, ANG10, ANG15, ANG20, ANG30, ANG60, ANG64h, ANG105, ANG210, ANG255, ANG340, ANG350, ANGLE_11hh, ANGLE_22h, ANGLE_45, ANGLE_67h, ANGLE_90, ANGLE_112h, ANGLE_135, ANGLE_157h, ANGLE_180, ANGLE_202h, ANGLE_225, ANGLE_247h, ANGLE_270, ANGLE_292h, ANGLE_315, ANGLE_337h, ANGLE_MAX, // Miscellaneous FRACUNIT, FRACBITS, TICRATE, MUSICRATE, RING_DIST, PUSHACCEL, MODID, MODVERSION, CODEBASE, VERSION, VERSIONSTRING, SUBVERSION, FLOATSPEED, MAXSTEPMOVE, USERANGE, MELEERANGE, MISSILERANGE, ONFLOORZ, ONCEILINGZ, INFLIVES, JOYAXISRANGE, // Object flags (MF_*) MF_SPECIAL, MF_SOLID, MF_SHOOTABLE, MF_NOSECTOR, MF_NOBLOCKMAP, MF_PAPERCOLLISION, MF_PUSHABLE, MF_BOSS, MF_SPAWNCEILING, MF_NOGRAVITY, MF_AMBIENT, MF_SLIDEME, MF_NOCLIP, MF_FLOAT, MF_BOXICON, MF_MISSILE, MF_SPRING, MF_BOUNCE, MF_MONITOR, MF_NOTHINK, MF_FIRE, MF_NOCLIPHEIGHT, MF_ENEMY, MF_SCENERY, MF_PAIN, MF_STICKY, MF_NIGHTSITEM, MF_NOCLIPTHING, MF_GRENADEBOUNCE, MF_RUNSPAWNFUNC, // Secondary object flags (MF2_*) MF2_AXIS, MF2_TWOD, MF2_DONTRESPAWN, MF2_DONTDRAW, MF2_AUTOMATIC, MF2_RAILRING, MF2_BOUNCERING, MF2_EXPLOSION, MF2_SCATTER, MF2_BEYONDTHEGRAVE, MF2_SLIDEPUSH, MF2_CLASSICPUSH, MF2_INVERTAIMABLE, MF2_INFLOAT, MF2_DEBRIS, MF2_NIGHTSPULL, MF2_JUSTATTACKED, MF2_FIRING, MF2_SUPERFIRE, MF2_SHADOW, MF2_STRONGBOX, MF2_OBJECTFLIP, MF2_SKULLFLY, MF2_FRET, MF2_BOSSNOTRAP, MF2_BOSSFLEE, MF2_BOSSDEAD, MF2_AMBUSH, MF2_LINKDRAW, MF2_SHIELD, MF2_SPLAT, // Extra object flags (MFE_*) MFE_ONGROUND, MFE_JUSTHITFLOOR, MFE_TOUCHWATER, MFE_UNDERWATER, MFE_JUSTSTEPPEDDOWN, MFE_VERTICALFLIP, MFE_GOOWATER, MFE_TOUCHLAVA, MFE_PUSHED, MFE_SPRUNG, MFE_APPLYPMOMZ, MFE_TRACERANGLE, // Mapthing flags (MTF_*) MTF_EXTRA, MTF_OBJECTFLIP, MTF_OBJECTSPECIAL, MTF_AMBUSH, // Translucency levels (tr_*, TR_*) tr_trans10, tr_trans20, tr_trans30, tr_trans40, tr_trans50, tr_trans60, tr_trans70, tr_trans80, tr_trans90, TR_TRANS10, TR_TRANS20, TR_TRANS30, TR_TRANS40, TR_TRANS50, TR_TRANS60, TR_TRANS70, TR_TRANS80, TR_TRANS90, NUMTRANSMAPS, // Frame flags (FF_*) FF_FRAMEMASK, FF_BLENDMASK, FF_TRANSMASK, FF_BRIGHTMASK, FF_BLENDSHIFT, FF_TRANSSHIFT, FF_SPR2SUPER, FF_SPR2ENDSTATE, FF_SPR2MIDSTART, FF_ADD, FF_SUBTRACT, FF_REVERSESUBTRACT, FF_MODULATE, FF_TRANS10, FF_TRANS20, FF_TRANS30, FF_TRANS40, FF_TRANS50, FF_TRANS60, FF_TRANS70, FF_TRANS80, FF_TRANS90, FF_FULLBRIGHT, FF_FULLDARK, FF_SEMIBRIGHT, FF_PAPERSPRITE, FF_FLOORSPRITE, FF_VERTICALFLIP, FF_HORIZONTALFLIP, FF_ANIMATE, FF_GLOBALANIM, FF_RANDOMANIM, // Render flags (RF_*) RF_SPLATMASK, RF_BRIGHTMASK, RF_SPRITETYPEMASK, RF_HORIZONTALFLIP, RF_VERTICALFLIP, RF_ABSOLUTEOFFSETS, RF_FLIPOFFSETS, RF_SLOPESPLAT, RF_OBJECTSLOPESPLAT, RF_NOSPLATBILLBOARD, RF_NOSPLATROLLANGLE, RF_FULLBRIGHT, RF_FULLDARK, RF_SEMIBRIGHT, RF_NOCOLORMAPS, RF_PAPERSPRITE, RF_FLOORSPRITE, RF_SHADOWDRAW, RF_SHADOWEFFECTS, RF_DROPSHADOW, // Blending modes (AST_*) AST_COPY, AST_TRANSLUCENT, AST_ADD, AST_SUBTRACT, AST_REVERSESUBTRACT, AST_MODULATE, AST_OVERLAY, // Sound flags (SF_*) SF_TOTALLYSINGLE, SF_NOMULTIPLESOUND, SF_OUTSIDESOUND, SF_X2AWAYSOUND, SF_X4AWAYSOUND, SF_X8AWAYSOUND, SF_NOINTERRUPT, // Colormap constants (TC_*) TC_DEFAULT, TC_BOSS, TC_METALSONIC, TC_ALLWHITE, TC_RAINBOW, TC_BLINK, TC_DASHMODE, // Direction constants (DI_*) DI_NODIR, DI_EAST, DI_NORTHEAST, DI_NORTH, DI_NORTHWEST, DI_WEST, DI_SOUTHWEST, DI_SOUTH, DI_SOUTHEAST, NUMDIRS, // Damage/Death types (DMG_*) DMG_WATER, DMG_FIRE, DMG_ELECTRIC, DMG_SPIKE, DMG_NUKE, DMG_CANHURTSELF, DMG_INSTAKILL, DMG_DROWNED, DMG_SPACEDROWN, DMG_DEATHPIT, DMG_CRUSHED, DMG_SPECTATOR, DMG_DEATHMASK, // Skin flags (SF_*) SF_SUPER, SF_NOSUPERSPIN, SF_NOSPINDASHDUST, SF_HIRES, SF_NOSKID, SF_NOSPEEDADJUST, SF_RUNONWATER, SF_NOJUMPSPIN, SF_NOJUMPDAMAGE, SF_STOMPDAMAGE, SF_MARIODAMAGE, SF_MACHINE, SF_DASHMODE, SF_FASTEDGE, SF_MULTIABILITY, SF_NONIGHTSROTATION, SF_NONIGHTSSUPER, SF_NOSUPERSPRITES, SF_NOSUPERJUMPBOOST, SF_CANBUSTWALLS, SF_NOSHIELDABILITY, // Character abilities (CA_*, CA2_*) CA_NONE, CA_THOK, CA_FLY, CA_GLIDEANDCLIMB, CA_HOMINGTHOK, CA_SWIM, CA_DOUBLEJUMP, CA_FLOAT, CA_SLOWFALL, CA_TELEKINESIS, CA_FALLSWITCH, CA_JUMPBOOST, CA_AIRDRILL, CA_JUMPTHOK, CA_BOUNCE, CA_TWINSPIN, CA2_NONE, CA2_SPINDASH, CA2_GUNSLINGER, CA2_MELEE, // Player states (PST_*) PST_LIVE, PST_DEAD, PST_REBORN, // Skin sounds (SKS*) SKSPLPAN1, SKSPLPAN2, SKSPLPAN3, SKSPLPAN4, SKSPLDET1, SKSPLDET2, SKSPLDET3, SKSPLDET4, SKSPLVCT1, SKSPLVCT2, SKSPLVCT3, SKSPLVCT4, SKSSPIN, SKSPUTPUT, SKSPUDPUD, SKSTHOK, SKSSPNDSH, SKSZOOM, SKSSKID, SKSGASP, SKSJUMP, // Player flags (PF_*) PF_FLIPCAM, PF_ANALOGMODE, PF_DIRECTIONCHAR, PF_AUTOBRAKE, PF_GODMODE, PF_NOCLIP, PF_INVIS, PF_ATTACKDOWN, PF_SPINDOWN, PF_JUMPDOWN, PF_WPNDOWN, PF_STASIS, PF_JUMPSTASIS, PF_FULLSTASIS, PF_APPLYAUTOBRAKE, PF_STARTJUMP, PF_JUMPED, PF_NOJUMPDAMAGE, PF_SPINNING, PF_STARTDASH, PF_THOKKED, PF_SHIELDABILITY, PF_GLIDING, PF_BOUNCING, PF_SLIDING, PF_TRANSFERTOCLOSEST, PF_DRILLING, PF_GAMETYPEOVER, PF_TAGIT, PF_FORCESTRAFE, PF_CANCARRY, PF_FINISHED, // Player animation (PA_*) PA_ETC, PA_IDLE, PA_EDGE, PA_WALK, PA_RUN, PA_DASH, PA_PAIN, PA_ROLL, PA_JUMP, PA_SPRING, PA_FALL, PA_ABILITY, PA_ABILITY2, PA_RIDE, // Shield types/flags (SH_*) SH_NONE, SH_PITY, SH_WHIRLWIND, SH_ARMAGEDDON, SH_PINK, SH_ELEMENTAL, SH_ATTRACT, SH_FLAMEAURA, SH_BUBBLEWRAP, SH_THUNDERCOIN, SH_FORCE, SH_FORCEHP, SH_FIREFLOWER, SH_STACK, SH_NOSTACK, SH_PROTECTFIRE, SH_PROTECTWATER, SH_PROTECTELECTRIC, SH_PROTECTSPIKE, // Player powers (pw_*) pw_invulnerability, pw_sneakers, pw_flashing, pw_shield, pw_carry, pw_tailsfly, pw_underwater, pw_spacetime, pw_extralife, pw_pushing, pw_justsprung, pw_noautobrake, pw_super, pw_gravityboots, pw_infinityring, pw_automaticring, pw_bouncering, pw_scatterring, pw_granadering, pw_explosionring, pw_railring, pw_emeralds, pw_nights_superloop, pw_nights_helper, pw_nights_linkfreeze, pw_nocontrol, pw_dye, pw_justlaunched, pw_ignorelatch, pw_strong, // Carry types (CR_*) CR_NONE, CR_GENERIC, CR_PLAYER, CR_NIGHTSMODE, CR_NIGHTSFALL, CR_BRAKGOOP, CR_ZOOMTUBE, CR_ROPEHANG, CR_MACESPIN, CR_MINECART, CR_ROLLOUT, CR_PTERABYTE, CR_DUSTDEVIL, // pw_strong types (STR_*) STR_NONE, STR_ANIM, STR_PUNCH, STR_TAIL, STR_STOMP, STR_UPPER, STR_GUARD, STR_HEAVY, STR_DASH, STR_WALL, STR_FLOOR, STR_CEILING, STR_SPRING, STR_SPIKE, STR_ATTACK, STR_BUST, STR_FLY, STR_GLIDE, STR_TWINSPIN, STR_MELEE, STR_BOUNCE, STR_METAL, // Emeralds EMERALD1, EMERALD2, EMERALD3, EMERALD4, EMERALD5, EMERALD6, EMERALD7, // Button flags (BT_*) BT_WEAPONMASK, BT_WEAPONNEXT, BT_WEAPONPREV, BT_ATTACK, BT_SPIN, BT_CAMLEFT, BT_CAMRIGHT, BT_TOSSFLAG, BT_JUMP, BT_FIRENORMAL, BT_CUSTOM1, BT_CUSTOM2, BT_CUSTOM3, // Mouse button flags (MB_*) MB_BUTTON1, MB_BUTTON2, MB_BUTTON3, MB_BUTTON4, MB_BUTTON5, MB_BUTTON6, MB_BUTTON7, MB_BUTTON8, MB_SCROLLUP, MB_SCROLLDOWN, // Current weapon (WEP_*) WEP_AUTO, WEP_BOUNCE, WEP_SCATTER, WEP_GRENADE, WEP_EXPLODE, WEP_RAIL, NUMWEAPONS, // Ring weapon flags (RW_*) RW_AUTO, RW_BOUNCE, RW_SCATTER, RW_GRENADE, RW_EXPLODE, RW_RAILS, // P_FlashPal palettes (PAL_*) PAL_WHITE, PAL_MIXUP, PAL_RECYCLE, PAL_NUKE, PAL_INVERT, // Gotflag flags (GF_*) GF_REDFLAG, GF_BLUEFLAG, // TypeOfLevel flags (TOL_*) TOL_SP, TOL_COOP, TOL_COMPETITION, TOL_RACE, TOL_MATCH, TOL_TAG, TOL_CTF, TOL_CUSTOM, TOL_2D, TOL_MARIO, TOL_NIGHTS, TOL_ERZ3, TOL_XMAS, // Gametypes (GT_*) GT_COOP, GT_COMPETITION, GT_RACE, GT_MATCH, GT_TEAMMATCH, GT_TAG, GT_HIDEANDSEEK, GT_CTF, // Intermission types (int_*) int_none, int_coop, int_match, int_teammatch, int_ctf, int_race, int_competition, int_spec, // Marathon mode flags (MA_*) MA_RUNNING, MA_INIT, MA_NOCUTSCENES, MA_INGAME, // Weather flags (PRECIP_*) PRECIP_NONE, PRECIP_STORM, PRECIP_SNOW, PRECIP_RAIN, PRECIP_BLANK, PRECIP_STORM_NORAIN, PRECIP_STORM_NOSTRIKES, // Level flags (LF_*) LF_SCRIPTISFILE, LF_SPEEDMUSIC, LF_NOSSMUSIC, LF_NORELOAD, LF_NOZONE, LF_SAVEGAME, LF_MIXNIGHTSCOUNTDOWN, LF_WARNINGTITLE, LF_NOTITLECARDFIRST, LF_NOTITLECARDRESPAWN, LF_NOTITLECARDRECORDATTACK, LF_NOTITLECARD, // Menu flags (LF2_*) LF2_HIDEINMENU, LF2_HIDEINSTATS, LF2_RECORDATTACK, LF2_NIGHTSATTACK, LF2_NOVISITNEEDED, LF2_WIDEICON, // NiGHTS grades (GRADE_*) GRADE_F, GRADE_E, GRADE_D, GRADE_C, GRADE_B, GRADE_A, GRADE_S, // Linedef flags (ML_*) ML_IMPASSIBLE, ML_BLOCKMONSTERS, ML_TWOSIDED, ML_DONTPEGTOP, ML_DONTPEGBOTTOM, ML_EFFECT1, ML_NOCLIMB, ML_EFFECT2, ML_EFFECT3, ML_EFFECT4, ML_EFFECT5, ML_NETONLY, ML_NONET, ML_EFFECT6, ML_BOUNCY, ML_TFERLINE, // Reserved linedef tags (LE_*) LE_AXE, LE_KOOPA, LE_CAPSULE0, LE_CAPSULE1, LE_CAPSULE2, LE_BRAKPLATFORM, LE_TURRET, LE_BRAKVILEATTACK, LE_BOSS4DROP, LE_BOSSDEAD, LE_ALLBOSSESDEAD, LE_PINCHPHASE, LE_PARAMWIDTH, // FOF flags (FOF_*, FF_* for backwards compat) FOF_EXISTS, FOF_BLOCKPLAYER, FOF_BLOCKOTHERS, FOF_SOLID, FOF_RENDERSIDES, FOF_RENDERPLANES, FOF_RENDERALL, FOF_SWIMMABLE, FOF_NOSHADE, FOF_CUTSOLIDS, FOF_CUTEXTRA, FOF_CUTLEVEL, FOF_CUTSPRITES, FOF_BOTHPLANES, FOF_EXTRA, FOF_TRANSLUCENT, FOF_FOG, FOF_INVERTPLANES, FOF_ALLSIDES, FOF_INVERTSIDES, FOF_DOUBLESHADOW, FOF_FLOATBOB, FOF_NORETURN, FOF_CRUMBLE, FOF_GOOWATER, FOF_MARIO, FOF_BUSTUP, FOF_QUICKSAND, FOF_PLATFORM, FOF_REVERSEPLATFORM, FOF_RIPPLE, FOF_COLORMAPONLY, FOF_BOUNCY, FOF_SPLAT, FF_SHATTERBOTTOM, FF_INTANGIBLEFLATS, FF_SHATTER, FF_SPINBUST, FF_STRONGBUST, // Slope flags (SL_*) SL_NOPHYSICS, SL_DYNAMIC, // PolyObject flags (POF_*) POF_CLIPLINES, POF_CLIPPLANES, POF_SOLID, POF_TESTHEIGHT, POF_RENDERSIDES, POF_RENDERTOP, POF_RENDERBOTTOM, POF_RENDERPLANES, POF_RENDERALL, POF_INVERT, POF_INVERTPLANES, POF_INVERTPLANESONLY, POF_PUSHABLESTOP, POF_LDEXEC, POF_ONESIDE, POF_NOSPECIALS, POF_SPLAT, // Sector special flags (SSF_*) SSF_OUTERSPACE, SSF_DOUBLESTEPUP, SSF_NOSTEPDOWN, SSF_WINDCURRENT, SSF_CONVEYOR, SSF_SPEEDPAD, SSF_STARPOSTACTIVATOR, SSF_EXIT, SSF_SPECIALSTAGEPIT, SSF_RETURNFLAG, SSF_REDTEAMBASE, SSF_BLUETEAMBASE, SSF_FAN, SSF_SUPERTRANSFORM, SSF_FORCESPIN, SSF_ZOOMTUBESTART, SSF_ZOOMTUBEEND, SSF_FINISHLINE, SSF_ROPEHANG, SSF_JUMPFLIP, SSF_GRAVITYOVERRIDE, // Emblem flags (GE_*/ME_*) GE_NIGHTSPULL, GE_NIGHTSITEM, ME_ALLEMERALDS, ME_ULTIMATE, ME_PERFECT, // Jingle types (JT_*) JT_NONE, JT_OTHER, JT_MASTER, JT_1UP, JT_SHOES, JT_INV, JT_MINV, JT_DROWN, JT_SUPER, JT_GOVER, JT_NIGHTSTIMEOUT, JT_SSTIMEOUT, // Console variable flags (CV_*) CV_SAVE, CV_CALL, CV_NETVAR, CV_NOINIT, CV_FLOAT, CV_NOTINNET, CV_MODIFIED, CV_SHOWMODIF, CV_SHOWMODIFONETIME, CV_NOSHOWHELP, CV_HIDDEN, CV_CHEAT, CV_ALLOWLUA, // Command flags (COM_*) COM_ADMIN, COM_SPLITSCREEN, COM_LOCAL, // Video flags (V_*) V_PARAMMASK, V_SCALEPATCHMASK, V_SPACINGMASK, V_CHARCOLORMASK, V_ALPHAMASK, V_BLENDMASK, V_NOSCALEPATCH, V_SMALLSCALEPATCH, V_MEDSCALEPATCH, V_6WIDTHSPACE, V_OLDSPACING, V_MONOSPACE, V_MAGENTAMAP, V_YELLOWMAP, V_GREENMAP, V_BLUEMAP, V_REDMAP, V_GRAYMAP, V_ORANGEMAP, V_SKYMAP, V_PURPLEMAP, V_AQUAMAP, V_PERIDOTMAP, V_AZUREMAP, V_BROWNMAP, V_ROSYMAP, V_INVERTMAP, V_10TRANS, V_20TRANS, V_30TRANS, V_40TRANS, V_TRANSLUCENT, V_60TRANS, V_70TRANS, V_80TRANS, V_90TRANS, V_HUDTRANS, V_HUDTRANSHALF, V_HUDTRANSDOUBLE, V_ADD, V_SUBTRACT, V_REVERSESUBTRACT, V_MODULATE, V_ALLOWLOWERCASE, V_FLIP, V_CENTERNAMETAG, V_SNAPTOTOP, V_SNAPTOBOTTOM, V_SNAPTOLEFT, V_SNAPTORIGHT, V_AUTOFADEOUT, V_RETURN8, V_NOSCALESTART, V_PERPLAYER, V_CHARCOLORSHIFT, V_ALPHASHIFT, V_BLENDSHIFT, // HUD items (HUD_*) HUD_LIVES, HUD_RINGS, HUD_RINGSNUM, HUD_RINGSNUMTICS, HUD_SCORE, HUD_SCORENUM, HUD_TIME, HUD_MINUTES, HUD_TIMECOLON, HUD_SECONDS, HUD_TIMETICCOLON, HUD_TICS, HUD_HUNTPICS, HUD_POWERUPS, // Kick reasons (KR_*) KR_KICK, KR_PINGLIMIT, KR_SYNCH, KR_TIMEOUT, KR_BAN, KR_LEAVE, // Gamestates (GS_*) GS_NULL, GS_LEVEL, GS_INTERMISSION, GS_CONTINUING, GS_TITLESCREEN, GS_TIMEATTACK, GS_CREDITS, GS_EVALUATION, GS_GAMEEND, GS_INTRO, GS_ENDING, GS_CUTSCENE, GS_DEDICATEDSERVER, GS_WAITINGPLAYERS, // Gametype rules (GTR_*) GTR_CAMPAIGN, GTR_RINGSLINGER, GTR_SPECTATORS, GTR_LIVES, GTR_TEAMS, GTR_FIRSTPERSON, GTR_POWERSTONES, GTR_TEAMFLAGS, GTR_FRIENDLY, GTR_SPECIALSTAGES, GTR_EMERALDTOKENS, GTR_EMERALDHUNT, GTR_RACE, GTR_TAG, GTR_POINTLIMIT, GTR_TIMELIMIT, GTR_OVERTIME, GTR_HURTMESSAGES, GTR_FRIENDLYFIRE, GTR_STARTCOUNTDOWN, GTR_HIDEFROZEN, GTR_BLINDFOLDED, GTR_RESPAWNDELAY, GTR_PITYSHIELD, GTR_DEATHPENALTY, GTR_NOSPECTATORSPAWN, GTR_DEATHMATCHSTARTS, GTR_SPAWNINVUL, GTR_SPAWNENEMIES, GTR_ALLOWEXIT, GTR_NOTITLECARD, GTR_CUTSCENES, // Game controls (GC_*) GC_NULL, GC_FORWARD, GC_BACKWARD, GC_STRAFELEFT, GC_STRAFERIGHT, GC_TURNLEFT, GC_TURNRIGHT, GC_WEAPONNEXT, GC_WEAPONPREV, GC_WEPSLOT1, GC_WEPSLOT2, GC_WEPSLOT3, GC_WEPSLOT4, GC_WEPSLOT5, GC_WEPSLOT6, GC_WEPSLOT7, GC_WEPSLOT8, GC_WEPSLOT9, GC_WEPSLOT10, GC_FIRE, GC_FIRENORMAL, GC_TOSSFLAG, GC_SPIN, GC_CAMTOGGLE, GC_CAMRESET, GC_LOOKUP, GC_LOOKDOWN, GC_CENTERVIEW, GC_MOUSEAIMING, GC_TALKKEY, GC_TEAMKEY, GC_SCORES, GC_JUMP, GC_CONSOLE, GC_PAUSE, GC_SYSTEMMENU, GC_SCREENSHOT, GC_RECORDGIF, GC_VIEWPOINTNEXT, GC_VIEWPOINT, GC_VIEWPOINTPREV, GC_CUSTOM1, GC_CUSTOM2, GC_CUSTOM3, NUM_GAMECONTROLS, // Game joyaxes (JA_*) JA_NONE, JA_TURN, JA_MOVE, JA_LOOK, JA_STRAFE, JA_DIGITAL, JA_JUMP, JA_SPIN, JA_FIRE, JA_FIRENORMAL, // Bot types (BOT_*) BOT_NONE, BOT_2PAI, BOT_2PHUMAN, BOT_MPAI, // Dashmode constants (DASHMODE_*) DASHMODE_THRESHOLD, DASHMODE_MAX, // Skincolors (other) MAXSKINCOLORS, FIRSTSUPERCOLOR, NUMSUPERCOLORS, // Possible value arrays (CV_*) CV_YesNo, CV_OnOff, CV_TrueFalse, CV_Unsigned, CV_Natural, // Userdata sprnames, spr2names, states, mobjinfo, skincolors, S_Sfx, sfxinfo, powers, mapheaderinfo, sidenum, hudinfo, spriteinfo, spr2defaults, gamekeydown, // Aliases FU, V_50TRANS, CV_HIDEN, } functions { // Basic Math abs = "int a"; min = "int a, int b"; max = "int a, int b"; // Angle Math sin = "angle a"; cos = "angle a"; tan = "angle a"; asin = "fixed x"; acos = "fixed x"; FixedAngle = "fixed a"; AngleFixed = "angle a"; InvAngle = "angle a"; // Fixed-point Math FixedMul = "fixed a, fixed b"; FixedInt = "fixed a"; FixedDiv = "fixed a, fixed b"; FixedRem = "fixed a, fixed b"; FixedSqrt = "fixed a"; FixedHypot = "fixed a, fixed b"; FixedFloor = "fixed a"; FixedTrunc = "fixed a"; FixedRound = "fixed a"; FixedCeil = "fixed a"; // Miscellanous GetSecSpecial = "int special, int section"; All7Emeralds = "int flags"; ColorOpposite = "int color"; // Easing library ease.linear = "fixed t, [fixed start], [fixed end]"; ease.insine = "fixed t, [fixed start], [fixed end]"; ease.outsine = "fixed t, [fixed start], [fixed end]"; ease.inoutsine = "fixed t, [fixed start], [fixed end]"; ease.inquad = "fixed t, [fixed start], [fixed end]"; ease.outquad = "fixed t, [fixed start], [fixed end]"; ease.inoutquad = "fixed t, [fixed start], [fixed end]"; ease.incubic = "fixed t, [fixed start], [fixed end]"; ease.outcubic = "fixed t, [fixed start], [fixed end]"; ease.inoutcubic = "fixed t, [fixed start], [fixed end]"; ease.inquart = "fixed t, [fixed start], [fixed end]"; ease.outquart = "fixed t, [fixed start], [fixed end]"; ease.inoutquart = "fixed t, [fixed start], [fixed end]"; ease.inquint = "fixed t, [fixed start], [fixed end]"; ease.outquint = "fixed t, [fixed start], [fixed end]"; ease.inoutquint = "fixed t, [fixed start], [fixed end]"; ease.inexpo = "fixed t, [fixed start], [fixed end]"; ease.outexpo = "fixed t, [fixed start], [fixed end]"; ease.inoutexpo = "fixed t, [fixed start], [fixed end]"; ease.inback = "fixed t, [fixed start], [fixed end]", "fixed t, fixed end"; ease.outback = "fixed t, [fixed start], [fixed end]", "fixed t, fixed end"; ease.inoutback = "fixed t, [fixed start], [fixed end]", "fixed t, fixed end"; // HUD library hud.enable = "string huditem"; hud.disable = "string huditem"; hud.enabled = "string huditem"; hud.add = "function(*) func, string type"; // Drawing functions (weird) v.patchExists = "string name"; v.cachePatch = "string name"; v.getSpritePatch = "string/int sprite, [int frame], [int rotation], [angle rollangle]"; v.getSprite2Patch = "string/int skin, string/int sprite2, [boolean super], [int frame], [int rotation], [angle rollangle]"; v.draw = "int x, int y, patch_t patch, [int flags], [colormap c]"; v.drawScaled = "fixed x, fixed y, fixed scale, patch_t patch, [int flags], [colormap c]"; v.drawStretched = "fixed x, fixed y, fixed hscale, fixed vscale, patch_t patch, [int flags], [colormap c]"; v.drawCropped = "fixed x, fixed y, fixed hscale, fixed vscale, patch_t patch, [int flags], [colormap c], fixed sx, fixed sy, fixed w, fixed h"; v.drawNum = "int x, int y, int num, [int flags]"; v.drawPaddedNum = "int x, int y, int num, [int digits], [int flags]"; v.drawFill = "[int x], [int y], [int width], [int height], [int color]"; v.drawString = "int/fixed x, int/fixed y, string text, [int flags], [string alignment]"; v.drawNameTag = "int x, int y, string text, [int flags], [int basecolor], [int outlinecolor]"; v.drawScaledNameTag = "fixed x, fixed y, string text, [int flags], [fixed scale], [int basecolor], [int outlinecolor]"; v.drawLevelTitle = "int x, int y, string text, [int flags]"; v.stringWidth = "string text, [int flags], [string widthtype]"; v.nameTagWidth = "string text"; v.levelTitleWidth = "string text"; v.levelTitleHeight = "string text"; v.getColormap = "string/int skin, [int color]"; v.getStringColormap = "int textcolor"; v.fadeScreen = "int color, int strength"; v.width; v.height; v.dupx; v.dupy; v.renderer; v.userTransFlag; v.localTransFlag; v.RandomFixed; v.RandomByte; v.RandomKey = "int a"; v.RandomRange = "int a, int b"; v.SignedRandom; v.RandomChance = "fixed p"; // Console library CONS_Printf = "player_t player, string text"; COM_AddCommand = "string name, function fn, [int flags]"; COM_BufAddText = "player_t player, string text"; COM_BufInsertText = "player_t player, string text"; CV_RegisterVar = "table{} t"; CV_FindVar = "string var"; CV_Set = "consvar_t cvar, string/int value"; CV_StealthSet = "consvar_t cvar, string/int value"; CV_AddValue = "consvar_t cvar, int increment"; // Blockmap Search searchBlockmap = "string searchtype, function fn, mobj_t refmobj, [fixed x1], [fixed x2], [fixed y1], [fixed y2]"; // Input library input.gameControlDown = "int gc"; input.gameControl2Down = "int gc"; input.gameControlToKeyNum = "int gc"; input.gameControl2ToKeyNum = "int gc"; input.joyAxis = "int axissel"; input.joy2Axis = "int axissel"; input.keyNumToName = "int keynum"; input.keyNameToNum = "string keyname"; input.keyNumPrintable = "string keyname"; input.shiftKeyNum = "string keynum"; input.getMouseGrab; input.setMouseGrab = "boolean grab"; input.getCursorPosition; // Base functions print = "string output, [...]"; chatprint = "string output, [boolean sound]"; chatprintf = "player_t player, string output, [boolean sound]"; freeslot = "string resource, [...]"; addHook = "string hook, function fn, [int/string extra]"; super = "mobj_t actor, int var1, int var2"; IsPlayerAdmin = "player_t player"; userdataType = "* v"; reserveLuaBanks; registerMetatable = "table{} metatable"; userdataMetatable = "string userdataname"; getTimeMicros; // G_Game G_BuildMapName = "[int map]"; G_BuildMapTitle = "[int map]"; G_FindMap = "string query"; G_FindMapByNameOrCode = "string query"; G_DoReborn = "int playernum"; G_EnoughPlayersFinished; G_SetCustomExitVars = "[int nextmap], [int skipstats]"; G_ExitLevel; G_IsSpecialStage = "[int map]"; G_AddGametype = "table{} t"; G_GametypeUsesLives; G_GametypeUsesCoopLives; G_GametypeUsesCoopStarposts; G_GametypeHasTeams; G_GametypeHasSpectators; G_RingSlingerGametype; G_PlatformGametype; G_CoopGametype; G_TagGametype; G_CompetitionGametype; G_AddPlayer = "int skin, int color, string name, int bottype"; G_RemovePlayer = "int player num"; G_TicsToHours = "int tics"; G_TicsToMinutes = "int tics, [boolean full]"; G_TicsToSeconds = "int tics"; G_TicsToCentiseconds = "int tics"; G_TicsToMilliseconds = "int tics"; // M_Random P_RandomFixed; P_RandomByte; P_RandomKey = "int a"; P_RandomRange = "int a, int b"; P_SignedRandom; P_RandomChance = "fixed p"; // M_Menu M_MoveColorAfter = "UINT16 color, UINT16 target"; M_MoveColorBefore = "UINT16 color, UINT16 target"; M_GetColorAfter = "UINT16 color"; M_GetColorBefore = "UINT16 color"; // M_Map M_MapNumber = "string name"; // P_Enemy P_CheckMeleeRange = "mobj_t actor"; P_JetbCheckMeleeRange = "mobj_t actor"; P_FaceStabCheckMeleeRange = "mobj_t actor"; P_SkimCheckMeleeRange = "mobj_t actor"; P_CheckMissileRange = "mobj_t actor"; P_NewChaseDir = "mobj_t actor"; P_LookForPlayers = "mobj_t actor, [fixed dist], [boolean allaround], [boolean tracer]"; // P_Inter P_RemoveShield = "player_t player"; P_DamageMobj = "mobj_t target, [mobj_t inflictor], [mobj_t source], [int damage], [int damagetype]"; P_KillMobj = "mobj_t target, [mobj_t inflictor], [mobj_t source], [int damagetype]"; P_PlayerRingBurst = "player_t player, [int numrings]"; P_PlayerWeaponPanelBurst = "player_t player"; P_PlayerWeaponAmmoBurst = "player_t player"; P_PlayerWeaponPanelOrAmmoBurst = "player_t player"; P_PlayerEmeraldBurst = "player_t player, [boolean burst]"; P_PlayerFlagBurst = "player_t player, [boolean burst]"; P_PlayRinglossSound = "mobj_t source, [player_t player]"; P_PlayDeathSound = "mobj_t source, [player_t player]"; P_PlayVictorySound = "mobj_t source, [player_t player]"; P_PlayLivesJingle = "player_t player"; P_CanPickupItem = "player_t player, [boolean weapon]"; P_DoNightsScore = "player_t player"; P_DoMatchSuper = "player_t player"; // P_Map P_CheckPosition = "mobj_t mobj, fixed x, fixed y"; P_TryMove = "mobj_t mobj, fixed x, fixed y, [boolean allowdropoff]"; P_Move = "mobj_t actor, int speed"; P_SetOrigin = "mobj_t mobj, fixed x, fixed y, fixed z"; P_MoveOrigin = "mobj_t mobj, fixed x, fixed y, fixed z"; P_SlideMove = "mobj_t mobj"; P_BounceMove = "mobj_t mobj"; P_CheckSight = "mobj_t source, mobj_t target"; P_CheckHoopPosition = "mobj_t hoop, fixed x, fixed y, fixed z, fixed radius"; P_RadiusAttack = "mobj_t inflictor, mobj_t source, fixed radius, [int damagetype], [boolean sightcheck]"; P_FloorzAtPos = "fixed x, fixed y, fixed z, fixed height"; P_CeilingzAtPos = "fixed x, fixed y, fixed z, fixed height"; P_DoSpring = "mobj_t spring, mobj_t object"; P_TryCameraMove = "camera_t cam, fixed x, fixed y"; P_TeleportCameraMove = "camera_t cam, fixed x, fixed y, fixed z"; // P_Maputl P_AproxDistance = "fixed dx, fixed dy"; P_ClosestPointOnLine = "fixed x, fixed y, line_t line"; P_PointOnLineSide = "fixed x, fixed y, line_t line"; // P_Mobj P_SpawnMobj = "fixed x, fixed y, fixed z, int type"; P_SpawnMobjFromMobj = "mobj_t origin, fixed x, fixed y, fixed z, int type"; P_RemoveMobj = "mobj_t mobj"; P_IsValidSprite2 = "mobj_t mobj, int sprite2"; P_SpawnLockOn = "player_t player, mobj_t target, state state"; P_SpawnMissile = "mobj_t source, mobj_t dest, int type"; P_SpawnXYZMissile = "mobj_t source, mobj_t dest, int type, fixed x, fixed y, fixed z"; P_SpawnPointMissile = "mobj_t source, fixed dest_x, fixed dest_y, fixed dest_z, int type, fixed x, fixed y, fixed z"; P_SpawnAlteredDirectionMissile = "mobj_t source, int type, fixed x, fixed y, fixed z, int angle_shift"; P_ColorTeamMissile = "mobj_t missile, player_t player"; P_SPMAngle = "mobj_t source, int type, angle angle, [int allowaim], [int flags2]"; P_SpawnPlayerMissile = "mobj_t source, int type, [int flags2]"; P_MobjFlip = "mobj_t mobj"; P_GetMobjGravity = "mobj_t mobj"; P_WeaponOrPanel = "int type"; P_FlashPal = "player_t player, int type, int duration"; P_GetClosestAxis = "mobj_t source"; P_SpawnParaloop = "fixed x, fixed y, fixed z, fixed radius, int number, int type, angle rotangle, [int state], [boolean spawncenter]"; P_BossTargetPlayer = "mobj_t actor, [boolean closest]"; P_SupermanLook4Players = "mobj_t actor"; P_SetScale = "mobj_t mobj, fixed scale"; P_InsideANonSolidFFloor = "mobj_t mobj, ffloor_t rover"; P_CheckDeathPitCollide = "mobj_t mobj"; P_CheckSolidLava = "ffloor_t rover"; P_CanRunOnWater = "player_t player, ffloor_t rover"; P_MaceRotate = "mobj_t center, int baserot, int baseprevrot"; P_CreateFloorSpriteSlope = "mobj_t mobj"; P_RemoveFloorSpriteSlope = "mobj_t mobj"; P_RailThinker = "mobj_t mobj"; P_XYMovement = "mobj_t mobj"; P_RingXYMovement = "mobj_t mobj"; P_SceneryXYMovement = "mobj_t mobj"; P_ZMovement = "mobj_t mobj"; P_RingZMovement = "mobj_t mobj"; P_SceneryZMovement = "mobj_t mobj"; P_PlayerZMovement = "mobj_t mobj"; // P_Polyobj polyobjects.GetForNum = "polyobj_t polyobject, int id"; // P_Slopes P_GetZAt = "pslope_t slope, fixed x, fixed y"; P_ButteredSlope = "mobj_t mobj"; // P_Spec P_Thrust = "mobj_t mobj, angle angle, fixed move"; P_SetMobjStateNF = "mobj_t mobj, int statenum"; P_DoSuperTransformation = "player_t player, [boolean giverings]"; P_ExplodeMissile = "mobj_t missile"; P_PlayerTouchingSectorSpecial = "player_t player, int section, int specialnum"; P_FindLowestFloorSurrounding = "sector_t sector"; P_FindHighestFloorSurrounding = "sector_t sector"; P_FindLowestCeilingSurrounding = "sector_t sector"; P_FindHighestFloorSurrounding = "sector_t sector"; P_FindNextHighestFloor = "sector_t sector, [fixed currentheight]"; P_FindNextLowestFloor = "sector_t sector, [fixed currentheight]"; P_FindSpecialLineFromTag = "int special, int tag, [int start]"; P_SwitchWeather = "int weathernum, [player_t player]"; P_LinedefExecute = "int tag, [mobj_t actor], [sector_t caller]"; P_SpawnLightningFlash = "sector_t sector"; P_FadeLight = "int tag, int destvalue, int speed, [boolean ticbased], [boolean force]"; P_ThingOnSpecial3DFloor = "mobj_t mobj"; P_IsFlagAtBase = "int type"; P_SetupLevelSky = "int skynum, [player_t player]"; P_SetSkyboxMobj = "[mobj_t mobj], [boolean/int centerpoint], [player_t user]"; P_StartQuake = "fixed intensity, int time, [table{} epicenter], [fixed radius]"; EV_CrumbleChain = "[sector_t sector], ffloor_t rover"; EV_StartCrumble = "sector_t sector, ffloor_t rover, [boolean floating], [player_t player], [fixed origalpha], [boolean crumblereturn]"; // P_User P_GetPlayerHeight = "player_t player"; P_GetPlayerSpinHeight = "player_t player"; P_GetPlayerControlDirection = "player_t player"; P_AddPlayerScore = "player_t player, int amount"; P_StealPlayerScore = "player_t player, int amount"; P_GetJumpFlags = "player_t player"; P_PlayerInPain = "player_t player"; P_DoPlayerPain = "player_t player, [mobj_t source], [mobj_t inflictor]"; P_ResetPlayer = "player_t player"; P_PlayerCanDamage = "player_t player, mobj_t mobj"; P_IsObjectInGoop = "mobj_t mobj"; P_IsObjectOnGround = "mobj_t mobj"; P_InSpaceSector = "mobj_t mobj"; P_InQuicksand = "mobj_t mobj"; P_SetObjectMomZ = "mobj_t mobj, fixed momz, [boolean relative]"; P_RestoreMusic = "player_t player"; P_SpawnShieldOrb = "player_t player"; P_SpawnGhostMobj = "mobj_t mobj"; P_GivePlayerRings = "player_t player, int amount"; P_GivePlayerLives = "player_t player, int amount"; P_GiveCoopLives = "player_t player, int amount, [boolean playsound]"; P_ResetScore = "player_t player"; P_DoJumpShield = "player_t player"; P_DoBubbleBounce = "player_t player"; P_BlackOw = "player_t player"; P_ElementalFire = "player_t player, [boolean cropcircle]"; P_DoPlayerFinish = "player_t player"; P_DoPlayerExit = "player_t player"; P_InstaThrust = "mobj_t mobj, angle angle, fixed move"; P_ReturnThrustX = "[mobj_t mobj], angle angle, fixed move"; P_ReturnThrustY = "[mobj_t mobj], angle angle, fixed move"; P_LookForEnemies = "player_t player, [boolean nonenemies], [boolean bullet]"; P_NukeEnemies = "mobj_t inflictor, mobj_t source, fixed radius"; P_HomingAttack = "mobj_t source, mobj_t target"; P_SuperReady = "player_t player"; P_DoJump = "player_t player, [boolean soundandstate]"; P_SpawnThokMobj = "player_t player"; P_SpawnSpinMobj = "player_t player, int type"; P_Telekinesis = "player_t player, fixed thrust, fixed range"; P_SwitchShield = "player_t player, int shield"; P_PlayJingle = "player_t player, int jingletype"; P_PlayJingleMusic = "player_t player, string musname, [int musflags], [boolean looping], [int jingletype]"; P_SpawnSkidDust = "player_t player, fixed radius, [int sound]"; P_EarthQuake = "mobj_t inflictor, mobj_t source, fixed radius"; P_PlayerFullbright = "player_t player"; P_MovePlayer = "player_t player"; P_PlayerCanEnterSpinGaps = "player_t player"; P_PlayerShouldUseSpinHeight = "player_t player"; // R_Data R_TextureNumForName = "string name"; R_CheckTextureNumForName = "string name"; R_TextureNameForNum = "int number"; R_CheckTextureNameForNum = "int number"; // R_Draw R_GetColorByName = "string name"; R_GetSuperColorByName = "string name"; R_GetNameByColor = "int color"; // R_Defs R_PointToAngle = "fixed x, fixed y"; R_PointToAngle2 = "fixed x, fixed y, fixed dest_x, fixed dest_y"; R_PointToDist = "fixed x, fixed y"; R_PointToDist2 = "fixed x, fixed y, fixed dest_x, fixed dest_y"; R_PointInSubsector = "fixed x, fixed y"; R_PointInSubsectorOrNil = "fixed x, fixed y"; // R_Things R_Char2Frame = "string char"; R_Frame2Char = "int frame"; R_SetPlayerSkin = "player_t player, int/string skin"; R_SkinUsable = "player_t player, int/string skin"; // S_Sound S_StartSound = "[mobj_t/sector_t origin], int soundnum, [player_t player]"; S_StartSoundAtVolume = "[mobj_t/sector_t origin], int soundnum, UINT8 volume, [player_t player]"; S_StopSound = "mobj_t/sector_t origin"; S_StopSoundByID = "mobj_t/sector_t origin, int soundnum"; S_ChangeMusic = "string musname, [boolean looping], [player_t player], [int mflags], [int position], [int prefadems], [int fadeinms]"; S_SpeedMusic = "fixed musspeed, [player_t player]"; S_StopMusic = "[player_t player]"; S_SetInternalMusicVolume = "int volume, [player_t player]"; S_StopFadingMusic = "[player_t player]"; S_FadeMusic = "int target_volume, int ms, [player_t player]"; S_FadeOutStopMusic = "int ms, [player_t player]"; S_OriginPlaying = "mobj_t/sector_t origin"; S_IdPlaying = "int soundnum"; S_SoundPlaying = "mobj_t/sector_t origin, int soundnum"; S_StartMusicCaption = "string caption, int lifespan, [player_t player]"; S_GetMusicLength; S_GetMusicPosition; S_SetMusicPosition = "int position"; S_MusicType; S_MusicExists = "string musname, [boolean checkmidi], [boolean checkdigi]"; S_MusicPlaying = "[player_t player]"; S_MusicPaused = "[player_t player]"; S_MusicName = "[player_t player]"; S_SetMusicLoopPoint = "UINT32 looppoint, [player_t player]"; S_GetMusicLoopPoint = "[player_t player]"; S_PauseMusic = "[player_t player]"; S_ResumeMusic = "[player_t player]"; // Iterator functions players.iterate; mobjs.iterate; skins.iterate; mapthings.iterate; sectors.iterate; subsectors.iterate; lines.iterate; sides.iterate; vertexes.iterate; polyobjects.iterate; // Base Lua functions assert = "* v, [string errormsg]"; collectgarbage = "[string opt], [int arg]"; error = "string message, [int level]"; dofile = "string file"; gcinfo; getfenv = "[function/int f]"; getmetatable = "object obj"; ipairs = "table{} t"; next = "table{} t, [int index]"; pairs = "table{} t"; pcall = "function fn, [* arg], [...]"; rawequal = "* v1, * v2"; rawget = "table{} t, * index"; rawset = "table{} t, * index, * value"; select = "string index, ..."; setfenv = "function/int f, table{} t"; setmetatable = "table{} t, table{} metatable"; tonumber = "* e, [int base]"; tostring = "* e"; type = "* v"; unpack = "table{} list, [int start], [int end]"; xpcall = "function call, function(status) errortrap"; // Coroutine library coroutine.create = "function fn"; coroutine.resume = "thread co, [* val], [...]"; coroutine.running; coroutine.status = "thread co"; coroutine.wrap = "function fn"; coroutine.yield = "[...]"; // String library string.byte = "string s, [int start], [int end]"; string.char = "[int charid], [...]"; string.find = "string s, string pattern, [int start], [boolean plain]"; string.format = "string formatstr, [...]"; string.gmatch = "string s, string pattern"; string.gsub = "string s, string pattern, int/string/table/function replace, [int n]"; string.len = "string s"; string.upper = "string s"; string.lower = "string s"; string.match = "string s, string pattern, [int n]"; string.rep = "string s, int n"; string.reverse = "string s"; string.sub = "string s, int start, [int end]"; // Table library table.concat = "table{} t, [string sep], [int start], [int end]"; table.insert = "table{} t, [int key], * element"; table.maxn = "table{} t"; table.remove = "table{} t, [int key]"; table.sort = "table{} t, [function(*) comp]"; // I/O library io.open = "string filename, [string mode], function callback"; io.openlocal = "string filename, [string mode]"; io.close = "file* file"; io.tmpfile; io.type = "* obj"; // OS library os.clock; os.time = "[table{} time]"; os.date = "[string format], [int time]"; os.difftime = "int t1, int t2"; } }