######################################################
# Stranded 2 World - BETA Version (in der Testphase) #
######################################################

VORAB: FEHLERHAFTE ANWENDUNG KANN IM UERSTEN NOTFALL DAZU FHREN, DASS EURE KARTEN UNBRAUCHBAR WERDEN! ICH MEINE... DAZU GEHRT EIGENTLICH SCHON EINE GUTE PORTION PECH, ABER TROTZDEM: MACHT (REGELMIG) BACKUPS VON EUREN KARTEN! ;)

Was tut dieses Skript/Info-Objekt eigentlich...
-----------------------------------------------

Kurz: Es lassen sich grere zusammenhngende "Welten" bei Stranded 2 realisieren.

Lang: Zwar gelangt der Spieler bereits im Abenteuer von einer Karte zur nchsten, allerdings ist der Rckweg versperrt und bringt einige Tcken mit sich die es zu beachten gilt, bspw. im Zusammenhang mit gebauten Gebuden, liegengelassenen Gegenstnden etc.
Mit einem zuvorigem Speichern der Karte mittels 'savemap' ist es hier aber nicht getan. Bspw. werden wieder alle start-Events aufgerufen, was zu Bugs fhren kann. Das liee sich zwar per 'loadmaptakeover' einigermaen in den Griff kriegen, erfordert aber bei multilinearen Wegen - wo nicht immer klar ist, ob der Spieler zuvor schon auf einer Karte war oder nicht - allerdings schon wieder eine Fallunterscheidung. Zudem werden bei Kartenwechsel per 'loadmap' einige Einstellungen wie Datum, Spielerwerte oder Tageszeit zurckgesetzt.

Alles in allem gilt es viele Fallunterscheidungen zu machen und Besonderheiten zu beachten. "Stranded 2 World" stellt dabei den Versuch (!) dar, alle diese Schwierigkeiten auf ein Mindestma notwendiger Parameter zu reduzieren, so dass der Anwender schlussendlich nur noch "aneinanderzusetzen" braucht, und gleichzeitig noch ein grtmgliches Ma an Freiheit (Modifizierbarkeit) zu garantieren.

KURZANLEITUNG
-------------

1. Im Map-Ordner von Stranded 2 - Extension Mod ("mods\S2Ext\maps\") einen Ordner "s2w0rld" erstellen.

2. Auf eine (leere) ein Fhnchen (Info-Objekt) setzen und folgendes Skript rein (copy and paste):

on:start {
  $g_map_source="s2w0rld";
  $g_map_dest="saves";
  $startmap_id=1;

  event "init";
}

on:init {
  local $tmp;
  $tmp=join("maps\",$g_map_source,"\",$g_map_dest);
  mkdir $tmp;
  $g_maps="000000000000000000";
  $g_s2w0rld_start=1;
  $tmp=join("maps\",$g_map_source,"\map",$startmap_id,".s2");
  loadmap "$tmp",1,1,1,1,1,1;
}

Im Ordner "s2w0rld" abspeichern (Name egal).

3. Wieder eine leere Karte erstellen und ein Info-Objekt "Stranded 2 World" setzen. Draufklicken und bei dem sich ffnenden Fenster unten auf den Button mit dem Schraubenschlssel und den Zahnrdern klicken. Bei "Zentrum" eine 1 reinschreiben und bei irgendeiner der Himmelsrichtungen (N,S,W oder O) eine 2, die anderen auf 0 lassen. Unter "map1" im Ordner "s2w0rld" abspeichern.

4. Das gleiche noch einmal, jetzt aber  bei "Zentrum" eine 2 und bei der entgegengesetzten Himmelsrichtung (je wo ihr bei der ersten Karte die 2 reingeschrieben habt) eine 1. Unter "map2" im Ordner "s2w0rld" abspeichern.

Ergebnis: Wenn ihr jetzt eure allererste Karte startet, wird von dort aus die Karte map1 geladen. Um zu map2 zu gelangen schwimmt in die Himmelsrichtung wo ihr bei map1 eine 2 eingetragen habt (ihr braucht noch ein Boot dafr). Wie gesagt, knnt ihr stndig hin- und herschwimmen, Gegenstnde hin- und zurcktransportieren, Gebude bauen... Auerdem sollten weder die Spielerwerte noch die Tageszeit oder irgendetwas anderes zurckgesetzt werden.

Nutzung des Scripts (etwas ausfhrlicher)
-------------------

Angenommen wir haben mehrere Karten erstellt. Setzen wir mal 9 Stck voraus, es knnen aber auch weniger oder mehr sein. Jetzt soll der Spieler bspw. stets von einer Karte zu nchsten und wieder zurck reisen knnen, bspw. so:

1<->2<->3<->...<->8<->9

was natrlich etwas unspektakulr wre, aber prinzipiell mglich. Fr unser kleines Tutorial nehmen wir mal an, wir wollen die Karten wie folgt aneinander hngen:

1-2-3
| | |
4-5-6
| | |
7-8-9

Als erstes benennt ihr die Karten mal hbsch in "map1.s2", "map2.s2", ... "map9.s2" um - die Ziffern werden dann spter unsere Identifikationsnummern (IDs) sein.

Als nchstes mssen alle Karten in einen extra Ordner im Verzeichnis "mods\S2Ext\maps\". Wir nennen ihn hier mal "s2w0rld". So.

Auf jede unserer neun Karten setzen wir jetzt so ein Info-Objekt "Stranded 2 World". Im Editor draufklicken - das Eigenschaftsfenster ffnet sich - und rechts unten befindet sich so ein Button "Definitionsvariablen". Dort befinden sich dann fnf Zeilen "Zentrum, Norden, Osten, Sden, Westen" wo man fr jede einzelne Karte die ID der jeweils anderen Karten sowie die eigene Karten-ID eintragen muss. Bei "map5.s2" wre das dann die 5 bei "Zentrum", 2 bei "Norden", 6 bei "Osten", 8 bei "Sden" und 4 bei "Westen". Bei "map1.s2" wre das entsprechend die 1 bei "Zentrum", 4 bei "Norden", 2 bei "Osten", bei den anderen Feldern eine 0. Die Karten sind jetzt also alle miteinander "verlinkt".

Jetzt fehlt noch die Karte fr die Initialisierung. Hier reicht eine kleine leere Karte mit einem Info-Objekt und dem obigen Skript. Diese kann man nennen wie man will und auch im normalen Map-Ordner lassen, damit sie spter ber Einzelkarten aufrufbar ist. Auerdem lsst sich diese Karte hervorragend fr Introsequenzen oder hnlichem nutzen. In diesem Falle muss dann die Zeile

loadmap "$tmp",1,1,1,1,1,1;

im obigen Skript gelscht werden. Den Wert der Variablen "tmp" - also der Pfad zur ersten Karte - gilt es ggf. noch fr spter im Auge zu behalten, wenn man dann bspw. nach einer Kamerasequenz die Karte laden mchte. Oder man macht das dann einfach ganz konventionell, etwa

loadmap "maps\s2w0rld\map1.s2",1,1,1,1,1,1;

wie in unserem Fall.



Der Ordnername ("s2w0rld") spielt zwar nicht wirklich eine Rolle, aber um evtl. berschneidungen zu vermeiden oder aus sonstigen Grnden kann man den auch beliebig nennen. Dann muss allerdings auch bei der Variablen $g_map_source (Skript s.o.) entsprechend der Eintrag gendert werden.

$g_map_dest beinhaltet den Namen des Unterverzeichnisses, in welchem spter die Karten zwischengespeichert werden, welche der Spieler bereits besucht (und dort bspw. Gebude gebaut oder Gegenstnde liegengelassen) hat. Knnt ihr auch selbst whlen, wenn ihr wollt (Verzeichnis wird im Spiel automatisch angelegt). Ist nun aber wirklich wurst. :)

Bei $startmap_id lsst sich die ID der Karte eingetragen, wo das Spiel starten soll (default 1). Beim obigen Beispiel wre es sinnvoll eine 5 einzutragen, damit das Spiel dann genau in der Mitte startet.

Vergesst nicht die Karten abzuspeichern, nix durcheinanderzuhauen, Backups zu machen..., und ansonsten wars das eigentlich schon. Wichtig ist ansonsten noch, dass ihr eure Projekte regelmig testet. Erst spt entdeckte Fehler lassen sich manchmal schwer korrigieren.

was vielleicht noch erwhnenswert wre...
-----------------------------------------

Die Variable $g_maps enthlt soviele Nullen (default 18), wie maximal Karten mglich sind. Wichtig ist, dass die Karten alle aufsteigend von 1 bis Obergrenze (default 18) durchnummeriert sind. Also keine IDs wie 256,137,4 oder so... (knnt ihr zwar eigentlich auch machen, aber dann mssen der grten Zahl entsprechend viele Nullen eingetragen sein).

---

In einer frheren Version kam es zu Problemen im Zusammenhang mit start-Events. Stranded 2 unterscheidet zwar zwischen Karten, die per loadmap oder eben nicht per loadmap geladen wurden, allerdings nicht, ob sie zum ersten oder zum wiederholten Male geladen wurden. Skripttechnische Lsunganstze konnten das Problem nicht hinreichend lsen oder wren mit sehr viel Aufwand verbunden gewesen. Mittlerweile habe ich ein "Debug-Objekt" mit der ID 500 eingefgt, welches auch beim s2w0rld-Skript verwendet wird. Nun sollte man bei allen start-Events anhanddessen - ob das Objekt existiert oder nicht - feststellen knnen ob die Karte zum ersten Male geladen wurde oder nicht.

Beispiel:

on:start {
  if (count("object",500)>0) {
    msg "Karte wurde per loadmap geladen und nicht zum ersten Mal gestartet.";
  } else {
    msg "Karte wurde per loadmap geladen und zum ersten Mal gestartet.";
  }
}

Diese ganzen Details nimmt euch s2w0rld aber wie gesagt bereits ab und sind hchstens bei der Nutzung von start-Events in globalen Skripten ganz hilfreich.]

Wer jetzt denkt, das ginge doch auch mit Variablen... Ja, mglicherweise. Aber dann wre eine globale Variable am sinnvollsten, deren Wert aber auch stets bei loadmap zusammen mit denen der anderen globalen Variablen bergeben werden wrde - das Hilfsobjekt allerdings nicht, was mir sicherlich ein paar zustzliche Codeschnipsel erspart hat. ;)

Die alten global aufgerufenen Hilfsfunktionen lassen sich brigens weiterhin nutzen:

on:game_start {
  //Wird nur ausgefhrt, wenn das Spiel auf dieser Map startet.
}

on:first_entry {
  //Wird ausgefhrt, sobald der Spieler das erste Mal
  //diese Karte betritt (Spielstart/Mapwechsel)
}

on:repeated_entry {
  //Wird ausgefhrt, wenn der Spieler zum wiederholten
  //Male die Karte betritt.
}

---

Bei den Definitionsvariablen vom Info-Objekt "Stranded 2 World" gibt es noch den Eintrag "Info-ID fr eigenes Skript". Hier lsst sich das Skript "s2w0rld_script.s2s" durch ein eigenes, bspw. leicht variiertes Skript ersetzen. Dazu einfach einen Textcontainer mit dem entsprechendem Skript und die ID des Textcontainers bei den Definitionsvariablen vom Info-Objekt "Stranded 2 World" eintragen.

Sonst noch Fragen, Anregungen, Kritik, Bugs, Kiwieier, Spammails...?

-> kitpo@gmx.net <-

Oder per PN im Forum...