Beta 4 Changelog - SMBX2 (2024)

Released January 2020

This update fixes several issues with the SMBX2 Beta 4 preview builds and adds additional functionality.

This update includes changes that may cause behavioural inconsistencies with levels made on preview builds or Beta 3.

This version is the next stable release of SMBX2 and is sufficient for releasing episodes.

We will be developing proper documentation throughout the coming months. The docs button at the top will redirect to the new documentation once it's available.

If you have any questions, please contact us on the Codehaus Discord server.

Updates

Yellow Highlighted changes may impact how previously created levels behave!

Orange Highlighted changes denote behaviour that may still persist despite our fixes. Please report back if you encouter these!

Patch 4 Hotfix (2021-04-30)

  • Engine
    • Fix a long-standing bug where deallocated CaptureBuffer Lua objects could sometimes cause flicker.
  • NPCs
    • Drybones: Fix a crash which could occur if you had timestop active, bopped a dry bones, and switched sections.
    • Snake Block: Can no longer be eaten by Yoshi.
    • Walking Rinka Gun: Fix a few bugs, most notable it mistakenly instantly killing things which didn't use to be the case.
    • Foo: Clouds no longer exist forever, and no longer have the incorrect offset when set to face right.
    • Misc: NPCs below ID 293 that featured light effects by default now correctly display their light effects.
    • Monitors: Fixed a bug in monitors that allowed exceeding 100 coins
    • Boohemoth: Fixed spinjump related jank
    • Magikoopa Magic: No longer crashes the game when entering clear pipes.
  • Characters
    • Broadsword: No longer gets stuck in clear pipe cannons.
  • Costumes
    • Updated the SMW costume pack from MrDoubleA.
  • Launcher
    • Updated translations.
  • Editor
    • Fixed the logic of initial open/save paths while opening any file dialogs (in simple words: open SMBX2's worlds directory than data/PGE/worlds to not confuse users).
    • Fixed the missing "modified" level file flag when the custom music path was changed.
    • Physical environment zones now have the taller hit-border to make the box is selected by the mouse easier (made by the request to simplify the selection of them).
    • Added the support for custom WOPL bank files at libADLMIDI synthesizer.
    • Added the support for custom WOPN bank files at libOPNMIDI synthesizer.
    • Added the support for the FluidSynth at MixerX library.
    • Updated translations.
    • Fixed the Calibrator's frame data compatibility with SMBX2 that requires all frames present in the calibration file.
  • Scripting
    • Improved compatibility of lib3d's shaders with some computers.
    • Fixed a corner-case bug in textplus for the case of a generated glDraw command having no verticies, which would error when the high quality upscaling is enabled. Only known to occur if the text printed only contains unprintable characters.
    • Fixed some clipping problems in lib3d.
    • Fixed a typo that made shader arguments for parallaxing backgrounds unusable.
    • Particle emitters now have an isValid field to check if they are destroyed or not.
    • Added Misc.coins() which can be called without arguments to query coin count, or called like Misc.coins(coinsToAdd, withSound) where "coinsToAdd" is a number of coins to add, and "withSound" being a boolean indicating whether to play the usual sound.
    • Fixed a bug where passing a table to BGO.iterate would cause an error.

Patch 4 (2021-04-08)

  • Engine
    • Much better upscaling when using large window sizes or fullscreen.
    • Better window resizing behaviour. Preserves aspect ratio, and snaps to native resolution when within 5%. Hold the Ctrl key to allow free resizing without preserved aspect ratio.
    • Fix rare graphical glitch from capture buffer deallocation.
    • Reduce tendency of the window to be unresponsive during initial loading.
    • Fix a crash that can occur in some corner case instances of saving while a character with an ID > 10
  • Editor
    • Switched to using a 64-bit build of the editor.
    • Some assorted fixes.
  • Meta
    • Fixed un-setting the waitinginthesky cheat.
  • NPCs
    • Added a new NPC type: Spawners. Spawner-type NPCs trigger a behaviour when coming onscreen.
    • Added: Boohemoth Spawner. Spawns a Boohemoth travelling in a chosen direction. Causes an autoscrolling behaviour. Currently only singleplayer compatible.
    • Added: Cheep Cheep Spawner. Automatically generates cheep cheeps to spawn at the screen edges.
    • Added: Bullet Bill Spawner. Automatically generates bullet bills to spawn at the screen edges.
    • Added: Coin Snake NPC from Super Mario World.
    • Baby Yoshi (Cyan, Pink): The spawned NPC is now spawned to the "Spawned NPCs" layer.
    • Berries: Rewards are now spawned to the "Spawned NPCs" layer.
    • Big Goombas (Splitters): NPCs spawned after splitting now inherit the "No More Objects In Layer" event.
    • Billy Gun: When using Extra Settings, Bullet Bills are now spawned to the "Spawned NPCs" layer.
    • Boo Circle: Boo Circles propagate their "Death" and "No More Objects In Layer" events to the spawned Boos on the ring.
    • Bullet Bill Blaster: When using Extra Settings, Bullet Bills are now spawned to the "Spawned NPCs" layer.
    • Dino Rhino: When spawning the Dino Torch, the death event is cancelled and instead given to the Dino Torch.
    • Dino Torch: Now inherits the Rhino's "No More Objects In Layer" event.
    • Fire Snake: Trails now inherit the "No More Objects In Layer" event.
    • Fry Guy: When Fry Guy is defeated and splits into 4, the 4 Sizzle Guys now inherit the Fry Guy's "No More Objects in Layer" event. The "Death" event can still be used to poll for the main Guy's death.
    • Megashroom: Fixed a bug where Megashrooms landing on conveyors or moving NPCs would cause a crash from speed overflow.
    • Mutant Vines: Fixed a bug where mutant vines would attach to semisolid player and NPC filter blocks.
    • Rocky Wrench: Wrenches are now spawned to the "Spawned NPCs" layer.
    • Rocky Wrench: Wrenches now follow the Rocky Wrench while held.
    • Rotating Bill Blaster: The ID of the fired NPC is now configurable in-editor.
    • Rotating Bill Blaster Base: Fixed the rotation animation.
    • Splittin' Chuck: Split Chucks are now spawned to the original Chuck's layer and inherit the "No More Objects In Layer" event.
    • Wiggler: Trails now inherit the "No More Objects In Layer" event.
  • NPC Config
    • Diggin' Chuck: projectileid - Allows the ID of the spawned rock to be adjusted.
    • Cloud Drops: range - Allows the travelling distance to be adjusted.
    • Lineguide properties can now be set in npc-n.txt files.
  • Scripting
    • Level.winState() is renamed to Level.endState() to match the LEVEL_END_STATE_* enum values. The old function name still works but is no longer preferred.
    • Level.exit(winType) now clears checkpoint state when existing when the current winType is > 0
    • Added Level.finish(endState, delayed), which finishes a level using the normal level end process associated with a particular LEVEL_END_STATE_* enum. This may cause saving the game in some cases. Both arguments are optional. If no endState is provided, one that is already set will be used. If 'delayed' is specified as true, the full end state animation will play out, instead of skipping to the end.
    • Added Level.winTypeToEndState(winType) for mapping LEVEL_WIN_TYPE_* enums to LEVEL_END_STATE_* enums
    • Added Level.endStateToWinType(endState) for mapping LEVEL_END_STATE_* enums to LEVEL_WIN_TYPE_* enums
    • Graphics.glDraw now supports a 'linearFiltered' option, causing the specified texture to be handled with bilinear filtering.
    • Handycam zoom now uses a cleaner upscaling method that won't cause wobble/shimmer of row/column sizes.
    • Added getEffectSpawners(id) and getEffectObjects(id) functions to bettereffects.lua
    • Fix timer.toggle(newValue) when a new value is specified)
    • Various small lib3d and transform bugfixes/enhancements.
    • Added setTarget, getTarget, and clearScene to map3d
    • Fixed a bug in Routine that caused aborted coroutines to leak memory.
    • The textplus img tag now accepts optional height/width/maxWidth/maxHeight fields. By default values are a number of pixels. Values can also be specified as a % of maxWidth of the layout (defaulting to 800 when no maximum width is set). In addition, values may be specified in 'em', which is the height of a line with current font and yscale. Aspect ratio will be preserved unless both height/width are given at the same time.
    • The textplus img tag now accepts a "smooth=true" field to turn on linear filtering for an image.
    • Textplus can now use a cleaner upscaling method. This is used by default when printing at a non-integer location, with non-integer font scales, or with a 'wave' effect. You can force this enhanced upscaling by calling textplus.render with a smooth=true argument, and you can force it to be disabled with a smooth=false argument.
    • Minor fixes to Block class handling block invalidation of deleted blocks.
    • Fixed some small SaveData/GameData bugs and also allow ipairs/pairs to iterate properly on SaveData/GameData tables
    • Fixed blockutils.getBlockSection which was poorly implemented and didn't do what it suggested. blockutils.getClosestPlayerSection now does what that used to, and a more robust getBlockSection now exists that can operate even when a player is not in the block's section.

Patch 3 Hotfix (2020-09-07)

  • Meta
    • Fix bug preventing Mario Challenge from working properly.
    • Fixed a bug where the camera would be locked in place during frame advance mode.
    • Fix some cheats causing errors on the overworld.
    • Add some shader object caching, to reduce excess shaders being generated in situations like darkness enabled on multiple sections.
    • Improved compatibility of 'gameboy dither' shader effect with older graphics cards.
  • NPCs
    • Rocky Wrench: Fixed a crash when the NPC gets frozen while holding a wrench.
    • Megashroom: Fix bug where it would break warps.
    • Hidden Container: Re-added invisible image to take care of an inconsistency introduced in Patch 2.
  • Editor
    • Level properties: The timer can now optionally trigger a 'Level Timer - End' event instead of killing players.
    • Updated editor update scripts
  • Scripting
    • Handycam now renders later, fixing a bug where parallaxing backgrounds would incorrectly render while handycam zoom is enabled.
    • Added constants for score, mounts, forced player state, level end state, level win type, boot colors and yoshi colors. They are documented in the "Constants" section of the documentation. https://docs.codehaus.moe/
    • Added aliases HARM_TYPE_VANISH and POWERUP_TANOOKI for mislabeled constants HARM_TYPE_OFFSCREEN and POWERUP_TANOOKIE.
    • Added alias Defines.cheat_flamethrower for Defines.cheat_flamerthrower.
    • Add Misc.exitEngine()
    • Allow passing level win type to Level.exit()

Patch 3 (2020-08-31)

  • Engine
    • Reduce risk of audio related errors on some systems with automatic fallback through supported audio driver backends.
    • Add a warning when loading a level that exceeds limits, or (if in test mode) approach the limits.
    • Fix a path validation security bug.
    • Sound file replacements will now be loaded even if the filetype doesn't match what's written in sounds.ini (though will prioritize files that do match the given filetype).
    • Filenames given in sounds.ini files no longer require filetype extensions to be explicitly declared.
    • Should no longer crash when the worlds folder contains >100 episodes.
    • Disabled 38A feature warning for now because it has false alarms more often than it helped. Format warning is still present.
  • Blocks
    • Added: Non-solid Star Block. A new block for Kirby Bomb Block chain reactions. It can be used to continue chain reactions without impeding on the movement of enemies and players.
    • Reworked: Sloped conveyors and semisolid conveyors are now less glitchy. Removed their "downwards" and "needscheck" block config flags and slightly increased speed.
    • Kirby Bomb Blocks: The chain reaction timer is now configurable through chainreaction.lua
    • Link switch blocks: Fix a long-standing 1.3 oversight where they did not 'bump' when activated.
    • Shared Storage Blocks: Fixed a bug where shared storage blocks would sometimes display empty when filled.
    • Block frame/timer now resets upon level load, so leftover frame changes from Lua do not persist untentionally.
  • Block Config
    • Added ediblebyvine: Causes the block to be edible by mutant vines.
  • NPCs
    • Added: Frightlight. An enemy similar in behaviour to the Big Boo, with a light source attached.
    • Arrow Lifts: Fixed a bug that caused global extra settings to error when they spawned ghost platforms.
    • Billy Gun: New editor config: Billy Guns now support some level of customisation over what they fire and how frequently.
    • Bullet Bill Blaster: New editor config: Bullet Bill Blasters now support some level of customisation over what they fire and how frequently.
    • Buster Beetles: Fixed a bug where npcs they are picking up would be stuck friendly if the beetle was killed during the pick up animation.
    • Donut Block: Improved standing detection.
    • Monty Moles: Fixed a bug where Monty Moles would always display the "on ground" telegraph animation if placed anywhere on a sizable.
    • Mutant Vines: Fixed a bug where they would eat every block regardless of settings.
    • Snake Blocks: Now stop moving when on hidden layers, and do not continue to spawn or eat blocks.
    • Reznor Fireballs: Now freely pick an appropriate direction when spawned with direction 0.
    • Rope: Fixed a bug where players were falling off ropes if holding on at the very top.
    • Shells: New editor config: Shells can now be placed already spinning.
    • Star Coins: Fixed Star Coins not saving when exiting via offscreen exit or warp exit.
    • Stretch: Fixed the "Reappear" flag for Stretches not working.
    • Uncle Broadsword's Boomerang: No longer collides with friendly NPCs.
    • Fixed bug in layer attachment chaining that was introduced by the patch to increase the layer limit in beta 4.
    • Fixed a bug where most new NPCs which move with layers would desync from NPC-attached moving layers, in conditions where standard moving layers pause (NPC-attached moving layers never pause, and many things were not accounting for this properly).
    • Fixed a bug where many new NPCs would not account for the speed config in their npc.txt files properly (some may still not respond correctly).
  • NPC Config
    • Added collideswhenattached: Causes a NPC to not lose collision with blocks when attached to line guides. This reverts to more pre-patch2 behaviour.
    • Added luahandlesspeed: Causes built-in SMBX code to ignore the 'speed' config, in favor of letting an NPC's Lua code handle it.
    • Fixed a bug where the staticdirection NPC config field would not be reset to defaults between loads correctly.
    • Added eatsblocks to mutant vine heads: Prevents the consumption of semisolids when false. True by default.
  • Test Mode
    • Fixed a bug where the character display would sometimes render mounts incorrectly.
    • The console can now have its font size changed with Page Up/Page Sown. Alt+Home can reset the font size to default.
    • Added Frame Advance menu to the testing menu.
  • Characters
    • Mega Man can no longer pull up friendly or hidden patches of grass by sliding.
    • Wario can no longer initiate a ground pound while ducking, preventing a very easy to execute glitch.
  • Mario Challenge
    • Offscreen exits and warp exits now count as exits.
  • Editor
    • Phantos now use the NPC selector window to select their target ID.
    • The item search now has a "select all" button as well as "current section only" and "search in selection group" options.
    • Improvements to unused resources clean-up tool heuristics.
    • Added support for "npcsOrCoins" type itemSelect fields in extra settings.
  • Darkness
    • Fixed a bug where lights attached to objects would stay forever if the object was transformed to a new ID using Block:transform or NPC:transform.
    • Fixed a bug where darkness regions with boundary areas would be cropped out incorrectly in certain circ*mstances.
  • Fonts
    • Improved spacing on the textplus game title fonts.
  • World Map
    • Fixed a bug where the second player would not appear on the HUD in 2 player mode.
    • Fixed a bug where character selection wouldn't work if the player was set to an invalid character.
    • World map character selection can now cope with multiple instances of the same character.
    • Fixed a bug where SMBX2 characters could not be selected on the world map, even if no character filter was applied.
  • Scripting
    • Fixed a bug when raycasting against Rect Colliders, which caused the returned normals to be reversed.
    • Graphics.drawBox, Graphics.drawScreen, and Graphics.drawCircle now support sourceX, sourceY, sourceWidth, and sourceHeight arguments.
    • Graphics.drawBox and Graphics.drawCircle now support a rotation argument, measured in degrees. Graphics.drawBox also supports a centered argument, as a boolean.
    • Improved appearance of textplus font 5.
    • Added textplus font 9 (a 6px monospaced font).
    • Added pairs support for Player.rawKeys.
    • Rename layer.moving to layer.pauseDuringEffect which more accurately represents it's purpose. The field name is still accessible but deprecated.
    • Add layer:isPaused() which is like Layer.isPaused() except for a specific layer, because not all layer movement is paused by effects strictly speaking.
    • Fixed effect speed overrides. Added new variables for spawnerSpeedX and spawnerSpeedY if you want to move the effect spawner returned from Effect.spawn independently from the spawned effects. (for example for a moving effect that spawns debris over time)
    • Fixed a bug in Particles where the named argument versions of emitter:draw and ribbon:draw would cause an error.
    • Lib3d now contains a lib3d.macro table, which contains a set of useful macro constants when building materials (for example, lib3d.macro.ALPHA_CUTOFF).
    • Fixed a bug in Lib3d where supplying a file path directly to a mesh would fail.
    • Fixed a bug in Lib3d where certain .obj files would silenty fail to parse if they contained extra whitespace.
    • Misc.resolveSoundFile will now prioritize the given filetype if one was passed in.
    • Player:render now correctly draws to render targets if the player is Mega.
    • Fix bug introduced by Patch 2 which prevented NPC() and Block() constructors from working in npc-n.lua and block-n.lua files.
    • Fixed some bugs with achievements that prevented their locked icons from displaying correctly.
    • Added Section.musicPath, allowing easier access to a sections custom music path.
    • Added Section.music, which is the same as musicPath if custom music is playing, and otherwise equal to the music id number.
    • Add layerSpeedX/Y and extraSpeedX/Y fields to blocks, which can see the speed assigned by layer movement, and add an extra speed component which will be summed with that.
    • Fix bug where Misc.episodePath() could return the wrong value in a few scenarios. Most notably returning to the intro screen.
    • Added lightSource field to BGOs/Blocks/NPCs, which accesses the objects's light source (if it has one).
    • Adjusting block/npc/bgo config for lightoffsetx/y on the fly now updates light sources.

Patch 2 Hotfix (2020-05-14)

  • Engine
    • Tweak GIF recorder frame skipping to be more sensible for modified engine speed.
    • Improve warning when trying to load 38A level format. Also fix a case where a warp "enter event" string being set to [None] in .lvlx would falsely trip a warning.
    • Fix some bugs (crash or coins not turning back to blocks) related to p-switch state ending.
  • Editor
    • Include some translation updates for the editor.
  • Test Mode
    • Test mode console commands are now saved between level tests, so you can repeat console commands from previous tests by using the arrow keys.
  • Costumes
    • Fixed a bug that caused the SMW costumes to not function correctly in multiplayer.
  • Darkness
    • Fixed a bug where Darkness would produce a warning when Blocks or BGOs changed their light settings via .txt files.
  • Scripting
    • Added onBeatStateChange event, that runs when beat blocks switch states.
    • Fixed a bug which caused the noblockcollision extended NPC field to not properly be tracked as NPCs get rearranged.
    • Fixed a corner case where calling Misc.pause() from onCameraUpdate could cause one run of onDraw to be skipped after unpausing.
    • Add an optional boolean "atFrameEnd" argument to Misc.pause() to allow a pause that is deferred to end of frame as that can give more consistent results in some cases.
    • Fixed clearing of the "levelExitType" value passed to onExitLevel so it's always 0 when you don't beat the level even when restarting in test mode.

Patch 2 (2020-05-12)

  • Meta
    • Fixed a bug where, when testing, lvlx file features randomly went missing.
    • Eliminate a risk of alt-enter potentially causing a "form can't be moved or sized" error message.
    • Fixed a bug where LunaTester would fail to load on some computers.
    • The test mode pause menu now acts a little more sensible as far responding to pause button controls.
    • Improved window focus behaviour for test mode.
    • Dragging level files to LunaLoader.exe (or passing as a command line argument) now runs them in test mode.
    • Dragging world files to LunaLoader.exe (or passing as a command line argument) now runs them.
    • Fixed a bug where level-wide extra settings could carry over to a subsequently loaded level that had none.
    • .ini and .txt files now support comments by starting lines with either ; or #.
    • Fix test mode pause menu when player clone cheats are active ("player.rawKeys" was not reporting correctly in this case)
    • Sound effects can now be replaced by drop-in regardless of their file type.
    • The engine will now try to give proper errors for unsupported installation paths or episode paths, instead of crashing.
    • Unsupported episode folders in the worlds folder no longer crashes the engine.
  • Launcher
    • Fixed a bug where episodes with paths containing a period would not be correctly displayed in the launcher.
    • Fixed a problem where the launcher could not distinguish episode of the same name when passing information to the engine for which to load
  • Controllers
    • When a controller is recognized as a gamepad with known buttons, still allow unknown buttons to be used (Allows touchpad button on PS4 controllers to be usable)
    • Allow 32 button indicies to be usable (up from 15)
    • Add support for loading a "gamecontrollerdb.txt" file for supporting controllers where the built-in configuration is insufficiently flexible.
    • Fixed a mistake that caused controller input to be delayed by 1 frame (could also cause issues with overworld warps)
    • Added luna.ini configuration options to allow disabling controller battery reporting or rumble
    • Add support for using "hat 0" as a d-pad for unrecognized controller types, which should improve out-of-the-box controller compatibility.
  • Blocks
    • Added: Shared storage blocks for mounts and powerups (Misc -> Special)
    • Added: Slopes and semisolid for NPC filter block (Misc -> NPC Filter)
    • Added: Solid and semisolid passthrough blocks that let any player character through.
    • Reserve powerup blocks will no longer crash the game when empty.
    • Fixed a bug with synced switches.
    • Fixed a crash when a nitro switch was triggered by an exploding nitro block.
    • Make the NPC Pass-Through block less buggy when interacting with the player in some situations, such as when on a moving layer. (It has been switched from using "passthrough" whilst trying to recreate player collisions, to using the new "npcfilter" block config.)
    • Fixed blocks spawned with Lua not having default extra-settings set properly
  • Block Config
    • "playerfilter" block config flag is now configurable.
    • "playerfilter" value of -1 creates a player block that lets any player through.
    • Added "npcfilter" block config flag, which if set to -1 allows any NPC through, and any other non-zero value lets an NPC of the specified ID through.
  • NPCs
    • Added a spot light source NPC.
    • "Source"-NPCs like the light source NPC now have more precise grid snapping in the editor.
    • Intangible NPCs no longer destroy Nitros.
    • NPCs will no longer die when moving between moving ground layers. The fix to this SMBX 1.3 glitch can be disabled with "Misc.SetNPCDownwardClipFix(false)".
    • Smacked some more Wiggler crashes.
    • Stretches will now properly move down to the next viable ground when they find themselves stuck in midair.
    • Grabbing a megashroom while an NPC is held no longer crashes.
    • When loading .lvl files, NPCs are be shifted up by 0.01px to maintain compatibility with SMBX 1.3's level loading.
    • Tantrunts now correctly bounce off walls and will not bounce off the top of slopes.
    • Flurries now correctly bounce off walls and will not bounce off the top of slopes.
    • Snake blocks will no longer cause random blocks to disappear when a P-switch is activated.
    • Switch Platform generators no longer cause an error.
    • NPCs attached to line guides are no longer affected by block/npc collision, line guide attached NPCs to coexist better.
    • Fix handling default special data for some NPCs when reading very very old .lvl files.
    • Eeries now have nogravity set again, like was the case before beta 4, which can affect corner case interactions with Lua.
    • Score combos from NPCs killed by an explosion should be fixed, as well as relative order of explosion effect to any spawned score effects.
    • Fixed Fire Snakes crashing occasionally.
    • Fixed Skewers failing to extend at speeds of 8 or less.
    • Fixed Torpedo Ted spawners crashing when grabbed.
    • Fixed a bug where Reznor Fire aimed at the wrong place.
    • Blocks can now be registered (by ID) for mutant vine heads to eat.
    • Berries will no longer crash when mounting a Yoshi with supermario128 and related cheats active.
    • Wigglers no longer hurt you if you slide into them.
    • Giant Goombas no longer damage the player if you slide into them.
    • Fixed a bug where Grrrol's colliders would not always act reliably. Grrrols now use a box collider to match their square hitbox.
    • Fix problems with cherries for split-screen and crash with a certain cheat.
    • Fire Snake tails will no longer disappear if spawned from a generator that is then hidden.
    • Launch Barrels now behave more consistently with gfxwidth and gfxheight.
    • Rotary Lifts now behave more consistently with gfxwidth and gfxheight.
    • Overhauled Bumper-npc collision to be more reliable.
    • Bumpers will no longer go out of sync when on moving layers.
    • Bumpers will no longer kill NPCs thrown at them, allowing things like Fireballs to be properly reflected.
    • Many NPCs will no longer error when not assigned to a layer (can usually only happen via Lua).
    • Boo Circle controllers, Berries, Audio Sources, and Light Sources will no longer turn into coins when touching a level exit.
    • Dino Torch Fire will now properly move with the Dino Torch.
    • The Hidden Item Container NPC will no longer show up in-game for a frame. It can now also be made visible by means of using custom graphics.
    • Audio Source NPCs will no longer error when hiding the layer they are on.
    • Thwimps now always face the direction of their next jump if framestyle is set to 1.
    • Vertical cannons (NPC 535) now display Up/Down direction selector in editor, and also have staticdirection set to avoid flipping due to horizontal movement.
    • Horizontal cannons (NPC 536) now impart direction (not just speed) onto NPCs they spawn, so that some NPCs that require this now go the right direction when fired by this.
    • Fixed a bug where Megashrooms wouldn't account for the player's current costume when adjusting hitboxes, allowing players to clip through the floor sometimes.
    • Fixed a bug where the player could get stuck in a Launch Barrel if it was hidden while the player was inside it.
    • Lineguide ropes will now allow you to enter warps while climbing them.
    • Monty Moles will now jump past blocks when placed in front of them.
    • Added setting to Monty Mole to make it spawn chasing instead of hidden. (no effect on generated moles)
    • Added setting to Monty Mole to prevent it from spawning a hole. (no effect on Moles that spawn chasing)
    • Added setting to emerging Monty Moles to remove certain objects (Bumpers, Line guides, Vines, Checkpoints, Coins, Blocks) (off by default).
    • Added setting to emerging Monty Moles to ignore players and only be activated by a whistle (off by default).
    • Fixed alignment grid for red spring (NPC 457) and mega mole (NPC 164).
  • NPC Config
    • Added sinkmultiplier (NPC 363): Stabilizes the Sea Mine NPC and prevents it from falling out of the water. A value of 1 will restore the old behaviour.
    • Fixed nogliding config flag.
    • Added alwaysaim (NPC 414): Forces the Reznor Fire NPC to always focus on the player, regardless of starting direction. Defaults to false.
  • BGOs

    • Fixed an oversight which caused some incorrect layering of BGO rendering. Mostly this caused doors to render behind things incorrectly. BGO rendering should now be consistent with the editor as it was in MX3/PAL releases.
    • Line Guide Reversers will no longer affect NPCs while hidden.
    • BGOs now correctly fill with default settings when no changes were made to their extra data.
  • Characters
    • Players will no longer die/clip when bouncing off an NPC while overlapping a player filter block. The fix to this SMBX 1.3 glitch can be disabled with "Misc.SetPlayerFilterBounceFix(false)"
    • Players will no longer die/clip when moving between moving ground layers. The fix to this SMBX 1.3 glitch can be disabled with "Misc.SetPlayerDownwardClipFix(false)"
    • Klonoas interactions with some NPCs have been fixed, returning to behaviour more similar to SMBX2 MAGLX3.
    • Rosalina can now only spawn bombs with Alt Run when she has a hammer suit. This allows her to pick up items.
    • Replaced the previous SMW-Mario and SMW-Luigi costumes with more accurate implementations by MrDoubleA.
  • Backgrounds
    • Fixed a bug where certain backgrounds would display a second layer on top of other layers, breaking graphics in some levels.
    • Background2.txt files now support a "color" field, which tints the layer a specified color.
    • Backgrounds can no longer use the alpha channel in their fill-color field to show the vanilla background behind them. If you want to enhance vanilla backgrounds, copy their background2.txt files from data/config/backgrounds.
  • Explosions
    • Fixed a bug where Peach's bombs would still hurt the player in .lvlx files.
  • World Map
    • Fixed a bug preventing world map character filters from being applied.
    • Overworld tiles now have default size set based on image size.
  • Mario Challenge
    • Fixed a bug preventing shuffle mode from switching characters on death.
  • Editor
    • Fixed lag issues in unsaved levels.
    • BPM now uses 2 decimal places.
    • Fixed maximum light count.
    • Darkness lights now use additive lighting by default. Lights brighter than 1 will produce a glow effect when in a dark section.
    • Dark sections can now have their ambient light set to white to retain additive glowing even without a "darkness" effect.
    • Added sigmoid falloff curve to darkness, which produces a soft-edged solid circle of light.
    • Fix mistake in player calibrator that caused a field to no longer be written to files which SMBX2 depended on when loading character ini files
    • Dark sections using Hard, Stepped, or Inverse Square Stepped falloff functions have had their light radius increased to match other falloff types.
    • Crates, Grafs, and Eeries now use mutli-line text boxes for their behaviour fields, and their example fields are now read-only.
    • Fix bug that can cause NPCs without contents or special values to get improperly saved with them set if they were placed after placing NPCs with these set.
    • The npc-*.txt editor now preserves settings it does not recognize instead of removing them, since it doesn't recognize all valid settings.
    • Fixed a bug to do with erasing locked items in world maps.
    • The grid display now remains narrow regardless of zoom level.
    • A "Show camera grid" option was added to the view menu, to allow visualizing screens worth of a level easier.
    • Zoom In now uses the keyboard shortcut Ctrl++, rather than the previous Ctrl+Shift++. Reset Zoom now uses the keyboard shortcut Ctrl+0, rather than the previous Ctrl+=.
    • Fixed the "return the corner" buttons for the case of non-100% zoom.
  • Scripting
    • Update LunaJIT version to incorporate minor new bugfixes.
    • Made various OpenGL constants accessible from lua. They can be found in ffi_graphics.lua (until the new documentation is ready).
    • Fixed registration bugs related to sizeables and semisolids.
    • Fixed a bug with player.keys.
    • Misc.score() can be used to retrieve the current score.
    • Player:render{} now supports render targets.
    • Misc.beatOffset can now be used to offset the beat timer by a given number of seconds.
    • NPC objects now have a 'noblockcollision' field, which acts like the NPC config by the same name, except it can be dynamically set per-npc. This field is or-ed with the per-id config.
    • Routine's measurement of real-time such as from "Routine.deltaTime" is more accurate now, no longer limited to 1ms resolution.
    • Fix error when setting parent transform of a Sprite object to nil
    • Add score multiplier as an optional third argument to NPC:harm(), and return a potentially updated value for the multiplier.
    • Fix location of certain effect generation casued by NPC:harm.
    • HUDOverride.sprites now returns an image object in all cases. This restores some compatibility with pre-beta4 versions in some corner cases.
    • Explosions registered in custom NPCs will now work.
    • Fixed a bug that made nested #if conditions in shaders sometimes fail to compile properly.
    • Fixed bug in Player:isInvincible().
    • Graphics.loadImage now supports JPEG images again (it used to a long time ago, and it was added back now for compatibility).
    • Fix the legacy transparent color support to improve compatibility with very old Lua and Autocode.
    • Fixed some issues with legacy cinematx support (note, still not recommended for new use of course).
    • Added lib3d.Plane, which allows for a subdivided plane to be constructued.
    • Added lib3d.Cylinder, which allows for a cylindrical object to be constructed.
    • Spheres and Cylinders in lib3d now support an optional "smoothnormals" argument (true by default), which can disable edge smoothing.
    • Meshes in lib3d now support a table of materials, which allows for multi-pass rendering.
    • Sizables' "drawSizable" function should no longer error without a color argument supplied.
    • Fixed a bug with Effect.getIntersecting. Correct behaviour used to be mapped to Effect.getintersecting instead due to a typo. This has now been corrected.
    • Player:setFrame and related animation functions are now processed later so that they apply immediately if used in onDraw.
    • The .obj file reader used by lib3d now supports certain malformed .obj files, which some modelling programs produced.
    • Fix exitSpeedX/exitSpeedY declerations for the Warp class, as they were broken.
    • BGO.iterate, BGO.iterateIntersecting, BGO.getByFilterMap, and BGO.iterateByFilterMap were added.
    • BGO:transform was added.
    • Light data for BGOs is now stored in their data table.
    • Lights will now update on existing NPCs, Blocks, and BGOs when their configs are changed.
    • Added onNPCConfigChange, onBlockConfigChange, and onBGOConfigChange. The arguments are: id, key, newvalue, oldvalue.
    • The number of ticks per second can now be manipulated by Misc.SetEngineTickDuration, Misc.SetEngineTPS, and Misc.SetEngineSpeed. These respectivly accept either a duration in milliseconds, a frequency in Hz, and a scale factor relative to default speed. The current values can be retrieved with Misc.GetEngineTickDuration, Misc.GetEngineTPS, and Misc.GetEngineSpeed functions.
    • Added Colliders.Rect, which is similar to Colliders.Box, but allows the collider to be rotated by either setting the "rotation" property or calling collider:rotate(angle).
    • Colliders have had their type strings changed. Box colliders now have the type "BoxCollider", circle colliders now use "CircleCollider", etc.
    • Fixed a bug where Misc.dialog could misbehave and error when some unusual tables are given as inputs and mistaken to be lists.
    • From npc-*.lua files it is now possible to use NPC.registerEvent(...) in place of npcManager.registerEvent(NPC_ID, ...)
    • From block-*.lua files it is now possible to use Block.registerEvent(...) in place of blockManager.registerEvent(BLOCK_ID, ...)
    • Added onPlayerKill(eventObj, playerObj) and onPlayerHarm(eventObj, playerObj) events which can be cancelled. Corresponding onPostPlayerKill/onPostPlayerHarm which cannot be cancelled are also added.
    • Lib3d now supports a TONEMAP macro (1 or 0) in materials, which can enable or disable the tonemapper.
    • Lib3d's UNLIT macro now displays correct colors.
    • Added Misc.resolveSoundFile, which can resolve audio files automatically, without a file extension provided.
    • Added warnings if calling various functions to get game entities (i.e. Layer.get or NPC.get) before onStart, since the level isn't really loaded yet and it wouldn't behave as expected.
    • Added Section.getFromCoords and Section.getIdxFromCoords functions, to get section based on level coordinates. Both accept either (x, y), (x, y, w, h), or any object or table with x/y/width/height fields.
    • When using NPC.spawn the section argument is now optional.
    • NPC objects now have a sectionObj field to match how Player objects do.
    • Add teleport(x, y, bottomCenterAligned) method to the Player class. The 'bottomCenterAligned' argument is optional and false by default. When false the coordinates refer to the top-left of the character, but if specified as true the coordinates represent the bottom-center of the character.
    • Added lib3d.dualCamera, which is set to true by default. When enabled, the default Lib3d camera will render a "front" and "back" section, allowing the 2D scene to "slot" between them. When disabled, the default camera will render behind the main scene regardless of depth.
    • Added io.readFile(path) which returns the contents of the file at the path, or nil if the file could not be opened. Note that this read is cached between level loads for better performance, and that this cache is automatically cleared upon filesystem write.
    • Added io.readFileLines(path) which returns a table of lines in file at the path, or nil if the file could not be opened. Note that this read is cached between level loads for better performance, and that this cache is automatically cleared upon filesystem write.
    • Misc.resolveFile() now passes absolute paths through unchanged.
    • Added support for complex number mathematics via math.complex and math.i.
    • Added math.e as a shorthand for math.exp(1).
    • The onExitLevel event now passed an "levelExitType" argument. Values represent the level exit type as seed in the world map editor (0=none, 1=card roulette, 2=boss defeat, 3=walk offscreen, 4=keyhole exit, 5=crystal sphere, 6=exit by warp/door, 7=star, 8=goal tape)

Patch 1 (2020-02-11)

  • Meta
    • Improved load times (especially on all loads past the initial one each session).
    • Improved gif recorder performance.
    • Improved Test Mode Menu performance.
    • Fixed an error where the game would constantly print debug messages due to a missing logs directory.
    • Fixed a bug where music playback sometimes failed to work on the overworld.
    • Fixed a bug where autostart.ini would prevent the game from loading at all.
    • Layers set in motion by Lua will now pause properly, preventing desyncs in movement loops.
    • Attempted to fix an issue where sometimes extra- and section-settings were ignored in random editor sessions. Please report back if this persists.
    • Fixed an error relating to the use of gl_Vertex on Intel GPUs.
    • Fixed an error relating to the use of surfdata on certain Graphics Cards.
    • Attempted to fix an error relating to the use of pow(int, int) on certain Graphics Cards. Please report back if this persists.
    • Made music pause during focus loss more consistent.
    • Fixed a bug where resetting section music to default would fail to play any music.
  • Controllers
    • The controller code will no longer inexplicably crash the game when using certain older CPUs.
    • Fixed a bug where the Hori Switch Pad controller would go to sleep when receiving instructions to turn the "Home" LED on.
  • Episodes
    • Added necessary graphics for the Demo Stages.
    • Removed unfinished Demo Stage.
    • Fixed an error that happened when loading the Demo Stages' overworld.
    • Loadscreens will no longer crash when registering new graphics.
    • Fixed an error related to levels like "Dream World" and "Forest House" in the Princess Cliche and an Invasion 2 Bonus level (Error pointed to particles.lua).
  • Blocks
    • TNT and Nitro blocks will no longer error due to an oversight with the Crash Switch Block.
    • Slime Blocks no longer animate oddly.
    • Certain blocks with contents (Brittle Leaves, Kirby Blocks, Breaking Dirt etc.) will no longer crash the game when their contents are to be revealed.
    • Certain blocks (Kirby Blocks, Breaking Dirt) can no longer be destroyed by fireballs and other NPCs from above. Projectile-spawned Birds and other projectile-spawned NPCs can still hit them from the side or below.
  • NPCs
    • Cobrats don't mind getting picked up anymore.
    • Mutant Vines have grown more tolerant towards sequences that include bible verses.
    • Wigglers have sorted out their anger issues with Klonoa. They're friends now.
    • Sent a friend to Snake Block's home to wake them up. Friend reported a success.
    • Snake Block was so taken aback by the sudden wake-up call it forgot to properly move while offscreen. This is now fixed, too.
    • Snake Block has levelled up! New Skill: Interaction with the State Toggler BGO. Switches between "Eat" and "Create" behaviour.
    • NPCs that use the direction field in special ways will no longer have it be changed by regular means.
    • Mutant Vines that have been toggled to "pass through" blocks with the Collision Toggler BGO will now propagate this property to siblings upon splitting at a multi-direction intersection.
    • The Torpedo Ted's grip will no longer crash the game when an invincible player runs into its buddy, the Torpedo Ted.
    • Audio, Light and Particle Source NPCs will pause/hide when hidden now.
    • Fixed pausing-related issues with Mega Shroom.
  • NPC Config
    • Added staticdirection (global): Forces changes to the NPC's direction to be done explicitly.
  • Effects
    • Possibly fixed an error related to the spawning of an inhuman amount of effects. Please report back if this persists.
    • Fixed a visual error with effects using the AI_STOMP template.
  • Characters
    • Invincible players travelling through Clear Pipes will no longer look like a disjointed mess.
    • Bullet Bills tossed by Klonoa have grown a bit more tolerant towards vertical movement.
    • Bowser's Steed, the Clown Car, can now be mounted by Bowser, the Clown Car's Canonical Owner.
    • Certain characters will longer crash the game in the Test Mode Menu.
  • Backgrounds
    • Mystic Cave Background now renders custom graphics properly again.
  • Launcher
    • Matched version number to the SMBX2 internal version number.
    • Improved update notifications.
  • Editor
    • The editor will no longer crash when switching sections.
    • Removed unfinished NPCs from the editor, for real.
    • 'Dummy' Items are now known as 'Reserved' Items to reduce confusion.
    • Fixed an issue where the editor would ask SMBX to start the game using Character ID 0.
  • Scripting
    • Fixed a bug in animatx2.

General

  • Meta
    • Mario Challenge now works for lvlx files.
    • imtiredofallthiswalking cheat works again.
    • Score is now capped like it was in 1.3.
    • The limit for events and layers has been increased from 101 to 255.
    • Fixed a bug where end game events would never be executed, causing all episodes to be effectively unbeatable.
    • Added template files for achievements, block-n.txt and block-n.lua.
    • Sound effects can now be dropped into a subfolder named "sound", and automatically replace vanilla sound effects without sounds.ini.
    • Fixed a bug where some effects would not automatically resize.
    • Fixed a bug where layers would move at a tiny speed after being set to stop moving.
    • Removed the F2 code preview. F2 will now list currently loaded Lua files instead.
    • When hardware OpenGL support is insufficient to run the engine, there is now an automatic fallback to a software OpenGL renderer. This autodetection can also be overriden by command line argument or the luna.ini configuration file.
    • Controller support has been rebuilt, allowing for more stable controller support and on-the-fly controller switching.
    • The editor testing pause menu now has access to a "Calibrate Controller" menu, that allows you to quickly remap your controller inputs.
    • Explosions now use slightly better hitbox calculations when using .lvlx files (.lvl files will still use the old collision implementation for compatibility).
  • Launcher
    • Redesigned the launcher layout to minimize required button presses.
    • The launcher is now displayed in 16:9 resolution by default.
    • The launcher's default size is now relative to the short edge of the monitor it's opened on by default.
    • The launcher.ini config file can now override the starting resolution of the launcher, for example, using "resolution=800x600".
    • The launcher will now remember which tabs you had open when it was last closed.
    • Added a new button in the lower left that displays the selected episode's achievement center.
    • Added a new button in the lower right that, when clicked, opens an email form for submitting bug reports.
    • Added a new button in the lower right that, when clicked, allows you to open a .lvl or .lvlx file directly, without loading either an episode or the editor.
    • Increased the maximum number of save slots per episode to 32,767.
    • Redesigned the save slot selection menu.
    • Fixed a bug where it was impossible to enter controller input.
    • You can now configure what kind of update notifications you would like to receive.
    • Fixed the "title" field in the launcher json.
    • Added a new field to the launcher json: "allowPlayerSelection". If false, the player selection field on the episode launcher page is hidden. The player defaults to the first allowed player index.
    • Added a new field to the launcher json: "allowSaveSelection". If false, the save slot selection field on the episode launcher page is hidden. Useful for episodes that would like to handle save slots internally.
    • Added a new field to the launcher json: "collectible". A string field that contains the name of the collectible item in the episode. By default, this value is "Star".
    • Added a new field to the launcher json: "collectibles". Can optionally be set to define a plural to the collectible value. By default, this value is "Stars".
    • Added a new field to the launcher json: "starIcon". Can optionally be set to define an icon representative of the episode's collectible.
    • Added a new field to the launcher json: "progressDisplay". Can optionally be set to "percent" to display episode progress as a percentage rather than a star count.
    • Added a new field to the launcher json: "maxProgress". Can optionally be set to use a custom progress measure for this episode (measured against Progress.progess, set in Lua).
    • Added a new field to the launcher json: "customProgress". Can optionally be set to true in order to force the launcher to measure progress with Progress.progress (not needed if "maxProgress" is already set).
    • Added a new field to the launcher json: "noAchievementBorders". Can optionally be set to disable the border around achievement icons in the achievement centre for this episode.
    • Custom episode launcher pages will now automatically populate HTML elements with certain classes.
    • Added a new automatic page element class: "_stars". Will display the number of stars in (or max progress for) the episode alongside their icon or name. Will not display if no stars or max progress setting were found.
    • Added a new automatic page element class: "_starsIcon". Will display the icon or name of the star collectible for the episode.
    • Added a new automatic page element class: "_starsCount". Will display the number of stars in (or max progress for) the episode.
    • Added a new automatic page element class: "_starsContainer". Will disappear if no stars or max progress setting were found in the episode.
    • Added a new automatic page element class: "_credits". Will display the episode credits defined in the world file. Will not display if no credits were found.
    • Added a new automatic page element class: "_creditsContainer". Will disappear if no credits were found in the episode world file.
    • Added a new automatic page element class: "_episodeIcon". Will display the episode icon.
    • Added a new automatic page element class: "_episodeTitle". Will display the name of the episode.
  • Editor
    • Fixed a bug where custom sound effects would sometimes not play in Lunatester.
    • Improved various editor descriptions.
    • Level properties: Added an "Appears in Mario Challenge" checkbox.
    • Level properties: Added a flag and number field for the configuration of a level-wide time limit.
    • Level properties: Moved greyed-out fields to "WIP" tab. Currently unused.
    • Section properties: Added configuration for per-section darkness in the editor.
    • Section properties: Added configuration for per-section weather effects in the editor.
    • Section properties: Added configuration for per-section screen overlay effects in the editor.
    • Section properties: Added configuration for per-section beat timers used by Blinking Blocks in the editor.
    • Section properties: Added vertical wraparound.
    • Warps: Added portal warps (instant warps that retain momentum).
    • Improvements to the Test Mode Menu.
    • Waterfalls now render behind sizables, like they do in the game.
  • Scripting
    • ExpandedDefines lists are now automatically populated from config fields. Deprecated registerDefines functions.
    • Adjusted draw event order to ensure camera is always properly positioned during onDraw, including on the first tick.
      Previous OrderNew Order
      onTickEndonTickEnd
      onDrawonCameraUpdate(1)
      onCameraUpdate(1)onCameraUpdate(2)
      onCameraDraw(1)onDraw
      onCameraUpdate(2)onCameraDraw(1)
      onCameraDraw(2)onCameraDraw(2)
      onDrawEndonDrawEnd
    • timer.lua is now globally loaded in code as namespace Timer.
    • progress.lua now exposes global functions through the namespace Achievements.
    • paralx2.lua is now globally loaded in code as namespace Background.
    • Global namespace Routine now exists as a replacement to eventu.lua.
    • Progress.progress can now be set, which allows for custom progress measurements to appear in the launcher.
    • Progress.maxProgress has been added as a read-only field. This is only set if the "maxProgress" field is set in the launcher.
    • Progress.savename can now be set, which allows save files to appear named in the launcher.
    • CamLock now works on the world map.
    • Calling Audio.MusicChange will no longer hard-reset the music volume.
    • Misc.multiResolveFile can now be used to resolve multiple file options at once. This is useful if the same file could use multiple filetypes, or could be located in optional subfolders.
    • Misc.saveSlot can now be used to get the current save slot number.
    • Misc.episodeName can now be used to get the current episode name.
    • Misc.richDialog can be used to display selectable text with rich text formatting in a dialog window similar to Misc.dialog.
    • Level.format can now be used to get the level file format (either "lvl" or "lvlx").
    • New effects' spawnBind[X/Y] and [x/y]Align properties work as expected now. Double-check the alignment of your custom effects!.
    • Adjusted the spawn algorithm of orbits.
    • Items can now be grabbed out of orbits.
    • Deprecated Audio.SfxOpen in favor of SFX.open.
    • Values from extra settings Color, Point, and Rect fields will now appear in Lua as Color, vector, and RECTd objects automatically.
    • Values from extra settings will now be stored in a data._settings table, rather than data._basegame.
    • Episode-wide extra settings fields can now be created, and will be stored in the data._settings._global table.
    • pnpc.lua is now deprecated. All NPC references now inherrently track the underlying NPC, including generators.
    • pblock.lua is now deprecated. All Block references now inherrently track the underlying Block.
    • Blocks and NPCs are always guaranteed to have a "data" table, which is guaranteed to contain "_basegame" and "_settings" tables.
    • Added Block:transform function, allowing blocks to be safely converted to blocks of a different ID.
    • Extra settings for BGOs should now be supported.
    • Fixed a bug where shader function-type macros weren't properly substituted into shader code in some circ*mstances.
    • onExplosion event can now be used to detect explosions. Explosion.get can also get a list of explosion objects.
    • onNPCGenerated event can now be used to detect NPC creation by generators.
    • New onPostNPCKill, onPostNPCHarm, onPostExplosion, onPostEventDirect, and onPostBlockHit events, which correspond to the version of the event without 'Post' in the name. These are called if the regular version of the event is not cancelled. You should use these unless you explicitly need to cancel the event.

NPCs

  • Meta
    • All (SMBX2-specific) basegame NPCs now use a combination of npc-n and AI files.
    • The NPC folder structure has been readjusted. If you have been loading files from scripts/npcs, you may have to load from scripts/npcs/ai now.
    • NPCs thrown onto lineguides will no longer randomly get stuck on blocks (noticable when trying to throw a platform onto lineguides).
    • Certain new NPCs that react to water will no longer react to water on hidden layers.
    • Extended NPC settings applied to generators are now inherited by the generated NPCs.
  • Additions
    • Added Light Source NPC, an NPC that shines brightly in dark sections.
    • Added Particle Source NPC, an NPC that emits particles based on a file source specified.
    • Added Audio Source NPCs, NPCs that play a set sound effect when the player overlaps with its active area.
    • Added Tantrunt, a chasing NPC that can be jumped on to cause it to charge forward until it hits a wall.
    • Added Filth Coating, an NPC that can be attached to blocks to give it a coating that is removed when the player comes in contact with it.
    • Added Auto-Rotating Barrel, an NPC that the player can enter and press the jump key to shoot out. It rotates automatically.
    • Added Auto-Barrel, an NPC that the player can enter and will immediately be shot out. It rotates automatically.
    • Added Straight Barrel, an NPC that the player can enter and press the jump key to shoot out. Its angle can be set in the editor.
    • Added Rotating Barrel, an NPC that the player can enter and press the jump key to shoot out. While inside, the player can press left and right to rotate the barrel.
  • Behaviour
    • Big Switches: Fixed an issue where switch state would not properly save for an episode.
    • Boo Snake: Supports custom graphics now.
    • Broadsword's Boomerang: No longer hits invisible NPCs.
    • Broadsword's Boomerang: Fixed post-throw player control.
    • Bro's Boomerang: Now spinjumpable by default (emulates Super Mario World's custom sprite).
    • Bunbun: More configuration options in the editor.
    • Buoyant Platform & Wood Platform: Adjusted momentum.
    • Checkpoints/Flag Checkpoints: Can now optionally specify a Warp ID to respawn at.
    • Cobrats: Standing on these enemies is now safer.
    • Donut Block (SMW): Fall when a heavy NPC stands on top.
    • Flying NPCs: When set to "low bounce", they will now no longer ignore semisolids.
    • Flying Spiny: Fixed framestyle=0.
    • Fry Guy: Giving Fry Guy a unique layer and a "No More Objects On Layer" event will now cause the selected event to trigger only after all Sizzle Guys have been defeated.
    • Hopping Flame: No longer safe to spinjump on by default.
    • Lakitu (SMB1): More configuration options in the editor.
    • Magikoopa: No longer teleports above the section.
    • Magikoopa: Supports custom graphics now.
    • Maverick Thwomp: Remove "legacy" flag.
    • Paddle Wheel: Fixed lineguide interaction.
    • Para Dry Bones: Now two distinct NPCs. ID 417 turns into bone-throwing Dry Bones, while ID 388 turns into regular Dry Bones.
    • Para Dry Bones: When jumped on, the NPC collapses for a short period of time.
    • Phantos: Now remain active for the duration of a chuck whistle.
    • Popup Coin: Renders to -55 now.
    • Popup Coin: NPC display now matches the spawned NPC's position.
    • Popup Coin: NPC display now matches the trigger hitbox.
    • Reverse Boo: Adjusted momentum to match SMW Boo by default.
    • Rotary Lift: Added editor configuration options.
    • Shyspring/Shyspike: Now collectively known as "Hatters". Renamed to Shyhatter and Spikehatter.
    • Skewers: No longer collide with sizeables they overlap with.
    • Small Colour Switch: Get pushed when a heavy NPC stands on top.
    • Springs: Now restore double jumps.
    • Springs: Adjusted bounce table. NPCs must now have block collision and be affected by gravity in order to bounce off a vertical spring, and must have block collision in order to bounce off a horizontal spring.
    • Springs: Additional NPCs can be manually white/blacklisted using springs.lua's whitelist/blacklist functions.
    • Springs: Added support for custom spring types in code.
    • Star Coins: Lowered volume of certain sounds.
    • Stretch: Now can be registered as a custom NPC that moves along walls, too.
    • Thwomps: Face right in the editor by default.
    • Thwomps: Now considered heavy NPCs.
    • Van de Graf: No longer spawns a ribbon trail by default.
    • Whistling Chuck: Fixed a bug where the whistle effect would never stop, even after the sound stopped playing.
    • Wigglers: Now render in correct order.
  • NPC Codes
    • Global: ignorethrownnpcs: Thrown NPCs pass through this NPC.
    • Global: linkshieldable: Destroys the NPC upon contact with Link's shield.
    • Global: noshieldfireeffect: Disables fire effect if linkshielded.
    • Global: notcointransformable: Prevents NPC from turning to coins upon level completion.
    • Global: isheavy: An integer value that determines the NPC's weight if greater than 0.
    • Global: ishot: A boolean determining elemental block releated collisions.
    • Global: iscold: A boolean determining elemental block releated collisions.
    • Global: durability: A number determining elemental block releated collisions. -1 = infinite.
    • Global: nogliding: Causes the NPC to be ignored by 1f0.
    • Global: lightflicker: Causes the NPCs light to flicker slightly in dark sections.
    • Global: iscustomswitch: Used by switch NPCs to identify them as such.
    • Global: powerup: Used by powerups to identify them as such.

    • ArrowLift: spawnid: ID of the ghost-platform to spawn.
    • ArrowLift: nospecialanimation: Disables special animation handling.

    • Big Goombas: splitid: ID to turn into when splitting.

    • Big Switches: blockon, blockoff: IDs of the switchables.

    • Birds: toflying: ID of the NPC to turn into when flying away.

    • Birds (Flying): togrounded: ID of the respective grounded variant.

    • Bob-Omb (SMW, Walking): spawnid: ID to turn into when bonked or the timer runs out.

    • Bombshell Koopa: spawnid: ID of the shell bomb.
    • Bombshell Koopa Bomb: nospecialanimation: Disables special animation handling.

    • Bros (Boomerang, Hammer, Sledge): followplayer: If false, the NPC will always face in its initial facing direction.

    • Bunbun: nospecialanimation: Disables special animation handling.

    • Busters: target[n]: IDs that can be picked up by this NPC, where n is a number starting at 1. (target1, target2)
    • Busters: collideryoffset: Vertical offset of the search area relative to the NPC's feet.
    • Busters: useai1: If true, the NPC transforms its grabbed NPC into whatever value is stored in the NPC's ai1 field.
    • Busters: throwspeedx, throwspeedy: Speed at which NPCs are thrown.

    • Cherries: starid: ID of the star to spawn when all are collected.
    • Cherries: limit: Number of cherries that needs to be collected for the star to spawn.

    • Cloud Drop: horizontal: If true, the NPC moves horizontally.

    • Cobrat: spawnid: ID of the projectile fired.
    • Cobrat: transformid: ID of the NPC to transform into.
    • Cobrat: transformonjump: Whether or not to transform into a different NPC after jumping.
    • Cobrat: hideoffset: y-offset from the block the cobrat hides in.

    • Dry Bones: spawnid: ID of the projectile to throw.

    • Fire Bro: projectileid: ID of the projectile fired.
    • Fire Bro: friendlyprojectileid: ID of the projectile fired when held.

    • Fire Snake: tailid: ID of the trail NPC.

    • Fliprus: spawnid: ID of the spawned NPC.
    • Fliprus: throwspeedx, throwspeedy: Speed of the thrown NPC when released.
    • Fliprus' Snowball: fliprusid: ID of the associated Fliprus.

    • Flutter: maxspeedx, maxspeedy: Maximum velocity.
    • Flutter: flightperiod: Frames it takes for a full flight sine wave to complete.
    • Flutter: stundecel: Deceleration when stunned.
    • Flutter: zerospthreshold: Minimum speed value before speed gets set to 0 when stunned.

    • Flying Dry Bones: effectid: Effect ID when killed.
    • Flying Dry Bones: playsound: ID of sound effect played when bonked.
    • Flying Dry Bones: recovery: Frames of recovery after being bonked the first time.
    • Flying Dry Bones: transformid: ID this NPC turns into when bonked.

    • Flying Spiny: spawnid: ID of the spawned spikes.

    • Foo: blowframes: Number of frames per direction used for blowing.

    • Graf: ribbon: Whether to spawn a ribbon trail.

    • Grrrol: grrrolstrength: Number that determines relative strength to other Grrrols. Stronger Grrrols (higher number) kill weaker Grrrols when running into them.

    • Hatters: bonkedframes: Number of frames used by the bonking state.

    • Hopping Flame: spawnid: ID of the spawned NPC.

    • Hot Foot: nospecialanimation: Disables special animation handling.

    • King Bill: effect: ID of the death effect.

    • Lakitu (SMB1): nospecialanimation: Disables special animation handling.

    • Launch Barrels: delay: Sets the delay between entering a barrel, and when the player can shoot out of it (in ticks).
    • Launch Barrels: cooldown: Sets the delay between exiting a barrel, and when the player can enter it again (in ticks).
    • Launch Barrels: correctgravity: If set to true, gravity will be adjusted when shooting sideways or down out of a barrel, so the player doesn't fall immediately.
    • Launch Barrels: launchtimer: Sets the time between exiting a barrel and when the player regains control (in ticks)

    • Magikoopa: [min/max]frame[left/right]: Maps frames of animation to direction.

    • Mechakoopa: stunid: ID of the NPC after stunning.
    • Mechakoopa (Stunned): recoverid: ID of the NPC after stunning is over.

    • Megashroom: Removed keeppower and replaced it with myPlayer.keepPowerOnMega.

    • Minigame Cloud: spawnid: ID of the NPC to spawn for the minigame.

    • Monty Mole: holeid: BGO-ID of the hole BGO.

    • Mutant Vine Head: playercontrolled: Index of the controlling player. False if controlled by redirectors.
    • Mutant Vine Head: vineid: ID of the regular vine.
    • Mutant Vine Head: thornedid: ID of the thorned vine.

    • Paddle Wheel: platformid: ID of the platforms.
    • Paddle Wheel: autorotate: If true, the paddlewheel always rotates at maximum speed.
    • Paddle Wheel: linespeedmultiplier: Multiplier to adjust lineguided speed.

    • Pansers: projectileid: ID of the NPC fired.

    • Phanto: stoptype: Enum for the on-stop behaviour.

    • Popup Coins: defaultcontents: NPC ID to default to when no content is provided.

    • Ptooies: blowheight[n]: Pattern for defining blow heights in pixels, where n is a number starting at 1. (blowheight1, blowheight2) Blowheights are selected randomly.
    • Ptooies: ballid: ID of the projectile.

    • (Reverse) Boo: maxspeedx/maxspeedy: Maximum velocity.
    • (Reverse) Boo: accelx/accely: Acceleration.
    • (Reverse) Boo: decelx/decely: Deceleration.

    • Reznor: projectileid: ID of the spawned projectile.
    • Reznor: turns: If false, disables the NPC's turning (NPC can still turn if set to Don't Move).

    • Rock: bounceheight: Height of the rock's bounce.

    • Rocky Wrench: spawnid: ID of the NPC to spawn.

    • Rotary Lift: cooltime: Number of frames of the idling state.

    • Scuttlebug (Hanging): spawnid: ID to turn into when losing the string.

    • Shoe Goombas: shoeid: ID of the shoe to drop.
    • Shoe Goombas: lavaproof: If true, spawns particles when on lava.
    • Shoe Goombas: spawnednpc: NPC ID to spawn when landing.
    • Shoe Goombas: flytime: Now accessible by all Shoe Goombas.

    • Skewer: waitdelay: Wait time.
    • Skewer: extenddelay: Wait time after extending.
    • Skewer: extendspeed: Speed at which to extend.
    • Skewer: retractspeed: Speed at which to retract.
    • Skewer: horizontal: If true, the NPC is sideways.

    • Small Switches: blockon, blockoff: IDs of the switchables.

    • Snakeblock: soundid: ID of the sound played.

    • Snifit: burst: Number of bullets to fire in quick succession.
    • Snifit: interval: Frames between burst shots.
    • Snifit: jumps: Whether the NPC jumps.
    • Snifit: prepare: Whether the NPC stands still and shakes before firing.
    • Snifit: shottimer: Number of frames between non-burst shots.

    • Spike: spawnid: ID of the spawned NPC.

    • Star Coin: nospecialanimation: Disables special animation handling.

    • Sumo Bro: spawnid: ID of the spawned NPC.
    • Sumo Bro Lightning: spawnid: ID of the spawned NPC.

    • Ted Spawner: traveldistance: Pixels travelled.
    • Ted Spawner: heldframe: Frame of the spawned NPC while held.
    • Ted Spawner: spawnerpriority: Render priority of the grip.
    • Ted Spawner: spawnpriority: Render priority of the held NPC.
    • Ted Spawner: anchory: Y-Anchor of the spawned NPC to the claw. 1 is top, -1 is bottom.
    • Ted Spawner: spawnid: NPC ID spawned.

    • Waddle Doo: sparkid: ID of the Spark NPC.
    • Waddle Doo Spark: dooid: ID of the related Waddle Doo NPC.

    • Walking Rinka Shooter: spawnid: ID of the NPC to spawn.

    • Wiggler: trailcount: Number of trail segments.
    • Wiggler: trailid: ID of the trail segment NPC.
    • Wiggler: angryid: ID when jumped on. Doesn't transform if it's the same as itself.
    • Wiggler: distance: Pixels between each segment.
    • Wiggler Segment: angryid: ID of the head when jumped on. Doesn't transform if the head already is of that ID.

    Global Default Settings
    • ignorethrownnpcs: Lineguided Utility NPCs, Small Switches, Tilt Lift, Boo Circle, Torpedo Ted Hand, Fire Snake Trail, Chuck Baseball, Gas Bubble, SMB2 Fire, Bowser Statue Fire, Hopping Flame Trail, Sumo Bros. Lightning and Fire, Spike Ball, various Platforms, Ptooie Ball, Popup Coin, Flying Spiny Spike, Rhino Fire, Bros' Fire, Wrench, Berries, Friendly NPCs, Minigame Cloud, Hidden Item, Reznor Fire, Dry Bones Bone, YI Fuzzy, Paddle Wheel, Broadsword's Boomerang, Springs, Waddle Doo Beam, Monitors, Asteron Spike, Mutant Vines, Rotary Lift, Bunbun Spear, Donut Blocks, Bros' Boomerang, Bros' Hammer, Crate-spawned flickering NPCs, Player Rinkas

    • linkshieldable: Baseball, SMB2 Fire, Bowser Statue Fire, Flying Spiny Spike, Bros' Fire, Wrench, Reznor Fire, Dry Bones Bone, Asteron Spike, Bros' Hammer.

    • noshieldfireeffect: Baseball, Flying Spiny Spike, Wrench, Dry Bones Bone, Asteron Spike, Bros' Hammer.

    • notcointransformable: Various static and offscreen-active NPCs like lineguided NPCs, Bumpers and Mutant Vines.

    • isheavy: Thwomps, Fliprus Snowball, Sledge Bros, Grrrols, block-like NPCs, Bowser's Bowling Ball, Dino Rhino, Golden Bowser Statue, Grand Goomba, Giant Goomba, Huge Goomba, Grand Koopa, Mega Mole.

    • ishot: All NPCs that were also previously able to melt frozen Turn Blocks.

    • iscold: All NPCs that were also previously able to melt hot Turn Blocks.

    • durability: Between 1 and 5, depending on the strength of the projectile. Infinite for non-projectile NPCs.

    • nogliding: Lineguided Rope, Paddlewheel Platform, Lineguided Engine Block Attachables.

Blocks

  • Meta
    • All (SMBX2-specific) basegame Blocks now use a combination of npc-n and AI files.
    • The Block folder structure has been readjusted. If you have been loading files from scripts/blocks, you may have to load from scripts/blocks/ai now.
    • newblocks.lua no longer exists.
    • You can now use block-n.lua files for your custom per-id block code.
    • You can now use block-n.txt files to override block codes on a per-level or per-episode basis.
  • Additions
    • Added SMM2 SMW Rainbow Sizeable.
    • Added SMM2 SMW Bridge Sizeable.
    • Added SMM2 Synced Switch Blocks.
    • Added SMM2 SM3DW Synced Switch Spikes.
    • Added SMM2 SM3DW Timed Spikes, periodically harmful spike blocks.
    • Added SMM2 SM3DW Blinking Blocks, blocks that appear and disappear based on a set BPM.
    • Added SMW Rope Conveyor Blocks, a semisolid conveyor block.
    • Added Shovel Knight Brittle Leaf Blocks, a set of blocks that disappears after a player or heavy NPC comes in contact with it and then leaves it again.
    • Added Sticky Slime Blocks, a set of Blocks you cannot jump off.
    • Added Anti-Nitro Switch, which explodes all Nitro Blocks in the level.
    • Added Metal Switch, a one-time Switch Block that does nothing unless hooked up to events or code.
  • Behaviour Changes
    • 1f0: No longer catches held NPCs.
    • Clear Pipes: Now render to priority -22.5 instead of -10 (now they render behind foreground elements) by default.
    • Clear Pipes: Render priority can be adjusted by manipulating the clearpipe.priority variable in lua.
    • Clear Pipes: Elements in clear pipes can now travel through lava.
    • NPC Passthrough Block: Behaviour changed. Now no longer compatible with Multiplayer in exchange for compatibility with thrown NPCs. NPCs will now no longer randomly fall through all blocks after intersecting with one.
    • New snow slopes: Now slippery by default.
    • Nitro: Now explodes instantly when coming in contact with anything.
    • Nitro: New explosion effect.
    • Nitro: Added optional visual effects.
    • Nitro: Allows players to enter mega state even if they will grow into Nitro blocks.
    • TNT: Enemies that fall onto TNT now set it off.
    • TNT: Now instantly explode when coming in contact with NPCs that are marked as hot with the ishot flag.
    • TNT: Now instantly explode when touching an invincible or mega player.
    • TNT: Allows players to enter mega state even if they will grow into TNT blocks.
    • TNT: Yoshi now starts running when landing on TNT.
    • TNT: New explosion effect.
    • TNT: Added optional visual effects.
  • Block Codes
    • Global: width: (automatically inferred from sprite by default).
    • Global: height: (automatically inferred from sprite by default).
    • Global: frames: Number of frames in the block animation (only works for SMBX2-specific blocks).
    • Global: sizable: If true, the block is a sizable block.
    • Global: passthrough: If true, the block has no collision.
    • Global: pswitchable: If true, the block turns into a coin when a P-Switch is pressed.
    • Global: lava: If true, the block is considered lava.
    • Global: semisolid: If true, the block only has collision on the top.
    • Global: floorslope (-1, 0, 1): Determines the direction of this block as a floor slope.
    • Global: ceilingslope (-1, 0, 1): Determines the direction of this block as a ceiling slope.
    • Global: lightoffsetx/y: Offset of light source from the center of the block.
    • Global: lightradius: Determines radius of light source in pixels.
    • Global: lightbrightness: Determines brightness of light source.
    • Global: lightcolor: Determines the color of the light source.

    • Global: lightflicker: Causes the blocks light to flicker slightly in dark sections.

    • Global: playerfilter: Used by player filter blocks to identify them as such.

    • Global: customhurt: Used by hurtful new blocks to identify them as such.

    • Global: noshadows: Prevents the block from casting shadows in a dark section.

    • Brittle: effectid: ID of the effect spawned upon the block's removal.

    • Escalator: direction: Direction of the conveyor effect.
    • Escalator: downwards: If true, special logic for downwards escalators is enabled.
    • Escalator: Speed: Speed of the conveyor effect.

    • Nitro: flashcolor: Color of the block's flashes.
    • Nitro: randomjumps: If false, disables the block's jumping effect.

    • Switchblock: offswitchid/onswitchid: ID of the blocks to toggle.
    • Switchblock: color: String of the color name.

    • TNT: flashcolor: Color of the block's flashes.
    • TNT: randomflashes: If false, disables the block's random flashes.

  • Other
    • Slightly adjusted the visuals of SMW Castle Slopes, SMW Cave Sizeable.

Characters

  • Behaviour Changes
    • Broadsword: Can no longer slash through solid ice.
    • Klonoa: Minor changes to hover momentum.
    • Megaman: Reduced charge shot timer from 140 to 80.
    • Wario: Crouching in midair no longer locks horizontal momentum like on the ground.
    • Wario: Dismounting from Yoshi or another mount is no longer almost impossible.
    • Wario: Can no longer climb up sizables using the Ground Pound.
    • Wario: Pressing Alt-Jump during a ground pound will now cancel the ongoing ground pound.
    • Wario: Can no longer break certain blocks erroneously using the Shoulder Bash.

BGOs

  • BGO Codes
    • Global: lightflicker: Causes the BGOs light to flicker slightly in dark sections.

Warps

  • Scripting
    • Added "allowItems" field, deprecating the "allowCarriedNPCs" field.
    • Added "toOtherLevel" field, deprecating the "isLevelExit" field.
    • Added "fromOtherLevel" field, deprecating the "isLevelEntrance" field.
    • Added "entranceSection" field (readonly).
    • Added "exitSection" field (readonly).

Sections

  • Scripting
    • Added "origBoundary" field, getting the initial bounds of the section.
    • Added "wrapH" field, which determins the horizontal wrap state of the section, deprecating the "isLevelWrap" field.
    • Added "wrapV" field, which determins the vertical wrap state of the section.
    • Added "background" field, allowing you to get or set a parallax background object for your section.
    • Added "settings" field, allowing you to get the settings table for your section.
    • Added "darkness" field, allowing you to get the darkness data for your section. You can use "darkness.enabled" and "darkness.playerLightEnabled" to enable or disable darkness,
    • Added "effects" field, allowing you to get a table containing section effects. You can use "effects.weather" and "effects.screenEffect" to get or set those fields.
    • Added "beatTimer" field, allowing you to get a table containing beat timing data. You can use "beatTimer.enabled", "beatTimer.bpm", "beatTimer.useMusicClock" and "beatTimer.timeSignature" to get or set those fields.

Backgrounds

  • Behaviour Changes
    • All section backgrounds are now implemented with background2.txt files. You can find the configuration for each one in data/config/backgrounds, or manipulate them at runtime with Section.background. Certain custom animated backgrounds may appear incorrectly if their heights are not a full multiple of the frame number.
    • SMB2 Clouds (ID 59) has been tweaked.
    • SMB2 Snow Islands (ID 60) has been tweaked.
    • SMB2 Snow Hills (ID 61) has been tweaked.
    • SMB Clouds (ID 62) has been tweaked.
    • SMB Snow Hills (ID 63) has been tweaked.
    • SMB Waterfall (ID 64) has been tweaked.
    • SMB2 Ice Underground (ID 65) has been overhauled with a more accurate animation.
  • Background2 Codes
    • startingFrame: Allows you to set a starting frame for animated background layers.
    • sourceX: Allows you to cut a portion of the image to use as a background layer.
    • sourceY: Allows you to cut a portion of the image to use as a background layer.
    • sourceWidth: Allows you to cut a portion of the image to use as a background layer.
    • sourceHeight: Allows you to cut a portion of the image to use as a background layer.
    • maxParallaxX: Limits the speed of horizontal parallax when "fitX" is enabled.
    • maxParallaxY: Limits the speed of vertical parallax when "fitY" is enabled.
    • img/image now allows you to supply a number, which will use the corresponding "background2-#" image file.
  • Scripting
    • Added "Background.set" function, allowing you to set the background of a section directly (equivalent to assigning "Section.background").
Beta 4 Changelog - SMBX2 (2024)

References

Top Articles
Latest Posts
Article information

Author: Gregorio Kreiger

Last Updated:

Views: 6099

Rating: 4.7 / 5 (77 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Gregorio Kreiger

Birthday: 1994-12-18

Address: 89212 Tracey Ramp, Sunside, MT 08453-0951

Phone: +9014805370218

Job: Customer Designer

Hobby: Mountain biking, Orienteering, Hiking, Sewing, Backpacking, Mushroom hunting, Backpacking

Introduction: My name is Gregorio Kreiger, I am a tender, brainy, enthusiastic, combative, agreeable, gentle, gentle person who loves writing and wants to share my knowledge and understanding with you.