[MUA1] The Outsider's Guide To Modding

Started by Outsider, September 07, 2019, 09:59PM

Previous topic - Next topic
September 07, 2019, 09:59PM Last Edit: March 01, 2024, 10:13AM by Outsider
Introduction


So, you want to learn how to create a mod? You wish to learn how it's done? Well, this is the tutorial thread showing in lessons on how to do it in small intervals. It is best to learn how to do each lesson one at a time, step by step and not rush anything, until you think you're ready for the next step. Learn at your own pace. Please note that I will not teach how to convert 3-D models. This is only for those who wish to learn how to create mods entirely from scratch. No tuition required :laugh:.

Language Note:
I can't provide these lessons in another language -- I can only speak English. For those who speak Portuguese, Aventureiromax is providing videos over at his thread.


Required Tools:
Quick Batch -- This program is needed to alter the herostat file and important files for each character you plan on creating. I used XMLBCUI previously so you can use that too if you prefer, but this is what I use now, as I find this tool better.

Animation Mixing Package -- This package contains everything needed to conduct animation mixing as well as batch files to hex-edit skins, as well as create HUDs, icons, and loading screens.

ZSM Editor -- This is a program used to create sound files for each character you wish to create. You can also use ZSND, but I generally use that for other modding purposes.

GIMP -- This program will help you create and alter aesthetics for your mod. Other photoshop programs may work as well, but this is what I use.

Wavepad -- This program will help alter sounds and voice lines to the correct format. Other sound editing programs may work as well, but this is what I use.

XVI32 -- This program is used for hex-editing skins. This helps when you're making a mod where one skin is meant to change into another (i.e. shape-shifter mods).

SkinnerUI -- This is the previously used program used to create HUDs, icons, and loading screens for each character you wish to create.

You can find these programs (except GIMP and Wavepad) over at Tony Stark's Resource Backup Database. (http://marvelmods.com/forum/index.php/topic,8626.0.html) If any program is missing or links aren't working, feel free to message him either there or on Discord.


Rules on Questions:
1. I know that this is the knowledge base, which is not for questions -- but since you will no doubt have questions, you can post and ask them here and I will do my best to answer whenever I have time. Other experienced modders can feel free to answer as well.
2. Do not send me a private message containing modding questions, because this is a class, and others may have the same question in mind. It is best for everyone to see the questions and the answers to them.
3. Please do not ask the same questions over and over -- I don't wish to repeat myself. Check if someone has asked that question already.
4. Do not request mods here. This isn't the place for that, and I will simply ignore them without consideration. This thread is only to learn. Period.


Everyone got that? Good. Take a seat -- class is now in session.


Syllabus:
Lesson 01 - The CCC: Below
Lesson 02 - Package Files: http://marvelmods.com/forum/index.php/topic,10705.msg196394.html#msg196394
Lesson 03 - The Herostat: http://marvelmods.com/forum/index.php/topic,10705.msg196428.html#msg196428
Lesson 04 - Skins / Hex-Editing: http://marvelmods.com/forum/index.php/topic,10705.msg196464.html#msg196464
Lesson 05 - Animations: http://marvelmods.com/forum/index.php/topic,10705.msg196512.html#msg196512
Lesson 06 - Basic Mod Testing: http://marvelmods.com/forum/index.php/topic,10705.msg196536.html#msg196536
Lesson 07 - Coding Basics: https://marvelmods.com/forum/index.php/topic,10705.msg196648.html#msg196648
Lesson 08 - Passives: https://marvelmods.com/forum/index.php?topic=10705.msg196817#msg196817
Lesson 09 - Boost Coding: https://marvelmods.com/forum/index.php/topic,10705.msg197033.html#msg197033
Lesson 10 - Power Coding (Melee): https://marvelmods.com/forum/index.php/topic,10705.msg197545.html#msg197545
Lesson 11 - Power Coding (Radial): https://marvelmods.com/forum/index.php/topic,10705.msg197699.html#msg197699
Lesson 12 - Power Coding (Charge): https://marvelmods.com/forum/index.php?topic=10705.msg197753#msg197753
Lesson 13 - Power Coding (Beam): https://marvelmods.com/forum/index.php/topic,10705.msg197803.html#msg197803
Lesson 14 - Power Coding (Projectile): https://marvelmods.com/forum/index.php/topic,10705.msg197970.html#msg197970
Lesson 15 - Xtreme Coding: https://marvelmods.com/forum/index.php/topic,10705.msg198015.html#msg198015
Lesson 16 - Throw Powers / Grab Smash: https://marvelmods.com/forum/index.php?topic=10705.msg198128#msg198128
Lesson 17 - Effects: https://marvelmods.com/forum/index.php/topic,10705.msg198197.html#msg198197
Lesson 18 - Aesthetics: https://marvelmods.com/forum/index.php/topic,10705.msg198277.html#msg198277
Lesson 19 - Sounds: https://marvelmods.com/forum/index.php/topic,10705.msg198299.html#msg198299
Lesson 20 - Project Finish: https://marvelmods.com/forum/index.php/topic,10705.msg198300.html#msg198300


Herostat Reviews:
https://marvelmods.com/forum/index.php/topic,10705.msg196437.html#msg196437
https://marvelmods.com/forum/index.php/topic,10705.msg197707.html#msg197707




September 07, 2019, 11:09PM #1 Last Edit: July 05, 2020, 01:09PM by Outsider
Lesson 1: The CCC


Before you can even think about modding a new character, you must first be familiar with a Google spreadsheet that we call the Custom Character Central (the CCC for short). You can learn the rules for it here: http://marvelmods.com/forum/index.php/topic,9777.0.html. I will go over it in detail here.

For this lesson, I will put up the link for the CCC itself: https://docs.google.com/spreadsheet/ccc?key=0AvJoufVb_vSTdEprRkVqMzh6cy1wZlJxb1dkdzQzVXc&usp=sharing
Go ahead and click on it to pull it up as I continue the lesson. I'll wait...

See, every mod for Marvel: Ultimate Alliance has a number that is assigned to them. This spreadsheet reveals the list of mods that have been released, and the number connected to them. The tabs are on the bottom. The first list showcases mods of only Marvel characters -- this is MARVEL MODS, after all. The next tab showcases non-Marvel mods -- characters from DC, Image/Top Cow, film and movie properties and custom characters etc.

As you can see there, the numbers go from 0-255. Mods cannot be created with numbers 256 and higher, so some numbers will have more than one character assigned to it. It is possible, as long as skin numbers do not clash with each other. (More on that later.)

Now, take a look at the next tab that says "CCC Applicants." This shows modders and the mods that they have registered to work on. This needs to be done to secure numbers for mods. This way, we can prevent clashes from happening. So, it's important to register your project and choose a number that is available. (To do that, you have to fill out this very easy registration form: https://docs.google.com/forms/d/1SIgeT_OtG9w0lEOIKHmrUL46fm0BtjxUhsEABDtplL0/viewform?edit_requested=true)





Say, for example, you want to create a mod of a Marvel character. You would need to first look at the "CCC Marvel" tab, and look for a number that is available. Mostly all numbers on the Marvel side are taken, so you may have to share with another. Once you've found a number that you like, click on the "CCC Non-Marvel" tab and look for that same number on that side to see which character you'll be sharing with, if any. Then, you would register your project using that form. Your entry would then appear as the last entry on the "CCC Applicants" tab as a timestamp.

Remember that you're requesting a number, so you may not get it because maybe two mods are already using that number. So, it's important to look and see what numbers are being used. If two mods are already using that number on either side, it's best not to pick that one. Once you've registered your project, I will see it, as I moderate the CCC. I can tell you if that number is accepted or rejected. If rejected, I'll inform you of why. If accepted, I will inform you of what skin numbers to avoid.

Skin numbers? What is that, you ask? Well, every character has a herostat entry. I'll show you one of the official characters as an example -- :nightcrawler2: Nightcrawler.


   stats {
   ailevel = 1 ;
   autospend = bruiser_light ;
   body = 7 ;
   characteranims = 47_nightcrawlerdlc ;
   charactername = Nightcrawler ;
   level = 1 ;
   menulocation = 43 ;
   mind = 9 ;
   name = Nightcrawlerdlc ;
   playable = true ;
   powerstyle = ps_nightcrawlerdlc ;
   scale_factor = 0.98 ;
   scriptlevel = 3 ;
   skin = 4702 ;
   skin_01_name = Astonishing ;
   skin_02 = 03 ;
   skin_02_name = Classic ;
   skin_03 = 04 ;
   skin_03_name = Age of Apocalypse ;
   skin_04 = 06 ;
   skin_04_name = Uncanny X-Force ;
   sounddir = night_m ;
   strength = 5 ;
   team = hero ;
   textureicon = 7 ;
      BoltOn {
      anim = 47_nightcrawlerDlc_tail ;
      bolt = Bip01 Pelvis ;
      model = 4710 ;
      slot = ebolton_tail ;
      }

      Multipart {
      hideskin = swords_bolton ;
      hideskin2 = swords ;
      }

      talent {
      level = 1 ;
      name = night_power1 ;
      }

      talent {
      level = 1 ;
      name = night_tele ;
      }

      talent {
      level = 1 ;
      name = fightstyle_nightc ;
      }

      talent {
      level = 1 ;
      name = block ;
      }

      talent {
      level = 1 ;
      name = melee_moves ;
      }

   }


This is his herostat entry. Notice that the number 47 appears often? That's because his mod uses number 47. Take a look at the CCC Marvel list, and look for #47. You will see Nightcrawler is listed there. Now look at his herostat, at the part that says "skin = 4702." This begins to tell you what skin numbers that the character is using. So naturally, your new project cannot pick the same skin numbers as Nightcrawler, for that will cause a clash, as well as a lot of angry people upset with you. You don't want that. Now, you'll also see that Nightcrawler is sharing #47 with my mod of Blue Marvel. That's because he also uses #47. Take a look below at the herostat entry for Blue Marvel:


   stats {
   ailevel = 1 ;
   autospend = support_heavy ;
   body = 7 ;
   characteranims = 47_bluemarvel ;
   charactername = Blue Marvel ;
   level = 1 ;
   menulocation = XXXX ;
   mind = 7 ;
   moveset1 = moveset_flying ;
   name = bluemarvel ;
   playable = true ;
   powerstyle = ps_bluemarvel ;
   scale_factor = 1.1 ;
   scriptlevel = 3 ;
   skin = 4711 ;
   skin_01_name = Ultimates ;
   skin_02 = 12 ;
   skin_02_name = Classic ;
   skin_03 = 13 ;
   skin_03_name = Steel ;
   skin_04 = 14 ;
   skin_04_name = Masked ;
   sounddir = blue_m ;
   strength = 10 ;
   team = hero ;
   textureicon = 11 ;
      StatEffect {
      anim = menu_goodbye ;
      bolt = Bip01 Spine1 ;
      effect = char/blue/blue_charge ;
      fxlevel = 6 ;
      }

      talent {
      level = 1 ;
      name = blue_p1 ;
      }

      talent {
      level = 1 ;
      name = blue_resist ;
      }

      talent {
      level = 1 ;
      name = might ;
      }

      talent {
      level = 1 ;
      name = flight ;
      }

      talent {
      level = 1 ;
      name = block ;
      }

      talent {
      level = 1 ;
      name = fightstyle_default ;
      }

      talent {
      level = 1 ;
      name = melee_moves ;
      }

      talent {
      level = 1 ;
      name = leadership ;
      }

   }


Now look at the part that says "skin = 4711." You see? He is not using the same skins as Nightcrawler -- therefore, there is no clash. Now, go back to the CCC, and click the CCC Non-Marvel tab. Look for that same number #47... Notice that it's blank? That's because two mods are already using number #47. So it's best not to request #47 until we run out of space in the CCC, and now three mods will have to share that number. Again, it is possible as long as the same skin numbers are not used.





So having said all that, let's use another example. Let's say you want to create a non-Marvel mod --a DC Comics character. You would need to look under the CCC Non-Marvel list and look for a number that is available. As you can see, there are a lot more available numbers there. Once you've selected a number that you want, check the CCC Marvel side and see who you'll be sharing that number with. (If there are two mods there like with #47, don't bother -- just pick a different number.) If you're satisfied with your pick, you'd then register that project using the registration form. And then you'd look at the mod you're sharing with to see what skin numbers not to use. It's that simple.


IMPORTANT NOTE:
There are other reasons why once you pick a number, you should look at the Marvel or Non-Marvel side to see who what character you'll sharing with. Here's one reason why: They will share the same mannequin. That's right. The game can only handle one mannequin for each number. (FYI: Mannequins are the statues of characters you see at MUA's character select screen.) For example, Nightcrawler and Blue Marvel both share #47, so you can't play as both of them unless you don't mind seeing two mannequins of Nightcrawler or two mannequins of Blue Marvel there. That's why it's important that you pick a number for a character that you don't mind clashing with.
Another reason is loading screens. The game will only display three loading screens for each number. So mods who share a number must be mindful that if one character has two loading screens, then the other can only have one.

That said, if you've already registered your project, and then later you decide that you want a different number than the one you chose, just send me a PM and I can change it. Also, it is important that when you release your mod project, to place a notice saying what character it will clash with in mannequin and possibly loading screens. That way, nobody can get angry with you saying that you didn't warn them.

DID YOU KNOW?
In the past, there have been many number clashes, and back then plenty of numbers were available. There was no need for two mods having the same number in those days. That's why I invented The Outsider's Fix number system that eliminates number clashes. Take a look at the Marvel side and look for #23... As you can see, :x-23: X-23 is there. Somewhere on the right side of that line, you will see the word "FIXED." That's because the Outsider's Fix system changed it. The mod of X-23 used to use #86, which clashed with the mod of Gorgon. So, I had to change it to #23, which was available. The changes are official, so if you have mods like X-23, you can use the Outsider's Fix system to easily change her number to #23. You can find it here: http://marvelmods.com/forum/index.php/topic,8753.msg166312.html#msg166312






Lesson Takeaway:
-Modders have to register their project with the CCC's registration form and choose a number that is available from 0-255.
-Look at the CCC on both Marvel and non-Marvel lists closely to see who that number will share with.
-Choose wisely what number you want, because they will share the same mannequin and up to three loading screens.
-View herostats and avoid choosing skin numbers that will clash with the one your project is sharing with. Clashes like that will cause a huge mess.
-When releasing your mod, place a notice saying which character your mod is sharing with, warning them.


September 08, 2019, 09:32PM #2 Last Edit: June 20, 2020, 08:53PM by Outsider
Lesson 2: Package Files


So now that you've chosen a number for your mod project, now it's time to work on the mod itself. Your first mod will always be the hardest, but it gets easier the more you do it. The very first thing you should do when creating a mod is to create that character's package files. This is an important step because your mod will not work at all without them. To begin modding, click on your XMLBCUI program to launch it. And, on your desktop, create a "new folder" where you'll work on it. Let's name it "Mod Project" going forward. Do not work inside the game's folders.

Go now to your game's folder. Now go to "packages," then "generated," and finally "characters." See those .pkgb files? Those are the package files for all mods in your game. Notice that all of them have a ".pkgb" file and a _nc.pkgb" file? The "nc" part means non-combat, like when your character is at a HUB where fighting is not necessary (i.e. Stark Tower). For this lesson, we'll use :magneto: Magneto's files. Highlight "magneto_17501.pkgb" and "magneto_17501_nc.pkgb file," copy them both, then go to that "Mod Project" folder, and paste the files you just copied. (NOTE: Any "_c.pkgb" files are really not necessary. Mods will work without them. Only .pkgb and _nc.pkgb files are needed.)





Once you've done that, use XLMBCUI to decompile the magneto_17501.pkgb file. Then hit "Edit." It should look like this...


XMLB packagedef {
   actorskin {
   filename = 17501 ;
   }

   actoranimdb {
   filename = interact_magneto_victim ;
   }

   actoranimdb {
   filename = 175_magneto_4_combat ;
   }

   actoranimdb {
   filename = 175_magneto ;
   }

   texture {
   filename = textures/ui/magneto_icons ;
   }

   texture {
   filename = textures/ui/magnetoc_icons ;
   }

   xml_talents {
   filename = data/talents/magneto ;
   }

   texture {
   filename = textures/nextgen/distort_mask2 ;
   }

   texture {
   filename = textures/nextgen/smoke1_normal2 ;
   }

   texture {
   filename = textures/oval ;
   }

   effect {
   filename = char/magneto/flying ;
   }

   model {
   filename = HUD/hud_head_17501 ;
   }

   texture {
   filename = textures/invisw_forcefield ;
   }

   effect {
   filename = char/magneto/p1_impact ;
   }

   effect {
   filename = char/storm/special_electrified ;
   }

   texture {
   filename = textures/nextgen/water4_local ;
   }

   texture {
   filename = textures/nextgen/bolt_softedge ;
   }

   texture {
   filename = textures/nextgen/distort_ring2 ;
   }

   effect {
   filename = char/magneto/p3_power ;
   }

   effect {
   filename = char/magneto/p1_power ;
   }

   texture {
   filename = textures/select_ring_glow ;
   }

   texture {
   filename = textures/clawring4 ;
   }

   texture {
   filename = textures/nextgen/distort_trail2 ;
   }

   effect {
   filename = char/magneto/p1_release ;
   }

   texture {
   filename = textures/nextgen/ripple ;
   }

   texture {
   filename = textures/nextgen/debris1 ;
   }

   texture {
   filename = textures/zigzag ;
   }

   texture {
   filename = textures/psi_ring ;
   }

   effect {
   filename = char/magneto/p2_power ;
   }

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

   effect {
   filename = char/magneto/p2_impact ;
   }

   model {
   filename = models/effects/ice_chunk_expanding ;
   }

   sound {
   filename = char/magnet_m/p2_grip ;
   }

   xml {
   filename = data/entities/ents_magneto ;
   }

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

   effect {
   filename = base/powerup/pu_burning ;
   }

   effect {
   filename = char/magneto/p4_power ;
   }

   texture {
   filename = textures/ring3 ;
   }

   texture {
   filename = textures/nextgen/distort_trail ;
   }

   effect {
   filename = char/magneto/p4_power2 ;
   }

   texture {
   filename = textures/nextgen/crack_decal_a_ng_d ;
   }

   texture {
   filename = textures/flame_base ;
   }

   effect {
   filename = char/magneto/p5_power ;
   }

   effect {
   filename = char/magneto/p5_impact ;
   }

   effect {
   filename = char/magneto/p5_aura ;
   }

   model {
   filename = models/effects/fx_invisw_forcefield ;
   }

   texture {
   filename = textures/bigglow ;
   }

   effect {
   filename = char/magneto/p6_power ;
   }

   effect {
   filename = char/invisw/p6_power ;
   }

   texture {
   filename = textures/trail_elem_fade ;
   }

   model {
   filename = models/effects/fx_invisible_shield ;
   }

   effect {
   filename = char/magneto/p6_aura ;
   }

   effect {
   filename = char/magneto/p6_impact ;
   }

   texture {
   filename = textures/s_anhpower ;
   plat = 40 ;
   }

   texture {
   filename = textures/nextgen/trail_elem_ng ;
   }

   effect {
   filename = char/magneto/p7_power ;
   }

   texture {
   filename = textures/bluestar ;
   }

   effect {
   filename = char/magneto/p7_aura ;
   }

   texture {
   filename = textures/levelup_rain ;
   }

   texture {
   filename = textures/nextgen/spark_ng ;
   }

   model {
   filename = models/chunks/roc_4 ;
   }

   model {
   filename = models/chunks/metal_generic_lrg ;
   }

   effect {
   filename = char/magneto/p8_impact ;
   }

   effect {
   filename = char/magneto/p8_power ;
   }

   effect {
   filename = char/invisw/p5_victim ;
   }

   fightstyle {
   filename = data/fightstyles/interact_magneto_victim ;
   }

   fightstyle {
   filename = data/powerstyles/ps_magneto ;
   }

   fightstyle {
   filename = data/fightstyles/moveset_flying ;
   }

}




I know... that is a lot of lines. But believe it or not, most of those lines aren't necessary. So, I will trim out the useless fat and show you only what is needed. Now the inside will look like this...


XMLB packagedef {
   actorskin {
   filename = 17501 ;
   }

   actoranimdb {
   filename = interact_magneto_victim ;
   }

   actoranimdb {
   filename = 175_magneto_4_combat ;
   }

   actoranimdb {
   filename = 175_magneto ;
   }

   texture {
   filename = textures/ui/magneto_icons ;
   }

   xml_talents {
   filename = data/talents/magneto ;
   }

   model {
   filename = HUD/hud_head_17501 ;
   }

   fightstyle {
   filename = data/fightstyles/interact_magneto_victim ;
   }

   fightstyle {
   filename = data/powerstyles/ps_magneto ;
   }

}




Ah, much better. Now before you do anything, take a look at it. Each of these lines are important.

actorskin = This refers to the skin number that this package file will support (only for one skin).
actoranimdb = These refer to the animation files that the mod will be using.
texture = This refers to the icons that the mod will be using.
xml_talents = This refers to the talents file that the mod will be using.
model = This refers to the HUD that this package file will support (only for one skin).
fightstyle = This refers to the powerstyle file that the mod will be using. You see this one twice, but really only the powerstyles one is needed. The "interact_magneto_victim" one doesn't need to be listed for it to work, but leave it there anyway.






Now comes the next step -- switching "magneto" to the name of your character and switching "175" to the number that you selected earlier. For this lesson, we'll just say the number is 243, and the character is Puck from Alpha Flight (who doesn't have a mod). So, change "magneto" to "puck" and "175" to "243." Now it should look like this...


XMLB packagedef {
   actorskin {
   filename = 24301 ;
   }

   actoranimdb {
   filename = interact_puck_victim ;
   }

   actoranimdb {
   filename = 243_puck_4_combat ;
   }

   actoranimdb {
   filename = 243_puck ;
   }

   texture {
   filename = textures/ui/puck_icons ;
   }

   xml_talents {
   filename = data/talents/puck ;
   }

   model {
   filename = HUD/hud_head_24301 ;
   }

   fightstyle {
   filename = data/fightstyles/interact_puck_victim ;
   }

   fightstyle {
   filename = data/powerstyles/ps_puck ;
   }

}




Did you do that? Good. Don't save it yet. Now because Puck is #243, we have to know that #243 is being used by Heimdall, as seen at the CCC (see previous lesson). So, now we have to look at Heimdall's herostat and see what skin numbers he is using so we know what not to use. Heimdall is using skin numbers 24305-24308. So for Puck, we will use skin numbers 24309-24312, just to be safe. So go back to that .pkgb file above, and change "24301" to "24309." Now, it should look like this...


XMLB packagedef {
   actorskin {
   filename = 24309 ;
   }

   actoranimdb {
   filename = interact_puck_victim ;
   }

   actoranimdb {
   filename = 243_puck_4_combat ;
   }

   actoranimdb {
   filename = 243_puck ;
   }

   texture {
   filename = textures/ui/puck_icons ;
   }

   xml_talents {
   filename = data/talents/puck ;
   }

   model {
   filename = HUD/hud_head_24309 ;
   }

   fightstyle {
   filename = data/fightstyles/interact_puck_victim ;
   }

   fightstyle {
   filename = data/powerstyles/ps_puck ;
   }

}




Good. NOW you can save it, and use XLMBCUI to compile the file. Remember what you named the files here, because later on when you're creating the mod, you'll have to name the files whatever they say here.
IMPORTANT NOTE: When compiling it back, the output xmlb line will end with an .xmlb extension. That is incorrect. Make sure you change the extension to .pkgb before compiling it, to ensure that the changes are recorded properly.






Now what we did here with the .pkgb file, we must also do with the _nc.pkgb file. So, use XMLBCUI to decompile "magneto_17501_nc.pkgb." Because this file is for non-combat, it will be shorter. It should look like this...


XMLB packagedef {
   actorskin {
   filename = 17501 ;
   }

   actoranimdb {
   filename = 175_magneto ;
   }

   texture {
   filename = textures/ui/magneto_icons ;
   }

   texture {
   filename = textures/ui/magnetoc_icons ;
   }

   xml_talents {
   filename = data/talents/magneto ;
   }

   texture {
   filename = textures/nextgen/distort_mask2 ;
   }

   texture {
   filename = textures/nextgen/smoke1_normal2 ;
   }

   texture {
   filename = textures/oval ;
   }

   effect {
   filename = char/magneto/flying ;
   }

   model {
   filename = HUD/hud_head_17501 ;
   }

}



Again, some of the lines aren't necessary, but let's just replace 17501 with 24309, 175 with 243, and "magneto" with "puck." Then I will get rid of the fluff, and when you're done, it will look like this...


XMLB packagedef {
   actorskin {
   filename = 24309 ;
   }

   actoranimdb {
   filename = 243_puck ;
   }

   texture {
   filename = textures/ui/puck_icons ;
   }

   xml_talents {
   filename = data/talents/puck ;
   }

   model {
   filename = HUD/hud_head_24309 ;
   }

}



Now go ahead and save and compile that. Delete the .xml and the .bak files that appear. You won't need those anymore. Now you've successfully created package files for one of Puck's costumes. However, Puck has four costumes. So now, you have to make package files for the other three costumes. Fortunately, that's easy. Just copy the puck_24309.pkgb and puck_24309_nc.pkgb files that you just did successfully, and paste them. Rename the copies "puck_24310." Paste them again, rename the new copies "puck_24311." Paste them again, rename the newer copies "puck_24312." Now you have package files for all four costumes -- but you're not done yet. This is what you should have now...

puck_24309.pkgb :done:
puck_24309_nc.pkgb :done:
puck_24310.pkgb
puck_24310_nc.pkgb
puck_24311.pkgb
puck_24311_nc.pkgb
puck_24312.pkgb
puck_24312_nc.pkgb

You no longer have to worry about the "24309" ones -- they're done. However, now all you have to do is decompile each of the rest of them, and change the number from 24309 to whatever number of the file you're opening, save, and compile. That's it. So, for example, if you open the 24311 files, then change 24309 to 24311 and save. Do it for each one here, and you're done. Congrats -- you've successfully created package files for your new mod!




IMPORTANT NOTE:
Other than the skin (called "actorskin" there), and HUD (called "model" there), all data must be exactly the same for the mod to work. Otherwise later on when you're selecting skins for your character, some will not have powers at all. Critically important. That's why I suggest copying & pasting, then change only the skin and HUD numbers.

CHALLENGE:
I would highly suggest practicing this lesson yourself, and when you think you got the hang of it, then I can move on to the next lesson. And if one is actually interested in creating Puck, then this can be your first mod for real. So somebody feel free to volunteer to create Puck -- these lessons will help you to create him along the way. (Post here if you wish to be the one to create Puck. Talk amongst yourselves and decide who's going to do it.)






Lesson Takeaway:
-Use a new folder on your desktop to begin your mod work. Do not work inside the game's folders.
-Package files need to be done for both ".pkgb" and "_nc.pkgb" files, for every skin of the mod.
-Other than skin and HUD numbers, all data there needs to be completely the same -- identical in every way.
-The copying & pasting method is your friend here. Ctrl + C to copy, Ctrl + V to paste.
-Remember what you named everything in the package files -- the mod's stuff later on will have to be named the same things.
-When compiling the files, make sure the extension is .pkgb, not .xmlb.


September 10, 2019, 03:36AM #3 Last Edit: October 13, 2019, 10:53PM by BlackHand13
TUTORIAL PROGRESS

Hello Marvel Mods students !
I volunteered to create Puck :avalanche: , the character Outsider is using as an exemple for this tutorial. I will be posting my progress here, and maybe other notes about the different lessons as well (difficulty, tips etc..).   

Lesson 1: The CCC :done:

=> No particular note on that, just choose your number carefully.

Lesson 2: Packages Files :done:

=> Not that hard to make as you just have to replace and copy-paste most of the time, however, mistakes happen, even if it's just a tiny space between numbers. Rereading your code is mandatory.

Lesson 3 : Herostat :done:

=> http://marvelmods.com/forum/index.php/topic,10705.msg196435.html#msg196435

see Outsider going over what's correct and what's not, down here
http://marvelmods.com/forum/index.php?topic=10705.msg196437#msg196437

Lesson 4 : Skins and hex-editing :done:

=> I grabbed all five skins and hex-edited them, it was pretty simple thanks to Outsider's explanation. I also created package files for the fifth one and I put it in the herostat with the others skins.

Lesson 5: Animations :done:

=> Beast and Thing animations (combat and menu) changed to Puck number and name.

Lesson 6: Basic mod testing :done:

=> I tested Puck in game as he is right now, see the post below.
http://marvelmods.com/forum/index.php/topic,10705.msg196556.html#msg196556
http://marvelmods.com/forum/index.php/topic,10705.msg196570.html#msg196570

Lesson 7: Coding Basics :done:

Lesson 8: Passives ???

September 10, 2019, 08:53PM #4 Last Edit: June 20, 2020, 08:53PM by Outsider
Lesson 3: The Herostat


Remember during the first lesson I mentioned that every character has a herostat? Well, let's dive deeper into that particular thing, shall we? See, after you've created your package files, now comes the part when you create a small file that sets up your new mod's official entry into everyone's game. This is called the herostat. It's a file that tells the game what kind of character your mod is. I tend to use Notepad to create a new herostat or edit another's herostat to create one. For this lesson, let's take a look at :genis: Captain Marvel's herostat:


   stats {
   ailevel = 1 ;
   autospend = support ;
   body = 5 ;
   characteranims = 173_captainmarvel ;
   charactername = Captain Marvel ;
   level = 1 ;
   menulocation = 50 ;
   mind = 12 ;
   moveset1 = moveset_flying ;
   name = CaptainMarvel ;
   playable = true ;
   powerstyle = ps_captainmarvel ;
   scriptlevel = 3 ;
   skin = 17301 ;
   skin_01_name = Genis-Vell ;
   skin_02 = 05 ;
   skin_02_name = Thunderbolts ;
   skin_03 = 02 ;
   skin_03_name = Genis ;
   skin_04 = 04 ;
   skin_04_name = Ultimate ;
   skin_05 = 03 ;
   skin_05_name = Captain Mar-Vell ;
   sounddir = capmvl_m ;
   strength = 4 ;
   team = hero ;
   textureicon = 4 ;
      StatEffect {
      bolt = Bip01 Spine2 ;
      effect = char/captmarvel/special_aura ;
      }

      StatEffect {
      bolt = Bip01 L Hand ;
      effect = char/captmarvel/special_aura_hand ;
      }

      StatEffect {
      bolt = Bip01 R Hand ;
      effect = char/captmarvel/special_aura_hand ;
      }

      talent {
      level = 1 ;
      name = captma_p1 ;
      }

      talent {
      level = 1 ;
      name = fightstyle_default ;
      }

      talent {
      level = 1 ;
      name = flight ;
      }

      talent {
      level = 1 ;
      name = block ;
      }

      talent {
      level = 1 ;
      name = might ;
      }

      talent {
      level = 1 ;
      name = melee_moves ;
      }

   }


All herostats more or less look like this. When creating a mod, always create the herostat to match the abilities of the character you're creating. Now, let's look more in detail as to what each part of the herostat means.



ailevel = To my knowledge, this is the XP level that a character has if the game's AI is controlling him/her. Notice that when the AI is attacking enemies, it's significantly weaker than when you attack with that same character? This could be why. Usually, this is always set at 1.

autospend = This is the trait that tells the game how the character levels up in attribute points (strength, body, and mind). There are four categories: bruiser, bruiser_light, support, and support_heavy.  Sbarth13 found out through his own research how the game factors it...

bruiser - heavy strength, medium body, light mind
bruiser_light - heavy body, medium strength, light mind
support - light strength, light body, heavy mind
support_heavy - medium strength, medium body, heavy mind

This is important because it determines the kind of character your mod is. For example, :hulk_icon: Hulk and :wolverine: Wolverine are most definitely in the bruiser category, focusing more on melee and brute force. :captainamerica2: Captain America and :blade: Blade fit the bruiser_light category, as they have durability/resiliency to last longer and go the distance in fights. :humant: Human Torch and :iceman: Iceman are in the support category for sure, as they focus more on powers and long-range attacks. And finally, support_heavy is the more rare category that not many mods use, but more boss-like characters like :bheart: Blackheart, Dormammu and Thanos would fit that category, with nothing light at all.

body = The amount of health points the character has. A high number in this attribute means that they have more health than most and can last longer in fights.

characteranims = The character animations that the character is using. Will go into that more in a future lesson.

charactername = The name of your character. This is the name that is displayed throughout the game.

level = I believe this is the level of your character at the start of the game. All characters start at level 1, so don't change this.

menulocation = The character's position on the character select screen. It can be from 1-25 and 40-50 using the 36 Roster Hack.

mind = The amount of energy points that the character has. Another word for this is focus. A high number in this attribute means that they can spend energy on powers more often than others.

moveset1 = An alternate moveset that the character uses. It only uses "moveset_flying" so it's really only for characters who can fly. If your character can fly such as :thor: Thor or :stark: Iron Man, be sure to add this in.

name = The internal name that the game will recognize as your character, and tells the game what talents file the character is using. Be careful -- this is NOT the same as "charactername" mentioned earlier. Take :blackwidow: Black Widow for instance: Her charactername is "Black Widow" -- that's the name you'll see displayed in the game. But her name in the game's system is "BlackWidowv" with no spaces and an extra V. It is important not to change this name, otherwise the game will not recognize your character. Very important.

playable = Confirms if a character is playable or not by you, the player. Your heroes will have it set to "true." NPCs will have it set to "false."

powerstyle = This tells the computer what powerstyle file the character will be using. Remember those package files you made earlier? It tells you what you named his/her powerstyle as. That gets put here.

scale_factor = This tells the game how big and tall the character is. If this line is not present (like with Captain Marvel), it means the character is of normal height and size. For this, 1 = 100%. So, characters like :juggernaut: Juggernaut will be much bigger. His scale factor is 1.5, meaning that he is 50% bigger than most characters. Other characters like Rocket Raccoon will be shorter than most. His scale factor is 0.7, meaning that he is 30% smaller than most characters.

scriptlevel = Honestly, I have no idea what this is, or what it does. If anyone knows, feel free to inform me.

skin = The skin number of the character's first (primary) costume. For only this one, you must place the entire skin number. It will tell the game the mod number that the character is using for all skins. In Captain Marvel's case, that number is 173. So the game is expecting all skins to start with 173.

skin_01_name = The name of the character's first (primary) skin. You can name it whatever you want.

skin_02 = The last two digits in the skin number of the character's second costume. Notice here that it only lists the last two numbers? That's because you've already told the game what mod number the character is using. So for this skin and all skins after it, you only have to put the last two digits.

skin_02_name = The name of the character's second skin. You can name it whatever you want.

skin_03 = The last two digits in the skin number of the character's third costume.

skin_03_name = The name of the character's third skin. You can name it whatever you want.

skin_04 = The last two digits in the skin number of the character's fourth costume.

skin_04_name = The name of the character's fourth skin. You can name it whatever you want.

skin_05 = The last two digits in the skin number of the character's fifth costume, if any.

skin_05_name = The name of the character's fifth skin. You can name it whatever you want.

skin_06 = The last two digits in the skin number of the character's sixth costume, if any. Notice in this example that Captain Marvel doesn't have a sixth skin, but some do. NOTE: The maximum number of costumes a single character can have is six. The fifth and sixth costumes will not have passives. More on passives in a future lesson.

skin_06_name = The name of the character's sixth skin. You can name it whatever you want.

sounddir = This tells the game where the character's sounds and voice are coming from. More on sounds in a future lesson.

strength = The amount of hit points the character has. Another word for this is strike. A high number in this attribute means that the character can inflict more damage on enemies than most. NOTE: The combined total of a character's strength, body, and mind should equal 22-24. More than that may be alright for boss-like characters.

team = The character's alignment. There's only two - hero and enemy. Your character (whether they are good or evil) will use "hero" while enemy NPCs will use "enemy."

textureicon = A leftover trait from XML2 that the game didn't bother removing. Probably not needed, but we leave it there anyway.





Are you with me so far? Good - let's continue on with understanding what parts of the herostat means. NOTE: In some of the official mods, you'll see lines such as "XMen" or "Brotherhood", then "grab." Those lines are not necessary. You can delete them.

StatEffect = If a character is using an effect while he/she is on the character select screen or heroes menu, this part tells you what the effect is. If adding this, be sure to place all brackets correctly, such as with Captain Marvel below:

      StatEffect {
      bolt = Bip01 Spine2 ;
      effect = char/captmarvel/special_aura ;
      }

      StatEffect {
      bolt = Bip01 L Hand ;
      effect = char/captmarvel/special_aura_hand ;
      }

      StatEffect {
      bolt = Bip01 R Hand ;
      effect = char/captmarvel/special_aura_hand ;
      }

The "bolt" tells the game which body part of the character that the effect is coming from.

NOTE: You can add "menuonly = true" to this if the effects are only supposed to be seen during the character select screen and heroes menu. You can also add "zoneonly = true" if the effect is to be seen during actual gameplay. You can put the value as "true" or "false." Iceman, for example, has it like this...

      StatEffect {
      bolt = Bip01 R Hand ;
      effect = char/iceman/special_selfchill ;
      fxlevel = 2 ;
      menuonly = true ;
      zoneonly = false ;
      }

      StatEffect {
      bolt = Bip01 L Hand ;
      effect = char/iceman/special_selfchill ;
      fxlevel = 2 ;
      menuonly = true ;
      zoneonly = false ;
      }

NOTE: You can also connect effects to a particular menu animation. (There are only three menu animations: menu_action, menu_idle, and menu_goodbye. More on that in a future lesson.) For example, :spiderman: Spider-Man uses the coding below to have his webs appear only when just appearing on the screen, when he's hanging upside-down on his web, and stays idle on his web.

      StatEffect {
      anim = menu_action ;
      bolt = Bip01 L Hand ;
      effect = char/spider/menu_idle ;
      fxlevel = 1 ;
      }

      StatEffect {
      anim = menu_idle ;
      bolt = Bip01 L Hand ;
      effect = char/spider/menu_idle ;
      fxlevel = 2 ;
      }

As you can see, "anim" refers to a certain menu animation. "fxlevel" just refers to a certain level within that particular effect, but more on that in a future lesson. Don't want to overwhelm anyone.

talent = Tells the game what talents your character has at all times, including the start of the game. Take a look at the coding below...

      talent {
      level = 1 ;
      name = captma_p1 ;
      }

That applies to Captain Marvel's first power. By default, ALL characters must have their first power unlocked and be available for use. Their first power should not be that strong-hitting. Very important. Now take a look at the next one below...

      talent {
      level = 1 ;
      name = fightstyle_default ;
      }

This tells the game the fightstyle that the character will be using. Most characters will use "fightstyle_default," but some have a unique fightstyle that adds more animations to their sets. More on animations in a future lesson. Baby steps, people. Now, take a look at the next one...

      talent {
      level = 1 ;
      name = flight ;
      }

This is the flight talent that is only for characters that can fly. Look at the next one...

      talent {
      level = 1 ;
      name = block ;
      }

This is the generic block talents that all characters must have. Without this, your character can't block at all. Now, look at the next one...

      talent {
      level = 1 ;
      name = might ;
      }

This is the might ability that only certain characters have. It allows them to lift heavy objects and throw them at enemies. They can also hit walls and objects harder than most. So characters like :pman: Luke Cage and :warbird: Ms. Marvel would have this talent because they have super strength. So, if your character has super strength, be sure to add this talent. Now, look at the next one...

      talent {
      level = 1 ;
      name = melee_moves ;
      }

That is the generic melee moves talent. While this is not needed per se, it allows the game to tell you at the stats screen of your character what his/her melee moves (basic attacks) are. All characters have this one by default. Now look at this next one that Captain Marvel does not have...

      talent {
      level = 1 ;
      name = healing_factor ;
      }

This is the healing factor talent that only some characters have. So, if your character can regenerate health gradually just as Wolverine, :deadpool: Deadpool, and :stooth: Sabretooth can, then be sure to add this talent. This next one Captain Marvel also doesn't have...

      talent {
      level = 1 ;
      name = leadership ;
      }

That is the leadership talent that only certain characters have. It increases the combo damage and combo XP your team makes by a certain amount. By default, nobody really has it, but natural born leaders like :cyclops: Cyclops and :panther: Black Panther ought to. So, if your character is the leader of a team, or is a king/dictator/ruler of some kind, then be sure to include this. Here's another that Captain Marvel doesn't have...

      talent {
      level = 1 ;
      name = ghost_resist ;
      }

Some characters such as :ghostr: Ghost Rider will have custom talents named after them that is set up in the talents file and is reinforced here. In Ghost Rider's case, it makes him immune to fire damage. Talents like this are usually named "(character)_resist." More on how to set up custom talents in a future lesson.





Now let's look at other different kinds that you don't see on Captain Marvel, but you'll see on others.

Boltons = If a character is using a bolton (an object separate from the character that the hero wields, such as a weapon or device), then this is for that. See this code below used by :cable2: Cable for example...

      BoltOn {
      bolt = Bip01 Spine2 ;
      model = models/weapons/cable_gun_back ;
      slot = ebolton_clawleft ;
      }

In this, "model" refers to what bolton the character is holding. "slot" refers to where of the body the bolton should connect to. Now besides boltons, there is another you will see on some herostats...

Skin Segments = If a character has a skin segment (an object that is connected to a character's particular skin, unique to that skin), then it would be displayed here, being called a "multipart." :hawkeye: Hawkeye has quite a few of them, so I'll show you a couple of his below:

      Multipart {
      hideskin = 20301_missile_R_hand_segment ;
      hideskin2 = 20301_bird_R_hand_segment ;
      }

      Multipart {
      hideskin = 20301_bow_L_hand_segment ;
      nonmenuonly = true ;
      showskin = 20301_bow_back_segment ;
      }

See? If a character's skin has skin segments, you can use "hideskin" to hide them from view, or "showskin" to reveal them. You can add "hideskin2" or "showskin2" if there is more than one skin segment. Just like with effects, you can also add "menuonly" or "zoneonly" (or in this case, "nonmenuonly") if you wish to either hide or show them only during the game, or during the character select screen / heroes menu.


IMPORTANT NOTE:
Don't feel overwhelmed. I know that was a lot of information to take in. As I've been saying all throughout these lessons, learn at your own pace. Slow it down, and make sure you read through and practice the steps when you feel most comfortable.






Lesson Takeaway:
-Design your herostat with a knowledge of who the character is and what he/she can do.
-Do not overpower the character. The game needs to have balance. Traits should equal 22-24, unlike it's a boss-level villain, and even then, don't go too far.
-Only write the whole skin number for the character's first (primary) costume. The rest only need the last two digits.
-Be careful and make sure all of the brackets and semicolons are in the right places.


September 11, 2019, 02:30AM #5 Last Edit: September 12, 2019, 01:29AM by BlackHand13
Following Outsider's lesson on the herostat, here's my version for Puck, and also first attempt at creating one.

   stats {
   ailevel = 1 ;
   autospend = bruiser ;
   body = 9 ;
   characteranims = 243_puck ;
   charactername = Puck ;
   level = 1 ;
   menulocation = XXXX ;
   mind = 3 ;
   name = Puck ;
   playable = true ;
   powerstyle = ps_puck ;
   scale_factor = 0.75 ;
   scriptlevel = 3 ;
   skin = 24309 ;
   skin_01_name = ??? ;
   skin_02 = 10 ;
   skin_02_name = ??? ;
   skin_03 = 11 ;
   skin_03_name = ??? ;
   skin_04 = 12 ;
   skin_04_name = ??? ;
   sounddir = puck_m ;
   strength = 11 ;
   team = hero ;
   textureicon = 5 ;
      talent {
      level = 1 ;
      name = puck_p1 ;
      }

      talent {
      level = 1 ;
      name = fightstyle_default ;
      }

      talent {
      level = 1 ;
      name = block ;
      }

      talent {
      level = 1 ;
      name = might ;
      }

      talent {
      level = 1 ;
      name = melee_moves ;
      }

   }


NOTE: - I gave him a scale_factor of 0.75, he is a lot smaller than a normal human but not as small as Rocket Raccoon.

Some changes were made in Outsider's post: http://marvelmods.com/forum/index.php?topic=10705.msg196437#msg196437

A few things to note:

Another way to describe the character name would be the "display name", whereas the name could be called the "internal name"

Textureicon is a remnant from XML2 I believe. It referenced which portrait the character used in the danger room

September 11, 2019, 03:19PM #7 Last Edit: September 11, 2019, 03:22PM by Outsider
Alright, so let's remind everyone who Puck is.



Puck (Eugene Judd) is a member of Alpha Flight, and has also been with X-Force. His powers include superhuman strength, agility, reflexes, durability, and superhuman longevity. He is half the size of a normal human male. He is also a skilled fighter.

Powers in detail:
Puck is formidable hand-to-hand combatant, capable of a mixture of various martial arts, street-fighting techniques, acrobatics and gymnastics. After a run-in with The Master of the World his body was subject to genetic manipulation of his cellular structure. His body tissues were condensed at a molecular level, causing his body to become akin to compressed rubber. His trademark attack is a cartwheeling motion. Spinning on his hands and feet at great speeds, he is able to slam into and knock down human-sized enemies with ease. He is also skilled in bullfighting. He has some knowledge of mysticism, enough to once trap Black Raazer, and the ability to put himself in a temporary deathlike trance state. Puck is about half the size of the average man. His condition causes him varying amounts of constant pain. Also, his aging has been stopped or vastly slowed.





Now that we know who Puck is and what he can do, let's take a look at how BlackHand13 did at creating Puck's herostat. View my notes near some of them.

   stats {
   ailevel = 1 ;
   autospend = bruiser ; (NOTE: "bruiser_light" would be Puck's class, as while he has super strength, he's not on par with Colossus, the Thing, etc. He focuses more on body than strength.)
   body = 9 ; (NOTE: That is correct. Puck relies most on body rather than strength, having superhuman longevity and slowed aging. He should last long in fights.)
   characteranims = 243_puck ;
   charactername = Puck ;
   level = 1 ;
   menulocation = XXXX ;
   mind = 3 ; (NOTE: That is too low for any character. It means he'll barely get to use his powers. Four is the minimum. Give him a 6 in mind.)
   name = Puck ;
   playable = true ;
   powerstyle = ps_puck ;
   scale_factor = 0.75 ; (NOTE: That is correct. Puck is significantly smaller than most, but as he said, not smaller than Rocket Raccoon, so 0.75 is decent. We'll see how he looks later on.)
   scriptlevel = 3 ;
   skin = 24309 ;
   skin_01_name = ??? ;
   skin_02 = 10 ;
   skin_02_name = ??? ;
   skin_03 = 11 ;
   skin_03_name = ??? ;
   skin_04 = 12 ;
   skin_04_name = ??? ;
   sounddir = puck_m ;
   strength = 11 ; (NOTE: That is too high for Puck, for that makes him as strong as his own teammate, Sasquatch. Puck relies more on body than strength. Give him a 7 in strength.)
   team = hero ;
   textureicon = 5 ;
      talent {
      level = 1 ;
      name = puck_p1 ;
      }

      talent {
      level = 1 ;
      name = fightstyle_default ;
      }

      talent {
      level = 1 ;
      name = block ;
      }

      talent {
      level = 1 ;
      name = might ; (NOTE: That is correct. Puck does have super strength, so he should have the might ability.)
      }

      talent {
      level = 1 ;
      name = melee_moves ;
      }

   }

So, overall BlackHand13 did a great job in creating Puck's herostat, as I didn't have to change much (only autospend, mind, & strength).  9 body + 6 mind + 7 strength = 22, which is decent for Puck. Remember, the combined attributes should equal anywhere from 22-24, unless it's a boss-level villain. Attributes should be based on what a character can do. So, let's look at Puck's herostat now...


   stats {
   ailevel = 1 ;
   autospend = bruiser_light ;
   body = 9 ;
   characteranims = 243_puck ;
   charactername = Puck ;
   level = 1 ;
   menulocation = XXXX ;
   mind = 6 ;
   name = Puck ;
   playable = true ;
   powerstyle = ps_puck ;
   scale_factor = 0.75 ;
   scriptlevel = 3 ;
   skin = 24309 ;
   skin_01_name = ??? ;
   skin_02 = 10 ;
   skin_02_name = ??? ;
   skin_03 = 11 ;
   skin_03_name = ??? ;
   skin_04 = 12 ;
   skin_04_name = ??? ;
   sounddir = puck_m ;
   strength = 7 ;
   team = hero ;
   textureicon = 5 ;
      talent {
      level = 1 ;
      name = puck_p1 ;
      }

      talent {
      level = 1 ;
      name = fightstyle_default ;
      }

      talent {
      level = 1 ;
      name = block ;
      }

      talent {
      level = 1 ;
      name = might ;
      }

      talent {
      level = 1 ;
      name = melee_moves ;
      }

   }


OK, that looks good. (Well done, BlackHand13.) So you see? Creating a herostat is essentially taking a character's traits and turning them into stats for the game. I'll have the next lesson up soon.


Quote from: BaconWizard17 on September 11, 2019, 06:04AM
A few things to note:

Another way to describe the character name would be the “display name”, whereas the name could be called the “internal name”

Textureicon is a remnant from XML2 I believe. It referenced which portrait the character used in the danger room

Ah, so "textureicon" isn't really anything here. I figured it wasn't all that important. As for "display name" and "internal name," that's good. I will add those to the lesson.


Thanks a lot for these tutorials Outsider, they are very much useful. I already have a idea of a character which in my opinion will be both easy and enjoyable to make. So far:

Lesson 1:  No big deal, just take a look at the CCC and find a spot for your character.

Lesson 2: Got the hang of it, copy and pasting was a nice tip, I only forgot changing the skin number for the HUDS of the other pkgbs (I can make that later).

Lesson 3: Have yet to take a look.

Lesson 4: ????

September 13, 2019, 06:22PM #9 Last Edit: March 09, 2023, 01:13PM by Outsider
Lesson 4: Skins / Hex-Editing


Now that a herostat was developed, we can now add skins to the mod. For obvious reasons, every mod needs skins to help the mod come to life. If you are working on a character that doesn't have skins yet, you may have to ask around for someone to help you by creating skins.

If you want to learn how to model your own skins and/or mannequins, go to the following link to be transferred to BaconWizard17's Modelling Tutorial. I can confirm to you that it's easy to follow and it works. Oh, and don't worry - it has pictures. https://marvelmods.com/forum/index.php/topic,10797.0.html.

Skins come in two types:
PS2: Skins from the PS2 version of MUA that can be recreated as a different character. Less quality than 3-D models, but easier to create.
3-D: Models from another game that is converted into a high-quality skin. Costs time to create, but offers better results.

For this reason, it is best to have a good relationship with fellow members of the forum who can create skins for you. They are referred to as "skinners." Many a time, I had to ask for a skinner or two to create skins for several of my mods. Sometimes, they had no problem doing it and created them before you did the mod. Other times, they may say that they can't at this time, but then after you release the mod, they suddenly provide better skins than the ones you had. There's no guarantee that they will agree to helping you, but if you and them are cool (and they like how your mods play out), then they are more likely to help you out. If they choose not to, however, don't not get angry or pester them -- remember that they don't have to. Sometimes, they want to help you but they just don't have the time. They'll likely explain why they can't. And just like with modders like myself, if a skinner says that they are not accepting requests right now, just respect their wishes. They may decide to help you later on, of their own volition. (Some may write "No Requests" on their thread, letting you know up front.)

Some 3-D skinners include Aventureiromax, Andersonbrazil, BLaw, Julio Cabral, and UltraMegaMagnus.
Some PS2 skinners include MJFan, BaconWizard17, and myself.

If a skinner has made skins for your character, and you wish to use them for your mod, just be sure to credit them for their works. Some skinners require you to ask for their permission to use them -- if so, ask them. You wouldn't want people using your work and you didn't allow them to, right? Same thing for them. Most skinners, however, will just say to credit them. If a skinner is inactive, you won't be able to ask them. In that case, use them but credit them. (More on credits in a future lesson.)






Fortunately for this lesson, the character we are working on is Puck, and he has skins already made by a now-inactive skinner called "Dr. Bruce Banner." You can find them here: http://marvelmods.com/forum/index.php/topic,9530.0.html (Scroll down to find Puck.) So BlackHand13, go ahead and acquire them. Puck has five skins, so feel free to create a fifth set of package files for the 5th costume, and add the following to his herostat...

   skin_05 = 13 ;
   skin_05_name = ??? ;

This is only if you want Puck to use all five skins. If not, you'll have to leave one out.





Once you have acquired the skins, you'll have to rename them into the skin numbers that was set out for your character earlier. In Puck's case, those skin numbers start at 24309. He has five skins -- rename the classic one "24309" -- that will be his primary skin. The other skins can be renamed 24310, 24311, 24312, and if the fifth skin is being used, 24313. And now that you know what they are (what the skinner called them), you can name them on the herostat. In Puck's case, it'll look like this...

   stats {
   ailevel = 1 ;
   autospend = bruiser_light ;
   body = 9 ;
   characteranims = 243_puck ;
   charactername = Puck ;
   level = 1 ;
   menulocation = XXXX ;
   mind = 6 ;
   name = Puck ;
   playable = true ;
   powerstyle = ps_puck ;
   scale_factor = 0.75 ;
   scriptlevel = 3 ;
   skin = 24309 ;
   skin_01_name = Classic ;
   skin_02 = 10 ;
   skin_02_name = Ultimate ;
   skin_03 = 11 ;
   skin_03_name = Modern ;
   skin_04 = 12 ;
   skin_04_name = X-Force ;
   skin_05 = 13 ;
   skin_05_name = Streetwear ;

   sounddir = puck_m ;
   strength = 7 ;
   team = hero ;
   textureicon = 5 ;
      talent {
      level = 1 ;
      name = puck_p1 ;
      }

      talent {
      level = 1 ;
      name = fightstyle_default ;
      }

      talent {
      level = 1 ;
      name = block ;
      }

      talent {
      level = 1 ;
      name = might ;
      }

      talent {
      level = 1 ;
      name = melee_moves ;
      }

   }

That's the order I made for the skins, but the modder can choose whichever order they want. (The part in RED is to be added if a fifth skin is being used, and if so, package files for that fifth skin must be made.)

After renaming the skins, create an "actors" folder inside your mod project folder, but don't place the skins inside there yet. Likewise, create a notepad file there containing the character's herostat, and rename that file "Herostat" so people know what it is. Also, if you haven't already, create new folders "packages," "generated," and "characters." Place the package files for your character in the character folder. Then place the character folder inside the generated folder, and finally, put the generated folder inside the packages folder. What you are doing is creating this mod for people to download, so don't put anything in the game's folders yet. That's why you have a separate mod project folder for you to work.






HEX-EDITING
Want to know why I said not to place the skins inside the actors folder yet? Because now comes the part that requires some technical work. It's called hex-editing. This is an important process, but I'll tell you why in a bit. To begin, you will need the XVI32 program. Open it up, press "File" then "Open." Look for skin #24309, and hit Enter, or press "Open."

Now, on this program, you will notice two sides -- a left side full of only numbers & letters, called the Hex side; and a right side full of all kinds of characters, called the Text side. Don't worry... this isn't complicated work. It's actually very simple. Click on any square on the Text side to make sure the Text side is highlighted. Next, press Ctrl + F. It'll open up the Find option. Make sure the text string is checked. Then, write in the bar igactor01appearance. Make sure "case sensitive" is unchecked. Then press OK.
NOTE:
"igactor01appearance" is what you'll mainly see. If that's not found, then it may have been hex-edited already to a different number. In which case, you'll have to scroll down the skin a long way, and look for a lone three-digit or four-digit number that stands out.


If the skins were not hex-edited already, it will appear on the Text side with the first "i" highlighted. Now type in the skin number that you renamed the skin. In this case, that's 24309. When you're done, it will now read 24309or01appearance with the "o" highlighted. That's normal. Now notice on the Hex side that something was highlighted just as the "o" was highlighted on the Text side. See, when you change one side, you'll change the other. Now, click on the square that was highlighted on the Hex side, and keep pressing zero until the "or01appearance" part on the Text side is gone, as you're erasing it. It should now read 24309 on the Text side. Now press Ctrl + S to save, or click File then Save.

Congrats! You've just hex-edited a skin. Now you have to do the same to the character's other skins. If at any point you think you made a mistake, just click File, then Reload (or Ctrl + L). It will say that the skin has been modified. Click No -- that will undo any mistakes. Do not save if you think a mistake was made -- as it will make the skin unplayable. Once you are done hex-editing the character's skins, NOW you can place them in your project's actors folder.


IMPORTANT NOTE:
Why was the hex-editing part important? Because at some point in the game, you will play the Murderworld mission. There will be Arcade Androids that take the appearance of your heroes. If your skin is not hex-edited, the Arcade Android will just have a plain white skin, ruining the game. It is also helpful for shape-shifter mods like :mystique: Mystique and Mortal Kombat's Shang Tsung, as it tells the game the skin they are supposed to morph into.

DID YOU KNOW?:
I had created a tool just for hex-editing that people can use to check all skins of all mods to see if they are hex-edited. It's called the Hex-Edit Test and you can find it here -- http://marvelmods.com/forum/index.php/topic,8753.msg191895.html#msg191895. This way, any skins you find that are not hex-edited, you can hex-edit them yourself.






Lesson Takeaway:
-Acquire any skins for your character (if any) and rename to the skin numbers you had assigned.
-Be sure to credit the skinners for their work. Ask for their permission if they require it.
-If skinners do not choose to help you, don't burn your bridges. They aren't obligated to, and there may be a reason why they can't.
-Hex-Edit all skins to ensure that the Arcade Androids take their appearance at Murderworld.
-Press the Reload button if you think you made a mistake. Better safe than sorry.


Thanks, Outsider for these tutorials. I've always wanted to make a mod but just find myself kind of overwhelmed. I have a couple of characters in mind that I want to see that with your guide I might be able to make. I have some free time Sunday I'll see what I can do.

September 16, 2019, 08:55PM #11 Last Edit: August 29, 2022, 09:07AM by Outsider
Lesson 5: Animations


If you've been following and practicing the lessons thus far, then your mod is starting to come together. But, now your mod needs to move and be able to attack. It's now time to choose your animations. Chances are, you've played as a character and thought to yourself, "oh, that's a cool power!" Well, the main thing it takes to do that is a decent animation. Want a visual aid? Take a look inside your game's actors folder. Animation sets are .igb files that contain certain movements for various characters. There are two main kinds of animation sets, which I'll explain in a little bit. For this lesson, let's use :storm: Storm as an example. Look in your game's actors folder and find "04_storm.igb..."

Did you find that file? OK, that is Storm's menu animation set. Those are the movements that you see whenever you choose her at the character select screen/team stage. Every mod has one. Now, copy and paste that very file to your mod project folder. Open the XVI32 program, and open that very file. Why? Because we are going to look inside that file. This is not necessary for modding, but just to learn.





OK, so you'll see a whole lot of characters on both sides. Don't worry -- I'll guide you through the maze. Don't change anything -- you're only viewing. So, there are two sides -- on the left is the hex side, which consists of only numbers. And on the right is the text side. Click on any square on the right side (the Text side) Hit Ctrl + F to open the Find feature, type "idle" and press Enter. You should see it, along with some more lines. See, menu animation files usually have only a few animations:

idle = The animation used when your character does nothing while in-game. His/her fighting stance.
walk = The animation used when your character is walking in-game.
run = The animation used when your character is running in-game.
menu_action = The animation used immediately when your character is picked from the character select screen (CSS), or immediately when you change costumes.
menu_idle = The animation used a while after your character appears at the character select screen. This animation stays until you leave the CSS or change costumes.
menu_goodbye = The animation used when your character leaves the character select screen.

jump_start = The animation used when your character is jumping.
jump_land = The animation used when your character is landing from a jump.






Now, look again at your game's actors folder. Notice that Storm has another file there? That is her combat animation set. It's called "04_storm_4_combat.igb" and as you can guess from its name, it's where Storm's fighting animations are. Copy and paste that file into your mod project folder, then open up that file via XVI32 so you see inside there. Again, you're just viewing. (If you accidently changed something, click "File," then "Reload." Say No when it asks if you want to save the changed file.)

So, you'll see the same kind of maze. Hit Ctrl + F to Find, type "power_12" and press Enter. You should see it, along with many other lines. Every mod has these, but some will differ from others. Here are the kind of animations you will likely see in many of these:

power_1 = The animation used when your character is performing a power attack. It can range from power_1 all the way to power_20.
power_1_loop = The animation used when your character is charging up a power attack or using a rapid power attack, while you are holding a power button down or repeatedly hitting it.
power_1_end = The animation used when your character is performing a power attack after a holding animation, releasing that power after a change, or ending a power after it's been used.
attack_light1 = The animation used when your character is performing the 1st basic light attack, after you've the pressed light attack button once.
attack_light2 = The animation used when your character is performing the 2nd basic light attack, after you've the pressed light attack button twice.
attack_light3 = The animation used when your character is performing the 3rd basic light attack, after you've the pressed light attack button 3X. This is called a blitz.
attack_popup1 = The animation used when your character is performing a basic attack that pops the enemy upward.
attack_trip2 = The animation used when your character is performing a basic sweep attack that trips the enemy.
attack_stun1 = The animation used when your character is performing the 1st stun attack, after you've the pressed light attack button, then the heavy attack button.
attack_stun2 = The animation used when your character is performing the 2nd stun attack -- the one that actually stuns the enemy.
attack_heavy1 = The animation used when your character is immediately performing the heavy knockback attack that you can hold down.
attack_knockback1 = The animation used when your character is holding (charging) the heavy knockback attack.
attack_knockback2 = The animation used when your character has released the heavy knockback attack.

jumpdouble_start = The animation used when your character is double jumping, like a flip.
jump_smash_hold = The animation used when your character is in the air, holding for a jump smash attack.
blocking = The animation used when your character is blocking.
pain_blocking = The animation used the moment your character blocks an enemy attack.
fly_idle = The animation used when your character is flying but not moving anywhere. (Only for flying characters.)
fly_slow = The animation used when your character is flying slowly in a certain direction. (Only for flying characters.)
fly_fast = The animation used when your character is flying normally in a certain direction. (Only for flying characters.)
ground_attack1 = The animation used when your character is attacking an enemy while he's on the ground.
ground_attack2 = The animation used when your character is attacking an enemy while he's on the ground after the first ground attack.



So why am I telling you about these? Well, because it's important to know how these animations are named. You'll need to have an understanding of this for when you begin animation mixing. More on that later.







PREP ANIMATIONS

Now that you get how animation sets work, it's time to choose the ones you want. If you've played MUA before, then you probably know what animations you want for a certain character going in. Keep in mind of what the character can do, and decide from there.

If your character uses guns, you'll probably go with something from :blade: Blade and :nfury: Nick Fury's combat animation sets. Does your character use swords? If so, you can use animations from (again) Blade, and :deadpool: Deadpool's combat sets. Though :thor: Thor wields a hammer, his would work too for swords. If your character is an archer, then obviously something from :hawkeye: Hawkeye's set is best. Not wielding a weapon, but can fire various powers? Then the possibilities are endless. Is your character female and flirtacious or seductive? You can use something from :emmafrost: Emma Frost or :spiderwoman: Spider-Woman's animation sets. Just don't pick a female animation set if your character is male -- that's just creepy. Choose your animations wisely.

For example, let's say you want :hawkeye: Hawkeye's Multi-Shot power animation (power_1, power_1_loop, & power_1_end) because your character is an archer, but you also want to use :blade: Blade's Slayer Slash, (which is also power_1, power_1_loop, & power_1_end) because your character is also a swordsman, just like :tmaster: Taskmaster. I type them in Notepad in numerical order the animation files I want, like this:



01_blade_4_combat: power_1, power_1_end, power_1_loop
171_hawkeye_4_combat: power_1, power_1_end, power_1_loop



Remember that two or more animations cannot be named the same thing. If you want two animations that are named the same such as these, then make a note that you have to rename one or the other into something else that the game recognizes. I type that note like this...

01_blade_4_combat: power_1, power_1_end, power_1_loop
171_hawkeye_4_combat: power_1*, power_1_end*, power_1_loop*
(*must rename)



You can do this for certain melee, power or defensive animations. Once you've listed all of the animation sets that contain the animations you want, you can then move on to the animation mixing process.








ANIMATION MIXING

In the past, if you wanted more animations than two sets can offer, you had to create a fightstyle animation set. However, over time we learned that multiple custom fightstyles can cause problems with 4-man teams and some mods not to function correctly. Fortunately, a member named defogexa found a newer way to create a custom animation set that is no longer limited to just two or three sets. It's called Animation Mixing, and once you learn how to do it, you'll find that it's rather easy and is quickly becoming the preferred method for modding. As a result, I've erased the old method from this lesson.

To do this, you will first need Alchemy 5, which is a tool that you can also use to view mannequins, preview animations, and more. To get it, click HERE. Follow the instructions inside that package to set it up. I won't go over that here.

Then, you will need a useful Animation Mixing rar package, which contains what you need to mix them. To get it, click HERE.



Now, open that AnimationMixing rar. A folder will appear called "AnimationMixing." Place that Animation Mixing folder somewhere. Don't place it in your game, in Program Files or anywhere sensitive. Now click inside. You will see five files. The very first you should do is read the "ReadMe" file. It's there for a reason. Now, here's what I do...

STEP 1: Create a new folder called "Extract" and place only the _animations.txt and the _extract.bat files inside of it.

STEP 2: Create a new folder called "Mix" and place only the _combine.bat and the _fightstyle_default files inside of it.

STEP 3: Right-click the Mix folder, and click create shortcut. A shortcut to it will appear on your desktop. Move that shortcut inside the Extract folder. Now you're ready to mix. The next steps will be for your combat animation set.

STEP 4: Open the Extract folder. Now go to your game's actors folder and copy (copy, not move) each animation set that you've listed before. I usually do it one at a time, but you can do multiple if you wish. Paste it to the Extract folder. Now click the _extract file. A black screen will appear saying "Extracting animation list..." as it moves to extract the animations from that igb. Leave it alone and let it do its thing, as it takes two or three minutes if you do it one at a time like I do it. (Obviously it will take longer if you did multiple files.) When it's done, it will disappear and a folder named after that animation file will appear. You'll also find a .bak file and and txt file called "extract-(animation file name). You can delete those.

STEP 5: Open the new folder that just appeared. Those are the individual animations from that igb. Take only the ones you want from there and move them to the Extract folder, and delete the rest. Then go back to the Extract folder and move the animations inside the "Mix" shortcut. Do this for any animation that you want.

Look back at the notes where you have to rename some of them. If some are clashing with others, do not overwrite. That's your warning that you'll have to rename them. And you can't rename them just anything. It has to be something that the game will recognize, or they will not work.

Once you've acquired all of the animations that you want, click on the Mix shortcut, taking you to the Mix folder.

STEP 6: Inside the Mix folder, review the animations you've acquired and confirm that these are the ones you want. Now click the _combine file. A black screen will appear and will ask you to name the new animation file. Name it (mod number)_(character name)_4_combat and do not include the .igb part. In the case of Puck, that would be 243_puck_4_combat. (You must rename them the exact same files as you recorded back in the package files. Yes, it all goes back to that.) Then press Enter. Unlike the extract function, the mixing is very fast and is done within a couple of seconds. Once done, your new animation igb file will appear. A "combine" text will also appear.

Congratulations! You've just successfully mixed your first combat animation igb file!

STEP 7: Now delete the individual animations and that combine text, as you no longer need them. Move that new animation igb file into the actors folder of your mod.



You can also do this with your menu animation set, that you normally see within the character select/team stage. The process is the same, except when mixing, just name it (mod number)_(character name). You can use this to change idle stances or create new animations not normally seen at the team stage. And again, whatever you name the animation files must match what you put in their package files. Otherwise, they won't work.


If you'd like a more visual tutorial on this method, refer to the MUA animation tutorial found here: https://marvelmods.com/forum/index.php/topic,11012.msg200550.html#msg200550. You can also preview individual animations by checking the tutorial above that.

Once you have a menu animation set and a custom animation set (mixed or not), you now have the animation files you need for your character mod.






Lesson Takeaway:
-Mods have a menu animation set and a combat animation set. Choose wisely the animations you want.
-If you accidently touched the animations when viewing them via XVI32, press Reload to undo the mistake. Better safe than sorry.
-Gather up all animation sets that contain the animations you want.
-Before mixing animations, be sure to rename the clashing ones into something else that the game recognizes.
-The new animation files must be named to match what you wrote in the package files, which is ##_character.igb, and ##_character_4_combat.igb.



September 18, 2019, 11:32PM #12 Last Edit: May 02, 2021, 02:00AM by Outsider
Lesson 6: Basic Mod Testing


You are almost done with the basics and are nearly ready to test out your mod in the game. This is a short but critical lesson. Here's what to do next: Create three new folders in your mod project's folder. Rename one of them "data," another as "talents" and the other as "powerstyles." I will tell you how to set that bad boy up.







SETTING UP TALENTS & POWERSTYLES

Now that your animations are done from the previous lesson, this next part is critical. Open your game's data/talents folder. See those? These are the talents files for all characters. Highlight any one of them as long as it ends with ".engb" Then copy it and paste it to your mod project folder. Rename it "(character).engb." It is best to copy the talents file and powerstyle file of a character who's animations you took. For example, in the case of Puck, we used :beast: Beast's animations, so it would be wise to use Beast's talents file, which is beast.engb. So rename that one as "puck.engb."

Next, go to your game's data/powerstyles folder. These are the powerstyle files for all characters and NPCs (who don't use talents files). Highlight and copy any of them as long as it ends with ".engb" -- preferably that of the character who's animations you used. Paste it to your mod project folder, and rename it "ps_(character).engb." In the case of Puck, copy "ps_beast.engb," paste it to your mod project folder, and rename it "ps_puck.engb."

Now, decompile (character).engb. You will see a lot of text that we will not go through in this lesson, as I don't want to confuse you all. We'll deal with all of that in a future lesson. For right now, press Ctrl + H to Replace. Type the character name of the file you copied in Find What, and your character's name in Replace With. (in Puck's case, you'd write Puck in Replace With), and press Replace All. Don't worry if some things don't make sense, as they'll eventually be corrected.

Now, save and compile -- make sure that the end extension is .engb, not .xmlb. Copy this new file, go into the talents folder you made earlier, and paste it there. (Keep the .xml and .bak files that appeared -- you'll need it later.) Now go back and decompile "ps_(character).engb." Again, there is a lot of coding there -- don't worry about that for now. Just press Ctrl + H to Replace. Type the character name of the file you copied in Find What, and your character's name in Replace With, just as you did with the talents file. Then save and compile -- again, make sure that the end extension is .engb, not .xmlb. Now, copy the file you just saved, go into the powerstyles folder you made earlier, and paste it there. You're almost there now. Move both your talents folder and powerstyles folder into your data folder.






Hopefully, that wasn't too hard for your all. OK, so what you did was set up all of the basics for your new mod. So let's recap -- here's what you should have in your mod project's folder so far:

actors folder
data folder
packages folder

Herostat file
(character).engb
(character).xml
(character).engb.bak
ps_(character).engb
ps_(character).xml
ps_(character).engb.bak


OK, the parts I've put in bold? You can now copy (copy, not move) those folders into your game's folder. You just installed the basic files for your new mod into your game for testing. Now you just have to do one more thing -- decompile herostat.engb, take one of the characters out and replace him/her with the herostat for your new mod. Make sure the menulocation number you're switching herostat entries with is the same. Good, now save and compile, then copy the new herostat in the game's data folder. Your character is now officially ready for testing!!!

Click twice on Game.exe to turn on MUA. Once you get to a SHIELD access point, your new character (Puck or whoever you're working on) should be there, but either without a mannequin or with the mannequin of whoever is sharing the mod number you chose in the beginning. Clear the default team of :capamer: :spiderman: :thor: :wolverine: and select your character. You can now test out your character's basic animations such as idle, running, jumping, blocking, and all basic melee attacks. Don't worry about the powers listed there -- some may work and some may not, we'll deal with that in future lessons. For now, just make sure your character's basic animations are correct and to your liking. If not, you can always replace them.


IMPORTANT NOTE:
It is best to use the 36 Roster Hack as it contains a SHIELD access point at the very start location of the game, which is perfect for testing out your mods.






Lesson Takeaway:
-Create the necessary folders to set up your mod for testing.
-Rename the character listed to your character's name, provided that it matches what you wrote back in the package files.
-Once again, copying and pasting are once again your friends here.
-Keep the .xml and .bak files that appear with the talents and powerstyle files -- you'll need them later.
-Make sure that you compile the files with the .engb extension.


Ok, so, as I said in my porgress post, I tested Puck in game.

The combat animations seem to work correctly, but the idle animation in the character select screen looks like he is in slow-motion.. not sure why.

Here's how he looks like.
http://www.mediafire.com/view/2w9j150g2ai0igb/Marvel0010.png/file

Did I make him too small ? Because he is very very tiny  :avalanche:

Quote from: BlackHand13 on September 20, 2019, 06:21AM
Ok, so, as I said in my porgress post, I tested Puck in game.

The combat animations seem to work correctly, but the idle animation in the character select screen looks like he is in slow-motion.. not sure why.

Here's how he looks like.
http://www.mediafire.com/view/2w9j150g2ai0igb/Marvel0010.png/file

Did I make him too small ? Because he is very very tiny  :avalanche:

Hmm... that might be a bit too small. Jump the scale_factor in his herostat to 0.8.
His idle animation in the character select screen (menu_idle) may be a bit slow because he's using the Thing's menu animation and his might be slow by default. Remember that you can always try a different character's menu animation if you don't like it by copying another's and renaming it "243_puck.igb."

That is his idle stance in-game? Use XVI32 to go into "fightstyle_puck.igb" at your actors folder. Remember when you "X" out the idle animation there? Change it
back and save. I want to see if his in-game idle animation will change for the better. But make a copy of that file, just in case it doesn't look better.

However, good to hear that his combat animations are working fine.