schadowhunter's Kill All Zombies! TD

  • Guten Tag zusammen! :)


    Ich war relativ lange inaktiv (Staatsexamen der Hundesohn). Jetzt kann ich mich aber wieder regelmäßig meinem Gamedesign-Hobby widmen und möchte euch somit mein neues Projekt Vorstellen: schadowhunter's Kill All Zombies! TD (working title)

    Ganz kurz die Hard Facts:


    • Genre: First Person Tower Defense (Vergleichbare Spiele: Dungeon Defenders-Serie, Orcs Must Die!-Serie, Sanctum 1+2)
    • Singleplayer only (zumindest für den Moment)
    • Spielablauf: Der Spieler bewegt sich in der First Person Perspektive durch schwieriger werdende Level und platziert verschiedene Fallen, umso umfangreicher werdende Wellen von Gegnern daran zu hindern, ein Ziel zu erreichen
    • Setting + Grafik: Angepeilt ist ein tendenziell eher düsteres Medieval-High-Fantasy-Setting (ich möchte Magie drin haben um spannende Gegner und Fallen kreieren zu können). Ich werde schauen müssen, inwiefern meine Blender-Künst (hint: ich habe keine) das mitmachen. Die Grafik wird/soll definitiv einen low poly "comic"-Touch haben.

    Das Projekt ist für mich vor allem auch eine Lerngelegenheit. Ich bin zwar relativ fit mit Blueprints, aber umso schlechter im Umgang mit Blender und 3D Modellen und wirklich katastrophal, wenn etwas animiert werden muss. Ich habe mir diesmal fest vorgenommen, überhaupt nicht auf fertige Assets zurückzugreifen, sondern wirklich alles selber zu bauen/erstellen/animieren/aufzunehmen. Let the challenge begin.


    Wo stehe ich?


    Ich habe die letzten Tage damit verbracht, grundlegende Systeme "quick and dirty" zusammenzubauen:


    • Es gibt einen Zombie mit zwei Animationen ("Laufen" und "Sterben") (Die Qualität des Model und der Animationen demonstriert Eindrucksvoll meine aktuellen Blender-"skills"
    • Das erste Level (Hafen) existiert als rudimentäre Greybox
    • Zombies spawnen und bewegen sich von einem Start zu einem Ziel
    • Der Spieler kann "Sperren" bauen, um Wege zu blockieren und die Zombies zu zwingen, Umwege zu laufen und eine bestimmte Route durch das Level zu nehmen (dynamic navmesh)
    • Der Spieler kann eine erste Falle bauen (ein brennendes Feld auf dem Boden). Die Falle verursacht Schaden und man kann Zombies somit töten.

    Video:



    Nächste Schritte:


    • Fallen sollen, bevor man sie platziert, als durchsichtiger "Schatten" oder "Geist" aufleuchten; dies sollte das Bauen deutlich kompfortabler machen fertig!
    • Game-Breaking Bug: Aktuell ist es möglich, den Weg komplett zu blockieren (Zombies finden dann nicht mehr zu Ziel/es gibt keinen gültigen Pfad mehr). Ich habe hier verschiedene Lösungsmöglichkeiten durchgespielt, wahrscheinlich werde ich nach jeder gebauten Mauer kurz mit is_valid prüfen, ob es einen gültigen Pfad gibt und falls nicht die zuletzt platzierte Mauer sonst wieder zerstören. Irgendwie sowas. fixed
    • Dann soll eine grundsätzliche Ökonomie ins Spiel. Man hat nur ein bestimmtes Budget an Geld, Fallen bauen kostet Geld, man muss erst Zombies töten um weitere Fallen bauen zu können (aktuell kann man Fallen platzieren soviel man will bzw. bis alle Bauplätze voll sind). done

    Das sind die nächsten Aufgaben.


    Über Meinungen, Kommentare, Anregungen, Tipps würde ich mich selbstverständlich freuen. :thumbup: Ansonsten halte ich euch auf dem Laufenden! 8)

  • Ich habe heute noch schnell ein paar Level-Tiles gebaut. Alles work-in-progress natürlich.


    (Die Säulen sind schwarz weil am Material irgendwas nicht stimmt muss ich nochmal reinschauen, dazu hatte ich noch keine Muße)


    Grundsätzlich besteht das ganze Level aus 2x2m großen Blöcken. Auf einen Block passen immer genau 4 Fallen (jeweils 1x1m).


    https://i.imgur.com/zn6YynR.png


    Das Spielkonzept hier nochmal anhand einer einfachen Map gezeigt: Man blockiert den kürzeren Weg (orange) um die Zombies zu zwingen, den langen Weg (grün) zu laufen.


    Ansonsten funktionieren jetzt die bereits angesprochenen "Schatten" bzw. "Geister":




    Diese "Geisterfallen" geben dem Spieler genaues Feedback, welche Falle er grade an welchen Platz bauen im Begriff ist. Durch einen Linksklick wird dann ggf. die tatsächliche Falle platziert.

  • Ziemlich coole Idee, ich persönlich würde generell zwar TD Spiele nicht so extrem viel zocken, wie andere Games, aber eine schöne Runde Tower Defense mal nebenbei finde ich immer cool.

    Ja, Tower Defense Spiele sind definitiv ein Nischenbereich. Das würde ich jetzt auch nicht mit einem AAA Spiel vergleichen wollen, sondern - wie du sagst - für eine nette Runde nebenbei zocken.


    Tatsächlich ist die Stimmung in der "Szene" aktuell relativ schlecht, weil die großen Studios es alle verkacken. Auch das hat mich motiviert, nochmal einen Anlauf zu unternehmen.


    Orcs Must Die! bzw. Robot Entertainment hat erst Orcs Must Die! Unchained verkackt (weil sie unbedingt auf den Moba-Zug aufspringen mussten obwohl keiner danach gefragt hatte) und haben jetzt ein flaches OMD3 ohne nennenswerte Neuerungen gegenüber OMD2 (2012!) rausgehauen. 3/10.


    Dungeon Defenders hat kürzlich auch eine Art "Remake" versucht, Dungeon Defenders: Awakend. Leider: Kaum Content, langweilige Klassen, langer Grind. Eher mäh.


    Es gibt bestimmt kein Millionenpublikum, aber der eine oder andere gefrustete TD-Fan würde bestimmt mal einen Blick darauf werfen. :D

  • Nischenbereich hin oder her, Aufmerksamkeit hat es natürlich verdient. Und ich finde aber auch, dass durch viele Mobile Tower Defense Spiele, die nur auf Geld aus sind das Genre ein wenig in Verruf geraten ist.

    Ich bin jetzt auch nicht der große TD Spieler, aber zum Beispiel Spiele in der „klassischen“ Ansicht von Oben wie Bloons sind auch recht cool. Bin mal gespannt wie dein Titel wird.

  • Vielleicht versuchst du gar nicht so sehr die klassischen TD Spiele zu kopieren und überlegst dir neue Spielemechaniken.


    Mal als Idee: Ich kenne die klassischen Tower defense Spiele von früher und hab sie auch einige Zeit lang gerne gespielt. Ich kenne sie nur in 3D und als Flaches Spielfeld.


    Da du dich ja nun aber im 3D Bereich befindet wie wäre es wenn du die Höhe als 3D Komponente mit dazu nimmst.


    1. Ein in die Höhe gezogener Lowpoly Berg mit einem Pfad nach oben. Nach Genger müssen Spiralartig um den Berg laufen um nach oben zu gelangen.

    2.Es gibt mehre Wege die nach oben führen und von jedem Weg kann man die anderen Wege erreichen. (So entsteht auch ein labyrinth.

    3.Bei den Fallen wäre nun spannend das du zb umfleigende Bäume oder Baumstämme die auf die Bahn fliegen verwenden könntest.

    4. DIe Gegner wieder eine oder mehre Etagen tiefer landen

    5.Man die Ansicht auf die man auf den Turm schaut ändern kann. (Nord, Ost,süd west)

    6.Tunnel wären möglich wo die Gegner zu anderen Seite durchbrechen könnten.

    7.Auch im inneren des Turms könnten Dungeons sein wo man Fallen bauen kann.

    8.Die höhe des Turm und wie weit die Gegner fortgeschritten sind wäre messbar und ein Indikator dafür wie weit die Gegner vorgeschritten sind.


    Denke in 3D es gäbe dabei viel Potenzial neue Mechaniken mit einzubringen oder im Multiplayer gegeneinander zu spielen in dem man die Gegner zu anderen Spieler leitet.

  • Finde ich eine tolle Idee.


    Ich habe mal etwas herumexperimentiert:



    Also grundsätzlich sehe ich die Idee gut funktionieren: Eine Falle, die die Gegner "wegschubst", also z.B. auf die darunter liegende Ebene oder sogar direkt in den Tod (man könnte mit Fallschaden * Fallhöhe arbeiten oder die Gegner in einen Abgrund/Lava etc. schubsen).


    Soweit funktioniert das technisch auch einigermaßen gut; das Problem ist nur, sieht man auch im Video, dass die Zombies teilweise hinter der Falle stucken. Ich habe versucht, den Bereich hinter der Falle für den navmesh zu blocken/nicht begehbar zu machen, aber das erzeugt ganz komisch Effekte, weil die Gegner kurz stehenbleiben, wenn die Falle feuert.


    Grundsätzlich erscheint mir das ganze zudem ziemlich überpowert, da eine Reihe aus 4-5 Fallen eine ganze Menge Gegner schubst. Da müsste man zum Balancen einen hohen Cooldown einbauen.


    Was ich mir auch vorstellen könnte: Die Falle funktioniert nicht "endlos", sondern muss nach X Stößen von Hand neu aufgezogen werden. Dann hat der Spieler noch mehr zu tun.


    Mittelfristig wollte ich sowieso Fallen hinzufügen, die an Wänden montiert werden können. Ich dachte da z.B. an eine Wand, die Pfeile verschießt à la Indiana Jones.

  • Soweit funktioniert das technisch auch einigermaßen gut; das Problem ist nur, sieht man auch im Video, dass die Zombies teilweise hinter der Falle stucken. Ich habe versucht, den Bereich hinter der Falle für den navmesh zu blocken/nicht begehbar zu machen, aber das erzeugt ganz komisch Effekte, weil die Gegner kurz stehenbleiben, wenn die Falle feuert.

    Kann es sein das beim Aufprall unten noch kein Pfad gefunden ist ? Dann bräuchtest du nur einen Trigger bei Collision das Navmesh neu berechnet oder einen Delay (gegner fällt auf den Bauch, muss aufstehen) bis der neue Pfad berechnet ist.


    Grundsätzlich erscheint mir das ganze zudem ziemlich überpowert, da eine Reihe aus 4-5 Fallen eine ganze Menge Gegner schubst. Da müsste man zum Balancen einen hohen Cooldown einbauen.

    Wie wäre es wenn die falle einige Sekunden rausfährt und draußen bleibt. In dieser Zeit laufen alle weiten Zombies gegen die Falle und werden von Ihr geblockt (aufgestaut)

    Dann geht die Falle wieder rein und ein großer Schwung an Gegner kommt auf einmal durch.

    Da nun viele Gegner auf einer Stelle sind, wäre dafür doch eine Waffe mit Splash schaden nice.


    Auch nice wäre, wenn die Gegner lernen und auf solche Fallen kein zweites mal reinfallen und beim nächsten mal warten bis die falle eingefahren ist.

    Man kann die falle gut nutzen um Gegner zu bündeln und auf eine andere Ebene zu schubsen oder du denkst darüber nach das die gegner nach dem Fallen Lebenspunkte dazu bekommen (mehr aushalten als kompensator fürs runterwerfen)

  • Wie wäre es wenn die falle einige Sekunden rausfährt und draußen bleibt. In dieser Zeit laufen alle weiten Zombies gegen die Falle und werden von Ihr geblockt (aufgestaut)

    Dann geht die Falle wieder rein und ein großer Schwung an Gegner kommt auf einmal durch.

    Da nun viele Gegner auf einer Stelle sind, wäre dafür doch eine Waffe mit Splash schaden nice.

    Das ist ein guter Einfall.


    Ich werde jetzt erstmal die groben Mechaniken zu Ende machen. Mein Ziel ist es, schnellstmöglich eine "spielbare" Alpha am Start zu haben.


    To-do Liste:


    1. Ökonomie (Fallen kosten Geld, getötete Zombies bringen Geld) usw. & entsprechende Anzeige / UI alles da
    2. Bug bzgl. des kompletten Blockieren des Weges fixen
    3. Schnelles Menü bauen (Escape Taste / Spiel beenden / Level neu starten) fertig
    4. "Ziel" braucht noch "Lebenspunke", die verloren gehen, wenn ein Zombie es erreicht working
  • Hi zusammen.


    Also im Grunde habe ich jetzt denke ich alles beisammen.


    https://im7.ezgif.com/tmp/ezgif-7-17d987e05133.gif


    Das Ziel ist ein rotierendes Herz, es hat Lebenspunkte und die gehen verloren, wenn ein Zombie das Ziel erreicht.


    So weit so gut.


    Im Moment hänge ich noch etwas an den einzelnen Wellen.


    Der Grundsätzliche Gedanke ist: Der Spieler startet eine neue Welle per Tastendruck. Wurde eine Welle besiegt, hat er eine "Ruhephase" und Zeit, Fallen (um-) zubauen, bis er per Tastendruck die nächste Welle startet.


    Die Frage ist für mich grade ein bisschen, wie ich dem Spawner mitteile, was er zu spawnen hat. Ich möchte später natürlich verschiedene Zombie-Typen haben (mehr und weniger HP, Resistenz gegen bestimmte Fallentypen, schnellere und langsamere und so weiter).


    Grundsätzlich kommt der Input vom Player [Welle starten]. Dann guckt sich der Spawner an: "Bei welcher Welle sind wir?" und sieht "Okay ich beginne jetzt, Welle [6] zu spawnen.


    Aber wie genau Teile ich dem Spawner mit, welche Arten von Monstern in der Welle sind bzw. in welcher Reihenfolge er sie mit welchem zeitlichem Abstand hintereinander spawnen sollte?


    Was würdet ihr sagen, ist da der "sauberste" Weg?


    Mein aktueller Ansatz wäre:


    Ich habe natürlich einen zombie_base und die anderen "Zombie Typen" sind Child BPs. Ich habe aktuell für jede Welle einen eigenen Array, wo drin steht, welche Zombie Typen er spawnen soll. Also im Grunde sowas:


    [Blockierte Grafik: https://i.imgur.com/ioPlpjw.png]


    Aber ein eigener Array für jede Welle scheint mir so umständlich. Übersehe ich irgendwas?

  • Ich finde du als Player möchtest natürlich den Computer besiegen, deswegen sollte der Computer auch versuchen dich zu besiegen in dem er die Einheiten bringt die dir gar nicht in dem Kram passen. Dein Vorteil als Spieler ist, das du den Strategie vorteil auf deiner Seite hast.

    Ich fände es jedenfalls doof wenn der Zufall darüber entscheidest ob du gewinnst oder verlierst, ich finde etwas mehr Herraus Forderung sollte schon sein.


    Wie wäre folgendes:

    1.Der Spieler bekommt bei jeder Einheit eine Karte, es werden maximal 10 Karten angezeigt bevor die erste wieder verschwindet.

    2.Der Spieler braucht einen Kartensatz von 3 Karten um ein bestimmtes Ereignis hervorzurufen. könnte zb sein: Eine bestimmter Gegner Typ, vielleicht auch aus Karten Parten die wellen so bestimmen. oder einen Bombenangriff (Napalm) per Luft) Der Ziel ort könnte auch Zufall sein. Vielleicht auch sowas wie Portale wo die Zombis verschwinden und an anderer Stelle wieder rauskommen oder nur temporär von ihnen aufgesaugt werden und alle auf einmal wieder ausgespukt werden.


    So könnte man Reihen aufbauen in welcher Reihenfolge welcher Gegnertyp gespawnt wird und welche Türme man dann gegen sie einsetzt oder welcher Superwaffe man einsetzt um wieder Zeit zu gewinnen.


    Spielemechanisch, könntest du den Spieler so mit den Karten unter Druck setzen da er die auch noch sammeln muss und sich natürlich auch überlegen muss welche Karten er nun am besten sammelt.


    Du könntest zb auch je nach welcher Turm der Spieler baut eine Punkteanzahl vergeben. Baut er zb noch billige Türme die nicht gut gegen gepanzerte Zombies sind, dann kommen überwiegend gepanzerte Zombies.

    Der Spieler wird dadurch gezwungen zu überlegen was er als nächstes baut, wann er es baut und wann er es baut. Den wie gesagt der Computer stellt sich darauf ein.


    Wer die Karten nicht einsetzt oder sie schlecht einsetzt müsste auf dauert verlieren. Dann ist das sicherlich spannend zu balancen


    Ich würde unterscheidliche Gegner auch immer in unterschiedlicher Anzahl kommen lassen Einheiten Typ 1 kommen immer 5. Typ2 sinds immer 3 usw. Ich finde als Spieler bekommt man dann auch ein besseres Gefühl dafür auf einen zukommt. UNd du weißt was du tun muss wenn un Typ1 EInheiten kommen gegen die du fast nichts ausrichten kannst.

  • Sooooooo - wir sind endlich bei einer "spielbaren" Version 0.0.1!


    Ich habe alle Mechaniken drin, die Wegfindung funktioniert so, wie sie soll, die Menüführung funktioniert (alles ganz billig zusammengeklickt), ich habe schwebende Schadenszahlen ergänzt. Es gibt einen separaten "Baumodus", außerdem "Irrlichter", die den Weg zeigen, den die Zombies nehmen werden. Den Zombies habe ich ein paar (wenige) mehr Polygone spendiert. Aktuell experimentiere ich mit einer Minimap, um zu testen, ob ich eine drin haben möchte oder eher nicht.



    Der nächste Schritt ist jetzt, die Anzahl Fallen auf mindestens 3 zu erhöhen:


    • Die Feuerfalle (existiert ja bereits) soll umgebaut werden zu einer Damage-over-time Falle. Sie setzt Gegner in Brand (nicht stackable, also Gegner brennen oder brennen nicht - mehrere Feuerfallen hintereinander bringen nichts). Solange ein Gegner brennt, nimmt er pro Sekunde Schaden. Brennende Gegner laufen schneller.
    • Aus dem Boden schießende Klingen. Diese "billige" Falle ersetzt im Hinlick auf die Funktionalität die aktuelle Feuerfalle, sie macht einfach Schaden und lädt dann wieder auf.
    • Slow-Falle. Diese Falle verringert (zeitweilig) die Bewegungsgeschwindigkeit von Monstern. Kann man im Idealfall hinter die Feuerfalle setzen, um brennende (also schnelle) Gegner auszubremsen.

    Danach will ich eine zweite Variante von Zombies einführen: "Feuer-Zombies", die resistent gegen Feuerschaden und Brennen sind.

  • Wie angekündigt habe ich heute morgen die aus dem Boden schießenden Klingen (in letzter Instanz jetzt: Speere) gebaut und ins Spiel implementiert.



    Wie gesagt, eine billige Starter-Falle. Man kann damit schnell große Flächen zukleistern, der Schaden ist aber eher gering.


    War dann tatsächlich beim Einbau in das Spiel etwas stressiger als zunächst angenommen, da ich natürlich eine "parent" Falle habe; ich musste einiges umbauen, damit ich als einzelne children sowohl Fallen haben kann, die einen einzigen Gegner treffen, als auch Fallen, die alle Gegner im Wirkungsbereich treffen. War ein bisschen Wurschtelei. Aber spart hinten raus vmtl. viel Zeit. Hoffe ich. :D

  • Ich habe das ganze Spiel jetzt in ein "Nacht Setting" verlegt. Das passt einfach besser zum Zombie-Setting.


    Allerdings habe ich das Problem, dass es keinesfalls zu dunkel sein darf. Es bleibt ein Strategiespiel und daher braucht der Spieler den Überblick. Deshalb ist sämtlicher Nebel auch wieder rausgeflogen. Der Spieler muss seine Umgebung und die Zombies gut erkennen können. Schlussendlich habe ich mich für die "helle Mondnacht" entschieden.


    Außerdem hab ich das Zombie-Modell wieder überarbeitet. Die Zombies haben jetzt Arme und Grün leuchtende Augen.


  • Heute nur zwei kleine Ergänzungen, bevor die Verwandtschaft zum Sonntagsessen kommt:


    Zum einen übergebe ich den Schadenszahlen jetzt eine Color-Variable. So kann der Schaden eine andere Farbe haben, abhängig von der Quelle.


    Hier im Bild (Test) kommt der rote Schaden von den Fallen auf dem Boden und der blaue Schaden von einem Schuss des Spielers. Das soll dem Spieler die Übersicht erleichtern, woher grade welcher Schaden kommt.


    Tickender Feuerschaden ist orange, Arkanschaden pink, physischer Schaden weiß usw. usf.



    Außerdem habe ich "post game stats". Wenn die Letzte Welle auf einer Map besiegt wurde, blendet er Statistiken ein. Das soll noch ausgebaut werden, bspw. "Kills durch Fallen", "Kills durch [Element X]", Spielzeit, "Ausgegebenes Geld" usw. usw.


  • So, inzwischen funktioniert auch der Feuerschaden wie er soll.


    Stand aktuell:


    Speerfalle: Verursacht alle 3 Sekunden 15 Schaden an allen/beliebig vielen Monstern, die sich auf der Falle befinden.

    Feuerfalle: Zündet die drei ersten Gegner, die auf eine Falle laufen an. Muss dann 20 Sekunden "nachladen". Angezündete Gegner erleiden - sofern sie nicht resistent gegen Feuer sind - über 5 Sekunden pro Tick (Sekunde) 6 Feuerschaden (ergo 30 Schaden über 6 Sekunden).


    Bzgl der Gegner gibt es normale Zombies (grüne Augen), à 100HP und Feuerzombies (rote Augen) à 120 HP. Die HP werden als "Lebenspunkte-Balken angezeigt". Diese Option wird vermutlich optional, d.h. der Spieler kann in den Optionen einstellen "[X] Lebenspunkte-Balken einblenden" und "[X] Lebenspunkte anzeigen" (im Sinne von: Zahl, z.B. "80 / 100"). Dann kann es sich jeder nach Lust und Laune konfigurieren, ich persönlich bin der Meinung, die Balken sind nützlich und hilfreich. Groß Optionen einbauen lohnt sich aber erst, wenn die Einstellungen zwischen sessions gespeichert werden, was aktuell (noch) ncicht der Fall ist.




    Grundsätzlich hat noch keinerlei "fine tuning" stattgefunden, also


    • welche Falle macht wie viel Schaden / hat wie viel Nachladezeit / kostet wie viel
    • wie viel Lebenspunkte hat welcher Zombie
    • wie schnell bewegt sich welcher Zombie
    • wie viele Lebenspuntke hat das Herz
    • wie viel Schaden macht der Spieler an Zombies

    Das muss sich alles nach und nach einpendeln.


    Ich werde jetzt daran arbeiten, levelübergreifenden Fortschritt speichern zu können. Das ist die Voraussetzung dafür, dass ich einen ersten "Skilltree" einbauen kann.


    Meine grobe Vorstellung sieht (für den Anfang) so aus:



    Es gibt verschiede Trees für verschiedene Fallentypen; je weiter man voranschreitet, desto mehr "kosten" die Skills. Der Spieler kann entscheiden, welche Fallenart er wie schnell ausbaut. Über den Skilltree können dann auch neue Fallen freigeschaltet werden.


    Soweit erstmal! 8)