From 85521706dd7a6e3a3a8d4e945936a987bceb8a11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net> Date: Sat, 27 Feb 2021 22:59:56 -0500 Subject: [PATCH] More CNW fixes/cleanups - Trim bar to 76 characters (triggered by MORTAL.REF) - If the player initial map can't be loaded, move to 0,0,0 - draw_map() can't auto-load the players map (ORACLE2.REF loads a map without the player on it) - When we draw a new map, set last_draw to undefined - If you move off the edge of a map into an undefined map, simply don't move (triggered by GLENDALE.REF) - Move play on map *after* a REF is ran (and you're potentially moved back) --- xtrn/lord2/lord2.js | 48 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/xtrn/lord2/lord2.js b/xtrn/lord2/lord2.js index 7a3f4e0b1e..f15104af69 100644 --- a/xtrn/lord2/lord2.js +++ b/xtrn/lord2/lord2.js @@ -1110,6 +1110,7 @@ function sclrscr() function clearrows(start, end) { var row; + if (end === undefined) end = start; @@ -1347,6 +1348,16 @@ function update_bar(str, msg, timeout) var dl = displen(str); var l; + // Trim to 76 spaces to fit... required by @#clearBar in MORTAL.REF + if (dl > 76) { + // Keep shortening the string until it's max width is short enough. + // This ensures we keep as many codes as possible. + while (dl > 76) { + str = str.slice(0, -1); + dl = displen(str); + } + } + if (msg && str.indexOf(':') > -1) { if (!lfile.open('ab')) throw new Error('Unable to open '+lfile.name); @@ -1647,7 +1658,6 @@ function run_ref(sec, fname) throw new Error('Invalid move at '+fname+':'+line); }, 'moveback':function(args) { - erase_player(); player.x = player.lastx; player.y = player.lasty; }, @@ -3000,6 +3010,13 @@ function load_player() player = new RecordFileRecord(pfile); player.reInit(); player.realname = dk.user.full_name; + map = load_map(player.map); + // Force move to home on invalid map (can be triggered by a crash in the glen which no longer happens. :) + if (map === null) { + player.map = 0; + player.x = 0; + player.y = 0; + } player.lastx = player.x; player.lasty = player.y; } @@ -3467,12 +3484,14 @@ function draw_map() { var mi; var s; - if (map === undefined || map.Record !== world.mapdatindex[player.map - 1] - 1) + // We can't auto-load the players map here because of ORACLE2.REF in CNW + if (map === null || map === undefined) map = load_map(player.map); dk.console.attr.value = 7; // No need to clear screen since we're overwriting the whole thing. // TODO: If dk.console had a function to clear to end of screen, that would help. + last_draw = undefined; for (y = 0; y < 20; y++) { for (x = 0; x < 80; x++) { off = getoffset(x,y); @@ -3532,6 +3551,7 @@ function move_player(xoff, yoff) { var special = false; var newmap = false; var perday; + var start = {x:player.x, y:player.y, map:player.map}; if (getvar('`v05') > 0) { if (player.p[10] <= 0) { @@ -3563,17 +3583,25 @@ function move_player(xoff, yoff) { if (world.hideonmap[player.map] === 0) player.lastmap = player.map; map = load_map(player.map); - draw_map(); - update(); + if (map === null) { + // Handles "start on warp" stupidity in CNW glendale.ref:enterglen + // You can move down from the map at block 823 into an empty block. + player.x = start.x; + player.y = start.y; + player.map = start.map; + map = load_map(player.map); + } + else { + draw_map(); + update(); + } } else { player.lastx = player.x; player.lasty = player.y; if (map.mapinfo[getoffset(x-1, y-1)].terrain === 1) { - erase_player(); player.x = x; player.y = y; - update(true); moved = true; } } @@ -3595,18 +3623,18 @@ function move_player(xoff, yoff) { } player.x = s.warptox; player.y = s.warptoy; - update(); } else if (s.reffile !== '' && s.refsection !== '') { run_ref(s.refsection, s.reffile); player.battle = 0; - update_update(); } } }); - if (moved && getvar('`v05') > 0) { + erase_player(); + update(true); + perday = getvar('`v05'); + if (moved && perday > 0) { player.p[10]--; - perday = getvar('`v05'); if (perday > 0) { if (time_warnings.indexOf(player.p[10]) !== -1) tfile_append(get_timestr()); -- GitLab