shibboleet |
Posted on 11-16-16, 10:13 pm in Roast me
|
Mole
Normal user Karma: 2013 Posts: 200/359 Since: 07-08-12 |
you're still a spoon
|
shibboleet | |
Mole
Normal user Karma: 2013 Posts: 202/359 Since: 07-08-12 |
shibboleet |
Posted on 04-26-16, 06:26 pm in NSMBHD Skype Chat
|
Mole
Normal user Karma: 2013 Posts: 154/359 Since: 07-08-12 |
|
shibboleet |
Posted on 11-16-16, 09:47 pm in Roast me
|
Mole
Normal user Karma: 2013 Posts: 199/359 Since: 07-08-12 |
you're a spoon
|
shibboleet |
Posted on 11-17-16, 12:13 am in Roast me
|
Mole
Normal user Karma: 2013 Posts: 201/359 Since: 07-08-12 |
you're still a spoon. stop being a spoon.
|
shibboleet |
Posted on 10-30-18, 07:11 pm in SMPe - A Super Mario Party Editor
|
Mole
Normal user Karma: 2013 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 ;) |
shibboleet |
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: 2013 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
|
shibboleet |
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: 2013 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.
Level Flags
Star Coin FlagsBelow is a table of how the StarCoins[] get marked.
World Map Flags
|
shibboleet |
Posted on 04-01-17, 03:29 am in i have leak the newer super mario ds!!
|
Mole
Normal user Karma: 2013 Posts: 281/359 Since: 07-08-12 |
the PMs are better than the thread
|
shibboleet |
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: 2013 Posts: 305/359 Since: 07-08-12 |
no
|
shibboleet |
Posted on 08-18-17, 07:16 pm in Newer Super Mario Bros. DS
|
Mole
Normal user Karma: 2013 Posts: 315/359 Since: 07-08-12 |
stop whining
|
shibboleet |
Posted on 07-25-16, 02:11 am, deleted by shibboleet: you know what, fuck it. It's not worth it.
|
shibboleet |
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: 2013 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. |
shibboleet |
Posted on 07-28-17, 08:13 pm in Im A Fucking Idiot,Help me
|
Mole
Normal user Karma: 2013 Posts: 309/359 Since: 07-08-12 |
congrats, you actually ended up in the Dimensoial Trash Can Forum.
|
shibboleet |
Posted on 09-09-17, 08:31 pm in Opinions on Donald Trump Winning election?
|
Mole
Normal user Karma: 2013 Posts: 321/359 Since: 07-08-12 |
no
|
shibboleet |
Posted on 01-28-19, 04:33 pm in I found the beta numbers in NSMB
|
Mole
Normal user Karma: 2013 Posts: 357/359 Since: 07-08-12 |
when in doubt, delete the file and see if the game crashes
|
shibboleet |
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: 2013 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 |
shibboleet |
Posted on 01-31-17, 02:55 pm in Roast Me (If You Can)
|
Mole
Normal user Karma: 2013 Posts: 235/359 Since: 07-08-12 |
who the fuck are you, even
|
shibboleet |
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: 2013 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.
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. |
shibboleet |
Posted on 03-07-17, 07:04 pm in resetting levels and piranha plant not showing up
|
Mole
Normal user Karma: 2013 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. |