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
Der Anfang und das Ende
Re: Der Anfang und das Ende
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.
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.
-
- PaC-DK Newby
- Posts: 9
- Joined: 02 Jul 2014, 10:46
Re: Der Anfang und das Ende
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
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
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
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
Re: Der Anfang und das Ende
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.
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.
-
- PaC-DK Newby
- Posts: 9
- Joined: 02 Jul 2014, 10:46
Re: Der Anfang und das Ende
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^^
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^^
Re: Der Anfang und das Ende
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
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
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de
-
- PaC-DK Newby
- Posts: 9
- Joined: 02 Jul 2014, 10:46
Re: Der Anfang und das Ende
Wow, Danke!
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.
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.