読者です 読者をやめる 読者になる 読者になる

Itsukaraの日記

最新IT技術を勉強・実践中。最近はDeep Learningに注力。

Montezuma's Revengeで27,900点とれました!

Montezuma's Revengeで27,900点とれました。下記はLevel2の最初の部屋です。

f:id:Itsukara:20160918233501j:plain

...といっても、DRL(Deep Reinforcement Learning)ではなく、ゲームエミュレータStellaで当方がプレイしたお話しです。しかも、当方のゲームスキルで27,900点とれるわけもなく、cheat codeを使ったお話です。

背景

現在、Montezuma's RevengeをDRLのターゲットにしていますが、ゲームの内容が分かった方が良いと思いプレイしてみました。しかし、結構難しく、なかなか先に進めませんでした。そこで、Stellaのdebugeer機能cheat code機能を使い、ライフを減らないようにしてみました。本記事では、その方法を記載します。

debugger機能の使い方

stellaのdebugger機能の使い方と、これを使ったcheat codeの作り方に関しては、この記事を見ていただければ、直ぐに分かると思います。

以下、当方がやったことを書きますが、dubugger機能ではcheat codeが分かればよいので、これを読んでいる方がdebugger機能を使う必要はありません。

記事を参考に、debuggerを使って、Montezuma's Revengeのライフの数のアドレスを調べた結果、"$ba"であることが直ぐに分かりました。

次に、debuggerの画面左側のコンソールで"trapwrite $ba"と"run"を入力してプレイを再開しライフを減らしたところ、アドレス"$b5e1"の命令"DEC $BA"がライフ数を書き換えていることが分かりました。そこで、記事に沿って、これを2個の"NOP命令" ($EA)で置き換えてプレイしたところ、ライフが減らなくなりました。

この場合のcheat codeは、"0b5e1ea1"です(cheat codeは複数の形式がありますが、ここでは8バイト形式を使いました)。

ちなみに、debuggerを起動するには、ゲームプレイ画面でキーボードの"~"を押すと記事に書いてあるのですが、日本語キーボードでは、うまくいかないため、この記事を参考に、キーボード配列を英語キーボードにしました。そのうえで、英語キーボードの"~"に相当する「半角/全角/漢字」キーを押してdebuggerを起動。なお、cheat codeが分かったらdebugerは不要ですので、キーボード配列を元に戻した方がよいです。

cheat code機能の使い方

ゲームをプレイする度にdebuggerを使うは面倒なので、その代替手段として、debuggerで行った処理を表現するcheat codeを使うことで、簡単にライフ数減を抑止できます。以下、その方法です。

ゲームプレイ画面でTABキーを押すと、下記メニューが表示されます。
f:id:Itsukara:20160919001058j:plain

上記で"Cheat Code"というボタンを押すことで、"Cheat Code Manager"の画面が表示されますので、"Add"ボタンを押すとcheat codeを追加できます。cheat code "0b5e1ea1"を下記のように入力してください。なお、Nameは別名でOKです。
f:id:Itsukara:20160919001256j:plain

あとは、"OK"を押して下記の"Cheat Code Manager"の画面に戻ります。
f:id:Itsukara:20160919001416j:plain

上記でOKを押すとメニュー画面に戻りますので、"Exit Menu"を押せば、ライフが減らずにプレイできます。

ゲームを終えるときは、必ず、プレイ画面でControl-Qを押して終了してください。

Stellaを再度起動した際は、プレイ画面に入り、TABキーで"Cheat Code Manager"画面を出し、先ほど入力したcheat codeの左側のチェックマークを「外します」。

チェックマークを「入れる」ではなく、「外す」とcheat codeが有効になるのはバグではないかと思います。

なお、一度"Cheat Code"の登録すれば、ずっと使えるはずなのですが、バグがあるらしく、ゲームプレイ画面でQuit (Control-Q)を押して終了しないと、次にStellaを起動したときに、cheat codeが見れません。誤って、cheat codeが見れなくなった場合は、再度cheat codeを入力してください。

Montezuma Revengeのプレイ上の注意点

  • 真っ暗な部屋にたどり着くことがあります。これは、松明(torch)を入手していないためです。
    • マップの上から2段目の真ん中の部屋に、松明があります。これがないと、部屋が真っ暗で、よく見えません。
  • 最適なルートはマップに記載されています。これ以外のルートを通ると、最後の部屋(下記)で鍵が不足し、Level1をクリアできません。

f:id:Itsukara:20160919005302j:plain

  • アイテムの所持数(画面上部にアイテムが表示されている)には制限があります。アイテムが満杯の場合、所持しないアイテム(宝石等)もとることができなくなります。

おわりに

DRLで学習させると、迷路全体の右側の方に行くことが多くなります。DeepMindの論文でも同様です。しかし、先に右側に行くと、鍵が不足し、Level1をクリアできません。DRLでLevel1をクリアできるようになるのは、かなり難しいと思います。