Change var to let and partial drawing for level selector + fix for print functions & charCodeAt

pull/3021/head
Willems Davy 2023-09-13 12:57:28 +02:00
parent 46dd68eb03
commit 1b1226bb8b
1 changed files with 202 additions and 161 deletions

View File

@ -43,7 +43,7 @@ const TITLE = {
const DEBUGMODE = 1; const DEBUGMODE = 1;
const DEBUGMODEINPUT = 0; const DEBUGMODEINPUT = 0;
const DEBUGMODESPEED = 1; const DEBUGMODESPEED = 1;
const DEBUGMODERAMUSE = 0; const DEBUGMODERAMUSE = 1;
const SCREENWIDTH = 176; const SCREENWIDTH = 176;
const SCREENHEIGHT = 176; const SCREENHEIGHT = 176;
@ -137,79 +137,79 @@ const EMPTY = 61;
const FRAMERATE = 15; const FRAMERATE = 15;
var startPos; let startPos;
var menuPos; let menuPos;
var maxLevel; let maxLevel;
var selectedLevel; let selectedLevel;
var boardX; let boardX;
var boardY; let boardY;
var difficulty; let difficulty;
var gameState; let gameState;
var boardWidth; let boardWidth;
var boardHeight; let boardHeight;
var boardSize; let boardSize;
var levelDone; let levelDone;
var titleStep; let titleStep;
var gameMode; let gameMode;
var posAdd; let posAdd;
var mainMenu; let mainMenu;
var option; let option;
var needRedraw; let needRedraw;
var requiresFlip; let requiresFlip;
var selectionX, selectionY; let selectionX, selectionY;
var moves; let moves;
var randomSeedGame; let randomSeedGame;
var level = new Uint8Array(MAXBOARDSIZE); let level = new Uint8Array(MAXBOARDSIZE);
var redrawPartial; let redrawPartial;
var screenOffsetY; let screenOffsetY;
// Cursor // Cursor
const maxCursorFrameCount = (10 * FRAMERATE / 60); const maxCursorFrameCount = (10 * FRAMERATE / 60);
const cursorAnimCount = 2; //blink on & off const cursorAnimCount = 2; //blink on & off
const cursorNumTiles = 16; //for the max 2 cursors shown at once (on help screens) const cursorNumTiles = 16; //for the max 2 cursors shown at once (on help screens)
var cursorFrameCount, cursorFrame, showCursor; let cursorFrameCount, cursorFrame, showCursor;
var spritePos = []; let spritePos = [];
//intro //intro
var frames; let frames;
var titlePosY; let titlePosY;
const frameDelay = 16 * FRAMERATE / 15; const frameDelay = 16 * FRAMERATE / 15;
//savestate //savestate
var levelLocks = new Uint8Array(GMCOUNT * DIFFCOUNT); let levelLocks = new Uint8Array(GMCOUNT * DIFFCOUNT);
var options = new Uint8Array(OPCOUNT); let options = new Uint8Array(OPCOUNT);
//sound //sound
var soundon = 1; let soundon = 1;
//game //game
var paused; let paused;
var wasSoundOn; let wasSoundOn;
var redrawLevelDoneBit; let redrawLevelDoneBit;
var currentTiles = {}; let currentTiles = {};
//general input //general input
var dragleft = false; let dragleft = false;
var dragright = false; let dragright = false;
var dragup = false; let dragup = false;
var dragdown = false; let dragdown = false;
var btna = false; let btna = false;
var btnb = false; let btnb = false;
// -------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------
// random stuff // random stuff
// https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript#72732727 // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript#72732727
// -------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------
var randfunc; let randfunc;
function srand(seed) { function srand(seed) {
var m = Math.pow(2, 35) - 31; let m = Math.pow(2, 35) - 31;
var a = 185852; let a = 185852;
var s = seed % m; let s = seed % m;
randfunc = function() { randfunc = function() {
return (s = s * a % m); return (s = s * a % m);
}; };
@ -283,7 +283,7 @@ function drawCursors(clear) {
if ((showCursor == 0) || (cursorFrame & 1)) // 2nd or to add blink effect, it will skip drawing if bit 1 is set if ((showCursor == 0) || (cursorFrame & 1)) // 2nd or to add blink effect, it will skip drawing if bit 1 is set
return; return;
g.setColor(1, 0, 0); g.setColor(1, 0, 0);
for (var i = 0; i < cursorNumTiles; i++) for (let i = 0; i < cursorNumTiles; i++)
if (spritePos[i][1] < SCREENHEIGHT) if (spritePos[i][1] < SCREENHEIGHT)
g.drawImage(SELECTORTILES, SCREENOFFSETX + spritePos[i][0], screenOffsetY + spritePos[i][1], { g.drawImage(SELECTORTILES, SCREENOFFSETX + spritePos[i][0], screenOffsetY + spritePos[i][1], {
frame: ((clear ? 8 : 0) + (i % 8)) frame: ((clear ? 8 : 0) + (i % 8))
@ -773,29 +773,29 @@ function intro() {
function moveBlockDown(aTile) { function moveBlockDown(aTile) {
var tmp = level[aTile + boardSize - boardWidth]; let tmp = level[aTile + boardSize - boardWidth];
for (var i = boardSize - boardWidth; i != 0; i -= boardWidth) for (let i = boardSize - boardWidth; i != 0; i -= boardWidth)
level[aTile + i] = level[aTile + i - boardWidth]; level[aTile + i] = level[aTile + i - boardWidth];
level[aTile] = tmp; level[aTile] = tmp;
} }
function moveBlockUp(aTile) { function moveBlockUp(aTile) {
var tmp = level[aTile - boardSize + boardWidth]; let tmp = level[aTile - boardSize + boardWidth];
for (var i = boardSize - boardWidth; i != 0; i -= boardWidth) for (let i = boardSize - boardWidth; i != 0; i -= boardWidth)
level[aTile - i] = level[aTile - i + boardWidth]; level[aTile - i] = level[aTile - i + boardWidth];
level[aTile] = tmp; level[aTile] = tmp;
} }
function moveBlockRight(aTile) { function moveBlockRight(aTile) {
var tmp = level[aTile + boardWidth - 1]; let tmp = level[aTile + boardWidth - 1];
for (var i = 0; i < boardWidth - 1; i++) for (let i = 0; i < boardWidth - 1; i++)
level[aTile + boardWidth - 1 - i] = level[aTile + boardWidth - 2 - i]; level[aTile + boardWidth - 1 - i] = level[aTile + boardWidth - 2 - i];
level[aTile] = tmp; level[aTile] = tmp;
} }
function moveBlockLeft(aTile) { function moveBlockLeft(aTile) {
var tmp = level[aTile - boardWidth + 1]; let tmp = level[aTile - boardWidth + 1];
for (var i = 0; i < boardWidth - 1; i++) for (let i = 0; i < boardWidth - 1; i++)
level[aTile - boardWidth + 1 + i] = level[aTile - boardWidth + 2 + i]; level[aTile - boardWidth + 1 + i] = level[aTile - boardWidth + 2 + i];
level[aTile] = tmp; level[aTile] = tmp;
} }
@ -880,7 +880,7 @@ function rotateBlock(aTile) {
} }
function shuffleSlide(aTile) { function shuffleSlide(aTile) {
var rnd = random(3); let rnd = random(3);
switch (rnd) { switch (rnd) {
case 0: case 0:
moveBlockUp((aTile % boardWidth) + boardSize - boardWidth); moveBlockUp((aTile % boardWidth) + boardSize - boardWidth);
@ -898,14 +898,14 @@ function shuffleSlide(aTile) {
} }
function shuffleRotate(aTile) { function shuffleRotate(aTile) {
var rnd = random(3); let rnd = random(3);
for (var i = 0; i < rnd; i++) for (let i = 0; i < rnd; i++)
rotateBlock(aTile); rotateBlock(aTile);
} }
function shuffleLevel() { function shuffleLevel() {
var rnd; let rnd;
var j = 0; let j = 0;
while (j < boardSize) { while (j < boardSize) {
switch (gameMode) { switch (gameMode) {
case GMROTATE: case GMROTATE:
@ -933,10 +933,10 @@ function shuffleLevel() {
} }
function handleConnectPoint(currentPoint, cellStack, cc) { function handleConnectPoint(currentPoint, cellStack, cc) {
var lookUpX = currentPoint % boardWidth; let lookUpX = currentPoint % boardWidth;
var lookUpY = Math.floor(currentPoint / boardWidth); let lookUpY = Math.floor(currentPoint / boardWidth);
var tmp; let tmp;
var tmp2; let tmp2;
if ((lookUpY > 0) && (!(level[currentPoint] & 1))) { if ((lookUpY > 0) && (!(level[currentPoint] & 1))) {
tmp = currentPoint - boardWidth; tmp = currentPoint - boardWidth;
tmp2 = level[tmp]; tmp2 = level[tmp];
@ -1013,9 +1013,9 @@ function handleConnectPoint(currentPoint, cellStack, cc) {
} }
function updateConnected() { function updateConnected() {
var cellStack = []; let cellStack = [];
//reset all tiles to default not filled one //reset all tiles to default not filled one
for (var i = 0; i != boardSize; i++) { for (let i = 0; i != boardSize; i++) {
if (level[i] > 31) { if (level[i] > 31) {
level[i] -= 32; level[i] -= 32;
} else { } else {
@ -1026,7 +1026,7 @@ function updateConnected() {
} }
//start with start tile //start with start tile
var cc = 1; let cc = 1;
cc = handleConnectPoint(startPos, cellStack, cc); cc = handleConnectPoint(startPos, cellStack, cc);
while (--cc > 0) { while (--cc > 0) {
//if tile is bigger then 15 we already handled this one, continue with next one //if tile is bigger then 15 we already handled this one, continue with next one
@ -1044,16 +1044,16 @@ function updateConnected() {
} }
function generateLevel() { function generateLevel() {
var neighbours = new Uint8Array(4); let neighbours = new Uint8Array(4);
var cellStack = new Uint8Array(MAXBOARDSIZE + 1); let cellStack = new Uint8Array(MAXBOARDSIZE + 1);
var cc = 0; let cc = 0;
var currentPoint = 0; let currentPoint = 0;
var visitedRooms = 1; let visitedRooms = 1;
var tmp, tmp2; let tmp, tmp2;
var selectedNeighbour; let selectedNeighbour;
var neighboursFound; let neighboursFound;
var lookUpX, lookUpY; let lookUpX, lookUpY;
var rnd; let rnd;
//generate a lookup table so we don't have to use modulus or divide constantly //generate a lookup table so we don't have to use modulus or divide constantly
//generateLookupTable(boardWidth, boardHeight); //generateLookupTable(boardWidth, boardHeight);
@ -1142,7 +1142,7 @@ function generateLevel() {
//when all board tiles are not below 16, the level is cleared //when all board tiles are not below 16, the level is cleared
//as there are 16 tiles per tilegroup (no water, water, special start with water) //as there are 16 tiles per tilegroup (no water, water, special start with water)
function isLevelDone() { function isLevelDone() {
for (var i = 0; i != boardSize; i++) for (let i = 0; i != boardSize; i++)
if (level[i] < 16) if (level[i] < 16)
return 0; return 0;
@ -1150,7 +1150,7 @@ function isLevelDone() {
} }
function initLevel(aRandomSeed, noLoading) { function initLevel(aRandomSeed, noLoading) {
var startTime = Date().getTime(); let startTime = Date().getTime();
if (!noLoading) { if (!noLoading) {
//g.setColor(0,0,0); //g.setColor(0,0,0);
//g.fillRect(SCREENOFFSETX + ((16 - 10) >> 1) * TILESIZE, screenOffsetY + ((MAXBOARDBGHEIGHT >> 1) - 1) * TILESIZE, SCREENOFFSETX + (((16 - 10) >> 1) * TILESIZE) + (10*TILESIZE), screenOffsetY + (((MAXBOARDBGHEIGHT >> 1) - 1) * TILESIZE) +(3*TILESIZE)); //g.fillRect(SCREENOFFSETX + ((16 - 10) >> 1) * TILESIZE, screenOffsetY + ((MAXBOARDBGHEIGHT >> 1) - 1) * TILESIZE, SCREENOFFSETX + (((16 - 10) >> 1) * TILESIZE) + (10*TILESIZE), screenOffsetY + (((MAXBOARDBGHEIGHT >> 1) - 1) * TILESIZE) +(3*TILESIZE));
@ -1193,7 +1193,7 @@ function initLevel(aRandomSeed, noLoading) {
boardHeight = 8; boardHeight = 8;
break; break;
case DIFFRANDOM: case DIFFRANDOM:
var rnd = random(255); let rnd = random(255);
boardWidth = 5 + (rnd % (MAXBOARDWIDTH - 5 + 1)); //5 is smallest level width from very easy boardWidth = 5 + (rnd % (MAXBOARDWIDTH - 5 + 1)); //5 is smallest level width from very easy
rnd = random(255); rnd = random(255);
boardHeight = 5 + (rnd % (MAXBOARDHEIGHT - 5 + 1)); //5 is smallest level height from very easy boardHeight = 5 + (rnd % (MAXBOARDHEIGHT - 5 + 1)); //5 is smallest level height from very easy
@ -1275,54 +1275,90 @@ function levelsCleared() {
// level select // level select
// -------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------
function drawLevelSelect() { function drawLevelSelect(partial) {
g.clearRect(Bangle.appRect); if(partial > 2)
//LEVEL: {
printMessage(MAXBOARDBGWIDTH, 0, "LEVEL:"); g.clearRect(Bangle.appRect);
//LEVEL:
printMessage(MAXBOARDBGWIDTH, 0, "LEVEL:");
}
if(partial == 2) {
//clear parts of loading text
g.setColor(0,0,0);
g.fillRect(SCREENOFFSETX + (boardX + boardWidth) * TILESIZE, screenOffsetY + 3 * TILESIZE, SCREENOFFSETX - 1 + (boardX + MAXBOARDWIDTH + 5) * TILESIZE, screenOffsetY - 1 + 6 * TILESIZE);
}
//[LEVEL NR] 2 chars //[LEVEL NR] 2 chars
if(partial == 2)
set_bkg_tile_xy(MAXBOARDBGWIDTH + 4, 1, EMPTY);
printNumber(MAXBOARDBGWIDTH + 4, 1, selectedLevel, 2); printNumber(MAXBOARDBGWIDTH + 4, 1, selectedLevel, 2);
//B:BACK if(partial > 2)
printMessage(MAXBOARDBGWIDTH, 6, "BTN:"); {
printMessage(MAXBOARDBGWIDTH, 7, "BACK"); //B:BACK
printMessage(MAXBOARDBGWIDTH, 6, "BTN:");
printMessage(MAXBOARDBGWIDTH, 7, "BACK");
}
//A:PLAY
printMessage(MAXBOARDBGWIDTH, 4, "TOUCH:"); if(partial > 1) {
printMessage(MAXBOARDBGWIDTH, 5, "PLAY"); //A:PLAY
printMessage(MAXBOARDBGWIDTH, 4, "TOUCH:");
printMessage(MAXBOARDBGWIDTH, 5, "PLAY");
}
//Locked & Unlocked keywoard //Locked & Unlocked keywoard
var tmpUnlocked = levelUnlocked(gameMode, difficulty, selectedLevel - 1); let tmpUnlocked = levelUnlocked(gameMode, difficulty, selectedLevel - 1);
if (!tmpUnlocked) if (!tmpUnlocked)
printMessage(MAXBOARDBGWIDTH, 2, "LOCKED"); printMessage(MAXBOARDBGWIDTH, 2, "LOCKED");
else else
printMessage(MAXBOARDBGWIDTH, 2, "OPEN"); printMessage(MAXBOARDBGWIDTH, 2, "OPEN ");
//Draw arrows for vertical / horizontal movement if(partial > 2) {
if (gameMode != GMROTATE) { //Draw arrows for vertical / horizontal movement
for (var x = 0; x != boardWidth; x++) { if (gameMode != GMROTATE) {
set_bkg_tile_xy(boardX + x, boardY - 1, ARROWDOWN); for (let x = 0; x != boardWidth; x++) {
set_bkg_tile_xy(boardX + x, boardY + boardHeight, ARROWUP); set_bkg_tile_xy(boardX + x, boardY - 1, ARROWDOWN);
} set_bkg_tile_xy(boardX + x, boardY + boardHeight, ARROWUP);
}
for (var y = 0; y != boardHeight; y++) { for (let y = 0; y != boardHeight; y++) {
set_bkg_tile_xy(boardX - 1, boardY + y, ARROWRIGHT); set_bkg_tile_xy(boardX - 1, boardY + y, ARROWRIGHT);
set_bkg_tile_xy(boardX + boardWidth, boardY + y, ARROWLEFT); set_bkg_tile_xy(boardX + boardWidth, boardY + y, ARROWLEFT);
}
} }
} }
var i16 = 0; //only draw right and bottom arrows
for (var yy = 0; yy < boardHeight; yy++) { if(partial == 2) {
for (var xx = 0; xx < boardWidth; xx++) { //Draw arrows for vertical / horizontal movement
if (gameMode != GMROTATE) {
for (let x = 0; x != boardWidth; x++) {
set_bkg_tile_xy(boardX + x, boardY + boardHeight, ARROWUP);
}
for (let y = 0; y != boardHeight; y++) {
set_bkg_tile_xy(boardX + boardWidth, boardY + y, ARROWLEFT);
}
}
}
let i16 = 0;
for (let yy = 0; yy < boardHeight; yy++) {
for (let xx = 0; xx < boardWidth; xx++) {
set_bkg_tile_xy(boardX + xx, boardY + yy, level[i16 + xx]); set_bkg_tile_xy(boardX + xx, boardY + yy, level[i16 + xx]);
} }
i16 += boardWidth; i16 += boardWidth;
} }
redrawPartial = 3;
} }
function initLevelSelect() { function initLevelSelect() {
setBlockTilesAsBackground(); setBlockTilesAsBackground();
needRedraw = 1; needRedraw = 1;
redrawPartial = 3;
} }
function levelSelect() { function levelSelect() {
@ -1331,7 +1367,7 @@ function levelSelect() {
gameState -= GSINITDIFF; gameState -= GSINITDIFF;
} }
var tmpUnlocked = levelUnlocked(gameMode, difficulty, selectedLevel - 1); let tmpUnlocked = levelUnlocked(gameMode, difficulty, selectedLevel - 1);
if (btnb) { if (btnb) {
@ -1354,12 +1390,14 @@ function levelSelect() {
randomSeedGame = Date.now(); randomSeedGame = Date.now();
initLevel(randomSeedGame); initLevel(randomSeedGame);
needRedraw = 1; needRedraw = 1;
redrawPartial = 3;
} else { } else {
if (selectedLevel > 1) { if (selectedLevel > 1) {
playMenuSelectSound(); playMenuSelectSound();
selectedLevel--; selectedLevel--;
initLevel(randomSeedGame); initLevel(randomSeedGame);
needRedraw = 1; needRedraw = 1;
redrawPartial = 2;
} }
} }
} }
@ -1370,18 +1408,20 @@ function levelSelect() {
randomSeedGame = Date.now(); randomSeedGame = Date.now();
initLevel(randomSeedGame); initLevel(randomSeedGame);
needRedraw = 1; needRedraw = 1;
redrawPartial = 3;
} else { } else {
if (selectedLevel < maxLevel) { if (selectedLevel < maxLevel) {
playMenuSelectSound(); playMenuSelectSound();
selectedLevel++; selectedLevel++;
initLevel(randomSeedGame); initLevel(randomSeedGame);
needRedraw = 1; needRedraw = 1;
redrawPartial = 2;
} }
} }
} }
if (needRedraw) { if (needRedraw) {
drawLevelSelect(); drawLevelSelect(redrawPartial);
needRedraw = 0; needRedraw = 0;
requiresFlip = 1; requiresFlip = 1;
} }
@ -1398,7 +1438,7 @@ function setCharAt(str, index, chr) {
function formatInteger(valinteger) { function formatInteger(valinteger) {
const maxDigits = 10; const maxDigits = 10;
var array = " "; let array = " ";
const maxCharacters = (maxDigits); const maxCharacters = (maxDigits);
@ -1414,10 +1454,10 @@ function formatInteger(valinteger) {
}; };
} }
var digits = 0; let digits = 0;
var integer = valinteger; let integer = valinteger;
do { do {
var digit = integer % 10; let digit = integer % 10;
integer = Math.floor(integer / 10); integer = Math.floor(integer / 10);
array = setCharAt(array, lastIndex - digits, digit.toString()); array = setCharAt(array, lastIndex - digits, digit.toString());
@ -1435,11 +1475,11 @@ function formatInteger(valinteger) {
function printNumber(ax, ay, aNumber, maxDigits) { function printNumber(ax, ay, aNumber, maxDigits) {
const buffSize = 10; const buffSize = 10;
var ret = formatInteger(aNumber); let ret = formatInteger(aNumber);
var maxFor = ret.digits; let maxFor = ret.digits;
if (ret.digits > maxDigits) if (ret.digits > maxDigits)
maxFor = maxDigits; maxFor = maxDigits;
for (var c = 0; c < maxFor; c++) { for (let c = 0; c < maxFor; c++) {
if (ret.string.charAt(buffSize - ret.digits + c) == '') if (ret.string.charAt(buffSize - ret.digits + c) == '')
return; return;
set_bkg_tile_xy(ax + (maxDigits - ret.digits) + c, ay, ret.string.charCodeAt(buffSize - ret.digits + c) + 32); set_bkg_tile_xy(ax + (maxDigits - ret.digits) + c, ay, ret.string.charCodeAt(buffSize - ret.digits + c) + 32);
@ -1449,7 +1489,7 @@ function printNumber(ax, ay, aNumber, maxDigits) {
function printDebug(ax, ay, amsg) { function printDebug(ax, ay, amsg) {
if (DEBUGMODE) { if (DEBUGMODE) {
//rememvber current tiles //rememvber current tiles
var tiles = get_bkg_data(); let tiles = get_bkg_data();
setBlockTilesAsBackground(); setBlockTilesAsBackground();
g.clearRect(Bangle.appRect); g.clearRect(Bangle.appRect);
printMessage(ax, ay, amsg); printMessage(ax, ay, amsg);
@ -1463,16 +1503,17 @@ function printDebug(ax, ay, amsg) {
//print a message on the title screen on ax,ay, the tileset from titlescreen contains an alphabet //print a message on the title screen on ax,ay, the tileset from titlescreen contains an alphabet
function printMessage(ax, ay, amsg) { function printMessage(ax, ay, amsg) {
var index = 0; let index = 0;
var p = 0; let p = 0;
var aCode = 'A'.charCodeAt(0); let aCode = 'A'.charCodeAt(0);
var zCode = 'Z'.charCodeAt(0); let zCode = 'Z'.charCodeAt(0);
var zeroCode = '0'.charCodeAt(0); let zeroCode = '0'.charCodeAt(0);
var nineCode = '9'.charCodeAt(0); let nineCode = '9'.charCodeAt(0);
while (p < amsg.length) { while (p < amsg.length) {
var fCharCode = amsg.charCodeAt(p++); let fCharCode = amsg.charCodeAt(p++);
var tile = 61; let tile = 61;
switch (fCharCode) { switch (fCharCode) {
case -1:
case 0: case 0:
return; return;
@ -1548,14 +1589,14 @@ function printMessage(ax, ay, amsg) {
//print a message on the CongratsScreen on ax,ay, the tileset from Congrats Screen contains an alphabet in another font //print a message on the CongratsScreen on ax,ay, the tileset from Congrats Screen contains an alphabet in another font
function printCongratsScreen(ax, ay, amsg) { function printCongratsScreen(ax, ay, amsg) {
// based on input form @Pharap // based on input form @Pharap
var index = 0; let index = 0;
var p = 0; let p = 0;
var aCode = 'A'.charCodeAt(0); let aCode = 'A'.charCodeAt(0);
var zCode = 'Z'.charCodeAt(0); let zCode = 'Z'.charCodeAt(0);
while (p < amsg.length) { while (p < amsg.length) {
var fCharCode = amsg.charCodeAt(p++); let fCharCode = amsg.charCodeAt(p++);
var tile = 26; let tile = 26;
if (fCharCode == 0) if ((fCharCode == 0) || (fCharCode == -1))
return; return;
if ((fCharCode >= aCode) && (fCharCode <= zCode)) if ((fCharCode >= aCode) && (fCharCode <= zCode))
tile = fCharCode - aCode; tile = fCharCode - aCode;
@ -1569,8 +1610,8 @@ function printCongratsScreen(ax, ay, amsg) {
// -------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------
function validateSaveState() { function validateSaveState() {
for (var j = 0; j < GMCOUNT; j++) { for (let j = 0; j < GMCOUNT; j++) {
for (var i = 0; i < DIFFCOUNT; i++) { for (let i = 0; i < DIFFCOUNT; i++) {
if ((levelLocks[(j * DIFFCOUNT) + i] == 0) || (levelLocks[(j * DIFFCOUNT) + i] > LEVELCOUNT)) if ((levelLocks[(j * DIFFCOUNT) + i] == 0) || (levelLocks[(j * DIFFCOUNT) + i] > LEVELCOUNT))
return 0; return 0;
} }
@ -1587,8 +1628,8 @@ function validateSaveState() {
function initSaveState() { function initSaveState() {
//read from file //read from file
var file = require("Storage").open("waternet.data.dat", "r"); let file = require("Storage").open("waternet.data.dat", "r");
var index = 0; let index = 0;
for (index = 0; index < GMCOUNT * DIFFCOUNT; index++) { for (index = 0; index < GMCOUNT * DIFFCOUNT; index++) {
tmp = file.readLine(); tmp = file.readLine();
if (tmp !== undefined) if (tmp !== undefined)
@ -1602,8 +1643,8 @@ function initSaveState() {
} }
//then //then
if (!validateSaveState()) { if (!validateSaveState()) {
for (var j = 0; j < GMCOUNT; j++) for (let j = 0; j < GMCOUNT; j++)
for (var i = 0; i < DIFFCOUNT; i++) for (let i = 0; i < DIFFCOUNT; i++)
levelLocks[(j * DIFFCOUNT) + i] = 1; //1st level unlocked levelLocks[(j * DIFFCOUNT) + i] = 1; //1st level unlocked
options[OPSOUND] = 1; options[OPSOUND] = 1;
options[OPWIDGETS] = 0; options[OPWIDGETS] = 0;
@ -1613,8 +1654,8 @@ function initSaveState() {
function saveSaveState() { function saveSaveState() {
//save to file //save to file
var file = require("Storage").open("waternet.data.dat", "w"); let file = require("Storage").open("waternet.data.dat", "w");
var index; let index;
for (index = 0; index < GMCOUNT * DIFFCOUNT; index++) for (index = 0; index < GMCOUNT * DIFFCOUNT; index++)
file.write(levelLocks[index].toString() + "\n"); file.write(levelLocks[index].toString() + "\n");
for (index = 0; index < OPCOUNT; index++) for (index = 0; index < OPCOUNT; index++)
@ -2062,12 +2103,12 @@ function drawGame(partial) {
//Draw arrows for vertical / horizontal movement //Draw arrows for vertical / horizontal movement
if (gameMode != GMROTATE) { if (gameMode != GMROTATE) {
for (var x = 0; x != boardWidth; x++) { for (let x = 0; x != boardWidth; x++) {
set_bkg_tile_xy(boardX + x, boardY - 1, ARROWDOWN); set_bkg_tile_xy(boardX + x, boardY - 1, ARROWDOWN);
set_bkg_tile_xy(boardX + x, boardY + boardHeight, ARROWUP); set_bkg_tile_xy(boardX + x, boardY + boardHeight, ARROWUP);
} }
for (var y = 0; y != boardHeight; y++) { for (let y = 0; y != boardHeight; y++) {
set_bkg_tile_xy(boardX - 1, boardY + y, ARROWRIGHT); set_bkg_tile_xy(boardX - 1, boardY + y, ARROWRIGHT);
set_bkg_tile_xy(boardX + boardWidth, boardY + y, ARROWLEFT); set_bkg_tile_xy(boardX + boardWidth, boardY + y, ARROWLEFT);
} }
@ -2075,9 +2116,9 @@ function drawGame(partial) {
} }
//complete level //complete level
var i16 = 0; let i16 = 0;
var yy; let yy;
var xx; let xx;
if (partial > 1) { if (partial > 1) {
for (yy = 0; yy < boardHeight; yy++) { for (yy = 0; yy < boardHeight; yy++) {
for (xx = 0; xx < boardWidth; xx++) { for (xx = 0; xx < boardWidth; xx++) {
@ -2086,8 +2127,8 @@ function drawGame(partial) {
i16 += boardWidth; i16 += boardWidth;
} }
} }
redrawPartial = 3;
} }
redrawPartial = 3;
} }
function initGame() { function initGame() {
@ -2292,8 +2333,8 @@ function game() {
if (levelDone) { if (levelDone) {
//update level one last time so we are at final state //update level one last time so we are at final state
//as it won't be updated anymore as long as level done is displayed //as it won't be updated anymore as long as level done is displayed
//1 forces level to be drawn (only) one last time the other call uses levelDone //2 forces level to be drawn (only) one last time the other call uses levelDone
drawGame(1); drawGame(2);
//hide cursor it's only sprite we use //hide cursor it's only sprite we use
hideCursors(); hideCursors();
//g.setColor(0,0,0); //g.setColor(0,0,0);
@ -2405,14 +2446,14 @@ function setup() {
function loop() { function loop() {
//soundTimer(); //soundTimer();
var startTime = Date().getTime(); let startTime = Date().getTime();
g.reset(); g.reset();
g.setColor(1, 1, 1); g.setColor(1, 1, 1);
g.setBgColor(0, 0, 0); g.setBgColor(0, 0, 0);
//gamestate handling //gamestate handling
var prevGameState = gameState; let prevGameState = gameState;
switch (gameState) { switch (gameState) {
case GSINITTITLE: case GSINITTITLE:
@ -2481,10 +2522,10 @@ function loop() {
if (requiresFlip) { if (requiresFlip) {
if (isInputRectsOnSaveState()) { if (isInputRectsOnSaveState()) {
const offsetvalue = 0.20; const offsetvalue = 0.20;
var x1 = SCREENWIDTH * offsetvalue; let x1 = SCREENWIDTH * offsetvalue;
var x2 = SCREENWIDTH - SCREENWIDTH * offsetvalue; let x2 = SCREENWIDTH - SCREENWIDTH * offsetvalue;
var y1 = Bangle.appRect.y + SCREENHEIGHT * offsetvalue; let y1 = Bangle.appRect.y + SCREENHEIGHT * offsetvalue;
var y2 = SCREENHEIGHT - SCREENHEIGHT * offsetvalue; let y2 = SCREENHEIGHT - SCREENHEIGHT * offsetvalue;
g.setColor(1, 0, 1); g.setColor(1, 0, 1);
//up //up
g.drawRect(0, Bangle.appRect.y, SCREENWIDTH - 1, y1); g.drawRect(0, Bangle.appRect.y, SCREENWIDTH - 1, y1);
@ -2508,8 +2549,8 @@ function loop() {
debugLog("loop done"); debugLog("loop done");
if (DEBUGMODERAMUSE) { if (DEBUGMODERAMUSE) {
var memTmp = process.memory(false); let memTmp = process.memory(false);
var used = memTmp.usage - memStart.usage; let used = memTmp.usage - memStart.usage;
debugLog("Udiff:" + used.toString() + " used:" + memTmp.usage.toString() + " free:" + memTmp.free.toString() + " total:" + memTmp.total.toString()); debugLog("Udiff:" + used.toString() + " used:" + memTmp.usage.toString() + " free:" + memTmp.free.toString() + " total:" + memTmp.total.toString());
} }
} }
@ -2521,10 +2562,10 @@ function debugLog(val) {
function handleTouch(button, data) { function handleTouch(button, data) {
const offsetvalue = 0.20; const offsetvalue = 0.20;
var x1 = SCREENWIDTH * offsetvalue; let x1 = SCREENWIDTH * offsetvalue;
var x2 = SCREENWIDTH - SCREENWIDTH * offsetvalue; let x2 = SCREENWIDTH - SCREENWIDTH * offsetvalue;
var y1 = Bangle.appRect.y + SCREENHEIGHT * offsetvalue; let y1 = Bangle.appRect.y + SCREENHEIGHT * offsetvalue;
var y2 = SCREENHEIGHT - SCREENHEIGHT * offsetvalue; let y2 = SCREENHEIGHT - SCREENHEIGHT * offsetvalue;
dragleft = data.x < x1; dragleft = data.x < x1;
dragright = data.x > x2; dragright = data.x > x2;
dragup = data.y < y1; dragup = data.y < y1;
@ -2563,13 +2604,13 @@ function btnPressed() {
debugLog("btnPressed done"); debugLog("btnPressed done");
} }
var memStart; let memStart;
if (DEBUGMODERAMUSE) if (DEBUGMODERAMUSE)
memStart = process.memory(true); memStart = process.memory(true);
//initialize spritepos arrays //initialize spritepos arrays
for (var i = 0; i < cursorNumTiles; i++) for (let i = 0; i < cursorNumTiles; i++)
spritePos.push(new Int8Array(2)); spritePos.push(new Int8Array(2));
//clear one time entire screen //clear one time entire screen
@ -2578,7 +2619,7 @@ g.clear();
//otherwise only as long as redraw is needed after input was detected //otherwise only as long as redraw is needed after input was detected
setup(); setup();
//for intro only //for intro only
var intervalTimer = setInterval(loop, 66); // 15 fps let intervalTimer = setInterval(loop, 66); // 15 fps
//for handling input //for handling input
Bangle.on('touch', handleTouch); Bangle.on('touch', handleTouch);
setWatch(btnPressed, BTN, { setWatch(btnPressed, BTN, {