*罠の追加 [#t854173a] **罠を追加する [#z815ee5d] -trap.hでは、全ての罠に番号名(英大文字による変数名)と対応する番号が#defineで定義されている。まずはここに追加 --最後のTRAPNUM含め連番が全てつながるようにする必要あり --trap.c等における処理では番号名のほうを用いるので、各番号は通常は気にしなくて良い --但し罠の種類の総数が31を越えるなら、その上のstruct trap {}内での Bitfield(ttyp,5); に手を加える必要がある。 ---monst構造体のmtrapseenは32ビットで、罠の種類が32個以下であることを前提にした作りであるため、こちらにも変更が必要 -dotrap(), steedintrap(), mintrap() が罠にかかったときの処理 --dotrap()はPCに対する処理 --steedintrap()は騎乗動物に対する処理 ---罠によってはdotrap()からsteedintrap()を呼び出している事もある。 --mintrap()は怪物に対する処理 -seetrap()は罠を発見済みにし、同時にマップ上でも見えるようにする --やっている事はtrap->tseenをTRUEにし、罠のある地点を再描画しているだけ。 -一旦動作した罠には処理内で作動済みマークをつけておく(trap->onceをTRUEにする)とよい。 -deltrap()は罠を消去する処理 -罠によっては2回目以降に罠が故障する可能性をもたせるのもあり --ここで先ほどのtrap->onceを参照する --メッセージ(及び必要なら他のエフェクトとか)と共に罠消去 --特に何らかのアイテム(射出物とか)を生成する罠の場合、無限生成を防ぐ為にも故障処理を加えるのが望ましい -罠が床に設置されるタイプであるならdelfloortrap()にも番号名を追加 --pager.c / is_cmap_trap() を必要なら修正 -mklev.c / trap_engravings[] が罠の種類の定義順(trap.h)に依存しているので、要変更 --ただし、trap_engravings[] を参照しているのは makeniche() のみで、"ad aerarium" と "Vlad was here" を書いているだけなので、makeniche() のほうを修正すればこの作業はしなくてもよくなる -polyself.c / dospinweb() にも要追加 --蜘蛛の巣を張れる怪物に変化している時に#monsterコマンドを使ったときの処理。足元に罠がある場合、それに対する処理(解除なり動作なり)を入れておかないとエラーを生じる。 あとは[[地形の追加]]と同様 -rm.h、drawing.c、display.c… -JNetHackならjtrnsobj.datに英名-和名の名称を追加 --語尾に「:」が入っていないとコンパイル時に認識されないので注意 ---- **解除可能な罠を追加する [#t39c4510] -まずは罠を追加する -untrap()に罠毎の解除方法を追加 --必要なら既存の罠解除用サブ処理(disarm_shooting_trap()等)を流用するか,それらを参考に処理を自作 -disarm_shooting_trap()を利用する時の注意 --解除したい罠(ここではttmp)とアイテム番号名(ARROW等)を送れば,罠消去や解除に伴うアイテム入手などの一連の処理を全てお任せにできる --但し生成されるアイテムの個数は(50-rn2(50))個で固定なので,他の罠に流用する時はこの辺にもなんらかの改造を加える必要がある ---- **設置可能な罠を追加する [#hd60554f] vanillaでは熊の罠と地雷がこれにあたるので、参考にするとよいだろう。 -まずは罠を追加する -設置する為のアイテムも用意する --大抵はアイテム自体を追加する必要があるだろう。詳細はアイテムの追加に譲る。 --なおかつそのアイテムに何らかの「コマンド(普通はa)pplyだろう)を用いる」事ができるようにしなければならない。詳細はアイテムの追加に譲る。 -「コマンドを用い」た時にuse_trap()を呼び出すようにする -use_trap()内に処理を追加 -なお、罠を解除可能にし、解除時には設置用アイテムを得られるようにしておけば、再設置が可能となる。 ---- **おまけ [#j878df51] -宝箱に仕掛けられる罠を追加したいならchest_trap()を改造 --struct trap {} で記録される変数のうち、launch_otypとlaunch2は現在の所はrolling boulder trapでのみ使用されている模様。 --launch_otypで転がってくるアイテムの種類を,launch2でそのアイテムの座標を記憶している模様