Dungeon

Aus Sternenschweif Wiki
Wechseln zu: Navigation, Suche

Ein Dungeon im Spielsinn von Schicksalsklinge HD ist ein Bereich, in dem sich sog. #Trigger befinden, also dreidimensional definierte Bereiche, die bei "Berührung" durch eine Party eine Aktion auslösen. Für jeden Dungeon existiert ein Skriptbereich, der für den gesamten Dungeon sog. #Callbacks beinhaltet, also Funktion mit bestimmtem Namen, die bei bestimmten Aktionen aufgerufen werden. Ein Dungeon enthält außerdem die Definition von Türen und deren Widerstandsfähigkeit gegen bestimmte Öffnungsarten, sowie #Truhe Truhen, mit ähnlichen Definitionen. Außerdem sind sog. #Itemset Itemsets definiert, die als Inhalt von Truhen verwendet werden können.

Übersicht XML

Das Dungeon-XML ist in Bereiche unterteilt, die die Definition des Dungeon ausmachen:

<dungeon intname="dngf046">
	<floor id="0">
		<tiles>
			<tile cdoorid="1" state="open" type="door" />
			<tile cdoorid="2" state="locked" foramenmod="6" lockpickmod="-2" runinmod="3" type="door" />
			<!--- ... -->
			<tile chestid="1" foramenmod="-6" lockpickmod="2" type="chest" />
			<tile chestid="2" foramenmod="-6" lockpickmod="2" type="chest" />
		</tiles>
		<fights>
			<fight fightname="f04604" extraAP="0">
				<escape dir="0" x="1" y="10" lookdir="0" floor="0" />
				<escape dir="1" x="3" y="14" lookdir="3" floor="0" />
				<escape dir="2" x="1" y="10" lookdir="0" floor="0" />
				<escape dir="3" x="3" y="14" lookdir="3" floor="0" />
				<fightdata id="89" name="F04604">
					<enemy>
						<monster id="6" startin="1" />
						<monster id="6" startin="1" />
						<monster id="16" startin="1" />
						<monster id="16" startin="1" />
					</enemy>
					<loot />
				</fightdata>
			</fight>
			<!--- ... -->
		</fights>
		<triggers>
			<trigger name="coolerroom" x="11" y="-16.5" width="4" height="4" />
			<trigger name="deadwanderer" x="2.5" y="-42" width="3" height="4" />
			<trigger name="f04604" x="7" y="-8.5" width="6" height="6" />
			<!--- ... -->
		</triggers>
	</floor>
	<script><!-- hier steht normalerweise das Dungeonscript --></script>
	<itemsets>
		<itemset id="chest_0_2">
			<item id="3" />
			<item id="98" />
			<item id="4" />
		</itemset>
		<itemset id="chest_1_1">
			<item id="47" />
			<item id="149" />
			<item id="236" count="1" />
			<item id="180" count="1" />
			<item id="169" />
			<item id="204" />
			<item id="243" />
		</itemset>
		<!--- ... -->
	</itemsets>
</dungeon>

Jeder Dungeon ist in sog. "floors", also Ebenen, unterteilt. Diese dienen als Container für Kämpfe, Tür- und Kistendefinitionen sowie Trigger. Allgemein für den gesamten Dungeon werden dann noch Itemsets und das sog. "Dungeonscript" gesetzt.

floor

Die floor-IDs sind numerisch und müssen aufsteigend gesetzt werden, beginnend mit "0".

Tür

Eine Tür wird mittels <tile cdoorid="XX" type="door"> definiert, wobei die existenten Tür-IDs durch das Dungeondesign und dessen Daten vorgegeben sind. Eine Tür kann folgende optionale Eigenschaften erhalten:

  • state: Der Status der Tür bei Erst-Betreten des Dungeons. Mögliche Werte sind "open", "closed", und "locked"
  • foramenmod: Der Modifikator auf einen Zauberspruch "foramen", der zum Öffnen der Tür verwendet werden soll. Positive Werte erleichtern, negative erschweren.
  • lockpickmod: Der Modifikator auf eine Probe zum Öffnen der Tür mittels "Schlösser knacken"
  • runinmod: Der Modifikator für das Eintreten der Tür mittels Stärkeprobe von zwei Charakteren

Geheimtür

Wird mittels <tile cdoorid="XX" state="closed" type="secretdoor"> definiert, wobei die möglichen IDs durch das Dungeondesign und dessen Daten vorgegeben sind. Geheimtüren werden über Trigger und das Dungeonscript geöffnet, eine Geheimtür mit "state="opened"" ist zwar theoretisch möglich, wäre aber relativ sinnlos.

Entfernbare Hindernisse

Werden mittels <tile cdoorid="XX" type="removeablewall"> definiert, wobei die möglichen IDs durch das Dungeondesign und dessen Daten vorgegeben sind. Entfernbare Hindernisse sind zB die eingestürzten Bereiche in der Mine von Prem, die mittels graben von der Party entfernt werden können. Auch diese werden ausschließlich über das Dungeonscript "geöffnet".

Truhe

Diese wird mittels <tile chestid="XX" type="chest"> definiert, wobei wie bei Türen die IDs der Kisten durch das Dungeondesign vorgegeben sind. Eine Kiste kann folgende optionale Eigenschaften erhalten:

  • foramenmod: Der Modifikator auf einen Zauberspruch "foramen", der zum Öffnen der Truhe verwendet werden soll
  • lockpickmod: Der Modifikator auf eine Probe zum Öffnen der Truhe mittels "Schlösser knacken"
  • trap: Eine Falle, die beim missglückten Knacken des Schlosses auslöst. Als Wert wird die Schadensart übergeben, zB "physical" oder "fire"
  • diecnt, dietype, mod: Wie viel Schaden die Falle verursachen soll, als Würfelwurf. Beispiel: 2W6+3 = diecnt="2" dietype="6" mod="3"

Trigger

Dies sind die Auslöser für Dungeonereignisse, sie werden in OnTrigger( which) und OnTriggerLeft( which ) dem Dungeon mitgeteilt, der "name" wird mit dem Prefix der Dungeonebene versehen, beginnend bei 0

  • x, y, z: Koordinaten des Triggers im Dungeon, wenn nur x/y angegeben werden, so gilt der Trigger zwischen vertikal -20 und +20, werden alle 3 Koordinaten angegeben, so ist der Trigger auf den Koordinaten genau 2 Einheiten vertikal groß
  • width, height: Breite und Höhe des Triggers in Einheiten
  • name: Name des Triggers, muss innerhalb der Ebene eindeutig sein!
  • rot: (optional) Rotation des Triggers in der Y-Achse

Dungeon-Recycling

Diese Modability erlaubt es, die bestehenden Dungeon-Szenen mit komplett neuen Inhalten zu befüllen und auch komplett von vorne Erforschbar zu machen, d.h. die Karte wird neu aufgedeckt, das Ganze wird wie ein neuer Dungeon behandelt, aber halt mit dem selben Szenen-Unterbau. Ich brauche Euch glaub ich nicht zu erklären, was sich ändern lässt und was nicht. Jedenfalls funktioniert das wie folgt:

•In einer Mod einen "new dungeon" anlegen

•Einen Namen für den Dungeon vergeben, der mit "dng" beginnt

•Ins Dungeon-XML einen neuen Eintrag "<scene>[dungeonname]</scene>" einfügen, der den zu ladenden Dungeon angibt, also z.B. "<scene>[dngverlies]</scene>"

•Restliches XML und Dungeonscript entsprechend umsetzen, als Basis kann man hier auch den Originaldungeon verwenden

•Im Spiel erreicht man den Dungeon ganz normal über den Befehl "jumpToLocation({"where":"dungeonname"});" oder über Konsole mit "jump <neuerdungeonname>"