Language…
17 users online: Carnalwillow, crocodileman94, DanMario24YT, Gamet2004, h4shcat, Hayashi Neru, Jaiden, LightAligns, MorrieTheMagpie, Rhubarb44230,  Segment1Zone2, ShadowMistressYuko, signature_steve, simon.caio,  Tahixham, TonyversoTV,  zuccha - Guests: 255 - Bots: 297
Users: 64,795 (2,378 active)
Latest user: mathew

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

Link Thread Closed
  • Pages:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 120
  • 121
  • 122
No it says MVSCP.DLL but anyways how do I import over custom locations in the importer ?
Hi people! I don't know if this has already been answered, but does somebody have the values for the Yellow Star model for the Custom Importer?
Thanks for answering!

Originally posted by Kazeshin
0x43 object? i thought there were only 0x3c commands. i only know of 0x39 inserting many objects. my notes say that it somehow related to EC7E0, but ive never really looked at it.


"0x43 Objects" and "0x42 Objects" are the short names that VL-tone gave to Special and Macro Objects. Though I should probably just stick with "Macro" and "Special" to avoid confusion. #tb{:p}



If anyone is wondering what those objects exactly are. Macro & Special Objects are just like the 3D objects from the 0x24 command, but the process of loading them is different.

Macro 3D Objects are loaded from the 0x39 command. Every object is exactly 10 bytes long. If anyone is interested, here is some info from VL-Tone's notes:

Originally posted by http://qubedstudios.rustedlogic.net/Mario64_HackingDoc1.5.txt
----------------------------------------------------------------------------
| Object format for objects loaded using 0x39 (called 0x42 objects in TT64)|
----------------------------------------------------------------------------

Each object loaded with this command is dec 10 bytes long.
[01] [1F] [01 04] [02 DF] [07 80] [00 00]

[1,2]: First 7 bits = Horizontal rotation, last 9 bits are the model/behavior preset number.
Value 1E or 00 as type will end the object list and complete the 0x39 command.
[3,4] [5,6] [7,8]: X Y and Z position in level as 16-bit signed integers
[9,10]: Behavior parameters that will override the ones from the presets.

The preset table used by these commands is found at EC7E0 in the ROM.

There are 366 of them, and the first one in the table is defined as preset 01F.

Here's the format for the table:

1F= [13 00 09 1C] [00 74] [00 00]

[1,2,3,4]: RAM segment number and offset for behavior code to be attached to this object
[5,6]: Model ID number as defined by 0x21 and 0x22 commands
[7,8]: Parameters to be fed into the behavior code, usage varies depending on which behavior


Special 3D Objects are loaded from the 0x2E command. These objects are called from the sub command [00 43 NN NN], where 0xNNNN is the amount of special objects to be loaded. I don't really know all that much about Special Objects since I can't find much documentation on it, but here is what I know so far:

Special Objects can vary in byte length. They can either be 8 bytes long, 10 bytes long, or 12 bytes long depending on the object.

Using the Castle Grounds Level as an example, there are 30 special objects.

0xFD8CA7: [00 43 00 1E] // 0x001E = 30 in decimal

The Bubbly tree is an example of an Object with 8 bytes.

0xFD8CB5: [00 79 FA CB 02 C7 07 59]

[00 79] - Special Preset
[FA CB] - X Coordinate (16 bit signed)
[02 C7] - Y Coordinate (16 bit signed)
[07 59] - Z Coordinate (16 bit signed)

The Castle Tower Object is 10 Bytes in length, and it is mostly the same except that it includes Y-Rotation.

0xFD8CAB: [00 65 00 00 0E 33 F0 AC 00 00]
[00 65] - Special Preset
[00 00] - X Coordinate (16 bit signed)
[0E 33] - Y Coordinate (16 bit signed)
[F0 AC] - Z Coordinate (16 bit signed)
[00 00] - Y Rotation

The Metal Door that leads to the basement of the castle has 12 bytes. These kinds of objects have extra parameters.

0xFD8D85: [00 85 0C DC FE 01 F4 8D 00 A0 00 02]
[00 85] - Special Preset
[0C DC] - X Coordinate (16 bit signed)
[FE 01] - Y Coordinate (16 bit signed)
[F4 8D] - Z Coordinate (16 bit signed)
[00 A0] - Y Rotation
[00] - Extra Parameter 1 (Key#) // Overrides the value if not zero
[02] - Extra Parameter 2 (Warp ID) // Overrides the value if not zero

The length of the Special Object is based off of the Special Preset. The TT64 documentation says that the preset list is similar to the one that goes with the Macro objects, but it's in a different location in the rom.

Originally posted by TT64 ReadMe documentation
•Length: Indicates the length of this particular command. Dependent on the "Special Preset" value. Some commands are 8 bytes long, some 10 or 12 bytes.
•Special Preset: Similar to the Macro Preset parameter of 0x42 commands, but it uses a different preset list in the ROM, with values ranging from 0 to 255. You'll find that the pop-up menu often provide only a few choices, since it's limited to values used by commands of the same size.
•B. Param 1 & 2 (orange): These are not always present in 0x43 commands. Similar to the Behavior parameters in 0x24 commands, the difference here is that the orange parameters will override those defined by this particular Macro Preset value, if they're not equal to zero.
•Y rot: Just like the 0x42 command, but Y rotation is not present for some object commands.


So I was wondering if anyone here knew where that list is located. I may just ask VL-Tone directly if I can, or Skelux since he has the source code for TT64.

Edit: Looks like I found it, it starts at 0xED350 and ends at 0xED5E0. It's literally right after the Macro preset list used by the 0x39 command. lol.

I still don't know what determines the length. But I do know that the length is consistent between levels. So presets 0x65 to 0x78 will always be 10 bytes. I think that the length is determined by the behavior of the preset. Normal doors are 10 bytes long, while the doors that warp you to another area are 12 bytes long. That is just my guess though.

Here is a link to some notes on the preset list. It might not be too useful for people making custom levels, but I'll leave it here anyways.
Link: http://pastebin.com/BwzUVeq0
 
I have another noob question, what does it change if in mario 64 level importer 1.9.3, i raise the maximum ROM offset when i import a model? it seems the only way to import a model without getting the fucking model size exedeed error. Thanks for your time.
Originally posted by Evolite
I have another noob question, what does it change if in mario 64 level importer 1.9.3, i raise the maximum ROM offset when i import a model? it seems the only way to import a model without getting the fucking model size exedeed error. Thanks for your time.


you will destroy random other data.
Originally posted by Kazeshin

you will destroy random other data.


ok, this is what i fear of. that's strange, because my rom don't crash when i do this. i think it would crash. anyway, thanks for your answer.

Edit: you totally right, look at my underwater model:
http://imageshack.com/a/img661/6794/NUpWJt.png

so funny lol.
Quote
Jolly Roger Bay's background is dark or bright depending you have collected the first Star of Course 3.
So, how can I change the background to brighten when I'm collecting, for example, the first Star of Course 1 ? Do I need ASM hacking or just hex editing ?


Actually there are two boxing that I think are called shading in the importer the first option is how dark it is without stars and the second setting is for if you have all stars.
Team CornersoftYoutube
Originally posted by lezg_g
Only a aimple question...

When I start a m64 hack I should start replacing bomb omb batlefield or i can start repñacing another course, like bowser fire and sea ??

Any course
New layout by RanAS!
Does anybody know what is needed to get a hideable hud like in super Mario 64 the green stars, where it displays which stars you have collected in each level?
Working on Super Mario 64 Blast Off along with 55supershadow

Courses 9/15
Secret levels 1/6
Bowser levels 1/3
Hub 1/3

Check out the preview latest preview https://www.youtube.com/watch?v=bHKKsnbbF3E
Originally posted by BigBoo32
Does anybody know what is needed to get a hideable hud like in super Mario 64 the green stars, where it displays which stars you have collected in each level?


this is the code i used for green stars 2.0

288E68: shows camera icon

//START (show lives)
802E3744: ADDIU SP, SP, 0xFFE8
802E3748: SW RA, 0x0014 (SP)


//CHECK


LUI V1, 0x8034
Lh S1, $AFA0 (V1)
ANDI S1, S1, $0010
Beq S1, r0, $END
NOP

//MAIN
ADDIU A1, R0, 0x00D1
ADDIU A2, V1, 0x8380
JAL 0x802d6554 ; PrintStr function
ADDIU A0, R0, 0x0016
ADDIU A1, R0, 0x00D1
ADDIU A2, V1, 0x8384
JAL 0x802d6554 ; PrintStr function
ADDIU A0, R0, 0x0026
ADDIU A1, R0, 0x00D1
LH A3, 0xB260 (V1)
ADDIU A2, V1, 0x8388
JAL 0x802d62d8 ; PrintInt function
ADDIU A0, R0, 0x0036

//END
802E3798: LW RA, 0x0014 (SP)
802E379C: ADDIU SP, SP, 0x0018
802E37A0: JR RA
802E37A4: NOP

//Disable Lakitu cam
41918: 00000000
41928: 10000019
bessere camera


//START (show coins, V1 from first function stays)
802E37A8: ADDIU SP, SP, 0xFFE8 ; NAGRA: DisplayCoins()
802E37AC: SW RA, 0x0014 (SP)

//CHECK
Lh S1, $AFA0 (V1)
ANDI S1, S1, $0010
Beq S1, r0, $END
NOP

//MAIn
ADDIU A2, V1, 0x838C
ADDIU A0, R0, 0x00A8
JAL 0x802d6554 ; PrintStr function
ADDIU A1, R0, 0x00D1

ADDIU A2, V1, 0x8390
ADDIU A0, R0, 0x00B8
JAL 0x802d6554 ; PrintStr function
ADDIU A1, R0, 0x00D1

LH A3, 0xB262 (V1)
ADDIU A2, V1, 0x8394
ADDIU A0, R0, 0x00C6
JAL 0x802d62d8 ; PrintInt function
ADDIU A1, R0, 0x00D1

//END
802E37FC: LW RA, 0x0014 (SP)
802E3800: ADDIU SP, SP, 0x0018
802E3804: JR RA
802E3808: NOP





//START (show stars)
802E380C: ADDIU SP, SP, 0xFFE0
802E3810: SW RA, 0x0014 (SP)
802E3814: SB R0, 0x001F (SP)

//CHECK
Lh S1, $AFA0 (V1)
ANDI S1, S1, $0010
Beq S1, r0, $END
NOP

//MAIN
LUI T7, 0x8033
LB T6, 0x16D4 (T7)
ADDIU AT, R0, 0x0001
BNE T6, AT, SKIP
NOP
LW T7, 0xD5D4 (T7)
ANDI T8, T7, 0x0008
BEQ T8, R0, SKIP
NOP
BEQ R0, R0, END
NOP

//SKIP 9e858
LH T9, 0xB264 (V1)
SLTI AT, T9, 0x0064
BEQ AT, R0, PRINT
NOP
ADDIU T0, R0, 0x0001
SB T0, 0x001F (SP)

//PRINT 9e870
ADDIU A2, V1, 0x8398
ADDIU A0, R0, 0x00F2
JAL 0x802d6554 ; PrintStr function
ADDIU A1, R0, 0x00D1

LB T1, 0x001F (SP)
ADDIU AT, R0, 0x0001
BNE T1, AT, 0x802E389C
NOP

ADDIU A2, V1, 0x839C
ADDIU A0, R0, 0x0102
JAL 0x802d6554 ; PrintStr function
ADDIU A1, R0, 0x00D1

LB A0, 0x001F (SP)
SLL T2, A0, 0x3
SUBU T2, T2, A0
SLL T2, T2, 0x1
OR A0, T2, R0
ADDIU A0, A0, 0x0102
LH A3, 0xB264 (V1)
ADDIU A2, V1, 0x83A0
JAL 0x802d62d8 ; PrintInt function
ADDIU A1, R0, 0x00D1

//END 9E8D4
802E38D4: LW RA, 0x0014 (SP)
802E38D8: ADDIU SP, SP, 0x0020
802E38DC: JR RA
802E38E0: NOP


//replacing 43E68 to 43f58:

//START
ADDIU SP, SP, $FFE8
SW RA, $0014 (SP)

LUI T9, $8033
LH T2, $DDF4 (T9)


//ACTIVATOR
LUI T7, $8034
LH S1, $AFA0 (T7)
LUI T0, $8033
LH T0, $B1A0 (T0)
ANDI S1, S1, $0010
BEQ R0, S1, PRINT TIMER
0
BEQ T0, S1, END
0

//SOUND
LUI A0, $701A
LUI A1, $8033
ADDIU A1, A1, $31F0
JAL $0031EB00
ORI A0, A0, $0081

//PRINT TIMER
JAL $802A6D64 <-let this line away, if you don't want the "displays stars in each level"
NOP
ADDIU A0, R0, $0102
LUI T7, $8034
LH A3, $B226 (T7)
BEQ R0, A3, END
NOP
ADDIU A2, T7, $83A0
JAL $002D62D8
ADDIU A1, R0, $0020

//PRINT "CAP TIME"
LUI A2, 0x8029
ADDIU A2, A2, 0x8F50
ADDIU A0, R0, 0x00C0
JAL 0x802D66C0
ADDIU A1, R0, 0x0020

//END 43EE8
LUI T0, $8033
SH S1, $B1A0 (T0)
LW RA, $0014 (SP)
jr ra
ADDIU SP, SP, $0018



_______________________________
file format (at bea20):
<loop x4>
File number for next 120 Bytes (2Byte)
<loop x30>
Level ID (1 Byte)
amount of stars, bitwise (80 is 7, 40 is 6,..) (1byte)
memory address subtracted by 80200000 (2 byte)
<loopend>
<loopend>


__________________________________
displays stars in each level


//PRINT AMOUNT OF STARS IN CURRENT LEVEL
ADDIU SP, SP, $FFE8
SW RA, $0014 (SP)

//GET LEVEL ID AND FILE ID
LUI T9, $8033
LH T2, $DDF4 (T9)
LH T3, $DDF8 (T9)

//GET MEMORY ADDRESS
LUI A3, $8030
ORI A2, A3, $3A20
ORI A1, A3, $3C08

//LOOP 61d84
LH T0, $0000 (A2)
BEQ T0, T2, $PRESUBLOOP
NOP
ADDIU A2, A2, $007A
BEQ R0, R0, LOOPEND
NOP

//PRESUBLOOP 61d9c
ADDIU A2, A2, $0002

//SUBLOOP 61da0
LB T0, $0000 (A2)
LH T1, $0002 (A2)
BEQ T0, T3, $PREPARATION
NOP
ADDIU A2, A2, $0004
BEQ R0, R0, $SUBLOOP
NOP


//LOOPEND 61dbc
BNE A2, A1, LOOP
NOP

//PREPARATION
LUI T6, $8020
OR T1, T1, T6
LB T1, $0000 (T1)
ADDIU V0, R0, $0001
LBU A3, $0001 (A2)
BEQ V0, A3, END
NOP
ADDIU V1, R0, $000A
LUI T8, $8040
SB V0, $0000 (T8)
SB V1, $0001 (T8)
SB T1, $0002 (T8)

//LOOP START 61Df4
LUI T8, $8040
LB V0, $0000 (T8)
LB V1, $0001 (T8)
LB T1, $0002 (T8)
ADDIU A1, R0, $0020
AND T4, T1, V0
ADDIU A0, V1, $0000
LUI A2, $8034
BEQ T4, R0, star
NOP
ADDIU A2, A2, $839c <<cross
BEQ R0, R0, loopend
NOP
ADDIU A2, A2, $8398 <<star 61E28
>>>>loopend 61E2c
JAL 0x802d6554
NOP
LUI T8, $8040
LB V0, $0000 (T8)
LB V1, $0001 (T8)
ADDIU V1, V1, $000A
SLL V0, V0, $1
LUI T8, $8040
SB V0, $0000 (T8)
SB V1, $0001 (T8)
BNE V0, A3, LOOP START
NOP

//END
LW RA, $0014 (SP)
jr ra
ADDIU SP, SP, $0018
I'm unskilled in ASM so in the code above what rom adresses would I use in LemAsm to insert the code?
Working on Super Mario 64 Blast Off along with 55supershadow

Courses 9/15
Secret levels 1/6
Bowser levels 1/3
Hub 1/3

Check out the preview latest preview https://www.youtube.com/watch?v=bHKKsnbbF3E
Originally posted by 55SuperShadow
Does anyone know what RAM bank the Chill Bully is? I can't seem to find it, even with the Snow Man's Land bank selected.

moneybags
@BigBoo32, CajeASM is used when patching an ASM code to the Rom.
Originally posted by MelonSpeedruns
@BigBoo32, CajeASM is used when patching an ASM code to the Rom.

Sorry i'm new to ASM, but I attempted to copy the code to a text document, and import it with cajeASM but I get the following errors.

Working on Super Mario 64 Blast Off along with 55supershadow

Courses 9/15
Secret levels 1/6
Bowser levels 1/3
Hub 1/3

Check out the preview latest preview https://www.youtube.com/watch?v=bHKKsnbbF3E
Originally posted by Tufukins
Hey, so uhm... Even though all my walls are solidified correctly in Sketchup, I can't seem to figure out why THIS happens:

https://youtu.be/kKM2AAkH2C4

Which face is solid again?

White, or blue?

texture only the white, and not both sides. The game doesn't know what to do with the collision if both sides are textured.
Working on Super Mario: Blast Off! With user BigBoo32.

Latest Preview:
https://www.youtube.com/watch?v=8jFXTQcHPb8&feature=youtu.be

Originally posted by 55SuperShadow
Originally posted by Tufukins
Hey, so uhm... Even though all my walls are solidified correctly in Sketchup, I can't seem to figure out why THIS happens:

https://youtu.be/kKM2AAkH2C4

Which face is solid again?

White, or blue?

texture only the white, and not both sides. The game doesn't know what to do with the collision if both sides are textured.


Thank you so much! I just textured every face! Haha...


How would I get a see through texture to work? I mean such as the railings inside the castle, you can see between it.
Working on Super Mario: Blast Off! With user BigBoo32.

Latest Preview:
https://www.youtube.com/watch?v=8jFXTQcHPb8&feature=youtu.be
Originally posted by 55SuperShadow
How would I get a see through texture to work? I mean such as the railings inside the castle, you can see between it.

Open your texture in gimp, it's a free image editing software. Click on the layer tab at the top, and click add alpha channel.

Fill the see through space with a solid color, and select the bucket tool. Set the bucket to "color erase" mode, and select the solid color you used for the transparent area. Now use the bucket on those areas to get a checkerboard like color. Export it as a png, and put it in your level. When importing make sure you enable "alpha channel" in the textures tab.
New layout by RanAS!
Originally posted by MilleniumLuigi
Originally posted by 55SuperShadow
How would I get a see through texture to work? I mean such as the railings inside the castle, you can see between it.

Open your texture in gimp, it's a free image editing software. Click on the layer tab at the top, and click add alpha channel.

Fill the see through space with a solid color, and select the bucket tool. Set the bucket to "color erase" mode, and select the solid color you used for the transparent area. Now use the bucket on those areas to get a checkerboard like color. Export it as a png, and put it in your level. When importing make sure you enable "alpha channel" in the textures tab.

Thanks for the help!
Working on Super Mario: Blast Off! With user BigBoo32.

Latest Preview:
https://www.youtube.com/watch?v=8jFXTQcHPb8&feature=youtu.be
  • Pages:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 120
  • 121
  • 122
Link Thread Closed