Demandion - ein 2D Strategiespiel

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
Jay
Beiträge: 65
Registriert: Sa 29. Dez 2007, 02:21
OS, Lazarus, FPC: Linux, 0.9.30.4 Beta, FPC 2.6.0
CPU-Target: 32Bit
Kontaktdaten:

Demandion - ein 2D Strategiespiel

Beitrag von Jay »

Hallo,

ich bin gerade dabei, ein sehr komplexes Projekt mit dem Namen "Demandion" umzusetzen. Es handelt sich um ein 2D-Strategiespiel, welches in FreePascal geschrieben wird und die SDL-Library verwendet (im Moment lediglich für das Laden und Ausgeben von Grafiken/Surfaces). Somit ist es auch für fast jedes Betriebssystem (hauptsächlich Linux, Windows) compilierbar. Später soll es auch einen Multiplayer-Modus fürs Netzwerk geben. Ich kam auf die Idee für dieses Projekt, als ich gesehen habe, dass das meiner Meinung nach sehr gute Spiel "FreeCraft" (ein freier WarCraft-Klon) schon seit langem nicht mehr weiterentwickelt wird und verbesserungswürdig ist. Allerdings soll Demandion kein Remake sondern etwas mit eigenen Konzepten werden (schon alleine im Quellcode werden keinerlei Fremdanteile verwendet - mit Ausnahme der SDL-Library und Standard-Units). Dazu kommen noch einige Algorithmen, die zur Optimierung beitragen. Unter anderem werden alle Objekte auch in einer dynamischen, sortierten Liste hinterlegt, wobei jedes Objekt eine eindeutige ID besitzt. Somit können auch Netzwerk-Kommandos (z.B. dass die Figur sich bei anderen Spielern auch bewegt) mit Hilfe dieser ID an einzelne Objekte gesendet werden.

Im Moment funktionieren die "selbstgebastelten" Grafik-Klassen (einfache Bilderlisten, Spritesets (für Bildausschnitte/Tiles), Sprite-Objekte inkl. Animationen), Weltobjekt-Klassen (TWorldObject, TWorldTile, TWorld, TPlayer und TUnitBase - davon können später die anderen Einheiten - beispielsweise Gebäude, Schiffe, Drachen, Ritter, Soldaten, Arbeiter - abgeleitet werden) und Unterstützung für Layer (Ebenen) soweit ganz gut (ist aber noch an einigen Stellen verbesserungswürdig denke ich :wink:).

Als Grafiken verwende ich hauptsächlich die von Reiners-Tileset (http://reinerstileset.4players.de/deutsch.html). Die Ausgabe des Weltausschnittes auf dem Bildschirm mit Tiles- und den darauf befindlichen Objekten funktioniert auch soweit (konnte es allerdings nicht auf mehr als ca. 25 Frames die Sekunde optimieren - auch bei sehr vielen Objekten auf dem Bildausschnitt läuft es jedoch noch relativ flüssig). Allerdings reagiert es sehr empfindlich auf hohe Systemauslastung (siehe Screenshot). Im "Hardcore"-Teil kommen jetzt noch die Trigger dazu. Jedes TWorldTile kann somit als Trigger für andere TWorldObjects benutzt werden (z.B. wenn eine feindliche Figur ein Tile betritt, welches durch die Reichweite eigener Objekte als Trigger vorgemerkt wurde, wird diesen eine Art "Event" mit dem auslösenden Objekt als Parameter weitergereicht). Ich habe hierbei fast ausschließlich dynamische Arrays für Listen (anstelle von Pointern) verwendet, welche ziemlich viel Spielraum lassen.

Hier ein Screenshot vom aktuellen Stand (ich weiß, ist noch nicht sehr viel zu sehen):
demandion_snapshot1.png
Zuletzt geändert von Jay am Sa 31. Jul 2010, 16:27, insgesamt 6-mal geändert.

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von Teekeks »

Hi!
Dein Projekt klingt ja richtig gut!
Aber dein Screenie-Link ist nur ein Text :)

EDIT: Komisch, jetzt nicht mehr...

Jay
Beiträge: 65
Registriert: Sa 29. Dez 2007, 02:21
OS, Lazarus, FPC: Linux, 0.9.30.4 Beta, FPC 2.6.0
CPU-Target: 32Bit
Kontaktdaten:

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von Jay »

Teekeks hat geschrieben:Dein Projekt klingt ja richtig gut!

Danke! Ich werde mich bemühen, es so gut wie möglich hinzubekommen, dass es auch am Ende noch gut erweiter- und anpassbar ist.

Teekeks hat geschrieben:Aber dein Screenie-Link ist nur ein Text :)

EDIT: Komisch, jetzt nicht mehr...

Hab das Bild zwischenzeitlich aktualisiert gehabt. Vielleicht war deshalb nichts zu sehen ;)

Jay
Beiträge: 65
Registriert: Sa 29. Dez 2007, 02:21
OS, Lazarus, FPC: Linux, 0.9.30.4 Beta, FPC 2.6.0
CPU-Target: 32Bit
Kontaktdaten:

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von Jay »

So, nun habe ich eine Framerate-Begrenzung eingebaut, die dafür sorgt, dass bei wenig CPU-Auslastung die Framerate nahezu konstant bei 25 FPS bleibt (möchte ja nicht, dass nachher z.B. Windmühlen sich in einer abnormen Geschwindigkeit drehen - sonst fliegen sie nachher weg :lol:). Dafür habe ich das SDL-Delay dynamisch gestaltet (davor hat sich eine starke Auslastung der CPU sofort in einer Verringerung der Framerate bemerkbar gemacht). Nun verringert sich die Framerate nur, wenn die CPU wirklich stark ausgelastet ist.

Jedes animierte Objekt besitzt eine Zählvariable, die bei jedem Frame inkrementiert wird und bei erreichen oder überschreiten eines bestimmten Wertes ein Bild aus dem Spriteset (definiert durch eine Animationen-Spriteklasse) weiterspringt. Dabei bilden die Spalten des jeweiligen Spritesets der Figur/des Objektes eine Art "Filmstreifen" und die Zeilen stellen verschiedene Varianten (z.B. Richtungen der Figuren) dar. Natürlich werden nur die auf dem Bildausschnitt sichtbaren Objekte in ihrer Animation aktualisiert und gezeichnet (ansonsten wäre es äußerst ineffizient und CPU-lastig). Auch die Anzahl der Objekte im Bildausschnitt scheint sich nicht sonderlich auf die CPU-Auslastung und die Spielgeschwindigkeit auszuwirken - bei animierten/bewegten Objekten ist es sicherlich auch nicht so viel anders 8)

Bis jetzt läuft es nahezu perfekt (aber noch wenig spektakulär). Die Probleme liegen nun eher beim Realisieren der einzelnen Figuren/Animationen, Aktionen, Pathfinding, Netzwerk und Speichern/Laden von Spielständen.

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von Teekeks »

Hi!
Ich würde sehr gerne bei deinem Projekt mithelfen.
Für genaueres hast du eine PN bekommen. :)

Gruß Teekeks

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von carli »

Also wie ich sehe, verwendest du SDL pur.

ich könnte dir eine state-of-the-art Grafikengine implementieren, mit der du auch Beleuchtung, Schattenwurf, automatische Tile-Sortierung, weiche Tile-Übergänge etc. unter voller Ausnutzung der Power deiner Grafikkarte (und somit keine CPU-Auslastung mehr) bekommst.

Schreib mir einfach mal eine PN, am besten gleich mit Link zu eurem internen Entwicklerforum und eurem Versionskontrollsystem.

Jay
Beiträge: 65
Registriert: Sa 29. Dez 2007, 02:21
OS, Lazarus, FPC: Linux, 0.9.30.4 Beta, FPC 2.6.0
CPU-Target: 32Bit
Kontaktdaten:

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von Jay »

carli hat geschrieben:Also wie ich sehe, verwendest du SDL pur.

Ja, zum Laden der Grafiken aus PNG-Dateien in die eigene Sprite-Engine und zum Zeichnen von Surfaces und Texten.

carli hat geschrieben:ich könnte dir eine state-of-the-art Grafikengine implementieren, mit der du auch Beleuchtung, Schattenwurf, automatische Tile-Sortierung, weiche Tile-Übergänge etc. unter voller Ausnutzung der Power deiner Grafikkarte (und somit keine CPU-Auslastung mehr) bekommst.

Ähm, die Grafikengine funktioniert bereits (allerdings gebe ich dir Recht, dass sie noch optimiert werden könnte - ist erstmal ein "Prototyp"). Schattenwurf liefern die PNG-Spritesets schon von Haus aus mit. Sprite-Sortierung (nach Layern) ist bereits in der Tile-Klasse implementiert.

carli hat geschrieben:Schreib mir einfach mal eine PN, am besten gleich mit Link zu eurem internen Entwicklerforum und eurem Versionskontrollsystem.

Das müssen wir gar nicht so geheim halten (per PN) :wink:
Gerade eben erst habe ich ein Forum (http://www.programmers-projects.de/foru ... /demandion) und ein WebDAV-Verzeichnis ((webdav://)webdav.programmers-projects.de/projekte/gruppenprojekte/demandion bzw. (webdav://)<Programmers-Projects Benutzername>@webdav.programmers-projects.de/projekte/gruppenprojekte/demandion für registrierte Benutzer) eingerichtet. Man kann das alles (und noch einiges mehr) nutzen, sobald man auf der Hauptseite registriert ist (http://www.programmers-projects.de/user/register).

Wäre echt super, wenn sich noch Leute finden, die daran freiwillig mitwirken möchten. Euer Name kann dann im SourceCode unter den anderen verewigt werden :wink:
Zuletzt geändert von Jay am Sa 31. Jul 2010, 16:29, insgesamt 2-mal geändert.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von carli »

Jay hat geschrieben:Ähm, die Grafikengine funktioniert bereits (allerdings gebe ich dir Recht, dass sie noch optimiert werden könnte - ist erstmal ein "Prototyp").


da gibts nix zu "optimieren" - die Frage ist, ob du die Grafik auf der GPU oder der CPU rechnen lassen willst. Je nachdem bekommst du bei der GPU zusätzliche Möglichkeiten wie z.B. Per-Pixel-Beleuchtung, automatische Sortierung (Pixelweise) und viele andere Dinge.
Schau dir einfach mal das Video an: http://www.youtube.com/watch?v=-Q6ISVaM5Ww
Sowas läuft mit >100 FPS (wenn man nicht runterregelt)

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von carli »

Noch was:
Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved


Die mitgelieferte Schriftart ist nicht von dir.
Nimm irgend eine freie Schriftart, aber nix, womit du dich strafbar machst.

In dem aktuellen Git-Snapshot finde ich die Tile-Klasse nicht. (fehlen einige .pas?)
Außerdem sieht es mir so aus, als ob du dich ziemlich auf SDL fixiert hast.
Ich würde dir auf alle Fälle raten, einige Anpassungen vorzunehmen, bevor dein Projekt an Komplexität gewinnt.

Zudem würde ich nicht den Drachen als extra Klasse einführen, sondern allgemein Lebewesen, von denen du dann eine Einstellungsdatei zu der Einheitenstärke liest.

Jay
Beiträge: 65
Registriert: Sa 29. Dez 2007, 02:21
OS, Lazarus, FPC: Linux, 0.9.30.4 Beta, FPC 2.6.0
CPU-Target: 32Bit
Kontaktdaten:

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von Jay »

carli hat geschrieben:Die mitgelieferte Schriftart ist nicht von dir.
Nimm irgend eine freie Schriftart, aber nix, womit du dich strafbar machst.

Gut, dass du das gesagt hast :shock:
Habe sofort drauf reagiert.

carli hat geschrieben:In dem aktuellen Git-Snapshot finde ich die Tile-Klasse nicht. (fehlen einige .pas?)
Außerdem sieht es mir so aus, als ob du dich ziemlich auf SDL fixiert hast.
Ich würde dir auf alle Fälle raten, einige Anpassungen vorzunehmen, bevor dein Projekt an Komplexität gewinnt.

Das ist richtig, dass ich mich darauf beschränkt habe, da SDL auf so ziemlich jeder Plattform läuft :wink:
Außerdem wäre das Projekt z.B. bei der Verwendung von OpenGL nicht unbedingt einfacher zu realisieren...
Es ist schon jetzt ziemlich komplex aber noch überschaubar. Die Tile-Klasse ist in demandion_world.pas mit dabei (nennt sich TWorldTile).

Jay
Beiträge: 65
Registriert: Sa 29. Dez 2007, 02:21
OS, Lazarus, FPC: Linux, 0.9.30.4 Beta, FPC 2.6.0
CPU-Target: 32Bit
Kontaktdaten:

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von Jay »

carli hat geschrieben:Schau dir einfach mal das Video an: http://www.youtube.com/watch?v=-Q6ISVaM5Ww
Sowas läuft mit >100 FPS (wenn man nicht runterregelt)

Das ist ja mal Hammer :shock:
Naja was soll man mit mehr als 100 Frames die Sekunde? :roll: Das menschliche Auge nimmt bewegte Bilder bereits ab 24 FPS fließend wahr.
Allerdings ist die XNA RPG Engine (2.5D :lol:) glaube ich gar nicht mehr zu toppen (auch von den Möglichkeiten her). Aber mit meiner "Mini"-Engine bin ich auch erstmal zufrieden :oops:

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von carli »

Jay hat geschrieben:Allerdings ist die XNA RPG Engine (2.5D :lol:) glaube ich gar nicht mehr zu toppen (auch von den Möglichkeiten her).


ach quatsch.
Man bekommt immer was besseres hin.
zum Beispiel ist in diesem Video die Schattierung nur mit kleinen Kreisen. Bei den Partikeln ist da auch noch was ausbaufähig.

Jay hat geschrieben:Das ist richtig, dass ich mich darauf beschränkt habe, da SDL auf so ziemlich jeder Plattform läuft

OpenGL auch.
Damit bekommst du auch ordentliche Rotationen, Hardwarebeschleunigung, Alpha-Blending und alles das, wo sich SDL dumm und dusselig rechnet.

Jay
Beiträge: 65
Registriert: Sa 29. Dez 2007, 02:21
OS, Lazarus, FPC: Linux, 0.9.30.4 Beta, FPC 2.6.0
CPU-Target: 32Bit
Kontaktdaten:

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von Jay »

Soweit ich weiß, unterstützt z.b. der Nintendo DS kein OpenGL aber sehr wohl SDL. Mein Ziel war, mit Hilfe meiner Engine und des darauf aufbauenden Spiels (Demandion) auch komplexere Strategiespiele Konsolenfähig zu machen.

Partikel könnte man auch anders einbringen (in Form von Spritesets z.B. für Flammen/Explosionen) :lol:
Schatten werden - wie gesagt - bereits durch die Grafikdateien/Spritesets in das Spiel eingebracht. Da braucht man nicht noch extra was dazuzeichnen :roll:
Dann könnte man wertvolle Rechenzeit sparen. Zumal nur die sichtbaren Objekte in den sichtbaren Bildausschnitt gelegt werden (es wird kein einzelnes großes Sprite für die gesamte Map verwendet).

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von carli »

Da gibts aber noch einige Probleme:
- das NDS hat 8Bit-Grafik
- einen 8Bit-Prozessor
- und auch sonst nur 12 MHz (oder weniger)

Hast du schonmal versucht, deine Techdemo nach NDS zu portieren?

Zumal Spielkonsolen (wie z.B. die OpenPandora) auch GL unterstützen (sogar mit Shadern und allem Pipapo)

Jay
Beiträge: 65
Registriert: Sa 29. Dez 2007, 02:21
OS, Lazarus, FPC: Linux, 0.9.30.4 Beta, FPC 2.6.0
CPU-Target: 32Bit
Kontaktdaten:

Re: Demandion - ein 2D Strategiespiel (Mehrspielerfähig)

Beitrag von Jay »

carli hat geschrieben:Da gibts aber noch einige Probleme:
- das NDS hat 8Bit-Grafik
- einen 8Bit-Prozessor
- und auch sonst nur 12 MHz (oder weniger)

Hast du schonmal versucht, deine Techdemo nach NDS zu portieren?

Zumal Spielkonsolen (wie z.B. die OpenPandora) auch GL unterstützen (sogar mit Shadern und allem Pipapo)

An der Engine liegt es nicht. Eher an der Umsetzung (also wie die Funktionen genutzt werden) im Spiel. Im Moment ist es ja so, dass das gesamte Interface für jeden Frame neu aufgebaut werden muss (der Einfachheit halber habe ich es zum Testen so gemacht). Die gesamte Engine nach OpenGL umzustellen würde außerdem so einiges erschweren (auch im Bereich der Weiterentwicklung) oder? Außerdem wüsste ich nicht, weshalb ich zu OpenGL wechseln sollte. SDL erledigt doch den Job ganz gut 8)

Im Moment nimmt das Zeichnen des (provisorischen) Benutzerinterfaces (des Menüs) noch die meisten Ressourcen in Anspruch :lol:
Aber das wollte ich sowieso bald ändern, indem ich einfach ein virtuelles Suface dafür verwende, auf welches die gekachelten Grafiken nur am Anfang (nicht wie zur Zeit in jedem Frame erneut) gezeichnet- und deren Positionen errechnet werden müssen.

Antworten