Lode Runner - Total Recall (v2.01a.3)

Cette révision appartient à :
simon_hung
2015-07-02 13:38:33 +08:00
Parent 8b86be66c5
révision 01086520d1
156 fichiers modifiés avec 13137 ajouts et 1816 suppressions
+67 -16
Voir le fichier
@@ -1,35 +1,86 @@
<a target="_blank" href="http://loderunnerwebgame.com/LodeRunner/">Lode Runner (超級運動員)</a> <a target="_blank" href="http://loderunnerwebgame.com/LodeRunner/">Lode Runner - Total Recall</a>
======================================= =======================================
## (超級運動員 - 全面回憶)
This program build with Javascript + [CreateJS](http://www.createjs.com). This program build with Javascript + [CreateJS](http://www.createjs.com).
Game levels include <b>[Lode Runner (150 levels) & Championship Lode Runner (50 levels)](http://strategywiki.org/wiki/Lode_Runner/Walkthrough)</b> ### * 3 GAME Mode & 1 DEMO Mode
### GAME Mode
<table> <table>
<tr> <tr>
<td><b>CLASSIC MODE</b></td> <td><b>(1) Challenge Mode</b></td>
<td>Same as APPLE-II play mode</td> <td>Compete with other players.</td>
</tr> </tr>
<tr> <tr>
<td><b>TRAINING MODE</b></td> <td><b>(2) Training Mode</b></td>
<td>Player can select levels</td> <td>Player can select any levels</td>
</tr> </tr>
<tr> <tr>
<td><b>EDIT MODE</b></td> <td><b>(3) Edit Mode</b></td>
<td>Player can create self-levels</td> <td>Player can create custom levels</td>
</tr> </tr>
<tr> <tr>
<td><b>DEMO MODE</b></td> <td><b>(4) Demo Mode</b></td>
<td>Replay passed levels</td> <td>Demo passed levels</td>
</tr> </tr>
</table> </table>
### PLAY ###* Include 5 Game Versions
<table>
<tr>
<td><b>(1) <a target="_blank" href="https://en.wikipedia.org/wiki/Lode_Runner">Classic Lode Runner</a></b></td>
<td>(150 Levels)</td>
<td>Difficulty: 3</td>
</tr>
<tr>
<td><b>(2) <a target="_blank" href="http://www.gb64.com/game.php?id=5906&d=42">Professional Lode Runner</a></b></td>
<td>(150 Levels)</td>
<td>Difficulty: 4</td>
</tr>
<tr>
<td><b>(3) <a target="_blank" href="http://www.vizzed.com/play/revenge-of-lode-runner-appleii-online-apple-ii-6223-game">Revenge of Lode Runner</a></b></td>
<td>(17 Levels)</td>
<td>Difficulty: 4</td>
</tr>
<tr>
<td><b>(4) <a target="_blank" href="http://www.spoonbillsoftware.com.au/loderunner.htm">Lode Runner Fan Book</a></b></td>
<td>(66 Levels)</td>
<td>Difficulty: 5</td>
</tr>
<tr>
<td><b>(5) <a target="_blank" href="https://en.wikipedia.org/wiki/Championship_Lode_Runner">Championship Lode Runner</a></b></td>
<td>(51 Levels)</td>
<td>Difficulty: 5</td>
</tr>
</table>
### * Provide 2 Theme
<table>
<tr>
<td>(1)<img src="image/apple2.png">APPLE-II</td>
</tr>
<tr>
<td>(2)<img src="image/commodore64.png">Commodore 64</td>
</tr>
</table>
### * 2 Keyboard control mode
<table>
<tr>
<td>(1)<img src="image/repeatOn.png">Repeat Actions On: Like APPLE-II keyboard behavior</td>
</tr>
<tr>
<td>(2)<img src="image/repeatOff.png">Repeat Actions Off: Like NES keyboard behavior</td>
</tr>
</table>
### * PLAY
<a target="_blank" href="http://loderunnerwebgame.com/game/">http://loderunnerwebgame.com/game/</a> <a target="_blank" href="http://loderunnerwebgame.com/game/">http://loderunnerwebgame.com/game/</a>
------------------------------------ ------------------------------------
+55
Voir le fichier
@@ -0,0 +1,55 @@
var countryId = {
unknown: 0
, _African_Union: 1, _Arab_League: 2, _ASEAN: 3, _CARICOM: 4, _CIS: 5
, _Commonwealth: 6, _England: 7, _European_Union: 8, eu: 8, _Islamic_Conference: 9
, _Kosovo: 10, _NATO: 11, _Northern_Cyprus: 12, _Northern_Ireland: 13, _Olimpic_Movement: 14
, _OPEC: 15, _Red_Cross: 16, _Scotland: 17, _Somaliland: 18, _Tibet: 19
, _United_Nations: 20, _Wales: 21, ad: 22, ae: 23, af: 24
, ag: 25, ai: 26, al: 27, am: 28, ao: 29
, aq: 30, ar: 31, as: 32, at: 33, au: 34
, aw: 35, ax: 36, az: 37, ba: 38, bb: 39
, bd: 40, be: 41, bf: 42, bg: 43, bh: 44
, bi: 45, bj: 46, bm: 47, bn: 48, bo: 49
, br: 50, bs: 51, bt: 52, bw: 53, by: 54
, bz: 55, ca: 56, cd: 57, cf: 58, cg: 59
, ch: 60, ci: 61, ck: 62, cl: 63, cm: 64
, cn: 65, co: 66, cr: 67, cu: 68, cv: 69
, cy: 70, cz: 71, de: 72, dj: 73, dk: 74
, dm: 75, do: 76, dz: 77, ec: 78, ee: 79
, eg: 80, eh: 81, er: 82, es: 83, et: 84
, fi: 85, fj: 86, fm: 87, fo: 88, fr: 89
, bl: 89, cp: 89, mf: 89, yt: 89, ga: 90
, gb: 91, sh: 91, gd: 92, ge: 93, gg: 94
, gh: 95, gi: 96, gl: 97, gm: 98, gn: 99
, gp: 100, gq: 101, gr: 102, gt: 103, gu: 104
, gw: 105, gy: 106, hk: 107, hn: 108, hr: 109
, ht: 110, hu: 111, id: 112, mc: 112, ie: 113
, il: 114, im: 115, in: 116, iq: 117, ir: 118
, is: 119, it: 120, je: 121, jm: 122, jo: 123
, jp: 124, ke: 125, kg: 126, kh: 127, ki: 128
, km: 129, kn: 130, kp: 131, kr: 132, kw: 133
, ky: 134, kz: 135, la: 136, lb: 137, lc: 138
, li: 139, lk: 140, lr: 141, ls: 142, lt: 143
, lu: 144, lv: 145, ly: 146, ma: 147, md: 148
, me: 149, mg: 150, mh: 151, mk: 152, ml: 153
, mm: 154, mn: 155, mo: 156, mq: 157, mr: 158
, ms: 159, mt: 160, mu: 161, mv: 162, mw: 163
, mx: 164, my: 165, mz: 166, na: 167, nc: 168
, ne: 169, ng: 170, ni: 171, nl: 172, bq: 172
, no: 173, bv: 173, nq: 173, sj: 173, np: 174
, nr: 175, nz: 176, om: 177, pa: 178, pe: 179
, pf: 180, pg: 181, ph: 182, pk: 183, pl: 184
, pr: 185, ps: 186, pt: 187, pw: 188, py: 189
, qa: 190, re: 191, ro: 192, rs: 193, ru: 194
, rw: 195, sa: 196, sb: 197, sc: 198, sd: 199
, se: 200, sg: 201, si: 202, sk: 203, sl: 204
, sm: 205, sn: 206, so: 207, sr: 208, st: 209
, sv: 210, sy: 211, sz: 212, tc: 213, td: 214
, tg: 215, th: 216, tj: 217, tl: 218, tm: 219
, tn: 220, to: 221, tr: 222, tt: 223, tv: 224
, tw: 225, tz: 226, ua: 227, ug: 228, us: 229
, uy: 230, uz: 231, va: 232, vc: 233, ve: 234
, vg: 235, vi: 236, vn: 237, vu: 238, ws: 239
, ye: 240, za: 241, zm: 242, zw: 243, sx: 244
, cw: 245, ss: 246
};
Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 188 B

Après

Largeur:  |  Hauteur:  |  Taille: 188 B

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 188 B

Après

Largeur:  |  Hauteur:  |  Taille: 188 B

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 147 B

Après

Largeur:  |  Hauteur:  |  Taille: 147 B

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 148 B

Après

Largeur:  |  Hauteur:  |  Taille: 148 B

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 131 B

Après

Largeur:  |  Hauteur:  |  Taille: 131 B

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 2.6 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 2.6 KiB

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 190 B

Après

Largeur:  |  Hauteur:  |  Taille: 190 B

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 163 B

Après

Largeur:  |  Hauteur:  |  Taille: 163 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 2.1 KiB

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 163 B

Après

Largeur:  |  Hauteur:  |  Taille: 163 B

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 856 B

Après

Largeur:  |  Hauteur:  |  Taille: 856 B

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 118 B

Après

Largeur:  |  Hauteur:  |  Taille: 118 B

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 2.1 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 2.1 KiB

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 183 B

Après

Largeur:  |  Hauteur:  |  Taille: 183 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 4.6 KiB

Voir le fichier

Avant

Largeur:  |  Hauteur:  |  Taille: 163 B

Après

Largeur:  |  Hauteur:  |  Taille: 163 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 193 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 203 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 147 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 165 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 133 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 2.4 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 185 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 174 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 2.0 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 159 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 868 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 154 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 2.3 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 170 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 4.2 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 188 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 835 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 118 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 491 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 224 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 980 B

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 19 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 51 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 62 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 971 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 191 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 49 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 11 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 33 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 1.2 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 1.7 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 970 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 758 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 9.4 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 11 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 5.9 KiB

Après

Largeur:  |  Hauteur:  |  Taille: 8.0 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 1.1 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 1.1 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 5.9 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 2.3 KiB

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 799 B

BIN
Voir le fichier
Fichier binaire non affiché.

Après

Largeur:  |  Hauteur:  |  Taille: 959 B

BIN
Voir le fichier
Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 739 B

+41 -19
Voir le fichier
@@ -1,5 +1,5 @@
var VERSION = "1.00c"; var VERSION = "2.01a";
var AI_VERSION = 2; var AI_VERSION = 3;
var NO_OF_TILES_X = 28, var NO_OF_TILES_X = 28,
NO_OF_TILES_Y = 16; NO_OF_TILES_Y = 16;
@@ -18,6 +18,9 @@ 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 = 2;
var MENU_ICON_X = 40, MENU_ICON_Y = 36, ICON_BORDER = 4;
var BASE_ICON_X = (MENU_ICON_X + ICON_BORDER * 2);
var KEYCODE_BKSPACE = 8, //backspace var KEYCODE_BKSPACE = 8, //backspace
KEYCODE_ENTER = 13, KEYCODE_ENTER = 13,
KEYCODE_SPACE = 32, KEYCODE_SPACE = 32,
@@ -73,15 +76,16 @@ var SCORE_COMPLETE_LEVEL = 1500, SCORE_COUNTER = 15;
var SCORE_VALUE_PER_POINT = 100; //for modern & edit mode var SCORE_VALUE_PER_POINT = 100; //for modern & edit mode
var PLAY_NONE = 0, PLAY_CLASSIC = 1, PLAY_MODERN = 2, PLAY_DEMO = 3, PLAY_EDIT = 4, PLAY_TEST = 5, PLAY_AUTO = 6; var PLAY_NONE = 0, PLAY_CLASSIC = 1, PLAY_MODERN = 2, PLAY_DEMO = 3,
PLAY_EDIT = 4, PLAY_TEST = 5, PLAY_AUTO = 6, PLAY_DEMO_ONCE = 7;
var GAME_START = 0, GAME_RUNNING = 1, var GAME_START = 0, GAME_RUNNING = 1,
GAME_FINISH = 2, GAME_FINISH_SCORE_COUNT= 3, GAME_FINISH = 2, GAME_FINISH_SCORE_COUNT= 3,
GAME_WAITING = 4, GAME_PAUSE = 5, GAME_WAITING = 4, GAME_PAUSE = 5,
GAME_NEW_LEVEL = 6, GAME_RUNNER_DEAD = 7, GAME_NEW_LEVEL = 6, GAME_RUNNER_DEAD = 7,
GAME_OVER_ANIMATION = 8, GAME_OVER = 9, GAME_OVER_ANIMATION = 8, GAME_OVER = 9,
GAME_NEXT_LEVEL = 10, GAME_PREV_LEVEL = 11; GAME_NEXT_LEVEL = 10, GAME_PREV_LEVEL = 11,
GAME_LOADING = 12, GAME_WIN = 13;
var ACT_UNKNOWN = -1, ACT_STOP = 0, var ACT_UNKNOWN = -1, ACT_STOP = 0,
ACT_LEFT = 1, ACT_RIGHT = 2, ACT_LEFT = 1, ACT_RIGHT = 2,
@@ -120,42 +124,60 @@ var REBORN_T = 0x10; //template: for reborn
var CLOSE_SCREEN_SPEED = 35; //20 ~ 80 var CLOSE_SCREEN_SPEED = 35; //20 ~ 80
var MAX_GUARD = 6; //maximum number of guards var MAX_OLD_GUARD = 6; //maximum number of guards for AI Version 1 and 2
var MAX_NEW_GUARD = 5; //for AI Version >= 3
var RUNNER_LIFE = 5; //number of runner life var RUNNER_LIFE = 5; //number of runner life
var RUNNER_MAX_LIFE = 100; var RUNNER_MAX_LIFE = 100;
var MAX_TIME_COUNT = 999; //for moden mode var MAX_TIME_COUNT = 999; //for moden mode
var TICK_COUNT_PER_TIME = 16; var TICK_COUNT_PER_TIME = 16;
var MAX_DEMO_WAIT_COUNT = 150 * TICK_COUNT_PER_TIME; var MAX_DEMO_WAIT_COUNT = 200 * TICK_COUNT_PER_TIME;
var MAX_EDIT_LEVEL = 120; var MAX_EDIT_LEVEL = 120;
var MAX_HISCORE_RECORD = 10, MAX_HISCORE_NAME_LENGTH = 10; var MAX_HISCORE_RECORD = 10, MAX_HISCORE_NAME_LENGTH = 12;
//===========================
// Define value for playData
//===========================
var PLAY_DATA_USERDEF = 999;
//================================================
// Define themes string also as theme folder name
//================================================
var THEME_APPLE2 = "APPLE2";
var THEME_C64 = "C64";
//================================
// Below defined for LocalStorage
//================================
var STORAGE_LASTPLAY_MODE = "loderunner_lastplay"; var STORAGE_LASTPLAY_MODE = "loderunner_lastplay";
var STORAGE_CLASSIC_INFO1 = "loderunner_classicInfo1"; var STORAGE_CLASSIC_INFO = "loderunner_classicInfo";
var STORAGE_CLASSIC_INFO2 = "loderunner_classicInfo2";
var STORAGE_MODERN_INFO1 = "loderunner_modernInfo1"; var STORAGE_MODERN_INFO = "loderunner_modernInfo";
var STORAGE_MODERN_INFO2 = "loderunner_modernInfo2";
var STORAGE_DEMO_INFO1 = "loderunner_demoInfo1"; var STORAGE_DEMO_INFO = "loderunner_demoInfo";
var STORAGE_DEMO_INFO2 = "loderunner_demoInfo2";
var STORAGE_FIRST_PLAY = "loderunner_firstRun"; var STORAGE_FIRST_PLAY = "loderunner_firstRun";
var STORAGE_MODERN_SCORE_INFO1 = "loderunner_modernScore1"; var STORAGE_MODERN_SCORE_INFO = "loderunner_modernScore";
var STORAGE_MODERN_SCORE_INFO2 = "loderunner_modernScore2";
var STORAGE_USER_INFO = "loderunner_userInfo"; //user created var STORAGE_USER_INFO = "loderunner_userInfo"; //user created
var STORAGE_USER_SCORE_INFO = "loderunner_userScore"; //user created var STORAGE_USER_SCORE_INFO = "loderunner_userScore"; //user created
var STORAGE_EDIT_INFO = "loderunner_editInfo"; var STORAGE_EDIT_INFO = "loderunner_editInfo";
var STORAGE_USER_LEVEL = "loderunner_userLevel"; var STORAGE_USER_LEVEL = "loderunner_userLevel";
var STORAGE_TEST_LEVEL = "loderunner_testlevel"; var STORAGE_TEST_LEVEL = "loderunner_testlevel";
var STORAGE_HISCORE_INFO1 = "loderunner_hiScore1"; var STORAGE_HISCORE_INFO = "loderunner_hiScore";
var STORAGE_HISCORE_INFO2 = "loderunner_hiScore2";
var STORAGE_PLAYER_NAME = "loderunner_player";
var STORAGE_UID = "loderunner_uid";
var STORAGE_THEME_MODE = "loderunner_theme";
var STORAGE_REPEAT_ACTION = "loderunner_actRepeat";
+193 -62
Voir le fichier
@@ -23,7 +23,7 @@ function getAutoDemoLevel(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 /* auto demo data always use demoData1 (because now can select demo levels from demo mode) , 6/12/2014
if(playData == 2) { //lode runner 2 demo data if(playData == PLAY_DATA_2) { //lode runner 2 demo data
demoLevel = 1; demoLevel = 1;
demoCount = 1; demoCount = 1;
demoMaxCount = 2; demoMaxCount = 2;
@@ -36,7 +36,7 @@ function getAutoDemoLevel(initValue)
demoCount = 1; demoCount = 1;
demoMaxCount = 3; demoMaxCount = 3;
demoData = demoData1; demoData = demoData1;
levelData = levelData1; levelData = playVersionInfo[0].verData;
demoIdx = 0; demoIdx = 0;
// } // }
} else { } else {
@@ -88,7 +88,13 @@ function initPlayDemo()
{ {
demoRecordIdx = demoGoldIdx = demoBornIdx = 0; demoRecordIdx = demoGoldIdx = demoBornIdx = 0;
demoTickCount = 0; demoTickCount = 0;
playTickTimer = 0; //modern mode time counter
gameState = GAME_RUNNING; gameState = GAME_RUNNING;
if(playMode == PLAY_DEMO_ONCE) {
demoIconObj.disable(1);
selectIconObj.disable(1);
}
} }
function playDemo() function playDemo()
@@ -122,25 +128,90 @@ function getDemoBornPos()
// for demo mode (User select level) // for demo mode (User select level)
//==================================== //====================================
var playerDemoData1 = [], playerDemoData2 = []; //var playerDemoData = [], noDemoData = [];
var noDemoData1 = 1, noDemoData2 = 1; //var wDemoData1 = [], wDemoData2 = [], wDemoData3 = [], wDemoData4 = [], wDemoData5 = []; //temp temp temp
var wHighScores1 = [], wHighScores2 = []; var playerDemoData = [], wDemoData = [];
var wDemoData1 = [], wDemoData2 = []; var demoPlayData = 0; //for syn demo data with current playData
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()
{
demoPlayData = playData;
playerDemoData = [];
wDemoData = [];
demoDataLoading = 1;
getDemoData(playData); //ajax
}
function setDemoData(jsonTxt)
{
if(jsonTxt.substring(0, 1) == "[" ) {
wDemoData = JSON.parse(jsonTxt);
for(var i = 0; i < wDemoData.length; i++) {
playerDemoData[wDemoData[i].level-1] = wDemoData[i];
}
} else {
error(arguments.callee.name, "Wrong Demo Data: " + jsonTxt);
}
demoDataLoading = 0;
if(playMode == PLAY_MODERN && gameState == GAME_START ) demoIconObj.enable();
//hideGameLoading();
}
/*
function initDemoModeVariable() function initDemoModeVariable()
{ {
for(var i = 0; i < wDemoData1.length; i++) { for(var i = 0; i < maxPlayId; i++) {
playerDemoData1[wDemoData1[i].level-1] = wDemoData1[i]; playerDemoData[i] = [];
noDemoData[i] = 1;
//wHighScore[i] = [];
} }
for(var i = 0; i < wDemoData2.length; i++) {
playerDemoData2[wDemoData2[i].level-1] = wDemoData2[i]; for(var i = 0; i < wDemoData1.length; i++) { //temp
playerDemoData[0][wDemoData1[i].level-1] = wDemoData1[i];
} }
if(playerDemoData1.length > 0) noDemoData1 = 0; for(var i = 0; i < wDemoData2.length; i++) { //temp
if(playerDemoData2.length > 0) noDemoData2 = 0; 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()
{ {
@@ -159,18 +230,24 @@ function initDemoInfo()
godMode = demoData[idx].godMode; //07/09/2014 godMode = demoData[idx].godMode; //07/09/2014
} }
function getDemoOnceInfo() //for demo once
{
//DEMO ONCE in Training mode, so curLevel & levelData are same as training mode
demoData = playerDemoData;
initDemoInfo();
}
function getDemoInfo() function getDemoInfo()
{ {
var infoJSON; var infoJSON;
if(playData == 5) { if (playData >= 1 && playData <= maxPlayId) {
infoJSON = getStorage(STORAGE_DEMO_INFO2); infoJSON = getStorage(STORAGE_DEMO_INFO + playData);
levelData = levelData2; levelData = getPlayVerData(playData);
demoData = playerDemoData2; //demoData = playerDemoData[playData-1];
demoData = playerDemoData;
} else { } else {
infoJSON = getStorage(STORAGE_DEMO_INFO1); error(arguments.callee.name, "design error, value =" + playData );
levelData = levelData1;
demoData = playerDemoData1;
} }
if(infoJSON == null) { if(infoJSON == null) {
@@ -188,14 +265,10 @@ function setDemoInfo()
var infoObj = { l:curLevel}; var infoObj = { l:curLevel};
var infoJSON = JSON.stringify(infoObj); var infoJSON = JSON.stringify(infoObj);
switch(playData) { if (playData >= 1 && playData <= maxPlayId) {
default: setStorage(STORAGE_DEMO_INFO + playData, infoJSON);
case 4: } else {
setStorage(STORAGE_DEMO_INFO1, infoJSON); error(arguments.callee.name, "design error, value =" + playData );
break;
case 5:
setStorage(STORAGE_DEMO_INFO2, infoJSON);
break;
} }
} }
@@ -213,50 +286,77 @@ function getNextDemoLevel()
initDemoInfo(); initDemoInfo();
} }
function curDemoLevelIsVaild()
{
if(playData == PLAY_DATA_USERDEF) return 0;
//return (typeof playerDemoData[playData-1][curLevel-1] != "undefined");
return (typeof playerDemoData[curLevel-1] != "undefined");
}
function updatePlayerDemoData(playData, demoDataInfo) function updatePlayerDemoData(playData, demoDataInfo)
{ {
var playerDemoData = null;
var level = demoDataInfo.level; var level = demoDataInfo.level;
switch(playData) { playerDemoData[level-1] = {
case 1: level: demoDataInfo.level,
playerDemoData = playerDemoData1; ai: demoDataInfo.ai,
break; time: demoDataInfo.time,
case 2: state: demoDataInfo.state,
playerDemoData = playerDemoData2; action: demoDataInfo.action,
break; goldDrop: demoDataInfo.goldDrop,
} bornPos: demoDataInfo.bornPos,
godMode: demoDataInfo.godMode,
player: playerName,
date: getLocalTime(),
location: "Unknown", //update by sendDemoData2Server() resp.
cId: "Unknown",
ip: "updating"
};
}
if(playerDemoData != null) { //======================
if(typeof playerDemoData[level-1] == "undefined") { // resp from server
// new //======================
playerDemoData[level-1] = { function respUpdatePlayerDemoData(jsonTxt)
level: demoDataInfo.level, {
ai: demoDataInfo.ai, var respObj, level;
time: demoDataInfo.time,
state: demoDataInfo.state,
action: demoDataInfo.action,
goldDrop: demoDataInfo.goldDrop,
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
//update if(jsonTxt.substring(0, 1) == "{" ) {
playerDemoData[level-1].level = demoDataInfo.level; respObj = JSON.parse(jsonTxt);
playerDemoData[level-1].ai = demoDataInfo.ai; level = respObj.level;
playerDemoData[level-1].time = demoDataInfo.time;
playerDemoData[level-1].state = demoDataInfo.state;
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
if(respObj.playData == playData && playerDemoData[level-1].ip == "updating") {
playerDemoData[level-1].ip = respObj.ip;
playerDemoData[level-1].location = respObj.location;
playerDemoData[level-1].cId = respObj.cId;
} }
} else {
error(arguments.callee.name, "Wrong resp Data: " + 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
//============================== //==============================
@@ -316,7 +416,7 @@ function recordModeDump(state)
function recordModeToggle(state) function recordModeToggle(state)
{ {
if(recordMode == RECORD_KEY) { if(recordMode == RECORD_KEY) {
if(playMode != PLAY_AUTO && playMode != PLAY_DEMO) recordMode = RECORD_PLAY; if(playMode != PLAY_AUTO && playMode != PLAY_DEMO && playMode != PLAY_DEMO_ONCE) recordMode = RECORD_PLAY;
recordModeDump(state); recordModeDump(state);
} else recordMode = RECORD_KEY; } else recordMode = RECORD_KEY;
} }
@@ -335,6 +435,13 @@ function processRecordKey()
} }
function recordKeyAction() function recordKeyAction()
{
if(repeatAction) recordKeyAction1();
else recordKeyAction2()
}
//record key for "keyboard repeat on"
function recordKeyAction1()
{ {
if(!keyPressed) return; if(!keyPressed) return;
if(recordKeyCode != lastKeyCode || alwaysRecord) { if(recordKeyCode != lastKeyCode || alwaysRecord) {
@@ -345,6 +452,30 @@ function recordKeyAction()
keyPressed = 0; keyPressed = 0;
} }
//record key for "keyboard repeat off"
// keyPressed= 1:pressed, 0:released, -1:floating (do nothing till pressed again)
function recordKeyAction2()
{
switch(keyPressed) {
case 1: //pressed
if(recordKeyCode != lastKeyCode || alwaysRecord) {
playRecord.push(recordCount);
playRecord.push(recordKeyCode);
lastKeyCode = recordKeyCode;
}
if(alwaysRecord) keyPressed = -1; //floating
break;
case 0: //release
if(recordKeyCode != KEYCODE_SPACE) {
playRecord.push(recordCount);
playRecord.push(KEYCODE_SPACE);
lastKeyCode = recordKeyCode = KEYCODE_SPACE;
keyAction = ACT_STOP;
}
break;
}
}
var recordIdx; var recordIdx;
function recordPlayDemo() function recordPlayDemo()
@@ -423,7 +554,7 @@ function dumpRecord()
curDemoData.level = curLevel; curDemoData.level = curLevel;
curDemoData.ai = AI_VERSION; curDemoData.ai = AI_VERSION;
curDemoData.time = playRecordTime; curDemoData.time = playRecordTime;
curDemoData.state = recordState; curDemoData.state = recordState; //game finish or not
curDemoData.action = []; curDemoData.action = [];
curDemoData.goldDrop = []; curDemoData.goldDrop = [];
curDemoData.bornPos = []; curDemoData.bornPos = [];
+337 -94
Voir le fichier
@@ -34,12 +34,16 @@ var tileInfo = [
var baseTile=[]; var baseTile=[];
var lastRunner = null; var lastRunner = null;
var lastGuardList = []; var lastGuardList = [];
var editBorder; var editBorder, editStartX;
var testLevelInfo = {level: -1}; var testLevelInfo = {level: -1};
var mouseInStage = 1;
function startEditMode() function startEditMode()
{ {
soundIconObj.disable(1);
repeatActionIconObj.disable(1);
playMode = PLAY_EDIT; playMode = PLAY_EDIT;
playData = PLAY_DATA_USERDEF; //for title name only
mainStage.removeAllChildren(); mainStage.removeAllChildren();
//document.onkeydown = function() { return true; }; //document.onkeydown = function() { return true; };
document.onkeydown = editHandleKeyDown; document.onkeydown = editHandleKeyDown;
@@ -52,6 +56,7 @@ function startEditMode()
createEditMap(); createEditMap();
startEditTicker(); startEditTicker();
setButtonState(); setButtonState();
initForPlay(); // 1/19/2015
} }
function setEditSelectMenu() function setEditSelectMenu()
@@ -82,7 +87,7 @@ function saveTestState()
function startTestMode() function startTestMode()
{ {
playMode = PLAY_TEST; playMode = PLAY_TEST;
playData = 3; playData = PLAY_DATA_USERDEF;
curLevel = testLevelInfo.level; curLevel = testLevelInfo.level;
stopEditTicker(); stopEditTicker();
@@ -103,46 +108,51 @@ var EDIT_PADDING = 1;
function canvasEditReSize() function canvasEditReSize()
{ {
for (var scale = MAX_SCALE; scale >= MIN_SCALE; scale -= 0.25) { var menuIconAreaX = screenBorder + BASE_ICON_X * tileScale; //current icon size X
canvasX = (BASE_SCREEN_X+BASE_TILE_X*2) * scale+ EDIT_PADDING * (NO_OF_TILES_X+1); var toolAreaX = BASE_TILE_X*3/2; //edit tool size X
canvasY = BASE_SCREEN_Y * scale + EDIT_PADDING * (NO_OF_TILES_Y+1); var canvas = document.getElementById('canvas');
if (canvasX <= screenX1 && canvasY <= screenY1 || scale <= MIN_SCALE) break;
}
//debug("screenX1 = " + screenX1 + " screenY1 = " + screenY1 + "scale = " + scale);
canvas = document.getElementById('canvas'); //(1) try use scale same as play mode
canvasX = (BASE_SCREEN_X+toolAreaX) * tileScale + EDIT_PADDING * (NO_OF_TILES_X+1);
canvasY = BASE_SCREEN_Y * tileScale + EDIT_PADDING * (NO_OF_TILES_Y+1);
if(canvasX > (screenX1 - menuIconAreaX) || canvasY > screenY1) {
//(2) can not fit, find new scale
for (var scale = MAX_SCALE*100; scale >= MIN_SCALE*100; scale -= 10) {
tileScale = scale/100; //new scale
canvasX = (BASE_SCREEN_X+toolAreaX) * tileScale + EDIT_PADDING * (NO_OF_TILES_X+1);
canvasY = BASE_SCREEN_Y * tileScale + EDIT_PADDING * (NO_OF_TILES_Y+1);
if (canvasX <= (screenX1 - menuIconAreaX) && canvasY <= screenY1 || tileScale <= MIN_SCALE) break;
}
}
debug("EDIT SCALE = " + tileScale);
var left = ((screenX1 - canvasX)/2|0),
top = ((screenY1 - canvasY)/2|0);
if(left < menuIconAreaX) left = ((screenX1 - canvasX - menuIconAreaX)/2|0);
canvas.width = canvasX; canvas.width = canvasX;
canvas.height = canvasY; canvas.height = canvasY;
//Set canvas top left position
var left = ((screenX1 - canvasX)/2|0),
top = ((screenY1 - canvasY)/2|0);
canvas.style.left = (left>0?left:0) + "px"; canvas.style.left = (left>0?left:0) + "px";
canvas.style.top = (top>0?top:0) + "px"; canvas.style.top = (top>0?top:0) + "px";
canvas.style.position = "absolute"; canvas.style.position = "absolute";
//initial constant value tileWScale = BASE_TILE_X * tileScale;
tileScale = scale; tileHScale = BASE_TILE_Y * tileScale;
tileW = BASE_TILE_X * scale;
tileH = BASE_TILE_Y * scale;
W2 = (tileW/2|0); //20, 15, 10,
H2 = (tileH/2|0); //22, 16, 11
W4 = (tileW/4|0); //10, 7, 5,
H4 = (tileH/4|0); //11, 8, 5,
editBorder = 4 * tileScale; editBorder = 4 * tileScale;
editStartX = (tileWScale + W2 * tileScale);
} }
function createBaseTile() function createBaseTile()
{ {
for(var id = 0; id < tileInfo.length; id++) { for(var id = 0; id < tileInfo.length; id++) {
baseTile[id] = { image: preload.getResult(tileInfo[id][0]), id: id }; baseTile[id] = { image: getThemeImage(tileInfo[id][0]), id: id };
} }
emptyTile = { image: preload.getResult("empty"), id: 0 }; emptyTile = { image: getThemeImage("empty"), id: 0 };
actTile = baseTile[1]; actTile = baseTile[1];
} }
@@ -150,12 +160,11 @@ function createEditMap()
{ {
var tile, backColor, bitmap; var tile, backColor, bitmap;
setEditBackground(); setCanvasBackground();
drawEditArea(0,0, setEditBackground(editStartX,0,
(tileW+EDIT_PADDING)*NO_OF_TILES_X+EDIT_PADDING, (tileWScale+EDIT_PADDING)*NO_OF_TILES_X+EDIT_PADDING,
(tileH+EDIT_PADDING)*NO_OF_TILES_Y+EDIT_PADDING (tileHScale+EDIT_PADDING)*NO_OF_TILES_Y+EDIT_PADDING
); );
initMapInfo(); initMapInfo();
getTestLevel(testLevelInfo); getTestLevel(testLevelInfo);
@@ -174,7 +183,7 @@ function createEditMap()
tile = new createjs.Container(); tile = new createjs.Container();
backColor = new createjs.Shape(); backColor = new createjs.Shape();
backColor.graphics.beginFill("black").drawRect(0, 0, tileW, tileH).endFill(); backColor.graphics.beginFill("black").drawRect(0, 0, tileWScale, tileHScale).endFill();
if(id == 0) { if(id == 0) {
bitmap = new createjs.Bitmap(emptyTile.image); bitmap = new createjs.Bitmap(emptyTile.image);
} else { } else {
@@ -183,24 +192,34 @@ function createEditMap()
bitmap.scaleX = bitmap.scaleY = tileScale; bitmap.scaleX = bitmap.scaleY = tileScale;
tile.addChild(backColor, bitmap); tile.addChild(backColor, bitmap);
tile.x = (tileW + EDIT_PADDING) * x+EDIT_PADDING; tile.x = (tileWScale + EDIT_PADDING) * x+EDIT_PADDING + editStartX;
tile.y = (tileH + EDIT_PADDING) * y+EDIT_PADDING; tile.y = (tileHScale + EDIT_PADDING) * y+EDIT_PADDING;
editMap[x][y] = { tile: tile, id: id }; editMap[x][y] = { tile: tile, id: id };
mainStage.addChild(tile); mainStage.addChild(tile);
addManCheck(id, x, y); addManCheck(id, x, y);
} }
} }
drawEditGround(); drawEditGround();
drawEditBlock(editStartX,0, canvasX-editStartX-1,
(tileHScale+EDIT_PADDING)*NO_OF_TILES_Y+EDIT_PADDING
);
addSelectIcon(); addSelectIcon();
addCursorTile(); addCursorTile();
drawEditLevel(); drawEditLevel();
drawSaveButton(); drawSaveButton();
drawTestButton(); drawTestButton();
drawNewButton(); drawNewButton();
drawLoadButton();
enableTestButton(); enableTestButton();
mouseInStage = 1;
mainStage.on("stagemouseup", stageMouseUp); mainStage.on("stagemouseup", stageMouseUp);
mainStage.on("stagemousedown", stageMouseDown); mainStage.on("stagemousedown", stageMouseDown);
mainStage.on("mouseleave", function() { mouseInStage = 0; });
mainStage.on("mouseenter", function() { mouseInStage = 1; });
} }
function clearEditMap() function clearEditMap()
@@ -225,7 +244,7 @@ function tile2Id(tileChar)
} }
} }
function setEditBackground() function setCanvasBackground()
{ {
//set background color //set background color
var background = new createjs.Shape(); var background = new createjs.Shape();
@@ -234,22 +253,40 @@ function setEditBackground()
document.body.style.background = "#301050"; document.body.style.background = "#301050";
} }
function drawEditArea(startX, startY, width, height) function setEditBackground(startX, startY, width, height)
{ {
var editBack = new createjs.Shape(); var editBack = new createjs.Shape();
editBack.alpha = 0.5; editBack.alpha = 0.6;
editBack.graphics.beginFill("gold").drawRect(startX, startY, width, height); editBack.graphics.beginFill("gold").drawRect(startX, startY, width, height);
mainStage.addChild(editBack); mainStage.addChild(editBack);
} }
function drawEditBlock(startX, startY, width, height)
{
var editBlock = new createjs.Shape();
editBlock.alpha = 0.6;
//editBack.graphics.beginFill("gold").drawRect(startX, startY, width, height);
editBlock.graphics.setStrokeStyle(2);
editBlock.graphics.beginStroke("red");
editBlock.graphics.moveTo(startX, startY);
editBlock.graphics.lineTo(startX+width, startY);
editBlock.graphics.lineTo(startX+width, startY+height);
editBlock.graphics.lineTo(startX, startY+height);
editBlock.graphics.lineTo(startX, startY);
editBlock.graphics.endStroke();
mainStage.addChild(editBlock);
}
function drawEditGround() function drawEditGround()
{ {
var groundTile; var groundTile;
var y = (tileH + EDIT_PADDING) * NO_OF_TILES_Y+EDIT_PADDING; var x = (tileWScale + EDIT_PADDING) * NO_OF_TILES_X+EDIT_PADDING + editStartX;
var x = (tileW + EDIT_PADDING) * NO_OF_TILES_X+EDIT_PADDING; var y = (tileHScale + EDIT_PADDING) * NO_OF_TILES_Y+EDIT_PADDING;
groundTile = new createjs.Shape(); groundTile = new createjs.Shape();
groundTile.graphics.beginFill("#0DA1FF").drawRect(0, 0, x, 10*tileScale); groundTile.graphics.beginFill(getThemeTileColor()).drawRect(0, 0, x, 10*tileScale);
groundTile.x = 0; groundTile.x = 0;
groundTile.y = y; groundTile.y = y;
@@ -258,13 +295,14 @@ function drawEditGround()
function addSelectIcon() function addSelectIcon()
{ {
var x = (tileW+EDIT_PADDING)*NO_OF_TILES_X+tileW/2; //var x = (tileWScale+EDIT_PADDING)*NO_OF_TILES_X+tileWScale/2;
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 = (tileH*3/2)*(i-1) + tileH*3/2; y = (tileHScale*5/3)*(i-1) + tileHScale*1/4;
drawSelectIcon(i, x, y); drawSelectIcon(i, x, y);
} }
y = (tileH*3/2)*(i-1) + tileH*3/2; y = (tileHScale*5/3)*(i-1) + tileHScale*1/4;
drawSelectIcon(0, x, y); drawSelectIcon(0, x, y);
} }
@@ -275,7 +313,7 @@ function addCursorTile()
cursorTileObj = new createjs.Container(); cursorTileObj = new createjs.Container();
backColor = new createjs.Shape(); backColor = new createjs.Shape();
backColor.graphics.beginFill("black").drawRect(0, 0, tileW, tileH).endFill(); backColor.graphics.beginFill("black").drawRect(0, 0, tileWScale, tileHScale).endFill();
bitmap = new createjs.Bitmap(actTile.image); bitmap = new createjs.Bitmap(actTile.image);
bitmap.scaleX = bitmap.scaleY = tileScale; bitmap.scaleX = bitmap.scaleY = tileScale;
@@ -326,11 +364,11 @@ function drawSelectIcon(id, x, y)
} else { } else {
selColor = "black"; selColor = "black";
} }
border.graphics.beginFill(selColor).drawRect(-editBorder, -editBorder, tileW+editBorder*2, tileH+editBorder*2).endFill(); border.graphics.beginFill(selColor).drawRect(-editBorder, -editBorder, tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
//child id = 1 //child id = 1
backColor = new createjs.Shape(); backColor = new createjs.Shape();
backColor.graphics.beginFill("black").drawRect(0, 0, tileW, tileH).endFill(); backColor.graphics.beginFill("black").drawRect(0, 0, tileWScale, tileHScale).endFill();
//child id = 2 //child id = 2
if(id == 0) { if(id == 0) {
@@ -358,10 +396,10 @@ function selectTileClick()
var inActBorder = selectedTile.getChildAt(0); var inActBorder = selectedTile.getChildAt(0);
inActBorder.graphics.clear(); inActBorder.graphics.clear();
inActBorder.graphics.beginFill("black").drawRect(-editBorder, -editBorder, tileW+editBorder*2, tileH+editBorder*2).endFill(); inActBorder.graphics.beginFill("black").drawRect(-editBorder, -editBorder, tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
actBorder.graphics.clear(); actBorder.graphics.clear();
actBorder.graphics.beginFill("red").drawRect(-editBorder, -editBorder, tileW+editBorder*2, tileH+editBorder*2).endFill(); actBorder.graphics.beginFill("red").drawRect(-editBorder, -editBorder, tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
actTile = baseTile[this.myId]; actTile = baseTile[this.myId];
cursorTileObj.getChildAt(1).image = actTile.image; cursorTileObj.getChildAt(1).image = actTile.image;
@@ -373,7 +411,7 @@ function selectTileMouseOver()
var border = this.getChildAt(0); var border = this.getChildAt(0);
border.graphics.clear(); border.graphics.clear();
border.graphics.beginFill("gold").drawRect(-editBorder, -editBorder, tileW+editBorder*2, tileH+editBorder*2).endFill(); border.graphics.beginFill("gold").drawRect(-editBorder, -editBorder, tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
mainStage.cursor = 'pointer' mainStage.cursor = 'pointer'
mouseOver = 1; mouseOver = 1;
@@ -385,51 +423,53 @@ function selectTileMouseOut()
var color = (actTile.id == this.myId)?"red":"black"; var color = (actTile.id == this.myId)?"red":"black";
border.graphics.clear(); border.graphics.clear();
border.graphics.beginFill(color).drawRect(-editBorder, -editBorder, tileW+editBorder*2, tileH+editBorder*2).endFill(); border.graphics.beginFill(color).drawRect(-editBorder, -editBorder, tileWScale+editBorder*2, tileHScale+editBorder*2).endFill();
mouseOver = 0; mouseOver = 0;
} }
function drawEditLevel() function drawEditLevel()
{ {
var y = canvas.height - tileH - editBorder*2; var x = 17.2*(tileWScale+EDIT_PADDING)+EDIT_PADDING;
var y = canvas.height - tileHScale - editBorder;
drawText(0, y, "LEVEL", mainStage); drawText(x, y, "EDIT", mainStage);
x += 4.3*(tileWScale+EDIT_PADDING);
drawText(x, y, "LEVEL", mainStage);
drawEditLevelNo(); drawEditLevelNo();
} }
var editLevelNoObj = []; var editLevelNoObj = [];
function drawEditLevelNo() function drawEditLevelNo()
{ {
var y = canvas.height - tileH - editBorder*2; var y = canvas.height - tileHScale - editBorder;
for(var i = 0; i < editLevelNoObj.length; i++) for(var i = 0; i < editLevelNoObj.length; i++)
mainStage.removeChild(editLevelNoObj[i]); mainStage.removeChild(editLevelNoObj[i]);
editLevelNoObj = drawText(5*tileW, 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; var testButton, newButton, saveButton, loadButton;
function drawTestButton() function drawTestButton()
{ {
var border, backColor, text; var border, backColor, text;
var textSting = "TEST"; var textSting = "TEST";
var width = textSting.length * tileW; var width = textSting.length * tileWScale;
//var x = canvas.width - width * 1.5; var x = 8.5*(tileWScale+EDIT_PADDING)+EDIT_PADDING;
var x = 20*(tileW+EDIT_PADDING)+EDIT_PADDING; var y = canvas.height - tileHScale - editBorder;
var y = canvas.height - tileH - editBorder;
testButton = new createjs.Container(); testButton = new createjs.Container();
//child id = 0 //child id = 0
border = new createjs.Shape(); border = new createjs.Shape();
border.graphics.beginFill("black").drawRect(-editBorder, -editBorder, width+editBorder*2, tileH+editBorder*2).endFill(); border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, width+editBorder*2, tileHScale+editBorder*2).endFill();
//child id = 1 //child id = 1
backColor = new createjs.Shape(); backColor = new createjs.Shape();
backColor.graphics.beginFill("#FFF").drawRect(0, 0, width, tileH).endFill(); backColor.graphics.beginFill("#FFF").drawRect(0, 0, width, tileHScale).endFill();
testButton.addChild(border, backColor); testButton.addChild(border, backColor);
@@ -446,6 +486,7 @@ function drawTestButton()
function testButtonClick() function testButtonClick()
{ {
mainStage.cursor = 'default';
startTestMode(); startTestMode();
} }
@@ -454,7 +495,11 @@ function drawTestButton()
var border = this.getChildAt(0); var border = this.getChildAt(0);
border.graphics.clear(); border.graphics.clear();
border.graphics.beginFill("gold").drawRect(-editBorder, -editBorder, 4*tileW+editBorder*2, tileH+editBorder*2).endFill(); 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'; mainStage.cursor = 'pointer';
mouseOver = 1; mouseOver = 1;
@@ -465,7 +510,12 @@ function drawTestButton()
var border = this.getChildAt(0); var border = this.getChildAt(0);
border.graphics.clear(); border.graphics.clear();
border.graphics.beginFill("black").drawRect(-editBorder, -editBorder, 4*tileW+editBorder*2, tileH+editBorder*2).endFill(); 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; mouseOver = 0;
} }
@@ -476,20 +526,19 @@ function drawSaveButton()
var border, backColor, text; var border, backColor, text;
var textSting = "SAVE"; var textSting = "SAVE";
var width = textSting.length * tileW; var width = textSting.length * tileWScale;
//var x = canvas.width - width * 1.5; var x = 13*(tileWScale+EDIT_PADDING)+EDIT_PADDING;
var x = 15*(tileW+EDIT_PADDING)+EDIT_PADDING; var y = canvas.height - tileHScale - editBorder;
var y = canvas.height - tileH - editBorder;
saveButton = new createjs.Container(); saveButton = new createjs.Container();
//child id = 0 //child id = 0
border = new createjs.Shape(); border = new createjs.Shape();
border.graphics.beginFill("black").drawRect(-editBorder, -editBorder, width+editBorder*2, tileH+editBorder*2).endFill(); border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, width+editBorder*2, tileHScale+editBorder*2).endFill();
//child id = 1 //child id = 1
backColor = new createjs.Shape(); backColor = new createjs.Shape();
backColor.graphics.beginFill("#FFF").drawRect(0, 0, width, tileH).endFill(); backColor.graphics.beginFill("#FFF").drawRect(0, 0, width, tileHScale).endFill();
saveButton.addChild(border, backColor); saveButton.addChild(border, backColor);
@@ -517,7 +566,11 @@ function drawSaveButton()
var border = this.getChildAt(0); var border = this.getChildAt(0);
border.graphics.clear(); border.graphics.clear();
border.graphics.beginFill("gold").drawRect(-editBorder, -editBorder, 4*tileW+editBorder*2, tileH+editBorder*2).endFill(); 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'; mainStage.cursor = 'pointer';
mouseOver = 1; mouseOver = 1;
@@ -528,7 +581,11 @@ function drawSaveButton()
var border = this.getChildAt(0); var border = this.getChildAt(0);
border.graphics.clear(); border.graphics.clear();
border.graphics.beginFill("black").drawRect(-editBorder, -editBorder, 4*tileW+editBorder*2, tileH+editBorder*2).endFill(); 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; mouseOver = 0;
} }
@@ -548,7 +605,7 @@ function drawSaveButton()
function startPlayUserLevel() function startPlayUserLevel()
{ {
playMode = PLAY_MODERN; playMode = PLAY_MODERN;
playData = 3; playData = PLAY_DATA_USERDEF;
curLevel = testLevelInfo.level; curLevel = testLevelInfo.level;
setModernInfo(); setModernInfo();
@@ -568,7 +625,7 @@ function editLevelModified()
function editConfirmAbortState(callbackFun) function editConfirmAbortState(callbackFun)
{ {
stopEditTicker(); stopEditTicker();
yesNoDialog(["Abort current edit ?"], yesBitmap, noBitmap, mainStage, tileScale, yesNoDialog(["Abort current editing ?"], yesBitmap, noBitmap, mainStage, tileScale,
function(rc) { if(rc) callbackFun(); else startEditTicker(); }); function(rc) { if(rc) callbackFun(); else startEditTicker(); });
} }
@@ -576,19 +633,19 @@ function drawNewButton()
{ {
var border, backColor, text; var border, backColor, text;
var textSting = "NEW"; var textSting = "NEW";
var width = textSting.length * tileW; var width = textSting.length * tileWScale;
var x = 25*(tileW+EDIT_PADDING)+EDIT_PADDING; var x = 0.5*(tileWScale+EDIT_PADDING)+EDIT_PADDING;
var y = canvas.height - tileH - editBorder; var y = canvas.height - tileHScale - editBorder;
newButton = new createjs.Container(); newButton = new createjs.Container();
//child id = 0 //child id = 0
border = new createjs.Shape(); border = new createjs.Shape();
border.graphics.beginFill("black").drawRect(-editBorder, -editBorder, width+editBorder*2, tileH+editBorder*2).endFill(); border.graphics.beginFill("#40F").drawRect(-editBorder, -editBorder, width+editBorder*2, tileHScale+editBorder*2).endFill();
//child id = 1 //child id = 1
backColor = new createjs.Shape(); backColor = new createjs.Shape();
backColor.graphics.beginFill("#FFF").drawRect(0, 0, width, tileH).endFill(); backColor.graphics.beginFill("#FFF").drawRect(0, 0, width, tileHScale).endFill();
newButton.addChild(border, backColor); newButton.addChild(border, backColor);
@@ -616,6 +673,8 @@ function drawNewButton()
disableTestButton(); disableTestButton();
} }
clearTestLevel(); clearTestLevel();
testLevelInfo.fromPlayData = -1;
testLevelInfo.fromLevel = -1;
} }
startEditTicker(); startEditTicker();
} }
@@ -624,7 +683,7 @@ function drawNewButton()
{ {
stopEditTicker(); stopEditTicker();
if(testLevelInfo.modified) { if(testLevelInfo.modified) {
yesNoDialog(["Abort current edit ?"], yesBitmap, noBitmap, mainStage, tileScale, newLevel); yesNoDialog(["Abort current editing ?"], yesBitmap, noBitmap, mainStage, tileScale, newLevel);
} else { } else {
newLevel(1); newLevel(1);
} }
@@ -635,7 +694,11 @@ function drawNewButton()
var border = this.getChildAt(0); var border = this.getChildAt(0);
border.graphics.clear(); border.graphics.clear();
border.graphics.beginFill("gold").drawRect(-editBorder, -editBorder, 3*tileW+editBorder*2, tileH+editBorder*2).endFill(); 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'; mainStage.cursor = 'pointer';
mouseOver = 1; mouseOver = 1;
@@ -646,7 +709,153 @@ function drawNewButton()
var border = this.getChildAt(0); var border = this.getChildAt(0);
border.graphics.clear(); border.graphics.clear();
border.graphics.beginFill("black").drawRect(-editBorder, -editBorder, 3*tileW+editBorder*2, tileH+editBorder*2).endFill(); 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()
{
var border, backColor, text;
var textSting = "LOAD";
var width = textSting.length * tileWScale;
var x = 4*(tileWScale+EDIT_PADDING)+EDIT_PADDING;
var y = canvas.height - tileHScale - editBorder;
var saveStateObj;
var loadLevelData, loadPlayData;
var editGameVersionList = [
{ activeItem: 0 } //game version menu ID
];
loadButton = 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();
loadButton.addChild(border, backColor);
//child id = 2
drawText(0, 0, textSting, loadButton);
loadButton.x = x;
loadButton.y = y;
loadButton.on('click', loadButtonClick);
loadButton.on('mouseover', loadButtonMouseOver);
loadButton.on('mouseout', loadButtonMouseOut);
mainStage.addChild(loadButton);
initLoadVariable();
function saveState()
{
saveStateObj = saveKeyHandler(noKeyDown);
stopEditTicker();
}
function restoreState()
{
restoreKeyHandler(saveStateObj);
startEditTicker();
}
function initLoadVariable()
{
for(var i = 0; i < playVersionInfo.length; i++) {
editGameVersionList.push(
{
name: playVersionInfo[i].name + " (" + playVersionInfo[i].verData.length + " Levels) ",
id :playVersionInfo[i].id,
activeFun: loadSelectMenu
});
}
}
function menuId2GameVersionId(id)
{
return editGameVersionList[id+1].id;
}
function loadSelectLevel(level)
{
restoreState();
testLevelInfo.levelMap = loadLevelData[level-1];
testLevelInfo.pass = 1;
testLevelInfo.fromPlayData = loadPlayData;
testLevelInfo.fromLevel = level;
setTestLevel(testLevelInfo);
startEditMode();
}
function loadSelectMenu(id, callbackFun)
{
loadPlayData = menuId2GameVersionId(id);
var titleName = playDataToTitleName(loadPlayData);
loadLevelData = getPlayVerData(loadPlayData);
titleName = "Load From: " + titleName;
selectDialog(titleName, checkBitmap, loadLevelData, 1, screenX1, screenY1,
mainStage, tileScale, loadSelectLevel, null, restoreState)
}
function loadExistLevel(yes)
{
if(yes) {
menuDialog("Load Game Version ", editGameVersionList, mainStage, tileScale, 1, restoreState, null);
} else {
restoreState();
}
}
function loadButtonClick()
{
saveState();
if(!editMapIsEmpty()) {
yesNoDialog(["Abort current editing ?"], yesBitmap, noBitmap, mainStage, tileScale, loadExistLevel);
} else {
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()
{
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; mouseOver = 0;
} }
@@ -691,7 +900,7 @@ function disableTestButton()
function clearUserLevelScore() function clearUserLevelScore()
{ {
playData = 3; playData = PLAY_DATA_USERDEF;
getModernScoreInfo(); getModernScoreInfo();
modernScoreInfo[testLevelInfo.level-1] = -1; modernScoreInfo[testLevelInfo.level-1] = -1;
setModernScoreInfo(); setModernScoreInfo();
@@ -699,7 +908,7 @@ function clearUserLevelScore()
function delUserLevelScore(level) function delUserLevelScore(level)
{ {
playData = 3; playData = PLAY_DATA_USERDEF;
getModernScoreInfo(); getModernScoreInfo();
modernScoreInfo.splice(level-1, 1); modernScoreInfo.splice(level-1, 1);
modernScoreInfo[MAX_EDIT_LEVEL-1] = -1; modernScoreInfo[MAX_EDIT_LEVEL-1] = -1;
@@ -808,7 +1017,7 @@ function delManCheck(id, x, y)
guardTile.id = emptyTile.id; guardTile.id = emptyTile.id;
lastGuardList.splice(removeId,1); lastGuardList.splice(removeId,1);
} else { } else {
console.log("design error !"); error(arguments.callee.name, "design error !");
} }
break; break;
} }
@@ -845,6 +1054,7 @@ function editSelectLevel(level)
{ {
testLevelInfo.level = level; testLevelInfo.level = level;
testLevelInfo.levelMap = editLevelData[level-1]; testLevelInfo.levelMap = editLevelData[level-1];
testLevelInfo.fromPlayData = testLevelInfo.fromLevel = -1;
setTestLevel(testLevelInfo); setTestLevel(testLevelInfo);
startEditMode(); startEditMode();
} }
@@ -861,6 +1071,28 @@ function map2LevelData()
} }
} }
function editMapIsEmpty()
{
for(var y = 0; y < NO_OF_TILES_Y; y++) {
for(var x = 0; x < NO_OF_TILES_X; x++) {
if(editMap[x][y].id != emptyTile.id) return 0;
}
}
return 1;
}
function copyEditingMap()
{
var curEditMap = "";
for(var y = 0; y < NO_OF_TILES_Y; y++) {
for(var x = 0; x < NO_OF_TILES_X; x++) {
curEditMap += tileInfo[editMap[x][y].id][1];
}
}
return curEditMap;
}
//============================== //==============================
// Too many user created Levels // Too many user created Levels
//============================== //==============================
@@ -870,13 +1102,13 @@ function editWarningMsg(hidden)
var x, y, width, height; var x, y, width, height;
if(editWarningText == null) if(editWarningText == null)
editWarningText = new createjs.Text("Too many user created levels !", editWarningText = new createjs.Text("Too many custom levels !",
"bold " + (64*tileScale) + "px Helvetica", "#fc5c1c"); "bold " + (64*tileScale) + "px Helvetica", "#fc5c1c");
width = editWarningText.getBounds().width; width = editWarningText.getBounds().width;
height = editWarningText.getBounds().height; height = editWarningText.getBounds().height;
x = editWarningText.x = (NO_OF_TILES_X*(tileW+EDIT_PADDING) - width) / 2 | 0; x = editWarningText.x = (NO_OF_TILES_X*(tileWScale+EDIT_PADDING) - width) / 2 | 0;
y = editWarningText.y = (NO_OF_TILES_Y*tileH - height) / 2 | 0; y = editWarningText.y = (NO_OF_TILES_Y*tileHScale - height) / 2 | 0;
editWarningText.shadow = new createjs.Shadow("white", 2, 2, 1); editWarningText.shadow = new createjs.Shadow("white", 2, 2, 1);
if(hidden) { if(hidden) {
@@ -887,21 +1119,30 @@ function editWarningMsg(hidden)
mainStage.update(); mainStage.update();
} }
var copyLevelMap = null; var copyLevelMap = null, copyLevelPassed = 0;
function editHandleKeyDown(event) function editHandleKeyDown(event)
{ {
if(!event){ event = window.event; } //cross browser issues exist if(!event){ event = window.event; } //cross browser issues exist
if (event.ctrlKey) { if (event.ctrlKey) {
if(event.keyCode == KEYCODE_V) { //CTRL-V switch(event.keyCode) {
case KEYCODE_C: //CTRL-C : copy current level
copyLevelMap = copyEditingMap();
copyLevelPassed = (!testLevelInfo.modified && lastRunner) || testLevelInfo.pass;
setTimeout(function() { showTipsText("COPY MAP", 1500);}, 50);
break;
case KEYCODE_V: //CTRL-V : paste copy map
if(copyLevelMap != null) { if(copyLevelMap != null) {
testLevelInfo.levelMap = copyLevelMap; testLevelInfo.levelMap = copyLevelMap;
testLevelInfo.pass = 1; testLevelInfo.modified = 1;
testLevelInfo.pass = copyLevelPassed;
testLevelInfo.fromPlayData = testLevelInfo.fromLevel = -1;
setTestLevel(testLevelInfo); setTestLevel(testLevelInfo);
startEditMode(); startEditMode();
////setButtonState(); ////setButtonState();
setTimeout(function() { showTipsText("PASTE MAP", 0);}, 50); setTimeout(function() { showTipsText("PASTE MAP", 1500);}, 50);
} }
break;
} }
} }
return true; return true;
@@ -909,21 +1150,23 @@ function editHandleKeyDown(event)
function editTick() function editTick()
{ {
var x = ((mainStage.mouseX-EDIT_PADDING) / (tileW+EDIT_PADDING) )| 0; var x = ((mainStage.mouseX-EDIT_PADDING - editStartX)/(tileWScale+EDIT_PADDING));
var y = ((mainStage.mouseY-EDIT_PADDING) / (tileH+EDIT_PADDING) )| 0; var x = (x < 0)?-1:(x|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.cursor = 'default';
mainStage.update(); mainStage.update();
return; return;
} }
if(x >= 0 && x < NO_OF_TILES_X && y >= 0 && y < NO_OF_TILES_Y) { //debug(mainStage.mouseX,editStartX, x,y);
if(mouseInStage && x >= 0 && x < NO_OF_TILES_X && y >= 0 && y < NO_OF_TILES_Y) {
//edit area //edit area
mainStage.cursor = 'pointer'; mainStage.cursor = 'pointer';
if( x != lastDown.x || y != lastDown.y) { if( x != lastDown.x || y != lastDown.y) {
cursorTileObj.alpha = 1; cursorTileObj.alpha = 1;
cursorTileObj.x = (tileW + EDIT_PADDING) * x+EDIT_PADDING; cursorTileObj.x = (tileWScale + EDIT_PADDING) * x+EDIT_PADDING + editStartX;
cursorTileObj.y = (tileH + EDIT_PADDING) * y+EDIT_PADDING; cursorTileObj.y = (tileHScale + EDIT_PADDING) * y+EDIT_PADDING;
if(mouseDown) { if(mouseDown) {
var clickTile = editMap[x][y]; var clickTile = editMap[x][y];
+1
Voir le fichier
@@ -0,0 +1 @@
var gameVersionName = [ " Classic Lode Runner ", " Championship Lode Runner ", " Professional Lode Runner ", " Revenge of Lode Runner ", " Lode Runner Fan Book " ];
+193 -23
Voir le fichier
@@ -3,23 +3,25 @@
// http://www.kingstone.com.tw/book/book_page.asp?kmcode=2014710650538 // http://www.kingstone.com.tw/book/book_page.asp?kmcode=2014710650538
//============================================================================= //=============================================================================
var movePolicy = [ [0, 0, 0], //* move_map is used to find *// var movePolicy = [ [0, 0, 0, 0, 0, 0], //* move_map is used to find *//
[0, 1, 1], //* wheather to move a enm *// [0, 1, 1, 0, 1, 1], //* wheather to move a enm *//
[1, 1, 1], //* by indexing into it with *// [1, 1, 1, 1, 1, 1], //* by indexing into it with *//
[1, 2, 1], //* enm_byte + num_enm + *// [1, 2, 1, 1, 2, 1], //* enm_byte + num_enm + *//
[1, 2, 2], //* set_num to get a byte. *// [1, 2, 2, 1, 2, 2], //* set_num to get a byte. *//
[2, 2, 2], //* then that byte is checked*// [2, 2, 2, 2, 2, 2], //* then that byte is checked*//
[2, 2, 3], //* for !=0 and then decrmnt *// [2, 2, 3, 2, 2, 3], //* for !=0 and then decrmnt *//
[2, 3, 3], //* for next test until = 0 *// [2, 3, 3, 2, 3, 3], //* for next test until = 0 *//
[3, 3, 3], [3, 3, 3, 3, 3, 3],
[3, 3, 4], [3, 3, 4, 3, 3, 4],
[3, 4, 4], [3, 4, 4, 3, 4, 4],
[4, 4, 4] [4, 4, 4, 4, 4, 4]
]; ];
var moveOffset = 0; var moveOffset = 0;
var moveId = 0; //current guard id var moveId = 0; //current guard id
var numOfMoveItems = movePolicy[0].length;
//******************************** //********************************
//initial guard start move value //initial guard start move value
//******************************** //********************************
@@ -36,7 +38,7 @@ function moveGuard()
if(!guardCount) return; //no guard if(!guardCount) return; //no guard
if( ++moveOffset >= 3 ) moveOffset = 0; if( ++moveOffset >= numOfMoveItems ) moveOffset = 0;
moves = movePolicy[guardCount][moveOffset]; // get next moves moves = movePolicy[guardCount][moveOffset]; // get next moves
while ( moves-- > 0) { // slows guard relative to runner while ( moves-- > 0) { // slows guard relative to runner
@@ -198,7 +200,11 @@ function guardMoveStep( id, action)
if(map[x][y].act == RUNNER_T) setRunnerDead(); //collision if(map[x][y].act == RUNNER_T) setRunnerDead(); //collision
//map[x][y].act = GUARD_T; //map[x][y].act = GUARD_T;
} }
if(action == ACT_DOWN && yOffset >= 0 && yOffset < yMove) { //try drop gold
//add condition: AI version >= 3 will decrease drop count while guard fall
if( ((curAiVersion >= 3 && action == ACT_FALL) || action == ACT_DOWN) &&
yOffset >= 0 && yOffset < yMove)
{ //try drop gold
dropGold(id); //decrease count dropGold(id); //decrease count
} }
@@ -213,10 +219,16 @@ function guardMoveStep( id, action)
decGold(); //gold disappear decGold(); //gold disappear
} }
curGuard.hasGold = 0; curGuard.hasGold = 0;
curGuard.sprite.on("animationend", function() { climbOut(id); });
soundPlay("trap");
if( curShape == "fallRight") newShape = "shakeRight"; if( curShape == "fallRight") newShape = "shakeRight";
else newShape = "shakeLeft"; else newShape = "shakeLeft";
themeSoundPlay("trap");
shakeTimeStart = recordCount; //for debug
if(curAiVersion < 3) {
curGuard.sprite.on("animationend", function() { climbOut(id); });
} else {
add2GuardShakeQueue(id, newShape);
}
if(playMode == PLAY_CLASSIC || playMode == PLAY_AUTO || playMode == PLAY_DEMO) { if(playMode == PLAY_CLASSIC || playMode == PLAY_AUTO || playMode == PLAY_DEMO) {
drawScore(SCORE_IN_HOLE); drawScore(SCORE_IN_HOLE);
} else { } else {
@@ -326,8 +338,10 @@ function guardMoveStep( id, action)
) )
) )
{ {
curGuard.hasGold = ((Math.random()*26)+14)|0; //14 - 39 //curGuard.hasGold = ((Math.random()*26)+14)|0; //14 - 39
if(playMode == PLAY_AUTO || playMode == PLAY_DEMO) getDemoGold(curGuard); curGuard.hasGold = ((Math.random()*26)+12)|0; //12 - 37 change gold drop steps
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);
//debug ("get, (x,y) = " + x + "," + y + ", offset = " + xOffset); //debug ("get, (x,y) = " + x + "," + y + ", offset = " + xOffset);
@@ -368,6 +382,95 @@ function dropGold(id)
} }
} }
//=============================================
// BEGIN NEW SHAKE METHOD for AI version >= 3
//=============================================
var DEBUG_TIME = 0;
var shakeRight = [ 8, 9, 10, 9, 10, 8 ];
var shakeLeft = [ 19, 20, 21, 20, 21, 19 ];
var shakeTime = [ 36, 3, 3, 3, 3, 3 ];
var shakingGuardList = [];
function initStillFrameVariable()
{
initGuardShakeVariable();
initFillHoleVariable();
initRebornVariable();
}
function initGuardShakeVariable()
{
shakingGuardList = [];
}
function add2GuardShakeQueue(id, shape)
{
var curGuard = guard[id];
if(shape == "shakeRight") {
curGuard.shapeFrame = shakeRight;
} else {
curGuard.shapeFrame = shakeLeft;
}
curGuard.curFrameIdx = 0;
curGuard.curFrameTime = -1; //for init
shakingGuardList.push(id);
//error(arguments.callee.name, "push id =" + id + "(" + shakingGuardList + ")" );
}
function processGuardShake()
{
var curGuard, curIdx;
for(var i = 0; i < shakingGuardList.length;) {
curGuard = guard[shakingGuardList[i]];
curIdx = curGuard.curFrameIdx;
if( curGuard.curFrameTime < 0) { //start shake => set still frame
curGuard.curFrameTime = 0;
curGuard.sprite.gotoAndStop(curGuard.shapeFrame[curIdx]);
} else {
if(++curGuard.curFrameTime >= shakeTime[curIdx]) {
if(++curGuard.curFrameIdx < curGuard.shapeFrame.length) {
//change frame
curGuard.curFrameTime = 0;
curGuard.sprite.gotoAndStop(curGuard.shapeFrame[curGuard.curFrameIdx]);
} else {
//shake time out
var id = shakingGuardList[i];
shakingGuardList.splice(i, 1); //remove from list
//error(arguments.callee.name, "remove id =" + id + "(" + shakingGuardList + ")" );
climbOut(id); //climb out
continue;
}
}
}
i++;
}
}
function removeFromShake(id)
{
for(var i = 0; i < shakingGuardList.length;i++) {
if(shakingGuardList[i] == id) {
shakingGuardList.splice(i, 1); //remove from list
//error(arguments.callee.name, "remove id =" + id + "(" + shakingGuardList + ")" );
return;
}
}
error(arguments.callee.name, "design error id =" + id + "(" + shakingGuardList + ")" );
}
//======================
// END NEW SHAKE METHOD
//======================
function climbOut(id) function climbOut(id)
{ {
var curGuard = guard[id] var curGuard = guard[id]
@@ -377,6 +480,8 @@ function climbOut(id)
curGuard.sprite.gotoAndPlay("runUpDn"); curGuard.sprite.gotoAndPlay("runUpDn");
curGuard.shape = "runUpDn"; curGuard.shape = "runUpDn";
curGuard.holePos = {x: curGuard.pos.x, y: curGuard.pos.y }; curGuard.holePos = {x: curGuard.pos.x, y: curGuard.pos.y };
if(DEBUG_TIME) loadingTxt.text = "ShakeTime = " + (recordCount - shakeTimeStart); //for debug
} }
function bestMove(id) function bestMove(id)
@@ -704,14 +809,17 @@ function guardReborn(x, y)
var bornX = bornRndX.get(); var bornX = bornRndX.get();
var rndStart = bornX; var rndStart = bornX;
while(map[bornX][bornY].act != EMPTY_T) { //BUG FIXED for level 115 (can not reborn at bornX=27)
while(map[bornX][bornY].act != EMPTY_T || map[bornX][bornY].base == GOLD_T || map[bornX][bornY].base == BLOCK_T ) {
//BUG FIXED for level 115 (can not reborn at bornX=27)
//don't born at gold position & diged position, 2/24/2015
if( (bornX = bornRndX.get()) == rndStart) { if( (bornX = bornRndX.get()) == rndStart) {
bornY++; bornY++;
} }
assert(bornY <= maxTileY, "Error: Born Y too large !"); assert(bornY <= maxTileY, "Error: Born Y too large !");
} }
//debug("bornX = " + bornX); //debug("bornX = " + bornX);
if(playMode == PLAY_AUTO || playMode == PLAY_DEMO) { if(playMode == PLAY_AUTO || playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) {
var bornPos = getDemoBornPos(); var bornPos = getDemoBornPos();
bornX = bornPos.x; bornX = bornPos.x;
bornY = bornPos.y; bornY = bornPos.y;
@@ -732,8 +840,14 @@ function guardReborn(x, y)
curGuard.pos = { x:bornX, y:bornY, xOffset:0, yOffset: 0 }; curGuard.pos = { x:bornX, y:bornY, xOffset:0, yOffset: 0 };
curGuard.sprite.x = bornX * tileWScale | 0; curGuard.sprite.x = bornX * tileWScale | 0;
curGuard.sprite.y = bornY * tileHScale | 0; curGuard.sprite.y = bornY * tileHScale | 0;
curGuard.sprite.on("animationend", function() { rebornComplete(id); });
curGuard.sprite.gotoAndPlay("reborn"); rebornTimeStart = recordCount;
if(curAiVersion < 3) {
curGuard.sprite.on("animationend", function() { rebornComplete(id); });
curGuard.sprite.gotoAndPlay("reborn");
} else {
add2RebornQueue(id);
}
curGuard.shape = "reborn"; curGuard.shape = "reborn";
curGuard.action = ACT_REBORN; curGuard.action = ACT_REBORN;
@@ -752,10 +866,66 @@ function rebornComplete(id)
guard[id].shape = "fallRight"; guard[id].shape = "fallRight";
//guard[id].hasGold = 0; //guard[id].hasGold = 0;
guard[id].sprite.gotoAndPlay("fallRight"); guard[id].sprite.gotoAndPlay("fallRight");
soundPlay("reborn"); themeSoundPlay("reborn");
if(DEBUG_TIME) loadingTxt.text = "rebornTime = " + (recordCount - rebornTimeStart); //for debug
} }
function setRunnerDead() function setRunnerDead()
{ {
if(!godMode) gameState = GAME_RUNNER_DEAD; if(!godMode) gameState = GAME_RUNNER_DEAD;
} }
//===============================================
// BEGIN NEW FOR REBORN (ai version >= 3)
//===============================================
var rebornFrame = [ 17, 18 ];
var rebornTime = [ 6, 2 ];
var rebornGuardList = [];
function initRebornVariable()
{
rebornGuardList = [];
}
function add2RebornQueue(id)
{
var curGuard = guard[id];
curGuard.sprite.gotoAndStop("reborn");
curGuard.curFrameIdx = 0;
curGuard.curFrameTime = -1;
rebornGuardList.push(id);
}
function processReborn()
{
var curGuard, curIdx;
for(var i = 0; i < rebornGuardList.length;) {
curGuard = guard[rebornGuardList[i]];
curIdx = curGuard.curFrameIdx;
if(++curGuard.curFrameTime >= rebornTime[curIdx]) {
if(++curGuard.curFrameIdx < rebornFrame.length) {
//change frame
curGuard.curFrameTime = 0;
curGuard.sprite.gotoAndStop(rebornFrame[curGuard.curFrameIdx]);
} else {
//reborn
var id = rebornGuardList[i];
rebornGuardList.splice(i, 1); //remove from list
rebornComplete(id);
continue;
}
}
i++;
}
}
//====================
// END NEW FOR REBORN
//====================
+243 -63
Voir le fichier
@@ -1,5 +1,5 @@
function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime) function showScoreTable(_playData, _curScoreInfo, _callbackFun, _waitTime)
{ {
var hiScoreInfo; var hiScoreInfo;
var canvas2, scoreStage; var canvas2, scoreStage;
@@ -12,7 +12,7 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
function init() function init()
{ {
getHiScoreInfo(); var haveInfo = getHiScoreInfo();
if(_curScoreInfo) { if(_curScoreInfo) {
recordId = updateScoreInfo(); recordId = updateScoreInfo();
@@ -22,13 +22,20 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
} }
} }
if(!haveInfo && !_curScoreInfo) {
if(_callbackFun) _callbackFun();
return; //no score info don't need display
}
createCanvas2(); createCanvas2();
createScoreStage(); createScoreStage();
setScoreBackground(); setScoreBackground();
drawHiScoreList(); drawHiScoreList();
scoreStage.update(); scoreStage.update();
if(recordId >= 0) { if(recordId >= 0) {
inputHiScoreName(); var winner = 0;
if('w' in _curScoreInfo) winner = 1;
inputHiScoreName(winner);
} else { } else {
anyKeyHandler(); anyKeyHandler();
if(typeof _waitTime == "undefined") _waitTime = 3500; if(typeof _waitTime == "undefined") _waitTime = 3500;
@@ -45,55 +52,30 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
function getHiScoreInfo() function getHiScoreInfo()
{ {
var infoJSON, levelMap; var infoJSON = null, levelMap;
var rc = 0;
if(_dataId == 1) { infoJSON = getStorage(STORAGE_HISCORE_INFO + _playData);
infoJSON = getStorage(STORAGE_HISCORE_INFO2);
} else {
infoJSON = getStorage(STORAGE_HISCORE_INFO1);
}
if(infoJSON) { if(infoJSON) {
var infoObj = JSON.parse(infoJSON); var infoObj = JSON.parse(infoJSON);
hiScoreInfo = infoObj; hiScoreInfo = infoObj;
rc = 1;
} else { } else {
// no score
hiScoreInfo = []; hiScoreInfo = [];
for(var i = 0; i < MAX_HISCORE_RECORD; i++) { for(var i = 0; i < MAX_HISCORE_RECORD; i++) {
hiScoreInfo[i] = {s:0 , n:"" , l: 0}; hiScoreInfo[i] = {s:0 , n:"" , l: 0};
} }
if(_dataId == 1) {
hiScoreInfo[0].n = "STEVE JOBS";
hiScoreInfo[0].l = 1;
hiScoreInfo[0].s = 2500;
hiScoreInfo[1].n = "BILL GATES";
hiScoreInfo[1].l = 1;
hiScoreInfo[1].s = 1500;
} else {
hiScoreInfo[0].n = "SIMON";
hiScoreInfo[0].l = 1;
hiScoreInfo[0].s = 3500;
hiScoreInfo[1].n = "PETER PAN";
hiScoreInfo[1].l = 1;
hiScoreInfo[1].s = 2000;
hiScoreInfo[2].n = "DASH PARR"; // The Incredibles. He is the son of Bob Parr and Helen Parr (小飛)
hiScoreInfo[2].l = 1;
hiScoreInfo[2].s = 1000;
}
} }
return rc;
} }
function setHiScoreInfo() function setHiScoreInfo()
{ {
var infoJSON = JSON.stringify(hiScoreInfo); var infoJSON = JSON.stringify(hiScoreInfo);
setStorage(STORAGE_HISCORE_INFO + _playData, infoJSON);
if(_dataId == 1)
setStorage(STORAGE_HISCORE_INFO2, infoJSON);
else
setStorage(STORAGE_HISCORE_INFO1, infoJSON);
} }
function updateScoreInfo() function updateScoreInfo()
@@ -153,7 +135,7 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
function getNameStartPos(nameLength, itemId) function getNameStartPos(nameLength, itemId)
{ {
var x = (4+(MAX_HISCORE_NAME_LENGTH-nameLength)/2)*tileWScale; var x = (3.75+(MAX_HISCORE_NAME_LENGTH-nameLength)/2)*tileWScale;
var y = (itemId * 1.2 + 5) * tileHScale; var y = (itemId * 1.2 + 5) * tileHScale;
return { x: x, y: y }; return { x: x, y: y };
@@ -161,16 +143,22 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
function drawHiScoreList() function drawHiScoreList()
{ {
var title = "LODE RUNNER " + ((_dataId == 1)?"2":"1") + " HIGH SCORES"; //var title = playDataName[_playData-1] + " HIGH SCORES";
var title = playDataToTitleName(_playData);
var localHighScore = "LOCAL HIGH SCORES";
var barTile; var barTile;
drawText((NO_OF_TILES_X-title.length)/2*tileWScale, 0.5*tileHScale, title, scoreStage); //title
drawText((NO_OF_TILES_X-title.length)/2*tileWScale, 0*tileHScale, title, scoreStage);
drawText((NO_OF_TILES_X-localHighScore.length)/2*tileWScale, 1.5*tileHScale, localHighScore, scoreStage);
drawText(0.5*tileWScale, 3*tileHScale, "NO", scoreStage); drawText(0.5*tileWScale, 3*tileHScale, "NO", scoreStage);
drawText(7*tileWScale, 3*tileHScale, "NAME", scoreStage); drawText(7.75*tileWScale, 3*tileHScale, "NAME", scoreStage);
drawText(14.5*tileWScale, 3*tileHScale, "LEVEL SCORE", scoreStage); drawText(15.75*tileWScale, 3*tileHScale, "LEVEL", scoreStage);
drawText(22*tileWScale, 3*tileHScale, "SCORE", scoreStage);
//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(preload.getResult("ground")); barTile = new createjs.Bitmap(getThemeImage("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);
} }
@@ -178,14 +166,14 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
for(var i = 0; i < MAX_HISCORE_RECORD; i++) { for(var i = 0; i < MAX_HISCORE_RECORD; i++) {
var pos = getNameStartPos(hiScoreInfo[i].n.length, i); var pos = getNameStartPos(hiScoreInfo[i].n.length, i);
drawText(0.5*tileWScale, pos.y, ("0"+(i+1)).slice(-2) + ".", scoreStage); //no drawText(0.25*tileWScale, pos.y, ("0"+(i+1)).slice(-2) + ".", scoreStage); //no
if(hiScoreInfo[i].s > 0) { if(hiScoreInfo[i].s > 0) {
if(hiScoreInfo[i].n.length > 0) { if(hiScoreInfo[i].n.length > 0) {
drawText(pos.x, pos.y, hiScoreInfo[i].n, scoreStage, "D"); //name drawText(pos.x, pos.y, hiScoreInfo[i].n, scoreStage, "D"); //name
} }
drawText(15.5*tileWScale, pos.y, ("00"+hiScoreInfo[i].l).slice(-3), scoreStage); //level drawText(16.75*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 drawText(21*tileWScale, pos.y, ("000000"+hiScoreInfo[i].s).slice(-7), scoreStage); //score
} }
} }
} }
@@ -208,25 +196,29 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
document.onkeydown = savedKeyDownHander; document.onkeydown = savedKeyDownHander;
} }
function inputHiScoreName() function inputHiScoreName(winner)
{ {
var name, nameText; var name, nameText;
var curPos = 0; var curPos = 0;
var savedKeyDownHander, hiScoreTicker; var savedKeyDownHander, hiScoreTicker;
var cursor; var cursor;
if(winner) endingMusicPlay(); //6/15/2015, play ending music for winner
initInput(); initInput();
function initInput() function initInput()
{ {
name = []; //array of char curPos = playerName.length;
name = playerName.split(""); //string to array;
nameText = []; //text object nameText = []; //text object
var pos = getNameStartPos(0, recordId); var pos = getNameStartPos(name.length, recordId);
cursor = new createjs.Sprite(textData, "FLASH"); cursor = new createjs.Sprite(textData, "FLASH");
cursor.setTransform(pos.x-tileWScale/2, pos.y , tileScale, tileScale); cursor.setTransform(pos.x-tileWScale/2, pos.y , tileScale, tileScale);
scoreStage.addChild(cursor); scoreStage.addChild(cursor);
//copyPlayerName();
redrawName();
changeKeyDownHandler(); changeKeyDownHandler();
hiScoreTicker = createjs.Ticker.on("tick", scoreStage); hiScoreTicker = createjs.Ticker.on("tick", scoreStage);
} }
@@ -237,23 +229,28 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
document.onkeydown = handleHiScoreName; document.onkeydown = handleHiScoreName;
} }
function cutTailSpace() function inputFinish(async)
{ {
if(winner) endingMusicStop(); //6/15/2015, stop ending music
//cut tail space
for(var i = name.length-1; i >= 0; i--) { for(var i = name.length-1; i >= 0; i--) {
if(name[i] == " ") name.splice(i,1); if(name[i] == " ") name.splice(i,1);
else break; else break;
} }
}
function inputFinish() var nameString = name.join(""); //array to string
{
cutTailSpace();
redrawName(); redrawName();
//update name for score info //update name for score info
hiScoreInfo[recordId].n = array2String(name); hiScoreInfo[recordId].n = nameString;
setHiScoreInfo(); setHiScoreInfo();
if(nameString != playerName && nameString != "???") { //set and save playerName
playerName = nameString;
setPlayerName(nameString);
}
//remove cursor //remove cursor
scoreStage.removeChild(cursor); scoreStage.removeChild(cursor);
scoreStage.update(); scoreStage.update();
@@ -268,20 +265,11 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
scoreStage.removeChild(nameText[i]); scoreStage.removeChild(nameText[i]);
} }
function array2String(name)
{
var nameString = "";
for(var i = 0; i < name.length; i++) {
nameString += name[i];
}
return nameString;
}
function redrawName() function redrawName()
{ {
var pos = getNameStartPos(name.length, recordId); var pos = getNameStartPos(name.length, recordId);
removeNameText(); removeNameText();
nameText = drawText(pos.x, pos.y, array2String(name), scoreStage, "D"); nameText = drawText(pos.x, pos.y, name.join(""), scoreStage, "D");
//change cursor position //change cursor position
if(name.length > 0) cursor.x = pos.x + curPos * tileWScale; if(name.length > 0) cursor.x = pos.x + curPos * tileWScale;
@@ -339,6 +327,7 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
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");
break;
default: default:
//debug(code); //debug(code);
if(code > 32) soundPlay("beep"); //wrong key code if(code > 32) soundPlay("beep"); //wrong key code
@@ -350,3 +339,194 @@ function showScoreTable(_dataId, _curScoreInfo, _callbackFun, _waitTime)
} }
} }
} }
function inputPlayerName(_stage, _callbackFun)
{
var constString = "PLAYER NAME:"
var constSize = constString.length;
var maxInputSize = MAX_HISCORE_NAME_LENGTH;
var borderSize = 2;
var totalSizeX = constSize + maxInputSize + borderSize + 1; //+1 flash
var totalSizeY = 3;
var inputBoardX = (NO_OF_TILES_X - totalSizeX) / 2;
var inputBoardY = (NO_OF_TILES_Y - totalSizeY) / 2;
var inputStartX = inputBoardX + constSize + 1;
var inputStartY = inputBoardY + 1;
var background = new createjs.Shape();
var textBorder = new createjs.Shape();
var textBackground = new createjs.Shape();
background.graphics.beginFill("black").drawRect(0, 0, _stage.canvas.width, _stage.canvas.height).endFill();
background.alpha = 0.2;
var x = inputBoardX*tileWScale, y = inputBoardY*tileHScale;
var w = totalSizeX*tileWScale, h = totalSizeY*tileHScale;
var radius = (tileWScale/4)|0;
textBorder.graphics.beginFill("#f00").drawRoundRect(x, y, w, h, radius).endFill();
textBorder.alpha = 0.6;
textBorder.shadow = new createjs.Shadow("#111", tileWScale/4, tileHScale/4, 10);
x = (inputBoardX+0.5)*tileWScale; y = (inputBoardY+0.5)*tileHScale;
w = (totalSizeX-1)*tileWScale; h = (totalSizeY-1)*tileHScale;
textBackground.alpha = 0.5;
textBackground.graphics.beginFill("#111").drawRoundRect(x, y, w, h, radius/2).endFill();
_stage.addChild(background, textBorder, textBackground);
x = (inputBoardX+1)*tileWScale; y = (inputBoardY+1)*tileHScale;
var constObj = drawText(x, y, constString, _stage, "D");
x = inputStartX*tileWScale; y = inputStartY*tileHScale;
inputString(_stage, maxInputSize, x, y, playerName, inputComplete);
function inputComplete(string)
{
setPlayerName(string);
playerName = string;
//remove const object
for(var i = 0; i < constObj.length; i++)
_stage.removeChild(constObj[i]);
//remove textBackground, textBorder & background
_stage.removeChild(textBackground, textBorder, background);
_stage.update();
_callbackFun();
}
}
function inputString(_stage, _maxSize, _startX, _startY, _defaultString, _callbackFun)
{
var inputText, inputObj;
var curPos = 0;
var savedKeyDownHander, hiScoreTicker;
var cursor;
initInput();
function initInput()
{
curPos = _defaultString.length; // cursor start position
inputText = _defaultString.split(""); //string to array
inputObj = []; //text object
cursor = new createjs.Sprite(textData, "FLASH");
cursor.setTransform(_startX, _startY, tileScale, tileScale);
_stage.addChild(cursor);
drawString();
changeKeyDownHandler();
//hiScoreTicker = createjs.Ticker.on("tick", scoreStage);
}
function drawString()
{
clearStringObj();
inputObj = drawText(_startX, _startY, inputText.join(""), _stage, "D");
//change cursor position
cursor.x = _startX + curPos * tileWScale;
//move cursor to top
moveChild2Top(_stage, cursor);
}
function clearStringObj()
{
for(var i = 0; i < inputObj.length; i++)
_stage.removeChild(inputObj[i]);
}
function changeKeyDownHandler()
{
savedKeyDownHander = document.onkeydown;
document.onkeydown = handleStringInput;
}
function restoreKeyDownHandler()
{
document.onkeydown = savedKeyDownHander;
}
function handleStringInput(event)
{
if(!event){ event = window.event; } //cross browser issues exist
var code = event.keyCode;
if(curPos >= _maxSize && code != KEYCODE_BKSPACE && code != KEYCODE_LEFT && code != KEYCODE_ENTER)
{
soundPlay("beep"); //wrong key code
return false;
}
switch(true) {
case (code >= 48 && code <= 57): // 0 ~ 9
if(curPos == 0) { soundPlay("beep"); break; } //first char except numbers
inputText[curPos++] = String.fromCharCode(code);
break;
case (code >=65 && code <= 90): // A ~ Z
case (code >= 97 && code <= 122): //a ~ z
if( code > 90) code -= 32;
inputText[curPos++] = String.fromCharCode(code);
break;
case (code == KEYCODE_DOT): //'.'
if(curPos == 0) { soundPlay("beep"); break; } //first char except '.'
inputText[curPos++] = ".";
break;
case (code == KEYCODE_DASH || code == KEYCODE_HYPHEN || code == KEYCODE_SUBTRACT): //'-'
if(curPos == 0) { soundPlay("beep"); break; } //first char except '-'
inputText[curPos++] = "-";
break;
case (code == KEYCODE_SPACE): //space
if(curPos == 0) { soundPlay("beep"); break; } //first char except space
inputText[curPos++] = " ";
break;
case (code == KEYCODE_BKSPACE): //backspace
if(curPos == 0) break;
inputText.splice(--curPos, 1);
break;
case (code == KEYCODE_LEFT): //LEFT
if(curPos > 0) curPos--;
break;
case (code == KEYCODE_RIGHT): //RIGHT
if(curPos < inputText.length) curPos++;
break;
case (code == KEYCODE_ENTER): //ENTER
if(inputText.length > 0) {
inputFinish();
return true;
} else soundPlay("beep");
break;
default:
//debug(code);
if(code > 32) soundPlay("beep"); //wrong key code
break;
}
drawString();
return false;
}
function inputFinish()
{
//cut tail space
for(var i = inputText.length-1; i >= 0; i--) {
if(inputText[i] == " ") inputText.splice(i,1);
else break;
}
restoreKeyDownHandler();
//remove cursor
clearStringObj();
_stage.removeChild(cursor);
_stage.update();
_callbackFun(inputText.join(""));
}
}
+22 -7
Voir le fichier
@@ -13,31 +13,44 @@
* *
* 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
* *
* by Simon Hung 06/20/2014, 11/23/2014 (http://simonsays-tw.com) * by Simon Hung 06/20/2014, 11/23/2014, 06/29/2015 (http://simonsays-tw.com)
* ============================================================================= * =============================================================================
--> -->
<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">
<meta name="description" content="An HTML5 remake game, include Lode Runner & Championship Lode Runner">
<link href="lodeRunner.ico" rel="shortcut icon" > <link href="lodeRunner.ico" rel="shortcut icon" >
<style>#canvas { position:absolute; left:0; top:0; }</style> <style>#canvas { position:absolute; left:0; top:0; }</style>
<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.0.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.0.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.0.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="lodeRunner.baseLevel.js"></script> <script type="text/javascript" src="flag32Id.js"></script>
<script type="text/javascript" src="lodeRunner.champLevel.js"></script> <script type="text/javascript" src="lodeRunner.gameVerName.js"></script>
<script type="text/javascript" src="lodeRunner.v.classic.js"></script>
<script type="text/javascript" src="lodeRunner.v.professional.js"></script>
<script type="text/javascript" src="lodeRunner.v.revenge.js"></script>
<script type="text/javascript" src="lodeRunner.v.fanBookMod.js"></script>
<script type="text/javascript" src="lodeRunner.v.championship.js"></script>
<script type="text/javascript" src="lodeRunner.storage.js"></script> <script type="text/javascript" src="lodeRunner.storage.js"></script>
<script type="text/javascript" src="lodeRunner.def.js"></script> <script type="text/javascript" src="lodeRunner.def.js"></script>
<script type="text/javascript" src="lodeRunner.key.js"></script> <script type="text/javascript" src="lodeRunner.key.js"></script>
<script type="text/javascript" src="lodeRunner.misc.js"></script> <script type="text/javascript" src="lodeRunner.misc.js"></script>
<script type="text/javascript" src="lodeRunner.hiscore.js"></script> <script type="text/javascript" src="lodeRunner.hiscore.js"></script>
<script type="text/javascript" src="lodeRunner.info.js"></script>
<script type="text/javascript" src="lodeRunner.menu.js"></script> <script type="text/javascript" src="lodeRunner.menu.js"></script>
<script type="text/javascript" src="lodeRunner.iconClass.js"></script>
<script type="text/javascript" src="lodeRunner.runner.js"></script> <script type="text/javascript" src="lodeRunner.runner.js"></script>
<script type="text/javascript" src="lodeRunner.guard.js"></script> <script type="text/javascript" src="lodeRunner.guard.js"></script>
<script type="text/javascript" src="lodeRunner.demo.js"></script> <script type="text/javascript" src="lodeRunner.demo.js"></script>
@@ -45,10 +58,12 @@
<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.main.js"></script> <script type="text/javascript" src="lodeRunner.main.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">
<canvas id="canvas" width="960" height="400"></canvas> <canvas id="canvas" width="960" height="400"></canvas>
</div> </div>
</body> </body>
</html> </html>
+1499
Voir le fichier
Fichier diff supprimé car celui-ci est trop grand Voir la Diff
+493
Voir le fichier
@@ -0,0 +1,493 @@
var classicInfo = [
{type: 'TITLE', contain: " Classic Lode Runner " },
{type: 'TEXT' , contain: "Release year : 1983, 1984"},
{type: 'TEXT' , contain: "Platform : APPLE-II, Commodore 64, IBM PC, NES ..."},
{type: 'TEXT' , contain: "Publisher : Br\u00F8derbund & Ariolasoft" }, //Brøderbund
{type: 'TEXT' , contain: "Developer : Douglas E. Smith" },
{type: 'TEXT' , contain: "Difficulty : \u2605 \u2605 \u2605" } //★ ★ ★
];
//ref: http://www.gb64.com/game.php?id=5906&d=42
var proInfo = [
{type: 'TITLE', contain: " Professional Lode Runner " },
{type: 'TEXT' , contain: "Release year : 1984, 1985"},
{type: 'TEXT' , contain: "Platform : Commodore 64"},
{type: 'TEXT' , contain: "Publisher : DodoSoft & AlphaSoft" },
{type: 'TEXT' , contain: "Developer : Unknown" },
{type: 'TEXT' , contain: "Difficulty : \u2605 \u2605 \u2605 \u2605" } //★ ★ ★ ★
];
//ref:http://www.vizzed.com/play/revenge-of-lode-runner-appleii-online-apple-ii-6223-game
var revengeInfo = [
{type: 'TITLE', contain: " Revenge of Lode Runner " },
{type: 'TEXT' , contain: "Release year : 1985, 1986"},
{type: 'TEXT' , contain: "Platform : APPLE-II"},
{type: 'TEXT' , contain: "Publisher : Br\u00F8derbund" }, //Brøderbund
{type: 'TEXT' , contain: "Developer : Mad Man" },
{type: 'TEXT' , contain: "Difficulty : \u2605 \u2605 \u2605 \u2605" } //★ ★ ★ ★
];
var fanBookInfo = [
{type: 'TITLE', contain: " Lode Runner Fan Book " },
{type: 'TEXT' , contain: 'From : "Apple Lode Runner - The Remake 1.0h"'},
{type: 'TEXT' , contain: "Platform : Microsoft Windows"},
{type: 'TEXT' , contain: "Publisher : Spoonbill Software" },
{type: 'TEXT' , contain: 'Developer : Custom levels'},
{type: 'TEXT_LINK' , text: "URL : ",
textLink: "http://www.spoonbillsoftware.com.au/loderunner.htm",
url: "http://www.spoonbillsoftware.com.au/loderunner.htm"
},
{type: 'TEXT' , contain: "Difficulty : \u2605 \u2605 \u2605 \u2605 \u2605" } //★ ★ ★ ★ ★
];
var championInfo = [
{type: 'TITLE', contain: " Championship Lode Runner " },
{type: 'TEXT' , contain: "Release year : 1984, 1985"},
{type: 'TEXT' , contain: "Platform : APPLE-II, Commodore 64, NES ..."},
{type: 'TEXT' , contain: "Publisher : Br\u00F8derbund & Hudson Soft" }, //Brøderbund
{type: 'TEXT' , contain: "Developer : Douglas E. Smith" },
{type: 'TEXT' , contain: "Difficulty : \u2605 \u2605 \u2605 \u2605 \u2605" } //★ ★ ★ ★ ★
];
//=========================================================================================
var editInfo = [
{type: 'TITLE', contain: "Edit Custom Level"},
{type: 'TEXT' , contain: "NEW : New or clear editing level"},
{type: 'TEXT' , contain: "LOAD : Load exists level for customization"},
{type: 'TEXT' , contain: "TEST : Test editing level" },
{type: 'TEXT' , contain: "SAVE : Save current level" }
];
var testInfo = [
{type: 'TITLE', contain: "Test Custom Level"},
{type: 'TEXT' , contain: "If test success, players can save it. "}
];
var customInfo = [
{type: 'TITLE', contain: "Custom Levels"},
{type: 'TEXT' , contain: "Players can create new levels or edit exists levels."}
];
var demoHelp = [
{type: 'TITLE', contain: " Demo Mode "},
{type: 'TEXT' , contain: " Demo data collected from players," },
{type: 'TEXT' , contain: " Only demo the fastest passed levels or" },
{type: 'TEXT' , contain: "Recently passed levels of current player." }
];
function createDemoInfo()
{
var titleName = playDataToTitleName(playData);
var player = playerDemoData[curLevel-1].player;
if(player == "") player = "Unknown";
var demoInfo = [
{type: 'TITLE', contain: " " + playDataToTitleName(playData)+ " " },
{type: 'TEXT' , contain: "Demo level : " + curLevel},
{type: 'TEXT' , contain: "Player : " + player },
{type: 'TEXT_flagID_MSG' , text: "Location : ",
flagId: playerDemoData[curLevel-1].cId.toLowerCase(),
msg: " " + playerDemoData[curLevel-1].location
},
{type: 'TEXT' , contain: "Date : " + playerDemoData[curLevel-1].date+ " (" + playerDemoData[curLevel-1].ai+")" }
];
return demoInfo;
}
function infoMenu(callbackFun, args)
{
var infoMsg = null;
switch(playMode) {
case PLAY_CLASSIC:
case PLAY_MODERN:
if(playData == PLAY_DATA_USERDEF) {
infoMsg = customInfo;
} else {
infoMsg = getPlayVerInfo(playData);
}
break;
case PLAY_DEMO:
case PLAY_DEMO_ONCE:
infoMsg = createDemoInfo();
break;
case PLAY_EDIT:
infoMsg = editInfo;
break;
case PLAY_TEST:
infoMsg = testInfo;
break;
}
if(infoMsg) infoObj.showInfo(infoMsg, callbackFun, args);
else {
if(callbackFun) callbackFun(args);
error(arguments.callee.name, "Error: playMode = " + playMode);
}
}
function infoMenuClass(_stage, _scale)
{
var coverBackground, closeIcon;
var infoBorder, infoBackground;
var infoObj = [];
var INFO_BORDER_SIZE = 24 * _scale;
var INFO_BORDER_HALF = INFO_BORDER_SIZE / 2;
var TITLE_TEXT_SIZE = 40 * _scale;
var TITLE_TEXT_COLOR = "white";
var TITLE_TEXT_SHADOW_COLOR = "#FF0";
var ITEM_TEXT_SIZE = 32 * _scale;
var ITEM_TEXT_COLOR = "yellow";
var FLAG_SCALE = _scale * 5/4;
var FLAG_MSG_SIZE = 28 * _scale;
var FLAG_MSG_COLOR = "white";
var TOP_BORDER_SIZE = TITLE_TEXT_SIZE/2 | 0;
var BOTTOM_BORDER_SIZE = ITEM_TEXT_SIZE/ 2 | 0;
var BORDER_WIDTH = ITEM_TEXT_SIZE;
var CLOSE_BOX_SIZE = 12 * _scale + 2;
var menuX, menuY, startX, startY;
var callBackFun, callBackArgs;
var saveStateObj;
this.showInfo = function(info, callback, args)
{
if(typeof args == "undefined") args = null;
callBackFun = callback;
callBackArgs = args;
closeIcon = null;
initInfo(info);
drawBackground();
drawInfoBackground();
drawInfo();
drawCloseIcon(0);
_stage.update();
saveStateObj = saveKeyHandler(InfoKeyDown);
}
function initInfo(infoList)
{
var textLength;
var maxTextWidth =0;
infoObj = [];
menuX = menuY = 0;
for(var i = 0; i < infoList.length; i++) {
switch( infoList[i].type) {
case 'TITLE':
infoObj[i] = {};
infoObj[i].type = 'TITLE';
infoObj[i].text = new createjs.Text(infoList[i].contain,
"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].width = infoObj[i].text.getBounds().width;
infoObj[i].height = infoObj[i].text.getBounds().height;
menuY += (infoObj[i].height * 3/2|0);
break;
case 'TEXT':
infoObj[i] = {};
infoObj[i].type = 'TEXT';
infoObj[i].text = new createjs.Text(infoList[i].contain,
"bold " + ITEM_TEXT_SIZE + "px Helvetica",ITEM_TEXT_COLOR);
infoObj[i].width = infoObj[i].text.getBounds().width;
infoObj[i].height = infoObj[i].text.getBounds().height;
menuY += (infoObj[i].height * 3/2|0);
break;
case 'TEXT_flagID_MSG':
infoObj[i] = {};
infoObj[i].type = 'TEXT_flagID_MSG';
infoObj[i].text = new createjs.Text(infoList[i].text,
"bold " + ITEM_TEXT_SIZE + "px Helvetica", ITEM_TEXT_COLOR);
infoObj[i].textWidth = infoObj[i].text.getBounds().width;
infoObj[i].textHeight = infoObj[i].text.getBounds().height;
if(infoList[i].flagId in countryId) {
infoObj[i].flag = new createjs.Sprite(countryFlagData, infoList[i].flagId);
} else {
infoObj[i].flag = new createjs.Sprite(countryFlagData, "unknown");
}
infoObj[i].flag.setTransform(0, 0, FLAG_SCALE, FLAG_SCALE);
infoObj[i].flagWidth = infoObj[i].flag.getTransformedBounds().width;
infoObj[i].flagHeight = infoObj[i].flag.getTransformedBounds().height;
infoObj[i].msg = new createjs.Text(infoList[i].msg,
"bold " + FLAG_MSG_SIZE + "px Helvetica", FLAG_MSG_COLOR);
infoObj[i].msg.set({alpha:0});
infoObj[i].msgWidth = infoObj[i].msg.getBounds().width;
infoObj[i].msgHeight = infoObj[i].msg.getBounds().height;
infoObj[i].flag.msgObj = infoObj[i].msg;
infoObj[i].flag.on('mouseover',function(evt) {
this.msgObj.set({alpha:1});
_stage.update();
});
infoObj[i].flag.on('mouseout', function(evt){
this.msgObj.set({alpha:0});
_stage.update();
});
infoObj[i].width = infoObj[i].textWidth + infoObj[i].flagWidth + infoObj[i].msgWidth;
menuY += (infoObj[i].textHeight * 3/2|0);
break;
case 'TEXT_LINK':
infoObj[i] = {};
infoObj[i].type = 'TEXT_LINK';
infoObj[i].text = new createjs.Text(infoList[i].text,
"bold " + ITEM_TEXT_SIZE + "px Helvetica", ITEM_TEXT_COLOR);
infoObj[i].textWidth = infoObj[i].text.getBounds().width;
infoObj[i].textHeight = infoObj[i].text.getBounds().height;
infoObj[i].textLink = new createjs.Text(infoList[i].textLink,
"bold " + ITEM_TEXT_SIZE + "px Helvetica", ITEM_TEXT_COLOR);
infoObj[i].texLinktWidth = infoObj[i].textLink.getBounds().width;
infoObj[i].texLinktHeight = infoObj[i].textLink.getBounds().height;
infoObj[i].textLink.url = infoList[i].url;
infoObj[i].textLink.on('mouseover',function(evt) {
_stage.cursor = "pointer";
_stage.update();
});
infoObj[i].textLink.on('mouseout', function(evt){
_stage.cursor = "default";
_stage.update();
});
infoObj[i].textLink.on('click', function(evt){
window.open(this.url).focus();
_stage.cursor = "default";
_stage.update();
});
infoObj[i].width = infoObj[i].textWidth + infoObj[i].texLinktWidth;
menuY += (infoObj[i].textHeight * 3/2|0);
break;
default:
error(arguments.callee.name, "Error: type don't support, type = " + infoList[i].type);
continue;
}
if(maxTextWidth < infoObj[i].width) maxTextWidth = infoObj[i].width;
}
menuX = maxTextWidth + BORDER_WIDTH * 2;
menuY += (TOP_BORDER_SIZE + BOTTOM_BORDER_SIZE);
startX = (_stage.canvas.width-menuX)/2|0;
startY = (_stage.canvas.height-menuY)/2|0;
if(startX < 0) startX = 0;
if(startY < 0) startY = 0;
}
function drawBackground()
{
coverBackground = new createjs.Shape();
coverBackground.graphics.beginFill("black").drawRect(0, 0, _stage.canvas.width, _stage.canvas.height).endFill();
coverBackground.alpha = 0.3;
_stage.addChild(coverBackground);
}
function removeBackground()
{
_stage.removeChild(coverBackground);
}
function drawInfoBackground()
{
infoBorder = new createjs.Shape();
infoBackground = new createjs.Shape();
infoBorder.alpha = 0.8;
infoBorder.graphics.beginFill("#FF0")
.drawRoundRect(startX-INFO_BORDER_HALF, startY-INFO_BORDER_HALF, menuX+INFO_BORDER_SIZE, menuY+INFO_BORDER_SIZE, INFO_BORDER_HALF).endFill();
infoBackground.alpha = 0.6;
infoBackground.graphics.beginFill("#190218")
.drawRoundRect(startX, startY, menuX, menuY, INFO_BORDER_HALF/2).endFill();
_stage.addChild(infoBorder);
_stage.addChild(infoBackground);
}
function removeInfoBackground()
{
_stage.removeChild(infoBackground);
_stage.removeChild(infoBorder);
}
function drawInfo()
{
var tmpY = startY;
for(var i = 0; i < infoObj.length; i++) {
switch( infoObj[i].type) {
case 'TITLE':
tmpY += (infoObj[i].height/2|0);
infoObj[i].text.x = startX + (menuX - infoObj[i].width)/2|0;
infoObj[i].text.y = tmpY;
tmpY += infoObj[i].height *3/2|0;
_stage.addChild(infoObj[i].text);
break;
case 'TEXT':
infoObj[i].text.x = startX + BORDER_WIDTH;
infoObj[i].text.y = tmpY;
tmpY += infoObj[i].height *3/2|0;
_stage.addChild(infoObj[i].text);
break;
case 'TEXT_flagID_MSG':
infoObj[i].text.x = startX + BORDER_WIDTH;
infoObj[i].text.y = tmpY;
infoObj[i].flag.x = startX + BORDER_WIDTH + infoObj[i].textWidth;
infoObj[i].flag.y = tmpY+ (infoObj[i].textHeight - infoObj[i].flagHeight)/3;
infoObj[i].msg.x = startX + BORDER_WIDTH + infoObj[i].textWidth + infoObj[i].flagWidth;
infoObj[i].msg.y = tmpY+ (infoObj[i].textHeight - infoObj[i].msgHeight);
tmpY += infoObj[i].textHeight *3/2|0;
_stage.addChild(infoObj[i].text);
_stage.addChild(infoObj[i].flag);
_stage.addChild(infoObj[i].msg);
break;
case 'TEXT_LINK':
infoObj[i].text.x = startX + BORDER_WIDTH;
infoObj[i].text.y = tmpY;
infoObj[i].textLink.x = startX + BORDER_WIDTH + infoObj[i].textWidth;
infoObj[i].textLink.y = tmpY;
tmpY += infoObj[i].textHeight *3/2|0;
_stage.addChild(infoObj[i].text);
_stage.addChild(infoObj[i].textLink);
break;
default:
error(arguments.callee.name, "Error: type don't support, type = " + infoObj[i].type);
continue;
}
}
}
function removeInfo()
{
for(var i = 0; i < infoObj.length; i++) {
switch(infoObj[i].type) {
case 'TITLE':
case 'TEXT':
_stage.removeChild(infoObj[i].text);
break;
case 'TEXT_flagID_MSG':
_stage.removeChild(infoObj[i].text);
_stage.removeChild(infoObj[i].flag);
break;
case 'TEXT_LINK':
_stage.removeChild(infoObj[i].text);
_stage.removeChild(infoObj[i].textLink);
break;
default:
error(arguments.callee.name, "Error: type don't support, type = " + infoObj[i].type);
continue;
}
}
}
function InfoKeyDown(event)
{
if(!event){ event = window.event; } //cross browser issues exist
if(event.keyCode == KEYCODE_ESC) {
closeInfoMenu();
}
return false;
}
function drawCloseIcon(mouseOver)
{
var cycle, cross;
var alpha, cycColor, crosColor;
if(closeIcon == null) {
closeIcon = new createjs.Container();
cross = new createjs.Shape();
cycle = new createjs.Shape();
closeIcon.addChild(cycle, cross);
closeIcon.on("mouseover", handleMouseOver);
closeIcon.on("mouseout", handleMouseOut);
closeIcon.on("click", closeInfoMenu);
closeIcon.x = startX+menuX - CLOSE_BOX_SIZE*3;
closeIcon.y = startY + CLOSE_BOX_SIZE*2;
_stage.enableMouseOver(30);
_stage.addChild(closeIcon);
} else {
cycle = closeIcon.getChildAt(0);
cross = closeIcon.getChildAt(1);
}
if(mouseOver) {
alpha = 0.6;
cycColor = "red";
crosColor = "white";
} else {
alpha = 0.01;
cycColor = "gold";
crosColor = "white";
}
var g = cycle.graphics;
g.clear();
cycle.alpha = alpha;
g.beginFill(cycColor).dc(CLOSE_BOX_SIZE/2, CLOSE_BOX_SIZE/2, CLOSE_BOX_SIZE*5/4);
g = cross.graphics;
g.clear();
//cross.alpha = 1;
g.setStrokeStyle(CLOSE_BOX_SIZE/4).beginStroke(crosColor).moveTo(0,0)
.lineTo(CLOSE_BOX_SIZE,CLOSE_BOX_SIZE).closePath();
g.moveTo(CLOSE_BOX_SIZE,0).lineTo(0,CLOSE_BOX_SIZE).closePath();
_stage.update();
}
function removeCloseIcon()
{
_stage.removeChild(closeIcon);
}
function handleMouseOver(event)
{
_stage.cursor = 'pointer';
drawCloseIcon(1);
}
function handleMouseOut(event)
{
_stage.cursor = 'default';
drawCloseIcon(0);
}
function closeInfoMenu()
{
removeCloseIcon();
removeInfo();
removeInfoBackground();
removeBackground();
_stage.cursor = 'default';
_stage.update();
_stage.enableMouseOver(0);
restoreKeyHandler(saveStateObj);
//add setTimeout just don't cause mouse event (click) cascade!
if(callBackFun) setTimeout(function() { callBackFun(callBackArgs);}, 10);
}
}
+51 -11
Voir le fichier
@@ -4,6 +4,7 @@ var runnerDebug = 0;
function pressShiftKey(code) function pressShiftKey(code)
{ {
/* cheat key code disable 5/16/2015
switch(code) { switch(code) {
case KEYCODE_PERIOD: //SHIFT-. = '>', change to next level case KEYCODE_PERIOD: //SHIFT-. = '>', change to next level
shiftLevelNum = 1; shiftLevelNum = 1;
@@ -29,6 +30,7 @@ function pressShiftKey(code)
if(runnerDebug) debugKeyPress(code); if(runnerDebug) debugKeyPress(code);
break; break;
} }
*/
} }
function pressCtrlKey(code) function pressCtrlKey(code)
@@ -39,20 +41,32 @@ function pressCtrlKey(code)
break; break;
case KEYCODE_C: //CTRL-C : copy current level case KEYCODE_C: //CTRL-C : copy current level
copyLevelMap = levelData[curLevel-1]; copyLevelMap = levelData[curLevel-1];
showTipsText("COPY MAP", 0); copyLevelPassed = 1; //means copy from exists level
showTipsText("COPY MAP", 1500);
break;
case KEYCODE_K: //CTRL-K : repeat actions On/Off
toggleRepeatAction();
repeatActionIconObj.updateRepeatActionImage();
break; break;
case KEYCODE_R: //CTRL-R : abort game case KEYCODE_R: //CTRL-R : abort game
runnerLife = 1; runnerLife = 1;
gameState = GAME_RUNNER_DEAD; gameState = GAME_RUNNER_DEAD;
break; break;
case KEYCODE_X: //CTRL-X
toggleTrapTile();
break;
// case KEYCODE_Z: //CTRL-Z, toggle god mode
// toggleGodMode();
// break;
case KEYCODE_S: //CTRL-S, toggle sound case KEYCODE_S: //CTRL-S, toggle sound
if( (soundOff ^= 1) == 1) { if( (soundOff ^= 1) == 1) {
soundDig.stop(); soundStop(soundDig);
soundFall.stop(); soundStop(soundFall);
showTipsText("SOUND OFF", 0); showTipsText("SOUND OFF", 1500);
} else { } else {
showTipsText("SOUND ON", 0); showTipsText("SOUND ON", 1500);
} }
soundIconObj.updateSoundImage(); //toggle sound On/Off icon
break; break;
case KEYCODE_LEFT: //SHIFT + <- : speed down case KEYCODE_LEFT: //SHIFT + <- : speed down
setSpeed(-1); setSpeed(-1);
@@ -101,23 +115,42 @@ function debugKeyPress(code)
} }
} }
var repeatAction = 0; //1: keyboard repeat on, 0: keyboard repeat Off
var repeatActionPressed = 0;
var godMode = 0, godModeKeyPressed = 0; var godMode = 0, godModeKeyPressed = 0;
function initHotKeyVariable() function initHotKeyVariable()
{ {
godMode = 0; godMode = 0;
godModeKeyPressed = 0; godModeKeyPressed = 0;
repeatActionPressed = 0;
}
function toggleRepeatAction()
{
if( (repeatAction ^= 1) == 1) {
//showTipsText("REPEAT ACTIONS ON", 0, "APPLE-II MODE");
showTipsText("REPEAT ACTIONS ON", 2500);
} else {
//showTipsText("REPEAT ACTIONS OFF", 0, "NES MODE");
showTipsText("REPEAT ACTIONS OFF", 2500);
}
if(gameState != GAME_START) repeatActionPressed=1; //player change the "repeatAction" Mode at running
setRepeatAction();
} }
function toggleGodMode() function toggleGodMode()
{ {
godModeKeyPressed = 1; //means player press the god-mod hot-key godModeKeyPressed = 1; //means player press the god-mod hot-key
sometimePlayInGodMode = 1; // 12/23/2014
godMode ^= 1; godMode ^= 1;
if(godMode) { if(godMode) {
showTipsText("GOD MODE ON", 0); showTipsText("GOD MODE ON", 1500);
} else { } else {
showTipsText("GOD MODE OFF", 0); showTipsText("GOD MODE OFF", 1500);
} }
} }
@@ -127,7 +160,7 @@ function setSpeed(v)
if(speed < 0) speed = 0; if(speed < 0) speed = 0;
if(speed >= speedMode.length) speed = speedMode.length-1; if(speed >= speedMode.length) speed = speedMode.length-1;
createjs.Ticker.setFPS(speedMode[speed]); createjs.Ticker.setFPS(speedMode[speed]);
showTipsText(speedText[speed], 0); showTipsText(speedText[speed], 1500);
} }
function helpCallBack() //help complete call back function helpCallBack() //help complete call back
@@ -165,10 +198,10 @@ function pressKey(code)
case KEYCODE_ESC: //help & pause case KEYCODE_ESC: //help & pause
if(gameState == GAME_PAUSE) { if(gameState == GAME_PAUSE) {
gameResume(); gameResume();
showTipsText("", 0); //clear text showTipsText("", 1000); //clear text
} else { } else {
gamePause(); gamePause();
showTipsText("PAUSE", 1); //display "PAUSE" showTipsText("PAUSE", 0); //display "PAUSE"
//helpObj.showHelp(helpCallBack); //helpObj.showHelp(helpCallBack);
} }
break; break;
@@ -176,7 +209,7 @@ function pressKey(code)
if(playMode == PLAY_CLASSIC) { if(playMode == PLAY_CLASSIC) {
menuIconDisable(1); menuIconDisable(1);
gamePause(); gamePause();
showScoreTable(playData-1, null, function() { menuIconEnable(); gameResume();}); showScoreTable(playData, null, function() { menuIconEnable(); gameResume();});
} else { } else {
keyAction = ACT_UNKNOWN; keyAction = ACT_UNKNOWN;
} }
@@ -243,3 +276,10 @@ function handleKeyDown(event)
} }
function handleKeyUp(event)
{
if(repeatAction) return true;
if(!event){ event = window.event; }
if(recordKeyCode == event.keyCode && keyPressed != -1) keyPressed = 0;
return true;
}
+385 -151
Voir le fichier
Fichier diff supprimé car celui-ci est trop grand Voir la Diff
+351 -485
Voir le fichier
Fichier diff supprimé car celui-ci est trop grand Voir la Diff
+102 -34
Voir le fichier
@@ -3,13 +3,20 @@
//============ //============
var DEBUG = 0; var DEBUG = 0;
var demoSoundOff = 1; var demoSoundOff = 1;
function debug(string) {
function debug(string)
{
if(DEBUG) console.log(string); if(DEBUG) console.log(string);
} }
function assert(expression, msg) function assert(expression, msg)
{ {
if(DEBUG) console.assert(expression, msg); console.assert(expression, msg);
}
function error(funName, string)
{
console.log("Error In " + funName + "( ): " + string);
} }
function getScreenSize() function getScreenSize()
@@ -37,36 +44,10 @@ function getScreenSize()
return {x:x, y:y}; return {x:x, y:y};
} }
//==============================
// Too many user created Levels
//==============================
var editWarningText = null;
function editWarningMsg(hidden)
{
var x, y, width, height;
if(editWarningText == null)
editWarningText = new createjs.Text("Too many user created levels !",
"bold " + (64*tileScale) + "px Helvetica", "#fc5c1c");
width = editWarningText.getBounds().width;
height = editWarningText.getBounds().height;
x = editWarningText.x = (NO_OF_TILES_X*(tileW+EDIT_PADDING) - width) / 2 | 0;
y = editWarningText.y = (NO_OF_TILES_Y*tileH - height) / 2 | 0;
editWarningText.shadow = new createjs.Shadow("white", 2, 2, 1);
if(hidden) {
mainStage.removeChild(editWarningText);
} else {
mainStage.addChild(editWarningText);
}
mainStage.update();
}
//================================ //================================
// show tips messgae // show tips messgae
//=============================== //===============================
function showTipsMsg(_tipsTxt, _stage, _scale) function showTipsMsg(_tipsTxt, _stage, _scale, _tipsTxt1)
{ {
var TEXT_SIZE = 72* _scale; var TEXT_SIZE = 72* _scale;
var TEXT_COLOR = "#ff2020"; var TEXT_COLOR = "#ff2020";
@@ -81,8 +62,24 @@ function showTipsMsg(_tipsTxt, _stage, _scale)
_stage.addChild(tipsText); _stage.addChild(tipsText);
createjs.Tween.get(tipsText).set({alpha:1}).wait(50).to({scaleX:1.2, scaleY:1.2, alpha:0}, 2000) createjs.Tween.get(tipsText).set({alpha:1}).wait(50).to({scaleX:1.2, scaleY:1.2, alpha:0}, 3500)
.call(function(){_stage.removeChild(tipsText);}); .call(function(){_stage.removeChild(tipsText);});
if(_tipsTxt1 != null) {
// two tips
var tipsText1 = new createjs.Text(_tipsTxt1, "bold " + TEXT_SIZE + "px Helvetica", TEXT_COLOR);
tipsText1.x = (screenX1) / 2 | 0;
tipsText1.y = screenY1/2 | 0;
tipsText1.shadow = new createjs.Shadow("white", 3, 3, 2);
tipsText1.textAlign = "center";
_stage.addChild(tipsText1);
createjs.Tween.get(tipsText1).set({alpha:1}).wait(50).to({scaleX:1.2, scaleY:1.2, alpha:0}, 3500)
.call(function(){_stage.removeChild(tipsText1);});
}
} }
//========================================== //==========================================
@@ -97,9 +94,22 @@ function moveChild2Top(stage, obj)
// BEGIN for Sound function // BEGIN for Sound function
//========================== //==========================
var soundOff = 0; var soundOff = 0;
function themeSoundPlay(name)
{
soundPlay(name + curTheme);
}
function soundDisable()
{
if(playMode == PLAY_AUTO) return 1;
if(playMode == PLAY_DEMO || playMode == PLAY_DEMO_ONCE) return demoSoundOff;
else return soundOff;
}
function soundPlay(name) function soundPlay(name)
{ {
if(soundOff || playMode == PLAY_AUTO || (playMode == PLAY_DEMO && demoSoundOff)) return; if(soundDisable()) return;
if(typeof name == "string") { if(typeof name == "string") {
return createjs.Sound.play(name); return createjs.Sound.play(name);
@@ -111,7 +121,7 @@ function soundPlay(name)
function soundStop(name) function soundStop(name)
{ {
if(soundOff || playMode == PLAY_AUTO || (playMode == PLAY_DEMO && demoSoundOff)) return; //if(soundDisable()) return;
if(typeof name == "string") { if(typeof name == "string") {
return createjs.Sound.stop(name); return createjs.Sound.stop(name);
@@ -122,7 +132,7 @@ function soundStop(name)
function soundPause(name) function soundPause(name)
{ {
if(soundOff || playMode == PLAY_AUTO || (playMode == PLAY_DEMO && demoSoundOff)) return; if(soundDisable()) return;
if(typeof name == "string") { if(typeof name == "string") {
return createjs.Sound.pause(name); return createjs.Sound.pause(name);
@@ -133,7 +143,7 @@ function soundPause(name)
function soundResume(name) function soundResume(name)
{ {
if(soundOff || playMode == PLAY_AUTO || (playMode == PLAY_DEMO && demoSoundOff)) return; if(soundDisable()) return;
if(typeof name == "string") { if(typeof name == "string") {
return createjs.Sound.resume(name); return createjs.Sound.resume(name);
@@ -142,6 +152,36 @@ function soundResume(name)
} }
} }
//==============================
// get time zone for php format
//==============================
function phpTimeZone()
{
var d = new Date()
var n = d.getTimezoneOffset();
var n1 = Math.abs(n);
//------------------------------------------------------------------------------------
// AJAX POST and Plus Sign ( + ) — How to Encode:
// Use encodeURIComponent() in JS and in PHP you should receive the correct values.
// http://stackoverflow.com/questions/1373414/ajax-post-and-plus-sign-how-to-encode
//------------------------------------------------------------------------------------
//+0:00, +1:00, +8:00, -8:00 ....
return ((n <=0)?encodeURIComponent("+"):"-")+ (n1/60|0) + ":" + ("0"+n1%60).slice(-2);
}
//========================================
// get local time (YYYY-MM-DD HH:MM:SS)
//========================================
function getLocalTime()
{
var d = new Date();
return (("000"+d.getFullYear()).slice(-4)+ "-" +("0"+(d.getMonth() + 1)).slice(-2)+ "-" +("0"+d.getDate()).slice(-2)+ " " +
("0"+d.getHours()).slice(-2) + ":" + ("0"+d.getMinutes()).slice(-2) + ":" + ("0"+d.getSeconds()).slice(-2));
}
//=============== //===============
// Random Object // Random Object
//=============== //===============
@@ -211,3 +251,31 @@ function rangeRandom(minValue, maxValue, seedValue)
rndStart(); rndStart();
} }
//======================================
// get demo data by playData (wData.js)
//======================================
function getDemoData(playData)
{
wDemoData = [];
switch(playData) {
case 1:
if( typeof wfastDemoData1 !== "undefined" ) wDemoData = wfastDemoData1;
break;
case 2:
if( typeof wfastDemoData2 !== "undefined" ) wDemoData = wfastDemoData2;
break;
case 3:
if( typeof wfastDemoData3 !== "undefined" ) wDemoData = wfastDemoData3;
break;
case 4:
if( typeof wfastDemoData4 !== "undefined" ) wDemoData = wfastDemoData4;
break;
case 5:
if( typeof wfastDemoData5 !== "undefined" ) wDemoData = wfastDemoData5;
break;
}
for(var i = 0; i < wDemoData.length; i++) { //temp
playerDemoData[wDemoData[i].level-1] = wDemoData[i];
}
}
+208 -59
Voir le fichier
@@ -6,17 +6,26 @@ var GUARD_SPEED = 0.3;
var FLASH_SPEED = 0.25; //for flash cursor (hi-score input mode) var FLASH_SPEED = 0.25; //for flash cursor (hi-score input mode)
var COVER_PROGRESS_BAR_H = 32; var COVER_PROGRESS_BAR_H = 32;
var COVER_PROGRESS_UNDER_Y = 116; var COVER_PROGRESS_UNDER_Y = 90;
var COVER_RUNNER_UNDER_Y = 164; var COVER_RUNNER_UNDER_Y = 136;
var COVER_SIDE_X = 56; var COVER_SIDE_X = 56;
var SIGNET_UNDER_X = 30;
var SIGNET_UNDER_Y = 30;
//********************* //*********************
// preload cover page // preload cover page
//********************* //*********************
var coverBitmap, remakeBitmap; var coverBitmap, remakeBitmap, signetBitmap;
var helpObj, helpBitmap, editHelpBitmap, demoHelpBitmap; var helpObj, helpBitmap, editHelpBitmap;
var mainMenuIconBitmap, mainMenuIconObj; var mainMenuIconBitmap, mainMenuIconObj;
var selectIconBitmap, selectIconObj; var selectIconBitmap, selectIconObj;
var demoIconBitmap, demoIconObj;
var soundOnIconBitmap, soundOffIconBitmap, soundIconObj;
var helpIconBitmap, helpIconObj;
var infoObj, infoIconBitmap, infoIconObj;
var repeatActionOnIconBitmap, repeatActionOffIconBitmap, repeatActionIconObj;
var apple2IconBitmap, C64IconBitmap, themeIconObj;
var checkBitmap; var checkBitmap;
var returnBitmap, select1Bitmap, nextBitmap; var returnBitmap, select1Bitmap, nextBitmap;
var yesBitmap, noBitmap; var yesBitmap, noBitmap;
@@ -26,7 +35,7 @@ function showLoadingPage()
{ {
var coverPageImages = [ var coverPageImages = [
{ src: "image/cover.png", id: "cover" }, { src: "image/cover.png", id: "cover" },
{ src: "image/runner.png", id: "runner" } { src: themeImagePath + THEME_APPLE2 + "/runner.png", id: "runner" }
]; ];
coverPageLoad = new createjs.LoadQueue(true); coverPageLoad = new createjs.LoadQueue(true);
@@ -108,9 +117,13 @@ var firstPlay = 0;
var runnerData, guardData; var runnerData, guardData;
var holeData, holeObj = {}; var holeData, holeObj = {};
var textData; var textData;
var countryFlagData;
var soundFall, soundDig, soundPass, soundEnding; var soundFall, soundDig, soundPass, soundEnding;
var themeImagePath = "image/Theme/";
var themeSoundPath = "sound/Theme/";
function preloadResource() function preloadResource()
{ {
var runnerSprite = new createjs.Sprite(runnerData, "runRight"); var runnerSprite = new createjs.Sprite(runnerData, "runRight");
@@ -120,29 +133,50 @@ function preloadResource()
var resource = [ var resource = [
{ src: "image/remake.png", id: "remake" }, { src: "image/remake.png", id: "remake" },
{ src: "image/signet.png", id: "signet" },
{ src: themeImagePath + THEME_APPLE2 + "/empty.png", id: "empty" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/brick.png", id: "brick" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/block.png", id: "solid" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/ladder.png", id: "ladder" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/rope.png", id: "rope" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/trap.png", id: "trapBrick" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/hladder.png", id: "hladder" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/gold.png", id: "gold" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/guard1.png", id: "guard1" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/runner1.png", id: "runner1" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/runner.png", id: "runner" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/guard.png", id: "guard" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/hole.png", id: "hole" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/ground.png", id: "ground" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/over.png", id: "over" + THEME_APPLE2 },
{ src: themeImagePath + THEME_APPLE2 + "/text.png", id: "text" + THEME_APPLE2 },
{ src: themeImagePath + THEME_C64 + "/empty.png", id: "empty" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/brick.png", id: "brick" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/block.png", id: "solid" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/ladder.png", id: "ladder" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/rope.png", id: "rope" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/trap.png", id: "trapBrick" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/hladder.png", id: "hladder" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/gold.png", id: "gold" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/guard1.png", id: "guard1" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/runner1.png", id: "runner1" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/runner.png", id: "runner" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/guard.png", id: "guard" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/hole.png", id: "hole" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/ground.png", id: "ground" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/over.png", id: "over" + THEME_C64 },
{ src: themeImagePath + THEME_C64 + "/text.png", id: "text" + THEME_C64 },
{ src: "image/empty.png", id: "empty" },
{ src: "image/brick.png", id: "brick" },
{ src: "image/block.png", id: "solid" },
{ src: "image/ladder.png", id: "ladder" },
{ src: "image/rope.png", id: "rope" },
{ src: "image/trap.png", id: "trapBrick" },
{ src: "image/hladder.png", id: "hladder" },
{ src: "image/gold.png", id: "gold" },
{ src: "image/guard1.png", id: "guard1" },
{ src: "image/runner1.png", id: "runner1" },
{ src: "image/eraser.png", id: "eraser" }, { src: "image/eraser.png", id: "eraser" },
{ src: "image/guard.png", id: "guard" },
{ src: "image/hole.png", id: "hole" },
{ src: "image/over.png", id: "over" },
{ src: "image/ground.png", id: "ground" },
{ src: "image/text.png", id: "text" },
{ src: "image/help.png", id: "help" }, { src: "image/help.png", id: "help" },
{ src: "image/editHelp.png",id: "editHelp" }, { src: "image/editHelp.png",id: "editHelp" },
{ src: "image/demoHelp.png",id: "demoHelp" }, //{ src: "image/demoHelp.png",id: "demoHelp" }, //replace by infoMenu, 5/14/2015
{ src: "image/menu.png", id: "menu" }, { src: "image/menu.png", id: "menu" },
{ src: "image/select.png", id: "select" }, { src: "image/select.png", id: "select" },
@@ -155,15 +189,46 @@ function preloadResource()
{ src: "image/yes.png", id: "yes" }, { src: "image/yes.png", id: "yes" },
{ src: "image/no.png", id: "no" }, { src: "image/no.png", id: "no" },
{ src: "image/demo.png",id: "demo" },
{ src: "sound/born.ogg", id:"reborn"}, { src: "image/soundOn.png", id: "soundOn" },
{ src: "sound/dead.ogg", id:"dead"}, { src: "image/soundOff.png", id: "soundOff" },
{ src: "sound/dig.ogg", id:"dig"},
{ src: "sound/getGold.ogg", id:"getGold"}, { src: "image/infoIcon.png", id: "infoIcon" },
{ src: "sound/fall.ogg", id:"fall"}, { src: "image/helpIcon.png", id: "helpIcon" },
{ src: "sound/down.ogg", id:"down"},
{ src: "sound/pass.ogg", id:"pass"}, { src: "image/repeatOn.png", id: "repeatOn" },
{ src: "sound/trap.ogg", id:"trap"}, { src: "image/repeatOff.png", id: "repeatOff" },
{ src: "image/apple2.png", id: "apple2" },
{ src: "image/commodore64.png",id: "C64" },
{ src: "image/flags32.png", id: "flag" },
{ src: themeSoundPath + THEME_APPLE2 + "/born.ogg", id:"reborn" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/dead.ogg", id:"dead" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/dig.ogg", id:"dig" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/getGold.ogg", id:"getGold" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/fall.ogg", id:"fall" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/down.ogg", id:"down" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/pass.ogg", id:"pass" + THEME_APPLE2},
{ src: themeSoundPath + THEME_APPLE2 + "/trap.ogg", id:"trap" + THEME_APPLE2},
{ src: themeSoundPath + THEME_C64 + "/born.ogg", id:"reborn" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/dead.ogg", id:"dead" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/dig.ogg", id:"dig" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/getGold.ogg", id:"getGold" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/fall.ogg", id:"fall" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/down.ogg", id:"down" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/pass.ogg", id:"pass" + THEME_C64},
{ src: themeSoundPath + THEME_C64 + "/trap.ogg", 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: "sound/goldFinish.ogg", id:"goldFinish"},
{ src: "sound/ending.ogg", id:"ending"}, { src: "sound/ending.ogg", id:"ending"},
@@ -228,12 +293,12 @@ function preloadResource()
{ {
percentTxt.text = "100%"; percentTxt.text = "100%";
mainStage.update(); mainStage.update();
createPreloadSpriteSheet(); //// createPreloadSpriteSheet();
createSoundInstance(); createSoundInstance();
setTimeout(clearLoadingInfo, 500); setTimeout(clearLoadingInfo, 500);
} }
/*
function createSoundInstance() function createSoundInstance()
{ {
soundFall = createjs.Sound.createInstance("fall"); soundFall = createjs.Sound.createInstance("fall");
@@ -243,16 +308,30 @@ function preloadResource()
soundEnding = createjs.Sound.createInstance("ending"); soundEnding = createjs.Sound.createInstance("ending");
} }
*/
function clearLoadingInfo() function clearLoadingInfo()
{ {
mainStage.removeChild(runnerSprite, progress, progressBorder, percentTxt); mainStage.removeChild(runnerSprite, progress, progressBorder, percentTxt);
showSignetBitmap();
mainStage.addChild(signetBitmap);
showRemakeBitmap(); showRemakeBitmap();
mainStage.addChild(remakeBitmap); mainStage.addChild(remakeBitmap);
mainStage.update(); mainStage.update();
} }
//create remake 2014 function showSignetBitmap()
{
var x, y;
signetBitmap = new createjs.Bitmap(preload.getResult("signet"));
x = (BASE_SCREEN_X - SIGNET_UNDER_X - signetBitmap.getBounds().width )* tileScale;
y = (BASE_SCREEN_Y - SIGNET_UNDER_Y - signetBitmap.getBounds().height)* tileScale;
signetBitmap.setTransform(x, y, tileScale, tileScale); //x,y, scaleX, scaleY
signetBitmap.set({alpha:0.8});
createjs.Tween.get(signetBitmap).set({alpha:0.8}).to({alpha:1}, 500);
}
//create remake image
function showRemakeBitmap() function showRemakeBitmap()
{ {
var x = 372 * tileScale; var x = 372 * tileScale;
@@ -260,17 +339,17 @@ function preloadResource()
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;
remakeBitmap.set({alpha:0}); remakeBitmap.set({alpha:0.6});
createjs.Tween.get(remakeBitmap).set({alpha:0}).to({alpha:1}, 500).call(preloadComplet); createjs.Tween.get(remakeBitmap).set({alpha:0.6}).to({alpha:1}, 800).call(preloadComplet);
} }
function createHelpObj() function createHelpObj()
{ {
helpBitmap = new createjs.Bitmap(preload.getResult("help")); helpBitmap = new createjs.Bitmap(preload.getResult("help"));
editHelpBitmap = new createjs.Bitmap(preload.getResult("editHelp")); editHelpBitmap = new createjs.Bitmap(preload.getResult("editHelp"));
demoHelpBitmap = new createjs.Bitmap(preload.getResult("demoHelp")); //demoHelpBitmap = new createjs.Bitmap(preload.getResult("demoHelp")); //replace by infoMenu, 5/14/2015
helpObj = new helpMenuClass(mainStage, helpBitmap, editHelpBitmap, demoHelpBitmap, tileScale); helpObj = new helpMenuClass(mainStage, helpBitmap, editHelpBitmap, tileScale);
} }
function createMenuBitmapIcon() function createMenuBitmapIcon()
@@ -281,6 +360,27 @@ function preloadResource()
selectIconBitmap = new createjs.Bitmap(preload.getResult("select")); selectIconBitmap = new createjs.Bitmap(preload.getResult("select"));
selectIconObj = new selectIconClass(screenX1, screenY1, tileScale, selectIconBitmap); selectIconObj = new selectIconClass(screenX1, screenY1, tileScale, selectIconBitmap);
demoIconBitmap = new createjs.Bitmap(preload.getResult("demo")); //04/18/2015
demoIconObj = new demoIconClass(screenX1, screenY1, tileScale, demoIconBitmap);
soundOnIconBitmap = new createjs.Bitmap(preload.getResult("soundOn")); //04/18/2015
soundOffIconBitmap = new createjs.Bitmap(preload.getResult("soundOff"));
soundIconObj = new soundIconClass(screenX1, screenY1, tileScale, soundOnIconBitmap, soundOffIconBitmap);
infoIconBitmap = new createjs.Bitmap(preload.getResult("infoIcon")); //05/12/2015
infoIconObj = new infoIconClass(screenX1, screenY1, tileScale, infoIconBitmap);
infoObj = new infoMenuClass(mainStage, tileScale);
helpIconBitmap = new createjs.Bitmap(preload.getResult("helpIcon")); //04/21/2015
helpIconObj = new helpIconClass(screenX1, screenY1, tileScale, helpIconBitmap);
repeatActionOnIconBitmap = new createjs.Bitmap(preload.getResult("repeatOn")); //05/17/2015
repeatActionOffIconBitmap = new createjs.Bitmap(preload.getResult("repeatOff"));
repeatActionIconObj = new repeatActionIconClass(screenX1, screenY1, tileScale, repeatActionOnIconBitmap, repeatActionOffIconBitmap);
apple2IconBitmap = new createjs.Bitmap(preload.getResult("apple2")); //04/18/2015
C64IconBitmap = new createjs.Bitmap(preload.getResult("C64"));
themeIconObj = new themeIconClass(screenX1, screenY1, tileScale, apple2IconBitmap, C64IconBitmap);
checkBitmap = new createjs.Bitmap(preload.getResult("check")); checkBitmap = new createjs.Bitmap(preload.getResult("check"));
@@ -293,14 +393,6 @@ function preloadResource()
} }
function getFirstPlayInfo()
{
if(getStorage(STORAGE_FIRST_PLAY) == null) {
firstPlay = 1;
setStorage(STORAGE_FIRST_PLAY, 1);
}
}
function preloadComplet() function preloadComplet()
{ {
createHelpObj(); createHelpObj();
@@ -311,16 +403,28 @@ function preloadResource()
} }
} }
function createSoundInstance()
{
soundFall = createjs.Sound.createInstance("fall" + curTheme);
soundDig = createjs.Sound.createInstance("dig" + curTheme);
soundPass = createjs.Sound.createInstance("pass" + curTheme);
soundEnding = createjs.Sound.createInstance("ending"); //for training mode only
}
//============================== //==============================
// support different AI-version // support different AI-version
//============================== //==============================
var spriteSpeed = [ var spriteSpeed = [
{ runnerSpeed: 0.65, guardSpeed: 0.3, digSpeed: 0.68, fillSpeed: 0.24, xMoveBase: 8, yMoveBase: 8 }, //ver 1 { 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 { runnerSpeed: 0.70, guardSpeed: 0.35, digSpeed: 0.68, fillSpeed: 0.27, xMoveBase: 8, yMoveBase: 9 }, //ver 2
{ runnerSpeed: 0.8, guardSpeed: 0.4, digSpeed: 1, fillSpeed: 1, xMoveBase: 8, yMoveBase: 9 } //ver 3
]; ];
var curAiVersion = AI_VERSION; var curAiVersion = AI_VERSION;
var maxGuard = MAX_NEW_GUARD;
function setSpeedByAiVersion() function setSpeedByAiVersion()
{ {
var speedObj = spriteSpeed[curAiVersion-1]; var speedObj = spriteSpeed[curAiVersion-1];
@@ -330,27 +434,54 @@ function setSpeedByAiVersion()
DIG_SPEED = speedObj.digSpeed; DIG_SPEED = speedObj.digSpeed;
FILL_SPEED = speedObj.fillSpeed; 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; xMove = speedObj.xMoveBase;
yMove = speedObj.yMoveBase; yMove = speedObj.yMoveBase;
//W4 = (tileW/4|0)+ speedObj.w4; //no used //------------------------------------------------------------------------------------
//H4 = (tileH/4|0)+ speedObj.h4; // Change move policy for support LR FAN BOOK with one guard
// Original policy for one guard is [0, 1, 1] ==> 2/3 speed of runner
// while AI_VERSION >= 3 change policy to [ 0, 1, 0, 1, 0, 1 ] ==> 1/2 speed of runner
//------------------------------------------------------------------------------------
if(curAiVersion < 3) {
movePolicy[1] = [0, 1, 1, 0, 1, 1];
maxGuard = MAX_OLD_GUARD;
} else {
movePolicy[1] = [0, 1, 0, 1, 0, 1]; //slow down the guard when only one guard
maxGuard = MAX_NEW_GUARD; //change max guard
}
createSpriteSheet(); themeDataReset(); //4/16/2015
}
function themeDataReset()
{
createSoundInstance();
createSpriteSheet(); //base one 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"));
createPreloadSpriteSheet(); createPreloadSpriteSheet();
createFlagSpriteSheet();
} }
function createPreloadSpriteSheet() function createPreloadSpriteSheet()
{ {
guardData = new createjs.SpriteSheet({ guardData = new createjs.SpriteSheet({
images: [preload.getResult("guard")], images: [getThemeImage("guard")],
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},
@@ -362,7 +493,7 @@ function createPreloadSpriteSheet()
barRight: { barRight: {
frames: [ 11, 12, 12, 13, 13 ], frames: [ 11, 12, 12, 13, 13 ],
next: "barRight", next: "barRight",
speed: GUARD_SPEED speed: GUARD_SPEED
}, },
barLeft: { barLeft: {
@@ -394,12 +525,11 @@ function createPreloadSpriteSheet()
next: null, next: null,
speed: GUARD_SPEED speed: GUARD_SPEED
} }
} }
}); });
holeData = new createjs.SpriteSheet( { holeData = new createjs.SpriteSheet( {
images: [preload.getResult("hole")], images: [getThemeImage("hole")],
frames: [ frames: [
//dig hole Left //dig hole Left
@@ -446,10 +576,17 @@ function createPreloadSpriteSheet()
}); });
holeObj.sprite = new createjs.Sprite(holeData, "digHoleLeft"); 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 holeObj.action = ACT_STOP; //no digging
textData = new createjs.SpriteSheet({ textData = new createjs.SpriteSheet({
images: [preload.getResult("text")], images: [getThemeImage("text")],
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},
@@ -463,14 +600,26 @@ function createPreloadSpriteSheet()
"DOT": 36, "LT": 37, "GT": 38, "DASH": 39, "DOT": 36, "LT": 37, "GT": 38, "DASH": 39,
"@":40, //gold "@":40, //gold
"#":41, //trap "#":41, //trap
"SPACE":43,
"FLASH": { //42 & 43 "FLASH": { //42 & 43
frames: [42, 42, 42, 43, 43, 43], frames: [42, 42, 42, 43, 43, 43],
next: "FLASH", next: "FLASH",
speed: FLASH_SPEED speed: FLASH_SPEED
}, },
"SPACE":43, "COLON":44, "UNDERLINE": 45,
"D0": 50, "D1": 51, "D2": 52, "D3": 53, "D4": 54, //blue digit number for player name, 11/17/2014 "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 "D5": 55, "D6": 56, "D7": 57, "D8": 58, "D9": 59
} }
}); });
} }
//=======================================
// country flag for demo info 5/14/2015
//=======================================
function createFlagSpriteSheet()
{
countryFlagData = new createjs.SpriteSheet({
images: [preload.getResult("flag")],
frames: {regX:0, height: 32, regY: 0, width: 32},
animations: countryId
});
}
+120 -21
Voir le fichier
@@ -261,7 +261,7 @@ function runnerMoveStep(action, stayCurrPos )
if(action == ACT_STOP ) { if(action == ACT_STOP ) {
if(runner.action == ACT_FALL) { if(runner.action == ACT_FALL) {
soundStop(soundFall); soundStop(soundFall);
soundPlay("down"); themeSoundPlay("down");
} }
if(runner.action != ACT_STOP){ if(runner.action != ACT_STOP){
runner.sprite.stop(); runner.sprite.stop();
@@ -278,7 +278,7 @@ function runnerMoveStep(action, stayCurrPos )
if(action != runner.action){ if(action != runner.action){
if(runner.action == ACT_FALL) { if(runner.action == ACT_FALL) {
soundStop(soundFall); soundStop(soundFall);
soundPlay("down"); themeSoundPlay("down");
} else if ( action == ACT_FALL) { } else if ( action == ACT_FALL) {
soundPlay(soundFall); soundPlay(soundFall);
} }
@@ -298,7 +298,7 @@ function runnerMoveStep(action, stayCurrPos )
) )
{ {
removeGold(x,y); removeGold(x,y);
soundPlay("getGold"); themeSoundPlay("getGold");
decGold(); decGold();
//debug("gold = " + goldCount); //debug("gold = " + goldCount);
if(playMode == PLAY_CLASSIC || playMode == PLAY_AUTO || playMode == PLAY_DEMO) { if(playMode == PLAY_CLASSIC || playMode == PLAY_AUTO || playMode == PLAY_DEMO) {
@@ -318,10 +318,12 @@ function runnerMoveStep(action, stayCurrPos )
function decGold() function decGold()
{ {
if(--goldCount <= 0) { if(--goldCount <= 0) {
//if(!showHideLaddr() && runner.pos.y > 0) {
showHideLaddr(); showHideLaddr();
if(runner.pos.y > 0 && playMode != PLAY_CLASSIC && playMode != PLAY_AUTO && playMode != PLAY_DEMO) { if(runner.pos.y > 0) {
soundPlay("goldFinish"); if(curTheme == "C64") soundPlay("goldFinish" + ((curLevel-1)%6+1)); //six sounds
else if (playMode == PLAY_MODERN || playMode == PLAY_TEST || playMode == PLAY_DEMO_ONCE) {
soundPlay("goldFinish"); //TIME MODE
}
} }
} }
} }
@@ -338,7 +340,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(preload.getResult("gold")); tile = map[x][y].bitmap = new createjs.Bitmap(getThemeImage("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);
@@ -441,6 +443,30 @@ function ok2Dig(nextMove)
return rc; return rc;
} }
//=======================
// BEGIN NEW DIG METHOD
//=======================
var digHoleLeft = [ 0, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7 ];
var digHoleRight = [ 8, 9, 10, 10, 11, 12, 12, 13, 14, 14, 15 ];
function processDigHole()
{
if(curAiVersion < 3) return;
if(++holeObj.curFrameIdx < holeObj.shapeFrame.length) {
// change frame
holeObj.sprite.gotoAndStop(holeObj.shapeFrame[holeObj.curFrameIdx]);
holeObj.sprite.currentAnimationFrame = holeObj.curFrameIdx;
} else { //dig complete
digComplete();
}
}
//========================
// END NEW DIG METHOD
//========================
var digTimeStart, shakeTimeStart; //for debug
var fillHoleTimeStart, rebornTimeStart; //for debug
function digHole(action) function digHole(action)
{ {
var x,y, holeShape; var x,y, holeShape;
@@ -465,17 +491,28 @@ function digHole(action)
map[x][y+1].bitmap.set({alpha:0}); //hide block (replace with digging image) map[x][y+1].bitmap.set({alpha:0}); //hide block (replace with digging image)
runner.sprite.gotoAndPlay(runner.shape); runner.sprite.gotoAndPlay(runner.shape);
holeObj.sprite.gotoAndPlay(holeShape);
holeObj.action = ACT_DIGGING; holeObj.action = ACT_DIGGING;
holeObj.pos = { x: x, y: y }; holeObj.pos = { x: x, y: y };
holeObj.sprite.setTransform(x * tileWScale, y * tileHScale,tileScale, tileScale); holeObj.sprite.setTransform(x * tileWScale, y * tileHScale,tileScale, tileScale);
// the callback is called each time a sequence completes: digTimeStart = recordCount; //for debug
holeObj.sprite.on("animationend", digComplete);
if(curAiVersion < 3) {
holeObj.sprite.gotoAndPlay(holeShape);
holeObj.sprite.on("animationend", digComplete);
} else {
if(action == ACT_DIG_LEFT) holeShape = digHoleLeft;
else holeShape = digHoleRight;
holeObj.sprite.gotoAndStop(holeShape[0]);
holeObj.shapeFrame = holeShape;
holeObj.curFrameIdx = 0;
}
mainStage.addChild(holeObj.sprite); mainStage.addChild(holeObj.sprite);
} }
var DEBUG_DIG=0;
function isDigging() function isDigging()
{ {
var rc = 0; var rc = 0;
@@ -484,21 +521,29 @@ function isDigging()
var x = holeObj.pos.x, y = holeObj.pos.y; var x = holeObj.pos.x, y = holeObj.pos.y;
if(map[x][y].act == GUARD_T) { //guard come close to the digging hole ! if(map[x][y].act == GUARD_T) { //guard come close to the digging hole !
var id = getGuardId(x, y); var id = getGuardId(x, y);
if(holeObj.sprite.currentAnimationFrame < 6 && guard[id].pos.yOffset > -H4) { if(holeObj.sprite.currentAnimationFrame < holeObj.digLimit && guard[id].pos.yOffset > -H4) {
if(DEBUG_DIG) loadingTxt.text = "dig : " + holeObj.sprite.currentAnimationFrame + " (X)";
stopDigging(x,y); stopDigging(x,y);
} else {
if(DEBUG_DIG) loadingTxt.text = "dig : " + holeObj.sprite.currentAnimationFrame + " (O)";
if(curAiVersion >= 3) { //This is a bug while AI VERSION < 3
map[x][y+1].act = EMPTY_T; //assume hole complete
rc = 1;
}
} }
} else { } else {
switch( runner.shape ) { switch( runner.shape ) {
case "digLeft": case "digLeft":
if(holeObj.sprite.currentAnimationFrame > 2 ) { if(holeObj.sprite.currentAnimationFrame > 2 ) {
runner.sprite.gotoAndStop("runLeft"); runner.sprite.gotoAndStop("runLeft"); //change shape
runner.shape = "runLeft"; runner.shape = "runLeft";
runner.action = ACT_STOP; runner.action = ACT_STOP;
} }
break; break;
case "digRight": case "digRight":
if(holeObj.sprite.currentAnimationFrame > 2) { if(holeObj.sprite.currentAnimationFrame > 2) {
runner.sprite.gotoAndStop("runRight"); runner.sprite.gotoAndStop("runRight"); //change shape
runner.shape = "runRight"; runner.shape = "runRight";
runner.action = ACT_STOP; runner.action = ACT_STOP;
} }
@@ -550,6 +595,8 @@ function digComplete()
holeObj.action = ACT_STOP; //no digging holeObj.action = ACT_STOP; //no digging
mainStage.removeChild(holeObj.sprite); mainStage.removeChild(holeObj.sprite);
if(DEBUG_TIME) loadingTxt.text = "DigTime = " + (recordCount - digTimeStart);
fillHole(x, y); fillHole(x, y);
} }
@@ -560,10 +607,19 @@ function fillHole(x, y)
fillSprite.pos = { x:x, y:y }; //save position 11/18/2014 fillSprite.pos = { x:x, y:y }; //save position 11/18/2014
fillSprite.setTransform(x * tileWScale, y * tileHScale, tileScale, tileScale); fillSprite.setTransform(x * tileWScale, y * tileHScale, tileScale, tileScale);
fillSprite.on("animationend", fillComplete);
fillSprite.play(); if(curAiVersion < 3) {
fillSprite.on("animationend", fillComplete, null, false, {obj:fillSprite} );
fillSprite.play();
} else {
fillSprite.curFrameIdx = 0;
fillSprite.curFrameTime = -1;
fillSprite.gotoAndStop(fillHoleFrame[0]);
}
mainStage.addChild(fillSprite); mainStage.addChild(fillSprite);
fillHoleObj.push(fillSprite); fillHoleObj.push(fillSprite);
fillHoleTimeStart = recordCount; //for debug
} }
function moveFillHoleObj2Top() function moveFillHoleObj2Top()
@@ -573,18 +629,19 @@ function moveFillHoleObj2Top()
} }
} }
function fillComplete() function fillComplete(evt, data)
{ {
//don't use "divide command", it will cause loss of accuracy while scale changed (ex: tileScale = 0.6...) //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 x = this.x / tileWScale | 0; //this : scope default to the dispatcher
//var y = this.y / tileHScale | 0; //var y = this.y / tileHScale | 0;
var x = this.pos.x, y = this.pos.y; //get position var fillObj = data.obj;
var x = fillObj.pos.x, y = fillObj.pos.y; //get position
map[x][y].bitmap.set({alpha:1}); //display block map[x][y].bitmap.set({alpha:1}); //display block
this.removeAllEventListeners ("animationend"); fillObj.removeAllEventListeners ("animationend");
mainStage.removeChild(this); mainStage.removeChild(fillObj);
removeFillHoleObj(this); removeFillHoleObj(fillObj);
switch(map[x][y].act) { switch(map[x][y].act) {
case RUNNER_T : // runner dead case RUNNER_T : // runner dead
@@ -594,6 +651,7 @@ function fillComplete()
break; break;
case GUARD_T: //guard dead case GUARD_T: //guard dead
var id = getGuardId(x,y); var id = getGuardId(x,y);
if(curAiVersion >= 3 && guard[id].action == ACT_IN_HOLE) removeFromShake(id);
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;
@@ -608,6 +666,8 @@ function fillComplete()
break; break;
} }
map[x][y].act = BLOCK_T; map[x][y].act = BLOCK_T;
if(DEBUG_TIME) loadingTxt.text = "FillHoleTime = " + (recordCount - fillHoleTimeStart); //for debug
} }
function removeFillHoleObj(spriteObj) function removeFillHoleObj(spriteObj)
@@ -618,9 +678,48 @@ function removeFillHoleObj(spriteObj)
return; return;
} }
} }
debug("removeFillHoleObj: design error!"); error(arguments.callee.name, "design error !");
} }
//=======================================
// BEGIN NEW fill Hold (Ai version >= 3)
//=======================================
var fillHoleFrame = [ 16, 17, 18, 19];
var fillHoleTime = [ 166, 8, 8, 4];
function initFillHoleVariable()
{
fillHoleObj = [];
}
function processFillHole()
{
var curIdx, curFillObj;
for(var i = 0; i < fillHoleObj.length;) {
curFillObj = fillHoleObj[i];
curIdx = curFillObj.curFrameIdx;
if(++curFillObj.curFrameTime >= fillHoleTime[curIdx]) {
if(++curFillObj.curFrameIdx < fillHoleFrame.length) {
//change frame
curFillObj.curFrameTime = 0;
curFillObj.gotoAndStop(fillHoleFrame[curFillObj.curFrameIdx]);
} else {
//fill hole complete
fillComplete(null, {obj: curFillObj});
continue;
}
}
i++;
}
}
//====================
// END NEW fill Hold
//====================
//================================== //==================================
// Check guard is alive or not // Check guard is alive or not
// 2014/10/31 // 2014/10/31
+226 -71
Voir le fichier
@@ -13,66 +13,130 @@ function setLastPlayMode()
setStorage(STORAGE_LASTPLAY_MODE, infoJSON); setStorage(STORAGE_LASTPLAY_MODE, infoJSON);
} }
function getClassicInfo() function initClassicInfo()
{ {
var infoJSON; curScore = 0;
curLevel = maxLevel = 1;
if(playData == 1) { passedLevel = 0; //6/3/2015
infoJSON = getStorage(STORAGE_CLASSIC_INFO1); runnerLife = RUNNER_LIFE;
levelData = levelData1; sometimePlayInGodMode = 0;
} else {
infoJSON = getStorage(STORAGE_CLASSIC_INFO2);
levelData = levelData2;
}
if(infoJSON == null) {
curScore = 0;
curLevel = maxLevel = 1;
runnerLife = RUNNER_LIFE;
} else {
var infoObj = JSON.parse(infoJSON);
curScore = infoObj.s;
curLevel = infoObj.l;
maxLevel = infoObj.m;
runnerLife = infoObj.r;
}
} }
function setClassicInfo() function base64Decode(str)
{
//----------------------------------------------------------------------------------------------------------
// check string is base64 or not
// ref: http://stackoverflow.com/questions/8571501/how-to-check-whether-the-string-is-base64-encoded-or-not
//----------------------------------------------------------------------------------------------------------
var pattern = new RegExp("^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$");
if(pattern.test(str) == true) {
return atob(str); //base64 decode
}
return null; //string is not base64
}
function getClassicInfo()
{
var infoJSON = null;
var needEncode = 0;
if(playData >= 1 && playData <= maxPlayId) {
infoJSON = getStorage(STORAGE_CLASSIC_INFO+playData);
//==================================
// BEGIN for support base64 encode
//==================================
/* for backward compatible disable it !
if(infoJSON) {
if(infoJSON.charAt(0) != '{' ) { //assume base64 encoded
infoJSON = base64Decode(infoJSON); //base64 decode
} else { //no encode (for backward compatibility)
if( getStorage(STORAGE_FIRST_PLAY) >= VERSION) infoJSON = null; //something wrong, reset it
else {
setFirstPlayInfo(); //set current version
}
needEncode = 1;
}
}
*/
//================================
// END for support base64 encode
//================================
} else {
error(arguments.callee.name, "design error, value =" + playData );
playData = 1;
}
levelData = getPlayVerData(playData);
if(infoJSON == null) {
initClassicInfo();
} else {
var infoObj = JSON.parse(infoJSON);
if( ! (infoObj && ("s" in infoObj) && ("l" in infoObj) && ("m" in infoObj) ) ) {
initClassicInfo(); //something wrong, reset it !
} else {
if(!infoObj.hasOwnProperty('g')) infoObj.g = 0; //god-mode
if(!infoObj.hasOwnProperty('p')) infoObj.p = infoObj.l-1; //passed level
curScore = infoObj.s;
curLevel = infoObj.l;
maxLevel = infoObj.m;
passedLevel = infoObj.p;
runnerLife = infoObj.r;
sometimePlayInGodMode = infoObj.g;
}
}
if(needEncode) setClassicInfo(0);
}
function setClassicInfo(passed)
{ {
maxLevel = (maxLevel < curLevel)?curLevel:maxLevel; maxLevel = (maxLevel < curLevel)?curLevel:maxLevel;
var infoObj = { s:curScore, l:curLevel, r:runnerLife, m: maxLevel }; if(passed) passedLevel++;
var infoObj = { s:curScore, l:curLevel, r:runnerLife, m: maxLevel, g: sometimePlayInGodMode, p: passedLevel};
var infoJSON = JSON.stringify(infoObj); var infoJSON = JSON.stringify(infoObj);
if(playData == 1) setStorage(STORAGE_CLASSIC_INFO1, infoJSON); // for backward compatible disable it !
else setStorage(STORAGE_CLASSIC_INFO2, infoJSON); // infoJSON = btoa(infoJSON); //base64 encode, 6/3/2015
if(playData >= 1 && playData <= maxPlayId) {
setStorage(STORAGE_CLASSIC_INFO+playData, infoJSON);
} else {
error(arguments.callee.name, "design error, value =" + playData );
}
} }
function clearClassicInfo() function clearClassicInfo()
{ {
if(playData == 1) clearStorage(STORAGE_CLASSIC_INFO1); clearStorage(STORAGE_CLASSIC_INFO + playData);
else clearStorage(STORAGE_CLASSIC_INFO2);
} }
function getModernInfo() function getModernInfo()
{ {
var infoJSON; var infoJSON;
if(playData == 1) { switch(true) {
infoJSON = getStorage(STORAGE_MODERN_INFO1); case (playData >= 1 && playData <= maxPlayId):
levelData = levelData1; infoJSON = getStorage(STORAGE_MODERN_INFO+playData);
} else if(playData == 2) { levelData = getPlayVerData(playData);
infoJSON = getStorage(STORAGE_MODERN_INFO2); break;
levelData = levelData2; case (playData == PLAY_DATA_USERDEF):
} else {
if(editLevels > 0) { if(editLevels > 0) {
infoJSON = getStorage(STORAGE_USER_INFO); infoJSON = getStorage(STORAGE_USER_INFO);
levelData = editLevelData; levelData = editLevelData;
} else { //no any user created level ! } else { //no any user created level !
playData = 1; playData = 1;
infoJSON = getStorage(STORAGE_MODERN_INFO1); playData2MainMenuId();
levelData = levelData1; infoJSON = getStorage(STORAGE_MODERN_INFO+1);
levelData = getPlayVerData(playData);
} }
break;
default:
error(arguments.callee.name, "design error, value =" + playData );
playData = 1;
break;
} }
if(infoJSON == null) { if(infoJSON == null) {
@@ -93,58 +157,50 @@ function setModernInfo()
var infoObj = { l:curLevel}; var infoObj = { l:curLevel};
var infoJSON = JSON.stringify(infoObj); var infoJSON = JSON.stringify(infoObj);
switch(playData) { switch(true) {
case 1: case (playData >= 1 && playData <= maxPlayId):
setStorage(STORAGE_MODERN_INFO1, infoJSON); setStorage(STORAGE_MODERN_INFO + playData, infoJSON);
break; break;
case 2: case (playData == PLAY_DATA_USERDEF):
setStorage(STORAGE_MODERN_INFO2, infoJSON);
break;
case 3:
setStorage(STORAGE_USER_INFO, infoJSON); //user created setStorage(STORAGE_USER_INFO, infoJSON); //user created
break; break;
default: default:
debug("setModernInfo() design error !"); error(arguments.callee.name, "design error, value =" + playData );
break; break;
} }
} }
function clearModernInfo() function clearModernInfo()
{ {
switch(playData) { switch(true) {
case 1: case (playData >= 1 && playData <= maxPlayId):
clearStorage(STORAGE_MODERN_INFO1); clearStorage(STORAGE_MODERN_INFO+playData);
break; break;
case 2: case (playData == PLAY_DATA_USERDEF):
clearStorage(STORAGE_MODERN_INFO2);
break;
case 3:
clearStorage(STORAGE_USER_INFO); clearStorage(STORAGE_USER_INFO);
break; break;
default: default:
debug("setModernInfo() design error !"); error(arguments.callee.name, "design error, value =" + playData );
break; break;
} }
} }
function getModernScoreInfo() function getModernScoreInfo()
{ {
var infoJSON, levelSize; var infoJSON, levelSize;
switch(playData) { switch(true) {
case 1: case (playData >= 1 && playData <= maxPlayId):
infoJSON = getStorage(STORAGE_MODERN_SCORE_INFO1); infoJSON = getStorage(STORAGE_MODERN_SCORE_INFO+playData);
levelSize = levelData.length; levelSize = levelData.length;
break; break;
case 2: case (playData == PLAY_DATA_USERDEF):
infoJSON = getStorage(STORAGE_MODERN_SCORE_INFO2);
levelSize = levelData.length;
break;
case 3:
infoJSON = getStorage(STORAGE_USER_SCORE_INFO); //user created infoJSON = getStorage(STORAGE_USER_SCORE_INFO); //user created
levelSize = MAX_EDIT_LEVEL; levelSize = MAX_EDIT_LEVEL;
break; break;
default:
error(arguments.callee.name, "design error, value =" + playData );
break;
} }
if(infoJSON) { if(infoJSON) {
@@ -161,19 +217,35 @@ function setModernScoreInfo()
{ {
var infoJSON = JSON.stringify(modernScoreInfo); var infoJSON = JSON.stringify(modernScoreInfo);
switch(playData) { switch(true) {
case 1: case (playData >= 1 && playData <= maxPlayId):
setStorage(STORAGE_MODERN_SCORE_INFO1, infoJSON); setStorage(STORAGE_MODERN_SCORE_INFO+playData, infoJSON);
break; break;
case 2: case (playData == PLAY_DATA_USERDEF):
setStorage(STORAGE_MODERN_SCORE_INFO2, infoJSON);
break;
case 3:
setStorage(STORAGE_USER_SCORE_INFO, infoJSON); setStorage(STORAGE_USER_SCORE_INFO, infoJSON);
break; break;
default:
error(arguments.callee.name, "design error, value =" + playData );
break;
} }
} }
function getFirstPlayInfo()
{
var firstValue;
firstValue = parseInt(getStorage(STORAGE_FIRST_PLAY));
if( isNaN(firstValue) || firstValue < parseInt(VERSION) ) {
firstPlay = 1;
}
}
function setFirstPlayInfo()
{
setStorage(STORAGE_FIRST_PLAY, VERSION);
}
//===================== //=====================
// for edit mode // for edit mode
//===================== //=====================
@@ -284,6 +356,8 @@ function initNewLevelInfo(testInfo)
testInfo.levelMap = ""; testInfo.levelMap = "";
testInfo.pass = 0; testInfo.pass = 0;
testInfo.modified = 0; testInfo.modified = 0;
testInfo.fromPlayData = -1;
testInfo.fromLevel = -1;
for(var i = 0; i < NO_OF_TILES_X * NO_OF_TILES_Y; i++) for(var i = 0; i < NO_OF_TILES_X * NO_OF_TILES_Y; i++)
testInfo.levelMap += " "; //empty map testInfo.levelMap += " "; //empty map
} }
@@ -310,6 +384,13 @@ function getTestLevel(testInfo)
testInfo.levelMap = infoObj.map; testInfo.levelMap = infoObj.map;
testInfo.pass = infoObj.pass; testInfo.pass = infoObj.pass;
if(('fromPlayData' in infoObj) && ('fromLevel' in infoObj)) {
testInfo.fromPlayData = infoObj.fromPlayData;
testInfo.fromLevel = infoObj.fromLevel;
} else {
testInfo.fromPlayData = testInfo.fromLevel = -1;
}
//BEGIN for debug ==================== //BEGIN for debug ====================
var i = 0; var i = 0;
for(var y = 0; y < NO_OF_TILES_Y; y++) { for(var y = 0; y < NO_OF_TILES_Y; y++) {
@@ -317,7 +398,7 @@ function getTestLevel(testInfo)
for(var x = 0; x < NO_OF_TILES_X; x++) { for(var x = 0; x < NO_OF_TILES_X; x++) {
string += testInfo.levelMap[i++]; string += testInfo.levelMap[i++];
} }
debug('"' + string + '"'); //debug('"' + string + '"');
} }
//END for debug ==================== //END for debug ====================
@@ -339,7 +420,12 @@ function getTestLevel(testInfo)
function setTestLevel(testInfo) function setTestLevel(testInfo)
{ {
var infoObj = { level:testInfo.level, map: testInfo.levelMap, pass: testInfo.pass}; var infoObj = { level:testInfo.level,
map: testInfo.levelMap,
pass: testInfo.pass,
fromPlayData: testInfo.fromPlayData,
fromLevel: testInfo.fromLevel
};
var infoJSON = JSON.stringify(infoObj); var infoJSON = JSON.stringify(infoObj);
setStorage(STORAGE_TEST_LEVEL, infoJSON); setStorage(STORAGE_TEST_LEVEL, infoJSON);
@@ -373,6 +459,75 @@ function createUserDefaultLevel()
addEditLevel(myDefaultLevel); addEditLevel(myDefaultLevel);
} }
//======================
// Repeat Action ON/OFF
//======================
function getRepeatAction()
{
if((repeatAction = getStorage(STORAGE_REPEAT_ACTION)) == null) {
repeatAction = 0; //set default off (NES keyboard mode)
} else {
repeatAction = parseInt(repeatAction);
}
}
function setRepeatAction()
{
setStorage(STORAGE_REPEAT_ACTION, repeatAction);
}
//===================
// Theme state
//===================
function getThemeMode()
{
var themeName;
if((themeName = getStorage(STORAGE_THEME_MODE)) == null) {
themeName = THEME_APPLE2;
}
return themeName;
}
function setThemeMode(themeName)
{
setStorage(STORAGE_THEME_MODE, themeName);
}
//===================
// player name
//===================
function getPlayerName()
{
var name;
if((name = getStorage(STORAGE_PLAYER_NAME)) == null) {
name = "";
}
return name;
}
function setPlayerName(name)
{
setStorage(STORAGE_PLAYER_NAME, name);
}
//===================
// uid
//===================
function getUid()
{
var uid;
if((uid = getStorage(STORAGE_UID)) == null) {
uid = "";
}
return uid;
}
function setUid(uid)
{
setStorage(STORAGE_UID, uid);
}
//========================= //=========================
// for debug only // for debug only
//========================= //=========================
+1 -1
Voir le fichier
@@ -6,7 +6,7 @@
//* "level 51" : Championship demo level (2014/04/27) //* "level 51" : Championship demo level (2014/04/27)
//************************************************************ //************************************************************
var levelData2 = [ var championData = [
//======<<< Level 001 >>>====== //======<<< Level 001 >>>======
" " + " " +
+1 -1
Voir le fichier
@@ -4,7 +4,7 @@
//* by Simon Hung 2014/02/20 //* by Simon Hung 2014/02/20
//************************************************************ //************************************************************
var levelData1 = [ var classicData = [
//======<<< Level 001 >>>====== //======<<< Level 001 >>>======
" S " + " S " +
+1740
Voir le fichier
Fichier diff supprimé car celui-ci est trop grand Voir la Diff
+2861
Voir le fichier
Fichier diff supprimé car celui-ci est trop grand Voir la Diff
+507
Voir le fichier
@@ -0,0 +1,507 @@
//************************************************************
//* All levels extract from:
//* Revenge of Lode Runner (Apple-II 1986) DISK IMAGE
//* by Simon Hung 2015/01/08
//************************************************************
var revengeData = [
//======<<< Level 001 >>>======
"H@ SSS SS SS SSS @" +
"H@ S S S S S S S @" +
"H@ S SS S S S S S S @" +
"H@ S S S S S S S S @" +
"H@ SSS SS SS SSS @" +
"H@@@@@@@@@@@@@@@@@@@@@@@@@@@" +
"H " +
"H########@##############- " +
"H##H####@H ##H## #H#H##-@H " +
"H##H####@H###H#H#####H##-@H&" +
"H##H#$$#@H$##H#H##$##H##-@H0" +
"H##H####@H ##H#H#####H##-@H " +
"H#@#H $@@H H@#@#####H@#-@H " +
"H@@@@@@@@@@@@@ @@@@@#@@ -@H " +
"H00 $ @H " +
"######################## ## ",
//======<<< Level 002 >>>======
"S@ @ " +
"S@ $ @ " +
"S@H###H-H$H$H$H$H$H-H####H@ " +
"S@H H$H$H$H$H $ H@ " +
"S@H###H---H$H$H$H---H####H@ " +
"S@H H$H$H $ H@ " +
"S@H###H-----H$H-----H####H@ " +
"S@H $$$$$$$H$$$$$$$$ H@ " +
"S@@##########H########XXX@@ " +
"S H " +
"S ###### H ###### " +
"S ##$$## H ##$$## " +
"S ###### H ###### " +
"S H " +
"S & H $ 0" +
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
//======<<< Level 003 >>>======
" @S" +
" ------- @S" +
"######### H @S" +
" ##$$$## $$ H $ @S" +
" ##### -##############H@S" +
" ### - ####HH@S" +
" # - #$#HH#@S" +
" - ##HH##@S" +
" - $ #HH###@S" +
" - $$ $ $HH####@S" +
"$ - $$$ ###H#########@S" +
"###X## $$$ H @S" +
" H #### H @S" +
" H H @S" +
"$ H & $ H $ 00S" +
"###H###S####################",
//======<<< Level 004 >>>======
" " +
" H@$ H@$ " +
" -H@$ H@@$ H@@$ " +
" H@X H@@XH@$ H@@@$ " +
" $ H $H H@@$ H@@@@$ " +
" X#########H@@@$ H@@@@@$ " +
" ###$$$## H@@@@ H@@@@@@$" +
" ###### H@@@@X H@@@@@@X" +
" H H " +
" $ H $$$ H $$$$ " +
" #####################H" +
" ## #$$$@$$$ - ##H" +
" ### $$$@$$HX# ## H" +
" ###@@@@@@@### H" +
" 000 $$ $ $ $ &H" +
" @@@@@@@@@@@@@@@@@@@@@@@@@H",
//======<<< Level 005 >>>======
"@ S @" +
"@ S @" +
"@@@@@@@@@@S@@@@@@@@@@@@@@@@@" +
"@@@@@@@@@@SSSSSSSSSSSSSSSS @" +
"@ $ $ $ $$ $ $$H@" +
"@H#########################@" +
"@H 0000@" +
"@#########################H@" +
"@ $ $ $$$ H@" +
"@H#########################@" +
"@H $ $ @" +
"@#########################H@" +
"@ $ $ $$ $H@" +
"@H@@@@@@@@@@@@@@@@@@@@@@@@@@" +
"@H $ $$&" +
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
//======<<< Level 006 >>>======
"@S@@@@@@@@@@@@@@@@@@@@@@@@@@" +
"@S ------------------- @" +
"@S H H $ @" +
"@X#XXXXH ####H@" +
"@ H ######## H@" +
"@ H #HHHHHHHH# H@" +
"@XXXXXXH#HH $$$$ HH# H@" +
"@$X X$XH#H ---- H# H@" +
"@$X$X$XH#H H# H@" +
"@$X$X$XH XH ---- H# H@" +
"@$X$X$XH--##XXXX## H@" +
"@ X$X XH H@" +
"@XXXXXXH H@" +
"@------H 00$$&H@" +
"@####### ###########S######@" +
" $$$ S ",
//======<<< Level 007 >>>======
" ------------------------H" +
" - H H - 00 - $$$$$$ H" +
" & - H-$ -00 - $$$$$ -H" +
" --- H $$ H $$$$ --H" +
" - H - $$ $ $$$ ---H" +
" - H - - H $$ ----H" +
" - - H - - -----H" +
" - - H $ $ -- $ H" +
" $ - -H----- -$- $ H" +
" H- H - - H- $ H" +
" H - H - - H- $ H" +
" - H-- - $ H" +
" - H - -------- $ H" +
" - H - - -- - $ H" +
" ---H- - - $ H" +
" H H",
//======<<< Level 008 >>>======
"S# #" +
"S# $$ #" +
"S# #########################" +
"S#0--- ### $ --- -- " +
"S##H #H # #### H - ###H" +
"S## ####H# H-- ##-XXH" +
"S##$$$$#H $ 0 ##$XXH" +
"S######################X##XH" +
"S# ------------------------H" +
"S#H#######X#######X##H######" +
"S#H# 0 $ # $ H# " +
"S#H# ######H# #######H# ###H" +
"S#H # $ #H # $ #H # H" +
"S##### H# ##### H# ##### H#" +
"S$ &H# $ 0H# H#" +
"############################",
//======<<< Level 009 >>>======
" 0 ----------- @S" +
"H##$ @@@@@@@ $##H @S @S" +
"H###$ @@@@@ $###H @@@@S" +
"H####$ @@@ $####H $0 @S" +
"H#####$ @ $########H#####H@S" +
"H######$ $###### H #H@S" +
"H#######$#######$ #H@S" +
"H####################H###H@S" +
"H$ @H@ 0 H #H@S" +
"######H@H@ #######H $#H@S" +
" H@H@ ######$######H@S" +
"H######@H@$ ###$# # $ #H@S" +
"H##$###@H@###############H@S" +
"H &@H@ $ $ H@S" +
"@@@@@@@@H@@@@@#@@@@@@@@@@@@S" +
" H $ $ S",
//======<<< Level 010 >>>======
"S " +
"S---- ------------------ " +
"H S@S H $- $ - $ - $ " +
"H S@H H $ - H - H - H " +
"H $0S@H H -H---H----H----H $" +
"H###S H H- - - - -- - -- - " +
"H$ S@H H $ 00 " +
"H###S@H #############H#####" +
"H $S@H ###### H " +
"H###S H ###### H $ " +
"H $ S@H ###### H####H###" +
"H###S@H ###$## H# H " +
"H #S@H ###### H# $ $" +
"##H#S@H H############" +
"& H#S@H H $ $00" +
"####S@H H##################",
//======<<< Level 011 >>>======
"# ##########################" +
"#S ## #" +
"##S # H#######H----- #" +
"###S# H####$##S S#H#S$ #" +
"###S $ H#$#####S $ S#H#####" +
"######################H " +
" ######H" +
"----#H $ ####H H" +
" #H###H####H $ H" +
"$ #H H##$#H########H####" +
" #H $ H $ H $ " +
" $ ##############H $ H###H" +
" $ $ H####H $ H" +
" H###### H####" +
" $ &H 0H0000" +
"S###########################",
//======<<< Level 012 >>>======
"S " +
"S $ ------- " +
"S @@@@@$ H" +
"@@@S @HHHHH@$ H" +
"@ S @HH $ HH@$ H" +
"@ @@@@@H@@@@XHH0$$$ HHX$ H" +
"@ @ $ H@ @@@@#@@@@@@ H" +
"@$@H@@@@@ --- @ H" +
"@$@H@ H@ ###### H" +
"@$@H@ $ $ H@ ###### H" +
"@$@H@@@@@@@@@@ H@ ###### H" +
"@$@H-------- @ $ H@ ##$### H" +
"@ @H $ $$ $ H@@@#@@ ###### H" +
"@ @H@@@#@@@@@@ $ ###### H" +
"@ &H 0000 @@@@ H" +
"@@@@@@@@@@@H H@@",
//======<<< Level 013 >>>======
"@@@@@@@@@@@@@@@@@@@@@@@@@@ @" +
"@ --------- S@" +
"@ # $H#####S S @" +
"@$# H#----#S S @" +
"@$# H$ HH##S S @" +
"@$# -$H#H HH#S S @" +
"@$# H$#H#H H########@" +
"@$ H##H#H $$ H# $$ @" +
"@$# $H# #########H#####$@" +
"@$#H##### $# -------H# $ #$@" +
"@$#H# ####H $ #$@" +
"@$#H# $ $ #H#######H####$@" +
"@ #H# H H $# @" +
"@ #H###H########H#########H@" +
"@ &H H $$ H $0000H@" +
"@#@@#@#@###@@##@@#@@#@###@@@",
//======<<< Level 014 >>>======
"S " +
"S " +
"$##########################H" +
"$# -------------H---------#H" +
"$#H $ $ $ #H @H" +
"$#H H########H##H ##### @H" +
"$#XH H $ H #H ##$# @H" +
"$#X#H##### $ H ##H ### @H" +
"$#$#H #H####H $##HH ## @H" +
"$#$#H $ #H H#####H # @H" +
"$# #####H#H $ H ##H @H" +
"$# $ H##H####H $ #H @H" +
" #H#####H# H H#######H @H" +
"$#H0000 H $ H $&##H@H" +
"$##########################H" +
" H",
/************************************************************
This levels already exists in Classic Lode Runner (level 120)
//======<<< Level 015 >>>======
" S " +
" S " +
" H S H " +
" ######H H------------H " +
" # $ #H H 0 H " +
" # #H H@@@@@@##@@##@@" +
"@#@@#@@#@@#@@H#-----#X### #" +
" $0 $ $ H# H #-- # #" +
"#######X#####H# H#$$#$#H#$ #" +
" ------------H# H####X#H# #" +
"H0 H# H$ --HHH##" +
"H############H######H $ H " +
"H &H H## HHH" +
"H$##### $ ###H## $ #H#$-- H" +
"H## $ #####$ H$#####H##$ ##H" +
"####################H #####",
************************************************************/
//======<<< Level 016 >>>====== (become to level 015)
" S" +
" $ $ S" +
"H#########-H#########H S" +
"H H H $ S" +
"H $ ------ ####XXH" +
"##H######## H" +
" H H#########" +
" H $ H#########" +
"H########H $ H####$####" +
"H H##################" +
"H $ H " +
"####H######################H" +
"####H#$$$$ $$ $ $$ $$$$$ H" +
"#$##H#######################" +
"####H00000 &" +
"############################",
/************************************************************
Below levels already exists
in Champisonship Lode Runner or Classic Lode Runner
//======<<< Level 017 >>>======
"H--- #### $HH ######## " +
"H $##$### $H $## # " +
"H $####$## $H $##$H####### " +
"H$######$# H$ -##$H ## " +
"H######### $H -# H ## " +
"H --$$#$$# H$ -#H $# " +
"H$ ##$##$ $H -#H# H# " +
"&H $##$## H$ -#H#$H#$H#$H# " +
" #H ##$##$ $H -#H@@@@@@@@@# " +
"0#H $##$## H$ -#H # " +
" #H ##$##$ $H -######H##### " +
" #H $##$## #H -##$ #H# $# " +
" $H ##$##$# H - # 0#H# ## " +
" #H ##### H ## ###H#### " +
" H--- ##### #HHHHH### " +
" S ",
//======<<< Level 018 >>>======
" ---- SS0 " +
" H #######S S###### " +
" H##### # #S S# # " +
" H# ##### #&SS # H#####" +
"H#H### # #H ###H## H# # #" +
"H# # # #H # H H### #" +
"H# $# # #H#######H H# #" +
"H# ##### #H ###H# #####" +
"H# # # # ### #H## H####H " +
"H##### ### H##### H# #H " +
"H # #$H # #######H #H$ " +
"H # ###### # # 0 # $H#### " +
"#H###H# 0# # # # # H# 0# " +
"#H #H# $##### # ##### # " +
"#H #H###### ##### #X## " +
"#####H # X ",
//======<<< Level 019 >>>======
" 0$ " +
" ########H 0 $ " +
" 0 $ H#H#####H" +
" $#####H H H H" +
"###X### H-------H H$ H" +
" H H #######" +
" $ H H " +
"###H#######H H--------" +
"$ H 0 H $ H $" +
"######### ########H ####" +
" $ $ H " +
"#####H###X###H $ H $ " +
" H ##############H" +
" H H" +
" H $ & $ H" +
"############################",
//======<<< Level 020 >>>======
"#@#@@# S@#@@###@" +
"##@@## S#@@###@@" +
" @#@# $ $ S#@ @" +
"H# @##@###@H##@ S#@ #@H @" +
"H#@ @#@@###@H ## $S@ #@H @" +
"H## @##@@H #@### $#@H @" +
"H@##$ #@@#H ##@H$ " +
"H#@#### @##H -------#@@#H" +
"H @@#@##$ #@H $ #@ H" +
"H H## @@#@@#@ #@ H" +
"@###@@H@## $#@ H" +
"#@#@@@H#@##$ 0 $###@ H" +
" $ H@@###X@@@@@@X###@@H##" +
"H#@###@@ 0 & H@#" +
"H@###@ H##@@#@@##@#@@##@@@#" +
"H $ H 0 @#@",
*******************************************************/
/*******************************************************
* This level seems impossible to complete so change it *
*******************************************************/
//======<<< Level 021 >>>====== (become to level 016)
"S #########################" +
"S& # # ------ ############ " +
"H@ #H# H #### - 0 X" +
"H@0#H#H#H H @###########$" +
"H@ #H#######H $@#####-#####" +
"H@ #H#$####H#H @######-####$" +
"H@ #H#####H@#H ###$#-#$###" +
"H@ #H # H######H ####X####$" +
"H@ ###H#$H## $ H ##" +
"H@ #H#X##########@ $" +
"H@ ###H #H#####@ H#@@#H#" +
"H@ #H####H$ #H# $ @ H# $#H$" +
"H@ #H H#######SS####X####" +
"H#X#######@@@@@@@@@@@@@@@#@@" +
"H 000 " +
"H@#@#@#@#@#@#@#@#@#@#@#@#@#@", //change some solid brick to normal brick 1/8/2015
//"H@@@@@@@@@@@@@@@@@@@@@@@@@@@", //original: all solid brick
//======<<< Level 022 >>>====== (become to level 017)
" # " +
" ############H#S # " +
"H#@ $$ 0 #H###### H###X#" +
"H#@###@@@##H#H H@#$H #" +
"H#@- #$$ #H#H & H@@##H #" +
"H#@ ####H #H#######H --###X#" +
"H#@@#$$ H #H #H @ $ " +
"H#@@##### #######H###H @@@@#" +
"H#@$ #H# H " +
"H#### $ H# H H# " +
"H# H#####@@@@@@##H#####H##" +
"H# H# #H@@ H# # #H#$" +
"H## H#0 #H@@H####### $ #H #" +
"##H###### #@@H# ###X#H# " +
"##H# # H# $ #H#$" +
"##H#$$$ ######X############"
/*******************************************************
Below levels already exists in championship Lode Runner
//======<<< Level 023 >>>======
"############# " +
"#& # # $ # H ----------" +
"# #$ H# $#-H H " +
"#####H#######0H SH ####### " +
"# #$H# #$ # H S H $###$## " +
"#$ # H#$ #-HS H #$####$ " +
"## ##H####### H $###$## " +
"# $# H# $#H # H #$####$ " +
"# $H# #$ # H $###$## " +
"#####H####### H #$####$ " +
"#--# H#--# # H " +
"#--# H#--# 0# H#########" +
"############# H# H# $#" +
"#H # # H#########" +
"#H0 # $ H# H# #H $#" +
"############################",
//======<<< Level 024 >>>======
" & S" +
" ##H#H#######H#########H###S" +
" H #H# H #H# H # S" +
" ##H##H## #H####H##S#######S" +
" H S H H H H H S" +
" #H H# ##H #H# #H # H- " +
" # H H - #H ### #H###H " +
" #H# #H##$#H#H # H #H " +
" H# #H#-H# H-#H# H #H#H " +
" H H####0## H #### H#H " +
" #H - #H#- # #H - H#H " +
" #H # H#### H# H H#$## H#H " +
" H H#H---## #H HH#---H#H " +
" ##H H H #H# # H#####HH " +
" ###H- H----H---##-----H " +
" 0 ",
//======<<< Level 025 >>>======
"& - -- ---- # $0$ $" +
"0#H H@H $ @H#$#$# #H#X# H" +
"@#####@H# ##H# # ####HH## H" +
"@#####@H # #H#-- #$##H ##- H" +
" H H########H $ H" +
"H######XH H--# #$## ## ##" +
"H# #H #H# $# H#$ ###@@ ###" +
"H#$ # $#H## # H###$H $" +
"H ##### H # H#$##H- $ #H##" +
"H# H# #H #0#H###$H ## $H#$" +
"H#$ # $XH X#H#$# H#$H# # " +
"H ##### H ##H# 0#H#HH####" +
"H# # #H -H $ #HH ## $" +
" #$ # $#H H $ # #H H##" +
" #######H H # #@HH H## H#$" +
" H# # #@ H H##$H# "
*******************************************************/
];
+1787 -605
Voir le fichier
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
+24
Voir le fichier
@@ -0,0 +1,24 @@
var endingLoadFinish=0;
function loadEndingMusic()
{
if(endingLoadFinish) return;
createjs.Sound.alternateExtensions = ["mp3"];
createjs.Sound.registerSound({id:"win", src:"sound/ending/win.ogg"});
createjs.Sound.addEventListener("fileload", handleFileLoad);
function handleFileLoad(event) {
// A sound has been preloaded.
//console.log("Preloaded:", event.id, event.src);
endingLoadFinish = 1;
}
}
function endingMusicPlay()
{
if(endingLoadFinish) soundPlay("win");
}
function endingMusicStop()
{
if(endingLoadFinish) soundStop("win");
}
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
Voir le fichier
BIN
Voir le fichier
Fichier binaire non affiché.
BIN
Voir le fichier
Fichier binaire non affiché.

Certains fichiers ne sont pas affichés car ce diff contient trop de modifications Voir plus