[MUA1] The Outsider's Guide To Modding

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

Previous topic - Next topic
March 04, 2020, 03:38AM #30 Last Edit: June 20, 2020, 08:58PM by Outsider
Lesson 16: Throw Powers / Grab Smash

So, by now you've developed a good set of attack powers, boosts, and your Xtreme. But, there is another element that goes into a powerstyle file that can add something to your character. It's a throw move called the grab smash.

Grab smashes are throw-type moves that are done after a character grabs an enemy, and presses heavy punch. The grab smash depends on the character, as all vanilla characters have a grab smash that uses something interact victim files. More on that in a bit. First, let me show you the average grab smash that all characters would have if you don't give your character a modified one...


   FightMove {
   animenum = ea_grab_smash ;
   endchaintime = 1 ;
   handler = ch_grab_hold ;
   lockangles = true ;
   name = grab_smash ;
   noautoaim = true ;
   priority = uninterruptable ;
   startchaintime = 0.9 ;
      trigger {
      attackerface = true ;
      doslidemove = true ;
      motion_track_offset = true ;
      name = victim ;
      nodename = grabsmashvictim ;
      targetdistance = 20 ;
      time = 0 ;
      victimface = true ;
      }

      trigger {
      name = victim_release ;
      time = 0.5 ;
      }

      trigger {
      damage = 3 4 ;
      knockback = 120 ;
      maxrange = 64 ;
      name = radial ;
      time = 0.6 ;
      }

      chain {
      action = idle ;
      result = idle ;
      }

   }


What does this do? Your character grabs an enemy with one hand, and punches the enemy with the other. It's very weak and uninspiring. This is why modders often change it to something more character-specific.

In addition, the damage for a grab smash is only 3-4, and its damage doesn't level up as your character does, making the grab smash rather useless in later stages or in hard mode.

Let's look at the coding for :captainamerica2: Captain America's grab smash...


   FightMove {
   animenum = ea_power11 ;
   fallback = grab_smash ;
   handler = ch_grab_hold_base ;
   lockangles = true ;
   lockspeed = true ;
   name = grab_smash ;
   noautoaim = true ;
   priority = 6 ;
   switch_dir_on_end = true ;
      trigger {
      attackerface = false ;
      doslidemove = true ;
      interaction = data/fightstyles/interact_captamerica_victim ;
      name = victim ;
      nodename = grabsmashvictim ;
      offset = 22 0 0 ;
      time = 0 ;
      victimface = true ;
      }

      trigger {
      name = stop ;
      time = 0 ;
      }

      trigger {
      name = stop ;
      time = 0.5 ;
      }

      trigger {
      damage = %captam_gs_dmg ;
      damagescale = normal ;
      damagetype = physical ;
      index = 1 ;
      knockback = 120 ;
      maxrange = 64 ;
      name = radial ;
      time = 0.7 ;
         damagemod {
         name = dmgmod_auto_knockback ;
         }

         damagemod {
         name = dmgmod_ground ;
         }

      }

      trigger {
      critical = true ;
      name = victim_release ;
      ownertime = 0.5 ;
      time = 0.7 ;
      }

      chain {
      action = idle ;
      result = idle ;
      }

   }


What does this do? Cap will throw an enemy down to the ground, then bash him with his shield. Now, let's look at the coding in detail, and go over the terms that you haven't seen before.

   FightMove {
   animenum = ea_power11 ;
   fallback = grab_smash ;
   handler = ch_grab_hold_base ;
   lockangles = true ;
   lockspeed = true ;
   name = grab_smash ;
   noautoaim = true ;
   priority = 6 ;
   switch_dir_on_end = true ;

fallback is referring to what default move is this move replacing. In this case, it is replacing the default grab smash. But, you really don't need to put this there.
switch_dir_on_end means that the character will change the direction they are facing when the grab smash is done.


      trigger {
      attackerface = false ;
      doslidemove = true ;
      interaction = data/fightstyles/interact_captamerica_victim ;
      name = victim ;
      nodename = grabsmashvictim ;
      offset = 22 0 0 ;
      time = 0 ;
      victimface = true ;
      }

This is the coding that sets up the grab smash. See, grab smashes need the enemy caught to do an animation as well. That's why you need an interact victim file and an interact animation file, the latter of which contains animations for the enemy caught. It does NOT have the animations of the character -- only the victim.

Go to your game's actors folder, and press the letter "i" -- See all of those? Those are your interact animation files, which creates not only grab smashes, but throw powers as well. More on the latter later on.

Now go into your game's data/fightstyles folder, and press the letter "i" -- Those are your interact victim files that correspond with the interact animation files you saw in the actors folder. However, these files are very delicate... more on this later. For now, let's continue with the coding.


      trigger {
      name = stop ;
      time = 0 ;
      }

      trigger {
      name = stop ;
      time = 0.5 ;
      }

These are stop codes. I am not exactly sure what they do though, so it may not be needed.

      trigger {
      damage = %captam_gs_dmg ;
      damagescale = normal ;
      damagetype = physical ;
      index = 1 ;
      knockback = 120 ;
      maxrange = 64 ;
      name = radial ;
      time = 0.7 ;
         damagemod {
         name = dmgmod_auto_knockback ;
         }

         damagemod {
         name = dmgmod_ground ;
         }

      }

This is the damage coding for the grab smash. As you can see, it's set up just like an attack power, except it takes no energy cost. Now, take notice that the damage says "%captam_gs_dmg". I did that on purpose. Remember when I said that grab smashes take very little damage and are useless later in the game? Well, I decided to invent upgradeable grab smashes. I placed extra values usually on the character's first power in the talents file, so that as you increase the first power damage, you also increase the grab smash damage. This makes them useful again. You can do this if you want -- just credit me if you do.

      trigger {
      critical = true ;
      name = victim_release ;
      ownertime = 0.5 ;
      time = 0.7 ;
      }

And this is the victim_release coding entry, which all throws such as grab smashes must have, as eventually the enemy must be freed from your character's grasp. This entry is critical.

      chain {
      action = idle ;
      result = idle ;
      }

   }

The easiest way to create a grab smash is to recall a cool grab smash you saw, and just mimic/copy the coding entries for it. The reason I suggest this is because sometimes when creating grab smashes by changing the interact victim files, we may screw up the animation. The enemy may not interact at all, or or it happens ill-proportionately. They are very sensitive, so I usually don't change them. For example, I tend to use :deadpool: Deadpool's grab smash for characters with swords, :spiderwoman: Spider-Woman's grab smash for powerful female characters, etc.





THROW POWERS

Certain powers are special in that they use interact victim files. Let's look at one of them --- take the powerstyle file of :nfury: Nick Fury, open it up, hit Ctrl + F to Find, type = "name = power1" and hit Enter. You'll see the coding for his first power, Furious, which is a throw power. The coding is below.


   FightMove {
   aitype = melee ;
   animenum = ea_power1 ;
   combotextfinisher = Wrath ;
   combotextstarter = Furious ;
   handler = ch_grab_hold_base ;
   icon = 0 ;
   is_power = true ;
   name = power1 ;
   priority = 5 ;
   turnrate = 0.5 ;
      require {
      cat = skill ;
      item = nickf_p1 ;
      level = 1 ;
      }

      event {
      damage = 1 ;
      damagescale = none ;
      inherit = punch ;
      name = p1_punch ;
      }

      trigger {
      name = powerusage ;
      powerusage = %nickf_p1_pwr ;
      time = 0 ;
      }

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

      trigger {
      maxrange = 72 ;
      name = victim_set ;
      searchangle = 90 ;
      selfeventtag = 1 ;
      time = 0 ;
      }

      trigger {
      attackerface = true ;
      doslidemove = true ;
      interaction = data/fightstyles/interact_nickfury_victim ;
      name = victim ;
      nodename = power1_victim ;
      offset = 50 0 0 ;
      tag = 1 ;
      time = -1 ;
      victimface = true ;
      }

      trigger {
      bolt = Bip01 L Hand ;
      effect = char/fury/p1_power ;
      fxlevel = 1 ;
      name = effect ;
      time = 0.19 ;
      }

      trigger {
      fail_node = null ;
      failtag = 3 ;
      name = verify_victim ;
      time = 0.22 ;
      }

      trigger {
      damage = %nickf_p1_dmg ;
      name = p1_punch ;
      tag = 3 ;
      time = -1 ;
      }

      trigger {
      fail_node = idle ;
      name = verify_victim ;
      time = 0.22 ;
      }

      trigger {
      name = sound ;
      sound = char/fury_m/p1_power ;
      time = 0.22 ;
      }

      trigger {
      bolt = Bip01 L Hand ;
      effect = char/fury/p1_power ;
      fxlevel = 2 ;
      name = effect ;
      time = 0.62 ;
      }

      trigger {
      bolt = Bip01 R Hand ;
      effect = char/fury/p1_power ;
      fxlevel = 2 ;
      name = effect ;
      time = 0.62 ;
      }

      trigger {
      damage = %nickf_p1_dmg ;
      damagescale = none ;
      index = 2 ;
      maxrange = 64 ;
      name = radial ;
      offset = 60 ;
      time = 0.68 ;
         damagemod {
         name = dmgmod_auto_knockback ;
         }

      }

      trigger {
      critical = true ;
      name = victim_release ;
      time = 0.68 ;
      }

      chain {
      action = Idle ;
      result = idle ;
      }

   }


Let's look at the coding in detail.

   FightMove {
   aitype = melee ;
   animenum = ea_power1 ;
   combotextfinisher = Wrath ;
   combotextstarter = Furious ;
   handler = ch_grab_hold_base ;
   icon = 0 ;
   is_power = true ;
   name = power1 ;
   priority = 5 ;
   turnrate = 0.5 ;

As you can see, the handler = ch_grab_hold_base ; is there. This is usually essential for all throw powers, so be sure to put that.

      require {
      cat = skill ;
      item = nickf_p1 ;
      level = 1 ;
      }

      event {
      damage = 1 ;
      damagescale = none ;
      inherit = punch ;
      name = p1_punch ;
      }

An event leading to the damage of this power.

      trigger {
      name = powerusage ;
      powerusage = %nickf_p1_pwr ;
      time = 0 ;
      }

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

      trigger {
      maxrange = 72 ;
      name = victim_set ;
      searchangle = 90 ;
      selfeventtag = 1 ;
      time = 0 ;
      }

This is the victim_set coding entry that drives the character to find the nearest enemy to do the move on. 72 is usually the maxrange for it, and this leads into the next coding entry.

      trigger {
      attackerface = true ;
      doslidemove = true ;
      interaction = data/fightstyles/interact_nickfury_victim ;
      name = victim ;
      nodename = power1_victim ;
      offset = 50 0 0 ;
      tag = 1 ;
      time = -1 ;
      victimface = true ;
      }

This is the coding that connects to the interact victim file for Nick Fury.[/color] It is in that file that you will find "power1_victim", which is the nodename seen here. That's why it's important to have these coding entries, or it won't work.

      trigger {
      bolt = Bip01 L Hand ;
      effect = char/fury/p1_power ;
      fxlevel = 1 ;
      name = effect ;
      time = 0.19 ;
      }

      trigger {
      fail_node = null ;
      failtag = 3 ;
      name = verify_victim ;
      time = 0.22 ;
      }

This is the verify_victim coding entry. In case a throw power fails (such as when trying to use it against a boss villain), it will still take damage without throwing them.

      trigger {
      damage = %nickf_p1_dmg ;
      name = p1_punch ;
      tag = 3 ;
      time = -1 ;
      }

The damage coding for the first part, which is Nick cracking the enemy's arm.

      trigger {
      fail_node = idle ;
      name = verify_victim ;
      time = 0.22 ;
      }

      trigger {
      name = sound ;
      sound = char/fury_m/p1_power ;
      time = 0.22 ;
      }

      trigger {
      bolt = Bip01 L Hand ;
      effect = char/fury/p1_power ;
      fxlevel = 2 ;
      name = effect ;
      time = 0.62 ;
      }

      trigger {
      bolt = Bip01 R Hand ;
      effect = char/fury/p1_power ;
      fxlevel = 2 ;
      name = effect ;
      time = 0.62 ;
      }

      trigger {
      damage = %nickf_p1_dmg ;
      damagescale = none ;
      index = 2 ;
      maxrange = 64 ;
      name = radial ;
      offset = 60 ;
      time = 0.68 ;
         damagemod {
         name = dmgmod_auto_knockback ;
         }

      }

This is the second damage coding, which is when Fury slams the enemy to the ground.

      trigger {
      critical = true ;
      name = victim_release ;
      time = 0.68 ;
      }

The victim_release coding that is critical, as mentioned before.

      chain {
      action = Idle ;
      result = idle ;
      }

   }




Throw powers and grab smashes use highly sensitive interact victim files, so again it is best to just copy the coding of whatever throw power or grab smash that you like, then modify the smaller details. It is possible to turn a special grab smash into a throw power, or vice versa. There are only two differences between them:

(1) Throw powers use a victim_set coding entry, leading into the interact victim coding entry. Grab smashes ONLY use the interact victim coding entry.
(2) Throw powers have a powerusage entry, grab smashes do not.

So, using Captain America's grab smash as-is...

      trigger {
      attackerface = false ;
      doslidemove = true ;
      interaction = data/fightstyles/interact_captamerica_victim ;
      name = victim ;
      nodename = grabsmashvictim ;
      offset = 22 0 0 ;
      time = 0 ;
      victimface = true ;
      }

And here's Captain America's grab smash used as a throw power instead...

      trigger {
      maxrange = 72 ;
      name = victim_set ;
      searchangle = 90 ;
      selfeventtag = 3 ;
      time = 0 ;
      }

      trigger {
      attackerface = false ;
      doslidemove = true ;
      interaction = data/fightstyles/interact_captamerica_victim ;
      name = victim ;
      nodename = grabsmashvictim ;
      offset = 22 0 0 ;
      tag = 3 ;
      time = -1 ;
      victimface = true ;
      }

See the difference? Remember that if changing a grab smash into a throw power, add a powerusage value, a damage value, and a requirement value to unlock it.






Lesson Takeaway:
-The interact victim file is essential for throw powers and grab smashes to work.
-Understand the difference between grab smashes and throw powers, so you can choose what to do with a move.
-Following my method, you can make a grab smash upgradeable.
-To avoid confusion with the highly sensitive interact victim files, just copy the coding of what you want, then adjust.
-Choose the correct animation and interact victim file for the move to work successfully.


March 08, 2020, 04:41PM #31 Last Edit: March 08, 2020, 04:46PM by deadjoke
I'm having some issues that I can't seem to fix. I can figure things out for myself and learn, IF I know what I'm doing incorrectly and HOW to fix it.

I've done the pkgb files, herostat, and chosen the animation set for the mod I'm working on, but replacing powers is something I can't seem to get right.

For example, I'm using your akuma mod to practice replacing power's on since I can simply reinstall the mod when things go wrong. Here is what I have tried doing.

Replacing the hadouken with Batman's free flow combo in the ps file. Didn't work, and lost the ability to do a hadouken and a shoryuken.

Thought maybe doing the same in the talent file might resolve this, nope. Now he has no powers at all. Where exactly am I going wrong?

Quote from: deadjoke on March 08, 2020, 04:41PM
... I'm using your akuma mod to practice replacing power's on...

To answer your question, using Akuma is where you went wrong. His mod uses special affecters, so he is not recommended for beginners to work on. It's alright -- you didn't know. I would suggest using vanilla mods like Captain America, Nick Fury, or Elektra. Don't use Wolverine though, as he too uses special affecters.


March 11, 2020, 02:59AM #33 Last Edit: February 19, 2024, 08:01AM by Outsider
Lesson 17: Effects

Throughout these lessons so far, you've seen small entries that I mentioned I would get to in future lessons. Well, here I will cover one of those entries -- Effects. To make a mod feel complete, you have to make a mod visually appealing. This is especially true for their Xtreme powers.

The easiest way to choose effects for a certain power is to just copy the whole coding for a particular power or boost, and then adjust the effects. It is important to choose the right effects for a power or boost, or it won't look right. To that end, there are different types of effects, covering all powers.

Let's look at boost effects. These are the auras that appear on your character during the duration of a boost. For this example, we will look at :deadpool: Deadpool's 2nd boost called "Deadpool Corps." I will show you what that coding looks like. Pay attention to the parts in bold BLUE.


   FightMove {
   aicanuse = false ;
   aitype = buff ;
   animenum = ea_power7 ;
   icon = 11 ;
   is_power = true ;
   name = power7 ;
   powerup_tag = dead_power7 ;
   priority = 5 ;
      require {
      cat = skill ;
      item = dead_p7 ;
      level = 1 ;
      }

      trigger {
      name = sound ;
      sound = char/dphero_m/lackeys ;
      time = 0 ;
      }

      trigger {
      name = sound ;
      sound = char/dphero_m/p7_power ;
      time = 0 ;
      }

      trigger {
      name = show_swords ;
      time = 0.1 ;
      }

      trigger {
      name = hide_back_swords ;
      time = 0.1 ;
      }

      trigger {
      name = sound ;
      sound = char/dphero_m/special_unsheathe ;
      time = 0.1 ;
      }

      trigger {
      apply_ally = all ;
      life = %dead_p7_life ;
      name = powerup ;
      powerusage = %dead_p7_pwr ;
      time = 0.4 ;
         affecter {
         affect_type = scale ;
         attribute = move_attack ;
         level = %dead_p7_spd ;
         }

         affecter {
         affect_type = sum ;
         attribute = atk_damage ;
         level = %dead_p7_dmg ;
         }

         special_fx {
         effect = char/dphero/p7_aura ;
         fxlevel = 1 ;
         how_used = primary ;
         }

         special_fx {
         bolt = Bip01 R Hand ;
         effect = char/dphero/p7_aura ;
         fxlevel = 2 ;
         how_used = primary ;
         }

         special_fx {
         bolt = Bip01 L Hand ;
         effect = char/dphero/p7_aura ;
         fxlevel = 2 ;
         how_used = primary ;
         }


      }

      trigger {
      effect = char/dphero/p7_power ;
      fxlevel = 1 ;
      name = effect ;
      time = 0.4 ;
      }


      trigger {
      critical = true ;
      name = hide_swords ;
      time = 0.9 ;
      }

      trigger {
      critical = true ;
      name = show_back_swords ;
      time = 0.9 ;
      }

      trigger {
      critical = true ;
      name = sound ;
      sound = char/dphero_m/special_sheathe ;
      time = 0.9 ;
      }

      chain {
      action = Idle ;
      result = idle ;
      }

   }

The parts you see in blue are effects coding entries. When creating your boosts, you can use them as is, or you can alter them. For this lesson, I will show you the effect char/dphero/p7_aura, which is inside the boost powerup.

         special_fx {
         effect = char/dphero/p7_aura ;
         fxlevel = 1 ;
         how_used = primary ;
         }

         special_fx {
         bolt = Bip01 R Hand ;
         effect = char/dphero/p7_aura ;
         fxlevel = 2 ;
         how_used = primary ;
         }

         special_fx {
         bolt = Bip01 L Hand ;
         effect = char/dphero/p7_aura ;
         fxlevel = 2 ;
         how_used = primary ;
         }

special_fx is the starter of the effect coding entry -- ONLY used for boost duration entries.
bolt is the body part where the effect is seen at. In some cases, bolt is not used, in which case it's seen at a certain area. In this case, circling below your character.
effect shows where the effect is coming from. I'll show you those in a bit.
fxlevel is the level where the effect can change, as some effects have more than one level. In this case, this effect has two levels.
how_used is literally that, saying how the effect is used. It is usually primary (ongoing during duration), activation/activate (effect at the start of duration), and deactivation/deactivate (effect at the end of duration).
time is when the effect is seen. This is ONLY used in non-boost effects, such as char/dphero/p7_power.


For non-boost effects, it's simpler, as it really only displays the bolt (if there is one), the effect itself, fxlevel (if there is one), name (which is effect), and the time that it appears.

      trigger {
      bolt = Bip01 R Hand ;
      effect = char/dphero/p7_power ;
      fxlevel = 1 ;
      name = effect ;
      time = 0.4 ;
      }

As mentioned once before, you can connect a sound trigger to a non-boost effect, such as below. We'll go over sounds in a future lesson.

      trigger {
      bolt = Bip01 R Hand ;
      effect = char/dphero/p7_power ;
      fxlevel = 1 ;
      name = effect_sound ;
      sound = char/char_m/p7_power ;

      time = 0.4 ;
      }




INSIDE THE EFFECTS FILE

Now, go into your game's effects folder. This is where you'll find all effects for the game, including for SHIELD access points, base effects like glass shatterings, etc. Now go into the char folder... See all of those folders? Those are the effects for each character -- vanilla or modded in the game, as well as for boss villains and for minions. Don't worry -- we won't be looking at all of these. Look for and go into the "dphero" folder... See those? Those are the effect files for all of Deadpool's powers. Copy "p7_aura" and paste it elsewhere. This is the same file that we were looking at (char/dphero/p7_aura). We are going to open this effect file so you can see what is inside. (NOTE: All effects end with the .xmlb extension, so no need to change the extension when compiling them.)

XMLB Effect {
looptime = 2 ;
randlooptime = 0 ;
   Trail {
   acceleration = 0 0 0 0 0 0 ;
   alpha = -2 1 1 -2 1 1 ;
   blend = additive ;
   count = 1 1 ;
   delay = 0 0 ;
   drag = 0 0 ;
   endcolor1 = 128 ;
   endcolor2 = 128 ;
   gravity = 0 0 ;
   height = 0 0 ;
   interval = 0 ;
   length = 0 0 1 0 0 1 ;
   life = 2 2 ;
   midcolor1 = 128 ;
   midcolor2 = 128 ;
   name = name ;
   offset = 0 0 0 0 0 0 ;
   origin = 0 0 0 0 0 0 ;
   primitiveflags = 4244635904 ;
   primitiveflags2 = 320 ;
   radius = 0 0 ;
   radius2 = 0 0 ;
   rotation = 0 0 0 0 0 0 ;
   rotationradius = 0 0 0 0 0 0 ;
   shaderflags = 0 ;
   size = 0 0 5 0 0 5 ;
   spawnflags = 1090519040 ;
   startcolor1 = 128 ;
   startcolor2 = 128 ;
   texture = textures/bolt_sharp.png ;
   uvscale = 0 0 1 0 0 1 ;
   velocity = 0 0 0 0 0 0 ;
   viewoffset = 0 ;
   }

   OrientedSprite {
   acceleration = 0 0 0 0 0 0 ;
   alpha = 0 0 1 0 0 1 ;
   blend = additive ;
   count = 1 1 ;
   delay = 0 0 ;
   drag = 0 0 ;
   endcolor1 = 128 ;
   endcolor2 = 128 ;
   gravity = 0 0 ;
   height = 0 0 ;
   interval = 0 ;
   life = 2 2 ;
   midcolor1 = 128 ;
   midcolor2 = 128 ;
   name = name ;
   orientaxis = 0 0 1 0 0 1 ;
   origin = 0 0 4 0 0 4 ;
   origin2 = 0 0 0 0 0 0 ;
   primitiveflags = 4261413248 ;
   primitiveflags2 = 64 ;
   radius = 0 0 ;
   radius2 = 0 0 ;
   rotation = 0 0 0 0 0 0 ;
   rotationaxis = 0 0 1 0 0 1 ;
   rotationradius = 0 0 0 0 0 0 ;
   shaderflags = 0 ;
   size = 0 0 100 0 0 100 ;
   spawnflags = 3238068224 ;
   startcolor1 = 128 ;
   startcolor2 = 128 ;
   texture = textures/misc_hitflash.png ;
   velocity = 0 0 0 0 0 0 ;
   viewoffset = 0 ;
   }

   OrientedSprite {
   acceleration = 0 0 0 0 0 0 ;
   alpha = 0 0 1 0 0 1 ;
   blend = additive ;
   count = 1 1 ;
   delay = 0 0 ;
   drag = 0 0 ;
   endcolor1 = 16777215 ;
   endcolor2 = 16777215 ;
   gravity = 0 0 ;
   height = 0 0 ;
   interval = 0 ;
   life = 2 2 ;
   midcolor1 = 16777215 ;
   midcolor2 = 16777215 ;
   name = name ;
   orientaxis = 0 0 1 0 0 1 ;
   origin = 0 0 4 0 0 4 ;
   origin2 = 0 0 0 0 0 0 ;
   plat = 23 ;
   primitiveflags = 4261413248 ;
   primitiveflags2 = 64 ;
   radius = 0 0 ;
   radius2 = 0 0 ;
   rotation = 0 0 0 0 0 0 ;
   rotationaxis = 0 0 1 0 0 1 ;
   rotationradius = 0 0 0 0 0 0 ;
   shaderflags = 0 ;
   size = 0 0 25 0 0 25 ;
   spawnflags = 3238068224 ;
   startcolor1 = 16777215 ;
   startcolor2 = 16777215 ;
   texture = textures/misc_hitflash.png ;
   velocity = 0 0 0 0 0 0 ;
   viewoffset = 0 ;
   }

   Cylinder {
   acceleration = 0 0 0 0 0 0 ;
   acceleration2 = 0 0 0 0 0 0 ;
   alpha = -4 4 0 -4 4 0 ;
   blend = additive ;
   count = 6 6 ;
   delay = 0 2 ;
   drag = 0 0 ;
   drag2 = 0 0 ;
   endarc = 0 0 6.283 0 0 6.283 ;
   endcolor1 = 278015 ;
   endcolor2 = 278015 ;
   gravity = 0 0 ;
   gravity2 = 0 0 ;
   height = 0 0 ;
   interval = 0 ;
   life = 1.5 1.5 ;
   midcolor1 = 278015 ;
   midcolor2 = 278015 ;
   name = name ;
   numsegments = 0 ;
   origin = 0 0 4 0 0 4 ;
   origin2 = 0 0 1 0 0 1 ;
   primitiveflags = 4261413248 ;
   primitiveflags2 = 0 ;
   radius = 0 0 ;
   radius2 = 0 0 ;
   rotation = -0.002 6.285 0 -0.002 6.285 6.283 ;
   rotationaxis = 0 0 1 0 0 1 ;
   rotationradius = 0 0 0 0 0 0 ;
   shaderflags = 0 ;
   size = 0 0 15 0 0 15 ;
   size2 = -10 25 10 -10 25 10 ;
   spawnflags = 3238070272 ;
   startarc = 0 0 0 0 0 0 ;
   startcolor1 = 278015 ;
   startcolor2 = 278015 ;
   texture = textures/bolt_sharp.png ;
   uvscale = 0 0 2 0 0 2 ;
   uvscroll = 0 0 0 0 0 0 ;
   velocity = 0 0 0 0 0 0 ;
   velocity2 = 0 0 0 0 0 0 ;
   viewoffset = 0 ;
   }

}


Don't freak out! Don't get overwhelmed. I'll admit that I don't know what most of this is, either. But pretty much all effects have this kind of coding. I will tell you the terms I do know, so it will help you to alter effects to your liking.

looptime is the speed of the effect. So, 2 = 2.0 so it will move at a relatively normal speed. If set to 0.2 let's say, it'll go very fast per cycle.
blend is the kind of colors the effect uses. There are additive, subtractive, and alphaadditive. There may be others, but I generally leave it alone.
endcolor is the color seen at the end of the power. More on colors later in this lesson.
midcolor is the color seen at the middle of the power.
name is the name of the effect. Sometimes, it is not given a name, and so they just put "name." Not important.
origin controls where the effect is coming from. You can alter the six numbers to change it. More on that in a bit.
size is literally the size of the effect. You can make it bigger or smaller. I'll show you what I do later in the lesson.
startcolor is the color seen at the beginning of the power.
texture explains what special form is used for that effect, if any (ex. smoke, lightning, fire, etc.)




FXLEVEL

In some effects, there is more than one fx level. Take for example, Deadpool's p7_aura. Notice in the boost coding, fxlevel = 1 is connected to no particular body part (bolt)? It will make a circular effect around your character at the ground. But if you change the fxlevel to 2, it will create a different effect. It creates a long blurry trail that appears in and out. That is why the same effect is used at "Bip01 R Hand" and "Bip01 L Hand." Of course, every effect is different. Some are used for beams, others for radial attacks. If you scan their powerstyle file, you will see how many fxlevels that an effect has, as currently there is no way to know otherwise.




CHANGING ORIGIN

The origin line (and origin2 line) has six numbers that control where the effect is coming from. Think of it as X Y Z X Y Z. The 1st and 4th numbers will move the effect left / right, the 2nd and 5th numbers will move the effect forward / backward, the 3rd and 6th numbers will move the effect up / down. Negative numbers count as well, so think of them as an X-axis, Y-axis, and a Z-axis.

Normally, there is no need to change these, unless a new skin is made, and suddenly the effect doesn't look as good. Changing the origin lines of each entry in the effect will correct it.




CHANGING SIZE

Many people do not know of this, but with some effects, one thing I do is change the size (and size2 if that is there). Think of the same X Y Z X Y Z method, the 1st and 4th numbers should be the same. The 2nd and 5th numbers should be the same, and the 3rd and 6th numbers should be the same.

I tend to make the effects I want bigger, by doubling the value, or multiplying them by 3. So, for example, if the size line says, "3 2 0, 3, 2, 0" then I would jump it to "9, 6, 0, 9, 6, 0." That will increase the size of the effect. Combine this with a color change, and you can have a whole new effect.




CHANGING COLORS

In every effect, there are three types: startcolor, midcolor, and endcolor. When you see an effect you like, but don't like its original color(s), you can change the colors in each entry of the effect. This can make for excellent effects for your character.

Now, the number you see listed in each corresponds to a different color -- except it's backwards. What do I mean? Go to this webpage:
http://www.mathsisfun.com/hexadecimal-decimal-colors.html

There, scroll down and you'll notice a color key that you can use to create the color(s) you want. Say for example, you want to create neon green as a color. Move the red slider to 114=72, move the green slider to 255=FF, and move the blue slider to 0=00. You will then see the color you want, and that the numbers below has changed. There is a decimal number and a hexadecimal number. The decimal number is one you want, which is currently 7536384. But wait... I had said that the numbers on the effects coding is backwards...  So, now on the website, you must switch the red and blue sliders backwards. In this case, the red slider moves to 0=00, and the blue slider to 114=72. The decimal number will now become 65394. THAT'S the number you'll place in either startcolor, midcolor, or endcolor. There's two of each. You can place the value in both or just one of to create a different color. Your choice. Just remember -- the value must be backwards to get the color you want.

DID YOU KNOW?
The Outsider uses a color system to determine the color he wants for effects. He will share that with you. Here are the numbers that you can put in the color parts of the effects coding for a specific color. They are already turned backwards. (NOTE: The computer colors you see here are not the exact colors for the effects.)

RED: 255 or 128 (darker)
ORANGE: 33023
YELLOW: 65535
GREEN: 65280 or 9502608 (lime green)
CYAN: 16776960
LT BLUE: 16764579 or 16746602 (slight darker)
BLUE: 16711680 (pure) or 16736256 (ideal)
INDIGO: 9437232
VIOLET: 16736400
PURPLE: 16720016
MAGENTA: 8790015
PINK: 11563263
BROWN: 2905468
GOLD: 7270143
SILVER: 15591399
WHITE: 16777215
GRAY: 10855845
BLACK: 0*

(*Must use the blend "subtractive" and the midcolor must be white. Confirmed to work.)

Though only a boost effect was shown in this lesson, virtually any effect from beams, projectiles, melee attacks, and even Xtreme powers can be altered by size, color, origin, and other lines. Practice with various effects and make your character's powers visually stun players. However, don't go crazy with too many effects, as you may suffer an effects overload, where your character suddenly stops displaying effects. Display effects only when needed.

A member here named CorvetteRules discovered that you can also make colors appear darker if you wish.
(1) Choose your color, and view its numbers.
(2) Take the red number and subtract it from 255. Now do the same with the blue number. (Green number stays the same.) *
(3) After making the subtractions, copy & paste the decimal code. Use that for the effects file.
(4) Make sure the blend is subtractive.

*Example: If for the color you want, red is 70, and blue is 150, set red to 255 - 70 = 185, and set blue to 255 - 150 = 105. Nothing is done with green.




CUSTOM TEXTURES

In addition to the effects already out there, one can also create their own custom-made textures for effects, such as the "S" logo for Superman, or the Omega symbol I used for Kratos. The main thing you will need for this besides Alchemy 5 and a photoshop program like GIMP... is Nikita's "image2igb" batch file, which is very simple to use. You can get it here: https://www.mediafire.com/?q6zu7uw0cqs0kia.

The process to create custom textures is quite easy, and I can confirm to you that it works. A member here called "Corvetterules" wrote an easy-to-follow tutorial on that, with visuals. Look in this to learn how to do it: https://docs.google.com/document/d/1yqX2yIwEfv_DxPO-yNNvPj5qzwnRcv67g9Vd7PaET_g/edit.





MENU EFFECTS

You can connect effects to characters at the CSS (Character Select Screen) as well. Look at the herostat of :iceman: Iceman. You should see something like this on it...

      StatEffect {
      bolt = Bip01 Spine2 ;
      effect = char/iceman/special_selfchill ;
      fxlevel = 1 ;
      }

      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 ;
      }

On the herostat, they use StatEffect to display effects. Effect coding here is virtually the same, with only a few differences.
menuonly = The effect appears only at the CSS and not in-game. You can set this to true or false.
zoneonly = The effect appears only in-game, and not at the CSS. You can set this to true or false.
(If neither "menuonly" or "zoneonly" are present, it will appear in both.)


Furthermore, if you look at the herostat of :spiderman: Spider-Man, you will see that you can even connect effects to a particular menu animation.

      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 ;
      }

This means that when he first appears on screen at the CSS (menu_action), and when he is idle there (menu_idle), the effect will be present. But when begins to start the game (menu_goodbye), the effect is gone. Very easy to understand these coding entries. However, don't use too many effects, as there is a limit when those effects stop appearing.




Lesson Takeaway:
-Pick the right effects to correspond with the kind of power you want. Beam, projectile, radial, xtreme, etc.
-Values with six numbers follow the X Y Z X Y Z plan, so change one, change the other.
-Change colors and size of existing powers to create new ones.
-Color codes must be backwards on the effects coding for them to work correctly.
-Effects can be added to a character's herostat as well, but avoid "effects overload."


Hi Outsider,

I don't know if its explained within the 'Boost Coding' section itself, but I can't seem to find any explanation in your vast tutorials for how debuff abilities (which primarily affect enemies) are coded. Ex: Taunts to decrease overall defense, disabling access to enemy special abilities, render them more weak to a particular damagetype, turn into an ally for a selected amount of time etc.

If you could elaborate more on how these work in actual practice, I'd greatly appreciate it.

Quote from: Ceamonks890 on March 11, 2020, 03:31AM
Hi Outsider,

I don't know if its explained within the 'Boost Coding' section itself, but I can't seem to find any explanation in your vast tutorials for how debuff abilities (which primarily affect enemies) are coded. Ex: Taunts to decrease overall defense, disabling access to enemy special abilities, render them more weak to a particular damagetype, turn into an ally for a selected amount of time etc.

If you could elaborate more on how these work in actual practice, I'd greatly appreciate it.


No problem. I've expanded the section in Chapter 11 that covers more status aliments, and shows how they can be connected to a victim event tag.


March 24, 2020, 09:56PM #36 Last Edit: March 09, 2024, 01:57AM by Outsider
Lesson 18: Aesthetics

Alright, you're almost there to completing your mod project. But now, you gotta give your mod some flair. It's going to need HUDs, an icon set, and at least one loading screen. Together, I call them aesthetics. Don't worry -- no coding required here. You're done with the coding!

SPECIAL NOTE:
I talked with skilled skinner BaconWizard17, and we came to an agreement that aesthetics should have its own tutorial covering that topic in detail. So, instead of a full lesson here, I am just going to mention what I do personally.


For this lesson, you will need two tools: SkinnerUI, which is the program that allows the creation of custom aesthetics, and a photoshop program. I personally use GIMP 2.6, as it features so many tools and it's easy to add more plugins to further enhance what you can do. Hasn't failed me yet, so I'll base the lesson on this. If you're using another program, adjust accordingly. (There is an alternate path for each that uses Alchemy 5 and batch files. See "Alternate Path" below in each section.)

SkinnerUI should have the offsets for hud_head_0201.igb, drstr_icons.igb, and char_load_01.igb at the jump. You'll find out later why that is important. Just in case though, check your skinnerui folder, then the bin folder. You'll see something called muaskinner.cfg. Open that file via Notepad, and look for the following offsets...

drstr_icons.igb,RAGB,256,256,6217.
char_load_01.igb,-DXT1,2048,1024,356265,1024,512,94121,512,256,28585,256,128,12201,128,64,8105.
hud_head_0201.igb,-DXT1,256,256,10571,128,128,43339,64,64,51531,32,32,54435,16,16,53595,8,8,54947.

If you already have them there, then you don't need to do anything -- you're good. If you don't, then copy them here exactly as written, paste them in that file, and save. I can confirm that these offsets work, as I've been modding for a long time and I've used these. Never had a problem.

Now, let's go over each of the items needed, in order from easy to hard.




LOADING SCREENS

Loading screens (LS) are the large images that you see while the game is loading. If you're going to a boss stage, you'll see the loading screen of a boss character. Otherwise, you'll see loading screens of characters on your roster at random. It is important to note that every mod number can only have a maximum of three LS, as no others will be shown. Depending on the mod number, a loading screen will be named (mod number)(01, 02, or 03).igb. So for example, if your character is sharing numbers with :captainamerica2: Captain America, and he has two LS, then your character can only have one LS. Either that, or you'll have to replace one of Cap's so your character can have two. Cap's mod number is 07, so his can be 0701.igb, 0702.igb, or 0703.igb. That's how it works for loading screens -- (mod number)(01,02, or 03).igb.

Take a look at your game's textures folder, then click on the loading folder... See all those? Those are the LS for the entire game, including bosses and other stuff. In that folder, highlight and right-click on char_load_01.igb. Copy it, and paste it at the location where you've uploaded the SkinnerUI program.

(1) Open SkinnerUI and load that char_load_01.igb file. It should have the offsets already, so loading it shouldn't be a problem. You'll see an upside-down image of a SHIELD logo. This is normal. Click "Export," name it whatever you want, and hit Enter. Wait for it to upload the image to your folder.

You'll see a bitmap (.BMP) image and a .igb.dds file of the image appear. Keep skinnerui open.

(2) Now comes the fun part: Take any image you want to create the loading screen of your character. I recommend using Google to look for images, but make sure they are wallpaper large. The ideal size is 1820 x 1024. If you find an image that is 1920 x 1080, that's fine too, because you can then scale it to the ideal size. (Don't use an image that is too small, for it will make the image appear distorted and unappealing.) Save that image to your computer and drag it into your photoshop program.

(3) Now scale the image to 1820 x 1024 if it's not that size already. Or if the image is larger, crop it to that size. What you see now is how the loading screen will look in your game.

If you're skilled at photoshop as I am, you can take several images and put them together to create an awesome custom-made image! Just make sure that the completed image is 1820 x 1024 when you're done.

(4) Now, scale it again to 2048 x 1024. Then flip it upside-down. Trust me, this is important.. Now save it as a PNG file so you get lossless quality. (If you save it as a JPG or JPEG file, it will lose quality every time you save it, so go with PNG.) Now you can exit that image.

(5) Remember that BMP file that appeared before? Drag that file now to your photoshop program. Notice that the size is 2048 x 1024, and that it's upside down. Now drag the new image you just created to the photoshop program. Your new image will overlap the BMP image. Make sure to check all corners and lines to make sure that the new image is completely overlapping the BMP image. Save it and exit.

(6) Finally, go back to the skinnerui program and click "Import." Choose the BMP file that now has your new image on it, and hit Enter. Wait for it to do its thing. After a short while, the image inside the char_load_01.igb file changes to your new image. You will also see a .bak file appear confirming the successful change. Congratulations -- you've made your first loading screen! You can then delete the BMP file, the igb.dds file, and the bak file. They are no longer needed.

(7) Copy the char_load_01.igb file that now has your new image inside (you'll know based on the date), paste it elsewhere, and rename it whatever you want. That is your new loading screen. You will have to name it ###01.igb, ###02.igb, or ###03.igb according to your mod's number. Don't get rid of the "char_load_01.igb" in the skinnerui folder though. Because you can use that igb file to create new loading screens over and over again, regardless of what the previous image was.

ALTERNATE PATH: Recently, Nikita488 and ak2yny made "image2igb" which uses batch files to process certain aesthetics, such as loading screens. Look for the "Image 2 IGB batch pack" here (https://marvelmods.com/forum/index.php/topic,10969.msg200476.html#msg200476), then follow the instructions carefully as Alchemy 5 is required. Once you have the image you want for a loading screen that's 1920 x 1080 or 1820 x 1024 (either will do), simply drag and drop into the batch file that says image2igb-ls. It will convert the image for you, and that's it. I can confirm that this relatively newer method works as well, and is easier.




HUDS

HUDs are the images that appear on the lower left corner of your screen during gameplay and during conversations with NPCs (non-playable characters). Open your game's hud folder. See those? Those are all of the HUDs for every playable character, boss, minion, and NPC in the game. In that folder, highlight and right-click on hud_head_0201.igb. Copy it, and paste it at the location where you've uploaded the SkinnerUI program.

(1) Open SkinnerUI and load that hud_head_0201.igb file. It should have the offsets already, so loading it shouldn't be a problem. You'll see an upside-down headshot of :daredevil: Daredevil. This is normal. Click "Export," name it whatever you want, and hit Enter. Wait for it to upload the image to your folder.

You'll see two images appear -- a bitmap (.BMP) image and a color-swapped .igb.dds file of the image appear. The BMP image is the one we'll use. Keep skinnerui open.

(2) Right-click the images below, and save them to your skinnerui folder...

&

These are png files that you will need to create HUDs. Note that in the past, I couldn't acquire ithe official-looking metal grate so I had to use a different one you'll see below. But hey, I've made so many mods for this game, that it practically is official! :laugh:

(3) Now use Google and find a PNG headshot image of your character, or a full body shot PNG that is large, open it, drag it, or copy it to GIMP. and then use Rectangle Select Tool to crop it to the headshot. Transparent PNG images are best because there's no background already. The ideal size is 256 x 256, so scale the image to that size (Image/Scale Image). Save your image to your folder as a PNG file.

If you are using a JPG image or an image with a background, then you'll have to first add an alpha channel for transparency (Layer/Transparency/Add Alpha Channel). Then use the eraser tool and carefully remove the background so that only the headshot remains. Then save it as a PNG file. For this lesson, we will use this headshot of Ms. Marvel from Marvel Future Fight, the size of which is exactly 256 x 256.



Well, hello Miss Danvers... :naughty:

(4) Now, drag that BMP file of Daredevil into your photoshop program. Then drag the metal image you saved into it to overlap the image. Blur it a little. Next, drag your headshot image (or Ms. Marvel's headshot if you don't have anything) to overlap the metal image. Blur it a little (Filters/Blur/Blur). Finally, drag the black circle in to overlap everything. Finally, merge all of the layers (Ctrl + M, pick Clipped to Image, Merge). What you see now is how the HUD will look in your game. Using Ms. Marvel, it will look like this...



OPTIONAL: If you want to add a glow effect to a HUD like the official characters do it, then with GIMP, you can use either Drop Shadow (Filters/Light and Shadow/Drop Shadow), or locate the GC Shadow plugin file, which is what I use. You can Google "gimp gc shadow plugin," and only get it from a trusted source. Follow their instructions to add it into GIMP. You'll have to restart GIMP afterwards. Then, before you add the black circle to the HUD image, use GC Shadow (Filters/Light and Shadow/GC Shadow), find a nice shade of blue, and enter as seen below...



If you do that, a blue glow will cover your headshot image. Now you can add the black circle, and then merge all of the layers. The HUD will then look like this...



(5) Now flip the image upside-down (Image/Transform/Flip Vertically) and save. The BMP will now change to the headshot of your image. Exit the image.

(6) Finally, go back to the skinnerui program and click "Import." Choose the BMP file that now has your new image on it, and hit Enter. Wait for it to do its thing. After a short while, the image inside the hud_head_0201.igb file changes to your new image. You will also see a .bak file appear confirming the successful change. Congratulations -- you've made your first HUD! You can then delete the BMP file, the igb.dds file, and the bak file. They are no longer needed.

Some people have reported inverted colors after importing. While I personally have not seen this happen in the years I've created HUDs, just in case you see it, before Step 5, use the Channel Mixer to change the RGB colors to BGR. Then continue to Step 5. It is possible they are editing the igb.dds file that appears color-swapped. As it says it Step 4, use the BMP image that appears, not the DDS image.

(7) Copy the hud_head_0201.igb file that now has your new image inside (you'll know based on the date), paste it elsewhere, and rename it whatever you want. That is your new HUD. You will have to name it hud_head_##01.igb or whatever you want according to your skin's number. Create HUDs for each skin/costume that your character has. Don't get rid of the "hud_head_0201.igb" in the skinnerui folder though. Because you can use that igb file to create new HUDs over and over again, regardless of what the previous image was.

For those of you who prefer a visual aid on creating HUDs, Bloodymares created a video (using a later version of GIMP) showing how to create HUDs: Click on this link to view it: https://www.youtube.com/watch?v=faQXO2cDpII

Sometimes, hex-editing the HUD to match the number you named it is needed if it's replacing the HUD of an in-game NPC. In which case, use XVI32 to change the digits.

ALTERNATE PATH: Recently, MrKablamm0fish and ak2yny made "TextReplHUD&Team" which uses batch files to process HUDs. Look for the "Batch Texture Replacement" here (https://marvelmods.com/forum/index.php/topic,10969.msg200476.html#msg200476), then follow the instructions carefully as Alchemy 5 is required. Once you have the HUD image you want, simply drag and drop into the batch file that says hud_head_e. It will convert the image for you in a separate folder, and that's it. I can confirm that this relatively newer method works as well, and is easier.




ICONS

Icons are the small images that appear on your character's power set, and during gameplay when displaying your powers. They also contain the banner that appears as you're checking your character's stats. Open your game's textures folder, then the ui folder. See those? Those are all of the icon files for every playable character in the game, and even the generic icons that passives use. In that folder, highlight and right-click on drstr_icons.igb. Copy it, and paste it at the location where you've uploaded the SkinnerUI program.

(1) Open SkinnerUI and load that drstr_icons.igb file. It should have the offsets already, so loading it shouldn't be a problem. You'll see the icon set for :strange: Dr. Strange. Click "Export," name it whatever you want, and hit Enter. Wait for it to upload the image to your folder.

You'll see a bitmap (.BMP) image appear. Keep skinnerui open.

(2) Right-click the image below, and save them to your skinnerui folder...



This is an icon template that you can use to determine where to place your icons. As you can see, icons 12-15 are not used as the banner goes there.

(3) Go on Google or any search engine and find any images you want of your character in action, to make these your icons representing the powers you gave your mod, or for special passives. Also find a background to be your character's banner. (It is best to use a banner where the main symbol or image is on the right hand side, not the center. Why? Because your character's name will appear on the left, blocking images you put in the center. I'll show you what I mean in a bit.) Save each of them.

(4) Open each of those images via GIMP, Use the Ellipse Select Tool (the circle near the Rectangle Select Tool) at the toolbox and hold the mouse to draw a perfect circle (where height & width are the same) over the image you want for the icon. Copy it (Ctrl + C). Then go to Image/Crop To Selection. Then go to Select/None to get rid of the circle. Then go to Layer/Transparency and click Add Alpha Channel. Now click on the Eraser Tool on the toolbox. Go to where it says "Brush", and click the circle seen there. It will bring up a small menu of shapes -- the first of which will be the image you just copied. Click on that. Hold the mouse and erase the image completely. Now hit Paste (Ctrl + V). The image you copied will appear over a transparent background. Click anywhere but the circle itself to anchor the image. Now you can hit Image/Scale Image to scale it down to 62 x 62. There's your icon for one of your character's powers. Save as a PNG file, as Icon #, coinciding with wherever on the icon template you plan to put that icon. Do this for all of your icons.

(5) The banner should have the ideal size of 768 x 60. So, first add alpha channel for transparency, then shrink or crop the image to the ideal size. Once you've done that, scale it down to 256 x 60 and save it as a PNG file. As I mentioned before, important images on the banner should be on the right hand side, not the center. The character's name will appear on the left, so plan the banner accordingly. To show you what I mean, here is the icon set I made for my booster of the :punisher_logo: Punisher.



(6) Open or drag the icon template into your photoshop program. Now, just place your icon files over whichever number from 0 to 11 to set up your power icons. Merge all of the layers. Save.
OPTIONAL: Some icons have an inner glow -- if you want that, enter GC Shadow (or Drop Shadow if you prefer that), choose a color, and enter as below.



Press enter and the icon will have an inner glow. Using the SHIELD logo as an icon example, it will look like this...



Do that for all of your icons, merge all of the layers, then save. Now place your created banner completely over the banner area of the template. (The next part is optional if you want it to look professional.) Use the eraser at only 40% opacity and gradually erase the far left and far right of the banner to give off a "faded effect." That's why the template's black banner wasn't all of the way across. Space was left for transparency, just like the official characters. (End of optional part.) Now merge all of the layers and save as a .bmp file. What you see now is how the icon set will look in your game. Don't worry about the black background around the icons when you save it, because the transparency was already in the template.

(7) Finally, go back to the skinnerui program and click "Import." Choose the BMP file that now has your new icon set on it, and hit Enter. Wait for it to do its thing. After a short while, the icon set inside the drstr_icons.igb file changes to your new set. You will also see a .bak file appear confirming the successful change. Congratulations -- you've made your first set of icons! You can then delete the BMP file and the bak file. They are no longer needed.

(8) Copy the drstr_icons.igb file that now has your new icon set inside (you'll know based on the date), paste it elsewhere, and rename it whatever you want. That is your new icon set. You will have to name it ?????_icons.igb based on your character's name or abbreviation. Don't get rid of the "drstr_icons.igb" in the skinnerui folder though. Because you can use that igb file to create new icon sets over and over again, regardless of what the previous image was.

NOTE: You can also use Maegawa's template for icons that have a glow included in them to start you off.



ALTERNATE PATH: Recently, Nikita488 and ak2yny made "image2igb" which uses batch files to process certain aesthetics, such as icons. Look for the "Image 2 IGB batch pack" (https://marvelmods.com/forum/index.php/topic,10969.msg200476.html#msg200476), then follow the instructions carefully as Alchemy 5 is required. Once you have the icon set you want, simply drag and drop into the batch file that says image2igb-pngicons. It will convert the image for you, and that's it. I can confirm that this relatively newer method works as well, and is easier.



I hope I explained this in an understandable way, as this is how I've always done it. You've seen the results of my work, and I firmly stand by these methods. However, BaconWizard and I will draft a more general tutorial in the not-too-distant future to create your aesthetics, in case you prefer different ways.




Lesson Takeaway:
-Loading screens must be large wallpaper-size images to avoid distorted screens. Only three per mod number.
-HUDs should use a metal background and black circle to look official.
-Icon banners should have important images on the right hand side, not the center, so the name won't block them.
-GIMP is best used, but other photoshop programs can be used. Adjust this lesson to whatever works best for you.
-All images should be saved in PNG format for lossless quality.


March 28, 2020, 07:41PM #37 Last Edit: April 11, 2024, 08:36AM by Outsider
Lesson 19: Sounds

You're near the finish line towards mod completion. You've made your character visually appealing with effects, and you've added some flair with aesthetics. But, it can't just be pleasing to the eyes. It has to be pleasing to the ears as well. You're going to need sounds.

For this lesson, you will need two tools: ZSMeditor, which is the program that allows the creation of sound and voice files for MUA, and a sound editing program. I personally use Wavepad Sound Editor, as the base version is free and has an variety of features, so I'll base the lesson on this. If you're using another program, adjust accordingly.

There are two sound files that need to be made for your mod -- a master file, which is mainly the sound effects of your character's powers, and a voice file, which contains many lines for when your character talks, if they talk. I like to work on the voice file first, as that is the harder file to work on.

First things first, you have to find lines for your character. I search through Youtube to find voice clips from a video game, TV show, or movie that your character has been in. If he/she is not a character that's been in anything, then look for a voice that sounds closest to your character. Games like Street Fighter X Tekken, Marvel vs. Capcom 3, Mortal Kombat X, Mortal Kombat 11, or both Injustice games are good examples, as they all have voice clips you can use.

Once you found a video (or videos) of voice clips that you like, look on the web for a Youtube-to-MP3 online converter. These sites will convert the Youtube video address of the videos you've found, and convert them to MP3 files that you can download.
WARNING: Most online converter sites have have pop-ups that may contain viruses or malware. Make sure you have a good anti-virus security system like Norton or McAfee that can effectively block them so you can use the converter sites safely.




VOICE FILE

Now that you got the MP3s you need, open your sound editing program so you can edit them. Cut and crop the MP3 to take only the lines and grunts that you need, then save them. Make them louder than what you want it to sound like, because MUA will lower the volume a bit.
IMPORTANT: Make sure to save each line/grunt as a .wav sound. The encoding MUST be PCM Uncompressed, and  that it MUST be at 22050 Hz, 16-bit, Mono. Otherwise, it won't work.

When creating voice files, the following are the lines you should try to acquire, as they are essential. You can have more than one of each line.

EPITAPH: The line a character says after he/she dies in battle. Something like "I'll be back!" or "Didn't see that coming..."
LEVELUP: The line a character says when he/she gains an experience level. Something like, "I feel even stronger!" or "Yeah! I like this!"
LOWHEALTH: The line a character says when he/she is in danger and needs health quickly. Something like, "I can't go down yet!" or "I don't know how much longer I can last..."
NOPOWER: The line a character says when he/she doesn't have enough energy to perform a certain power. Something like, "I need more power to do that." or "Dammit!"
RESPAFFIRM: The line a character says when he/she responds to a CMD command, or when you cycle to play as that character. Something like, "Yes" or "Okay, sure."
TAUNTKD: The line a character says when he/she knocks an enemy down but didn't kill them yet. Something like, "Is that all you got?" or "You're not going to last very long..." Lines that insult the enemy are good here as well.
THROWTAUNT: The line a character says when he/she throws an enemy. Something like, "Get outta my face!" or "Away with you!" It should be something quick.
TOOHEAVY: The line a character says when he/she can't lift up a heavy object (doesn't have Might). Something like, "I can't lift that" or "Are you kidding? That's way too heavy."
VICTORY: The line a character says when he/she has defeated/killed an enemy. Something like, "That's why I'm number one!" or "You had no chance of beating me." Various lines that sound confident or arrogant can go here.
XTREME: The line a character says when he/she is about to release his/her Xtreme power attack. Usually they'll say the name of what the Xtreme is. If that's not possible, then something like, "Here comes the finish!" or "Time to end this!" IMPORTANT -- these lines should have some kind of echo effect that travels, and should be louder than all other lines. Use your sound editing program to add an echo effect to it.

In Wavepad, once you have the line for the Xtreme, go to the end of it, hit Record to allow some extra space, then stop recording. Go to the Effects tab, and click Echo. You can then customize settings and hear how it sounds as you change them.

The following lines can also go into the voice file, but are not used all that often, and not as important.

BORED: The line a character says when he/she stands around idle for a long period of time. For MUA being a fast paced game, it's useless.
CANTGO: The line a character says when he/she cannot move in a certain direction. Not used often.
CMDATTACKANY: The line a character says when he/she commands their teammates to attack any enemy on screen.
CMDATTACKTARGET: The line a character says when he/she commands their teammates to attack a specific target.
CMDFOLLOW: The line a character says when he/she wants their teammates to follow him/her. Not useful, as most times they already follow.
ISEEYOU: The line a character says when he/she notices an enemy in battle. Not useful for MUA, but enemies/NPCs use it.
NOWORK: The line a character says when he/she is attempting to unlock something but isn't working. Not used often in MUA.
STATS: The line a character says when he/she has won a multiplayer battle. Not used often.


Once you have the lines as .wav sounds and at the correct format, open up ZSMeditor. Hit "File" then "New." Type whatever file name you want, but it must end in "_v" (the v stands for voice), and please note that the character name must be 7 letters or less, or it won't work.
For example, colossus_v won't work because :colossus: Colossus is eight letters, but colos_v will work fine because it's five letters. The "_v" doesn't count. Once you name it, you cannot rename it something else. We'll call this one "char_v" for this lesson. Pick the PC Version.

NOTE: You MUST name both the voice file and master file (later in this lesson) the exact same thing. And it MUST be the exact same thing as what you put in your character's herostat, under "sounddir." For example, if you name your voice file "united_v," then your master file MUST be "united_m," and in your herostat under sounddir, it MUST say "united_m" or something won't work.

Now, on ZSMeditor, go to Tools, then Import Sounds. Navigate to your game's sounds folder, then eng folder. The folders you see there are for every sound for all characters and stages in the game. They are in ABC order, pertaining to the first letter of the sound files. So, :iceman: Iceman's sound files let's say, would be in the I folder, so go there. You'll now see a second set of folders, pertaining to the second letter of a character's sound files. Iceman's files would be inside the C folder, so go there... You'll now see sound files for Iceman and a couple of others. Notice that Iceman has two files -- an iceman_m.zsm file (that's his sounds), and an iceman_v.zss file (that's his voice). Open the latter one, and wait for it to load.

On the importing side (right-hand side) of the program, you'll see his voice lines. On this side, click the "Files" tab, and checkmark where it says "Auto copy files's informations." The file information side (left-hand side) is where you'll construct your character's voice file. On this side, click the "Files" tab, and checkmark where it says both "Auto calculate file size" and "Auto calculate files hash."

Now drag and drop your .wav sounds containing your voice lines on the left-hand side. I usually do them three maximum at a time to set them up. (You can hit "Play" to hear what each of them sound like.) Now on BOTH left and right sides, click the "Event" tab. You'll now see on the right-hand side what action each of Iceman's lines are used for. It's the same actions I mentioned before. You can highlight one of them, and drag it to the left-hand side, depending on what it is. For example, if the first line that you put for your character was a TAUNTKD line, then drag a TAUNTKD line from the right and drag it to the left. You will now see that your character has a TAUNTKD line at number 00. That's how it works.
I don't use the drop-down Event option at the bottom of the left-hand side, because some commands like THROWTAUNT are not there, and XTREME_LAUNCH is there, but that's incorrect. You can always rename an event for each line by clicking on the name twice.

Notice that some of Iceman's lines have brackets with a number in the center on them? That's because he has more than one. If your character has more than one of a certain line, you can place a [number] next to it. For example, if you have more than one VICTORY line, then don't use VICTORY. Instead, use VICTORY[1] and so on, depending on how many you have. 8 is the maximum you can have for each.

As you drag and drop more of your .wav sounds into the Files tab, and naming what they are for in the Events tab. You can play how each of them sound. The Event is what the game will recognize the line as. So for example, if one line you have is a VICTORY line, then don't call it TAUNTKD. Or you'll only hear it if you knock an enemy down. Once you are done, click "File" then "Save." Choose to save it as a .zss file, then where it says "char_v" type the .zss entension when saving it. So it should say "char_v.zss" when saving it. Pick the PC format. And you're done. Congrats, you made a voice file!
  • Create a folder and name it the second letter of your voice file. (In char_v's case, that's h.) Put the voice file in there.
  • Create another folder and name it the first letter of your voice file. (In char_v's case, that's c.). Place the second letter folder inside the first letter folder.
  • Create another folder and name it "eng." Put the first letter folder inside there.
  • Create a final folder and name it "sounds." Put the "eng" folder inside there.
This is to properly set up your character's sound files in the correct place so that they will work correctly.





MASTER FILE

Now that you created a voice file, you also have to create a main file. This is where power sound effects and character grunts go. It's called the master file because on your character's herostat where it says "sounddir" -- next to it is the character's master file that ends with "_m." Anyway, the process that you did for the voice file is the same for the master file, but it's easier.

When creating voice files, the following are the grunts you should try to acquire, as they are essential. You can have more than one of each line.

DEATH: The sound a character makes when he/she dies in battle.
JUMP: The sound a character makes when he/she jumps.
LAND: The sound a character makes when he/she lands from a jump.
PAIN: The sound a character makes when he/she is hit by an enemy attack or environmental hazard.
PICKUP: The sound a character makes when he/she grab an enemy or lifts an object.
THROW: The sound a character makes when he/she throws an object at an enemy.

The rest will be sounds based on powers, such as...
FLYBEGIN: The sound effect a character makes when he/she starts flying, if they can fly.
FLYEND: The sound effect a character makes when he/she lands from flying, if they can fly.
P1_POWER: The sound a character makes when he/she releases a power. It can be from power 1 to 10. More might be possible if you type it in.
P1_CHARGE: The sound a character makes when he/she is charging up for a power. It can be from power 1 to 10. More might be possible if you type it in.
P1_LOOP: The sound a character makes when he/she is holding to release a power. It can be from power 1 to 10. More might be possible if you type it in. This sound is supposed to be ongoing until release, but sometimes it doesn't work.
P1_IMPACT: The sound a character makes when the character's power connects to an enemy or a wall. It can be from power 1 to 10. More might be possible if you type it in. (You've seen these in entities files under "deathsound.")

The method is the same. You have to find them, then edit them with your sound editing program to make sure that they are all .wav sounds, and are PCM Uncompressed, 22050 hz, 16-bit, Mono.

Now, open ZSMeditor, click "File," then "New." Name it the exact same file name as you did for the voice file. They have to be identical, except that instead of a "_v" at the end, it will be a "_m" at the end. (The m stands for master.) We'll use "char_m" for this lesson.

The process is the same as with the voice file. You import an existing mod's sound file (this time, their master file -- iceman_m for example) and it will appear on the right-hand side. Drag and drop your .wav sounds to the left-hand side under the "Files" tab, and name the event for them under the "Event" tab. Use [number] if there are multiple sounds of the same type, such as PAIN[1], PAIN[2], PAIN[3], etc.

What makes the master file easier? Well, if you don't want to create all-new power sound effects, then don't. You can use any power sound effects from any existing mod that you already have in the game! Just import them on the right-hand side, press play to hear what they sound like, and if they fit your character's power, drag it to the left-hand side under the Files tab. But then rename that power under the Events tab. Easy, right? This is especially good for Xtreme power sounds.
When you are done, save the file, but this time, save it as a .zsm file, and type "char_m.zsm" when saving it. Congrats, you just made sounds files for your mod! Remember where you placed your new voice file? Place your new master file there as well.

NOTE: After you've made your sound files, you can't just rename them to something else -- it doesn't work that way. I mentioned this earlier, but to reiterate, if you try to rename a sound file, the game won't recognize it, making it useless. If you have to rename sound files, you must do them over again.




SETTING UP YOUR SOUNDS

Now that you've successfully created your sounds files, you need to do two things. First thing, check your herostat. Look under the line "sounddir." It should precisely match the name of your master file. (For example, if you named your master file "char_m" then that's what it should say in your herostat. Because this is what the game is going by. Plus, your voice file should have the same name, but with a _v at the end ("char_v" for example). If it's not identical, then you didn't follow this lesson correctly -- you did something wrong. If it's identical, then good. You can move on to the second thing.

Second thing, open up your character's powerstyle file (ps_character.engb). Look in the coding for your powers and your grab smash. They should have sound triggers that will look something like this...

      trigger {
      name = sound ;
      sound = char/ghost_m/p5_charge ;
      time = 0.415 ;
      }

By now, you know what each mean. Now you can plug the power sounds to correspond with the powers they are used for. The sound will always be "char/(whatever you named your master file)/(whatever you named the event) ;" (Example: sound = char/char_m/p1_power ;)
You can now go through your powerstyle file and time each of your sounds to each of your powers, then play the game as your character to make sure that your sounds and voice are working fine. If the timing of the sound effects are a little off, adjust the time of the sound trigger accordingly until it's just right.

And remember, you can connect an effect trigger to a sound trigger if they are supposed to happen at the same time, such as the example below.

      trigger {
      bolt = Bip01 Head ;
      effect = char/ghost/p5_power ;
      fxlevel = 1 ;
      name = effect_sound ;
      sound = char/ghost_m/p5_charge ;
      time = 0.415 ;
      }

Personally, I always work on sounds last, because that is the time when you have to check out your mod to make sure that everything is functioning correctly anyway. Don't be in a rush to release. Check everything, and make sure that everything works without a problem.




X_VOICE

If you'd like to make a custom sound for x_voice.zss such as character callouts or character breaks, you can press F3 for the Text To Hash box. Type what you want in the bar, then hit the convert button. This will create a set of numbers for you. This is what you will place in the Event tab for the sound you want.


Character Callouts are when someone like an announcer calls out your character's name when you select them. You can type the following in the Text To Hash bar:
COMMON/MENUS/CHARACTER/AN_name
Note that this says "name", not "charactername." There is a difference. Check the character's herostat. For example, in the case of Black Widow, you can't put "Black Widow" or "blackwidow" -- it won't work. You have to put the name it says on the herostat, which in her case is "blackwidowv." The name is not case-sensitive.

If a character has more than one callout line (not common), you can type the following in the Text To Hash bar instead:
COMMON/MENUS/CHARACTER/AN_name/***RANDOM***/0 (for the first callout)
COMMON/MENUS/CHARACTER/AN_name/***RANDOM***/1 (for the second callout)
COMMON/MENUS/CHARACTER/AN_name/***RANDOM***/2 (for a third callout if any, and so on)
Notice the last number there? Any callouts you have for a character will be heard randomly, but goes here in numerical order.

NOTE: Currently, a fellow admin here named Ceamonks890 does callouts for every single mod, once the mod is officially released. So you can add those using this method. However, do so only with your own personal x_voice file. Do not release the sound file publicly.


Character Breaks are when a character says something just before leaving the character select screen (team stage). You can type the following in the Text To Hash bar:
COMMON/MENUS/CHARACTER/BREAK_name
Again, it says "name", not "charactername." The computer only recognizes the "name" of the character.

If a character has more than one break line, you can type the following in the Text To Hash bar instead:
COMMON/MENUS/CHARACTER/BREAK_name/***RANDOM***/0 (for the first break line)
COMMON/MENUS/CHARACTER/BREAK_name/***RANDOM***/1 (for the second break line)
COMMON/MENUS/CHARACTER/BREAK_name/***RANDOM***/2 (for a third break line if any, and so on)
Again, notice the last number there? Any break lines you have for a character will be heard randomly, but goes here in numerical order.


NOTE:
If you need visuals on learning how to edit your x-voice, Nicaras created a more visual tutorial on this in particular: You can find it here: https://marvelmods.com/forum/index.php/topic,11055.0.html






Lesson Takeaway:
-Use a trusted Youtube to MP3 converter to avoid viruses or malware, or make sure your security system is solid.
-Use an echo effect for your character's Xtreme power attack.
-Sounds must be in .wav format, PCM Uncompressed, at 22050 hz, 16-bit, mono.
-Voice files and master files must match the name given in your herostat's "sounddir." Up to 7 letters long, then _m or _v. Can't rename them once done.
-Test out your sounds by playing the game as your character. Don't be in a rush to release.


March 28, 2020, 08:31PM #38 Last Edit: June 20, 2020, 09:08PM by Outsider
Lesson 20: Project Finish

The finish line is so close that you can taste it! You've officially covered all of the bases and are confident that you pulled it off nicely. So, here's your final lesson, consisting of some simple steps.


STEP 1
Check your character's herostat -- make sure it's correct, uses the correct numbers, has attributes/stats that are not too overpowered, "name" and "sounddir" are correct, etc. Place it as a .txt file, to be opened easily via Notepad.


STEP 2
Play through the first stage -- the Hellicarrier, as your new character mod. Check everything. (1) Make sure your icons are correctly aligned to the correct power. (2) Make sure your character's skins are hex-edited. (3) Make sure your character's sounds are timed perfectly to your character's powers. (4) Make sure the power descriptions are referring to the same power, and check for spelling/grammatical errors.


STEP 3
Set up your character's folders to set up for public release, and put your files in the correct folder.
FOLDERS
actors
data / entities (if any), fightstyles (if any), powerstyles, talents
effects / char/ (whatever you named your character)
hud
models (if any) / bolton, weapons
packages / generated / characters
scripts / common (if any)
sounds / eng / (first letter of sound files) / (second letter of sound files)
textures / loading, ui
ui / models / mannequin

This is very important, because if you put files in the wrong places, then when others play as your mod, there will be problems with it. Set it up the way you set yours up.


STEP 4
Create a .txt file and name it "ReadMe." This is the file where you introduce your mod, mention its features & any pertinent information such as potential bugs or special instructions. This is also where you will write credits to anyone who helped you on the creation of your character. Always give credit where it's due. Also, mention if your mod crashes with another mod in mannequin and/or loading screens. This is REQUIRED.


STEP 5
Create either a compressed (zipped) folder, a 7-Zip file, or a .rar file, and place all the contents of your mod inside. Name that zip or rar whoever the mod is followed by your name. The idea is that when they open it, they can just drag and drop your character mod's contents into their game easily. Upload it to a file storing website such as Mediafire or Box. (I personally use Mediafire.) Copy the link that they give you leading to the file.


STEP 6
On your own thread, create a release post announcing your new character mod. You can mention features, his/her power moveset, potential bugs etc. However, you MUST include a warning saying which mod that your mod will clash with in terms of mannequin and/or loading screens. (And at this point, it will clash with another.) Obviously, include the link to the mod so people can download it.





Congratulations!!!! You have crossed the finish line and have successfully completed your first mod project!!!

Remember that your first mod will always be your hardest. The more you do it, the easier it gets. But, it's still a lot of work, so the Marvel Mods community does give props to those who pull it off. For many dream of creating their own mods, but few actually push themselves to do it, and even fewer see it through to completion. So, give yourself props as well.

BTW, no one is perfect. If someone reports to you that there is a problem with your mod, don't panic. Just listen to what they have to say -- as it could be a legit problem, or something you didn't notice initially. That's alright, we all go through that from time to time -- myself included. If you check the mod yourself and see that the issue reported is valid, then see what you can do to fix the issue. If on the other hand, you don't see the error in question, then the issue is something to do with their game, not your mod. In which case, kindly inform them of such.






Lesson Takeaway:
-Create the necessary folders and place your files in the correct folders.
-Play through the Hellicarrier as your character, and make sure it's all running smoothly.
-Create a ReadMe file that includes pertinent information about the mod and all credits.
-After uploading it and receiving the link, post it to the public with the link to it.
-Place a warning of which other mod that your mod will clash with. It is required, so do not forget to.





I thank you for following these lessons, as I know it was a LOT of information. But now you know all that I have done for many years. I may make it look easy, but it isn't. Hopefully, you've gained an appreciation for each of the modders here, now seeing how it's done. Follow these lessons, and perhaps one day you'll join our ranks. Good luck on any attempted modding projects. This concludes the lessons.

Class dismissed.


Hello, I wanted to thank you for this guide, it really helped me a lot, I speak a little English, my language is Spanish, however I understood everything perfectly, thank you very much for your time.  :punisher_logo:  :bowdown1:

Very busy with uni right now, but soon I'm gonna give this my all. Thank you so much for taking the time to do this. It was so hard to find this sort of info, let alone in one place with such detailed explanation!

Hello Outsiders and all talented mod moderators, I'm new to modding. I am interested in making mods. Can you help solve this problem? When I open pkgb format with XMLBCUI and pkgb gives an error, do I need to download a new version of the program?









Quote from: Putine on August 16, 2021, 02:43AM
When I open pkgb format with XMLBCUI and pkgb gives an error, do I need to download a new version of the program?

Quote from: BaconWizard17 on August 16, 2021, 01:49PM
The special characters in your folder's name are likely what's causing the issue

I can't see the images, but if the special characters are a problem, there is another solution (other than moving/copying the pkgb file to a path with standard characters): https://marvelmods.com/forum/index.php/topic,10969.msg200476.html#msg200476
Scroll down to "Raven Formats Conversion Tools". The tool should be able to do the job with a path that includes special characters (BloodyMares tested it on his machine, using cyrillic letters). If you don't want to install Python, you can use xmlb-compile (the actual program behind XMLBCUI), which is included in the pack too.

The problem is solved, it seemed to me that everything would work out smoothly with Russian characters, I did not even notice that the program does not accept such characters. Anyway, thank you two.