- マップ制作についてEditorの使い方+レベルデザイン方法論を記載します
- スクリプト初心者でも製作できるように手順やファイル名を省略せず記載しています
練習マップを作る
まずは簡単な練習マップを作ってひと通りの機能に習熟しましょう
それぞれの手順や見本の画像に従ってマップを制作してください
この講座を終える頃には短いダンジョンを完成させられるようになるでしょう
- スタート地点を置こう
まずScriptのLevelStartを置いてIDを0にするとスタート地点になるので
さっそく画面の中央に置いて行きましょう
- 次に壁を置いていきます
右のDoodadsタグを選び doodads/theme_a/a_h16.xml を選択して右クリックしましょう
幅2キャラ分程度の壁が置けたと思います、続けて2~3個置いてみましょう
※doodas/theme_a はステージ1の壁パーツ、a_h16はHorizontalの16ドットと言う意味です
- テストプレイしましょう
上欄の File の Save を選択してデータを保存した後で
ToolsからRunGameを選択するとゲームが始まります
自由に歩き回れる一方で壁に体が当たると思います
そう、HammerWatchのマップは「どこを通れるか」を決めるのではなく
マップにパーツを置いて「どこが通れないか」を決める作りなのです
そのため穴の縁にはちゃんと止め石を置かないと普通に穴を渡れてしまいます
- 床を塗りましょう
Tilemap を選択して左クリックで床を塗れます。そして右クリックで消せます
床は全て別々の層になっています。Tilemap/a_default.xml を選択しているときは
Tilemap/a_default.xml の層だけを消したり塗ったりできます
その上に Tilemap/a_scattered.xml が塗ってあっても一切影響を与えられません
各タイルの左にあるチェックボックスをクリックすることで表示のON/OFFができます
とりあえず壁の周りを塗りましょう
- 壁をコピーして拡大しましょう
もう気付いているかもしれませんが壁は左ドラックでまとめて選択して動かしたり
Ctrl+C や Ctrl+V でコピー&ペーストできます
※このとき右のDoodadsタグを選択している必要があります
選択しているタグと同系統のものだけ選択できるようになっています
- 敵を置きましょう
右の Characers タグの actors/bat_1 を選択して画面を右クリックしましょう
コウモリが置けたと思いますので続けて5匹ほど、スタート地点から少し離した所に置きましょう
ちなみに bat_2 の方が bat_1 より強く、同種の敵はファイル名の数字が大きいほど強くなるようです
- お金とリンゴと箱を置きましょう
右の Items タグの一番下にある items/valuable_3.xmlを選択して右クリックしましょう
お金が置けたはずなので、何個か置いてみましょう
続けて同タグ内にある items/health.xml と items/breakable_crate.xml を置きましょう
このように敵以外の触れるものは殆どItemsに入っています
- 2回目のテストプレイ
敵と戦って、箱を壊し、お金を取り、リンゴを食べましょう。
だいぶゲームらしくなってきたのではないでしょうか
- 扉を作り鍵を置きましょう
items/door_a_bronze_v2.xml を置いたあとで
その右をitems/door_a_bronze_h_cap_r.xml を
左には items/door_a_bronze_h_cap_l.xml を置きましょう
おそらく上手く置けないと思うので Tools の Grid Size を2/1にしましょう
そうすることで今までより細かく物を動かすことができるようになります
扉が置けたら Items/key_bronze.xml を選択して右クリックで置きましょう
(GridSizeは1に戻しておきましょう)
- 3回目のテストプレイ
鍵を拾って扉を開けましょう
- ゲームエンドを作りましょう
- まず当たり判定となるShapeを設置します
Scripting タグの RectangleShape を選択し右クリックで設置します
次に AreaTrigger と GameEnd を設置します
GameEndが爆薬だとすると、AreaTriggerは点火機構で
Shapeは点火機構の表面に取り付けられたボタンのようなものです
※実は Shape は Script ではなく単なるエリア指定です
Shape が Script タブ内にあるのはまとめて動かす時の利便性のためだと思われます。 - AreaTrigger に RectangleShape を取り付けます
AreaTrigger を選択すると画面右下にスクリプト詳細が出てきます
その中の Shape をクリックすると Shape 選択モードになるので
RectangleShape を左クリックして Shape 連結しましょう
これで AreaTrigger は Shape を利用できるようになりました
ESCキーを押して Shape 選択モードから出ましょう
(Shape解除はCtrlキーを押したままクリックです)
- AreaTrigger と GameEnd を連結します
スクリプト同士の連結は影響を与える側を選択したあと
影響を受ける側を Ctrl+Alt を押したまま左クリックすることです
まず AreaTrigger を選択し Ctrl+Alt を押したまま GameEnd を左クリックしましょう
(解除するときも同じ方法で解除できます)
図2:AreaTrigger から伸びる矢印の向きと色に注意
- 4回目のテストプレイ
RectangleShape を踏んでみましょう、ゲームクリア画面が出れば成功です
おめでとうございます、貴方は HammerWatch マップ製作に
必要な技術をひと通り習得しました
ここまでの技術だけでも十分面白いゲームを完成させることが出来ますが
スクリプト講座では更にゲームを盛り上げるための要素を解説します
- 装飾をしよう
Tilemap タグの tilemaps/a_default.xml や a_scatterd.xml を塗りましょう
doodads/generic/lamp_torch.xml のトーチを置いて下さい
Doodads タグの検索欄に torch と入れると探しやすいでしょう
Lighting タグを選択し、torchのある場所を右クリックして明かりを置きましょう
そして doodads/generic/vgt_ivy_1.xml のツタを壁に這わせたり
doodads/generic/deco_chains_1.xml の鎖を壁に設置したり
doodads/theame_a/a_crn_l_dn.xml の壁のコーナーや
doodads/theame_a/a_h_cap_r.xml の壁の行き止まりを使って部屋を自然にしましょう
- 装飾の順序はとても大切です。まず壁と床、次に光、最後に飾りです
床や壁の無い状態で光を置いたり、光の無い状態で部屋を飾ると
イメージが大きく変わってしまうので注意しましょう
レベルフォルダの作成
- レベルを本格的に作る場合は複数のレベルを保管するフォルダと
設定ファイルが必要になります - Program Files (x86)\Steam\steamapps\common\Hammerwatch\editor に
好きな名前のフォルダを作成したあと、その中に levels フォルダを作りましょう
そして levels フォルダの中に test.xml という名前のマップを保存して下さい
※この場所以外に保存した場合 Editor からの直接機動ができず Failed to と表示されます
- テキストファイルで以下の文章を入力して info.xml として保存します
これは情報ファイルで name はキャンペーン名 lives は残基数です<info>
<name>Script test level</name>
<description></description>
<lives>10</lives>
</info>
- テキストファイルで以下の文章を入力して levels.xml として保存します
levels start が開始レベル act name は章の名前で
level id が各レベルの固有ID res はそのファイルがあるフォルダとファイル名で
さきほど製作した test.xml を示しています name は表示名ですので適当につけて下さい<levels start="1">
<act name="lvl.act1">
<level id="1" res="levels/test.xml" name="TestMap" />
</act>
</levels>
- これは各レベルの繋がりを表すもので、ここの level id を
LevelExitArea などのスクリプトで使用しますので
このファイルが無いとレベル内外を問わず階段などが一切作れません
1つのキャンペーンは複数の act の中に複数の level が存在するという形になります
下図は拡張例です<levels start="1">
<act name="lvl.act1">
<level id="1" res="levels/test1.xml" name="TestMap1" />
<level id="2" res="levels/test2.xml" name="TestMap2" />
</act>
<act name="lvl.act2">
<level id="3" res="levels/test3.xml" name="TestMap3" />
<level id="4" res="levels/test4.xml" name="TestMap4" />
<level id="5" res="levels/test5.xml" name="TestMap5" />
</act>
</levels>
更に詳しい情報はマップのファイル構造や
C:\Program Files (x86)\Steam\steamapps\common\Hammerwatch\editor\example を
参考にして下さい
仕様の解説
マップを作る時のTips
- Editor の Show > Zoom > 64 が実寸です
遠くから見ているとつい大きな部屋を作ってしまいがちですが
ゲームプレイにそこまで広い部屋は必要ありません - 数字キーでグリッドサイズを変更できます
4キーの1ブロックと3キーの半ブロックはよく使うので覚えましょう - Tools > Play as からテスト用キャラを変更できます
他のキャラクターも試してみましょう - F1キーを押すと Show Physics が有効になり
壁やアイテム等の衝突判定が見えるようになります
お金アイテムの実値・宝箱の中身
小 | 中 | 大 | 小 | 大 | ||
銅貨 | 1 | 5 | 10 | 青ダイヤ | 50 | 250 |
銀貨 | 3 | 13 | 25 | 赤ダイヤ | 100 | 500 |
金貨 | 5 | 27 | 42 |
宝箱の中身
検索Tips
- Doodads タグで検索するとき
- a_と入力するとACT1のパーツが出てくる、b_だとACT2
- 金網は fence で出てきます
- Torch で松明が、ivy でツタが、glass で隠れ足場が、collisionで透明な壁が出てくる
頻繁に使うものなのに普通に探すのが難しいパーツなので覚えてしまおう - vendor で商人達や装飾が、combo など店名を入力すると商人と看板が出てくる
- bridge で橋が出てくる、木以外に石の橋もあるので見てみよう
- deco 壁や床の装飾が出てくる
- maker で血やマーク等のプレイヤーへのヒント用パーツが出てくる
- trigger でボタンやルーンが出てくる
Lighting の詳細
- Shadows:建物の影の色です。環境の反射光の色に合わせましょう
床タイルに乗算する仕組みなので必ず床を張ってから調整しましょう - Ambient:全体環境光です。マップのLightがない場所はこの色になります
コントラストが変わらないので一般的な明るさ調整はこちらで行います - Add:加算光です。Ambientと違いマップ全体に加算されます
まんべんなく加算されるので影や暗い場所が潰れますが霧の表現に使用できます - Shadow length:影の長さです。値を増やせば影が長くなります
これは明かりや太陽の角度を表現するために使います - Multiplicative colors:Light 外側の乗算光です、コントラストはそのまま明るくなります
乗算光なので床タイルを張ってから調整しましょう - Additive colors:Light 中心の加算光です、影を潰して全体的に明るくなります
光で輪郭がぼやける効果を擬似的に表現することができます
タイマー詳細
- HammerWatchのタイマーは絶対値ではなく周期です
タイマーに2000と入力した場合 2000ms毎にトリガーを送るのではなく
ゲーム内タイマーを2000で割った時間にトリガーを送ります - 例えば、ゲーム内タイマーが35000だった時に10000のタイマーを有効にすると
45000ではなく40000で発動します
なので10000ms(10秒)後に発動するはずの物が予定の半分の5000msで発動します - この仕様のためHammerWatchでは仕掛けの同期が非常に楽である一方で
「10秒後に発動する」という設定をタイマー単体で制作することが出来ません
正確に動くタイマーについては後に表記します
Doodad の レイヤー
- Doodad は Ctrl+数字キーで表示優先度を変更することができます
この機能を使うことによってプレイヤーに天井を歩かせる事もできます
※数字キー単体はGridSize変更なので操作ミスに注意しましょう
Doodads を使った仕掛け
簡単な隠し部屋と隠し通路
F1キーを押して Physics 表示状態にした隠し部屋
左は Ledge で囲い低 Layer の天井を床に敷いて網をかけた隠し通路
右は普通の通路を天井で隠しただけの隠し部屋、これで十分隠れている
スクリプトを使った仕掛け
スクリプトを使った小さな仕掛けの作り方を記載していきます
スクリプト基本操作
- Object との連結
Script 内にある Object ボタンを押して Object 連結モードに入り
Object を左クリックで連結、Object を Ctrl+左クリックで連結解除できます - Shape との連結
Trigger 内にある Shape ボタンを押して Shape 連結モードに入り
Shape を左クリックで連結、Shape を Ctrl+左クリックで連結解除できます
Shape は Script タグ内にありますが連結方法は Object と同じです - Script 同士の連結
影響を与える側を選択したあと
Ctrl+Alt を押しながら影響を受ける側をクリックすると連結できます
なお同じ方法で連結を解除できます
サンプルファイルを読もう
Editor を開いて File > Open から test.xml を開くと
ひと通りのスクリプトが乗っているので参考にすると良いと思います
また breakble_wall.xml には破壊できる壁のサンプルがあります
マップに入った時にBGMを鳴らす
Scripting タグから GlobalEventTrigger と PlayMusic を設置します
GlobalEventTrigger の Event 欄を LevelLoaded に設定します
※これで Level(マップ) が読み込まれた瞬間にトリガーが機動します
PlayMusic の Music で曲を選ぶます(Playで視聴可能、Stopで止める)
GlobalEventTrigger を左クリックし、Ctrl+Altを押したまま PlayMusic をクリック
完成です、セーブしたあとテストプレイを開始して音がなるか確かめましょう
踏むと音を出して凹むスイッチ
- 適当な壁や床や光源を設置した後で
doodads/special/trigger_button_floor.xml の床用ボタンを設置してください - Script タグから RectangleShape を選び床用ボタンに重ねてください
- ChangeDoodadState を設置して State に activate と入力したあと
Object ボタンをクリックして床用ボタンに連結してください - PlaySound を設置して Sound を sound/misc.xml:button_hatch にしてください
- AreaTrigger を設置して Trigger times を1に設定して
RectangleShape と ChangeDoodadState と PlaySound に接続してください - テストプレイして床用ボタンが凹み音が鳴る事を確認しましょう
- ChangeDooodadState を使用することで様々な Doodads の状態を変更できます
詳しくはこちらに記載されていますChangeDoodadState
ダメージを受けるトゲの床
doodads/generic/trap_spikes.xml を縦2x横4、合計8個並べて設置します
RectangleShape を設置し Width を8 Height を4に設定してトゲの床に重ねます
Scripting タグから DangerArea を設置して Damage を10に設定したあと
RectangleShape に連結してください
テストプレイしてトゲの床を踏みダメージがあることを確認して下さい
※DengerArea のダメージはキャラの Armor で減算されます
矢を射出する装置
- 適当な壁と床と光源を設置します
- doodads/generic/trap_shooter_arrow_up.xml を2つ設置します
- Scripting タグから ProjectileShooter を壁際に設置して
Direction を Down に Projectile を projectiles/shooter_arrow.xml に設定し
Spread を0.00に Spawn rate を1000に設定します
GridSize を4/1まで縮小して壁から1グリッド離すと丁度よくなるでしょう - テストプレイを開始して矢が射出されることを確認してください
- PlaySound を射出装置の近くに設置しましょう
そして Sound を sound/misc.xml:trap_arrows_shoot に設定したあと
Play as 3D のチェックボックスをチェックして下さい - TimerTrigger を設置して Frequency が1000であることを確認したら
PlaySound に連結してください - テストプレイを開始して矢の射出に効果音が追加されていることを確認してください
階段を設置する(マップ内移動やマップ間移動)
- Scripting タグから RectangleShape を選び階段の入り口に設置します
LevelStart を階段の出口に設置し、Start id を2にします
LevelExitArea を適当な場所に設置し、New level を1に、Level start を2に設定します
LevelExitArea を RectangleShape に接続すると完成です
テストを開始し RectangleShape を踏んで下さい
- 注意:レベルフォルダが製作されておらず levels.xml が書かれていない場合
HammerWatch は各マップのIDが何番なのか理解できないため
LevelExitArea の New level が使用できず階段は製作できません
ショップを制作する
まずはショップを設置します
Doodads タグの doodads/generic/deco_vendor_carpet_1.xml を敷いたり
doodads/generic/deco_vendor_cart.xml を横に置いたり
doodads/special/vendor_combo.xml のコンボ売りさんを置いたり
doodads/special/vendor_speech_combo.xml の吹き出しを置いたり
doodads/theame_a/a_floorsign_combo_l.xml の看板を置いたりしましょう
検索欄に vendor や combo と入れると探しやすいです
※ Vender(商人)達は Characters ではなく Doodads 分類なのですが
これは恐らく店と商人を一緒に動かせた方がマップ製作に便利だからだと思われます
Scripting タグから CircleShape を選び店員と重ねてください
ShopArea を設置して Categories に combo1 と入力したあと CircleShape と連結しましょう
※Categories は店の種類で複数設定することができます。詳しくはこちらShopArea
テストプレイをして店を開いてみましょう
高度な仕掛け
複数のスクリプトを使用した大掛かりな仕掛けについて記載します
ここまでの講座を理解しているという前提で記載します
アイテムを消滅させた後、別の場所に出現させる
- まず踏むと音を出して凹むスイッチを作ります
- Doodads タグを選択して doodads/generic/marker_spawn.xml を
横に並べて2つ設置してください。以降はこれをマーカーと呼びます - Items タグを選択して items/powerup_1up.xml を右側のマーカーに設置してください
- DestroyObject を設置して先ほど設置した1upアイテムに接続してください
- SpawnObjectを左側のマーカーに設置して
Object を items/powerup_1up.xml に設定してください - PlayEffect を先ほど設置した2つの marker_spawn.xml の上に設置して
Sprite を effects/particles.xml:flash に設定してください - PlaySound を2つの marker_spawn.xml の間に設置して
Sound を sound/misc.xml:spawn_tele に設定して下さい - AreaTrigger を DestroyObject と SpawnObject と
PlayEffect 2つと PlaySound に連結して下さい - テストプレイをして、スイッチを踏み、右の1upが消滅し
あたかも左に移動したかのように見えることを確認してください
4つのスイッチを全部押すとアイテムが出現する
- 適当な壁と床と光源を設置したあと踏むと凹むスイッチを4つ作りましょう
そしてアイテムが出現する場所に doodads/generic/marker_spawn.xml を設置してください
以降はこれをマーカーと呼びます
- Scripting タグから Variable を設置します
- ChangeVariableを設置します
- Variables ボタンを押して先ほど設置した Variable に連結してください
- Change を Add にして加算モードにして Value を1にします
- ChackVariable を設置してください
- Variables ボタンを押して先ほど設置した Variable に連結してください
- Compare 選択を Equal にして Compare 入力欄に4と入力して下さい
これで Variable が4の時に On True へトリガーを送るようになりました
- 4つの AreaTrigger をそれぞれ ChangeVariable と ChackVariable に接続してください
- SpawnObject を設置して Object を items/powerup_diamond.xml に設定してください
- PlaySound を設置して Sound を sound/misc.xml:spawn_tele に設定し
Play as 3D チェックボックスを有効にしてください - PlayEffect を設置して Sprite を effects/particles.xml:flash に設定してください
- ChackVariable の On True ボタンを押して
SpawnObject と PlaySound と PlayEffect を連結してください - SpawnObject と PlaySound と PlayEffect をマーカーの上に重ねて下さい
- テストプレイをしてスイッチを4つ踏むとダイヤモンドが出現することを確認しましょう
色分けされたスイッチとトゲの床
- 適当な壁と床と光源を設置したあと
doodads/special/trigger_button_floor.xml の床用ボタンを2つ設置してください
それを doodads/generic/maker_button_blue.xml と maker_button_red.xml で囲みましょう
doodads/generic/trap_spikes.xml を設置して
doodads/generic/maker_stripe_v_blue と maker_stripe_v_blue で挟みましょう
そして Items タグから適当な宝石やお金を配置しましょう
図5:構造サンプル画像
- ここまでの講座を参考にして
床スイッチを踏めば音が鳴って凹むようにします
トゲをダメージ100のトゲ床にします
- ChangeDoodadState を設置して State を Closed にしたあと
青い枠で挟まれたのトゲ4つに連結してください - ToggleElement を設置して State を Disable にしたあと
青い枠で挟まれたトゲの DangerArea に連結してください - PlaySound を設置して Sound を sound/misc.xml:trap_spikes_off に設定してください
- AnnounceText を設置して Time を10000、Type を Title に設定したあと
Text に Blue spike closed と入力して下さい - 青い枠で囲まれた床のボタンと接続している AreaTrigger から
ChangeDoodadState と ToggleElement と PlaySound そして AnnounceText に接続してください
これで青いボタンを踏むとトゲが閉じてダメージも受けなくなります - 赤い方でも同じ手順を繰り返して下さい
- テストプレイをして、青と赤のスイッチを踏み宝石を手に入れましょう
- AnnounceText で遠くにいるプレイヤーにトゲが解除されたことを伝えるのは
マルチプレイ向けマップにおいて非常に重要なことなのでしっかり伝えましょう - 戦闘中はメッセージに気付かないので Time は長めにしておくとよいでしょう
滑らかに出現する隠し橋
- 様々なパーツを使って下図のようなフロアを作り
items タグから items/chast_blue.xml を選択して3つ並べます - 押すと凹むスイッチを作ります
図7:F1 を押して Physics (衝突判定)が見えるようにした図
Doodads の Lidge は重ねても問題なく表示されるので端の部分は重ねてしまいましょう
- Scripting から HideObject を設置し State を Hide にしたあと橋を連結します
- GlobalEventTrigger を設置し Trigger times を1にしたあと
Event を LevelLoaded にして HideObject に連結します - これでゲーム開始時に橋が隠れるようになりました
- かなり複雑な形になるので先に下の図8を見て下さい
- PlaySound を橋の中央に設置し Sound を sound/misc.xml:spawn_tele に設定したあと
Play as 3D のチェックボックスを有効にし、3D Range を10.00にしてください - HideObject を設置し State をShow にしたあとコピーして5つに増やして下さい
HideObject 群を自身に対応した橋タイル2枚に接続してください - PlayAttachedEffect を設置し Sprite を efects/particles.xml:flash にしたあと
コピーして5つに増やして下さい
PlayAttachedEffect 群を自身に対応した橋タイル2枚に接続してください - Counter を設置したあとコピーして5つに増やしてください
そして左から順に Trigger times と Count を1づつ増やして下さい
一番左の Trigger times と Count が共に1 一番右が共に5になっていればOKです - Counterをそれぞれ真上の HideObject と PlayAttachedEffect に接続してください
そして更に橋の中央にある PlaySound に接続してください - ここまでの確認事項(違ったら接続に失敗している)
- 全ての HideObject の Object に2+0と表示されている
- 全ての PlayAtttachedEffect の Attach to に2+0と表示されている
- 全ての Counter の To execute に3+0と表示されている
- TimerTrigger を設置し、Enabled チェックボックスを無効にしたあと
Frequency を150に設定し、5つの Counter 全てに接続して下さい - ToggleElement を設置し State を Enable にしたあと
Element ボタンをクリックして TimmerTrigger に接続して下さい - DestroyObject を設置して Object ボタンを押し橋の左入り口の ledge に接続してください
- スイッチの AreaTrigger を ToggleElement と DestroyObject に接続してください
- テストプレイをして、スイッチを踏むと滑らかに橋がかかり渡れる事を確認しましょう
完全に隠蔽された隠し部屋
- まずは適当なDoodadsで部屋を作成しアイテムや光源を設置します
床には Doodads の trigger_button_floor を設置してくさい - 完成したら部屋を隠蔽する事になるのですが
普通に隠すと下図のように光漏れしますし入り口周りのブロックが不自然になります
- そこでまず Scripting の HideObject と GlobalEventTrigger を設置してください
設置したらGlobalEventTrigger を HideObject に連結してください
次に GlobalEventTrigger の TriggerTimes を1に設定して Event を LevelLoaded にします
これでゲーム開始時に1度だけ呼ばれるようになりました - HideObject の State を Hide に設定して、隠したい光源と入り口の柱に連結します
テストプレイして下さい、ゲーム開始時に連結したオブジェクトが綺麗に隠れると思います
※Light は Object ではないらしく Hideobject で消せません諦めましょう
図3:左はは Hideobject の連結図、右は上から被せる Doodads です。
- Scripting タグから RectangleShapes を選びスイッチの上に設置し
さらに AreaTrigger を近くに置きましょう
AreaTrigger の Trigger times を1に設定して RectangleShapes に連結して下さい - 二個目の HideObject を設置して State を Show に設定したあと光源に連結しましょう
- 先ほど設置した AreaTrigger から HideObject に連結して下さい
これでスイッチを踏むと消えていた光源が表示されるようになります - 隠蔽用の壁と天井を設置したあとで
DestroyObject を設置して隠蔽用の壁と天井の Doodads に連結しましょう
それから AreaTrigger から DestroyObject に連結しましょう
これでスイッチを踏むと壁と天井が消えるようになります
図4:左は HideObject 配置図 右は完成図
- ちなみに公式はこの完全な隠し部屋をほとんど使用していません
公式ダンジョンでは隠し部屋に宝箱や食べ物など光らないアイテムだけを配置したり
明かり漏れする部屋は長い廊下と組み合わせて隣の画面に隠したり
そもそも漏れてる明かりをプレイヤーへのヒントに使うといった方法で
HideObject を殆ど使わずに隠し部屋を制作しています - ちなみに HideObject を使う理由は SpawnObject より
オブジェクトの配置が格段に楽だからです
交互に出たり引っ込んだりするトゲの床
- 適当な壁と床と光源を設置した後で
doodads/generic/trap_spikes.xml のトゲの床を横に4枚並べて下さい
- Height と Width が2.00の RectangleShape をそれぞれ4枚トゲ床に重ねて下さい
- トゲの上側に DangerArea を設置して Enabled のチェックボックスを外して下さい
ChangeDoodadState を DangerArea の左に設置して State を activate に設定してください
ChangeDoodadState を DangerArea の右に設置して State を deactivate に設定してください
これらを左から1番目と3番目の RectanglShape に接続してください - ToggleElement を DangerArea の上に設置したあとState をToggle して
DangerArea に接続してください
- 新たにトゲの下側に DangerArea を設置して下さい
ChangeDoodadState を DangerArea の左に設置して State を activate に設定してください
ChangeDoodadState を DangerArea の右に設置して State を deactivate に設定してください
これらを左から2番目と4番目の RectanglShape に接続してください - ToggleElement を DangerArea の下に設置したあとState をToggle して
DangerArea に接続してください
- Variable を設置して Initial を2にしてください(0除算を避けるため)
- ChangeVariable を設置してください
- Variables ボタンを押して先ほど設置した Variable と連結して下さい
- Change を Add に設定してください、トリガーを受け取る度に Value を加算する設定です
- Value を1に設定して下さい。これで毎回1を加算します
- ChackVariable を設置してください、これはトリガーを受け取る度に Variable を判定して
答えが真なら On True に、偽なら On False にトリガーを送るスクリプトです- Variable ボタンを押して先ほど設置した Variable と連結して下さい
- Compare を Divisible に設定しましょう
これは Variable が Compare の値で割り切れる時は On True にトリガーを送る設定です - Compare の値を2に設定してください、これで偶数時は True 奇数時は False になります
- On True と上側左と下側右の ChangeDoodadState と両方の ToggleElement と
ChangeVariable に連結してください - On False と上側右と下側左の ChangeDoodadState と両方の ToggleElement と
ChangeVariable に連結してください
- PlaySound をトゲの中央あたりに設置してください
Sound を sound/misc.xml:trap_spikes に設定して下さい - TimerTrigger Frequency を2000に設定して下さい
そして ChackVariable と ChangeVariable そして PlaySound に接続して下さい - テストプレイをして交互にトゲが出入りしていることを確認しましょう
完成図(見辛くなったので PlaySound は省いています)
- タイマーと倫理機構を使用した極めて複雑な仕掛けです。頑張って成功させましょう。
マルチプレイ対応、前に立つと火が出るタレット
- 下図を参考に Doodad を配置してください
タレットのパーツは Turret で検索すると出てきます - ProjectileSpewer をタレットの射出口から1/4ブロック下にずらした場所に設置してください
Enabled チェックボックスを無効にして
Direction を Down に、Projectile を projectiles/shooter_fireball.xml に
Spled を 0.00 に Spawn rate を200に設定してください - PlaySound をタレットの真上に設置して
Sound を sound/misc.xml:trap_fireball_shoot に設定したあと
Play as 3D チェックボックスを有効にしてください - TimerTrigger を設置して Enabled チェックボックスを無効にしたあと
Frequency を200に設定してください、これで射撃音が同期します - ToggleElement を縦に並べて2つ設置してください
上側の State を Enable にして PlaySound と TimerTrigger に接続してください
上側の State を Disable にして PlaySound と TimerTrigger に接続してください - RectangleShape を設置し Height を 10にしてください
- AreaTrigger を縦に2つ配置し 上側を OnEnter 下側を OnLeave にしてください
そして2つとも RectangleShape に連結してください - Variable を設置してください
- ChangeVariable を設置して両方の Value を1に設定して
上側の Change を Add にして、上側の AreaTrigger から連結してください
下側の Change を Subtract にして、下側の ARえあTrigger から連結してください
2つとも Varable に連結してください - ChackVariable を設置してください
Variable に先ほど設置した Variable を連結してください
Compare 選択欄を GreaterOrEqual にして入力欄に1を入力してください
On True ボタンを押して上側の Enable の ToggleElement と連結してください
On False ボタンを押して下側の Disable の ToggleElement と連結してください
※ESCを押して On True の選択モードから抜けてから On False ボタンを押しましょう - テストプレイをして RectangleShape に乗ったり下りたりしましょう
左は設置例、右は完成図
- 単純なToggle式だと2人同時に入った時に止まってしまいます
- Variableを使わず On Enter で発射、On Leave で止める仕掛けだと
プレイヤー二人が乗って1人だけ下りた時に止まります - これらの問題を解決するためにキャラが入ると OnEnter で Variable 加算
キャラが出ると On Leave で減算、Variable が1以上の時に火を出す設計にしました - なお On Enter で発射、On Leave で止める仕掛けでも9割方まともに動くので
マップの肝になるような仕掛けでなければ Variable まで使う必要性は無いでしょう
マップデータ配布
- ここまでの講座の全てが入ったマップを配布しています
test2.zip - Program Files (x86)\Steam\steamapps\common\Hammerwatch\editor に入れて下さい
以下は収録されているが講座は無くなったボツ部屋の解説
- スイッチを踏むと扉が閉まり、敵が次々現れる部屋
複雑な機構の割にプレイヤーは部屋の中で耐えるだけで
プレイヤーが試行錯誤する余地が無いのでボツになりました
本編にこの手の仕掛けが無いのは恐らく同じ理由によるものでしょう
左は部屋の構成、右は完成図