Absolutely. The way I had written that macro was to hide the AC from the players (since they shouldn't know it) and simply determine if it hit or missed, then processed accordingly. I'll give you a rundown based upon exactly what I use for my dad: !power {{
@{format}
--charid|@{character_id}
--emote|@{character_name}'s hands blur as he suddenly strikes!
--name|@{character_name}'s Attack!
--leftsub|Attack Action
--rightsub|Melee
--hroll|[[ [$Wpn] ?{Weapon?|@{selected|meleeweaponname1},1|@{selected|meleeweaponname2},2} + 0d0 ]] [[ [$Attack] ?{Attack?|Regular,1|Bonus,2|Flurry,3|Opportunity,0} + 0d0 ]] [[ [$Open] ?{Open Hand Technique|Prone,0|Push,1|Reaction,2} +0d0]]
--Target *1:|$$#ff0000|@{target|Target 1|token_name}$$ I included the entire beginning for the sake of continuity, but it is also quite helpful. The --hroll begins by asking him which weapon he is going to use. Weapon 1 is his Unarmed Strike, while Weapon 2 is a quarterstaff/bo. I'll delete the references to it in the following macros. It then asks him what attack, which ultimately determines the output. Like target_list charms, he still has to target the maximum amount of targets he can possibly hit. In this case, 4. However, the [$Attack] determines whether he strikes once (Opportunity Attack), twice (Regular), three times (Bonus Action) or four (Flurry of Blows). The last part is which of the Open hand technique effects he will use if the attack is a Flurry of Blows (he's a Way of the Open Hand Monk). Beginning the output of the attacks, we have the first target line. Since he will always attack at least one, there is no need to put this into a conditional. His target is Target 1, and the entire line spits out Target 1's token name. --^1Attack *1:|~R [[ [$Atk1] ?{Advantage Target 1?|No, 1d20|Advantage, 2d20KH1|Disadavantage, 2d20KL1} + [[@{selected|meleetohit1} [Melee Bonus] ]] ]] ~R
--?? $Atk1.total < @{target|Target 1|bar3} AND $Atk1.base == 1 ?? !Miss *1:|And... you missed: ^^^^ $$#ff0000|**[[ 1t[Critical-Miss] [txt] ]]**$$
--?? $Atk1.total < @{target|Target 1|bar3} AND $Atk1.base <> 1 ?? !Miss *1:|~C $$#ff0000|**Whiffed.**$$ ~C
--?? $Atk1.total >= @{target|Target 1|bar3} OR $Atk1.base == 20 ?? ^1Damage *1:|~R[[@{selected|meleedmg1}+ [[@{meleedmgbonus1}]] ]]~R
--?? $Atk1.total >= @{target|Target 1|bar3} OR $Atk1.base == 20 ?? ^1Damage Type *1:|@{selected|meleedmgtype1}r3} OR $Atk5.base == 20 ?? ^1Damage Type *1:|@{selected|meleedmgtype2}
--?? $Atk1.base == 20 ?? ^2Crit *1:|~R[[@{selected|meleedmg1}]]~R
Each of these lines are for one single attack. The first rolls the attack. The second determines if the roll is a hit or miss. It doesn't spit out the AC by design, so if you want the macro to actually write it, you just add it somewhere. For example, you could change the first line to read: --^1Attack *1:|~R [[ [$Atk1] ?{Advantage Target 1?|No, 1d20|Advantage, 2d20KH1|Disadavantage, 2d20KL1} + [[@{selected|meleetohit1} [Melee Bonus] ]] ]] vs [[ @{target|Target 1|bar3} ]]AC ~R Each subsequent break in the entire macro where there is a line of open space, is there to simply let the user know the next series of lines is another attack. However, all you have to do is keep each "section" organized and understand that each one targets someone else, and prints out different output. For example: --?? $Attack == 2 ?? !Bonus|~C **$$#fff|Bonus Action Attack$$** ~~~ ~C
--?? $Attack == 2 ?? Target *5:|$$#ff0000|@{target|Target 3|token_name}$$
--?? $Attack == 2 ?? ^1Attack *5:|~R [[ [$Atk7] ?{Advantage Target 3?|No, 1d20|Advantage, 2d20KH1|Disadavantage, 2d20KL1} + [[@{selected|meleetohit1} [Melee Bonus] ]] ]] ~R
--?? $Attack == 2 AND $Atk7.total < @{target|Target 3|bar3} AND $Atk7.base == 1 ?? !Miss *5:|And... you missed: ^^^^ $$#ff0000|**[[ 1t[Critical-Miss] [txt] ]]**$$
--?? $Attack == 2 AND $Atk7.total < @{target|Target 3|bar3} AND $Atk7.base <> 1 ?? !Miss *5:|~C $$#ff0000|**Whiffed.**$$ ~C
--?? $Attack == 2 AND $Atk7.total >= @{target|Target 3|bar3} OR $Atk7.base == 20 ?? ^1Damage *5:|~R[[@{selected|meleedmg1}+ [[@{meleedmgbonus1}]] ]]~R
--?? $Attack == 2 AND $Atk7.total >= @{target|Target 3|bar3} OR $Atk7.base == 20 ?? ^1Damage Type *5:|@{selected|meleedmgtype1}
--?? $Attack == 2 AND $Atk7.base == 20 ?? ^2Crit *5:|~R[[@{selected|meleedmg1}]]~R All of these lines will only process if the attack is a Bonus Action attack. However, it shares a common target with the first of the Flurry of Blows attacks: --?? $Attack == 3 ?? !Flurry|~C **$$#fff|Flurry of Blows$$** ~~~ $$#fff|Cost of 1 **Ki**$$ ~C
--?? $Attack == 3 ?? Target *3:|$$#ff0000|@{target|Target 3|token_name}$$
--?? $Attack == 3 ?? ^1Attack *3:|~R [[ [$Atk3] ?{Advantage Target 3?|No, 1d20|Advantage, 2d20KH1|Disadavantage, 2d20KL1} + [[@{selected|meleetohit1} [Melee Bonus] ]] ]] ~R
--?? $Attack == 3 AND $Atk3.total < @{target|Target 3|bar3} AND $Atk3.base == 1 ?? !Miss *3:|And... you missed: ^^^^ $$#ff0000|**[[ 1t[Critical-Miss] [txt] ]]**$$
--?? $Attack == 3 AND $Atk3.total < @{target|Target 3|bar3} AND $Atk3.base <> 1 ?? !Miss *3:|~C $$#ff0000|**Whiffed.**$$ ~C
--?? $Attack == 3 AND $Atk3.total >= @{target|Target 3|bar3} OR $Atk3.base == 20 ?? ^1Damage *3:|~R[[@{selected|meleedmg1}+ [[@{meleedmgbonus1}]] ]]~R
--?? $Attack == 3 AND $Atk3.total >= @{target|Target 3|bar3} OR $Atk3.base == 20 ?? ^1Damage Type *3:|@{selected|meleedmgtype1}
--?? $Attack == 3 AND $Open == 0 AND $Atk3.total >= @{target|Target 3|bar3} ?? ^1Open Hand Technique *3:|@{target|Target 3|token_name} must succeed on a $~#7A00A3|Dexterity$~ saving throw or be knocked prone.
--?? $Attack == 3 AND $Open == 0 AND $Atk3.total >= @{target|Target 3|bar3} ?? ^2Open Hand DC *3:|~R †$ [[ [txt] 8 + @{PB} + @{wisdom_mod} +0d0 ]] †$ ~R
--?? $Attack == 3 AND $Open == 1 AND $Atk3.total >= @{target|Target 3|bar3} ?? ^1Open Hand Technique *3:|@{target|Target 3|token_name} must make a $~#A30000|Strength$~ saving throw. If it fails, it is pushed up to 15 feet away from @{character_name}.
--?? $Attack == 3 AND $Open == 1 AND $Atk3.total >= @{target|Target 3|bar3} ?? ^2Open Hand DC *3:|~R †$ [[ [txt] 8 + @{PB} + @{wisdom_mod} +0d0 ]] †$ ~R
--?? $Attack == 3 AND $Open == 2 AND $Atk3.total >= @{target|Target 3|bar3} ?? ^1Open Hand Technique *3:|@{target|Target 3|token_name} can't take reactions until the end of @{character_name}'s next turn.
--?? $Attack == 3 AND $Atk3.base == 20 ?? ^2Crit *3:|~R[[@{selected|meleedmg1}]]~R
What this is doing, is simply changing the attack rolls, but the target remains the same. However, each "section" has its own unique hidden number ( e.g.,^1Damage *3 or ^1Damage *5). To show the AC, just add the same code to each attack field, but using the appropriate target number: vs [[ @{target|Target 1|bar3} ]]AC
vs [[ @{target|Target 2|bar3} ]]AC
vs [[ @{target|Target 3|bar3} ]]AC
....... Thus, if a given attack uses Target 2, all subsequent Target references for that specific attack, must use the same setup: @{target|Target 3|token_name}
@{target|Target 3|bar3}
@{target|Target 3|field_name_to_call} It can become confusing, you just have to be patient and remember those little things. Every attack has to have its own section of fields. The complication of this particular macro is so he can use one macro for his attacks, since he has different numbers of attacks for a single attack (4), using 2 different weapons, and choices as to what sort of special thing happens on his flurry of blows.