zdoom/slade3あれこれ
1
Slade3に.wadファイルを読ませたときのSCRIPTにはENTER関数がある.
この関数内でSetActorPropertyを実行することである意味チートのような状態を作ることができる.
SetActorPropertyは(tid(プレイヤーの場合は0), プロパティ, 値)という形で実行する.
2行目はプレイヤーのHPを100にしている.
3行目はプレイヤーのHPが決して減らないようにしている.
4行目はプレイヤーの移動速度を2倍にしている.
script 2 ENTER { ClearInventory(); SetActorProperty(0, APROP_HEALTH, 100); SetActorProperty(0, APROP_Invulnerable, True); SetActorProperty(0, APROP_SPEED, 2.0); }
2
pythonからvizdoomでdoomを実行できる.
まずpython側でgame.add_available_game_variable(vzd.GameVariable.ITEMCOUNT)
と宣言しておく
ゲーム内でアイテムを取得した時にDECORATEに+COUNTITEMの記述をしておく.
するとゲーム側でgame.get_game_variable(vzd.GameVariable.ITEMCOUNT)
からアイテムの取得数を確認できる.
強化学習でアイテムの取得数を報酬にしたいときなどに便利.
3
doomでの様々なオブジェクト(アイテムや敵?)はActorというクラスで実装されている.
https://zdoom.org/wiki/Actor_properties に記載があるようなプロパティをDECORATEで設定することで,Actorのプロパティを変更できる.
例えば,Scale 4 を宣言したアイテムは大きく描画される.
4
https://github.com/mwydmuch/ViZDoom/issues/191#issuecomment-405961176 にあるように,SCRIPTS内でglobal変数として宣言した値はvizdoomから参照することができる.これにより,例えばランダムな座標に生成したアイテムの座標をpython側に伝えることができる.
この例では,global int 1:x_pos;
をはじめに宣言し,SCRIPTS内でx_posに値を代入することで,vizdoom側でvzd.GameVariable.USER1
からこの値を参照できる.