Add Call/Return script commands
This commit is contained in:
parent
15ae3dafdb
commit
3af5ced1cd
|
|
@ -26,7 +26,10 @@ my %script_commands = (
|
||||||
'Define' => {'sub' => \&DefGameVar, 'wait' => 0},
|
'Define' => {'sub' => \&DefGameVar, 'wait' => 0},
|
||||||
'ExitGame' => {'sub' => \&PerlRPG::Game::ExitGame, 'wait' => 1},
|
'ExitGame' => {'sub' => \&PerlRPG::Game::ExitGame, 'wait' => 1},
|
||||||
|
|
||||||
'Jump' => {'sub' => \&PerlRPG::Script::RunScript, 'wait' => 0},
|
'Jump' => {'sub' => \&RunScript, 'wait' => 0},
|
||||||
|
'Call' => {'sub' => \&Call, 'wait' => 0},
|
||||||
|
'Return' => {'sub' => \&Return, 'wait' => 0},
|
||||||
|
|
||||||
|
|
||||||
'Show' => {'sub' => \&PerlRPG::Drawing::ShowSprite, 'wait' => 0},
|
'Show' => {'sub' => \&PerlRPG::Drawing::ShowSprite, 'wait' => 0},
|
||||||
'Hide' => {'sub' => \&PerlRPG::Drawing::HideSprite, 'wait' => 0},
|
'Hide' => {'sub' => \&PerlRPG::Drawing::HideSprite, 'wait' => 0},
|
||||||
|
|
@ -41,9 +44,29 @@ my %script_commands = (
|
||||||
|
|
||||||
my %sayers = ();
|
my %sayers = ();
|
||||||
my $lastsayer=undef;
|
my $lastsayer=undef;
|
||||||
|
my @CallStack;
|
||||||
|
|
||||||
%game_vars = ();
|
%game_vars = ();
|
||||||
|
|
||||||
|
sub Call {
|
||||||
|
my($label)=@_;
|
||||||
|
my @pos = ($current_file, $current_line+1);
|
||||||
|
if(RunScript($label)) {
|
||||||
|
push @CallStack, \@pos;
|
||||||
|
} else {
|
||||||
|
LogData(ERROR, "%s Unable to call '$label': Undefined label.", GetScriptPosition());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub Return {
|
||||||
|
if(!@CallStack) {
|
||||||
|
LogData(ERROR, "%s Call stack underrun.", GetScriptPosition());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
my $ref = pop(@CallStack);
|
||||||
|
($current_file, $current_line) = @$ref;
|
||||||
|
}
|
||||||
|
|
||||||
sub GetGameVar {
|
sub GetGameVar {
|
||||||
my $key = shift(@_);
|
my $key = shift(@_);
|
||||||
if(exists $game_vars{$key}) {
|
if(exists $game_vars{$key}) {
|
||||||
|
|
@ -112,9 +135,10 @@ sub RunScript {
|
||||||
if(exists $labels{$label}) {
|
if(exists $labels{$label}) {
|
||||||
$current_file = $labels{$label}{'File'};
|
$current_file = $labels{$label}{'File'};
|
||||||
$current_line = $labels{$label}{'Line'};
|
$current_line = $labels{$label}{'Line'};
|
||||||
LogData(DEBUG, "RunScript($label) moving to $current_file:$current_line");
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
LogData(ERROR, "RunScript($label) unknown label");
|
LogData(ERROR, "RunScript($label) unknown label");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ drawroom:
|
||||||
SetBackground 0 0 0 255
|
SetBackground 0 0 0 255
|
||||||
SetAssetOption spritesheet.png Animated
|
SetAssetOption spritesheet.png Animated
|
||||||
AddSayer h "Hermione" aka01.png 255 0 0 255
|
AddSayer h "Hermione" aka01.png 255 0 0 255
|
||||||
AddSayer h2 "Hermione2" aka05.png 32 32 255 255 left flip
|
#AddSayer h2 "Hermione2" aka05.png 32 32 255 255 left flip
|
||||||
|
|
||||||
SpeechBorderSize = 3
|
SpeechBorderSize = 3
|
||||||
SpeechBorderColor = "128 128 128 255"
|
SpeechBorderColor = "128 128 128 255"
|
||||||
|
|
@ -21,19 +21,22 @@ drawroom:
|
||||||
Show candler candle.png 400 100 11 flip
|
Show candler candle.png 400 100 11 flip
|
||||||
Show candlel candle.png 240 100 11
|
Show candlel candle.png 240 100 11
|
||||||
|
|
||||||
Show fireplacea fireplace_fire.vs 575 147 12
|
#Show fireplacea fireplace_fire.vs 575 147 12
|
||||||
Show candlera fire.vs 400 95 12 flip
|
#Show candlera fire.vs 400 95 12 flip
|
||||||
Show candlela fire.vs 240 95 12
|
#Show candlela fire.vs 240 95 12
|
||||||
|
|
||||||
|
|
||||||
Show desk 11_genie_00.png 230 220 13
|
Show desk 11_genie_00.png 230 220 13
|
||||||
Show hermione spritesheet.png 450 310 14 reverse ticks=4
|
#Show hermione spritesheet.png 450 310 14 reverse ticks=4
|
||||||
|
|
||||||
convo:
|
convo:
|
||||||
Wait
|
Call subtest
|
||||||
h "Continue..."
|
|
||||||
Wait
|
|
||||||
h2 "Continue2..."
|
|
||||||
|
|
||||||
RecompileScripts drawroom
|
RecompileScripts drawroom
|
||||||
Jump convo
|
Jump convo
|
||||||
|
|
||||||
|
subtest:
|
||||||
|
Define TestVar 1
|
||||||
|
h "Loop [TestVar]..."
|
||||||
|
TestVar = TestVar + 1
|
||||||
|
Return
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue