Laden...

Spiele-Projekt: MANKIND

Erstellt von Chaoscoder vor 16 Jahren Letzter Beitrag vor 16 Jahren 5.223 Views
C
Chaoscoder Themenstarter:in
51 Beiträge seit 2006
vor 16 Jahren
Spiele-Projekt: MANKIND

Ich möchte hier kurz mein Projekt vorstellen für alle Interessierten. Es handelt sich um Spiele-Programmierung.

Ich arbeite an einem Spiel, das ich vorhabe alleine fertig zu stellen. Der Zeitraum ist offen und wird möglicherweise bis zu einem vernünftigen Release 3, 4 Jahre oder noch sehr viel länger dauern, je nachdem wie es sich entwickelt.

Geplante Features des Spiels:
* Sci-Fi Singleplayer RPG mit langer Spielzeit (1st Person oder 3rd Person)
* Waffen, Muntion und alles andere können vom Spieler selbst hergestellt und beliebig modifiziert werden
* Ebenso können Mechs gebaut werden die der Spieler später brauchen wird um härter Gegner zu überstehen
* Spieler kann Häuser oder Raumschiffe selbst einrichten
* Skillsystem mit verschiedenen Abteilungen (z.B. Elektronik, Mechanik, Medizin, Programmieren (man kann auch CPUs programmieren)...)

Geplante Features der Engine:
* Alle üblichen Sachen die sonst auch überall drin sind: Bump-Mapping, Specular Mapping, Schatten, Normal-Mapping, LOD...
* Ein NURBS-Ähnlicher dynamischer Terrain Generator: Das Terrain wird mit Nurbs definiert und während dem Spiel in eine Mesh gecachet. Diese Mesh wird dann noch mit Octree optimiert gerendert. Detailstufen für das Terrain-Mesh sind stufenlos einstellbar, genauso wie das Octree-Detail.
* Ein Displacement-Mesher der eine flache Textur räumliche Struktur gibt. Wenn der Spieler also ganz nahe an eine Wand läuft wird aus der Bump-Textur oder Normal-Textur ein Mesh generiert. Der Spieler sieht ein dreidimensionales Objekt anstatt einer flachen Wand, das auch richtig beleuchtet wird. Die Engine entscheidet ob ein Displacement-Mesher in der jeweiligen Situation sinnvoll ist (Wahrscheinlich eh fast nie) und setzt ihn nur ein wenn genug Performance zur verfügung steht.
* Ein dynamisches Performance-Watch System. Der Spieler gibt an, welche Frame-Rate er erreichen möchte. Das Spiel sucht dann automatisch die geeigneten Einstellungen für LOD usw. Natürlich können Einstellungen auch erzweungen werden.

So, das war nur ein kleiner Überblick. Sobald es eine sehenswerte Tech-Demo zu sehen gibt werde ich sie hier natürlich posten. Zurzeit baue ich noch das Grundgerüst der Engine auf (Textur-Handler, Dateiformate, Virtuelle Dateisysteme). Im Moment hab ich eine Techdemo wo sich ein paar texturierte Würfel (einstellbar bis zu 10.000 oder mehr g) drehen und rumspringen.

Zum Schluss muss ich noch sagen, dass ich plane, das Spiel so zu gestalten, dass es nicht mehr als 10-20 Megabyte zum Download benötigt. Natürlich ist trotzdem alles im Spiel fein texturiert und modelliert, auch Sounds und Musik ist da mit drinnen. Falls da jemand ins Grübeln kommt: Ich hab mir etwas feines ausgedacht, mitdem ich das realisieren kann (Nein, das Programm lädt keine zusätzlichen Daten vom Internet oder sonstwoher)

Also ich bin mir fast sicher, dass sich hier so mancher eine Idee abschauen wird (vorallem vom technischen) aber was solls.

PS: Das Projekt bleibt Closed-Source. Wenn ein paar Editoren stehen werde ich mich vielleicht nach ein paar Leuten umsehen, z.b.:
* Leute die Texturen generieren
* Leute die Sounds generieren
* Leute die Models generieren
* Leute die die Map aufbauen
* Leute die Spielinhalte (Missionen / Quests) einfügen
usw. usf. ihr wisste eh was da alles zu tun ist, jede menge

Achja: Ein kleiner Screenshot kann nie schaden.

Edit: Ok, ich muss das Bild erklären. Es handelt sich dabei um ein Array von Würfeln, die alle mit Textur gerendert werden und nach einer Sinus/Cosinus Transformation bewegt werden. Die Ränder der Würfel kann man leider schlecht sehen, weil ich so eine dunkle Textur genommen habe.

C
Chaoscoder Themenstarter:in
51 Beiträge seit 2006
vor 16 Jahren
Engine-Update

Meine Engine hat sich weiterentwickelt und ich habe jetzt Lichter und ein einfaches Partikelsystem eingebaut, sowie ein kleines Terrain generiert aus einer Height-Map.

Falls jemand Fragen hat (auch programmtechnisch) so werde ich sie gerne beantworten.

Hier eine kleine Vorschau auf Version 0.005, ein Test der Physik Engine.
Features in v0.005:

  • Kugeln
  • BoundingSphere Kollisionsabfrage (simpel)
  • Elastische Stöße (Billiardkugelprinzip)
  • Kollision der Körper mit dem Terrain
  • evtl. Kollision der Partikel mit anderen Körpern (muss hier noch ein Ausschließungsprinzip finden um die CPU zu schonen)
  • Luftreibung für Kugeln (Annäherung Reibung = Geschwindigkeit^2 * Faktor)

Sachen wie Impulserhaltung sind selbstverstädnlich.

Und hier ein Vorschau auf v0.005 - zeigt die Landschaftsform in der ich die Physik=Kugeln testen werde.

C
Chaoscoder Themenstarter:in
51 Beiträge seit 2006
vor 16 Jahren

Alle Releases gibt es hier zu laden:

Mankind v0.001 - Erste Techdemo
Mankind v0.002 - Zweite Techdemo
Mankind v0.003 - Beleuchtung Test
Mankind v0.004 - Partikel System die 1.e

Die Steuerung ist "On-Screen" erklärt z.b. Befehle wie Gitternetzmodus, Texturen abschalten oder Zeit beschleunigen oder verlangsamen.

Bei Bugs oder Grafikfehlern usw. wäre es nett wenn ihr hier kurz was dazu schreibt und mir die im Spielordner befindliche Mankind.log mitschickt, da werden Tastatureingaben und alles andere geloggt, damit ich nachvollziehen kann wo der Fehler passiert ist. (Bitte nur Bugs von der neuesten Version (0.004) posten!!!)

Keine Angst! Das Programm loggt nur die Tasteneingaben die ihr in Mankind macht, ansonsten wird nichts geloggt.

Momentan sind mir keine Bugs bekannt aber Direct3D9 ist Voraussetzung.

C
Chaoscoder Themenstarter:in
51 Beiträge seit 2006
vor 16 Jahren
Mitarbeit

So, hiermit revidiere ich die Aussage im ersten Post, dass ich vorhabe das Projekt alleine fertigzustellen. Nachdem ich draufgekommen bin, dass NET Programme ohnehin Quellcode-transparent sind suche ich hiermit nach Leuten, die Lust haben sich dem Projekt anzuschließen. Außerdem ist das Projekt für einen einzelnen zu groß. Aufgabenbereiche sind momentan unter anderem folgende:

* Grafik-Engine - Unterstützung für verschiedene Arten von Textur-Mapping (Bump, Specular...), Mesh-Loader für verschiedene Formate, Mesh-Generator der ein Mesh aus Primitiven erzeugt während der Laufzeit, vieles vieles mehr (Animationssystem mit Bones usw.)
* Mathematik Einheit - Alle möglichen Funktionen für Vektoren, Ebenen, Kugeln und Funktionen um diese miteinander zu schneiden usw.
* Physiik-Einheit: Aufbauen einer Physik Engine, anfangs eine einfache mit BoundingSphere Kollisionen später dann mit wahlweise Polygon-Genauen Kollisionen und noch später vielleicht deformierbare Meshes (vlt. mit Vertex Shader muss mich da erst einarbeiten wie das funktioniert)
* Sound-Engine - Normaler Stereo Sound und alle möglichen Sachen wie z.b. Lautstärkereduzierung mit Entfernung der Quelle, Halleffekte, Doppler Effekt usw.

Wer mitmachen will muss sich natürlich an gewisse Konventionen halten, damit das Projekt ordentlich und übersichtlich bleibt:

* Objektorientierter Ansatz (keine statischen klassen mit ausnahme: statische klassen als funktionsträger und ausnahme für globale Variablen, zurzeit eine Klasse: nennt sich Globals)
* Quellcodekommentierung an stellen, wo es sinnvoll ist
* Mit der Kapselung nimm ich es für die meisten Klassen nicht so streng, weil dadurch gewisse Objekte leichter angesprochen werden können mit kürzerem Quellcode. Für komplizierte und kritische Klassen ist Kapselung vorgesehen.
* Konventionen für Namensgebung und Klassengestaltung (teile ich noch detailliert mit wenn jemand Interesse hat)
* Ein paar allgemeine Regeln, was vermieden werden soll und was bevorzugt (codetechnisch)

Ein gewisses Grundverständnis und ein wenig Erfahrung mit Programmierung und die Kenntnis von Grundlagen sind Voraussetzung.

Damit ihr euch ein Bild machen könnt veröffentliche ich hiermit den Source-Code. Die Ordnerstruktur ist in der "Ordner.txt" erklärt.

Zum Schluss noch:
Ich habe kein Problem damit wenn jemand auf unbekannte Zeit lang mitmachen will. Weil ich selbst auch nicht jeden Tag lust oder Zeit habe zu programmieren soll sich keiner gebunden fühlen. Wir haben keinen Zeitplan, in der Hinsicht ist es ein offenes Projekt.

Falls jemand meinen Code verwenden will, darauf aufbauen will oder einzelne Sachen rauskopiert so hab ich kein Problem damit.

Falls jemand einfach nur Fragen hat stehe ich auch zur Verfügung!

Link: Mankind Source vom 13.6.07

C
55 Beiträge seit 2006
vor 16 Jahren

Hallo Chaoscoder,

gibt es schon was neues von deinem Projekt ?
Auch wenn ich dir wohl wenig helfen könnte, interessiert es mich doch sehr wie es voran geht.

mfg

1.130 Beiträge seit 2007
vor 16 Jahren

Kannst du nicht die Kantenglättung einschalten, sodass man das nic beim Grafiktereiber extra machen muss?

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

C
Chaoscoder Themenstarter:in
51 Beiträge seit 2006
vor 16 Jahren

Naja zurzeit geht nix voran.
Bin am Überlegen eine fertige Engine zu verwenden wie z.b. Ogre und was für Physik.

Das mit der Kantenglättung kann man sicher irgendwo in die d3d-params einstellen oder im renderstate, mal sehen. Werd die Einstellung dann im Setup einbauen.

Also, wenn ich wieder mal fest am werkeln bin und sich was getan hat werde ich hier sicher wieder posten!

S
15 Beiträge seit 2006
vor 16 Jahren

Hi, mich würde mal interresieren wie du das mit der Kollision machst, also Kollision zwischen Terrain und Partikel. Wir sind nämlich selber an einer Engine für ein Strategiespiel sind aber schon etwas weiter als du.
Wegen den Kantenglättungen nimm da einfach das Renderstate AntiAlising.

C
Chaoscoder Themenstarter:in
51 Beiträge seit 2006
vor 16 Jahren

Hm, von Kollisionssachen hab ich leider keine Ahnung weil noch nie gemacht aber ich würde es vorerst so machen:

Also mein Terrain-Mesh erzeuge ich ja aus einer Heightmap, die bei mir programmintern eine Array von floats ist (später vlt. Bytes müsste auch reichen). Also für Heightmap-basierte Objekte zahlt es sich sicher aus die Kollisionsabfrage mit den Daten aus der Height-Map zu machen als mit dem Mesh (wie Mesh-Kollisionen funktionieren weiß ich nicht)

Eine Gerade erstellen, die normal zur Basisebene des Terrains steht (z.b. XZ Ebene) und an der Oberfläche des Terrains beginnt (Berechnung aus height-map, müsste mathematisch der Mittelwert der vier umgebenden Werte sein, glaube ich) und die Kugel im Mittelpunkt schneidet. Dann noch die Länge der Gerade mit dem Radius der Kugel vergleichen. Wenn kleiner --> Kollision. Wenn größer, keine Kollision. Das ist natürlich jetz nur für sehr flache Terrains korrekt berechnet. Ich hab allerdings keine Ahnung wie das normalerweise berechnet wird. Hm, am besten du machst dir selbst Gedanken. Aber falls ich das Problem mal gelöst habe poste ich dir das natürlich und den zugehörigen Code.

C
Chaoscoder Themenstarter:in
51 Beiträge seit 2006
vor 16 Jahren

Achja, danke für den AntiAlias Tipp, das kann ich dann gleich in mein Setup für Anzeigeeinstellungen einbaun, ist sowieso komfortabler als dass immer in den Anzeigeeinstellungen der Grafikkarte einstellen zu müssen.

1.985 Beiträge seit 2004
vor 16 Jahren

Hallo sharper,

ich kenne mich in dem Bereich nicht wirklich aus, habe aber schon desöfteren gehört, dass sich QuadTrees bzw. OctTrees sehr gut für eine Kollisionsabfrage eignen. Evtl. helfen Euch die Schlagworte schon weiter. Einfach mal bei Google in Verbindung mit C# eingeben.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de