mirror of https://github.com/espruino/BangleApps
Change var to let and partial drawing for level selector + fix for print functions & charCodeAt
parent
46dd68eb03
commit
1b1226bb8b
|
@ -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, {
|
||||||
|
|
Loading…
Reference in New Issue