How to test an MVM map without other players

HQDefault

...what
aa
Aug 6, 2014
1,056
535
After looking at PyroDevil's MVM: storage map, I felt kinda bad for him because it's really hard to get MVM maps tested, and they have no bot support.

So, I came up with the next best alternative. After a lot of testing, this is the combination of cheats you need to put in:
sv_cheats 1 (obviously)
addcond 56 (gives infinite crits)
addcond 72 (gives minimizer magic effect)

as well as currency_give, so whenever a wave is over, you can multiply your income by 6.

If you get your upgrades maxed out, feel free to add random cheats within reason.

Now, don't get me wrong, this is obviously not a particularly accurate test, but it was the closest simulation of making one player have the power of 6 as I can. I tested it on Mannworks, it was a little harder than a regular MVM match, but it got the job done. Hope this helps.
 

Toomai

L3: Member
Apr 14, 2011
129
144
There's more useful commands than just giving yourself buffs:
  • "tf_mvm_jump_to_wave x" will skip to wave number x.
  • "tf_mvm_min_players_to_start 3" will let you start easier if you set it to 1, I think.
  • "tf_mvm_tank_kill" ...probably does what it says on the can.
  • "tf_populator_damage_multiplier" and "tf_populator_health_multiplier" let you set how much damage all the bots and tanks can deal and take (default 1.0). Setting them both to 0.1667 or something should simulate a 6-player round.
 

HQDefault

...what
aa
Aug 6, 2014
1,056
535
There's more useful commands than just giving yourself buffs:
  • "tf_mvm_jump_to_wave x" will skip to wave number x.
  • "tf_mvm_min_players_to_start 3" will let you start easier if you set it to 1, I think.
  • "tf_mvm_tank_kill" ...probably does what it says on the can.
  • "tf_populator_damage_multiplier" and "tf_populator_health_multiplier" let you set how much damage all the bots and tanks can deal and take (default 1.0). Setting them both to 0.1667 or something should simulate a 6-player round.

The reason I did the minimizer magic addcond instead of a damage reduction towards the robots was because 1 player obviously can't be everywhere at once, so it makes things A LOT harder. Practically impossible, if you ask me.
 

UKCS-Alias

Mann vs Machine... or... Mapper vs Meta?
aa
Sep 8, 2008
1,264
816
You can allways just use a custom upgrades file. Its a bit harder to perform, but it allows you to get a huge speedboost, a huge healthboost, alot more dps and so on. And instead of each upgrade costing 200,250 or 400 you can all just make it 10. It allows you go get even better weapons. And for example as engineer you can just give yourself 6 minisentries.

Still, nothing goes above player testing. So thats usualy the thing i just do (which is easy if you can run a server yourself).
 

HQDefault

...what
aa
Aug 6, 2014
1,056
535
You can allways just use a custom upgrades file. Its a bit harder to perform, but it allows you to get a huge speedboost, a huge healthboost, alot more dps and so on. And instead of each upgrade costing 200,250 or 400 you can all just make it 10. It allows you go get even better weapons. And for example as engineer you can just give yourself 6 minisentries.

Still, nothing goes above player testing. So thats usualy the thing i just do (which is easy if you can run a server yourself).

And how would one go about doing this?
 

UKCS-Alias

Mann vs Machine... or... Mapper vs Meta?
aa
Sep 8, 2008
1,264
816
You can get the upgrades textfile from the vpk files of tf2 itself (scripts/items/upgrades.txt). You just place that one in the same location in the normal directories and rename the txt file.

i cant realy remember the command but i think you were able to activate the file using:
sv_cheats 1
ent_fire gamerules SetCustomUpgradesFile "scripts/items/customupgradesfile.txt"
map mapname

(not sure if reloading the map is needed).

Anyway, here is an example of an upgrades file i created that would allow more money usage (currency_give is ideal to test this). Valve however never realy made it possible to load it without sv_cheats and using a popfile. So never realy bothered to continue on it. Its still ideal to know things like these for testing if hosting servers is something you cant do.

Note, at 17.3 i edited the max number of minisentries to be 2. (and i added alot more of upgrading anyway).
Code:
// Assign attribs to groups
// Assign items to groups

// upgrades.txt
"upgrades"
{
	// ITEM UPGRADES
	// Attributes generated by these will be attached to the chosen item.
	// This means the player can potentially invest in the same attribute on multiple items. 
	// Best to not use passives that affect player stats, because they'll stack on the player.
	"ItemUpgrades"
	{
		"1"
		{
			// Damage - Normal
			"attribute"	"damage bonus"		// attrib to hook
			"icon"		"achievements/tf_demoman_kill_x_with_directpipe"
			"increment"	"0.25"				// percent
			"cap"		"6.0"				// percent
			"cost"		"400"				// first tier points/credits cost
		}
		"1.1"
		{
			// Damage - Low
			"attribute"	"damage bonus"
			"icon"		"achievements/tf_demoman_kill_x_with_directpipe"
			"increment"	"0.25"
			"cap"		"4"
			"cost"		"500"
			"quality"	"1"					// allows varying usage cases without cloning attributes
											// 1 = low, 2 = normal (default), 3 = high
		}
		"2"
		{
			// Fire Speed - Normal
			"attribute"	"fire rate bonus"	// attrib to hook
			"icon"		"achievements/tf_scout_dodge_damage"
			"increment"	"-0.1"				// percent
			"cap"		"0.3"				// percent
			"cost"		"200"				// first tier points/credits cost
		}
		"2.1"
		{
			// Fire Speed - Expensive
			"attribute"	"fire rate bonus"	// attrib to hook
			"icon"		"achievements/tf_scout_dodge_damage"
			"increment"	"-0.1"				// percent
			"cap"		"0.4"				// percent
			"cost"		"250"
			"quality"	"1"					// allows varying usage cases without cloning attributes
											// 1 = low, 2 = normal (default), 3 = high
		}
		"2.1"
		{
			"attribute"	"melee attack rate bonus"	// attrib to hook
			"icon"		"mvm/upgradeicons/upgrade_attackspeed"
			"increment"	"-0.1"				// percent
			"cap"		"0.3"				// percent
			"cost"		"200"				// first tier points/credits cost
		}
		"3"
		{
			"attribute"	"clip size bonus upgrade"	// attrib to hook
			"icon"		"achievements/tf_scout_destroy_sentry_with_pistol"
			"increment"	"0.5"				// percent
			"cap"		"5.0"				// percent
			"cost"		"400"				// first tier points/credits cost
		}
		"3.1"
		{
			"attribute"	"maxammo primary increased"	// attrib to hook
			"icon"		"achievements/tf_heavy_assist_grind"
			"increment"	"0.5"				// percent
			"cap"		"5"				// percent
			"cost"		"250"				// first tier points/credits cost
		}
		"3.2"
		{
			"attribute"	"maxammo secondary increased"	// attrib to hook
			"icon"		"achievements/tf_heavy_assist_grind"
			"increment"	"0.5"				// percent
			"cap"		"2.5"				// percent
			"cost"		"250"				// first tier points/credits cost
		}
		"3.3"
		{
			"attribute"	"maxammo grenades1 increased"	// attrib to hook
			"icon"		"achievements/tf_heavy_assist_grind"
			"increment"	"1.0"				// percent
			"cap"		"7.0"				// percent
			"cost"		"100"				// first tier points/credits cost
		}
		"3.4"
		{
			"attribute"	"maxammo metal increased"	// attrib to hook
			"icon"		"mvm/upgradeicons/upgrade_metalcapacity"
			"increment"	"0.5"				// percent
			"cap"		"5.0"				// percent
			"cost"		"200"				// first tier points/credits cost
		}
		"4"
		{
			"attribute"	"bleeding duration"
			"icon"		"achievements/tf_sniper_kill_invis_spy"
			"increment"	"5"				
			"cap"		"25"				
			"cost"		"200"
		}
		"6"
		{
			"attribute"	"heal on kill"
			"icon"		"achievements/tf_medic_kill_healed_spy"
			"increment"	"10"				
			"cap"		"100"				
			"cost"		"100"
		}
		"7"
		{
			"attribute"	"projectile penetration"
			"icon"		"achievements/tf_sniper_headshot_post_invuln"
			"increment"	"1"				// binary on/off
			"cap"		"1"				// 
			"cost"		"400"
		}
		"7.1"
		{
			// For Heavy
			"attribute"	"projectile penetration heavy"
			"icon"		"achievements/tf_sniper_headshot_post_invuln"
			"increment"	"1"				// binary on/off
			"cap"		"1"				// 
			"cost"		"500"
			"quality"	"1"				// 1 = low, 2 = normal (default), 3 = high
		}
		"8"
		{
			"attribute"	"critboost"
			"icon"		"mvm/upgradeicons/bottle_kritz"
			"increment"	"1"				// binary on/off
			"cap"		"1"				// 
			"cost"		"100"
			"ui_group"	"2"				// 2 = power up bottle
		}
		"9"
		{
			"attribute"	"ubercharge"
			"icon"		"mvm/upgradeicons/bottle_ubercharge"
			"increment"	"1"				// binary on/off
			"cap"		"1"				// 
			"cost"		"75"
			"ui_group"	"2"				// 2 = power up bottle
		}
		"10"
		{
			"attribute"	"bidirectional teleport"
			"icon"		"mvm/upgradeicons/upgrade_teleporter"
			"increment"	"1"				// binary on/off
			"cap"		"1"				// 
			"cost"		"250"
		}
		"12"
		{
			"attribute"	"SRifle Charge rate increased"
			"icon"		"achievements/tf_sniper_kill_at_roundstart"
			"increment"	"0.25"
			"cap"		"3.0"
			"cost"		"200"
		}
		"13"
		{
			"attribute"	"effect bar recharge rate increased"
			"icon"		"achievements/tf_win_well_minimumtime"
			"increment"	"-0.15"
			"cap"		"0.1"
			"cost"		"250"
		}
// 		"14"
// 		{
// 			"attribute"	"heal rate bonus"
// 			"icon"		"achievements/tf_heavy_heal_medikits"
// 			"increment"	"0.25"
// 			"cap"		"2.0"
// 			"cost"		"250"
// 		}
		"15"
		{
			"attribute"	"ubercharge rate bonus"
			"icon"		"achievements/tf_medic_assist_demoman"
			"increment"	"0.1"
			"cap"		"2.0"
			"cost"		"300"
		}
		"16"
		{
			"attribute" "engy building health bonus"
			"icon"		"achievements/tf_engineer_repair_sentry_w_medic"
			"increment"	"1.0"
			"cap"		"10.0"
			"cost"		"400"
		}
		"17"
		{
			"attribute" "engy sentry fire rate increased"
			"icon"		"achievements/tf_engineer_sentry_kill_lifetime_grind"
			"increment"	"-0.1"
			"cap"		"0.3"
			"cost"		"250"
		}
		"17.2"
		{
			"attribute" "engy dispenser radius increased"
			"icon"		"achievements/tf_engineer_dispenser_heal_grind"
			"increment"	"1.0"
			"cap"		"10.0"
			"cost"		"125"
		}
		"17.3"
		{
			"attribute"	"engy disposable sentries"
			"icon"		"achievements/tf_engineer_freezecam_sentry"
			"increment"	"1"
			"cap"		"2"
			"cost"		"500"
		}
		"18"
		{
			"attribute" "airblast pushback scale"
			"icon"		"achievements/tf_soldier_crouch_rocket_jump"
			"increment"	"0.25"
			"cap"		"5.0"
			"cost"		"100"
		}
		"19"
		{
			"attribute"	"recall"
			"icon"		"mvm/upgradeicons/bottle_teleport"
			"increment"	"1"				// binary on/off
			"cap"		"1"				// 
			"cost"		"10"
			"ui_group"	"2"				// 2 = power up bottle
		}
		"20"
		{
			"attribute"	"applies snare effect"
			"icon"		"achievements/tf_sniper_jarate_extinguish"
			"increment"	"-0.35"			// only 1 increment
			"cap"		"0.65"			// 
			"cost"		"200"
		}
		"21"
		{
			"attribute"	"charge recharge rate increased"
			"icon"		"achievements/tf_demoman_charge_kill"
			"increment"	"1.0"
			"cap"		"10.0"
			"cost"		"150"
		}
		"24"
		{
			"attribute"	"uber duration bonus"
			"icon"		"mvm/upgradeicons/upgrade_medigun_duration"
			"increment"	"2"
			"cap"		"10.0"
			"cost"		"250"
		}
		"25"
		{
			"attribute"	"refill_ammo"
			"icon"		"mvm/upgradeicons/bottle_ammoresupply"
			"increment"	"1"				// binary on/off
			"cap"		"1"				// 
			"cost"		"25"
			"ui_group"	"2"				// 2 = power up bottle
		}
		"26"
		{
			"attribute"	"weapon burn dmg increased"
			"icon"		"achievements/tf_pyro_burn_spies_as_you"
			"increment"	"0.25"				// percent
			"cap"		"5.0"				// percent
			"cost"		"150"				// first tier points/credits cost
		}
		"27"
		{
			"attribute"	"weapon burn time increased"
			"icon"		"mvm/upgradeicons/upgrade_burn_duration"
			"increment"	"0.25"				// percent
			"cap"		"2.0"				// percent
			"cost"		"100"				// first tier points/credits cost
		}
		"28"
		{
			"attribute"	"increase buff duration"
			"icon"		"achievements/tf_soldier_buff_teammates"
			"increment"	"0.25"				// percent
			"cap"		"5"				// percent
			"cost"		"250"				// first tier points/credits cost
		}
		"30"
		{
			"attribute"	"Projectile speed increased"	// attrib to hook
			"icon"		"achievements/tf_soldier_kill_airborne_target_while_airborne"
			"increment"	"0.25"				// percent
			"cap"		"3.0"				// percent
			"cost"		"200"				// first tier points/credits cost
		}
		"31"
		{
			"attribute"	"building instant upgrade"
			"icon"		"mvm/upgradeicons/bottle_instantbuild"
			"increment"	"1"				// binary on/off
			"cap"		"1"				// 
			"cost"		"50"
			"ui_group"	"2"				// 2 = power up bottle
		}
		"32"
		{
			"attribute"	"faster reload rate"	// attrib to hook
			"icon"		"achievements/tf_heavy_survive_crocket"
			"increment"	"-0.2"				// percent
			"cap"		"0.2"			// percent
			"cost"		"250"				// first tier points/credits cost
		}
		"33"
		{
			"attribute"	"critboost on kill"	// attrib to hook
			"icon"		"achievements/tf_soldier_kill_spy_killer"
			"increment"	"2"				
			"cap"		"4"			
			"cost"		"350"
		}
		"34"
		{
			"attribute"	"robo sapper"
			"icon"		"achievements/tf_engineer_remove_sapper_long_dist"
			"increment"	"1"
			"cap"		"3"
			"cost"		"350"
		}
		"35"
		{
			"attribute"	"attack projectiles"
			"icon"		"achievements/tf_soldier_kill_sniper_while_dead"
			"increment"	"1"
			"cap"		"2"
			"cost"		"400"
		}
		"36"
		{
			"attribute"	"generate rage on damage"
			"icon"		"achievements/tf_scout_first_blood"
			"increment"	"1"
			"cap"		"3"
			"cost"		"350"
		}
		"37"
		{
			"attribute"	"explosive sniper shot"
			"icon"		"achievements/tf_demoman_kill_x_with_directpipe"
			"increment"	"1"
			"cap"		"3"
			"cost"		"350"
		}
		"38"
		{
			"attribute" "armor piercing"
			"icon"		"achievements/tf_get_turretkills"
			"increment"	"25"
			"cap"		"100"
			"cost"		"400"	
		}
		"40"
		{
			"attribute"	"mark for death"
			"icon"		"achievements/tf_scout_stun_scout_with_their_ball"
			"increment"	"1"				// percent
			"cap"		"1"				// percent
			"cost"		"500"			// first tier points/credits cost
		}
		"41"
		{
			"attribute"	"clip size upgrade atomic"
			"icon"		"achievements/tf_scout_destroy_sentry_with_pistol"
			"increment"	"2"
			"cap"		"10.0"
			"cost"		"400"
		}
		"43"
		{
			"attribute"	"canteen specialist"
			"icon"		"achievements/tf_medic_charge_blocker"
			"increment"	"1"
			"cap"		"5"
			"cost"		"200"
		}
		"44"
		{
			"attribute"	"overheal expert"
			"icon"		"achievements/tf_scout_assist_medic"
			"increment"	"1"
			"cap"		"10"
			"cost"		"250"
		}
		"46"
		{
			"attribute"	"mad milk syringes"
			"icon"		"achievements/tf_scout_assist_medic"
			"increment"	"1"
			"cap"		"1"
			"cost"		"200"
		}
		"47"
		{
			"attribute"	"rocket specialist"
			"icon"		"achievements/tf_soldier_kill_airborne_target_while_airborne"
			"increment"	"1"
			"cap"		"4"
			"cost"		"400"
		}
		"48"
		{
			"attribute"	"healing mastery"
			"icon"		"achievements/tf_heavy_heal_medikits"
			"increment"	"1"
			"cap"		"10"
			"cost"		"250"
		}
		"49"
		{
			"attribute"	"generate rage on heal"	// Projectile Shield
			"icon"		"achievements/tf_demoman_kill_x_defending"
			"increment"	"1"
			"cap"		"2"
			"cost"		"300"
		}
		"50"
		{
			"attribute"	"damage force reduction"
			"icon"		"achievements/tf_soldier_shoot_mult_crits"
			"increment"	"-0.3"
			"cap"		"0.1"
			"cost"		"100"
		}
	}
	
	// PLAYER UPGRADES
	// Attributes generated by these will be attached to the player.
	"PlayerUpgrades"
	{
		"1"
		{
			"attribute"	"dmg taken from fire reduced"
			"icon"		"mvm/upgradeicons/upgrade_resistance_fire"
			"increment"	"-0.1"			// 15% reduction
			"cap"		"0.1"			// 75% reduction max (.41 because of float rounding when comparing)
			"cost"		"150"
		}
		"2"
		{
			"attribute"	"dmg taken from blast reduced"
			"icon"		"achievements/tf_demoman_kill_x_heavies_fullhp_onedet"
			"increment"	"-0.1"
			"cap"		"0.1"
			"cost"		"300"
		}
		"3"
		{
			"attribute"	"dmg taken from bullets reduced"
			"icon"		"mvm/upgradeicons/upgrade_resistance_bullet"
			"increment"	"-0.1"
			"cap"		"0.1"
			"cost"		"300"
		}
		"4"
		{
			"attribute"	"dmg taken from crit reduced"
			"icon"		"achievements/tf_soldier_shoot_mult_crits"
			"increment"	"-0.1"
			"cap"		"0.1"
			"cost"		"100"
		}
		"5"
		{
			"attribute"	"move speed bonus"
			"icon"		"achievements/tf_scout_long_distance_runner"
			"increment"	"0.1"
			"cap"		"1.5"
			"cost"		"200"
		}
		"6"
		{
			"attribute"	"health regen"
			"icon"		"achievements/tf_pyro_burn_medicpair"
			"increment"	"4"
			"cap"		"100.0"
			"cost"		"250"
		}
		"8"
		{
			"attribute"	"metal regen"
			"icon"		"achievements/tf_engineer_dispenser_extinguish"
			"increment"	"5"
			"cap"		"100"
			"cost"		"200"
		}
		"11"
		{
			"attribute"	"increased jump height"
			"icon"		"achievements/tf_scout_double_jumps"
			"increment"	"0.1"
			"cap"		"2"
			"cost"		"100"
		}
		"13"
		{
			"attribute"	"max health additive bonus"
			"icon"		"achievements/tf_medic_heal_huge"
			"increment"	"50"
			"cap"		"500"
			"cost"		"500"
		}
		
		"14"
		{
			"attribute"	"airblast vulnerability multiplier"
			"icon"		"achievements/tf_heavy_kill_midair_minigun"
			"increment"	"-0.1"
			"cap"		"0.1"
			"cost"		"150"
		}
	}
}