本文へジャンプ

パックマン・ドシエの邦訳について

英語圏ではその筋で有名なThe Pac-Man Dossierという興味深い資料があります:

このガイドの目的は、パターンを使わずともプレイできるよう、パックマンについて理解をより深めてもらうことにあり、ゲームの流れ、迷路ロジック、ゴーストの個性、神秘的な“split screen”レベルについて詳しくみていきます。...提供するすべての情報は、オリジナルのPac-ManコードROMからの逆アセンブル出力と、実際にゲームプレイの実験的観察から抽出/検証されたものです。よって著者は、その精度に高い自信を持っています。

日本発祥の有名なゲームながら、国内ではこのような資料は見つけることはできず、そこで私は翻訳を試みようと思い立ちました。英語が得意ではないため、機械翻翻にかけた訳文を修正したものですが…

そのほかの興味深い資料:

上記のAI学会誌で仕様書が公開されていますが、実際と食い違う部分があります。

自作パックマン(HTML5+CSS3+JS/ES2022)

上述の資料を参考に、PAC-MANをアレンジしたクローンゲームを作ってみました。

視覚的要素をCSSに委ねて、簡潔なスクリプトで実装する試みです。

DOMベースでの実装で、Canvas APIはほとんど使用していません。

16×16のドット絵ではなく、HD画面に堪えるスプライトシート(PNG)を制作しました。

ラスター画像ですが、CSSの 'transform' は良い感じにスケーリングしてくれます。

また、CSSはアニメーション、フィルター、そしてトランジションの効果を容易に表現可能であり、なるべく再描画処理を発生させずにGPUで処理しています。要するにスクリプトですべきことを少なくできます。

パックマンの消滅アニメーションのみ、Canvas APIを使用しています。

フルーツ類の一部はShaun Williams氏のスプライトを少し改変して使用しています。

推奨環境

最新のPC向けChromium系ブラウザを推奨します。スマホは非対応です。

後方互換性を無視しているので、旧いブラウザでは動作しません。

開発者ツールを起動していると動作が重くなることがあります。

もっさりする場合は、“ハードウェア アクセラレーション”を有効にしてください。

それでも重いなら chrome://flags (スキーム名はブラウザごとに異なる)の設定で:

  • Over­ride soft­ware rendering list

これをEnableにしてみてください。設定の変更は自己責任でお願いします。

ユーザスタイルシートは適用されないようにしてください。

設定項目/操作

Only this level

オフであれば連続プレイになる
オンなら選択されたレベルをクリア後、タイトル画面に戻る

Power cookies

パワークッキーの有無

Always chase mode

常に追跡モード(縄張モードなし)

Clear storage

ローカルストレージを消すかどうかの確認
設定状態やハイスコアがクリアされます

About keys

プレイ中の操作説明:

M ミュート
Esc 一時停止
Del 終了するかどうかの確認ダイアログを表示
Ctrl+Del 強制的にリセットしてタイトル画面に戻る
パックマンを導く方向(AWSDでも操作可能)

拡大 縮小トグル

ヴューポートにフィット/実サイズに戻す

設定パネル

設定パネルを開きます:

Volume 音量調整
Speed ゲームの進行速度 0.5~1.2倍
PacLives ライフ 1~5(迷路にいるぶんも含む)
Extend ライフがひとつ増えるスコア
Invincible 無敵モード
Unrestricted ghosts ゴーストのターン制限をなくす
Show targets ゴーストが目指すターゲットタイルの表示
Show tile grid タイルのグリッドを表示
Attract demo アトラクト デモの再生
Coffee Break 1-3 コーヒーブレイクの再生
Return to Default デフォルト設定に戻す

Unrestricted ghostsを有効にすると極端に難しくなるので、あまりお奨めはしません。岩谷氏率いるナムコの開発チームがバランス調整に労力を費やした結果、ゴーストの進入禁止エリアがあるのです。

練習モード(PRACTICE)について

練習モードでは、上端にあるハイスコア表示の代わりにPRACTICEと表示されます。

切り替わる条件は以下のとおりです:

  • 連続プレイではない(すなわち Only this level がオンの)とき
  • または連続プレイにおいて途中のレベルから始めるとき
  • Speedが0.6以下、Invincible または Show targetsがオンのとき

練習モードではレベル間のコーヒーブレイクは実行されません。

2人交互プレイ

2人交互プレイは実装してません。スコアは1UPだけの1行表示です。

横画面(16:9など)で可能なかぎり縦長の盤面を大きく表示したかったのです。

クレジットの概念はありません。

ゲームを開始するには矢印キーを押してください。

アトラクト デモ

タイトル画面でなにも操作せず放置すると、30秒ほどで始まるようにしています。

ページを読み込んで毎回すぐに動き出すと煩わしいからです。

すぐにご覧になりたいときは ハンバーガーボタンを押してください。コーヒーブレイクも観れます。

プレイデモはありません。ウェブでは必要不可欠ではないでしょう。

ゲームレベル

難易度はレベル1~13まで13段階としており、13以後は同じ難易度の繰り返しです。

レベル255をクリアすると一周してレベル1に戻ります(誰も続けないと思いますが…)。

原作ではレベル21まで難易度が上昇します(cf. 付録の表A.1)。

メニュー選択でお好みのレベルから始められますが、途中からだと練習モードになります。

“Only this level”をオンにすると、次のレベルに進まずタイトル画面に戻ります。

縄張/追跡モード

“常に追跡モード”がオフのときは、おおむね原作のとおりです。

しかし原作より移動が速いため、縄張/追跡モードの各期間は短めです。

次の表は各期間の長さをまとめたものです(単位は秒):

モード レベル
1
レベル
2-4
レベル
5+
1 縄張 4.5 4.5 3.5
追跡 15.0 15.0 15.0
2 縄張 4.5 4.5 3.5
追跡 15.0 15.0 15.0
3 縄張 3.5 3.5 3.5
追跡 15.0 780 780
4 縄張 3.0 1/60 1/60
追跡 無限 無限 無限

このゲームはフレーム数で時間を計算しているため、時間はすべて目安です。

原作の仕様はDossierの第2章を参照のこと。

巣からの開放

ドットカウンター/グローバル・ドットカウンターを原作のとおり実装しています。

したがってハウストリックを再現できます。

タイマー制限も原作同様にレベル1~4までは4秒、レベル5以降では3秒です。

これはドットを食べたり、優先ゴーストを開放するごとにゼロにリセットされます。

ただし“常に追跡モード”では次の表のとおり、時間で開放されます(単位はミリ秒):

レベル ピンキー アオスケ グズタ
ミス 1000 500 500
01 1000 4000 4000
02 800 2200 4000
03 600 1900 3500
04 600 1900 1500
05 500 1300 1200
06 500 1300 1200
07 300 700 800
08 300 700 800
09 200 800 200
10 200 800 200
11 100 700 200
12 100 700 200
13+ 0 900 0

それぞれの時間があらわす意味は以下の通りです:

  • ピンキー……ラウンド開始時からの経過時間
  • アオスケ……ピンキーが開放されてからの経過時間
  • グズタ……アオスケが開放されてからの経過時間

イジケモード

下記の表は各レベルのイジケタイム(秒)です:

レベル 1 2 3 4 5 6 7 8 9 10 11 12 13+
6 5 4 3 2 5 2 2 1 5 2 1 0

レベル5、9をクリアしたあと、コーヒーブレイクを挟んだ6、10は5秒に延長されます。

レベル13以降ではイジケなくなり、進行方向を反転するだけです(原作での17、19以降に相当)。

ただしゼロ秒のときは400ミリ秒のあいだ、パックマンから遠ざかるようにしています。

原作のレベル仕様は付録の表A.1を参照のこと。

ゴーストの経路探索と個性

おおむね原作のとおりゴーストの経路探索と個性を再現しています。

ただしピンキーは“待ちぶせ”という個性を活かして、
パックマンがトンネルに入ると目標を彼から反対側の出口に切り替えて先回りします。

また、迷路の右上端にターゲットがあるときは、巣の周囲にいるゴーストを左へ出すようにしています。

巣の上部では左右方向にしか進めず、そのせいで巣の周囲を回り続けるのを回避するためです。

イジケゴーストの曲がる方向を決める擬似乱数ジェネレータは再現していません。

占有タイルと当たり判定

当たり判定は占有タイルではなく、円の当たり判定を採用しています。

追跡中のゴーストは小さめの半径、逆にイジケに対して判定を大きくしています。

ターン中などに稀にすり抜けますが、あえて小さい判定にしています。

コーナリング

パックマンのプリターン/ポストターンをそれっぽく実装しています。

壁のある方向に矢印キーあるいはAWSDを押すと次のターンを予約でき、曲がれる交差点のタイルに達するとパックマンが自動的に曲がります(原作とは異なりますが、操作しやすいので)。

ただし、ターンの開始位置と終了位置のタイミングは大雑把で、曲がり角の中心から前後に2、3歩程度しかありません。標準設定では原作のパックマンより歩幅が広く、移動が速いからです。

移動速度

標準設定ではすべてのレベルを通して原作より移動速度が速くなっています。

レベル1~13までの13段階で徐々に速くなります(原作では4段階)。

通常時のゴーストはパックマンに対して102%の速度で移動します。

レベル13以降では、パックマンの速度はゴーストに対して約93%に落ちます。

無理ゲーにならいようにバランス調整している積もりです。ゴーストとの当たり判定が小さいのでギリギリかわせたり、プリターンを連続すると引き離せます。緊急回避用通路に逃げ込むのも手です。

慣れてくるとゴーストの行動を先読みしたり、誘導することもできます。

状況による相対的な速度変化は下記のとおりです:

パックマン
ドットを食べる
0.86倍
イジケタイム
1.10倍
イジケ+ドット
0.95倍
ゴースト
イジケゴースト
0.65倍
トンネル通過中
0.60倍
巣にもどる目玉
およそ1.40倍

忠実な再現にはこだわらず、個人的に遊んで楽しい速度/バランスにしています。

シンプルなゲーム内容に反して、細かいバランス調整が施されている奥の深いゲームであるため、JavaScriptのようなスクリプト言語で忠実にエミュレーションするのは不可能に近いと思います。

原作のレベル仕様は付録の表A.1を参照のこと。

アカベエのスパート

アカベエはレベルごとに3回速度を上げます(原作は2段階)。

後のレベルほど、より多くの残りドットでスパートが発動します。

次の表に発動するドットの残り数と速度の係数をまとめたした:

Lv. 第1 第2 第3
01 30 20 10
02 30 20 10
03 45 30 15
04 60 40 20
05 75 50 25
06 90 60 30
07 105 70 35
08 105 70 35
09 120 80 40
10 135 90 45
11 150 100 50
12 165 110 55
13+ 180 120 60
速度 1.02 1.05 1.10

第2段階以上ではアカベエは発光し、縄張モードでもプレイヤーを追跡します。

ただし縄張/追跡モードの切り替え時には進行方向を反転します。

発動後にミスすると、再開後はグズタが巣を出るまでスパートは発動しません。

原作のレベル仕様は付録の表A.1を参照のこと。

攻略パターン

原作のパターンは使えませんが、別の攻略パターンがあるかもしれません。しかし、原作の開発者が想定外だったように、私も想定していません。仕様変更でパターンが変わる可能性もあります。

また、ゲームスピードを変更するとパターンが変化します。フレーム数を間引いたりせず、滑らかに移動させるために歩幅の大きさで速度調整しているため微妙な誤差が生じます。

パターンを実行するだけなら忍耐力を競うだけになり、ゲーム性が失われてしまいます。それよりも思い思いに操作し、その場その場でゴーストの行動を読むほうが面白いと私は思っています。

inserted by FC2 system