New Super Mario Bros. DS
Information about modding NSMB DS
- General Info
- Level List
- Connected Pipes
- File Table
- Music List
- Special Event IDs
- Camera
- Particle List
- Staff Roll Characters
- Entrances
- List of Activator Sprites
- List of player animations
- Background Scrolling Data Info
- Modding Tutorials
- Tools
- Code Modification
- Using GDB with Ghidra and melonDS
- Setting Up Code Modifications
- Porting old patch syntax to NCPatcher
- Porting old patches to the NSMB Code Reference
- 2D Graphics
- World Map
General Info
General information about the game that doesn't need more than one page to explain
Level List
Every level in the game accompanied by its file name and how many areas it has.
Filename | Level Name | Area Count |
---|---|---|
A01 | World 1-1 | 3 Areas |
A02 | World 1-2 | 3 Areas |
A03 | World 1-3 | 1 Area |
A04 | World 1-4 | 3 Areas |
A05 | World 1-5 | 2 Areas |
A06 | World 1-A | 2 Areas |
A07 | W1 Tower | 3 Areas |
A08 | W1 Castle | 3 Areas |
A09 | Cannon (W1 to W5) | 1 Area |
B01 | World 2-1 | 3 Areas |
B02 | World 2-2 | 2 Areas |
B03 | World 2-3 | 2 Areas |
B04 | World 2-4 | 2 Areas |
B05 | World 2-5 | 2 Areas |
B06 | World 2-6 | 2 Areas |
B07 | World 2-A | 3 Areas |
B08 | W2 Tower | 3 Areas |
B09 | W2 Castle | 3 Areas |
B10 | Cannon (W2 to W5) | 1 Area |
C01 | World 3-1 | 2 Areas |
C02 | World 3-2 | 2 Areas |
C03 | World 3-3 | 3 Areas |
C04 | World 3-A | 3 Areas |
C05 | World 3-B | 2 Areas |
C06 | World 3-C | 2 Areas |
C07 | W3 Ghost House | 3 Areas |
C08 | W3 Tower | 2 Areas |
C09 | W3 Castle | 2 Areas |
C10 | Cannon (W3 to W6) | 1 Area |
D01 | World 4-1 | 1 Area |
D02 | World 4-2 | 2 Areas |
D03 | World 4-3 | 2 Areas |
D04 | World 4-4 | 2 Areas |
D05 | World 4-5 | 3 Areas |
D06 | World 4-6 | 2 Areas |
D07 | World 4-A | 2 Areas |
D08 | W4 Ghost House | 3 Areas |
D09 | W4 Tower | 2 Areas |
D10 | W4 Castle | 2 Areas |
D11 | Cannon (W4 to W7) | 1 Area |
E01 | World 5-1 | 1 Area |
E02 | World 5-2 | 2 Areas |
E03 | World 5-3 | 2 Areas |
E04 | World 5-4 | 1 Area |
E05 | World 5-A | 2 Areas |
E06 | World 5-B | 1 Area |
E07 | World 5-C | 2 Areas |
E08 | W5 Ghost House | 3 Areas |
E09 | W5 Tower | 2 Areas |
E10 | W5 Castle | 2 Areas |
E11 | Cannon (W5 to W8) | 1 Area |
F01 | World 6-1 | 2 Areas |
F02 | World 6-2 | 2 Areas |
F03 | World 6-3 | 2 Areas |
F04 | World 6-4 | 1 Area |
F05 | World 6-5 | 2 Areas |
F06 | World 6-6 | 3 Areas |
F07 | World 6-A | 2 Areas |
F08 | World 6-B | 1 Area |
F09 | W6 Tower 1 | 2 Areas |
F10 | W6 Tower 2 | 2 Areas |
F11 | W6 Castle | 2 Areas |
F12 | Unused Cannon (W6 to W8) | 1 Area |
G01 | World 7-1 | 1 Area |
G02 | World 7-2 | 2 Areas |
G03 | World 7-3 | 2 Areas |
G04 | World 7-4 | 1 Area |
G05 | World 7-5 | 3 Areas |
G06 | World 7-6 | 3 Areas |
G07 | World 7-7 | 1 Area |
G08 | World 7-A | 2 Areas |
G09 | W7 Ghost House | 3 Areas |
G10 | W7 Tower | 2 Areas |
G11 | W7 Castle | 2 Areas |
H01 | World 8-1 | 2 Areas |
H02 | World 8-2 | 3 Areas |
H03 | World 8-3 | 2 Areas |
H04 | World 8-4 | 2 Areas |
H05 | World 8-5 | 2 Areas |
H06 | World 8-6 | 2 Areas |
H07 | World 8-7 | 1 Area |
H08 | World 8-8 | 2 Areas |
H09 | W8 Tower 1 | 2 Areas |
H10 | W8 Tower 2 | 2 Areas |
H11 | W8 Castle | 2 Areas |
H12 | W8 Final Castle | 3 Areas |
I01 | 1-Up Bonus Game | 1 Area |
I02 | Item Bonus Game | 1 Area |
I03 | Mega Mushroom Bonus Game | 1 Area |
I04 | Bottom Screen Background Chooser | 1 Area |
J01 | MvsL - SMB 1-1 | 1 Area |
J02 | MvsL - Underground | 1 Area |
J03 | MvsL - Ice World | 1 Area |
J04 | MvsL - Pipe World | 1 Area |
J05 | MvsL - Castle | 1 Area |
J06 | Unused Level 1 | 1 Area |
J07 | Unused Level 2 | 1 Area |
J08 | Unused Level 3 | 1 Area |
J09 | Unused Level 4 | 1 Area |
J10 | Unused Level 5 | 1 Area |
Connected Pipes
Each end of the pipe needs an Entrance. Both must have the same connected pipe ID.
Set area 0 in one end and area 1 in the other end.
Make a Path with the same ID as the entrance's "Connected Pipe ID".
Each node on the path must be placed and "Value 6" in the node numbered as below:
Image of how to place the node in each pipe with its value:
If value 6 does not show up for you, then try using the original NSMBe.
The path must be connected from one end of the pipe to the other; this is just to show the placement.
You can place more nodes on the path if you need, only the first and last need the above value 6 number.
World 7-A area 2 is good for more information.
Example shapes:
Reverse L
Setting a pipe as "exit only" also works, and is used in retail (eg 7-A).
File Table
A table of contents for the files inside of a NSMB DS ROM.
Note: bold entries are folders.
TODO: Expand this table to contain all files, splitting the table if needed
Files | Subfiles | Sub-sub-files | Usefulness |
---|---|---|---|
fnt.bin | File Name Table It contains filenames, folders and folders names. | ||
fat.bin | File Allocation Table It contains every file's address in the rom and its size. | ||
header.bin | ? | ||
arm9ovt.bin | It lists every arm9 overlay, its location in the rom and where it should be loaded in the ram. | ||
arm7ovt.bin | It should list every arm7 overlay, its location in the rom and where it should be loaded in the ram. | ||
arm9.bin | The code for the main processor. | ||
arm7.bin | The code for the coprocessor. | ||
banner.bin | It has the NSMB ROM game icon | ||
rsasig.bin | Some signature | ||
root | |||
00DUMMY | Empty, NSMBe uses it to store tileset, their objects' descriptions, backgrounds and music names after renaming them | ||
BUILDTIME | Last game build time | ||
mgvs_sound_data.sdat | Minigames music | ||
sound_data.sdat | Main game music | ||
ARCHIVE | It contains all the Minigames graphics and MvsL stuffs | ||
BG_chk | Tile behaviors for tilesets | ||
BG_ncg | It contains all the Tilesets and BGs graphics stuff (only images, not palettes) | ||
BG_ncl | It contains all the Tileset and BGs palettes | ||
BG_nsc | It contains all the BGs' nsc files (remember the tilesets don't have a .nsc file) | ||
BG_pnl | Map16 for tilesets | ||
BG_unt | Objects info for tilesets | ||
course | It contains all the levels .bin files | ||
demo | It contains some cutscene stuffs | ||
ending | It contains other ending stuffs (like the tower BG) | ||
enemy | It contains the enemies' models and animations | ||
ipl | It contains the graphics of the icon visible on the DS/DSi/3DS family menu | ||
map | It contains all the Worldmap files | ||
obj | It contains the graphics of the 2D things | ||
particle | It contains particle files | ||
player | It contains player's models and animations | ||
polygon_unit | It contains some levels effects, the quicksand files, the pipe graphics, and the End-of-level graphics | ||
script | It contains BMG files (used for In-Level pause scripts, Worldmap's pause scripts, and for the Titlescreen's File Select scripts) | ||
uiStudio | It contains HUD files (ncg, ncl, nsc, bnbl, bncl and bncd) | ||
overlay7 | It should contain the overlays for the arm7 processor | ||
overlay9 | It contains the overlays for the arm9 processor |
Music List
Level Header ID (Hex) | ID in NSMBe/Nitro Studio (Decimal) | Common Name | Name in NSMBe | SDAT Name (in sound_data.sdat) |
---|---|---|---|---|
00 | 0 | None/MvsL Stage Theme 1 (in some cases)* | MvsL Stage | BGM_VS_CHIJOU |
01 | 1 | Tower | Tower | BGM_TRIDE.sseq |
02 | 2 | Starman | Starman | BGM_MUTEKI.sseq |
03 | 3 | Mega Mario | Mega Mario | BGM_HUGE.sseq |
04 | 4 | End of Level (+ MvsL battle win) | End of Level | BGM_COURSE_CLEAR.sseq |
05 | 5 | Death | Death | BGM_DOWN.sseq |
06 | 6 | Desert | Desert | BGM_SABAKU.sseq |
07 | 7 | Boss | Boss | BGM_BOSS.sseq |
08 | 8 | VS battle lose | VS Lose | BGM_VS_LOSE_FANFARE |
09 | 9 | Underground | Underground | BGM_CHIKA.sseq |
0A | 10 | Bonus room | Bonus room | BGM_MAME.sseq |
0B | 11 | Underwater | Underwater | BGM_WATER3.sseq |
0C | 12 | Lava | Lava | BGM_KAZAN_SOTO.sseq |
0D | 13 | End Credits (Early/Unused, shorter) | End Credits | BGM_SAMPLE |
0E | 14 | Beach | Beach | BGM_SANBASHI.sseq |
0F | 15 | Bowser Jr. Battle | Bowser Jr. Battle | BGM_KUPPAJR |
10 | 16 | Ghost House | Ghost House | BGM_OBAKE.sseq |
11 | 17 | Castle | Castle | BGM_SHIRO.sseq |
12 | 18 | Switch timer | Timer | BGM_SWITCH.sseq |
13 | 19 | End of Game Fanfare | End of Game Fanfare | BGM_FINAL_CLEAR |
14 | 20 | Game Over | Game Over | BGM_GAMEOVER.sseq |
15 | 21 | Final Boss | Final Boss | BGM_FINAL_KUPPA.sseq |
16 | 22 | Boss Beaten | Boss Beaten | BGM_BOSS_CLEAR.sseq |
17 | None | [Nothing] | [Nothing] | |
18 | 24 | Athletic | Mushrooms (Athletic) | BGM_ATHLETIC.sseq |
19 | 25 | Toad House | Toad House | BGM_MINIGAME.sseq |
1A | 26 | Grassland | Grassland | BGM_CHIJOU_CONT.sseq |
1B | 27 | Title Screen | Title Screen | BGM_SELECT.sseq |
1C | 28 | SMB End of Level | SMB End of Level | BGM_GOAL_FANFARE2.sseq |
1D | 29 | Toad House Fanfare | Toad House Fanfare | BGM_FANFARE_KINO.sseq |
1E | 30 | MvsL Stage Theme 2* | MvsL Stage 2 | BGM_VS_STAGE.sseq |
1F | 31 | MvsL start screen (duplicate of Title Screen) | MvsL Title Screen | BGM_VS_SELECT.sseq |
20 | 32 | MvsL Loop | MvsL Results Screen | BGM_VS_FAN_LOOP.sseq |
21 | 33 | MvsL Win (Results screen) | MvsL Win | BGM_VS_WIN.sseq |
22 | 34 | MvsL Lose (Results screen) | MvsL Lose | BGM_VS_LOSE |
[23 - 4F] | None | [Nothing] | [Nothing] | |
50 | 80 | Lava ambient | Lava ambient (Castle) | BGM_AMB_YOUGAN |
51 | 81 | Desert wind ambient | Desert ambient (Castle) | BGM_AMB_SABAKU |
52 | 82 | Water ambient | Water ambient (Castle) | BGM_AMB_WATER |
53 | 83 | Cave Water Ambient | Underground ambient (Castle) | BGM_AMB_CHIKA |
[84 - 85] | None | [Nothing] | [Nothing] | |
56 | 86 | Sky Wind Ambient | Wind ambient (Castle) | BGM_AMB_SKY |
[87 - 98] | None | [Nothing] | [Nothing] | |
63 | 99 | MvsL Stage (Early) | Early Grassland (Unused) | BGM_CHIJO |
64 | 100 | World 1* | World 1 | BGM_WORLD1 |
65 | 101 | World 2* | World 2 | BGM_WORLD2 |
66 | 102 | World 3* | World 3 | BGM_WORLD3 |
67 | 103 | World 4* | World 4 | BGM_WORLD4 |
68 | 104 | World 5* | World 5 | BGM_WORLD5 |
69 | 105 | World 6* | World 6 | BGM_WORLD6 |
6A | 106 | World 7* | World 7 | BGM_WORLD7 |
6B | 107 | World 8* | World 8 | BGM_WORLD8 |
6C | 108 | End Credits | Ending | BGM_ENDING |
6D | 109 | Intro Part 1 | Intro 1 | BGM_OPENING_DEMO1 |
6E | 110 | Intro Part 2 | Intro 2 | BGM_OPENING_DEMO2 |
6F | 111 | Peach Fanfare | Peach Fanfare | BGM_KUPPACLEAR_DEMO |
*MvsL themes and World Map themes: Loading the MvsL themes or the World map themes in a regular level (by changing the music in the View Settings for example) will play the music, but most sound effects will be muted while the music is playing (this is because they use sound banks that are too big for the game, overloading the audio memory).
Additional note: Any song with an id above 6F will not play, regardless of if there is song data associated with it or not (by editing the sound_data.sdat file)
Special Event IDs
ID | Description |
---|---|
3E | Blue coin trail while event is active. |
46 | Causes the unused "faded circle" screen transition to be used when using an entrance or exit. Unused |
F3 | Partial Starman effects. Unused? |
F4 | Partial Mega Mushroom effects. Unused? |
EB | Make inventory contain item with no icon. Crashes when you release the item and it can't be replaced by other items. Maybe defunct unused item? Unused? |
F7 | Locks camera into bottom left of view. Mario isn't forced to be inside this camera, but he can't interact with actors outside the camera. Unused? |
Camera
The Camera in New Super Mario Bros is controlled in several ways. You have to take into account that the camera movements will condition the gameplay.
1. How the Camera restricts Mario
The camera restricts Mario's movements in two ways:
• Mario cannot go out of the camera view through the sides.
This means that if the camera doesn't pan further, Mario can't either. The camera sides act like walls (but you can't wall jump into them)
• Mario cannot go to the bottom of the camera.
If he does so, he will die. Note that there is some margin, so you can place something like a Warp to Level some blocks below the camera view. Mario will get it before he dies.
Mario does can go out from the top of the camera. Simply the camera will not pan there, so Mario will be out of the screen.
2. Views
The camera will NEVER get out of the view. That means Mario can't get out of the view by the sides or the bottom.
3. Panning blocks
This thing is a little bit confusing. An area (not each view) is divided in blocks of 16x16 tiles (256x256 pixels). The camera will not pan into blocks that are empty (don't contain any objects).
An example (thanks to Garmichael):
Look at this level:
Notice that blocks A and F are empty. Mario cannot get to A from B, but he can actually jump from D to B. While he is in A, the camera will not move, but as soon as he crosses into B, the camera will jump to that location and that boundary would act like a wall. From there, As Mario approaches C, he will be able to see some of F, but as soon as he crosses into C, the camera will reposition so that the border to F is the bottom of the screen. If Mario jumps down into F, he dies (even though the block under F has ground).
4. Scroll Control and Scroll Stop sprites
These sprites control the camera in more ways. How they work is generally unknown, except for:
• Vertical scroll controls: [sprite:198] and [sprite:199]
• Horizontal scroll stop: [sprite:276]
5. Header Blocks
Block 2, Block 4, and Block 5 control more settings of the camera. Look at the List of Header Blocks page for more info.
6. Camera X & Y
The entrance's settings include two boxes named "Camera X" and "Camera Y", usually you can leave their values as 0, but sometimes you need to put values in there:
The zone and door entrance don't actually have any purpose in-game but to showcase the coordinates.
The zone delimits what you can see on the NDS screen.
If at least one of the Camera values is different from 0, then the tile at said coordinates will calibrate the camera and will serve as the top-left tile of said camera.
You usually use them when sprites 198-199 and/or 276 are in the way, or eventually to calibrate the bottom of the camera to the bottom of the zone.
The purpose of this is to show a nice transition when you change areas.
With the example earlier if both values were at 0, this is where the camera would spawn by default:
The camera is 1 tile higher than the bottom of the zone, but the biggest offender here is the sprite 276, it is only acknowledged when the player have control of Mario thus only when Mario completely exits the pipe, the camera would recognize sprite 276 and then scroll to the left at high speeds, which results in an ugly transition and you can bet this is a rookie mistake to leave that kind of camera error unchecked.
Particle List
Note: IDs can go as high as 255, all IDs past 118 are blank and have been left out for sake of shortening the list.
Particle Id | In-Game Effect | Notes |
0 | toadsworth creates toad house block(s) – part 2 red toad house disappears – part 3 | |
1 | ||
2 | ||
3 | something in the intro | |
4 | ||
5 | whomp destroyed – part 1 | |
6 | whomp destroyed – part 2 | |
7 | whomp destroyed – part 3 | |
8 | ||
9 | whomp slams ground – part 1 | |
A | whomp slams ground – part 2 | |
B | whomp slams ground – part 3 | |
C | ||
D | mario jumps/lands on world map | also used for flying ? blocks, hammer bros and bowser jr on the world map? |
E | mario goes into castle on world map | |
F | ||
10 | ||
11 | something todo with end-of-boss cutscene or world map? | |
12 | ||
13 | bob-omb explodes - part 1 | sometimes spawned (off-screen?) on world map |
14 | bob-omb explodes - part 2 | sometimes spawned (off-screen?) on world map |
15 | bob-omb explodes - part 3 | |
16 | bob-omb explodes - part 4 | |
17 | bob-omb explodes - part 5 | |
18 | bob-omb explodes - part 6 | |
19 | bob-omb explodes - part 7 | |
1A | ||
1B | red toad house disappears – part 1 | |
1C | red toad house disappears – part 2 thwomp hits ground – part 1 | |
1D | thwomp hits ground – part 2 | |
1E | big thwomp hits ground – part 1 | |
1F | big thwomp hits ground – part 2 | |
20 | big thwomp hits ground – part 3 | |
21 | get mega mushroom – part 1 | |
22 | get mega mushroom – part 2 | |
23 | get mega mushroom – part 3 | |
24 | get mega mushroom – part 4 | |
25 | get mega mushroom – part 5 | |
26 | get mega mushroom – part 6 | |
27 | get mega mushroom – part 7 | |
28 | get mega mushroom – part 8 | |
29 | get mega mushroom – part 9 | |
2A | get mega mushroom – part 10 | |
2B | get mega mushroom – part 11 | |
2C | get mega mushroom – part 12 | |
2D | ||
2E | ||
2F | ||
30 | ||
31 | ||
32 | ||
33 | ||
34 | ||
35 | ||
36 | ||
37 | ||
38 | ||
39 | mega mario walks right – alternating with 3A | |
3A | mega mario walks right – alternating with 39 | |
3B | ||
3C | mega mario walks left – alternating with 3D | |
3D | mega mario walks left – alternating with 3C / goal fireworks related? – part 6 | |
3E | goal fireworks related? – part 7 | |
3F | goal fireworks related? – part 8 | |
40 | goal fireworks related? – part 9 | |
41 | goal fireworks related? – part 10 | |
42 | ||
43 | ||
44 | ||
45 | ||
46 | ||
47 | goal fireworks related? – part 1 | |
48 | goal fireworks related? – part 2 | |
49 | goal fireworks related? – part 3 | |
4A | goal fireworks related? – part 4 | |
4B | goal fireworks related? – part 5 | |
4C | splunkin stomped on for the second time – part 1 | |
4D | splunkin stomped on for the second time – part 2 | |
4E | splunkin stomped on for the second time – part 3 | |
4F | splunkin stomped on for the first time – part 1 | |
50 | splunkin stomped on for the first time – part 2 | |
51 | bowser jr lands after being defeated | |
52 | ||
53 | ||
54 | ||
55 | ||
56 | ||
57 | ||
58 | ||
59 | ||
5A | ||
5B | ||
5C | ||
5D | ||
5E | ||
5F | ||
60 | ||
61 | ||
62 | ||
63 | ||
64 | ||
65 | ||
66 | ||
67 | ||
68 | ||
69 | ||
6A | ||
6B | ||
6C | ||
6D | ||
6E | ||
6F | ||
70 | ||
71 | ||
72 | ||
73 | jump onto cliff ledge from normal ground | |
74 | ||
75 | ||
76 | item/object appears/disappears – part 1 | |
77 | item/object appears/disappears – part 2 | |
78 | item/object appears/disappears – part 3 | |
79 | enemy/mega goomba “popped” – part 1 boss shutter piece spawned/destroyed – part part 1 bowser bridge piece destroyed – part 1 | |
7A | enemy/mega goomba “popped” – part 2 boss shutter piece spawned/destroyed – part part 2 bowser bridge piece destroyed – part 2 | |
7B | ||
7C | ||
7D | ||
7E | mario “twinkles” in distance after being fired by warp cannon | |
7F | ||
80 | ||
81 | ||
82 | ||
83 | ||
84 | ||
85 | ||
86 | run into enemy as mega mario | |
87 | ||
88 | ||
89 | ||
8A | ||
8B | ||
8C | ||
8D | ||
8E | ||
8F | ||
90 | ||
91 | ||
92 | ||
93 | ||
94 | ||
95 | blue coin collected | |
96 | mario breaks free from under fallen snow – part 1 | |
97 | mario breaks free from under fallen snow – part 2 | |
98 | ||
99 | ||
9A | ||
9B | ||
9C | ||
9D | mario stomps on Crowber – part 1 | |
9E | mario stomps on Crowber – part 2 | |
9F | mario does Drill Stomp straight down | |
A0 | bowser jr/blockhopper jumps/lands | |
A1 | object enters/exits lava – part 1 | |
A2 | object enters/exits lava – part 2 | |
A3 | object enters/exits poison water – part 1 | |
A4 | object enters/exits poison water – part 2 | |
A5 | object enters/exits water – part 1 | |
A6 | object enters/exits water – part 2 | |
A7 | ||
A8 | mario lands on soft cloud platform | |
A9 | mario lands on quicksand | |
AA | mario lands on sinking snow – part 1 | |
AB | mario lands on sinking snow – part 2 | |
AC | mario fireball hits enemy/wall – part 1 | |
AD | mario fireball hits enemy/wall – part 2 | |
AE | stomp on wiggler | |
AF | ||
B0 | ||
B1 | ||
B2 | kab-omb explodes – part 1 | |
B3 | kab-omb explodes – part 2 | |
B4 | kab-omb explodes – part 3 | |
B5 | ||
B6 | ground-pound on koopa troopa/buzzy beetle – part 1 | |
B7 | ground-pound on koopa troopa/buzzy beetle – part 2 | |
B8 | ground-pound on koopa troopa/buzzy beetle – part 3 | |
B9 | ground-pound on koopa troopa/buzzy beetle – part 4 | |
BA | “pop” enemy with ground-pound – part 1 | |
BB | “pop” enemy with ground-pound – part 2 | |
BC | “pop” enemy with ground-pound – part 3 | |
BD | ||
BE | ||
BF | ||
C0 | ||
C1 | ||
C2 | ||
C3 | ||
C4 | ||
C5 | ||
C6 | ||
C7 | ||
C8 | ||
C9 | ||
CA | mario stomps lakitu | |
CB | mario lands in lakitu’s cloud | |
CC | ||
CD | ||
CE | ||
CF | ||
D0 | bill blaster fires bullet bill – part 1 | but not rotating bill blaster |
D1 | bill blaster fires bullet bill – part 2 | “ |
D2 | ground-pound on koopa troopa/buzzy beetle – part 5 | |
D3 | ground-pound on koopa troopa/buzzy beetle – part 6 | |
D4 | ||
D5 | ||
D6 | ||
D7 | ||
D8 | toadsworth creates toad house block(s) – part 1 | |
D9 | ||
DA | ||
DB | skeeter bomb enters water or maybe skeeter spawns bomb – part 3 | |
DC | skeeter bomb enters water or maybe skeeter spawns bomb – part 4 | |
DD | ||
DE | ||
DF | ||
E0 | ||
f8 | Mario ground pound Falling snow hits ground | |
E2 | Mario lands after triple jump Mario ground pounds on mummipokey | |
E3 | ||
E4 | mario goes out of water – part 1 | |
E5 | mario goes out of water – part 2 | |
E6 | mario goes out of water – part 3 | |
E7 | mario exits water – part 1 | |
E8 | mario exits water – part 2 | |
E9 | mario exits water – part 3 | |
EA | get red coin | |
EB | ||
EC | ||
ED | ||
EE | mario lands on ground in deep water – part 1 | |
EF | mario lands on ground in deep water – part 2 | |
F0 | ||
F1 | ||
F2 | ||
F3 | mario flies off Spin Block/out of tornado – part 1 | |
F4 | mario flies off Spin Block/out of tornado – part 2 | |
F5 | something todo with spinning/drill stomp – part 1 | |
F6 | something todo with spinning/drill stomp – part 2 | |
F7 | something todo with spinning/drill stomp – part 3 | |
F8 | get star coin – part 1 | |
F9 | get star coin – part 2 | |
FA | get star coin – part 3 | |
FB | ||
FC | ||
FD | ?/p/! switch pressed – part 1 | |
FE | ?/p/! switch pressed (alt – part upside down or underwater only?) – part 1 | |
FF | ?/p/! switch pressed (alt – part upside down or underwater only?) – part 2 | |
100 | ?/p/! switch pressed – part 2 | |
101 | ||
102 | ||
103 | mario does Drill Stomp when small mario | |
104 | mario wall jump from right – part 1 | |
105 | mario wall jump from right – part 2 | |
106 | mario wall jump from right – part 3 | |
107 | mario wall jump from left – part 1 | |
108 | mario wall jump from left – part 2 | |
109 | mario wall jump from left – part 3 | |
10A | ||
10B | ||
10C | mario lands on /starts to hang off of cliff edge | |
10D | ||
10E | mario goes into water in 1-A start section – part 1 cheepskipper enters/exits water – part 1 | |
10F | mario goes into water in 1-A start section – part 2 cheepskipper enters/exits water – part 2 | |
110 | mario goes into water in 1-A start section – part 3 spike pillar goes into water – part 1 | |
111 | spike pillar goes into water – part 2 | |
112 | ||
113 | cheepskipper enters/exits water – part 3 | |
114 | mario goes into water in 3-Castle boss room – part 1 | |
115 | mario goes into water in 3-Castle boss room – part 2 | |
116 | mario goes into water in 3-Castle boss room – part 3 | |
117 | mario punches fence – part 1 | |
118 | mario punches fence – part 2 |
Staff Roll Characters
These are the letters you can touch on the bottom screen during the credits.
Closest ASCII Character | Character ID | Character Used? | SFX ID | SFX Name | SFX Usage Outside of Credits |
---|---|---|---|---|---|
A | 0x0 | Yes | 0x34 | SE_EMY_KPJR_DAMAGE_V | Bowser Jr. stomped (voice) |
B | 0x1 | Yes | 0x35 | SE_EMY_KPJR_CRY_V | Bowser Jr. defeated |
C | 0x2 | Yes | 0x39 | SE_EMY_KPJR_GUARD_ON | Bowser Jr. go into shell |
D | 0x3 | Yes | 0x6e | SE_EMY_KURIBO_FUMU | Stomp on enemy / Stomp on other player |
E | 0x4 | Yes | 0x6f | SE_EMY_KAME_FUMU | Stomp on Koopa / Kab-omb / Skeeter (?) |
F | 0x5 | Yes | 0x70 | SE_EMY_KAME_KERU | Enemy defeated by fireball/Shell mario in shell/Ground-pound/Flagpole / Mega Goomba defeated by Mini Player / Hanging ? Block hit from side / Item destroyed in lava / Block spawned by tile creator sprite |
G | 0x6 | Yes | 0xf5 | SE_VOC_OPDM_YES | Player reacts to completion of logo |
H | 0x7 | Yes | 0xfa | SE_VOC_OPDM_AWAWA_01 | Player reacts to thunder strike |
I | 0x8 | Yes | 0x128 | SE_OBJ_GOAL_HANABI | Goal firework |
J | 0x9 | Yes | 0x103 | SE_AMB_OPDM_BABEL | Logo crashes down |
K | 0xa | Yes | 0x123 | SE_OBJ_GET_DRAGON_COIN | Get Star Coin |
L | 0xb | Yes | 0x10b | SE_VOC_OPDM_PEACH_HELP | |
M | 0xc | Yes | 0x166 | SE_PLY_CHANGE_NORMAL | Turn back to normal from Mega |
N | 0xd | Yes | 0x14f | SE_PLY_HIP_ATTACK_M | Mini ground-pound |
O | 0xe | Yes | 0x149 | SE_PLY_JUMP_3 | Mini Player jumps |
P | 0xf | Yes | 0x152 | SE_PLY_DOWN | Player loses a life |
Q | 0x10 | No | 0x153 | SE_PLY_SWIM | Player swim |
R | 0x11 | Yes | 0x168 | SE_PLY_THROW_FIRE | Fire Player/Fire Bros – throw fireball |
S | 0x12 | Yes | 0x16c | SE_OBJ_GET_COIN | Get coin |
T | 0x13 | Yes | 0x171 | SE_OBJ_DOKAN_BREAK | Pipe/Bill Blaster smashed from the side as Mega Player |
U | 0x14 | Yes | 0x172 | SE_PLY_JUMPDAI | Jump on trampoline/Pot in final boss intro jumps |
V | 0x15 | Yes | 0x17b | SE_SYS_ONE_UP | Get 1-up mushroom |
W | 0x16 | Yes | 0x17c | SE_SYS_ONE_DOWN | Unused |
X | 0x17 | Yes | 0x1a9 | SE_OBJ_TSUBO_BREAK | Pot in final boss intro shatters |
Y | 0x18 | Yes | 0x1ab | SE_VOC_M_HOEE | Mario embarrassed after being kissed by peach |
Z | 0x19 | Yes | 0x1ad | SE_VOC_P_THANK_YOU | Peach thanks Player after battle |
a | 0x1a | Yes | 0x34 | SE_EMY_KPJR_DAMAGE_V | Bowser Jr. stomped (voice) |
b | 0x1b | Yes | 0x35 | SE_EMY_KPJR_CRY_V | Bowser Jr. defeated |
c | 0x1c | Yes | 0x39 | SE_EMY_KPJR_GUARD_ON | Bowser Jr. go into shell |
d | 0x1d | Yes | 0x6e | SE_EMY_KURIBO_FUMU | Stomp on enemy / Stomp on other player |
e | 0x1e | Yes | 0x6f | SE_EMY_KAME_FUMU | Stomp on Koopa / Kab-omb / Skeeter (?) |
f | 0x1f | Yes | 0x70 | SE_EMY_KAME_KERU | Enemy defeated by fireball/Shell mario in shell/Ground-pound/Flagpole / Mega Goomba defeated by Mini Player / Hanging ? Block hit from side / Item destroyed in lava / Block spawned by tile creator sprite |
g | 0x20 | Yes | 0xf5 | SE_VOC_OPDM_YES | Player reacts to completion of logo |
h | 0x21 | Yes | 0xfa | SE_VOC_OPDM_AWAWA_01 | Player reacts to thunder strike |
i | 0x22 | Yes | 0x128 | SE_OBJ_GOAL_HANABI | Goal firework |
j | 0x23 | Yes | 0x103 | SE_AMB_OPDM_BABEL | Logo crashes down |
k | 0x24 | Yes | 0x123 | SE_OBJ_GET_DRAGON_COIN | Get Star Coin |
l | 0x25 | Yes | 0x10b | SE_VOC_OPDM_PEACH_HELP | |
m | 0x26 | Yes | 0x166 | SE_PLY_CHANGE_NORMAL | Turn back to normal from Mega |
n | 0x27 | Yes | 0x14f | SE_PLY_HIP_ATTACK_M | Mini ground-pound |
o | 0x28 | Yes | 0x149 | SE_PLY_JUMP_3 | Mini Player jumps |
p | 0x29 | Yes | 0x152 | SE_PLY_DOWN | Player loses a life |
q | 0x2a | Yes | 0x153 | SE_PLY_SWIM | Player swim |
r | 0x2b | Yes | 0x168 | SE_PLY_THROW_FIRE | Fire Player/Fire Bros – throw fireball |
s | 0x2c | Yes | 0x16c | SE_OBJ_GET_COIN | Get coin |
t | 0x2d | Yes | 0x171 | SE_OBJ_DOKAN_BREAK | Pipe/Bill Blaster smashed from the side as Mega Player |
u | 0x2e | Yes | 0x172 | SE_PLY_JUMPDAI | Jump on trampoline/Pot in final boss intro jumps |
v | 0x2f | Yes | 0x17b | SE_SYS_ONE_UP | Get 1-up mushroom |
w | 0x30 | Yes | 0x17c | SE_SYS_ONE_DOWN | Unused |
x | 0x31 | No | 0x1a9 | SE_OBJ_TSUBO_BREAK | Pot in final boss intro shatters |
y | 0x32 | Yes | 0x1ab | SE_VOC_M_HOEE | Mario embarrassed after being kissed by peach |
z | 0x33 | Yes | 0x1ad | SE_VOC_P_THANK_YOU | Peach thanks Player after battle |
À | 0x34 | No | 0x36 | SE_EMY_KPJR_UH | Bowser Jr. “wakes up” after battle |
Á | 0x35 | No | 0x37 | SE_EMY_KPJR_LAND | Bowser Jr. land after jump attack |
 | 0x36 | No | 0x3b | SE_EMY_KPJR_GUARD_OFF | Bowser Jr. stop hiding in shell |
Ä | 0x37 | No | 0x3c | SE_EMY_KPJR_DAMAGE | Bowser Jr. stomped |
Ç | 0x38 | No | 0x3d | SE_EMY_KPJR_PURUPURU | Bowser Jr. shakes head after waking up after battle |
È | 0x39 | No | 0x77 | SE_EMY_KAME_HIT_7 | Defeat 7th and subsequent enemy in a row while sliding |
É | 0x3a | No | 0xf6 | SE_VOC_OPDM_UN_01 | Player looks up at logo |
Ê | 0x3b | No | 0xfc | SE_VOC_OPDM_AWAWA_02 | |
Ë | 0x3c | No | 0xff | SE_VOC_OPDM_HOEE | |
Ì | 0x3d | No | 0x10a | SE_VOC_OPDM_PEACH_CRY | |
Í | 0x3e | No | 0x101 | SE_AMB_OPDM_WARBLE | Intro birds |
Î | 0x3f | No | 0x102 | SE_AMB_OPDM_THUNDER | Thunder strike on castle |
Ï | 0x40 | No | 0x104 | SE_EMY_OPDM_KPJR_FOOT | Bowser Jr. sneaks up on peach |
Ñ | 0x41 | No | 0x109 | SE_PLY_OPDM_MA_HIT | |
Ò | 0x42 | No | 0x10d | SE_OBJ_OPDM_NEW_FALL | |
Ó | 0x43 | No | 0x10e | SE_OBJ_OPDM_NEW_SET | |
Ô | 0x44 | No | 0x10f | SE_OBJ_OPDM_LOGO_FALL_L | |
Ö | 0x45 | No | 0x110 | SE_OBJ_OPDM_LOGO_FALL_S | |
Ù | 0x46 | No | 0x170 | SE_OBJ_COIN_BOUND | Loose coin hit ground |
Ú | 0x47 | No | 0x174 | SE_OBJ_ITEM_APPEAR | Item out of block |
Û | 0x48 | No | 0x13a | SE_SYS_MID_POINT | Pass checkpoint |
Ü | 0x49 | No | 0x13e | SE_SYS_HURRY_UP | |
ß | 0x4a | No | 0x14d | SE_PLY_HIP_ATTACK | Ground-pound hits ground / Ground-pound hits other player |
à | 0x4b | No | 0x36 | SE_EMY_KPJR_UH | Bowser Jr. “wakes up” after battle |
á | 0x4c | No | 0x37 | SE_EMY_KPJR_LAND | Bowser Jr. land after jump attack |
â | 0x4d | No | 0x3b | SE_EMY_KPJR_GUARD_OFF | Bowser Jr. stop hiding in shell |
ä | 0x4e | No | 0x3c | SE_EMY_KPJR_DAMAGE | Bowser Jr. stomped |
ç | 0x4f | No | 0x3d | SE_EMY_KPJR_PURUPURU | Bowser Jr. shakes head after waking up after battle |
è | 0x50 | No | 0x77 | SE_EMY_KAME_HIT_7 | Defeat 7th and subsequent enemy in a row while sliding |
é | 0x51 | No | 0xf6 | SE_VOC_OPDM_UN_01 | Player looks up at logo |
ê | 0x52 | No | 0xfc | SE_VOC_OPDM_AWAWA_02 | |
ë | 0x53 | No | 0xff | SE_VOC_OPDM_HOEE | |
ì | 0x54 | No | 0x10a | SE_VOC_OPDM_PEACH_CRY | |
í | 0x55 | No | 0x101 | SE_AMB_OPDM_WARBLE | Intro birds |
î | 0x56 | No | 0x102 | SE_AMB_OPDM_THUNDER | Thunder strike on castle |
ï | 0x57 | No | 0x104 | SE_EMY_OPDM_KPJR_FOOT | Bowser Jr. sneaks up on peach |
ñ | 0x58 | No | 0x109 | SE_PLY_OPDM_MA_HIT | |
ò | 0x59 | No | 0x10d | SE_OBJ_OPDM_NEW_FALL | |
ó | 0x5a | No | 0x10e | SE_OBJ_OPDM_NEW_SET | |
ô | 0x5b | No | 0x10f | SE_OBJ_OPDM_LOGO_FALL_L | |
ö | 0x5c | No | 0x110 | SE_OBJ_OPDM_LOGO_FALL_S | |
ù | 0x5d | No | 0x170 | SE_OBJ_COIN_BOUND | Loose coin hit ground |
ú | 0x5e | No | 0x174 | SE_OBJ_ITEM_APPEAR | Item out of block |
û | 0x5f | No | 0x13a | SE_SYS_MID_POINT | |
ü | 0x60 | No | 0x13e | SE_SYS_HURRY_UP | |
. | 0x61 | No | 0x15b | SE_PLY_FOOTNOTE_H | |
• | 0x62 | No | 0x15e | SE_PLY_FOOTNOTE_H | |
_ | 0x63 | No | 0x16a | SE_PLY_CHANGE_SMALL | Enter/exit pipe / Enter warp / lose powerup |
- | 0x64 | No | 0x163 | SE_PLY_CHANGE_BIG | Get powerup / Collect Starman as Mega Player |
[another type of line] | 0x65 | No | 0x167 | SE_PLY_CHANGE_MAME | Become mini |
& | 0x66 | Yes | 0x177 | SE_OBJ_BLOCK_BREAK | Player break brick block / boss shutter block spawn/break / block broken by tile destroyer sprite / bridge destroyed in Bowser/Big Bowser boss / peach platform destroyed in final boss / Bob-omb destroy block / Big Unagi destroy block / Mummipokey sand ball break |
' | 0x67 | Yes | 0x178 | SE_PLY_STAR_ATTACK | Mega Player touch enemy/Big Player touch Mini Goomba / Big Unagi destroy block / Broozer destroy block |
Entrances
1. Entrance Guide
Click the Door icon at the top to edit entrances.
Settings
• *Camera X:**
• *Camera Y:**
• *Entrance ID:** The ID associated with the entrance.
• *Destination ID:** The number of the area the pipe goes to. If not changing area, set to 0.
• *Destination Entrance:** The ID of the entrance it goes to.
• *Connected Pipe ID:** The ID of the path that makes up the pipe. Remember to check "Connected Pipe".
• *View:** The ID of the view the entrance is currently in. Not the destination view.
• *Exit Only:** Check this if you don't want the player to be able to enter, I.E. a one-way pipe.
• *<entrancesetting16>:** Not sure what it does.
• *Connected Pipe:** Check this if you're using a connected pipe. (Such as 7-A)
• *Display on Lower Screen:** Displays the view on the lower screen that the entrance is currently in.
Warp Pipe
Warp pipes are the way Mario gets around to different Views or Areas.
Simple Warp Pipe
First off, build a warp pipe using blocks. For this, I'll be using a upwards warp pipe, (object type 102)
• Place the warp pipe, make sure it's vertical. (And make sure it extends into the ground or is at least 3 blocks high.)
• Click the door icon, and add an entrance.
• Using shift+dragging, place it onto the top left part of the warp pipe.
• Click the drop down menu on the left side, select "Pipe facing Up." Set the View that it's in.
• (Note the Entrance ID if you plan to make it both ways.)
• Now go build another warp pipe somewhere else, make it horizontal this time.. (Either in the same Area or not.)
• Add an entrance, move it with shift+dragging, and place it at the top of the end.
• Set the entrance to "Pipe Facing Right."
• Check "Exit-Only." If it's in a different View, be sure to set the View it's in.
• Note it's Entrance ID, and select the first warp pipe entrance you created.
• Set the "Destination Area" to whatever area the second warp pipe is in (if you created it in another area) and set the Destination ID to the Entrance ID of the second warp pipe entrance.
• Save, and test it. It should work.
• *Troubleshooting:**
If you appear at the start of the level or in another spot not intended, check the "Destination ID".
If your camera appears somewhere without Mario, and then you die, check that the destination entrance has the View set correctly.
Connected Warp Pipe
For this, I'm gonna go ahead and make a pipe that goes up then a turn to the left. (Use Shift+dragging on a block to change length and height.) Use object 59 for a good looking turn.
Set that up, and add the entrances. You don't have to set a Destination ID.
• First, click the first path icon.
• Add a path, and set it up so the first square (0) is down 2 squares, and right 1 square from the leftmost entrance.
• Next, use Control+dragging to make two more squares, one at the top of the bottommost pipe, one to the bottom left of the entrance.
• Set up the paths with this trick.
Unknown 6:
0=Pipe facing down
1=Pipe facing right
2=Pipe facing up
3=Pipe facing left
In my pipe,
square 0 is //Unknown 6: 3//
square 2 is //Unknown 6: 0//
• Now select each entrance, check "Connected Pipe", and set the Connected Pipe ID to the Path ID of the paths you just set up (IE. 0)
• For the entrance closest to the end of the path, set "Destination Area" to 1.
• Save and Play.
• *Troubleshooting**
If you enter the pipe, and a transition appears, check "connected pipe" on both entrances.
If you enter the pipe, then come back out immediately, doublecheck that the entrance closest to the end of the path has "Destination Area" set to 1, and that the "Connected Pipe ID" is correctly set.
List of Activator Sprites
1. General Event Controllers
- [Class=020] [Sprite=101] Event Controller
- [Class=087] [Sprite=155] Special exit controller (warp entrance)
- [Class=137] [Sprite=164] Event Controller AND
- [Class=138] [Sprite=165] Event Controller OR
- [Class=139] [Sprite=166] Event Controller Random
- [Class=140] [Sprite=167] Event Controller Buffer
- [Class=141] [Sprite=168] Event Controller Zone
- [Class=142] [Sprite=286] Event Controller Sequencer
- [Class=255] [Sprite=169] Spin Block (unused Actor 255)
2. Switches and Other Event Controllers
- [Class=067] [Sprite=235] Star Coin
- [Class=086] [Sprite=152] Event trigger block
- [Class=151] [Sprite=034] Red Coin Ring
- [Class=242] [Sprite=107] ? Switch
- [Class=243] [Sprite=291] Brick Block containing ? Switch
- [Class=244] [Sprite=066] P Switch
- [Class=245] [Sprite=088] Brick Block containing P Switch
- [Class=246] [Sprite=108] ! Switch
- [Class=247] [Sprite=110] Brick Block containing ! Switch (unused actor)
- [Class=265] [Sprite=041] Bowser bridge switch (skull switch)
3. Triggerable Sprites
- [Class=067] [Sprite=235] Star Coin
- [Class=079] [Sprite=103] Dorrie
- [Class=080] [Sprite=106] Red Coin
- [Class=092] [Sprite=192] Coin Spawner (unused actor)
- [Class=161] [Sprite=068] Lift moving up and down
- [Class=162] [Sprite=069] Lift moving left and right
- [Class=174] [Sprite=078] Lift moving one way once stood on
- [Class=183] [Sprite=099] Four platform rickshaw lift
- [Class=206] [Sprite=197] Tile Creator/Destroyer (Tile God)
- [Class=242] [Sprite=107] ? Switch
- [Class=243] [Sprite=291] Brick Block containing ? Switch
- [Class=244] [Sprite=066] P Switch
- [Class=245] [Sprite=088] Brick Block containing P Switch
- [Class=246] [Sprite=108] ! Switch
- [Class=247] [Sprite=110] Brick Block containing ! Switch (unused actor)
- [Class=263] [Sprite=292] Event Activated Door
- [Class=265] [Sprite=041] Bowser bridge switch (skull switch)
- [Class=276] [Sprite=218] Auto-scrolling controller
- [Class=278] [Sprite=231] Water
- [Class=279] [Sprite=234] Lava
- [Class=281] [Sprite=259] Poisoned Water
List of player animations
Name | Value | anmFile | anmName |
Idle | 0x00 | plmario | wait |
WalkSlow | 0x01 | plmario | walk |
Walk | 0x02 | plmario | run |
Dash | 0x03 | pl | b_dash |
DashFast | 0x04 | pl | b_dash2 |
Jump | 0x05 | pl | jump |
JumpFall | 0x06 | pl | jump2 |
JumpLand | 0x07 | pl | jumped |
TripleJump_unused | 0x08 | pl | 2jump1 |
TripleJumpFall | 0x09 | pl | 2jump2 |
TripleJumpLand | 0x0A | pl | 2jumped; also used as DoubleJumpLand |
TripleJump | 0x0B | pl | roll_jump |
Skid | 0x0C | pl | turn |
SkidTurn | 0x0D | pl | trned |
GroundPoundRoll | 0x0E | pl | hipsr |
GroundPoundFall | 0x0F | pl | hipat |
GroundPoundLand | 0x10 | pl | hiped |
Crouched | 0x11 | pl | stoop |
ThrowFireball | 0x12 | pl | fire_at |
SlipBumpFall | 0x13 | pl | sdown |
Sliding | 0x14 | plnovs | slip |
StandUp | 0x15 | pl | sliped |
SlipFall | 0x16 | plnovs | slipla |
DiveLand | 0x17 | plnovs | sldctslpbk |
DiveSlide | 0x18 | plnovs | lost |
DiveStandUp | 0x19 | plnovs | roll (static) |
RollPose | 0x1A | pl | roll (loop) |
Roll | 0x1B | pl | carry_start |
CarryStart | 0x1C | pl | carry_wait |
CarryIdle | 0x1D | pl | carry_walk |
CarryWalk | 0x1E | pl | carry_throw |
CarryThrow | 0x1F | pl | scale_up |
MegaGrow | 0x20 | pl | wimp |
Walljump | 0x21 | pl | wsld |
WallSlide | 0x22 | pl | swim_in; possibly unused |
SwimStart | 0x23 | plnovs | swim_wait |
SwimIdle | 0x24 | plnovs | paddle_1 |
SwimIdle1 | 0x25 | plnovs | swim |
Swim_legs | 0x26 | plnovs | paddle_2 |
SwimPaddle2 | 0x27 | plnovs | paddle_end |
SwimPaddleEnd | 0x28 | plnovs | tree_start |
PoleGrab | 0x29 | plnovs | tree_wait |
PoleIdle | 0x2A | plnovs | tree_wait |
PoleClimb | 0x2B | plnovs | tree_climb |
PoleSlide | 0x2C | plnovs | tree_pose |
PushedFall | 0x2D | pl | shfdn |
Push | 0x2E | pl | push |
SpinJump | 0x2F | pl | spin_jump |
SpinJumpLand | 0x30 | pl | spin_jump_end |
CeilingRopeGrab | 0x31 | plnovs | monkey_start |
CeilingRopeRightHandGrab | 0x32 | plnovs | monkey_wait_r |
CeilingRopeLeftHandGrab | 0x33 | plnovs | monkey_wait_l |
CeilingRopeRightHandMove | 0x34 | plnovs | monkey_r_to_l |
CeilingRopeLeftHandMove | 0x35 | plnovs | monkey_l_to_r |
LavaDamageJump | 0x36 | plnovs | firejmp |
CrouchStart | 0x37 | pl | squat_start |
SwimCarry | 0x38 | plnovs | swim_carry |
SwimPaddleCarry | 0x39 | plnovs | paddle_carry |
SwimThrow | 0x3A | plnovs | swim_throw |
BumpedNormal | 0x3B | pl | sfbdn |
BumpedHard | 0x3C | pl | sffdn |
CannonShoot | 0x3D | pl | shoot |
Shocked | 0x3E | plnovs | e_shock |
ShockedFall | 0x3F | plnovs | e_down: unused |
TightropeWalk | 0x40 | plnovs | rope_walk |
MegaWalk | 0x41 | pl2 | big_walk |
MegaJump | 0x42 | pl2 | big_jump_st |
MegaJumpLand | 0x43 | pl2 | big_jump_ed |
MegaGroundPoundRoll | 0x44 | pl2 | big_hip_st |
MegaGroundPoundFall | 0x45 | pl2 | big_hip_at |
MegaGroundPoundLand | 0x46 | pl2 | big_hip_ed |
LedgeStand | 0x47 | plnovs | wall_wait |
LedgeStandMoveLeft | 0x48 | plnovs | wall_walk_l |
LedgeStandMoveRight | 0x49 | plnovs | wall_walk_r |
LedgeStandClimbDown | 0x4A | plnovs | hang_start |
LedgeGrabClimbUp | 0x4B | plnovs | hang_up |
LedgeGrabIdle | 0x4C | plnovs | hang_wait |
LedgeGrabMoveLeft | 0x4D | plnovs | hang_walk_l |
LedgeGrabMoveRight | 0x4E | plnovs | hang_walk_r |
VineRopeIdle | 0x4F | plnovs | rope_swing |
SpinDrill | 0x50 | pl2 | spin_jump2 |
JumpCombo2 | 0x51 | pl2 | jump_b |
JumpCombo3 | 0x52 | pl2 | jump_c |
JumpCombo4_kick | 0x53 | pl2 | jump_d |
LongJump | 0x54 | pl2 | jump_b_1 |
LongJumpFall | 0x55 | pl2 | jump_b_2 |
DoubleJump | 0x56 | pl2 | 2jmp_c_1 |
DoubleJumpFall | 0x57 | pl2 | 2jmp_c_2 |
BackflipJump | 0x58 | pl2 | 2jmp_d_1; possibly unused |
BackflipJumpFall | 0x59 | pl2 | 2jmp_d_2 |
UnknownStarJump | 0x5A | pl2 | 2jmp_e_1 |
UnknownStarJumpFall | 0x5B | pl2 | 2jmp_e_2 |
JumpCombo5_twirl | 0x5C | pl2 | jump_e |
PipeEntrance | 0x5D | pl2 | low_walk |
DeadFall | 0x5E | pl2 | dead |
DeadPose | 0x5F | pl2 | dead_pose |
GoalJump | 0x60 | plnovs | goal_jump |
GoalCap | 0x61 | plnovs | goal_puton_cap |
DoorWalk | 0x62 | pl2 | door_walk |
BattleGoalJump | 0x63 | plnovs | bt_goal_jmp |
BattleGoalOut | 0x64 | plnovs | bt_goal_out |
MegaJumpFall | 0x65 | pl2 | big_jmp_2 |
TightropeIdle | 0x66 | plnovs | rope_wait |
TightropeJumpLand | 0x67 | plnovs | rope_jump_ed |
MiniWalk | 0x68 | pl2 | zero_g_walk |
MiniJump | 0x69 | pl2 | zero_g_jump |
MiniJumpFall | 0x6A | pl2 | zero_g_jump2 |
MiniJumpLand | 0x6B | pl2 | zero_g_jump_ed |
UnusedSpinJumpOff | 0x6C | pl2 | spin_jump_off; possibly unused |
UnusedSpinJump | 0x6D | pl2 | spin_jump_st |
Shell | 0x6E | pl2 | shell_in |
StarRoll | 0x6F | pl2 | star_roll |
FenceMoveVertical | 0x70 | plnovs | net_walk1 |
FenceIdle | 0x71 | plnovs | net_wait |
UnusedDamageFall | 0x72 | plnovs | e_damage1 |
UnusedDamageLand | 0x73 | plnovs | e_damage2 |
FenceSlam | 0x74 | plnovs | net_attack |
FenceMoveHorizontal | 0x75 | plnovs | net_walk2 |
LedgeJump | 0x76 | plnovs | w_jump1 |
LedgeJumpFall | 0x77 | plnovs | w_jump2 |
LedgeJumpLand | 0x78 | plnovs | w_jump_ed |
LedgeGrab | 0x79 | plnovs | jump_hang |
SwimWalk | 0x7A | plnovs | swim_walk |
SwimStanding | 0x7B | plnovs | swim_standing |
Buried | 0x7C | plnovs | buried |
BuriedStandUp | 0x7D | plnovs | buried_ed |
BuriedFall | 0x7E | plnovs | buried_st |
BuriedDamage | 0x7F | plnovs | buried_damage |
MegaSitCrouch | 0x80 | pl2 | big_hip_squat |
WaterDeadFall | 0x81 | plnovs | swim_dead |
TightropeUnbalanced | 0x82 | plnovs | rope_wait2 |
MegaIdle | 0x83 | pl2 | big_wait |
BossCallPeach | 0x84 | plnovs | find |
BossStarePeach | 0x85 | plnovs | find_loop |
BossReactPeach | 0x86 | plnovs | find_surprise |
BossWin | 0x87 | plnovs | boss_key_get |
MegaWin | 0x88 | plnovs | big_goal |
FinalBossEnd | 0x89 | plnovs | m_kiss |
FinalBossPeach | 0x8A | plnovs | m_fall_wait |
FinalBossCap | 0x8B | plnovs | m_escort |
FinalBossKiss | 0x8C | plnovs | m_shy |
GoalJumpLand | 0x8D | plnovs | goal_jump_ed |
BossIdle | 0x8E | plnovs | bt_wait |
BossStartled | 0x8F | plnovs | bt_surprise |
BeanStalkMove | 0x90 | plnovs | pea_plant |
BeanStalkGrab | 0x91 | plnovs | pea_plant_st |
BeanStalkIdle | 0x92 | plnovs | pea_plant_wait |
BowserJrWin | 0x93 | plnovs | jr_clear |
Background Scrolling Data Info
Foregrounds and backgrounds scroll differently in many levels, sometimes they have a fast speed ratio and sometimes they can be completely static, this can be changed via hex editing your level.
- Background only --> Change block 3 only.
- Foreground only --> Change block 5 only.
- Both --> Change both blocks 3 and 5.
- Byte 11: Control BG horizontal scrolling.
- Byte 13: Control BG vertical scrolling.
And for each byte:
- First Nybble: Control where the background starts when the player enters the views.
- Second Nybble: Control speed.
Data
- 0x0: Makes the BG completely static. Used in w2-3 (sewer level) for example.
- 0x1: Scroll slower than level. Used in most levels.
- 0x2: Scroll slower than level, maybe slower than 0x1?
- 0x3: Slightly faster than 0x2.
- 0x4: Scroll faster than level.
- 0x5: Approximately 3 times speed scrolling.
- 0x6: Extremely slow scroll, almost static to screen.
- 0x7: A little faster than 0x6.
- 0x8: Scroll slower than level, again?
- 0x9: Scroll exactly the same as level.
- 0x10: Scroll same as level.
- 0x11: Vertical started image at top half of level and horizontal/vertical scrolling is about mid speed.
- 0x30: Scroll same as level.
- 0xFF: Makes the BG scroll extremely fast.
Disabling vertical scrolling
- Background only --> Change both bytes 13 and 16 of block 3 only.
- Foreground only --> Change both bytes 13 and 16 of block 5 only.
- Both --> Change both bytes 13 and 16 of both blocks 3 and 5.
- Byte 13: enters 40.
- Byte 16: enters 10.
Automatic horizontal scrolling
It only works for backgrounds that already have a horizontal animation, this can be achieved by putting a value of 10 for byte 16 and it will animate the whole background instead of partially animating it.
(Note : if byte 13 value is somewhere between 40 and 4F, this effect will be overridden and instead the vertical scrolling will be disabled).
Modding Tutorials
Tutorials on how to mod NSMB DS
Mario vs Luigi
This page documents how to play MvsL hacks and objects that work in MvsL.
Modding MvsL is significantly more difficult than modding Singleplayer levels. If you're just getting started with modding the game, you might want to start here
FaQ
How do I play Mario vs Luigi hacks?
- The easiest way to play an MvsL hack on real hardware is by using “Multi-cart”
- This requires that you own two flashcards (such as an R4 Card).
- To set this method up, simply put the same ROM on both flashcards. Then, in the game, choose the option to “Compete with another New Super Mario Bros. Owner” and play MvsL as you normally would.
- If you do not have access to two flashcards, then you have two, more difficult, options remaining
- Your first option is to try and use a hacked NDS firmware that bypasses Download Play's signature check
- Download firmware.nds and put it on your flashcard.
- Open this ROM on the DS you will launch Download Play from.
- Now, eject the flashcard from the DS you just ran the ROM on. (This will not cause your DS to freeze)
- Finally, put the flashcard back in the other DS.
- Once you have done this, you can run the ROM of the MvsL hack and select “Play with someone who doesn't own New Super Mario Bros”
- If the firmware ROM does not work on your flashcard, try this one instead.
- Your final option is to use normal DS Download Play with “DLP Mode” in NSMBe 5
- Open a clean (unedited) ROM
- Open it in NSMBe
- After you open the ROM, go to Tools and check “Enable DLP-friendly mode”
- Now, you can make whatever changes you want to the ROM
- When you're done, you can play with another DS through DS Download Play like you normally would using the “Play with someone who doesn't own New Super Mario Bros” option
- Your first option is to try and use a hacked NDS firmware that bypasses Download Play's signature check
- If the game hangs at the Nintendo logo, you might have missed a step. Double check you did everything and try again with another clean ROM
- If the DS freezes with a black screen after you select a level it can mean one of two things:
- Your flashcard is not compatible with this method
- There's something wrong with the level that is making the game freeze
My level crashes, what do I do now?
- If you are not using any Code Hacks, then here are some things to consider
- Have you changed any object banks? This causes MvsL to crash so you need to change the object banks back to whatever the level had originally.
- Double-check that you are not using an object that has been confirmed to crash MvsL. There is a table later on this page that shows what objects are compatible with MvsL.
- Have you changed the number of Battle Stars that are in the level? Changing the number of Battle Stars in a level can cause MvsL to crash, and you will need to restore the original amount of Battle Stars the level had.
My level crashes, but I'm using Code Hacks!
- Even with Code Hacks, not all objects work in MvsL. Take a look at the table at the end of the page to see if all of the objects you're using are compatible with MvsL.
My level makes us de-sync, what's going on?
- Because of the nature of how multiplayer works in this game, the Random Number Generator seed is only synchronized once when the connection is established and only the input is synchronized during gameplay so it is required that each console knows what the other console is doing. If something is coded in a way that won't account for the other console, the multiplayer state of the game will be compromised. For example, if it happens that an enemy does not properly handle multiple players it might just check the variables of the player of its own console, causing it to read a different value on each console. This causes the enemy to act differently on each DS, thus causing a de-sync.
Implementation example:
// Enemy reads only the position of its own console player playerPositionX = Game::getPlayer(Game::localPlayerID)->position.x; // Now the position that was read is different between both consoles // for this enemy and he will behave differently for each console! // This is very bad! // A solution would be to get the position of the closest player playerPositionX = enemy->getClosestPlayer(nullptr, nullptr)->position.x; // This way, it gets the closest player instead of its console player
Object Compatibility (Vanilla)
- These objects will work in MvsL regardless of if you are using code hacks
- Most of the objects in this list are objects that are already used in MvsL
Object ID | Actor Name |
---|---|
23 | Pipe Piranha Plant (Facing up) |
24 | Pipe Piranha Plant (Facing down) |
25 | Pipe Piranha Plant (Facing right) |
26 | Pipe Piranha Plant (Facing left) |
27 | Bill Blaster (Bullet Bill launcher) |
28 | Bob-omb |
71 | Stonewall moving up & down |
72 | Stonewall moving left & right |
95 | Spin Block |
148 | Goomba |
149 | Koopa Troopa |
210 | MvsL Big Star |
Object Compatibility with Code Hacks
- This spreadsheet is based on the MvsL Hacking Starter Pack
- There are 4 kinds of compatibility
- Works: This object completely works in MvsL
- Partial: Some parts of this object do not work in MvsL. The notes column will mention what doesn't work
- N/A: The object does not load but it also does not crash the game
- Crash: The object crashes the game when loaded. See the notes for possible workarounds.
Object ID | Object Name | Compatibility | Notes |
0 | Crash Object (Player Actor) | Crash | Needs the clone code hack |
1 | Crash Object (Player Actor) | Crash | Needs the clone code hack |
2 | Crash Object (Player Actor) | Crash | Needs the clone code hack |
3 | Crash Object (Player Actor) | Crash | Needs the clone code hack |
4 | Crash Object (Player Actor) | Crash | Needs the clone code hack |
5 | Crash Object (Player Actor) | Crash | Needs the clone code hack |
6 | Crash Object (Player Actor) | Crash | Needs the clone code hack |
7 | Crash Object (Player Actor) | Crash | Needs the clone code hack |
8 | Crash Object (Player Actor) | Crash | Needs the clone code hack |
9 | Crash Object (Player Actor) | Crash | Needs the clone code hack |
10 | Nothing | N/A | Technically works due to it being nothing |
11 | Nothing | N/A | Technically works due to it being nothing |
12 | Nothing | N/A | Technically works due to it being nothing |
13 | Nothing | N/A | Technically works due to it being nothing |
14 | Nothing | N/A | Technically works due to it being nothing |
15 | Nothing | N/A | Technically works due to it being nothing |
16 | Nothing | N/A | Technically works due to it being nothing |
17 | Nothing | N/A | Technically works due to it being nothing |
18 | Nothing | N/A | Technically works due to it being nothing |
19 | Nothing | N/A | Technically works due to it being nothing |
20 | Defunct Actor 22 | N/A | If using the Actor Spawner code hack it works |
21 | Mega Goomba | Works | If using Boss Particle code hack |
22 | Hammer Brother from map | N/A | MvsL is missing a world map so... |
23 | Pipe Piranha Plant (facing up) | Works | |
24 | Pipe Piranha Plant (facing down) | Works | |
25 | Pipe Piranha Plant (facing right) | Works | |
26 | Pipe Piranha Plant (facing left) | Works | |
27 | Bill Blaster (Bullet Bill launcher) | Works | |
28 | Bob-omb | Works | |
29 | Princess Peach | Works | |
30 | Monty Tank | Works | If using Boss Particle code hack |
31 | Cheep Cheep | Works | |
32 | Goal Pole's Flag | Works | |
33 | Trampoline (portable springboard) | Crash | |
34 | Red Ring | Crash | |
35 | Final Bowser Controller | Crash | |
36 | Thwomp | Works | |
37 | Spiny | Works | |
38 | Boo | Works | |
39 | Castle boss controller | Partial | Some of the options crash the game, you can use a switch instead. |
40 | Lakitu (unused object) | Works | |
41 | Bowser bridge switch | Works | Loads, but graphics are not loaded correctly |
42 | Chain Chomp/Log | Works | |
43 | Chain Chomp (unused object) | Works | |
44 | Fire Snake (unused Actor 46) | Works | |
45 | Respawnable Hidden Block | Works | |
46 | Event controller - activates Spiked Ball when touched by Snake Block | Works | |
47 | Lakithunder | Works | |
48 | Aquatic bubble current (up) | Works | |
49 | Aquatic bubble current (down) | Works | |
50 | Aquatic bubble current (right) | Works | |
51 | Aquatic bubble current (left) | Works | |
52 | Buzzy Beetle | Works | |
53 | Dry Bones | Works | |
54 | Lava Bubble (Podoboo) | Works | |
55 | Bullet Bill Spawner | Works | |
56 | Fire Bar | Works | |
57 | Coin | Works | |
58 | Bowser | Works | |
59 | Hammer Brother | Works | |
60 | Nothing | N/A | Technically works due to it being nothing |
61 | Nothing | N/A | Technically works due to it being nothing |
62 | Big Bowser (unused object) | Works | |
63 | Dry Bowser | Works | |
64 | Whomp | Works | |
65 | Cheepskipper | Works | |
66 | P Switch | Works | Graphics are not loaded correctly |
67 | Sushi (shark) | Works | |
68 | Lift moving up and down | Works | |
69 | Lift moving left and right | Works | |
70 | Rotating log lift (unused actor) | Works | |
71 | Stonewall moving up and down | Works | |
72 | Stonewall moving left and right | Works | |
73 | Wobbly metal lift | Works | |
74 | Wobble Rock | Works | |
75 | Seesaw lift | Works | |
76 | Scale lift | Works | |
77 | Flimsy Lift (falls once touched) | Works | |
78 | Lift moving one way once stood on | Works | |
79 | Three-platform rickshaw lift (rotates in place by self) | Works | |
80 | Lift spawner | Works | |
81 | Nothing | N/A | Technically works due to it being nothing |
82 | Rotating rectangle lift | Works | |
83 | Self-activating block | Works | |
84 | Zoom | Works | |
85 | Flip fence (duplicate object) | Works | |
86 | Rotating triangle lift | Works | |
87 | Nothing | N/A | Technically works due to it being nothing |
88 | Brick Block containing P Switch | Works | P-Switch graphics are not loaded correctly |
89 | Snailicorn | Works | |
90 | Wiggler | Works | |
91 | Track-controlled lift | Works | |
92 | Unagi (eel) | Works | |
93 | Arrow signboard | Works | |
94 | Swooper | Works | |
95 | Spin Block | Works | |
96 | Seaweed | Works | |
97 | Nothing | N/A | Technically works due to it being nothing |
98 | Camera vertical scrolling | N/A | |
99 | Four-platform rickshaw lift | Works | |
100 | Vertical camera offset (unused actor) | N/A | |
101 | Event controller - view enter | Works | |
102 | Spiked Ball | Works | |
103 | Dorrie | Works | |
104 | Tweester (Tornado) | Works | |
105 | Whirlpool | Works | |
106 | Red Coin | Crashes | |
107 | ? Switch | Works | Graphics are not loaded correctly |
108 | ! Switch | Works | Graphics are not loaded correctly |
109 | Amp | Works | |
110 | Brick Block containing !-Switch | Works | !-Switch graphics are not loaded correctly |
111 | Floating log | Works | |
112 | Nothing | N/A | Technically works due to it being nothing |
113 | Cheep Chomp | Works | |
114 | Burner (Small) | Works | |
115 | Large Spiked Ball | Works | |
116 | Skeeter (Water Bug) | Works | Causes a desync however |
117 | Map Flying ? Block | N/A | |
118 | Burner | Works | |
119 | Swinging lift (pendulum-like) | Works | |
120 | Grounded Piranha Plant | Works | |
121 | Nothing | N/A | Technically works due to it being nothing |
122 | Big Grounded Piranha Plant | Works | |
123 | Grounded Fire Piranha Plant | Works | |
124 | Large grounded Fire Piranha Plant | Works | |
125 | Defunct Actor 229 | N/A | |
126 | Drawbridge lift | Works | |
127 | Big four-platform rickshaw lift | Works | |
128 | Warp Cannon | Works | |
129 | Boss Key Location | Works | |
130 | Jumping Cheep Cheep | Works | |
131 | Checkpoint - vertical | Works | Does the animation but doesn't set anything |
132 | Checkpoint | Works | Does the animation but doesn't set anything |
133 | Nothing | N/A | Technically works due to it being nothing |
134 | Nothing | N/A | Technically works due to it being nothing |
135 | Nothing | N/A | Technically works due to it being nothing |
136 | Pokey | Works | |
137 | Nothing | N/A | Technically works due to it being nothing |
138 | Nothing | N/A | Technically works due to it being nothing |
139 | Nothing | N/A | Technically works due to it being nothing |
140 | Boss Key | Works | |
141 | Swelling ground | Works | |
142 | Tightrope | Works | |
143 | Spiked ? Block (unused actor 251) | Crashes | |
144 | Spiked ? Block | Crashes | |
145 | Spiked ? Block (unused actor 253) | Crashes | |
146 | Ground-pound panel | Works | |
147 | Bump from below platform | Works | |
148 | Goomba | Works | |
149 | Koopa Troopa | Works | |
150 | Koopa Paratroopa | Works | |
151 | Nothing | N/A | Technically works due to it being nothing |
152 | Event trigger block | Crash | |
153 | Nothing | N/A | Technically works due to it being nothing |
154 | Nothing | N/A | Technically works due to it being nothing |
155 | Special exit controller (warp entrance) | Crash | Sometimes just corrupts graphics and does nothing |
156 | Nothing | N/A | Technically works due to it being nothing |
157 | Fire Brother | Partial | Causes a desync |
158 | Boomerang Brother | Partial | Causes a desync |
159 | Nothing | N/A | Technically works due to it being nothing |
160 | Nothing | N/A | Technically works due to it being nothing |
161 | Nothing | N/A | Technically works due to it being nothing |
162 | Mushroom Platform lift | Works | |
163 | Nothing | N/A | Technically works due to it being nothing |
164 | Event controller - "AND" | Works | |
165 | Event controller - "OR" (If X OR Y, do Z) | Works | |
166 | Event controller - "RANDOM" | Works | |
167 | Event controller - chainer (If X, do Y) | Works | |
168 | Event controller - "IF" (uses zones) | Works | |
169 | Spin Block (unused Actor 255) | N/A | Doesn't spawn |
170 | Nothing | N/A | Technically works due to it being nothing |
171 | Spin Block (unused Actor 256) | N/A | Doesn't Spawn |
172 | Nothing | N/A | Technically works due to it being nothing |
173 | Swinging/able rope | Works | |
174 | Mushroom Platform lift | Works | |
175 | Bouncy bricks (Unused) | Works | |
176 | Nothing | N/A | Technically works due to it being nothing |
177 | Nothing | N/A | Technically works due to it being nothing |
178 | Nothing | N/A | Technically works due to it being nothing |
179 | Nothing | N/A | Technically works due to it being nothing |
180 | Climbing Koopa | Works | |
181 | Nothing | N/A | Technically works due to it being nothing |
182 | Nothing | N/A | Technically works due to it being nothing |
183 | Lakitu spawner | Works | |
184 | Nothing | N/A | Technically works due to it being nothing |
185 | Cheep Cheep random spawner | Works | |
186 | Paragoomba | Works | |
187 | Balance lift | Works | |
188 | Nothing | N/A | Technically works due to it being nothing |
189 | Pipe Cannon | Works | Desynchronizes the game |
190 | Nothing | N/A | Technically works due to it being nothing |
191 | Hanging Bouncing ? Block | Works | |
192 | Coin Spawner (unused actor) | Crash | |
193 | Big Dry Bones | Works | |
194 | Big Thwomp | Works | |
195 | 0 Stick to bottom length activator left | Works | |
196 | 0 Stick to bottom length activator right | Works | |
197 | Tile Creator/Destroyer (Tile God) | Crash | |
198 | In air vertical scroll stop left | N/A | |
199 | In air vertical scroll stop right | N/A | |
200 | Nothing | N/A | Technically works due to it being nothing |
201 | Nothing | N/A | Technically works due to it being nothing |
202 | Nothing | N/A | Technically works due to it being nothing |
203 | Unused Purple Mushroom Platform Lift | Works | |
204 | Fire Snake | Works | |
205 | Flame Chomp Spawner | Works | |
206 | Ghost house goo | Works | |
207 | Big Cheep Cheep | Works | |
208 | Nothing | N/A | Technically works due to it being nothing |
209 | Sledge Brother | Works | Causes a desync however |
210 | MvsL Battle Star | Works | Who would've thought |
211 | Blooper | Works | |
212 | Blooper Nanny (unused actor 144) | Works | |
213 | Blooper Nanny that w/ Baby Bloopers | Works | |
214 | Nothing | N/A | Technically works due to it being nothing |
215 | Nothing | N/A | Technically works due to it being nothing |
216 | Nothing | N/A | Technically works due to it being nothing |
217 | Nothing | N/A | Technically works due to it being nothing |
218 | Auto-scrolling controller | Works | If the players spawn in the same position after respawning it stops working |
219 | Spike Top | Works | |
220 | Bowser Jr. | Works | |
221 | Nothing | N/A | Technically works due to it being nothing |
222 | Mini Goomba | Works | |
223 | Flip fence | Works | |
224 | Big flip fence | Works | |
225 | Nothing | N/A | Technically works due to it being nothing |
226 | Scuttlebug | N/A | |
227 | Moneybag | Works | |
228 | Roulette Block | Crash | |
229 | Petey Piranha | Works | |
230 | Nothing | N/A | Technically works due to it being nothing |
231 | Water | Works | |
232 | Hanging ? Block | Works | |
233 | Swinging/able pole | Works | |
234 | Lava | Partial | Causes a desync, line the top with lava tiles |
235 | Star Coin | Crash | |
236 | Rotating square lift | Works | |
237 | Broozer | Works | |
238 | Purple Mushroom Platform lift | Works | |
239 | Yellow/Orange Mushroom Platform | Works | |
240 | Nothing | N/A | Technically works due to it being nothing |
241 | Bill Blaster Turret | Works | |
242 | Blue Mushroom Platform | Works | |
243 | Roof Spiny | Works | |
244 | Bouncy Mushroom Platform | Works | |
245 | Corked Pipe + foot pump | Crashes | |
246 | Floating barrel | Works | |
247 | Sushi spawner (shark spawner) | Works | |
248 | Balloon Boo | Works | |
249 | Track-controlled wall-jump lift | Works | |
250 | Crowber | Works | |
251 | Big Unagi | Crash | |
252 | Banzai Bill Blaster | Works | |
253 | Nothing | N/A | Technically works due to it being nothing |
254 | Kab-omb | Works | |
255 | Jungle FG Effect (Unused Actor) | Works | |
256 | Rotating carry-through-wall turntable-like lift | Works | |
257 | Coin trail Cheep Cheep | Works | |
258 | Spike Bass (unused object) | Works | |
259 | Poisoned Water | Partial | Causes desync |
260 | Fast Spike Pillar - Down | Works | |
261 | Fast Spike Pillar - Up | Works | |
262 | Fast Spike Pillar - Left | Works | |
263 | Fast Spike Pillar - Right | Works | |
264 | Mega Ground Pound's sky drops + | Crash | |
265 | Phantom Hand (Pointing hand) | Works | |
266 | Invisible Lava Bubble (unused actor) | Works | |
267 | Nothing | N/A | Technically works due to it being nothing |
268 | Underwater bounce bubble | Works | |
269 | Giant Wiggler | Works | |
270 | Smashed pipe object | Works | |
271 | Crowber spawner | Works | |
272 | Snowy branch | Works | |
273 | Snow Spike | Works | |
274 | Sinking-snow pile | Works | |
275 | Blockhopper | Partial | Desyncs |
276 | Scroll and Mario stop sideways | Works | |
277 | Arrow sign | Works | |
278 | Groundpound-able ghost house goo | Works | |
279 | Flipper (one-way gate) | Works | |
280 | Horizontal camera offset | N/A | Not sure how this object works |
281 | Squiggler | Works | |
282 | Swinging/able vine | Works | |
283 | Spike Bass spawner | Works | |
284 | Splunkin (pumpkin) | Works | |
285 | Scuttlebug spawner | N/A | |
286 | Event controller - multi-chainer | Works | |
287 | Enemy-in-Pipe Generator | Works | |
288 | Nothing | N/A | Technically works due to it being nothing |
289 | Platform Block (expandable block) | Works | Doesn't respawn if it turns into bricks and you collect a battle star. |
290 | Flying ? Block | Crash | Black screen |
291 | Brick Block containing ? Switch | Works | ? Switch graphics are not loaded correctly |
292 | Event Activated Door | Works | |
293 | Touching ground vertical scroll stop left | Works | |
294 | Touching ground vertical scroll stop right | Works | |
295 | Mummipokey | Works | Use a P-Switch |
296 | Lift moving left and right | Works | |
297 | Stonewall moving left and right | Works | |
298 | Stonewall moving u, d, l, r | Works | |
299 | Snake Block | Works | |
300 | Haunted lift | Works | |
301 | Toadsworth | Works | Only freezes Mario for a few seconds, and Luigi can roam freely. Background chooser will break because of BMG differences. |
302 | Toad House block | Doesn't work | Garble graphics. |
303 | Ball 'n' Chain | Works | |
304 | Spike Pillar - down | Works | |
305 | Final Castle Create Loop | N/A | I have no idea how this works. |
306 | Final Castle Wrong Path | N/A | I have no idea how this works. |
307 | Spike Pillar - up | Works | |
308 | Spike Pillar - left | Works | |
309 | Spike Pillar - right | Works | |
310 | Fog FG effect | Partial | Graphics are not loaded correctly |
311 | Snow FG effect 1 | Works | |
312 | Rise or lower while/once on Mushroom Platform lift - mechanical | Works | |
313 | Snow FG effect 2 | Works | |
314 | Snow FG effect 3 | Works | |
315 | Cloud FG effect | Partial | Graphics are not loaded correctly |
316 | Water FG effect 1 | Works | |
317 | Water FG effect 2 | Works | |
318 | Fire FG effect 1 | Works | |
319 | Fire FG effect 2 | Works | |
320 | Fire FG effect 3 | Works | |
321 | Light FG Effect 1 | N/A | |
322 | Light FG Effect 2 | Works | |
323 | Squishy cloud platform | Works | Both players can interact with it at the same time |
324 | Grassland Clouds FG effect | Partial | Graphics are not loaded correctly |
325 | Small Grassland Clouds FG effect | Partial | Graphics are not loaded correctly |
Modding 101 - Creating a Bare-Bones Level
Welcome to the world of New Super Mario Bros. DS modding. Making your first level is the first step every modder takes when starting from scratch.
In this tutorial, you'll learn how to:
- Install the necessary tools to start modding
- Open your ROM in the editor
- Open a level from your ROM
- Create a bare-bones level to build from
Section 1: Getting Ready
To edit the game, you'll need a copy of your New Super Mario Bros. DS ROM and the New Super Mario Bros. Editor (NSMBe).
We are not allowed to give a download to the ROM. If you have a 3DS, here is a guide that lets you dump your game cartridge ROM using a modded 3DS.
For the best compatibility for more complex tasks, you will need a US region ROM.
Head over to GitHub to download the latest version of NSMBe from the Mamamia Team. When you click the link, you will be taken to a page that looks like this:
Just click on NSMBeX.X.X.zip to download the editor. (The X's will match with whatever version the editor is on. As of writing this version is 5.4.1, as seen in the screenshot)
Now, in your downloads folder, you need to extract the zip file. On Windows, this is done by right-clicking the .zip and clicking Extract All... Just click extract on the window that appears. You should now have a folder in your Downloads folder named NSMBeX.X.X.
The final folder will look something like this:
You have now installed the necessary tools to begin modding
Section 2: Opening Your ROM
Now that you have the editor extracted, let's open up your ROM!
Inside of the NSMBeX.X.X folder, open the app named NSMBe5.exe. You should see a window that looks something like this:
Now, click on Open ROM... and open your dumped ROM of New Super Mario Bros. DS
The ROM will have an extension of .nds
You should now see this:
You have now opened your ROM in the editor
Section 3: Opening a Level
Now for the fun part, editing a level!
To start, we will open 1-1, Area 1. To do this, open the World 1 drop down, open the 1-1 dropdown, and finally double click on Area 1.
Each level in the game has a various number of Areas. Nintendo used these as a way to keep each sub-area separated. For example, Area 1 of 1-1 is where you start the level, and Area 2 is the bonus room found in Area 1.
You will now be presented with the level view:
If the level view appears too small, you may need to modify the config file. To do this: open the file named "NSMBe5.exe.config" using Notepad, delete the lines: <System.Windows.Forms.ApplicationConfigurationSection> <add key="DpiAwareness" value="PerMonitorV2"/></System.Windows.Forms.ApplicationConfigurationSection> After deleting the lines, save the file, restart the editor, and open Area 1 again.
You have now opened a level from your ROM
Section 4: Creating a Bare-Bones Level
It is best practice to start from a blank level, so let's clear out the existing level by pressing Ctrl+A to select everything in the level, followed by clicking the at the top of the editor window. Your blank level will look like this:
Now that we have a blank level, what do we need to add back?
All levels in NSMB DS must at minimum have a Start Entrance and at least one main View. With that being said, let's add them back!
To begin, we will add the main view. To do this, click on in the sub-menu bar. This will show a list of all the views in the level (or it would if we didn't just delete everything in the level). To create a view, all we need to do is click on Add. Your level will now have a transparent box:
You'll notice a bunch of settings here. For now, the only thing you need to worry about is checking Scroll vertically. This allows the in-game camera to follow Mario up and down inside of your level.
The View defines the bounds of your level. The camera is not allowed to go outside of the current view. Mario can go above the view, however the camera will not follow him. The sides of a view will stop Mario. Mario will die if he falls below the bottom of the view.
Click and drag the small box that says View 0 and move the View to the top left of the level. While we're moving the view, go ahead and grab the bottom right box and extend the view to be one square big. You're level should look like this now:
Now, let's create the Start Entrance. Click on the button in the sub-menu. Similarly to the views button, this will give a list of every Entrance that is in this level. Go ahead and click on Add to create a new Entrance.
Once again, there are a few settings on the entrance that you can play with but for now let's just move the entrance inside of our View.
There we go! We have what's at minimum required. However...if we were to play this level now, Mario would just fall down and die. Let's add a floor and the Goal Pole's Flag to this level!
To get to the Tile picker, click on the button (and also click on Tileset 1 if it is not already selected). Your side bar should now be filled with Tiles!
Go ahead and pick the tile I have selected (highlighted in red in the screenshot), then right-click to place the tile in our view. After this, you can grab the corner of the tile and stretch it out across the view.
Not bad! Now, let's make a Goal Pole for Mario to clear the level with.
First off, click on the button in the sub menu to bring up the Actor List.
This is every Actor in the game. You'll become familiar with more Actors as you begin making levels. For now, enter "Goal Pole's Flag" into the search box. This will now filter out all other Actors.
Click on the Actor in the list, then right click in the level like you did for the tile. This will add the Goal Pole's Flag into the level.
On the left, you'll notice that some options for the Goal Pole's Flag has appeared. All Actors will have an options menu appear for them when they are highlighted in the level.
All that's left to do now is finish tiling the Goal Pole.
Test your knowledge! The Goal Pole tiles are located in Tileset 0, try and build the flag like the next screenshot! Here's a tip, the Goal Pole is 9 tiles high and two tiles wide.
With the flag created, we now need to build the castle. To begin, head over to Tileset 2 and click on the castle. Now, right click to place the castle and drag it to create the castle. Your level will look like this now:
We're almost done. The castle in this game is composed of three tiles: the castle we just created, the wall that will stop Mario, and the roof that allows the small flag to show up after you cleared the level. Select the wall from the tile picker:
Drag this wall over the castle you created.
Lastly, drag the roof tile over the castle like you just did for the wall
You have now created a bare-bones level
You can now save your level using the save icon or by pressing Ctrl+S.
Tools
The tools used to mod NSMB DS with a general overview of how to use them
NSMBe
NSMBe is a modding tool for New Super Mario Bros. (DS) It is a level editor and a texture editor.
NCPatcher
NCPatcher is a program that modifies the executable binaries of a Nintendo DS ROM.
It was created because of the need to have more flexible patching features that other patchers did not have.
Fire Flower
Fire Flower has been replaced by NCPatcher
Fire Flower is a patcher for Nintendo DS games. It works different to any other patchers and aims towards performance, user-friendliness and practicability.
Code Modification
Going beyond the basics and modifying the game's code.
Using GDB with Ghidra and melonDS
What you'll need:
- The latest version of Ghidra
- A build of melonDS that has the GDB enabled
-
The easiest way to get this is to grab a GitHub action build of melonDS. You can find that here. (Note: you'll need to be signed into a GitHub account to download these builds)
- The GNU ARM Embedded Toolchain installed on your system
- A Ghidra database of NSMB DS
-
Eventually, NSMB Central will host a shared Ghidra project so we have one centralized project anyone can contribute to. For now, you can generate a Ghidra project using this tool. If you need help, please ask in our Discord!
Configuring melonDS
To enable the GDB, you need to do the following:
- Click on the Config menu at the top of the emulator, then click on Emu Settings
- Click on the Devtools tab
- Check Enable GDB stub
-
If you do not see the Devtools tab, then you have not built melonDS with GDB enabled. Please check the link at the start of the guide to find a download with GDB enabled or build it yourself enabling GDB in CMake
melonDS is ready to go!
Setting up Ghidra
To begin, open your Ghidra project in the code viewer as you normally would.
- Click on File -> Configure, which should open a list of tools
- Check the "Debugger" box
This should cause windows to appear in your current project, likely making the following steps redundant. If you are unable to find a window, the following steps will either open the window, or present it to you in the project.
Creating a Debugger Target
This method has been tested on Linux and macOS. You should be able to follow these steps using WSL on Windows. Follow this guide if you need help setting up WSL.
To begin, open the Debugger Targets window by navigating to Windows -> Debugger -> Debugger Targets.
The window should look something like this:
As you'll notice, there is an active connection in the screenshot but nothing on your end...let's fix that!
If you are on Linux:
- Choose gdb in the dropdown
- Set arm-none-eabi-gdb -ex "set arch armv5t" as the GDB Launch Command
-
If you have not added arm-none-eabi-gdb to your PATH, you'll need to provide the absolute path
- Click
If you are on macOS
- Choose gdb via SSH in the dropdown
- Set arm-none-eabi-gdb -ex "set arch armv5t" as the GDB Launch Command
-
If you have not added arm-none-eabi-gdb to your PATH, you'll need to provide the absolute path
- Set SSH hostname to localhost
- Set SSH username to your username
-
You can use the command whoami in the terminal to get your username if you don't know it
- Click
If you are on Windows
-
This still needs to be tested on Windows. This guide will be updated when steps have been made
You have now created a Debugger Target
Connecting to melonDS
The gdb interpreter should have opened for you when you connected to the debugging target.
-
If you have lost the interpreter window, open the objects window (Window -> Debugger -> Objects) and click on
to bring the menu back
- In melonDS, open your ROM. (You can either boot directly to the game or launch the firmware)
Now, in the interpreter menu, run the command target remote localhost:[ARM9 Port] (Where [ARM9 Port] is the ARM9 Port set in the Devtools tab.)
-
By default, it should be 3333. The command would be target remote localhost:3333
If melonDS pauses after running this command, GDB is now talking to melonDS
-
If the connection immediately closes after running the command: change the ARM9 port to something else, restart melonDS, and close the current GDB connection.
You have now connected Ghidra to melonDS
Using Breakpoints
If you would like to set breakpoints, you'll need to use the Dynamic PC
- Open the Dynamic PC window by clicking Window -> Listing -> Dynamic - Auto PC, [...]
-
If you do not see this option, you can alternatively open it via Window -> Debugger -> New Dynamic Listing
-
- Next, open the Modules window by clicking Window -> Debugger -> Modules
- Lastly, click on
in the Modules window.
Now, setting a breakpoint in your code view should set a breakpoint in the Dynamic PC
You have now set up Ghidra to debug melonDS. Happy coding!
Setting Up Code Modifications
So, you're ready to dive into the code of the game? Let's get started!
In this tutorial, you will learn how to:
- Set up the NSMB DS Code Template
- Set up ARM GCC
- Set up NCPatcher
- Extract/Build your ROM
This guide will cover the "NCPatcher Standalone" method described in the code template as the steps are more synchronized between all operating systems.
Setting Up the Code Template
- Head over to the code template's GitHub
- Click on Code -> Download ZIP
- Now extract this zip and rename the folder to what you want to call your project (this will be referred to as your project root)
-
Don't put any spaces in your folder name!
You have now set up the code template
Setting up ARM GCC
- Head to the Arm GNU Toolchain Download Page
- Now search (using CTRL/CMD + F) for AArch32 bare-metal target (arm-none-eabi) and download the correct installer for your operating system.
- Open the installer and install the toolchain.
-
Pick a location without spaces to install the toolchain!
You have now set up ARM GCC
Setting Up NCPatcher
- Head over to the NCPatcher GitHub releases page
- Download the latest release for your operating system
- Extract NCPatcher
Now, NCPatcher depends on ncpatcher.json, so lets make it!
If you'd like to learn more about this file, head over to the NCPatcher GitHub!
In your project root, create the following files:
- ncpatcher.json
- Copy/Paste the following JSON into the file
{"$arm_flags": "-masm-syntax-unified -mno-unaligned-access -mfloat-abi=soft -mabi=aapcs","$c_flags": "-Os -fomit-frame-pointer -ffast-math -fno-builtin -nostdlib -nodefaultlibs -nostartfiles -DSDK_GCC -DSDK_FINALROM","$cpp_flags": "-fno-rtti -fno-exceptions -std=c++20","$asm_flags": "-Os -x assembler-with-cpp -fomit-frame-pointer","$ld_flags": "-lgcc -lc -lstdc++ --use-blx","backup": "backup","filesystem": "nsmb","toolchain": "arm-none-eabi-","arm7": {},"arm9": {"target": "arm9.json","build": "build"},"pre-build": [],"post-build": [],"thread-count": 0}
You have now set up NCPatcher
Extracting, Building, and Repackaging Your ROM
If you're on Windows
- Download fireflower.zip and extract it.
- Move nds-build.exe and nds-extract.exe out from the folder
If you're on macOS/Linux
- Download nds-extract.zip
- Download nds-build.zip
- If these links are down, you can also find these files in our Discord
- Extract both ZIPs
Now, you need to build the tools.
For NDS Extract:
- Open a new Terminal window in the folder of the code
- Run this command: g++ nds-extract.cpp -o nds-extract -std=c++20
For NDS Build:
- Open a new Terminal window in the folder of the code
- Run this command: g++ nds-build.cpp -o nds-build -std=c++20
From here on, the instructions will work for all operating systems. If you are on Windows 10, you can use Command Prompt instead of Terminal
Extracting Your ROM
- Open a Terminal window in your project root
- Run this command: /path/to/nds-extract rom.nds nsmb
Replace /path/to/ with the actual file path to nds-extract. Also replace "rom" with the actual name of your .nds file
This will extract the contents of your ROM into a folder named nsmb
You have extracted your ROM
Building Your ROM
This step will compile and patch your ROM with any code files found in the source directory in your project root. The Code Template comes with a few examples included in the source directory.
- Open a Terminal window in your project root
- Run this command: /path/to/ncpatcher
Replace /path/to/ with the actual file path to ncpatcher
You have built your ROM
Repackaging Your ROM
nds-extract depends on buildrules.txt, so let's create it!
- buildrules.txt
- Copy/Paste the following text into the file:
rom_header NSNDY/header.bin
arm9_entry KEEP
arm9_load KEEP
arm7_entry KEEP
arm7_load KEEP
fnt nsmb/fnt.bin
file_mode ADJUST
arm9 nsmb/arm9.bin
arm7 nsmb/arm7.bin
arm9ovt nsmb/arm9ovt.bin
arm7ovt nsmb/arm7ovt.bin
icon nsmb/banner.bin
rsa_sig nsmb/rsasig.bin
data nsmb/root
ovt_repl_flag 0xFF
ov9 nsmb/overlay9
ov7 nsmb/overlay7
This step will take the files form the nsmb folder and repackage them into a .nds file
- Open a Terminal window in your project root
- Run this command: /path/to/nds-build buildrules.txt NSMB.nds
Replace /path/to/ with the actual file path to nds-build.
You have repackaged your ROM
Porting old patch syntax to NCPatcher
This page will help you understand how you can port any patching syntax to NCPatcher's.
You are searching through NSMBHD or NSMB Central and you find a shiny code patch, you rush and put it in the source
folder of your project only to find that a code patch is not compatible with your code! That sucks.
So what can we do?
For this example NSMB E3 Recreation's PlayerAnims.cpp
code patch will be used.
Step 1 - Investigation
Let's start by taking a look at PlayerAnims.cpp
.
#include <nsmb.hpp>
#include <nsmb/extra/fixedpoint.hpp>
#define NAKED __attribute__((naked))
// Slow down rotation speed
NAKED void repl_02114DFC_ov_0A() { asm("MOV R5, #0xC00\nBX LR"); }
// Walking transition delay
void repl_0211667C_ov_0A() {}
void repl_02116698_ov_0A(Player* player, int id, bool doBlend, Player::FrameMode frameMode, fx32 speed, u16 frame) {
// 3.75fx (0x3C00) is the max walk animation speed
if (speed > (3.75fx / 2)) {
speed = (3.75fx / 2);
}
if (player->animID == 2) {
player->setBodyAnimationSpeed(speed);
} else {
if (player->animID == 1) {
fx32 xvel = Math::abs(player->velocity.x);
if (xvel >= 1.5fx) {
player->setAnimation(2, doBlend, frameMode, speed, frame);
} else {
player->setBodyAnimationSpeed(speed);
}
} else {
player->setAnimation(1, doBlend, frameMode, speed, frame);
}
}
}
// Force jump on anim 1
NAKED void nsub_02116A14_ov_0A() { asm("CMP R0, #1\nB 0x02116A18"); }
// Use anim 1
NAKED void repl_02116A2C_ov_0A() { asm("MOV R1, #1\nBX LR"); }
We must now wonder, what kind of a patch is this? Is this an NSMBe
type patch or a Fireflower
type patch?
By comparing common traits that each patcher uses we can guess what kind of patch type we are dealing with.
NSMBe
type patches:
- Does not use attributes to declare patches, uses the function name.
void hook_x() {}
- Patches always follow the format
<PATCH TYPE>_<ADDRESS HEX>_ov_<OVERLAY HEX>
or<PATCH TYPE>_<ADDRESS HEX>
if you don't need to specify an overlay. -
PATCH TYPE
can only behook
,repl
ornsub
.
Fireflower
type patches:
- Uses attributes to declare patches.
hook(X) void func() {}
- Patches always follow the format
<PATCH TYPE>(0x<ADDRESS HEX>, 0x<OVERLAY HEX>)
or<PATCH TYPE>(0x<ADDRESS HEX>)
if you don't need to specify an overlay. -
PATCH TYPE
can only behook
,rlnk
,safe
orover
.
Did you guess correctly what kind of patch we are working with?
Click here to reveal the answer
NSMBeStep 2 - Porting
This is a fairly simple process. Here is a list that shows the different patch syntax between the patchers:
NSMBe | Fireflower | NCPatcher |
---|---|---|
hook | safe | ncp_hook |
repl | rlnk | ncp_call |
nsub | hook | ncp_jump |
over | ncp_over | |
ncp_repl |
And here is an example comparing some of them:
// NSMBe
void hook_02000000() {} // doSomethingPatch
void repl_0200A000() {} // doUnspecifiedPatch
void repl_02010000_ov_0A() {} // doWhateverOverlayPatch
// over does not exist in NSMBe
// Fireflower
safe(0x02000000) void doSomethingPatch() {}
rlnk(0x0200A000) void doUnspecifiedPatch() {}
rlnk(0x02010000, 10) void doWhateverOverlayPatch() {}
over(0x02159348, 52) static int stupidVar = 0x0215CA6C;
// NCPatcher
ncp_hook(0x02000000) void doSomethingPatch() {}
ncp_call(0x0200A000) void doUnspecifiedPatch() {}
ncp_call(0x02010000, 10) void doWhateverOverlayPatch() {}
ncp_over(0x02159348, 52) static int stupidVar = 0x0215CA6C;
These addresses are ficticious and purely for demonstration!
An important thing to remember is that all values in NSMBe
patches are always written in hexadecimal without 0x
prepended to them. In NCPatcher if you want to specify an hexadecimal value you need to prepend 0x
, otherwise the value will be interpreted as a decimal value!
Let's go back to PlayerAnims.cpp
and try to apply these changes.
#include <nsmb.hpp>
#include <nsmb/extra/fixedpoint.hpp>
#define NAKED __attribute__((naked))
NAKED ncp_call(0x02114DFC, 10)
void slowDownRotationSpeed() { asm("MOV R5, #0xC00\nBX LR"); }
// Walking transition delay
ncp_call(0x0211667C, 10) void doNotJumpOnAnim2() {}
ncp_call(0x02116698, 10)
void customPlayerAnimator(Player* player, int id, bool doBlend, Player::FrameMode frameMode, fx32 speed, u16 frame) {
// 3.75fx (0x3C00) is the max walk animation speed
if (speed > (3.75fx / 2)) {
speed = (3.75fx / 2);
}
if (player->animID == 2) {
player->setBodyAnimationSpeed(speed);
} else {
if (player->animID == 1) {
fx32 xvel = Math::abs(player->velocity.x);
if (xvel >= 1.5fx) {
player->setAnimation(2, doBlend, frameMode, speed, frame);
} else {
player->setBodyAnimationSpeed(speed);
}
} else {
player->setAnimation(1, doBlend, frameMode, speed, frame);
}
}
}
NAKED ncp_jump(0x02116A14, 10)
void forceJumpOnAnim1() { asm("CMP R0, #1\nB 0x02116A18"); }
NAKED ncp_call(0x02116A2C, 10)
void useAnim1() { asm("MOV R1, #1\nBX LR"); }
The code should now compile!
If your code still doesn't work because it complains about some functions not being defined or not existing then you might want to check this out as well: Porting old patches to the NSMB Code Reference
What if the patch was an assembly .s
file instead of C .c
or C++ .cpp
?
The process is the same.
hook_....:
BX LR
Becomes
ncp_hook(...)
BX LR
Step 4 - Tidying up
Even though the code should now be able to execute, it is still not in its optimal state. This part is slightly more complicated because it requires understanding the code.
NCPatcher includes its own definition of __attribute__((naked))
which is ncp_asmfunc
so we remove that macro definition and use ncp_asmfunc
instead.
#include <nsmb.hpp>
#include <nsmb/extra/fixedpoint.hpp>
ncp_asmfunc ncp_call(0x02114DFC, 10)
void slowDownRotationSpeed() { asm("MOV R5, #0xC00\nBX LR"); }
// Walking transition delay
ncp_call(0x0211667C, 10) void doNotJumpOnAnim2() {}
ncp_call(0x02116698, 10)
void customPlayerAnimator(Player* player, int id, bool doBlend, Player::FrameMode frameMode, fx32 speed, u16 frame) {
// 3.75fx (0x3C00) is the max walk animation speed
if (speed > (3.75fx / 2)) {
speed = (3.75fx / 2);
}
if (player->animID == 2) {
player->setBodyAnimationSpeed(speed);
} else {
if (player->animID == 1) {
fx32 xvel = Math::abs(player->velocity.x);
if (xvel >= 1.5fx) {
player->setAnimation(2, doBlend, frameMode, speed, frame);
} else {
player->setBodyAnimationSpeed(speed);
}
} else {
player->setAnimation(1, doBlend, frameMode, speed, frame);
}
}
}
ncp_asmfunc ncp_jump(0x02116A14, 10)
void forceJumpOnAnim1() { asm("CMP R0, #1\nB 0x02116A18"); }
ncp_asmfunc ncp_call(0x02116A2C, 10)
void useAnim1() { asm("MOV R1, #1\nBX LR"); }
Now, take a look at the original purpose of repl_0211667C_ov_0A
(now named doNotJumpOnAnim2
) and the code it targeted.
ov10:02116678 CMP R0, #2
ov10:0211667C BEQ 0x021166A0
ov10:02116680 MOV R0, R5
We can see that what we are doing is the following:
ov10:02116678 CMP R0, #2
ov10:0211667C BL repl_0211667C_ov_0A
ov10:02116680 MOV R0, R5
//...
repl_0211667C_ov_0A:
BX LR // return generated by the compiler
Essentially we are just making it so BEQ 0x021166A0
will never jump to 0x021166A0
, but we are not doing this efficiently because we jump from 0x0211667C
to repl_0211667C_ov_0A
and then back to 0x02116680
instead of just continuing.
This wastes memory and CPU cycles, but it was the only way of doing so in NSMBe
.
Instead we can write it like ncp_repl(0x0211667C, 10, "NOP")
in NCPatcher, making the instruction do nothing and just skip to the next one without using any more memory.
ov10:02116678 CMP R0, #2
ov10:0211667C NOP // Skips to the next instruction
ov10:02116680 MOV R0, R5
After evaluating all theses different cases, our optimal code should look like this:
#include <nsmb.hpp>
#include <nsmb/extra/fixedpoint.hpp>
// Slow down rotation speed
ncp_repl(0x02114DFC, 10, "MOV R5, #0xC00")
// Walking transition delay
ncp_repl(0x0211667C, 10, "NOP")
ncp_call(0x02116698, 10)
void customPlayerAnimator(Player* player, int id, bool doBlend, Player::FrameMode frameMode, fx32 speed, u16 frame) {
// 3.75fx (0x3C00) is the max walk animation speed
if (speed > (3.75fx / 2)) {
speed = (3.75fx / 2);
}
if (player->animID == 2) {
player->setBodyAnimationSpeed(speed);
} else {
if (player->animID == 1) {
fx32 xvel = Math::abs(player->velocity.x);
if (xvel >= 1.5fx) {
player->setAnimation(2, doBlend, frameMode, speed, frame);
} else {
player->setBodyAnimationSpeed(speed);
}
} else {
player->setAnimation(1, doBlend, frameMode, speed, frame);
}
}
}
// Force jump on anim 1
ncp_repl(0x02116A14, 10, "CMP R0, #1")
// Use anim 1
ncp_repl(0x02116A2C, 10, "MOV R1, #1")
Porting old patches to the NSMB Code Reference
2D Graphics
Documentation of 2D graphics (anything that uses NCG, NCL and NSC)
Tileset Information
TODO: Document Map16 & Tile behaviors
Bitmap Table
Slot | Bitmap |
---|---|
Tileset 0 (Jyotyu) | d_2d_A_J_jyotyu_ncg.bin |
Tileset 2 (Sub Nohara) | d_2d_I_S_tikei_nohara_ncg.bin |
0: Grassland | d_2d_I_M_tikei_nohara_ncg.bin |
1: Castle | d_2d_I_M_tikei_yakata_ncg.bin |
2: Desert | d_2d_I_M_tikei_sabaku_ncg.bin |
3: Underground (with ice) | d_2d_I_M_tikei_chika_ncg.bin |
4: Sky/mushrooms (world 7 style) | d_2d_I_M_tikei_kumo_ncg.bin |
5: Underwater | d_2d_W_M_tikei_suichu_ncg.bin |
6: Desert | d_2d_!_M_tikei_sabaku_ncg.bin |
7: Volcano (brown) | d_2d_W_M_tikei_yougan_ncg.bin |
8: Grassland | d_2d_I_M_tikei_nohara_ncg.bin |
9: Beach (blue) | d_2d_W_M_tikei_kaigan_ncg.bin |
10: Beach (blue) | d_2d_W_M_tikei_kaigan_ncg.bin |
11: Forest | d_2d_W_M_tikei_jungle_ncg.bin |
12: Grassland | d_2d_I_M_tikei_nohara_ncg.bin |
13: Sky/mushrooms (with flowers and bushes) | d_2d_I_M_tikei_kinoko_ncg.bin |
14: Sky/mushrooms (with flowers and bushes) | d_2d_I_M_tikei_kinoko_ncg.bin |
15: Volcano (black) | d_2d_W_M_tikei_kazan_ncg.bin |
16: Volcano (black 2) [Unused] | d_2d_W_M_tikei_kazangake_ncg.bin |
17: Snow (with ice) | d_2d_I_M_tikei_setsugen_ncg.bin |
18: Snow | d_2d_I_M_tikei_setsugen2_ncg.bin |
19: Forest | d_2d_W_M_tikei_jungle_ncg.bin |
20: Oasis in Desert | d_2d_W_M_tikei_kaigan3_ncg.bin |
21: Bonus Room [Unused] | d_2d_I_M_tikei_mame_ncg.bin |
22: Volcano (black 2) [Unused] | d_2d_W_M_tikei_kanzagake_ncg.bin |
23: Ghost House | d_2d_S_M_tikei_obakeyasiki_ncg.bin |
24: Cliffs | d_2d_W_M_tikei_kazangake2_ncg.bin |
25: Cliffs | d_2d_W_M_tikei_kazangake2_ncg.bin |
26: Snow (with ice) | d_2d_I_M_tikei_setsugen_ncg.bin |
27: Grassland | d_2d_I_M_tikei_nohara_ncg.bin |
28: Snow (with ice) | d_2d_I_M_tikei_setsugen_ncg.bin |
29: Factory (W7-A) | d_2d_W_M_tikei_dokansoto_ncg.bin |
30: Sewer (W2-3) | d_2d_W_M_tikei_dokannaka_ncg.bin |
31: Volcano (yellow) | d_2d_W_M_tikei_yougantate_ncg.bin |
32: Castle | d_2d_I_M_tikei_yakata_ncg.bin |
33: Sky/mushrooms (with flowers and bushes) | d_2d_I_M_tikei_kinoko_ncg.bin |
34: Grassland | d_2d_I_M_tikei_nohara_ncg.bin |
35: Underground | d_2d_I_M_tikei_chika3_ncg.bin |
36: Underground (dark blue) [Unused] | d_2d_I_M_tikei_chika_ncg.bin |
37: Dark world (purple) | d_2d_I_M_tikei_koopa_heigen_ncg.bin |
38: Dark world (brown) | d_2d_I_M_tikei_koopa_iwa_ncg.bin |
39: Tower | d_2d_I_M_tikei_toride_ncg.bin |
40: Ghost house exit | d_2d_S_M_tikei_obake_soto_ncg.bin |
41: Final Castle | d_2d_I_M_tikei_yakata_ncg.bin |
42: Toad house 1 | d_2d_W_M_tikei_kinokoA_ncg.bin |
43: Toad house 2 | d_2d_W_M_tikei_kinokoB_ncg.bin |
44: Toad house 3 | d_2d_W_M_tikei_kinokoC_ncg.bin |
45: Final Castle | d_2d_I_M_tikei_yakata_ncg.bin |
46: Toad house 4 | d_2d_I_M_tikei_kinokoD_ncg.bin |
47: Bowser Jr battle | d_2d_I_M_tikei_toride_boss_ncg.bin |
48: Beach (blue) | d_2d_W_M_tikei_kaigan_ncg.bin |
49: Boss battle | d_2d_I_M_tikei_yakata_boss_ncg.bin |
50: Sky/mushrooms (with flowers and bushes) | d_2d_I_M_tikei_kinoko_boss_ncg.bin |
51: Forest | d_2d_W_M_tikei_jungle_ncg.bin |
52: Desert | d_2d_I_M_tikei_sabaku_ncg.bin |
53: Desert | d_2d_I_M_tikei_sabaku_ncg.bin |
54: Jungle | d_2d_W_M_jungle_ncg.bin |
55: Final boss battle | d_2d_I_M_koopa_boss_ncg.bin |
56: Volcano (black) | d_2d_W_M_kazan_ncg.bin |
57: Underwater | d_2d_W_M_suichu_ncg.bin |
58: Light grey castle (W8 Castle 1) | d_2d_I_M_yakata_nise_ncg.bin |
59: Sky/Mushrooms (yellow-ish) | d_2d_I_M_kumo2_ncg.bin |
60: Beach (turquoise, without moss) | d_2d_W_M_kaigan2_ncg.bin |
61: Lakithunder and Monty Tank battles | d_2d_I_M_yakata_bossW7_ncg.bin |
62: Boss battles | d_2d_I_M_yakata_boss_ncg.bin |
63: Mummy-Pokey battle | d_2d_I_M_sabaku_boss_ncg.bin |
64: Oasis in Desert | d_2d_W_M_kaigan3_ncg.bin |
65: Desert | d_2d_I_M_sabaku_ncg.bin |
66: Oasis in Desert | d_2d_W_M_kaigan3_ncg.bin |
67: Bonus room [Unused] | d_2d_I_M_mame_ncg.bin |
68: Bonus room [Unused] | d_2d_I_M_mame_ncg.bin |
69: Bonus room [Unused] | d_2d_I_M_mame_ncg.bin |
70: Bonus room [Unused] | d_2d_I_M_mame_ncg.bin |
71: Bonus room [Unused] | d_2d_I_M_mame_ncg.bin |
72: Bonus room [Unused] | d_2d_I_M_mame_ncg.bin |
73: Underground (gold) [Unused] | d_2d_I_M_chika4_ncg.bin |
74: Bonus room | d_2d_I_M_mame_bonus_ncg.bin |
75: Grassland | d_2d_I_M_nohara_ncg.bin |
Animations Table
Slot | Animations |
---|---|
Tileset 0 (Jyotyu) | d_2d_TEN_A_J_jyotyu_ncg.bin |
Tileset 2 (Sub Nohara) | None |
0: Grassland | None |
1: Castle | d_2d_TEN_I_yakata_ncg.bin |
2: Desert | None |
3: Underground (with ice) | None |
4: Sky/mushrooms (world 7 style) | None |
5: Underwater | None |
6: Desert | None |
7: Volcano (brown) | None |
8: Grassland | None |
9: Beach (blue) | None |
10: Beach (blue) | None |
11: Forest | None |
12: Grassland | None |
13: Sky/mushrooms (with flowers and bushes) | None |
14: Sky/mushrooms (with flowers and bushes) | None |
15: Volcano (black) | None |
16: Volcano (black 2) [Unused] | None |
17: Snow (with ice) | None |
18: Snow | None |
19: Forest | None |
20: Oasis in Desert | None |
21: Bonus Room [Unused] | None |
22: Volcano (black 2) [Unused] | None |
23: Ghost House | None |
24: Cliffs | None |
25: Cliffs | None |
26: Snow (with ice) | None |
27: Grassland | None |
28: Snow (with ice) | None |
29: Factory (W7-A) | None |
30: Sewer (W2-3) | None |
31: Volcano (yellow) | None |
32: Castle | None |
33: Sky/mushrooms (with flowers and bushes) | None |
34: Grassland | None |
35: Underground | None |
36: Underground (dark blue) [Unused] | None |
37: Dark world (purple) | None |
38: Dark world (brown) | None |
39: Tower | d_2d_TEN_I_toride_ncg.bin |
40: Ghost house exit | None |
41: Final Castle | None |
42: Toad house 1 | None |
43: Toad house 2 | None |
44: Toad house 3 | None |
45: Final Castle | None |
46: Toad house 4 | None |
47: Bowser Jr battle | None |
48: Beach (blue) | None |
49: Boss battle | None |
50: Sky/mushrooms (with flowers and bushes) | None |
51: Forest | None |
52: Desert | None |
53: Desert | None |
54: Jungle | None |
55: Final boss battle | None |
56: Volcano (black) | None |
57: Underwater | None |
58: Light grey castle (W8 Castle 1) | None |
59: Sky/Mushrooms (yellow-ish) | None |
60: Beach (turquoise, without moss) | None |
61: Lakithunder and Monty Tank battles | None |
62: Boss battles | None |
63: Mummy-Pokey battle | None |
64: Oasis in Desert | None |
65: Desert | None |
66: Oasis in Desert | None |
67: Bonus room [Unused] | None |
68: Bonus room [Unused] | None |
69: Bonus room [Unused] | None |
70: Bonus room [Unused] | None |
71: Bonus room [Unused] | None |
72: Bonus room [Unused] | None |
73: Underground (gold) [Unused] | None |
74: Bonus room | None |
75: Grassland | None |
Palette Table
Slot | Palette |
---|---|
Tileset 0 (Jyotyu) | d_2d_A_J_jyotyu_B_ncl.bin d_2d_A_J_jyotyu_F_ncl.bin d_2d_A_J_jyotyu_ncl.bin d_2d_A_J_jyotyu_R_ncl.bin d_2d_A_J_jyotyu_W_ncl.bin |
Tileset 2 (Sub Nohara) | d_2d_I_S_tikei_nohara_ncl.bin |
0: Grassland | d_2d_I_M_tikei_nohara_ncl.bin |
1: Castle | d_2d_I_M_tikei_yakata_ncl.bin |
2: Desert | d_2d_I_M_tikei_sabaku_ncl.bin |
3: Underground (with ice) | d_2d_I_M_tikei_cika_ncl.bin |
4: Sky/mushrooms (world 7 style) | d_2d_I_M_tikei_kumo_ncl.bin |
5: Underwater | d_2d_W_M_tikei_suichu_ncl.bin |
6: Desert | d_2d_I_M_tikei_sabaku_ncl.bin |
7: Volcano (brown) | d_2d_W_M_tikei_yougan_ncl.bin |
8: Grassland | d_2d_I_M_tikei_nohara_ncl.bin |
9: Beach (blue) | d_2d_W_M_tikei_kaigan_ncl.bin |
10: Beach (blue) | d_2d_W_M_tikei_kaigan_ncl.bin |
11: Forest | d_2d_W_M_tikei_jungle_ncl.bin |
12: Grassland | d_2d_I_M_tikei_nohara_ncl.bin |
13: Sky/mushrooms (with flowers and bushes) | d_2d_I_M_tikei_kinoko_ncl.bin |
14: Sky/mushrooms (with flowers and bushes) | d_2d_I_M_tikei_kinoko_ncl.bin |
15: Volcano (black) | d_2d_W_M_tikei_kazan_ncl.bin |
16: Volcano (black 2) [Unused] | d_2d_W_M_tikei_kazangake_ncl.bin |
17: Snow (with ice) | d_2d_I_M_tikei_setsugen_ncl.bin |
18: Snow | d_2d_I_M_tikei_setsugen2_ncl.bin |
19: Forest | d_2d_W_M_tikei_jungle_ncl.bin |
20: Oasis in Desert | d_2d_W_M_tikei_kaigan3_ncl.bin |
21: Bonus Room [Unused] | d_2d_I_M_tikei_mame_ncl.bin |
22: Volcano (black 2) [Unused] | d_2d_W_M_tikei_kanzagake_ncl.bin |
23: Ghost House | d_2d_S_M_tikei_obakeyasiki_ncl.bin |
24: Cliffs | d_2d_W_M_tikei_kazangake2_ncl.bin |
25: Cliffs | d_2d_W_M_tikei_kazangake2_ncl.bin |
26: Snow (with ice) | d_2d_I_M_tikei_setsugen_ncl.bin |
27: Grassland | d_2d_I_M_tikei_nohara_ncl.bin |
28: Snow (with ice) | d_2d_I_M_tikei_setsugen_ncl.bin |
29: Factory (W7-A) | d_2d_W_M_tikei_dokansoto_ncl.bin |
30: Sewer (W2-3) | d_2d_W_M_tikei_dokannaka_ncl.bin |
31: Volcano (yellow) | d_2d_W_M_tikei_yougantate_ncl.bin |
32: Castle | d_2d_I_M_tikei_yakata_ncl.bin |
33: Sky/mushrooms (with flowers and bushes) | d_2d_I_M_tikei_kinoko_ncl.bin |
34: Grassland | d_2d_I_M_tikei_nohara_ncl.bin |
35: Underground | d_2d_I_M_tikei_chika3_ncl.bin |
36: Underground (dark blue) [Unused] | d_2d_I_M_tikei_chika_ncl.bin |
37: Dark world (purple) | d_2d_I_M_tikei_koopa_heigen_ncl.bin |
38: Dark world (brown) | d_2d_I_M_tikei_koopa_iwa_ncl.bin |
39: Tower | d_2d_I_M_tikei_toride_ncl.bin |
40: Ghost house exit | d_2d_S_M_tikei_obake_soto_ncl.bin |
41: Final Castle | d_2d_I_M_tikei_yakata_ncl.bin |
42: Toad house 1 | d_2d_W_M_tikei_kinokoA_ncl.bin |
43: Toad house 2 | d_2d_W_M_tikei_kinokoB_ncl.bin |
44: Toad house 3 | d_2d_W_M_tikei_kinokoC_ncl.bin |
45: Final Castle | d_2d_I_M_tikei_yakata_ncl.bin |
46: Toad house 4 | d_2d_I_M_tikei_kinokoD_ncl.bin |
47: Bowser Jr battle | d_2d_I_M_tikei_toride_boss_ncl.bin |
48: Beach (blue) | d_2d_W_M_tikei_kaigan_ncl.bin |
49: Boss battle | d_2d_I_M_tikei_yakata_boss_ncl.bin |
50: Sky/mushrooms (with flowers and bushes) | d_2d_I_M_tikei_kinoko_boss_ncl.bin |
51: Forest | d_2d_W_M_tikei_jungle_ncl.bin |
52: Desert | d_2d_I_M_tikei_sabaku_ncl.bin |
53: Desert | d_2d_I_M_tikei_sabaku_ncl.bin |
54: Jungle | d_2d_W_M_jungle_ncl.bin |
55: Final boss battle | d_2d_I_M_koopa_boss_ncl.bin |
56: Volcano (black) | d_2d_W_M_kazan_ncl.bin |
57: Underwater | d_2d_W_M_suichu_ncl.bin |
58: Light grey castle (W8 Castle 1) | d_2d_I_M_yakata_nise_ncl.bin |
59: Sky/Mushrooms (yellow-ish) | d_2d_I_M_kumo2_ncl.bin |
60: Beach (turquoise, without moss) | d_2d_W_M_kaigan2_ncl.bin |
61: Lakithunder and Monty Tank battles | d_2d_I_M_yakata_bossW7_ncl.bin |
62: Boss battles | d_2d_I_M_yakata_boss_ncl.bin |
63: Mummy-Pokey battle | d_2d_I_M_sabaku_boss_ncl.bin |
64: Oasis in Desert | d_2d_W_M_kaigan3_ncl.bin |
65: Desert | d_2d_I_M_sabaku_ncl.bin |
66: Oasis in Desert | d_2d_W_M_kaigan3_ncl.bin |
67: Bonus room [Unused] | d_2d_I_M_mame_ncl.bin |
68: Bonus room [Unused] | d_2d_I_M_mame_ncl.bin |
69: Bonus room [Unused] | d_2d_I_M_mame_ncl.bin |
70: Bonus room [Unused] | d_2d_I_M_mame_ncl.bin |
71: Bonus room [Unused] | d_2d_I_M_mame_ncl.bin |
72: Bonus room [Unused] | d_2d_I_M_mame_ncl.bin |
73: Underground (gold) [Unused] | d_2d_I_M_chika4_ncl.bin |
74: Bonus room | d_2d_I_M_mame_bonus_ncl.bin |
75: Grassland | d_2d_I_M_nohara_ncl.bin |
Object Definitions Table
Slot | Object Definitions |
---|---|
Tileset 0 (Jyotyu) | A_J_jyotyu.bin A_J_joytyu_hd.bin |
Tileset 2 (Sub Nohara) | I_S_nohara.bin I_S_nohara_hd.bin |
0: Grassland | I_M_nohara.bin I_M_nohara_hd.bin |
1: Castle | I_M_yakata.bin I_M_yakata_hd.bin |
2: Desert | I_M_sabaku.bin I_M_sabaku_hd.bin |
3: Underground (with ice) | I_M_chika.bin I_M_chika_hd.bin |
4: Sky/mushrooms (world 7 style) | I_M_kumo.bin I_M_kumo_hd.bin |
5: Underwater | W_M_suichu.bin W_M_suichu_hd.bin |
6: Desert | I_M_sabaku I_M_sabaku_hd.bin |
7: Volcano (brown) | W_M_yougan.bin W_M_yougan_hd.bin |
8: Grassland | I_M_nohara.bin I_M_nohara_hd.bin |
9: Beach (blue) | W_M_kaigan.bin W_M_kaigan_hd.bin |
10: Beach (blue) | W_M_kaigan.bin W_M_kaigan_hd.bin |
11: Forest | W_M_jungle.bin W_M_jungle_hd.bin |
12: Grassland | I_M_nohara2.bin I_M_nohara2_hd.bin |
13: Sky/mushrooms (with flowers and bushes) | I_M_kinoko.bin I_M_kinoko_hd.bin |
14: Sky/mushrooms (with flowers and bushes) | I_M_kinoko.bin I_M_kinoko_hd.bin |
15: Volcano (black) | W_M_kazan.bin W_M_kazan_hd.bin |
16: Volcano (black 2) [Unused] | W_M_kazangake.bin W_M_kazangake_hd.bin |
17: Snow (with ice) | I_M_setsugen.bin I_M_setsugen_hd.bin |
18: Snow | I_M_setsugen2.bin I_M_setsugen2_hd.bin |
19: Forest | W_M_jungle.bin W_M_jungle_hd.bin |
20: Oasis in Desert | W_M_kaigan3.bin W_M_kaigan3_hd.bin |
21: Bonus Room [Unused] | I_M_mame.bin I_M_mame_hd.bin |
22: Volcano (black 2) [Unused] | W_M_kazangake.bin W_M_kazangake_hd.bin |
23: Ghost House | S_M_obakeyasiki.bin S_M_obakeyasiki_hd.bin |
24: Cliffs | W_M_kazangake2.bin W_M_kazangake2_hd.bin |
25: Cliffs | W_M_kazangake2.bin W_M_kazangake2_hd.bin |
26: Snow (with ice) | I_M_setsugen.bin I_M_setsugen_hd.bin |
27: Grassland | I_M_yakata.bin I_M_yakata_hd.bin |
28: Snow (with ice) | I_M_setsugen.bin I_M_setsugen_hd.bin |
29: Factory (W7-A) | W_M_dokansoto.bin W_M_dokansoto_hd.bin |
30: Sewer (W2-3) | W_M_dokannaka.bin W_M_dokannaka_hd.bin |
31: Volcano (yellow) | W_M_yougantate.bin W_M_yougantate_hd.bin |
32: Castle | I_M_yakata.bin I_M_yakata_hd.bin |
33: Sky/mushrooms (with flowers and bushes) | I_M_kinoko.bin I_M_kinoko_hd.bin |
34: Grassland | I_M_nohara.bin I_M_nohara_hd.bin |
35: Underground | I_M_chika3.bin I_M_chika3_hd.bin |
36: Underground (dark blue) [Unused] | I_M_chika2.bin I_M_chika2_hd.bin |
37: Dark world (purple) | I_M_koopa_heigen.bin I_M_koopa_heigen_hd.bin |
38: Dark world (brown) | I_M_koopa_iwa.bin I_M_koopa_iwa_hd.bin |
39: Tower | I_M_toride.bin I_M_toride_hd.bin |
40: Ghost house exit | I_M_obake_soto.bin I_M_obake_soto_hd.bin |
41: Final Castle | I_M_yakata.bin I_M_yakata_hd.bin |
42: Toad house 1 | W_M_kinokoA.bin W_M_kinokoA_hd.bin |
43: Toad house 2 | W_M_kinokoB.bin W_M_kinokoB_hd.bin |
44: Toad house 3 | W_M_kinokoC.bin W_M_kinokoC_hd.bin |
45: Final Castle | I_M_yakata2.bin I_M_yakata2_hd.bin |
46: Toad house 4 | W_M_kinokoD.bin W_M_kinokoD_hd.bin |
47: Bowser Jr battle | I_M_toride_boss.bin I_M_toride_boss_hd.bin |
48: Beach (blue) | W_M_kaigan.bin W_M_kaigan_hd.bin |
49: Boss battle | I_M_yakata_boss.bin I_M_yakata_boss_hd.bin |
50: Sky/mushrooms (with flowers and bushes) | I_M_kinoko.bin I_M_kinoko_hd.bin |
51: Forest | W_M_jungle.bin W_M_jungle_hd.bin |
52: Desert | I_M_sabaku.bin I_M_sabaku_hd.bin |
53: Desert | I_M_sabaku.bin I_M_sabaku_hd.bin |
54: Jungle | W_M_jungle.bin W_M_jungle_hd.bin |
55: Final boss battle | I_M_koopa_boss.bin I_M_koopa_boss_hd.bin |
56: Volcano (black) | W_M_kazan.bin W_M_kazan_hd.bin |
57: Underwater | W_M_suichu.bin W_M_suichu_hd.bin |
58: Light grey castle (W8 Castle 1) | I_M_yakata_nise.bin I_M_yakata_nise_hd.bin |
59: Sky/Mushrooms (yellow-ish) | I_M_kumo2.bin I_M_kumo2_hd.bin |
60: Beach (turquoise, without moss) | W_M_kaigan2.bin W_M_kaigan2_hd.bin |
61: Lakithunder and Monty Tank battles | I_M_yakata_bossW7.bin I_M_yakata_bossW7_hd.bin |
62: Boss battles | I_M_yakata_boss.bin I_M_yakata_boss_hd.bin |
63: Mummy-Pokey battle | I_M_sabaku_boss.bin I_M_sabaku_boss_hd.bin |
64: Oasis in Desert | W_M_kaigan3.bin W_M_kaigan3_hd.bin |
65: Desert | I_M_sabaku2.bin I_M_sabaku2_hd.bin |
66: Oasis in Desert | W_M_kaigan3.bin W_M_kaigan3_hd.bin |
67: Bonus room [Unused] | I_M_mame.bin I_M_mame_hd.bin |
68: Bonus room [Unused] | I_M_mame.bin I_M_mame_hd.bin |
69: Bonus room [Unused] | I_M_mame.bin I_M_mame_hd.bin |
70: Bonus room [Unused] | I_M_mame.bin I_M_mame_hd.bin |
71: Bonus room [Unused] | I_M_mame.bin I_M_mame_hd.bin |
72: Bonus room [Unused] | I_M_mame.bin I_M_mame_hd.bin |
73: Underground (gold) [Unused] | I_M_chika4.bin I_M_chika4_hd.bin |
74: Bonus room | I_M_mame_bonus.bin I_M_mame_bonus_hd.bin |
75: Grassland | I_M_nohara.bin I_M_nohara_hd.bin |
Map16 Table
Slot | Map16 |
---|---|
Tileset 0 (Jyotyu) | TBA |
Tileset 2 (Sub Nohara) | TBA |
0: Grassland | TBA |
1: Castle | TBA |
2: Desert | TBA |
3: Underground (with ice) | TBA |
4: Sky/mushrooms (world 7 style) | TBA |
5: Underwater | TBA |
6: Desert | TBA |
7: Volcano (brown) | TBA |
8: Grassland | TBA |
9: Beach (blue) | TBA |
10: Beach (blue) | TBA |
11: Forest | TBA |
12: Grassland | TBA |
13: Sky/mushrooms (with flowers and bushes) | TBA |
14: Sky/mushrooms (with flowers and bushes) | TBA |
15: Volcano (black) | TBA |
16: Volcano (black 2) [Unused] | TBA |
17: Snow (with ice) | TBA |
18: Snow | TBA |
19: Forest | TBA |
20: Oasis in Desert | TBA |
21: Bonus Room [Unused] | TBA |
22: Volcano (black 2) [Unused] | TBA |
23: Ghost House | TBA |
24: Cliffs | TBA |
25: Cliffs | TBA |
26: Snow (with ice) | TBA |
27: Grassland | TBA |
28: Snow (with ice) | TBA |
29: Factory (W7-A) | TBA |
30: Sewer (W2-3) | TBA |
31: Volcano (yellow) | TBA |
32: Castle | TBA |
33: Sky/mushrooms (with flowers and bushes) | TBA |
34: Grassland | TBA |
35: Underground | TBA |
36: Underground (dark blue) [Unused] | TBA |
37: Dark world (purple) | TBA |
38: Dark world (brown) | TBA |
39: Tower | TBA |
40: Ghost house exit | TBA |
41: Final Castle | TBA |
42: Toad house 1 | TBA |
43: Toad house 2 | TBA |
44: Toad house 3 | TBA |
45: Final Castle | TBA |
46: Toad house 4 | TBA |
47: Bowser Jr battle | TBA |
48: Beach (blue) | TBA |
49: Boss battle | TBA |
50: Sky/mushrooms (with flowers and bushes) | TBA |
51: Forest | TBA |
52: Desert | TBA |
53: Desert | TBA |
54: Jungle | TBA |
55: Final boss battle | TBA |
56: Volcano (black) | TBA |
57: Underwater | TBA |
58: Light grey castle (W8 Castle 1) | TBA |
59: Sky/Mushrooms (yellow-ish) | TBA |
60: Beach (turquoise, without moss) | TBA |
61: Lakithunder and Monty Tank battles | TBA |
62: Boss battles | TBA |
63: Mummy-Pokey battle | TBA |
64: Oasis in Desert | TBA |
65: Desert | TBA |
66: Oasis in Desert | TBA |
67: Bonus room [Unused] | TBA |
68: Bonus room [Unused] | TBA |
69: Bonus room [Unused] | TBA |
70: Bonus room [Unused] | TBA |
71: Bonus room [Unused] | TBA |
72: Bonus room [Unused] | TBA |
73: Underground (gold) [Unused] | TBA |
74: Bonus room | TBA |
75: Grassland | TBA |
Tile Behaviors
Slot | Tile Behaviors |
---|---|
Tileset 0 (Jyotyu) | Overlay 0 |
Tileset 2 (Sub Nohara) | TBA |
0: Grassland | TBA |
1: Castle | TBA |
2: Desert | TBA |
3: Underground (with ice) | TBA |
4: Sky/mushrooms (world 7 style) | TBA |
5: Underwater | TBA |
6: Desert | TBA |
7: Volcano (brown) | TBA |
8: Grassland | TBA |
9: Beach (blue) | TBA |
10: Beach (blue) | TBA |
11: Forest | TBA |
12: Grassland | TBA |
13: Sky/mushrooms (with flowers and bushes) | TBA |
14: Sky/mushrooms (with flowers and bushes) | TBA |
15: Volcano (black) | TBA |
16: Volcano (black 2) [Unused] | TBA |
17: Snow (with ice) | TBA |
18: Snow | TBA |
19: Forest | TBA |
20: Oasis in Desert | TBA |
21: Bonus Room [Unused] | TBA |
22: Volcano (black 2) [Unused] | TBA |
23: Ghost House | TBA |
24: Cliffs | TBA |
25: Cliffs | TBA |
26: Snow (with ice) | TBA |
27: Grassland | TBA |
28: Snow (with ice) | TBA |
29: Factory (W7-A) | TBA |
30: Sewer (W2-3) | TBA |
31: Volcano (yellow) | TBA |
32: Castle | TBA |
33: Sky/mushrooms (with flowers and bushes) | TBA |
34: Grassland | TBA |
35: Underground | TBA |
36: Underground (dark blue) [Unused] | TBA |
37: Dark world (purple) | TBA |
38: Dark world (brown) | TBA |
39: Tower | TBA |
40: Ghost house exit | TBA |
41: Final Castle | TBA |
42: Toad house 1 | TBA |
43: Toad house 2 | TBA |
44: Toad house 3 | TBA |
45: Final Castle | TBA |
46: Toad house 4 | TBA |
47: Bowser Jr battle | TBA |
48: Beach (blue) | TBA |
49: Boss battle | TBA |
50: Sky/mushrooms (with flowers and bushes) | TBA |
51: Forest | TBA |
52: Desert | TBA |
53: Desert | TBA |
54: Jungle | TBA |
55: Final boss battle | TBA |
56: Volcano (black) | TBA |
57: Underwater | TBA |
58: Light grey castle (W8 Castle 1) | TBA |
59: Sky/Mushrooms (yellow-ish) | TBA |
60: Beach (turquoise, without moss) | TBA |
61: Lakithunder and Monty Tank battles | TBA |
62: Boss battles | TBA |
63: Mummy-Pokey battle | TBA |
64: Oasis in Desert | TBA |
65: Desert | TBA |
66: Oasis in Desert | TBA |
67: Bonus room [Unused] | TBA |
68: Bonus room [Unused] | TBA |
69: Bonus room [Unused] | TBA |
70: Bonus room [Unused] | TBA |
71: Bonus room [Unused] | TBA |
72: Bonus room [Unused] | TBA |
73: Underground (gold) [Unused] | TBA |
74: Bonus room | TBA |
75: Grassland | TBA |
Randomization Table
Slot | Randomization |
---|---|
Tileset 0 (Jyotyu) | No |
Tileset 2 (Sub Nohara) | No |
0: Grassland | Tiles 0-5 |
1: Castle | No |
2: Desert | Tiles 0-5 |
3: Underground (with ice) | Tiles 0-5, 48-53 |
4: Sky/mushrooms (world 7 style) | None |
5: Underwater | Tiles 0-5 |
6: Desert | Tiles 0-5 |
7: Volcano (brown) | Tiles 0-5 |
8: Grassland | Tiles 0-5 |
9: Beach (blue) | Tiles 0-5 |
10: Beach (blue) | Tiles 0-5 |
11: Forest | Tiles 0-2 |
12: Grassland | Tiles 0-5 |
13: Sky/mushrooms (with flowers and bushes) | Tiles 0-5 |
14: Sky/mushrooms (with flowers and bushes) | Tiles 0-5 |
15: Volcano (black) | Tiles 0-5 |
16: Volcano (black 2) [Unused] | Tiles 0-5 |
17: Snow (with ice) | None |
18: Snow | Tiles 0-5 |
19: Forest | Tiles 0-2 |
20: Oasis in Desert | Tiles 0-5 |
21: Bonus Room [Unused] | None |
22: Volcano (black 2) [Unused] | None |
23: Ghost House | None |
24: Cliffs | Tiles 0-5 |
25: Cliffs | Tiles 0-5 |
26: Snow (with ice) | None |
27: Grassland | Tiles 0-5 |
28: Snow (with ice) | None |
29: Factory (W7-A) | None |
30: Sewer (W2-3) | None |
31: Volcano (yellow) | Tiles 0-5 |
32: Castle | None |
33: Sky/mushrooms (with flowers and bushes) | Tiles 0-5 |
34: Grassland | Tiles 0-5 |
35: Underground | Tiles 0-5, 48-53 |
36: Underground (dark blue) [Unused] | Tiles 0-5, 48-53 |
37: Dark world (purple) | Tiles 0-5 |
38: Dark world (brown) | Tiles 0-5 |
39: Tower | Tiles 0-5 |
40: Ghost house exit | Tiles 0-5 |
41: Final Castle | None |
42: Toad house 1 | None |
43: Toad house 2 | None |
44: Toad house 3 | None |
45: Final Castle | None |
46: Toad house 4 | None |
47: Bowser Jr battle | None |
48: Beach (blue) | Tiles 0-5 |
49: Boss battle | None |
50: Sky/mushrooms (with flowers and bushes) | Tiles 0-5 |
51: Forest | Tiles 0-2 |
52: Desert | Tiles 0-5 |
53: Desert | Tiles 0-5 |
54: Jungle | Tiles 0-5 |
55: Final boss battle | None |
56: Volcano (black) | Tiles 0-5 |
57: Underwater | Tiles 0-5 |
58: Light grey castle (W8 Castle 1) | None |
59: Sky/Mushrooms (yellow-ish) | None |
60: Beach (turquoise, without moss) | Tiles 0-5 |
61: Lakithunder and Monty Tank battles | None |
62: Boss battles | None |
63: Mummy-Pokey battle | None |
64: Oasis in Desert | Tiles 0-5 |
65: Desert | None |
66: Oasis in Desert | Tiles 0-5 |
67: Bonus room [Unused] | None |
68: Bonus room [Unused] | None |
69: Bonus room [Unused] | None |
70: Bonus room [Unused] | None |
71: Bonus room [Unused] | None |
72: Bonus room [Unused] | None |
73: Underground (gold) [Unused] | Tiles 0-5, 48-53 |
74: Bonus room | None |
75: Grassland | Tiles 0-5 |
Jyotyu Tileset
1. Jyotyu Palette
These files are the palettes used by the Jyotyu tileset:
- root/BG_ncl/d_2d_AJ_J_jyotyu_B_ncl.bin
- root/BG_ncl/d_2d_AJ_J_jyotyu_F_ncl.bin
- root/BG_ncl/d_2d_AJ_J_jyotyu_ncl.bin
- root/BG_ncl/d_2d_AJ_J_jyotyu_R_ncl.bin
- root/BG_ncl/d_2d_AJ_J_jyotyu_W_ncl.bin
2. List of graphics that use the Jyotyu Palette
Folder | Bitmap | Description |
/BG_ncg | d_2d_A_J_jyotyu | Default jyotyu graphics |
/BG_ncg | d_2d_TEN_A_J_jyotyu | Animated blocks, bricks and coins |
/obj | A_block_hahen | Debris animations for destroyed blocks |
/obj | A_block | Animations for blocks being hit |
/obj | A_tikuwa_block | Donut lift |
/obj | I_item | Power Ups |
/obj | I_kakushitobira | Event Activated Door |
/obj | I_mark_star | A star, seems to be unused |
/obj | I_minigame_block | Animations for 1-Up Toad house blocks |
/obj | I_minigame_item | 1-Up Toad house card graphics |
/obj | I_obj_kemuri | Smoke (?) seems to be unused too |
/obj | I_obj_kira_I | Sparks, they seem to be used by Mega Mario, but only with the first jyotyu palette |
/obj | I_obj_kira | Smaller sparks, apparently used when collecting an 1-Up mushroom and after stomping on a blue Koopa |
/obj | I_obj_sunakemuri | Smoke (?) unused as well |
/obj | I_obj_yajirushi | Arrow, apparently unused since it was removed from the European version |
3. Important
When you click "import bitmap and recreate pallete" on a file that uses the Jyotyu Pallete, it will recreate the Jyotyu Pallete, with new colours.
Other objects use the Jyotyu Pallete, but they will not match up with the pallete anymore, because it has been modified to match the Jyotyu tileset, so you have to open all the files that use the pallete and the pallete open at the same time, then click "import bitmap and recreate pallete".
Or you can modify the Jyotyu Tileset with the built in editor which will not modify the Jyotyu Pallete.
4. Jyotyu labels
The following picture shows which objects use which colors in the different Jyotyu Palletes:
Credits to D.M. for the research and the image
Note: The palette colors will vary depending on the Jyotyu palette, but the objects will still use the same colors.
World Map Icons
TODO: Finish the rest including the ones in uiStudio & update the description if needed.
Map Folder:
Files |
Description / Information
|
cursor_koopa_jr.nsbca |
Bowser Jr's Animation (Joint)
|
cursor_koopa_jr.nsbmd |
Bowser Jr's World Map Textures
|
cursor_peach.nsbca |
Peach's Animation (Joint)
|
cursor_peach.nsbmd |
Peach's World Map Textures
|
hammer_map.nsbmd |
Hammer Bro's Hammer Texture
|
map_dragon.nsbca |
Star Coin Sign's Animation (Joint)
|
map_dragon.nsbmd |
Star Coin Sign's Textures
|
map_dragon.nsbtp |
Star Coin Sign's Animation (Pattern)
|
map_hole.nsbmd | ? |
map_point.nsbmd |
World Map Node's Textures
|
map_point.nsbtp |
World Map Node's Animation (Pattern)
|
map_shadow.nsbca | ? |
map_shadow.nsbmd | ? |
map_swing.nsbca | ? |
w1.nsbmd |
World 1's Textures (Doesn't have the texture for the elevated ground near the first tower & the green layering in the background)
|
w1.nsbca |
World 1's Animation (Joint)
|
w1.nsbtp |
World 1's Animation (Pattern)
|
w1_castle.nsbca |
World 1 Castle's Animation (Joint)
|
w1_castle.nsbmd |
World 1 Castle's Textures
|
w1_kinoko_a.nsbmd |
Blue Mushroom House's Texture
|
w1_kinoko_b.nsbmd |
Mega Mushroom House's Texture
|
w1_kinoko_g.nsbmd |
1-Up Mushroom House's Texture
|
w1_kinoko_p.nsbmd |
Wood Mushroom House Holder's Texture
|
w1_kinoko_r.nsbmd |
Item Bonus House's Texture
|
w1_move.nsbca |
The animation where Bowser Jr. brings Peach to 1-Tower
|
w1_tower.nsbca |
World 1 Tower's Animation (Joint)
|
w1_tower.nsbmd |
World 1 Tower's Textures
|
w1_tree.nsbca |
World 1 Tree's Animation (Joint)
|
w1_tree.nsbmd |
World 1 Tree's Textures
|
w2.nsbmd |
World 2's Textures
|
w2.nsbca |
World 2's Animation (Joint)
|
w2.nsbtp |
World 2's Animation (Pattern)
|
w2_castle.nsbmd |
World 2 Castle's Textures
|
w2_kinoko_b.nsbmd |
Mega Mushroom House's Texture
|
w2_kinoko_g.nsbmd |
1-Up Mushroom House's Texture
|
w2_kinoko_p.nsbmd |
Wood Mushroom House Holder's Texture
|
w2_kinoko_r.nsbmd |
Item Bonus House's Texture
|
w2_move.nsbca |
The animation where Bowser Jr. brings Peach to 2-Tower
|
w2_tower.nsbca |
World 2 Tower's Animation (Joint)
|
w2_tower.nsbmd |
World 2 Tower's Textures
|
w2_tree.nsbca |
World 2 Tree's Animation (Joint)
|
w2_tree.nsbmd |
World 2 Tree's Textures
|
Enemy Palettes
1. Enemy Palettes
- root/obj/enemy_ncl.bin
- root/obj/enemy_B_ncl.bin
- root/obj/enemy_R_ncl.bin
- root/obj/enemy_W_ncl.bin
2. List of bitmaps which use the enemy palette
Folder | Bitmap | Description |
/obj | I_bubble256 | Podoboo |
/obj | I_dokan_yajirushi | Arrow signs |
/obj | I_fireball | Fire Mario/Fire Brother fireballs |
/obj | I_kuribo256 | Goomba |
/obj | I_nokonoko256 | Koopa Troopa |
/obj | I_star_red | Mario VS Luigi battle stars |
/obj | I_switch | ? Switch, ! Switch, P Switch and Skull Switch |
/obj | I_ochiruhashi | Beach platform |
/obj | I_teresa256 | Boo |
/obj | W_kinoko | Graphics for the Blue/Yellow/Red Toad house blocks and cards |
World Map
Information related to modifying the world map.