Marvel Mods

XML and MUA - Common Items => Knowledge Base - (not for questions) => Tutorials => Topic started by: Outsider on July 29, 2026, 08:50PM

Title: [MUA1] NPC Creation Tutorial
Post by: Outsider on July 29, 2026, 08:50PM
:marvelmods:   NPC CREATION TUTORIAL   :marvelmods:

What's up -- The Outsider here, bringing you yet another tutorial in the world of modding Marvel: Ultimate Alliance. This one is on how to create NPCs, which as you may know, means Non-Playable Characters. I'll try to explain this as simply as I can. Let's begin.






INTRO

NPCs are generally simpler to create than playable character mods, but they still require some technical work and a general understanding of how mods are created. So if you're not familiar with modding or just starting out, I would not recommend you start here, as you will get very confused. It is best to learn the basics at The Outsider's Guide to Modding (https://marvelmods.com/forum/index.php/topic,10705.0.html) first.






LESSON

Unlike playable character mods, NPCs do not use the herostat.engb file. They use the npcstat.engb file. You can find this file in your game's data folder. The best way to open that file is with Quick Batch (//%5Burl="https://marvelmods.com/forum/index.php/topic,11530.0.html"), so I would recommend installing that program if you haven't already. Now, when you open the npcstat.engb file, you will see entries for every single NPC in the game.

There are three types of NPCs. First, there's the Conversation NPC. These NPCs have no skin/model at all, only a HUD and are only seen in conversations. An example of this is the Ancient One, seen below. Don't be confused with the "skin = 0000" line -- they don't use a skin.

   stats {
   charactername = Ancient One ;
   name = AncientOne ;
   skin = 0000 ;
   }

Second, there's the Civilian NPC. These NPCs use a skin and a HUD, but they are not fighters - you only have in-person conversations with them. Sometimes, not even -- they just walk around as moving props. Examples of this are Weasel, Edwin Jarvis, and the Attilan Civilian, seen below.

   stats {
   characteranims = 31_atlantean ;
   charactername = Attilan Civilian ;
   name = AttilanCivilian_b ;
   skin = 3102 ;
   }

And finally, there's the Villain NPC -- the one you're likely here for. These are the NPCs you fight throughout the game. Both the lower-level minions, and the bosses that are harder to beat are villain NPCs. An example of this is the very first boss you fight in the game -- :scorpion: Scorpion.

   stats {
   aiforceranged = true ;
   body = 40 ;
   characteranims = 40_scorpion ;
   charactername = Scorpion ;
   combolevel = popsmash ;
   dangerrating = 50 ;
   level = 11 ;
   mind = 40 ;
   name = Scorpion ;
   npcdamagescale = 0.7 ;
   npchealthscale = 2.3 ;
   powerstyle = ps_scorpion ;
   scale_factor = 1.1 ;
   skin = 4001 ;
   sounddir = scorp_m ;
   spawnorbs = 3 ;
   specific_health = 650 ;
   strength = 40 ;
   team = enemy ;
   textureicon = 45 ;
      talent {
      level = 1 ;
      name = might ;
      }

      Race {
      name = Mutant ;
      }

      talent {
      level = 3 ;
      name = monst_dmg_high ;
      }

      talent {
      level = 3 ;
      name = monst_dmg_low ;
      }

      talent {
      level = 3 ;
      name = monst_health ;
      }

      talent {
      level = 1 ;
      name = fightstyle_villain ;
      }

      talent {
      level = 1 ;
      name = villain_resistances ;
      }

   }

WARNING:
Do not edit the npcstat.engb file if you don't know what you're doing, as this file even more delicate than the herostat. One wrong move, and you can mess up your entire game. Please be careful.






LEVEL 1: REPLACING SKINS

Now if all you want to do is change the skins of NPCs, then that is thankfully easy. You don't need to edit the npcstat file. All you have to do is view the npcstat you opened, look for the character you want to change, and look closely at the skin number. NPCs only use one skin. (For example, in Scorpion's case, that skin number is 4001.) Simply go to your game's actors folder and replace the numbered skin with your wanted skin that you rename that same number. You can do the same with their HUD by going to your game's HUD folder, and replace the numbered HUD (which in Scorpion's case is hud_head_4001.igb) with your wanted HUD. Now when you start a new game with no saved stats and go to the NPC, their skin will be your wanted skin. However, be careful when changing the skins of giant characters such as :galactus: Galactus or Ymir. Make sure your wanted skins are just as giant.






LEVEL 2: REPLACING NAMES

Now in addition to skins, if you want to change the names of characters, this requires changing only ONE thing in the npcstat for the character: their charactername. Go to the character you want to change, edit ONLY the "charactername" (not the "name"), and save the file. Then go to your game's data folder, and replace the original npcstat.engb file with the one you just edited. You may want to save a backup of the original file just in case. Now when you start a new game with no saved stats, you should see the name of the NPC has changed to what you want.

WARNING:
Change only the "charactername." Do not change the "name" -- that is the internal name that the game recognizes the character as. If you edit the name, you will mess up your game.






LEVEL 3: REPLACING POWERS

Alright, now it gets more technical, but you need not worry about this if you're changing a Conversation NPC or a Civilian NPC. This is only for Villain NPCs. These NPCs are simpler than playable characters. They don't use a talents file, multiple skins, or passives. However, they use powerstyle files and you can edit them just as you would for playable characters. You can change their animations, and you can change the coding. Again, this is where your knowledge of coding basics from the Outsider's Guide to Modding comes in.

Using the same villain -- Scorpion, let's look at his powerstyle file:

XMLB PowerStyle {
cansteal = true ;
   event {
   attack_bone_angles = -91 13 88 ;
   attack_bone_pos = 26 2 46 ;
   attacktype = beam ;
   beambolt = fx01 ;
   beameffect = char/scorp/p1_power ;
   damage = %mdmg_high ;
   damagescale = difficulty ;
   damagetype = dmg_energy ;
   hiteffect = char/scorp/p1_impact ;
   inherit = beam ;
   name = plasma_beam ;
   powerusage = 1 ;
   targetable = true ;
   }

   FightMove {
   aireusetime = 5 ;
   aitype = beam ;
   animenum = ea_power1 ;
   lockangles = true ;
   name = power_attack ;
   priority = 5 ;
      trigger {
      name = stop ;
      time = 0 ;
      }

      trigger {
      name = sound ;
      sound = char/scorp_m/p1_charge ;
      time = 0 ;
      }

      trigger {
      bolt = fx01 ;
      effect = char/scorp/p1_power ;
      fxlevel = 3 ;
      name = effect ;
      time = 0.29 ;
      }

      trigger {
      name = sound ;
      sound = char/scorp_m/p1_power ;
      time = 0.5 ;
      }

      trigger {
      fxlevel = 1 ;
      name = plasma_beam ;
      time = 0.5 ;
      }

      chain {
      action = Idle ;
      result = idle ;
      }

   }

   FightMove {
   aicomborange = med ;
   aicombotype = end ;
   animenum = ea_power1 ;
   lockangles = true ;
   name = power_boost ;
   priority = 5 ;
      trigger {
      name = stop ;
      time = 0 ;
      }

      trigger {
      name = sound ;
      sound = char/scorp_m/p1_charge ;
      time = 0 ;
      }

      trigger {
      bolt = fx01 ;
      effect = char/scorp/p1_power ;
      fxlevel = 3 ;
      name = effect ;
      time = 0.29 ;
      }

      trigger {
      name = sound ;
      sound = char/scorp_m/p1_power ;
      time = 0.5 ;
      }

      trigger {
      fxlevel = 2 ;
      knockback = 600 ;
      name = plasma_beam ;
      pierce = true ;
      time = 0.5 ;
      }

      trigger {
      name = sound ;
      sound = char/scorp_m/combo ;
      time = 0.55 ;
      }

      chain {
      action = Idle ;
      result = idle ;
      }

   }

   FightMove {
   aireusetime = 3 ;
   aitype = aoe ;
   animenum = ea_power2 ;
   lockangles = true ;
   name = power_smash ;
   priority = 5 ;
      trigger {
      name = sound ;
      sound = char/scorp_m/p2_charge ;
      time = 0 ;
      }

      trigger {
      bolt = fx01 ;
      effect = char/scorp/p2_power ;
      fxlevel = 1 ;
      name = effect ;
      time = 0.38 ;
      }

      trigger {
      effect = char/scorp/p2_power ;
      fxlevel = 2 ;
      name = effect_sound ;
      sound = char/scorp_m/p2_power ;
      time = 0.65 ;
      }

      trigger {
      arc = 180 ;
      attacktype = punch ;
      damage = %mdmg_high ;
      damagescale = difficulty ;
      knockback = 555 ;
      maxrange = 75 ;
      name = punch ;
      offset = 55 ;
      powerusage = 3 ;
      time = 0.65 ;
         damageMod {
         name = dmgmod_auto_knockback ;
         }

      }

      chain {
      action = Idle ;
      result = idle ;
      }

   }

}


Notice any differences?

The first difference you'll notice is that the damage is either %mdmg_high or %mdmg_low. It's always the former for bosses. This is a value that is in-game.
Next, you'll notice that the damagescale is difficulty. This means that the damage the attack can inflict depends on the difficulty you set when you entered the game -- easy, normal or hard.
Next, you'll see that they have a powerusage, but don't worry about that -- NPCs don't use a powerusage really.

Then finally there is a major difference: NPCs don't use terms like "power1, power2, power3," etc. NPCs have limited space for powers because they can't switch powers like playable characters can. So they use terms such as power_attack, power_smash, power_boost, and sometimes power_xtreme, which isn't actually an xtreme.

aireusetime is the amount of time the NPC takes before they use the power again. Think of it as reload time. If you don't see that, then it means the NPC can use it at anytime.

Effects and sounds of an NPC are also coded the same way as playable characters, but with one difference -- NPC sounds and voices are not in separate sound files, they are listed within the sound files of the map which they are at. That makes things very difficult because map files cover everything from NPCs to stage sounds and common sounds. Now, you can try to give an NPC a different sound & voice file and reflect that in the npcstat entry by changing the sounddir to what your new sound files are. I have not experimented with this in particular, so it might work or it may not. If it does or doesn't work, let me know and I'll update this tutorial accordingly.

If you handled the coding and animations correctly and saved the changes to the NPC's powerstyle file, then when you start a new game with no saved stats, you should see the minion or boss perform the powers you set. Effects will work even if they aren't listed in their package files. However, whether you hear the sounds of those powers depend on if having their own sound files outside of the map works.






LEVEL 4: CREATING NEW NPCS

Brace yourselves -- it gets even more technical here, but I'll go over this in the next post.

Title: [MUA1] NPC Creation Tutorial
Post by: Outsider on July 29, 2026, 08:50PM
CREATING NEW NPCS -- THE NPCSTAT

Like I said, it gets even more technical here. If you want to create a new NPC, you first have to create an npcstat for him or her. Let's look at Scorpion's npcstat and break down what does what.

   stats {
   aiforceranged = true ;
   body = 40 ;
   characteranims = 40_scorpion ;
   charactername = Scorpion ;
   combolevel = popsmash ;
   dangerrating = 50 ;
   level = 11 ;
   mind = 40 ;
   name = Scorpion ;
   npcdamagescale = 0.7 ;
   npchealthscale = 2.3 ;
   powerstyle = ps_scorpion ;
   scale_factor = 1.1 ;
   skin = 4001 ;
   sounddir = scorp_m ;
   spawnorbs = 3 ;
   specific_health = 650 ;
   strength = 40 ;
   team = enemy ;
   textureicon = 45 ;
      talent {
      level = 1 ;
      name = might ;
      }

      Race {
      name = Mutant ;
      }

      talent {
      level = 3 ;
      name = monst_dmg_high ;
      }

      talent {
      level = 3 ;
      name = monst_dmg_low ;
      }

      talent {
      level = 3 ;
      name = monst_health ;
      }

      talent {
      level = 1 ;
      name = fightstyle_villain ;
      }

      talent {
      level = 1 ;
      name = villain_resistances ;
      }

   }

   aiforceranged = true ; = This value means that the enemy will try to move away from you and attack you from far with projectiles or beams. If this value is not present, then the enemy will aggressively move towards you to attack.
   body = 40 ; = The enemy amount of health.
   characteranims = 40_scorpion ; = This is their animation file, and unlike playable characters, NPCs do not use "4_combat" animation files, as NPCs have all their animations in one file.
   charactername = Scorpion ; = The character's name.
   combolevel = popsmash ; = In hard mode, some enemies are invulnerable until you use a specific combo. This is what this value entails. The options you'll see are: basic, easy, hard, medium, popsmash, popup, veryeasy. Unsure about this for bosses, but this was certainly seen on minions.
   dangerrating = 50 ; = This is the filter for maxdangerrating; e.g. 50: Immunity to instant death, such as Nick Fury's sniper rifle.
   level = 11 ; This is their difficulty level. The higher this number, the more damage their powers inflict. So as the game progresses, the villains' level goes higher to match the heroes' XP getting higher. Though this conflicts with the "monst_dmg_high" or "monst_dmg_low."
   mind = 40 ; = I've no idea what this does, as NPCs don't use power usage like playable characters do.
   name = Scorpion ; = This is the NPC's internal name, created in the package files. DO NOT choose the same name as a playable version of the same character. That will cause issues. Choose a unique name for your new NPC.
   npcdamagescale = 0.7 ; = If you see this value, it means that the amount of damage they can inflict can be higher or lower. In this case, Scorpion inflicts 70% of his damage level, so not as much as his level suggests.
   npchealthscale = 2.3 ; = If you see this value, it means that the amount of the NPC's health is higher or lower than normal. In this case, Scorpion has 230% of his health.
   powerstyle = ps_scorpion ; = This is the name of their powerstyle file.
   scale_factor = 1.1 ; = If you see this value, it means that the character's height and mass are higher or lower than normal. In this case, Scorpion is 10% larger. Some bosses are an exaggerated large size.
   skin = 4001 ; = This is the skin number they use. NPCs only use one skin, and it needs to be hex-edited. Be sure to use a skin number that is not already taken. (I personally ask anyone trying this to not use any skin number that ends with "00," as I am using those for the EXG's NPCs.)
   sounddir = scorp_m ; = This is the sound file they use inside of the map file where they appear, as opposed to playable character sound files, which operate outside the map file.
   spawnorbs = 3 ; = This means the amount of times that health and energy orbs will spawn out of them as players damage them. In Scorpion's case, it's three times.
   specific_health = 650 ; = If you see this, it means they have a specific amount of health. Some NPCs appear on multiple acts, so they need to have different health (etc.) values that match that level. Those are defined for multiple NPC, such as the value "M_HLTH36", so a specific NPC might want to scale that shared health. Scorpion, however, has a numeric value so it clashes a bit.
   strength = 40 ; = This value means the amount of damage the enemy can inflict in non-power attacks, just like playable characters.
   team = enemy ; = This means that the character is an enemy for you to fight, as opposed to "hero" which you see on playable characters and NPC allies.
   textureicon = 45 ; = Not sure what this is, but I think this is probably some useless thing left over from XML2.

      talent {
      level = 1 ;
      name = might ;
      }
This means that the enemy can lift heavy objects.

      Race {
      name = Mutant ;
      }
A leftover thing from XML2, but not every enemy has this. Some say this can be used to differentiate humanoids from synthetics (robots), though.

      talent {
      level = 3 ;
      name = monst_dmg_high ;
      }
Highest level for the character's attack damage. Confirmed from my testing.

      talent {
      level = 3 ;
      name = monst_dmg_low ;
      }
Lowest level for the character's attack damage. Not every enemy uses this.

      talent {
      level = 3 ;
      name = monst_health ;
      }
Their health level, but not every enemy has this.

      talent {
      level = 1 ;
      name = fightstyle_villain ;
      }
This is the default fightstyle for enemies, in the same way that "fightstyle_default" is the default fightstyle for playable characters.

      talent {
      level = 1 ;
      name = villain_resistances ;
      }
This is one of the special values seen in the "shared_talents.engb" file. This gives bosses certain immunities or buffs. Similar to custom talents for playable characters. You can open that file to view the various enemy talents, but PLEASE DO NOT change them or add anything in that file. This will mess up people's games. Leave that to either the OCP or the EXG.

Some bosses also have size = followed by a group of three numbers. NPCs like Ultimo and MODOK have this value, so it's for enemies to have a particular size. I believe these numbers represent an X-axis, a Y-axis and a Z-axis.

Not every npcstat look exactly the same, but do look similar. Once you create the npcstat, place the new entry within the npcstat.engb file, and save it. Then overwrite the previous file with the new one. You may want to have a copy of the original, just in case.






CREATING NEW NPCS -- THE PACKAGE & POWERSTYLE FILES

This is where your knowledge from The Outsider's Guide to Modding come in. You create package files and powerstyle files just as you would for playable characters.

In NPCs package files, their effects are listed, just as vanilla playable characters. And the "_c" files are not needed. Here are Scorpion's package files you can use for an example:

scorpion_4001.pkgb
XMLB packagedef {
   actorskin {
   filename = 4001 ;
   }

   actoranimdb {
   filename = fightstyle_villain ;
   }

   actoranimdb {
   filename = 40_scorpion ;
   }

   model {
   filename = HUD/hud_head_4001 ;
   }

   texture {
   filename = textures/glow_cloudy ;
   }

   effect {
   filename = char/scorp/p1_power ;
   }

   effect {
   filename = char/scorp/p1_impact ;
   }

   texture {
   filename = textures/nextgen/burstline_flipped ;
   plat = 40 ;
   }

   effect {
   filename = char/scorp/p2_power ;
   }

   fightstyle {
   filename = data/powerstyles/ps_scorpion ;
   }

   fightstyle {
   filename = data/fightstyles/fightstyle_villain ;
   }

}


scorpion_4001_nc.pkgb
XMLB packagedef {
   actorskin {
   filename = 4001 ;
   }

   actoranimdb {
   filename = fightstyle_villain ;
   }

   actoranimdb {
   filename = 40_scorpion ;
   }

   model {
   filename = HUD/hud_head_4001 ;
   }

   fightstyle {
   filename = data/fightstyles/fightstyle_villain ;
   }

}


Just for added information, files that are loaded by the permanent packages or the map packages (usually fightstyle_villain, at least the fightstyle) don't necessarily needed to be added. These permanent files are:
data/shared_event_templates
data/shared_talents
data/common_ents
data/shared_nodes + common.igb
data/shared_nodes_combat + common_combat.igb
data/fightstyles/interact_grabvictim + anim
data/fightstyles/fightstyle_default (not used by NPCs)
data/fightstyles/fightstyle_carryguy (from the OCP2, not used by NPCs)

And a few other data files that aren't immediately referenced by NPCs. It is highly recommended NOT to edit any of these files, as they make up the backbone of playable characters and NPCs in the game. Leave these files alone.

And we went over NPC powerstyle files in the previous post. Once you create both the package and powerstyle files for your new NPC files, place your package files in your game's packages/generated/characters folder, and place your powerstyle file in your game's data/powerstyles folder.






CREATING NEW NPCS -- EFFECTS, SOUNDS & AESTHETICS

We also went over creating NPC HUDs -- create them just as you would for playable characters. In the case of NPCs, these HUDs need to be hex-edited and referenced in the package files I showed you above to ensure that they appear correctly. You need not worry about loading screens or icons, as NPCs don't use those.
You can also create powers with effects and sounds, but remember that NPC sounds usually work within the map sound file that they appear in. That said, once again, I have not tested whether an NPC's sound and voice files can work outside of the map's sound files, so if it turns out they can, I'll update accordingly.

Once you've made those, place them in the appropriate folders just as you would for playable characters.






CREATING NEW NPCS -- SIMULATOR MISSIONS

Now that your NPC is ready, it's time to place them where you want. In the case of simulator missions, it's easier than in the main game. They use a single file -- simulator.engb, which is located in your game's data folder. Let's open up that file, and I'll explain what you'll see inside. Although, full disclosure, I haven't made any simulator missions before because I care more about the main game.

First, you'll see the list of all the possible simulator stages. This is what one of them -- Asgard, looks like:

   ARENA {
   info = Asgard ;
   title = Asgard ;
   zone = sim/sim_asgard1 ;
   }

Info tells you about the stage, but this doesn't appear in MUA. A useless thing left over from XML2.
Title is the name of the stage. You will need this to determine the stage that the mission will take place in.
Zone tells the game where the stage information for the mission is found.

You need not change these, as these stages already contain information for any minions or bosses. Next, you'll see the simulator missions themselves, called courses. For this example, we'll keep with the Scorpion trend and pick the team mission where any four characters have to fight him. Look below to see what it looks like, and I'll explain what these are:

   COURSE {
   arena = Omega Base ;
   boss_damage_scale = 1 ;
   boss_health_scale = 8 ;
   bossname = Scorpion ;
   comicmission = true ;
   name = CMSCORPION ;
   startloaded = true ;
   timelimit = 1200 ;
   title = Scorpion_Vs ;
      CONVERSATION {
      file = sim/scorpion/intro ;
      model = Blackwidow ;
      name = intro ;
      }

      CONVERSATION {
      file = sim/scorpion/villain ;
      name = villain ;
      }

      CONVERSATION {
      file = sim/scorpion/epilogue ;
      name = epilogue ;
      }

      SOUNDFILE {
      file = SCSIM ;
      }

      SPAWNER {
      character = Scorpion ;
      count = 1 ;
      level = 3 ;
      levelset = true ;
      nograb = true ;
      slot = 35 ;
      smart = false ;
      villain = true ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimtrooper_a ;
      count = 1 ;
      level = 0 ;
      levelset = true ;
      slot = 5 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimreaver_a ;
      count = 1 ;
      level = 0 ;
      levelset = true ;
      slot = 6 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimreaver_a ;
      count = 1 ;
      slot = 7 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimreaver_a ;
      count = 2 ;
      delaymax = 1 ;
      delaymin = 1 ;
      slot = 8 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimreaver_a ;
      count = 2 ;
      delaymax = 1 ;
      delaymin = 1 ;
      slot = 9 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimtrooper_a ;
      count = 2 ;
      delaymax = 1 ;
      delaymin = 1 ;
      slot = 10 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimtrooper_a ;
      count = 2 ;
      delaymax = 10 ;
      delaymin = 10 ;
      level = 1 ;
      levelset = true ;
      slot = 11 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimreaver_a ;
      count = 2 ;
      delaymax = 10 ;
      delaymin = 10 ;
      slot = 12 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimtrooper_a ;
      count = 2 ;
      delaymax = 10 ;
      delaymin = 10 ;
      slot = 13 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimreaver_a ;
      count = 2 ;
      delaymax = 10 ;
      delaymin = 10 ;
      slot = 14 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimtrooper_a ;
      count = 2 ;
      delaymax = 10 ;
      delaymin = 10 ;
      slot = 15 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimtrooper_a ;
      count = 2 ;
      delaymax = 10 ;
      delaymin = 10 ;
      slot = 16 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimreaver_a ;
      count = 2 ;
      delaymax = 1 ;
      delaymin = 1 ;
      level = 1 ;
      levelset = true ;
      slot = 17 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimtrooper_a ;
      count = 2 ;
      delaymax = 1 ;
      delaymin = 1 ;
      slot = 18 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimtrooper_a ;
      count = 1 ;
      slot = 19 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = aimreaver_a ;
      count = 1 ;
      slot = 20 ;
      }

      SPAWNER {
      aggressionlevel = 99 ;
      character = aimtrooper_c ;
      delaymax = 1 ;
      delaymin = 1 ;
      disabled = true ;
      level = -3 ;
      levelset = true ;
      slot = 21 ;
      }

      SPAWNER {
      aggressionlevel = 99 ;
      character = aimtrooper_c ;
      delaymax = 1 ;
      delaymin = 1 ;
      disabled = true ;
      slot = 22 ;
      }

      SPAWNER {
      aggressionlevel = 99 ;
      character = aimtrooper_c ;
      delaymax = 1 ;
      delaymin = 1 ;
      disabled = true ;
      slot = 23 ;
      }

      SPAWNER {
      aggressionlevel = 99 ;
      character = aimtrooper_c ;
      delaymax = 1 ;
      delaymin = 1 ;
      disabled = true ;
      slot = 24 ;
      }

      SPAWNER {
      aggressionlevel = 99 ;
      character = aimtrooper_c ;
      delaymax = 1 ;
      delaymin = 1 ;
      disabled = true ;
      slot = 25 ;
      }

      SPAWNER {
      aggressionlevel = 99 ;
      character = aimtrooper_c ;
      delaymax = 1 ;
      delaymin = 1 ;
      disabled = true ;
      slot = 26 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = supersoldier_a ;
      count = 1 ;
      disabled = true ;
      level = 0 ;
      levelset = true ;
      slot = 27 ;
      }

      SPAWNER {
      aggressionlevel = 2 ;
      character = supersoldier_a ;
      count = 1 ;
      disabled = true ;
      level = 0 ;
      levelset = true ;
      slot = 28 ;
      }

      SPAWNER {
      character = supersoldier_a ;
      count = 1 ;
      damagereduction75 = true ;
      level = 1 ;
      levelset = true ;
      slot = 29 ;
      }

      SPAWNER {
      character = aimreaver_a ;
      count = 2 ;
      delaymax = 10 ;
      delaymin = 10 ;
      slot = 30 ;
      }

      SPAWNER {
      character = aimtrooper_a ;
      count = 2 ;
      delaymax = 10 ;
      delaymin = 10 ;
      slot = 31 ;
      }

      SPAWNER {
      character = aimtrooper_a ;
      count = 2 ;
      delaymax = 10 ;
      delaymin = 10 ;
      slot = 32 ;
      }

      SPAWNER {
      character = aimreaver_a ;
      count = 2 ;
      delaymax = 10 ;
      delaymin = 10 ;
      slot = 33 ;
      }

      SPAWNER {
      character = aimtrooper_a ;
      count = 2 ;
      delaymax = 10 ;
      delaymin = 10 ;
      slot = 34 ;
      }

      MUSTDIE {
      character = Scorpion ;
      count = 1 ;
      }

      REWARD {
      requiredscore = 10000 ;
      type = Bronze ;
      }

      REWARD {
      requiredscore = 15000 ;
      type = Silver ;
      }

      REWARD {
      requiredscore = 20000 ;
      rewardtalent = true ;
      type = Gold ;
      }

   }

   arena = Omega Base ; -- This connects to the ARENA section you saw in the beginning. It tells the game what stage the mission takes place in.
   boss_damage_scale = 1 ; -- The damage scale of the boss. 1 = 100%, which is normal.
   boss_health_scale = 8 ; = The health scale of the boss. I believe 8 = 800% in this case.
   bossname = Scorpion ; = The name of the boss. You can place the character name of your NPC here, not the internal name.
   comicmission = true ; = Not important. They are all comic missions. You can leave this alone.
   name = CMSCORPION ; = The name of the mission. The "CM" part stands for Comic Mission.
   startloaded = true ; = If you see this, that means that when players go to the Simulator, the mission is already available. No need to find a disc.
   timelimit = 1200 ; =  The amount of time players have to complete the mission before it's a failure.
   title = Scorpion_Vs ; = The title that you'll see in the Simulator. The "_Vs" part tells the game that it's a team mission versus a boss, as opposed to a mission starring a particular character.

In some missions, you'll also see these:
   destroylimit = -1 ; = :captainamerica2: Captain America's mission has it where he has to defuse all the bombs. He can't miss any, so that's what this value is.
   killlimit = 100 ; = The kill limit tells the game that the player has to kill a certain amount of enemies to win one of the objectives.
   protectlimit = 1 ; = The amount of people or objects you have to protect from getting destroyed. For example, the :thing: has to protect a frozen :fantastic: Mr. Fantastic, so it's 1 for him. :wolverine: Wolverine has to protect 8 power cores, so it's 8 for him.
   title = Black Panther ; = This is only for missions starring a particular character, such as :blackp: Black Panther in this example.
   weapons = true ; = This tells the game that players can pick up weapons in the mission.


Those set up the basics of the simulator mission, most of which you'll see in details when you open the Simulator in-game, and they must be in alphabetical (ABC) order. Now for the details:


CONVERSATION = These tell the computer where to find the conversations that take place during the simulator mission. There are three instances -- Intro where you start the mission, Villain where you meet the boss, and Epilogue where you've successfully completed the mission. The "model" doesn't matter, as the conversation files tell you who is talking.

SOUNDFILE = The sound file that the mission draws their sounds from. This includes "_m.zsm" files and "_v.zss" files. Your NPC's sounds and voice files would go inside these files. Unless you can have them in separate files -- again, haven't experimented with that yet.

SPAWNER = These are the positions where you place the NPCs. The map file already positioned them, so all you have to do is place the internal names of the enemies you want there.
- character = Scorpion ;  =  The NPC at that particular spot. Place your NPC's internal name here, and it should appear as the boss for that mission.
- count = 1 ;  =  The amount of that NPC that spawns there. For bosses, it's 1. For minions, it could be many.
- level = 3 ;  = The NPC's damage level.
- levelset = true ;  = Unsure. I presume it sets the NPC's damage level, I guess.
- nograb = true ;  = This means the NPC here cannot be grabbed. Generally for bosses.
- slot = 35 ;  = The spot that the NPC generates at. Leave these alone, as the map did the work for you.
- smart = false ;  = Admittedly unsure, but all of them say "false." Not sure what would happen if you say "true."
- villain = true ;  = Confirms that the NPC is a villain.
(In minion spawners, you may also see these.)
- aggressionlevel = 99 ;  = I presume this determines how aggressively the NPC come at players to strike them.
- damagereduction25 = true ;  = This determines if the NPC gains a 25% damage reduction or not.
- delaymax = 15 ;  = I presume the maximum delay before the next one spawns.
- delaymin = 10 ;  = I presume the minimum delay before the next one spawns.
- disabled = true ;  = I have no idea. If I find out, I'll let you know.
- removewhensmart = true ;  = I have no idea. If I find out, I'll let you know. I've seen these on Loki Trolls in particular, so maybe when you take out many, they no longer spawn? Who knows.

MUSTDIE = This tells you if a certain NPC must die in order to achieve success. Usually it will display the boss' internal name (character), and how many times they must die (count), which is 1 for a boss. If it's a minion that must die, it will tell you how many of them you must kill. So, if your new NPC is a boss or a minion, you place their internal names here.

REWARD = This tells you the reward players get for winning simulator missions. You can choose the requiredscore for each medal type (Bronze, Silver & Gold), and what they get when they win.
- For Bronze medals, players get a skin for individual missions -- which rewardskin = true ; is added, and nothing is rewarded for team missions.
- For Silver medals, players get +1 strength, +1 body & +1 mind for individual missions -- which rewardtraits = 1 ; is added, and nothing is rewarded for team missions.
- For Gold medals, players get +1 talent point for both individual missions and team missions -- which rewardtalent = true ; is added.

Once you set everything you want with your NPC and mission, save the simulator.engb file, then go to your game's data folder and overwrite the previous one with the new one. You may want to save a copy of the original, just in case. If everything was done correctly, then when you start a new game with no saved stats, and go to any simulator, the mission should appear with information mentioning your NPC as the boss and any mission parameters you've set. Then when you play the mission, you should see your NPC as the boss in the end, and any minions you've set during the mission.






CREATING NEW NPCS -- MAIN GAME

OK, I'll be honest with you -- I don't have the energy to explain this one in detail because it's VERY DIFFICULT to place NPCs -- especially bosses, into the main game. And it's even more work if you want them to drop an item after you've beaten them... But I'll try to give you the short, general version: You have to go into the map files of the stage you want your NPC to appear at, and replacing the current boss there. You'll find the map files in your game's maps folder, followed by the act they're in, then the mission, then the stage. There are only two you should be concerned with -- the .chrb file, which shows all of the internal names of the NPC that appear there with 13 being the maximum, and the .engb file, which contains the information for the map itself. For the .engb file, you don't have to change everything there, just go to anywhere you see the boss or minion internal names (which has "name =" followed by the internal name), and sub them out with your NPC's internal name. Save and overwrite. Create a copy of the original in case you mess up, as it's VERY EASY to mess it up, and you could ruin your game, causing it to freeze or crash.

Then you must do to the same to the map's package file, which you'll find in your game's packages/generated/maps folder, followed by the act they're in, then the mission, then the stage. Be very careful now -- the more you place in that file, the more chances the stage can malfunction. For example, you can't have too many special conversations, as they will overload the stage, and some things won't work correctly or at all. Murderworld, Mephisto's Realm and Castle Doom are perfect examples of this. It's a delicate balance you have to maintain.

And finally, look for any scripts that the stage is using, which you'll find in your game's scripts folder, followed by the act they're in, then the mission, then the stage. Sub out the internal name of the boss in those with your NPC's internal name, and save. Please don't blame me, however, if you did all of these, and your NPC doesn't show up, as there's like a 90-99% chance you did something wrong. It's hard for me to go into stage modding in detail, so honestly for now, I would suggest just working on the simulator missions to get a feel for it. But if you really want to try it out, go for it, but please save the original files, don't go nuts with multiple enemies or special conversations, and keep in mind that 13 is the limit for NPCs to appear in any stage. Also, some bosses such as :bheart: Blackheart, Mephisto and Deathbird have special properies or immunities. Changing them may disrupt the game itself.




Well, I think that wraps it up for this tutorial. (Props to ak2yny for providing additional information.) Perhaps one day if I have a lot of free time on my hands -- which isn't likely at all, I may write a more detailed tutorial on stage modding, but right now, I just can't. Still, I hope this tutorial helps you in terms of creating NPCs and maybe even simulator missions. Good luck!