-
Notifications
You must be signed in to change notification settings - Fork 0
Home
You must have Use Core Macro Execute enabled in MATT Config. If you don't specify Use Core Macro Execute in MATT Config, you will get strange results (some rolls will be forced to the GM).


Monk's Active Tile Triggers (MATT) makes it possible to handle many traps in Foundry, but the strategy for doing this in GURPS using GGA is less obvious. The typical approach examples given for MATT use an invisible tile "trigger zone" to automatically activate a trap tile and associated animation.
MATT has some features to invoke a Perception check, but I have not found any way to make this work with GGA, so I came up with a few reusable core scripts and Tile Templates to trigger them. The point of all this is to give the hapless adventurer a chance to detect the trap before it gets triggered, and evade it if they failed to detect it.
The approach I have used is pretty standard for MATT. Link several hidden "zone" tiles together to trigger various effects with a basic Tagger naming scheme for the tiles.
The first "zone" is a Detection Zone that runs a /:DetectTraps macro configuration command. This works similar to the classic SpellDamage macro for GGA and is triggered by a MATT Chat Message or Macro containing GURPS-style trap details so that many different trap configurations can be handled.
If DetectTraps is successful as they enter this zone, the player gets a warning and nothing else happens.
If detection fails, then the trap is triggered. DetectTraps calls EvadeTrap or ResistEffect along with a Sequencer animation of the trap effect and the Tagger name of the next tile to trigger: the Activation Zone. This tile can only be activated manually because it shares a description of the trap effects, which you can easily tailor in the tile Trigger for the current scene. You can use the default finishing /anim or easily add your own choice.
The format of DetectTraps chat command is explained below. Here is the MATT Trigger screen, which triggers for anyone On Enter:

The Activation Zone MATT would be something like:

Instructions on how to import the MATT templates
The DetectTraps script is a recipe book for some iconic trap types. It is meant to be expanded by you to fit your most fiendish trap designs. First, the included trap types are all designed to have nearly every aspect of the trap defined in a single-line macro chat command. How dangerous the trap is, which MATT tiles are triggered, and the description of the trap effect are all customizable without any Macro changes.
DetectTraps gives characters who enter the Detection Zone tile a perception roll (with skill modifiers for Traps skill) to detect the trap; if detection fails, then it triggers an animation and either EvadeTrap (defaults are DX and Jumping) or ResistEffect.
Required Macros: DetectTraps, EvadeTrap, ResistEffect
Optional Macros: PoisonSpray, YellowMoldSpores, AlchemistFire, SpikeTrap100x100px, SpikeTrap160x160px
The usage format is a GGA macro chat command that can be issued as a chat message or in JavaScript using GURPS.executeOTF():
/:DetectTraps title="<title>"" dice=<dice> adds=<adds> type=<type> armordiv=<divisor> rsize=<rsize> attrib=<attribute> difmod=<difficulty> skill=<skill> detectwith=<detectWith> detectdif=<detectDif> tag=<trapTag>
- Title - name to display on dialog; usually the type of trap, such as "Spike Trap", "Caltrops", "Pitfall Trap", "Poison Gas", "YellowMold", "AlchemistFire", etc.
- Dice - dice of damage
- Adds - modifier to each die of damage, zero if none
- Type - Damage type (cr, cut, burn, etc...)
- Divisor - Reduce DR by (x)
- Radius - spread to Radius hexes
- Attribute - DX, ST, DX, IQ, Will, etc for Evade or Resist
- DifMod - Difficulty Modifier; corresponds to margin of success when the trap was created;
- Skill - Skill name Precheck to evade, i.e. Acrobatics; default is Jumping
- DetectWith - defaults to PER; could be vision, hearing, etc.
- Detect Difficulty - defaults to DifMod; use this if detection is harder or easier than evasion/resistance
- Trap Tag - the Tagger tag base string for this trap
For example, just the command for AxeTrap:
/:DetectTraps title="AxeTrap" dice=5d adds=2 type=cut armordiv=5 attrib=DX difmod=-4 skill=Acrobatics detectwith=!PER! detectdif=-6 tag=DC01AxeTrap02
or the macro, in this case DC01DetectAlchemistFire:
let OtF = `/:DetectTraps title="AlchemistFire" dice=4 adds=4 type=burn rsize=3 attrib=DX difmod=-6 skill=Jumping detectwith=!PER! detectdif=-8 tag=DC01TrapStatue05`;
GURPS.executeOTF(OtF);The success and fail outcomes for DetectTraps will either warn the player about the trap or trigger it. If triggered, depending on the "title type" of the trap, the result would be to spawn either EvadeTrap or ResistEffect macros using nearly the same format as DetectTraps:
/:EvadeTrap title="${title}" dice=${dice} adds=${adds} type=${type} armordiv=${armorDivisor} attrib=${attribName} difmod=${difMod} skill=${skillName}/:ResistEffect title="${title}" dice=${dice} adds=${adds} type=${type} rsize=${radius} attrib=${attribName} difmod=${difMod}
Example chat commands to use in MATT: ` /:DetectTraps title="AxeTrap" dice=5d adds=2 type=cut armordiv=5 attrib=DX difmod=-4 skill=Acrobatics detectwith=!PER! detectdif=-6 tag=DungeonCave01AxeTrap01
/:DetectTraps title="Caltrops" dice=1 adds=0 type=thr armordiv=0 attrib=DX difmod=-2 skill=Acrobatics detectwith=!PER! detectdif=-2 tag=DungeonCave05Caltrops01
/:DetectTraps title="AlchemistFire" dice=4 adds=4 type=burn armordiv=5 attrib=DX difmod=-6 skill=Acrobatics detectwith=!PER! detectdif=-8 tag=BXTrapStatue05
/:DetectTraps title="YellowMold" dice=2 adds=3 type=tox armordiv=3 attrib=HT difmod=-6 skill=Jumping detectwith=!PER! detectdif=-6 tag=BXTrapStatue01
/:DetectTraps title="Poison" dice=1 adds=9 type=tox armordiv=3 attrib=HT difmod=-3 skill=Jumping detectwith=!PER! detectdif=-8 tag=DungeonCave05TrapStatue03
/:DetectTraps title="Spike Trap" dice=1 adds=9 type=imp rsize=3 attrib=DX difmod=-6 skill=Acrobatics detectwith=!PER! tag=SpikeTrap01
/:DetectTraps title="Pitfall Trap" dice=3 adds=6 type=pi++ rsize=2 attrib=DX difmod=-4 skill=Jumping detectwith=!PER! tag=PitfallTrap01
/:DetectTraps title="AlchemistFire" dice=4 adds=4 type=burn rsize=3 attrib=DX difmod=-5 skill=Jumping detectwith=!PER! detectdif=-8 tag=BXTrapStatue05`
Evade example:
/:EvadeTrap title="Spike Trap" dice=1 adds=9 type=imp rsize=3 attrib=DX difmod=-6 skill=Acrobatics detectwith=!PER! tag=SpikeTrap01
/:EvadeTrap title="Pitfall Trap" dice=3 adds=3 type=pi++ rsize=2 attrib=DX difmod=-4 skill=Acrobatics detectwith=!PER! tag=PitfallTrap01
/:EvadeTrap title="AlchemistFire" dice=4 adds=4 type=burn rsize=3 attrib=DX difmod=-5 skill=Jumping detectwith=!PER! detectdif=-8 tag=BXTrapStatue05
If you want to add new trap animation types, you will need to add the "recipe" in DetectTraps. This usually consists of a GGA a Sequencer script (like /:PoisonSpray tag=${trapTag}) that works on current targets, or a simple GGA !/anim chat command combined with an explicit /:TriggerTrap tag=${trapTag}; both forms take the base Tagger name of your tile set for a given trap and look for another tile in the set, such as Triggered${trapTag} or Reveal${trapTag}.
Look for this comment in DetectTraps: // Add recipes for special trap effects here