Pages: 12345 »
Posted on 11-16-16, 10:13 pm in Roast me
Mole
Normal user

Karma: 2008
Posts: 200/359
Since: 07-08-12
you're still a spoon
Posted on 11-18-16, 01:55 pm in Roast me (rev. 2 by ImageBot on 11-21-16, 03:25 am)
Mole
Normal user

Karma: 2008
Posts: 202/359
Since: 07-08-12

you
Posted on 04-26-16, 06:26 pm in NSMBHD Skype Chat
Mole
Normal user

Karma: 2008
Posts: 154/359
Since: 07-08-12
Posted on 11-16-16, 09:47 pm in Roast me
Mole
Normal user

Karma: 2008
Posts: 199/359
Since: 07-08-12
you're a spoon
Posted on 11-17-16, 12:13 am in Roast me
Mole
Normal user

Karma: 2008
Posts: 201/359
Since: 07-08-12
you're still a spoon. stop being a spoon.
Posted on 10-30-18, 07:11 pm in SMPe - A Super Mario Party Editor
Mole
Normal user

Karma: 2008
Posts: 353/359
Since: 07-08-12
Hiya folks, it's been a while since I really published any of my recent works, so I'm going to go ahead and throw what I've been working on recently to you.

You read it right. I have written a 2D tool that can display (but not edit, just yet!) Super Mario Party boards! It's only been a few weeks since SMP released, so talk about a quick hack.





I plan on a lot of features, such as text editing and more, but for now you can open up the maps in the Archive folder and open up the BEA archive (which the editor supports!) and it will automatically open the data you need.

Github:
http://github.com/shibbo/SMPe

Official development Discord:
https://discord.gg/eWNypQU

Enjoy ;)
Posted on 01-07-17, 09:22 pm in Newer Super Mario Bros. DS (rev. 1 by shibboleet on 01-07-17, 09:23 pm)
Mole
Normal user

Karma: 2008
Posts: 218/359
Since: 07-08-12
I'm actually tempted to accept requests for banning those who persist on OMG RELEASE or OMG WHEN WILL IT BE DONE
Posted on 01-28-17, 11:08 pm in haxx Save File Structure (rev. 8 by shibboleet on 02-02-17, 06:34 pm)
Mole
Normal user

Karma: 2008
Posts: 232/359
Since: 07-08-12
Located at address 0x02088BDC in the game's memory (only when you're playing the story. Minigames overwrite this when playing minigames) lies the save file. It is 0x24C bytes long and contains a variety of information. The structure is defined below.







ValuePurpose
0x00-0x04"7000" in ASCII. (7001 in NewerDS)
0x04-0x08Most likely a flag that is set to 1 when the save has been initialized.
0x08-0x0CField responsible for calculating the user's profile stars.
0x0C-0x10Number of lives.
0x10-0x14Number of coins.
0x14-0x18Unknown.
0x18-0x1CNumber of star coins.
0x1C-0x20Number of spent star coins.
0x20-0x24Current world. Setting byte 2 of this field will play the warp animation.
0x24-0x28Unknown.
0x28-0x2CCurrent world map node.
0x2C-0x30Unknown.
0x30-0x34Current powerup the player has.
0x34-0x38Score.
0x38-0x3CCurrent background the bottom screen uses.
0x3C-0x40Current world possible duplicate. This value changes when 0x20 changes, and cannot be edited because 0x20 automatically sets it back to the previous value.
0x40-0x44Unknown.
0x44-0x48Unknown.
0x48-0x4CUnknown.
0x4C-0x50Unknown.
0x50-0x54Unknown.
0x54-0x58Unknown.
0x58-0x5CUnknown.
0x5C-0x60Current item in inventory.
0x60-0x70WorldUnlocks[8]
0x70-0x137StarCoins[200]
0x137-0x24CLevels[240]

Level Flags



FlagPurpose
0x00Not unlocked.
0xA0Used only by signboards. This value will be there while the animation for the sign disappearing is playing. Once it finishes, it will change to 0xC0.
0xC0Complete.

Star Coin Flags


Below is a table of how the StarCoins[] get marked.

FlagPurpose
0xD0No star coins.
0xD1Star Coin 1 Only
0xD2Star Coin 2 Only
0xD3Star Coin 1 and 2
0xD4Star Coin 3 Only
0xD5Star Coin 1 and 3
0xD6Star Coin 2 and 3
0xD7All 3 star coins.

World Map Flags



FlagPurpose
0x00Not unlocked.
0x3EWorld was not completed, user "finished" world by shooting out of a cannon.
0x43World was accessed by cannon.
0xFFWorld is completed. (The world itself is unlocked if the value is >= 0x40)
Posted on 04-01-17, 03:29 am in i have leak the newer super mario ds!!
Mole
Normal user

Karma: 2008
Posts: 281/359
Since: 07-08-12
the PMs are better than the thread
Posted on 07-11-17, 01:55 am in request, payment Having Mario Spin in the Air when a Button is Pressed
Mole
Normal user

Karma: 2008
Posts: 305/359
Since: 07-08-12
no
Posted on 08-18-17, 07:16 pm in Newer Super Mario Bros. DS
Mole
Normal user

Karma: 2008
Posts: 315/359
Since: 07-08-12
stop whining
Posted on 07-25-16, 02:11 am, deleted by shibboleet: you know what, fuck it. It's not worth it.
Posted on 09-01-16, 09:42 pm in Sprite database notice. (rev. 2 by  Arisotura on 09-01-16, 09:49 pm)
Mole
Normal user

Karma: 2008
Posts: 178/359
Since: 07-08-12
I might not be a mod on here anymore because it was pretty much a request to be demoted, but I need to point something out.

Please, please, please, don't fucking wipe a sprite's data on the database and say "See X sprite", because it's stupid and useless. That means the user has to see the original sprite, therefore adding it to the level uselessly just to see the data. That's stupid and it shouldn't be that way. If you think it's good for space, you're wrong. A few fields will not kill anybody.

If it happens and somebody spots it, tell the mods.


StapleButter edit: from now on, anybody doing this gets a ban. Thank you.
Posted on 07-28-17, 08:13 pm in Im A Fucking Idiot,Help me
Mole
Normal user

Karma: 2008
Posts: 309/359
Since: 07-08-12
congrats, you actually ended up in the Dimensoial Trash Can Forum.
Posted on 09-09-17, 08:31 pm in Opinions on Donald Trump Winning election?
Mole
Normal user

Karma: 2008
Posts: 321/359
Since: 07-08-12
no
Posted on 01-28-19, 04:33 pm in I found the beta numbers in NSMB
Mole
Normal user

Karma: 2008
Posts: 357/359
Since: 07-08-12
when in doubt, delete the file and see if the game crashes
Posted on 04-26-16, 06:39 pm in FUCK NSMBHD (rev. 1 by shibboleet on 04-26-16, 06:40 pm)
Mole
Normal user

Karma: 2008
Posts: 155/359
Since: 07-08-12
MAN FUCK THIS SHIT

YOU SHOULD HAVE RESPECT FOR THAT SKYPE CHAT, YOU OWN IT
FOLLOW YOUR MOTHERFUCKING DREAMS
Posted on 01-31-17, 02:55 pm in Roast Me (If You Can)
Mole
Normal user

Karma: 2008
Posts: 235/359
Since: 07-08-12
who the fuck are you, even
Posted on 02-10-17, 05:27 am in tutorial So, how exactly do actors work? (rev. 2 by shibboleet on 02-10-17, 05:35 am)
Mole
Normal user

Karma: 2008
Posts: 255/359
Since: 07-08-12
So this is a (lame?) attempt and showing the newbies how the actors in NSMBDS really work. Now this tutorial assumes that you've already learned some C, C++, and ARM assembly. If you haven't learned any of these (but really ARM in general if you just want to get a tiny grasp), you should exit this thread and try to learn these languages. Oh, and you also have to have a version of IDA. I use 6.8 (used to use 6.1 but now the idb fails for some reason.)

So to actually figure out how an actor works, you first have to find the pointer to it's profile in the profile pointer list. This is located at address 0x0203997C in the game's code (I think it's US region, correct me if I'm wrong, and to get to this address you hit "g" in the IDA view, and then paste that address). The profile pointer list literally points each entry to the actor's constructor, which is what we'll get into later. Now during the 10 minutes I spent looking at the IDB, I'm not sure how one would calculate how to find an actor. But for the sake of example, we will use the Jumping Cheep Cheep's pointer. This pointer is at 0x0203997C.

main0:0203997C DCD off_2228F10 ; 136


if you're using a outdated IDB, it will appear as this. Highlight off_2228F10 in IDA and hit "n". In the field, simply type in "JumpingCheepCheep__Profile" and hit enter. Then it should show up as this:

main0:0203997C DCD JumpingCheepCheep__Profile; 136


and if it looks like that, highlight it and hit enter OR just double click on the name. After you click on it, you should get something like this, except that JumpingCheepCheep_ctor is labeled something else. Highlight it and name it what I have below.

Now to actually break this down. The first line, DCD, means to pretty much load into memory. So in this example, the constructor is loaded into memory and accessed. The second line just says that to get to this position, you had to come from the profile pointer table.

ov50:02228F10 JumpingCheepCheep__Profile DCD JumpingCheepCheep_ctor ov50:02228F10 ; DATA XREF: main0:profilePointerTableo


After renaming the routine, double click on it. You should have something like this:
ov50:02228DC0 JumpingCheepCheep_ctor ; DATA XREF: ov50:off_2228F10o ov50:02228DC0 STMFD SP!, {R4,LR} ov50:02228DC4 LDR R0, =0x4C8 ov50:02228DC8 BL allocFromGameHeap ov50:02228DCC MOVS R4, R0 ov50:02228DD0 BEQ loc_2228DE8 ov50:02228DD4 BL sub_209DEE0 ov50:02228DD8 LDR R1, =JumpingCheepCheep__vtable ov50:02228DDC ADD R0, R4, #0x3F4 ov50:02228DE0 STR R1, [R4] ov50:02228DE4 BL sub_2019644 ov50:02228DE8 ov50:02228DE8 loc_2228DE8 ; CODE XREF: JumpingCheepCheep_ctor+10j ov50:02228DE8 MOV R0, R4 ov50:02228DEC LDMFD SP!, {R4,PC} ov50:02228DEC ; End of function JumpingCheepCheep_ctor


yeah, that's a lot of information for you at once. But to be pretty blunt, this is what the code does:
dword JumpingCheepCheep_ctor() { dword v0 = (dword)allocFromGameHeap(1224); // allocates from the heap to get memory if (v0) // successfully allocated enough memory { EnemyActor__ctor(); // EnemyActor::ctor, which is something that JumpingCheepCheep inherits *v0 = JumpingCheepCheep::vtable; // pointer to the vtable sub_2019644(v0 + 253); // calls another function } return v0; // returns the results }


So really, the constructor sets up the actor to be able to function, and it also "preserves" memory for it to work. It also has a pointer to the vtable, which contains all of the methods that the class uses. This will also lead us into inheritance and methods. If you see what I see, double click on "JumpingCheepCheep__vtable". You should get something like this:

ov50:02228F24 JumpingCheepCheep__vtable DCD JumpingCheepCheep__onCreate ov50:02228F24 ; DATA XREF: JumpingCheepCheep__dtor+8o ov50:02228F24 ; ov50:off_2227818o ... ov50:02228F28 DCD Actor__beforeCreate ov50:02228F2C DCD Actor__afterCreate ov50:02228F30 DCD Base__onDelete ov50:02228F34 DCD Actor__beforeDelete ov50:02228F38 DCD Actor__afterDelete ov50:02228F3C DCD EnemyActor__onExecute ov50:02228F40 DCD EnemyActor__beforeExecute ov50:02228F44 DCD EnemyActor__afterExecute ov50:02228F48 DCD JumpingCheepCheep__onDraw ov50:02228F4C DCD EnemyActor__beforeDraw ov50:02228F50 DCD Actor__afterDraw ov50:02228F54 DCD Base__willBeDeleted ov50:02228F58 DCD Base__moreHeapShit ov50:02228F5C DCD Base__createHeap ov50:02228F60 DCD JumpingCheepCheep__heapCreated ov50:02228F64 DCD JumpingCheepCheep__dtor ov50:02228F68 DCD JumpingCheepCheep__dtorFree ov50:02228F6C DCD Actor__SetXPosition ov50:02228F70 DCD Actor__IncrementXPosition ov50:02228F74 DCD JumpingCheepCheep__executeState0 ov50:02228F78 DCD EnemyActor__isInvisible ov50:02228F7C DCD EnemyActor__executeState1 ov50:02228F80 DCD EnemyActor__executeState2 ov50:02228F84 DCD EnemyActor__executeState3 ov50:02228F88 DCD EnemyActor__executeState4 ov50:02228F8C DCD EnemyActor__executeState5 ov50:02228F90 DCD EnemyActor__executeState6 ov50:02228F94 DCD EnemyActor__executeState7


yep, even more crap to worry about. However, we can walk through it. This table is a table full of methods that the actor uses. For instance, "Actor__SetXPosition" sets the actor's position. This function is a part of the Actor class, so it inherits that method to use in the Jumping Cheep Cheep class. It saves memory! However, there is something called "Method Overriding", where instead of inheriting a method from a previous class (or even many many classes if the inherited class doesn't use their own method either), the current class overwrites it with something else. This can be seen when the entry starts with "JumpingCheepCheep__", which means that the method is overridden. For example, "JumpingCheepCheep__executeState0". So instead of using something like EnemyActor::executeState0(), it uses JumpingCheepCheep::executeState0().

Since we know how method overrides work, we can now look at important methods that most sprites use.

Method NamePurpose
beforeCreateThis method is executed before the actor is created onto the current scene.
afterCreateThis method is executed after the actor has been created.
beforeDeleteThis method is executed before the actor is deleted.
onDeleteThis method is executed once the actor has been deleted.
afterDeleteThis method is executed after the actor has been deleted.
beforeExecuteThis method is executed before the actor is executed.
onExecuteThis method is executed once the actor has been executed.
afterExecuteThis method is executed after the actor has been executed.
beforeDrawThis method is executed before the actor is drawn onto the current scene.
onDrawThis method is executed once the actor has been drawn.
afterDrawThis method is executed after the actor has been drawn.

Something common would be to click on a function and then see this:

ov0:020A039C EnemyActor__executeState1 ; DATA XREF: ov0:EnemyActor__vtableo ov0:020A039C ; ov10:Class2123dc4__vtableo ... ov0:020A039C MOV R0, #1 ov0:020A03A0 BX LR ov0:020A03A0 ; End of function EnemyActor__executeState1


this pretty much means:

int EnemyActor::executeState1() { return 1; }


which pretty much does nothing. I'm not sure what returns 2 and 3 do, but I think one of them deletes the actor. If not, then whoops, I overlooked something. But that's how NSMBU does it.

That's all I can really provide at the moment. I'll go deeper later, but this is my attempt at partially explaining it.
Posted on 03-07-17, 07:04 pm in resetting levels and piranha plant not showing up
Mole
Normal user

Karma: 2008
Posts: 263/359
Since: 07-08-12
Dude. For the last time, stop making a million threads despite you breaking the rules. I can't ban you, but I am having somebody else do it when they get online.

Good day.
Pages: 12345 »