Ein Robot Clönchen: GORC1


2008-08-29 11:06 #1
Es hat mich mal endlich wieder gepackt! Nicht das Spielen, sondern das Programmieren 😃
All zuviel erwarten solltet ihr jetzt nicht. Ich habe mir die Löve 2D Engine (http://love2d.org/)
geschnappt. Und ein kleines 3 Szenen umfassendes Robot Episödchen gebastelt:

Unserem Charlie war ziemlich langweilig, weshalb er dem Hilferuf einer kleinen Provinzbank gefolgt ist. Die besagte Bank wurde vor ein paar Tagen überfallen
und all ihr Gold entwendet. Charlies Aufgabe ist es nun das Gold zu finden und wieder zur Bank zu bringen. Soviel zu eurer Aufgabe.

Szene 1 stellt die Bank dar, zu der ihr euer eingesammeltes Gold bringen müsst, um Punkte zu bekommen.

Szene 2 wird bei jedem Betreten zufällig mit Isolatoren, Gold, Robotern und Elektrozäunen gefüllt.

In Szene 3 findet ihr (bei jedem Betreten wieder) eine gute Menge des der Bank geraubten Goldes.
Das Spiel ist voll spielbar auch wenn noch ein paar Sachen fehlen oder anders / besser gelöst werden könnten. Es fehlt eine Highscoreliste, Charlie und die
Roboter bewegen sich nicht flüssig sondern feldweise. Die Roboter "AI" gefällt mir noch nicht wirklich und hier und da sind auch noch ein paar
Fehlerchen (stirbt man z.B. in Szene 2 landet man nicht auf dem Feld, auf dem man die Szene betreten hat, sondern in der linken oberen Ecke der Szene) die ich
aber erst lösen werde, wenn ich den gesamten Quellcode aufgeräumt habe (wozu doppelte Arbeit machen?)
Mein Clon ist wie schon anfangs erwähnt mittels der Löve 2D Engine entstanden. Diese Engine selbst nutzt unter anderem die SDL Bibliothek und lässt sich in Lua
(einigen vielleicht als Skriptsprache der WoW Addons oder auch mancher Kommerzieller Spiele bekannt) programmieren.
Interessierten sei ein Blick in den Quellcode und auch dessen Verwendung gestattet 😃 Dazu genügt es die Datei "Gorc1.love" zu entpacken (diese ist
nämlich nix anderes als ein ZIP-Archiv. Der gesamte Quellcode befindet sich momentan in der main.lua, die verwendeten Ressourcen (Grafiken, Sounds,
Schriftarten) befinden sich in den jeweiligen Unterverzeichnissen. Vielleicht kommt der eine oder andere ja auch auf den Geschmack sich mittels Löve an einem
kleinen Robotclone zu versuchen?
Installation
1. Löve downloaden und installieren (http://love2d.org/download)
2a. GORC.7z
(Sourcecode / Mac) oder
2b. GORC.love
(Win / Linu 🙂 downloaden und gegebenenfalls entpacken
3. Gorc1.love doppelklicken
So... und nun ersteinmal viel Spass beim Gold sammeln 😃
2008-11-27 19:00 #2
herc
toll! muss ich am wochenende mal ausprobieren ! gratulation zu deinem neuen Robot Clone !
2008-11-27 23:31 #3
Cool man kanns nur nicht starten. Wäre es den möglich auch gleich noch n editor in betracht zu ziehen ? da der Meister Für den editor vom Orginal noch ewig
brauch schade eigendlich. er würde sich ne menge arbeit sparen, wenn er den ROBVIEV als basis nehmen würde.
mfg : Angel150180
2009-01-03 00:23 #4
Oh, hab eure Antworten glatt übersehen *komplett-rot-anlauf*
Momentan sind die Level intern als 2d Arrays realisiert, gedacht ist aber was in Richtung XML. Aber da muss ich erst einmal schauen, welcher der Freeware
Editoren am sinnvollsten ist.
Was das starten angeht, es gibt schon neuere Versionen von Löve, welche sogar erlauben die Skripte direkt in die Exe zu integrieren, aber ich habe es im Moment
wirklich lieber, wenn sie für jeden einsehbar bleiben. Du könntest dir aber mal probeweise die neue Löve Version besorgen, die Exe umbenennen und in das GORC
Verzeichnis kopieren. Hab (leider) gerade kein Windows auf der Platte, sonst würde ich das jetzt eben selber testen.
edit: Angel, du müsstest mir mal genau schreiben wie du vorgegangen bist. Habs eben auf nem Mac ausprobiert und es gab keine Probleme mit dem Starten o.O Hast
du Löve auch vorher installiert?
2009-01-07 17:34 #5
Kleines Update... Charlie bewegt sich nun flüssig und Gorc hat einen kleinen Platz in meinem Blog bekommen. Habe auch mal die Links im ersten Posting
angepasst, diese zeigen nun nicht mehr auf Löve-0.4.0 sondern auf die Downloadseite mit der jeweils aktuellen Version (gibt die ja für Win, Linux und Mac).
Auch die Downloadlinks zu Gorc zeigen jetzt immer auf die aktuellste Version.
P.S.: Wäre fein wenn jemand den Link in "Robot-Clone: Fan Abenteuer" auf meine Seite: http://www.matthis-kleine...gorc-game-of-robot-clone/ (http://www.matthis-kleine-welt.de/projekte/gorc-game-of-robot-clone/) verweisen lassen könnte. Danke
😃
2009-01-11 17:52 #6
Gorc liess sich tatsächlich unter XP / Vista nicht starten *schäm* Hatte leider nicht aufgepasst und die Verzeichnisstruktur mit gepackt, was ich aber nicht
durfte. Nun gut, herc sei Dank 😃 habe ich eine lauffähige Version hochgeladen.
2009-01-20 17:31 #7
Es gibt zwar noch keine neue Version für euch, aber es geht langsam auf ein Update zu. Nachdem ich den Robotern auch flüssige Bewegungen spendiert habe,
verpacke ich momentan alle Spielelemente in ein nettes kleines Klassengerüst. Das mag zwar den Speicherverbrauch etwas höher ausfallen lassen als bis jetzt,
dafür werden die Routinen für die Spiellogik ziemlich entschlackt. Zumal auch ein paar der bisher genutzten Hilfstabellen wegfallen.
Was den Ruf nach einem Editor angeht... naja. So wirklich schlüssig bin ich mir da noch nicht. Die Löve Engine gestattet es mir nur innerhalb des
Spielverzeichnisses, das ja eigentlich ein ZIP Archiv ist, Dateien zu erstellen und zu öffnen. Das hieße unsere fleißigen Mapper müssten jedesmal ihre Karten
in das Archiv packen und dann das gesamte Archiv veröffentlichen. Und was ihr dabei vielleicht immer gern unterschlagt, nicht jeder möchte NUR Szenen mit
vorgefertigten Objekten basteln.
Habe also überlegt, ob ich nicht einen der vielen Freeware Editoren dahingehend modifiziere, das er die einzelnen Szenen als Lua Quellcode exportiert. Grob
geschätzt gäbe es dann für eine Episode quasi ein paar Lua Skripte die bearbeitet werden müssten:
* episode.lua: Einstellungen der jeweiligen Episode, z.B. Name, Author, Szenenanzahl und Anordnung
* szene###.lmp: Exportierte Szenenkarte aus einem Karteneditor als Lua Quellcode
* szene###.lua: spezielle Funktionen für die jeweilige Szene, z.B. onLoad(), onEnter(), onExit(), ... für Zufallsobjekte, Siegesbedingungen, Händlerinventare,
Texte, Rätsel, ...
Ist aber im Moment eh alles noch Zufallsmusik 😄
Edit:
Eben so zum Spaß entstanden:
2009-01-21 23:14 #8
Komplett alles in Klassen zu verpacken war wohl doch nicht meine weiseste Entscheidung. Das Intro ist mit seinen knapp 1000 aktiven Objekten (die Mauern) von 60 Frames auf 49 Frames abgesackt. In den Szenen mit knapp 300 bis 400 Objekten halte ich mich noch in etwa bei 58 bis 60 Frames. Klingt zwar nicht wirklich weltbewegend, aber der Verlust ist kein gutes Zeichen. Ich muss wohl doch davon Abstand nehmen alles in Klassen und Instanzen zu stecken 😬
Edit:
Ich versuche ersteinmal das Frameproblem zu verdrängen und weiter alles umzustellen. Muss mir halt dann später eine performantere Lösung einfallen lassen... hab da vielleicht sogar schon die Ansätze einer Idee. Nun möchte ich euch aber mal zeigen wie im Moment das Skript für ein Spielobjekt ausschaut, damit ihr wisst wie ich mir das Skripten vorstelle:

Code: Alles auswählen

Gold = Class("Gold", Object)GoldImage = love.graphics.newImage("images/gold-0.png")GoldImage:setCenter(0, 0)GoldSound = love.audio.newSound("sounds/gold.wav")function Gold:init(x, y, params)    self.super:init(x, y)        self.ani = GoldImageendfunction Gold:canEnter(obj)    -- kann nur vom Spieler betreten werden    if not Player:made(obj) then return false end    return trueendfunction Gold:onEntered(obj)    if not Player:made(obj) then return end        self:remove()    spieler.gold = spieler.gold + 1    love.audio.play(GoldSound)end
Einfacher geht es eigentlich kaum noch, oder?
2009-01-22 21:11 #9
So, ich höre mal auf den Thread als Entwicklertagebuch (http://www.matthis-kleine-welt.de/tag/gorc/) zu
mißbrauchen 😄
Ab sofort ist er für die Kommunikation mit euch und für Ankündigungen neuer Versionen reserviert *lach*
2009-01-25 19:50 #10
herc
hey fausti, super dass du weiter an gorc arbeitest ! ich würde aber weiterhin hier im forum posten, zumindest, wenn du eine neue version erschaffen hast.
weiterhin würd ich sagen: bleib bei einem objektorientiertem design, das macht die entwicklung viel einfacher und flexibler. performance kann man immer noch
später optimieren.
da kann man ja sehr viel machen - mit caching etc.
2009-01-26 10:50 #11
Neue Versionen werden hier natürlich weiterhin gepostet 😃 Nur halt Gedanken und Arbeitsfortschritte nicht mehr, die landen im Blog. Und da kann man sich ja,
wen's interessiert per RSS auf dem laufenden halten.
Jetzt heißt es aber erstmal den Tag ohne Rechner überstehen, denn der hat die Hufe gehoben *wein* Zum Glück hatte ich GORC eh auf meiner USB Backupplatte und
kann sobald der Eee PC eingetrudelt ist weiter dran arbeiten. Diesmal muss es mit dem Clone schließlich was werden, ist ja schon peinlich immer anfangen und
dann das Ziel aus den Augen zu verlieren *lach* Vielleicht werd ich aber heute übermütig und stelle kurzzeitig wieder den Uralt Laptop mit dem ich an den Tobor
und co. gearbeitet habe in Betrieb. Zum Programmieren an der Gui dürfte der noch ausreichen...
Hatte mittlerweile überlegt es annähernd so zu machen wie Andreas uns die Realisierung bei den Originalen beschrieben hat. Also nicht wie im Moment
Objektinstanzen in einer Liste zu verwalten, sondern den Objekttyp als Byte oder Integer nebst ein bis zwei Variablen des Objektes entweder wie im Moment auch
in nur einer Liste, oder wenn das nicht viel bringt, halt in nem 2D Array zu speichern. Diese drei Werte dann jeweils an die Klassenfunktionen übergeben. Damit
bleibt das Skripting der Klassen genauso kompfortabel wie jetzt mit den Instanzen.
Erstmal aber wie gesagt, die Gui weiterbauen. Und 15x die gesamte Bitmapschriftart einfärben, denn Löve bietet leider keine Funktion um on-the-fly die Bitmaps
neu einzufärben. Aber nur schwarze Schriftart ist öde, und alleine schon für die Menüs brauche ich mindestens 2.
P.S.: Schon cool mit dem iPod hier im Forum zu surfen 😄 Nur das ewige Zoomen und Scrollen geht mit der Zeit auf den Keks.
2009-02-08 16:43 #12
Setze gerade GORC komplett neu in C++ um und bin auf bestem Wege die bisherige GORC Version zu überholen 😃
2009-02-08 17:19 #13
herc
sehr schön! c++ ist ne super wahl. damit kann performancemässig nichts mehr schief gehen. bin sehr gespannt auf eine neue version!
2009-02-20 09:55 #14
herc
fausti, hoffe du findest ab und an zeit, weiter an GORC zu arbeiten. 
ich wollte nur grad sagen: versuch mal irgendwie, auf zweisprachigkeit zu achten. also dass du von vornherein die möglichkeit hast, englisch und deutsch (und vielleicht französisch?) zu unterstützen. 
am allereinfachsten könntest du ein zweidimensionales, globales array machen:
struct{ STR_WELCOME, STR_ROOM1, .., STR_ROOM_100, STR_KNOBLAUCH_DESC, .. , NUM_STRINGS }
char* msg[3][NUM_STRINGS];
struct { LANG_ENGLISH, LANG_GERMAN, LANG_FRANZ}
und dann im spiel einfach nen globalen intege:
int lang = LANG_ENGLISH
und dann irgendwo 
cout
2009-03-01 01:02 #15
Bin die letzten zwei Wochen irgendwie nicht zum Arbeiten an Gorc gekommen 😬
Habe eher versucht meinen Leihlaptop in Form zu bringen und mich nebenbei auch noch auf mein Praktikum als Webentwickler, das am Montag anfängt, vorzubereiten.
Letzteres wollte aber auch nicht so recht klappen, bin einfach zu aufgeregt und es gibt bei PHP, MySQL, JavaScript, HTML, CSS, ... einfach zu viel was man sich
anschauen müsste... mir platzt bald der Schädel *lol*
Mal sehen, an den Wochenenden sollten sich doch ein paar Stunden finden lassen.
Das mit den Sprachen habe ich schon immer irgendwo im Hinterkopf. Am liebsten wäre es mir, wenn ich die übersetzten Strings aus externen Dateien einlese, denn
dann kann ich Deutsch und Englisch standardmässig beisteuern und die anderen Sprachen der Community überlassen.
Episodenbedingte Texte werde ich dann wohl nach dem gleichen Prinzip behandeln. Im Mapeditor wird dann z.B. nur "STR_ZETTEL_44" für einen Zettel
definiert, und Gorc zieht sich etwaige Übersetzungen aus der Episode beiligenden Übersetzungslisten. Macht sich beim zeichnen der Karten sicherlich auch
besser... denn wenn man den besagten Zettel verschieben muss, könnte es sonst passieren das man den ganzen Zetteltext neu schreiben muss.
2009-03-03 08:23 #16
herc
fausti, dann viel erfolg und spass im praktikum !
danach findest du bestimmt wieder mehr zeit für gorc.