Der Anfang und das Ende

Das Board für Schwierigkeiten beim Adventure-Machen und zum Melden von Bugs
Post Reply
mirkowelle
PaC-DK Newby
Posts: 9
Joined: 02 Jul 2014, 10:46

Der Anfang und das Ende

Post: # 81343Post mirkowelle
07 Jul 2014, 10:01

Hallo zusammen,

ich bin es nochmal. Mein Projekt macht gute Fortschritte und ist fast fertig. Ich habe jetzt ein Problem mit dem Ende und dem Anfang des Spiels.

1.
Man muß fünf Dinge erledigen um zu gewinnen und dazu habe ich Merker gesetzt und ein kleines script geschrieben.

Hier das Script(sieg):

if_bool(sieg1;true)
if_bool(sieg2;true)
if_bool(sieg3;true)
if_bool(sieg4;true)
if_bool(sieg5;true)
offspeech(16;11;Gewonnen!)

die Merker werden im Spiel z.B. umgeschaltet, wenn man Dinge aufnimmt (2x) bzw Sachen kombiniert (3x). Was genau, will ich hier nicht verraten.(Spoiler^^) wenn es aber doch hier wichtig ist, kann ich es gerne nachreichen.
Der Charakter sagt dann auch jeweils ein kleines Sätzchen, das funktioniert auch beim Test, aber das Ende wird nciht ausgelöst. Liegt es vielleicht an der Reihenfolge, daß die bools von 1 bis 5 abgehakt werden müssen, bei meinem Skript? gibt es eine Art 'und'-Verknüpfung, daß die Reihenfolge für das Programm beliebig ist? Oder habe ich etwas Grundlegendes übersehen?

2.
Habe ich eine Intro-Scene geschrieben, die soweit auch funtioniert, nur startet das Spiel nicht richtig. es wird weder Raum noch Charakter geladen, aber dafür das Bedienfeld.

hier die scripte:

(start)
cutscene(intro)
loadroom (labor)
setfocus (char)

und (intro)
offspeech(14;14; 'Erklärtext')
endscene


vielen Dank nochmal im Voraus

Zimond
Der Engine Papa
Posts: 3420
Joined: 06 Apr 2003, 19:34
Location: Krefeld
Contact:

Re: Der Anfang und das Ende

Post: # 81344Post Zimond
07 Jul 2014, 16:14

Nö, das ist eigentlich so richtig. Am ehesten vermute ich bei sowas erst mal einen kleinen Tippfehler, sprich es sind nicht alle 5 Merker richtig gesetzt.

Du kannst sofern der *DevMode aktiviert ist mit der Taste F11 alle Variablen nachschauen und einfach mal direkt an der richtigen Stelle überprüfen ob alle Merker auch auf True stehen.


*In der offiziellen Version wird der Devmode durch ein Häkchen bei den Settings aktiviert in der neuen noch nicht offiziellen durch 2 Sekunden festhalten der Konsolentaste.
Image

mirkowelle
PaC-DK Newby
Posts: 9
Joined: 02 Jul 2014, 10:46

Re: Der Anfang und das Ende

Post: # 81345Post mirkowelle
08 Jul 2014, 10:11

Hallo

und Danke für die schnelle Antwort. Ich habe direkt mein Spiel im Devmode ausprobiert und es werden alle Merker auf 'true' geschaltet. Dann ist mir zum Glück selber die Lösung gekommen: Das Sieg-script muss als Hauptscript angegeben werden. Darauf hätte ich schon eher kommen können :doh:
Jetzt muss ich nur noch wissen, wie man den Spieler fragen kann, ob er nochmal spieln möchte. Problem 1 gelöst^^

Nur mein Intro macht mir noch Kummer
(start)
cutscene(intro)
loadroom (labor)
setfocus (char)

(intro)
offspeech(14;14; 'Erklärtext')
endscene

Nach der intro-Szene bleibt der Bildschirm schwarz. Ich hab zwar mein tolles Bedienfeld und ie objekte im Raum werden in der Info-Zeile angezeigt, aber sonst tut sich nix. Hab ich da vlt nur einen ähnlichen Denkfehler wie bei den Siegbedingungen?

Grüße

Zimond
Der Engine Papa
Posts: 3420
Joined: 06 Apr 2003, 19:34
Location: Krefeld
Contact:

Re: Der Anfang und das Ende

Post: # 81346Post Zimond
08 Jul 2014, 11:58

wegen dem Sieg Skript : Das muss natürlich irgendwo ausgeführt werden, davon war ich ausgegangen.

wegen Intro :

- Warum steht da ein endscene? Oder hast du das jetzt nur fürs Posten darunter geschrieben?
- Stimmt der Name des Raumes?
- Befindet sich der Charakter char im selben Raum? Wenn nicht wird das Spiel automatisch den Raum laden wo er drin ist.
Image

mirkowelle
PaC-DK Newby
Posts: 9
Joined: 02 Jul 2014, 10:46

Re: Der Anfang und das Ende

Post: # 81347Post mirkowelle
11 Jul 2014, 09:23

Hallo,

Hallo, ich dachte, daß ich das intro als cutscene erstelle, die dann über das start-script abgerufen wird. Mein ursprüngliches strtscript war nicht viel größer als das aus dem Beispiel-Adventure.

loadroom(labor)
setfocus(char)

dem habe ich dann den Befehl für die cutscene(intro) vorangestellt. Meine Überlegung war, daß ja die intro-scene auch wieder beendet werden muß, damit das startscript weiter abgearbeitet wird. Deshalb habe ich das 'endscene' ins intro geschrieben. Wahrscheinlich habe ich da wieder ein Denkfehler gemacht und irgendwas an die falsche Stelle gestellt. Muß ich das Intro vielleicht auch in Hauptscript stellen?
Vielleicht ist es Zeit für ein Basic-tutorial Teil 3, daß weniger Details klärt, aber dafür auf die Hintergrundstruktur (Hauptscript, cutscenen werden ausgelöst, Siegbedingungen) eingeht. ;-) Dann müssen Leute wie ich nciht so viel nerven^^

ansonsten habe ich nur Lob für das Programm übrig^^

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Der Anfang und das Ende

Post: # 81348Post japanhonk
11 Jul 2014, 10:23

Hi,

das Startscript sollte dem Spiel nur angeben, was es eben nach dem Start machen soll. ( Variablen auf 0 setzen oder vordefinieren, Chars vorladen, Startraum laden, unnötige Charaktere in leere Räume beamen usw )

Es ist ungünstig, es zu unterbrechen und fortsetzen zu wollen, so, wie Du Dir das denkst, auch wenn der Grundgedanke ( Cutscene unterbrechen, dann fortsetzen ) okay ist. Aber es gibt
elegantere Wege.
(Falls Du dennoch daran festhalten willst, packst Du den char in den startraum und schreibst als letzten Befehl in den Intro-Skript : setfocus (<werauchimmer>...) Natürlich dann den passenden Namen verwenden...
Damit wechselt quasi "die Kamera" auf den Char. Dazu muss die Engine zwangsläufig den Raum , wo er sich befindet, mitladen. Ein loadroom() kann entfallen.

Ich würde Dir daher dazu raten, dass der Befehl zum Abspielen des Intros der lezte im Startscript ist.

Das Intro selbst gibt dann den nächsten Befehl, um weiterzumachen, z.B. mit einer weiteren Funktion oder Cutscene oder dem Screnn mit den Optionen wie Spiel laden, starten usw. Da das dann ja sowieso eine neue Abfrage bedeutet, macht das im Startscript direkt wenig Sinn.


Es gibt aber mehrere Wege, das Ende des Introscreens für das Spiel zu signalisieren.
Entweder, Du lässt es als Funktion ablaufen - die kann man im Gegensatz zur Cutscene nämlich auch
unterbrechen, weil sie quasi "nebenher" arbeitet - also kann der Spieler das Intro per Mausklick
überspringen - oder Du hast eine Loop Funktion im Intro Raum, die z.B. die Credits zeigt oder sowas.

Dann kannst Du auch einen Button reinsetzen, der dann beim Anklicken den nächsten Raum lädt.

Ich nutze ganz gerne Timerobjelte, das sind leere Objekte, deren Zustände unterschiedlich schnell
ablaufen und in deren letzem Frame die Zeile "function [function_def]" drinsteht.

Der String function_def wird bei Bedarf mit dem Namen der Funktion beschrieben, die ich ausführen
will und dann das Timer Objekt auf den gewünschten Zustand gesetzt. Nach Ablauf der 30 Frames
wird dann die angegebene Funktion ausgeführt, die als Erstes natürlich das Timer Objekt auf 0 zurücksetzt. ( Praktisch, um Musikstücke nur einmal abzuspielen und dann zu beenden, wenn man deren Länge kennt )


Cutscenes und zeitlich ablaufende Loops, die man nicht beeinflussen kann, würde ich am Spielbeginn
vermeiden.

Beispiel :

vorhandene Räume : Intro, Startoptions, Raum1
1 Char

Startscript :

setfocus (none)
Loadroom (intro)

Raum Intro hat folgende Skripte :

on (enter)
playmusic (<mirdochegal...>)
setobj (Button_skip_intro;1)
function ( intro_credits ) -> ggf dahinter noch die Anzahl der Durchläufe oder loop, sonst läuft das nur einmal ab

on (exit)
stopmusic (<mirdochegal...>)



In der Funktion "intro_credits" könnte stehen :

textout....
wait ...
hidealltext
wait...
textout
setobj (hintergrund,1)
usw

Der Button button_skip_intro könnte enthalten :

on (mouse)
showinfo (skip Intro;true)

on (click)
{
stopfunction (intro_credits)
setobj (button_skip_intro;0)
setobj (hintergrundbild;10) --> mit Bild drin : bitte warten z.B.
loadroom (startoptions)
}

Wenn Du dann im Raum Startoptions z.B. "neues Spiel" anwählst, lädt der Button beim Anklicken dann
den Raum 1 und setzt den Focus auf den gewünschten Char, also das, was im Tutorial das Startscript dann getan hätte.

Ach ja : Endscene ist für Textszenen gedacht. ( Frageauswahl und Antworten ) Eine Cutscene/Funktion lässt sich mit break() beenden oder, wenn kein Befehl mehr da ist zum Ausführen.
Ausnahme : Wenn ein Mainscript vorhanden ist, gehört da kein break () rein, da sonst das Spiel
einfriert. Das Mainscript ist dazu gedacht, während des gesamten Spiels Funktionen zu überwachen oder auszuführen. Ich selbst habe dort z.B. immer drinstehen : if _keydown (q) -> quit()

Damit wird während des gesamten Spiels die taste q abgefragt. Wir sie irgendwann mal gedrückt, beendet sich das Spiel. Das Mainscript wird 60 mal / sekunde ausgeführt. Stünde dort ein break(), würde es anhalten und warten.Dann sollte man besser Bedingungen formulieren ( if_room...)
Die kann das Script dann ggf übergehen.

Gruss

Manni
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

mirkowelle
PaC-DK Newby
Posts: 9
Joined: 02 Jul 2014, 10:46

Re: Der Anfang und das Ende

Post: # 81349Post mirkowelle
14 Jul 2014, 10:00

Wow, Danke!

:D

Vielen, vielen Dank für die Tips zur Gestaltung eines Intros - da hab ich jetzt mehr bekommen, als ich erwartet hätte und mach mich mal direkt an die Umsetzung.

viele Grüße
N.

Post Reply