mal wieder ein neues Projekt von mir, mal schauen wie lange es durchhält.
Closed Minds soll ein kleines Point'n'Click-Adventure werden, welches sich an den Submachine-Spielen orientiert.
Das ganze ist in C# geschrieben, gerendert wird zur Zeit mit GDI+, das Audio läuft mit NVorbis.
Wer eine absolute Minidemo mal antesten will, kann sie sich unter http://mq32.de/downloads/Closed-Minds-Demo.zip runterladen. Aktuelles Ziel ist es, in den Garten des Anwesens zu kommen.
Technische Umsetzung:
Die Logik des Spiels basiert auf Szenen, Props, Triggern, Bedingungen und Effekten.
Ein Prop ist ein Ding, welches in einem Level sichtbar sein kann. Ein Prop kann eine Bedingung besitzen, welche bestimmt, ob er angezeigt wird oder nicht. Zudem kann er durch einen Effekt animiert werden.
Ein Trigger ist eine unsichtbare, für die Maus sensible runde oder rechteckige Fläche in der Spielwelt. Trigger können ebenfalls durch eine Bedingung aktiviert oder deaktiviert werden. Jeder Trigger besitzt verschiedene Auslösemöglichkeiten: Klick und Kombination mit einem bestimmten Item. Bei einer Auslösung wird ein Set an Effekten ausgelöst.
Ein Effekt beeinflusst das Spiel aktiv. Das heißt, er modifiziert das Inventar, spielt einen Sound oder eine Animation oder wechselt die Szene.
Bedingungen prüfen mit logischen Verknüpfungen, ob das Inventar einem Prädikat entspricht (hat "keks", hat weniger als 10 "keks", ...).
Die gesamte Spiellogik kann über die oben genannten Dinge realisiert werden. Der Zustand des Spiels wird in dem Inventar abgespeichert. Die im Spiel sichtbaren Inventargegenstände sind speziell markiert, damit sie angezeigt werden. Das Inventar selbst enthält den gesamten Spielzustand.
Beispielcode für die Szene "Türe Links":
Code: Alles auswählen
<?xml version="1.0" encoding="utf-8" ?>
<scene background="/Backdrops/GateLeft">
<trigger x="1101" y="557" width="179" height="163" cursor="MoveRight">
<on-click>
<scene-transition target="gate-right" />
<sound id="walk-street" />
</on-click>
</trigger>
<trigger x="1082" y="338" width="50" height="78" shape="Circle" cursor="Inspect">
<active-when>
<not>
<has-item item="gate-open" />
</not>
</active-when>
<on-click>
<spawn-text text="Locked..." />
</on-click>
<combination item="gate-key">
<sound id="key-drop"/>
<set-inventory item="gate-open" />
<set-inventory item="gate-key" value="0" />
</combination>
</trigger>
<trigger x="968" y="157" width="312" height="400" shape="Rectangle" cursor="MoveForward">
<active-when>
<has-item item="gate-open" />
</active-when>
<on-click>
<scene-transition target="dooryard-1" />
<sound id="iron-gate"/>
</on-click>
</trigger>
<prop id="bird" x="-40" y="60" image="/Props/bird">
<animation name="fly" is-looped="true">
<frame time="0" x="-40" y="40" image="/Props/bird" />
<frame time="3" x="-40" y="40" />
<frame time="7" x="1280" y="60" />
<frame time="10" x="1280" y="30" image="/Props/bird-2" />
<frame time="17" x="-40" y="50" />
</animation>
</prop>
<on-enter>
<animate target="bird" animation="fly" />
</on-enter>
</scene>
Falls Interesse besteht, werde ich das Projekt zügig auf GitHub bereitstellen und eine Dokumentation für sowohl Engine-Code als auch Engine-Nutzung bereitstellen. Die Engine ist "soweit fertig" als dass sie die meisten von uns benötigten Features besitzt, die man braucht, um einfache bis komplexe Rätsel zu lösen.
Ansonsten freue ich mich wie immer über Feedback zu der ganzen Geschichte, ich hoffe wir kommen nächste Woche wieder zu neuer Inhaltserstellung, das ist halt hier doch aufwändiger als Engine selbst.
Grüße
Felix