Skip to content

NSMBW 0.3.0: graphics on a second core, Update button, autosave, Android 9+

Choose a tag to compare

@WitherBlitz WitherBlitz released this 29 Oct 06:37
· 53 commits to main since this release

Faster, and a lot more for controllers. 0.3.0 moves the game's graphics work onto a second CPU core, adds an in-game Update button, autosaves after every level, brings Direct3D 11 for older Windows GPUs, installs on Android 9 and 10, and adds controller rebinding, mouse buttons and a language picker on Android. Your saves, settings and imported game carry over.

Faster

  • Graphics on a second CPU core (like Dolphin's dual-core mode). The game used to translate its Wii graphics commands for the GPU on the same core that runs the game. They now go to a second core, so the two run side by side, and the game only waits for the graphics where it reads a result back (the screen copies behind the ? blocks and Star Coin pictures, the depth checks). Where the game was held back by the CPU, frame rates go up by as much as half; devices that already ran at 60 fps stay there. It's on for Windows, Linux and Android on any device with 4 or more cores, except with the OpenGL ES renderer, which has to stay on one thread. To turn it off, start the game with NSMBW_GX_THREAD=0.
  • Less work every frame on slower devices.
    • The game re-checked a course's whole 2 MB tile sheet every frame, because the animated tiles (coins, ? blocks) are copied into it. It now only re-checks the 64 KB piece that changed.
    • The lighting maps that courses and the world map light their 3D models with were redrawn every frame even while no light moved (0.7-1 ms a frame on a Pixel 3 XL). They're now redrawn only when a light, its colour or the scene changes.
    • Background tiles, text and other flat 2D pieces are drawn much more directly: their vertices go to the renderer as they are, instead of being decoded and re-encoded value by value, and a run of them with nothing changed in between becomes one draw.
    • The 3D models' material lists are no longer re-checked on every call.
  • Fixed: short frame drops when effects first appear (#13). Collecting coins, a Star Coin or a 1UP could stutter for a frame, mostly on phones. Each new texture or texture combination the game used (an effect, a score pop-up) was created on the game's own thread, which had to wait 3–10 ms for the renderer to finish sending the previous frame to the GPU. The renderer now creates them itself. On a Snapdragon 6 Gen 1 phone, a new texture now costs the game about 0.05 ms instead of up to 10 ms, and 1-1 plays with no frames over 20 ms.
  • Fixed: runs of slow frames in levels with Star Coins (World 1-3 most of all). The game renders each Star Coin on screen into a small texture every frame. Those textures should be reused, but the fix for #13 kept every old one marked as in use for about 40 frames, so the game made new ones every frame instead, each waiting several milliseconds for the renderer. On a Pixel 3 XL, 1-3 spent half a second at a time at 25–35 ms a frame. It now holds 60 fps there (6 frames over 24 ms in a minute of play, all at the level's start, instead of 87). The world map got faster too.

New

  • Update button (PC, Linux and Android). When a newer release is out, an orange Update button shows at the top of the file select. Press it and the game downloads the release in the background, checks it against GitHub's checksum, installs it and starts again on the new version. Your saves, settings and game files are kept. On Android, the first update asks you to allow installs from NSMBW and to confirm; after that, Android 12 and up install updates without asking. Android may not reopen the game by itself afterwards, so you might have to open it from your home screen.
  • Autosave after every level (#10). Clearing a level now saves your progress to your file automatically, with no prompt, as soon as you're back on the world map. Before, the game (like the Wii original) only kept progress you saved at a tower, a castle or from the map menu, so closing it after a level lost that level.
  • Older Windows GPUs: Direct3D 11 fallback (#9). GPUs with no Vulkan or Direct3D 12 driver, like Intel HD 2000/2500/4000, used to end up on Windows' slow software renderer (about 12 fps, with black backgrounds and broken transitions). The game now uses Direct3D 11 on them instead, and only falls back to software rendering if nothing else works.
  • Renderer setting (Video tab). Pick the graphics API yourself, or leave it on Automatic, which tries the best one first and falls back down the list. It applies the next time the game starts.
    • Windows: Direct3D 12 → Vulkan → Direct3D 11.
    • Android: Vulkan → OpenGL ES 3.1+. It's in the app's Display menu too. OpenGL ES can't be picked by hand yet (it's greyed out, for a later version); Automatic still falls back to it on a phone with no working Vulkan.
  • Android 9 and up, and older phone CPUs (#16). The app used to need Android 11 and a 2018-or-newer CPU. It now installs on Android 9 and 10, and runs on older ARMv8 CPUs, on OpenGL ES where the phone's Vulkan driver is too old.
  • Controller Bindings. With a controller connected, the Keybinds tab becomes Controller and lists the controller's buttons for each action. Pick one and press the new button to rebind it; Reset puts the defaults back.
  • PC: mouse buttons in Keybinds (requested by mothy, thanks!). Any action can now be bound to a mouse button: pick the action and click the button you want, left, middle, right or a side button. Right click crouches (Down) by default.
  • PC: Mouse as Gyro (Keybinds menu, off by default). Turn it on with the checkbox next to Smart Spin and Reverse Tilt, and the mouse stands in for the Wii Remote's tilt and shake. Move it left or right and the remote tilts that way for 5 seconds, for the tilting platforms. Move it quickly left and right and the remote shakes, so you spin. It switches itself off while a controller or a Wii Remote is connected.
  • Reverse Tilt (Keybinds menu, all devices, on by default). A checkbox next to Smart Spin that swaps tilt left and right, so a tilting platform goes the way you tilt the phone or push the stick. Turn it off there if you prefer the original direction.
  • Click or tap a world on Select a World. Clicking (or tapping, on Android) an island turns the ring to that world, clicking the island at the front goes there, and Back can be clicked too. Worlds you haven't reached yet ignore the click.
  • Performance Monitor. The FPS counter and the frametime graph are now one setting, Performance Monitor, and its size slider (5-200%) scales the FPS counter too.
  • Android: Language button on the start screen. Left of Help, with a globe: English (the default), Español or Français, the same three as the game's Language tab and the same setting, so changing one changes the other. The start screen and its Settings, Help and LAN windows switch to it straight away; the game uses it the next time you press Play.
  • Android: touch controls get out of the way of a controller. When a controller connects, or you press its buttons or move its sticks, the on-screen remote hides. Tap the screen while playing (in a course or on the world map, with no menu open) and it comes back. It also comes back by itself when the controller disconnects.
  • Android: Touch Controls switch in the Keybinds menu. Turn the on-screen buttons on or off from inside the game.
  • Android: Xiaomi Mode (fixes the black screen on Xiaomi, Redmi and POCO phones). Xiaomi's system closes an app's extra processes, even one on screen, and the game runs in one. That left it restarting over and over on a black screen. On those phones the game now runs in the app's main process, and leaving it restarts the app cleanly. It's a switch on the start screen, on by default only on Xiaomi phones.
  • Android: Download Logs (For Github Reports). A button at the bottom of the app's start screen that saves a zip of the last few play sessions' logs, your settings and the phone's model, ready to attach to a GitHub issue. It doesn't include saves or game files.

Fixes

  • Fixed: Larry slides off his platform in ultrawide (#8). In a view wider than 16:9, a room narrower than the screen (the castle bosses' arenas) left the camera pinned to one edge. Bosses measure their moves from the middle of the screen, so Larry's shell turned around 76 units off and slid off the edge.
  • Ultrawide: boss arenas sit in the middle of the screen. Any room narrower than your screen is now centred, with the extra width split evenly on both sides, instead of pushed to one side. The middle of the screen is exactly where it is in 16:9, so every boss moves as it does there. Players still stop at the room's own edges, and 16:9 is unchanged.
  • Android: a controller that disconnects works again when it reconnects. Before, a USB controller that dropped out and came back stopped moving Mario until you restarted the app. The controller now goes through Android's own input system, so it picks up where it left off.
  • Android: a real controller is player 1. Some Android devices have a built-in TV remote service that shows up as a gamepad with no sticks. It could take player 1, so your controller drove player 2 and seemed to do nothing. A real controller now always comes before a remote like that.
  • Android: sleeping the phone pauses the game instead of closing it. Turning the screen off now freezes the game in memory: nothing runs, no sound plays, and nothing is saved, to save battery. Wake the phone and you're right where you left off. This also fixes two crashes that could close the game after waking.
  • Fixed: music volume jumping to 100% for a moment. With music turned down, it could briefly play at full volume for about a second, usually when the game hitched. Music and sound effects now keep their own volumes through a hitch.
  • Fixed: Smart Spin cancelling springboard bounces. Holding jump on a springboard and letting go no longer spins in mid-air, so you keep the high bounce.
  • PC: clicking the world map's + menu works. Clicking Title Screen (or anything below Settings) used to get the cursor stuck on Settings and leave the menu half-broken, with Esc no longer working. Clicks now go straight to the button you clicked.
  • PC: Esc leaves the Star Coins screen and cancels yes/no prompts. Those screens only listened to the 1 button, so Esc (which is +) did nothing and you couldn't get out with the keyboard. Esc now backs out of them, and the Star Coins screen's Back button can be clicked.

From Andreas Gruber (@andygruber), thanks

  • Fixed: Linux hosts could miss their own LAN game. Starting a session restarted the game while it still held the lobby's network port, so the host's game came up outside the session while everyone else waited.
  • LAN play keeps the host's save safer. The note the game leaves to bring a host's save back after a session now says exactly which file goes where.
  • Newer Super Mario Bros. Wii as an optional build from source, from your own Newer v1.30 (USA) disc. The downloads here are still the original game; see projects/nsmbw/BUILDING.md to build Newer yourself.
  • A Linux build script, and build scripts that work from any folder, so building the game yourself is easier.

LAN play needs every player on 0.3.0.

Tested on Android (Google Pixel 3 XL) and Windows. The Linux build is untested in this release.

Important

No game files are included. You need your own New Super Mario Bros. Wii (USA, SMNE01, revision 1), extracted with Dolphin. See Getting the game files.

Downloads

  • Android (arm64, Android 9+): NSMBW-0.3.0-android-arm64.apk. On 0.2.1 or 0.2.2, Check for Updates on the start menu installs it.
  • Windows (10/11, x64): NSMBW-0.3.0-windows-x64.zip
  • Linux (x86-64, glibc 2.35+: Fedora 36+, Ubuntu 22.04+): NSMBW-0.3.0-linux-x86_64.tar.gz

Updating keeps your saves, settings and imported game. Untested on Mali GPUs (most MediaTek, Exynos and Tensor phones).

SHA-256

fd4841d65ebc1090daebcfc2374edabb6cbd5e77d0e2e21590a96a41590165d8  NSMBW-0.3.0-android-arm64.apk
cb4f8ed1ba74cfdc2905ae72e37dff1f75ca2e39f42814d383b652486353e32a  NSMBW-0.3.0-windows-x64.zip
61d8dcefa57f19127165591732aed77e6e9210448175096392c2cf627a6d913b  NSMBW-0.3.0-linux-x86_64.tar.gz

Source: this repository at v0.3.0, GPLv3. Not affiliated with Nintendo.