
|
for Half-Life? - 3Buttons and Door |
今回のTIPSはCounterStrikeではなく、Half-LifeやMODのシングルプレイに適した、ボタンを使った仕掛けの作り方をご紹介します。
かなり複雑な内容ですので初心者の方は理解するのが難しいかも知れませんが、その場合には一番下にあるrmfファイルをコンパイルしてプレイしてみて下さい。
Hammerを使ってこういう事も出来る、という事が分かるかと思います。
複雑な仕組みとは、
o 3つのボタンを全て押さないとドアが開かない。
o 3つのボタンはどの順番で押してもOK。
o ボタンを押すごとに「あと2つ」「あと1つ」「OK。ドアが開きました。」というカウント表示をさせる。
というものです。
ただ単にボタンを使ってドアを開けたい場合は、 func_buttonのTargetにfunc_doorを指定するだけです。
今回はこの基本パターンに、たくさんのEntityを絡めていき、上記のような仕組みを作ります。
まず使用するEntityを以下に挙げます。
func_button *3
multi_manager *3
game_text *3
trigger_changetarget *6
multisource *1
func_door *1

今回のTIPSで使用するEntity群 |
|
では次に、プレイヤーがボタンを押してからドアが開くまでの流れを説明します。
プレイヤーが1つ目のfunc_buttonを押す。 |
|
↓
ターゲットのmulti_manager-1へ命令が行き、下の3種のEntityへリレーする。 |
→game_text-1
→trigger_changetarget-1
*3
→multisource |
|
↓
リレーされた3つのEntityはそれぞれ下のように働きます。 |
game_text-1 |
「あと2つ」というメッセージを表示。 |
trigger_changetarget-1 |
同名の3つが1つのmulti_manager-2をNewTarget指定し、それぞれ別のfunc_buttonを命令元のTargetとして指定する。
(これは、どのボタンを押しても同じメッセージを表示し、同じ次のmulti_manager-2のトリガーとなる必要がある為)
|
multisource |
3つのボタン(今回の場合、正確にはmulti_manager)からTarget指定される事で、このEntityは自動的に3つのEntity全てから命令を受けないとアクション(func_doorへ命令)を起こさない。 |
|
|
プレイヤーが2つ目のfunc_buttonを押す。 |
|
↓
上のtrigger_changetargetにより変更されたターゲット、multi_manager-2へ命令が行き、下の3種のEntityへリレーする。 |
→game_text-2
→trigger_changetarget-2
*3
→multisource |
|
↓
リレーされた3つのEntityはそれぞれ下のように働きます。 |
game_text-2 |
「あと1つ」というメッセージを表示。 |
trigger_changetarget-2 |
同名の3つのEntityが1つのmulti_manager-3をNewTarget指定し、それぞれ別のfunc_buttonを命令元のTargetとして指定する。
(これは、どのボタンを押しても同じメッセージを表示し、同じ次のmulti_manager-3のトリガーとなる必要がある為。)
|
multisource |
3つのボタン(今回の場合、正確にはmulti_manager)からTarget指定される事で、このEntityは自動的に3つのEntity全てから命令を受けないとアクション(func_doorへ命令)を起こさない。 |
|
|
プレイヤーが3つ目のfunc_buttonを押す。 |
|
↓
上のtrigger_changetargetにより変更されたターゲット、multi_manager-3へ命令が行き、下の2種のEntityへリレーする。 |
→game_text-3
→multisource |
|
↓
リレーされた3つのEntityはそれぞれ下のように働きます。 |
game_text-3 |
「OK。ドアが開きました。」というメッセージを表示。 |
multisource |
これまでの流れで合計3つのボタンから命令を受けたので、func_doorへ命令を渡し、ドアが開く。 |
|
|
補足:
この仕組みの重要なポイントはまず第一に、 multisourceという、Entityの親となるEntityにあります。
このEntityを知る一番簡単な方法は、複数のボタンのTargetに同じmultisourceの名前を指定し、multisourceのTargetにはドアやライトを指定します。
これでボタンを全て押さないと最終的なアクションを起こさない仕組みになります。
第二に、trigger_changetargetがあります。
このEntityはレバー型の切り替えスイッチなどによく使用されるもので、トリガーを受けると指定したEntityのTargetを別のTargetに変更できます。
今回のTIPSの場合、メッセージの表示を次々を変えていく為にこのEntityを使用していますが、3つのボタンのどれを押しても順にメッセージを表示しなくてはならない為、ボタンごとにEntityが必要になります。
|
各Entityのプロパティ値は以下のようになります。
func_button-1 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
b1 |
ボタンごとにユニークな名前を指定 |
Target |
mm1 |
後述するmulti_manager-1の名前を指定 |
Delay before reset |
-1 |
一度だけ押せるようにする |
|
func_button-2 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
b2 |
ボタンごとにユニークな名前を指定 |
Target |
mm1 |
後述するmulti_manager-1の名前を指定 |
Delay before reset |
-1 |
一度だけ押せるようにする |
|
func_button-3 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
b3 |
ボタンごとにユニークな名前を指定 |
Target |
mm1 |
後述するmulti_manager-1の名前を指定 |
Delay before reset |
-1 |
一度だけ押せるようにする |
|
multi_manager-1 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
mm1 |
名前を指定 |
text1 |
0.1 |
後述するgame_text-1の名前を指定 |
ct1 |
0.2 |
後述するtrigger_changetarget-1の
名前を指定 |
master |
0.3 |
後述する唯一のmultisourceを指定 |
|
multi_manager-2 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
mm2 |
名前を指定 |
text2 |
0.1 |
後述するgame_text-2の名前を指定 |
ct2 |
0.2 |
後述するtrigger_changetarget-2の
名前を指定 |
master |
0.3 |
後述する唯一のmultisourceを指定 |
|
multi_manager-3 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
mm3 |
名前を指定 |
text3 |
0.1 |
後述するgame_text-3の名前を指定 |
master |
0.3 |
後述する唯一のmultisourceを指定 |
|
game_text-1 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
text1 |
名前を指定 |
Message Text |
2 remaining... |
「あと2つ」 |
|
game_text-2 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
text2 |
名前を指定 |
Message Text |
1 remaining... |
「あと1つ」 |
|
game_text-3 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
text3 |
名前を指定 |
Message Text |
OK, The door
has been opened. |
「OK。ドアが開きました。」 |
|
trigger_changetarget-1-1 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
ct1 |
名前を指定 |
Target |
b1 |
Targetを変えたいEntityの名前を指定 |
New Target |
mm2 |
新しいTargetを指定 |
|
trigger_changetarget-1-2 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
ct1 |
名前を指定 |
Target |
b2 |
Targetを変えたいEntityの名前を指定 |
New Target |
mm2 |
新しいTargetを指定 |
|
trigger_changetarget-1-3 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
ct1 |
名前を指定 |
Target |
b3 |
Targetを変えたいEntityの名前を指定 |
New Target |
mm2 |
新しいTargetを指定 |
|
trigger_changetarget-2-1 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
ct2 |
名前を指定 |
Target |
b1 |
Targetを変えたいEntityの名前を指定 |
New Target |
mm3 |
新しいTargetを指定 |
|
trigger_changetarget-2-2 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
ct2 |
名前を指定 |
Target |
b2 |
Targetを変えたいEntityの名前を指定 |
New Target |
mm3 |
新しいTargetを指定 |
|
trigger_changetarget-2-3 |
プロパティ名 |
プロパティ値 |
説明 |
Name |
ct2 |
名前を指定 |
Target |
b3 |
Targetを変えたいEntityの名前を指定 |
New Target |
mm3 |
新しいTargetを指定 |
|
multisource |
プロパティ名 |
プロパティ値 |
説明 |
Name |
master |
名前を指定 |
Target |
door |
最終的なTargetを指定 |
|
func_door |
プロパティ名 |
プロパティ値 |
説明 |
Name |
door |
名前を指定 |
|
このtipsに使用したrmfファイルをこちらにご用意しました。
参考にどうぞ。
|
|
CS完全対応、ラウンドごとのリセット機能付きヴァージョン |
上記の方法ではラウンドごとにリセットされない為、一度開いたドアは次ラウンドでも開いたままになってしまいますので
CounterStrikeでプレイするには不向きと言えます。
このことを解消しつつ、Entityの数を減らしてよりスマートな方法を当Forumにて教えて頂きましたのでこちらで簡単にご紹介させて頂きます。
情報のご提供、ありがとうございました。この場を借りてお礼申し上げます。
この修正ヴァージョンのポイントは、ボタン全ての制御にmultisouceを使わずに、回数をカウントするgame_counterというEntityを使用していることです。
このEntityの方が扱いやすく、理解もし易いかと思います。
またNameにgame_playerspawnを指定したtrigger_changetargetを使用してそれぞれのボタンをラウンドごとにリセットし、同様にgame_playerspawnを指定したgame_counter_setでカウンターもリセットしています。
文章だけでは分かり辛いと思いますのでrmfファイルを参考にどうぞ。
ダウンロードはこちら
|
|
|
|
|