Importing custom models into New Leaf

Preface:

If simply retexturing villagers can be called ‘intermediate’, this can be called an advanced level tutorial. You will require beyond surface level knowledge of model creation and/or editing! 

I cannot 100% assure this will work – however I have had no issues with it thus far.

I am also not claiming this is the best way to do this, but again, this is what worked for me.

Also, as with any modification of any game: Proceed at your own risk. Generally the worst that happens with 3DS modding is your save gets corrupted, so remember to save checkpoints/backups if you’re modifying a save you care about. However, simple crashes are more common.

This tutorial runs on the assumption you already have CFW set up with Luma’s patching enabled. If you have no idea what this means please don’t try jumping into this yet.

I believe that Citra’s layered modding system functions similarly to Luma’s layeredFS, but I do not know the procedure or filepaths like I do for Luma.

We will be making a custom villager model replacement – however you can repurpose this method for unrigged things too, like player hairs, furniture, PWPs, etc.

The end goal is to replace a villager with one of my OCs – for the CGFX method, I’m going to replace Pashmina with Chantal (left). For the CTR Studio method, I’m going to replace Mott with Deni (right).

You are allowed to republish or reformat this tutorial, however I’d ask that credit to my Tumblr (kk-dirge) be present. You don’t have to link here because this is my OC archive website lol

Let’s get started!


1. Prereqs (What you need)

  • A windows computer, due to use of command prompts/program limitations
  • 3DS running Luma CFW
  • Decompiled ROMFs of ACNL/ACNL:WA
  • A 3D model that fits the specifications (see below)
  • Blender (Any version works, though 3.3+ is needed for the CTR studio method)

For the CGFX converter method…

  • Milkshape 1.8.5 BETA (Older versions will not work) // Paid program with 30 day free trial, sorry.
  • CGFX converter
  • Ohana rebirth (Optional, for model viewing/reference)

For the CTR studio method…

What’s the difference?

CGFX converter and Milkshape are deprecated programs and are pretty bare bones – if that’s a good thing or not is up to you. While they’re old, they’re stable and generally do not cause wild errors unless you do something wrong.
Also, models imported this way tend to have shading issues.

CTR studio is actively in-development (as of writing), and is constantly having fixes and new features added. It can work with modern programs with modern QOL improvements, but there is a much larger room for error.

Choose whichever method works for you!


2. Setting up your model

(This process is similar for both CGFX and CTR, so it’s merged into one section. However, it will refer exclusively to Chantal’s model as it was written originally for the CGFX tutorial.)

The 3DS is a piece of hardware with limits that cannot be ignored – if you do, you will get crashes and things will not work.

Using Ohana rebirth, I exported Pashmina’s model (villagers can be found in NPC->Normal->Model) as a .DAE to open it in Blender. Again, this is not necessary, but can be very useful for reference in terms of proportions.
CTR studio edit: Exporting the model as a .dae from CTR studio is required if you choose the CTR studio method.

For the replacements I’ve done so far, I’ve generally noticed the villager polycount is around 630. That’s pretty low! To stick on the safe side, I’d suggest keeping your model’s polycount as close to this as possible, or lower. This polycount includes all the materials/parts. Additionally, filesize matters – around 20kb higher than the original and things stop working.

Depending on the villager you’re replacing, your model will have 2 materials or 3 materials.

If the base villager you’re replacing has a ‘flappy’ mouth (i.e. horses, wolves, birds); you will have 2 materials.

If the base villager you’re replacing has a texture mouth (i.e. bears, cats, dogs); you will have 3 materials.

The texture size for these materials is very small and in the end will be compressed so detail will be hard to see, so keep that in mind!

This is what Chantal’s model looks like, and it sits at 659 polygons – which is a bit higher than the goat model Pashmina uses (which was 628), but not too much higher.

Since goats have a texture mouth, Chantal’s model is separated into three materials, and you can see a bit on the seam between her eyes and mouth plates.

This is Chantal’s body material, which is mapped to a 64x128px texture. It is separate from the face, as the eyes and mouth both need to be separate to animate – however, if you have a flappy-jaw villager as your base, the mouth should be included in the body.

These are Chantal’s eyes and mouth, which are both 64x32px textures. Both must be their own object, with their own material.

Note how Chantal is not wearing a blank shirt – you do not have to make a group for this if you don’t want to, details on how to remove the shirt will come later. If you’d like your villager to have a shirt they can change, you simply need to separate it like how the body, eyes, and mouth are separate.

If using the CGFX converter method…

  • Ensure that the body, mouth, eyes, and shirt if you’re including it have been separated by material…
  • That the separated parts only have one material each that is used by the whole mesh…
  • That any vertex groups, colors, etc have been cleaned…
  • That you go to ‘User preferences’, search MS3D, and enable the MS3D import,export plugin…
  • Apply the location, rotation, and scale of each mesh…
  • Select each of the separated parts, and export them as .MS3D separately. You do not have to change the export settings, and try and name them something like ‘body’ ‘mouth’ ‘eyes’ etc.

If using the CTR studio method…

  • Ensure that the body, mouth, eyes, and shirt if you’re including it have been separated by material…
  • That the separated parts only have one material each that is used by the whole mesh…
  • That any vertex groups from the original model (if a conversion), colors, etc have been cleaned…
  • And that you save your file in a format that can be opened by Blender 3.3, if you’re not already in there.

The paths diverge below! Pick your poison!




7. Bonus touches & ending notes

Rimlight:

If your models are looking too shiny for your liking, it’s probably the rimlight. I made a mod that gets rid of it, you can find it here!

Renaming villagers:

(This is copied from the villager recolor tutorial)

Go to Script > Str > STR_NNpc_name.UMBST and open it on your hex editor. Scroll down until you find the villager names (in your language) and find the one who you’ll be replacing in your game.

Replace each letter with the letter of your new villager’s name.

As you can see, Julian has 6 letters in his name, while Cupid only has 5 so we get rid of that last letter by clicking on it, finding the highlighted values to the left and replacing them with “00″.

DO NOT name your new villagers longer than your old villagers as this might mess up the game. To be safe, choose names with shorter or exact number of letters only.


Thanks for bearing with me, and goodluck!

My most reliable contact if you need help is kk-dirge on tumblr, because Twitter’s dms suck and I’m too much of a hermit to be active anywhere else.

Or try asteriddle on gamebanana. Which I may try using. Who knows.