Giter Site home page Giter Site logo

infclass / teeworlds-infclassr Goto Github PK

View Code? Open in Web Editor NEW
16.0 3.0 15.0 114.49 MB

InfClass server

License: Other

Lua 0.04% Shell 0.01% Python 2.17% Batchfile 0.01% C++ 65.03% C 31.30% Objective-C 0.20% CMake 1.25%
teeworlds mod zombies teeworlds-mod teeworlds-server infclass

teeworlds-infclassr's Introduction

Teeworlds InfClassR

Slightly modified version of original InfClass by necropotame.

Additional dependencies

GeoLite2++ is used for IP geolocation

sudo apt install libmaxminddb-dev

Building

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.

on Ubuntu

sudo apt install libicu-dev libmaxminddb-dev
./bam server_debug

on macOS

via Homebrew:

brew install icu4c libmaxminddb
./bam server_debug_x86_64

on Windows

GCC should be installed, e.g. Mingw-w64.

bam config stackprotector=true nogeolocation=true
bam server_debug

Server commands

Read the wiki

This product includes GeoLite2 data created by MaxMind, available from https://maxmind.com.

teeworlds-infclassr's People

Contributors

aodenis avatar assassintee avatar bloodwod-513 avatar bretonium avatar c0d3d3v avatar chillerdragon avatar def- avatar duralakun avatar furo321 avatar heinrich5991 avatar incrediblecake avatar jupeyy avatar kaffeine avatar learath2 avatar manmellon avatar necropotame avatar nheir avatar oy avatar patiga avatar progval avatar resamvi avatar robyt3 avatar rotolonico avatar sirius1242 avatar socialdarwinist avatar teoman002 avatar thevayt avatar yangfl avatar yavl avatar zlaxy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

teeworlds-infclassr's Issues

Implement tournament mode

Proposal:

  • 16 players: 8 humans and 8 zombies
  • The teams defined before the round starts.
  • 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).

Depends on #17

Cleanup translations

Preliminary plan:

  • Add a script for .po files generation/update, add a CMake target for that.
  • Sync translatable strings (maybe pull fixes from yavl/).
  • Regenerate translations (.json files), add a CMake target for that.
  • Make all (or more) player-visible strings translatable

The most of those tasks can be done independently of the others.

electrician makes damage for zombies in infection zone

Steps to reproduce:

  1. 1 electrician, 1 zombie
  2. The electrician places a box not far from a zombie spawn, shoots the zombie
  3. The zombie jumps into the infection zone
  4. The electrician hits the hammer within 1 second
    OR
  5. The zombie goes out of range within 1 second inside the infection zone

Expected:
1-second invincibility is honored and the zombie does not die

Current:
Zombie dies even if jumped into the zone within 1 second

Make the Looper wall lifespan and the slowness effect consistent

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.

Hero does not add pistol ammo for ninja

Steps to reproduce:

  1. Ninja, hero
  2. Ninja shoots pistol and uses all ammo
  3. Hero finds a flag with gift

Expectation:
Ninja's pistol gets full ammo

Observed:
Ninja's pistol ammo still low

Pistol is typically used to discover ghosts or to make 1-hp-hits on almost-dead zombies, and might tip the balance into zombies side.

Human class: Electrician

Electrician

Hammer

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).

Technical stuff

(asked by Kaffeine to post)
obraz
obraz

/alwaysrandom 1 does not always give full armor

Steps to reproduce:

  1. do /alwaysrandom 1
  2. Play several rounds and note the armor in the beginning

Expectation:
I always spawn with full armor, as if i chose "random character"

Observed:
Almost always i spawn with 0 armor

Improve map rotation mechanism

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.

Probably we need even better mechanism.

Please discuss! @InfectionDust/scientists, @InfectionDust/engineers.

Slug Buff

Actual idea:

  • increase slime healing rate
  • increase the cap to 15 hp
  • enable self-healing

Previous (dropped?) idea:

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.

Make Ninja class more playable (maybe buff)

Suggested changes:

  • Make the ninja invincible for hammers during the slash (the split second of fast attack swing)
  • Change the ninja rewards to a constant list
  • #51

Ninja rewards (v2):

  1. +1 dmg, +1 velocity
  2. invisibility grendes (0.75/1.5 sec duration?)
  3. faster ammo regen
  4. increased flash AoE
  5. increased invisibility duration (1/2.5 sec?)

The suggested rewards list (an example for the first approximation):

  1. +1 slash dmg
  2. extra velocity (worth like 2-3 current velocity buffs)
  3. faster ammo regen
  4. extra flash grenade AoE
  5. +1 slash in the air

Improve portability (move infclass specific code)

  • Extract Infc code from CPlayer to CInfClassPlayer
  • Extract Infc code from CCharacter to CInfClassCharacter
  • Extract Infc classes code to CInfClassPlayerClass and subclasses
  • Extract Infc code from CGameContext and IGameController to CInfClassGameController (add missing API to IGameController)

Details

  • Move ConStartFunRound / ConStartSpecialFunRound from CGameContext to CInfClassGameController

Make infected area visible in textureless UI mode

We can in CMapConverter::CopyLayers():

  1. Find "icDamage" layers and find ZONE_DAMAGE_INFECTION tiles there
  2. Adjust GameLayer; change empty tiles with DDRace TILE_UNFREEZE or TILE_DUNFREEZE.

Note:

TILE_FREEZE = 9,
TILE_TELEINEVIL,
TILE_UNFREEZE,
TILE_DFREEZE,
TILE_DUNFREEZE,

Invent a mechanism for clientmaps invalidation

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.

electrician kills are not shared with ninja

Steps to reproduce:

  1. 1 zombie, 1 electrician, 1 ninja
  2. The electrician creates a box
  3. The ninja stuns the zombie
  4. The electrician links the zombie and kills it

Expected:
A frag if given to both electrician and ninja

Current:
A frag is given only to the electrician

Balance the "call witch" mechanism

The current state

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.

  1. 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)
  2. Change the flag position every N (e.g. 30) seconds if there was no zombie nearby.
  3. 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

  1. Spawn a (red) flag at one from the possible hero flag positions
  2. 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.

feature: heat map

  • begin to track minutes through server ticks after a round start
  • when a death occurs, the position and time is saved in a struct, it also contains a color representation of the time.
  • every death event adds a node to the linked list consisting of above mentioned struct type.
  • later the linked list has to be saved, a different file name will be assigned for each map

Improve /help pages

  • /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

Fix custom colors in class menu

Custom colors are not applied to the tee rendered in the class menu.
image
The Looper class (on the bottom) actually has gray skin.

Zones are smaller on their right side

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

Broadcast "Class disabled" info if the class is not choosable

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.

Mercenary grenades make no effect

Version: currently deployed to Zombies' Cafe

Steps to reproduce:

  1. 1 mercenary, 1 zombie
  2. The mercenary shoots grenades at zombie and explodes them

Expected:
The zombie loses 1 hp per second for 8 seconds

Current:
The zombie shows "annoyed" emotion and loses no hp.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.