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からこの値を参照できる.