Lode Runner v1.00c.2

(1) AI version 2
(2) Add God-Mode Hot-key
Cette révision appartient à :
simon_hung
2014-12-26 15:29:43 +08:00
Parent 39be5a45cf
révision e6ea80cb0a
31 fichiers modifiés avec 1363 ajouts et 925 suppressions
+4 -4
Voir le fichier
@@ -1,9 +1,9 @@
<a target="_blank" href="http://goo.gl/0DrRSO">Lode Runner (超級運動員)</a>
<a target="_blank" href="http://loderunnerwebgame.com/LodeRunner/">Lode Runner (超級運動員)</a>
=======================================
This program build with Javascript + [CreateJS](http://www.createjs.com).
This game include <b>Lode Runner</b> (150 Levels) & <b>Championship Lode Runner</b> (50 Levels).
Game levels include <b>[Lode Runner (150 levels) & Championship Lode Runner (50 levels)](http://strategywiki.org/wiki/Lode_Runner/Walkthrough)</b>
### GAME Mode
<table>
@@ -13,7 +13,7 @@ This game include <b>Lode Runner</b> (150 Levels) & <b>Championship Lode Runner
</tr>
<tr>
<td><b>TIME MODE</b></td>
<td><b>TRAINING MODE</b></td>
<td>Player can select levels</td>
</tr>
@@ -30,6 +30,6 @@ This game include <b>Lode Runner</b> (150 Levels) & <b>Championship Lode Runner
</table>
### PLAY
<a target="_blank" href="http://goo.gl/KgmXhh">http://loderunnerwebgame.com/game/</a>
<a target="_blank" href="http://loderunnerwebgame.com/game/">http://loderunnerwebgame.com/game/</a>
------------------------------------
BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 5.7 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 2.9 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 51 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 19 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 6.3 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 4.8 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 18 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 3.7 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 2.8 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 1.7 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 32 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 11 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 5.2 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 4.4 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 16 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 5.9 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 3.8 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 739 B

+14
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
+12
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
+5 -2
Voir le fichier
@@ -1,5 +1,5 @@
var VERSION = "0.99n";
var AI_VERSION = 1;
var VERSION = "1.00c";
var AI_VERSION = 2;
var NO_OF_TILES_X = 28,
NO_OF_TILES_Y = 16;
@@ -31,6 +31,8 @@ var KEYCODE_BKSPACE = 8, //backspace
KEYCODE_UP = 38, //move up
KEYCODE_DOWN = 40, //move down
KEYCODE_SUBTRACT = 109, //Add KEYCODE_SUBTRACT & KEYCODE_HYPHEN for support fireFox 'dash' keycode
KEYCODE_HYPHEN = 173, //
KEYCODE_DASH = 189, //'-'
KEYCODE_DOT = 190, //'.'
@@ -47,6 +49,7 @@ var KEYCODE_BKSPACE = 8, //backspace
KEYCODE_A = 65, //'A'
KEYCODE_C = 67, //'C'
KEYCODE_G = 71, //'G'
KEYCODE_R = 82, //'R'
KEYCODE_S = 83, //'S'
KEYCODE_T = 84, //'T'
+28 -4
Voir le fichier
@@ -49,6 +49,10 @@ function getAutoDemoLevel(initValue)
demoGoldDrop = demoData[idx].goldDrop;
demoBornPos = demoData[idx].bornPos;
curLevel = demoData[idx].level;
curAiVersion = demoData[idx].ai; //07/04/2014
if("godMode" in demoData[idx])
godMode = demoData[idx].godMode; //07/09/2014
}
var demoCountTime = 0, demoCountEnable = 0;
@@ -149,6 +153,10 @@ function initDemoInfo()
demoGoldDrop = demoData[idx].goldDrop;
demoBornPos = demoData[idx].bornPos;
assert(curLevel == demoData[idx].level, "curLevel != level of demoData");
curAiVersion = demoData[idx].ai; //07/04/2014
if("godMode" in demoData[idx])
godMode = demoData[idx].godMode; //07/09/2014
}
function getDemoInfo()
@@ -229,7 +237,8 @@ function updatePlayerDemoData(playData, demoDataInfo)
state: demoDataInfo.state,
action: demoDataInfo.action,
goldDrop: demoDataInfo.goldDrop,
bornPos: demoDataInfo.bornPos
bornPos: demoDataInfo.bornPos,
godMode: demoDataInfo.godMode //07/09/2014
};
} else { // always update local data
//if( playerDemoData[level-1].time >= demoDataInfo.time) { //only udate best time
@@ -242,6 +251,8 @@ function updatePlayerDemoData(playData, demoDataInfo)
playerDemoData[level-1].action = demoDataInfo.action;
playerDemoData[level-1].goldDrop = demoDataInfo.goldDrop;
playerDemoData[level-1].bornPos = demoDataInfo.bornPos;
playerDemoData[level-1].godMode = demoDataInfo.godMode; //07/09/2014
}
}
}
@@ -281,9 +292,18 @@ function initRecordVariable()
}
}
function saveKeyCode(code)
var alwaysRecord = 0, keyPressed = 0;
function saveKeyCode(code, keyAction)
{
recordKeyCode = code
//-----------------------------------------------------------------------------
// Don't care repeat times, always record key when press dig-left or dig-right
// fixed by Simon 12/12/2014
//-----------------------------------------------------------------------------
alwaysRecord = 0;
if(keyAction == ACT_DIG_LEFT || keyAction == ACT_DIG_RIGHT) alwaysRecord = 1;
recordKeyCode = code;
keyPressed = 1;
}
function recordModeDump(state)
@@ -316,11 +336,13 @@ function processRecordKey()
function recordKeyAction()
{
if(recordKeyCode != lastKeyCode) {
if(!keyPressed) return;
if(recordKeyCode != lastKeyCode || alwaysRecord) {
playRecord.push(recordCount);
playRecord.push(recordKeyCode);
lastKeyCode = recordKeyCode;
}
keyPressed = 0;
}
var recordIdx;
@@ -405,6 +427,7 @@ function dumpRecord()
curDemoData.action = [];
curDemoData.goldDrop = [];
curDemoData.bornPos = [];
curDemoData.godMode = godModeKeyPressed; //07/09/2014
for(var i = 0; i < playRecord.length; i++) {
curDemoData.action[i] = playRecord[i];
@@ -424,6 +447,7 @@ function dumpRecord()
debug(" ai: " + AI_VERSION + ",");
debug(" time: " + playRecordTime + ",");
debug(" state: " + recordState + ",");
debug(" godMode: " + godModeKeyPressed + ","); //07/09/2014
if(playRecord.length > 0) {
txtStr = " action: [ " + playRecord[0];
+4 -4
Voir le fichier
@@ -106,9 +106,9 @@ function canvasEditReSize()
for (var scale = MAX_SCALE; scale >= MIN_SCALE; scale -= 0.25) {
canvasX = (BASE_SCREEN_X+BASE_TILE_X*2) * scale+ EDIT_PADDING * (NO_OF_TILES_X+1);
canvasY = BASE_SCREEN_Y * scale + EDIT_PADDING * (NO_OF_TILES_Y+1);
if (canvasX <= screenX && canvasY <= screenY || scale <= MIN_SCALE) break;
if (canvasX <= screenX1 && canvasY <= screenY1 || scale <= MIN_SCALE) break;
}
//debug("screenX = " + screenX + " screenY = " + screenY + "scale = " + scale);
//debug("screenX1 = " + screenX1 + " screenY1 = " + screenY1 + "scale = " + scale);
canvas = document.getElementById('canvas');
@@ -116,8 +116,8 @@ function canvasEditReSize()
canvas.height = canvasY;
//Set canvas top left position
var left = ((screenX - canvasX)/2|0),
top = ((screenY - canvasY)/2|0);
var left = ((screenX1 - canvasX)/2|0),
top = ((screenY1 - canvasY)/2|0);
canvas.style.left = (left>0?left:0) + "px";
canvas.style.top = (top>0?top:0) + "px";
canvas.style.position = "absolute";
+14 -9
Voir le fichier
@@ -159,7 +159,7 @@ function guardMoveStep( id, action)
map[x][y].act = curToken; //runner move to [x][y-1], so set [x][y].act to previous state
y--;
yOffset = tileH + yOffset;
if(map[x][y].act == RUNNER_T) gameState = GAME_RUNNER_DEAD; //collision
if(map[x][y].act == RUNNER_T) setRunnerDead(); //collision
//map[x][y].act = GUARD_T;
}
@@ -195,7 +195,7 @@ function guardMoveStep( id, action)
map[x][y].act = curToken; //runner move to [x][y+1], so set [x][y].act to previous state
y++;
yOffset = yOffset - tileH;
if(map[x][y].act == RUNNER_T) gameState = GAME_RUNNER_DEAD; //collision
if(map[x][y].act == RUNNER_T) setRunnerDead(); //collision
//map[x][y].act = GUARD_T;
}
if(action == ACT_DOWN && yOffset >= 0 && yOffset < yMove) { //try drop gold
@@ -255,7 +255,7 @@ function guardMoveStep( id, action)
map[x][y].act = curToken; //runner move to [x-1][y], so set [x][y].act to previous state
x--;
xOffset = tileW + xOffset;
if(map[x][y].act == RUNNER_T) gameState = GAME_RUNNER_DEAD; //collision
if(map[x][y].act == RUNNER_T) setRunnerDead(); //collision
//map[x][y].act = GUARD_T;
}
if( xOffset <= 0 && xOffset > -xMove) {
@@ -279,7 +279,7 @@ function guardMoveStep( id, action)
map[x][y].act = curToken; //runner move to [x+1][y], so set [x][y].act to previous state
x++;
xOffset = xOffset - tileW;
if(map[x][y].act == RUNNER_T) gameState = GAME_RUNNER_DEAD; //collision
if(map[x][y].act == RUNNER_T) setRunnerDead(); //collision
//map[x][y].act = GUARD_T;
}
if( xOffset >= 0 && xOffset < xMove) {
@@ -303,8 +303,8 @@ function guardMoveStep( id, action)
}
} else {
if(curGuard.action == ACT_CLIMB_OUT) action = ACT_CLIMB_OUT;
curGuard.sprite.x = x * tileW + xOffset;
curGuard.sprite.y = y * tileH + yOffset;
curGuard.sprite.x = (x * tileW + xOffset) * tileScale | 0;
curGuard.sprite.y = (y * tileH + yOffset) * tileScale | 0;
curGuard.pos = { x:x, y:y, xOffset:xOffset, yOffset:yOffset};
if(curShape != newShape) {
curGuard.sprite.gotoAndPlay(newShape);
@@ -730,8 +730,8 @@ function guardReborn(x, y)
var curGuard = guard[id];
curGuard.pos = { x:bornX, y:bornY, xOffset:0, yOffset: 0 };
curGuard.sprite.x = bornX * tileW;
curGuard.sprite.y = bornY * tileH;
curGuard.sprite.x = bornX * tileWScale | 0;
curGuard.sprite.y = bornY * tileHScale | 0;
curGuard.sprite.on("animationend", function() { rebornComplete(id); });
curGuard.sprite.gotoAndPlay("reborn");
@@ -745,7 +745,7 @@ function rebornComplete(id)
var x = guard[id].pos.x;
var y = guard[id].pos.y;
if( map[x][y].act == RUNNER_T) gameState = GAME_RUNNER_DEAD; //collision
if( map[x][y].act == RUNNER_T) setRunnerDead(); //collision
map[x][y].act = GUARD_T;
guard[id].sprite.removeAllEventListeners ("animationend");
guard[id].action = ACT_FALL;
@@ -754,3 +754,8 @@ function rebornComplete(id)
guard[id].sprite.gotoAndPlay("fallRight");
soundPlay("reborn");
}
function setRunnerDead()
{
if(!godMode) gameState = GAME_RUNNER_DEAD;
}
+32 -37
Voir le fichier
@@ -123,8 +123,8 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
canvas2.height = canvasY;
//Set canvas top left position
var left = ((screenX - canvasX)/2|0),
top = ((screenY - canvasY)/2|0);
var left = ((screenX1 - canvasX)/2|0),
top = ((screenY1 - canvasY)/2|0);
canvas2.style.left = (left>0?left:0) + "px";
canvas2.style.top = (top>0?top:0) + "px";
canvas2.style.position = "absolute";
@@ -153,8 +153,8 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
function getNameStartPos(nameLength, itemId)
{
var x = (4+(MAX_HISCORE_NAME_LENGTH-nameLength)/2)*tileW;
var y = (itemId * 1.2 + 5) * tileH;
var x = (4+(MAX_HISCORE_NAME_LENGTH-nameLength)/2)*tileWScale;
var y = (itemId * 1.2 + 5) * tileHScale;
return { x: x, y: y };
}
@@ -164,28 +164,28 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
var title = "LODE RUNNER " + ((_dataId == 1)?"2":"1") + " HIGH SCORES";
var barTile;
drawText((NO_OF_TILES_X-title.length)/2*tileW, 0.5*tileH, title, scoreStage);
drawText(0.5*tileW, 3*tileH, "NO", scoreStage);
drawText(7*tileW, 3*tileH, "NAME", scoreStage);
drawText(14.5*tileW, 3*tileH, "LEVEL SCORE", scoreStage);
drawText((NO_OF_TILES_X-title.length)/2*tileWScale, 0.5*tileHScale, title, scoreStage);
drawText(0.5*tileWScale, 3*tileHScale, "NO", scoreStage);
drawText(7*tileWScale, 3*tileHScale, "NAME", scoreStage);
drawText(14.5*tileWScale, 3*tileHScale, "LEVEL SCORE", scoreStage);
for(var x = 0; x < NO_OF_TILES_X; x++) {
barTile = new createjs.Bitmap(preload.getResult("ground"));
barTile.setTransform(x * tileW, 4.5*tileH , tileScale, tileScale);
barTile.setTransform(x * tileWScale, 4.5*tileHScale , tileScale, tileScale);
scoreStage.addChild(barTile);
}
for(var i = 0; i < MAX_HISCORE_RECORD; i++) {
var pos = getNameStartPos(hiScoreInfo[i].n.length, i);
drawText(0.5*tileW, pos.y, ("0"+(i+1)).slice(-2) + ".", scoreStage);
drawText(0.5*tileWScale, pos.y, ("0"+(i+1)).slice(-2) + ".", scoreStage); //no
if(hiScoreInfo[i].s > 0) {
if(hiScoreInfo[i].n.length > 0) {
drawText(pos.x, pos.y, hiScoreInfo[i].n, scoreStage);
drawText(pos.x, pos.y, hiScoreInfo[i].n, scoreStage, "D"); //name
}
drawText(15.5*tileW, pos.y, ("00"+hiScoreInfo[i].l).slice(-3), scoreStage);
drawText(20.5*tileW, pos.y, ("000000"+hiScoreInfo[i].s).slice(-7), scoreStage);
drawText(15.5*tileWScale, pos.y, ("00"+hiScoreInfo[i].l).slice(-3), scoreStage); //level
drawText(20.5*tileWScale, pos.y, ("000000"+hiScoreInfo[i].s).slice(-7), scoreStage); //score
}
}
}
@@ -200,7 +200,7 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
clearTimeout(timeOutHandler);
closeScoreTable();
//}
}
};
}
function restoreKeyDownHandler()
@@ -215,19 +215,19 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
var savedKeyDownHander, hiScoreTicker;
var cursor;
init();
initInput();
function init()
function initInput()
{
name = []; //string
name = []; //array of char
nameText = []; //text object
changeKeyDownHandler();
var pos = getNameStartPos(0, recordId);
cursor = new createjs.Sprite(textData, "FLASH");
cursor.setTransform(pos.x-tileW/2, pos.y , tileScale, tileScale);
cursor.setTransform(pos.x-tileWScale/2, pos.y , tileScale, tileScale);
scoreStage.addChild(cursor);
changeKeyDownHandler();
hiScoreTicker = createjs.Ticker.on("tick", scoreStage);
}
@@ -250,7 +250,7 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
cutTailSpace();
redrawName();
//uodate name for score info
//update name for score info
hiScoreInfo[recordId].n = array2String(name);
setHiScoreInfo();
@@ -281,26 +281,20 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
{
var pos = getNameStartPos(name.length, recordId);
removeNameText();
nameText = drawText(pos.x, pos.y, array2String(name), scoreStage);
nameText = drawText(pos.x, pos.y, array2String(name), scoreStage, "D");
//change cursor position
if(name.length > 0) cursor.x = pos.x + curPos * tileW;
else cursor.x = pos.x - tileW/2;
if(name.length > 0) cursor.x = pos.x + curPos * tileWScale;
else cursor.x = pos.x - tileWScale/2;
//move cursor to top
moveChild2Top(scoreStage, cursor);
}
function handleHiScoreName(event)
{
if(!event){ event = window.event; } //cross browser issues exist
//if(event.shiftKey) {
//} else if (event.ctrlKey) {
//} else
{
var code = event.keyCode;
if(curPos >= MAX_HISCORE_NAME_LENGTH &&
@@ -311,22 +305,25 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
}
switch(true) {
case (code >= 48 && code <= 57): // 0 ~ 9
if(curPos == 0) { soundPlay("beep"); break; } //first char except numbers
name[curPos++] = String.fromCharCode(code);
break;
case (code >=65 && code <= 90): // A ~ Z
case (code >= 97 && code <= 122): //a ~ z
if( code > 90) code -= 32;
name[curPos++] = String.fromCharCode(code);
break;
case (code == KEYCODE_DOT): //'.'
if(curPos == 0) { soundPlay("beep"); break; } //first char except '.'
name[curPos++] = ".";
break;
case (code == KEYCODE_DASH): //'-'
case (code == KEYCODE_DASH || code == KEYCODE_HYPHEN || code == KEYCODE_SUBTRACT): //'-'
if(curPos == 0) { soundPlay("beep"); break; } //first char except '-'
name[curPos++] = "-";
break;
case (code == KEYCODE_SPACE): //space
if(curPos == 0) {
soundPlay("beep"); //wrong key code
break;
}
if(curPos == 0) { soundPlay("beep"); break; } //first char except space
name[curPos++] = " ";
break;
case (code == KEYCODE_BKSPACE): //backspace
@@ -340,7 +337,7 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
if(curPos < name.length) curPos++;
break;
case (code == KEYCODE_ENTER): //ENTER
if(name.length > 0) inputFinish();
if(name.length > 0) inputFinish(true); //async
else soundPlay("beep");
default:
//debug(code);
@@ -349,9 +346,7 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
}
redrawName();
return false;
}
}
}
}
+6 -6
Voir le fichier
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<title>Lode Runner</title>
<title>Lode Runner Web Game</title>
<!-- DON'T FORGET TO MODIFY *.web.html
* =============================================================================
* Lode Runner (超級運動員) - APPLE-II version
@@ -16,18 +16,18 @@
*
* Source Code: https://github.com/SimonHung/LodeRunner
*
* by Simon Hung 2014/06/20 (http://simonsays-tw.com)
* by Simon Hung 06/20/2014, 11/23/2014 (http://simonsays-tw.com)
* =============================================================================
-->
<meta http-equiv="X-UA-Compatible" content="chrome=1, IE=edge">
<meta name="description" content="GAME HTML5 JavaScript CreateJS Championship Lode Runner">
<meta name="description" content="An HTML5 remake game, include Lode Runner & Championship Lode Runner">
<link href="lodeRunner.ico" rel="shortcut icon" >
<style>#canvas { position:absolute; left:0; top:0; }</style>
<script type="text/javascript" src="./lib/preloadjs-0.4.1.min.js"></script>
<script type="text/javascript" src="./lib/soundjs-0.5.2.min.js"></script>
<script type="text/javascript" src="./lib/tweenjs-0.5.1.min.js"></script>
<script type="text/javascript" src="./lib/preloadjs-0.6.0.min.js"></script>
<script type="text/javascript" src="./lib/soundjs-0.6.0.min.js"></script>
<script type="text/javascript" src="./lib/tweenjs-0.6.0.min.js"></script>
<script type="text/javascript" src="./lib/easeljs-0.7.1.min.js"></script>
<script type="text/javascript" src="lodeRunner.baseLevel.js"></script>
+28 -5
Voir le fichier
@@ -14,11 +14,17 @@ function pressShiftKey(code)
gameState = GAME_PREV_LEVEL;
break;
case KEYCODE_UP: //SHIFT-UP, inc runner
if(runnerLife < 10) {
if(playMode == PLAY_CLASSIC && runnerLife < 10) { //bug fixed: add check playMode, 12/15/2014
runnerLife++;
drawLife();
}
break;
case KEYCODE_X: //SHIFT-X
toggleTrapTile();
break;
case KEYCODE_G: //SHIFT-G, toggle god mode
toggleGodMode();
break;
default:
if(runnerDebug) debugKeyPress(code);
break;
@@ -39,9 +45,6 @@ function pressCtrlKey(code)
runnerLife = 1;
gameState = GAME_RUNNER_DEAD;
break;
case KEYCODE_X: //CTRL-X
toggleTrapTile();
break;
case KEYCODE_S: //CTRL-S, toggle sound
if( (soundOff ^= 1) == 1) {
soundDig.stop();
@@ -98,6 +101,26 @@ function debugKeyPress(code)
}
}
var godMode = 0, godModeKeyPressed = 0;
function initHotKeyVariable()
{
godMode = 0;
godModeKeyPressed = 0;
}
function toggleGodMode()
{
godModeKeyPressed = 1; //means player press the god-mod hot-key
godMode ^= 1;
if(godMode) {
showTipsText("GOD MODE ON", 0);
} else {
showTipsText("GOD MODE OFF", 0);
}
}
function setSpeed(v)
{
speed += v;
@@ -163,7 +186,7 @@ function pressKey(code)
//debug("keycode = " + code);
break;
}
if(recordMode && code != KEYCODE_ESC) saveKeyCode(code);
if(recordMode && code != KEYCODE_ESC) saveKeyCode(code, keyAction);
}
function gameResume()
+70 -40
Voir le fichier
@@ -16,10 +16,11 @@
* =============================================================================
*/
var screenX, screenY;
var screenX1, screenY1;
var canvasX, canvasY;
var tileW, tileH; //tile width & tile height
var tileWScale, tileHScale; //tile width/height with scale
var W2, W4; //W2: 1/2 tile-width, W4: 1/4 tile width
var H2, H4; //H2: 1/2 tile-height, H4: 1/4 tile height
@@ -33,7 +34,7 @@ var loadingTxt;
var gameState, lastGameState ;
var tileScale, xMove, yMove;
var speedMode = [18, 22, 26, 30, 34]; //slow normal fast
var speedMode = [16, 20, 25, 30, 35]; //slow normal fast
var speedText = ["VERY SLOW", "SLOW", "NORMAL", "FAST", "VERY FAST"];
var speed = 2; //normal
var demoSpeed = 40;
@@ -49,8 +50,8 @@ var curTime = MAX_TIME_COUNT;
function init()
{
var screenSize = getScreenSize();
screenX = screenSize.x;
screenY = screenSize.y;
screenX1 = screenSize.x;
screenY1 = screenSize.y;
loadDataJS(); //load demo data file
canvasReSize();
@@ -83,9 +84,9 @@ function canvasReSize()
for (var scale = MAX_SCALE; scale >= MIN_SCALE; scale -= 0.25) {
canvasX = BASE_SCREEN_X * scale;
canvasY = BASE_SCREEN_Y * scale;
if (canvasX <= screenX && canvasY <= screenY || scale <= MIN_SCALE) break;
if (canvasX <= screenX1 && canvasY <= screenY1 || scale <= MIN_SCALE) break;
}
//debug("screenX = " + screenX + " screenY = " + screenY + "scale = " + scale);
//debug("screenX1 = " + screenX1 + " screenY1 = " + screenY1 + "scale = " + scale);
canvas = document.getElementById('canvas');
@@ -93,16 +94,21 @@ function canvasReSize()
canvas.height = canvasY;
//Set canvas top left position
var left = ((screenX - canvasX)/2|0),
top = ((screenY - canvasY)/2|0);
var left = ((screenX1 - canvasX)/2|0),
top = ((screenY1 - canvasY)/2|0);
canvas.style.left = (left>0?left:0) + "px";
canvas.style.top = (top>0?top:0) + "px";
canvas.style.position = "absolute";
//initial constant value
tileScale = scale;
tileW = BASE_TILE_X * scale;
tileH = BASE_TILE_Y * scale;
//tileW = BASE_TILE_X * scale;
//tileH = BASE_TILE_Y * scale;
tileW = BASE_TILE_X; //tileW and tileH for detection so don't change scale
tileH = BASE_TILE_Y;
tileWScale = BASE_TILE_X * scale;
tileHScale = BASE_TILE_Y * scale;
W2 = (tileW/2|0); //20, 15, 10,
H2 = (tileH/2|0); //22, 16, 11
@@ -110,8 +116,9 @@ function canvasReSize()
W4 = (tileW/4|0); //10, 7, 5,
H4 = (tileH/4|0); //11, 8, 5,
xMove = 4 * tileScale * 2;
yMove = 4 * tileScale * 2;
//xMove and yMove initial by setSpeedByAiVersion()
//xMove = 4 * tileScale * 2;
//yMove = 4 * tileScale * 2;
}
function createStage()
@@ -280,6 +287,9 @@ function startGame()
startPlayTicker();
changingLevel = 1;
curAiVersion = AI_VERSION; //07/04/2014
initHotKeyVariable(); //07/09/2014
switch(playMode) {
case PLAY_CLASSIC:
getClassicInfo();
@@ -325,6 +335,8 @@ function initVariable()
initGuardVariable();
initInfoVariable();
initCycVariable();
setSpeedByAiVersion(); //07/04/2014
}
function buildLevelMap(levelMap)
@@ -422,7 +434,7 @@ function buildLevelMap(levelMap)
runner = {};
curTile = runner.sprite = new createjs.Sprite(runnerData, "runRight");
runner.pos = { x:x, y:y, xOffset:0, yOffset:0};
runner.action = ACT_STOP;
runner.action = ACT_UNKNOWN;
runner.shape = "runRight";
runner.lastLeftRight = "ACT_RIGHT";
//curTile.gotoAndPlay();
@@ -430,7 +442,7 @@ function buildLevelMap(levelMap)
//curTile.framerate = 60;
break;
}
curTile.setTransform(x * tileW, y * tileH,tileScale, tileScale); //x,y, scaleX, scaleY
curTile.setTransform(x * tileWScale, y * tileHScale, tileScale, tileScale); //x,y, scaleX, scaleY
mainStage.addChild(curTile);
}
}
@@ -470,7 +482,7 @@ function drawGround()
groundTile = [];
for(var x = 0; x < NO_OF_TILES_X; x++) {
groundTile[x] = new createjs.Bitmap(preload.getResult("ground"));
groundTile[x].setTransform(x * tileW, NO_OF_TILES_Y*tileH , tileScale, tileScale);
groundTile[x].setTransform(x * tileWScale, NO_OF_TILES_Y * tileHScale, tileScale, tileScale);
mainStage.addChild(groundTile[x]);
}
}
@@ -565,7 +577,7 @@ function drawScoreTxt()
function drawLifeTxt()
{
lifeTxt = drawText(13*tileW, infoY, "MEN", mainStage);
lifeTxt = drawText(13*tileWScale, infoY, "MEN", mainStage);
}
function drawLevelTxt()
@@ -575,29 +587,29 @@ function drawLevelTxt()
//if(playMode == PLAY_CLASSIC || playMode == PLAY_AUTO) xOffset = 20;
//else xOffset = 19;
levelTxt = drawText(xOffset*tileW, infoY, "LEVEL", mainStage);
levelTxt = drawText(xOffset*tileWScale, infoY, "LEVEL", mainStage);
}
//for demo mode
function drawDemoTxt()
{
demoTxt = drawText(14*tileW, infoY, "DEMO", mainStage);
demoTxt = drawText(14*tileWScale, infoY, "DEMO", mainStage);
}
//for time & edit mode
function drawGoldTxt()
{
goldTxt = drawText(0*tileW, infoY, "@", mainStage);
goldTxt = drawText(0*tileWScale, infoY, "@", mainStage);
}
function drawGuardTxt()
{
guardTxt = drawText((5+2/3)*tileW, infoY, "#", mainStage);
guardTxt = drawText((5+2/3)*tileWScale, infoY, "#", mainStage);
}
function drawTimeTxt()
{
timeTxt = drawText((11+1/3)*tileW, infoY, "TIME", mainStage);
timeTxt = drawText((11+1/3)*tileWScale, infoY, "TIME", mainStage);
}
// draw score number
@@ -612,7 +624,7 @@ function drawScore(addScore)
//if(playMode == PLAY_CLASSIC || playMode == PLAY_AUTO) digitNo = 7;
//else digitNo = 6
scoreTile = drawText(5*tileW, infoY, ("000000"+curScore).slice(-7), mainStage);
scoreTile = drawText(5*tileWScale, infoY, ("000000"+curScore).slice(-7), mainStage);
}
function drawLife()
@@ -620,7 +632,7 @@ function drawLife()
for(var i = 0; i < lifeTile.length; i++)
mainStage.removeChild(lifeTile[i]);
lifeTile = drawText(16*tileW, infoY, ("00"+runnerLife).slice(-3), mainStage);
lifeTile = drawText(16*tileWScale, infoY, ("00"+runnerLife).slice(-3), mainStage);
}
function drawLevel()
@@ -630,11 +642,11 @@ function drawLevel()
switch(playMode) {
case PLAY_AUTO:
levelTile = drawText(25*tileW, infoY, ("00"+demoLevel).slice(-3), mainStage);
levelTile = drawText(25*tileWScale, infoY, ("00"+demoLevel).slice(-3), mainStage);
break;
case PLAY_CLASSIC:
default:
levelTile = drawText(25*tileW, infoY, ("00"+curLevel).slice(-3), mainStage);
levelTile = drawText(25*tileWScale, infoY, ("00"+curLevel).slice(-3), mainStage);
break;
}
}
@@ -645,7 +657,7 @@ function drawGold(addGold)
for(var i = 0; i < goldTile.length; i++)
mainStage.removeChild(goldTile[i]);
goldTile = drawText(1*tileW, infoY, ("00"+curGetGold).slice(-3), mainStage);
goldTile = drawText(1*tileWScale, infoY, ("00"+curGetGold).slice(-3), mainStage);
}
function drawGuard(addGuard)
@@ -655,7 +667,7 @@ function drawGuard(addGuard)
for(var i = 0; i < guardTile.length; i++)
mainStage.removeChild(guardTile[i]);
guardTile = drawText((6+2/3)*tileW, infoY, ("00"+curGuardDeadNo).slice(-3), mainStage);
guardTile = drawText((6+2/3)*tileWScale, infoY, ("00"+curGuardDeadNo).slice(-3), mainStage);
}
@@ -668,7 +680,7 @@ function drawTime(decTime)
for(var i = 0; i < timeTile.length; i++)
mainStage.removeChild(timeTile[i]);
timeTile = drawText((15+1/3)*tileW, infoY, ("00"+curTime).slice(-3), mainStage);
timeTile = drawText((15+1/3)*tileWScale, infoY, ("00"+curTime).slice(-3), mainStage);
}
function setGroundInfoOrder()
@@ -702,17 +714,19 @@ function setGroundInfoOrder()
for(i = 0; i < levelTile.length; i++) moveChild2Top(mainStage, levelTile[i]);
}
function drawText(x, y, str, parentObj)
function drawText(x, y, str, parentObj, numberType)
{
var text = str.toUpperCase();
var textTile = [];
if(typeof numberType == "undefined") numberType = "N";
for(var i = 0; i < text.length; i++) {
var code = text.charCodeAt(i);
switch(true) {
case (code >=48 && code <=57):
textTile[i] = new createjs.Sprite(textData,"N"+String.fromCharCode(code));
case (code >=48 && code <=57): //N0 ~ N9 or D0 ~ D9
textTile[i] = new createjs.Sprite(textData, numberType+String.fromCharCode(code));
break;
case (code >=65 && code <= 90):
textTile[i] = new createjs.Sprite(textData, String.fromCharCode(code));
@@ -739,7 +753,7 @@ function drawText(x, y, str, parentObj)
textTile[i] = new createjs.Sprite(textData, "SPACE");
break;
}
textTile[i].setTransform(x + i*tileW, y, tileScale, tileScale).stop();
textTile[i].setTransform(x + i*tileWScale, y, tileScale, tileScale).stop();
parentObj.addChild(textTile[i]);
}
return textTile;
@@ -773,7 +787,8 @@ function showLevel(levelMap)
{
mainStage.removeAllChildren();
loadingTxt.text = ""
loadingTxt.text = "";
//loadingTxt.text = tileScale; //for debug
mainStage.addChild(loadingTxt); //for debug
initVariable();
@@ -807,7 +822,7 @@ function showTipsText(text, always)
width = height = 0;
}
x = tipsText.x = (canvas.width - width) / 2 | 0;
y = tipsText.y = (NO_OF_TILES_Y*tileH - height) / 2 | 0;
y = tipsText.y = (NO_OF_TILES_Y*tileHScale - height) / 2 | 0;
tipsText.shadow = new createjs.Shadow("white", 2, 2, 1);
tipsRect = new createjs.Shape();
@@ -841,6 +856,13 @@ function toggleTrapTile()
}
}
}
if(dspTrapTile) {
showTipsText("SHOW TRAP TILE", 0);
} else {
showTipsText("HIDE TRAP TILE", 0);
}
}
function startAllSpriteObj()
@@ -888,8 +910,8 @@ function gameOverAnimation()
{
var gameOverImage = new createjs.Bitmap(preload.getResult("over"));
var bound = gameOverImage.getBounds();
var x = (NO_OF_TILES_X*tileW)/2|0;
var y = (NO_OF_TILES_Y*tileH)/2|0;
var x = (NO_OF_TILES_X*tileWScale)/2|0;
var y = (NO_OF_TILES_Y*tileHScale)/2|0;
var regX = (bound.width)/2|0;
var regY = (bound.height)/2|0;
@@ -926,8 +948,8 @@ var cycScreen, cycMaxRadius, cycDiff, cycX, cycY
function initCycVariable()
{
cycX = NO_OF_TILES_X * tileW/2;
cycY = NO_OF_TILES_Y * tileH/2;
cycX = NO_OF_TILES_X * tileWScale/2;
cycY = NO_OF_TILES_Y * tileHScale/2;
cycMaxRadius = Math.sqrt(cycX*cycX+cycY*cycY)|0+1;
cycDiff = (cycMaxRadius/CLOSE_SCREEN_SPEED)|0;
}
@@ -968,6 +990,10 @@ function closingScreen(r)
setTimeout(function() { closingScreen(r);}, 5);
} else {
var levelMap;
curAiVersion = AI_VERSION; //07/04/2014
initHotKeyVariable(); //07/09/2014
if(playMode == PLAY_AUTO) getAutoDemoLevel(0);
if(playMode == PLAY_DEMO) getNextDemoLevel();
/*
@@ -980,7 +1006,6 @@ function closingScreen(r)
} else {
levelMap = levelData[curLevel-1];
}
showLevel(levelMap);
addCycScreen();
setTimeout(function() { openingScreen(cycDiff*2);}, 5);
@@ -1174,8 +1199,10 @@ function mainTick(event)
break;
case GAME_RUNNER_DEAD:
//mainStage.update();
//if(recordMode) recordModeToggle(GAME_RUNNER_DEAD);
//if(recordMode) recordModeToggle(GAME_RUNNER_DEAD); //for debug only (if enable it must disable below statement)
if(recordMode == RECORD_KEY) recordModeDump(GAME_RUNNER_DEAD);
soundStop(soundFall);
stopAllSpriteObj();
soundPlay("dead");
@@ -1266,8 +1293,11 @@ function mainTick(event)
debug("design error!");
break;
}
//if(recordMode) recordModeToggle(GAME_FINISH); //for debug only (if enable it must comment below if statement)
if(recordMode == RECORD_KEY) {
recordModeDump(GAME_FINISH);
if((playMode == PLAY_CLASSIC || playMode == PLAY_MODERN) && playData <= 2) {
updatePlayerDemoData(playData, curDemoData); //update current player demo data
}
+28 -29
Voir le fichier
@@ -338,7 +338,7 @@ function closeIconClass(_width, _height, _stage, _scale, _activeColor, _callBack
// < 4 > : SLIDE_GAP_X
function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _screenX, _screenY,
function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _screenX1, _screenY1,
_parentStage, _scale, _activeFun, _closeFun, _postFun)
{
var TITLE_TEXT_SIZE = 36 * _scale;
@@ -462,8 +462,8 @@ function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _scree
canvas1.width = CANVAS_SIZE_X;
canvas1.height = CANVAS_SIZE_Y;
var left = ((_screenX - canvas1.width)/2|0),
top = ((_screenY - canvas1.height)/2|0);
var left = ((_screenX1 - canvas1.width)/2|0),
top = ((_screenY1 - canvas1.height)/2|0);
canvas1.style.left = (left>0?left:0) + "px";
canvas1.style.top = (top>0?top:0) + "px";
canvas1.style.position = "absolute";
@@ -1265,7 +1265,6 @@ function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _scree
////debug("delete level = " + level);
}
////////////////////////////////////////////
}
function createTitle()
@@ -1316,8 +1315,8 @@ function menuDialog(_titleName, _itemList, _stage, _scale, _closeCallBack, _args
var CLOSE_ICON_ACTIVE_COLOR = "#ff5050";
var screenX = _stage.canvas.width;
var screenY = _stage.canvas.height;
var screenX1 = _stage.canvas.width;
var screenY1 = _stage.canvas.height;
var titleTextObj, titleWidth, titleHeight;
var itemText = [], maxItemTextWidth, itemTextHeight;
@@ -1348,7 +1347,7 @@ function menuDialog(_titleName, _itemList, _stage, _scale, _closeCallBack, _args
function coverParentStage()
{
coverBackgroundObj = new createjs.Shape();
coverBackgroundObj.graphics.beginFill(COVER_BACKGROUND_COLOR).drawRect(0, 0, screenX, screenY).endFill();
coverBackgroundObj.graphics.beginFill(COVER_BACKGROUND_COLOR).drawRect(0, 0, screenX1, screenY1).endFill();
coverBackgroundObj.alpha = 0.6;
_stage.addChild(coverBackgroundObj);
}
@@ -1373,8 +1372,8 @@ function menuDialog(_titleName, _itemList, _stage, _scale, _closeCallBack, _args
menuX = (maxItemTextWidth > titleWidth? maxItemTextWidth: titleWidth) + TITLE_TEXT_SIZE * 2;
menuY = TITLE_AREA_Y + BOTTOM_AREA_Y + (ITEM_AREA_Y+ITEM_GAP_Y)*_itemList.length;
startX = (screenX-menuX)/2|0;
startY = (screenY-menuY)/2|0;
startX = (screenX1-menuX)/2|0;
startY = (screenY1-menuY)/2|0;
}
function creatBackground()
@@ -1501,7 +1500,7 @@ function mainMenu(callbackFun)
{
var mainMenuList = [
{ name: "CLASSIC MODE", activeFun: classicMenu },
{ name: "TIME MODE", activeFun: modernMenu },
{ name: "TRAINING MODE", activeFun: modernMenu },
{ name: "EDIT MODE", activeFun: editMenu },
{ name: "HELP", activeFun: helpMenu }
];
@@ -1539,7 +1538,7 @@ function modernMenu(id, callbackFun)
modernMenuList.push({ name: USER_CREATED_NAME, activeFun: modernPlay});
}
menuDialog(" TIME MODE ", modernMenuList, mainStage, tileScale, mainMenu, callbackFun);
menuDialog(" TRAINING MODE ", modernMenuList, mainStage, tileScale, mainMenu, callbackFun);
}
function demoMenu(id, callbackFun)
@@ -1640,7 +1639,7 @@ function helpMenuClose(callbackFun)
/////////////////////////////////////////////////////
function mainMenuIconClass( _screenX, _screenY, _scale, _mainMenuBitmap)
function mainMenuIconClass( _screenX1, _screenY1, _scale, _mainMenuBitmap)
{
//_scale = _scale*2/3;
var border = 4 * _scale + 2;
@@ -1709,8 +1708,8 @@ function mainMenuIconClass( _screenX, _screenY, _scale, _mainMenuBitmap)
mainMainCanvas.width = bitmapX+border*2;
mainMainCanvas.height = bitmapY+border*2;
var left = (_screenX - mainMainCanvas.width - bitmapX/3),
top = (_screenY - mainMainCanvas.height - bitmapY/4);
var left = (_screenX1 - mainMainCanvas.width - bitmapX/3),
top = (_screenY1 - mainMainCanvas.height - bitmapY/4);
//top = bitmapY/4|0;
mainMainCanvas.style.left = left + "px";
mainMainCanvas.style.top = top + "px";
@@ -1794,7 +1793,7 @@ function activeSelectMenu(activeFun, postFun)
if(playMode == PLAY_EDIT) {
var editLevel = testLevelInfo.level> editLevels?0:testLevelInfo.level;
selectDialog(USER_CREATED_NAME, checkBitmap, editLevelData, editLevel, screenX, screenY,
selectDialog(USER_CREATED_NAME, checkBitmap, editLevelData, editLevel, screenX1, screenY1,
mainStage, tileScale, activeFun, editSelectMenuClose, postFun)
} else {
//var titleName = (playData==1)?LODERUNNER_NAME1:((playData==2)?LODERUNNER_NAME2:USER_CREATED_NAME);
@@ -1820,12 +1819,12 @@ function activeSelectMenu(activeFun, postFun)
break;
}
selectDialog(titleName, checkBitmap, levelData, curLevel, screenX, screenY,
selectDialog(titleName, checkBitmap, levelData, curLevel, screenX1, screenY1,
mainStage, tileScale, activeFun, null, postFun)
}
}
function selectIconClass( _screenX, _screenY, _scale, _bitmap)
function selectIconClass( _screenX1, _screenY1, _scale, _bitmap)
{
//_scale = _scale*2/3;
var border = 4 * _scale + 2;
@@ -1894,9 +1893,9 @@ function selectIconClass( _screenX, _screenY, _scale, _bitmap)
selectCanvas.width = bitmapX+border*2;
selectCanvas.height = bitmapY+border*2;
var left = (_screenX - selectCanvas.width - bitmapX/3),
var left = (_screenX1 - selectCanvas.width - bitmapX/3),
top = bitmapY/4|0;
//top = (_screenY - selectCanvas.height - bitmapY/4);
//top = (_screenY1 - selectCanvas.height - bitmapY/4);
selectCanvas.style.left = left + "px";
selectCanvas.style.top = top + "px";
selectCanvas.style.position = "absolute";
@@ -2053,8 +2052,8 @@ function levelPassDialog(_level, _getGold, _guardDead, _time, _hiScore,
hiScoreNameObj, hiScoreTextObj;
var coverBackgroundObj, background1Obj, background2Obj, menuButtonObj;
var screenX = _stage.canvas.width;
var screenY = _stage.canvas.height;
var screenX1 = _stage.canvas.width;
var screenY1 = _stage.canvas.height;
var menuX, menuY, startX, startY
var timeNameX, maxTextSize;
@@ -2105,14 +2104,14 @@ function levelPassDialog(_level, _getGold, _guardDead, _time, _hiScore,
menuX = maxTextSize + TITLE_TEXT_SIZE * 5;
menuY = TITLE_TEXT_SIZE * 2 + (ITEM_TEXT_SIZE+TEXT_GAP_Y) * 5 + buttonY*3;
startX = (screenX-menuX)/2|0;
startY = (screenY-menuY)/2|0;
startX = (screenX1-menuX)/2|0;
startY = (screenY1-menuY)/2|0;
}
function coverParentStage()
{
coverBackgroundObj = new createjs.Shape();
coverBackgroundObj.graphics.beginFill(COVER_BACKGROUND_COLOR).drawRect(0, 0, screenX, screenY).endFill();
coverBackgroundObj.graphics.beginFill(COVER_BACKGROUND_COLOR).drawRect(0, 0, screenX1, screenY1).endFill();
coverBackgroundObj.alpha = 0.6;
_stage.addChild(coverBackgroundObj);
}
@@ -2423,8 +2422,8 @@ function yesNoDialog(_txtMsg, _yesBitmap, _noBitmap, _stage, _scale, _callBack)
var textObj;
var coverBackgroundObj, background1Obj, background2Obj;
var screenX = _stage.canvas.width;
var screenY = _stage.canvas.height;
var screenX1 = _stage.canvas.width;
var screenY1 = _stage.canvas.height;
var buttonX = _yesBitmap.getBounds().width * _scale,
buttonY = _yesBitmap.getBounds().height * _scale;
@@ -2474,14 +2473,14 @@ function yesNoDialog(_txtMsg, _yesBitmap, _noBitmap, _stage, _scale, _callBack)
menuY = (TEXT_GAP_Y + TEXT_MSG_SIZE) * _txtMsg.length + TEXT_MSG_SIZE * 2 + buttonY;
menuX = maxTextSize + TEXT_MSG_SIZE * 2;
startX = (screenX-menuX)/2|0;
startY = (screenY-menuY)/2|0;
startX = (screenX1-menuX)/2|0;
startY = (screenY1-menuY)/2|0;
}
function coverParentStage()
{
coverBackgroundObj = new createjs.Shape();
coverBackgroundObj.graphics.beginFill(COVER_BACKGROUND_COLOR).drawRect(0, 0, screenX, screenY).endFill();
coverBackgroundObj.graphics.beginFill(COVER_BACKGROUND_COLOR).drawRect(0, 0, screenX1, screenY1).endFill();
coverBackgroundObj.alpha = 0.6;
_stage.addChild(coverBackgroundObj);
}
+5 -4
Voir le fichier
@@ -71,11 +71,11 @@ function showTipsMsg(_tipsTxt, _stage, _scale)
var TEXT_SIZE = 72* _scale;
var TEXT_COLOR = "#ff2020";
var tipsText = new createjs.Text(_tipsTxt, "bold " + TEXT_SIZE + "px Helvetica", TEXT_COLOR);
var screenX = _stage.canvas.width;
var screenY = _stage.canvas.height;
var screenX1 = _stage.canvas.width;
var screenY1 = _stage.canvas.height;
tipsText.x = (screenX) / 2 | 0;
tipsText.y = screenY/2 - tipsText.getBounds().height*5/4 | 0;
tipsText.x = (screenX1) / 2 | 0;
tipsText.y = screenY1/2 - tipsText.getBounds().height*5/4 | 0;
tipsText.shadow = new createjs.Shadow("white", 3, 3, 2);
tipsText.textAlign = "center";
@@ -104,6 +104,7 @@ function soundPlay(name)
if(typeof name == "string") {
return createjs.Sound.play(name);
} else {
name.stop(); //12/21/2014 , for support soundJS 0.6.0
name.play();
}
}
+135 -95
Voir le fichier
@@ -64,6 +64,7 @@ function showLoadingPage()
mainStage.addChild(coverBitmap);
mainStage.update();
}
}
function createRunnerSpriteSheet(runnerImage)
{
@@ -97,7 +98,6 @@ function showLoadingPage()
}
});
}
}
//*****************************************************************************
//BEGIN of preload
@@ -156,22 +156,22 @@ function preloadResource()
{ src: "image/no.png", id: "no" },
{ src: "sound/born.mp3", id:"reborn"},
{ src: "sound/dead.mp3", id:"dead"},
{ src: "sound/dig.mp3", id:"dig"},
{ src: "sound/getGold.mp3", id:"getGold"},
{ src: "sound/fall.mp3", id:"fall"},
{ src: "sound/down.mp3", id:"down"},
{ src: "sound/pass.mp3", id:"pass"},
{ src: "sound/trap.mp3", id:"trap"},
{ src: "sound/born.ogg", id:"reborn"},
{ src: "sound/dead.ogg", id:"dead"},
{ src: "sound/dig.ogg", id:"dig"},
{ src: "sound/getGold.ogg", id:"getGold"},
{ src: "sound/fall.ogg", id:"fall"},
{ src: "sound/down.ogg", id:"down"},
{ src: "sound/pass.ogg", id:"pass"},
{ src: "sound/trap.ogg", id:"trap"},
{ src: "sound/goldFinish.mp3", id:"goldFinish"},
{ src: "sound/ending.mp3", id:"ending"},
{ src: "sound/scoreBell.mp3", id:"scoreBell"},
{ src: "sound/scoreCount.mp3", id:"scoreCount"},
{ src: "sound/scoreEnding.mp3", id:"scoreEnding"},
{ src: "sound/goldFinish.ogg", id:"goldFinish"},
{ src: "sound/ending.ogg", id:"ending"},
{ src: "sound/scoreBell.ogg", id:"scoreBell"},
{ src: "sound/scoreCount.ogg", id:"scoreCount"},
{ src: "sound/scoreEnding.ogg", id:"scoreEnding"},
{ src: "sound/beep.mp3", id:"beep"},
{ src: "sound/beep.ogg", id:"beep"},
{ src: "cursor/openhand.cur", id:"openHand"}, //preload cursor
{ src: "cursor/closedhand.cur", id:"closeHand"}
@@ -179,7 +179,7 @@ function preloadResource()
];
preload = new createjs.LoadQueue(true);
createjs.Sound.alternateExtensions = ["ogg"];
createjs.Sound.alternateExtensions = ["mp3"];
preload.installPlugin(createjs.Sound);
preload.on("error", handleFileError);
preload.on("progress", handleProgress);
@@ -228,12 +228,126 @@ function preloadResource()
{
percentTxt.text = "100%";
mainStage.update();
createSpriteSheet();
createPreloadSpriteSheet();
createSoundInstance();
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()
{
mainStage.removeChild(runnerSprite, progress, progressBorder, percentTxt);
showRemakeBitmap();
mainStage.addChild(remakeBitmap);
mainStage.update();
}
//create remake 2014
function showRemakeBitmap()
{
var x = 372 * tileScale;
var y = 128 * tileScale;
remakeBitmap = new createjs.Bitmap(preload.getResult("remake"));
remakeBitmap.setTransform(x, y, tileScale, tileScale); //x,y, scaleX, scaleY
remakeBitmap.rotation = -5;
remakeBitmap.set({alpha:0});
createjs.Tween.get(remakeBitmap).set({alpha:0}).to({alpha:1}, 500).call(preloadComplet);
}
function createHelpObj()
{
helpBitmap = new createjs.Bitmap(preload.getResult("help"));
editHelpBitmap = new createjs.Bitmap(preload.getResult("editHelp"));
demoHelpBitmap = new createjs.Bitmap(preload.getResult("demoHelp"));
helpObj = new helpMenuClass(mainStage, helpBitmap, editHelpBitmap, demoHelpBitmap, tileScale);
}
function createMenuBitmapIcon()
{
mainMenuIconBitmap = new createjs.Bitmap(preload.getResult("menu"));
mainMenuIconObj = new mainMenuIconClass(screenX1, screenY1, tileScale, mainMenuIconBitmap);
selectIconBitmap = new createjs.Bitmap(preload.getResult("select"));
selectIconObj = new selectIconClass(screenX1, screenY1, tileScale, selectIconBitmap);
checkBitmap = new createjs.Bitmap(preload.getResult("check"));
returnBitmap = new createjs.Bitmap(preload.getResult("return"));
select1Bitmap = new createjs.Bitmap(preload.getResult("select1"));
nextBitmap = new createjs.Bitmap(preload.getResult("next"));
yesBitmap = new createjs.Bitmap(preload.getResult("yes"));
noBitmap = new createjs.Bitmap(preload.getResult("no"));
}
function getFirstPlayInfo()
{
if(getStorage(STORAGE_FIRST_PLAY) == null) {
firstPlay = 1;
setStorage(STORAGE_FIRST_PLAY, 1);
}
}
function preloadComplet()
{
createHelpObj();
createMenuBitmapIcon();
getFirstPlayInfo();
createjs.Ticker.off("tick", preloadTicker); //remove ticker of cover page
waitIdleDemo(4000); //wait user key or show demo level
}
}
//==============================
// support different AI-version
//==============================
var spriteSpeed = [
{ runnerSpeed: 0.65, guardSpeed: 0.3, digSpeed: 0.68, fillSpeed: 0.24, xMoveBase: 8, yMoveBase: 8 }, //ver 1
{ runnerSpeed: 0.70, guardSpeed: 0.35, digSpeed: 0.68, fillSpeed: 0.27, xMoveBase: 8, yMoveBase: 9 } //ver 2
];
var curAiVersion = AI_VERSION;
function setSpeedByAiVersion()
{
var speedObj = spriteSpeed[curAiVersion-1];
RUNNER_SPEED = speedObj.runnerSpeed;
GUARD_SPEED = speedObj.guardSpeed;
DIG_SPEED = speedObj.digSpeed;
FILL_SPEED = speedObj.fillSpeed;
//xMove = speedObj.xMoveBase * tileScale; //8, 6, 4 (10, 7.5, 5)
//yMove = speedObj.yMoveBase * tileScale; //8, 6, 4 (10, 7.5, 5)
xMove = speedObj.xMoveBase;
yMove = speedObj.yMoveBase;
//W4 = (tileW/4|0)+ speedObj.w4; //no used
//H4 = (tileH/4|0)+ speedObj.h4;
createSpriteSheet();
}
function createSpriteSheet()
{
createRunnerSpriteSheet(coverPageLoad.getResult("runner"));
createPreloadSpriteSheet();
}
function createPreloadSpriteSheet()
{
guardData = new createjs.SpriteSheet({
images: [preload.getResult("guard")],
@@ -350,87 +464,13 @@ function preloadResource()
"@":40, //gold
"#":41, //trap
"SPACE":43,
"FLASH": {
"FLASH": { //42 & 43
frames: [42, 42, 42, 43, 43, 43],
next: "FLASH",
speed: FLASH_SPEED
}
},
"D0": 50, "D1": 51, "D2": 52, "D3": 53, "D4": 54, //blue digit number for player name, 11/17/2014
"D5": 55, "D6": 56, "D7": 57, "D8": 58, "D9": 59
}
});
}
function createSoundInstance()
{
soundFall = createjs.Sound.createInstance("fall");
soundDig = createjs.Sound.createInstance("dig");
soundPass = createjs.Sound.createInstance("pass");
soundEnding = createjs.Sound.createInstance("ending");
}
function clearLoadingInfo()
{
mainStage.removeChild(runnerSprite, progress, progressBorder, percentTxt);
showRemakeBitmap();
mainStage.addChild(remakeBitmap);
mainStage.update();
}
//create remake 2014
function showRemakeBitmap()
{
var x = 372 * tileScale;
var y = 128 * tileScale;
remakeBitmap = new createjs.Bitmap(preload.getResult("remake"));
remakeBitmap.setTransform(x, y, tileScale, tileScale); //x,y, scaleX, scaleY
remakeBitmap.rotation = -5;
remakeBitmap.set({alpha:0});
createjs.Tween.get(remakeBitmap).set({alpha:0}).to({alpha:1}, 500).call(preloadComplet);
}
function createHelpObj()
{
helpBitmap = new createjs.Bitmap(preload.getResult("help"));
editHelpBitmap = new createjs.Bitmap(preload.getResult("editHelp"));
demoHelpBitmap = new createjs.Bitmap(preload.getResult("demoHelp"));
helpObj = new helpMenuClass(mainStage, helpBitmap, editHelpBitmap, demoHelpBitmap, tileScale);
}
function createMenuBitmapIcon()
{
mainMenuIconBitmap = new createjs.Bitmap(preload.getResult("menu"));
mainMenuIconObj = new mainMenuIconClass(screenX, screenY, tileScale, mainMenuIconBitmap);
selectIconBitmap = new createjs.Bitmap(preload.getResult("select"));
selectIconObj = new selectIconClass(screenX, screenY, tileScale, selectIconBitmap);
checkBitmap = new createjs.Bitmap(preload.getResult("check"));
returnBitmap = new createjs.Bitmap(preload.getResult("return"));
select1Bitmap = new createjs.Bitmap(preload.getResult("select1"));
nextBitmap = new createjs.Bitmap(preload.getResult("next"));
yesBitmap = new createjs.Bitmap(preload.getResult("yes"));
noBitmap = new createjs.Bitmap(preload.getResult("no"));
}
function getFirstPlayInfo()
{
if(getStorage(STORAGE_FIRST_PLAY) == null) {
firstPlay = 1;
setStorage(STORAGE_FIRST_PLAY, 1);
}
}
function preloadComplet()
{
createHelpObj();
createMenuBitmapIcon();
getFirstPlayInfo();
createjs.Ticker.off("tick", preloadTicker); //remove ticker of cover page
waitIdleDemo(4000); //wait user key or show demo level
}
}
+46 -35
Voir le fichier
@@ -158,7 +158,7 @@ function runnerMoveStep(action, stayCurrPos )
map[x][y].act = curToken; //runner move to [x][y-1], so set [x][y].act to previous state
y--;
yOffset = tileH + yOffset;
if(map[x][y].act == GUARD_T) gameState = GAME_RUNNER_DEAD; //collision
if(map[x][y].act == GUARD_T && guardAlive(x,y)) setRunnerDead(); //collision
}
newShape = "runUpDn";
}
@@ -189,7 +189,7 @@ function runnerMoveStep(action, stayCurrPos )
map[x][y].act = curToken; //runner move to [x][y+1], so set [x][y].act to previous state
y++;
yOffset = yOffset - tileH;
if(map[x][y].act == GUARD_T) gameState = GAME_RUNNER_DEAD; //collision
if(map[x][y].act == GUARD_T && guardAlive(x,y)) setRunnerDead(); //collision
}
if(action == ACT_DOWN) {
@@ -227,7 +227,7 @@ function runnerMoveStep(action, stayCurrPos )
map[x][y].act = curToken; //runner move to [x-1][y], so set [x][y].act to previous state
x--;
xOffset = tileW + xOffset;
if(map[x][y].act == GUARD_T) gameState = GAME_RUNNER_DEAD; //collision
if(map[x][y].act == GUARD_T && guardAlive(x,y)) setRunnerDead(); //collision
}
if(curToken == BAR_T) newShape = "barLeft";
else newShape = "runLeft";
@@ -247,7 +247,7 @@ function runnerMoveStep(action, stayCurrPos )
map[x][y].act = curToken; //runner move to [x+1][y], so set [x][y].act to previous state
x++;
xOffset = xOffset - tileW;
if(map[x][y].act == GUARD_T) gameState = GAME_RUNNER_DEAD; //collision
if(map[x][y].act == GUARD_T && guardAlive(x,y)) setRunnerDead(); //collision
}
if(curToken == BAR_T) newShape = "barRight";
else newShape = "runRight";
@@ -268,8 +268,8 @@ function runnerMoveStep(action, stayCurrPos )
runner.action = ACT_STOP;
}
} else {
runner.sprite.x = x * tileW + xOffset;
runner.sprite.y = y * tileH + yOffset;
runner.sprite.x = (x * tileW + xOffset) * tileScale | 0;
runner.sprite.y = (y * tileH + yOffset) * tileScale | 0;
runner.pos = { x:x, y:y, xOffset:xOffset, yOffset:yOffset};
if(curShape != newShape) {
runner.sprite.gotoAndPlay(newShape);
@@ -339,7 +339,7 @@ function addGold(x, y)
map[x][y].base = GOLD_T;
tile = map[x][y].bitmap = new createjs.Bitmap(preload.getResult("gold"));
tile.setTransform(x * tileW, y * tileH,tileScale, tileScale); //x,y, scaleX, scaleY
tile.setTransform(x * tileWScale, y * tileHScale,tileScale, tileScale); //x,y, scaleX, scaleY
mainStage.addChild(tile);
moveSprite2Top(); //reset runner, guard & fill hole object order
@@ -391,30 +391,21 @@ function checkCollision(runnerX, runnerY)
if( guard[i].pos.x == x && guard[i].pos.y == y) break;
}
assert( (i < guardCount), "checkCollision design error !");
if(guard[i].action != ACT_REBORN) {
var dw = Math.abs(runner.sprite.x - guard[i].sprite.x);
var dh = Math.abs(runner.sprite.y - guard[i].sprite.y);
//debug (" dw = " + dw +"(" + tileW + ") dh = " + dh + "(" + tileH + ")" );
/*
debug("runner:" + runner.pos.x + ","
+ runner.pos.y + ","
+ "guard:" + guard[i].pos.x + ","
+ guard[i].pos.y + ","
if(guard[i].action != ACT_REBORN) { //only guard alive need check collection
//var dw = Math.abs(runner.sprite.x - guard[i].sprite.x);
//var dh = Math.abs(runner.sprite.y - guard[i].sprite.y);
+ "runner:" + runner.pos.xOffset + ","
+ runner.pos.yOffset + ","
+ "guard:" + guard[i].pos.xOffset + ","
+ guard[i].pos.yOffset
);
*/
/*
if( Math.abs(runner.sprite.x - guard[i].sprite.x) < tileW &&
Math.abs(runner.sprite.y - guard[i].sprite.y) < tileH)
*/
if( Math.abs(runner.sprite.x - guard[i].sprite.x) <= W4*3 &&
Math.abs(runner.sprite.y - guard[i].sprite.y) <= H4*3 )
{
gameState = GAME_RUNNER_DEAD;
//change detect method ==> don't depend on scale
var runnerPosX = runner.pos.x*tileW+runner.pos.xOffset;
var runnerPosY = runner.pos.y*tileH+runner.pos.yOffset;
var guardPosX = guard[i].pos.x*tileW+guard[i].pos.xOffset;
var guardPosY = guard[i].pos.y*tileH+guard[i].pos.yOffset;
var dw = Math.abs(runnerPosX - guardPosX);
var dh = Math.abs(runnerPosY - guardPosY);
if( dw <= W4*3 && dh <= H4*3 ) {
setRunnerDead(); //07/04/2014
//debug("runner dead!");
}
}
@@ -477,7 +468,7 @@ function digHole(action)
holeObj.sprite.gotoAndPlay(holeShape);
holeObj.action = ACT_DIGGING;
holeObj.pos = { x: x, y: y };
holeObj.sprite.setTransform(x * tileW, y * tileH,tileScale, tileScale);
holeObj.sprite.setTransform(x * tileWScale, y * tileHScale,tileScale, tileScale);
// the callback is called each time a sequence completes:
holeObj.sprite.on("animationend", digComplete);
@@ -567,7 +558,8 @@ function fillHole(x, y)
{
var fillSprite = new createjs.Sprite(holeData, "fillHole");
fillSprite.setTransform(x * tileW, y * tileH,tileScale, tileScale);
fillSprite.pos = { x:x, y:y }; //save position 11/18/2014
fillSprite.setTransform(x * tileWScale, y * tileHScale, tileScale, tileScale);
fillSprite.on("animationend", fillComplete);
fillSprite.play();
mainStage.addChild(fillSprite);
@@ -583,8 +575,11 @@ function moveFillHoleObj2Top()
function fillComplete()
{
var x = this.x / tileW | 0; //this : scope default to the dispatcher
var y = this.y / tileH | 0;
//don't use "divide command", it will cause loss of accuracy while scale changed (ex: tileScale = 0.6...)
//var x = this.x / tileWScale | 0; //this : scope default to the dispatcher
//var y = this.y / tileHScale | 0;
var x = this.pos.x, y = this.pos.y; //get position
map[x][y].bitmap.set({alpha:1}); //display block
this.removeAllEventListeners ("animationend");
@@ -597,7 +592,7 @@ function fillComplete()
gameState = GAME_RUNNER_DEAD;
runner.sprite.set({alpha:0}); //hidden runner --> dead
break;
case GUARD_T:
case GUARD_T: //guard dead
var id = getGuardId(x,y);
if(guard[id].hasGold > 0) { //guard has gold and not fall into the hole
decGold();
@@ -625,3 +620,19 @@ function removeFillHoleObj(spriteObj)
}
debug("removeFillHoleObj: design error!");
}
//==================================
// Check guard is alive or not
// 2014/10/31
//==================================
function guardAlive(x, y)
{
for(var i = 0; i < guardCount; i++) {
if( guard[i].pos.x == x && guard[i].pos.y == y) break;
}
assert( (i < guardCount), "guardAlive() design error !");
if(guard[i].action != ACT_REBORN) return 1; //alive
return 0; //reborn
}
+753 -542
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
+46 -7
Voir le fichier
@@ -37,6 +37,8 @@ value | Character | Type
0x9 | & | Player
2014/10/18 add support dump Revenge_of_Lode_Runner disk
2014/10/18 add support c64 codes
**********************************************************************************/
#include <stdio.h>
@@ -48,20 +50,29 @@ value | Character | Type
#define READ_LEVEL_DATA_SIZE (256)
#define ONE_LEVEL_DATA_SIZE (224)
#if 1
#define APPLE_DISK_NO (3)
#if (APPLE_DISK_NO == 1)
#define FILE_NAME "Lode_Runner_Apple-II.dsk"
#define MAX_LEVEL (150)
#define TITLE_NAME "Lode Runner (Apple-II 1983)"
#define DATA_VAR_NAME "baseLevelData"
#else
#elif (APPLE_DISK_NO == 2)
#define FILE_NAME "Lode_Runner_Championship _Apple-II.dsk"
#define MAX_LEVEL (50)
#define TITLE_NAME "Championship Lode Runner (Apple-II 1984)"
#define DATA_VAR_NAME "champLevelData"
#elif (APPLE_DISK_NO == 3)
#define FILE_NAME "Revenge_of_Lode_Runner.dsk"
#define MAX_LEVEL (25)
#define TITLE_NAME "Revenge of Lode Runner (Apple-II 1986)"
#define DATA_VAR_NAME "RevengeLevelData"
#endif
char tileType[] = {
@@ -82,14 +93,18 @@ int goodLevel(unsigned char *levelData)
{
int i;
unsigned char leftTile, rightTile;
int allZero = 1;
for(i = 0; i < ONE_LEVEL_DATA_SIZE; i++) {
//levelData[i] = levelData[i] ^ 0xFF;
leftTile = levelData[i] & 0xF;
rightTile = levelData[i] >> 0x04;
if(leftTile >= MAX_TILE_TYPE || rightTile >= MAX_TILE_TYPE) {
return 0;
}
if(leftTile != 0 || rightTile != 0) allZero = 0;
}
return !allZero;
return 1; //OK
}
@@ -150,13 +165,17 @@ int main(void)
FILE *fp;
unsigned char levelData[READ_LEVEL_DATA_SIZE];
int curLevel = 0;
int readSize= 0, isGood;
unsigned long curPos = 0x3000L;
unsigned long dspPos = curPos;
int doubleError = 0;
if((fp = fopen(FILE_NAME, "r")) ==NULL) {
printf("Open file %d failed !\n", FILE_NAME);
if((fp = fopen(FILE_NAME, "rb")) ==NULL) {
printf("Open file \"%s\" failed !\n", FILE_NAME);
return 1;
}
if(fseek(fp, 0x3000L, SEEK_SET) != 0) {
if(fseek(fp, curPos, SEEK_SET) != 0) {
printf("Fseek error ! @%d\n", __LINE__);
fclose(fp);
return 1;
@@ -165,13 +184,33 @@ int main(void)
dumpTitle();
printf("var %s = [\n", DATA_VAR_NAME);
#ifdef C64
do {
#endif
while(curLevel < MAX_LEVEL &&
fread(levelData, sizeof(char), READ_LEVEL_DATA_SIZE, fp) == READ_LEVEL_DATA_SIZE &&
goodLevel(levelData)
(readSize = fread(levelData, sizeof(char), READ_LEVEL_DATA_SIZE, fp)) == READ_LEVEL_DATA_SIZE &&
(isGood = goodLevel(levelData))
){
//dumpLevel(++curLevel, levelData);
//printf("%x", dspPos);
dumpLevel4JavaScript(++curLevel, levelData);
dspPos += READ_LEVEL_DATA_SIZE;
doubleError=0;
}
#ifdef C64
doubleError++;
if(!isGood) {
curPos += 0x1500L;
dspPos = curPos;
if(fseek(fp, curPos, SEEK_SET) != 0) {
printf("Fseek error ! @%d\n", __LINE__);
fclose(fp);
return 1;
}
} else doubleError++;
} while(curLevel < MAX_LEVEL && doubleError <= 1);
#endif
printf("];\n");
fclose(fp);
Fichier binaire non affiché.
Fichier binaire non affiché.