Fichiers
LodeRunner_TotalRecall/lodeRunner.key.js
T

328 lignes
8.7 KiB
JavaScript

var keyAction = ACT_STOP; //// keyLastLeftRight = ACT_RIGHT;
var shiftLevelNum = 0;
var runnerDebug = 0;
function pressShiftKey(code)
{
/*
// cheat key code disable 5/16/2015
switch(code) {
case "Period": // SHIFT + . = '>', next level
shiftLevelNum = 1;
gameState = GAME_NEXT_LEVEL;
break;
case "Comma": // SHIFT + , = '<', previous level
shiftLevelNum = 1;
gameState = GAME_PREV_LEVEL;
break;
case "ArrowUp": // SHIFT + UP, increase runner life
if (playMode == PLAY_CLASSIC && runnerLife < 10) {
runnerLife++;
drawLife();
}
break;
case "KeyX": // SHIFT + X
toggleTrapTile();
break;
case "KeyG": // SHIFT + G, toggle god mode
toggleGodMode();
break;
default:
if (runnerDebug) debugKeyPress(code);
break;
}
*/
}
function pressCtrlKey(code)
{
switch (code) {
case "KeyA": // CTRL-A : abort level
case "KeyQ":
gameState = GAME_RUNNER_DEAD;
break;
case "KeyC": // CTRL-C : copy current level
copyLevelMap = levelData[curLevel - 1];
copyLevelPassed = 1;
showTipsText("COPY MAP", 1500);
break;
case "KeyJ": // CTRL-J : gamepad toggle
toggleGamepadMode(1);
//if(gamepadIconObj) gamepadIconObj.updateGamepadImage();
break;
case "KeyK": // CTRL-K : repeat actions On/Off
toggleRepeatAction();
repeatActionIconObj.updateRepeatActionImage();
break;
case "KeyR": // CTRL-R : abort game
runnerLife = 1;
gameState = GAME_RUNNER_DEAD;
break;
case "KeyX": // CTRL-X
toggleTrapTile();
break;
// case "KeyZ": //CTRL-Z, toggle god mode
// toggleGodMode();
// break;
case "KeyS": // CTRL-S, toggle sound
if ((soundOff ^= 1) == 1) {
soundStop(soundDig);
soundStop(soundFall);
showTipsText("SOUND OFF", 1500);
} else {
showTipsText("SOUND ON", 1500);
}
soundIconObj.updateSoundImage();
break;
case "ArrowLeft": // CTRL + ← : speed down
setSpeed(-1);
break;
case "ArrowRight": // CTRL + → : speed up
setSpeed(1);
break;
case "KeyH": // CTRL-H : redHat mode on/off
toggleRedhatMode();
break;
case "Digit1":
case "Digit2":
case "Digit3":
case "Digit4":
case "Digit5":
themeColorChange(parseInt(code.slice(-1)) - 1);
break;
}
}
function debugKeyPress(code)
{
switch (code) {
case "Digit1":
shiftLevelNum = 5;
gameState = GAME_NEXT_LEVEL;
break;
case "Digit2":
shiftLevelNum = 10;
gameState = GAME_NEXT_LEVEL;
break;
case "Digit3":
shiftLevelNum = 20;
gameState = GAME_NEXT_LEVEL;
break;
case "Digit4":
shiftLevelNum = 50;
gameState = GAME_NEXT_LEVEL;
break;
case "Digit6":
shiftLevelNum = 5;
gameState = GAME_PREV_LEVEL;
break;
case "Digit7":
shiftLevelNum = 10;
gameState = GAME_PREV_LEVEL;
break;
case "Digit8":
shiftLevelNum = 20;
gameState = GAME_PREV_LEVEL;
break;
case "Digit9":
shiftLevelNum = 50;
gameState = GAME_PREV_LEVEL;
break;
}
}
var repeatAction = 0; //1: keyboard repeat on, 0: keyboard repeat Off
var repeatActionPressed = 0;
var gamepadMode = 1; //0: disable, 1: enable
var redhatMode = 1;
var godMode = 0, godModeKeyPressed = 0;
function initHotKeyVariable()
{
godMode = 0;
godModeKeyPressed = 0;
repeatActionPressed = 0;
}
function toggleRepeatAction()
{
if ((repeatAction ^= 1) == 1) {
showTipsText("REPEAT ACTIONS ON", 2500);
} else {
showTipsText("REPEAT ACTIONS OFF", 2500);
}
if (gameState != GAME_START) repeatActionPressed = 1;
setRepeatAction();
}
function toggleGamepadMode(textMsg)
{
if (!gamepadSupport()) {
if (textMsg) showTipsText("GAMEPAD NOT SUPPORTED", 2500);
gamepadMode = 0;
} else {
if ((gamepadMode ^= 1) == 1) {
gamepadEnable();
if (textMsg) showTipsText("GAMEPAD ON", 2500);
} else {
gamepadDisable();
if (textMsg) showTipsText("GAMEPAD OFF", 2500);
}
}
setGamepadMode();
}
function toggleRedhatMode()
{
if ((redhatMode ^= 1) == 1) {
for (var i = 0; i < guardCount; i++) {
guard[i].sprite.spriteSheet = guard[i].hasGold > 0 ? redhatData : guardData;
}
showTipsText("REDHAT MODE ON", 1500);
} else {
for (var i = 0; i < guardCount; i++) {
guard[i].sprite.spriteSheet = guardData;
}
showTipsText("REDHAT MODE OFF", 1500);
}
}
function toggleGodMode()
{
godModeKeyPressed = 1;
sometimePlayInGodMode = 1;
godMode ^= 1;
showTipsText(godMode ? "GOD MODE ON" : "GOD MODE OFF", 1500);
}
function setSpeed(v)
{
speed += v;
if (speed < 0) speed = 0;
if (speed >= speedMode.length) speed = speedMode.length - 1;
createjs.Ticker.setFPS(speedMode[speed]);
showTipsText(speedText[speed], 1500);
}
function helpCallBack()
{
pressKey("Escape");
}
function pressKey(code)
{
switch (code) {
case "KeyA":
case "ArrowLeft":
case "KeyJ":
keyAction = ACT_LEFT;
break;
case "ArrowRight":
case "KeyL":
case "KeyD":
keyAction = ACT_RIGHT;
break;
case "KeyW":
case "ArrowUp":
case "KeyI":
keyAction = ACT_UP;
break;
case "ArrowDown":
case "KeyK":
case "KeyS":
keyAction = ACT_DOWN;
break;
case "KeyZ":
case "KeyQ":
case "KeyU":
case "KeyY": //Y key to dig left, for German keyboards
case "Comma":
case "ControlRight":
keyAction = ACT_DIG_LEFT;
break;
case "KeyX":
case "KeyO":
case "KeyE":
case "Period":
case "Numpad0":
case "End":
keyAction = ACT_DIG_RIGHT;
break;
case "Escape": //help & pause
if (gameState == GAME_PAUSE) {
gameResume();
showTipsText("", 1000); //clear text
} else {
gamePause();
showTipsText("PAUSE", 0); //display "PAUSE"
}
break;
case "Enter": //display hi-score
if (playMode == PLAY_CLASSIC) {
menuIconDisable(1);
gamePause();
showScoreTable(playData, null, function () {
menuIconEnable();
gameResume();
});
return; //don't record this key code !
} else {
keyAction = ACT_UNKNOWN;
//debug("keycode = " + code);
}
break;
default:
keyAction = ACT_UNKNOWN;
break;
}
if (recordMode && code !== "Escape") saveKeyCode(code, keyAction);
}
function gameResume()
{
gameState = lastGameState;
soundResume(soundFall);
soundResume(soundDig);
}
function gamePause()
{
lastGameState = gameState;
gameState = GAME_PAUSE;
soundPause(soundFall);
soundPause(soundDig);
}
function handleKeyDown(event)
{
if (!event) event = window.event;
const key = event.key;
const code = event.code;
if (event.shiftKey) {
if (gameState == GAME_START || gameState == GAME_RUNNING) {
pressShiftKey(code);
}
} else if (event.ctrlKey && key != "Control" && // if CTRL with another key
(gameState == GAME_START || gameState == GAME_RUNNING) ) {
pressCtrlKey(code);
}else if ((gameState == GAME_PAUSE && code === "Escape") ||
gameState == GAME_START || gameState == GAME_RUNNING) {
if (recordMode != RECORD_PLAY && playMode != PLAY_AUTO) {
pressKey(code);
}
}
if (key.startsWith("F") && key !== "F") return true; // allow F1... F12
return false;
}
function handleKeyUp(event)
{
if (repeatAction) return true;
if (!event) event = window.event;
const key = event.key;
if (recordKeyCode === event.code && keyPressed != -1) keyPressed = 0;
return true;
}