
パート0.すべての始まり
かつて、私が知っていることの1つとして、Angry Birdsスクリプトを詳しく調べたいと思っていました。 もちろん、私は内部のいくつかの興味深いことにつまずくと期待していましたが、その中には非常に実用的なレベルのエディターがいるとは考えられませんでした。 最初に、このような結果が得られた方法を説明し、記事の最後でエディターの説明とスクリーンショットを提供し、エディターを有効にする簡単な方法を説明します。
パート1.プロセス
料理
さらに作業を進めるには、次のツールが必要です。
私たちはAngry Birds RioまたはAngry Birds Spaceと協力します。なぜなら、 エディターに必要なほぼすべてのファイルが含まれています。
これがすべて利用できる場合は、次に進みます。
記事の最初の部分を読むのに飽きている場合は、2番目の部分までスクロールしてください。目標として、ファイルデータ\スクリプト\ options.luaを選択します。 その内容は、自由に変更できる変数のリストにすぎません。 ファイルを見てみましょうが、何も理解できません。 ファイルはおそらく暗号化されています。
復号化
ゲームの特定のバージョンから、すべてのファイルは、コードに埋め込まれた空の初期ベクトルとキーを持つ256ビットAES CBCアルゴリズムで暗号化されます。 デバッガーをいじくりたい人がいれば、プロセスの詳細な説明は
こちらです。
復号化にはOpenSSLを使用しました。
復号化のサンプルバッチファイル怒っている鳥リオ:
openssl enc -K 55534361505170413454534E56784D49317639534B39554330795A75416E6232 -iv 00 -d -aes-256-cbc -in %1 -out %1dec.lua
怒っている鳥のスペース:
openssl enc -K 526D67645A304A656E4C466757776B5976434C326C5361684662456846656334 -iv 00 -d -aes-256-cbc -in %1 -out %1dec.lua
怒っている鳥の季節:
openssl enc -K 7A65506865737435666151755832533241707265403472654368417445765574 -iv 00 -d -aes-256-cbc -in %1 -out %1dec.lua
暗号化の場合、それぞれ-dスイッチを削除します。
この手順の後、完全に読み取り可能なluaスクリプトを取得します。コンパイルされるのは残念です。 ヘッダーを見てください。LuaQを参照してください。したがって、これはLua 5.1です。
逆コンパイル
それは簡単に思えます。 デコンパイラの1つをダウンロードし、結果のファイルに設定します。 いえいえ luac -lを使用してコンパイル済みのoptions.luaリストを取得してみましょう。
luac: options.luadec.lua: bad header in precompiled chunk
ご覧のとおり、ヘッダーが破損しています。 おそらく、別のバージョンのコンパイラが必要になります。おそらく、私が考慮しなかった別のバージョンです。 luaではほとんどコーディングしませんでした。 事実は残っています。 ファイルのヘッダーを、他のコンパイルされたluaのヘッダーと比較します。

この08の意味を詳しく説明することなく、04に変更してリストを取得してください。 出来上がり:
main <?:0,0> (31 instructions, 124 bytes at 00346070) 0+ params, 2 slots, 0 upvalues, 0 locals, 22 constants, 0 functions 1 [-] GETGLOBAL 0 -1 ; gamelua 2 [-] SETTABLE 0 -2 -3 ; "releaseBuild" true 3 [-] GETGLOBAL 0 -1 ; gamelua 4 [-] SETTABLE 0 -4 -5 ; "showEditor" false ...
同じファイルをより読みやすい形式で作成します。
gamelua.releaseBuild = true gamelua.showEditor = false gamelua.cheatsEnabled = false gamelua.useDynamicAssets = false gamelua.isPremium = false gamelua.isKorea = false gamelua.applyChinaRestictions = false gamelua.gameVersionNumber = "1.4.4" gamelua.customerString = "rovio" gamelua.svnRevisionNumber = "93049" gamelua.isSeasonsAvailable = true gamelua.g_registrationEnabled = true gamelua.g_updateCheckEnabled = true gamelua.loadMightyEagle = true filename = "options.lua"
ここでは、いくつかの興味深い変数、つまりreleaseBuild、showEditor、およびcheatsEnabledが既に表示されています。 それらを変更し、すべてを回収します。
そのまま収集
最初は、このようなコンテンツを使用して独自のスクリプトをコンパイルし、タイトルを微調整して暗号化するだけでした。 しかし、どういうわけかうまくいかず、ゲームは私のファイルをoptions.luaに取りたくありませんでした。 解決策は簡単であることがわかりました-16進エディターで元のファイルを修正します。 どのような方法ではありませんが、私たちの目的のためにそれを行います。 そのため、修正し、リストを確認し、タイトルを返し、暗号化し、ゲームに戻します。
パート2.結果
ゲームに入り、すぐにメインメニューにいくつかの変更が表示されます。

「エディター」をクリックして、変更可能なレベルのリストを表示します。 下の矢印はレベルパッケージをスクロールするので、空いているパッケージの1つで独自のレベルを作成できます。

レベルの1つをクリックして、エディターに直接アクセスします。


厚くない、言わなければならない。 インターフェイスからは、いくつかのラベルと表記のみがあります。 主な作業はホットキーを使用して行われます。 あらゆる種類のキーを30分間突いて、簡単に説明しました。
オブジェクトを操作する | |
---|
12 | 石の構造物を置きます |
QW | 木構造を配置する |
として | ガラス構造を配置する |
NM | 砂ブロックを置きます |
ZX、JK | ポストシーナリー |
34 | 鳥を置きます |
タイ | 敵とロックされた鳥を配置します(ゲームメカニクスでも同じです) |
UI | アクティブなオブジェクトを配置する |
OP | 賞を投稿する |
削除する | オブジェクトを削除 |
シフト+ r | オブジェクトを回転させる |
カメラ |
---|
ctrl + shift + c | センターカメラ |
ctrl + shift + b | 全レベルを表示 |
その他 |
---|
タブ | 物理を有効/無効にする |
シフト+ t | 背景を変更する |
Shift + s | 凍結(???) |
ctrl + s | 保存レベル |
終わり | クイックエンド(???) |
ほとんどの場合、これらはすべてホットキーではなく、他を検索できます。
落とし穴
エディタは完璧にはほど遠いです。 エディターのリソースの一部が欠落しているため、特定のキーを押すと、ゲームが突然終了する場合があります。 少なくともRioバージョンでは、エディターはレベルをコンパイルされていない形式で保存するため、ゲームでレベルを表示するには、まず必要なバージョンのコンパイラーでレベルをコンパイルし、暗号化する必要があります。 デューデリジェンスを使用すると、コンパイルされていない形式のレベルを使用するようにゲームを微調整することができますが、これはこの記事の範囲をはるかに超えています。 また、エディタ内でパチンコを動かす方法を見つけられませんでした。 これはおそらく、レベルファイルを直接編集することによってのみ実行できます。
怒っている鳥のスペース
このバージョンでは、エディターが大幅に改善され、オブジェクトプロパティのメニューが機能するようになり、センサーが登場し、エディターでの作業がより便利になり、特別なオブジェクトエディターが登場しました。 ただし、編集者は定期的にバグがあります。 このバージョンでレベルの保存が修復されたかどうかは確認しませんでしたが、読者に任せます。
Spaceバージョンのスクリーンショット:


ベルベットの道
読者が自分で作業を繰り返すことはお勧めしません。 エディターを有効にするには、
このアーカイブをダウンロードして、options.luaファイルをアーカイブの対応するファイルに置き換えるだけです。 これらのファイルがチェックされるゲームのバージョン:Angry Birds Space 1.2.0およびAngry Birds Rio 1.4.4
ご注意操作を実行する前に、保存を含むゲームファイルをバックアップすることを強くお勧めします。 第一に、ゲームの元のレベルを台無しにすることができ、第二に、この置換にはチートも含まれます。 チートを使用するには、数字キーを押します。 チートには、たとえば、ゲーム全体をすぐに通過するものや、すべての報酬を与えるものがあります。 進行状況をすべて失いたくない場合は、バックアップを作成します。