Install bam 0.4.0 build tool. Compile it from source or get precompiled binaries for your platform.
git clone https://github.com/yavl/teeworlds-infclassr
cd teeworlds-infclassr
Copy bam executable into teeworlds-infclassr directory.
With sv_maprotation you can define what maps will be played in which order, for example: sv_maprotation "infc_skull infc_warehouse infc_damascus"
With sv_rounds_per_map you can define how many rounds each map should be played before changing to the next map.
If inf_maprotation_random is set to 1 than a random map will be chosen after a map finished.
The infected or killed humans join the specs (those specs should not be able to spy on the another team characters).
Swap teams (humans <-> zombies) each round.
The longer survivor human team wins.
Probably:
All different classes.
As players play different/specific classes, the zombie players should be able to choose the class (before the round starts)
Some game random should be replaced with static values (scientist white hole, etc).
Maybe's:
4 rounds per map.
"each tourney could have like 6 maps in the pool maybe with a banning system"
TODO:
Define the conditions for zombie super classes (ghouls, ghosts, undeads, witches)
Decide what to do with medic revival.
I see those tournament games similar to ctf/tdm games in terms of organization (probably a team don't need a leader and can be formed from players wanted to play together).
If there is only one zombie in the game, it should get a 10 armor bonus.
The bug is that during the initial infection the first infected still receives the bonus.
Right now an already slowed-down infected won't be affected by a wall.
Probably we want to add the missing slowness seconds to the inf at a reasonable cost for the wall lifespan.
E.g. if an infected with 1.8 remaining seconds of slowness will come across a wall with 15.0 seconds of remaining lifespan,
then the wall lifespan should be reduced by 1.2 (to 13.8 seconds) and the infected slowness should be "refilled" to 3.0 seconds.
Hammer creates a High Voltage Box. Between the box and Electrician there is a link. The box breaks if Electrician moves out of its range. Using hammer again creates a Discharge. The Discharge lasts 1 sec and any zombies on top of any point of the link are dealt 10 dmg and stunned for the duration of it. A box can withstand 1 Discharge and breaks after the second one. A Discharge also happens if Electrician moves out of range.
Gun
The Gun is the simple gun.
Shotgun
The Shotgun is replaced with a chaining laser which deals damage and jumps to any infected nearby. It's twice as powerful against stunned infected.
Laser rifle
Doesn't deal any damage. Any zombie hit by laser creates a link between the zombie and the box. Any Discharges will go through all links. A linked zombie will be always one-shot by a Discharge. If a linked zombie moves out of box's range a Discharge will happen and it will die. If a linked zombie dies through other means a Discharge will happen without damaging the box. Lasering a zombie that's out of box's range will have no effect. If a zombie is on top of 2 links at the same time during a Discharge it will be dealt 20 dmg. (30 for 3 links and so on).
Right now the rotation goes through a list of maps. The maps that does not meet requirements (right now we have only minplayers requirement) are skipped and won't be suggested until all the other maps got their chance.
One of the possible solutions is to keep the list of skipped maps and try them first.
E.g. if a map was not activated because of the low players count, it should still be activated on the next rotation if the conditions now met.
Change weapon to enter projectile mode
Hammering in this mode creates a projectile which upon collision creates toxins.
Only one toxin created this way per Slug. Its lifespan is like the usual toxins.
Right now clientmaps (the map files consumable by clients) are cached and the cache is based on the original (infclass server) map checksum.
In case of a change in the mapconverter (e.g. any change in the circle class menu) the clientmap must be invalidated to prevent glitches.
E.g. after the #12 fixed we need to trigger invalidation of all previously generated and cached client maps.
There is /witch chat command to "ask" the game for a new witch.
A player can not call the witch twice and the game requires five "calls". After five players send the message, the game picks a random zombie to make it a witch.
The approach has two downsides:
If there are only four callers, then the witch won't get into the game, no matter how many zombies there are (some players do not know how to call, some are lazy, some do not know the role and the value of a witch).
If there are five players who are fast to call the witch, then a new witch can be spawned in a sec after the previous one killed. This greatly reduces the reasons for humans to kill.
The proposal
Use a flag to spawn the witch.
We have a few options, let's try to draft it.
Spawn a (red) flag at
1.1 a random place on the map.
1.2 maybe not a random place, but one from the possible hero flag positions
1.3 maybe the position should be distant from humans (at least at the time of the flag spawn)
Change the flag position every N (e.g. 30) seconds if there was no zombie nearby.
When a zombie picks up the flag...
3.1 maybe make the zombie a witch with some chance (e.g. 10%) or kill that zombie otherwise (in the other 90% of cases)
3.2 maybe make the flag a place for sacrifice: kill a number of zombies (e.g. up to five) and add hearts near the flag to indicate the current ritual progress. After five zombies killed themself against the flag, a new witch come. Maybe all five suicides could be done by the same zombie. Maybe this zombie should become the witch.
3.3 Let zombies collect 5 flags at different locations to spawn a witch (@teoman002)
Also:
Red flag matches the one that witches currently carry
Probably the flag should be visible only for zombies
Probably there should be no hints (unlike the hero flags)
Probably we don't need the flag if there are too few zombies
Now discuss! ๐
The first iteration
Spawn a (red) flag at one from the possible hero flag positions
Change the flag position every N (e.g. 30) seconds if there was no zombie nearby.
3 Let different zombies collect 5 flags at different locations to spawn a witch.
/help game Change "The goal for humans is to survive until the army clean the map." Into "The goal for humans is to survive until the army cleans the map."
/help engineer Change "When an infected touch the wall, he dies." Into "When an infected touches the wall, it dies."
/help soldier Remove "A lucky Soldier, devoted to killing zombies, can get a bonus - stunning grenades."
/help scientist Change "Scientist has also grenades that teleport him." Into "Scientist also has grenades that teleport them." Change "Additionally scientist can place white holes with the laser rifle. Further information on /help whitehole" Into "A lucky Scientist devoted to killing can get a white hole that sucks infected in which can be placed with the laser rifle" Remove /help whitehole
/help biologist Change "The biologist has a shotgun with bouncing bullets and can create a spring laser trap by shooting with the rifle." Into "The Biologist has a shotgun with bouncing bullets and can create a spring laser trap by shooting with the laser rifle."
/help looper Change "The looper has a laser wall that slows down zombies and a low-range-laser-pistol." Into "The Looper has a laser wall that slows down infected and a low-range laser rifle with a high fire rate" Remove "A lucky Looper, devoted to killing zombies, can get a bonus - stunning grenades."
/help medic Change "Grenades with medicine give armor to everybody in their range, including heroes and medic themself" Into "Grenades with medicine give armor to everybody in their range, including Heroes and the Medic themself" Change "Laser revives infected zombies, but at great cost - 17 hp and armor. Into "Laser rifle revives the infected, but at the cost of 17 hp and armor." Change "Medic has also a powerful shotgun that can pullback infected." Into "Medic also has a powerful shotgun that can knock back infected."
/help ninja Change "The Ninja can throw flash grenades that can freeze infected during three seconds." Into "The Ninja can throw flash grenades that can freeze infected for three seconds" Change "His hammer is replaced by a katana, allowing him to jump {int:NinjaJump} times before touching the ground." Into "Their hammer is replaced with a katana, allowing them to dash {int:NinjaJump} times before touching the ground." Change "Ninjas get special targets. For killing a target, extra points and abilities are awarded" Into "Ninja gets special targets. For killing a target, extra points and abilities are awarded"
/help mercenary Change "The Mercenaries fly in the air using their machine gun." Into "The Mercenary can fly in the air using their machine gun."
/help sniper Change "The Sniper can lock the position in air for 15 seconds with the hammer." Into "The Sniper can lock the position in mid-air for 15 seconds with the hammer." Change "Snipers can jump two times in air." Into "Sniper can jump two times in the air."
/help smoker Change "Smoker has a powerful hook that hurts human.
Their hook not only hurts humans, but also sucks their blood, restoring the smokers health." Into "Smoker has a powerful hook that hurts humans and sucks their blood, restoring the Smoker's health."
/help hunter Change "He can jump two times in air." Into "It can jump two times in the air."
/help bat Change "Bat can jump multiple times in air." Into "Bat can jump infinitely in the air." Change "It can also inflict 1 damage point per second by hooking humans.
Their hook not only hurts humans, but also sucks their blood, restoring the bats health. Into "It can also inflict 1 damage point per second by hooking humans, which sucks their blood, restoring the Bat's health."
/help ghost Change "He is invisible, except if a human is near him, if it takes a damage or if it use the hammer." Into "It is invisible, unless a human is nearby, it takes damage or it uses the hammer." Change "He can also inflict 1 damage point per second by hooking humans." Into "It can also inflict 1 damage point per second by hooking humans."
/help spider Change "When selecting any gun, the hook enter in web mode." Into "When changing weapon, the hook enters web mode." Change "Any human that touch a hook in web mode is automatically grabbed." Into "Any human that touches a hook in web mode is automatically grabbed." Change "The hook of the spider (in both mode) deal 1 damage point per second and can grab a human during 2 seconds." Into "The hook (in both modes) inflicts 1 damage point per second and can grab a human for longer."
/help ghoul Change "He can devour all that has died close to him, which makes him stronger, faster and more resistant." Into "It can devour anything that has died nearby, which makes it stronger, faster and more resistant." Change "Thereupon it digests the fodder bit by bit going back to the normal state, and besides, death bereaves him of the nourishment." Into "It digests the fodder over time, going back to the normal state. Some nourishment is also lost on death." Add "It can also inflict 1 damage point per second by hooking humans."
/help slug Change "He can make the ground and walls toxic by spreading slime with the hammer." Into "It can make the ground and walls toxic by spreading slime with the hammer." Change "Touching the slime inflicts three damage points in three seconds on a human." Into "Touching the slime inflicts 3 damage points in three seconds to a human." Add "It can also inflict 1 damage point per second by hooking humans."
/help voodoo Change "He does not die immediately when killed but instead enters Spirit mode and defies death for a brief span of time." Into "It does not die immediately when killed but instead enters Spirit mode for a short time" Add "It can also inflict 1 damage point per second by hooking humans."
/help undead Change "Instead of dying, it freezes during 10 seconds." Into "Instead of dying, it freezes for 10 seconds." Change "If an infected heals him, the freeze effect disappear." Into "If an infected heals it, the freeze effect disappears." Change "He can also inflict 1 damage point per second by hooking humans." Into "It can also inflict 1 damage point per second by hooking humans."
/help witch Change "When an infected dies, it may re-spawn near witch." Into "When an infected dies, it may respawn near the Witch." Remove "Additionally a witch can place portals with the laser rifle. Further information on /help portals" Remove /help portals
You can enter a kill or an infection zone (probably purple too) from the right side further than usually - you can be on the tile but not get affected by the zone. Left side of the zones seem normal
Hovering over a class on the wheel selector that cannot be chosen shall broadcast info on the reason behind the inability. Broadcast "Need at least 'inf_min_players_for_engineer' players" if there isn't enough players for Engineer. Broadcast "Class disabled" for any other reason e.g. classes in development like Electrician.