Lua lump load only
This branch prevents the following Lua functions from being used within hooks or coroutines, to prevent netgame desync problems or any other similar oddities when using these weirdly:
* `freeslot()`
* `addHook()`
* `hud.add()`
* `COM_AddCommand()`
* `CV_RegisterVar()`
All of the above should only be called when the Lua script is being loaded (i.e. it takes place the same instant a ".lua" file or a WAD file with a "LUA_" lump is being loaded)
To put it another way:
```
//This is valid usage:
freeslot("MT_TEST")
//This is NOT valid usage
addHook("MobjSpawn", function() freeslot("MT_TEST2") end, MT_PLAYER)
```
See *Monster Iestyn/Lua lump load only* on the FTP for an exe and test script.
See merge request !87
NiGHTS Paraloop-special emblems
Implemented the two NiGHTS Emblem types in the TUDD via var modifications to ET_GLOBAL!
* GE_NIGHTSPULL (for it to chase you once paralooped) - Sun emblem
* GE_NIGHTSITEM (for hidden until paralooped) - Moon emblem
* Combined means that you essentially have to loop it twice.
Also, revamped NIGHTSITEM to suck a little less (and have more compatibility with MT_EMBLEM).
Check out root/!LatestSRB2Files/srb2win_branch_nightsemblems.exe with the latest patch.dta, along with root/toaster/nightstest.soc for a sample in GFZS.
See merge request !94
* Improve the code for busting vertical spikes.
* Improve the frame arrangement for vertical spikes' spriteset. (Requires new patch.dta)
* Make all spikes consistently do damage with DMG_SPIKE.
* (unrelated) renamed "flame stomp" to "elemental stomp" in P_HitDeathMessages
Or rather, I killed anything to do with the old background orb, renamed all "EMMY" stuff to "TOKEN", and of course adjusted the new S_TOKEN accordingly
****
* MF2_MACEROTATE. Apply to any object. Replaces the indiscriminate spamming of A_MaceRotate each tic.
****
* Mace point mapthings have been slightly modified.
- MTF_AMBUSH: bigger luke theory (has no effect on custom mace, different effect on spring mace)
- MTF_OBJECTFLIP: flips the objects, but nothing else - just so it doesn't look out of place in gravflip sections
- MTF_OBJECTSPECIAL: keeps it from attempting to play swinging sounds
- angle: tag of controlling linedef
- parameter: number of "spokes" minus one - for example, a parameter of 2 results in 3 equidistant maces rotating around the same point.
****
* Mace linedefs have been significantly revamped.
- line dx: number of chain links
- line dy: speed (in FU)
- frontside floor height: Pitch (in degrees; how much it "tilts" over - Yaw influences the axis it's tilting on)
- frontside ceiling height: Yaw (in degrees; rotation of entire thing on xy plane)
- frontside x offset: Phase (in degrees; how far it is through the rotation cycle)
- frontside y offset: Max speed (in FU; if less than speed, set to speed*2)
- backside floor height: Pinch (in degrees; 0 if no backside; essentially makes rotation conical instead of wheel-like)
- backside ceiling height: Roll (in degrees; 0 if no backside; rotates on the axis of the spinning - identical to Phase for spinning maces, but useful for rotating swinging maces as opposed to just offsetting them)
- backside x offset: Number of "antispokes" (0 if no backside; makes that many spokes not exist so you can put another mace/chain type in there instead; for combo mace/chain instead turns them into chains directly)
- backside y offset: Width (in number of extra chains per side; 0 if no backside; creates a "skiprope" arrangement)
----
- ML_NOCLIMB: for chains and chain-mace combos, allow for player control of yaw through strafe keys
- ML_EFFECT1: replacing the seperate mapthings, this makes a mace type swing instead of spin.
- ML_EFFECT2: for all spokes of the mace wheel ending in maces, make the chains out of the mace type (inverted for firebars)
- ML_EFFECT3: spawn a bonus mace type at the center(s) of rotation
- ML_EFFECT4: don't clip inside ground
****
* Mapthing 1104 represents both spinning and swinging maces from prior versions of SRB2.
* Mapthing 1105 has gone from being a swinging mace variant to a combination of chains and maces in a single unit, provided the number of "spokes" is greater than one.
* Mapthing 1105 has gone from being a swinging chain variant to a vertical spring-on-a-ball-on-a-chain. Yellow by default, apply MTF_AMBUSH to turn into a red spring.
* Mapthing 1107 represents both spinning and swinging chains from prior versions of SRB2.
* Mapthing 1108 is completely untouched except to port over 2.1's functionality to the new backend.
* Mapthing 1109 is a Mario castle-level style firebar. This inverts the functionality of ML_EFFECT2 on the tagged linedef.
* Mapthing 1110 is a free slot should we want to implement another type of base-game mace.
* Mapthing 1111 is a custom mace. Use the linedef's frontside texture slots to identify a macetype mobjtype, then use the backside texture slots to identify a linktype mobjtype (defaults to MT_NULL if no backside).
****
Whooh. Requires new patch.dta for sprites.
*removed Texture/Patch SOC implementations, since they weren't used in the end
*removed remnants of AnimTex and some Spritename thing
*none of the save* arrays in DEH_LoadDehackedFile were being used, so I removed all related code disabled or otherwise
*DEH_LoadDehackedFile doesn't need a "wad" param anymore since only the Patch block was using it
SRB2's built-in action types will now all be pushed as META_ACTION, state_t.action can be assigned META_ACTION and return it
getUserdataType returns "action" for META_ACTION variables
* GE_NIGHTSPULL (for it to chase you once paralooped) - Sun emblem
* GE_NIGHTSITEM (for hidden until paralooped) - Moon emblem
Combined means that you essentially have to loop it twice.
Also, revamped NIGHTSITEM to suck a little less (and have more compatibility with MT_EMBLEM).
* Serious refactor of - and internal exposure of - what has become S_StartCaption().
* Renaming of a few existing captions.
* The prevention of access to - or writing over - sfx_None's stuff in SOC or Lua.
* The new Lua wrapper function S_StartMusicCaption(string, tics, optional player), which essentially allows custom music captions to be created. (This is best used for stuff like final lap music in SRB2 Kart or bonus time in a thokker-like game, not a comprehensive Now Playing expy. That'd be a different kettle of fish.)
Also, updated all the lock-on stuff to use P_IsLocalPlayer instead of rolling my own.
* Provides a helpful description for the hearing impaired, whether permanent, temporary or situational.
* Consvar "closedcaptioning", with on/off values available.
* Only works if sounds are on. This is frustrating. I will see what I can do to allow it to work with sounds off in future, but for now it's dependent in order to properly accept or decline sounds.
* Thanks to MI for making that wiki page a lot more comprehensive a few days ago.
* Weapon ring is now a seperate sfx_wepfir instead of doubling up on sfx_thok.
* Also, made V_StringWidth work with V_NOSCALESTART.
Revamped Level Select (platter view)
Seriously revamped every level select instance in the game to use a more attractive and easier to navigate platter view, including:
* Game CLEAR! save (Title/Pause menus)
* Secrets Menu (including custom ones)
* Record Attack/NiGHTS Mode
* Server creation (Online/2P)
* MP Pause level select (Online/2P)
As a result, the layout of the last three above menus has been changed to varying degrees of difference.
Also, bonus feature: using level select (or MAP MAPxx without -force) in Co-op multiplayer won't reset your score, will keep any lives you have above the startinglives variable, and will not take away all your emeralds. The -force thing prevents both warping directly to special stages to rack up the emeralds AND ensures there IS a way to start a new game.
Check out <root>/!LatestSRB2Files/srb2win_branch_levelselect.exe with the latest patch.dta to see more.
Also, LF2_WIDEICON lets you do this. https://gfycat.com/MenacingClearAngora
See merge request !68
Lets modders set how the game should be saved. Likely useless for
vanilla, but helpful for other mods. This was spawned out of selfishness
for SUGOI to make it only save at the hub, but mods like Boss Mayhem,
which has a hidden map and an act 3 (without any other acts) in the
normal SP campaign, and other mods where the default is detrimental
would benefit as well.
0 for default, 1 for always, 2 for never (no constants because bonustype
doesn't have them either). Won't save if the game is modified, if using
a no-save slot, if playing ultimate mode, or if in a special stage, even
if savemode is set to always.
* Lock on targets bob now, and are used for CA_HOMINGTHOK and SH_ATTRACT as well.
* Flag stuff is now animated like it was designed to be but which was kinda messed up.
* Cork sounds.
* P_SpawnLockOn(player_t player, mobj_t lockon, statenum_t state) for Lua.
* Added homing/firing CA2_GUNSLINGER stuff at egg guard shields.
* Fixed homing stuff wrt egg guard shields and sea egg balloons.
* Fixed attract orb goin' gold when doing a CA_HOMINGTHOK homing ability.
* Fixed positioning of player during homing attack.
* Cleaned up lockon spawn code.
*P_LookForEnemies is now side-effect-less and only provides a pointer to the found mobj
*player-jumping is dead, long live PF_STARTJUMP
*per Mystic's request, CA2_GUNSLINGER has a targeting icon. It also has a more restricted vertical aiming range.
*mobj for this is in the game as requested
*fast teetering animation flag
*general code cleanup
Simple port of something I made for a 2.1 exe mod that Mystic mentioned
needed doing on the 2.2 Priorities topic
(http://mb.srb2.org/showpost.php?p=790613&postcount=4). Adds emblem type
"map", which gives you an emblem upon beating the map it's for. Var sets
more specific conditions; 1 for all emeralds completion, 2 for Ultimate
mode completion, 3 for Perfect Bonus completion. (These can be easily
removed if requested; these were added simply because it was easy to
implement for modders.)
Criticism on the way it's coded and/or how it is implemented is highly
encouraged. Test wad is <root>/TehRealSalt/levelemblems.wad,
pre-compiled exe is <root>/TehRealSalt/levelemblems.exe.
* CA2_MELEE/CA_TWINSPIN combination abilities (ground hit, somersalt) disabled.
* Enabled movement controls whilst using CA2_MELEE in the air.
* CA2_GUNSLINGER no longer requires charging. In exchange, it involves a cooldown in which you can't move.
* CA2_GUNSLINGER lock-on distance improved, and aiming allowance reduced to compensate.
* Lots of cleanup/gravflip allowances for homing/targeting code.
* Unrelated: Flickies now properly face the direction they're supposed to when getting knocked out of the egg capsule.
* Unrelated: Thok trail fades like spindash trail now.
* Unrelated: Using CA_HOMINGATTACK when nowhere near an enemy uncurls you.
* Mildly hacky proof of concept! Will de-hack later.
* Charge up your ability!
* You can only damage others if it's at full power.
* Fires directly at enemies/bosses when at full power. Does NOT aim at players.
Transparent patch support in TEXTURES
Adds transparent patch functionality for the TEXTURES format.
Duplicates source-to-cache column drawer functions and adds extra functionality which uses trans tables.
Changes how the column drawer is picked so it's done once per patch instead of per column.
See merge request !72
* Melee now has a proper weightiness to it with a landing frame.
* If you have twinspin too, do a somersalt when running and hitting the melee button.
* If you have melee, go into the melee landing frame when twinspinning into the ground.
* PF_NIGHTSMODE is now CR_NIGHTSMODE as part of player->powers[pw_carry]. This is because it's mutually exclusive to every other "carry" type.
* PF_SUPERREADY is dead because it literally just checked for all 7 emeralds and 50 rings. That's it. You couldn't even appreciably alter its presence with Lua. That logic has been placed back in P_SuperReady.
* Super sprites are now deliniated via an additional S_SUPER lump between S_START and S_END. Above are normal sprites, below are super sprites. Handled internally via FF_SPR2SUPER.
* Sprite2 numbers are now appropriately limited for the data type that stores them.
* SPR2_SPIN is now SPR2_ROLL, SPR2_DASH is now SPR2_SPIN and SPR2_PEEL is now SPR2_DASH. Makes more sense, right?
* Create a normal skin, but replace the S_SKIN lump with an almost empty one named P_SKIN.
* Provide "name = existing skin name as one of the first line (comments allowed)
* Reset individual spritenames back to zero sprite2s (or one for SPR2_STND to prevent complete removal) via "reset = SPR2_****" statements.
* No support for changing skin properties that are non-visual at the moment, but I don't really feel like it's wise to have those changable with patch alone. (Hello, tons of "modern Sonic" wadfiles which just change vanilla Sonic's ability to CA_HOMINGTHOK!)
* Sprites patch over.
To see an example in action, look at <root>/toaster/smilespatch.wad.
* Set the default flicky group to be equivalent to Flickylist = Demo.
* Refactored a little. (This also removed a crash-causing typo in a Z_Free in P_ClearSingleMapHeaderInfo.)
* MT_EXPLODE's anims partially FF_ANIMATE'd.
* A_FlickySpawn turned into a wrapper for internal function that does what A_FlickySpawn did but returns a pointer to the spawned flicky.
* Added the ability to read in mobjtypes as well as from a short list of flicky constants.
* Added a new state, S_XPLD_FLICKY, which is the new deathstate of all badniks.
* Put the disabled animal-spawn-on-P_KillMobj behind a #define.
* Renamed the branch and associated properties to something not rife with sin.
No idea if this compiles yet (let alone if what is there works at all), just getting this out the way so I can work on certain other things *cough plane displacement cough*
Spindash dust
Charging a spindash kicks up dust, we all know this feature was dying to get in at some point. Bubble and flame forms of spin dust are included from FSonic, for underwater and elemental respectively.
Oh, and as a bonus I reorganised the spindash/spinning/other ability2 stuff code to look a bit neater and more organised.
New resources:
* MT_SPINDUST - the object
* S_SPINDUST1 to 4 - the normal form's states
* S_SPINDUST_BUBBLE1 to 4 - the bubble form's states
* S_SPINDUST_FIRE1 to 4 - the bubble form's states
* SPR_DUST - the normal form's sprite set (uses frames A to D, just pinch FSonic's sprites really)
* SPR_FPRT - the flame form's sprite set (frame A only)
SF_NOSPINDASHDUST disables spindash dust for a character
See merge request !52