Space Opera – Die Spielkarte II

Im letzten Eintrag habe ich die Spielkarte von Space Opera vorgestellt. In der Zwischenzeit habe ich mir die Finger wund getippt, aber seht selbst:

Wir fangen am besten oben links an: Dort werden die Ressourcen angezeigt die aktuell dem Schiff zur Verfügung stehen. Von links nach rechts sind das:
Energie, Deuterium, Roherz und Frachtraum.

Weitere Ressourcen werde ich nach dem Start der Alpha einbauen.

Energie wird wohl das wichtigste werden, jede Bewegung  jede Handlung wird Energie verbrauchen. Energie werdet Ihr aber auch nicht unendlich anhäufen können. Die Kondensatoren im Schiff die als Energiespeicher dienen haben auch irgendwann ihre Sättigung erreicht.

Deuterium ist quasi der Treibstoff für den Hauptreaktor des Schiffs. Wird Deuterium gesammelt und verbraucht, wird der Energievorrat aufgefüllt. Sollte euch das Deuterium ausgehen seit ihr nicht zwangsläufig Handlungsunfähig. Ein Notstromsystem das über eine Art Solarzellen in der Panzerung läuft, versorgt euch weiterhin mit Arbeitsstrom, wenn auch deutlich langsamer als über die Fusion mit Deuterium.

Roherz wird neben Energie auch eine weitere sehr wichtige Ressource werden. Immerhin wird praktisch alles was ihr baut aus Metall bestehen. Da Roherz alleine natürlich eine Schlechte Panzerung abgibt muss das Erz veredelt werden.

Der Frachtraum sollte eigentlich selbsterklärend sein.Ihr könnt nicht an Volumen in euer Schiff einlagern als es selbst Volumen einnimmt. Energie wird allerdings nicht im Frachtraum eingelagert sondern wird wie oben erwähnt in Kondensatoren gespeichert.

Unter der Oberen Leiste wird eine Menuleiste eingebaut. Aktuell ist nur der Button für den Schiffskonfigurator vorhanden. Diesen könnt ihr euch als eine Mischung aus Baumenu und Inventar vorstellen. Ich hatte euch das im Eintrag „Space Opera – Baumenu“ schon kurz gezeigt. Weitere Menus wie Ressourcen veredeln umd das Forschen werden noch eingebaut.

Die Spielkarte kennt ihr schon, rechts daneben befindet sich dann einmal die Info über Feld auf dem das Schiff gerade steht. Darunter habt ihr die Möglichkeit nach Ressourcen zu scannen. Ist der Scann erfolgreich,  wird angegeben wie viel Ressourcen ihr aktuell auf dem Feld abbauen könnt. Ihr trefft eure Auswahl wie viel Ressourcen ihr abbauen wollt und startet dann einfach.Ist das aktuelle Feld leer, könnt ihr auf ein anderes wechseln und weiter sammeln – zumindest bis der Frachtraum voll ist 😉 .

Alles im allen nimmt Space Opera langsam aber sicher Form an 🙂 ich freue mich drauf euch bald mehr zeigen zu können.

Space Opera – Die Spielkarte

Was ?! schon wieder 2 Monate rum und ich hab mal wieder nichts geschrieben? Das muss ich ändern, bevor das Jahr komplett rum ist. Das schöne ist, ich kann nicht nur von was reden ich kann auch mal ein weiteres Bild zeigen:

Auch wenn das Bild auf den ersten Augenblick wenig beeindruckend ist, zeigt es das ich einige weitere Probleme aus dem weg habe Räumen können.
Das offensichtlichste ist: Es gibt endlich ein Spielfeld. Das bedeutet aber auch das ich endlich mein Laden und Speichern Problem in den Griff bekommen habe. Das Kleine Schiffsymbol mitten in der Karte lässt sich auch über die W,A,S,D Tasten steuern. Was auch sehr wichtig ist: Es verlässt die Karte nicht.
Quasi als Nebenprodukt ist auch noch ein Karteneditor als separates Programm heraus gekommen.
Jetzt kann ich endlich weiter am Content arbeite und muss mich zumindest über diese Grundlagenprobleme keine sorgen mehr machen.

Space Opera – Baumenu

Lange war es ruhig hier auf dem Blog, nach einer Pause und einigen stressigen Wochen arbeite ich wieder intensiv an Space Opera weiter.

Getreu dem Motto „Back to the roots“ habe ich den 3D Part komplett gestrichen und Arbeite aktuell rein 2D. Ein Segen wie sich heraus gestellt hat.

Das GUI das ich schon für den 3D Part erstellt kann ich Problemlos weiterverwenden. Um allerdings im nachhinein keine Probleme zu bekomme habe ich einen etwas älteren stand als Basis genommen an dem ich weiter arbeite.

Aktuell arbeite ich am Baumenu der Fregatte:

Die Bilder sind soweit alles Dummy´s. Grafische Pracht hat gerade keine Priorität. Aktuell ist das Schiff in 3 Bereiche aufgeteilt. Bug, Rumpf und Antrieb. Eventuell kommt noch eine vierte Sektion hinzu für Support.

Der Status den man hier auf dem Screen sieht ist bereits sehr weit. Mit den 3 Buttons unten lassen sich jeweils neue Schiffssektionen auswählen. Die werte sind ebenfalls hinterlegt so das eine neue Bugsektion andere Werte bringt als die aktuelle.

Ebenfalls habe ich eine Vorschaufunktion eingebaut. Schwebt die Maus über einen Button, wird die aktuelle Sektion gegen die neue Sektion ausgetauscht. Ebenfalls ändern sich dann die Werte. Im Späteren Spiel sollen auch die unterschiedlichen Sektionen grafisch auffallen, nicht nur durch die Werte.

Der kleine graue kasten in der Antriebssektion deutet es schon an, die einzelnen Sektionen lassen sich auch noch mit verschiedenen Modulen aufrüsten. Beispielsweise einen Leistungsstärkeren Reaktor der mehr Energie für die Bordsysteme Bereitstellt. Diese Energie verbrauchen die anderen Module.

Ich habe hier auch etwas mit Hilfetexten Experimentiert und freute mich wie einfach die Grundlegende Funktion dafür einzubauen war.

Was ich hier noch fertig bauen muss ist die Auswahl eines neuen Moduls. Dann noch die Modulslots verteilen und eine Bauwarteschlange schreiben.

GameStateManager, Content Unload und Frustration

Durch Zufall habe ich ein ziemlich großes Problem in meinem aktuellen GamestateManager gefunden.

Vereinfacht gesagt ist ein GamestateManager ein Code der die verschiedenen Screens verwaltet. Wenn ich das Spiel starte, soll zuerst ein Screen kommen mit dem Titel des Spiels, dann einer für das Hauptmenu, im anschluß daran der für das Spiel, Laden, Speicher etc.

Jeder dieser Screens hat seinen eigenen Inahlt. Im Titelscreen ist das nur ein Hintergrund und ein kleiner Text für die Versionsummer.
Im Hauptmenu wird das dann schon komplexer, Bilder für Buttons und Rectangels um diese zu bedienen, dazu noch funktionen für das einfärben bzw. austauschen von Buttons. Nicht zu vergessen das daß anklicken eines Buttons wiederum einen neuen Screen auslöst.

All diese Bilder, Funktionen etc. benötigen Speicher. Nachdem man das Spiel gestartet hat, braucht man aber weder den Titelscreen, noch den Hauptmenuscreen. Diese sollten aus dem speicher entfernt werden. Dafür ist dann wieder der sogenannte Garbage Collector in C# zuständig.

Mein Problem ist jetzt allerdings: Klicke ich im GameScreen auf eine bestimmte freie Stelle, löse ich eine aktion aus die im HauptmenuScreen verbaut ist. Da GameScreen und HauptmenuScreen von ein andere getrennt sind, sollte eine solche reaktion unmöglich sein.

Die einzige Erklährung die ich dafür habe ist die, das daß Hauptmenu nicht aus dem Speicher entfernt wird.

Mitlweile habe ich mich damit abgefunden das ich wohl meinen gesamten Code zum dritten mal schreiben muss. Diesesmal aber erst, nachdem ich mir ein neues Sample zum GameStateManager angesehen habe.

Laden und Speichern die Xte …

Ich weiß wirklich nicht warum ich mich mit manchen Sachen so dermaßen schwer tue. Ich war am Anfang doch ziemlich Happy als es mir mit Hilfe eines Tutorials gelang eine einfache Binär Speicherung nachzubauen. Binär deshalb, weil ich mich mit den anderen Tutorials schwer getan habe. Mein Gedanke war dann, kannst du erst Binär Speichern sollte der weg zu XML nicht mehr schwer sein. Nach etwas herum experimentieren war ich dann so sicher darin das ich diese Funktion endlich in SO einbauen wollte.

Aus irgend einem Grunde hat der Compiler das dann verweigert. Immerhin hat er mir mitgeteilt das ich das ganze von Binär auf XML ändern soll. Das war auch soweit kein Problem. Nur poppten dann eine ganze Reihe an anderen Fehlermeldungen auf. So etwas ist einfach frustrierend.
Ich werde dann wohl weiter lernen müssen, irgendwann komme ich noch dahinter 😉

Schilde, Schaden und Modelle II

Vor genau einer Woche habe ich den ersten Post mit dem Titel „Schilde, Schaden und Modelle“ geschrieben. Dort habe ich grob umrissen was mir so vorschwebt.

Heute, nach einer durchgetippten Wochenende, kann ich sagen das ich nun ein Schritt weiter bin.

Hier ist der aktuelle Spielschirm. Das Dummymodell ist eingefügt, und nachdem es mir auch gelungen ist ein Problem mit dem Deepbuffer zu lösen auch ohne Artefakte.

Das ist aber nicht das alles, ich habe mich auch mit dem angekündigten System für Schilde, Panzerung und Struktur befasst. Nach etwas Grübelei und Tüftelei steht auch dieses System zumindest soweit, das ich weiter darauf aufbauen kann.

Das System funktioniert nun soweit, das ein Simulierter Schaden zuerst die Schildstärke / Schildstruktur (Ich brauch da dringend ne Abkürzung für 😉 ) reduziert, dann die Panzerung angreift und als letztes die Struktur angefressen wird.

Ein paar kleine Fehler sind noch drin. Beispielsweise ist es derzeit noch möglich das es einen Schildwert von -0,2% geben kann. Das gleiche bei der Panzerung. Da muss ich mir noch was einfallen lassen wie ich das beseitige. Außerdem muss ich noch den Code aufräumen, und das ganze sauber auskommentieren. Sonst finde ich mich in 4 Wochen da drin nicht mehr zurecht.

Zur Erklärung der verschiedenen Balken:
Oben Links ist die Schildstärke, Oben rechts ist die Schildstruktur.
Die Mittlere Zeile Zeigt die Schiffspanzerung und darunter die Schiffsstruktur.

Die Bildchen stammen aus einem uralten Projekt das ich mal begonnen habe. Wie alles im Moment, nicht gerade Grafische Highlights. Darum kümmere ich mich wenn es soweit ist.

Nichts desto trotz gefallen mir die Balkenfarbe für Panzerung und Struktur nicht. Jemand Vorschläge für später?

Ich bin mir auch noch nicht so ganz sicher wie ich das mit der Reparatur der Schäden machen soll. Sollen sich Schild & Co über die Zeit selbst Instand setzten? Soll der Spieler ein extra Kommando dazu geben? Soll das Reparieren irgend eine art von Ressource benötigen?

Allgemein muss ich sagen das ich gerade eine sehr hohe Motivation zum Programmieren habe. Wenn man nicht bei jedem kleinsten Problem in ein Forum rennen muss, fühlt man sich nicht mehr ganz so Hilflos.

Das nächste was ich jetzt angehen werde – und auch lange vor mich her geschoben habe – ist das Laden und Speichern. Vieleicht kann ich ja nächstes Wochenende ja schon von einem Teilerfolg berichten 🙂 . Ich habe mich erstmal dafür entschlossen die Daten als XML zu speichern, und da ich es hasse wenn Software seine Daten wild im System streut, will ich es so schreiben das die XML-Save Dateien schön brav im Spielverzeichnis bleiben. Okay letzteres wird sicherlich das einfachere sein 😀

Für diejenigen die es Interresiert, ich werde auf diesem Tutorial von Microsoft aufbauen:

Saving Data to a Save Game File


PS: Warum bringt mir das Demo beim Kompilieren einen Fehler ??? O_o

Schilde, Schaden und Modelle

Nach dem durcharbeiten einiger Tutorials, arbeite ich wieder an Space Opera weiter. Aktuell beschäftigte ich mich mit der Player Klasse. Also alles was direkt mit dem Spieler und seinem Schiff zu tun hat.

Zum Beispiel ist das 3D Model aus früheren Bildern ist jetzt in diese Klasse gewandert.
Eine Steuerung des Models habe ich jetzt noch nicht geschrieben.

Vorzugsweise soll die über W,A,S,D realisiert werden, dann noch 2 Tasten für Schub und Bremsen, eventuell kommt noch das Rollen hinzu. Also so ähnlich wie bei der X Serie von Egosoft. Wobei ich hier überlege ob ich die Steuerung, zusammen mit der Kamerakontrolle nicht auf eine eigene Klasse verschiebe.

Ein anderer Punkte der dazu kommt sind die Hitpoints.

Schiffe, Station etc. sollen über 3 Werte Verfügung:

Schilde:
Schilde stellen die erste Barriere gegen einkommen Schaden da. Wobei sich das Schild wieder in 2 Punkte gliedert. Die Schildstärke und die Schildstruktur, beides wird separat angezeigt. Die Schildstärke gibt schlicht an, wie viel Schaden das Schild insgesamt verkraften kann. Die Schildstruktur, wie stabil das ganze ist. Solange die Schildstruktur auf 100% ist, fängt das Schild allen Schaden ab bis es aufgebraucht ist. Sinkt aber die Struktur des Schilds auf 50%, durchschlagen z.B. 5 von 10 Geschossen das Schild, und die Panzerung muss diesen Schaden auffangen. Ob das Schild nun mehr an Stärke oder an Struktur einbüsst, wird von Gegner und dessen Waffen abhängen.

Ein Schiffsgeschütz wird tendenziell eher die Schildstruktur schwächen. Eine Rakete senkte eher die Schildstärke. Vereinfacht gesagt: Eine Waffe mit Flächenwirkung schwächt das Schild als ganzes, eine Waffe ohne Flächenwirkung die Struktur.

Panzerung:
Die Schiffspanzerung ist genau das wonach es sich anhört. Massive mehrschichtige Panzerplatten. Zusammen mit dem Schutzschild ist es der Primäre Schutz.

Schiffsstruktur:
Die Struktur ist das, was das ganze Schiff zusammen hält, und wo alle Geräte, Aggregate etc. verbaut sind. Schäden an der Struktur sind ungesund. Oder wollt ihr in einem zusammen geschossen Raumschiff sitzen und dann Meldung bekommen das gerade das Heck mit eurem Antrieb und Lebenserhalten abreist ?

Naja das sind mal die groben Ideen wohin das ganze gehen soll. Bis man aber das ganze Live erleben kann wie das eigene Schiff schaden austeilt und wegstecken muss, das wird wohl noch dauern 😉

Lebenszeichen

Auch wenn es wohl den Anschein erweckt hat, ich Lebe noch.

Ebenso lebt mein Projekt noch. Es hat nur so etwas wie Winterschlaf gehalten.

Meine Motivation in den letzten Monaten hatte unter mehrern Punkten gelitten.

  1. Unklare Situatution über die Zukunft von XNA
  2. Mein unvermögen die Delta Engine zu nutzen
  3. Durch das Vorweinachtliche Arbeitspensum geringe Freizeit
  4. Einige umbauten an meinem PC
Zu Punkt 1. wirklich etwas neue gibt es hier von Seiten Microsoft nicht – schade – oder es ist einfach keine Information an mich gedrungen.
Zu Punkt 2. mag sein das es daran liegt das dieses Projekt noch im Beta Status ist, aber ich bin offensichtlich unfähig damit umzugehen. Ich schaffe es einfach nicht dort auch nur ein simples „Hello World“ zum laufen zu bekommen. Hauptproblem ist: Das ich wohl der Contentmanager nicht wirklich funktioniert hat. Was man nicht laden kann, kann man auch nicht verwenden. Ob jetzt der Fehler bei mir, oder der Software lag. Keine Ahnung. Im zweifel gehe ich eher auf einen Fehler von meiner Seite, mangels Fähigkeiten aus.
Zu Punkt 3. Tja … Arbeitszeit. Augen auf bei der Berufswahl kann ich da nur sagen…
Zu Punkt 4. Es ist wirklich lästig seinen PC wegen einiger defekt ständig neu auf zu setzten… Zum Glück liegt mein Projekt sicher auf einem NAS. 
Daran arbeite ich aktuell:
Das ist das aktuelle Hauptmenu, neu daran ist, das ich nun eine Funktion geschrieben habe welche das Bild der Buttons austauscht. Von Blau zu Rot. Erst als ich die Funktion dann drin hatte, ist mir aufgegangen das ich auch ein Shader hätte dazu schreiben können.
Naja vieleicht später…
Ansonsten arbeite ich gerade das Buch durch: C# von Kopf bis Fuß. Ich finde es auf eine recht interresante Art und weiße geschrieben. 

Wie das Leben so spielt …

Aktuell passiert mal wieder einiges hinter und vor den Kulissen.

Das neuschreiben des Codes ist abgeschlossen, und ich arbeite gerade daran eine Playerklasse zu erstellen un einige Grundwerte des Spielerschiffes bereit zu halten. Diese Klasse, zusammen mit den Positionsdaten wird dann in der ersten Runde als Basisdaten zum speichern verwendet. So taste ich mich immer weiter an dieses „Mysterium der Serilisation“ heran 😉

Windows 8 wird per Salamitaktik der öffentlichkeit Präsentiert. Für mich etwas „beunruihgend“ ist, das sich Mircosoft über die weitere Zukunf von XNA komplett ausschweigt. Für mich klingt das fast schon wie die stille eines Grabes …

Kurz um: Ich mache mir Sorgen das Microsoft die weiterentwicklung von XNA stopt.

Wenn das wirklich passieren sollte, was mache ich dann ? Will ich wirklich mit einerm System arbeiten was „tot“ ist? Wobei das eigentlich auch schon wieder übertrieben ist. XNA kann durchaus weiterverwendet werden. Es wird eben nicht mehr weiterentwickelt.

Trotzdem bekomme ich bei diesen Gedanken Bauschmerzen.
Ich weiß nicht wie lange sich die Entwicklung von Space Opera hinziehen wird. Einige Jahre mit Sicherheit. Ich bin einfach mal so optimistisch und gehe davon aus das ich solange Motivation haben das Projekt weiter zu führen.

Durch das Forum von http://www.xnamag.de/ bin ich auf diese Seite gestossen: http://www.deltaengine.com/.

Nach dem groben sichten der Features muss ich sagen das sich dieses System äusserst reizvoll präsentiert. Open Source ist dabei nur einer der Interresanten Punkte. Die Public Beta der Engine wird voraussichtlich am 30.09.2011 sein.

Meine Strategie ist damit eigentlich vorgegeben: Weiterarbeiten bis zum 30.09.11 mit XNA. Gibt es in der zwischenzeit Negative Signal von Microsoft für XNA oder bis zum Monatsende gar keine, werde ich defentiv wechseln.

Ich werde zwar meinen Code auf die Engine anpassen müssen. Was im klartext bedeutet, neu anfangen, einarbeiten, zweitverlust und und und …

Nunja … wie das Leben eben so spielt …

Woran wird gearbeitet ?

Wieder ist ein Monat rum, und wieder habe ich nichts zum vorzeigen …

Aber damit es mal einen Stand gibt: Woran arbeite ich gerade ?

Aktuell schreibe ich immer noch meinen Code neu. Im zuge dessen gehe ich gerade auch einige Punkte an die mir seit langen unter den Nägeln brennt:
-Ordentliches OOP
Mein alter Code hatte ziemlich viel ähnlichkeit mit Spaghetti: Einen Haufen durcheinander mit ein paar leckeren Funktionen, der Rest war Soße. Mein neuer sieht da eher aus wie eine Schranksystem von Ikea: Einfach, funktionall und streng Modular. Also ein klarer Fortschritt fürs Programmieren.
– Das Beenden des Spiels über ein Menu
Es klingt eigentlich sehr simpel, hat aber doch gut eine Woche Hirnschmalz gebraucht bis ich hier eine Lösung gefunden habe. Letztendlich war es eine simpler 4 Zeiler an Code mit dem ich das Problem gelößt habe.
– Das Auslesen von Text aus einer Datei
Warum wollte ich das? Tja, ganz einfach, ich will mein Spiel ersteinmal in 2 Sprachversionen veröffntlichen, Deutsch und Englisch. Das ich Text nicht im Code, sondern in einer seperaten Datei speichere war dafür die Grundvoraussetzung. Auch dieses Problem konnte ich vor kurzen lösen.
– Laden und Speichern
Ein weiteres Dauerthema und aktuell der letzte Punkt der mir einige Sorgen bereitet. Ich kann diesen Punkt aber erst aktiv angehen wenn ich meinen bestehenden Code neu geschrieben habe.