TL;DR
一例として、Lonely T-Rexくんがレーザーを撃てるようになります。下のgif画像はちょっとコマ落ちしてるのでレーザーが見えづらいですが
はじめに
ウェブブラウザ Google Chrome には恐竜ゲームと呼ばれるイースターエッグが存在します。インターネット接続がないときのエラー画面でスペースキーを押して横スクロールアクションゲームを楽しむことができます。こんな感じでジャンプしたりしゃがんだりしながらなるべく遠くまで走って行くゲームです。
また、アドレスバーに chrome://dino/ と入力することでオンライン状態でもゲームを遊ぶことができます。
それではチートを使っていきましょう。F12キーで開発者ツールを開き、以下に掲載しているコードを入力してみてください。
走行速度を変更する
Runner.instance_.setSpeed(XXX) // default: 6
XXX
には好きな数値を入れてください。
ちなみに速度をマイナスにすると後ろに走って行きます。
ジャンプ速度を変更する
Runner.instance_.tRex.setJumpVelocity(XXX) // default: 12
重力を変更する
Runner.instance_.tRex.config.GRAVITY = XXX // default: 0.6
ティラノを浮かす
Runner.instance_.tRex.groundYPos = XXX // default: 93 (15以下に設定すると何にもぶつからなくなる)
不死身化
Runner.prototype.gameOver = () => {}
全自動化 by BetaHuhn@codepen
/**
* SOURCE: https://codepen.io/BetaHuhn/pen/ZEQgrjq
* ORIGINALLY CREATED BY BetaHuhn
*/
function autoPlayLoop() {
const instance = window.Runner.instance_;
const tRex = instance.tRex;
const currentSpeed = instance.currentSpeed;
const jumpSpeed = 50;
const jumpThreshold = 50 + currentSpeed * currentSpeed;
if (tRex.jumping) {
requestAnimationFrame(autoPlayLoop);
return;
}
const tRexPos = tRex.xPos;
const obstacles = instance.horizon.obstacles;
const nextObstacle = obstacles.find((o) => o.xPos > tRexPos);
if (nextObstacle && nextObstacle.xPos - tRexPos <= jumpThreshold) /* 障害物が十分近づいてきたら */ {
if (nextObstacle.typeConfig.type === 'PTERODACTYL') {
if (nextObstacle.yPos === 75 && !tRex.ducking) /* しゃがんでよけるタイプの鳥の場合 */ {
tRex.setDuck(true);
} else if (nextObstacle.yPos === 100) /* 低空飛行タイプの鳥の場合 */ {
tRex.startJump(jumpSpeed);
}
} else /* サボテンの場合 */ {
tRex.startJump(jumpSpeed);
}
} else if (tRex.ducking && obstacles[0].xPos - tRexPos < -40) {
/* 鳥が過ぎ去ったらしゃがみ解除 */
tRex.setDuck(false);
}
requestAnimationFrame(autoPlayLoop);
};
requestAnimationFrame(autoPlayLoop);
ソースコード中にチラッと出てきてますが、この鳥↓はプテロダクティルスだったんですね。
レーザーを撃てるようにする by yaakovm@github
/**
* ORIGINAL SOURCE: https://gist.github.com/JARVIS-AI/cfb916c7dc3bea73abf0edac42749ea8?permalink_comment_id=4187133#gistcomment-4187133
* ORIGINALLY CREATED BY yaakovm
*/
// Dキーが押されたらレーザー射出
window.addEventListener(
"keydown",
event => { if (event.code == "KeyD") drawline() }
);
originalClearCanvas = Runner.instance_.clearCanvas;
function drawline() {
if (Runner.instance_.horizon.obstacles.length > 0) {
// 勝手に再描画されないようにする
Runner.instance_.clearCanvas = () => {};
// レーザーの描画
Runner.instance_.canvasCtx.beginPath();
Runner.instance_.canvasCtx.moveTo(Runner.instance_.tRex.xPos + 23, Runner.instance_.tRex.yPos + 20);
Runner.instance_.canvasCtx.lineTo(Runner.instance_.horizon.obstacles[0].xPos + 10, Runner.instance_.horizon.obstacles[0].yPos + 10);
Runner.instance_.canvasCtx.stroke();
// 15ミリ秒だけレーザーを表示したら再描画する
setTimeout(() => Runner.instance_.clearCanvas = originalClearCanvas, 15);
// レーザーの当たった物体を消去
Runner.instance_.horizon.removeFirstObstacle();
}
}
おわりに
新しいチートのアイデア募集中です。🌵₍₍⁽⁽🦖₎₎⁾⁾🌵