こちらのチュートリアルに挑戦してみました。
「Making a better interaction - Entries, exits, skills and motives 」 by echo
http://www.modthesims2.com/showthread.php?t=222531
内容も、だんだん難しくなってきましたよ。
説明文も出来る限り訳そうとしたんですけど、英語能力が足りなかったりでかなり意訳になってます。
原文チュートリアルをいつでも参照できる状態で、お試しください。
日記2でやっているチュートリアルをすでにやっていることが前提です。
それから「Data Types for Simantics Users」も、出来れば読んでおいた方がいいみたいです。
一応一通り読んでみたんですけど、私にはまだ難しすぎる内容でした;
「Data Types for Simantics Users」 by echo
http://www.modthesims2.com/showthread.php?t=212101
■Revision and preparation
【1】
チュートリアルではすでにデフォオブジェクトをクローンして、新しいパイメニューとBHAVを作ったところから始まってます。
前回の復習もかねて、チュートリアル通りのものを用意していきます。
今回クローンするのは、「彫像」カテゴリにあるヴィーナス像みたいなのです。
詳しいクローンのやり方は、前回の日記2-1か、コミュニティーJPさんのチュートリアルを参考にしてください。
とりあえず今回も、GUIDはechoさんのお手本オブジェクトからいただいてます。
【2】
ゲームに導入して、うまくクローンできてるか確認。
右がデフォルト、左がクローン自作です。どっちにも動作は異常なし。
【3】
クローン自作オブジェクトの編集に入ります。
まずはGLOBでsemi blobalの確認です。
【4】
Resorce treeをざっと見てみると、TTAsがないですね。TTABも一応あるみたいなんですが、Instanceが0x81です。見慣れないInstanceナンバーな気がします。
次にResorce treeからOBJD内のファイルを確認します。
RAW Dataのタブをクリックして、「Interaction Table ID」を確認。0x1でした。
【5】
「Interaction Table ID」が分かったので、TTABとTTAsをインポートしてきましょう。
上部メニューのToolsからObject Tools>Import Semi Globalsとします。
PaintingGlobalsを選んで、scanをクリック。
ずらっと出てきたら、uncheck allでチェックをいったん全てはずし、Instanceが0x1のTTAs(Pie Menu Strings)と、同じくInstanceが0x1のTTAB(Pie menu functions)にチェックを入れてOKします。
【6】
インポートしたら、忘れずにGroupを0xFFFFFFFFに変更します。
まずはTTAsを修正。
【7】
TTAsに、新しいパイメニューを加えます。
ここではチュートリアルに従い、「Talk」としました。
【8】
次にTTAB編集。Instance0x1のものをいじります。最初からあったTTABは何に使用されているのか分からないので、そのまま放置しておきます。
Groupを0xFFFFFFFFに変更したら、Plugin Viewに戻って「View」をクリック。Addボタンを押して、新しく「Talk」の設定を作ります。
BHAVはまだ作ってないので、まだ設定しません。
【9】
BHAVの編集に入る前に。
今回もアニメーションを使うので、先にアニメーションを登録するSTR#をインポートしてきます。
【10】
インポートしたら、忘れずにGroupを0xFFFFFFFFに変更しておきます!(←私はここでうっかり忘れて、BHAVいじっていた時にはじめて気がつきました;)
使うアニメーションの名前をデフォルトから探してきて、新しく追加したライン0x25に入力しました。
【11】
下準備が出来たので、BHAVを作ります。
適当な既存のBHAVをクローンして、あたらしいBHAVを作成。
ファイル名を「Interaction - Talk」にしました。
Instanceも、他のBHAVとかぶらないように設定します。
【12】
0x0のBoxをクリックして、上図のように設定。
オブジェクトの正面に行くコマンドです。
【13】
Insert via Trueボタンを押して、新しいBoxを追加。
アニメーションの設定です。
ちなみにSTR#のGroupを変更し忘れていると、Operandsの下の文に、Animate Sim ○△□(semi)みたいな表記が出てきて、忘れた事に気がつくと思います。幸いにして。
私は【10】のところでGroupを変更し忘れていたんですが、ここを見て間違いに気がつきました。Privateになっている事をきちんと確認した方がいいみたいです。
というわけで、ようやくチュートリアルのスタート地点に到達しました。
慣れないと、ここまでの操作だけでも結構疲れます。
それでは本題に入っていきます。
■Proper entry and exit
シムが自発的に使えるようなオブジェクトを置いた時、シムはどのようにして自分が使いたいオブジェクトを選ぶのでしょうか。これはゲームのRelationshipシステムによって制御されています。また、シムがすでに使っているオブジェクトは「in use」の状態にあり、後から他のシムが来ても同時に使うことは出来ませんね。
Global functionの「Standard Entry」は、オブジェクトに「in use」のマークを付け、それを使用しているシムとオブジェクト間のRelationship(関係)を構築してくれるものです。そしてこれをOffにするのは「Standard Exit」です。
Standard Entryは、シムがオブジェクトを使い始める直前に呼び出さなくてはいけません。
今回のBHAVの場合では、「オブジェクトを使う位置まで移動する」後で、「アニメーションを開始する」前の位置に入れないといけません。
【11】
0x0のBoxをクリックして、Insert via Trueボタンを押します。
新たに加わったBoxをクリックして、OpCodeの横の矢印ボタンを押し、Resource Chooserウィンドウを開きます。
Globalのタブをクリックして、Standard Entryを探しましょう。選んだら、OKします。
Standard EntryはParameterを必要としないので、Operandsはすべてゼロにします。
【12】
こんな感じ。
次に、Standard EntryでONにしたものは、使い終わったらOFFにしなくちゃいけません。Standard ExitはStandard Entryとペアで使います。
このBHAVでは、Standard Exitはアニメーションのあとにいれます。
0x2のBoxをクリックして、Insert via Trueボタンを押します。
【13】
Standard Entryの時と同様にして、上図のように設定します。Operandsも全てゼロにします。
【14】
ゲーム内で動作確認する前に、「in use」のオブジェクトを後から来たシムが使わない設定も入れておきます。
Guard BHAV は使いません。例えば、シングルベッドをシムに使わせようとします。しかし先に別のシムが寝ると、後から来ようとしていたシムの行動アイコンがその時点で消えます。使えなかったシムは地団太を踏みます。
つまりオブジェクトが「in use」であるかどうかチェックするコードは、シムがオブジェクトに向かって歩いていく後、かつシムがオブジェクトとのInteractionに入る前、に挿入する必要があります。
というわけで、Standard Entryの前に「in use?」の判断をさせるコードを入れます。
0x0のBoxをクリックして、「Insert via true」を押します。
新しく出来たBoxにOpcode0x0002を入力して、Interaction Wizardを開き、上図のように設定します。
「このオブジェクトは使用中ですか?」と尋ねるもので、「使用中」ならば緑の矢印(True)へ、「未使用」ならば赤の矢印(False)へ行きます。
【15】
矢印もこんな感じにしました。
緑の矢印(true)の先がFになっているので、オブジェクトが使用中だった時はBHAV実行終了。「In use?」の結果がFだった事を受けて、ゲームはその場でシムに文句を言わせ、行動アイコンを消します。文句を言うシムの噴出しも、先にオブジェクトを使っていたシムの顔になります。
(Go to Relative PotisionがFで終了した場合、シムは「足跡と×印」の「行けないよ!」の吹き出しを出して文句を言います)
ちなみにGlobal BHAVに"In use?"(Opcode0x0102)があります。これも上記と同じ働きを持つものなので、代わりにこれを使うことも出来ます。
Note:Standard Entry and Exit
今回使用したのは1タイルのオブジェクト用のコマンドです。複数のタイルを使用するオブジェクトは「Standard Entry - Multi Tile 0x116」と「Standard Exit - Mlti Tile 0x117」を使わないといけません。これらはオブジェクトをどう使うかによって、Operandsの入力が必要です。これらのコマンドを使う際は、似たようなEntryとExitを持つオブジェクトを調べて、Operandsをどうしたらいいのか調べます。
【16】
危うく忘れる所でしたが、TTABのライン0x7「Talk」に自作BHAVを設定します。
これでOK。
ゲームにいれてここまでの作業がうまくいっているか確認します。
■Earning skills
前チュートリアルで、Expressionを使ってシムにスキルポイントを与える方法は分かったと思います。
しかしこの方法だと、シムのスキルポイントは一瞬で設定値分だけ加算されます。
普通シムがスキルアップする時は、頭の上に青いゲージが出ますよね。そして時間経過とともに、少しずつスキルポイントをゲットしていきます。これはGlobal functionを使って行うことが出来ます。
先ほどStandard entryとexitについて設定をしましたが、スキルアップの行動も同じようにstart とendが存在します。まずはBHAVのどの時点でスキルアップを開始させるかですが、Standard Entryの後、Animate Simの前にします。新しいBHAVのBoxをこの位置に入れて、Globalの" Skill - Start "(Opcode:0x1D7)を設定します。これはパラメーターを必要とするコマンドです。
パラメーターはBHAVに与えられる値で、値によってそのBHAVの方向性を指定します。値を与えるのは、そのBHAVを呼び出したBHAVです。
例えば「Skill - Start」の場合。どのスキルを上げるのか、どれくらいのスピードでスキルポイントが貯まるのか、シムがスキルを鍛えるのにどのオブジェクトを使っているのか、シムの性格よるボーナスは付くのか(例:社交が高いとカリスマスキルの学習にボーナスが付く)という事を決めるパラメーターが必要になります。呼び出されたこのBHAVは、パラメーターを与えられることによってはじめて具体化され、パラメータに基づいて動作することが出来るようになります。この辺りの事は「Data Types for Simantics Users」に書いてあるそうです。
【17】
Standard Entryの後に 新しいBoxを追加して、"Skill - Start "(Opcode:0x1D7)を設定します。
次にIntaraction Wizardを開いてOperandsを設定していきます。
(1)New Formatにチェックを入れます。これで値の種類を選べるようになります。
(Old Formatにチェックが入っていると、すべてLiteralとして扱われてしまいます)
(2)各行以下のように設定。
・Skill ID……どのスキルを鍛えるかを決めます。Literalに設定。値は0x000B(カリスマスキル)。
ちなみにここで、変数や定数として格納されている値を使う事も出来るそうです。
・Speed Mod……シムの学習速度を決めます。値が高いほど、早くスキルポイントが貯まります。ここでは適当にLiteral 0x0070にします。
・Interaction Object ID……どのオブジェクトによってシムがスキルポイントを獲得しているのか決めます。「Stack Object ID」によって指定します。Stack Object IDは、各々の関数が独自に持つ変数です。Interactionでは、Stack Object IDは、ユーザーが使用しようとクリックしたオブジェクトに最初に設定されます。今回の場合では、石像のIDがStack Object IDに格納されます。
・Special Personality……シムのどの性格によってスキルアップボーナスが付くかどうかの設定です。今はボーナスをつけないのでLiteral 0x0000とします。
(3)出来たらOkeyを押します。
【18】
で、結局こうなりました。
【19】
スキルアップをスタートさせたら、スキルアップの終わりも作らねばなりません。Standard Exitの前に新しいコマンドを入れます。Globalより「Skill - End(Opcode:0x01D8)」を設定します。これはパラメーターは必要としません。
こんな感じになりました。
【20】
スキルアップ行動が便利になるように、アニメーション回りにループを入れます。特にスキルアップのStartとEndをループに含まないようにしないといけません。さもないと、シムの頭上のゲージが、オブジェクトを使用中出たり消えたりしてうっとうしいです。
ループの作り方は、前回のチュートリアルで学びました。
まずは、シムが自発的にループから抜け出るコマンドをAnimate Simの次に入れます。
【21】
次に、ゲームシステムがエラーを出さないよう、Idleを入れます。
Animate Simの上。
【22】
最後に、緑と赤の矢印を適切につなぎます。
最終的にBHAVは上図のようになります。
赤枠の設定を参考に、矢印がちゃんとなっているか確認してみて下さい。
Commitしてセーブ。ゲームに入れて確かめます。シムは石像に話しかけて、カリスマスキルをアップさせます。
【23】
ゲーム内で動作確認する際、チート「boolprop TestingCheatsEnabled true」でデバッグモードにしておくといいそうです。BHAVに不備があった時などエラーログが作成され、それを参照することで何がいけなかったのか読み取ることが出来ます。ログはマイドキュメント>EA Games>シムズ2>Log に作成されます。
で、デバッグモードにしてオブジェクトを使ってもらったんですが……。早速エラーが出ました!
「チュートリアルの画像と同じにBHAVを作ったのにーー!!?」とびっくりしすぎて、エラーが出た時のSSをとり忘れました。エラーが表示されたら、とりあえずResetを選択してセーブせずにゲームを終了し、作成されたログを見てみました。
赤線が、ゲーム内で表示されたエラー。
オブジェクトを使用しようとしたAdultの女性シムに関するエラーです。
原因は「Animation の名前がstring内に見つからない」らしいんですが。
上の画像の下にもずらずらと何か数字が並んでいるのですが、読めません!
とりあえずもう一度Packageファイルを開けて、アニメーションの名前がリストに存在していること、BHAV内でも正しく指定されている事を確認しました。何がいけないのかさっぱり分からなかったので、どこもいじらずに閉じました。
再度ゲームに入れて確認してみることに。
【24】
デバッグモードにせずに、使わせてみました。
普通に使えました。その後デバッグモードにして再度使用させても、特にエラーは出ず。
さっきのは何だったんだろう???
お母さんは順調にスキルアップして、1レベルまで到達しました。
体感速度は、本棚で料理スキルを1レベルにする時よりは遅かったです。
うまくいった……として良さそうですね。
(追記:実は初歩的かつ重大なミスを犯していました(>_<; 管理人、この時はまだ全っ然気づいてません)
というわけで、次回はダイアログの追加やシムに自己主張の余地を与えたりなどをやっていきます。
次へ
この記事にトラックバックする