Item Ideas - thatlonelybugbear/FoundryMacros GitHub Wiki

MidiQOL and DAE are meant to be prerequisites for these.

Pack Tactics.

This will give advantage to all attacks when there is an ally of the attacker within 5ft of the target.

  • Create an Item (feature).
  • Create a DAE on it, with:
    • Transfer to actor on item equip checked in the Details tab of the DAE.
    • Effect with:
      • key: flags.midi-qol.advantage.attack.all
      • mode: Custom
      • value: (computeDistance(token, target) <=5 && findNearbyCount(-1, targetUuid, 5) > 1) || (computeDistance(token,target) > 5 && !!findNearbyCount(-1, targetUuid, 5))

Advantage on Attacks against Fire Elementals and they have disadvantage to hit you.

Checks if the opponent creature is set as a Type: Elemental, Subtype: Fire and applies advantage/disadvantage when needed.

  • Create an Item (feature).
  • Create a DAE on it, with:
    • Transfer to actor on item equip checked in the Details tab of the DAE.
    • and two Effects entries:
      • key: flags.midi-qol.advantage.attack.all
      • mode: Custom
      • value: target.details.type?.value?.toLocaleLowerCase().includes("elemental") && target.details.type?.subtype?.toLocaleLowerCase().includes("fire") and
      • key: flags.midi-qol.grants.disadvantage.attack.all
      • mode: Custom
      • value: target.details.type?.value?.toLocaleLowerCase().includes("elemental") && target.details.type?.subtype?.toLocaleLowerCase().includes("fire")

Sunlight Sensitivity attacking disadvantage.

Conditional disadvantage on skill checks not yet implemented in MidiQOL- Create an Item (feature).

  • Create a DAE on it, with:
    • Transfer to actor on item equip checked in the Details tab of the DAE.
    • and an Effect entry:
      • key: flags.midi-qol.disadvantage.attack.all
      • mode: Custom
      • value: findNearby(null,tokenUuid,200).some((t) => t.document.light.animation.type=="sunburst" && getDistance(t,fromUuidSync(tokenUuid).object) <= t.document.light.dim)

*use a big enough distance in the findNearby function to try to catch all relevant lights on tokens. Some more checks needed for lights on scene, which cannot be done currently.

Checks if the sunlight sensitive creature is inside the dim radius of a creature emitting light which has the Sunburst animation type.


Gavel of the Venn Rune - Arbiters Shield.

Opponents roll attacks against you with disadvantage until your first turn in combat.

  • Create an Item (feature).
  • Create a DAE on it, with:
    • Transfer to actor on item equip checked in the Details tab of the DAE.
    • and an Effect entry:
      • key: flags.midi-qol.grants.disadvantage.attack.all
      • mode: Custom
      • value: target?.token?.combatant?.combat?.round === 1 && target.token.combatant.combat.turn < target.token.combatant.combat.turns.findIndex(i=>i.tokenId === target.tokenId)

Rogue's Assassinate.

Attack with advantage against targets that haven't acted yet, during the first turn in combat.(update from Michael)

  • Create an Item (feature).
  • Create a DAE on it, with:
    • Transfer to actor on item equip checked in the Details tab of the DAE.
    • and an Effect entry:
      • key: flags.midi-qol.advantage.attack.all
      • mode: Custom
      • value: target?.token?.combatant?.combat?.round === 1 && target.token.combatant.combat.turn < target.token.combatant.combat.turns.findIndex(i=>i.tokenId === target.tokenId)
    • and another:
      • key: flags.midi-qol.critical.all
      • mode: Custom
      • value: target?.effects?.some(eff=>eff.name === 'Surprised')

Invisibility condition vs See invisibility.

These conditionals on the DAE Midi-QOL flags should correctly identify if the actor on which the Invisible condition is applied, is in range of another actor with the See Invisible sight detection Mode and correctly apply relevant (dis/)advantage to attacks.

  • On the DFreds or otherwise provided Invisible condition alter the relevant MidiQOL flags as shown.
    • key: flags.midi-qol.advantage.attack.all
    • mode: Custom
    • value: workflow.targets?.first().detectionModes?.find(d=>d.id === "seeInvisibility") ? computeDistance(workflow.token,workflow.targets.first(),true) > workflow.targets.first().detectionModes.find(d=>d.id === "seeInvisibility").range : true and
    • key: flags.midi-qol.grants.disadvantage.attack.all
    • mode: Custom
    • value: workflow.token?.document.detectionModes?.find(d=>d.id === "seeInvisibility") ? computeDistance(workflow.token,workflow.targets.first(),true) > workflow.token.document.detectionModes.find(d=>d.id === "seeInvisibility").range : true;