Language…
6 users online: dacin, DashGamer, DixyNL, MegaSonic1999,  Segment1Zone2, toady - Guests: 243 - Bots: 381
Users: 64,795 (2,375 active)
Latest user: mathew

The SM64 Hacking Help/FAQ Thread (updated Nov 21)

Link Thread Closed
  • Pages:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 120
  • 121
  • 122
Originally posted by Kazeshin
Originally posted by Qwholl
So, I've been having alot of fun learning about sm64 hacking so far. But, there has been one thing that has been bothering me... When setting all the nessery level settings in my obj importer, I always have to re-save the collision settings. Like, if I assign a collision type to a specific texture, it wont stay that way the next time I load my updated obj file, and I'll have to re-set it again......... Why?


because of the programmation of the obj importer. it has not much to do with sm64 hacking.



Is there any way to fix it?
My youtube: https://www.youtube.com/channel/UCbX4pLm713laHTRtLj9xpxw
My twitch: https://www.twitch.tv/theqwollone
Originally posted by Qwholl
Originally posted by Kazeshin
Originally posted by Qwholl
So, I've been having alot of fun learning about sm64 hacking so far. But, there has been one thing that has been bothering me... When setting all the nessery level settings in my obj importer, I always have to re-save the collision settings. Like, if I assign a collision type to a specific texture, it wont stay that way the next time I load my updated obj file, and I'll have to re-set it again......... Why?


because of the programmation of the obj importer. it has not much to do with sm64 hacking.



Is there any way to fix it?


A little trick a figured was just to overwrite the previous OBJ while I still have the "Collision" tab open then when I go back to the OBJ Importer just clicked "Save Changes" again (note, if the save changes button is greyed out just open up the "Collision Type" drop-down list and reselect the collision you used. It should mow be allowed to be pressed again and can save all your collisions you set previously).
Originally posted by Vinnyboiler
Originally posted by Qwholl
Originally posted by Kazeshin
Originally posted by Qwholl
So, I've been having alot of fun learning about sm64 hacking so far. But, there has been one thing that has been bothering me... When setting all the nessery level settings in my obj importer, I always have to re-save the collision settings. Like, if I assign a collision type to a specific texture, it wont stay that way the next time I load my updated obj file, and I'll have to re-set it again......... Why?


because of the programmation of the obj importer. it has not much to do with sm64 hacking.



Is there any way to fix it?


A little trick a figured was just to overwrite the previous OBJ while I still have the "Collision" tab open then when I go back to the OBJ Importer just clicked "Save Changes" again (note, if the save changes button is greyed out just open up the "Collision Type" drop-down list and reselect the collision you used. It should mow be allowed to be pressed again and can save all your collisions you set previously).




That's what i've been having to do, re-select everything every time.... It get's a little....... borring.
My youtube: https://www.youtube.com/channel/UCbX4pLm713laHTRtLj9xpxw
My twitch: https://www.twitch.tv/theqwollone
The collision types are saved in the mtl. jzst copy it back. (should work but only if the new obj has the same texture positions etc.)
My Channel - http://www.youtube.com/skilllux64


Okay, this is pretty frustrating...how do you change how the outline color looks in-game after importing a texture through N64Rip? I'm trying to polish up my Mario head, but it turns white on the outside when I test it. I want that outline to be black like the other textures, but I don't want to manually outline it myself (if you do that, it ends up looking awkward when dying or getting into a cannon).

My image is in transparent, .png format, and it's antialiased. The resolution is 16x16 pixels.
Originally posted by Kazeshin
Originally posted by JohnsO
how to get the tilting bridge from bob omb's battlefield in a custom level?
i tried every object bank in the importer but in TT it wasn't there
(i searched for the object combo 147)


it's an object that is just available by setting the 0x0E bank to bob omb battlefield
____________________________________________________________
Originally posted by Blakeoramo
how do you set up warps and warp pipes in custom levels?



with 0x26 commands (toads tool does this for you)
open your rom in toads tool and click on 0x26 warp destinations.
there you can set up warps.
if you set warp id 0: castle grounds->1->10
and place a pipe with bparams, so that it's got warp id:0.
if you now jumo into that pipe, it will warp you to castle grounds->area 1-> warp id 10.
place a pipe with warp id 10 or a "warp mario start" into castlegrounds or the game will crash, cause it has no destination.
__________________________________________________________________
Originally posted by KartMario
Wanted to ask again if there is any way to make Bowser appear normal in the final battle.


yes, use the 0x0D object bank and select bowser.
i'm not quite sure, if he will act right, guess you've got to do that with asm, i may try that later.

But doesn't it already use that object bank? I want him to appear without the lighting, as in Super Mario DS.
Originally posted by Flame8765


Okay, this is pretty frustrating...how do you change how the outline color looks in-game after importing a texture through N64Rip? I'm trying to polish up my Mario head, but it turns white on the outside when I test it. I want that outline to be black like the other textures, but I don't want to manually outline it myself (if you do that, it ends up looking awkward when dying or getting into a cannon).

My image in transparent, .png format, and it's antialiased. The resolution is 16x16 pixels.


its probably because you ripped the texture from new super mario bros. wii.
how i know? i have the exact same pic saved on my cpu
I promise to never cancel my hacks
Originally posted by Blakeoramo
its probably because you ripped the texture from new super mario bros. wii.
how i know? i have the exact same pic saved on my cpu


I didn't rip it directly from the iso, I got it from mfgg.net, resized it, then polished it. I doubt that's the cause because it had an in-game black outline before.
Originally posted by Flame8765


Okay, this is pretty frustrating...how do you change how the outline color looks in-game after importing a texture through N64Rip? I'm trying to polish up my Mario head, but it turns white on the outside when I test it. I want that outline to be black like the other textures, but I don't want to manually outline it myself (if you do that, it ends up looking awkward when dying or getting into a cannon).

My image in transparent, .png format, and it's antialiased. The resolution is 16x16 pixels.


Unfortunately there's an error within SM64 itself that results in textures either getting a black or white outline, try importing it at 0080775 and see if it gets a black outline. I know I had to do a bit of messing around with the coin icon's texture adress to get it working correctly.
Originally posted by Vinnyboiler
Unfortunately there's an error within SM64 itself that results in textures either getting a black or white outline, try importing it at 0080775 and see if it gets a black outline. I know I had to do a bit of messing around with the coin icon's texture adress to get it working correctly.


I managed to fix it myself by re-importing the original texture. Somehow, the outline turned itself black again. Thanks for helping anyway.
Well, thank you Celux for confirming the RAM to ROM address conversion, the first time I was using this methode ( as always ) I evaluated its reliability and because I didn't know that opcode branches and jump multiply by four their associated immediate value ^^', I thought it wasn't... reliable.


picture hosting

As you can see, it helped me fix the cannons but also a lot of other things, adding things that cannot be added by TT64 due to the different memory banks content ( I don't want to spoil the surprise by telling what exactly ^^ ) and other awesome stuff, with the only sacrifice that I had to disable the smoke trail of the bullet bill ( instant freeze otherwise ! )

But now, ( oh the irony ) I can do some much more complicated stuff but these simple cannons still bugs me because their drawing distance is inferior to the one of the Bullet Bills, how can I raise that drawing distance ?
I think I saw this information a while ago but can't remember where...#smw{-_-;}

And I can't remeber what my other question was...#smw{-_-2}
Uber Mario 64 Demo released, 16 awesomely challenging stars awaits YOU!
Originally posted by ArchangelGabriel
I can do some much more complicated stuff but these simple cannons still bugs me because their drawing distance is inferior to the one of the Bullet Bills, how can I raise that drawing distance ?
I think I saw this information a while ago but can't remember where...#smw{-_-;}

And I can't remeber what my other question was...#smw{-_-2}


with a 0x0E command in the behavior script.
try 0E 45 4B FF
Originally posted by Kazeshin
with a 0x0E command in the behavior script.
try 0E 45 4B FF


Thanks a lot Kazeshin that was helpful, ( again, I found just after that where I read about this the first time LOL ).

It was too messy if I wanted to modify the cannon scripts especially since it is composed of two scripts that are shared w/ ALL LEVELS, so instead I choose to reduce the Bullet Bills drawing distance since their area is already particularly loaded and it worked very well...^^

So now I tried to make them much faster cuz they are slow as F#smw{x_x};
I tried the basic trick of duplicating the instruction 0C ( that calls ASM... ) in the loop. It didn't accelerate the Bullet Bills at all but it had a pretty interesting effect: In that case their turning radius is divided by two ( they turn twice as sharp )!

But i'm still wondering if someone would know anything about really accelerating them ( make them worth being called Bullet Bills ).

Also, if I want to submit my hack ( not anytime soon ) to other people and get feedback from them, where are the best sites ( apart from this one of course )?
And would it be okay to make a new thread about it ?
I see many threads about individual other hacks...
Uber Mario 64 Demo released, 16 awesomely challenging stars awaits YOU!
Originally posted by ArchangelGabriel
Also, if I want to submit my hack ( not anytime soon ) to other people and get feedback from them, where are the best sites ( apart from this one of course )?
And would it be okay to make a new thread about it ?
I see many threads about individual other hacks...


http://www.sm64.org/forum/ is another site of sm64 players.
http://jul.rustedlogic.net/forum.php?id=41 is an old sm64 hacking forum, that is nearly dead

also make a yt account, so ppl, that are interested can sub you :b
Problem solved ^^!

And now I think I discovered the purpose of new RAM objects variables, at least these are not identified in this post:

the variable at offset 0x00B8 is the forward speed! ( at least in the case of the Bullet Bill but I'm sure it's used for many other objects )

and i'll make the calculated guess that the two following offsets ( 0x00BC and 0x00C0 ) are the speed in the two remaining dimensions relative to the object's rotation ( Up/Down and Left/Right ).

It's also consistent with the fact that calling the behaviour script more than once every frame doesn't change the traveling speed whatsoever.

And of course, these values are floats.

( should I make a Gameshark code out of this or not ? )
Uber Mario 64 Demo released, 16 awesomely challenging stars awaits YOU!
Originally posted by ArchangelGabriel
the variable at offset 0x00B8 is the forward speed! ( at least in the case of the Bullet Bill but I'm sure it's used for many other objects )


this may be helpfull for you.
(to find ram position, add 0x80361160 to the offset.
copied from the sm64 headerfiles:

typedef struct object_struct /* Regular objects, Mario also has its own struct like this */
{
u16 graph_node_type; /* 0x00 */
u16 graph_flags;
struct object_struct *prev; /* previous linked list object */
struct object_struct *next; /* next linked list object */
u32 graph_parent;
u32 graph_child; /* 0x10 */
u32 geo_layout_ptr; /* 0x14 */
u32 _0x18;
u32 _0x1c;
float _0x20; /* 0x20 */
float _0x24;
float _0x28;
float x_scaling; /* 0x2c */
float y_scaling; /* 0x30 */
float z_scaling;
u16 _0x38;
u16 _0x3a;
u32 animation; /* 0x3c - current animation */
u16 anim_current_frame; /* 0x40 */
u16 anim_timer; /* timer, animation related? */
u16 anim_current_frame_copy;
u16 _0x46;
u32 _0x48;
u32 _0x4c;
u32 matrix_ptr; /* 0x50 */
float float_0x54;
float float_0x58;
float float_0x5c;
struct object_struct *next_object_ptr; /* 0x60: re-check this */
u32 _0x64;
struct object_struct *next_object_ptr2; /* 0x68: re-check this (child_obj) */
u32 _0x6c;
u32 _0x70; /* 0x70 */
u16 active; /* 0x0000 = inactive, 0x0101 = active */
u16 _0x76; /* collision flag according to YE */
struct object_struct *collided_obj_ptr; /* according to YE, pointer to object collided with */
u32 _0x7c;
u32 _0x80; /* 0x80 */
u32 _0x84;
u32 _0x88;
u32 obj_flags;
u32 _0x90; /* 0x90 */
u32 _0x94;
u32 _0x98;
u32 _0x9c;
float x_pos; /* 0xa0 */
float y_pos;
float z_pos;
float x_speed; /* x increment? */
float y_speed; /* 0xb0 */
float z_speed; /* z_increment? */
float speed;
u32 _0xbc;
u32 _0xc0; /* 0xc0 */
u32 x_rotation; /* 0xc4 - rotation triplet */
u32 y_rotation; /* 0xc8 */
u32 z_rotation;
u32 x_rotation2; /* rotation copy (collision?) 0xd0 */
u32 y_rotation2; /* 0xd4 */
u32 z_rotation2;
u32 _0xd8;
u32 _0xe0; /* 0xe0 */
float _0xe4; /* gravity related? y_speed - 0xe4 ? */
u32 _0xe8;
u32 _0xec;
u32 _0xf0; /* 0xf0 */
u32 _0xf4; /* obj type for some behaviors (ie, ice bully), for AMPS, radius of rotation */
u32 _0xf8;
u32 _0xfc;
u32 _0x100; /* 0x100 */
u32 _0x104;
u32 _0x108;
u32 _0x10c;
u32 _0x110; /* 0x110 */
u32 _0x114;
u32 _0x118;
u32 _0x11c;
u32 animation_ptr; /* 0x120 = (set by 0x27 26 behavior command) entry for animation? */
u32 _0x124; /* in some behaviors, action related? */
float _0x128;
float _0x12c;
u32 interaction; /* 0x130
00 = Something Solid. Can't grab. Mario walks around, Can jump over.
01 = Crashed when jumping at it, Used by Hoot.
02 = Grabbing
04 = Going through door
08 = Knocks mario back and dissappears. No damage.
10 = Something Solid, Can't grab, Mario walks around, Can't jump over, Seems somewhat thin..
40 = Climbing
*/
u32 _0x134;
u32 _0x138;
u32 _0x13c;
u32 _0x140; /* 0x140 */
u32 behav_param; /* behav param */
u32 _0x148;
u32 action;
u32 _0x150; /* 0x150 = also reset when action changes */
u32 timer; /* always incremented. When action changes, it's set to 0 */
float _0x158;
float distance_from_mario;
u32 _0x160; /* 0x160 */
float _0x164_x;
float _0x168_y;
float _0x16c_z;
float _0x170; /* 0x170 */
float _0x174;
u32 _0x178;
u32 transparency;
u32 damage_to_mario; /* According to YE, "How many segments of damage to do to Mario for objects that cause him harm" */
u32 health; /* Health (ie, for King bob-omb and whomp */
u32 behav_param2; /* re-check */
u32 previous_action; /* used to reset the 0x154 timer */
u32 _0x190; /* 0x190 */
float collision_distance; /* NOTE: if collision_distance < disappear_distance then disappear_distance = collision_distance */
u32 _0x198;
float drawing_distance;
u32 _0x1a0; /* 0x1a0 */
u32 _0x1a4;
u32 _0x1a8;
u32 _0x1ac;
u32 _0x1b0; /* 0x1b0 */
u32 _0x1b4;
u32 _0x1b8;
u32 _0x1bc;
u32 _0x1c0; /* 0x1c0 */
u32 _0x1c4;
u32 _0x1c8;
u32 script_ptr;
u32 stack_index; /* 0x1d0 */
u32 stack;
u32 _0x1d8;
u32 _0x1dc;
u32 _0x1e0; /* 0x1e0 */
u32 _0x1e4;
u32 _0x1e8;
u32 _0x1ec;
u32 _0x1f0; /* 0x1f0 */
u16 _0x1f4;
u16 _0x1f6;
float col_sphere_x;
float col_sphere_y;
float _0x200; /* 0x200 */
float _0x204;
float _0x208;
u32 behavior_script_entry;
u32 _0x210; /* 0x210 */
u32 collide_obj_ptr; /* pointer to another object (collision happening)?.
Can be used to detect if Mario is on top of the object by comparing
value with Mario's pointer */
u32 collision_ptr; /* set by behavior script (0x2A command) */
u32 _0x21c;
u32 _0x220; /* 0x220 */
u32 _0x224;
u32 _0x228;
u32 _0x22c;
u32 _0x230; /* 0x230 */
u32 _0x234;
u32 _0x238;
u32 _0x23c;
u32 _0x240; /* 0x240 */
u32 _0x244;
u32 _0x248;
u32 _0x24c;
u32 _0x250; /* 0x250 */
u32 _0x254;
u32 _0x258;
u32 behav_param_copy_ptr;
} Object;
Originally posted by Kazeshin

this may be helpfull for you.
(to find ram position, add 0x80361160 to the offset.
copied from the sm64 headerfiles:

**Long C struct**
( why is it marked as spoiler #smw{o_O?})

Thanks, I would like to know where did you find this, looks like there is a more up to date website than where I look for technical information about SM64.

Originally posted by Kazeshin
(to find ram position, add 0x80361160 to the offset.


I thought it was only a pointer at 0x80361160, a pointer to the object which his behaviour is being processed, are you sure... Nan you're right, I've just carefully looked at the disassembly; isn't it quite a waste of CPU time to copy-paste and copy-paste back all these parameters for EVERY object with a behaviour at EVERY frame? #smw{o_O?} ( especially for a Nintendo 64 )
Uber Mario 64 Demo released, 16 awesomely challenging stars awaits YOU!
Originally posted by ArchangelGabriel
Originally posted by Kazeshin

this may be helpfull for you.
(to find ram position, add 0x80361160 to the offset.
copied from the sm64 headerfiles:

**Long C struct**
( why is it marked as spoiler #smw{o_O?})

Thanks, I would like to know where did you find this, looks like there is a more up to date website than where I look for technical information about SM64.

Originally posted by Kazeshin
(to find ram position, add 0x80361160 to the offset.


I thought it was only a pointer at 0x80361160, a pointer to the object which his behaviour is being processed, are you sure... Nan you're right, I've just carefully looked at the disassembly; isn't it quite a waste of CPU time to copy-paste and copy-paste back all these parameters for EVERY object with a behaviour at EVERY frame? #smw{o_O?} ( especially for a Nintendo 64 )



spoiler: cuz its easier to see
source: i don't know exactly, i think these are the headfiles messiaen once made for sm64 c coding

i don't know, if it's rly like that. i hate nemu.
its possible it is else, it was just what someone told me, i never prooved it.
has anyone figured out how to make a texture have the painting sound effect or painting animation when you get near it or jump in it?
I promise to never cancel my hacks
Do you guys know how I can accelerate Koopa The """""Quick"""""
so to make him Koopa The Actually Quick (j/k)#smw{:D}

I know messiaen have a Gameshark Code for this but its extremely basic as it just call twice or three time the behaviour instructions which obviously would allow anyone to make him a multiple of 1 faster, plus it doesn't work at all for me.

Since I was able to make him climb the BOB summit in consistently less than 40 seconds ( edit: by working out the trajectory ) and my best was 25.3 ( yeah, I didn't try very hard #smw{¬_¬} ), there is no chance calling twice the right instruction would do what I intend... which is make him somewhat faster but not too much... like about as fast as in Tiny-Huge Island.

Do you have clues, guys, as to how I can do this (?) because the amount of subroutine called by the koopa behaviour is tremendous!

Edit2: Do you also know by any chance how to find where in ROM the functions called at about 0x8037XXXX/0x8038XXXX in RAM?
Uber Mario 64 Demo released, 16 awesomely challenging stars awaits YOU!
  • Pages:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 120
  • 121
  • 122
Link Thread Closed