From 005d7bf4fdf016b5ff9c4a88cc7f906f70220e6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net> Date: Tue, 9 Mar 2021 01:44:20 -0500 Subject: [PATCH] Fixes required for RTWall - Have getsvar() join arguments with spaces for strings - Fix fg/bg in @readstring/@readnum - Special-case NIL in readstring (this is where it's documented) --- xtrn/lord2/l2lib.js | 14 ++++++++++---- xtrn/lord2/lord2.js | 17 ++++++++++------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/xtrn/lord2/l2lib.js b/xtrn/lord2/l2lib.js index 884cfac279..cafc2ef826 100644 --- a/xtrn/lord2/l2lib.js +++ b/xtrn/lord2/l2lib.js @@ -1282,13 +1282,19 @@ function getvar(name, replacing) { return ret; } -function getsvar(name, vname) +/* + * Returns a string if variable name is a string + */ +function getsvar(args, offset, vname) { - var v = getvar(name); + var v = getvar(args[offset]); var fv = getvar(vname); - if (typeof fv === 'string' && typeof v !== 'string') - return replace_vars(name); + if (typeof fv === 'string') { + if (typeof v !== 'string') + return replace_vars(args.splice(offset - 1).join(' ')); + return replace_vars(args.slice(offset).join(' ')); + } return v; } diff --git a/xtrn/lord2/lord2.js b/xtrn/lord2/lord2.js index 074fb78d92..9491af46c9 100644 --- a/xtrn/lord2/lord2.js +++ b/xtrn/lord2/lord2.js @@ -436,7 +436,7 @@ function insane_run_ref(sec, fname, refret) if (isNaN(bg)) bg = 1; else if (args.length > 3) { - fg = parseInt(getvar(getvar(args[2])), 10); + fg = parseInt(getvar(getvar(args[3])), 10); if (isNaN(fg)) fg = 15; } @@ -482,17 +482,20 @@ function insane_run_ref(sec, fname, refret) if (args.length < 1) throw('@do readstring requires at least one argument'); if (args.length > 1) { - val = getvar(args[1]); + // Note that this seems to be the only place NIL is actually documented *sigh* + val = replace_vars(args[1]); + if (val.toLowerCase() === 'nil') + val = ''; if (args.length > 2) { svar = args[2]; if (args.length > 3) { // What happens in invalid bg/fg? // See ODINKEEP.REF:1818... they're ignored! - bg = parseInt(getvar(getvar(args[2])), 10); + bg = parseInt(getvar(getvar(args[3])), 10); if (isNaN(bg)) bg = 1; else if (args.length > 4) { - fg = parseInt(getvar(getvar(args[2])), 10); + fg = parseInt(getvar(getvar(args[4])), 10); if (isNaN(fg)) fg = 15; } @@ -1153,7 +1156,7 @@ function insane_run_ref(sec, fname, refret) setvar(args[0], random(clamp_integer(getvar(args[3]), 's32')) + clamp_integer(getvar(args[4]), 's32')); } else - setvar(args[0], getsvar(args[2], args[0])); + setvar(args[0], getsvar(args, 2, args[0])); return; } if (args.length > 2 && args[1] == '-') { @@ -1165,7 +1168,7 @@ function insane_run_ref(sec, fname, refret) return; } if (args.length > 2 && args[1].toLowerCase() === 'add') { - setvar(args[0], getvar(args[0]) + getsvar(args[2], args[0]).toString()); + setvar(args[0], getvar(args[0]) + getsvar(args, 2, args[0]).toString()); return; } if (args.length > 2 && args[1] == '/') { @@ -1384,7 +1387,7 @@ function insane_run_ref(sec, fname, refret) tmp = getvar(args[++tmp2]).length; } else - tmp = getsvar(args[tmp2], args[0]); + tmp = getsvar(args, tmp2, args[0]); tmp2++; if (getvar(args[0]).toString().toLowerCase() === tmp.toString().toLowerCase()) handlers.do(args.slice(tmp2 + 1)); -- GitLab