Special&関数集


ここではACS(Action Code Script)で使用するActionSpecialや関数を解説します。
完成ははるか先になりそうです・・・
間違った記述、解釈がある場合は、メールでご報告お願いします。
参考:ZDOOMWiki


目次

入力値の定義
Fixed point numbers
Byte Angles
Fixed point angles
Pitch
Sprite angles
その他の単位
(時間の単位)
(速さの単位)


Action specials

PolyObjects PolyObjects関係
Doors ドア関係
Ceilings 天井関係
Floors 床関係
Floors and Ceilings 天井と床関係
Stairs 階段関係
Platforms/Lifts リフト関係
Teleporters テレポーター関係
Exits ゴール関係
Things Thing関係
ACS ACS実行関係
Lines Line設定関係
Scrollers スクロール関係
Lighting 照明関係
Sectors Sector関係
BOOM generalized line types 一般化ActionSpecials関係
Renderer レンダリング関係(?)
Slopes 坂道関係
Other その他

Built-in ACS functions

Waiting ACS停止関係
Math 数学関数
Information ゲームの情報を得る関数
Sounds 音の関数
Player inventory プレイヤーの所持物についての関数
Display メッセージの関数
Level alteration 設定、変更関係
Actor control Actor(Thing)の情報関係

入力値の定義

Fixed point numbers(またはFixed point value)

ZDOOMは、固定小数点数(Fixed point numbers)を使用することでZDOOMで小数と似たものを使用することができます。
変数への代入(初期化)方法は

int (変数名) = (小数);

ここで注意すべき点は、小数部分が0でも必ず整数の最後に".0"と付け加えましょう。
他にも普通の値として使用することができます。(Fixed point numbers同士の積や除法は値が変わるので注意しましょう。)




int a = 1.5;
int b = 3.0;


ZDOOMは通常、固定小数点数(Fixed point numbers)を32ビットの整数で表します。
固定小数点数の上の16ビットを整数部分、下の16ビットを小数の部分とします。
つまり、ある整数を固定小数点数で表す場合、2の16乗を掛ければ(左へ16シフトすれば)固定小数点数で表すことができます。

つまり、次の式が成り立ちます。

FixedPointNumbers = Integer * 2^16
すなわち
FixedPointNumbers = Integer << 16

Integer = FixedPointNumbers / 2^16
すなわち
Integer = FixedPointNumbers >> 16

また、

FixedPointNumbers = 1.5

このようなとき、Fixed point numbersを2進数で表すと、整数部分が上から16ビット目から始まるため、
00000000000000011000000000000000
になるので

FixedPointNumbers = 1 * 2^16 + 1 * 2^15
すなわち
FixedPointNumbers = 1.5 * 2^16 = 98304

となります。

つまり、Fixed point numbersを小数で表した場合、Fixed point numbersの値は
Fixed point numbers = (小数) * 2^16 = (小数) * 65536
となります。(注意:1と1.0の値は違うので気をつけましょう。)

また、一番はじめ(左)のビットは符号を表すため、Fixed point numbersは
-2147483648〜2147483647までの値を扱うことができます。
2147483647に1を足すと-2147483648になります。

また、Fixed point numbersを小数として他のFixed point numbersとかけ算や割り算をした場合、*や/の演算子を使用すると、実際よりも2^16倍大きくなってしまうため、FixedMul関数やFixedDiv関数を使用しましょう。

Byte Angles

0から255の値を使用して角度を指定する方法です。(360°を256等分します。)

東を0とし、左回りに値が増え、64で北、128で西、192で南を指します。

知っておくと便利な値の方角を紹介します。

北西
96

64
北東
32
西
128
-
0
南西
160

192
南東
224

Fixed point angles

Fixed point numbersの小数部分を使って角度を指定する方法です。

角度の指定はByte Angleと似ていて、東を0.0とし左回りに値が増え最終的に1.0で東に戻ります。(整数部分は角度には影響しません。)

知っておくと便利な値の方角を紹介します。(未確認)

北西
0.375

0.25
北東
0.125
西
0.5
-
0.0
南西
0.625

0.75
南東
0.875

Byte AnglesとFixed Point Anglesの変換方法は

FixedPointAngles = ByteAngles * 2^8
すなわち
FixedPointAngles = ByteAngles << 8

ByteAngles = FixedPointAngles / 2^8
すなわち
ByteAngles = FixedPointAngles >> 8

Pitch

Thingの上下の向きをFixed point anglesを使って指定します。

-0.0888977〜0.155548の値(整数で表すと-5825〜10194)を使用します。

負の値になると、上を向き、正の値になると下を向きます。0は正面を向いています。

Sprite angles

Sprite(モンスターやアイテムの画像の一場面)の指定方法です。
DEHACKEDやDECORATEの解説が完成する時までこの紹介はしばらくお待ち下さい。

その他の単位

時間の単位

Tic
1秒を35区切りした単位です。35 Tic = 1 秒 です。主にこちらを使います。

Octic
1秒を8区切りした単位です。8 Octic = 1 秒 です。

距離の単位

Unit
Lineの長さや、天井の高さ、床の高さ、Thingの身長などに使われる単位です。

速さの単位

ACSやActionSpecialで使用する速さです。何も断りが無い限り、速さの単位はこれを指します。
128の速さで、35 * 16 = 560 の距離を移動するのに必要な時間は35 tic = 1 秒 です。
つまり、速さsで距離hを移動するのに必要な時間は

(128 * h) / (560 * s) = (8 * h) / (35 * s) (秒)

です。


Action specials※(このページではSpecialまたはコマンドと呼びます)
主にThingやLineやSectorなどに動作を与えるコマンドです。

PolyObjects

PolyObjectsとは?
ZDOOMHEXEN.PRJの解説4を参考にして下さい。

Line
Type
コマンド 引数の意味 内容
1 Polyobj_StartLine (po, mirror, sound) po PolyObjectsの番号を指定します。 PolyObjectsを指定するために必要なLineTypeです。
soundで指定する音はまずSNDSEQで定義する必要があります。
mirror 指定したPolyObjectsと逆の動作をするPolyObjectsを指定します。
sound ドアの開閉の音の連続の番号を指定します。
2 Polyobj_RotateLeft (po, speed, angle) po 回転させるPolyObjectsの番号を指定します。 PolyObjectsを左回りに回転させます。
angleはByteAngleを使用して下さい。(この場合、ByteAngleは方角を表すのではなく、角度を表します。)
また、angleに0を入力すると360°回転し、255を入力すると永遠に回り続けます。
speed 回転する速さを指定します。
angle 回転する角度を指定します。
(ByteAngle)
3 Polyobj_RotateRight (po, speed, angle) po 回転させるPolyObjectsの番号を指定します。 PolyObjectsを右回りに回転させます。
angleはByteAngleを使用して下さい。(この場合、ByteAngleは方角を表すのではなく、角度を表します。)
また、angleに0を入力すると360°回転し、255を入力すると永遠に回り続けます。
speed 回転する速さを指定します。
angle 回転する角度を指定します。
(ByteAngle)
4 Polyobj_Move (po, speed, angle, dist) po 移動させるPolyObjectsの番号を指定します。 PolyObjectsを指定した方角に移動させます。
angleはByteAngleを使用して下さい。
ちなみに、distが0だと移動しません。
speed 移動する速さを指定します。
angle 移動する方角を指定します。
(ByteAngle)
dist 移動する距離をし指定します。
(unit)
5 Polyobj_ExplicitLine (po, order, mirror, sound) po PolyObjectsの番号を指定します。 指定したLineがPolyObjectsの一部であると設定します。Polyobj_StartLineと似ていますが、Polyobj_ExplicitLineは動かすLineが繋がっていなくてもPolyObjectsの一部として指定することができます。(二つの柱を一つのPolyObjectsとして扱うときなど)
orderは恐らく画像を描写する順番だと思われます。それぞれのLineに1から順番に番号をふっていくべきかと思います。
soundで指定する音はまずSNDSEQで定義する必要があります。
order 恐らくLineに画像を描写する順番を指定します。
mirror 指定したPolyObjectsと逆の動作をするPolyObjectsを指定します
sound ドアの開閉の音の連続の番号を指定します。
6 Polyobj_MoveTimes8 (po, speed, angle, dist) po 移動させるPolyObjectsの番号を指定します。 Polyobj_Moveとほとんど同じです。
PolyObjectsを dist * 8 unitの距離だけ移動させます。
speed 移動する速さを指定します。
angle 移動する方角を指定します。
(ByteAngle)
dist 移動する距離の1/8を指定します。
(unit)
7 Polyobj_DoorSwing (po, speed, angle, delay) po ドアとなるPolyObjectsを指定します。 PolyObjectsを開き戸のように回転させます。
angleはByteAngleを使用し、左回りに回ります。
ACSからPolyobj_DoorSwingを使う場合はspeedを負の値にすれば右回りに回転させることができます。
speed ドアの開閉の速さを指定します。
angle ドアが開く角度を指定します。
(ByteAngle)
delay ドアが開いている時間を指定します。
(Tic)
8 Polyobj_DoorSlide (po, speed, angle, dist, delay) po ドアとなるPolyObjectsを指定します。 PolyObjectsを引き戸のように移動させます。
angleはByteAngleを使用します。
delayで指定した時間だけ開いた後、元の位置に戻ります。
speed ドアの開閉の速さを指定します。
angle ドアが移動する方角を指定します。
(ByteAngle)
dist ドアが移動する距離を指定します。
(unit)
delay ドアが開いている時間を指定します。
(Tic)
90 Polyobj_OR_RotateLeft (po, speed, angle) po 回転させるPolyObjectsの番号を指定します。 Polyobj_RotateLeftとほとんど同じですが、Polyobj_OR_RotateLeftは指定したPolyObjectsが何か他の動作をしているときでも影響を与えることができます。
逆に、Polyobj_RotateLeftを使って動作しているPolyObjectsに影響を与えることはでいません。
永遠に回転しているPolyObjectsを逆回転させるときなどに便利です。
また、angleに0を入力すると360°回転し、255を入力すると永遠に回り続けます。
speed 回転する速さを指定します。
angle 回転する角度を指定します。
(ByteAngle)
91 Polyobj_OR_RotateRight (po, speed, angle) po 回転させるPolyObjectsの番号を指定します。 Polyobj_RotateRightとほとんど同じですが、Polyobj_OR_RotateRightは指定したPolyObjectsが何か他の動作をしているときでも影響を与えることができます。
逆に、Polyobj_RotateRightを使って動作しているPolyObjectsに影響を与えることはでいません。
永遠に回転しているPolyObjectsを逆回転させるときなどに便利です。
また、angleに0を入力すると360°回転し、255を入力すると永遠に回り続けます。
speed 回転する速さを指定します
angle 回転する角度を指定します。
(ByteAngle)
92 Polyobj_OR_Move (po, speed, angle, distance) po 移動させるPolyObjectsの番号を指定します。 Polyobj_Moveとほとんど同じですが、Polyobj_OR_Moveは指定したPolyObjectsが何か他の動作をしているときでも影響を与えることができます。
逆に、Polyobj_Moveを使って動作しているPolyObjectsに影響を与えることはでいません。
angleはByteAngleを使用して下さい。
speed 移動する速さを指定します。
angle 移動する方角を指定します。
(ByteAngle)
distance 移動する距離をし指定します。
(unit)
93 Polyobj_OR_MoveTimes8 (po, speed, angle, distance) po 移動させるPolyObjectsの番号を指定します。 Polyobj_MoveTimes8とほとんど同じですが、Polyobj_OR_MoveTimes8は指定したPolyObjectsが何か他の動作をしているときでも影響を与えることができます。
逆に、Polyobj_MoveTimes8を使って動作しているPolyObjectsに影響を与えることはでいません。
angleはByteAngleを使用して下さい。
PolyObjectsを dist * 8 unitの距離だけ移動させます。
speed 移動する速さを指定します。
angle 移動する方角を指定します。
(ByteAngle)
distance 移動する距離の1/8をし指定します。
(unit)

Doors
ドアが開いたり閉まったりします。

Line
Type
コマンド 引数の意味 内容
10 Door_Close (tag, speed, lighttag) tag ドアを閉めるSectorを指定します。
(LineDefTag)
ドアを閉めます。
tagが0の場合は、起動したLineのSide 2側のSectorがドアと見なされます。
lighttagが0以外の場合、lighttagと同じLineDefTagを持つSectorの明るさが、ドアが閉まるときに、隣接するSectorで最も暗いSectorと同じ値まで段々と暗くなります。
lighttagは0でない場合、tagと同じ値であるべきだと思います。
ちなみに、speedが64以上になると、素早いドアの開閉音になります。
speed ドアが閉まる速さを指定します。
lighttag 明るさの変化を与えるSectorを指定します。
11 Door_Open (tag, speed, lighttag) tag ドアを開けるSectorを指定します。
(LineDefTag)
ドアを開けます。
tagが0の場合は、起動したLineのSide 2側のSectorがドアと見なされます。
lighttagが0以外の場合、lighttagと同じLineDefTagを持つSectorの明るさが、ドアが開くときに、隣接するSectorで最も明るいSectorと同じ値まで段々と明るくなります。
lighttagは0でない場合、tagと同じ値であるべきだと思います。
ちなみに、speedが64以上になると、素早いドアの開閉音になります。
speed ドアが開く速さを指定します。
lighttag 明るさの変化を与えるSectorを指定します。
12 Door_Raise (tag, speed, delay, lighttag) tag ドアを開けるSectorを指定します。
(LineDefTag)
ドアが開き、delayで入力した値の間開いた後、ドアが閉まります。
tagが0の場合は、起動したLineのSide 2側のSectorがドアと見なされます。
lighttagが0以外の場合、lighttagと同じLineDefTagを持つSectorの明るさが、ドアが開くときに、隣接するSectorで最も明るいSectorと同じ値まで段々と明るくなります。
また、ドアが閉まるときに、隣接するSectorで最も暗いSectorと同じ値まで段々と暗くなります。
lighttagは0でない場合、tagと同じ値であるべきだと思います。
ちなみに、speedが64以上になると、素早いドアの開閉音になります。
speed ドアが開く速さを指定します。
delay ドアが開いている時間を指定します。
(Tic)
lighttag 明るさの変化を与えるSectorを指定します。
13 Door_LockedRaise (tag, speed, delay, lock, lighttag) tag ドアを開けるSectorを指定します。
(LineDefTag)
特定の鍵を持っているときにドアが開き、delayで入力した値の間開いた後、ドアが閉まります。
鍵が必要な以外はDoor_Raiseと同じです。
鍵番号は鍵番号表を見て下さい。
tagが0の場合は、起動したLineのSide 2側のSectorがドアと見なされます。
lighttagが0以外の場合、lighttagと同じLineDefTagを持つSectorの明るさが、ドアが開くときに、隣接するSectorで最も明るいSectorと同じ値まで段々と明るくなります。
また、ドアが閉まるときに、隣接するSectorで最も暗いSectorと同じ値まで段々と暗くなります。
lighttagは0でない場合、tagと同じ値であるべきだと思います。
ちなみに、speedが64以上になると、素早いドアの開閉音になります。
speed ドアが開く速さを指定します。
delay ドアが開いている時間を指定します。
(Tic)
lock 鍵の番号を指定します。
lighttag 明るさの変化を与えるSectorを指定します。
14 Door_Animated (tag, speed, delay) tag ドアを開けるSectorを指定します。
(LineDefTag)
アニメーションのドアを開きます。
作り方はANIMDEFSの解説を参考にして下さい。
また、アニメーションのドアには守らなければならない条件があります。

・普通のドアのように作り、天井と床の高さは等しくならなければならない。
・アニメーションの画像はANIMDEFSで定義されている画像を使用しなければならない。
・ドアとなるSectorと隣り合う他のSectorとの境界のLine(ドアの画像を貼り付けるLine)は2本まで使用してよい。
・ドアの画像を貼り付ける2本のLineには同じ画像を張らなければならない。
speed ドアが開く速さ(アニメーションの間隔)を指定します。
delay ドアが開いている時間を指定します。
(Tic)
249 Door_CloseWaitOpen (tag, speed, delay, lighttag) tag ドアを閉めるSectorを指定します。
(LineDefTag)
ドアが閉まり、delayで入力した値の間閉まった後、ドアが開きます。
tagが0の場合は、起動したLineのSide 2側のSectorがドアと見なされます。
lighttagが0以外の場合、lighttagと同じLineDefTagを持つSectorの明るさが、ドアが開くときに、隣接するSectorで最も明るいSectorと同じ値まで段々と明るくなります。
また、ドアが閉まるときに、隣接するSectorで最も暗いSectorと同じ値まで段々と暗くなります。
lighttagは0でない場合、tagと同じ値であるべきだと思います。ちなみに、speedが64以上になると、素早いドアの開閉音になります。
speed ドアが閉まる速さを指定します。
delay ドアが閉まっている時間を指定します。
(Tic)
lighttag 明るさの変化を与えるSectorを指定します。

鍵番号

lockに入る番号 必要な鍵
0 無し
1 レッドキーカード
2 ブルーキーカード
3 イエローキーカード
4 レッドスカルキー
5 ブルースカルキー
6 イエロースカルキー
100 6種類の鍵のうちどれか1つ
101 6種類全部
102 開きません。"This doesn't seem to work"というメッセージが出ます
129 赤色の鍵ならどれでも
130 青色の鍵ならどれでも
131 黄色の鍵ならどれでも
229 3種類の色の鍵(キーカードかスカルキーかは区別しません)

Ceilings
天井に何か動作を与えます。

Line
Type
コマンド 引数の意味 内容
38 Ceiling_Waggle(tag, amp, freq, offset, time) tag 天井が上下するSectorを指定します。
(LineDefTag)
天井が滑らかに上下します。
この天井の上下は正弦曲線を利用しています。
天井は最初、上昇した後、下降し、これを繰り返します。
指定した位相と同位相になるまで、指定した振幅まで段々と滑らかに大きく上下します。
指定した時間、上下した後、滑らかにもとの高さに段々と戻ります。
timeが0の場合、永遠に上下します。
周波数について、実際に計ってみたところ、
freqが115でおよそ1ヘルツのようです。
amp 振幅のを指定します。(1/8倍になります。)
(1 / 8 unit)
freq 天井の上下の周波数を指定します。
値が高ければ素早く天井が上下します。
offset 位相を指定します。
time 天井が上下している秒数を指定します。
(秒)
40 Ceiling_LowerByValue (tag, speed, height)
tag 天井を下げるSectorを指定します。
(LineDefTag)
指定した天井が下がります。
tagが0の場合、起動したLineのSide 2側のSectorの天井が下がります。
speed 天井が下がる速さを指定します。
height 天井が下がる高さ(距離)を指定します。
(unit)
41 Ceiling_RaiseByValue (tag, speed, height) tag 天井を上げるSectorを指定します。
(LineDefTag)
指定した天井が上がります。
tagが0の場合、起動したLineのSide 2側のSectorの天井が上がります。
speed 天井が上がる速さを指定します。
height 天井が上がる高さ(距離)を指定します。
(unit)
42 Ceiling_CrushAndRaise (tag, speed, crush [, crushmode]) tag プレス機になる天井を指定します。
(LineDefTag)
天井が指定した速さで下がり、そのSectorにあるThingはどんな物でもプレスされ、床まで下がったら、もとの高さまで上昇します。永遠にプレスは続きます。
プレイヤーや敵がプレスされる時に、ダメージ音を連続で発しますがcrushはその音ごとに与えられます。
天井が上昇するときはspeedの半分の速さで上昇します。
crushmodeはcrushmode表を見て下さい。
tagが0の場合、起動したLineのSide 2側のSectorがプレス機になります。
speed プレスの速さを指定します。
crush プレスで与えるダメージを指定します。
crushmode プレス方式を指定します。この引数は無くても問題ありません。
development versionのみ有効
43 Ceiling_LowerAndCrush (tag, speed, crush [, crushmode]) tag プレス機になる天井を指定します。
(LineDefTag)
天井が指定した速さで下がり、そのSectorにあるThingはどんな物でもプレスされ、床より8unit高い場所まで下がったら、上昇せずにプレスを終了します。
プレイヤーや敵がプレスされる時に、ダメージ音を連続で発しますがcrushはその音ごとに与えられます。
crushmodeはcrushmode表を見て下さい。
tagが0の場合、起動したLineのSide 2側のSectorがプレス機になります。
speed プレスの速さを指定します。
crush プレスで与えるダメージを指定します。
crushmode プレス方式を指定します。この引数は無くても問題ありません。
development versionのみ有効
44 Ceiling_CrushStop (tag) tag プレスを停止させるSectorを指定します。
(LineDefTag)
プレスしているSectorを停止させます。
Ceiling_CrushAndRaiseと
Ceiling_CrushAndRaiseAと
Ceiling_CrushAndRaiseSilentA
の時に、停止させることができます。
また、停止させた後に、再びプレスを再開させると、停止する前の高さまで天井が上昇します。
また、プレスを停止したSectorについて、天井を上下させるSpecialを使用しても動きません。
45 Ceiling_CrushRaiseAndStay (tag, speed, crush [, crushmode]) tag プレス機になる天井を指定します。
(LineDefTag)
天井が指定した速さで下がり、そのSectorにあるThingはどんな物でもプレスされ、床まで下がったら、もとの高さまで上昇し、停止します。
プレイヤーや敵がプレスされる時に、ダメージ音を連続で発しますがcrushはその音ごとに与えられます。
天井が上昇するときはspeedの半分の速さで上昇します。
crushmodeはcrushmode表を見て下さい。
tagが0の場合、起動したLineのSide 2側のSectorがプレス機になります。
speed プレスの速さを指定します。
crush プレスで与えるダメージを指定します。
crushmode プレス方式を指定します。この引数は無くても問題ありません。
development versionのみ有効
47 Ceiling_MoveToValue (tag, speed, height, neg) tag 天井を移動させるSectorを指定します。
(LineDefTag)
天井が指定した高さまで移動します。
heightに負の値を入力しても、その絶対値の高さまでしか移動しないので、負の値の高さに移動したい場合は、negに1を入力しましょう。
tagが0の場合、起動したLineのSide 2側のSectorの天井が移動します。
speed 天井が移動する速さを指定します。
height 天井が移動する目標地点を高さで指定します。指定した値の絶対値が目標地点の高さとなります。
(unitの絶対値)
neg 高さを負の値の高さにしたい場合は、ここに1を入力し、それ以外の場合は、0を入力します。
69 Ceiling_MoveToValueTimes8 (tag, speed, height, neg) tag 天井を移動させるSectorを指定します。
(LineDefTag)
天井が指定した高さの8倍まで移動します。
heightに負の値を入力しても、その絶対値の高さまでしか移動しないので、負の値の高さに移動させたい場合は、negに1を入力しましょう。
tagが0の場合、起動したLineのSide 2側のSectorの天井が移動します。
speed 天井が移動する速さを指定します。
height 天井が移動する目標地点を高さの1/8で指定します。指定した値の絶対値が目標地点の高さとなります。
(unitの絶対値)
neg 高さを負の値の高さにしたい場合は、ここに1を入力し、それ以外の場合は、0を入力します。
192 Ceiling_LowerToHighestFloor (tag, speed) tag 天井を下げるSectorを指定します。
(LineDefTag)
指定したSectorを囲んでいるSectorの中で、最も高い床の高さまで天井が下がります。
もし、指定したSectorの天井の高さより、囲んでいるSectorで最も高い床の高さの方が高ければ、天井は、一瞬の速さで、その床の高さまで移動します。
tagが0の場合、起動したLineのSide 2側のSectorの天井が下がります。
speed 天井が下がる速さを指定します。
193 Ceiling_LowerInstant (tag, arg1, height) tag 天井を下げるSectorを指定します。
(LineDefTag)
天井がheight * 8 unitの距離だけ一瞬の速さで下がります。
指定した天井の下にThingがあり、そのThingが天井の下降の妨げになる場合は、天井は下がりません。
tagが0の場合、起動したLineのSide 2側のSectorの天井が下がります。
arg1 使用しません。0を入力して下さい。
height 天井が下がる高さ(距離)の1/8を指定します。
194 Ceiling_RaiseInstant (tag, arg1, height) tag 天井を上げるSectorを指定します。
(LineDefTag)
天井がheight * 8 unitの距離だけ一瞬の速さで上がります。
tagが0の場合、起動したLineのSide 2側のSectorの天井が上がります。
arg1 使用しません。0を入力して下さい。
height 天井が上がる高さ(距離)の1/8を指定します。
(unit)
195 Ceiling_CrushRaiseAndStayA (tag, dspeed, uspeed, crush [,crushmode]) tag プレス機になる天井を指定します。
(LineDefTag)
天井がdspeedの速さで下がり、そのSectorにあるThingはどんな物でもプレスされ、床まで下がったら、もとの高さまでuspeedの速さで上昇し、停止します。
プレイヤーや敵がプレスされる時に、ダメージ音を連続で発しますがcrushはその音ごとに与えられます。
crushmodeはcrushmode表を見て下さい。
tagが0の場合、起動したLineのSide 2側のSectorがプレス機になります。
dspeed 天井が下がる速さを指定します。
uspeed 天井が上がる速さを指定します。
crush プレスで与えるダメージを指定します。
crushmode プレス方式を指定します。この引数は無くても問題ありません。
development versionのみ有効
196 Ceiling_CrushAndRaiseA (tag, dspeed, uspeed, crush [,crushmode]) tag プレス機になる天井を指定します。
(LineDefTag)
天井がdspeedの速さで下がり、そのSectorにあるThingはどんな物でもプレスされ、床まで下がったら、もとの高さまでuspeedの速さで上昇します。永遠にプレスは続きます。
プレイヤーや敵がプレスされる時に、ダメージ音を連続で発しますがcrushはその音ごとに与えられます。
crushmodeはcrushmode表を見て下さい。
tagが0の場合、起動したLineのSide 2側のSectorがプレス機になります。
dspeed 天井が下がる速さを指定します。
uspeed 天井が上がる速さを指定します
crush プレスで与えるダメージを指定します。
crushmode プレス方式を指定します。この引数は無くても問題ありません。
development versionのみ有効
197 Ceiling_CrushAndRaiseSilentA (tag, dspeed, uspeed, crush [,crushmode]) tag プレス機になる天井を指定します。
(LineDefTag)
Ceiling_CrushAndRaiseAとほとんど同じですが、プレス機が動いている音が無く、天井が床に着いたときと天井がもとの高さまで戻ったときに音を出します。
天井がdspeedの速さで下がり、そのSectorにあるThingはどんな物でもプレスされ、床まで下がったら、もとの高さまでuspeedの速さで上昇します。永遠にプレスは続きます。
プレイヤーや敵がプレスされる時に、ダメージ音を連続で発しますがcrushはその音ごとに与えられます。
crushmodeはcrushmode表を見て下さい。
tagが0の場合、起動したLineのSide 2側のSectorがプレス機になります。
dspeed 天井が下がる速さを指定します。
uspeed 天井が上がる速さを指定します
crush プレスで与えるダメージを指定します。
crushmode プレス方式を指定します。この引数は無くても問題ありません。
development versionのみ有効
198 Ceiling_RaiseByValueTimes8 (tag, speed, height) tag 天井を上げるSectorを指定します。
(LineDefTag)
指定した天井が指定した高さの8倍の分だけ上がります。
tagが0の場合、起動したLineのSide 2側のSectorの天井が上がります。
speed 天井が上がる速さを指定します。
height 天井が上がる高さ(距離)の1/8を指定します。
(unit)
199 Ceiling_LowerByValueTimes8 (tag, speed, height) tag 天井を下げるSectorを指定します。
(LineDefTag)
指定した天井が指定した高さの8倍の分だけ下がります。
tagが0の場合、起動したLineのSide 2側のSectorの天井が下がります。
speed 天井が下がる速さを指定します。
height 天井が下がる高さ(距離)の1/8を指定します。
(unit)
252 Ceiling_RaiseToNearest (tag, speed) tag 天井を上げるSectorを指定します。
(LineDefTag)
天井が上がるSectorに隣接しているSectorで、天井の高さがより高く、より近い高さにある天井の高さまで、指定したSectorの天井が上がります。
もし、隣接しているSectorの天井の高さについて、指定したSectorの天井より高い天井が無ければ、何も起きません。
tagが0の場合、起動したLineのSide 2側のSectorの天井が上がります。
speed 天井が上がる速さを指定します。
253 Ceiling_LowerToLowest (tag, speed) tag 天井を下げるSectorを指定します。
(LineDefTag)
指定したSectorを囲んでいるSectorの中で、最も低い天井の高さまで天井が下がります。
もし、指定したSectorの天井の高さより、囲んでいるSectorで最も高い天井の高さの方が高ければ、天井は、一瞬の速さで、その天井の高さまで移動します。
tagが0の場合、起動したLineのSide 2側のSectorの天井が下がります。
speed 天井が下がる速さを指定します。
254 Ceiling_LowerToFloor (tag, speed) tag 天井を下げるSectorを指定します。
(LineDefTag)
指定したSectorの天井が、そのSectorの床の高さまで下がります。
tagが0の場合、起動したLineのSide 2側のSectorの天井が下がります。
speed 天井が下がる速さを指定します。
255 Ceiling_CrushRaiseAndStaySilA (tag, dspeed, uspeed, crush [, crushmode]) tag プレス機になる天井を指定します。
(LineDefTag)
Ceiling_CrushRaiseAndStayAとほとんど同じですが、プレス機が動いている音が無く、天井が床に着いたときと天井がもとの高さまで戻ったときに音を出します。
天井がdspeedの速さで下がり、そのSectorにあるThingはどんな物でもプレスされ、床まで下がったら、もとの高さまでuspeedの速さで上昇し、停止します。
プレイヤーや敵がプレスされる時に、ダメージ音を連続で発しますがcrushはその音ごとに与えられます。
crushmodeはcrushmode表を見て下さい。
tagが0の場合、起動したLineのSide 2側のSectorがプレス機になります
dspeed 天井が下がる速さを指定します。
uspeed 天井が上がる速さを指定します。
crush プレスで与えるダメージを指定します。
crushmode プレス方式を指定します。この引数は無くても問題ありません。
development versionのみ有効

crushmode

意味
0 常にオリジナルのゲームのプレス方式になります。
DOOMならDOOM方式、HereticやStrifeやHexenならHexen方式になります。
ちなみにZDOOMHEXEN.PRJの場合は、DOOM方式になります。
1 DOOMのプレス方式になります。Thingがプレスされる場合、Thingの身長は関係なく、床までプレスされます。
2 Hexenのプレス方式になります。Thingがプレスされる場合、天井はThingの身長の所で停止し、ダメージを与え続けます。

Floors
床に何か動作を与えます。

Line
Type
コマンド 引数の意味 内容
20 Floor_LowerByValue (tag, speed, height)
tag 床を下げるSectorを指定します。
(LineDefTag)
指定した床が下がります。
tagが0の場合、起動したLineのSide 2側のSectorの床が下がります。
speed 床が下がる速さを指定します。
height 床が下がる高さ(距離)を指定します。
(unit)
21 Floor_LowerToLowest (tag, speed) tag 床を下げるSectorを指定します。
(LineDefTag)
指定したSectorを囲んでいるSectorの中で、最も低い床の高さまで床が下がります。
もし、隣接しているSectorの床の高さについて、指定したSectorの床より低い床が無ければ、何も起きません。
tagが0の場合、起動したLineのSide 2側のSectorの床が下がります。
speed 床が下がる速さを定します。
22 Floor_LowerToNearest (tag, speed) tag 床を下げるSectorを指定します。
(LineDefTag)
床が下がるSectorに隣接しているSectorで、床の高さがより低く、より近い高さにある床の高さまで、指定したSectorの床が下がります。
もし、隣接しているSectorの床の高さについて、指定したSectorの床より低い床が無ければ、何も起きません。
tagが0の場合、起動したLineのSide 2側のSectorの床が下がります。
speed 床が下がる速さを指定します。
23 Floor_RaiseByValue (tag, speed, height) tag 床を上げるSectorを指定します。
(LineDefTag)
指定した床が上がります。
tagが0の場合、起動したLineのSide 2側のSectorの床が上がります。
speed 床が上がる速さを指定します。
height 床が上がる高さ(距離)を指定します。
(unit)
24 Floor_RaiseToHighest (tag, speed) tag 床を上げるSectorを指定します。
(LineDefTag)
指定したSectorを囲んでいるSectorの中で、最も高い床の高さまで床が上がります。
もし、指定したSectorの床の高さより、囲んでいるSectorで最も高い床の高さの方が低ければ、天井は、一瞬の速さで、その床の高さまで移動します。
tagが0の場合、起動したLineのSide 2側のSectorの床が上がります。
speed 床が上がる速さを指定します。
25 Floor_RaiseToNearest (tag, speed) tag 床を上げるSectorを指定します。
(LineDefTag)
床が上がるSectorに隣接しているSectorで、床の高さがより高く、より近い高さにある床の高さまで、指定したSectorの床が上がります。
囲んでいるSectorで、もし指定したSectorの床の高さより高い床が無ければ、何も起こりません。
tagが0の場合、起動したLineのSide 2側のSectorの床が上がります。
speed 床が上がる速さを指定します。
28 Floor_RaiseAndCrush (tag, speed, crush [,crushmode]) tag プレス機になる床を指定します。
(LineDefTag)
床が指定した速さで上がり、そのSectorにあるThingはどんな物でもプレスされ、天井より8unit低い地点まで上がったら、停止します。
プレイヤーや敵がプレスされる時に、ダメージ音を連続で発しますがcrushはその音ごとに与えられます。
crushmodeはcrushmode表を見て下さい。
tagが0の場合、起動したLineのSide 2側のSectorがプレス機になります。
speed プレスの速さを指定します。
crush プレスで与えるダメージを指定します。
crushmode プレス方式を指定します。この引数は無くても問題ありません。
development versionのみ有効
35 Floor_RaiseByValueTimes8 (tag, speed, height) tag 床を上げるSectorを指定します。
(LineDefTag)
指定した床が指定した高さの8倍の分だけ上がります。
tagが0の場合、起動したLineのSide 2側のSectorの床が上がります。
speed 床が上がる速さを指定します。
height 床が上がる高さ(距離)の1/8を指定します。
(unit)
36 Floor_LowerByValueTimes8 (tag, speed, height) tag 床を下げるSectorを指定します。
(LineDefTag)
指定した床が指定した高さの8倍の分だけ下がります。
tagが0の場合、起動したLineのSide 2側のSectorの床が下がります。
speed 床が下がる速さを指定します。
height 床が下がる高さ(距離)の1/8を指定します。
(unit)
46 Floor_CrushStop (tag) tag プレスを停止させるSectorを指定します。
(LineDefTag)
プレスしているSectorを停止させます。
66 Floor_LowerInstant (tag, arg1, height) tag 床を下げるSectorを指定します。
(LineDefTag)
床がheight * 8 unitの距離だけ一瞬の速さで下がります。
tagが0の場合、起動したLineのSide 2側のSectorの床が下がります。
arg1 使用しません。0を入力して下さい。
height 床が下がる高さ(距離)の1/8を指定します。
(unit)
67 Floor_RaiseInstant (tag, arg1, height) tag 床を上げるSectorを指定します。
(LineDefTag)
床がheight * 8 unitの距離だけ一瞬の速さで上がります。
指定した床の上にThingがあり、そのThingが床の上昇の妨げになる場合(Thingが天井と挟まれるときなど)は、床はThingを挟む高さまで上がりますが、すぐにもとの高さに戻ります。
tagが0の場合、起動したLineのSide 2側のSectorの床が上がります。
arg1 使用しません。0を入力して下さい。
height 床が上がる高さ(距離)の1/8を指定します。
(unit)
37 Floor_MoveToValue (tag, speed, height, neg) tag 床を移動させるSectorを指定します。
(LineDefTag)
床が指定した高さまで移動します。
heightに負の値を入力しても、その絶対値の高さまでしか移動しないので、負の値の高さに移動したい場合は、negに1を入力しましょう。
tagが0の場合、起動したLineのSide 2側のSectorの床が移動します。
speed 床が移動する速さを指定します。
height 床が移動する目標地点を高さで指定します。指定した値の絶対値が目標地点の高さとなります。
(unitの絶対値)
neg 高さを負の値の高さにしたい場合は、ここに1を入力し、それ以外の場合は、0を入力します。
68 Floor_MoveToValueTimes8 (tag, speed, height, neg) tag 床を移動させるSectorを指定します。
(LineDefTag)
床が指定した高さの8倍まで移動します。
heightに負の値を入力しても、その絶対値の高さまでしか移動しないので、負の値の高さに移動させたい場合は、negに1を入力しましょう。
tagが0の場合、起動したLineのSide 2側のSectorの床が移動します。
speed 床が移動する速さを指定します。
height 床が移動する目標地点を高さの1/8で指定します。指定した値の絶対値が目標地点の高さとなります。
(unitの絶対値)
neg 高さを負の値の高さにしたい場合は、ここに1を入力し、それ以外の場合は、0を入力します。
138 Floor_Waggle (tag, amp, freq, offset, time) tag 床が上下するSectorを指定します。
(LineDefTag)
床が滑らかに上下します。
この床の上下は正弦曲線を利用しています。
床は最初、上昇した後、下降し、これを繰り返します。
指定した位相と同位相になるまで、指定した振幅まで段々と滑らかに大きく上下します。
指定した時間、上下した後、滑らかにもとの高さに段々と戻ります。
timeが0の場合、永遠に上下します。
周波数について、実際に計ってみたところ、
freqが115でおよそ1ヘルツのようです。
amp 振幅のを指定します。(1/8倍になります。)
(1 / 8 unit)
freq 床の上下の周波数を指定します。
値が高ければ素早く床が上下します。
offset 位相を指定します。
time 床が上下している秒数を指定します。
(秒)
235 Floor_TransferTrigger (tag) tag 適応先のSectorを指定します。
(LineDefTag)
このSpecialを使用しているLineのSide 1側のSectorの床の情報(床の画像、ダメージを受ける床の設定など。明るさの情報などは適応されません。)を指定したSectorの床に適応します。
また、このSpecialを使用しているLineのSide 1側のSectorのことをTrigger Change Modelと呼びます。
236 Floor_TransferNumeric (tag) tag 適応先のSectorを指定します。
(LineDefTag)
決まった法則に従って決めたSector(Numeric Change Model)の床の情報(床の画像、ダメージを受ける床の設定など。明るさの情報などは適応されません。)を指定したSectorの床に適応します。

Numeric Change Modelの決め方は次の順番です。
@tagで指定したSectorを囲んでいるSectorを調べます。
A先ほど調べたSectorと、tagで指定したSectorを仕切っているLineで最も低いLineDefナンバー(それぞれのLineを特定するための番号です。具体的には、DeePseaでは、LineDef ○○ の○○にあたります。Lineidとは違います。)を調べます。
BそのLineのtagで指定したSector側の反対の部分に接するSectorがNumeric Change Modelです。
238 Floor_RaiseToLowestCeiling (tag, speed) tag 床を上げるSectorを指定します。
(LineDefTag)
指定したSectorを囲んでいるSectorの中で、最も低い天井の高さまで床が上がります。
指定したSectorの天井の高さが最も低い場合、その高さまで床が上がります。
tagが0の場合、起動したLineのSide 2側のSectorの床が上がります。
speed 床が上がる速さを指定します。
239 Floor_RaiseByValueTxTy (tag, speed, height) tag 床を上げるSectorを指定します。
(LineDefTag)
指定した床が指定した高さの分、上がります。
床が上昇し始めるときに、指定したSectorの床の情報(床の画像、ダメージを受ける床の設定など。明るさの情報などは適応されません。)がこのSpecialを使用しているLineのSide 1側のSectorの床(Trigger Change Model)の情報に書き換えられます。
tagが0の場合、起動したLineのSide 2側のSectorの床が上がります。
speed 床が上がる速さを指定します。
height 床が下がる高さ(距離)を指定します。
(unit)
240 Floor_RaiseByTexture (tag, speed) tag 床を上げるSectorを指定します。
(LineDefTag)
指定したSectorを構成しているLineのLowerTextureの中で、最も高さ(縦の長さ)の低いTextureの高さの分だけ床が上昇します。
tagが0の場合、起動したLineのSide 2側のSectorの床が上がります。
speed 床が上がる速さを指定します。
241 Floor_LowerToLowestTxTy (tag, speed) tag 床を下げるSectorを指定します。
(LineDefTag)
指定したSectorを囲んでいるSectorの中で、最も低い床の高さまで床が下がります。
床が下降し終わったときに、指定したSectorの床の情報(床の画像、ダメージを受ける床の設定など。明るさの情報などは適応されません。)がこのSpecialを使用しているLineのSide 1側のSectorの床(Trigger Change Model)の情報に書き換えられます。
もし、隣接しているSectorの床の高さについて、指定したSectorの床より低い床が無ければ、何も起きず、床の情報も書き換えられません。
tagが0の場合、起動したLineのSide 2側のSectorの床が下がります。
speed 床が下がる速さを指定します。
242 Floor_LowerToHighest (tag, speed, adjust) tag 床を下げるSectorを指定します。
(LineDefTag)
指定したSectorを囲んでいるSectorの中で、

(最も高い床の高さ) + adjust - 128

の高さまで床が下がります。
もし、最終的な目標地点の高さが、下降前の高さより高ければ、一瞬の速さで床が移動します。
tagが0の場合、起動したLineのSide 2側のSectorの床が下がります。
speed 床が下がる速さを指定します。
adjust 目標となるSectorの床の高さとの差を指定します。
(unit)
250 Floor_Donut (ptag, pspeed, sspeed) ptag 「回」の中心のSector(下降するSector)を指定します。 「回」の字のような配置でSectorがあるとします。真ん中は外側より高いです。
Floor_Donutを起動すると、真ん中は下がり、外側は上がり、二つのSectorが同じ高さになったとき、止まります。
pspeed 真ん中のSectorの下がる速さを指定します。
sspeed 外側のSectorの上がる速さを指定します。

Built-in ACS functions※(このページでは関数と呼びます。)

主にThingやLineやSectorなどの動作と直接的にあまり関係ない計算用の関数です。
また、LineTypeはありません。

Waiting
Scriptを停止させる関数です。

関数 引数の意味 戻り値の種類 内容
ACS_ExecuteWait (int script, int unused, int arg1, int arg2, int arg3) script 実行するScriptを指定します。
(int)
無し
(void)
指定したScriptを実行し、そのScriptが終わるまで、この関数を含むScriptは停止します。

ACS_ExecuteWaitは

ACS_Execute (script, 0, arg1, arg2, arg3);
ScriptWait (script);

と同じです。
unused 使用しません。0を入力して下さい。
(int)
arg1 第1引数
(int)
arg2 第2引数
(int)
arg3 第3引数
(int)
Delay (int tics) tics 停止している時間をTicで指定します。
(int)
無し
(void)
Delayを実行したScriptは入力したTicの間、停止します。
※35 Tic = 1 秒
PolyWait (int polyid) polyid 待つPolyObjectsを指定します。
(int)
無し
(void)
指定したPolyObjectsが動作を完了するまでPolyWaitを実行したScriptを停止させます。
ScriptWait (int script) script 待つScriptを指定します。
(int)
無し
(void)
指定したScriptが動作を完了するまでScriptWaitを実行したScriptを停止させます。
TagWait (int tag) tag 待つSector(LineDefTag)を指定します。
(int)
無し
(void)
指定したSectorが動作を完了するまで(ドアが開ききるなど)TagWaitを実行したScriptを停止させます。

Math
数学関数です。

関数 引数の意味 戻り値の種類 内容
Cos (int angle) angle 余弦を計算する角度(fixed point angle)を指定します。

(int)
fixed point value 指定した角度の余弦を計算します。
戻り値がfixed point valueであるため、長さを表すIntegerとCosの積は、fixed point valueとなります。
ちなみに、正接の関数はありません。
FixedDiv (int a, int b) a 割られる数(fixed point value)を指定します。
(int)
fixed point value 小数で表したFixed point numbersについて、aをbで割った値を計算します。
b 割る数(fixed point value)を指定します。
(int)
FixedMul (int a, int b) a 掛けられる数(fixed point value)を指定します。
(int)
fixed point value 小数で表したFixed point numbersについて、aをbで掛けた値を計算します。
b 掛ける数(fixed point value)を指定します。
(int)
Random (int min, int max) min 最小値を指定します。
(int)
integer 指定した最小値から最大値までの値(整数)をランダムに選んで返します。
max 最大値を指定します。
(int)
Sin (int angle) angle 正弦を計算する角度(fixed point angle)を指定します。

(int)
fixed point value 指定した角度の正弦を計算します。
戻り値がfixed point valueであるため、長さを表すIntegerとSinの積は、fixed point valueとなります。
ちなみに、正接の関数はありません。
StrLen (str string) string 文字数を調べる文字列を指定します。
(str)
integer 指定した文字列の長さ(文字数)を計算します。
VectorAngle (int x, int y) x x成分を指定します。 fixed point angle 入力したx、yがそれぞれx成分、y成分であるようなベクトルとx軸(東)との角度(左回りに角度が増えます)を計算します。
y y成分を指定します。

更新中・・・


Home Back(Script解説へ Lumpファイルの解説へ)