【Chrome】"恐竜ゲーム"チート集🦖🌵

# TL;DR
一例として、Lonely T-Rexくんが**レーザーを撃てるようになります。**<font color="lightgray">下のgif画像はちょっとコマ落ちしてるのでレーザーが見えづらいですが</font>
![laser.cut.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507500/a250a5f8-0511-9cf0-17a4-053a1eef12c3.gif)

# はじめに
ウェブブラウザ **Google Chrome** には**恐竜ゲーム**と呼ばれるイースターエッグが存在します。インターネット接続がないときのエラー画面でスペースキーを押して横スクロールアクションゲームを楽しむことができます。こんな感じでジャンプしたりしゃがんだりしながらなるべく遠くまで走って行くゲームです。
![network_error.cut.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507500/d8044302-3b78-006e-ed57-73cc15c71ea0.gif)
また、アドレスバーに **chrome://dino/** と入力することでオンライン状態でもゲームを遊ぶことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507500/6831def0-9d0f-b5fa-6721-8a51f854f811.png)
それではチートを使っていきましょう。**F12**キーで**開発者ツール**を開き、以下に掲載しているコードを入力してみてください。

# 走行速度を変更する

```javascript
Runner.instance_.setSpeed(XXX) // default: 6
```

```XXX```には好きな数値を入れてください。

- 速度20
![velocity20.cut.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507500/703354f0-4632-5e2b-7124-cc4c1402bff8.gif)


ちなみに速度をマイナスにすると後ろに走って行きます。

# ジャンプ速度を変更する

```javascript
Runner.instance_.tRex.setJumpVelocity(XXX) // default: 12
```

- 速度20
![jumpv20.cut.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507500/a3dbab85-68a7-ffa0-23c9-6df9f8f20179.gif)

# 重力を変更する

```javascript
Runner.instance_.tRex.config.GRAVITY = XXX // default: 0.6
```

- 重力0.2
![g02.cut.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507500/77d9690c-7521-9bec-9215-15036b8cf8fa.gif)

# ティラノを浮かす

```javascript
Runner.instance_.tRex.groundYPos = XXX // default: 93 (15以下に設定すると何にもぶつからなくなる)
```

![gypos15.cut.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507500/c1fc30b1-cc52-4fdd-776c-3632f17c478e.gif)

# 不死身化

```javascript
Runner.prototype.gameOver = () => {}
```

![invincible.cut.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507500/c5ca1883-71d6-c3a5-4da7-6b7ce81835cd.gif)

# 全自動化 by BetaHuhn@codepen

```javascript
/**
 * 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);
```

![auto.cut.compressed.compressed.compressed.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507500/241a6062-e880-f79b-f818-939e62254e13.gif)
ソースコード中にチラッと出てきてますが、この鳥↓は[プテロダクティルス](https://ja.wikipedia.org/wiki/プテロダクティルス)だったんですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507500/12162e10-9639-4060-b67e-ef00ab507017.png)

# <font color="red">レーザーを撃てる</font>ようにする by yaakovm@github

```javascript
/**
 * 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();
    }
}
```

![laser.cut.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507500/a250a5f8-0511-9cf0-17a4-053a1eef12c3.gif)

# おわりに
新しいチートのアイデア募集中です。🌵₍₍⁽⁽🦖₎₎⁾⁾🌵