more images (dead miner, winning miner), fix bug with beard growth
@ -16,7 +16,7 @@ maps.js: FORCE
|
|||||||
SPRITES=earth.png empty.png lambda.png lift.png openlift.png miner.png rock.png bricks.png
|
SPRITES=earth.png empty.png lambda.png lift.png openlift.png miner.png rock.png bricks.png
|
||||||
SPRITES+=$(wildcard trampoline?.png)
|
SPRITES+=$(wildcard trampoline?.png)
|
||||||
SPRITES+=$(wildcard target?.png)
|
SPRITES+=$(wildcard target?.png)
|
||||||
SPRITES+=beard.png razor.png
|
SPRITES+=beard.png razor.png deadminer.png minerlift.png
|
||||||
|
|
||||||
sprites.png: $(SPRITES)
|
sprites.png: $(SPRITES)
|
||||||
convert -background "#000000" -append $(SPRITES) tmp_sprites.png
|
convert -background "#000000" -append $(SPRITES) tmp_sprites.png
|
||||||
|
BIN
js/deadminer.png
Normal file
After Width: | Height: | Size: 244 B |
90
js/gui.js
@ -1,4 +1,4 @@
|
|||||||
var mineGui_mine = false, mineGui_curmap, mineGui_curndx, mineGui_moves = "";
|
var mineGui_mine = false, mineGui_curmap, mineGui_curndx, mineGui_moves = "", mineGui_mapname = '';
|
||||||
var mineGui_movesBackup = [];
|
var mineGui_movesBackup = [];
|
||||||
var mineGui_customNdx = 1;
|
var mineGui_customNdx = 1;
|
||||||
var mineGui_canvas = true;
|
var mineGui_canvas = true;
|
||||||
@ -20,6 +20,34 @@ var mineGui_spriteOffset = {
|
|||||||
'W':26,
|
'W':26,
|
||||||
'!':27
|
'!':27
|
||||||
};
|
};
|
||||||
|
var mineGui_spriteOffset_Lost = {
|
||||||
|
'R': 28,
|
||||||
|
'#': 7,
|
||||||
|
'*': 6,
|
||||||
|
'\\': 2,
|
||||||
|
'L': 3,
|
||||||
|
'O': 4,
|
||||||
|
'.': 0,
|
||||||
|
' ': 1,
|
||||||
|
'A': 8,'B': 9,'C':10,'D':11,'E':12,'F':13,'G':14,'H':15,'I':16,
|
||||||
|
'1':17,'2':18,'3':19,'4':20,'5':21,'6':22,'7':23,'8':24,'9':25,
|
||||||
|
'W':26,
|
||||||
|
'!':27
|
||||||
|
};
|
||||||
|
var mineGui_spriteOffset_Won = {
|
||||||
|
'R': 29,
|
||||||
|
'#': 7,
|
||||||
|
'*': 6,
|
||||||
|
'\\': 2,
|
||||||
|
'L': 3,
|
||||||
|
'O': 29,
|
||||||
|
'.': 0,
|
||||||
|
' ': 1,
|
||||||
|
'A': 8,'B': 9,'C':10,'D':11,'E':12,'F':13,'G':14,'H':15,'I':16,
|
||||||
|
'1':17,'2':18,'3':19,'4':20,'5':21,'6':22,'7':23,'8':24,'9':25,
|
||||||
|
'W':26,
|
||||||
|
'!':27
|
||||||
|
};
|
||||||
|
|
||||||
var mineGui_images = {};
|
var mineGui_images = {};
|
||||||
var mineGui_imagesNeed = 0;
|
var mineGui_imagesNeed = 0;
|
||||||
@ -46,7 +74,7 @@ function mineGui_start() {
|
|||||||
document.getElementById("mineGui_addData").onclick = mineGui_addCustomMap;
|
document.getElementById("mineGui_addData").onclick = mineGui_addCustomMap;
|
||||||
selMap.onchange = function() {
|
selMap.onchange = function() {
|
||||||
var k = selMap.options[selMap.selectedIndex].text;
|
var k = selMap.options[selMap.selectedIndex].text;
|
||||||
mineGui_setMap(mineMaps[k], selMap.selectedIndex);
|
mineGui_setMap(k, selMap.selectedIndex);
|
||||||
selMap.blur();
|
selMap.blur();
|
||||||
};
|
};
|
||||||
var inpValidate = function() {
|
var inpValidate = function() {
|
||||||
@ -129,16 +157,30 @@ function mineGui_start() {
|
|||||||
mineGui_loadImg(k, mineGui_imgSources[k]);
|
mineGui_loadImg(k, mineGui_imgSources[k]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var fragment = window.location.hash.slice(1).split(';');
|
||||||
|
var searchMap = fragment[0];
|
||||||
|
var loadMoves = '';
|
||||||
|
var selectIndex = 0;
|
||||||
for (k in mineMaps) {
|
for (k in mineMaps) {
|
||||||
if (mineMaps.hasOwnProperty(k)) {
|
if (mineMaps.hasOwnProperty(k)) {
|
||||||
var entry = document.createElement("option");
|
var entry = document.createElement("option");
|
||||||
entry.textContent = k;
|
entry.textContent = k;
|
||||||
|
if (k === searchMap) {
|
||||||
|
// console.log("selected map " + k);
|
||||||
|
selectIndex = selMap.options.length;
|
||||||
|
if (fragment.length > 1) loadMoves = fragment[1];
|
||||||
|
}
|
||||||
selMap.appendChild(entry);
|
selMap.appendChild(entry);
|
||||||
}
|
}
|
||||||
//entry.add
|
//entry.add
|
||||||
}
|
}
|
||||||
selMap.selectedIndex = 0;
|
selMap.selectedIndex = selectIndex;
|
||||||
selMap.onchange();
|
selMap.onchange();
|
||||||
|
if (loadMoves !== '') {
|
||||||
|
// console.log("preset moves: " + loadMoves);
|
||||||
|
inpMoves.value = loadMoves;
|
||||||
|
inpMoves.onchange();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function mineGui_addCustomMap() {
|
function mineGui_addCustomMap() {
|
||||||
@ -174,10 +216,12 @@ function mineGui_move(cmd) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function mineGui_setMap(map, ndx) {
|
function mineGui_setMap(map, ndx) {
|
||||||
|
mineGui_mapname = map;
|
||||||
mineGui_movesBackup[mineGui_curndx] = mineGui_moves;
|
mineGui_movesBackup[mineGui_curndx] = mineGui_moves;
|
||||||
mineGui_curmap = map;
|
mineGui_curmap = mineMaps[map];
|
||||||
mineGui_curndx = ndx;
|
mineGui_curndx = ndx;
|
||||||
mineGui_moves = mineGui_movesBackup[mineGui_curndx];
|
mineGui_moves = mineGui_movesBackup[mineGui_curndx];
|
||||||
|
location.href = '#' + mineGui_mapname + ';' + mineGui_moves;
|
||||||
if (!mineGui_moves) mineGui_moves = "";
|
if (!mineGui_moves) mineGui_moves = "";
|
||||||
mineGui_updateMine();
|
mineGui_updateMine();
|
||||||
}
|
}
|
||||||
@ -197,6 +241,27 @@ function mineGui_updateMine() {
|
|||||||
|
|
||||||
function mineGui_show() {
|
function mineGui_show() {
|
||||||
if (!mineGui_mine) return;
|
if (!mineGui_mine) return;
|
||||||
|
|
||||||
|
location.href = '#' + mineGui_mapname + ';' + mineGui_moves;
|
||||||
|
var state = "";
|
||||||
|
var spriteOffset = mineGui_spriteOffset;
|
||||||
|
switch (mineGui_mine.state) {
|
||||||
|
case Mine.ALIVE:
|
||||||
|
state = "Still mining";
|
||||||
|
break;
|
||||||
|
case Mine.LOST:
|
||||||
|
state = "Robot broken - " + mineGui_mine.reason;
|
||||||
|
spriteOffset = mineGui_spriteOffset_Lost;
|
||||||
|
break;
|
||||||
|
case Mine.ABORTED:
|
||||||
|
state = "Aborted";
|
||||||
|
break;
|
||||||
|
case Mine.WON:
|
||||||
|
state = "Won - " + mineGui_mine.reason;
|
||||||
|
spriteOffset = mineGui_spriteOffset_Won;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
var waterLevel = Math.max(mineGui_mine.water_level, 0);
|
var waterLevel = Math.max(mineGui_mine.water_level, 0);
|
||||||
var map = mineGui_mine.toString().split(/\n/);
|
var map = mineGui_mine.toString().split(/\n/);
|
||||||
var canv = document.getElementById("mineGui_mineCanvas");
|
var canv = document.getElementById("mineGui_mineCanvas");
|
||||||
@ -216,7 +281,7 @@ function mineGui_show() {
|
|||||||
|
|
||||||
for (var y = 0; y < mineGui_mine.height; ++y) {
|
for (var y = 0; y < mineGui_mine.height; ++y) {
|
||||||
for (var x = 0; x < mineGui_mine.width; ++x) {
|
for (var x = 0; x < mineGui_mine.width; ++x) {
|
||||||
ctx.drawImage(sprites, 0, mineGui_spriteOffset[map[y][x]] * 16, 16, 16, 16*x, 16*y, 16, 16);
|
ctx.drawImage(sprites, 0, spriteOffset[map[y][x]] * 16, 16, 16, 16*x, 16*y, 16, 16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ctx.fillStyle = "#0000FF";
|
ctx.fillStyle = "#0000FF";
|
||||||
@ -238,21 +303,6 @@ function mineGui_show() {
|
|||||||
document.getElementById("mineGui_mineMapDry").textContent = map.join("\n");
|
document.getElementById("mineGui_mineMapDry").textContent = map.join("\n");
|
||||||
|
|
||||||
document.getElementById("mineGui_moves").value = mineGui_moves;
|
document.getElementById("mineGui_moves").value = mineGui_moves;
|
||||||
var state = "";
|
|
||||||
switch (mineGui_mine.state) {
|
|
||||||
case Mine.ALIVE:
|
|
||||||
state = "Still mining";
|
|
||||||
break;
|
|
||||||
case Mine.LOST:
|
|
||||||
state = "Robot broken - " + mineGui_mine.reason;
|
|
||||||
break;
|
|
||||||
case Mine.ABORTED:
|
|
||||||
state = "Aborted";
|
|
||||||
break;
|
|
||||||
case Mine.WON:
|
|
||||||
state = "Won - " + mineGui_mine.reason;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
document.getElementById("mineGui_meta").textContent = mineGui_mine.metaText();
|
document.getElementById("mineGui_meta").textContent = mineGui_mine.metaText();
|
||||||
document.getElementById("mineGui_state").textContent = state;
|
document.getElementById("mineGui_state").textContent = state;
|
||||||
document.getElementById("mineGui_score").textContent = mineGui_mine.score;
|
document.getElementById("mineGui_score").textContent = mineGui_mine.score;
|
||||||
|
2
js/gui.min.js
vendored
@ -154,7 +154,6 @@ var Mine = function() {
|
|||||||
}
|
}
|
||||||
this.water_level = this.water.level;
|
this.water_level = this.water.level;
|
||||||
this.razors = this.beard.razors;
|
this.razors = this.beard.razors;
|
||||||
this.beard_growth = this.beard.growth;
|
|
||||||
this.state = ALIVE;
|
this.state = ALIVE;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -301,15 +300,17 @@ var Mine = function() {
|
|||||||
}
|
}
|
||||||
this.moves++;
|
this.moves++;
|
||||||
if (0 == this.lambdas) {
|
if (0 == this.lambdas) {
|
||||||
if (false !== this.lift && 'L' == this.map[this.lift.y][this.lift.x]) {
|
if (false !== this.lift) {
|
||||||
|
/* skip 'L' == this.map[this.lift.y][this.lift.x] - official validator replaces
|
||||||
|
* 'R' with 'O' after the last move too
|
||||||
|
*/
|
||||||
this.map[this.lift.y][this.lift.x] = 'O';
|
this.map[this.lift.y][this.lift.x] = 'O';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
newMap = [];
|
newMap = [];
|
||||||
growBeard = false;
|
growBeard = false;
|
||||||
if (0 > --this.beard_growth) {
|
if (this.beard.growth > 0 && 0 == (this.moves % this.beard.growth)) {
|
||||||
this.beard_growth = this.beard.growth;
|
|
||||||
growBeard = true;
|
growBeard = true;
|
||||||
}
|
}
|
||||||
for (y = 0; y < map.length; ++y) { newMap[y] = this.map[y].slice(); }
|
for (y = 0; y < map.length; ++y) { newMap[y] = this.map[y].slice(); }
|
||||||
|
2
js/mine.min.js
vendored
BIN
js/miner.png
Before Width: | Height: | Size: 180 B After Width: | Height: | Size: 179 B |
BIN
js/minerlift.png
Normal file
After Width: | Height: | Size: 268 B |
BIN
js/robot.png
Before Width: | Height: | Size: 621 B |
BIN
js/sprites.png
Before Width: | Height: | Size: 808 B After Width: | Height: | Size: 963 B |