Resources#
Oddities#
Version Differences#
Unused Level Header Options#
Floaty Physics#
|
|
This needs some investigation. |
|
|
This page or section has one or more broken YouTube links. |
Watch on YouTubeMario uses the otherwise unused animation zero_g_walk and appears to use some sort of variation of the Mini Mario physics (e.g., floating and leg kicking) no matter which powerup he has. However, he can't wall jump and flies huge distances when fired from a Pipe Cannon. When this mode is on while the player is Mini, Mario won't be nearly as floaty.
You can activate it while in-level by setting one of the following memory addresses to 0x01.
US |
JP |
US |
EU |
EU |
KO |
CH |
|---|---|---|---|---|---|---|
021B69E6 |
021ADF1A |
021A15FA |
021C189A |
021B411A |
021AF61A |
021B393A |
(Memory Addresses: Original TCRF research)
Start as Mini Mario#
Mario will start a stage as Mini Mario. It was probably used for testing, rather than for any real gameplay purpose. You can activate it while in-level by changing any of the relevant addresses above to 0x02.
Per-zone backgrounds and terrain#
The level header blocks defining backgrounds and terrain can contain multiple entries. Each zone can be set to use different background and terrain entries, which would in theory allow for multiple zones with different graphics in the same level. Unused level 3 uses this. "Terrain" is usually referred to by modders as "tileset", but for clarity that is not done here, as tileset is also used below to refer to the literal tileset data used for backgrounds.
Notably, here are the relevant level header blocks from unused level 3:
block 1 (general settings):
0000 0000 012C 0000 0003 FFFF 0000 0003 FFFF 0000 FFFF FFFF 0000 0000 0000 0000
block 3 (far background):
0000 0300 0000 FFFF FFFF 0003 0007 0000 0000 0000
0001 0403 FFFF 0003 FFFF 0000 0004 0000 0000 0000
block 4 (terrain):
0000 0000 0000 FFFF FFFF FFFF FFFF 0000 0000 0000
0001 0000 FFFF 0003 FFFF FFFF FFFF 0000 0000 0000
block 5 (near background):
0000 FFFF 0000 FFFF FFFF FFFF FFFF 0000 0000 0000
The following differences can be observed compared to a regular level header:
In block 1, the tileset ID values at +0x06, +0x0C and +0x12 are set to 0, the value for the grass theme. However, the following halfwords, at +0x08 and +0x0E, are set to 3, the value for the underground theme. In regular level headers, those values are set to 0xFFFF.
Blocks 3 and 4 have two entries defined, where all other levels only have one.
Block 5 has one entry, but no near background is used.
In each block, the second entry has the palette ID value at +0x04 set to 0xFFFF, however the following halfword at +0x06 is set to 3 (again, the value for the underground theme).
The tilemap IDs (at +0x02) observed in block 3 also present an oddity: they have a value set in the higher byte. It is unclear what it would be for, but the game code ignores that value's higher byte.
These observations in the level header structure suggest that it can theoretically accommodate up to three different sets of background and terrain per level, and that all the required graphical assets (tilemaps, tilesets, palettes) would have been loaded at once. However, it is unclear how this would have worked with regards to the VRAM layout.
In practice, it appears that the functionality was quickly put together for demonstration purposes, and discarded as it was unneeded in the final game. It has little use in singleplayer mode, since sub-areas with different themes are stored in separate level files entirely. It would be useful in multiplayer for having big levels that are self-contained, but the multiplayer levels in the final game are small and don't use sub-areas.
This functionality doesn't work in the final game, but some remnants of it exist in the game code. Notably:
- When loading background tilemaps, the game parses every entry in header blocks 3 and 5 and loads the associated tilemap, but they all get loaded to the same VRAM address.
- When entering a level or switching zones, the game configures the tilemap base address for BG1 (far background) and BG3 (near background) based on the current zone's settings.
- The Jyotyu palette is also reloaded when switching zones, to match the selected terrain.
- When loading background and terrain, the game only reads the first set of tileset IDs in block 1. Further values are ignored.
- Similarly, when loading background and level palettes, the game only reads the first palette ID of the current entry in block 3/4/5.
The tilemaps for the near and far background layers go at 0x0601A000 and 0x0601C000, respectively. If the current zone uses entry ID 1 or 2 for either near or far background, the BG layer's tilemap base address is set to 0x0601E000 instead. This implies that only one secondary background layer could exist.
It is unclear where different tilesets and palettes would have been loaded. However, the corresponding tilemaps would need to be adjusted based on where their tileset and palette are. This implies that in the demo, the underground theme would have been made specifically to be used in a sub-area, and adjusted to the different VRAM layout required.
Terrain entries 1 and 2 would presumably have used object bank 2, and maybe 3 too. In unused level 3, the sub-area uses objects from object bank 2. However, in the final game, object bank 2 is used for the end-of-level castle.
Unused Entrance Types#
|
|
This needs some investigation. |
|
|
This page or section has one or more broken YouTube links. |
Each level has an entrance type setting which affects how Mario enters the area (exit from a pipe, jump from bottom of the screen, etc.). There are several entrance types that are not used by any levels.
- 7: The player spawns in the tile above where the entrance is placed, then jumps.
- 11: Like Entrance 1, the player spawns in the tile above where the entrance is placed.
- 12: Like the used "Exit from door" entrance, the player spawns coming out of a 3D door which disappears to reveal whatever is behind it once it has closed. In this instance, though, the player and door spawn in the tile above where the entrance is placed.
- 14: Like the entrance used when the player first spawns or re-spawns after dying in Mario vs. Luigi mode, the player comes out of a pipe which grows out of the ground and then fades away. With this one, however, the player appears to be walking out of a door while coming out of the pipe. When the player spawns from this entrance after exiting from another area, the player looks like they are coming out of a doorway but without the door. What is possibly an earlier version of this entrance can be seen in the 2005 demo version.
- 15: Seemingly a duplicate of Entrance 14.
(Source: skawo)
(Source: Original TCRF research)
Crash Debugger#
There is a hidden crash debugger in the game, similar to screens seen in other DS games developed by Nintendo, like Super Mario 64 DS and Animal Crossing: Wild World. To access the crash debugger, first crash the game (the easiest way to do this is by removing the game card during gameplay), then hold L + R + A + Left, let go, hold Down + B, let go, and finally hold Start + Select.
The top screen shows the contents of the file BUILDTIME and the reason for the crash, while the bottom screen shows a stack dump.
Unused Code#
Overridden Debug Trigger#
There is code that would bring up the Scene Load Debug Menu if Start + Select were pressed, but it isn't used as the Start + Select + L + R soft reset code overrides it.
(Source: Skawo)
Carry/Shoot with R#
// ov11:0212C648
u16 PlayerBase::getFireKeyPressed()
{
u16 pressed;
if ( byte_2085A0C == 2 )
pressed = this->getRKeyPressed();
else
pressed = this->getRunKeysPressed();
return pressed;
}
// ov11:0212C67C
u16 PlayerBase::getCarryKeysPressed()
{
u16 pressed;
if ( byte_2085A0C == 2 )
pressed = this->getRKeyPressed();
else
pressed = this->getRunKeysPressed();
return pressed;
}
// ov11:0212C6B0
u16 PlayerBase::getCarryKeysHeld()
{
u16 held;
if ( byte_2085A0C == 2 )
held = this->getRKeyHeld();
else
held = this->getRunKeysHeld();
return held;
}
There is an unused variable, that if enabled, triggers some unused code that allows the player to carry items and shoot fireballs with the R button. This can be done independently from running using the normal run button. This may be related to how you could kick (as Big and/or Mega Mario)/throw fireballs (as Fire Mario) using the R button in the E3 2005 demo.
You can use this Action Replay code to enable the variable:
USA |
|---|
|
(Source: Ed_IT)
World Map#
Running Animation#
|
|
To do: |
The world map player model actor has unused animation value 0x2 which makes it play the in-level running animation, or something like it. You can use this code to make it use the running animation in place of the usual walking one:
NCPatcher code to enable it for USA version:
#include <nsmb_nitro.hpp>
// Makes WMPlayerModel always do run animation instead of walk
static void setWMPlayerMdlAnimation(void* mdl, u32 animType, bool continueAnim) {
rcast<void(*)(void*,u32,bool)>(0x20dda80)(mdl, 2, continueAnim);
}
ncp_set_call(0x20d5bbc,8,setWMPlayerMdlAnimation)
ncp_set_call(0x20d6248,8,setWMPlayerMdlAnimation)
ncp_set_call(0x20d69a0,8,setWMPlayerMdlAnimation)
(Source: willsmith2)
Mega Scale#
|
|
To do: |
If the player's in-level powerup state is "mega", which it never is on the world map, the world map player model actor will use an unused mega scale value. But it doesn't seem to set the world map powerup state to a mega-specific one. Although it doesn't change the model appropriately, so it will just be the small player model scaled up. But if you force it to use the super model, you can get a better idea of what this might have been intended to look like.
Action Replay code to force powerup state to mega:
USA |
|---|
|
(Source: willsmith2)
Unused Text#
Build Date#
Every version of the game has a plain-text file called BUILDTIME in the root of the ROM filesystem. Its used in the crash debugger and mini game debug menu. Some things of note:
- Blue indicates this release is a kiosk demo.
- A yellow background indicates this release has autoboot functionality, meaning this version will skip the Nintendo DS BIOS and start the game up right away.
Region |
Gamecode |
String |
|---|---|---|
USA |
A2DE |
|
Japan |
A2DJ |
|
Japan |
A85J |
|
USA |
A85E |
|
Europe |
A2DP |
|
Europe |
A85P |
|
Europe* |
Y78P |
|
Japan** |
Y3EJ |
|
Korea |
A2DK |
|
China |
A2DC |
|
Japan |
Y7QJ |
|
*This kiosk demo identifies itself as Y78P on the cartridge and the leaked Nintendo lotcheck sheet, though the gamecode in the header is still A85P. In fact, aside from the autoboot flag, this cartridge is identical to the previous European release.
- *This kiosk demo is bundled on a compilation cartridge titled 2006-Nen 10-Gatsu Taikenban Soft.
matoba_t refers to the game's Assistant Director, Taku Matoba and soejima may refer to Yasunari Soejima, one of the enemy programmers, nitro is the DS's code name. mj is likely the internal name for New Super Mario Bros (mario jump/mario journey?).New Super Mario Bros. Wii'' has "mj2d" and "wiimj2d" in its ROM. The former of which may be the full internal name for NSMBDS.
(initial info: Treeki)
(Source: Original TCRF research)
Internal Project Name#
Another possible internal name, "Mario2d", appears twice in the arm9 binary. This is used internally in the save data, and isn't present in the demo versions because they do not use save data. This name is possibly reflected in the game's two-letter code (as seen on the front of the game cart, etc) - "2D".
(Source: Original TCRF research)
World Prefix List#
|
|
This needs some investigation. |
A W1-
B W2-
C W3-
D W4-
E W5-
F W6-
G W7-
H W8-
I KINOKO-
J VS
A list that explains the meaning of the prefixes used in the level filenames. Found in the ARM9 code. It appears to be used by the "get prefix for world" code, but the game seems to function fine if the text is blanked out.
(Source: Original TCRF research)
(Source: Skawo)
Oddities#
Sound Effect Usage#
Walking#
|
|
Please elaborate. |
SE_PLY_FOOTNOTE_F (F is presumably short for "fast") is for the "running footsteps". But it also plays while the player is walking, but it cannot be heard due to the sound playing function used. SE_PLY_FOOTNOTE_N is used for walking, but only in the cutscenes after finishing a level/beating a boss. They both use the same sound data, except running has a transpose command added. You can restore the sound while walking by changing the function used:
#include <nsmb/game/sound.hpp>
ncp_jump(0x0212B830, 11)
int playerSFXFuncRepl(int sfxID, Vec3* pos, int volume)
{
SND::playSFXUnique(sfxID, pos);
return 0;
}
(Hiccup: Original TCRF research)
(Explanation and code fix: IllyCat)
Model Sizes#
|
|
To do: |
The Mega Mushroom model is displayed much smaller in-game than its original model size. This is likely a leftover from early designs of this item, as it was much larger in 2005 pre-release materials.
Graphics#
Toads in the Intro#
|
|
To do: |
Watch on YouTubeIn the introduction where Mario walks towards the castle after observing a lightning strike, there appears to be moving people in the background, but due to the resolution of the game, it is difficult to tell what they are supposed to be, although common sense suggests they are are meant to be Toads, and a leaked document confirms this. But when the game is played in a higher resolution, it turns out they are copies of the Toadsworth model moving around with no animations. This could suggest that Toadsworth was originally Toad, but maybe they just chose the Toadsworth model as he resembles Toad.
World Map Textures#
|
|
To do: |
(Source: Original TCRF research)
Some used World Map graphics are apparently early versions of graphics found in level tilesets.
Small bush 1
|
Early |
Final |
|---|---|
|
|
|
Small bush 2
|
Early |
Final |
|---|---|
|
|
|
Large bush
|
Early |
Final |
|---|---|
|
|
|
The world map textures were apparently never updated, but the tilesets were. "Small bush 2" and "large bush" (with the size of the final large bush) can be seen in various pre-release materials. The size difference of the "large bush" may be due to memory limitations in the world map.
(Source: Original TCRF research)
World 4 Map Cave
The cave texture used in the World 4 map depicts an early version of the "near" cave background, but with grass added to the top. The background can also can be seen in prerelease materials.
(Source: Original TCRF research)
Mario vs. Luigi Level Icons#
The final in-game icons for the Mario vs. Luigi levels appear to depict early versions of the game (except for the grassland one, which just depicts a flat plain), although level design differences may be the result of them being mocked-up.
Underground
|
Early |
Final |
|---|---|
|
|
|
- There are coins atop the unsupported bricks.
- The background is an early version of the "near" cave background. The background can also be seen in prerelease materials.
- This may just be due to the icon's low quality, but the coins and bricks may be using an early design.
Ice
An arrangement of five bricks above an step in the ice.
Pipes
A low staircase of pipes, then a drop.
Castle
|
Early |
Final |
|---|---|
|
|
|
- The lowest ground is two blocks high.
- The square with the Mini Mario passage is only blocks high.
- There is a Question Mark Block just north-east of the Mini Mario passage, beside the brick.
- There is a three block high and a one block high ground protrusion east of the Mini Mario passage.
- This may just be due to the icon's low quality, but the castle tiles seem to be darker and the moving block seems to be lighter.
(Source: Original TCRF research)
Internal Names#
Tilesets/Backgrounds#
Name(s) |
Identification |
Translation |
Notes |
|---|---|---|---|
d_2d_I_S_tikei_nohara_ncg.bin, NoHaRaSubUnitChangeData |
[...] Grassland Sub Unit Tileset [...] |
Secondary general tileset |
Suggests that this tileset was once an extension of the grassland tileset. |
d_2d_W_M_tikei_kazangake2_ncg.bin |
[...] Volcano Cliffs 2 [..] |
Mountains |
Possibly suggests the tileset was based on the unused volcano tileset "kazangake", and/or it used to be intended for volcano levels. In fact, in early concept art, World 6 is depicted as having a volcano in it. |
d_2d_W_M_tikei_dokansoto_ncg.bin / d_2d_W_M_tikei_dokannaka_ncg.bin |
[...] Pipes Outside [...] / [...] Pipes Inside [...] |
Pipes / Sewer |
The naming, and the placement of the tilesets slots (Sewer comes right after Pipes), possibly suggests a relation between the two tilesets. In the final, they are used in unrelated levels. |
Misc. 2D Graphics#
Name(s) |
Identification |
Translation |
Notes |
|---|---|---|---|
I_star_red_ncg.bin |
- |
Big Star |
This filename suggests that the Big Star was once red. |
Music#
Name(s) |
Identification |
Translation |
Notes |
|---|---|---|---|
BGM_WATER_3 |
- |
Underwater |
This filename suggests that there were multiple underwater tracks at one point, or that the underwater theme was replaced multiple times. |
Sound Effects#
|
|
To do: |
Name(s) |
Identification |
Notes |
|---|---|---|
SE_SYS_ONE_DOWN |
Tapping a "W" during the credits |
This filename suggests this was for some sort of "lose life" event, although it's possible that this sound was created exclusively for the credits. |
SE_OBJ_GET_DRAGON_COIN |
Getting a Star Coin |
This filename suggests that Star Coins were once Dragon Coins, or maybe its a leftover from Super Mario Advance 2, which is probably the origin of this sound effect. |
SE_PLY_STAR_ATTACK |
Enemy/block debris created by certain enemies or Mega Mario |
This filename suggests that this sound was used when enemies were defeated by touching them as Invincible Mario. |
SE_OBJ_BIG_ROCK_CRASH |
Giant spiked ball hitting a wall |
The sounds for small spiked balls rolling and hitting walls are SE_OBJ_TEKKYU_ROLL and SE_OBJ_TEKKYU_CRASH, respectively ("tekkyu" means "spiked ball"). The sound effect names for giant spiked balls suggest that they were once boulders instead. |
SE_OBJ_BIG_ROCK_ROLL |
Giant spiked ball rolling |
|
SE_OBJ_ITEM_APPEAR |
Item spawning from a ? block |
These sounds are identical, and the game uses them interchangeably in various situations where items spawn. |
SE_OBJ_GOOD_ITEM_APPEAR |
Models#
Name(s) |
Identification |
Translation |
Notes |
|---|---|---|---|
firebar1.nsbmd |
- |
Fire Bar ball |
This filename suggests that there were multiple Fire Bar ball models, or that the Fire Bar ball model was replaced. |
donketu.nsbmd (model container)/new_donketsu (model) |
Bully |
Snailicorn |
This filename suggests that the enemy may have had a significant revision, and may have once been the Bully enemy from Super Mario 64 (DS). |
obj_e3_ring.nsbmd |
Red Ring |
- |
This ring model (though likely an early version of it) was first seen by the public at E3 2005, and this filename suggests that it was created for one of the versions shown or playable at the event. |
(Source: Original TCRF research)
Obscure Detail#
The Red Flying ? Blocks only give Mini Mushrooms if you have got at least one Mini Mushroom previously in the current save file. But this isn't obvious due to the fact that these blocks give random items, and that you can get a Mini Mushroom very early in the game - from a Red Toad House or from a block in World 1-4.
(Source: NSMB-ASMReference)
References#
- https://www.nintendolife.com/games/ds/new_super_mario_bros↩︎
- Miscellaneous: "Nintendo.com Games : New Super Mario Bros.", no date (Nintendo) (Archive)↩︎
- Miscellaneous: "TOUCH!iQue DS", no date (iQue)↩︎
- Miscellaneous: "New スーパーマリオブラザーズ", no date (Nintendo Japan)↩︎
- Miscellaneous: "뉴 슈퍼 마리오브라더스", no date (Nintendo) (Archive)↩︎
- Miscellaneous: "New Super Mario Bros. | Nintendo DS", no date (Nintendo Europe)↩︎
- Miscellaneous: "New Super Mario Bros.", no date (Nintendo Australia) (Archive)↩︎