Updates
Yellow Highlighted changes may impact how previously created levels behave!
Patch 2 (2024-02-25)
- Layout of the editor application settings has changed.
- Editor application settings now include a field for the size of the game camera/camera grid. This setting sets the minimum size of a section and the default size of a newly initialized section.
- Players in the mouth of a Boss Bass or Big Slurp now escape the mouth if Boss Bass/Big Slurp is killed or transformed before the player dies. If the Big Slurp/Boss Bass overlapped with a block at that moment, the player dies.
- Cheats now work when the game is paused, and 1.3 cheats don't get re-enabled if cheats were disabled and the game is paused.
- Fix buster beetles grabbing items from generators.
- Fix bug in the launcher's episode update check.
- Fix held NPC related crash introduced in patch 1.
- Fix poison veggie ignoring thrown NPC harmlessness frames.
- Fix positioning of NPCs on red springs so that springs halfway submerged in water still successfully bounce NPCs.
- Fix item stock handling in Lakitushop.
- Fix SFX error when transforming players.
- Fix player-fired snifit bullets hitting a wall causing an error.
- Fix billy gun firing non-Bill NPCs while on a clown car (thanks, MegaDood)
- Fix currencies not saving properly.
Patch 1 Hotfix 2 (2024-02-19)
- Revert broken gfxheight/gfxwidth change, fixes veggies.
- Fix The Invasion 2 when a "." is in the install path.
Patch 1 Hotfix (2024-02-18)
- Fixed Hammer Bros.
- Moved Twister blacklist/whitelist into an AI file, allowing NPC IDs to be excluded/included to its lifting.
- Fix resolution of "./" in paths during some API calls. This had broken one case where some Lua code used "./" in the package.path variable.
- Reverted library update that broke FileFormats Lua bindings.
- Fix incorrect calling convention issue, which led to incorrect path unlocking in overworld, potentially among other things.
Patch 1 (2024-02-18)
- Fixed npc-n.lua template comments.
- Update NPC-602 max power extra setting to match the other barrel cannons.
- Setting a checkpoint's sound to 0 or blank is now a valid way to mute it.
- Update 360 cannon constant rotation extra setting range to match that of other cannons, tweaked tooltip wording to reflect that.
- Lakitu Shop now hovers in place when spawned without a post, rather than erroring.
- Fixed Lakitu Shop items added to custom configs being visible regardless of the visible flag or visibleFunction.
- Added various functionality to Lakitu Shop.
- Fixed Respawner errors and spawn timer issues.
- Fixed error when placing burner fire.
- Poison Veggie now properly harms the player if you gently lay it down.
- Fix glass vase items being thrown backwards under certain conditions.
- Fix red springs being killed when dropped into walls when they shouldn't be.
- Fix block-1288 (npc pass-through slope) graphic being offset by 1 pixel.
- Fix player filter slopes solidity.
- Re-center npc-196 (smw star) graphic to match its original 1.3 appearance, fixing a bad mask on the invasion 2 lumas.
- Fix Boss Bass respawning.
- Change the sound made by Big Goombas when hit with a fireball to be more fitting.
- Fix downwards piranha plants having a 1 pixel render artifact sometimes.
- Fix various NPCs missing the useclearpipe config flag.
- Added "spawnedDisappearType" config to YI Number Platform. (defaults to DIE) This causes them to die, rather than despawn, when spawned from a generator.
- SMM Spike Balls and Snowballs now properly collide with player filter blocks and solid NPCs.
- Shyhatter and Spikehatter now have bonktime and waketime config to define the duration of their timer states.
- Shyhatter and Spikehatter no longer cause errors when generated.
- Fix an issue with cannon NPCs being drawn even when despawned.
- Removed clawgrip's 'throwspeedx' and 'throwspeedy[n]' config flags. Replaced with 'throwspeedxs' and 'throwspeedys' as arrays.
- Fixed Clawgrip NPC config (use health, not hp).
- Fixed a Snifit held by Clawgrip erroneously shooting bullets that can hurt NPCs.
- Clawgrip's boulder will no longer push him or other NPCs when thrown.
- Renamed the SMW small pipe blocks in editor.
- Fixed Bomb Cannonballs granting score when exploding.
- Bomb Cannonballs will no longer explode if they've been overlapping solid objects for their entire lifetime.
- Fixed certain NPC behaviours not responding to the change in solidity of synced switch blocks when toggled (concatinated NPC and Block defines lists are now properly updated when an NPC or Block's config is changed).
- Fixed the credits still referencing the old forum URL, which has since moved to smbxgame.com.
- Fixed a bug where Boohemoth could prevent levels from getting won. Boohemoth now spawns a Boohemoth Spawner ontop of himself to despawn himself when a level exit is triggered.
- Fixed a code error when attempting to attach a Bubble to a Chain Chomp's Post.
- Fixed a code error when attempting to put a Coin Snake into a container NPC.
- Updated the editor description of the Player Rinka.
- Fixed Mechakoopas, SMW Bob-Ombs, and Chucks not making sound when stomped.
- Fixed Burner Beetle animating while the game is paused.
- Fixed harmlessthrown config flag not working.
- Level.name() now returns the level's assigned display name as intended.
- Mounts taken when entering warps with the 'no mounts' flag set are now returned to the player upon exiting the level, as was always intended.
- Added Misc.isFullscreen() and Misc.setFullscreen() to allow option menu options for fullscreening.
- Added support for array fields in NPC config files.
- Magikoopa Magic now supports 'transformations' and 'blocktargets' config properties as arrays.
- Ninji now supports 'bounceheights' config property as an array. 'bounces' config is no longer supported.
- Make some stack traces during crashes a little more diagnostically useful, particularly for "Subscript out of bounds" crashes.
- Added Misc.canCollideWith(objA, objB) and Misc.collidesWithGroup(obj, collisionGroupString) for easier collision group handling.
- Added a collisionGroup argument for Colliders.getColliding, which if specified will automatically filter out objects that do not collide with the given group.
- Fixed a strange behaviour that occurred when holding both down and jump while on a slope. This bug fix may be disabled by calling Misc.SetSlideJumpFix(false).
- Added player.slidingTimeSinceOnSlope which counts the number of frames that the player has been sliding while not colliding with a slope (used by the above bug fix).
- Fixed the naming of Misc.SetLinkClowncarFairyFix().
- Fixed flagpole sometimes failing to spawn in sections with one-way scrolling enabled.
- Interaction with semisolid slopes is now much more consistent and behaves better with NPCs.
- Fixed an error that occurred due to red springs attempting to bounce despawned NPCs.
- Lua: Don't try to shutdown Lua environment due to an error if still nested in Lua function calls, since that would crash.
- Lua: Don't pass mouse/keyboard events while message box is active.
- Fix crash with an overflow error if Lua code stays in Misc.pause() state on the world map for >8.5 minutes
- Lua: Update LuaJIT version to 48b58da (based on 0d313b2 upstream).
- Many NPCs and blocks have been changed to more properly respect the new collision groups system.
- Fixed minor oversights with Chain Chomp's Post when eaten by Yoshi.
- Fixed players holding a Chain Chomp's Post being able to spin jump and unable to dismount from Yoshi.
- Fixed Hammer Bro's jump through ledge behaviour.
- Registering a currency now always returns the registered currency.
- Fixed crate advanced extra settings not applying.
- Fixed Fire Chomp's shootsound config when set to 0.
- Fixed Fire Chomp error when one of its tail pieces is killed.
- Fixed Fire Chomp error when pulled from a clear vase.
- Fixed Clear Vase movement. Can now be used with nogravity.
- Fixed a bug with the weight of NPCs held by the player.
- Fix a bug in currencies.
- Tweak currencies.lua to make the Star Coin currency use SaveData._basegame.starcoinCounter.
- Fix Star Coin not moving with layers.
- Fix POW Blocks not destroying recently hit blocks that they should destroy.
- Fixed Defines.effect_NpcToCoin, Defines.sound_NpcToCoin, Defines.npcToCoinValue, and Defines.npcToCoinValueReset which did nothing.
- Held NPCs now respect collision groups properly.
- Fixed an issue with lib3d.Plane where the rightmost segments of the plane would not appear.
- Fix a crash in rinka mode in mario challenge.
- Adjusted various editor descriptions. (Thanks, Iblitz95)
- Implemented some fixes for player position during powerup/powerdown, mostly related to height when ducking. May be disabled with Misc.SetPowerupPowerdownPositionFix(false)
- Fixed error in a corner case around low controller battery notification and switching controller
- Fix unintended breakage of using the ESC to pause even when not bound to "start".
- Fix NPC gfxheight/gfxwidth defaulting based on height/width (which was apparently broken since beta 4).
- Allow "paused" overlay due to window focus to be replaced, in case an episode wants to display something different, by handling and canceling the "onDrawUnfocusOverlay" Lua event.
- Added add io.writeFile(path, data) function, as a simple file writing function, which ensures no risk of a file being left in an intermediate state when overwriting an existing file.
- Reduced risk of data loss when writing save*-ext.dat and progress.json, particularly in the case of a Lua error, and potentially other scenarios as well.
- Reduced risk of data loss when writing save*.sav files.
SMBX2 Beta 5 (2024-02-04)
-
Weight
- Added a new weight system to distinguish heaviness of players and NPCs.
- Added new NPC config flag: "weight" (number)
- Deprecated NPC config flag: "isheavy" (boolean)
- NPCs that previously set the NPC config "isheavy" now use "weight".
- If isheavy is set but weight is not, weight defaults to 2.
- isheavy is always true when an NPC's weight is not zero.
- Brittle blocks and donut blocks now use weight instead of isheavy to determine whether their collision-triggered behaviour should happen.
- Added new Block/NPC config flags for brittle blocks and donut blocks: ignoreplayers, ignorenpcs, triggerweight. Defaults are false, false and 1 respectively.
- Players now have a weight of 2, and a weight of 10 while mega.
- Player weight and their held NPC's weight are added together.
- Players and NPCs now have getWeight(), attachWeight() and detachWeight() methods to alter their weight on the fly. For more information, view their respective documentation pages.
-
Blocks
- Added: Bombable Blocks, in small and large sizes, which can only be destroyed by explosions and POW blocks.
- Added: Invisible Solid Slopes, 45° and 25°.
- Added: SMB3 extended Airship blocks
- Added: SMW Bowser's Castle Brick
- Added: Synced Semisolids and Slopes
- Added: SMW and SMB3 Pipe extensions
- Added: SMB2 Tower Log Slopes
- Added: SMW Ghost House Stairs
- Added: Player-passthrough slopes
- Blinking Blocks: Blinking block state is now defined as a number. It is possible to add more blinking block states than the default two.
- Clear Pipes: If an NPC has been shot by a clear pipe cannon, it will now emerge in the "Projectile" state by default. This behaviour can be disabled by setting clearpipeNPC.revertCannonNPCProjectile to true
- Clear Pipes: Triggering an offscreen exit now properly ends the level with the Offscreen Exit win type.
- Clear Pipes: Don't mess with Defines.player_runspeed anymore, making them consistent in multiplayer.
- Costume Block: Added extra settings for forcing the block to set a specific costume.
- onCollideBlock: Split onCollideBlock into onCollideBlock and onIntersectBlock. The latter can be triggered by NPCs that do not collide with blocks.
- onCollideBlock: Elemental blocks and 1f0 now use onIntersectBlock. Brittle leaf blocks continue using onCollideBlock.
- onCollideBlock, onIntersectBlock: Improved performance of large numbers of blocks using these functions being present in a level or on-screen.
- onCollideBlock, onIntersectBlock: Added a function through which NPCs can add their own custom collision functions. Check burner.lua for an implementation.
- 1f0 (Gliding Block): Fixed a bug where it was not possible for NPCs to enter small gaps exactly the height of their hitbox when transferring from 1f0 onto a ledge. This fix can be disabled when loading glidingblock.lua and setting glidingblock.undoLedgeFix to true before onStart
- 1f0 (Gliding Block): Can now register onGlide and onRelease handlers for customization of gliding behaviour. Used by Thwomps to fix a bug with spinjumping while using the tanooki glide.
- Nitro Destroyer Block: Nitro destruction is now delayed by up to 8 frames.
- P Switch Block (YI): Fixed issues regarding the block's active state toggling.
- P Switch Block (YI): Changed the OFF state's sprites. The new sprite has 4 frames by default and is a dotted representation of the ON state's sprite.
- Reserve Power Block: Fixed a bug where it was unable to empty the reserve item box if without contents.
- Kirby Bomb Blocks, TNT, Nitro, Breakable Dirt, Breaking Turn Block: Reduced speed of coin contents spawned when the block is destroyed.
- Slime Blocks: Added slime.touching to the AI file, to easily check if a player is in contact with a slime block.
- Synced Switches: Synced state is now defined as a number. It is possible to add more synced states than the default two.
-
Block config
- Global: Fixed the broken interaction between the "semisolid" and "floorslope" block config flags
- Global: Added ediblebyvine - If true, mutant vines are able to eat the block
- Global: Added walkpaststair - If true, player and NPCs approaching this stair (semisolid slope) block while grounded will walk past instead of up
- Brittle blocks: Added triggerweight - The minimum weight required to cause the block to break
- Brittle blocks: Added ignoreplayers - If true, players cannot cause the block to break
- Brittle blocks: Added ignorenpcs - If true, NPCs cannot cause the block to break
-
Backgrounds
- Added: SMB3 Castle Walls (Day)
- Added: SMB3 Castle Walls (Night)
- Added: SMB3 Night Sky Hills
- Added: SMB3 Space
- Added: SMW Layer 3 Cave
- Added: SMW Layer 3 Castle
- Added: SMB Beach
- Added: SMB Castle Walls
- Added: SM Old Tourian
-
BGOs
- Added: Extensions to SMW Ghost House itembox
- Added: Extensions to SMW Forest itembox
- Added: Extensions to SMB3 Grassland itembox
- Added: Extensions to SMB3 House itembox
- Added: Extensions to SMB3 Airship itembox
- Added: Extensions to SMB1 Castle itembox
- Added: Extensions to SMW Water itembox
- Added: A BGO that causes NPCs on a Line Guide to pause
- Fences: Fixed a bug where speed would not be properly applied when a player was climbing on them (1.3 layer fence glitch).
- Fences: Fences on hidden layers are no longer climbable.
- Line guides: NPCs now become detached from Line Guides when held by a player.
- Fixed a bug where BGO extra settings were not correctly applied.
-
NPCs
- All: Fixed a vanilla bug where NPCs would not spawn correctly if not entirely within section bounds. Can be disabled with Misc.SetNPCSectionFix().
- Various: Fixed a bug where sound effects would play incorrectly when killed. This also fixed a bug where checkpoints would display an effect when spawning at them. NOTE: Apparently some custom NPCs were unknowingly relying on this bug, and need to implement their death sound properly instead.
- Added: Boss Bass (from Murphmario's NPC Pack)
- Added: Box-shaped Lights and Line-shaped Lights
- Added: Bully, Big Bully (from MrDoubleA's NPC Pack)
- Added: Burners (from IAmPlayer's NPC Pack)
- Added: Burner Beetle
- Added: Chain Chomp (from MrDoubleA's NPC Pack)
- Added: Clawgrip, Clawgrip's Boulder (from KateBulka's NPC Pack)
- Added: Clear Vase (an infinite supply of buried items)
- Added: Curry Nipper Plant (from GtW's NPC Pack), Salsa Nipper Plant
- Added: Fire Chomp (from GtW's NPC Pack)
- Added: Flagpole. Exits the level with End State 9/Win Type 10: Flagpole
- Added: Hiding Lakitu (from MrDoubleA's NPC Pack)
- Added: Icicles (from IAmPlayer's NPC Pack)
- Added: Jonathan, a friendly NPC that explodes when a Whistlin' Chuck whistles
- Added: Lakitu Shop Post (formerly Beta 3 Wario's defining characteristic)
- Added: Piranha Plants (from MrDoubleA's NPC Pack)
- Added: Poison Vegetable
- Added: Respawner (a spawner which respawns an instance of an NPC on a delay)
- Added: SMB2, SMW and SMW (Red) POW Blocks
- Added: SMB3 Airship Cannons (from Lusho's NPC Pack)
- Added: SMB3 Donut Blocks
- Added: SMW Goal Tape and Goal Orb (from MrDoubleA's NPC Pack)
- Added: Square variants of the Boomper and Baby Boomper.
- Added: Stationary variants of the SMW Red Spring (SMB1 Red Stationary Spring).
- Added: Super Mario Maker Spike, Snow Spike, Spike Ball and Snow Spike Ball (from MrDoubleA's NPC Pack)
- Added: Super Mario Maker Twister (from KateBulka's NPC Pack)
- Added: Swinging Platforms and Ball n Chain (from MrDoubleA's NPC Pack)
- Added: Synced Switches (re-usable)
- Added: Targeting Fishbone from Super Mario Maker
- Added: YI Number Platform (from MrDoubleA's NPC Pack)
- Added: YI Egg-Plant and Eggry-Plant (projectile generator variant)
- Deprecated: Old Goal Tape
- Deprecated: Old Piranha Plant NPCs
- Deprecated: Old SMB3 Donut Block NPCs
- Deprecated: Old POW Block
- Baby Yoshi: Can now eat berries.
- Baby Yoshi: A hunger config value below 0 now causes the Baby Yoshi to never grow.
- Bloopers: Add new extra settings.
- Blurp (npc-232): No longer deprecated.
- Boohemoth: Now has notcointransformable set by default.
- Bowser's Bowling Balls: Fixed a bug where it would sometimes act like it has hit a wall when touching the top of a slope.
- Bros (Hammer, Boomerang, Sledge): Their grabbed behaviour now more closely aligns with that of the SMB1 Hammer Bro.
- Bros (Hammer, Boomerang, Sledge): Added extra settings for jumping through blocks and onto different ledges.
- Bros (Sledge): Stalls in the air for a bit before doing a slam.
- Bros (Sledge): Only stun players if they are visible on the same screen.
- Bros Boomerangs: Adjusted throw behaviour to be consistent when thrown.
- Bros Boomerangs: Fixed a bug where the speed config would not work correctly.
- Bullet Bill Spawner: Added extra setting for changing the side selection behavior when spawning NPCs.
- Bumpers: Adjusted bounce logic, decreasing the chance of wrong-direction bounces (especially when a line of square bumpers is placed as a bridge).
- Bumpers: Can now register custom direction flip handlers per ID.
- Buster Beetles: Special case throw handling can now be registered for any ID via the AI file.
- Buster Beetles: Special case pickup handling can now be registered for any ID via the AI file.
- Buster Beetles: Can now longer pick up already-thrown throw blocks.
- Buster Beetles: Picked up items now have their direction set to that of the Buster Beetle.
- Buster Beetles: Picked up items are now kept in Forced State 208, rather than 5.
- Checkpoint: SMW Gate Checkpoint no longer plays Stomp noise by accident.
- Checkpoint: Added extra settings for changing the powerup and sound.
- Cloud Drops: Fixed missing "nowaterphysics" config flag.
- All Chucks: Fixed issues related to the npconhit config flag.
- Chargin' Chucks: Fixed a bug where it would sometimes act like it has hit a wall when touching the top of a slope.
- Crates: Their contents can now be defined through individual extra settings fields, rather than a string.
- Diggin' Chuck: Made the spawning algorithm more flexible in case projectileid or rockemergeid are modified.
- Dino Rhino: Fixed a bug where it would sometimes act like it has hit a wall when touching the top of a slope.
- Dino Torch: Fire breath duration is now dependent on the duration property of the fire NPC.
- Dino Torch: Fixed a bug where it would sometimes act like it has hit a wall when touching the top of a slope.
- Dino Torch Fire: Made animation code more flexible. See NPC config section.
- Dino Torch Fire: Now uses line lights.
- Engine Blocks: Adjusted attachment code to reliably spawn attachments larger than the engine.
- Enemy Fireball: Fixed "bounces" NPC config flag not working.
- Enemy Fireball: Fixed a bug where it would sometimes act like it has hit a wall when touching the top of a slope.
- Enemy Fireball: Will now pass through other NPCs rather than turning around when hitting them. Old behaviour can be re-enabled with the "turnfromnpcs" config.
- Fire Bros: Adjusted AI to more closely match SMB3. New NPC config options have been added.
- Fire Bros: Now shoot fireballs even when held by other NPCs.
- Fishbone (npc-234): No longer deprecated.
- Fliprus: Adjusted code to more easily support different spawnids, particularly SMM Spike's projectiles.
- Fliprus Snowballs: Adjusted code to more easily support being thrown by other NPCs.
- Fliprus Snowballs: Fixed a bug where it would sometimes act like it has hit a wall when touching the top of a slope.
- Fliprus Snowballs: Will now be destroyed when hitting another NPC rather than turning around. Old behaviour can be re-enabled with the "turnfromnpcs" config.
- Flutter: Replaced graphics to match the SNES version of Yoshi's Island, rather than the GBA version.
- Flying NPCs (Parakoopas, Paragoombas): Added behavior "Hover in place".
- Frightlight: Now has "nowaterphysics" enabled by default.
- Gas Bubble: Now has "nowaterphysics" enabled by default.
- King Bill: Fixed a bug where the hitbox could not be resized with NPC config.
- Launch Barrels: Fixed trajectory for Luigi-based characters.
- Launch Barrels: Force extra setting limit increased to 99.
- Lineguided Cannon: Added extra settings to allow the cannon to spawn NPCs "attached". Intended to be used with Dino Torch Fire or other nogravity noblockcollision NPCs that make sense as a cannon attachment. Does not work with all NPCs.
- Lineguided Cannon: Added extra settings to configure the sound to play when an NPC is spawned.
- LoZ Heart: Fixed an issue where it didn't set the powerup npc config.
- Magikoopa: Improved stability.
- Magikoopa: Fixed a bug where it could spawn on top of invisible blocks.
- Megashroom: Fixed an issue where it didn't set the powerup npc config.
- Monty Mole: Fixed a bug with monty mole hole rendering when custom range monty moles use a different hole sprite.
- Lakitu (SMB1 and SMW): Now spawn their NPCs through the lakitu.lua AI file. An onPostSpawn callback can be registered, to make custom NPCs behave a certain way after being spawned by a Lakitu.
- Lakitu (SMB1): Spawn behaviour now matches SMW lakitu, meaning that a friendly lakitu by default will never throw friendly NPCs. This can be reverted with the "inheritfriendly" config flag.
- Lineguide: Lineguided elements now pause during all the same forced states that moving layers would.
- Lineguided Rope Attachment: Fixed an issue with the rope respawning in the wrong position when re-entering the section.
- Minigame Cloud: Fixed a bug where the reward would not spawn if the last coin was collected too late.
- Mutant Vine Head: No longer consumes redirector BGOs when passing over them.
- Mutant Vine Head: No longer terminates on mutant vines that are on a hidden layer.
- Paddle wheel: Fixed a bug where it crashed the game when spawned from a generator.
- Paddle wheel: Fixed bugs relating to hidden Paddle wheels.
- Palace Switch: Fixed a bug where the level music would continue playing even after activating the Palace Switch.
- Palace Switch: Now exit the level with End State 8/Win Type 9: Palace Switch.
- Phanto: Fixed a bug where the speed could not be set with the NPC config.
- Phanto: Phantos which are set to haunt NPC 31 (SMW Key) now haunt Link if he possesses a key.
- Phanto: Phantos which are set to haunt NPC 134 (SMB2 Bomb) now haunt Link if he possesses one or more.
- Phanto: Phantos stabbed by Link's Sword or a Racoon Tail will now get briefly knocked back.
- Popup Coins: Fixed an issue where the hitbox was too large for certain NPCs.
- Ptooie: Fixed a crash if the ball's maxspeed config is undefined.
- Ptooie: Fixed issues with Ptooie spawning without a ball.
- Red Springs: Fixed an issue where entities could collide with two springs at once, removing their horizontal speed.
- Red Springs: It is now possible to throw springs upwards into NPCs, causing them to bounce.
- Red Springs: Fixed a bug where NPCs could be bounced into the ceiling.
- Red Springs: Improved bounce response when a stack of NPCs interacts with a vertical spring.
- Red Springs: Can now register vertical and horizontal bounce response functions per NPC ID.
- Rinky Gun: Player Rinkas now prefer targeting enemies straight ahead of the player, decreasing the risk of a Rinka flying at non-threatening enemies.
- Rocky Wrench: Fixed visuals when coming out of a generator. (Thanks, MegaDood!)
- Sizzle Guy: No longer jumps in midair.
- Small Switches: Now have a new config flag "permanent" which, when true, keeps a switch around instead of destroying it.
- Snake Block: Now pauses when the player is getting hit/in a forced state (like most platforms). Can be reverted by setting "nohitpause=true" in the Snake Block NPC config.
- Snake Block: Added speed extra setting.
- Snake Block: Fixed a bug where snake blocks overlapping with a redirector and a state toggler at the same time would split in 2.
- Snake Block: Fixed a bug where snake blocks splitting in 2 would not carry over their extra settings.
- SMB3 Star: Now emits light by default.
- SMW Star: Now emits light by default.
- Sparky: Now emits light by default.
- Starman: Config is now used directly, allowing it to be modified more easily mid-level.
- Starman: Fixed a bug where the Starman music would continue playing even if the player died (for example, by falling in a pit).
- Star Coin: Can now be collected with shells. Can be reverted via the config shellcollectable=false
- Star Coin: Can now be dropped with a POW block. Can be reverted with nopowblock = true and noblockcollision = true
- Star Coin: Collecting it now always kills the NPC.
- Stretch: Fixed the nowaterphysics config not being set.
- Tantrunt: Improved interactions with bumpers and red springs.
- Tantrunt: Fix a crash related to it breaking blocks.
- Tilt Lift: Now pauses during powerup/powerdown.
- Torpedo Ted Spawner: Is now a container.
- Thwomps: Thwomp ID 437 now uses death effect ID 307 instead of death effect ID 98.
- Thwomps: Can now register custom NPC interactions. Currently used by Twister, Chain Chomp's Post and Small Switches.
- Thwomps: No longer infinitely slide after coming in contact with conveyers. Can be reverted with the new "revertslidepatch" config.
- Trouter, Dolphin, Podoboo: Fixed NPC configs for other directions not working or working incorrectly.
- Van de Graf: Due to its parameters breaking the interaction rules of electric enemies, it has been moved to ID 719. Its harm types now match those of the Charged Spiny.
- Van de Graf: The slot previously occupied by Van de Graf is now occupied by the new Weiersgraf NPC, which acts the same as the old Van de Graf but does not emit light by default.
- Waddle Doo: Added extra settings to override walk time and initial walk time.
- Wiggler: Improved Wiggler's movement behaviour when on platforms.
- Wiggler: Wigglers will no longer die when thrown or projectile-generated.
- Wiggler: Added "dieswhenthrown" config flag for restoring old throw death behaviour.
-
NPC config
- Fixed npcblocktop erroneously being true for: SMW Breaking Turn Block. Snake Block, Skewers, NSMB Rotating Bill Blasters, Small and Palace Switches.
- Global: standsonclowncar - If true, the NPC will stay on a mounted Clown Car
- Global: iselectric - If true, the NPC is marked as electric. This has no current basegame effect, but could be used by custom code for special interactions. Applied to Electric Cannonball, Charged Spiny, Van de Graf, Waddle Doo Beam, Spark and Sumo Bros Lightning
- Global: istoad - If true, the NPC behaves like a Toad. This causes it to spawn a mushroom effect when crushed. If set to isinteractable, the NPC will also be consumable and grant a Mushroom Power-Up.
- Global: weight - A number to determine an NPC's weight
- Global: Deprecated isheavy - It will still work, but is less flexible than the new weight config
- Global: nopowblock - Prevents the NPC from being affected by the new POW block effects introduced in this patch
- Global: nowalldeath. Prevents the NPC from dying when held and released next to a wall.
- Now used by: Baby Yoshi, Bumper, Small Switch, Palace Switch, Red Springs, Sonic Monitors, Starman, Megashroom, Mutant Vines, various Platforms, Skewers, Birds, Rotating Bill Blasters, Crates, Dolphins and friendly NPCs.
- Global: isstationary. Gradually slows the NPC down, like how mushroom blocks and keys move.
- Global: useclearpipe. If true, the NPC can enter clear pipes.
- Global: clearpipegroup. Registers the NPC to one of several clear pipe interaction groups. Currently supported are: "fireballs", "iceballs" and "iceblocks". Interactions determine death and ID transformation on collision, mirroring what would happen if an ice ball hit a Goomba outside of a clear pipe.
- Global: terminalvelocity. Allows setting the maximum downwards speed of the NPC. If 0, it will use the default speed, and if negative there will be no limit.
- Global: slippery. If true, this playerblocktop npc will be treated as slippery ground.
- Baby Yoshi (Purple): Added powtype, powradius (default to "SMW" and 150, causing the blast to be shorter range than it used to be. Use "legacy" for the old behaviour).
- Boo Circle: Fixed the "bootypes" config flag.
- Bros (Hammer, Boomerang, Sledge): Added jumptimerange - A number of frames that may be added to the jump delay. To accomodate, jumpframes' default has been reduced by 60 for the three. (Default: 60).
- Buoyant Platform: Added "liquidoffsettop" and "liquidoffsetbottom", which together determine the range from the top of the hitbox within which buoyancy is checked. Defaults to -8 and 24.
- Buster Beetles: Added "friendlythrow" config flag (boolean). If true, a friendly buster beetle will still throw its held npc.
- Dino Torch Fire: Added framesets - Dino Torch Fire now is defined as having 2 frames, rather than 8, with 4 framesets. The animation cycles through all frames in a frameset at a time. Dino torch fire is harmful to the player when it reaches the last frameset.
- Dino Torch Fire: Added duration - The total duration of the dino torch's fire's lifetime. The speed of the extend/retract animation tries to adhere to the framespeed value, but might speed up for short durations if it would otherwise never have the time to fully extend.
- Dino Torch Fire: Now a framestyle=1 npc by default. The spritesheet has been updated. Set framestyle=0 to revert.
- Donut blocks: Added triggerweight - The minimum weight required to cause the donut block to fall. Defaults to 1
- Donut blocks: Added ignoreplayers - If true, players cannot cause the donut block to fall
- Donut blocks: Added ignorenpcs - If true, NPCs cannot cause the donut block to fall
- Donut blocks: A negative value in the cooldown config now prevents the donut from respawning on a timer
- Fire Bros: Added lowjumpheight, highjumpheight - Determines the height of low and high jumps the Fire Bros can do (Default: 4, 6).
- Fire Bros: Added jumptimemin, jumptimemax - The extents of the random number of frames between small jumps. Small jumps are stalled by shooting. (Default: 65, 85)
- Fire Bros: Added shoottimemin, shoottimemax - The extents of the random number of frames between entering the shooting state. The shooting state is stalled by small jumps. (Default: 135, 180)
- Fire Bros: Added walktime - The number of frames between moving back and forth. (Default: 60)
- Fire Bros: Added shotcount - The number of fireballs to shoot. (Default: 2. Set to 1 for old value)
- Fire Bros: Added shotspeedx - The x-speed of the shot projectile. (Default: 3.5. Set to 3 for old value)
- Fire Bros: Added shotsound - Sound effect used when shooting
- Fire Bros: Added npcheldfirerate - A multiplier for the fire rate when held by an NPC (default 0.75)
- Fliprus Snowballs: Removed fliprusid.
- Fuzzy (SMW): Fixed a bug where it was edible by Yoshi.
- Fuzzy (YI): Added "dizzytime" as the number of seconds the dizzy effect lasts. Enter a negative value for infinite duration. (Dizzy effects can be manually ended using the new yifuzzy.lua AI file)
- Fuzzy (YI): Added "dizzystrength" as a multiplier on the dizzy effect's intensity.
- Fuzzy (YI): Added "dizzytransitiontime" as the number of seconds it takes for the dizzy effect to settle or end.
- Flying Yoshi's House Birds: Added takeoffspeed - Changes the bird's flight acceleration.
- Lakitu (SMB1, SMW): Added inheritfriendly - If true, the thrown NPC will be friendly if Lakitu is friendly. False by default.
- Lineguided Platforms: Adjusted effect of "buoyant" parameter to prevent NPCs and players standing on the platform to briefly dip into the water.
- Magikoopa Magic: Added "transformationN" config, where N is a number starting at 1. Can be used as a txt-friendly alternative to the transformations config to define NPCs the hit block can turn into. By default, transformation1 through transformation6 are defined. "transformations" overrides this config, and is unset by default.
- Magikoopa Magic: Added "blocktargetN" config, where N is a number starting at 1. Can be used to define the IDs of blocks that the magic can transform. Defines blocktarget1=96 by default.
- Paddle wheel: Added linecolor - The color of the line connecting the wheel platforms. Defaults to white
- Paddle wheel: Added linewidth - The width of the line connecting the wheel platforms. Defaults to 1
- Phantos: Added enterawayfromplayer - If true, following phantos will always enter the screen on the opposite side of the screen from the player they're following.
- Phantos: Added homingspeed - A vertical speed multiplier when following the player.
- Red Springs: Can now disable SMW throw physics if "isstationary=true" in the npc config.
- Red Springs: Added support for multiple frames and framestyle=1. The "frames" config is interpreted as number of frames per state. Each direction has 3 states: Unpressed, semi-pressed and pressed.
- Red Springs: Added "npcforce" and "weakforce" config flags, which when negative are interpreted as a multiplier on "force". When positive, they are taken as the direct value of bounce force to apply to the npc or the non-jump-holding player respectively. Both default to -0.77.
- Red Springs: Added "springdropcooldown" config. This is the minimum number of frames after releasing a spring before a player can interact with it. Defaults to 15, used only by upwards springs.
- Red Springs: Added "usedirectiontobounce" config. If true, the spring forces a bounce based on its own direction, rather than relative position. Only used by sideways springs. By default true for the SMB1 Red Stationary Spring.
- Snailicorn: added stunframes - Number of frames dedicated to the hurt animation. The walk animation is thus defined as (frames - stunframes). Defaults to 1
- Tantrunt: Added earthquake - Strength of earthquake effect. Defaults to 0
- Tantrunt: Added poweffect - Toggles the pow effect. Defaults to true
- Tantrunt: Added powtype, powradius (default to "legacy" and 600. No change in default behavour).
-
Effects
- Fixed an issue where custom onTick/onDeath definitions didn't work.
- Fixed an issue where effects wouldn't properly despawn, causing lag over time.
- Added xscale and yscale parameters for effect txt files (default: 1, can be a range).
- Angle parameter can now be a range.
-
Players
- All: Player.section is no longer read-only.
- All: Added climbingBGO field which returns the fence BGO currently being climbed on.
- All: noblockcollision, nonpcinteraction, noplayerinteraction - Filters collision with all objects of the specific type
- All: Added getWeight, attachWeight and detachWeight methods for retrieving and manipulating weight.
- All: Added inClearPipe and inLaunchBarrel fields for detecting these states.
- Broadsword: Fixed own stab message block softlock.
- Broadsword: Fix fairy state issues.
- Broadsword: Downstab spinjumps now become regular spinjumps after bouncing off enemies.
- Broadsword: Added broadsword.smallLimitsMoves, which can be set to false to enable charge, downstab and combo lunge for "small" Broadsword.
- Broadsword: Added broadsword.knockbackStrength for configuring the knockback the character takes.
- Broadsword: Added broadsword.extraConfig, which enables stallWithDownRun (enable down stab when pressing run while holding down for 15 frames) and stallCancelCombo (if true the player can cancel downstabs with a full slash combo. if false, the cancel only allows one slash) tweaks to be enabled separately.
- Klonoa: Fixed a lua error that occured when attempting to grab an empty Bubble.
- Link: Fixed a bug related to clown car and fiary. Can be reverted with Misc.LunaLuaSetLinkClowncarFairyFix(false).
- Mario, Luigi, Toad: Fixed certain parts of the SMW costume code applying regardless of the player's character ID.
- Fix Player:teleport always teleporting Player 1.
- Cloned players can now be manipulated with Player.keys.
-
Editor
- Added weather: Rain (Vertical)
- Added weather: Starfall
- Added weather: Sand Breeze
- Added weather: Dust
- Added a field to change weather/screen effect render priority.
- Added fields to flip a weather effect horizontally/vertically.
- Sections can now have custom weathers.
- Added screen effect: Aurora
- Added screen effect: Lightbeams
- Added screen effect: Retro
- Added screen effect: Dream
- Revamped screen effect: Caustics (Old effect available as "Simple Caustics")
- Revamped screen effect: Underwater (Old effect available as "Simple Underwater")
- Certain screen effects now expose parameters to tweak them.
- Level settings: Is now a dock window and can be accessed by the top button bar (castle icon)
- Level settings: Added new section for forcing player character and costume
- Extra settings: Now support the new listGroup type, allowing for a list of defined items to be added. Note: Presently these lists always default to being empty.
- Message edit dialog: Revamped the dialog's appearance. It now shows a simple text input field and a separate SMBX vanilla dialog preview.
- Tileset Itembox: Tilesets may now include any combination of object types.
- Tileset Itembox: You can "favorite" individual items in the tileset itemebox, making them appear in the "Custom" tab in the new Favorite tileset.
- Tileset Itembox: You can now search the tileset itembox for any item, based on name, ID or description.
- Tileset Itembox: You can now right-click items in the tileset itembox to copy their graphics into your custom folders, just like with the Level Itembox.
- Tileset Itembox: World map tilesets no longer show up in levels. Level tilesets no longer show up on the world map.
- Tileset Itembox: Adjusted tileset layouts.
- Tileset Itembox: Adjusted colors to look better across different editor themes.
- Tileset Editor: Adjusted UI to improve workflow.
- Tileset Editor: Search now automatically searches for name and ID.
- Tileset Editor: New tilesets get created at 5x5 size.
- Tileset Editor: You can now save a tileset as a global tileset, causing it to show up regardless of level or episode.
- Placing: Holding "CTRL" while painting disables the object overlap prevention mechanism, allowing you to overlap blocks and BGOs for decorating your levels more easily.
- Placing: You can now set the opacity of locked level item types via the application settings.
- Placing: Right-clicking a layer now gives you the option to select all non-locked items on that layer.
- Placing: Placing levels/path items on the map editor now warns you if they overlap.
- Section settings: Pressing the "Create custom" button next to the selected background in Section Settings now copies the basegame background, instead of an empty template.
- Toolbar: Made the editor toolbar (top buttons) more modular by splitting them into more groups.
- Toolbar: Replaced grid align options with a single button to select the desired grid size via a context menu.
- Toolbar: Due to performance issues, the default state for editor animations has been temporarily changed to "disabled".
- Toolbar: The section buttons now have a different icon depending on whether a section is initialized or not.
- Music selection: Added a search box.
- Level loading: To prevent accidental cancellation, the "Abort" button has turned into the window close button.
-
Script
- Added onWarp(warp, player), onWarpEnter(event, warp, player), and onPostWarpEnter(warp, player) events.
NOTE: onWarpEnter is before the warp occurs and may be canceled. onPostWarpEnter is also before the warp occurs, but only if it was not cancelled. onWarp is after the warp finishes.
- Added onNPCCollect(event, npc, player) and onPostNPCCollect(npc, player) events.
NOTE: onNPCCollect is before the NPC is collected and may be canceled. onPostNPCCollect is also before, but only if it was not cancelled. These also deprecate npcManager.collected.
- Added onBlockRemove(event, block) and onPostBlockRemove(block) events.
NOTE: onBlockRemove is before the block is removed or deleted and may be canceled. onPostBlockRemove is also before, but only if it was not cancelled.
- Added onPOW(event) and onPostPOW() events.
NOTE: onPOW is before the 'pow' effect and may be canceled. onPostPOW is also before, but only if it was not cancelled.
- Added onBeatWarn(beepsLeft) event for blinking blocks.
- Added onSectionChange(sectionIdx, playerIdx) which is invoked when a player section changes.
- Added onControllerButtonRelease, onKeyboardKeyPress and onKeyboardKeyRelease events.
- Added onNPCTransform(npc, oldId, reason) when the ID of a NPC changes.
- Added onMouseButtonEvent(button, state, x, y) and onMouseWheelEvent(wheelAxis, delta, x, y) for getting mouse inputs.
- Added getCursorPosition() (returns 2 values for x and y in framebuffer space, so NaN if the mouse is outside of the window) and setCursor(image, xHotspot, yHotspot) for cursor positioning and visibility (nil resets to default, false hides).
- Added onNPCPOWHit(event, npc, powtype), onPostNPCPOWHit(npc, powtype), onBlockPOWHit(event, block, powtype) and onPostBlockPOWHit(block powtype) events.
NOTE: All these events happen during a POW effect after onPOW and onPostPOW. These functions are called when a block or NPC is being hit by a POW effect. The "Post" versions of these functions only happen if the event was not cancelled.
- Added Block:hitWithoutPlayer, to hit a block without having a player as a culprit.
NOTE: Even when called Block:hit without a player, it will default to the first player.
- Added Block:bump, to trigger the bump animation without hitting it. Note that this will hit anything on top of the block.
- Added Block:setSize, which sets the width/height of the block while correctly setting the block array unsorted flag.
- Added NPC:collect(player) call, to force a collectable NPC to be collected by a player. The player argument is optional and if unspecified will be player 1.
- Added Checkpoint.getActiveIndex() that returns -1 if no checkpoint is collected.
- Fixed Block:transform not setting the block array unsorted flag when necessary, sometimes causing collision issues.
- Fixed onKeyboardPressDirect not working.
- Added Audio.MusicRewind() - Rewinds the current track to the start
- Added Audio.MusicGetInstChannelCount() - Gets the number of instrument channels in the current track (tracker files)
- Added Audio.MusicInstChannelMute(id) - Mutes the instrument channel with index id (tracker files)
- Added Audio.MusicInstChannelUnmute(id) - Unmutes the instrument channel with index id (tracker files)
- Added Audio.MusicGetTempo() - Gets the tempo of the current track, -1 if unsupported
- Added Audio.MusicSetTempo(val) - Sets the tempo of the current track
- Added Audio.MusicGetPitch() - Gets the pitch of the current track, -1 if unsupported
- Added Audio.MusicSetPitch(val) - Sets the pitch of the current track
- Added Audio.MusicGetSpeed() - Gets the speed of the current track, -1 if unsupported
- Added Audio.MusicSetSpeed(val) - Sets the speed of the current track (OGG is supported, too)
- Added Audio.MixedSFXVolume() for setting and getting the overall volume of sound effects (including legacy-smbx-emitted)
- Expanded Audio.MusicChange with extra parameters. Example: Audio.MusicChange(0, "_OST/File Select.ogg|m1;c1;r11"). m1 = enables multi track support; c1 = the number of channels (max is 8); r11 = the number of tracks (11 here meaning 11 mono channels)
- Fixed a computer-dependent bug in Audio.MusicClock()
- Added Graphics.redirectCameraFB(framebuffer, startPriority, endPriority) for moving camera rendering to another framebuffer for a specific priority range.
- Added Graphics.getMainFramebufferSize() which returns the size of the main framebuffer.
- Added Graphics.setMainFramebufferSize(width, height) which can be used to resize the main framebuffer.
- Added onFramebufferResize(width, height) event.
- Added LegacyRNG.generateNumber(), LegacyRNG.getLastGeneratedNumber(), and LegacyRNG.seed for manipulating SMBX 1.3 RNG-dependent code.
- Fixed Yoshi-related edge cases for Layer.isPaused().
- Added field collisionGroup - Setting this string variable (by default) causes the Block/NPC/Player to ignore collision with all other objects that share the same collisionGroup
- Added "Misc.groupsCollide[...][...] = true/false" to allow interaction between different collision groups to be enabled or disabled. Use an empty string for the default collision group.
- REPLACED clearpipe NPC ID maps/groups with the useclearpipe and clearpipegroup NPC config flags. Registering via clearpipe.registerNPC still works, simply sets the NPC config flag. However, if you accessed the clearpipe NPC's ID maps directly, you must update your code to use NPC.CLEARPIPE and NPC.CLEARPIPE_MAP instead.
- Clear Pipe key events now use rawKeys instead of keys. Added a function to allow an input to be overridden from user code.
- Added a data table to players, similar to NPCs and blocks.
- Added Defines.jumpspeed for modifying the player's rising speed during a jump.
- Added Defines.jumpheight_player for modifying the bounce response when bouncing off another player's head.
- Added Defines.jumpheight_noteblock for modifying the bounce response when bouncing off a note block.
- Added Defines.jumpheight_greenspring for modifying the bounce response when bouncing off a green spring.
- Added Defines.pswitch_duration for modifying the duration of a P-Switch.
- Added Defines.npc_despawntimer for modifying the duration of the despawn timer for most NPCs.
- Added Defines.npc_throwfriendlytimer for modifying the time during which thrown NPCs cannot harm the throwing player.
- Added Defines.npc_walkerspeed for modifying the speed of NPCs with iswalker set.
- Added Defines.npc_mushroomspeed for modifying the speed Mushroom powerups.
- Added Defines.weak_lava to allow changing lava behaviour to harm rather than kill. Note that this mode makes lava solid (similar to when invincible via cheats), and loses 6px of leeway on top collisions that regular lava has.
- Added NPC.ai6 variable (acts as a shortcut for offset 0x118).
- Added NPC.forcedState variable (acts as a shortcut for offset 0x138).
- Added NPC.forcedCounter1 variable (acts as a shortcut for offset 0x13C).
- Added NPC.forcedCounter2 variable (acts as a shortcut for offset 0x144).
- Added NPC.heldIndex/NPC.heldPlayer variable (acts as a shortcut for offset 0x12C).
- Added NPC.isProjectile variable (acts as a shortcut for offset 0x136).
- Added NPCFORCEDSTATE constants.
- Added POWERUP constants, as an alias to the PLAYER constants.
- Added Shader.fromSource and Shader.fromFile, to simplify creation and compilation of Shader objects.
- Added support for SFX.listener to accept values between 0 and 1 to blend the listening position between the player's location (0) and the centre of the camera (1).
- Added support for textplus.print to accept custom tags via customTags and autoTagList arguments.
- Added < i > tag to textplus, allowing for italic text.
- Added support for io functions to read and write binary files.
- Added math.fract, math.wrap, and math.pingpong.
- NPC.COIN, NPC.WEIGHT lists are now available.
- Misc.isPaused() is now true when an event slowly slides the camera into place.
- Misc.dialog no longer crashes when called to draw ffi objects (players, npcs, etc.).
- Added Misc.setDialogDepth() to control how shallow/deep Misc.dialog and Misc.richDialog printouts are.
- Added Misc.monitor and Misc.stopMonitoring for tracking variables on custom objects for debugging purposes.
- Added setWindowTitle and Misc.setWindowIcon functions.
- Added Misc.getLoadingFinished() to load screen scripts.
- Added Misc.isGifRecording() to check if the game is recording a gif
- Added Misc.setBeepCount to configure the timing and amount of beeps before a blinking block state change.
- Misc.SetEngineTPS and related functions will no longer affect the duration of lunatime calculations unless a second argument is provided, and by default functions like lunatime.toSeconds and lunatime.time will assume the tick rate is the default 15.6ms.
- Misc.SetNominalTPS, Misc.SetNominalTickDuration, and Misc.SetNominalSpeed have been added, which adjust the tick rate of lunatime calculations only. The nominal tick rate should not be modified after the level starts, as it could break timing calculations.
- Misc.SetEngineTPS and related functions now accept a second argument. Supplying true as the second argument will also adjust the nominal tick rate to match the engine tick rate. This should only be done if the tick rate is set at the start of the game.
- Fixed a bug where Vector2's were not correctly converted to Vector4's when cast.
- Misc.doPOW now takes extra arguments for powtype and radius. Defaults to the old behaviour.
- Added handycam.trauma for a fancier earthquake-like effect, and handycam.rotationalTrauma for solely rotational shake.
- currencies.lua (formerly anothercurrency.lua) can be used to add different kinds of money to your levels and episodes.
- lakitushop.lua can be used as a quick to set up shop system (supports currencies).
- Fixed a bug where player:render would not display the correct graphics under certain conditions.
- Fixed a bug where Effects would be inaccessible from Lua due to a codependency.
- Fixed a bug where the opacity field of effects would have no effect.
- Fixed a bug where calling Achievement:reset() would cause an error.
- Fixed a bug in Particles where calling Ribbon:Break() would not function correctly.
- It is now possible to supply uniforms to sizable.drawSizable.
-
Lib3d
- Added lib3d.fogColor, allowing for a global distance fog effect. Opacity manages the strength of the fog.
- Added USE_FOG as a boolean material macro for lib3d, for enabling or disabling global fog (off by default).
- Added FOG as a function macro for lib3d, for customising the appearance of global fog (format takes a single depth argument and returns a value between 0 and 1 used to blend the fog color into the scene).
- Added ALPHA_DITHER and lib3d.macro.ALPHA_DITHER to lib3d, allowing depth-enabled dither transparency.
- Added vertexdata.depthOffset field to Vertex Shaders, allowing for objects to have their effective render depth shifted forward or backward.
- Added Camera3D:project(v), which functions identically to lib3d.project(cam, v).
- Fixed a bug where vertex shaders would not operate correctly under certain conditions.
- Fixed a bug where tangent vectors would not be computed correctly under certain conditions, leading to lighting bugs.
- Improved Lib3D clipping planes to avoid rendering bugs when objects were too far offscreen.
- Added support for .obj vertex colors.
-
Misc
- Fixed update checks for the launcher: They now work with https websites.
- Update checks for episodes now no longer do a pop-up but instead show a banner notification, like the SMBX2 banner.
- Episode version numbers are now visible on the launcher.
- timer.lua's toggle function has been split into 2 functions: while toggle is unchanged, it is now recommended to be used without args. For enforcing a timer active state, use the new timer.setActive(activeValue)
- Added a pride flag to the loading screen. LGBTQIA+ Rights!
- Fixed a bug where the active code viewer (F2) would not display correctly.
- Fixed a bug where Quaternions were not properly deserialised when saved to a file using serializer.lua.
- Fixed a bug where Darkness effects would cause a crash in multiplayer under certain conditions.
- All darkness lights now support a minradius field.
- Fixed a bug where collisions between Rect colliders and Tri colliders would cause an error.
- Fixed a bug where some collectable NPCs would, in rare cases, vanish when touched rather than properly being collected.
- Improvements to _templates folder and editor descriptions.
- Portal warps now end the level with the Warp Exit victory flag.
- Textplus font 1 now features a full character set.
- Fix a bug related to capturing with a capture buffer during a skipped frame.
- Background class can be used now instead of loading paralx2 and accessing level background information.
- Added verletrope as a new standard library for simulating verlet rope physics (used by Chain Chomps).
- Updated SDL2 and SDL Mixer X version.
- Added render thread frame interval to profiler.