Skip to content

Creating SF2 bosses

Mentrillum edited this page Nov 21, 2022 · 10 revisions

So you really like custom bosses and you just wish to make one of your own, this tutorial has got you covered. Keep in mind this is the bare explanation on how to make bosses, not a super in-depth tutorial on how to make the best boss possible regardless of where its from. This tutorial assumes you have model, textures, and (maybe) sounds ready.

Basic requirements:

Now you'll actually need a few files to make the most basic boss, a list of required programs you need to do the most basic boss editing or making are listed below.

The config itself:

Ok, so to find where to add new bosses, you need to go into the server files tf2/tf/addons/sourcemod/configs/sf2/profiles/. Inside you will find 4 bosses, Slenderman, Rake, Weeping Angels, and Hyper Snatcher. I'll give a quick explanation on what each line does. All bosses must have their own separate config file. If you find a boss config that is severely outdated and doesn't work for SF2 or has multiple bosses bundled in them but somehow works on older patches, head to the Config Rewriter and use it on those configs.

"bossname"

We're gonna use Slenderman as an example, "slenderman" is the profile name of the boss, basically what the plugin reads the profile as, its never a good idea to use special characters or spaces other than underscores. This to should be open and closed with curly brackets. If something goes wrong inside of this boss, then this config will not load.

First functions with quotation marks

config1

So our first function is "name", this determines the actual name of the boss whenever it kills someone on the kill feed or if viewed via admin menu. "type" is the type of the boss, 0 is unusable, 1 is a statue boss, and 2 is the commonly used chaser boss. "model" determines the model directory of the boss, we'll get into how we precache this model later. "model_scale" is not required but determines the model scale of the boss, this will not affect the hitbox of the boss. "eyepos" determines visibility checks for the boss, commonly its 0 0 72 but you can experiment with this value a lot if you want to. "mins" and "maxs" shouldn't be worried about however this pretty much judges where can a boss spawn (or in rare cases set the hitbox), by default a boss' hitbox mins and maxs value is -13 -13 0 and 13 13 72. "maxyawrate" determines the boss' turn speed which does affect visibility but does not affect pathing. "speed" determines how fast the boss runs. "speed_max" is the speed limit for the boss. "acceleration" determines how fast the boss can turn in degrees per second, keep in mind lower values make the bosses look like they are skating on ice. "walkspeed" determines how fast the boss will move whilst walking or being alerted. "walkspeed_max" is the speed limit for the boss when walking. "fov" determines the field of view of the boss in a circle, so 0 is when the boss can't see and 360 is when the boss can see all around itself. By default, bosses are always randomly selected. If you're curious about speed values about bosses, take a look at the chart of all class speeds on the TF2 Wiki here.

Table of common functions

All decimal values means they are float values, any whole numbers are considered integers or boolean values

Function Default Value Description Note Requires a boolean?
"enable_random_selection" 1 Determines if the boss can be randomly selected Set this to 0 if any companions must spawn, or if its for a specific map. You can use enable_random_selection_boxing for boxing maps but make sure enable_random_selection is set to 0 No
"copy" 0 Determines if the boss can make copies of itself N/A No
"copy_max" 10 (Don't ask why) Determines how many copies a boss can have Never go above 10, period. Yes "copy"
"teleport_time_min" 5.0 How long a boss can teleport near a player minimum N/A No
"teleport_time_max" 9.0 How long a boss can teleport near a player maximum N/A No
"teleport_range_min" 325.0 How far a boss can teleport near a player minimum N/A No
"teleport_range_max" 1024.0 How far a boss can teleport near a player maximum N/A No
"teleport_target_rest_period" 15.0 How long a boss can not teleport near a new player once it stopped chasing someone N/A No
"teleport_target_persistency_period" 13.0 How long a boss can teleport near its previous player consistently N/A No
"teleport_target_stress_min" 0.2 Determines the minimum stress level of current teleportation target required before boss forcibly backs off and puts him in a rest period N/A No
"teleport_target_stress_max" 0.9 Determines the maximum stress level of current teleportation target required before boss forcibly backs off and puts him in a rest period N/A No
"teleport_type" 0 Teleport behavior 0 means its a hit and run, 2 means the boss must not be visible at all and must be behind obstruction to teleport away. N/A
"static_on_look" 0 Determines if static should build up on the player if they are looking at the boss N/A No
"static_on_radius" 0 Determines if static should build up on the player if they're close enough to the boss N/A No
"static_rate" 0.0 Determines the rate the boss should build static, lower numbers are quicker 0.0 doesn't do anything Yes "static_on_look" or "static_on_radius"
"static_rate_decay" 0.0 Determines the rate the static should decay, lower numbers are quicker N/A Yes "static_on_look" or "static_on_radius"
"scare_radius" 0.0 How far a player must be in order to perform a scare sound N/A No
"scare_cooldown" 2.0 How long before another scare sound can be played to the same player N/A No
"search_view_distance" 1024.0 How far the boss can see N/A No
"hearing_range" 1024.0 How far the boss can hear players Sounds include footsteps, voices, flashlights, and weapons. No
"alert_gracetime" 0.5 How long a boss must be alerted before they can chase a player N/A No
"alert_duration" 5.0 How long a boss can be alerted N/A No
"chase_duration" 10.0 How long a boss can chase a player N/A No
"chase_persistency_time_init" 5.0 Initial persistency duration when put into chase mode. N/A No
"chase_persistency_time_add_newtarget" 2.0 How much time is added to persistency once a new target is given. N/A No
"chase_persistency_time_add_visible_min" 0.05 How much time is added per 0.1 seconds when the boss sees the player. N/A No
"chase_persistency_time_add_visible_max" 0.15 How much time is added per 0.1 seconds when the boss sees the player. N/A No
"chase_persistency_time_add_attack" 2.0 How much time is added when the boss attacks. N/A No
"stun_enabled" 0 Determines if a boss can be stunned, later you'll see how to implement stun durations N/A No
"stun_health" 0.0 Determines how much stun health a boss has before they can be stunned N/A Yes "stun_enabled"
"stun_cooldown" 3.5 Determines how long a boss cannot be damaged nor stunned for N/A Yes "stun_enabled"
"stun_damage_flashlight_enabled" 0 Determines if a boss can be flashlight stunned This doesn't mean bosses are now invulnerable to melee attacks Yes "stun_enabled"
"stun_damage_flashlight" 0.0 How much damage a flashlight can do to a boss per 0.01 seconds, damage does not stack N/A Yes "stun_enabled" and "stun_damage_flashlight_enabled"
"wake_radius" 0.0 How far the boss must be to the player before instantly chasing them, this ignores search_alert_gracetime N/A No

You can view the documentation on what features you can add to your bosses by looking at the profiles_documentation.cfg found in tf2/tf/addons/sourcemod/configs/sf2/.

Arrays plus downloads

You obviously want to precache your model and allow players to download the textures and resources. To do this, we create whats called an array, this allows the server to read off of set number of files to do something like precache models and download resources. An array looks like this:

"sound_scare_player"
{
        "paths"
        {
	        "1" "slender/arrival/dramatic1b.mp3"
	        "2" "slender/arrival/dramatic1c.mp3"
	        "3" "slender/arrival/dramatic1d.mp3"
        }
}

These arrays tell the plugin to either do a for loop and load everything up or pick a random item from the array to do something like play a sound. Generally you can add more than 1 item to an array, but the only arrays you can't add multiple items are sound_chase_music, sound_chase_visible, sound_alert_music, sound_20dollars_music, sound_static, sound_static_loop_local, sound_static_shake_local, and sound_music. For the remaining arrays you can add more than 1 item onto it.

All configs must precache any models used, such as the boss model itself, proxy models, or key drops whenever you kill a Boxing boss. If you do not precache any of the models used for the boss, the server will instantly crash. To do this, we need to create an array called "mod_precache" and copy the mdl directories onto each item, heres an example:

"mod_precache"
{
	"1"	"models/bossmodel.mdl"
}

Now in order to download all of the model files (I.E phy, sw.vtx, dx80.vtx, dx90.vtx, mdl, vvd) we need a new array called mod_download, this will download all of the model files based on the directory you set it to. At the moment if any one of these files don't exist, it'll print out an error to the server log files and console saying a file doesn't exist, but in the next update this shouldn't be an issue. Again, example:

"mod_download"
{
	"1"	"models/bossmodel"
}

Lets say you have some textures on a model that aren't from TF2 or HL2 by default, you need a mat_download array, which will do the same as mod_download but download VTF and VMT files at the same time, again if either of these files don't exist, it'll print out a message in the console saying one of these files don't exist. Another example:

"mat_download"
{
	"1"	"materials/models/boss/texture1"
        "2"	"materials/models/boss/texture2"
        "3"	"materials/models/boss/texture3"
}

The last important array is the download array, this basically tells the server to download any file that can't be caught by the mod_download or mat_download arrays, this is useful for VMT files that have differing names to a VTF file and vice versa, or even trying to download normal maps and specular maps. I wouldn't think about what they are. And heres a last example:

"download"
{
	"1"	"materials/models/boss/texture1_n.vtf"
        "2"	"materials/models/boss/texture2_n.vtf"
        "3"	"materials/models/boss/texture3_n.vtf"
        "4"	"materials/models/boss/texture4.vmt"
}

All sound file arrays should NEVER start with sound/, as the game automatically reads sounds files from sound/, if you do put that in one of your sound items, then it will result in a download error.

If under any circumstances the directories for model files, material files, texture files, or sound files are wrong or don't exist, the server will print out an error saying a specific file doesn't exist and you should either fix this file or remove it from the array. You can also find these in the log files under tf2/tf/addons/sourcemod/logs/sf2. If a sound doesn't exist, it'll just precache the sound but not allow players to download it, if a model is missing, it'll just precache the model but not allow players to download the model, if textures or materials are missing, players won't download them. Its critical to get the directories right when releasing bosses to the public or submitting them for other servers.

Slender sounds

Though sounds are optional, here are all of the usable sound arrays:

  • sound_idle - An array of sounds that'll play whenever the boss is idle

  • sound_alertofenemy - An array of sounds that'll play whenever the boss is alert

  • sound_chasingenemy - An array of sounds that'll play whenever the boss is chasing a player

  • sound_attackenemy - An array of sounds that'll play whenever the boss attacks a player

  • sound_hitenemy - An array of sounds that'll play whenever the boss hits a player

  • sound_missenemy - An array of sounds that'll play whenever the boss misses the player with an attack

Sound cooldowns

Sometimes we want our boss to have a cooldown of when they can emit voices (I.E idle sounds, alert sounds, and chase sounds), luckily theres a few functions you can use and its really easy to set up. To make a cooldown function, get the sound array name you want and make 2 name instances with the addition of cooldown_min and cooldown_max each. Then you can set the values to whatever you want. The sounds you can use are as followed:

  • sound_idle
  • sound_alertofenemy
  • sound_chasingenemy
  • sound_chaseenemyinitial
  • sound_attackenemy
  • sound_stun
  • sound_attackenemy
  • sound_attack_killed (Not sound_attack_killed_all and sound_attack_killed_client)

An example can be shown here:

	"sound_idle"
	{
		"cooldown_min" "5.0"
		"cooldown_max" "7.0"
		
		"paths"
		{
			"1" "slender/bosssound.mp3"
		}
	}
	
	"sound_alertofenemy"
	{
		"cooldown_min" "5.0"
		"cooldown_max" "7.0"
		
		"paths"
		{
			"1" "slender/bosssound.mp3"
		}
	}

	"sound_chasingenemy"
	{
		"cooldown_min" "5.0"
		"cooldown_max" "7.0"
		
		"paths"
		{
			"1" "slender/bosssound.mp3"
		}
	}

All cooldown min and max values are set to 1.5 by default.

Other sub key values include "volume" which determines all sounds volume (and yes, you can go above 1.0), "channel" which determines the sound channel, "level" which determines how far a sound can reach, "flags" which determine the sound flags (no one is sure what this could be used for), "pitch" which determines all sounds' pitch, "pitch_random_min" and "pitch_random_max" which randomly pick a pitch between the two values, "radius" (exclusive for music themes) determines how far a music can reach a player, and "chance" (voices exclusive) which determines the chance a sound section will be used.

Animations

What serious boss is without animations? I don't know, Slenderman. But do you want a boss to look like Slenderman every time? I don't think so. So in 1.7.5 and above, its needed to use the new animation system, which determines multiple animations can be played based on the boss' state whether that'd be idling, walking, running, being stunned, or attacking (This is based off the attack number). There really is no limit on how many animations can be used aside from the attacks which is 32.

  • idle
  • walk
  • walkalert (Requires more key values to use this)
  • run
  • attack
  • stun
  • rage (The boss must be a Boxing boss and must be on a boxing map to work)
  • chaseinitial (Requires more key values to use this)
  • shoot (Requires a key value to use this)
  • spawn (Requires a key value)
  • fleestart (The boss must be a Boxing boss and must be on a boxing map to work, also requires more key values)
  • heal (Same as fleestart)
  • deathcam
  • crawlwalk (Requires key values)
  • crawlrun (Same as crawlwalk)

The code follows as this:

"animations"
{
	"idle"
	{
		"1"
		{
			"name" "idle"
			"playbackrate" "1.0"
		}

		"2"
		{
			"name" "idle_angry"
			"playbackrate" "1.0"
		}
	}

	"walk"
	{
		"1"
		{
			"name" "walk_all"
			"playbackrate" "1.5"
		}
	}

	"run"
	{
		"1"
		{
			"name" "Run"
			"playbackrate" "1.5"
		}
	}

	"stun"
	{
		"1"
		{
			"name" "BR2_Roar"
			"playbackrate" "0.75"
			"duration" "1.5"
		}
	}

	"attack"
	{
		"1" 
		{
			"name"	"Melee"
			"playbackrate"	"1.5"
		}

		"2"
		{
			"name"	"BR2_Attack"
			"playbackrate"	"2.15"
		}
	}
}

Adding other sections should be pretty easy, just follow the same format as the other sound sections. Following this, if your model has 9-way animations (I.E the TF2 character's run animation), you can very well use that even on Windows operating systems, just don't go overboard with FF2 bosses.

Certain animation sections (those being "stun", "chaseinitial", "rage", "spawn", "fleestart", and "heal") require the "duration" key value to determine how long the animation will take before going out of one of these states.

Boss attacking

Maybe you want your boss to attack, and if you do, this section shows you how to achieve that. So we need to create a new data panel that is based off attacks, each attack index is based on the attack animation index, so if its attack index 1, it runs off attack animation index 1, if its 4, it'll do attack animation 4, and so on and so forth. The maximum number of attacks a boss can have is 32, and this way of making attacks is needed after 1.7.5.

"attacks"
{
	"1"
	{
		"delay"	"0.0"
		"range"	"100.0"
		"begin_range" "75" // Closer Attacks have priority.
		"damage" "5.0"
		"damagetype" "1048576"
		"punchvel" "60 60 1"
		"duration" "0.1"
		"spread" "45"
		"cooldown" "1.0" // Unless they are on cooldown.
	}

	"2"
	{
		"delay"	"0.10"
		"range"	"200.0"
		"begin_range" "100"
		"damage" "10.0"
		"damagetype" "1048576"
		"punchvel" "60 60 1"
		"duration" "0.60"
		"spread" "90"
	}	
}

One of these functions you can use is attack repeating, all you have to do is set the delay you want then multiply the delay by however many times you want the boss to hit the player plus the initial "delay" and put the result in "duration", so if you want the boss to hit the player 3 times, multiply "delay" by 3, add "delay" to the result and put the result in "duration".

To figure out "damagetype", see the Valve Developer Wiki for more information. To combine damage types (for instance crit explosive damage), add the bit values together and put the result in "damagetype".

Kill cam/kill on touch bosses

Maybe you want a boss to kill on touch, or have a death cam whenever the boss touches you or you receive enough static. Another chart can be seen to make a boss like that

Function Default Value Description Note
"kill_radius" 0.0 How far the boss can kill you on touch N/A
"death_cam" 0 Determines if the boss should use a death cam N/A
"death_cam_pos" 0 0 0 Determines what position the player should look at based on where the boss was whenever it killed the player Doesn't have to be 0 0 0, you can make the player look at the face of a boss if you wanted to
"death_cam_overlay" 0 Determines if an overlay should be used whenever a boss has a death cam N/A
"death_cam_time_overlay_start" 0.0 Determines how long it should take before the overlay shows N/A
"death_cam_time_death" 0.0 Determines how long the death cam lasts If the boss is a hit and run boss, be extremely careful with long death cams, otherwise the player will just be stuck there until the timer runs out
"death_cam_play_scare_sound" 0 Determines if the scare sound should be played whenever the death cam starts N/A
"sound_player_deathcam" Empty array An array that determines the sounds a boss should play to the player whenever the deathcam starts sound_player_deathcam_all does the same thing, but everyone can hear it
"overlay_player_death" Empty array An array that determines the materials a boss should show to the player whenever a deathcam start This does not get automatically downloaded, you have to put it in mat_download as well

Hit and run jumpscare values

With hit and run bosses, you can allow them to have an overlay whenever they teleport behind you, or just play a sound, or both. Again, chart of values.

Function Default Value Description Note
"jumpscare" 0 Determines if the hit and run boss should utilize a jumpscare overlay and sound N/A
"jumpscare_distance" 0.0 How far a boss must be from the player in order for the overlay to start The boss must be visible as well
"jumpscare_duration" 0.0 How long the jumpscare overlay lasts for N/A
"jumpscare_cooldown" 0.0 How long a jumpscare must not be played for from the exact boss N/A
"overlay_jumpscare" Empty array An array that determines the materials a boss should show to the player whenever the jumpscare starts This does not get automatically downloaded, you have to put it in mat_download as well
"sound_jumpscare" Empty array An array that determines the sounds a boss should play to the player whenever the jumpscare starts N/A

Boss example

Using all of this for a basic boss, you could end out with a template like this:

"bossprofilename"
{
	"name" "Boss name"
	"type" "2"
	"speed" "300.0"
	"acceleration" "5000.0"
	"speed_max" "400.0"
	"walkspeed" "50.0"
	"walkspeed_max"	"100.0"
	"model"	"models/bossmodel.mdl"
	"model_scale" "1.0"
	"eye_pos" "0 0 72"
	"mins" "-16 -16 0"
	"maxs" "16 16 64"
	"fov" "140"

	"enable_random_selection" "1"

	"copy" "1"
	"copy_max" "1"

	"teleport_time_min" "5.0"
	"teleport_time_max" "9.0"
	"teleport_range_min" "325.0"
	"teleport_range_max" "1024.0"
	"teleport_target_rest_period" "15.0"
	"teleport_target_persistency_period" "13.0"
	"teleport_target_stress_min" "0.2"
	"teleport_target_stress_max" "0.9"
	"teleport_type"	"2"

	"static_on_look" "0"
	"static_on_look_gracetime" "1.0"
	"static_on_radius" "0"
	"static_rate" "0.75"
	"static_rate_decay" "0.4"
	"static_radius"	"200.0"
	"scare_radius" "400.0"
	"scare_cooldown" "4.0"

	"search_view_distance" "1024.0"
	"hearing_radius" "1024.0"
	"alert_gracetime" "1.0"
	"alert_duration" "5.0"
	"chase_duration" "10.0"
	"chase_persistency_time_init" "5.0"
	"chase_persistency_time_add_newtarget" "2.0"
	"chase_persistency_time_add_visible_min" "0.05"
	"chase_persistency_time_add_visible_max" "0.15"
	"chase_persistency_time_add_attack" "2.0"

	"wake_radius" "150.0"

	"wander_move" "1"

	"idle_lifetime"	"8.0"

	"stun_enabled" "1"
	"stun_health" "100"
	"stun_cooldown" "3.5"
		
	"attacks"
	{
		"1"
		{
			"delay"	"0.11"
			"range"	"290.0"
			"begin_range" "100"
			"damage" "20.0"
			"damagetype" "1048576"
			"punchvel" "5 5 5"
			"duration" "0.35"
			"spread" "60"
		}	
	}

	"animations"
	{
		"idle"
		{
			"1"
			{
				"name" "idle"
				"playbackrate" "1.0"
			}
		}

		"walk"
		{
			"1"
			{
				"name" "walk"
				"playbackrate" "1.0"
			}
		}

		"run"
		{
			"1"
			{
				"name" "run"
				"playbackrate" "1.0"
			}
		}

		"stun"
		{
			"1"
			{
				"name" "stun"
				"playbackrate" "1.0"
				"duration" "1.5"
			}
		}

		"attack"
		{
			"1"
			{
				"name"	"attack"
				"playbackrate"	"1.0"
			}
		}
	}

	"mod_precache"
	{
		"1" "models/bossmodel.mdl"
	}

	"mod_download"
	{
		"1" "models/bossmodel"
	}

	"mat_download"
	{
		"1" "materials/models/bossmodel/bosstexture"
	}

	"download"
	{
		"1" "materials/models/bossmodel/bosstexture_n.vtf"
		"2" "materials/models/bossmodel/bosstexture_2.vmt"
	}

	"sound_alert_music"
	{
		"paths"
		{
			"1" "slender/bosssounds/bosssearch.wav"
		}
	}

	"sound_chase_music"
	{
		"paths"
		{
			"1" "slender/bosssounds/bosschase.wav"
		}
	}

	"sound_chase_visible"
	{
		"paths"
		{
			"1" "slender/bosssounds/bossvisible.wav"
		}
	}

	"sound_static"
	{
		"paths"
		{
			"1" "slender/bosssounds/bossstatic.wav"
		}
	}

	"sound_scare_player"
	{
		"paths"
		{
			"1" "slender/bosssounds/bossscare.wav"
		}
	}

	"sound_spawn_all"
	{
		"paths"
		{
			"1" "slender/bosssounds/bossintro.wav"
		}
	}

	"sound_idle"
	{
		"cooldown_min" "1.5"
		"cooldown_max" "3.5"
		"volume" "1.0"

		"paths"
		{
			"1" "slender/bosssounds/bossidle.wav"
		}
	}

	"sound_alertofenemy"
	{
		"cooldown_min" "1.5"
		"cooldown_max" "3.5"
		"volume" "1.0"

		"paths"
		{
			"1" "slender/bosssounds/bossalert.wav"
		}
	}

	"sound_chaseenemyinitial"
	{
		"paths"
		{
			"1" "slender/bosssounds/bosschaseinit.wav"
		}
	}

	"sound_chasingenemy"
	{
		"cooldown_min" "1.0"
		"cooldown_max" "1.0"
		"volume" "1.0"

		"paths"
		{
			"1" "slender/bosssounds/bosschasing.wav"
		}
	}

	"sound_stun"
	{
		"paths"
		{
			"1" "slender/bosssounds/bossstun.wav"
		}
	}

	"sound_attackenemy"
	{
		"paths"
		{
			"1" "slender/bosssounds/bossattack.wav"
		}
	}
		
	"sound_attack_killed"
	{
		"paths"
		{
			"1" "slender/bosssounds/bosskill.wav"
		}
	}
	"effects"
	{
		"light_name"
		{
			"type" "dynamiclight"
			"event"	"constant"
			"origin" "0 0 65"
			"angles" "0 0 0"

			"rendercolor" "100 255 255 255"
			"distance" "120.0"
			"brightness" "6"
			"cone" "-1"
			"spawnflags" "1"
		}
	}
}

Some of the stuff not mentioned here can be found in the profiles_documentation.

Looping WAV files

Its no secret 99% of bosses uses looping chase and alert themes, and maybe visible themes, or maybe looping music themes. So this part explains the bare bones on how to get compressed looping themes. You need GoldWave by the way.

To start off, we're gonna need the theme we're gonna loop, when you know your theme loops perfectly, you can start adding cue points. To add a cue point, go to the top of the window and look for the button called Cues which should be located just next to the Help button and looks like this.

cues

If you want to preview looping themes, right click on the play buttons and check Loop. Each play button has their own default setting, the first one loops through everything regardless of selected, the second one only loops through the selected parts of the audio, and the last one kinda does the same as the first one, expect once you hit this whilst the audio is paused, it will continue from that point. If you want to change the settings of one of these play buttons, right click one of them and choose the option.

Once inside of the cue point menu, press New... and give the cue point a name. The cool thing about cue points is they don't have to start at 0 seconds, they can start anywhere, as long as they loop perfectly or pretty well. To get the cue point where you want to, either you can type the position in, or you can set the start selection to where you want, the selection is basically the areas that have a blue background behind the wave form, unselected audio has a gray background and the audio wave form is darkened.

Now all you need is one cue point, if the cue point doesn't start where you want it, press the Start button in the Edit Cue Point menu, and it will snap it to where the start of the audio selection is. We commonly name the cue point loop, so go ahead and input loop as the Name:. After thats done, press OK, close out of the Cue Points menu, and give it a listen if you want to make sure.

menu

loop

Once you're happy with the theme, save it as a WAV file, but before you save it, go to Attributes... next to the Save button, scroll down until you see Microsoft ADPCM 44,100 kHz, 4 Bit, Stereo, 355 kbps and selected that. This will compress the WAV file down by around 60%. MP3s do not need this compression method. The difference between using WAVs for boss sounds and not themes is they follow the boss and not stay in one place unlike MP3s. At the end of the day, making boss sounds between MP3s or WAVs are completely up to you. Use this compression method for all WAV files.

For MP3s or WAVs however, sound files must have a sampling frequency of either 44,100, 22,050, or 11,025. Anything not those three values will result in the sound not working in game.

Conclusion

More info should come in the future, but for now this is the basic stuff on how to make a working boss for your own server, take a look at profiles_documentation in the config files if you want a deep explanation of every SF2 Modified function. Alternatively, check out the documentation by Glubbable if you want to make your boss exclusive to Glub's (this is severely outdated though from what I've seen). Have fun.

-Mentrillum