[Projekt] Closed Minds

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Antworten
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

[Projekt] Closed Minds

Beitrag von xq »

Hallöchen,

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.

Bild

Bild

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>
Für mich persönlich ist das XML-Format selbsterklärend, aber das ist natürlich eine stark subjektive Meinung.
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
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Antworten