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

Cette révision appartient à :
simon_hung
2015-07-02 13:38:33 +08:00
Parent 8b86be66c5
révision 01086520d1
156 fichiers modifiés avec 13137 ajouts et 1816 suppressions
+231 -76
Voir le fichier
@@ -13,66 +13,130 @@ function setLastPlayMode()
setStorage(STORAGE_LASTPLAY_MODE, infoJSON);
}
function getClassicInfo()
function initClassicInfo()
{
var infoJSON;
if(playData == 1) {
infoJSON = getStorage(STORAGE_CLASSIC_INFO1);
levelData = levelData1;
} 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;
}
curScore = 0;
curLevel = maxLevel = 1;
passedLevel = 0; //6/3/2015
runnerLife = RUNNER_LIFE;
sometimePlayInGodMode = 0;
}
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;
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);
if(playData == 1) setStorage(STORAGE_CLASSIC_INFO1, infoJSON);
else setStorage(STORAGE_CLASSIC_INFO2, infoJSON);
// for backward compatible disable it !
// 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()
{
if(playData == 1) clearStorage(STORAGE_CLASSIC_INFO1);
else clearStorage(STORAGE_CLASSIC_INFO2);
clearStorage(STORAGE_CLASSIC_INFO + playData);
}
function getModernInfo()
{
var infoJSON;
if(playData == 1) {
infoJSON = getStorage(STORAGE_MODERN_INFO1);
levelData = levelData1;
} else if(playData == 2) {
infoJSON = getStorage(STORAGE_MODERN_INFO2);
levelData = levelData2;
} else {
switch(true) {
case (playData >= 1 && playData <= maxPlayId):
infoJSON = getStorage(STORAGE_MODERN_INFO+playData);
levelData = getPlayVerData(playData);
break;
case (playData == PLAY_DATA_USERDEF):
if(editLevels > 0) {
infoJSON = getStorage(STORAGE_USER_INFO);
levelData = editLevelData;
} else { //no any user created level !
playData = 1;
infoJSON = getStorage(STORAGE_MODERN_INFO1);
levelData = levelData1;
playData2MainMenuId();
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) {
@@ -93,59 +157,51 @@ function setModernInfo()
var infoObj = { l:curLevel};
var infoJSON = JSON.stringify(infoObj);
switch(playData) {
case 1:
setStorage(STORAGE_MODERN_INFO1, infoJSON);
switch(true) {
case (playData >= 1 && playData <= maxPlayId):
setStorage(STORAGE_MODERN_INFO + playData, infoJSON);
break;
case 2:
setStorage(STORAGE_MODERN_INFO2, infoJSON);
break;
case 3:
case (playData == PLAY_DATA_USERDEF):
setStorage(STORAGE_USER_INFO, infoJSON); //user created
break;
default:
debug("setModernInfo() design error !");
error(arguments.callee.name, "design error, value =" + playData );
break;
}
}
function clearModernInfo()
{
switch(playData) {
case 1:
clearStorage(STORAGE_MODERN_INFO1);
switch(true) {
case (playData >= 1 && playData <= maxPlayId):
clearStorage(STORAGE_MODERN_INFO+playData);
break;
case 2:
clearStorage(STORAGE_MODERN_INFO2);
break;
case 3:
case (playData == PLAY_DATA_USERDEF):
clearStorage(STORAGE_USER_INFO);
break;
default:
debug("setModernInfo() design error !");
error(arguments.callee.name, "design error, value =" + playData );
break;
}
}
}
function getModernScoreInfo()
{
var infoJSON, levelSize;
switch(playData) {
case 1:
infoJSON = getStorage(STORAGE_MODERN_SCORE_INFO1);
switch(true) {
case (playData >= 1 && playData <= maxPlayId):
infoJSON = getStorage(STORAGE_MODERN_SCORE_INFO+playData);
levelSize = levelData.length;
break;
case 2:
infoJSON = getStorage(STORAGE_MODERN_SCORE_INFO2);
levelSize = levelData.length;
break;
case 3:
break;
case (playData == PLAY_DATA_USERDEF):
infoJSON = getStorage(STORAGE_USER_SCORE_INFO); //user created
levelSize = MAX_EDIT_LEVEL;
break;
}
default:
error(arguments.callee.name, "design error, value =" + playData );
break;
}
if(infoJSON) {
modernScoreInfo = JSON.parse(infoJSON);
@@ -161,17 +217,33 @@ function setModernScoreInfo()
{
var infoJSON = JSON.stringify(modernScoreInfo);
switch(playData) {
case 1:
setStorage(STORAGE_MODERN_SCORE_INFO1, infoJSON);
switch(true) {
case (playData >= 1 && playData <= maxPlayId):
setStorage(STORAGE_MODERN_SCORE_INFO+playData, infoJSON);
break;
case 2:
setStorage(STORAGE_MODERN_SCORE_INFO2, infoJSON);
break;
case 3:
case (playData == PLAY_DATA_USERDEF):
setStorage(STORAGE_USER_SCORE_INFO, infoJSON);
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);
}
//=====================
@@ -284,6 +356,8 @@ function initNewLevelInfo(testInfo)
testInfo.levelMap = "";
testInfo.pass = 0;
testInfo.modified = 0;
testInfo.fromPlayData = -1;
testInfo.fromLevel = -1;
for(var i = 0; i < NO_OF_TILES_X * NO_OF_TILES_Y; i++)
testInfo.levelMap += " "; //empty map
}
@@ -310,6 +384,13 @@ function getTestLevel(testInfo)
testInfo.levelMap = infoObj.map;
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 ====================
var i = 0;
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++) {
string += testInfo.levelMap[i++];
}
debug('"' + string + '"');
//debug('"' + string + '"');
}
//END for debug ====================
@@ -339,7 +420,12 @@ function getTestLevel(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);
setStorage(STORAGE_TEST_LEVEL, infoJSON);
@@ -373,6 +459,75 @@ function createUserDefaultLevel()
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
//=========================