Lode Runner - Total Recall (v2.01a.3)
@@ -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>
|
||||||
|
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
|||||||
@@ -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
|
||||||
|
};
|
||||||
|
Avant Largeur: | Hauteur: | Taille: 188 B Après Largeur: | Hauteur: | Taille: 188 B |
|
Avant Largeur: | Hauteur: | Taille: 188 B Après Largeur: | Hauteur: | Taille: 188 B |
|
Avant Largeur: | Hauteur: | Taille: 147 B Après Largeur: | Hauteur: | Taille: 147 B |
|
Avant Largeur: | Hauteur: | Taille: 148 B Après Largeur: | Hauteur: | Taille: 148 B |
|
Avant Largeur: | Hauteur: | Taille: 131 B Après Largeur: | Hauteur: | Taille: 131 B |
|
Avant Largeur: | Hauteur: | Taille: 2.6 KiB Après Largeur: | Hauteur: | Taille: 2.6 KiB |
|
Avant Largeur: | Hauteur: | Taille: 190 B Après Largeur: | Hauteur: | Taille: 190 B |
|
Avant Largeur: | Hauteur: | Taille: 163 B Après Largeur: | Hauteur: | Taille: 163 B |
|
Après Largeur: | Hauteur: | Taille: 2.1 KiB |
|
Avant Largeur: | Hauteur: | Taille: 163 B Après Largeur: | Hauteur: | Taille: 163 B |
|
Avant Largeur: | Hauteur: | Taille: 856 B Après Largeur: | Hauteur: | Taille: 856 B |
|
Avant Largeur: | Hauteur: | Taille: 118 B Après Largeur: | Hauteur: | Taille: 118 B |
|
Avant Largeur: | Hauteur: | Taille: 2.1 KiB Après Largeur: | Hauteur: | Taille: 2.1 KiB |
|
Avant Largeur: | Hauteur: | Taille: 183 B Après Largeur: | Hauteur: | Taille: 183 B |
|
Après Largeur: | Hauteur: | Taille: 4.6 KiB |
|
Avant Largeur: | Hauteur: | Taille: 163 B Après Largeur: | Hauteur: | Taille: 163 B |
|
Après Largeur: | Hauteur: | Taille: 193 B |
|
Après Largeur: | Hauteur: | Taille: 203 B |
|
Après Largeur: | Hauteur: | Taille: 147 B |
|
Après Largeur: | Hauteur: | Taille: 165 B |
|
Après Largeur: | Hauteur: | Taille: 133 B |
|
Après Largeur: | Hauteur: | Taille: 2.4 KiB |
|
Après Largeur: | Hauteur: | Taille: 185 B |
|
Après Largeur: | Hauteur: | Taille: 174 B |
|
Après Largeur: | Hauteur: | Taille: 2.0 KiB |
|
Après Largeur: | Hauteur: | Taille: 159 B |
|
Après Largeur: | Hauteur: | Taille: 868 B |
|
Après Largeur: | Hauteur: | Taille: 154 B |
|
Après Largeur: | Hauteur: | Taille: 2.3 KiB |
|
Après Largeur: | Hauteur: | Taille: 170 B |
|
Après Largeur: | Hauteur: | Taille: 4.2 KiB |
|
Après Largeur: | Hauteur: | Taille: 188 B |
|
Après Largeur: | Hauteur: | Taille: 835 B |
|
Après Largeur: | Hauteur: | Taille: 118 B |
|
Après Largeur: | Hauteur: | Taille: 491 B |
|
Après Largeur: | Hauteur: | Taille: 224 B |
|
Après Largeur: | Hauteur: | Taille: 980 B |
|
Avant Largeur: | Hauteur: | Taille: 19 KiB Après Largeur: | Hauteur: | Taille: 51 KiB |
|
Après Largeur: | Hauteur: | Taille: 62 KiB |
|
Après Largeur: | Hauteur: | Taille: 971 B |
|
Après Largeur: | Hauteur: | Taille: 191 B |
|
Après Largeur: | Hauteur: | Taille: 49 KiB |
|
Avant Largeur: | Hauteur: | Taille: 11 KiB Après Largeur: | Hauteur: | Taille: 33 KiB |
|
Après Largeur: | Hauteur: | Taille: 1.2 KiB |
|
Avant Largeur: | Hauteur: | Taille: 1.7 KiB |
|
Après Largeur: | Hauteur: | Taille: 970 B |
|
Après Largeur: | Hauteur: | Taille: 758 KiB |
|
Après Largeur: | Hauteur: | Taille: 9.4 KiB |
|
Après Largeur: | Hauteur: | Taille: 11 KiB |
|
Avant Largeur: | Hauteur: | Taille: 5.9 KiB Après Largeur: | Hauteur: | Taille: 8.0 KiB |
|
Après Largeur: | Hauteur: | Taille: 1.1 KiB |
|
Après Largeur: | Hauteur: | Taille: 1.1 KiB |
|
Après Largeur: | Hauteur: | Taille: 5.9 KiB |
|
Après Largeur: | Hauteur: | Taille: 2.3 KiB |
|
Après Largeur: | Hauteur: | Taille: 799 B |
|
Après Largeur: | Hauteur: | Taille: 959 B |
|
Avant Largeur: | Hauteur: | Taille: 739 B |
@@ -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";
|
||||||
|
|||||||
@@ -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 = [];
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
var gameVersionName = [ " Classic Lode Runner ", " Championship Lode Runner ", " Professional Lode Runner ", " Revenge of Lode Runner ", " Lode Runner Fan Book " ];
|
||||||
@@ -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
|
||||||
|
//====================
|
||||||
|
|||||||
@@ -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(""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
//=========================
|
//=========================
|
||||||
|
|||||||
@@ -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 >>>======
|
||||||
|
|
||||||
" " +
|
" " +
|
||||||
|
|||||||
@@ -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 " +
|
||||||
|
|||||||
@@ -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# "
|
||||||
|
|
||||||
|
*******************************************************/
|
||||||
|
|
||||||
|
];
|
||||||
@@ -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");
|
||||||
|
}
|
||||||