MENU
Top
Maps
Models
Tips
Tutorials
FAQ
Entities
Dictionary
Files
Archives
Forum
Links
About
Quick Link
Counter-map
VERC
CS-Nation
HalfLife2.Net




for Half-Life? - 3Buttons and Door
Half-Lifeやシングルプレイ向けの、ちょっと手の込んだEntityの使い方

03.11.2004 追加: CS完全対応、ラウンドごとのリセット機能付きヴァージョン ( THX! 佐藤孔盟氏 )


今回の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ファイルを参考にどうぞ。

ダウンロードはこちら



Copyright (C) 2003, 2004 CSEC All rights reserved.