Author Archives: Robin

About Robin

Software Engineer at day, Indie Dev at night.

#R2 Tower Defense: Blender Setup / Workflow

Vor etlichen Jahren - mittlerweile sogar schon Jahrzehnten - habe ich etwas in 3DS Max modelliert. Zwischenzeitlich hatte ich mir Blender angesehen aber aufgrund der Komplexität schnell wieder das Interesse verloren. Für kleinere 3D Modelle habe ich den Subdivision Modeler Wings3D genutzt - auch ein kostenloses Tool, die Oberfläche ist simpel und man findet sich ziemlich schnell zurecht. Allerdings konnte ich die Texturen nie so richtig platzieren, Stichwort: UV Maps. Also habe ich in den sauren Apfel gebissen und mich letztes Wochenende - und das davor auch - mit Blender beschäftigt. Nach einige YouTube-Tutorials ging es dann einigermaßen von der Hand. Es ist eben noch kein Meister vom Himmel gefallen. Du musst Zeit und Mühe investieren um etwas zu lernen.
YouTube ist neben Google die zweitgrößte Suchmaschine der Welt
Blender SetupLinks habe ich die Plattform auf der der Tower steht und die Tower jeweils als separate Objekte. Oben rechts könnt ihr die UV-Map und die Textur sehen. Ziel ist es, für das gesamte Spiel nur eine Textur von 256 x 256 Pixel zu nutzen - zumindest was die 3D Modelle anbelangt. Die einzelnen Faces können dann ähnlich wie Pixel-Art mit entsprechenden Farben belegt werden. Das erzeugt einen netten Low-Poly-Look. Mein erster Ansatz bestand darin, die Tower als High-Poly Objekte zu modellieren um daraus eine Normal-Map zu erzeugen sowie eine Ambient-Occlusion-Map und diese dann auf die Low-Poly Modelle zu legen. Der Aufwand dafür ist allerdings relativ hoch, daher habe ich mich für diese Tower Defense Challenge für den coolen Low-Poly Look entschieden.

#R1 Tower Defense: Das Grundgerüst

Stephan (XeNonski) hat vor ein paar Tagen unsere kleine Tower Defense Challenge "ausgerufen". Das kann ich natürlich nicht auf mir sitzen lassen und untätig bleiben. Der Ruf nach Rum und Ehre - oder war es Ruhm? - muss Folge geleistet werden. Nach dem Update von A Tiny Painter habe ich jetzt ein paar freie Ressourcen für unsere kleine Challenge. Zur Zeit überlege ich mir noch das Setting von dem Spiel, allerdings ohne große Erfolge. Falls ihr ein paar tolle Ideen habt, immer her damit an @BigRob154 oder an @EmberoGames. Das hindert mich aber nicht daran die Entwicklung zu starten. Schließlich ist jeder gezielte Fortschritt auch ein messbarer Fortschritt. Kleine Erfolge motivieren ungemein, deswegen die Ziele in viele kleine Schritte unterteilen. Da ich schon einige Jahre als Software-Entwickler auf der Kappe habe wurde der Data-Driven-Approach gewählt. Klingt hochgestochen ist aber ganz einfach. Man baut seine Szenen / Level nicht mühselig im Code sondern lagert alle konfigurierbaren Daten aus. Das Programm liest die Daten einfach ein und baut daraus den Level. Abstrahiert man diesen Schritt noch etwas weiter, kann man sogar ganze Level oder Kampagnen in externe Daten auslagern - das ist natürlich mein Ziel. Der Vorteil dieser Methode besteht in drei wesentlichen Dingen:
  1. Vereinfachung des Codes / bessere Wartbarkeit
  2. Keine Neukompilierung für Änderungen / einfacheres Testen
  3. Eigene Level / Mods (Yay)
Durch die Auslagerung des eigentlichen Inhalts und deren Konfiguration spart man enorm viel Code. Von der Architektur-Seite her, kann man sich auf die wesentlichen Aufgaben des Programms konzentrieren - Steuern, Laden, Darstellen. Ausserdem lässt sich durch diese Struktur neuer Inhalt einbauen ohne das man das eigentliche Programm anfassen muss. Die Vorteile liegen auf der Hand. Für die Meta-Informationen wie zum Beispiel Wegpunkte, Hintergrundmusik usw. verwende ich eine JSON-Datei:
{
    "waypoints":[ {"x":4,"y":8} ],
    "waves":[
        { 
            "enemies":[
                {"name": "Cube1"},
                {"name": "Cube1"},
                {"name": "Cube2"},
                {"name": "Cube1"}
            ] 
        }
    ]
}
Der Level-Aufbau / das Layout wird über eine PNG-Datei gesteuert. Jeder Pixel im Bild steht für eine Gitter-Position im Spiel. Ein Bild von 9x9 Pixeln bildet ein Spielfeld mit einem Gitter von 9x9 Feldern (Bild stark vergrößert): Level Grid Die Farben stehen für bestimmte Objekte. "Weiß" steht hier für ein Weg-Element, "Grün" für Plattformen auf denen Türme aufgestellt werden können, "Gelb" ist der Spawn-Bereich der Gegner und "Rot" ist das Herzstück, das die Gegner nicht erreichen dürfen. Zum Schluß noch ein Bild wie das ganze zur Zeit in Unity3D aussieht. Data Driven Tower Defense Approach Wenn ihr Fragen oder Anregungen habt schreibt mich einfach auf Twitter oder Facebook an.
A Tiny Painter Update

A Tiny Painter 2.0 Update Released

Grab the free update on the AppStore. You asked for features and enhancements like "More Colors", "More Space to Draw" and "Support for Modern Devices". So I reworked the whole App and re-wrote A Tiny Painter from the ground up. It uses the modern Swift language by Apple and it's more stable and faster now. I wish you happy drawing and sharing! New UI More Colors More Space Share with Friends Become A Tiny Painter
Smash Orbs 2 Update

Smash Orbs 2 Update 1.1 #1

Optimized the in-game progression based on your feedback. The beginning was actually too long and the end-game was too short. Gameplay feels much more "natural" now. You'll progress much faster in the early slow levels and have more fun in the late game as you can play longer without getting too difficult too fast. Continue reading