Previous Page

Netmech IV Bots

Click here to enter the support forum for Server Admins needing help with these Bots

Introduction: Usage, Limitations and Ideas.

If you just want to get on with making your own bot teams and do not care about the details, just scroll down to Tactics for bots.

This page is to help server admins setup their own all star bot teams using Mechstorms latest generation of Lobby bots. It also covers some basic scripting edits you can make, but you do not need to edit these scripts to create a team of bots for your server. By team I mean a real bot team with real tactics, not 8 brawlers charging at the enemy as the old lobby bots do.

Usage.

Netmech and HardCore both use these bots I am told. So this info may also apply to Hardcore fans if the bots where added. Ask your local HC rep about it to be certain. Others should enquire at Mechstorm about their usage.

Most of the new mechs should make full and automatic use of these new bot scripts. Also, only the level 9 bot cheats, the rest know where everything on the map is just like all other lobby bots made for mercs but this is only so they move towards the enemy right away. Without that feature they would sit on their drop point until the enemy came within radar range. Coop bots do not need to know where the enemy is and are more tightly controlled, so should not be considered the same as lobby bots generally.

Limitations.

There are some limitations such as Mercs has a limited number of IDs that can be used to assign new mechs too and its the IDs that are checked against to find the Mech type and choose its tactic. So when a Brawler, Sniper and a Scout mech share the same ID and I set that ID to use tactic sniper, all mechs using that ID will be snipers. This is unavoidable but its better than the 100% brawler tactic bots normally use.

Also Bots have no concept of heat, so any mech that normaly runs hot for the player will still run hot for the bots, only it will appear 10 times worse for the bots in Netmech. The Timberwolf is an example of a hot mech. The longbow is an example of a cool mech. Most light mechs are naturally cooler than larger one. Sundars are also hot mechs. Ravens are ICE COLD mechs, try and over heat one, I never could. The heat effects a bots performance just like it effects the players performance and needs to be taken in to account when choosing your teams. In this regard choosing a bot team is just like choosing a human team. Only bots always use default configs. The best way to choose your teams is to try the mechs using default configs your self and see how they perform for the player.

Tactics for Bots

You will need to look at the ideas section for an explanation of how to check what tactics each bot has (ID sharing for new bots is a topic covered above, so do not be surprised if a new mech is not listed below by name). Its actually very simple but ive chosen to explain all the gory details for those who want to know that stuff. The reality is you need only look at the example code, its fairly easy to follow and you can identify the mech and the tactics pretty easily.

EG

Case M_ArcticWolf:
mytactic = TACTIC_RUSH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

So the Articwolf and any mech assigned to this ID will use TACTIC RUSH.

Simple stuff.

It should be clear now how you can set up BOT teams and probably name them too so they appear to be a Bot Clan on your server. Not sure how the bot naming works but Im told its possible so I'll let you find out. For now lets look at an idea for a Team of 6 Bots.

Lets assume we need 2 scouts, 2 brawlers and 2 snipers.

Chimera = scout, uses circle of death to kill its opponent, great for keeping snipers busy whilst the brawlers close.

Cougar = Tries to stay behind its target, again good for distracting the enemy,

CauldronBorn = Use the circle of death to kill the enemy with its powerful weaponry, ideal brawler.

Thor = Rushes the enemy, good assault Brawler to push the enemy out of position.

Longbow = Great sniper, runs very cool so it fires more often.

Daishi/Timberwolf = Hot mech, will shut down a lot but when it does shoot it kills something. Great for stopping a counter attack in its tracts.

That was an example Bot team using just 6 mechs. All the above bots will do exactly what it says on the Tin. First the scouts will rush in and engage the enemy whilst the brawlers close, the snipers will move to max range and support them, trying to stay at max range at all times if possible. The Brawlers will then arrive and tear the enemy apart.

The Chimera will run away if hit too many times and choose a different tactic. The Couger will switch to hit and run tactics, eg running away before turning back and charging the enemy again.

The Cauldron Born and Thor will use the same Hit and run tactics as the cougar if the fighting gets too intense.

The Longbow and Diashi will initially try to back away from the fight if hit too many times but if that fails they will stop and shoot like mad men until either they die or their attacker dies.

All bots know who is shooting at them and will respond if the threat is considered dangerous enough, they dol not ignore incoming fire. They will also work in teams, for example the two scouts will more than likely attack the same mech as the brawlers and the snipers if all mechs can see that target and that target is deemed to be the most dangerous target on the map. Otherwise they will seek out lesser targets individually or in small groups. Only incoming fire will override that target choice so the bot will defend it self. A Noob who cannot hit the broad side of a barn may be totally ignored. So the bots will work as a team as the need arises but will also go it alone. At the start of the game, no player has earned the respect of the bots so they all go it alone, but as the game progresses and some players stand out they will start to attract the bots attention more and more.

The bots use kills to decide who is the most dangerous player/bot. So the best players will get the sort of action they crave and the noobs will be cut some slack. This means you can use high level bots on a server if the players are not all Noobs.

Thats how the bots work work online.

Ideas.

Because the bot scripts are external you can edit them to suit your own servers needs, you will find them in content/bots. But I strongly advise against doing that. I spent years researching how each tactic worked or did not work in certain situations before I found a nice stable list. Choosing the wrong tactic can and does cause your server to crash to the desktop. The tactics used below were carefully chosen after years of research here at Mechstorm in to Mercs bots. They represent the best bots available for Mercs at this time and will not crash your server.

In order to make the bots behave like human players they needed "attack tactics", "withdraw tactics" and "im going do die anyway so lets make it a good death" type of tactics.

Mytactic = default bot tactic for this type of mech
myalttactic = what this bot does when the going gets tough, get its getting shot at a lot.
finalsolution = This is rambo mode, the bot knows theres no hope chooses the tactic that will work in that situation.

A full list of tactics is included in the editors orders docs for Mercs, but its dangerous to simply swap them out since some tactics are not designed to be used with mechs and others require the mech carry certain equipement or be in a specific situation. All tactics below work with every mech so you can edit them to your hearths content and swap them around if you wish.

Most of these tactics do what their name says, they are easy to follow and all mechs make use of one of these mech IDs below (M_ArcticWolf: is an ID). Those that may be added in the future that do not use those tactics will default to these.

mytactic = TACTIC_PICK_BEST;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_PICK_BEST;

Heres an extract from the bot code, its easy to read, you will be able to identify the bots by their M_name and see the tactics they are using.

Case M_ArcticWolf:
mytactic = TACTIC_RUSH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Argus:
mytactic = TACTIC_CIRCLE_OF_DEATH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Atlas:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_BACK_UP_AND_FIRE;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Awesome:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_BACK_UP_AND_FIRE;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_BlackKnight:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Bushwacker:
mytactic = TACTIC_RUSH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Catapult:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_STOP_AND_FIRE;
EnablePerWeaponRayCasting (ME,TRUE);
Endcase;

Case M_CauldronBorn:
mytactic = TACTIC_CIRCLE_OF_DEATH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Chimera:
mytactic = TACTIC_CIRCLE_OF_DEATH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Cougar:
mytactic = TACTIC_REAR;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Daishi:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_BACK_UP_AND_FIRE;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Dragon:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Flea:
mytactic = TACTIC_REAR;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Fafnir:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_BACK_UP_AND_FIRE;
finalsolution = TACTIC_STOP_AND_FIRE;
EnablePerWeaponRayCasting (ME,TRUE);
Endcase;

Case M_Gladiator:
mytactic = TACTIC_CIRCLE_OF_DEATH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Hauptmann :
mytactic = TACTIC_RUSH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Hellhound:
mytactic = TACTIC_CIRCLE_OF_DEATH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Hellspawn:
mytactic = TACTIC_REAR;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Highlander:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Hunchback:
mytactic = TACTIC_CIRCLE_OF_DEATH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Kodiak:
mytactic = TACTIC_CIRCLE_OF_DEATH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Loki:
mytactic = TACTIC_REAR;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Longbow:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_BACK_UP_AND_FIRE;
finalsolution = TACTIC_STOP_AND_FIRE;
EnablePerWeaponRayCasting (ME,TRUE);
Endcase;

Case M_Madcat:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Madcat_MKII:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_BACK_UP_AND_FIRE;
finalsolution = TACTIC_STOP_AND_FIRE;
EnablePerWeaponRayCasting (ME,TRUE);
Endcase;

Case M_Masakari:
mytactic = TACTIC_RUSH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Mauler:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Novacat:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Osiris:
mytactic = TACTIC_REAR;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Owens :
mytactic = TACTIC_REAR;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Puma:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_BACK_UP_AND_FIRE;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Raven:
mytactic = TACTIC_REAR;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Ryoken:
mytactic = TACTIC_REAR;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Shadowcat:
mytactic = TACTIC_RUSH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Sunder:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_BACK_UP_AND_FIRE;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Templar:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Thanatos:
mytactic = TACTIC_CIRCLE_OF_DEATH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Thor:
mytactic = TACTIC_RUSH;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Uller:
mytactic = TACTIC_REAR;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Uziel:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Victor:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case M_Vulture:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_BACK_UP_AND_FIRE;
finalsolution = TACTIC_STOP_AND_FIRE;
EnablePerWeaponRayCasting (ME,TRUE);
Endcase;

Case M_Wolfhound:
mytactic = TACTIC_REAR;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Case M_Zeus:
mytactic = TACTIC_SNIPE;
myalttactic = TACTIC_BACK_UP_AND_FIRE;
finalsolution = TACTIC_STOP_AND_FIRE;
Endcase;

Case NoMechID:
mytactic = TACTIC_PICK_BEST;
myalttactic = TACTIC_PICK_BEST;
finalsolution = TACTIC_HIT_AND_RUN;
Endcase;

Do not forget, You can get support for these bots in the Mechstorm Tech support forum or the scripting forum if your editing them.