Skip to content

A character Template of Mario that allows more possibilities of what's possible. Created for Super Mario 64 PC Port, specifically for Coop Deluxe!

Notifications You must be signed in to change notification settings

coop-deluxe/character-template

Repository files navigation

Character Templates for Coop Deluxe

These are character templates made for player characters that appear in Super Mario 64 Deluxe. It adds many QOL features that make editing your models easier.

We recommended using Blender v3.6

Fast64 is required for this .blend file. We recommend you download one of these 2 forks:

Fast64-Coop - This fork is made for specific SM64CoopDX features, including Level Lightmaps and Scrolling Managers.

Fast64-Gart - Made to help reduce the amount of post-export editing for custom player characters as much as possible. Provides recoloring features in Blender to set up recolorability for SM64CoopDX.

To install it, head to the icon on the upper left and switch to Preferences then head to Add-ons.

image

How to Rig Your Model!

To rig your mesh, follow this tutorial:

Step 1: Set to Object Mode. Have all the body parts joined using Ctrl + J. While holding Shift firstly click on the mesh, then the armature, and make sure it's in that order, then hit Ctrl + P and click With Empty Groups.

image

Step 2: Select just the mesh and set it to Edit Mode, then Right Click and click on Separate then select Loose Parts.

image

Step 3: Pick a body part, then switch to Edit Mode. Press A to select the entire mesh and head to the Object Data section, before selecting the appropriate Vertex Group. Then click Assign. Repeat the process.

image

Step 4: Set up your EyeStates by finding the Eye State Switch bone! You can also replace a switch option with an entirely new model for the head instead of a texture.

Eye states are as follows:

  • Switch Option 1: Half-Closed Eyes
  • Switch Option 2: Closed Eyes
  • Switch Option 3: Left Eyes
  • Switch Option 4: Right Eyes
  • Switch Option 5: Up Eyes
  • Switch Option 6: Down Eyes
  • Switch Option 7: Dead Eyes

image image

And you're done! You are now ready to export the model!

How to Export!

You must have all the meshes parented and assigned vertex groups for the export to work.

Step 1: Hover to the right side on the toolbar and look into GeoLayout Exporter. Then select the directory. Either you place the files under "sm64coopdx/mods/character_mod/actors" or dynos/packs. However, if you prefer exporting to DynOS Packs, you must have it named one of the following depending on what character you want to replace (Note that you can always rename the _geo.bin files):

  • Mario: mario, mario_geo
  • Luigi: luigi, luigi_geo
  • Toad: toad_player, toad_player_geo
  • Wario: wario, wario_geo
  • Waluigi: waluigi, waluigi_geo

image

Step 2: Click the Mario Armature and Export Armature GeoLayout.

image

Step 3: Open the game to build the model into a .bin file.

image

The model has now been built and is ready to use for modding! Any change to the model must have the old .bin file deleted!

How to Set Color Lighting to Material!

This is for AgentX's Fast64-Coop or the normal Fast64 version. If you're using ManIsCat2's Fast64-Gart, click here for instructions, and you can skip this part.

Make sure all the mesh materials are shared and organized. A program such as Visual Code is needed to manually edit the files.

The game has 9 recoloring slots for recolorability!

  • CAP
  • SHIRT
  • SKIN
  • HAIR
  • PANTS
  • GLOVES
  • SHOES
  • EMBLEM
  • METAL, however this points back to the CAP color.

Step 1: Open the geo.inc.c file and scroll to the bottom, this step can be skipped if you're using the latest version of the templates.

Type in the following lines in between. These will activate recolorability for most materials. You MUST have them in for recolorability to work:

GEO_ASM(LAYER_OPAQUE + 3, geo_mario_set_player_colors),
GEO_ASM(LAYER_OPAQUE_DECAL + 3, geo_mario_set_player_colors),
GEO_ASM(LAYER_ALPHA + 3, geo_mario_set_player_colors),
GEO_ASM(LAYER_TRANSPARENT + 3, geo_mario_set_player_colors),
GEO_ASM(LAYER_TRANSPARENT_DECAL + 3, geo_mario_set_player_colors),
GEO_ASM(LAYER_OPAQUE << 2, geo_mirror_mario_backface_culling),
GEO_ASM(LAYER_OPAQUE_DECAL << 2, geo_mirror_mario_backface_culling),
GEO_ASM(LAYER_ALPHA << 2, geo_mirror_mario_backface_culling),
GEO_ASM(LAYER_TRANSPARENT << 2, geo_mirror_mario_backface_culling),
GEO_ASM(LAYER_TRANSPARENT_DECAL << 2, geo_mirror_mario_backface_culling),
GEO_ASM(0, geo_mirror_mario_set_alpha),

image

Step 2: Make sure this code is added near the end of the geo.inc, replacing the old backculling code, this step can be skipped if you're using the latest version of the templates.

GEO_ASM((LAYER_OPAQUE << 2) | 1, geo_mirror_mario_backface_culling),
GEO_ASM((LAYER_OPAQUE_DECAL << 2) | 1, geo_mirror_mario_backface_culling),
GEO_ASM((LAYER_ALPHA << 2) | 1, geo_mirror_mario_backface_culling),
GEO_ASM((LAYER_TRANSPARENT << 2) | 1, geo_mirror_mario_backface_culling),
GEO_ASM((LAYER_TRANSPARENT_DECAL << 2) | 1, geo_mirror_mario_backface_culling),

image

Step 3: Open the model.inc.c file and head to 3/4 of the code. Replace the highlighted code with gsSPCopyLightsPlayerPart(???), to add in the coloring! Replace the ??? with the recoloring slot you want the material to use.

image

Step 4: Delete any old .bin file and restart the game to create a new one! And you're set!

How to Set Color Lighting to Material! -- ADVANCED!

This is for AgentX's Fast64-Coop or the normal Fast64 version. If you're using ManIsCat2's Fast64-Gart, click here for instructions, and you can skip this part.

In order to make proper faithful colors to the Vanilla models, you must follow these first!

To make this simple, these are your LIGHT GROUPS as each have proper names. Each light group is set up here so you'd use them for special coding. However, you can also type in and add a new light_group specifically for a few materials!

image

Here's what you'd need for proper coloring! Make sure to rename test_???_lights to your liking! NOTE: The wings can share the metal_lights group with no issues.

Lights1 test_logo_lights = gdSPDefLights1(
	0xFF, 0x0, 0x0,
	0x0, 0x0, 0x0, 0x49, 0x49, 0x49);

Lights1 test_sideburn_lights = gdSPDefLights1(
	0x73, 0x6, 0x0,
	0x0, 0x0, 0x0, 0x49, 0x49, 0x49);

Lights1 test_metal_lights = gdSPDefLights1(
    0x7F, 0x7F, 0x7F,
	0x0, 0x0, 0x0, 0x28, 0x28, 0x28);

Lights1 test_metal_wing_lights = gdSPDefLights1(
	0x7F, 0x7F, 0x7F,
	0x0, 0x0, 0x0, 0x49, 0x49, 0x49);

Here is a picture explaining this code which will be used for LIGHTS: gsSPLight(&luigi_light_group.l, 1),

Lighting

Here is also a picture explaining how THIS specific code for AMBIENT: gsSPCopyLightEXT(2, 15),

BODY PARTS

Now that you understand a BIT more about how it works, let's get to each material in order.

LOGO

Replace the COMBINELERP with this -> gsDPSetCombineLERP(TEXEL0, SHADE, TEXEL1, SHADE, TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, SHADE, TEXEL1, SHADE, TEXEL0, 0, ENVIRONMENT, 0),

image

METAL

image

SIDEBURNS

Replace the COMBINELERP with this -> gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, SHADE, COMBINED, 0, 0, 0, COMBINED),

image

METAL WINGS gsDPSetCombineLERP(TEXEL0, 0, SHADE, TEXEL1, TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, SHADE, TEXEL1, TEXEL0, 0, ENVIRONMENT, 0),

image

Aaaaaand you should be good!

How to create Custom Animations!

Wanna add your custom animations to your character? Here's how!

Step 1: Check your Animation Pointers file that is included in the ZIP file. It will help you identify which animation belongs to which action.

image

Step 2: Set it to Dope Sheet, then set it to Action Editor.

image image

Step 3: Go to Pose Properties and set the layer to ONLY the first one. The first one is to move the limbs, while the 2nd is for functions such as switch, scale, etc.

image

Step 4: Because of the game's current limitations, you can only rotate the bones, so any movement or scaling will not show in-game. Select a bone and start with one frame. Then press I and select Location & Rotation, this will insert a new frame on the current frame.

image image image

Step 5: Move to another frame and rotate the limb to how you want it, and then press I and Location & Rotation yet again.

image

Repeat the process with the rest of the limbs and animate your characters. NOTE: Animations C3, C4, and C5 are all a part of the idle animation. For the custom idle animations to not break, you must have each animation start on frame 0 and end on frame 29. You can also set up the manual range of the frames.

image

How to add Custom Animations!

There are two ways of adding them.

DynOS

This one is easy, but you can only replace existing animations with this.

Step 1: Head to Action Editor and select the animation.

image

Step 2: Head to the SM64 tab and find the Animation Exporter. Make sure you have the directory under dynos/pack/[DYNOS NAME].

image

Step 3: Once the animations are exported, head to the animations C files and open them to manually edit them. Table and Anim MUST be edited!

image

Step 4: Delete the white highlighted mario_ parts so that the animations can work.

image image

Step 5: Once that's saved, delete the old .bin file and open the game to generate a new one!

image

And it's done!

NOTE: You don't need to re-export the geo.inc.c and and model.inc.c files as the animation files are their own thing. You ALSO don't need to replace the table.inc.c file once it's edited.

Lua

This is for AgentX's Fast64-Coop. If you're using ManIsCat2's Fast64-Gart, click here for instructions.

With this, you can add any custom animation and have it be played without replacing a vanilla animation! But it takes lua knowledge and a lot of work to do so.

Step 1: Create a lua file and write smlua_anim_util_register_animation(, then the name of the animation. For example:

image

Step 2 If the animation file is exported, open it and copy its contents. Here's the order of how it's done:

Tables

image image

Values

image image

Indices

image image

Example of how it's set up:

smlua_anim_util_register_animation("luigi_run",
    0,
    0,
    0,
    0,
    71,
    {
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
    },
    {
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
    }
)

Lua Example:

image

And that's how it's done! You can either add the code in main.lua or add it in a completely different animation.lua file!

Common Error Fixes!

Errors, they stink, but we've been through this before!

Everything is Black.

All the models don't show the colors, except the textures. This is because the template is using an outdated version of Fast64. This is easily fixable.

image

Go to the Fast64 settings, then head to Fast64 Material Converter, the click "Recreate F3D Materials as version X". It should resolve the issue.

image

Vertex Groups Issue

This one is classic, it's annoying when it pops up but not that hard to fix, so don't worry and follow this guide:

image

This means one of three things:

  • The mesh is assigned to two or more bones.
  • The mesh is assigned to two different armatures.
  • There is an ungrouped vertex or vertices in one of the meshes.

To fix the first 2 issues, join the main armature's mesh and right-click, then hover over Parent and click on Clear Parent and Keep transformation.

image

To fix the third issue, firstly select all used meshes and go into Edit Mode, then switch to vertex select and click on the Select tab, then hover over Select All by Trait and click on Ungrouped Vertices, it should select all ungrouped vertices, after that, go into the meshes with ungrouped vertices and select the ungrouped vertex or vertices, and lastly assign them to the appropriate vertex groups.

image

That should do it!

C18 Textures prevent export!

This just means the multi-textured materials aren't formatted right.

image

Step 1: Head to the Materials section, then head to the texture settings.

image

Step 2: Select format of the Image (NOT CI-Format) to RGBA 16-Bit or 32-Bit!

image

Make sure ALL mutli-textured Material's texture formats are set correctly.

My geo.bin file won't generate!

If your model was exported successfully, yet the model won't generate, this means the texture path is incorrectly set.

Step 1: Make sure this option is enabled. This is the only way for the Texture Path to appear as this is required for multi-textured materials such as Metal or Metal Wings.

image

Step 2: Head to the Geolayout Exporter and enter /actors/folder name/. This is a guaranteed way for texture path to work no matter which computer uses the blend. Remember, Texture Path is the RESOURCE you're pulling from. It MUST match the folder name.

image

NOTE: Geolayout name does NOT need to match the folder name if the model will be loaded by mods such as Character Select.

Metal Head Bug

This is a Fast64 bug that occurs due to an update that changed how the materials work.

There are four constants for Cap Switches in order:

  • Vanish
  • Metal + Vanish
  • Metal

Only the custom head GEO_BRANCH with a clear name should be deleted.

image

Model is Off-Centered

Ever wonder why your model always was away from the shadow and you don't know how to fix it? Here's how!

  • Select the mesh and set the 3D Cursor to the ROOT / Body bone.
  • Then go into the Object tab at the top of the 3D viewer and hover over Set Origin.
  • Lastly, click on Origin to 3D Cursor to snap the origin to the Root bone of your armature. image

And that's it, now the model should be centered:

Incorrect Y animation offsets fix

If your character is floating or sinking through the floor due to being too short or tall, you can easily fix it by following this guide:

Step 1: Create a scale bone in your armature that is a child of the root bone which should be the first offset bone

Step 2: Find the Scale bone in your armature and go into its bone properties

Step 3: Find the scale value (by default it should be 0.25) and change it depending to the following: (n*0.25)/1.55997 Note that n is the length of your character's legs, find it by measuring the distance from the thigh to the shoe in the armature, if it's negative then just make it positive

Step 4: Lastly, change the new scale bone's value to the following: 0.25 / ((n*0.25)/1.55997) Once again n is the length of your character's legs, the same as above

Metal Texture Leaking

image

Due to how the new metal material works, it leaks into romhack materials if it isn't reverted correctly, this can be fixed by turning on Fix Reverts in Fast64-Gart, or by adding the reverts manually

Original Code (At the VERY bottom!): image

New Code:

Gfx charname_material_revert_render_settings[] = {
  gsDPPipeSync(),
  gsSPSetGeometryMode(G_LIGHTING),
  gsSPClearGeometryMode(G_TEXTURE_GEN),
  gsDPSetCombineLERP(0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT, 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT),
  gsSPTexture(65535, 65535, 0, 0, 0),
  gsDPSetEnvColor(255, 255, 255, 255),
  gsDPSetAlphaCompare(G_AC_NONE),

  gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 1, 0),
  gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 0, 0, 7, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0),
  gsDPLoadBlock(7, 0, 0, 1023, 256),
  gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, 0, 0, G_TX_CLAMP | G_TX_NOMIRROR, 5, 0, G_TX_CLAMP | G_TX_NOMIRROR, 5, 0),
  gsDPSetTileSize(0, 0, 0, 124, 124),

  gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 1, 0),
  gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 0, 256, 6, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0),
  gsDPLoadBlock(6, 0, 0, 1023, 256),
  gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 256, 1, 0, G_TX_CLAMP | G_TX_NOMIRROR, 5, 0, G_TX_CLAMP | G_TX_NOMIRROR, 5, 0),
  gsDPSetTileSize(1, 0, 0, 124, 124),

  gsSPEndDisplayList(),
};

NOTE: Make sure you replace charname with the correct default character you're replacing.

Default Characters: mario luigi toad_player waluigi wario

image

Miscellaneous

Want some tips based on what we learned? No problem!

Disable Tilt Torso

You know how in Beta Mario's running animation his torso never tilts?

image

Well.. you can do something like that! Head to geo.inc.c file of your model and locate it in search for GEO_ASM(0, geo_mario_tilt_torso),, it should be located at the last constant of the file, then delete it! That's it!

image

Editing Aramature Anatomy

Is your character's body too different from Mario? Do this!

Step 1: Make sure you select the armature in Object Mode.

1

Step 2: Head to the pose settings and select both layers.

2

Step 3: Set to Edit Mode and multi-select that one bone. Remember each offset bone has other bones attached to it. Perspective WILL help you with this!

5 6

Moving Your Model to a New Armature.

Is the main armature being a pain to you due to many errors but you're too scared to redo everything? TRY THIS!

Step 1: Click the meshes and right-click. Then hover to Clear Parent and select Clear Parent and Keep Transformation. Then, head to the Modifiers section and delete the Armature modifier. Do this to ALL of your meshes!

2 image

NOTE: As long as you have these vertex groups left alone, you SHOULD be fine once you head to the new armature.

image

Step 2: Multi-select all the unparented meshes and head to the Select tab. Click Invert and delete everything BUT the meshes. Once the meshes are left alone, copy and paste them into the new unbroken armature.

image image

Step 3: Make sure the meshes on the new template have the parent cleared AND the Armature modifier removed. Mult-select the mesh with the cleared parent and the removed modifier be deleted. Note: I'd recommend removing the vertex groups from those meshes as safekeeping. But that's up to you.

Step 4: Paste the old meshes on the new armature, then just parent them to the appropriate armature. That's pretty much it!

4

Different Shades, Same Color

If you want a different shade of the same color slot, do the following:

Step 1: Create a new material with the shaded solid preset

Step 2: Open the combiner tab (if you can't see it, uncheck Show Simplified UI)

Step 3: Change the combiner to the following: A: Shade Color | A Alpha: 0 B: 0 | B Alpha: 0 C: Primitive Color | C Alpha: 0 D: 0 | D Alpha: Environment Color Alpha

Step 4: Lastly, set the shade color to the same color as the color slot and change the primitive color to give it a shade

This can be used to create a darker shade of a color but still having the color change with the same slot as another color, or it can also be used to hue shift a color completely.

Wings on Back

Do you want to change where the wings are on your character? It's easier than you may think, check this out:

Step 1: With your armature selected, go into Edit Mode and select the Left/Right Wing bones with their children

Step 2: Move your wing bones to where you want them on the back

Step 3: Go into Edit Mode and find select the wing bones

Step 4: Select the torso last and hit ctrl + p and select Keep Offset

Step 5: Find the Capless Switch bone and duplicate it, set its Geolayout command to Geo ASM in pose mode, then repeat step 4 for it

Step 6: Create a new displaylist bone

Step 7: Select it and select the new Capless Switch last and do ctrl + p and once again select Keep Offset

And now you're done, now you have wings on your character's back.

Good luck!

About

A character Template of Mario that allows more possibilities of what's possible. Created for Super Mario 64 PC Port, specifically for Coop Deluxe!

Resources

Stars

Watchers

Forks