Die Gemäuer von Kalawaum: Wer kennt es?

Alle Spiele, egal ob am PC, auf der Konsole oder dem Handheld werden hier diskutiert.

Beitrag » 30. Jul 2020 16:36 #51

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

The Gravedagokck hat geschrieben:
30. Jul 2020 15:41
Ich finde, du ersetzt die altbackenen Features gut durch neue, die man ja auch aus anderen Roguelikes kennt, finde ich gut. :) Zum Riss in der Mauer: ganz oben, wo die Mauer ihren ersten Knick macht (bissle weiter rechts als links) in der Mitte des ersten Knicks. :D
Die wesentlichen Änderungen und Komfort-Features werden sich tatsächlich auf den Editor beziehen. Das Gameplay selbst will ich so wenig wie möglich anfassen, das ist unkaputtbar - eventuell hier und da besseres Balancing, damit vor allem der Einstieg ins Spiel ETWAS freundlicher vonstatten geht; - wie du schon erkannt hast, im Grunde ist das ein Roguelike, ein recht simples, und da gehört eben auch ein bißchen dazu, daß einem eine Verkettung unglücklicher Zufälle die Session versauen kann. Das macht andererseits den Wiederspielwert aus, da es trotz weitgehend fixer Architektur ausreichend prozedurale Elemente gibt, die für Abwechslung sorgen.
Wenn ich aber daran denke, daß du beim Editor damals keinerlei (oder bestenfalls minimale) Mausunterstützung hattest ... da mußtest du tatsächlich mit den Pfeiltasten einen Cursor auf ein Tile bewegen, dann einen Hotkey drücken, dann mit den Pfeiltasten den Raum (oder den Gang) "aufziehen", und dann wieder mit Hotkey die Veränderung an der Architektur bestätigen. Und die Items wurden ebenso platziert. Und ab einer bestimmten Anzahl an Maps mußtest du beten, daß dir das Programm nicht abschmiert.
Mit Maus UND Hotkey-Support habe ich einen kompletten Dungeon innerhalb weniger Minuten gezeichnet und im selben Zeitraum bereits dreimal getestet - ob dieser funktional ist und Spaß macht, steht natürlich auf einem anderen Blatt. :uff:
Mit dem Zufügen neuer Features bin ich SEHR vorsichtig - wie weiter oben mal erwähnt, bin ich kein kompletter Noob auf dieser Schiene, dies ist bereits der 5te Versuch etwas Rogueiges auf die Beine zu stellen - alle vorherigen Projekte sind eingeschlafen, aus unterschiedlichen Gründen. Einmal ist mir die Programmiersprache unter den Händen weggestorben (RIP, BlizBasic), die anderen beiden Male hatte ich kein klares Konzept wo ich mal hinwill außer "Ich mach jetzt ein Roguelike", das vierte Projekt war eine GameJam-Fingerübung, wo man ohne Schwert eine 50% Chance hatte, das Monster zu besiegen, mit Schwert 100%. :ugly:
Dieses Mal habe ich das erste Mal tatsächlich einen absehbaren Scope, ein einigermaßen absehbares Ziel worauf ich hinarbeiten kann.
Und vielen Dank für euer doch überraschend reges Interesse an diesem Nischenprojekt, ist sehr motivierend für mich - scheint, als hätte ich mir das richtige Forum ausgesucht. Und mit ein bißchen Glück guckt Runkel a.k.a. Horst Werner auch nochmal vorbei ... würde ihn gerne mal zu einem Bier einladen und wäre sogar bereit, dafür > 100 km zu fahren - der Mann ist schließlich der Held meiner Jugend. :bier:
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 31. Jul 2020 21:49 #52

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

Clipboard08.jpg

UPDATE:

Der Teil der Editor-Programmierung, vor dem es mir am meisten gegraust hat, ist geschafft! :kaffee: :kaffee: :kaffee:
Jetzt ist es möglich, alle Felder mittels simpler Point&Click-Interaktion mit anderen Feldern zu verlinken, in dem man zunächst eine Source-Koordinate setzt, und anschließend eine Target-Koordinate; sobald beide Koordinaten gesetzt sind, wird ein Link-Actor() "erschaffen". Eine Target-Koordinate kann sich auch auf einer anderen Map befinden - so kann man später im Spiel zwischen Maps hin- und hergehen (in dem man z.B. Link-Actors() auf Türen platziert), oder Teleporter kreieren (ein dafür passendes Tile existiert ebenfalls).

Bewegt man im Editor die Maus auf ein solches Link-Tile, wird ein roter Faden zur Partner-Koordinate gezogen - befindet sich diese auf einer anderen Map, zieht der Faden stattdessen in die untere rechte oder linke Ecke, je nachdem ob sich das Partner-Tile auf einer Map vor oder hinter der aktuellen befindet. Die genauen Koordinaten werden ebenfalls angezeigt.
Ein Rechts-Klick auf entweder Source- oder Target-Koordinate im Link-Mode löscht den zugehörige Link-Akteur.

Das war eine relativ komplexe Angelegenheit, da mit einer solchen Mechanik Tür&Tor für NullPointer()-Exceptions geöffnet werden, welche alle abgefangen und gefixt werden müssen. Einige besondere Edge-Cases, Interaktion der Link-Akteure mit anderen Actors(), mußten ich ebenfalls berücksichtigen.

Sind Source und Target-Koordinate übrigens gleich, bekommt man eine Teleport-Trap! Diese kann auch von Monstern genutzt werden: bewegt man sich auf ein solches Tile, wird man auf ein zufälliges freies Tile irgendwo in der aktuellen Map teleportiert.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 1. Aug 2020 06:07 #53

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

Clipboard09.png
Clipboard09.png (8.81 KiB) 334 mal betrachtet

Wie findet ihr meinen Schnabel-Doktor? :uff:
Habe mich für ein Dark Fantasy-Szenario mit Lovecraft-Monstern entschieden, da passt so ein Charakter ganz gut, habe ich mir gedacht. Komme auch mit der 16x16 Pixel-Art mittlerweile ganz gut zurecht. Die Sprites werden auf 32x32 hochskaliert - später dann, mit mobilem Viewport, gehe ich wahrscheinlich auf 48x48 hoch.

Auch die Editor UI is soweit fertig ...
Speichern, laden, Actor-Subtypen browsen, Maps adden und löschen, editieren, Tile-Verlinkung, Testen, etc. funktioniert mittlerweile wie am Schnürchen. Es fehlen nur noch einige Tile-Subtypen, wie zum Beispiel Säulen, Schreine, Waffen, Steintafeln mit Innschriften und Schilde.
Generell kann man sagen, daß jetzt der Fun-Part des Projektes beginnt! :hoch:

Clipboard10.png
Clipboard10.png (3.69 KiB) 334 mal betrachtet
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 1. Aug 2020 10:44 #54

Benutzeravatar
The Gravedagokck
Wiesenchronist
Moderator
Beiträge: 42112
Kontaktdaten:

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von The Gravedagokck »

Sehr vorbildlich, der Protagonist (in diesem Fall) trägt Maske. :D Du kommst echt flott voran, finde ich! :hoch:
Got to be who you are in this world
Never walk out on your own story
But if you ever need me again
You know that I'll be, I'll be around.

Beitrag » 1. Aug 2020 16:18 #55

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

Goldene Programmier-Regel: 80% Code entstehen in 20% der Zeit ... :ugly:
Maske ist Ehrensache. Allerdings hier im Spiel ausnahmsweise tatsächlich nur zum Eigenschutz - Kultisten und Shoggothen kriegt man mit Corona nicht kaputt.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 2. Aug 2020 23:25 #56

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

Clipboard11.png
Grafisch und Spielmechanisch hat sich nicht allzuviel geändert, dennoch für mich ein wichtiges Update, in dem unter der Oberfläche viel passiert ist. Bei rund 3000 Zeilen Code ist es z.B. angebracht, aufzuräumen und zu strukturieren. Habe hardgecodeten Mist ausgelagert, abstrahiert und flexibel umformuliert. Zum Beispiel gibt es keine FloorSprites und WallSprites mehr, sondern nur noch BaseSprites (beschrieben durch die #actorBase-Klasse). Die Base-Klasse verfügt über die Subtypen Wall und Floor, welche nur noch virtuell existieren und hauptsächlich dazu da sind, daß ich in Arrays schnell abfragen kann, welche Beschaffenheit ein Floor- oder Wall-Tile hat.

WEITERE UPDATES:
- Langsam kristallisiert sich eine finale Palette mit 16 Farben heraus (ich arbeite mit "Aseprite" und indexierter Palette, so kann ich auch bei Anpassungen stets alle Sprites farblich konsistent halten)
- Die Obstacle-Klasse wurde um den Pillar-Subtypen erweitert.
- Animations-Prozedur initialisiert - die kann zwar bislang nur einen Delay abspielen, muß auch später nicht sonderlich viel leisten, trotzdem gibt es einige Ereignisse (wie z.B. das Fallen in Löcher und Kämpfe), welche Bewegung benötigen um atmosphärisch zu überzeugen.
- Editor-Funktionen weiter verfeinert (z.B. wird jetzt beim Speichern grundsätzlich ein File-Requester geöffnet, wo man seinem .mod-File einen Namen geben kann, und der gewählte Pfad wird in defaultMod$ gespeichert, so können nicht länger versehentlich Daten überschrieben werden, und beim Testen weiß das Programm sofort, welche Daten zu laden sind.
- Es gibt Fallen: Löcher und Speerfallen. Beide sind für Monster wie Spieler tödlich - Speerfallen sind leichter zu erkennen, sind aber, nachdem man ein Monster hineingelockt hat, verschwunden. Löcher sind unendlich tief und schwerer zu erkennen; die Positionen von Fallen bleiben von Spiel zu Spiel fix, hat man also ihre Location verinnerlicht, wird es zunehmend leichter den Dungeon zu navigieren.
- Die Pentagram-Shades haben zwei Zustände, rot und lila (deren Zustand - nicht die magischen Türen! - wird für jeden Shade initial ausgewürfelt). Rote Pentagramme kann NUR der Spieler betreten, auf violette dürfen AUCH Monster, und da Monster und Spieler derselben Klasse angehören, können Monster jetzt auch Pentagram-Schalter betätigen - das ist eine Neuerung gegenüber dem Originalspiel, ein simpler Tweak, aber ich kann mir vorstellen, daß damit einiges an emergent complexity erzeugt wird. :uff:

Wer entdeckt alle Löcher auf dem Screenshot? :confused:
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 3. Aug 2020 10:06 #57

Benutzeravatar
The Gravedagokck
Wiesenchronist
Moderator
Beiträge: 42112
Kontaktdaten:

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von The Gravedagokck »

Ich muss zugeben, ich sehe die Löcher gar nicht. :D Was sind denn die Speerfallen? Die, die so aussehen wie eine römische 2 oder die, die aussehen wie ein Pfeil?
Got to be who you are in this world
Never walk out on your own story
But if you ever need me again
You know that I'll be, I'll be around.

Beitrag » 3. Aug 2020 16:18 #58

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

Die römische 2 soll eine Säule sein. Soviel zu meinen künstlerischen Ambitionen ... :uff:
Es gibt 2 Löcher, eins im grünen Streifen nördlich der oberen Tür, das andere im nordöstlichen Raum des Indoor-Bereichs. Wenn man weiß, wo nach man gucken muß, finde ich es eigentlich recht eindeutig. :uglycafe:
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 3. Aug 2020 23:27 #59

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

Clipboard12.png

UPDATE:

- Nicht allzuviel passiert heute, aber es gibt jetzt Schreine!
Da ich das originale "Kalawaum" niemals durchgespielt habe, weiß ich nicht ob es da überhaupt ein Ziel gab, außer irgendwann zu sterben und dann mit seinem bis dahin gesammelten Gold in die Highschore-Annalen einzugehen ... bei mir jedenfalls wird es ein thematisches Objective geben, und dafür sind die Schreine notwendig; z.B. kann man hier den Großen Alten Blutopfer darbringen und um ihre Gunst bitten ... jede Map muß mindestens zwei Schrein-Objekte besitzen - wenn man mehr platziert (was man machen sollte!), werden für die letztendliche Session 0-2 ausgewürfelt, die anderen werden gelöscht. So kommt Abwechslung in jedes Spiel. Und damit das Objective funktioniert, wird natürlich gewährleistet, daß das dafür notwendige Minimum an Schreinen im gesamten Modul vorhanden ist.
Schreine gabs im originalen "Kalawaum", waren da aber fix platziert, und nicht essentiell fürs Vorwärtskommen, die Möglichkeit, die Götter anzurufen (mit unterschiedlichen Erfolgschancen) gab es dort aber auch.

- Auch neu, Spawn-Traps (die gabs auch im originalen Spiel): Spawn-Traps dürfen im Editor platziert werden, können aber auch zufällig erscheinen. Wenn man auf eine solche Falle tritt, wird ein zufälliges Monster in die aktuelle Map teleportiert, welches dann auch sogleich Jagd auf den Spieler macht. Ich habe die Funktionalität für die Monster-Klasse allgemein ausgebaut - sprich, die lieben Kleinen sind selbst in der Lage, die Spawn-Traps zu betätigen ... :uff: :uff:
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 5. Aug 2020 22:29 #60

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

UPDATE:

- Habe eine Möglichkeit gefunden, in allen Verarbeitungs- und Darstellungs-Routinen nur diejenigen Objekte durchzuiterieren, welche in der jeweiligen Map vorhanden sind, ohne dafür die Objekte in eine globale und lokale Liste aufsplitten zu müssen (das würde spätestens, wenn Objekte während des Spiels gelöscht/kreiert werden, extrem messy werden) - der essentielle Trick war, bei Betreten einer neuen Map den stage-Parameter aller Objekte der aktuellen Map auf -1 zu setzen, dann die Liste mit SortStructuredList(listName(), #PB_Sort_Ascending, OffsetOf(STRUCTURE\stage), TypeOf(STRUCTURE\stage)) nach Größe des stage-Index zu sortieren, und anschließend alle -1 Paramter zurück auf den Index der aktuellen Map setzen .... Voila, alle Objekte der aktuellen Map befindet sich am Anfang der Liste, und in den jeweiligen Verarbeitungsroutinen kann ich nun, sobald ein stageIndex <> currentMap auftaucht, die ForEach/Next-Schleife vorzeitig canceln. Theoretisch ist es so möglich, ein Modul mit 1000 und mehr Maps laufen zu lassen ohne daß die CPU einknickt - irgendwann wird natürlich der Arbeitsspeicher knapp. :ugly: Diesen Schritt muß man einmalig beim Betreten einer neuen Map ausführen, und ich darf ab sofort nicht mehr vergessen, Objekte, die innerhalb des Spiels erzeugt werden, umgehend mit MoveElement() an den Anfang der Liste zu schieben, damit sie sich im gegenwärtigen Verarbeitungskreislauf befinden. :uff:
John Carmack wäre wahrscheinlich trotzdem stolz auf mich. :D

- Neu sind Wegsteine, die man über einen Text-Button mit einer Inschrift versehen kann - wichtig für Atmosphäre und den Adventure-Charakter des Spiels! Das ging überraschend elegant mit den Gadget-Routinen von "PureBasic": ein neues Fenster öffnet sich, in dem man seinen Text schreiben kann, und sobald das Fenster geschlossen wird, werden die ersten 5 Zeilen per GetGadgetItemText() ausgelesen und als String im zugehörigen inscription()-Objekt gespeichert. Editieren geht auch: einfach einen beschriebenen Wegstein mit dem Text-Tool anklicken, und das Bearbeitungs-Fenster öffent sich wieder. Inschriften sind verlinkt mit den Steinen, also wenn man einen Stein löscht, verschwindet auch die Inschrift.
Und wenn man im Editor mit dem Maus auf einem beschriebenen Wegstein zeigt, wird, falls vorhanden, der zugehörige Text in einer Vorschau eingeblendet.

- Was jetzt noch fehlt, ist ein Message-System, mit dem man dem Spieler WÄHREND dem Spiel Informationen und Nachrichten zukommen lassen kann ... die schönsten Wegsteine nutzen nichts, wenn man sie nicht lesen kann ... das geschieht im nächsten Schritt, und dafür muß ich mich auf die Suche nach einem schicken Bitmap-Font machen.

Clipboard14.png
Clipboard14.png (4.84 KiB) 169 mal betrachtet
Clipboard13.png
Clipboard13.png (5.3 KiB) 169 mal betrachtet

- Habe die Säulen-Grafiken überarbeitet - mit 16x16 Bildpunkten kannst nur soviel anstellen, aber es sieht jetzt besser aus, finde ich. Habe mich bewußt eingeschränkt, da ich so auch als Nicht-Grafik-Profi relativ schnell brauchbare Ergebnisse erziele und es so leichter ist, einen konsistenten Stil aufrechtzuerhalten. Grundsätzlich macht mir der Design-Aspekte, trotz kleiner, bescheidenen Möglichkeiten, sogar Spaß.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 6. Aug 2020 23:46 #61

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

So langsam tut sich was im Dungeon ...
Das Message-System ist implementiert! :) :uff:
In "PureBasic" gibt den den tollen Befehl RegisterFont(), damit lassen sich Fonts spezifisch für das Projekt initialisieren, ohne daß der Endnutzer diese installieren muß. Sie werden lediglich für die Anwendung "registriert".
Ich habe es maximal modal gecodet - also der Routine createMessage() wird lediglich die entsprechenden Zeilen-Strings mitgeteilt, und aus den übermittelten Daten wird abhängig von Zeilenlänge, Anzahl und gewähltem Schriftfont die korrekte Höhe und Breite der Message-Box ermittelt - sollte sich später der Schriftfont ändern, muß ich an der Routine nichts mehr herumfuckeln - "it just works". Die Message-Box wird zudem "intelligent" platziert: ist der Spieler in der oberen Hälfte des Screens, wird die Box zu seinen Füßen angezeigt, befindet er sich unterhalb der Screen-Mitte, wird sie über ihm angezeigt.

Clipboard15.png

WEITERE UPDATES:
- Einen letzter Obstacle-Akteur zugefügt: ein Kerzenleuchter.
- Im Editor platzierte Teleport-Traps haben im kompilierten Modul keine absolute Location. Es werden lediglich beim Initialisieren der Map alle vorhandenen Teleport-Traps gezählt, dann werden sie gelöscht, und zufällig neu verteilt. Die einzige Regel ist, daß lediglich in diagonalen Richtungen blockierende- und Special-Tiles angrenzen dürfen (Special = begehbar, mit Effekt; z.B. offene Türen werden auch als Special-Tile gewertet). So bleibt eine 100% Navigation gewährleistet.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 7. Aug 2020 23:04 #62

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

UPDATE:
- Habe meine 16 Farben als konstanten Datensatz im Programmcode hinterlegt, so daß sich jegliche Grafik-Operationen (inklusive Text-Darstellung) stets kohärent zur Palette extern eingelesener Sprites verhalten.
- Jeglicher Ingame-Text, der nicht individuell im Editor als Inschrift "designt" wurde (HUD-Infos, Eigennamen, generische Interaktionen, etc.) wird zu Beginn des Spiels in dimensionierten Strings eingelesen, in einer Data-Sektion, welche zudem die Funktionalität für verschiedene Sprachen unterstützt. Die Sektion funktioniert autonom und leicht zu warten - eventuell kann man die Strings auch später über eine seperate .txt-Datei einlesen:

Clipboard16.png

- Die Outdoor-Tiles werden nicht länger als obstacle()-Akteure geführt, sondern gehören der Base-Klasse an, funktionieren also intern wie ein weiteres Wall-Tileset. Damit zusammenhängend mußte ich ein paar Ausnahmen coden, z.B. haben Bäume keine perspektivische Frontansicht, und der Grass-Untergrund ist als Backgroundgrafik fix gesetzt. Außerdem funktionieren "Geheimgänge" etwas anders: jeder actor() hat jetzt ein individuelles Alpha-Flag, und geheime Durchgänge im Wald sind ein kleines bißchen transparent ... wie bei den regulären Geheimgängen muß man aber auch hier genauer hinschauen um sie zu entdecken ... :)

Clipboard17.png
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 8. Aug 2020 15:31 #63

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

Clipboard18.png
Clipboard19.png

UPDATE:
Erweiterte interaktive Message-Funktionen sind fertig!
Diese sind fester Systembestandteil für diverse Gameplay-Mechaniken (Türen mit Gewalt öffnen/Schrein-Interaktion) und können nicht im Editor erstellt werden. Die Routine nutzt jedoch dieselben Bausteine der Standard-Message-Funktion, ist also maximal modal designt. Die displayMessage()-Routine erkennt, ob sie eine reine Text-Message wiedergibt, oder eine mit interaktiven Elementen, und ist somit in der Lage einen Wert an den Requester zurückzugeben, ob und welche Option ausgewählt wurde.
- Blutsplitter sind die Währung im Spiel - man kann sie im Dungeon finden, und sie werden von besiegten Monstern gedroppt. Mit ihnen kann man sich die Gunst der Götter erkaufen, sie dienen aber auch als Punkte-Elemente (mit der Option "Inschriften entziffern" kann man sich die Highscore-Liste anzeigenlassen).
- Da mein erklärtes Ziel weiterhin darin besteht, das originale "Kalawaum" zu re-designen, wird an Schreinen zunächst nur die "Inschriften entziffern" und die "Opfer darbringen"-Option angeboten. Der Rest ist Design-Space für eigene Ideen um das Gameplay aufzupeppen. Das soll jetzt aber erstmal nicht der Fokus sein.
- Ich habe einen Datensatz an Alten Göttern eingelesen - für jede Session werden 4 zufällig ausgewählt, von denen Schreine im Spiel zu finden sein werden. Götter sind unterschiedlich gut (oder schlecht) gelaunt - während einer Session bleibt die Stimmung eines Gottes immerhin konsistent, also man muß in jedem Spiel neu lernen, welcher Gott wie drauf ist. :uff: :uff: Meine Idee für ein besonderes, an Schreine gekoppelte Objective werde ich aber ebenfalls zurückstellen, und stattdessen mit Hochdruck an der Fertigstellung eines spielbaren Prototypen werkeln ... wenn alles weiter so gut läuft, vielleicht schon Ende August, aber spätestens September! :hoch:

Clipboard20.png
Clipboard20.png (11.09 KiB) 106 mal betrachtet
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 8. Aug 2020 23:01 #64

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

Clipboard21.png

UPDATE:

Meine Animations-Routine ist fertig!
Bislang kann sie zwar nur das Hinabstürzen in Löcher darstellen und einen Delay abspielen, aber jetzt, wo die grobe Architektur steht, kann ich ihr leicht neue Aufgaben zuteilen. Und viel komplexer als der Sturz in ein Loch wird es auch nicht - das war schon mit der aufwendigste Task, und die Hauptarbeit bestand hier auch nicht in der Darstellung, sondern im korrekten Konfigurieren der Sprites (jedes Monster-Sprite bekommt bei Erstellung eine prozedural erstellte Fall-Animation zugeteilt).
Es war in sofern wichtig, daß ich mich der Aufgabe zuwende, da ich nun im nächsten Schritt das erste Monster in den Dungeon einführen werde. Da der Spieler auch der Monsterklasse angehört, können prinzipiell alle Aktionen und Effekte, welche auf den Spieler wirken, auch auf Monster-Objekte angewendet werden - und um hier sicherzustellen, daß alles reibungslos funktioniert, kann ich mit dem Schritt nicht zu lange warten, da er von allen Aspekten des Spiels das weiteste Interaktions-Potential mit diversen Routinen und Gameplay-Mechaniken besitzt.
Da muß alles reibungslos laufen, bevor ich weiteren autonomen Content hinzufüge. :hoch:

Clipboard23.png
Clipboard23.png (6.01 KiB) 99 mal betrachtet
Clipboard22.png
Clipboard22.png (6.01 KiB) 99 mal betrachtet

- Außerdem kleiner Tweak: da ich in einem für die jeweils aktuelle Map lokal angelegten monsterMap()-Array stehts Buch darüber führe, welche Felder durch Monster besetzt sind, kann ich easy und schnell Akteure, welche sich auf denselben Feldern wie Monster befinden (z.B. Pentagramm-Schalter und Items), mittels Alpha-Value teil-transparent machen - kostet quasi keine Zeit, sieht cleaner aus, und Hintergrund und Monster-Sprite verschwimmen nicht zu einem Pixelwust.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 9. Aug 2020 17:13 #65

Benutzeravatar
The Gravedagokck
Wiesenchronist
Moderator
Beiträge: 42112
Kontaktdaten:

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von The Gravedagokck »

Ui, da ist man einmal ne Woche weg und schon ist wieder einiges passiert, sehr schön. :D :hoch:
Got to be who you are in this world
Never walk out on your own story
But if you ever need me again
You know that I'll be, I'll be around.

Beitrag » 9. Aug 2020 19:20 #66

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

Vielen Dank fürs Reinschauen. So ab und zu ein aufmunterndes Wort, das ist alles was ich brauche :uff:
Großes Update auch in diesem Post ...

Clipboard24.jpg

"Ladies and Gentleman, the first Monster has just entered the dungeon ..."
Das war eine Aufgabe für die ganze Nacht ... habe bis morgens früh um 5:00 durchprogrammiert, bis das alles so funktionierte wie gedacht (NullPointer-Exceptions, Array Index out of Bounds-Meldungen, etc.), aber jetzt habe ich die komplette Monster-Navigation fertig. :kaffee: :kaffee:
Monster haben verschiedene states: wenn sie "geboren" werden, schlafen sie, bis der Spieler sie aufweckt (wenn er ein Feld neben ihnen betritt). Dann bekommt das Monster den Zustand "aufgewacht", der Spieler hat also die Wahl ob er direkt draufhauen, oder weglaufen will. Im nächsten Schritt wechseln Monster in den Verfolger-Modus ... die KI und Wegfindung ist rudimentär, leistet aber ihren Zweck, und viel mehr hatte das Original auch nicht zu bieten - Ich habe das so gelöst:

Monster suchen die 8 umliegenden Felder ab, und geben jedem Feld einen Wichtungsfaktor, abhängig von der Distanz jedes Feldes zum Spieler im kartesischen Koordinatensystem (Satz des Pythagors, anyone?). Die Formel hierfür lautet:

Sqr(Pow(x-targetX, 2) + Pow(y-targetY, 2))

Für jedes Feld wird ein dummy()-Element angelegt, welches die Koordinaten enthält, sowie den Wichtungsfaktor. Dann werden alle Elemente herausgeschmissen, für welche Distanz > Minimum. Von den verbleibenden Feldern (in der Regel 1-2) sucht das Monster eines zufällig heraus und bewegt sich dorthin. Das reicht, um dem Spieler auf den Fersen zu bleiben, aber hat man es einmal abgeschüttelt, ist es in der Regel in seiner Ecke gefangen, solange bis man im großen Bogen zurückkommt.

Und da kommt der nächste monster()\state ins Spiel, der "Such"-Modus: Sobald nämlich das Monster mindestens 2 Felder weit entfernt vom Spieler ist, werden bei der Umgebungssuche die letzten 4 besuchten Felder mit einem abnehmenden Penalty-Wert belegt. Mit dem feinen Trick habe ich natürlich keine Skynet-KI geschaffen, aber die Monster sind jetzt mitunter in der Lage weiträumiger nach Umgehungen zu suchen, anstatt nur mit dem Kopf vor die Wand zu laufen. Der "dumme" Verfolger-Modus bei unmittelbarer Distanz hat aber auch seinen taktischen Zweck - würde man hier die KI "einschalten" würde das Monster, wenn man um ein Hinternis herumläuft, immer nur stupide in einer Richtung hinterherlaufen, ohne die Richtung abzuwechseln.

Und wenn man das Verfahren umdreht, also die kurzen Distanzen filtert, hat man einen Flucht-Modus. :)

Puh, weitere Tweaks:

Es gibt eine Variable maxActiveMonsters, welche vorgibt, wieviele Monster gleichzeitig aktiv sein dürfen. Zu Beginn des Spiels ist dies immer 1. Also wenn man vor einem Monster wegläuft, und man weckt ein weiteres auf, wird das erste Monster in den Zustand "Lauern" versetzt (Lauern ist effektiv wie schlafen, aber die Monster wissen bereits vom Spieler), und das neu aufgeweckte Monster "übernimmt". Und jetzt kommt das große Aha: wenn ein Monster stirbt, wird automatisch gecheckt, ob sich auf der Map Monster im "Lauern"-Modus befinden, und wenn ja, werden von denen soviele aufgeweckt wie die maxActiveMonsters-Variable erlaubt. Also zu Beginn nur eines.
Mit maxActiveMonsters (etwas ähnliches gab es auch im Originalspiel, aber mein System ist deutlich elaborierter) lässt sich prima die Gefährlichkeit des Dungeons an den gegenwärtigen Power-Level des Spielers anpassen: jede Map hat eine min/max-Range wie stark die Monster mindestens sind, und sein können. Und da der Spieler effektiv auch nur ein Monster ist, und somit irgendwo auf dieser Skala zu finden ist, kann man den maxActiveMonster-Wert dynamisch anpassen. maxActiveMonsters wird einmal gecheckt, wenn man eine Map neu betritt, und dann jedesmal aktualisiert, wenn ein Monster stirbt.

Verlässt man eine Map, werden alle Monster, deren\state >= #monsterStateLurking ist, in den Zustand "Lauern" versetzt. Also man kann die Monster so vorübergehend "abschalten", und hat beim Neu-Betreten der Map auch erstmal seine Ruhe, bis man ein Monster erfolgreich besiegt - dann wachen unter Umständen eines oder mehrere (abhängig von maxActiveMonsters) lauernde Monster auf, um ihren Kameraden zu rächen.

Monster haben eine Animation beim Laufen (also keine wirkliche Animation im Sinne von Gliedmaßen bewegen, duh), aber das Sprite bewegt sich halt kontinuierlich aufs nächste Feld. Animationen werden nur ausgeführt, wenn auf entsprechenden Feldern der Fog of War aufgedeckt ist; also wenn man kein Monster sieht, werden für diese auch keine Animations-Berechnungen ausgeführt. Für den Spieler habe ich die Bewegungsanimation ohnehin deaktiviert - der bewegt sich statisch von Tile zu Tile, das fühlt sich besser, flotter und in jeder Hinsicht "knuspriger" an.

Bislang ist es nur möglich, Monster in Fallen zu locken (dies funktioniert hervorragend, inklusive Animation) - Monster teleportieren sich auch munter durch die Gegend, wenn sie auf eine Teleport-Falle treten - also meine Vorarbeit in dieser Richtung hat sich voll ausgezahlt.
Im nächsten Schritt werde ich das Kampf-System entwickeln.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Beitrag » 10. Aug 2020 15:36 #67

Benutzeravatar
Lord Helmchen
Fuck everyone and Run
Beiträge: 11246

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von Lord Helmchen »

Cooles Projekt. Erinnert mich an mein Studium Beginn der 90er wo wir Assembler programieren durften (mussten) :hoch:
Laufchallenge (in km):
2011: 933,7
2012: 1.171,6
2013: 1.157,8
2014: 1.075,9
2015: 1.167,9
2016: 1.173,3
2017: 1.459,3
2018: 793,8
2019: 724,04
2020: 738,93

Beitrag » 10. Aug 2020 23:28 #68

Benutzeravatar
diceman
Beiträge: 26

Re: Die Gemäuer von Kalawaum: Wer kennt es?

Beitrag von diceman »

Clipboard25.png
Clipboard25.png (5.26 KiB) 38 mal betrachtet

UPDATE:

- Das wichtigste zuerst (warum hat mich eigentlich keiner darauf angesprochen?), DER DUNKELDÜRRE HAT NUR EINEN FLÜGEL!!1!
Ist jetzt zum Glück gefixt!

- Das "Bump"-System ist voll entwickelt! Das heißt, das Spiel registriert, wenn der Spieler in ein Monster rennt (und vice versa). Damit zusammenhängend hatte ich ein schönes Erlebnis bezüglich emergent behavior: ich hatte die Kollisions-Abfrage für das monsterMap()-Array herausgenommen, damit Kollisionen mit Monstern überhaupt als solche erkannt werden; hatte aber nicht bedacht, daß das Array nicht zwischen Monstern und Spielern unterscheidet, also begannen die Monster munter sich gegenseitig anzugreifen im Versuch, auf die entsprechenden Felder zu gelangen. Komplett mit allem was dazugehört: Schaden austeilen, Blut-Animation, Sterben, XP für den Spieler. Das sind solche raren Momente, da fühlt man sich so:
8884777495.jpg
auch wenn es nicht beabsichtig war, und ich es wieder deaktiviert habe.

- Blutgrafik zugefügt, wenn ein Charakter Schaden nimmt.

- Monster haben kleine Healthpoint-Bars! Der Spieler benötigt Feedback, wieviel Schaden er anrichtet, und das antiquierte Text-Message-System des Originals ("Du hast so und soviel Schaden gemacht, das Monster hat jetzt noch so und soviel Kraftpunkte") ist, nun ja, antiquiert. Die Frage war, wie ich das umsetze, also ob jedes Monster sein eigenes HUD-Element hat, wie ich die Prozentanzeige aktualisiere, etc. Habe mich letztendlich für die bequemste und schnellste Möglichkeit entschieden: 20 Healthbar-Sprites werden vorgerendert, mit Anzeige in 5%-Abständen, und in der drawScreen()-Routine, wenn durch die Monster iteriert wird, kann mit (hp*100)/hpMax/5 bequem und schnell der Index des korrekten Sprites herausgesucht und angezeigt werden. Bei so kleinen Grafiken die korrekte Prozentanzeige jedesmal "in Echtzeit" nachzujustieren, wäre Design-Overkill - die festen 5% Stufen sind absolut ausreichend um anschaulich zu vermitteln, wie effektiv der eigene Angriff war. Später, in der Polish-Phase, kommen noch Floating Numbers hinzu. :hoch:

- Die Healthbar-Anzeige wird dynamisch angezeigt, das heißt, nur bei aktiven Monstern ist sie zu sehen, und nachdem ein Monster 5 Schritte gelaufen ist, wird sie ausgeblendet. Sobald ein Monster angreift, oder der Spieler ein Monster, oder ein Monster geweckt wird, wird die jeweilige Anzeigen-Abfrage wieder auf #True gesetzt, und der Schritt-Counter resettet.

- Außerdem habe ich das Kampf-System grob entwickelt. Man kann zwar noch keine Waffen und Schilde aufsammeln, die entsprechende Funktionalität ist aber implementiert und ich kann Monster und Spieler virtuell via hardcoding ausrüsten. An den Zahlen werde ich noch schrauben müssen, da gibt es einige Rädchen an denen man drehen kann, aber fürs erste fühlt es sich ganz gut an (wie gesagt, ich habe keinen Quellcode des Originals, muß mich also auf Beobachtungs-Gabe und Einfallsreichtum verlassen, um ein ähnliches Erlebnis zu re-kreieren).

- Das Kampfsystem in "Kalawaum" ist so simpel wie genial: Die Hitpoints sind zugleich das Maximum an Schaden, die man theoretisch anrichten kann. Wieviel Schaden man macht, hängt von der ausgerüsteten Waffe ab (dahinter verbirgt sich eine prozentuale min/max-Range) - also je mehr Hitpoints ein Charakter verliert, umso näher ist er dem Tode, und umso weniger potentiellen Schaden kann er anrichten, da nützt die beste Waffe nichts. Wenn man herumläuft, regenerieren ALLE Charaktere (Monster wie Spieler) pro Spieler-Schritt einen Lebenspunkt. Das heißt, im Idealfall zwackt man einem Monster via Erstschlag soviele Hitpoints ab, daß es einem im Gegenschlag nicht mehr töten kann. Ansonsten ist taktisches Rumlaufen um Hindernisse angesagt, Monster abhängen indem man durch magische Türen geht, etc. nur um die Hitpoints wieder aufzufüllen. Alternativ kann man Monster auch in Fallen locken, dafür kriegt man jeweils nur 1 Erfahrungspunkt. So richtig XP regnet es nur, wenn man stärkere Monster (= mehr Hitpoints als man selbst) besiegt.

- Die XP-Anzeige gibt das Maximum an Hitpoints an, die man durch Rumlaufen erreichen kann - also es gibt kein Level-Up-System im herkömmlichen Sinne, dennoch wird man mit der Zeit kontinuierlich stärker.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste