diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2013-04-13 14:15:19 -0700 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2013-04-13 14:15:19 -0700 |
commit | 1cff866ff559eb517ec2c684608078aacab0e4d4 (patch) | |
tree | 7f9e37377d5c2a7d6ed2cf79418c3637b52537df /src | |
parent | 9b3348a7c707558243caef4b6f4ca08075c36adb (diff) | |
download | tmwa-1cff866ff559eb517ec2c684608078aacab0e4d4.tar.gz tmwa-1cff866ff559eb517ec2c684608078aacab0e4d4.tar.bz2 tmwa-1cff866ff559eb517ec2c684608078aacab0e4d4.tar.xz tmwa-1cff866ff559eb517ec2c684608078aacab0e4d4.zip |
Fix error in "return" script command
Diffstat (limited to 'src')
-rw-r--r-- | src/map/script.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/map/script.cpp b/src/map/script.cpp index 1a954da..151175b 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -1396,6 +1396,7 @@ void builtin_callfunc(ScriptState *st) if ((scr = userfunc_db.get(str))) { int j = 0; + assert (st->start + 3 == st->end); #if 0 for (int i = st->start + 3; i < st->end; i++, j++) push_copy(st->stack, i); @@ -1427,6 +1428,7 @@ void builtin_callsub(ScriptState *st) { int pos_ = conv_num(st, &(st->stack->stack_data[st->start + 2])); int j = 0; + assert (st->start + 3 == st->end); #if 0 for (int i = st->start + 3; i < st->end; i++, j++) push_copy(st->stack, i); @@ -4688,11 +4690,12 @@ void run_func(ScriptState *st) st->state = END; return; } - st->script = conv_script(st, &(st->stack->stack_data[st->defsp - 1])); // スクリプトを復元 - st->pos = conv_num(st, &(st->stack->stack_data[st->defsp - 2])); // スクリプト位置の復元 - st->defsp = conv_num(st, &(st->stack->stack_data[st->defsp - 3])); // 基準スタックポインタを復元 + assert (olddefsp == st->defsp); // pretty sure it hasn't changed yet + st->script = conv_script(st, &(st->stack->stack_data[olddefsp - 1])); // スクリプトを復元 + st->pos = conv_num(st, &(st->stack->stack_data[olddefsp - 2])); // スクリプト位置の復元 + st->defsp = conv_num(st, &(st->stack->stack_data[olddefsp - 3])); // 基準スタックポインタを復元 // Number of arguments. - i = conv_num(st, &(st->stack->stack_data[st->defsp - 4])); // 引数の数所得 + i = conv_num(st, &(st->stack->stack_data[olddefsp - 4])); // 引数の数所得 assert (i == 0); pop_stack(st->stack, olddefsp - 4 - i, olddefsp); // 要らなくなったスタック(引数と復帰用データ)削除 |