Lode Runner version 2.21c, AI_VERSION=4

(1) Add gamepad support:
   (1.1) xinput controller is better, Microsoft Edge only support Xinput devices
   (1.2) Browser support tables: http://caniuse.com/#feat=gamepad
   (1.3) gamepad test page: http://html5gamepad.com/

(2) Add color themes selection
(3) More control key support: add "QWE ASD" and ",." keyboard support
(4) Rewrite editor function for more compatible with browser
(5) Maybe get bigger play screen, change scale step from 25% to %5
Cette révision appartient à :
simon_hung
2017-01-01 22:33:58 +08:00
Parent dc96a5ac8d
révision 675e52fa90
78 fichiers modifiés avec 1878 ajouts et 1317 suppressions
BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 2.6 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 2.9 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 2.1 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 2.1 KiB

Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 163 B

Après

Largeur:  |  Hauteur:  |  Taille: 162 B

Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 2.9 KiB

Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 2.1 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 2.4 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 193 B

Après

Largeur:  |  Hauteur:  |  Taille: 176 B

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 203 B

Après

Largeur:  |  Hauteur:  |  Taille: 202 B

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 165 B

Après

Largeur:  |  Hauteur:  |  Taille: 218 B

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 133 B

Après

Largeur:  |  Hauteur:  |  Taille: 167 B

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 2.4 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 2.7 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 185 B

Après

Largeur:  |  Hauteur:  |  Taille: 197 B

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 2.0 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 2.0 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 159 B

Après

Largeur:  |  Hauteur:  |  Taille: 162 B

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 868 B

Après

Largeur:  |  Hauteur:  |  Taille: 505 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 2.7 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 2.3 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 2.6 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 4.2 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 2.0 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 188 B

Après

Largeur:  |  Hauteur:  |  Taille: 228 B

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 51 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 21 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 62 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 36 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 3.7 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 5.0 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 18 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 20 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 5.2 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 18 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 4.4 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 18 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 9.4 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 16 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 11 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 20 KiB

-14
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
-12
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
-13
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
+13
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
-18
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
-18
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
+18
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
-17
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
-12
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
+12
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
+333
Voir le fichier
@@ -0,0 +1,333 @@
function colorSelectorClass(_screenX1, _screenY1, baseX)
{
var radius = baseX*3/4|0;
var px = (baseX *7/5)|0;
var py = (baseX *7/5)|0;
var left = screenBorder;
var top = baseX/4|0;
var colorCanvas, colorStage;
var colorSelector;
var colorShape=[];
var activeCircle;
var smallScale = 0.4;
var colorSelectorIsSmall = 0;
var outFocusTimer = null;
var colorStageTicker = null;
var self = this;
var enabled = 0;
var bgColor= backgroundColor;
init();
function init()
{
createColorCanvas();
createColorSelector();
}
this.enable = function ()
{
if(enabled) return;
enabled = 1;
colorSelector.set({alpha:1});
colorStage.enableMouseOver(30);
colorStage.update();
}
this.disable = function (hidden)
{
enabled = 0;
if(hidden) {
colorSelector.set({alpha:0});
} else {
colorSelector.set({alpha:1})
}
colorStage.enableMouseOver(0);
colorStage.update();
}
this.themeChange = function()
{
for(var i=0; i < maxThemeColor;i++) {
setColorShape(colorShape[i], i, pinker(getThemeTileColor(i)) );
}
setActiveCircle();
colorStage.update();
}
this.activeColorChange = function()
{
setActiveCircle();
colorStage.update();
}
function createColorCanvas()
{
colorCanvas = document.createElement('canvas');
colorCanvas.id = "theme_color_selector";
colorCanvas.width = px * 2;
colorCanvas.height = py * 2;
colorCanvas.style.left = left + "px";
colorCanvas.style.top = top + "px";
colorCanvas.style.position = "absolute";
document.body.appendChild(colorCanvas);
}
function createColorSelector()
{
var bgCircle = new createjs.Shape();
colorStage = new createjs.Stage(colorCanvas);
colorSelector = new createjs.Container();
bgCircle.graphics.beginFill(bgColor).drawCircle(px,py, radius*5/3|0);
colorSelector.addChild(bgCircle);
//colorSelector.regY =radius*5/3*2;
//colorSelector.y = radius*5/3*2;
addColorShape();
setColorSelectorMouseEvent();
colorSelectorTransform(1);
addActiveCircle();
setActiveCircleMouseEvent();
colorSelector.set({alpha:0}); //disabled
colorStage.addChild(colorSelector);
colorStage.update();
}
//= 2 =========================
function addColorShape()
{
for(var i=0; i < maxThemeColor;i++) createColorShape(i);
for(var i=0; i < maxThemeColor;i++) createBGBar(i);
function createColorShape(id)
{
var color = pinker( getThemeTileColor(i));
colorShape[id] = new createjs.Shape();
setColorShape(colorShape[id], id, color);
setColorShapeMouseEvent(colorShape[id], id)
colorSelector.addChild(colorShape[id]);
}
function createBGBar(id)
{
var s = Math.PI*2/5 + (2*Math.PI) * id/5;
var bar = new createjs.Shape();
bar.graphics.setStrokeStyle(baseX/6|0)
.beginStroke(bgColor).moveTo(px, py)
.lineTo(px+ Math.sin(s)*radius*3/2, py+Math.cos(s)*radius*3/2)
.endStroke();
colorSelector.addChild(bar);
}
}
function setColorSelectorMouseEvent()
{
colorSelector.on("mouseover", mouseOver);
colorSelector.on("mouseout", mouseOut);
colorSelector.on("click", mouseClick);
function mouseOver()
{
if(gameState == GAME_PAUSE || (gameState == GAME_WAITING && playMode != PLAY_EDIT)) {
colorSelector.cursor = "default";
return;
}
if(colorSelectorIsSmall) {
colorSelector.cursor = "pointer";
return;
}
setTransformTimeout(0); //clear timeout
}
function mouseOut()
{
if(colorSelectorIsSmall) return;
setTransformTimeout(1); //set timeout
}
function mouseClick()
{
if(gameState == GAME_PAUSE || (gameState == GAME_WAITING && playMode != PLAY_EDIT)) return;
if(!colorSelectorIsSmall) return;
colorSelectorTransform(0);
}
}
function addActiveCircle()
{
activeCircle = new createjs.Shape();
colorSelector.addChild(activeCircle);
setActiveCircle();
}
function setActiveCircleMouseEvent()
{
activeCircle.on("mouseover", function(){
if(gameState == GAME_PAUSE || (gameState == GAME_WAITING && playMode != PLAY_EDIT)) return;
if(colorSelectorIsSmall) return;
colorSelector.cursor = "pointer";
});
activeCircle.on("mouseout", function(){
if(colorSelectorIsSmall) return;
colorSelector.cursor = "default";
});
activeCircle.on("click",function() {
if(gameState == GAME_PAUSE || (gameState == GAME_WAITING && playMode != PLAY_EDIT)) return;
if(colorSelectorIsSmall) return;
setTransformTimeout(0); //clear timeout
colorSelectorTransform(0); //transform to small
});
}
function colorSelectorTransform(immediate)
{
if(colorSelectorIsSmall) {
colorCanvas.width = px * 2;
colorCanvas.height = py * 2;
if(immediate) {
colorSelector.scaleX = colorSelector.scaleY = 1;
colorSelectorIsSmall = 0;
colorSelector.cursor = "default";
} else {
createjs.Tween.get(colorSelector)
.to({scaleX: 1, scaleY: 1}, 100)
.call(function(){
colorSelectorIsSmall = 0;
setActiveCircle();
colorSelector.cursor = "default";
createjs.Ticker.off("tick", colorStageTicker);
colorStageTicker = null;
colorStage.update();
});
colorStageTicker = createjs.Ticker.on("tick", colorStage);
}
} else {
if(immediate) {
colorSelector.scaleX = colorSelector.scaleY = smallScale;
colorSelectorIsSmall = 1;
colorSelector.cursor = "pointer";
colorCanvas.width = px * 2 * smallScale;
colorCanvas.height = py * 2 * smallScale;
} else {
createjs.Tween.get(colorSelector)
.to({scaleX: smallScale, scaleY: smallScale}, 100)
.call(function(){
colorCanvas.width = px * 2 * smallScale;
colorCanvas.height = py * 2 * smallScale;
colorSelectorIsSmall = 1;
//setActiveCircle();
//self.themeChange();
colorSelector.cursor = "pointer";
createjs.Ticker.off("tick", colorStageTicker);
colorStageTicker = null;
colorStage.update();
});
colorStageTicker = createjs.Ticker.on("tick", colorStage);
}
}
}
//= 3 ===========================
function pinker(hexColor)
{
var orgRGB = hexToRGB(hexColor);
var percent = 1/2, whitePercent = 1-percent;
for(var i=0; i < 3; i++) {
orgRGB[i] = (orgRGB[i]*percent+255*whitePercent)|0;
if(orgRGB[i]>255) orgRGB[i]=255;
}
return rgbToHex(orgRGB)
}
function setColorShape(shape, id, color)
{
var s = (2*Math.PI) * id/5-(Math.PI)*7/10+(Math.PI)/40;
var e = (2*Math.PI) * (id+1)/5-(Math.PI)*7/10-(Math.PI)/40;
shape.graphics.clear().setStrokeStyle(radius-2)
.beginStroke(color).arc(px, py, radius, s, e).endStroke();
}
function setColorShapeMouseEvent(shape, id)
{
shape.on("mouseover", mouseOver, null, false, {id:id});
shape.on("mouseout", mouseOut, null, false, {id:id});
shape.on("click", mouseClick, null, false, {id:id});
function mouseOver(evt, data)
{
var id = data.id;
var curColorId = getCurColorId();
if(gameState == GAME_PAUSE || (gameState == GAME_WAITING && playMode != PLAY_EDIT)) return;
if(colorSelectorIsSmall) return;
colorSelector.cursor = "pointer";
setColorShape(colorShape[id], id, getThemeTileColor(id));
colorStage.update();
}
function mouseOut(evt, data)
{
var id = data.id;
var curColorId = getCurColorId();
if(gameState == GAME_PAUSE || (gameState == GAME_WAITING && playMode != PLAY_EDIT)) return;
if(colorSelectorIsSmall) return;
colorSelector.cursor = "default";
setColorShape(colorShape[id], id, pinker(getThemeTileColor(id)));
colorStage.update();
}
function mouseClick(evt, data)
{
var id = data.id;
var curColorId = getCurColorId();
if(gameState == GAME_PAUSE || (gameState == GAME_WAITING && playMode != PLAY_EDIT)) return;
if(colorSelectorIsSmall || curColorId == id) return;
themeColorChange(id);
setActiveCircle();
colorStage.update();
}
}
function setTransformTimeout(enable)
{
//clear timeout
if(outFocusTimer) {
clearTimeout(outFocusTimer);
outFocusTimer = null;
}
//set timeout
if(enable) {
outFocusTimer = setTimeout(function(){ colorSelectorTransform(0); }, 1000);
}
}
function setActiveCircle()
{
var color = getThemeTileColor(getCurColorId());
activeCircle.graphics.clear().beginFill(color).drawCircle(px,py, radius*3/8|0);
//activeCircle.alpha = colorSelectorIsSmall?0:1;
}
}
+199
Voir le fichier
@@ -0,0 +1,199 @@
var baseBitmapName = [
"empty", "brick", "solid", "ladder", "rope",
"trapBrick", "hladder", "gold", "redhat", "guard1", "runner1",
"runner", "guard", "hole", "ground", "over", "text"
];
var themeColor = {};
themeColor[THEME_APPLE2] = [
null, //original image color
"#60C0A0",
"#DD8D5D",
"#C080F0",
"#FF83BB",
];
themeColor[THEME_C64] = [
null, //original image color
"#DF5050",
"#F7993E",
"#4A4AFF",
"#2E8B57"
];
var maxThemeColor = themeColor[THEME_APPLE2].length;
var themeBaseBitmap = {};
var curColorId = {};
var orgImageColor = {};
var themeNameList = [THEME_APPLE2, THEME_C64];
function createBaseBitmapInstance()
{
for(var i = 0; i < themeNameList.length; i++) {
var themeName = themeNameList[i];
var id = curColorId[themeName];
orgImageColor[themeName] = getOrgImageColor(themeName);
createThemeBaseBitmap(themeName, hexToRGB(themeColor[themeName][id]), id);
}
//for edit mode only
themeBaseBitmap["eraser"] = createBitmap("eraser", null, null);
}
function createThemeBaseBitmap(themeName, newColor, id)
{
var oldColor = orgImageColor[themeName]; //get original image color
for(var i=0; i < baseBitmapName.length; i++){
var imageName = baseBitmapName[i]+themeName;
if( (imageName+id) in themeBaseBitmap)
return;
themeBaseBitmap[imageName+id] = createBitmap(imageName, oldColor, newColor);
}
}
function getThemeBitmap(name)
{
if(name == "eraser") return themeBaseBitmap[name].clone(); //for edit mode only
return themeBaseBitmap[name+ curTheme+curColorId[curTheme]].clone();
}
function getThemeImage(name)
{
return preload.getResult(name);
}
function getThemeTileColor(id)
{
var curId = (typeof id != 'undefined')?id:curColorId[curTheme];
if(curId == 0) return rgbToHex(orgImageColor[curTheme]); //original color
return themeColor[curTheme][curId];
}
function getCurColorId()
{
return curColorId[curTheme];
}
function getOrgImageColor(themeName)
{
var canvas = document.createElement('canvas');
var ctx=canvas.getContext("2d");
var stage = new createjs.Stage(canvas);
var bitmap = new createjs.Bitmap(getThemeImage("solid"+themeName)); //"solid" as sample image
var imgData, orgColor;
canvas.width = bitmap.getBounds().width;
canvas.height = bitmap.getBounds().height;
stage.addChild(bitmap);
stage.update();
stage.cache(0, 0, canvas.width, canvas.height);
imgData=ctx.getImageData(0, 0, canvas.width, canvas.height);
orgColor = [imgData.data[0], imgData.data[1], imgData.data[2] ];
stage.uncache();
stage.removeAllChildren();
stage.update();
return orgColor;
}
function createBitmap(imageName, oldColor, newColor)
{
var bitmap = new createjs.Bitmap(getThemeImage(imageName));
var newBitmap;
if(newColor != null && (newBitmap = changeBitmapColor(bitmap, oldColor, newColor)) != null)
return newBitmap; //color changed
else
return bitmap;
}
function changeBitmapColor(bitmap, oldColor, newColor)
{
var canvas = document.createElement('canvas');
var stage = new createjs.Stage(canvas);
var changed;
canvas.width = bitmap.getBounds().width;
canvas.height = bitmap.getBounds().height;
stage.addChild(bitmap);
stage.update();
stage.cache(0, 0, canvas.width, canvas.height);
changed = changeColor(canvas, oldColor, newColor);
stage.uncache();
stage.removeAllChildren();
if(changed) return (new createjs.Bitmap(stage.canvas));
else return null;
}
function changeColor(canvas, oldColor, newColor)
{
var ctx=canvas.getContext("2d");
var imgData=ctx.getImageData(0, 0, canvas.width, canvas.height);
var data = imgData.data;
var bitChanged = 0;
for (var i = 0; i < data.length; i += 4) {
var red = data[i + 0];
var green = data[i + 1];
var blue = data[i + 2];
var alpha = data[i + 3];
if(oldColor[0] == red && oldColor[1] == green && oldColor[2] == blue) {
data[i+0] = newColor[0];
data[i+1] = newColor[1];
data[i+2] = newColor[2];
bitChanged = 1;
}
}
ctx.putImageData(imgData, 0, 0);
return bitChanged;
}
function themeColorChange(id)
{
var newColor;
if(curColorId[curTheme] == id) return; //don't need change
newColor = hexToRGB(themeColor[curTheme][id]);
curColorId[curTheme] = id;
createThemeBaseBitmap(curTheme, newColor, id)
themeDataReset(0); //don't need reset sound instance
setThemeColor();
themeColorObj.activeColorChange();
if(playMode == PLAY_EDIT) {
if(editLevelModified()) saveTestState();
stopEditTicker();
startEditMode();
} else {
changeThemeScreen(); //real time change theme screen
}
}
function hexToRGB(hex)
{
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? [
parseInt(result[1], 16),
parseInt(result[2], 16),
parseInt(result[3], 16)
] : null;
}
function rgbToHex(rgb)
{
return "#" +
("00" + rgb[0].toString(16)).slice(-2)+
("00" + rgb[1].toString(16)).slice(-2)+
("00" + rgb[2].toString(16)).slice(-2);
}
+10 -3
Voir le fichier
@@ -1,4 +1,4 @@
var VERSION = "2.11a"; var VERSION = "2.21c";
var AI_VERSION = 4; var AI_VERSION = 4;
var NO_OF_TILES_X = 28, var NO_OF_TILES_X = 28,
@@ -16,7 +16,7 @@ var BASE_SCREEN_X = (NO_OF_TILES_X * BASE_TILE_X);
var BASE_SCREEN_Y = (NO_OF_TILES_Y * BASE_TILE_Y + GROUND_TILE_Y + TEXT_TILE_Y); var BASE_SCREEN_Y = (NO_OF_TILES_Y * BASE_TILE_Y + GROUND_TILE_Y + TEXT_TILE_Y);
var MIN_SCALE = 0.5, var MIN_SCALE = 0.5,
MAX_SCALE = 2; MAX_SCALE = 3;
var MENU_ICON_X = 40, MENU_ICON_Y = 36, ICON_BORDER = 4; var MENU_ICON_X = 40, MENU_ICON_Y = 36, ICON_BORDER = 4;
var BASE_ICON_X = (MENU_ICON_X + ICON_BORDER * 2); var BASE_ICON_X = (MENU_ICON_X + ICON_BORDER * 2);
@@ -52,11 +52,16 @@ var KEYCODE_BKSPACE = 8, //backspace
KEYCODE_A = 65, //'A' KEYCODE_A = 65, //'A'
KEYCODE_C = 67, //'C' KEYCODE_C = 67, //'C'
KEYCODE_D = 68, //'D'
KEYCODE_E = 69, //'E'
KEYCODE_G = 71, //'G' KEYCODE_G = 71, //'G'
KEYCODE_H = 72, //'H'
KEYCODE_Q = 81, //'Q'
KEYCODE_R = 82, //'R' KEYCODE_R = 82, //'R'
KEYCODE_S = 83, //'S' KEYCODE_S = 83, //'S'
KEYCODE_T = 84, //'T' KEYCODE_T = 84, //'T'
KEYCODE_V = 86; //'V' KEYCODE_V = 86, //'V'
KEYCODE_W = 87; //'W'
var KEYCODE_0 = 48, var KEYCODE_0 = 48,
KEYCODE_1 = 49, KEYCODE_1 = 49,
@@ -179,5 +184,7 @@ var STORAGE_PLAYER_NAME = "loderunner_player";
var STORAGE_UID = "loderunner_uid"; var STORAGE_UID = "loderunner_uid";
var STORAGE_THEME_MODE = "loderunner_theme"; var STORAGE_THEME_MODE = "loderunner_theme";
var STORAGE_THEME_COLOR = "loderunner_color_";
var STORAGE_REPEAT_ACTION = "loderunner_actRepeat"; var STORAGE_REPEAT_ACTION = "loderunner_actRepeat";
var STORAGE_GAMEPAD_MODE = "loderunner_gamepadMode";
+28 -102
Voir le fichier
@@ -1,6 +1,6 @@
///////////////// //===============
// Auto Demo // Auto Demo
///////////////// //===============
var demoRecordIdx, demoGoldIdx, demoBornIdx; var demoRecordIdx, demoGoldIdx, demoBornIdx;
var demoTickCount; var demoTickCount;
@@ -10,9 +10,6 @@ function initAutoDemoRnd()
{ {
demoRnd = []; demoRnd = [];
demoRnd[0] = new rangeRandom(0, demoData1.length-1, 0); //random range 0 .. demoData1.length-1 demoRnd[0] = new rangeRandom(0, demoData1.length-1, 0); //random range 0 .. demoData1.length-1
/* auto demo data always use demoData1 (because now can select demo levels from demo mode) , 6/12/2014
demoRnd[1] = new rangeRandom(0, demoData2.length-1, 0); //random range 0 .. demoData1.length-2
*/
} }
var demoRecord, demoGoldDrop, demoBornPos; var demoRecord, demoGoldDrop, demoBornPos;
@@ -22,23 +19,12 @@ function getAutoDemoLevel(initValue)
if(initValue) { if(initValue) {
curScore = 0; curScore = 0;
runnerLife = 1; runnerLife = 1;
/* auto demo data always use demoData1 (because now can select demo levels from demo mode) , 6/12/2014
if(playData == PLAY_DATA_2) { //lode runner 2 demo data
demoLevel = 1;
demoCount = 1;
demoMaxCount = 2;
demoData = demoData2;
levelData = levelData2;
demoIdx = 1;
} else { //lode runner 1 demo data
*/
demoLevel = 1; demoLevel = 1;
demoCount = 1; demoCount = 1;
demoMaxCount = 3; demoMaxCount = 3;
demoData = demoData1; demoData = demoData1;
levelData = playVersionInfo[0].verData; levelData = playVersionInfo[0].verData;
demoIdx = 0; demoIdx = 0;
// }
} else { } else {
demoLevel++; demoLevel++;
demoCount++; demoCount++;
@@ -128,29 +114,10 @@ function getDemoBornPos()
// for demo mode (User select level) // for demo mode (User select level)
//==================================== //====================================
//var playerDemoData = [], noDemoData = [];
//var wDemoData1 = [], wDemoData2 = [], wDemoData3 = [], wDemoData4 = [], wDemoData5 = []; //temp temp temp
var playerDemoData = [], wDemoData = []; var playerDemoData = [], wDemoData = [];
var demoPlayData = 0; //for syn demo data with current playData var demoPlayData = 0; //for syn demo data with current playData
var demoDataLoading = 0; var demoDataLoading = 0;
/* No used
function showGameLoading()
{
lastGameState = gameState;
gameState = GAME_LOADING;
showTipsText("Loading ...", 0, 3/4); //display "Loading"
}
function hideGameLoading()
{
gameState = lastGameState;
showTipsText("", 100); //clear text
//if(playMode == PLAY_MODERN && gameState == GAME_START ) demoIconObj.enable();
}
*/
function initDemoData() function initDemoData()
{ {
demoPlayData = playData; demoPlayData = playData;
@@ -172,47 +139,8 @@ function setDemoData(jsonTxt)
} }
demoDataLoading = 0; demoDataLoading = 0;
if(playMode == PLAY_MODERN && gameState == GAME_START ) demoIconObj.enable(); if(playMode == PLAY_MODERN && gameState == GAME_START ) demoIconObj.enable();
//hideGameLoading();
} }
/*
function initDemoModeVariable()
{
for(var i = 0; i < maxPlayId; i++) {
playerDemoData[i] = [];
noDemoData[i] = 1;
//wHighScore[i] = [];
}
for(var i = 0; i < wDemoData1.length; i++) { //temp
playerDemoData[0][wDemoData1[i].level-1] = wDemoData1[i];
}
for(var i = 0; i < wDemoData2.length; i++) { //temp
playerDemoData[1][wDemoData2[i].level-1] = wDemoData2[i];
}
for(var i = 0; i < wDemoData3.length; i++) { //temp
playerDemoData[2][wDemoData3[i].level-1] = wDemoData3[i];
}
for(var i = 0; i < wDemoData4.length; i++) { //temp
playerDemoData[3][wDemoData4[i].level-1] = wDemoData4[i];
}
for(var i = 0; i < wDemoData5.length; i++) { //temp
playerDemoData[4][wDemoData5[i].level-1] = wDemoData5[i];
}
for(var i = 0; i < maxPlayId; i++) {
if(playerDemoData[i].length > 0) noDemoData[i] = 0;
}
}
*/
function initDemoInfo() function initDemoInfo()
{ {
var idx = curLevel - 1; var idx = curLevel - 1;
@@ -289,7 +217,6 @@ function getNextDemoLevel()
function curDemoLevelIsVaild() function curDemoLevelIsVaild()
{ {
if(playData == PLAY_DATA_USERDEF) return 0; if(playData == PLAY_DATA_USERDEF) return 0;
//return (typeof playerDemoData[playData-1][curLevel-1] != "undefined");
return (typeof playerDemoData[curLevel-1] != "undefined"); return (typeof playerDemoData[curLevel-1] != "undefined");
} }
@@ -335,28 +262,6 @@ function respUpdatePlayerDemoData(jsonTxt)
} }
} }
/*
function updatePlayerDemoData(playData, demoDataInfo)
{
var updateDemoData = playerDemoData[playData-1];
var level = demoDataInfo.level;
if(updateDemoData == null) updateDemoData = [];
updateDemoData[level-1] = {
level: demoDataInfo.level,
ai: demoDataInfo.ai,
time: demoDataInfo.time,
state: demoDataInfo.state,
action: demoDataInfo.action,
goldDrop: demoDataInfo.goldDrop,
bornPos: demoDataInfo.bornPos,
godMode: demoDataInfo.godMode
};
noDemoData[playData-1] = 0;
}
*/
//============================== //==============================
// Record play action for demo // Record play action for demo
//============================== //==============================
@@ -409,6 +314,7 @@ function saveKeyCode(code, keyAction)
function recordModeDump(state) function recordModeDump(state)
{ {
recordPlayTime(state); recordPlayTime(state);
remapActionKey();
convertBornPos(); convertBornPos();
dumpRecord(); dumpRecord();
} }
@@ -481,11 +387,6 @@ var recordIdx;
function recordPlayDemo() function recordPlayDemo()
{ {
if(recordIdx < playRecord.length) { if(recordIdx < playRecord.length) {
/*
if(playRecord[recordIdx].count == recordCount) {
loadingTxt.text = recordIdx;
pressKey(playRecord[recordIdx++].code);
}*/
if(playRecord[recordIdx*2] == recordCount) { if(playRecord[recordIdx*2] == recordCount) {
//loadingTxt.text = recordIdx; //for debug //loadingTxt.text = recordIdx; //for debug
pressKey(playRecord[recordIdx*2+1]); pressKey(playRecord[recordIdx*2+1]);
@@ -528,6 +429,31 @@ function recordPlayTime(state)
recordState = (state == GAME_FINISH)?1:0; //finish or dead recordState = (state == GAME_FINISH)?1:0; //finish or dead
} }
var actionKeyMapping = [
[ KEYCODE_A, KEYCODE_LEFT], //move left
[ KEYCODE_D, KEYCODE_RIGHT], //move right
[ KEYCODE_W, KEYCODE_UP], //move up
[ KEYCODE_S, KEYCODE_DOWN], //move down
[ KEYCODE_Q, KEYCODE_Z], //dig left
[ KEYCODE_E, KEYCODE_X], //dig right
[ KEYCODE_COMMA, KEYCODE_Z], //dig left
[ KEYCODE_PERIOD, KEYCODE_X] //dig right
];
//Remap action key to orignal "left, right, up down and Z, X"
//for backward compatible
function remapActionKey()
{
for(var i = 0; i < playRecord.length; i+=2){
for(var j = 0; j < actionKeyMapping.length; j++) {
if(actionKeyMapping[j][0] == playRecord[i+1]) {
playRecord[i+1] = actionKeyMapping[j][1];
break;
}
}
}
}
function convertBornPos() function convertBornPos()
{ {
var len, offset = 1; var len, offset = 1;
+333 -362
Voir le fichier
@@ -4,6 +4,7 @@ var editMap;
var MAX_EDIT_GUARD = 5; //maximum number of guards var MAX_EDIT_GUARD = 5; //maximum number of guards
var EMPTY_ID = 0, GUARD_ID = 8, RUNNER_ID = 9; var EMPTY_ID = 0, GUARD_ID = 8, RUNNER_ID = 9;
var EDIT_PADDING = 1;
//value | Character | Type //value | Character | Type
//------+-----------+----------- //------+-----------+-----------
@@ -18,6 +19,8 @@ var EMPTY_ID = 0, GUARD_ID = 8, RUNNER_ID = 9;
// 0x8 | 0 | Guard // 0x8 | 0 | Guard
// 0x9 | & | Player // 0x9 | & | Player
var tileIdMapping = { ' ':0, '#':1, '@':2, 'H':3, '-':4, 'X':5, 'S':6, '$':7, '0':8, '&':9 };
var tileInfo = [ var tileInfo = [
[ "eraser", ' ' ], //(0), empty [ "eraser", ' ' ], //(0), empty
[ "brick", '#' ], //(1) [ "brick", '#' ], //(1)
@@ -36,27 +39,39 @@ var lastRunner = null;
var lastGuardList = []; var lastGuardList = [];
var editBorder, editStartX; var editBorder, editStartX;
var testLevelInfo = {level: -1}; var testLevelInfo = {level: -1};
var mouseInStage = 1; var mouseInStage = 1;
//var mouseOver = 0;
var mouseDown = 0;
var lastDown = {x:-1, y:-1};
var testButton, newButton, saveButton, loadButton;
var editorTile =[], editorActiveTileId = -1;
var editorButton = [], editorButtonMouseOverId = -1;
var editInNarrowScreen = 0;
function startEditMode() function startEditMode()
{ {
soundIconObj.disable(1);
repeatActionIconObj.disable(1);
playMode = PLAY_EDIT; playMode = PLAY_EDIT;
playData = PLAY_DATA_USERDEF; //for title name only playData = PLAY_DATA_USERDEF; //for title name only
mainStage.removeAllChildren(); mainStage.removeAllChildren();
//document.onkeydown = function() { return true; };
document.onkeydown = editHandleKeyDown; document.onkeydown = editHandleKeyDown;
////getEditLevelInfo(); //move to main.js editInNarrowScreen = canvasEditReSize();
soundIconObj.disable(1);
repeatActionIconObj.disable(1);
if(editInNarrowScreen) themeColorObj.disable(1);
//if(gamepadIconObj) gamepadIconObj.disable(1);
setEditSelectMenu(); setEditSelectMenu();
canvasEditReSize();
createBaseTile(); createBaseTile();
createEditMap(); createEditMap();
startEditTicker(); startEditTicker();
setButtonState(); setButtonState();
initForPlay(); // 1/19/2015 initForPlay();
} }
function setEditSelectMenu() function setEditSelectMenu()
@@ -65,52 +80,12 @@ function setEditSelectMenu()
else selectIconObj.disable(1); else selectIconObj.disable(1);
} }
function back2EditMode(rc)
{
if(rc == 1) { //pass
testLevelInfo.pass = 1;
setTestLevel(testLevelInfo);
//enableSaveButton();
} else { //fail
//if(testLevelInfo.pass && !testLevelInfo.modified) enableSaveButton();
}
startEditMode();
//setButtonState();
}
function saveTestState()
{
map2LevelData();
setTestLevel(testLevelInfo);
}
function startTestMode()
{
playMode = PLAY_TEST;
playData = PLAY_DATA_USERDEF;
curLevel = testLevelInfo.level;
stopEditTicker();
saveTestState();
canvasReSize();
document.onkeydown = handleKeyDown; //key press
selectIconObj.disable(1);
initShowDataMsg();
startGame();
}
function getTestLevelMap(initValue)
{
return testLevelInfo.levelMap;
}
var EDIT_PADDING = 1;
function canvasEditReSize() function canvasEditReSize()
{ {
var menuIconAreaX = screenBorder + BASE_ICON_X * tileScale; //current icon size X var menuIconAreaX = screenBorder + BASE_ICON_X * tileScale; //current icon size X
var toolAreaX = BASE_TILE_X*3/2; //edit tool size X var toolAreaX = BASE_TILE_X*3/2; //edit tool size X
var canvas = document.getElementById('canvas'); var canvas = document.getElementById('canvas');
var narrowScreen = 0;
//(1) try use scale same as play mode //(1) try use scale same as play mode
canvasX = (BASE_SCREEN_X+toolAreaX) * tileScale + EDIT_PADDING * (NO_OF_TILES_X+1); canvasX = (BASE_SCREEN_X+toolAreaX) * tileScale + EDIT_PADDING * (NO_OF_TILES_X+1);
@@ -130,7 +105,10 @@ function canvasEditReSize()
var left = ((screenX1 - canvasX)/2|0), var left = ((screenX1 - canvasX)/2|0),
top = ((screenY1 - canvasY)/2|0); top = ((screenY1 - canvasY)/2|0);
if(left < menuIconAreaX) left = ((screenX1 - canvasX - menuIconAreaX)/2|0); if(left < menuIconAreaX) {
narrowScreen = 1;
left = ((screenX1 - canvasX - menuIconAreaX)/2|0);
}
canvas.width = canvasX; canvas.width = canvasX;
canvas.height = canvasY; canvas.height = canvasY;
@@ -144,15 +122,17 @@ function canvasEditReSize()
editBorder = 4 * tileScale; editBorder = 4 * tileScale;
editStartX = (tileWScale + W2 * tileScale); editStartX = (tileWScale + W2 * tileScale);
return narrowScreen;
} }
function createBaseTile() function createBaseTile()
{ {
for(var id = 0; id < tileInfo.length; id++) { for(var id = 0; id < tileInfo.length; id++) {
baseTile[id] = { image: getThemeImage(tileInfo[id][0]), id: id }; baseTile[id] = { image: getThemeBitmap(tileInfo[id][0]).image, id: id };
} }
emptyTile = { image: getThemeImage("empty"), id: 0 }; emptyTile = { image: getThemeBitmap("empty").image, id: 0 };
actTile = baseTile[1]; actTile = baseTile[1];
} }
@@ -205,15 +185,11 @@ function createEditMap()
(tileHScale+EDIT_PADDING)*NO_OF_TILES_Y+EDIT_PADDING (tileHScale+EDIT_PADDING)*NO_OF_TILES_Y+EDIT_PADDING
); );
addSelectIcon(); addSelectIcon();
addCursorTile(); addCursorTile();
drawEditLevel(); drawEditLevel();
drawSaveButton();
drawTestButton(); addEditorButton();
drawNewButton();
drawLoadButton();
enableTestButton();
mouseInStage = 1; mouseInStage = 1;
mainStage.on("stagemouseup", stageMouseUp); mainStage.on("stagemouseup", stageMouseUp);
@@ -234,7 +210,6 @@ function clearEditMap()
} }
} }
var tileIdMapping = { ' ':0, '#':1, '@':2, 'H':3, '-':4, 'X':5, 'S':6, '$':7, '0':8, '&':9 };
function tile2Id(tileChar) function tile2Id(tileChar)
{ {
if( tileIdMapping.hasOwnProperty(tileChar)) { if( tileIdMapping.hasOwnProperty(tileChar)) {
@@ -250,7 +225,7 @@ function setCanvasBackground()
var background = new createjs.Shape(); var background = new createjs.Shape();
background.graphics.beginFill("black").drawRect(0, 0, canvas.width, canvas.height); background.graphics.beginFill("black").drawRect(0, 0, canvas.width, canvas.height);
mainStage.addChild(background); mainStage.addChild(background);
document.body.style.background = "#301050"; document.body.style.background = backgroundColor;
} }
function setEditBackground(startX, startY, width, height) function setEditBackground(startX, startY, width, height)
@@ -264,9 +239,8 @@ function setEditBackground(startX, startY, width, height)
function drawEditBlock(startX, startY, width, height) function drawEditBlock(startX, startY, width, height)
{ {
var editBlock = new createjs.Shape(); var editBlock = new createjs.Shape();
editBlock.alpha = 0.6;
//editBack.graphics.beginFill("gold").drawRect(startX, startY, width, height);
editBlock.alpha = 0.6;
editBlock.graphics.setStrokeStyle(2); editBlock.graphics.setStrokeStyle(2);
editBlock.graphics.beginStroke("red"); editBlock.graphics.beginStroke("red");
editBlock.graphics.moveTo(startX, startY); editBlock.graphics.moveTo(startX, startY);
@@ -295,14 +269,13 @@ function drawEditGround()
function addSelectIcon() function addSelectIcon()
{ {
//var x = (tileWScale+EDIT_PADDING)*NO_OF_TILES_X+tileWScale/2;
var x = W4 * tileScale; var x = W4 * tileScale;
var y; var y;
for(var i = 1; i < baseTile.length; i++) { for(var i = 1; i < baseTile.length; i++) {
y = (tileHScale*5/3)*(i-1) + tileHScale*1/4; y = (tileHScale*5/3)*(i-1) + tileHScale/10;
drawSelectIcon(i, x, y); drawSelectIcon(i, x, y);
} }
y = (tileHScale*5/3)*(i-1) + tileHScale*1/4; y = (tileHScale*5/3)*(i-1) + tileHScale/10;
drawSelectIcon(0, x, y); drawSelectIcon(0, x, y);
} }
@@ -327,15 +300,8 @@ function addCursorTile()
function startEditTicker() function startEditTicker()
{ {
stopEditTicker(); stopEditTicker();
createjs.Ticker.setFPS(30); createjs.Ticker.setFPS(60);
/* mainStage.enableMouseOver(0);
if(testLevelInfo.level >= MAX_EDIT_LEVEL) {
mainStage.cursor = 'default';
mainStage.update();
return;
}
*/
mainStage.enableMouseOver(120);
gameTicker = createjs.Ticker.on("tick", editTick); gameTicker = createjs.Ticker.on("tick", editTick);
} }
@@ -344,7 +310,7 @@ function stopEditTicker()
if(gameTicker) { if(gameTicker) {
createjs.Ticker.off("tick", gameTicker); createjs.Ticker.off("tick", gameTicker);
mainStage.enableMouseOver(0); mainStage.enableMouseOver(0);
mainStage.cursor = 'default'; //mainStage.cursor = 'default';
gameTicker = null; gameTicker = null;
} }
} }
@@ -384,12 +350,13 @@ function drawSelectIcon(id, x, y)
tile.y = y; tile.y = y;
tile.myId = id; tile.myId = id;
tile.on('click', selectTileClick); tile.on('click', selectTileClick);
tile.on('mouseover', selectTileMouseOver);
tile.on('mouseout', selectTileMouseOut);
mainStage.addChild(tile); mainStage.addChild(tile);
tile.x1 = x + tileWScale;
tile.y1 = y + tileHScale;
editorTile[id] = tile;
} }
var mouseOver = 0;
function selectTileClick() function selectTileClick()
{ {
var actBorder = this.getChildAt(0); var actBorder = this.getChildAt(0);
@@ -406,28 +373,6 @@ function selectTileClick()
selectedTile = this; selectedTile = this;
} }
function selectTileMouseOver()
{
var border = this.getChildAt(0);
border.graphics.clear();
border.graphics.beginFill("gold").drawRect(-editBorder, -editBorder, tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
mainStage.cursor = 'pointer'
mouseOver = 1;
}
function selectTileMouseOut()
{
var border = this.getChildAt(0);
var color = (actTile.id == this.myId)?"red":"black";
border.graphics.clear();
border.graphics.beginFill(color).drawRect(-editBorder, -editBorder, tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
mouseOver = 0;
}
function drawEditLevel() function drawEditLevel()
{ {
var x = 17.2*(tileWScale+EDIT_PADDING)+EDIT_PADDING; var x = 17.2*(tileWScale+EDIT_PADDING)+EDIT_PADDING;
@@ -450,183 +395,17 @@ function drawEditLevelNo()
editLevelNoObj = drawText(26.5*(tileWScale+EDIT_PADDING), y, ("00"+(testLevelInfo.level)).slice(-3), mainStage); editLevelNoObj = drawText(26.5*(tileWScale+EDIT_PADDING), y, ("00"+(testLevelInfo.level)).slice(-3), mainStage);
} }
var testButton, newButton, saveButton, loadButton; function addEditorButton()
function drawTestButton()
{ {
var border, backColor, text; editorButton = [];
var textSting = "TEST"; editorButtonMouseOverId = -1;
var width = textSting.length * tileWScale; drawNewButton();
var x = 8.5*(tileWScale+EDIT_PADDING)+EDIT_PADDING; drawLoadButton();
var y = canvas.height - tileHScale - editBorder; drawTestButton();
drawSaveButton();
testButton = new createjs.Container(); enableTestButton();
//child id = 0
border = new createjs.Shape();
border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, width+editBorder*2, tileHScale+editBorder*2).endFill();
//child id = 1
backColor = new createjs.Shape();
backColor.graphics.beginFill("#FFF").drawRect(0, 0, width, tileHScale).endFill();
testButton.addChild(border, backColor);
//child id = 2
drawText(0, 0, textSting, testButton);
testButton.x = x;
testButton.y = y;
testButton.on('click', testButtonClick);
testButton.on('mouseover', testButtonMouseOver);
testButton.on('mouseout', testButtonMouseOut);
testButton.alpha = 0;
mainStage.addChild(testButton);
function testButtonClick()
{
mainStage.cursor = 'default';
startTestMode();
}
function testButtonMouseOver()
{
var border = this.getChildAt(0);
border.graphics.clear();
border.graphics.beginFill("red").drawRect(-editBorder, -editBorder, 4*tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
var backColor = this.getChildAt(1);
backColor.graphics.clear();
backColor.graphics.beginFill("#ffa").drawRect(0, 0, width, tileHScale).endFill();
mainStage.cursor = 'pointer';
mouseOver = 1;
}
function testButtonMouseOut()
{
var border = this.getChildAt(0);
border.graphics.clear();
border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, 4*tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
var backColor = this.getChildAt(1);
backColor.graphics.clear();
backColor.graphics.beginFill("#FFF").drawRect(0, 0, width, tileHScale).endFill();
mouseOver = 0;
}
}
function drawSaveButton()
{
var border, backColor, text;
var textSting = "SAVE";
var width = textSting.length * tileWScale;
var x = 13*(tileWScale+EDIT_PADDING)+EDIT_PADDING;
var y = canvas.height - tileHScale - editBorder;
saveButton = new createjs.Container();
//child id = 0
border = new createjs.Shape();
border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, width+editBorder*2, tileHScale+editBorder*2).endFill();
//child id = 1
backColor = new createjs.Shape();
backColor.graphics.beginFill("#FFF").drawRect(0, 0, width, tileHScale).endFill();
saveButton.addChild(border, backColor);
//child id = 2
drawText(0, 0, textSting, saveButton);
saveButton.x = x;
saveButton.y = y;
saveButton.on('click', saveButtonClick);
saveButton.on('mouseover', saveButtonMouseOver);
saveButton.on('mouseout', saveButtonMouseOut);
saveButton.alpha = 0;
mainStage.addChild(saveButton);
function saveButtonClick()
{
stopEditTicker();
saveEditLevel();
yesNoDialog(["Save Successful", "Play It ?"], yesBitmap, noBitmap, mainStage, tileScale, playConfirm);
}
function saveButtonMouseOver()
{
var border = this.getChildAt(0);
border.graphics.clear();
border.graphics.beginFill("red").drawRect(-editBorder, -editBorder, 4*tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
var backColor = this.getChildAt(1);
backColor.graphics.clear();
backColor.graphics.beginFill("#ffa").drawRect(0, 0, width, tileHScale).endFill();
mainStage.cursor = 'pointer';
mouseOver = 1;
}
function saveButtonMouseOut()
{
var border = this.getChildAt(0);
border.graphics.clear();
border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, 4*tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
var backColor = this.getChildAt(1);
backColor.graphics.clear();
backColor.graphics.beginFill("#fff").drawRect(0, 0, width, tileHScale).endFill();
mouseOver = 0;
}
function playConfirm(rc)
{
if(rc) { //yes
clearTestLevel(); //clear current edit level
startPlayUserLevel();
} else { //no
//enableTestButton();
setButtonState();
startEditTicker();
}
}
function startPlayUserLevel()
{
playMode = PLAY_MODERN;
playData = PLAY_DATA_USERDEF;
curLevel = testLevelInfo.level;
setModernInfo();
canvasReSize();
document.onkeydown = handleKeyDown;
initShowDataMsg();
startGame();
}
}
function editLevelModified()
{
return (testLevelInfo.modified);
}
function editConfirmAbortState(callbackFun)
{
stopEditTicker();
yesNoDialog(["Abort current editing ?"], yesBitmap, noBitmap, mainStage, tileScale,
function(rc) { if(rc) callbackFun(); else startEditTicker(); });
} }
function drawNewButton() function drawNewButton()
@@ -655,10 +434,12 @@ function drawNewButton()
newButton.x = x; newButton.x = x;
newButton.y = y; newButton.y = y;
newButton.on('click', newButtonClick); newButton.on('click', newButtonClick);
newButton.on('mouseover', newButtonMouseOver);
newButton.on('mouseout', newButtonMouseOut);
mainStage.addChild(newButton); mainStage.addChild(newButton);
newButton.x1 = x + width;
newButton.y1 = y + tileHScale;
editorButton[editorButton.length] = newButton;
function newLevel(rc) function newLevel(rc)
{ {
if(rc) { if(rc) {
@@ -677,10 +458,12 @@ function drawNewButton()
testLevelInfo.fromLevel = -1; testLevelInfo.fromLevel = -1;
} }
startEditTicker(); startEditTicker();
gameResume();
} }
function newButtonClick() function newButtonClick()
{ {
gamePause();
stopEditTicker(); stopEditTicker();
if(testLevelInfo.modified) { if(testLevelInfo.modified) {
yesNoDialog(["Abort current editing ?"], yesBitmap, noBitmap, mainStage, tileScale, newLevel); yesNoDialog(["Abort current editing ?"], yesBitmap, noBitmap, mainStage, tileScale, newLevel);
@@ -688,41 +471,8 @@ function drawNewButton()
newLevel(1); newLevel(1);
} }
} }
function newButtonMouseOver()
{
var border = this.getChildAt(0);
border.graphics.clear();
border.graphics.beginFill("red").drawRect(-editBorder, -editBorder, 3*tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
var backColor = this.getChildAt(1);
backColor.graphics.clear();
backColor.graphics.beginFill("#ffa").drawRect(0, 0, width, tileHScale).endFill();
mainStage.cursor = 'pointer';
mouseOver = 1;
} }
function newButtonMouseOut()
{
var border = this.getChildAt(0);
border.graphics.clear();
border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, 3*tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
var backColor = this.getChildAt(1);
backColor.graphics.clear();
backColor.graphics.beginFill("#fff").drawRect(0, 0, width, tileHScale).endFill();
mouseOver = 0;
}
}
//========================
// LOAD BUTTON
// 05/21/2015
//========================
function drawLoadButton() function drawLoadButton()
{ {
var border, backColor, text; var border, backColor, text;
@@ -754,22 +504,25 @@ function drawLoadButton()
loadButton.x = x; loadButton.x = x;
loadButton.y = y; loadButton.y = y;
loadButton.on('click', loadButtonClick); loadButton.on('click', loadButtonClick);
loadButton.on('mouseover', loadButtonMouseOver);
loadButton.on('mouseout', loadButtonMouseOut);
mainStage.addChild(loadButton); mainStage.addChild(loadButton);
initLoadVariable(); initLoadVariable();
loadButton.x1 = x + width;
loadButton.y1 = y + tileHScale;
editorButton[editorButton.length] = loadButton;
function saveState() function saveState()
{ {
saveStateObj = saveKeyHandler(noKeyDown); //saveStateObj = saveKeyHandler(noKeyDown);
gamePause();
stopEditTicker(); stopEditTicker();
} }
function restoreState() function restoreState()
{ {
restoreKeyHandler(saveStateObj); //restoreKeyHandler(saveStateObj);
startEditTicker(); startEditTicker();
gameResume();
} }
function initLoadVariable() function initLoadVariable()
@@ -830,67 +583,178 @@ function drawLoadButton()
loadExistLevel(1); loadExistLevel(1);
} }
} }
function loadButtonMouseOver()
{
var border = this.getChildAt(0);
border.graphics.clear();
border.graphics.beginFill("red").drawRect(-editBorder, -editBorder, 4*tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
var backColor = this.getChildAt(1);
backColor.graphics.clear();
backColor.graphics.beginFill("#ffa").drawRect(0, 0, width, tileHScale).endFill();
mainStage.cursor = 'pointer';
mouseOver = 1;
} }
function loadButtonMouseOut() function drawTestButton()
{ {
var border = this.getChildAt(0); var border, backColor, text;
var textSting = "TEST";
border.graphics.clear(); var width = textSting.length * tileWScale;
border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, 4*tileWScale+editBorder*2, tileHScale+editBorder*2).endFill(); var x = 8.5*(tileWScale+EDIT_PADDING)+EDIT_PADDING;
var y = canvas.height - tileHScale - editBorder;
var backColor = this.getChildAt(1); testButton = new createjs.Container();
backColor.graphics.clear();
backColor.graphics.beginFill("#fff").drawRect(0, 0, width, tileHScale).endFill();
mouseOver = 0; //child id = 0
} border = new createjs.Shape();
} border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, width+editBorder*2, tileHScale+editBorder*2).endFill();
function setButtonState() //child id = 1
{ backColor = new createjs.Shape();
if(testLevelInfo.level > MAX_EDIT_LEVEL) { backColor.graphics.beginFill("#FFF").drawRect(0, 0, width, tileHScale).endFill();
newButton.alpha = 0;
testButton.addChild(border, backColor);
//child id = 2
drawText(0, 0, textSting, testButton);
testButton.x = x;
testButton.y = y;
testButton.on('click', testButtonClick);
testButton.alpha = 0; testButton.alpha = 0;
saveButton.alpha = 0; mainStage.addChild(testButton);
editWarningMsg(0);
return; testButton.x1 = x + width;
} else { testButton.y1 = y + tileHScale;
newButton.alpha = 1; editorButton[editorButton.length] = testButton;
editWarningMsg(1);
function testButtonClick()
{
//mainStage.cursor = 'default';
startTestMode();
}
} }
if(testLevelInfo.modified) { function drawSaveButton()
enableTestButton(); {
if(testLevelInfo.pass) { var border, backColor, text;
saveButton.alpha = 1; var textSting = "SAVE";
} else {
var width = textSting.length * tileWScale;
var x = 13*(tileWScale+EDIT_PADDING)+EDIT_PADDING;
var y = canvas.height - tileHScale - editBorder;
saveButton = new createjs.Container();
//child id = 0
border = new createjs.Shape();
border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, width+editBorder*2, tileHScale+editBorder*2).endFill();
//child id = 1
backColor = new createjs.Shape();
backColor.graphics.beginFill("#FFF").drawRect(0, 0, width, tileHScale).endFill();
saveButton.addChild(border, backColor);
//child id = 2
drawText(0, 0, textSting, saveButton);
saveButton.x = x;
saveButton.y = y;
saveButton.on('click', saveButtonClick);
saveButton.alpha = 0; saveButton.alpha = 0;
mainStage.addChild(saveButton);
saveButton.x1 = x + width;
saveButton.y1 = y + tileHScale;
editorButton[editorButton.length] = saveButton;
function saveButtonClick()
{
gamePause();
stopEditTicker();
saveEditLevel();
yesNoDialog(["Save Successful", "Play It ?"], yesBitmap, noBitmap, mainStage, tileScale, playConfirm);
} }
} else {
testLevelInfo.pass = 0; function playConfirm(rc)
saveButton.alpha = 0; {
gameResume();
if(rc) { //yes
clearTestLevel(); //clear current edit level
startPlayUserLevel();
} else { //no
setButtonState();
startEditTicker();
} }
} }
function startPlayUserLevel()
{
playMode = PLAY_MODERN;
playData = PLAY_DATA_USERDEF;
curLevel = testLevelInfo.level;
setModernInfo();
canvasReSize();
document.onkeydown = handleKeyDown;
initShowDataMsg();
startGame();
}
}
//=======================
// BEGIN for TEST Mode
//=======================
function startTestMode()
{
playMode = PLAY_TEST;
playData = PLAY_DATA_USERDEF;
curLevel = testLevelInfo.level;
stopEditTicker();
saveTestState();
canvasReSize();
document.onkeydown = handleKeyDown; //key press
selectIconObj.disable(1);
initShowDataMsg();
startGame();
}
function saveTestState()
{
map2LevelData();
setTestLevel(testLevelInfo);
}
function back2EditMode(rc)
{
if(rc == 1) { //pass
testLevelInfo.pass = 1;
setTestLevel(testLevelInfo);
//enableSaveButton();
} else { //fail
//if(testLevelInfo.pass && !testLevelInfo.modified) enableSaveButton();
}
startEditMode();
}
function getTestLevelMap(initValue)
{
return testLevelInfo.levelMap;
}
function enableTestButton() function enableTestButton()
{ {
if(lastRunner) testButton.alpha = 1; if(lastRunner) testButton.alpha = 1;
} }
//==========================
function editLevelModified()
{
return (testLevelInfo.modified);
}
function editConfirmAbortState(callbackFun)
{
gamePause();
stopEditTicker();
yesNoDialog(["Abort current editing ?"], yesBitmap, noBitmap, mainStage, tileScale,
function(rc) { gameResume(); if(rc) callbackFun(); else startEditTicker(); } );
}
function disableTestButton() function disableTestButton()
{ {
@@ -928,10 +792,6 @@ function saveEditLevel()
setEditSelectMenu(); setEditSelectMenu();
} }
var mouseDown = 0;
var lastDown = {x:-1, y:-1};
function stageMouseDown(event) function stageMouseDown(event)
{ {
mouseDown = 1; mouseDown = 1;
@@ -1148,6 +1008,115 @@ function editHandleKeyDown(event)
return true; return true;
} }
function checkTileMouseOver(x, y)
{
var curTile;
for(var i = 0; i < editorTile.length; i++) {
curTile = editorTile[i];
if(curTile.x <= x && curTile.y <= y && curTile.x1 >= x && curTile.y1 >= y) {
if(editorActiveTileId == i) return;
selectTileMouseOver(curTile);
if(editorActiveTileId >= 0) selectTileMouseOut(editorTile[editorActiveTileId]);
editorActiveTileId = i;
return;
}
}
if(editorActiveTileId >= 0) selectTileMouseOut(editorTile[editorActiveTileId]);
editorActiveTileId = -1;
}
function selectTileMouseOver(tile)
{
var border = tile.getChildAt(0);
border.graphics.clear();
border.graphics.beginFill("gold").drawRect(-editBorder, -editBorder, tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
//mouseOver = 1;
}
function selectTileMouseOut(tile)
{
var border = tile.getChildAt(0);
var color = (actTile.id == tile.myId)?"red":"black";
border.graphics.clear();
border.graphics.beginFill(color).drawRect(-editBorder, -editBorder, tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
//mouseOver = 0;
}
function checkButtonMouseOver(x, y)
{
var curButton;
for(var i = 0; i < editorButton.length; i++) {
curButton = editorButton[i];
if(curButton.x <= x && curButton.y <= y && curButton.x1 >= x && curButton.y1 >= y) {
if(editorButtonMouseOverId == i) return;
editorButtonMouseOver(curButton);
if(editorButtonMouseOverId >= 0) editorButtonMouseOut(editorButton[editorButtonMouseOverId]);
editorButtonMouseOverId = i;
return;
}
}
if(editorButtonMouseOverId >= 0) editorButtonMouseOut(editorButton[editorButtonMouseOverId]);
editorButtonMouseOverId = -1;
}
function editorButtonMouseOver(button)
{
var border = button.getChildAt(0);
var width = button.x1-button.x;
border.graphics.clear();
border.graphics.beginFill("red").drawRect(-editBorder, -editBorder, width+editBorder*2, tileHScale+editBorder*2).endFill();
var backColor = button.getChildAt(1);
backColor.graphics.clear();
backColor.graphics.beginFill("#ffa").drawRect(0, 0, width, tileHScale).endFill();
//mouseOver = 1;
}
function editorButtonMouseOut(button)
{
var border = button.getChildAt(0);
var width = button.x1-button.x;
border.graphics.clear();
border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, width+editBorder*2, tileHScale+editBorder*2).endFill();
var backColor = button.getChildAt(1);
backColor.graphics.clear();
backColor.graphics.beginFill("#fff").drawRect(0, 0, width, tileHScale).endFill();
//mouseOver = 0;
}
function setButtonState()
{
if(testLevelInfo.level > MAX_EDIT_LEVEL) {
newButton.alpha = 0;
testButton.alpha = 0;
saveButton.alpha = 0;
editWarningMsg(0);
return;
} else {
newButton.alpha = 1;
editWarningMsg(1);
}
if(testLevelInfo.modified) {
enableTestButton();
if(testLevelInfo.pass) {
saveButton.alpha = 1;
} else {
saveButton.alpha = 0;
}
} else {
testLevelInfo.pass = 0;
saveButton.alpha = 0;
}
}
function editTick() function editTick()
{ {
var x = ((mainStage.mouseX-EDIT_PADDING - editStartX)/(tileWScale+EDIT_PADDING)); var x = ((mainStage.mouseX-EDIT_PADDING - editStartX)/(tileWScale+EDIT_PADDING));
@@ -1155,14 +1124,15 @@ function editTick()
var y = ((mainStage.mouseY-EDIT_PADDING) / (tileHScale+EDIT_PADDING) )| 0; var y = ((mainStage.mouseY-EDIT_PADDING) / (tileHScale+EDIT_PADDING) )| 0;
if(testLevelInfo.level > MAX_EDIT_LEVEL) { if(testLevelInfo.level > MAX_EDIT_LEVEL) {
mainStage.cursor = 'default';
mainStage.update();
return; return;
} }
//debug(mainStage.mouseX,editStartX, x,y); //debug(mainStage.mouseX,editStartX, x,y);
if(mouseInStage && x >= 0 && x < NO_OF_TILES_X && y >= 0 && y < NO_OF_TILES_Y) { if(mouseInStage && x >= 0 && x < NO_OF_TILES_X && y >= 0 && y < NO_OF_TILES_Y) {
//edit area //edit area
mainStage.cursor = 'pointer';
if(editorActiveTileId >= 0) selectTileMouseOut(editorTile[editorActiveTileId]);
if(editorButtonMouseOverId >= 0) editorButtonMouseOut(editorButton[editorButtonMouseOverId]);
if( x != lastDown.x || y != lastDown.y) { if( x != lastDown.x || y != lastDown.y) {
cursorTileObj.alpha = 1; cursorTileObj.alpha = 1;
cursorTileObj.x = (tileWScale + EDIT_PADDING) * x+EDIT_PADDING + editStartX; cursorTileObj.x = (tileWScale + EDIT_PADDING) * x+EDIT_PADDING + editStartX;
@@ -1171,7 +1141,7 @@ function editTick()
var clickTile = editMap[x][y]; var clickTile = editMap[x][y];
if(!actTile.id || clickTile.id == actTile.id) { if(!actTile.id || clickTile.id == actTile.id) {
if(actTile.id) cursorTileObj.alpha = 0; if(actTile.id) cursorTileObj.alpha = 0.1;
delManCheck(clickTile.id, x, y); delManCheck(clickTile.id, x, y);
clickTile.tile.getChildAt(1).image = emptyTile.image; clickTile.tile.getChildAt(1).image = emptyTile.image;
clickTile.id = emptyTile.id; clickTile.id = emptyTile.id;
@@ -1191,7 +1161,8 @@ function editTick()
} }
} }
} else { } else {
if(!mouseOver) mainStage.cursor = 'default'; checkTileMouseOver(mainStage.mouseX, mainStage.mouseY);
checkButtonMouseOver(mainStage.mouseX, mainStage.mouseY);
cursorTileObj.alpha = 0; cursorTileObj.alpha = 0;
} }
mainStage.update(); mainStage.update();
+255
Voir le fichier
@@ -0,0 +1,255 @@
var MAX_CONTROLLER = 4;
var gamepadReady = 0;
var gamepadPollingId = null;
var gamepadLastId = -1; //for send to server only
var requestAnimationFrame = window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame;
var cancelRequestAnimationFrame = window.cancelRequestAnimationFrame ||
window.webkitCancelRequestAnimationFrame ||
window.mozCancelRequestAnimationFrame;
function gamepadEnable()
{
if(!gamepadSupport()) return;
window.addEventListener("gamepadconnected",gamepadConnectFun, false);
window.addEventListener("gamepaddisconnected", gamepadDisconnectFun, false);
gamepadPollingId = setInterval(gamepadCheck, 500);
}
function gamepadSupport()
{
return ("getGamepads" in navigator) || ("webkitGetGamepads" in navigator);
}
function gamepadConnectFun(e)
{
//console.log("Gamepad connected at index %d: %s. %d buttons, %d axes.",
// e.gamepad.index, e.gamepad.id,
// e.gamepad.buttons.length, e.gamepad.axes.length);
gamepadReady = 1;
if(gamepadPollingId) {
clearInterval(gamepadPollingId);
gamepadPollingId = null;
}
requestAnimationFrame(gamepadRequestState);
}
function gamepadDisconnectFun(e)
{
console.log("disconnection game port#%d", e.gamepad.index );
gamepadReady = 0;
if(!gamepadPollingId) gamepadPollingId = setInterval(gamepadCheck, 500);
}
function gamepadCheck()
{
gamepad = gamepadGetInstance();
for(var id=0; id < MAX_CONTROLLER; id ++) {
if(gamepad[id]) {
if(!gamepadReady) {
gamepadConnectTrigger(gamepad[id]);
}
}
}
}
function gamepadGetInstance()
{
return ("getGamepads" in navigator) ?
navigator.getGamepads() :
(("webkitGetGamepads" in navigator) ? navigator.webkitGetGamepads() : []);
}
//=================================
// Generate gamepadconnected event
//=================================
function gamepadConnectTrigger(gamepad)
{
var event = document.createEvent('Event');
event.initEvent("gamepadconnected", true, true); //can bubble, and is cancellable
event.gamepad = gamepad;
dispatchEvent(event);
}
function gamepadDisable()
{
if(!gamepadSupport()) return;
window.removeEventListener("gamepadconnected",gamepadConnectFun, false);
window.removeEventListener("gamepaddisconnected", gamepadDisconnectFun, false);
if(gamepadPollingId) {
clearInterval(gamepadPollingId);
gamepadPollingId = null;
}
gamepadReady = 0;
}
function getLastGamepadInfo()
{
var gamepadInfo = null;
if(gamepadLastId >= 0 && gamepadLastId < MAX_CONTROLLER ) {
var gamepad = gamepadGetInstance()[gamepadLastId];
if(gamepad) {
gamepadInfo =gamepad.index + "." + gamepad.id +
(gamepad.mapping != ""?("." +gamepad.mapping):"");
}
}
return gamepadInfo;
}
//===========================================================================
var keyCodeMapping = [
//[[keyCode1, ctrl, shift], [keyCode2, ctrl, shift]
[[KEYCODE_UP, 0, 0], [KEYCODE_UP, 0, 0]], //up
[[KEYCODE_DOWN, 0, 0], [KEYCODE_DOWN, 0, 0]], //down
[[KEYCODE_LEFT, 0, 0], [KEYCODE_LEFT, 0, 0]], //left
[[KEYCODE_RIGHT, 0, 0], [KEYCODE_RIGHT, 0, 0]], //right
[[KEYCODE_Z, 0, 0], [KEYCODE_ENTER, 0, 0]], //dig-left
[[KEYCODE_X, 0, 0], [KEYCODE_ENTER, 0, 0]], //dig-right
[[KEYCODE_ESC, 0, 0], [KEYCODE_ENTER, 0, 0]], //pause
[[KEYCODE_ENTER, 0, 0], [KEYCODE_ENTER, 0, 0]], //enter
[[KEYCODE_A, 1, 0], [KEYCODE_ENTER, 0, 0]] //game abort
];
var gameButtonMapping = [
//index[0] buttonMethod: 0: don't repeat, 1: repeat, 2: combine button
[ 1, ['B', 12],['A', 1, "<", -0.6],['B', 16]], //UP
[ 1, ['B', 13],['A', 1, ">", 0.6],['B', 17]], //DOWN
[ 1, ['B', 14],['A', 0, "<", -0.6],['B', 18]], //LEFT
[ 1, ['B', 15],['A', 0, ">", 0.6],['B', 19]], //RIGHT
[ 1, ['B', 2],['B', 3]], //DIG-LEFT
[ 1, ['B', 1]], //DIG-RIGHT
[ 0, ['B', 8],['B', 11]], //PAUSE (ESC)
[ 0, ['B', 9]], //Enter (Accept)
[ 2, ['B', 4],['B', 5], ['B', 6],['B', 7]] //GAME ABORT (CTRL-A)
];
var lastButtonState = [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0]
];
function gamepadRequestState()
{
var i, j;
var gamepad, curButtonState;
var buttonMethod;
for(var id=0; id < MAX_CONTROLLER; id ++) {
gamepad = gamepadGetInstance()[id];
curButtonState = [];
if(gamepad) {
for(i = 0; i < gameButtonMapping.length; i++) {
curButtonState[i] = 0;
buttonMethod = gameButtonMapping[i][0];
for(j = 1; j < gameButtonMapping[i].length && !curButtonState[i]; j++) {
var curButtonMapping = gameButtonMapping[i][j];
switch(curButtonMapping[0]) {
case 'A': //axes
var axesId = curButtonMapping[1];
if(gamepad.axes.length > axesId) {
var axesCmpSign = curButtonMapping[2];
var axesCmpValue = curButtonMapping[3];
var axesValue = Math.trunc(gamepad.axes[axesId]*100)/100;
if(typeof axesValue != 'undefined' ) {
if( (axesCmpSign == ">" && axesValue > axesCmpValue && axesValue <= 1.05)
||(axesCmpSign == "<" && axesValue < axesCmpValue && axesValue >= -1.05) )
{
//console.log("axes#%d = %f", axesId, axesValue );
curButtonState[i] = 1;
}
}
}
break;
case 'B': //button
var buttonId = curButtonMapping[1];
var button = gamepad.buttons[buttonId];
if(buttonPressed(button))
curButtonState[i] = 1;
if(buttonMethod == 2) { //combine mode
j++;
if(curButtonState[i]) {
curButtonMapping = gameButtonMapping[i][j];
buttonId = curButtonMapping[1];
button = gamepad.buttons[buttonId];
if(buttonPressed(button)) {
curButtonState[i] = 1;
} else {
curButtonState[i] = 0;
}
}
}
break;
}
}
switch(buttonMethod) {
case 1: //repeat
if(document.onkeydown == handleKeyDown || document.onkeydown == anyKeyDown) {
if(curButtonState[i])sendKeyDown(keyCodeMapping[i], id);
else if(lastButtonState[id][i]) sendKeyUp(keyCodeMapping[i], id);
break;
}
case 0: //don't repeat
case 2:
if(lastButtonState[id][i] != curButtonState[i]) {
if(curButtonState[i])sendKeyDown(keyCodeMapping[i], id);
else if(lastButtonState[id][i]) sendKeyUp(keyCodeMapping[i], id);
}
break;
}
}
lastButtonState[id] = curButtonState;
}
}
if(gamepadReady) requestAnimationFrame(gamepadRequestState);
}
function buttonPressed(button)
{
var pressed = button == 1.0;
if (typeof(button) == "object") {
pressed = button.pressed;
}
return pressed;
}
function gamepadClearId()
{
gamepadLastId = -1;
}
function sendKeyUp(twinKey, id)
{
var key = (inputNameState)? twinKey[1]:twinKey[0];
if(key[0] == null) return;
var event = {keyCode: key[0], ctrlKey: key[1], shiftKey: key[2]};
//console.log("sendKeyUp = %d",keyCode );
if(typeof document.onkeydown == "function" ) document.onkeyup(event);
gamepadLastId = id;
}
function sendKeyDown(twinKey, id)
{
var key = (inputNameState)? twinKey[1]:twinKey[0];
if(key[0] == null) return;
var event = {keyCode: key[0], ctrlKey: key[1], shiftKey: key[2]};
//console.log("sendKeyDown = %d",keyCode );
if(typeof document.onkeydown == "function" ) document.onkeydown(event);
gamepadLastId = id;
}
+20 -6
Voir le fichier
@@ -221,6 +221,7 @@ function guardMoveStep( id, action)
} else } else
decGold(); //gold disappear decGold(); //gold disappear
curGuard.hasGold = 0; curGuard.hasGold = 0;
guardRemoveRedhat(curGuard); //9/4/2016
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@@ -236,6 +237,7 @@ function guardMoveStep( id, action)
decGold(); //gold disappear decGold(); //gold disappear
} }
curGuard.hasGold = 0; curGuard.hasGold = 0;
guardRemoveRedhat(curGuard); //9/4/2016
//---------------------------------------------------------------------- //----------------------------------------------------------------------
if( curShape == "fallRight") newShape = "shakeRight"; if( curShape == "fallRight") newShape = "shakeRight";
@@ -359,7 +361,7 @@ function guardMoveStep( id, action)
{ {
//curGuard.hasGold = ((Math.random()*26)+14)|0; //14 - 39 //curGuard.hasGold = ((Math.random()*26)+14)|0; //14 - 39
curGuard.hasGold = ((Math.random()*26)+12)|0; //12 - 37 change gold drop steps curGuard.hasGold = ((Math.random()*26)+12)|0; //12 - 37 change gold drop steps
guardWearRedhat(curGuard); //9/4/2016
if(playMode == PLAY_AUTO || playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) getDemoGold(curGuard); if(playMode == PLAY_AUTO || playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) getDemoGold(curGuard);
if(recordMode) processRecordGold(curGuard); if(recordMode) processRecordGold(curGuard);
removeGold(x, y); removeGold(x, y);
@@ -370,6 +372,18 @@ function guardMoveStep( id, action)
//checkCollision(runner.pos.x, runner.pos.y); //checkCollision(runner.pos.x, runner.pos.y);
} }
//meanings: guard with gold
function guardWearRedhat(guard)
{
if(redhatMode) guard.sprite.spriteSheet = redhatData;
}
//meanings: guard without gold
function guardRemoveRedhat(guard)
{
if(redhatMode) guard.sprite.spriteSheet = guardData;
}
function dropGold(id) function dropGold(id)
{ {
var curGuard = guard[id]; var curGuard = guard[id];
@@ -381,7 +395,7 @@ function dropGold(id)
curGuard.hasGold--; // count > 1, don't drop it only decrease count curGuard.hasGold--; // count > 1, don't drop it only decrease count
//loadingTxt.text = "(" + id + ") = " + curGuard.hasGold; //loadingTxt.text = "(" + id + ") = " + curGuard.hasGold;
break; break;
case (curGuard.hasGold == 1): case (curGuard.hasGold == 1): //drop gold
var x = curGuard.pos.x, y = curGuard.pos.y; var x = curGuard.pos.x, y = curGuard.pos.y;
if(map[x][y].base == EMPTY_T && ( y >= maxTileY || if(map[x][y].base == EMPTY_T && ( y >= maxTileY ||
@@ -391,6 +405,7 @@ function dropGold(id)
addGold(x,y); addGold(x,y);
curGuard.hasGold = -1; //for record play action always use value = -1 curGuard.hasGold = -1; //for record play action always use value = -1
//curGuard.hasGold = -(((Math.random()*10)+1)|0); //-1 ~ -10; //waiting time for get gold //curGuard.hasGold = -(((Math.random()*10)+1)|0); //-1 ~ -10; //waiting time for get gold
guardRemoveRedhat(curGuard); //9/4/2016
drop = 1; drop = 1;
} }
break; break;
@@ -399,6 +414,7 @@ function dropGold(id)
//loadingTxt.text = "(" + id + ") = " + curGuard.hasGold; //loadingTxt.text = "(" + id + ") = " + curGuard.hasGold;
break; break;
} }
return drop;
} }
@@ -407,7 +423,7 @@ function dropGold(id)
//============================================= //=============================================
var DEBUG_TIME = 0; var DEBUG_TIME = 0;
var shakeRight = [ 8, 9, 10, 9, 10, 8 ]; var shakeRight = [ 8, 9, 10, 9, 10, 8 ];
var shakeLeft = [ 19, 20, 21, 20, 21, 19 ]; var shakeLeft = [ 30, 31, 32, 31, 32, 30 ];
var shakeTime = [ 36, 3, 3, 3, 3, 3 ]; var shakeTime = [ 36, 3, 3, 3, 3, 3 ];
var shakingGuardList = []; var shakingGuardList = [];
@@ -907,7 +923,7 @@ function setRunnerDead()
//=============================================== //===============================================
// BEGIN NEW FOR REBORN (ai version >= 3) // BEGIN NEW FOR REBORN (ai version >= 3)
//=============================================== //===============================================
var rebornFrame = [ 17, 18 ]; var rebornFrame = [ 28, 29 ];
var rebornTime = [ 6, 2 ]; var rebornTime = [ 6, 2 ];
var rebornGuardList = []; var rebornGuardList = [];
@@ -943,13 +959,11 @@ function processReborn()
curGuard.sprite.gotoAndStop(rebornFrame[curGuard.curFrameIdx]); curGuard.sprite.gotoAndStop(rebornFrame[curGuard.curFrameIdx]);
} else { } else {
//reborn //reborn
var id = rebornGuardList[i]; var id = rebornGuardList[i];
rebornGuardList.splice(i, 1); //remove from list rebornGuardList.splice(i, 1); //remove from list
rebornComplete(id); rebornComplete(id);
continue; continue;
} }
} }
i++; i++;
} }
+49 -2
Voir le fichier
@@ -1,3 +1,4 @@
var inputNameState = 0;
function showScoreTable(_playData, _curScoreInfo, _callbackFun, _waitTime) function showScoreTable(_playData, _curScoreInfo, _callbackFun, _waitTime)
{ {
@@ -143,7 +144,6 @@ function showScoreTable(_playData, _curScoreInfo, _callbackFun, _waitTime)
function drawHiScoreList() function drawHiScoreList()
{ {
//var title = playDataName[_playData-1] + " HIGH SCORES";
var title = playDataToTitleName(_playData); var title = playDataToTitleName(_playData);
var localHighScore = "LOCAL HIGH SCORES"; var localHighScore = "LOCAL HIGH SCORES";
var barTile; var barTile;
@@ -158,7 +158,7 @@ function showScoreTable(_playData, _curScoreInfo, _callbackFun, _waitTime)
//bar //bar
for(var x = 0; x < NO_OF_TILES_X; x++) { for(var x = 0; x < NO_OF_TILES_X; x++) {
barTile = new createjs.Bitmap(getThemeImage("ground")); barTile = getThemeBitmap("ground");
barTile.setTransform(x * tileWScale, 4.5*tileHScale , tileScale, tileScale); barTile.setTransform(x * tileWScale, 4.5*tileHScale , tileScale, tileScale);
scoreStage.addChild(barTile); scoreStage.addChild(barTile);
} }
@@ -208,6 +208,7 @@ function showScoreTable(_playData, _curScoreInfo, _callbackFun, _waitTime)
function initInput() function initInput()
{ {
inputNameState = 1;
curPos = playerName.length; curPos = playerName.length;
name = playerName.split(""); //string to array; name = playerName.split(""); //string to array;
nameText = []; //text object nameText = []; //text object
@@ -257,6 +258,8 @@ function showScoreTable(_playData, _curScoreInfo, _callbackFun, _waitTime)
createjs.Ticker.off("tick", hiScoreTicker); createjs.Ticker.off("tick", hiScoreTicker);
setTimeout( function() { closeScoreTable(); }, 1500); setTimeout( function() { closeScoreTable(); }, 1500);
inputNameState = 0;
} }
function removeNameText() function removeNameText()
@@ -279,6 +282,20 @@ function showScoreTable(_playData, _curScoreInfo, _callbackFun, _waitTime)
moveChild2Top(scoreStage, cursor); moveChild2Top(scoreStage, cursor);
} }
function nextChar(charValue, nextMode)
{
if(typeof(charValue) == "undefined")charValue = " ";
var code = charValue.charCodeAt(0);
if(nextMode >=0) code++; else code--;
if (code < 65 || code > 90) { //out of A-Z
if(nextMode >=0) code = 65;
else code= 90;
}
return String.fromCharCode(code);
}
function handleHiScoreName(event) function handleHiScoreName(event)
{ {
if(!event){ event = window.event; } //cross browser issues exist if(!event){ event = window.event; } //cross browser issues exist
@@ -324,6 +341,12 @@ function showScoreTable(_playData, _curScoreInfo, _callbackFun, _waitTime)
case (code == KEYCODE_RIGHT): //RIGHT case (code == KEYCODE_RIGHT): //RIGHT
if(curPos < name.length) curPos++; if(curPos < name.length) curPos++;
break; break;
case (code == KEYCODE_UP): //UP
name[curPos] = nextChar(name[curPos], 1);
break;
case (code == KEYCODE_DOWN): //DOWN
name[curPos] = nextChar(name[curPos], -1);
break;
case (code == KEYCODE_ENTER): //ENTER case (code == KEYCODE_ENTER): //ENTER
if(name.length > 0) inputFinish(true); //async if(name.length > 0) inputFinish(true); //async
else soundPlay("beep"); else soundPlay("beep");
@@ -410,6 +433,8 @@ function inputString(_stage, _maxSize, _startX, _startY, _defaultString, _callba
function initInput() function initInput()
{ {
inputNameState = 1;
curPos = _defaultString.length; // cursor start position curPos = _defaultString.length; // cursor start position
inputText = _defaultString.split(""); //string to array inputText = _defaultString.split(""); //string to array
inputObj = []; //text object inputObj = []; //text object
@@ -452,6 +477,20 @@ function inputString(_stage, _maxSize, _startX, _startY, _defaultString, _callba
document.onkeydown = savedKeyDownHander; document.onkeydown = savedKeyDownHander;
} }
function nextChar(charValue, nextMode)
{
if(typeof(charValue) == "undefined") charValue = " ";
var code = charValue.charCodeAt(0);
if(nextMode >=0) code++; else code--;
if (code < 65 || code > 90) { //out of A-Z
if(nextMode >=0) code = 65;
else code= 90;
}
return String.fromCharCode(code);
}
function handleStringInput(event) function handleStringInput(event)
{ {
if(!event){ event = window.event; } //cross browser issues exist if(!event){ event = window.event; } //cross browser issues exist
@@ -496,6 +535,12 @@ function inputString(_stage, _maxSize, _startX, _startY, _defaultString, _callba
case (code == KEYCODE_RIGHT): //RIGHT case (code == KEYCODE_RIGHT): //RIGHT
if(curPos < inputText.length) curPos++; if(curPos < inputText.length) curPos++;
break; break;
case (code == KEYCODE_UP): //UP
inputText[curPos] = nextChar(inputText[curPos], 1);
break;
case (code == KEYCODE_DOWN): //DOWN
inputText[curPos] = nextChar(inputText[curPos], -1);
break;
case (code == KEYCODE_ENTER): //ENTER case (code == KEYCODE_ENTER): //ENTER
if(inputText.length > 0) { if(inputText.length > 0) {
inputFinish(); inputFinish();
@@ -528,5 +573,7 @@ function inputString(_stage, _maxSize, _startX, _startY, _defaultString, _callba
_stage.update(); _stage.update();
_callbackFun(inputText.join("")); _callbackFun(inputText.join(""));
inputNameState = 0;
} }
} }
+13 -10
Voir le fichier
@@ -2,9 +2,9 @@
<html> <html>
<head> <head>
<title>Lode Runner Web Game</title> <title>Lode Runner Web Game</title>
<!-- DON'T FORGET TO MODIFY *.web.html <!--
* ============================================================================= * ===================================================================================
* Lode Runner (超級運動員) - APPLE-II version * Lode Runner (超級運動員) - APPLE II & C64 version
* *
* This program is a HTML5 remake game. * This program is a HTML5 remake game.
* *
@@ -15,10 +15,11 @@
* http://www.kingstone.com.tw/book/book_page.asp?kmcode=2014710650538 * http://www.kingstone.com.tw/book/book_page.asp?kmcode=2014710650538
* http://www.amazon.co.jp/Lode-Runnerで学ぶ実践C言語-ビー・エヌ・エヌ企画部/dp/4893690116 * http://www.amazon.co.jp/Lode-Runnerで学ぶ実践C言語-ビー・エヌ・エヌ企画部/dp/4893690116
* *
* Source Code: https://github.com/SimonHung/LodeRunner * Source Code: https://github.com/SimonHung/LodeRunner_TotalRecall
* Web page: http://LodeRunnerWebGame.com
* *
* by Simon Hung 06/20/2014, 11/23/2014, 06/29/2015 (http://simonsays-tw.com) * by Simon Hung 06/20/2014, 11/23/2014, 06/29/2015, 09/28/2016
* ============================================================================= * ===================================================================================
--> -->
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" /> <meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="chrome=1, IE=edge"> <meta http-equiv="X-UA-Compatible" content="chrome=1, IE=edge">
@@ -29,9 +30,9 @@
<script type="text/javascript" src="lodeRunner.wData.js"></script> <script type="text/javascript" src="lodeRunner.wData.js"></script>
<script type="text/javascript" src="./lib/preloadjs-0.6.0.min.js"></script> <script type="text/javascript" src="./lib/preloadjs-0.6.2.min.js"></script>
<script type="text/javascript" src="./lib/soundjs-0.6.0.min.js"></script> <script type="text/javascript" src="./lib/soundjs-0.6.2.min.js"></script>
<script type="text/javascript" src="./lib/tweenjs-0.6.0.min.js"></script> <script type="text/javascript" src="./lib/tweenjs-0.6.2.min.js"></script>
<script type="text/javascript" src="./lib/easeljs-0.7.1.min.js"></script> <script type="text/javascript" src="./lib/easeljs-0.7.1.min.js"></script>
<script type="text/javascript" src="flag32Id.js"></script> <script type="text/javascript" src="flag32Id.js"></script>
@@ -57,9 +58,11 @@
<script type="text/javascript" src="lodeRunner.demoData1.js"></script> <script type="text/javascript" src="lodeRunner.demoData1.js"></script>
<script type="text/javascript" src="lodeRunner.edit.js"></script> <script type="text/javascript" src="lodeRunner.edit.js"></script>
<script type="text/javascript" src="lodeRunner.preload.js"></script> <script type="text/javascript" src="lodeRunner.preload.js"></script>
<script type="text/javascript" src="lodeRunner.colorTheme.js"></script>
<script type="text/javascript" src="lodeRunner.colorSelector.js"></script>
<script type="text/javascript" src="lodeRunner.gamepad.js"></script>
<script type="text/javascript" src="lodeRunner.main.js"></script> <script type="text/javascript" src="lodeRunner.main.js"></script>
<script type="text/javascript" src="lodeRunner.win.js"></script> <script type="text/javascript" src="lodeRunner.win.js"></script>
</head> </head>
<body onload="init();"> <body onload="init();">
<div class="canvas"> <div class="canvas">
+145 -286
Voir le fichier
@@ -1,3 +1,6 @@
var mouseOverBGColor = "#fefef1"; //icon background color while mouse over it
function mainMenuIconClass( _screenX1, _screenY1, _scale, _mainMenuBitmap) function mainMenuIconClass( _screenX1, _screenY1, _scale, _mainMenuBitmap)
{ {
//_scale = _scale*2/3; //_scale = _scale*2/3;
@@ -67,8 +70,6 @@ function mainMenuIconClass( _screenX1, _screenY1, _scale, _mainMenuBitmap)
mainMainCanvas.width = bitmapX+border*2; mainMainCanvas.width = bitmapX+border*2;
mainMainCanvas.height = bitmapY+border*2; mainMainCanvas.height = bitmapY+border*2;
//var left = (_screenX1 - mainMainCanvas.width - bitmapX/3),
// top = (_screenY1 - mainMainCanvas.height - bitmapY/4);
var left = (_screenX1 - mainMainCanvas.width - screenBorder), var left = (_screenX1 - mainMainCanvas.width - screenBorder),
top = bitmapY/2|0; top = bitmapY/2|0;
@@ -84,7 +85,7 @@ function mainMenuIconClass( _screenX1, _screenY1, _scale, _mainMenuBitmap)
menuIcon = new createjs.Container(); menuIcon = new createjs.Container();
menuBG = new createjs.Shape(); menuBG = new createjs.Shape();
menuBG.graphics.beginFill("#fefef1") menuBG.graphics.beginFill(mouseOverBGColor)
.drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill(); .drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill();
menuBG.alpha = 0; menuBG.alpha = 0;
menuIcon.addChild(menuBG); menuIcon.addChild(menuBG);
@@ -152,7 +153,6 @@ function mainMenuIconClass( _screenX1, _screenY1, _scale, _mainMenuBitmap)
function selectIconClass( _screenX1, _screenY1, _scale, _bitmap) function selectIconClass( _screenX1, _screenY1, _scale, _bitmap)
{ {
//_scale = _scale*2/3;
var border = 4 * _scale; var border = 4 * _scale;
var selectCanvas, stage; var selectCanvas, stage;
var selectIcon, selectBG; var selectIcon, selectBG;
@@ -220,9 +220,6 @@ function selectIconClass( _screenX1, _screenY1, _scale, _bitmap)
selectCanvas.width = bitmapX+border*2; selectCanvas.width = bitmapX+border*2;
selectCanvas.height = bitmapY+border*2; selectCanvas.height = bitmapY+border*2;
//var left = (_screenX1 - selectCanvas.width - bitmapX/3),
// top = bitmapY/4|0;
//top = (_screenY1 - selectCanvas.height - bitmapY/4);
var left = (_screenX1 - selectCanvas.width - screenBorder), var left = (_screenX1 - selectCanvas.width - screenBorder),
top = (selectCanvas.height + bitmapY)|0; top = (selectCanvas.height + bitmapY)|0;
@@ -238,7 +235,7 @@ function selectIconClass( _screenX1, _screenY1, _scale, _bitmap)
selectIcon = new createjs.Container(); selectIcon = new createjs.Container();
selectBG = new createjs.Shape(); selectBG = new createjs.Shape();
selectBG.graphics.beginFill("#fefef1") selectBG.graphics.beginFill(mouseOverBGColor)
.drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill(); .drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill();
selectBG.alpha = 0; selectBG.alpha = 0;
selectIcon.addChild(selectBG); selectIcon.addChild(selectBG);
@@ -288,9 +285,6 @@ function selectIconClass( _screenX1, _screenY1, _scale, _bitmap)
function activeSelectPlay(level) function activeSelectPlay(level)
{ {
//debug("time play:" + level);
//if(callbackFun != null) callbackFun();
soundStop(soundDig); soundStop(soundDig);
soundStop(soundFall); soundStop(soundFall);
switch(playMode) { switch(playMode) {
@@ -343,18 +337,8 @@ function selectIconClass( _screenX1, _screenY1, _scale, _bitmap)
} }
} }
//==============================================================
//
// Champ icon will open a new window contains world high score
// while back to lode runner main window (onfocus) will auto
// close "lode runner world high score" window
//
// 10/08/2014
//==============================================================
function demoIconClass( _screenX1, _screenY1, _scale, _bitmap) function demoIconClass( _screenX1, _screenY1, _scale, _bitmap)
{ {
//_scale = _scale*2/3;
var border = 4 * _scale; var border = 4 * _scale;
var canvas, stage; var canvas, stage;
var iconObj, bgObj; var iconObj, bgObj;
@@ -442,7 +426,7 @@ function demoIconClass( _screenX1, _screenY1, _scale, _bitmap)
//create background shape //create background shape
bgObj = new createjs.Shape(); bgObj = new createjs.Shape();
bgObj.graphics.beginFill("#fefef1") bgObj.graphics.beginFill(mouseOverBGColor)
.drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill(); .drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill();
bgObj.alpha = 0; bgObj.alpha = 0;
@@ -485,7 +469,7 @@ function demoIconClass( _screenX1, _screenY1, _scale, _bitmap)
demoSoundOff = 1; //always sound off when start demo demoSoundOff = 1; //always sound off when start demo
playMode = PLAY_DEMO_ONCE; playMode = PLAY_DEMO_ONCE;
anyKeyStopDemo(); anyKeyStopDemo();
////setDemoInfo(); //save curLevel to demo info
startGame(1); startGame(1);
setTimeout(function() {showTipsText("HIT ANY KEY TO STOP DEMO", 3500);}, 50); setTimeout(function() {showTipsText("HIT ANY KEY TO STOP DEMO", 3500);}, 50);
} }
@@ -505,7 +489,6 @@ function demoIconClass( _screenX1, _screenY1, _scale, _bitmap)
function soundIconClass( _screenX1, _screenY1, _scale, _soundOnBitmap, _soundOffBitmap) function soundIconClass( _screenX1, _screenY1, _scale, _soundOnBitmap, _soundOffBitmap)
{ {
//_scale = _scale*2/3;
var border = 4 * _scale; var border = 4 * _scale;
var canvas, stage; var canvas, stage;
var iconObj, bgObj; var iconObj, bgObj;
@@ -603,13 +586,13 @@ function soundIconClass( _screenX1, _screenY1, _scale, _soundOnBitmap, _soundOff
//create background shape //create background shape
bgObj = new createjs.Shape(); bgObj = new createjs.Shape();
bgObj.graphics.beginFill("#fefef1") bgObj.graphics.beginFill(mouseOverBGColor)
.drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill(); .drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill();
bgObj.alpha = 0; bgObj.alpha = 0;
//change bitmap size //change bitmap size
_soundOnBitmap.setTransform(border, border, _scale, _scale); //sound on bitmap _soundOnBitmap.setTransform(border, border, _scale, _scale);
_soundOffBitmap.setTransform(border, border, _scale, _scale); //sound iff bitmap _soundOffBitmap.setTransform(border, border, _scale, _scale);
iconObj.set({alpha:0}) iconObj.set({alpha:0})
@@ -618,8 +601,6 @@ function soundIconClass( _screenX1, _screenY1, _scale, _soundOnBitmap, _soundOff
stage.update(); stage.update();
} }
function mouseOver() function mouseOver()
{ {
if( gameState == GAME_PAUSE || (gameState != GAME_START && gameState != GAME_RUNNING) ) return; if( gameState == GAME_PAUSE || (gameState != GAME_START && gameState != GAME_RUNNING) ) return;
@@ -650,9 +631,7 @@ function soundIconClass( _screenX1, _screenY1, _scale, _soundOnBitmap, _soundOff
mouseOut(); mouseOut();
} }
init(); init();
} }
function repeatActionIconClass( _screenX1, _screenY1, _scale, _repeatActionOnBitmap, _repeatActionOffBitmap) function repeatActionIconClass( _screenX1, _screenY1, _scale, _repeatActionOnBitmap, _repeatActionOffBitmap)
@@ -722,7 +701,6 @@ function repeatActionIconClass( _screenX1, _screenY1, _scale, _repeatActionOnBit
canvas.height = bitmapY+border*2; canvas.height = bitmapY+border*2;
var left = (_screenX1 - canvas.width - screenBorder), var left = (_screenX1 - canvas.width - screenBorder),
//top = (_screenY1 - bitmapY*4.8)|0;
top = (_screenY1 - bitmapY*6.4)|0; top = (_screenY1 - bitmapY*6.4)|0;
canvas.style.left = left + "px"; canvas.style.left = left + "px";
@@ -748,13 +726,13 @@ function repeatActionIconClass( _screenX1, _screenY1, _scale, _repeatActionOnBit
//create background shape //create background shape
bgObj = new createjs.Shape(); bgObj = new createjs.Shape();
bgObj.graphics.beginFill("#fefef1") bgObj.graphics.beginFill(mouseOverBGColor)
.drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill(); .drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill();
bgObj.alpha = 0; bgObj.alpha = 0;
//change bitmap size //change bitmap size
_repeatActionOnBitmap.setTransform(border, border, _scale, _scale); //sound on bitmap _repeatActionOnBitmap.setTransform(border, border, _scale, _scale);
_repeatActionOffBitmap.setTransform(border, border, _scale, _scale); //sound iff bitmap _repeatActionOffBitmap.setTransform(border, border, _scale, _scale);
iconObj.set({alpha:0}) iconObj.set({alpha:0})
@@ -861,7 +839,6 @@ function infoIconClass( _screenX1, _screenY1, _scale, _bitmap)
canvas.height = bitmapY+border*2; canvas.height = bitmapY+border*2;
var left = (_screenX1 - canvas.width - screenBorder), var left = (_screenX1 - canvas.width - screenBorder),
//top = (_screenY1 - bitmapY*3.2);
top = (_screenY1 - bitmapY*4.8); top = (_screenY1 - bitmapY*4.8);
canvas.style.left = left + "px"; canvas.style.left = left + "px";
@@ -877,7 +854,7 @@ function infoIconClass( _screenX1, _screenY1, _scale, _bitmap)
//create background shape //create background shape
bgObj = new createjs.Shape(); bgObj = new createjs.Shape();
bgObj.graphics.beginFill("#fefef1") bgObj.graphics.beginFill(mouseOverBGColor)
.drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill(); .drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill();
bgObj.alpha = 0; bgObj.alpha = 0;
@@ -948,7 +925,6 @@ function infoIconClass( _screenX1, _screenY1, _scale, _bitmap)
function helpIconClass( _screenX1, _screenY1, _scale, _bitmap) function helpIconClass( _screenX1, _screenY1, _scale, _bitmap)
{ {
//_scale = _scale*2/3;
var border = 4 * _scale; var border = 4 * _scale;
var canvas, stage; var canvas, stage;
var iconObj, bgObj; var iconObj, bgObj;
@@ -1015,7 +991,6 @@ function helpIconClass( _screenX1, _screenY1, _scale, _bitmap)
canvas.height = bitmapY+border*2; canvas.height = bitmapY+border*2;
var left = (_screenX1 - canvas.width - screenBorder), var left = (_screenX1 - canvas.width - screenBorder),
//top = (_screenY1 - bitmapY*1.6);
top = (_screenY1 - bitmapY*3.2); top = (_screenY1 - bitmapY*3.2);
canvas.style.left = left + "px"; canvas.style.left = left + "px";
@@ -1031,7 +1006,7 @@ function helpIconClass( _screenX1, _screenY1, _scale, _bitmap)
//create background shape //create background shape
bgObj = new createjs.Shape(); bgObj = new createjs.Shape();
bgObj.graphics.beginFill("#fefef1") bgObj.graphics.beginFill(mouseOverBGColor)
.drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill(); .drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill();
bgObj.alpha = 0; bgObj.alpha = 0;
@@ -1103,7 +1078,6 @@ function helpIconClass( _screenX1, _screenY1, _scale, _bitmap)
function themeIconClass( _screenX1, _screenY1, _scale, _themeBitmapApple2, _themeBitmapC64) function themeIconClass( _screenX1, _screenY1, _scale, _themeBitmapApple2, _themeBitmapC64)
{ {
//_scale = _scale*2/3;
var border = 4 * _scale; var border = 4 * _scale;
var themeCanvas, stage; var themeCanvas, stage;
var themeIcon, themeBG; var themeIcon, themeBG;
@@ -1115,6 +1089,8 @@ function themeIconClass( _screenX1, _screenY1, _scale, _themeBitmapApple2, _them
var self = this; var self = this;
var enabled = 0; var enabled = 0;
var outColor = backgroundColor;
init(); init();
function init() function init()
@@ -1171,7 +1147,6 @@ function themeIconClass( _screenX1, _screenY1, _scale, _themeBitmapApple2, _them
themeCanvas.height = bitmapY+border*2; themeCanvas.height = bitmapY+border*2;
var left = (_screenX1 - themeCanvas.width - screenBorder), var left = (_screenX1 - themeCanvas.width - screenBorder),
//top = (_screenY1 - themeCanvas.height)/2|0;
top = (_screenY1 - bitmapY*1.5); top = (_screenY1 - bitmapY*1.5);
themeCanvas.style.left = left + "px"; themeCanvas.style.left = left + "px";
@@ -1187,9 +1162,9 @@ function themeIconClass( _screenX1, _screenY1, _scale, _themeBitmapApple2, _them
//create background shape //create background shape
themeBG = new createjs.Shape(); themeBG = new createjs.Shape();
themeBG.graphics.beginFill("#fefef1") themeBG.graphics.beginFill(outColor)
.drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill(); .drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill();
themeBG.alpha = 0; //themeBG.alpha = 0;
//change bitmap size //change bitmap size
_themeBitmapApple2.setTransform(border, border, _scale, _scale); _themeBitmapApple2.setTransform(border, border, _scale, _scale);
@@ -1198,7 +1173,6 @@ function themeIconClass( _screenX1, _screenY1, _scale, _themeBitmapApple2, _them
themeIcon.set({alpha:0}) themeIcon.set({alpha:0})
stage.addChild(themeIcon); stage.addChild(themeIcon);
updateThemeImage(0); updateThemeImage(0);
//stage.update();
} }
function updateThemeImage(showTips) function updateThemeImage(showTips)
@@ -1219,41 +1193,35 @@ function themeIconClass( _screenX1, _screenY1, _scale, _themeBitmapApple2, _them
function mouseOver() function mouseOver()
{ {
if(gameState == GAME_PAUSE || (gameState == GAME_WAITING && playMode != PLAY_EDIT) || if(gameState == GAME_PAUSE || (gameState == GAME_WAITING && playMode != PLAY_EDIT)) return;
(gameState != GAME_START && playMode != PLAY_DEMO && playMode != PLAY_DEMO_ONCE && playMode != PLAY_EDIT))
return;
stage.cursor = "pointer"; stage.cursor = "pointer";
themeBG.alpha = 1;
stage.update(); stage.update();
} }
function mouseOut() function mouseOut()
{ {
stage.cursor = "default"; stage.cursor = "default";
themeBG.alpha = 0;
stage.update(); stage.update();
} }
function mouseClick() function mouseClick()
{ {
if(gameState == GAME_PAUSE || (gameState == GAME_WAITING && playMode != PLAY_EDIT) || if(gameState == GAME_PAUSE || (gameState == GAME_WAITING && playMode != PLAY_EDIT)) return;
(gameState != GAME_START && playMode != PLAY_DEMO && playMode != PLAY_DEMO_ONCE && playMode != PLAY_EDIT))
return;
curTheme = (curTheme == THEME_APPLE2?THEME_C64:THEME_APPLE2); curTheme = (curTheme == THEME_APPLE2?THEME_C64:THEME_APPLE2);
saveState(); saveState();
soundStop(soundDig); soundStop(soundDig);
soundStop(soundFall); soundStop(soundFall);
themeDataReset(); themeDataReset(1);
updateThemeImage(1); updateThemeImage(1);
mouseOut(); themeColorIconUpdate();
if(playMode == PLAY_EDIT) { if(playMode == PLAY_EDIT) {
startEditMode(); startEditMode();
} else { } else {
startGame(1); changeThemeScreen(); //real time change theme screen
} }
} }
@@ -1263,237 +1231,128 @@ function themeIconClass( _screenX1, _screenY1, _scale, _themeBitmapApple2, _them
if(playMode == PLAY_EDIT) { if(playMode == PLAY_EDIT) {
if(editLevelModified()) saveTestState(); if(editLevelModified()) saveTestState();
stopEditTicker(); stopEditTicker();
}
}
}
function themeColorIconUpdate()
{
themeColorObj.themeChange();
}
//======================================
// BEGIN: Change Theme Screen real time
//======================================
function changeThemeScreen()
{
rebuildMap();
//Change runner theme
runner.sprite.spriteSheet = runnerData;
//change guard theme
for(var i = 0; i < guardCount; i++) {
if(redhatMode && guard[i].hasGold > 0)
guard[i].sprite.spriteSheet = redhatData;
else
guard[i].sprite.spriteSheet = guardData;
}
//change holeObj theme
holeObj.sprite.spriteSheet = holeData;
//change fillHoleObj theme
for(var i = 0; i < fillHoleObj.length; i++) {
fillHoleObj[i].spriteSheet = holeData;
}
moveSprite2Top();
clearGround();
clearInfo();
initInfoVariable();
buildGroundInfo();
}
function rebuildMap()
{
var curTile;
for(var x = 0; x < NO_OF_TILES_X; x++) {
for(var y = 0; y < NO_OF_TILES_Y; y++) {
switch(map[x][y].base) {
default:
case EMPTY_T: //empty
continue;
case BLOCK_T: //Normal Brick
curTile = getThemeBitmap("brick");
if(map[x][y].bitmap.alpha < 1) curTile.set({alpha:0}); //hide brick digging
break;
case SOLID_T: //Solid Brick
curTile = getThemeBitmap("solid");
break;
case LADDR_T: //Ladder
curTile = getThemeBitmap("ladder");
break;
case BAR_T: //Line of rope
curTile = getThemeBitmap("rope");
break;
case TRAP_T: //False brick
curTile = getThemeBitmap("brick");
if(map[x][y].bitmap.alpha < 1) curTile.set({alpha:0.5}); //show trap tile
break;
case HLADR_T: //Ladder appears at end of level
curTile = getThemeBitmap("ladder");
curTile.set({alpha:0}); //hide the laddr
break;
case GOLD_T: //Gold
curTile = getThemeBitmap("gold");
break;
}
mainStage.removeChild(map[x][y].bitmap); //remove old
curTile.setTransform(x * tileWScale, y * tileHScale, tileScale, tileScale); //x,y, scaleX, scaleY
mainStage.addChild(curTile); //add new
map[x][y].bitmap = curTile; //replace bitmap
}
}
}
function clearGround()
{
for(var i = 0; i < groundTile.length; i++)
mainStage.removeChild(groundTile[i]);
}
function clearInfo()
{
var i;
if(playMode == PLAY_CLASSIC || playMode == PLAY_AUTO || playMode == PLAY_DEMO) {
for(i = 0; i < scoreTxt.length; i++) mainStage.removeChild(scoreTxt[i]);
for(i = 0; i < scoreTile.length; i++) mainStage.removeChild(scoreTile[i]);
if(playMode == PLAY_DEMO) {
for(i = 0; i < demoTxt.length; i++) mainStage.removeChild(demoTxt[i]);
} else { } else {
stopPlayTicker(); for(i = 0; i < lifeTxt.length; i++) mainStage.removeChild(lifeTxt[i]);
stopAllSpriteObj(); for(i = 0; i < lifeTile.length; i++) mainStage.removeChild(lifeTile[i]);
}
} }
} else { //PLAY_MODERN, PLAY_DEMO_ONCE
for(i = 0; i < goldTxt.length; i++) mainStage.removeChild(goldTxt[i]);
for(i = 0; i < goldTile.length; i++) mainStage.removeChild(goldTile[i]);
for(i = 0; i < guardTxt.length; i++) mainStage.removeChild(guardTxt[i]);
for(i = 0; i < guardTile.length; i++) mainStage.removeChild(guardTile[i]);
for(i = 0; i < timeTxt.length; i++) mainStage.removeChild(timeTxt[i]);
for(i = 0; i < timeTile.length; i++) mainStage.removeChild(timeTile[i]);
} }
////////////////////////////////////////////////////////////////////////////////////////////////////// for(i = 0; i < levelTxt.length; i++) mainStage.removeChild(levelTxt[i]);
/* for(i = 0; i < levelTile.length; i++) mainStage.removeChild(levelTile[i]);
function iconBase(_screenX, _screenY, _scale, _bitmap1, _bitmap2, _posY)
{
var border = 4 * _scale;
var canvas, stage;
var iconObj, bgObj;
var mouseOverHandler = null, mouseOutHandler = null, mouseClickHandler = null;
var bitmapX = _bitmap1.getBounds().width * _scale;
var bitmapY = _bitmap1.getBounds().height * _scale;
var self = this;
var enabled = 0;
function enableMouseHandler()
{
mouseOverHandler = iconObj.on("mouseover", mouseOver);
mouseOutHandler = iconObj.on("mouseout", mouseOut);
mouseClickHandler = iconObj.on("click", mouseClick);
} }
function disableMouseHandler() //======================================
{ // END: Change Theme Screen real time
iconObj.removeEventListener("mouseover", mouseOverHandler); //======================================
iconObj.removeEventListener("mouseout", mouseOutHandler);
iconObj.removeEventListener("click", mouseClickHandler);
stage.cursor = "default";
stage.update();
}
function createCanvas()
{
canvas = document.createElement('canvas');
canvas.id = "theme_menu";
canvas.width = bitmapX+border*2;
canvas.height = bitmapY+border*2;
var left = (_screenX1 - canvas.width),
top = (_screenY1 - _posY)|0;
canvas.style.left = left + "px";
canvas.style.top = top + "px";
canvas.style.position = "absolute";
document.body.appendChild(canvas);
}
function createIcon()
{
stage = new createjs.Stage(canvas);
iconObj = new createjs.Container();
//create background shape
bgObj = new createjs.Shape();
bgObj.graphics.beginFill("#fefef1")
.drawRect(0, 0, bitmapX+border*2, bitmapY+border*2).endFill();
bgObj.alpha = 0;
//change bitmap size
_bitmap1.setTransform(border, border, _scale, _scale);
if(_bitmap2) _bitmap2.setTransform(border, border, _scale, _scale);
iconObj.set({alpha:0})
stage.addChild(iconObj);
updateImage();
//stage.update();
}
function updateImage()
{
iconObj.addChild(bgObj);
iconObj.addChild(_bitmap1);
stage.update();
}
function invalidState()
{
if(gameState == GAME_PAUSE ||
(gameState != GAME_START && gameState != GAME_RUNNING && playMode != PLAY_EDIT)) return 1;
return 0;
}
function mouseOver()
{
if(invalidState()) return;
stage.cursor = "pointer";
bgObj.alpha = 1;
stage.update();
}
function mouseOut()
{
stage.cursor = "default";
bgObj.alpha = 0;
stage.update();
}
function mouseClick()
{
if(gameState == GAME_PAUSE ||
(gameState != GAME_START && playMode != PLAY_DEMO && playMode != PLAY_DEMO_ONCE && playMode != PLAY_EDIT))
return;
curTheme = (curTheme == THEME_APPLE2?THEME_C64:THEME_APPLE2);
saveState();
soundStop(soundDig);
soundStop(soundFall);
themeDataReset();
updateThemeImage();
mouseOut();
if(playMode == PLAY_EDIT) {
startEditMode();
} else {
startGame(1);
}
}
}
iconBase.prototype.init = function()
{
this.createCanvas();
this.createIcon();
}
iconBase.prototype.enable = function()
{
if(enabled) return;
enabled = 1;
disableMouseHandler();
enableMouseHandler();
iconObj.set({alpha:1})
stage.enableMouseOver(60);
stage.update();
}
iconBase.prototype.disable = function(hidden)
{
disableMouseHandler();
if(hidden) {
iconObj.set({alpha:0});
} else {
iconObj.set({alpha:1})
}
stage.update();
enabled = 0;
stage.enableMouseOver(0);
}
function themeIconClass( _screenX1, _screenY1, _scale, _themeBitmapApple2, _themeBitmapC64)
{
//_scale = _scale*2/3;
var border = 4 * _scale;
var themeCanvas, stage;
var themeIcon, themeBG;
var saveStateObj;
var mouseOverHandler = null, mouseOutHandler = null, mouseClickHandler = null;
var bitmapX = _themeBitmapApple2.getBounds().width * _scale;
var bitmapY = _themeBitmapApple2.getBounds().height * _scale;
var self = this;
var enabled = 0;
init();
function updateThemeImage()
{
themeIcon.removeAllChildren();
themeIcon.addChild(themeBG);
if(curTheme == THEME_APPLE2) {
themeIcon.addChild(_themeBitmapApple2);
} else {
themeIcon.addChild(_themeBitmapC64);
}
stage.update();
}
function mouseClick()
{
if(gameState == GAME_PAUSE ||
(gameState != GAME_START && playMode != PLAY_DEMO && playMode != PLAY_DEMO_ONCE && playMode != PLAY_EDIT))
return;
curTheme = (curTheme == THEME_APPLE2?THEME_C64:THEME_APPLE2);
saveState();
soundStop(soundDig);
soundStop(soundFall);
themeDataReset();
updateThemeImage();
mouseOut();
if(playMode == PLAY_EDIT) {
startEditMode();
} else {
startGame(1);
}
}
function saveState()
{
setThemeMode(curTheme);
if(playMode == PLAY_EDIT) {
if(editLevelModified()) saveTestState();
stopEditTicker();
} else {
stopPlayTicker();
stopAllSpriteObj();
}
}
}
*/
+1 -2
Voir le fichier
@@ -194,7 +194,7 @@ function infoMenuClass(_stage, _scale)
infoObj[i].type = 'TITLE'; infoObj[i].type = 'TITLE';
infoObj[i].text = new createjs.Text(infoList[i].contain, infoObj[i].text = new createjs.Text(infoList[i].contain,
"bold " + TITLE_TEXT_SIZE + "px Helvetica",TITLE_TEXT_COLOR); "bold " + TITLE_TEXT_SIZE + "px Helvetica",TITLE_TEXT_COLOR);
infoObj[i].text.shadow = new createjs.Shadow(TITLE_TEXT_SHADOW_COLOR, 0, 0, 2 ); infoObj[i].text.shadow = new createjs.Shadow(TITLE_TEXT_SHADOW_COLOR, 1, 1, 1 );
infoObj[i].width = infoObj[i].text.getBounds().width; infoObj[i].width = infoObj[i].text.getBounds().width;
infoObj[i].height = infoObj[i].text.getBounds().height; infoObj[i].height = infoObj[i].text.getBounds().height;
menuY += (infoObj[i].height * 3/2|0); menuY += (infoObj[i].height * 3/2|0);
@@ -489,5 +489,4 @@ function infoMenuClass(_stage, _scale)
//add setTimeout just don't cause mouse event (click) cascade! //add setTimeout just don't cause mouse event (click) cascade!
if(callBackFun) setTimeout(function() { callBackFun(callBackArgs);}, 10); if(callBackFun) setTimeout(function() { callBackFun(callBackArgs);}, 10);
} }
} }
+60 -13
Voir le fichier
@@ -44,6 +44,10 @@ function pressCtrlKey(code)
copyLevelPassed = 1; //means copy from exists level copyLevelPassed = 1; //means copy from exists level
showTipsText("COPY MAP", 1500); showTipsText("COPY MAP", 1500);
break; break;
case KEYCODE_J: //CTRL-J : gamepad toggle
toggleGamepadMode(1);
//if(gamepadIconObj) gamepadIconObj.updateGamepadImage();
break;
case KEYCODE_K: //CTRL-K : repeat actions On/Off case KEYCODE_K: //CTRL-K : repeat actions On/Off
toggleRepeatAction(); toggleRepeatAction();
repeatActionIconObj.updateRepeatActionImage(); repeatActionIconObj.updateRepeatActionImage();
@@ -74,6 +78,16 @@ function pressCtrlKey(code)
case KEYCODE_RIGHT: //SHIFT + -> : speed up case KEYCODE_RIGHT: //SHIFT + -> : speed up
setSpeed(1); setSpeed(1);
break; break;
case KEYCODE_H: //CTRL-H : redHat mode on/off
toggleRedhatMode();
break;
case KEYCODE_1: //CTRL-1
case KEYCODE_2: //CTRL-2
case KEYCODE_3: //CTRL-3
case KEYCODE_4: //CTRL-4
case KEYCODE_5: //CTRL-5
themeColorChange(code - KEYCODE_1);
break;
} }
} }
@@ -117,7 +131,8 @@ function debugKeyPress(code)
var repeatAction = 0; //1: keyboard repeat on, 0: keyboard repeat Off var repeatAction = 0; //1: keyboard repeat on, 0: keyboard repeat Off
var repeatActionPressed = 0; var repeatActionPressed = 0;
var gamepadMode = 1; //0: disable, 1: enable
var redhatMode = 1;
var godMode = 0, godModeKeyPressed = 0; var godMode = 0, godModeKeyPressed = 0;
function initHotKeyVariable() function initHotKeyVariable()
@@ -130,10 +145,8 @@ function initHotKeyVariable()
function toggleRepeatAction() function toggleRepeatAction()
{ {
if( (repeatAction ^= 1) == 1) { if( (repeatAction ^= 1) == 1) {
//showTipsText("REPEAT ACTIONS ON", 0, "APPLE-II MODE");
showTipsText("REPEAT ACTIONS ON", 2500); showTipsText("REPEAT ACTIONS ON", 2500);
} else { } else {
//showTipsText("REPEAT ACTIONS OFF", 0, "NES MODE");
showTipsText("REPEAT ACTIONS OFF", 2500); showTipsText("REPEAT ACTIONS OFF", 2500);
} }
if(gameState != GAME_START) repeatActionPressed=1; //player change the "repeatAction" Mode at running if(gameState != GAME_START) repeatActionPressed=1; //player change the "repeatAction" Mode at running
@@ -141,6 +154,42 @@ function toggleRepeatAction()
setRepeatAction(); setRepeatAction();
} }
function toggleGamepadMode(textMsg)
{
if(!gamepadSupport()) {
if(textMsg) showTipsText("GAMEPAD NOT SUPPORTED", 2500);
gamepadMode = 0;
} else {
if( (gamepadMode ^= 1) == 1) {
gamepadEnable();
if(textMsg) showTipsText("GAMEPAD ON", 2500);
} else {
gamepadDisable();
if(textMsg) showTipsText("GAMEPAD OFF", 2500);
}
}
setGamepadMode();
}
function toggleRedhatMode()
{
if( (redhatMode ^= 1) == 1 ) { //enable
for(var i = 0; i < guardCount; i++) {
if(guard[i].hasGold > 0)
guard[i].sprite.spriteSheet = redhatData;
else
guard[i].sprite.spriteSheet = guardData;
}
showTipsText("REDHAT MODE ON", 1500);
} else { //disable
for(var i = 0; i < guardCount; i++) {
guard[i].sprite.spriteSheet = guardData;
}
showTipsText("REDHAT MODE OFF", 1500);
}
}
function toggleGodMode() function toggleGodMode()
{ {
godModeKeyPressed = 1; //means player press the god-mod hot-key godModeKeyPressed = 1; //means player press the god-mod hot-key
@@ -173,26 +222,34 @@ function pressKey(code)
switch(code) { switch(code) {
case KEYCODE_LEFT: case KEYCODE_LEFT:
case KEYCODE_J: case KEYCODE_J:
case KEYCODE_A:
keyAction = ACT_LEFT; keyAction = ACT_LEFT;
break; break;
case KEYCODE_RIGHT: case KEYCODE_RIGHT:
case KEYCODE_L: case KEYCODE_L:
case KEYCODE_D:
keyAction = ACT_RIGHT; keyAction = ACT_RIGHT;
break; break;
case KEYCODE_UP: case KEYCODE_UP:
case KEYCODE_I: case KEYCODE_I:
case KEYCODE_W:
keyAction = ACT_UP; keyAction = ACT_UP;
break; break;
case KEYCODE_DOWN: case KEYCODE_DOWN:
case KEYCODE_K: case KEYCODE_K:
case KEYCODE_S:
keyAction = ACT_DOWN; keyAction = ACT_DOWN;
break; break;
case KEYCODE_Z: case KEYCODE_Z:
case KEYCODE_U: case KEYCODE_U:
case KEYCODE_Q:
case KEYCODE_COMMA: //,
keyAction = ACT_DIG_LEFT; keyAction = ACT_DIG_LEFT;
break; break;
case KEYCODE_X: case KEYCODE_X:
case KEYCODE_O: case KEYCODE_O:
case KEYCODE_E:
case KEYCODE_PERIOD: //.
keyAction = ACT_DIG_RIGHT; keyAction = ACT_DIG_RIGHT;
break; break;
case KEYCODE_ESC: //help & pause case KEYCODE_ESC: //help & pause
@@ -260,17 +317,7 @@ function handleKeyDown(event)
} }
} }
/*
//e.cancelBubble is supported by IE - this will kill the bubbling process.
event.cancelBubble = true;
event.returnValue = false;
//event.stopPropagation works only in Firefox.
if (event.stopPropagation) {
event.stopPropagation();
event.preventDefault();
}
*/
if(event.keyCode >= 112 && event.keyCode <= 123) return true; //F1 ~ F12 if(event.keyCode >= 112 && event.keyCode <= 123) return true; //F1 ~ F12
return false; return false;
+52 -130
Voir le fichier
@@ -1,5 +1,5 @@
/** /**
* @license ============================================================================= * @license ==================================================================================
* Lode Runner main program * Lode Runner main program
* *
* This program is a HTML5 remake of the Lode Runner games (APPLE II & C64 version). * This program is a HTML5 remake of the Lode Runner games (APPLE II & C64 version).
@@ -9,11 +9,13 @@
* *
* The AI algorithm reference book: * The AI algorithm reference book:
* http://www.kingstone.com.tw/book/book_page.asp?kmcode=2014710650538 * http://www.kingstone.com.tw/book/book_page.asp?kmcode=2014710650538
* http://www.amazon.co.jp/Lode-Runnerで学ぶ実践C言語-ビー・エヌ・エヌ企画部/dp/4893690116
* *
* Source Code: https://github.com/SimonHung/LodeRunner * Source Code: https://github.com/SimonHung/LodeRunner_TotalRecall
* Web page: http://LodeRunnerWebGame.com
* *
* by Simon Hung 2014/06/20, 2015/06/13 (http://simonsays-tw.com) * by Simon Hung 06/20/2014, 06/13/2015, 09/28/2016
* ============================================================================= * ==================================================================================
*/ */
window.name = 'lodeRunnerParent'; //for world high score switch back 5/31/2015 window.name = 'lodeRunnerParent'; //for world high score switch back 5/31/2015
@@ -37,8 +39,8 @@ var loadingTxt;
var gameState, lastGameState; var gameState, lastGameState;
var tileScale, xMove, yMove; var tileScale, xMove, yMove;
//var speedMode = [15, 20, 25, 30, 35]; //slow normal fast
var speedMode = [14, 18, 23, 29, 35]; //slow normal fast , slow down all speed 6/2/2016 var speedMode = [14, 18, 23, 29, 35]; //slow normal fast , slow down all speed 6/2/2016
var speedText = ["VERY SLOW", "SLOW", "NORMAL", "FAST", "VERY FAST"]; var speedText = ["VERY SLOW", "SLOW", "NORMAL", "FAST", "VERY FAST"];
var speed = 2; //normal var speed = 2; //normal
var demoSpeed = 35; var demoSpeed = 35;
@@ -50,6 +52,8 @@ var playMode = PLAY_CLASSIC;
var playData = 1; //classic lode runner var playData = 1; //classic lode runner
var curTime = 0; //count from 0 to MAX_TIME_COUNT var curTime = 0; //count from 0 to MAX_TIME_COUNT
var backgroundColor = "#250535"; //background color
var playerName = ""; var playerName = "";
var playerUId = ""; var playerUId = "";
@@ -63,7 +67,6 @@ function init()
screenX1 = screenSize.x; screenX1 = screenSize.x;
screenY1 = screenSize.y; screenY1 = screenSize.y;
//loadDataJS(); //load demo data file
canvasReSize(); canvasReSize();
createStage(); createStage();
setBackground(); setBackground();
@@ -80,29 +83,6 @@ function init()
showLoadingPage(); //preload function showLoadingPage(); //preload function
} }
/*
function loadDataJS()
{
var arg = getUrlArgument();
var js = document.createElement('script');
js.type = "text/javascript";
////js.src = "lodeRunner.wData.jss" + ((arg == null)?"": ("?" + arg));
js.src = "lodeRunner.wData.jss" + ("?dbName=" + dbName) + ((arg == null)? "" : ("&" + arg)); //add set dbName
//console.log(js.src);
js.onload = function() {
loadStoreVariable(); //load data from localStorage
initMenuVariable(); //init menu variable
initDemoModeVariable();
debug('demo data load complete');
};
//document.body.appendChild(js);
document.getElementsByTagName('head')[0].appendChild(js);
}
*/
function loadStoreVariable() function loadStoreVariable()
{ {
playerName = getPlayerName(); playerName = getPlayerName();
@@ -111,17 +91,19 @@ function loadStoreVariable()
setUid(playerUid); setUid(playerUid);
} }
curTheme = getThemeMode(); curTheme = getThemeMode();
getThemeColor();
getRepeatAction(); getRepeatAction();
if(getGamepadMode()) gamepadEnable();
} }
function canvasReSize() function canvasReSize()
{ {
var iconSizeX; var iconSizeX;
for (var scale = MAX_SCALE*100; scale >= MIN_SCALE*100; scale -= 25) { for (var scale = MAX_SCALE*100; scale >= MIN_SCALE*100; scale -= 5) {
tileScale = scale / 100; tileScale = scale / 100;
canvasX = BASE_SCREEN_X * tileScale; canvasX = BASE_SCREEN_X * tileScale;
canvasY = BASE_SCREEN_Y * tileScale; canvasY = BASE_SCREEN_Y * tileScale;
if (canvasX <= screenX1 && canvasY <= screenY1 || tileScale <= MIN_SCALE) break; //if (canvasX <= screenX1 && canvasY <= screenY1 || tileScale <= MIN_SCALE) break;
iconSizeX = BASE_ICON_X * 2 * tileScale; iconSizeX = BASE_ICON_X * 2 * tileScale;
if( (canvasX+iconSizeX) <= screenX1 && canvasY <= screenY1 || tileScale <= MIN_SCALE) break; if( (canvasX+iconSizeX) <= screenX1 && canvasY <= screenY1 || tileScale <= MIN_SCALE) break;
} }
@@ -156,9 +138,6 @@ function canvasReSize()
W4 = (tileW/4|0); //10, 7, 5, W4 = (tileW/4|0); //10, 7, 5,
H4 = (tileH/4|0); //11, 8, 5, H4 = (tileH/4|0); //11, 8, 5,
//xMove and yMove initial by setSpeedByAiVersion()
//xMove = 4 * tileScale * 2;
//yMove = 4 * tileScale * 2;
} }
function createStage() function createStage()
@@ -178,7 +157,7 @@ function setBackground()
var background = new createjs.Shape(); var background = new createjs.Shape();
background.graphics.beginFill("#000000").drawRect(0, 0, canvas.width, canvas.height); background.graphics.beginFill("#000000").drawRect(0, 0, canvas.width, canvas.height);
mainStage.addChild(background); mainStage.addChild(background);
document.body.style.background = "#301050"; document.body.style.background = backgroundColor;
} }
function showCoverPage() function showCoverPage()
@@ -186,6 +165,7 @@ function showCoverPage()
menuIconDisable(1); menuIconDisable(1);
clearIdleDemoTimer(); clearIdleDemoTimer();
mainStage.removeAllChildren(); mainStage.removeAllChildren();
mainStage.addChild(titleBackground); //colorful background
mainStage.addChild(coverBitmap); mainStage.addChild(coverBitmap);
mainStage.addChild(signetBitmap); mainStage.addChild(signetBitmap);
mainStage.addChild(remakeBitmap); mainStage.addChild(remakeBitmap);
@@ -194,6 +174,13 @@ function showCoverPage()
} }
var idleTimer=null, startIdleTime; var idleTimer=null, startIdleTime;
function clearIdleDemoTimer()
{
if(idleTimer) clearInterval(idleTimer);
idleTimer = null;
}
function waitIdleDemo(maxIdleTime) function waitIdleDemo(maxIdleTime)
{ {
startIdleTime = new Date(); startIdleTime = new Date();
@@ -247,12 +234,6 @@ function disableStageClickEvent()
return rc; return rc;
} }
function clearIdleDemoTimer()
{
if(idleTimer) clearInterval(idleTimer);
idleTimer = null;
}
function noKeyDown() function noKeyDown()
{ {
return false; return false;
@@ -260,7 +241,6 @@ function noKeyDown()
function anyKeyDown() function anyKeyDown()
{ {
//if(changingLevel) return false;
stopDemoAndPlay(); stopDemoAndPlay();
} }
@@ -293,8 +273,6 @@ function getLastPlayInfo()
if( (playMode != PLAY_CLASSIC && playMode != PLAY_MODERN) || if( (playMode != PLAY_CLASSIC && playMode != PLAY_MODERN) ||
(playData < 1 || (playData > maxPlayId && playData != PLAY_DATA_USERDEF) ) (playData < 1 || (playData > maxPlayId && playData != PLAY_DATA_USERDEF) )
){ ){
//(playData != PLAY_DATA_1 && playData != PLAY_DATA_2 && playData != PLAY_DATA_3 && playData != PLAY_DATA_USERDEF) )
//{
playMode = PLAY_CLASSIC; playMode = PLAY_CLASSIC;
playData = 1; //classic lode runner playData = 1; //classic lode runner
} }
@@ -317,7 +295,6 @@ function startPlayTicker()
stopPlayTicker(); stopPlayTicker();
//createjs.Ticker.timingMode = createjs.Ticker.RAF; //createjs.Ticker.timingMode = createjs.Ticker.RAF;
if(playMode == PLAY_AUTO || playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) { if(playMode == PLAY_AUTO || playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) {
//createjs.Ticker.setFPS(speedMode[speedMode.length-1]); //very fast
createjs.Ticker.setFPS(demoSpeed); //06/12/2014 createjs.Ticker.setFPS(demoSpeed); //06/12/2014
} else { } else {
createjs.Ticker.setFPS(speedMode[speed]); createjs.Ticker.setFPS(speedMode[speed]);
@@ -408,29 +385,26 @@ function initVariable()
function buildLevelMap(levelMap) function buildLevelMap(levelMap)
{ {
var index = 0;
var mapGuardCount = 0; //Number of original guards
//(1) create empty map[x][y] array; //(1) create empty map[x][y] array;
map = []; map = [];
for(var x = 0; x < NO_OF_TILES_X; x++) { for(var x = 0; x < NO_OF_TILES_X; x++) {
map[x] = []; map[x] = [];
for(var y = 0; y < NO_OF_TILES_Y; y++) { for(var y = 0; y < NO_OF_TILES_Y; y++) {
map[x][y] = {}; map[x][y] = {};
if(levelMap.charAt(index++) == '0') mapGuardCount++;
} }
} }
//(2) draw map //(2) draw map
/* index = 0;
var index = 0;
for(var y = 0; y < NO_OF_TILES_Y; y++) { for(var y = 0; y < NO_OF_TILES_Y; y++) {
for(var x = 0; x < NO_OF_TILES_X; x++) { for(var x = 0; x < NO_OF_TILES_X; x++) {
var id = levelMap.charAt(index++); var id = levelMap.charAt(index++);
*/
var index = NO_OF_TILES_Y * NO_OF_TILES_X - 1;
for(var y = NO_OF_TILES_Y-1; y >= 0; y--) {
for(var x = NO_OF_TILES_X-1; x >= 0; x--) {
var id = levelMap.charAt(index--);
var curTile; var curTile;
switch(id) { switch(id) {
default: default:
case ' ': //empty case ' ': //empty
@@ -441,73 +415,60 @@ function buildLevelMap(levelMap)
case '#': //Normal Brick case '#': //Normal Brick
map[x][y].base = BLOCK_T; map[x][y].base = BLOCK_T;
map[x][y].act = BLOCK_T; map[x][y].act = BLOCK_T;
curTile = map[x][y].bitmap = new createjs.Bitmap(getThemeImage("brick")); curTile = map[x][y].bitmap = getThemeBitmap("brick");
break; break;
case '@': //Solid Brick case '@': //Solid Brick
map[x][y].base = SOLID_T; map[x][y].base = SOLID_T;
map[x][y].act = SOLID_T; map[x][y].act = SOLID_T;
curTile = map[x][y].bitmap = new createjs.Bitmap(getThemeImage("solid")); curTile = map[x][y].bitmap = getThemeBitmap("solid");
break; break;
case 'H': //Ladder case 'H': //Ladder
map[x][y].base =LADDR_T; map[x][y].base =LADDR_T;
map[x][y].act =LADDR_T; map[x][y].act =LADDR_T;
curTile = map[x][y].bitmap = new createjs.Bitmap(getThemeImage("ladder")); curTile = map[x][y].bitmap = getThemeBitmap("ladder");
break; break;
case '-': //Line of rope case '-': //Line of rope
map[x][y].base = BAR_T; map[x][y].base = BAR_T;
map[x][y].act = BAR_T; map[x][y].act = BAR_T;
curTile = map[x][y].bitmap = new createjs.Bitmap(getThemeImage("rope")); curTile = map[x][y].bitmap = getThemeBitmap("rope");
break; break;
case 'X': //False brick case 'X': //False brick
map[x][y].base = TRAP_T; //behavior same as empty map[x][y].base = TRAP_T; //behavior same as empty
map[x][y].act = TRAP_T; map[x][y].act = TRAP_T;
curTile = map[x][y].bitmap = new createjs.Bitmap(getThemeImage("brick")); curTile = map[x][y].bitmap = getThemeBitmap("brick");
break; break;
case 'S': //Ladder appears at end of level case 'S': //Ladder appears at end of level
map[x][y].base = HLADR_T; //behavior same as empty before end of level map[x][y].base = HLADR_T; //behavior same as empty before end of level
map[x][y].act = EMPTY_T; //behavior same as empty before end of level map[x][y].act = EMPTY_T; //behavior same as empty before end of level
curTile = map[x][y].bitmap = new createjs.Bitmap(getThemeImage("ladder")); curTile = map[x][y].bitmap = getThemeBitmap("ladder");
curTile.set({alpha:0}); //hide the laddr curTile.set({alpha:0}); //hide the laddr
break; break;
case '$': //Gold chest case '$': //Gold chest
map[x][y].base = GOLD_T; //keep gold on base map map[x][y].base = GOLD_T; //keep gold on base map
map[x][y].act = EMPTY_T; map[x][y].act = EMPTY_T;
curTile = map[x][y].bitmap = new createjs.Bitmap(getThemeImage("gold")); curTile = map[x][y].bitmap = getThemeBitmap("gold");
goldCount++; goldCount++;
break; break;
case '0': //Guard case '0': //Guard
map[x][y].base = EMPTY_T; map[x][y].base = EMPTY_T;
map[x][y].act = GUARD_T; map[x][y].act = GUARD_T;
map[x][y].bitmap = null; map[x][y].bitmap = null;
if(guardCount >= maxGuard) { if(--mapGuardCount >= maxGuard) {
map[x][y].act = EMPTY_T; map[x][y].act = EMPTY_T;
continue; //too many guard , set this tile as empty continue; //too many guards, set this tile as empty
} }
/*
guard[guardCount] = {};
curTile = guard[guardCount].sprite = new createjs.Sprite(guardData, "runLeft");
guard[guardCount].pos = { x:x, y:y, xOffset:0, yOffset:0};
guard[guardCount].action = ACT_STOP;
guard[guardCount].shape = "runLeft";
guard[guardCount].lastLeftRight = "ACT_LEFT";
guard[guardCount].hasGold = 0;
*/
//for backward compatible guard order must same as old, so add to beginning of array
curTile = new createjs.Sprite(guardData, "runLeft"); curTile = new createjs.Sprite(guardData, "runLeft");
guard.unshift({ guard[guardCount] = {
sprite: curTile, sprite: curTile,
pos: { x:x, y:y, xOffset:0, yOffset:0}, pos: { x:x, y:y, xOffset:0, yOffset:0},
action: ACT_STOP, action: ACT_STOP,
shape: "runLeft", shape: "runLeft",
lastLeftRight: "ACT_LEFT", lastLeftRight: "ACT_LEFT",
hasGold: 0 hasGold: 0
}); };
guardCount++; guardCount++;
//curTile.gotoAndPlay();
curTile.stop(); curTile.stop();
//curTile.framerate = 60;
break; break;
case '&': //Player case '&': //Player
map[x][y].base = EMPTY_T; map[x][y].base = EMPTY_T;
@@ -523,15 +484,14 @@ function buildLevelMap(levelMap)
runner.action = ACT_UNKNOWN; runner.action = ACT_UNKNOWN;
runner.shape = "runRight"; runner.shape = "runRight";
runner.lastLeftRight = "ACT_RIGHT"; runner.lastLeftRight = "ACT_RIGHT";
//curTile.gotoAndPlay();
curTile.stop(); curTile.stop();
//curTile.framerate = 60;
break; break;
} }
curTile.setTransform(x * tileWScale, y * tileHScale, tileScale, tileScale); //x,y, scaleX, scaleY curTile.setTransform(x * tileWScale, y * tileHScale, tileScale, tileScale); //x,y, scaleX, scaleY
mainStage.addChild(curTile); mainStage.addChild(curTile);
} }
} }
assert(mapGuardCount == 0, "Error: mapCuardCount design error !" );
moveSprite2Top(); moveSprite2Top();
} }
@@ -559,7 +519,7 @@ function moveSprite2Top()
function buildGroundInfo() function buildGroundInfo()
{ {
drawGround(); drawGround();
drawInfo(levelData); drawInfo();
} }
var groundTile; var groundTile;
@@ -567,7 +527,7 @@ function drawGround()
{ {
groundTile = []; groundTile = [];
for(var x = 0; x < NO_OF_TILES_X; x++) { for(var x = 0; x < NO_OF_TILES_X; x++) {
groundTile[x] = new createjs.Bitmap(getThemeImage("ground")); groundTile[x] = getThemeBitmap("ground");
groundTile[x].setTransform(x * tileWScale, NO_OF_TILES_Y * tileHScale, tileScale, tileScale); groundTile[x].setTransform(x * tileWScale, NO_OF_TILES_Y * tileHScale, tileScale, tileScale);
mainStage.addChild(groundTile[x]); mainStage.addChild(groundTile[x]);
} }
@@ -671,9 +631,6 @@ function drawLevelTxt()
{ {
var xOffset = 20; var xOffset = 20;
//if(playMode == PLAY_CLASSIC || playMode == PLAY_AUTO) xOffset = 20;
//else xOffset = 19;
levelTxt = drawText(xOffset*tileWScale, infoY, "LEVEL", mainStage); levelTxt = drawText(xOffset*tileWScale, infoY, "LEVEL", mainStage);
} }
@@ -708,9 +665,6 @@ function drawScore(addScore)
for(var i = 0; i < scoreTile.length; i++) for(var i = 0; i < scoreTile.length; i++)
mainStage.removeChild(scoreTile[i]); mainStage.removeChild(scoreTile[i]);
//if(playMode == PLAY_CLASSIC || playMode == PLAY_AUTO) digitNo = 7;
//else digitNo = 6
scoreTile = drawText(5*tileWScale, infoY, ("000000"+curScore).slice(-7), mainStage); scoreTile = drawText(5*tileWScale, infoY, ("000000"+curScore).slice(-7), mainStage);
} }
@@ -870,8 +824,6 @@ function playGame(deltaS)
playTickTimer = 0; playTickTimer = 0;
} }
//runner.xMove = 4 * tileScale * 2;
//runner.yMove = 4 * tileScale * 2;
if(playMode == PLAY_AUTO || playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) playDemo(); if(playMode == PLAY_AUTO || playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) playDemo();
if(recordMode) processRecordKey(); if(recordMode) processRecordKey();
if(!isDigging()) moveRunner(); if(!isDigging()) moveRunner();
@@ -1056,7 +1008,7 @@ function stopAllSpriteObj()
function gameOverAnimation() function gameOverAnimation()
{ {
var gameOverImage = new createjs.Bitmap(getThemeImage("over")); var gameOverImage = getThemeBitmap("over");
var bound = gameOverImage.getBounds(); var bound = gameOverImage.getBounds();
var x = (NO_OF_TILES_X*tileWScale)/2|0; var x = (NO_OF_TILES_X*tileWScale)/2|0;
var y = (NO_OF_TILES_Y*tileHScale)/2|0; var y = (NO_OF_TILES_Y*tileHScale)/2|0;
@@ -1159,11 +1111,7 @@ function closingScreen(r)
if(playMode == PLAY_AUTO) getAutoDemoLevel(0); if(playMode == PLAY_AUTO) getAutoDemoLevel(0);
if(playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) getNextDemoLevel(); if(playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) getNextDemoLevel();
/*
if(playMode == PLAY_MODERN || playMode == PLAY_EDIT) {
curScore = 0; curGetGold = 0; curGuardDeadNo = 0;
}
*/
if(playMode == PLAY_TEST) { if(playMode == PLAY_TEST) {
levelMap = getTestLevelMap(); levelMap = getTestLevelMap();
} else { } else {
@@ -1186,6 +1134,9 @@ function menuIconEnable()
soundIconObj.enable(); soundIconObj.enable();
soundIconObj.updateSoundImage(); soundIconObj.updateSoundImage();
repeatActionIconObj.enable(); repeatActionIconObj.enable();
themeColorObj.enable();
} else {
if(!editInNarrowScreen) themeColorObj.enable();
} }
infoIconObj.enable(); infoIconObj.enable();
helpIconObj.enable(); helpIconObj.enable();
@@ -1204,6 +1155,7 @@ function menuIconDisable(hidden)
helpIconObj.disable(hidden); helpIconObj.disable(hidden);
repeatActionIconObj.disable(hidden); repeatActionIconObj.disable(hidden);
themeIconObj.disable(hidden); themeIconObj.disable(hidden);
themeColorObj.disable(hidden);
} }
var showStartTipsMsg = 1; var showStartTipsMsg = 1;
@@ -1249,26 +1201,13 @@ function showDataMsg()
function showHelpMenu() function showHelpMenu()
{ {
if(firstPlay) { if(firstPlay) {
helpObj.showHelp(0, initForPlay, null); helpObj.showHelp(0, initForPlay, tileScale, null);
setFirstPlayInfo(); setFirstPlayInfo();
} else { } else {
initForPlay(); initForPlay();
} }
} }
/* Don't show main menu
var first = 1
function showMainMenu()
{
if(firstPlay && first) {
mainMenu(null);
} else {
showHelpMenu();
}
first = 0;
}
*/
function initForPlay() function initForPlay()
{ {
menuIconEnable(); menuIconEnable();
@@ -1304,14 +1243,8 @@ function beginPlay()
initPlayDemo(); initPlayDemo();
if(playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) initForPlay(); if(playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) initForPlay();
} else { } else {
/* Don't display GAME VERSION SELECTION , 6/7/2015
if(playerName == "") { if(playerName == "" || playerName.length <= 1) {
inputPlayerName(mainStage, showMainMenu);
} else {
showMainMenu();
}
*/
if(playerName == "") {
inputPlayerName(mainStage, showHelpMenu); inputPlayerName(mainStage, showHelpMenu);
} else { } else {
showHelpMenu(); showHelpMenu();
@@ -1406,15 +1339,11 @@ function mainTick(event)
switch(gameState) { switch(gameState) {
case GAME_START: case GAME_START:
//if(demoDataLoading) { showGameLoading(); break }
//if(playMode == PLAY_AUTO) initPlayDemo();
//if(recordMode) initRecordVariable();
countAutoDemoTimer(); countAutoDemoTimer();
if(keyAction != ACT_STOP && keyAction != ACT_UNKNOWN) { if(keyAction != ACT_STOP && keyAction != ACT_UNKNOWN) {
disableAutoDemoTimer(); disableAutoDemoTimer();
gamepadClearId();
gameState = GAME_RUNNING; gameState = GAME_RUNNING;
//if(playMode != PLAY_DEMO && playMode != PLAY_DEMO_ONCE) themeIconObj.disable(1);
if(playMode == PLAY_MODERN) demoIconObj.disable(1); if(playMode == PLAY_MODERN) demoIconObj.disable(1);
playTickTimer = 0; //modern mode time counter playTickTimer = 0; //modern mode time counter
if(goldCount <= 0) showHideLaddr(); if(goldCount <= 0) showHideLaddr();
@@ -1424,7 +1353,6 @@ function mainTick(event)
playGame(deltaS); playGame(deltaS);
break; break;
case GAME_RUNNER_DEAD: case GAME_RUNNER_DEAD:
//mainStage.update();
//console.log("Time=" + curTime + ", Tick= " + playTickTimer); //console.log("Time=" + curTime + ", Tick= " + playTickTimer);
//if(recordMode) recordModeToggle(GAME_RUNNER_DEAD); //for debug only (if enable it must disable below statement) //if(recordMode) recordModeToggle(GAME_RUNNER_DEAD); //for debug only (if enable it must disable below statement)
if(recordMode == RECORD_KEY) recordModeDump(GAME_RUNNER_DEAD); if(recordMode == RECORD_KEY) recordModeDump(GAME_RUNNER_DEAD);
@@ -1443,7 +1371,6 @@ function mainTick(event)
if(playMode == PLAY_CLASSIC) clearClassicInfo(); if(playMode == PLAY_CLASSIC) clearClassicInfo();
gameState = GAME_OVER_ANIMATION; gameState = GAME_OVER_ANIMATION;
} else { } else {
//stopAllSpriteObj();
setTimeout(function() {gameState = GAME_NEW_LEVEL; }, 500); setTimeout(function() {gameState = GAME_NEW_LEVEL; }, 500);
gameState = GAME_WAITING; gameState = GAME_WAITING;
if(playMode == PLAY_CLASSIC) setClassicInfo(0); if(playMode == PLAY_CLASSIC) setClassicInfo(0);
@@ -1477,19 +1404,14 @@ function mainTick(event)
} }
break; break;
case GAME_OVER_ANIMATION: case GAME_OVER_ANIMATION:
//if(playMode == PLAY_CLASSIC) clearClassicInfo();
break; break;
case GAME_OVER: case GAME_OVER:
////getClassicInfo();
scoreInfo = null; scoreInfo = null;
if(playMode == PLAY_CLASSIC && !sometimePlayInGodMode) { if(playMode == PLAY_CLASSIC && !sometimePlayInGodMode) {
//try to set hi-score record
//scoreInfo = {s:curScore, l:(curLevel>maxLevel)?curLevel:maxLevel};
scoreInfo = {s:curScore, l: passedLevel+1 }; scoreInfo = {s:curScore, l: passedLevel+1 };
} }
showScoreTable(playData, scoreInfo , function() { showCoverPage();}); showScoreTable(playData, scoreInfo , function() { showCoverPage();});
//setTimeout(function(){ showCoverPage();}, 2000);
gameState = GAME_WAITING; gameState = GAME_WAITING;
return; return;
case GAME_FINISH: case GAME_FINISH:
+44 -71
Voir le fichier
@@ -20,8 +20,9 @@ function helpMenuClass(_stage, _bitmap, _editBitmap, _scale)
var HELP_BORDER_SIZE = 24; var HELP_BORDER_SIZE = 24;
var saveStateObj; var saveStateObj;
var stage, helpBitmap = [], bitmapId, scale; var playScale, curScale;
var helpBorder, helpBackground; //versionText; var stage, helpBitmap = [], bitmapId;
var helpBorder, helpBackground, versionText;
var startX, startY, menuX, menuY; var startX, startY, menuX, menuY;
var closeBoxSize; var closeBoxSize;
var callBackFun, callBackArgs; var callBackFun, callBackArgs;
@@ -31,14 +32,15 @@ function helpMenuClass(_stage, _bitmap, _editBitmap, _scale)
helpBitmap[0] = _bitmap; helpBitmap[0] = _bitmap;
helpBitmap[1] = _editBitmap; helpBitmap[1] = _editBitmap;
bitmapId = 0; bitmapId = 0;
scale = _scale; playScale = _scale;
this.showHelp = function(id, callback, args) this.showHelp = function(id, callback, scale, args)
{ {
curScale = scale;
if(typeof args == "undefined") args = null; if(typeof args == "undefined") args = null;
callBackFun = callback; callBackFun = callback;
callBackArgs = args; callBackArgs = args;
closeBoxSize = 12*scale+2; closeBoxSize = 12*curScale+2;
closeIcon = null; closeIcon = null;
bitmapId = id; bitmapId = id;
@@ -65,10 +67,10 @@ function helpMenuClass(_stage, _bitmap, _editBitmap, _scale)
function drawHelpMenu() function drawHelpMenu()
{ {
var borderSize = HELP_BORDER_SIZE * scale; var borderSize = HELP_BORDER_SIZE * curScale;
var halfBorder = borderSize/2; var halfBorder = borderSize/2;
var bitmapW = helpBitmap[bitmapId].getBounds().width * scale; var bitmapW = helpBitmap[bitmapId].getBounds().width * curScale;
var bitmapH = helpBitmap[bitmapId].getBounds().height * scale; var bitmapH = helpBitmap[bitmapId].getBounds().height * curScale;
menuX = bitmapW + borderSize; menuX = bitmapW + borderSize;
menuY = bitmapH + borderSize; menuY = bitmapH + borderSize;
@@ -80,7 +82,9 @@ function helpMenuClass(_stage, _bitmap, _editBitmap, _scale)
helpBorder = new createjs.Shape(); helpBorder = new createjs.Shape();
helpBackground = new createjs.Shape(); helpBackground = new createjs.Shape();
versionText = new createjs.Text("Ver " + VERSION + "." + AI_VERSION, (16*scale) + "px Helvetica", "#FFF"); versionText = new createjs.Text(
"Ver " + VERSION + "." + AI_VERSION + "." + playScale
, (16*curScale) + "px Helvetica", "#FFF");
var helpG = helpBorder.graphics; var helpG = helpBorder.graphics;
@@ -95,7 +99,7 @@ function helpMenuClass(_stage, _bitmap, _editBitmap, _scale)
.drawRoundRect(startX + halfBorder, startY + halfBorder, bitmapW, bitmapH, halfBorder/2).endFill(); .drawRoundRect(startX + halfBorder, startY + halfBorder, bitmapW, bitmapH, halfBorder/2).endFill();
helpBitmap[bitmapId].setTransform(startX + halfBorder, startY + halfBorder, scale, scale); helpBitmap[bitmapId].setTransform(startX + halfBorder, startY + halfBorder, curScale, curScale);
//helpBitmap.set({alpha:0.8}); //helpBitmap.set({alpha:0.8});
versionText.x = startX + (menuX - versionText.getBounds().width-borderSize); versionText.x = startX + (menuX - versionText.getBounds().width-borderSize);
@@ -477,13 +481,16 @@ function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _scree
{ {
dialogStage.removeAllChildren(); dialogStage.removeAllChildren();
dialogStage.enableMouseOver(0); dialogStage.enableMouseOver(0);
createjs.Ticker.removeEventListener(dialogStage);
document.body.removeChild(canvas1); document.body.removeChild(canvas1);
} }
function createDialogStage() function createDialogStage()
{ {
dialogStage = new createjs.Stage(canvas1); dialogStage = new createjs.Stage(canvas1);
dialogStage.enableMouseOver(120); dialogStage.enableMouseOver(60);
createjs.Ticker.setFPS(60);
createjs.Ticker.addEventListener("tick", dialogStage);
} }
function setBackground() function setBackground()
@@ -526,10 +533,10 @@ function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _scree
var vBorder2 = new createjs.Shape(); var vBorder2 = new createjs.Shape();
vBorder1.graphics.beginFill(BORDER1_COLOR) vBorder1.graphics.beginFill(BORDER1_COLOR)
.drawRect(BORDER1+BORDER2, 0, SLIDE_AREA_X, TOP_BORDER1+TOP_BORDER2).endFill(); .drawRect(BORDER1+BORDER2-1, 0, SLIDE_AREA_X+2, TOP_BORDER1+TOP_BORDER2).endFill();
vBorder2.graphics.beginFill(BORDER1_COLOR) vBorder2.graphics.beginFill(BORDER1_COLOR)
.drawRect(BORDER1+BORDER2, CANVAS_SIZE_Y-BORDER1, SLIDE_AREA_X, BORDER1).endFill(); .drawRect(BORDER1+BORDER2-1, CANVAS_SIZE_Y-BORDER1, SLIDE_AREA_X+2, BORDER1).endFill();
border1.addChild(vBorder1, vBorder2); border1.addChild(vBorder1, vBorder2);
border1.on("mouseover", function() { dialogStage.cursor ="default" }); border1.on("mouseover", function() { dialogStage.cursor ="default" });
@@ -547,19 +554,19 @@ function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _scree
vBorder1.graphics.beginFill(BORDER2_COLOR) vBorder1.graphics.beginFill(BORDER2_COLOR)
.drawRect(BORDER1, TOP_BORDER1+TOP_BORDER2, .drawRect(BORDER1, TOP_BORDER1+TOP_BORDER2,
CANVAS_SIZE_X-2*BORDER1, BORDER2).endFill(); CANVAS_SIZE_X-2*BORDER1, BORDER2+1).endFill();
vBorder2.graphics.beginFill(BORDER2_COLOR) vBorder2.graphics.beginFill(BORDER2_COLOR)
.drawRect(BORDER1+BORDER2, CANVAS_SIZE_Y-BORDER1-BORDER2-1, .drawRect(BORDER1, CANVAS_SIZE_Y-BORDER1-BORDER2-1,
CANVAS_SIZE_X-2*(BORDER1+BORDER2),BORDER2+1).endFill(); CANVAS_SIZE_X-2*(BORDER1)-BORDER2,BORDER2+1).endFill();
hBorder1.graphics.beginFill(BORDER2_COLOR) hBorder1.graphics.beginFill(BORDER2_COLOR)
.drawRect(BORDER1, TOP_BORDER1+TOP_BORDER2+BORDER2, .drawRect(BORDER1, TOP_BORDER1+TOP_BORDER2+BORDER2,
BORDER2, CANVAS_SIZE_Y-BORDER1-BORDER2-TOP_BORDER1-TOP_BORDER2).endFill(); BORDER2+2, CANVAS_SIZE_Y-BORDER1-BORDER2-TOP_BORDER1-TOP_BORDER2).endFill();
hBorder2.graphics.beginFill(BORDER2_COLOR) hBorder2.graphics.beginFill(BORDER2_COLOR)
.drawRect(CANVAS_SIZE_X-BORDER1-BORDER2, TOP_BORDER1+TOP_BORDER2+BORDER2, .drawRect(CANVAS_SIZE_X-BORDER1-BORDER2-1, TOP_BORDER1+TOP_BORDER2+BORDER2,
BORDER2, CANVAS_SIZE_Y-BORDER1-BORDER2-TOP_BORDER1-TOP_BORDER2).endFill(); BORDER2+1, CANVAS_SIZE_Y-BORDER1-BORDER2-TOP_BORDER1-TOP_BORDER2).endFill();
border2.addChild(vBorder1, vBorder2, hBorder1, hBorder2); border2.addChild(vBorder1, vBorder2, hBorder1, hBorder2);
dialogStage.addChild(border2); dialogStage.addChild(border2);
@@ -709,36 +716,8 @@ function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _scree
levelLoop: levelLoop:
for(var y = 0; y < selectItemY; y++) { for(var y = 0; y < selectItemY; y++) {
for(var x = 0; x < selectItemX; x++) { for(var x = 0; x < selectItemX; x++) {
//var id;
if(++id >= pageItems) break levelLoop; if(++id >= pageItems) break levelLoop;
createSelectLevel(x, y); createSelectLevel(x, y);
/*
textColor = SELECT_TEXT_COLOR;
if(_activeLevel == (level = startLevel+id)) {
activeItemY = y;
if(activeItemY + SLIDE_ITEM_Y > selectItemY) {
activeItemY = selectItemY - SLIDE_ITEM_Y;
}
textColor = SELECT_TEXT_ACTIVE_COLOR;
}
selectText[id] = new createjs.Text(("00"+level).slice(-3), SELECT_TEXT_SIZE + "px Arial",
textColor);
selectText[id].x = (SLIDE_GAP_X*2+SELECT_SIZE_X) * x + SLIDE_GAP_X;
selectText[id].y = (SLIDE_GAP_Y*2+SELECT_SIZE_Y) * y + SLIDE_GAP_Y - SELECT_TEXT_SIZE*4/3;
slider.addChild(selectText[id]);
selectRect[id] = buildSelectMap(level);
selectRect[id].x = (SLIDE_GAP_X*2+SELECT_SIZE_X) * x + SLIDE_GAP_X;
selectRect[id].y = (SLIDE_GAP_Y*2+SELECT_SIZE_Y) * y + SLIDE_GAP_Y;
slider.addChild(selectRect[id]);
selectRect[id].on('click', selectClick);
selectRect[id].on('mouseover', selectMouseOver);
selectRect[id].on('mouseout', selectMouseOut);
selectRect[id].myLevel = level;
*/
} }
} }
background.on("mouseover", function() { background.on("mouseover", function() {
@@ -749,7 +728,6 @@ function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _scree
); );
slider.on("mousedown", function(evt) { slider.on("mousedown", function(evt) {
//dialogStage.cursor = "url('cursor/closedhand.cur'), auto";
diffY = evt.currentTarget.y - evt.stageY; diffY = evt.currentTarget.y - evt.stageY;
}); });
@@ -946,13 +924,9 @@ function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _scree
function level2Bitmap(levelMap) function level2Bitmap(levelMap)
{ {
var canvas2 = document.createElement('canvas');
var stage = new createjs.Stage(canvas2);
var container = new createjs.Container(); var container = new createjs.Container();
var guardCount = 0, runner = 0; var guardCount = 0, runner = 0;
var bitmap;
canvas2.width = SELECT_SIZE_X;
canvas2.height = SELECT_SIZE_Y;
//-------------------------------------------- //--------------------------------------------
// Parser map from right-bottom to left-top // Parser map from right-bottom to left-top
@@ -969,24 +943,24 @@ function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _scree
case ' ': //empty case ' ': //empty
continue; continue;
case '#': //Normal Brick case '#': //Normal Brick
curTile = new createjs.Bitmap(getThemeImage("brick")); curTile = getThemeBitmap("brick");
break; break;
case '@': //Solid Brick case '@': //Solid Brick
curTile = new createjs.Bitmap(getThemeImage("solid")); curTile = getThemeBitmap("solid");
break; break;
case 'H': //Ladder case 'H': //Ladder
curTile = new createjs.Bitmap(getThemeImage("ladder")); curTile = getThemeBitmap("ladder");
break; break;
case '-': //Line of rope case '-': //Line of rope
curTile = new createjs.Bitmap(getThemeImage("rope")); curTile = getThemeBitmap("rope");
break; break;
case 'X': //False brick case 'X': //False brick
curTile = new createjs.Bitmap(getThemeImage("brick")); curTile = getThemeBitmap("brick");
break; break;
case 'S': //Ladder appears at end of level case 'S': //Ladder appears at end of level
continue; continue;
case '$': //Gold chest case '$': //Gold chest
curTile = new createjs.Bitmap(getThemeImage("gold")); curTile = getThemeBitmap("gold");
break; break;
case '0': //Guard case '0': //Guard
if(++guardCount > MAX_NEW_GUARD) { if(++guardCount > MAX_NEW_GUARD) {
@@ -1007,8 +981,10 @@ function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _scree
container.addChild(curTile); container.addChild(curTile);
} }
} }
container.cache(0, 0, canvas2.width, canvas2.height); container.cache(0, 0, SELECT_SIZE_X, SELECT_SIZE_Y);
return (new createjs.Bitmap( container.getCacheDataURL())); bitmap = new createjs.Bitmap( container.getCacheDataURL());
container.removeAllChildren();
return bitmap;
} }
//for demo mode //for demo mode
@@ -1350,7 +1326,6 @@ function menuDialog(_titleName, _itemList, _stage, _scale, _closeIconEnable, _cl
var menuX, menuY; var menuX, menuY;
var startX, startY; var startX, startY;
var coverBackgroundObj, background1Obj, background2Obj, menuButtonObj; var coverBackgroundObj, background1Obj, background2Obj, menuButtonObj;
var closeIconObj = null; var closeIconObj = null;
var saveKeyStateObj; var saveKeyStateObj;
@@ -1469,6 +1444,7 @@ function menuDialog(_titleName, _itemList, _stage, _scale, _closeIconEnable, _cl
_itemList[0].activeItem = activeItemBackup; //recover menu active item _itemList[0].activeItem = activeItemBackup; //recover menu active item
restoreKeyHandler(saveKeyStateObj); restoreKeyHandler(saveKeyStateObj);
removeAllObj(); removeAllObj();
_stage.enableMouseOver(0);
if(_closeCallBack) _closeCallBack(_args); if(_closeCallBack) _closeCallBack(_args);
} }
@@ -1681,7 +1657,6 @@ function playData2GameVersionMenuId()
error(arguments.callee.name, "design error, value =" + playData ); error(arguments.callee.name, "design error, value =" + playData );
gameVersionMenuList[0].activeItem = 0; gameVersionMenuList[0].activeItem = 0;
return 0; return 0;
} }
//========================================= //=========================================
@@ -1728,8 +1703,6 @@ function gameMenu(callbackFun)
return; return;
case (gameVersionMenuList[0].activeItem < playVersionInfo.length): case (gameVersionMenuList[0].activeItem < playVersionInfo.length):
titleName = playVersionInfo[gameVersionMenuList[0].activeItem].name; titleName = playVersionInfo[gameVersionMenuList[0].activeItem].name;
//if(!noDemoData[playVersionInfo[gameVersionMenuList[0].activeItem].id-1])
// addMenuItem(gameMenuList, demoItemObj, 3);
if(playerDemoData.length > 0) addMenuItem(gameMenuList, demoItemObj, 3); if(playerDemoData.length > 0) addMenuItem(gameMenuList, demoItemObj, 3);
break break
default: default:
@@ -1858,7 +1831,7 @@ function helpMenu(callbackFun)
if(playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) { if(playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) {
infoObj.showInfo(demoHelp, callbackFun, null); infoObj.showInfo(demoHelp, callbackFun, null);
} else { } else {
helpObj.showHelp(id, callbackFun, null); helpObj.showHelp(id, callbackFun, tileScale, null);
} }
} }
@@ -2056,9 +2029,7 @@ function levelPassDialog(_level, _getGold, _guardDead, _time, _hiScore,
hiScoreTextObj.y = yOffset; hiScoreTextObj.y = yOffset;
_stage.addChild(hiScoreNameObj, hiScoreTextObj); _stage.addChild(hiScoreNameObj, hiScoreTextObj);
yOffset += (ITEM_TEXT_SIZE + buttonY); //xOffset for menu button yOffset += (ITEM_TEXT_SIZE + buttonY); //xOffset for menu button
} }
function updateHiScore() function updateHiScore()
@@ -2098,10 +2069,11 @@ function levelPassDialog(_level, _getGold, _guardDead, _time, _hiScore,
setTimeout(function() { goldScoreCounting(0); }, countTime ); setTimeout(function() { goldScoreCounting(0); }, countTime );
} }
} }
_stage.update();
if(endCount) { if(endCount) {
setTimeout(function() { guardScoreCounting(1); }, countTime*4); setTimeout(function() { guardScoreCounting(1); }, countTime*4);
} }
_stage.update();
} }
function guardScoreCounting(firstTime) function guardScoreCounting(firstTime)
@@ -2133,10 +2105,11 @@ function levelPassDialog(_level, _getGold, _guardDead, _time, _hiScore,
setTimeout(function() { guardScoreCounting(0); }, countTime ); setTimeout(function() { guardScoreCounting(0); }, countTime );
} }
} }
_stage.update();
if(endCount) { if(endCount) {
setTimeout(function() { timeScoreCounting(1); }, countTime*4 ); setTimeout(function() { timeScoreCounting(1); }, countTime*4 );
} }
_stage.update();
} }
function timeScoreCounting(firstTime) function timeScoreCounting(firstTime)
@@ -2168,6 +2141,7 @@ function levelPassDialog(_level, _getGold, _guardDead, _time, _hiScore,
setTimeout(function() { timeScoreCounting(0); }, countTime ); setTimeout(function() { timeScoreCounting(0); }, countTime );
} }
} }
if(endCount) { if(endCount) {
soundPlay("scoreEnding"); soundPlay("scoreEnding");
setTimeout(function() { createButton(); }, 100 ); setTimeout(function() { createButton(); }, 100 );
@@ -2265,7 +2239,6 @@ function levelPassDialog(_level, _getGold, _guardDead, _time, _hiScore,
} }
////////////////////////////////////////////////////////////
function yesNoDialog(_txtMsg, _yesBitmap, _noBitmap, _stage, _scale, _callBack) function yesNoDialog(_txtMsg, _yesBitmap, _noBitmap, _stage, _scale, _callBack)
{ {
var TEXT_MSG_SIZE = 48 * _scale; var TEXT_MSG_SIZE = 48 * _scale;
+2 -4
Voir le fichier
@@ -121,8 +121,6 @@ function soundPlay(name)
function soundStop(name) function soundStop(name)
{ {
//if(soundDisable()) return;
if(typeof name == "string") { if(typeof name == "string") {
return createjs.Sound.stop(name); return createjs.Sound.stop(name);
} else { } else {
@@ -137,7 +135,7 @@ function soundPause(name)
if(typeof name == "string") { if(typeof name == "string") {
return createjs.Sound.pause(name); return createjs.Sound.pause(name);
} else { } else {
name.pause(); name.paused=true; //SoundJS 0.6.2 API Changed, 8/28/2016
} }
} }
@@ -148,7 +146,7 @@ function soundResume(name)
if(typeof name == "string") { if(typeof name == "string") {
return createjs.Sound.resume(name); return createjs.Sound.resume(name);
} else { } else {
name.resume(); name.paused=false; //SoundJS 0.6.2 API Changed, 8/28/2016
} }
} }
+212 -188
Voir le fichier
@@ -16,7 +16,7 @@ var SIGNET_UNDER_Y = 30;
//********************* //*********************
// preload cover page // preload cover page
//********************* //*********************
var coverBitmap, remakeBitmap, signetBitmap; var coverBitmap, titleBackground, remakeBitmap, signetBitmap;
var helpObj, helpBitmap, editHelpBitmap; var helpObj, helpBitmap, editHelpBitmap;
var mainMenuIconBitmap, mainMenuIconObj; var mainMenuIconBitmap, mainMenuIconObj;
var selectIconBitmap, selectIconObj; var selectIconBitmap, selectIconObj;
@@ -25,17 +25,18 @@ var soundOnIconBitmap, soundOffIconBitmap, soundIconObj;
var helpIconBitmap, helpIconObj; var helpIconBitmap, helpIconObj;
var infoObj, infoIconBitmap, infoIconObj; var infoObj, infoIconBitmap, infoIconObj;
var repeatActionOnIconBitmap, repeatActionOffIconBitmap, repeatActionIconObj; var repeatActionOnIconBitmap, repeatActionOffIconBitmap, repeatActionIconObj;
var apple2IconBitmap, C64IconBitmap, themeIconObj; var apple2IconBitmap, C64IconBitmap, themeIconObj, themeColorObj;
var checkBitmap; var checkBitmap;
var returnBitmap, select1Bitmap, nextBitmap; var returnBitmap, select1Bitmap, nextBitmap;
var yesBitmap, noBitmap; var yesBitmap, noBitmap;
var coverPageLoad; var coverPageLoad;
var noCache = "?" + VERSION+ ".1051230";
function showLoadingPage() function showLoadingPage()
{ {
var coverPageImages = [ var coverPageImages = [
{ src: "image/cover.png", id: "cover" }, { src: "image/cover.png"+noCache, id: "cover" },
{ src: themeImagePath + THEME_APPLE2 + "/runner.png", id: "runner" } { src: themeImagePath + THEME_APPLE2 + "/runner.png"+noCache, id: "runner" }
]; ];
coverPageLoad = new createjs.LoadQueue(true); coverPageLoad = new createjs.LoadQueue(true);
@@ -70,9 +71,20 @@ function showLoadingPage()
{ {
coverBitmap = new createjs.Bitmap(image); coverBitmap = new createjs.Bitmap(image);
coverBitmap.setTransform(0, 0, tileScale, tileScale); //x,y, scaleX, scaleY coverBitmap.setTransform(0, 0, tileScale, tileScale); //x,y, scaleX, scaleY
addTitleBackground(coverBitmap.getBounds().width*tileScale|0,
coverBitmap.getBounds().height*tileScale|0);
mainStage.addChild(coverBitmap); mainStage.addChild(coverBitmap);
mainStage.update(); mainStage.update();
} }
function addTitleBackground(width, height)
{
titleBackground = new createjs.Shape();
titleBackground.graphics.beginFill("white").drawRect(0, 0, width, height);
mainStage.addChild(titleBackground);
}
} }
function createRunnerSpriteSheet(runnerImage) function createRunnerSpriteSheet(runnerImage)
@@ -88,22 +100,22 @@ function createRunnerSpriteSheet(runnerImage)
runUpDn : [6,7, "runUpDn", RUNNER_SPEED], runUpDn : [6,7, "runUpDn", RUNNER_SPEED],
barRight: { barRight: {
frames: [ 9, 10, 10, 11, 11 ], frames: [ 18, 19, 19, 20, 20 ],
next: "barRight", next: "barRight",
speed: RUNNER_SPEED speed: RUNNER_SPEED
}, },
barLeft: { barLeft: {
frames: [ 12, 13, 13, 14, 14 ], frames: [ 21, 22, 22, 23, 23 ],
next: "barLeft", next: "barLeft",
speed: RUNNER_SPEED speed: RUNNER_SPEED
}, },
digRight: 15, digRight: 24,
digLeft : 16, digLeft : 25,
fallRight : 8, fallRight : 8,
fallLeft: 17 fallLeft: 26
} }
}); });
} }
@@ -114,7 +126,8 @@ function createRunnerSpriteSheet(runnerImage)
var preload; //preload resource object var preload; //preload resource object
var firstPlay = 0; var firstPlay = 0;
var runnerData, guardData; var runnerData;
var guardData = {}, redhatData = {};
var holeData, holeObj = {}; var holeData, holeObj = {};
var textData; var textData;
var countryFlagData; var countryFlagData;
@@ -132,114 +145,116 @@ function preloadResource()
var percentTxt = new createjs.Text("0", (COVER_PROGRESS_BAR_H* tileScale) + "px Arial", "#FF0000"); var percentTxt = new createjs.Text("0", (COVER_PROGRESS_BAR_H* tileScale) + "px Arial", "#FF0000");
var resource = [ var resource = [
{ src: "image/remake.png", id: "remake" }, { src: "image/remake.png"+noCache, id: "remake" },
{ src: "image/signet.png", id: "signet" }, { src: "image/signet.png"+noCache, id: "signet" },
{ src: themeImagePath + THEME_APPLE2 + "/empty.png", id: "empty" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/empty.png"+noCache, id: "empty" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/brick.png", id: "brick" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/brick.png"+noCache, id: "brick" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/block.png", id: "solid" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/block.png"+noCache, id: "solid" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/ladder.png", id: "ladder" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/ladder.png"+noCache, id: "ladder" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/rope.png", id: "rope" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/rope.png"+noCache, id: "rope" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/trap.png", id: "trapBrick" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/trap.png"+noCache, id: "trapBrick" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/hladder.png", id: "hladder" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/hladder.png"+noCache, id: "hladder" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/gold.png", id: "gold" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/gold.png"+noCache, id: "gold" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/guard1.png", id: "guard1" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/guard1.png"+noCache, id: "guard1" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/runner1.png", id: "runner1" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/runner1.png"+noCache, id: "runner1" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/runner.png", id: "runner" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/runner.png"+noCache, id: "runner" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/guard.png", id: "guard" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/guard.png"+noCache, id: "guard" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/hole.png", id: "hole" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/redhat.png"+noCache, id: "redhat" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/ground.png", id: "ground" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/hole.png"+noCache, id: "hole" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/over.png", id: "over" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/ground.png"+noCache, id: "ground" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/text.png", id: "text" + THEME_APPLE2 }, { src: themeImagePath + THEME_APPLE2 + "/over.png"+noCache, id: "over" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/text.png"+noCache, id: "text" + THEME_APPLE2 },
{ src: themeImagePath + THEME_C64 + "/empty.png", id: "empty" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/empty.png"+noCache, id: "empty" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/brick.png", id: "brick" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/brick.png"+noCache, id: "brick" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/block.png", id: "solid" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/block.png"+noCache, id: "solid" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/ladder.png", id: "ladder" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/ladder.png"+noCache, id: "ladder" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/rope.png", id: "rope" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/rope.png"+noCache, id: "rope" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/trap.png", id: "trapBrick" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/trap.png"+noCache, id: "trapBrick" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/hladder.png", id: "hladder" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/hladder.png"+noCache, id: "hladder" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/gold.png", id: "gold" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/gold.png"+noCache, id: "gold" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/guard1.png", id: "guard1" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/guard1.png"+noCache, id: "guard1" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/runner1.png", id: "runner1" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/runner1.png"+noCache, id: "runner1" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/runner.png", id: "runner" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/runner.png"+noCache, id: "runner" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/guard.png", id: "guard" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/guard.png"+noCache, id: "guard" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/hole.png", id: "hole" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/redhat.png"+noCache, id: "redhat" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/ground.png", id: "ground" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/hole.png"+noCache, id: "hole" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/over.png", id: "over" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/ground.png"+noCache, id: "ground" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/text.png", id: "text" + THEME_C64 }, { src: themeImagePath + THEME_C64 + "/over.png"+noCache, id: "over" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/text.png"+noCache, id: "text" + THEME_C64 },
{ src: "image/eraser.png", id: "eraser" }, { src: "image/eraser.png"+noCache, id: "eraser" },
{ src: "image/help.png", id: "help" }, { src: "image/help.png"+noCache, id: "help" },
{ src: "image/editHelp.png",id: "editHelp" }, { src: "image/editHelp.png"+noCache,id: "editHelp" },
//{ src: "image/demoHelp.png",id: "demoHelp" }, //replace by infoMenu, 5/14/2015
{ src: "image/menu.png", id: "menu" }, { src: "image/menu.png"+noCache, id: "menu" },
{ src: "image/select.png", id: "select" }, { src: "image/select.png"+noCache, id: "select" },
{ src: "image/check.png", id: "check" }, //check icon for select menu { src: "image/check.png"+noCache, id: "check" }, //check icon for select menu
{ src: "image/return.png", id: "return" }, { src: "image/return.png"+noCache, id: "return" },
{ src: "image/select1.png", id: "select1" }, { src: "image/select1.png"+noCache, id: "select1" },
{ src: "image/next.png", id: "next" }, { src: "image/next.png"+noCache, id: "next" },
{ src: "image/yes.png", id: "yes" }, { src: "image/yes.png"+noCache, id: "yes" },
{ src: "image/no.png", id: "no" }, { src: "image/no.png"+noCache, id: "no" },
{ src: "image/demo.png",id: "demo" }, { src: "image/demo.png"+noCache,id: "demo" },
{ src: "image/soundOn.png", id: "soundOn" }, { src: "image/soundOn.png"+noCache, id: "soundOn" },
{ src: "image/soundOff.png", id: "soundOff" }, { src: "image/soundOff.png"+noCache, id: "soundOff" },
{ src: "image/infoIcon.png", id: "infoIcon" }, { src: "image/infoIcon.png"+noCache, id: "infoIcon" },
{ src: "image/helpIcon.png", id: "helpIcon" }, { src: "image/helpIcon.png"+noCache, id: "helpIcon" },
{ src: "image/repeatOn.png", id: "repeatOn" }, { src: "image/repeatOn.png"+noCache, id: "repeatOn" },
{ src: "image/repeatOff.png", id: "repeatOff" }, { src: "image/repeatOff.png"+noCache, id: "repeatOff" },
{ src: "image/apple2.png", id: "apple2" }, { src: "image/apple2.png"+noCache, id: "apple2" },
{ src: "image/commodore64.png",id: "C64" }, { src: "image/commodore64.png"+noCache,id: "C64" },
{ src: "image/flags32.png", id: "flag" }, { src: "image/flags32.png"+noCache, id: "flag" },
{ src: themeSoundPath + THEME_APPLE2 + "/born.ogg", id:"reborn" + THEME_APPLE2}, { src: themeSoundPath + THEME_APPLE2 + "/born.ogg"+noCache, id:"reborn" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/dead.ogg", id:"dead" + THEME_APPLE2}, { src: themeSoundPath + THEME_APPLE2 + "/dead.ogg"+noCache, id:"dead" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/dig.ogg", id:"dig" + THEME_APPLE2}, { src: themeSoundPath + THEME_APPLE2 + "/dig.ogg"+noCache, id:"dig" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/getGold.ogg", id:"getGold" + THEME_APPLE2}, { src: themeSoundPath + THEME_APPLE2 + "/getGold.ogg"+noCache, id:"getGold" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/fall.ogg", id:"fall" + THEME_APPLE2}, { src: themeSoundPath + THEME_APPLE2 + "/fall.ogg"+noCache, id:"fall" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/down.ogg", id:"down" + THEME_APPLE2}, { src: themeSoundPath + THEME_APPLE2 + "/down.ogg"+noCache, id:"down" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/pass.ogg", id:"pass" + THEME_APPLE2}, { src: themeSoundPath + THEME_APPLE2 + "/pass.ogg"+noCache, id:"pass" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/trap.ogg", id:"trap" + THEME_APPLE2}, { src: themeSoundPath + THEME_APPLE2 + "/trap.ogg"+noCache, id:"trap" + THEME_APPLE2},
{ src: themeSoundPath + THEME_C64 + "/born.ogg", id:"reborn" + THEME_C64}, { src: themeSoundPath + THEME_C64 + "/born.ogg"+noCache, id:"reborn" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/dead.ogg", id:"dead" + THEME_C64}, { src: themeSoundPath + THEME_C64 + "/dead.ogg"+noCache, id:"dead" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/dig.ogg", id:"dig" + THEME_C64}, { src: themeSoundPath + THEME_C64 + "/dig.ogg"+noCache, id:"dig" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/getGold.ogg", id:"getGold" + THEME_C64}, { src: themeSoundPath + THEME_C64 + "/getGold.ogg"+noCache, id:"getGold" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/fall.ogg", id:"fall" + THEME_C64}, { src: themeSoundPath + THEME_C64 + "/fall.ogg"+noCache, id:"fall" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/down.ogg", id:"down" + THEME_C64}, { src: themeSoundPath + THEME_C64 + "/down.ogg"+noCache, id:"down" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/pass.ogg", id:"pass" + THEME_C64}, { src: themeSoundPath + THEME_C64 + "/pass.ogg"+noCache, id:"pass" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/trap.ogg", id:"trap" + THEME_C64}, { src: themeSoundPath + THEME_C64 + "/trap.ogg"+noCache, id:"trap" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/goldFinish1.ogg", id:"goldFinish1"},
{ src: themeSoundPath + THEME_C64 + "/goldFinish2.ogg", id:"goldFinish2"},
{ src: themeSoundPath + THEME_C64 + "/goldFinish3.ogg", id:"goldFinish3"},
{ src: themeSoundPath + THEME_C64 + "/goldFinish4.ogg", id:"goldFinish4"},
{ src: themeSoundPath + THEME_C64 + "/goldFinish5.ogg", id:"goldFinish5"},
{ src: themeSoundPath + THEME_C64 + "/goldFinish6.ogg", id:"goldFinish6"},
{ src: "sound/goldFinish.ogg", id:"goldFinish"}, { src: themeSoundPath + THEME_C64 + "/goldFinish1.ogg"+noCache, id:"goldFinish1"},
{ src: "sound/ending.ogg", id:"ending"}, { src: themeSoundPath + THEME_C64 + "/goldFinish2.ogg"+noCache, id:"goldFinish2"},
{ src: "sound/scoreBell.ogg", id:"scoreBell"}, { src: themeSoundPath + THEME_C64 + "/goldFinish3.ogg"+noCache, id:"goldFinish3"},
{ src: "sound/scoreCount.ogg", id:"scoreCount"}, { src: themeSoundPath + THEME_C64 + "/goldFinish4.ogg"+noCache, id:"goldFinish4"},
{ src: "sound/scoreEnding.ogg", id:"scoreEnding"}, { src: themeSoundPath + THEME_C64 + "/goldFinish5.ogg"+noCache, id:"goldFinish5"},
{ src: themeSoundPath + THEME_C64 + "/goldFinish6.ogg"+noCache, id:"goldFinish6"},
{ src: "sound/beep.ogg", id:"beep"}, { src: "sound/goldFinish.ogg"+noCache, id:"goldFinish"},
{ src: "sound/ending.ogg"+noCache, id:"ending"},
{ src: "sound/scoreBell.ogg"+noCache, id:"scoreBell"},
{ src: "sound/scoreCount.ogg"+noCache, id:"scoreCount"},
{ src: "sound/scoreEnding.ogg"+noCache, id:"scoreEnding"},
{ src: "cursor/openhand.cur", id:"openHand"}, //preload cursor { src: "sound/beep.ogg"+noCache, id:"beep"},
{ src: "cursor/closedhand.cur", id:"closeHand"}
{ src: "cursor/openhand.cur"+noCache, id:"openHand"}, //preload cursor
{ src: "cursor/closedhand.cur"+noCache, id:"closeHand"}
]; ];
@@ -293,26 +308,16 @@ function preloadResource()
{ {
percentTxt.text = "100%"; percentTxt.text = "100%";
mainStage.update(); mainStage.update();
//// createPreloadSpriteSheet();
createSoundInstance(); createSoundInstance();
createBaseBitmapInstance(); //9/1/2016
setTimeout(clearLoadingInfo, 500); setTimeout(clearLoadingInfo, 500);
} }
/*
function createSoundInstance()
{
soundFall = createjs.Sound.createInstance("fall");
soundDig = createjs.Sound.createInstance("dig");
soundPass = createjs.Sound.createInstance("pass");
soundEnding = createjs.Sound.createInstance("ending");
}
*/
function clearLoadingInfo() function clearLoadingInfo()
{ {
mainStage.removeChild(runnerSprite, progress, progressBorder, percentTxt); mainStage.removeChild(runnerSprite, progress, progressBorder, percentTxt);
colorTitleBackground();
showSignetBitmap(); showSignetBitmap();
mainStage.addChild(signetBitmap); mainStage.addChild(signetBitmap);
showRemakeBitmap(); showRemakeBitmap();
@@ -320,6 +325,22 @@ function preloadResource()
mainStage.update(); mainStage.update();
} }
//change title color to rainbow gradient color
function colorTitleBackground()
{
var width = coverBitmap.getBounds().width*tileScale|0;
var height = coverBitmap.getBounds().height*tileScale|0;
//rainbow gradient color
titleBackground.graphics
.clear().beginLinearGradientFill(
//https://simple.wikipedia.org/wiki/Rainbow
["#FF0000", "#FF7F00", "#FFFF00", "#00FF00", "#0000FF", "#4B0082", "#8B00FF"],
[0, .14, .28, .42, .56, .70, .84, .98],
0, height/5,width*6/5,height*2/5)
.drawRect(0, 0, width, height);
}
function showSignetBitmap() function showSignetBitmap()
{ {
var x, y; var x, y;
@@ -335,7 +356,7 @@ function preloadResource()
function showRemakeBitmap() function showRemakeBitmap()
{ {
var x = 372 * tileScale; var x = 372 * tileScale;
var y = 128 * tileScale; var y = 130 * tileScale;
remakeBitmap = new createjs.Bitmap(preload.getResult("remake")); remakeBitmap = new createjs.Bitmap(preload.getResult("remake"));
remakeBitmap.setTransform(x, y, tileScale, tileScale); //x,y, scaleX, scaleY remakeBitmap.setTransform(x, y, tileScale, tileScale); //x,y, scaleX, scaleY
remakeBitmap.rotation = -5; remakeBitmap.rotation = -5;
@@ -382,6 +403,7 @@ function preloadResource()
C64IconBitmap = new createjs.Bitmap(preload.getResult("C64")); C64IconBitmap = new createjs.Bitmap(preload.getResult("C64"));
themeIconObj = new themeIconClass(screenX1, screenY1, tileScale, apple2IconBitmap, C64IconBitmap); themeIconObj = new themeIconClass(screenX1, screenY1, tileScale, apple2IconBitmap, C64IconBitmap);
themeColorObj = new colorSelectorClass(screenX1, screenY1, tileWScale);
checkBitmap = new createjs.Bitmap(preload.getResult("check")); checkBitmap = new createjs.Bitmap(preload.getResult("check"));
returnBitmap = new createjs.Bitmap(preload.getResult("return")); returnBitmap = new createjs.Bitmap(preload.getResult("return"));
@@ -451,86 +473,31 @@ function setSpeedByAiVersion()
maxGuard = MAX_NEW_GUARD; //change max guard maxGuard = MAX_NEW_GUARD; //change max guard
} }
themeDataReset(); //4/16/2015 themeDataReset(1); //4/16/2015
createHoleObj(); //6/27/2016
} }
function themeDataReset() function themeDataReset(resetAll)
{ {
createSoundInstance(); if(resetAll) createSoundInstance(); //Base on current theme
createSpriteSheet(); //base one theme & Ai Version createSpriteSheet(); //Base on theme & Ai Version
}
function getThemeImage(name)
{
return preload.getResult(name + curTheme);
}
function getThemeTileColor()
{
if(curTheme == THEME_APPLE2) return "#0DA1FF"; //APPLE II TILE COLOR
else return "#933A4C"; //C64 TILE COLOR
} }
function createSpriteSheet() function createSpriteSheet()
{ {
//createRunnerSpriteSheet(coverPageLoad.getResult("runner")); //createRunnerSpriteSheet(coverPageLoad.getResult("runner"));
createRunnerSpriteSheet(getThemeImage("runner")); createRunnerSpriteSheet(getThemeBitmap("runner").image);
createPreloadSpriteSheet(); createPreloadSpriteSheet();
createFlagSpriteSheet(); createFlagSpriteSheet();
} }
function createPreloadSpriteSheet() function createPreloadSpriteSheet()
{ {
guardData = new createjs.SpriteSheet({ guardData = createGuardObj("guard");
images: [getThemeImage("guard")], redhatData = createGuardObj("redhat");
frames: {regX:0, height: BASE_TILE_Y, regY: 0, width: BASE_TILE_X},
animations: {
runRight: [0,2, "runRight", GUARD_SPEED],
runLeft : [3,5, "runLeft", GUARD_SPEED],
runUpDn : [6,7, "runUpDn", GUARD_SPEED],
barRight: {
frames: [ 11, 12, 12, 13, 13 ],
next: "barRight",
speed: GUARD_SPEED
},
barLeft: {
frames: [ 14, 15, 15, 16, 16 ],
next: "barLeft",
speed: GUARD_SPEED
},
reborn: {
frames: [ 17, 17, 18 ],
speed: GUARD_SPEED
},
fallRight : 8,
fallLeft: 19,
shakeRight: {
frames: [ 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8,
9, 10, 9, 10, 8 ],
next: null,
speed: GUARD_SPEED
},
shakeLeft: {
frames: [ 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19,
20, 21, 20, 21, 19],
next: null,
speed: GUARD_SPEED
}
}
});
holeData = new createjs.SpriteSheet( { holeData = new createjs.SpriteSheet( {
images: [getThemeImage("hole")], images: [getThemeBitmap("hole").image],
frames: [ frames: [
//dig hole Left //dig hole Left
@@ -554,9 +521,9 @@ function createPreloadSpriteSheet()
[BASE_TILE_X*7,BASE_TILE_Y*2,BASE_TILE_X,BASE_TILE_Y*2], //15 [BASE_TILE_X*7,BASE_TILE_Y*2,BASE_TILE_X,BASE_TILE_Y*2], //15
//fill hole //fill hole
[BASE_TILE_X*8,0, BASE_TILE_X,BASE_TILE_Y], //16 [BASE_TILE_X*7,BASE_TILE_Y*2,BASE_TILE_X,BASE_TILE_Y], //16
[BASE_TILE_X*8,BASE_TILE_Y, BASE_TILE_X,BASE_TILE_Y], //17 [BASE_TILE_X*8,BASE_TILE_Y, BASE_TILE_X,BASE_TILE_Y], //17
[BASE_TILE_X*8,BASE_TILE_Y*2,BASE_TILE_X,BASE_TILE_Y], //18 [BASE_TILE_X*8,0, BASE_TILE_X,BASE_TILE_Y], //18
[BASE_TILE_X*8,BASE_TILE_Y*3,BASE_TILE_X,BASE_TILE_Y] //19 [BASE_TILE_X*8,BASE_TILE_Y*3,BASE_TILE_X,BASE_TILE_Y] //19
], ],
@@ -576,18 +543,8 @@ function createPreloadSpriteSheet()
} }
}); });
holeObj.sprite = new createjs.Sprite(holeData, "digHoleLeft");
if(curAiVersion < 3) {
holeObj.digLimit = 6; //for check guard is close to runner when digging
} else {
holeObj.digLimit = 8; //for check guard is close to runner when digging
}
holeObj.action = ACT_STOP; //no digging
textData = new createjs.SpriteSheet({ textData = new createjs.SpriteSheet({
images: [getThemeImage("text")], images: [getThemeBitmap("text").image],
frames: {regX:0, height: BASE_TILE_Y, regY: 0, width: BASE_TILE_X}, frames: {regX:0, height: BASE_TILE_Y, regY: 0, width: BASE_TILE_X},
@@ -602,7 +559,7 @@ function createPreloadSpriteSheet()
"@":40, //gold "@":40, //gold
"#":41, //trap "#":41, //trap
"FLASH": { //42 & 43 "FLASH": { //42 & 43
frames: [42, 42, 42, 43, 43, 43], frames: [42, 42, 43, 43],
next: "FLASH", next: "FLASH",
speed: FLASH_SPEED speed: FLASH_SPEED
}, },
@@ -613,6 +570,73 @@ function createPreloadSpriteSheet()
}); });
} }
function createGuardObj(imageName)
{
var guard = new createjs.SpriteSheet(
{
images: [getThemeBitmap(imageName).image],
frames: {regX:0, height: BASE_TILE_Y, regY: 0, width: BASE_TILE_X},
animations: {
runRight: [0,2, "runRight", GUARD_SPEED],
runLeft : [3,5, "runLeft", GUARD_SPEED],
runUpDn : [6,7, "runUpDn", GUARD_SPEED],
barRight: {
frames: [ 22, 23, 23, 24, 24 ],
next: "barRight",
speed: GUARD_SPEED
},
barLeft: {
frames: [ 25, 26, 26, 27, 27 ],
next: "barLeft",
speed: GUARD_SPEED
},
reborn: {
frames: [ 28, 28, 29 ], //if change frame idx, don't forgot change "rebornFrame"
speed: GUARD_SPEED
},
fallRight : 8,
fallLeft: 30,
shakeRight: {
frames: [ 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8,
9, 10, 9, 10, 8 ],
next: null,
speed: GUARD_SPEED
},
shakeLeft: {
frames: [ 30, 30, 30, 30, 30, 30, 30,
30, 30, 30, 30, 30, 30,
31, 32, 31, 32, 30],
next: null,
speed: GUARD_SPEED
}
}
});
return guard;
}
function createHoleObj()
{
holeObj.sprite = new createjs.Sprite(holeData, "digHoleLeft");
if(curAiVersion < 3) {
holeObj.digLimit = 6; //for check guard is close to runner when digging
} else {
holeObj.digLimit = 8; //for check guard is close to runner when digging
}
holeObj.action = ACT_STOP; //no digging
}
//======================================= //=======================================
// country flag for demo info 5/14/2015 // country flag for demo info 5/14/2015
//======================================= //=======================================
+10 -3
Voir le fichier
@@ -172,8 +172,14 @@ function runnerMoveStep(action, stayCurrPos )
var holdOnBar = 0; var holdOnBar = 0;
if(curToken == BAR_T) { if(curToken == BAR_T) {
if( yOffset < 0) holdOnBar = 1; if( yOffset < 0) holdOnBar = 1;
else if(action == ACT_DOWN && y < maxTileY && map[x][y+1].act != LADDR_T) { else {
action = ACT_FALL; //shape fixed: 2014/03/27 //when runner with bar and press down will into falling state
// except "laddr" or "guard" at below, 11/25/2016
if(action == ACT_DOWN && y < maxTileY &&
map[x][y+1].act != LADDR_T && map[x][y+1].act != GUARD_T)
{
action = ACT_FALL;
}
} }
} }
@@ -341,7 +347,7 @@ function addGold(x, y)
var tile; var tile;
map[x][y].base = GOLD_T; map[x][y].base = GOLD_T;
tile = map[x][y].bitmap = new createjs.Bitmap(getThemeImage("gold")); tile = map[x][y].bitmap = getThemeBitmap("gold");
tile.setTransform(x * tileWScale, y * tileHScale,tileScale, tileScale); //x,y, scaleX, scaleY tile.setTransform(x * tileWScale, y * tileHScale,tileScale, tileScale); //x,y, scaleX, scaleY
mainStage.addChild(tile); mainStage.addChild(tile);
@@ -656,6 +662,7 @@ function fillComplete(evt, data)
if(guard[id].hasGold > 0) { //guard has gold and not fall into the hole if(guard[id].hasGold > 0) { //guard has gold and not fall into the hole
decGold(); decGold();
guard[id].hasGold = 0; guard[id].hasGold = 0;
guardRemoveRedhat(guard[id]); //9/4/2016
} }
guardReborn(x,y); guardReborn(x,y);
if(playMode == PLAY_CLASSIC || playMode == PLAY_AUTO || playMode == PLAY_DEMO) { if(playMode == PLAY_CLASSIC || playMode == PLAY_AUTO || playMode == PLAY_DEMO) {
+44 -6
Voir le fichier
@@ -234,9 +234,9 @@ function getFirstPlayInfo()
{ {
var firstValue; var firstValue;
firstValue = parseInt(getStorage(STORAGE_FIRST_PLAY)); firstValue = parseFloat(getStorage(STORAGE_FIRST_PLAY));
if( isNaN(firstValue) || firstValue < parseInt(VERSION) ) { if( isNaN(firstValue) || firstValue < parseFloat(VERSION) ) {
firstPlay = 1; firstPlay = 1;
} }
} }
@@ -279,9 +279,6 @@ function addEditLevel(levelMap)
{ {
if(editLevels >= MAX_EDIT_LEVEL) return false; if(editLevels >= MAX_EDIT_LEVEL) return false;
setEditLevel(++editLevels, levelMap); setEditLevel(++editLevels, levelMap);
//setStorage(STORAGE_USER_LEVEL+("00"+(editLevelInfo[editLevels])).slice(-3), levelMap);
//editLevelData[editLevels] = levelMap;
//++editLevels;
setEditLevelInfo(); setEditLevelInfo();
return true; return true;
@@ -476,6 +473,48 @@ function setRepeatAction()
setStorage(STORAGE_REPEAT_ACTION, repeatAction); setStorage(STORAGE_REPEAT_ACTION, repeatAction);
} }
//========================
// Gamepad Enable/Disable
//========================
function getGamepadMode()
{
if((gamepadMode = getStorage(STORAGE_GAMEPAD_MODE)) == null) {
gamepadMode = 1; //set default enable
} else {
gamepadMode = parseInt(gamepadMode)?1:0;
}
return gamepadMode;
}
function setGamepadMode()
{
setStorage(STORAGE_GAMEPAD_MODE, gamepadMode);
}
//====================
// Theme color state
//====================
function getThemeColor()
{
var colorId, themeName;
for(var i = 0; i < themeNameList.length; i++) {
themeName = themeNameList[i];
if((colorId = getStorage(STORAGE_THEME_COLOR + themeName)) == null) {
colorId = 0;
} else {
colorId = parseInt(colorId);
if(colorId < 0 || colorId >= maxThemeColor) colorId = 0;
}
curColorId[themeName] = colorId;
}
}
function setThemeColor()
{
setStorage(STORAGE_THEME_COLOR + curTheme, curColorId[curTheme]);
}
//=================== //===================
// Theme state // Theme state
//=================== //===================
@@ -486,7 +525,6 @@ function getThemeMode()
themeName = THEME_APPLE2; themeName = THEME_APPLE2;
} }
return themeName; return themeName;
} }
function setThemeMode(themeName) function setThemeMode(themeName)
BIN
Voir le fichier
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.
Fichier binaire non affiché.
Fichier binaire non affiché.
Fichier binaire non affiché.
Fichier binaire non affiché.
Fichier binaire non affiché.
Fichier binaire non affiché.
Fichier binaire non affiché.
Fichier binaire non affiché.
Fichier binaire non affiché.
Fichier binaire non affiché.
Fichier binaire non affiché.
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.