Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Advertisement Create a free account

[Script] !Radar: an animated Token Sensor / Tremorsense / Blindsense / Divine Sense, etc. solution with optional Dynamic Lighting interaction

1620479304

Edited 1620479325
Ok, just installed the new script to start playing with it and found something.... odd.  I have a token with multiple magic school types listed in gmnotes When I run my detect magic script (below) it only shows one of the types.  It skips Abjuration and reports Transmutation, but then ignores the rest.  It also seems to just randomly report one of the types. !radar {{ --range| [[ 6.9*35]] --pinglife| 3000 --layers| gmlayer, objects, map --LoS| ?{Blocked|yes|no} --title| Detect Magic --silent| no --units| u --visible| no --tokfilter| gmnotes: Abjuration#6fa8dc, Conjuration#green, Divination#ffffff, Enchantment#yellow, Evocation#red, Illusion#ff00ff, Necromancy#000000, Transmutation#blue }}
I think wavelife might be overriding pinglife; not sure if that's intended. The pings that overlap the tokens disappear as soon as the waves do with these parameters (instead of lasting 3 seconds). --wavedelay| 5 --wavelife| 280 --wavespacing| 35 --pinglife| 3000
1620480761
I wonder if the script is designed to handle tokens that meet multiple conditions.
1620483563

Edited 1620483676
David M.
Pro
API Scripter
Persephone  said: I did also just find a few positions where tokens at the edge of the range don't get pinged, so that formula might come in handy here if you have the time to implement it. The red rings on the map in the screenshot below are not included in the ping even though they are in the 30 ft range. Yep, that is expected behavior with the current script. Distance is currently measured in pixels from token centers, and those points are the equivalent of ~30.4ft away using Euclidean distance calcs and 5ft squares. At first glance, seems like converting to units (with page gridIncrement settings) and rounding to nearest unit would give you what you are looking for (think that's basically what your formula is doing). Perhaps some kind of calcType command or nearestUnit boolean flag would be in order, since gridless folks would need to rely on the current calc method. Got my test page ready to go, but I need to step away and won't have a ton of time this weekend due to IRL stuff. I will definitely look into it as soon as I can, though. Thanks for your help & input! :)
1620483812
David M.
Pro
API Scripter
Persephone said: I think wavelife might be overriding pinglife; not sure if that's intended. The pings that overlap the tokens disappear as soon as the waves do with these parameters (instead of lasting 3 seconds). --wavedelay| 5 --wavelife| 280 --wavespacing| 35 --pinglife| 3000 I'll look into that when I can get back to my computer. Doesn't sound as intended.
1620484425
David M.
Pro
API Scripter
Darryn said: I wonder if the script is designed to handle tokens that meet multiple conditions. Hmm, yeah currently it will only put the tokens into a single group (either the first or last condition met? - I'd have to double-check). Support for multiple groupings would require messing with the data structure a bit more and figuring out the best display approach. I'll put it on the list.
1620518597

Edited 1620518631
David M.
Pro
API Scripter
Persephone  said: I think wavelife might be overriding pinglife; not sure if that's intended. The pings that overlap the tokens disappear as soon as the waves do with these parameters (instead of lasting 3 seconds). --wavedelay| 5 --wavelife| 280 --wavespacing| 35 --pinglife| 3000 So everything seems to work fine for me with the settings you noted above. My pings are lasting the full 3 seconds. Were you maybe getting a delay before you saw the animations start? With a very short wavedelay like that maybe you are just jamming a ton of commands down the api's throat and if your vtt was in a temporary laggy state it might act strange. I usually try to keep it at 20 or higher due to diminishing returns and reliability as I think I start running into limits either from my pc (integrated graphics :/) or possibly overhead between the api and vtt. That said, I still occasionally see some weirdness where there is a pause and then everything all happens really fast, but it usually clears up after a bit. 
1620567046
The only time I think this would really come into play is Detect Magic where the user can use there action to "see" what type of magic it is.  At least that is my usage right now LOL. Love the script! David M. said: Darryn said: I wonder if the script is designed to handle tokens that meet multiple conditions. Hmm, yeah currently it will only put the tokens into a single group (either the first or last condition met? - I'd have to double-check). Support for multiple groupings would require messing with the data structure a bit more and figuring out the best display approach. I'll put it on the list.
1620645918
David M.
Pro
API Scripter
Blerg, while working on other stuff I think I ran across a pretty fundamental problem with the 5e cones - they do not reach the full range. I'm going to have to re-work how those calculations are done (so back to math and multiple coordinate system hell for me - vtt vs. svg path). Be warned. With the current version, you could try to extend the range to compensate, but I'd recommend omitting the graph grid if you do as it currently does not handle partial-unit-sized ranges well. I apologize for any inconvenience.
1621273657
David M.
Pro
API Scripter
Version 0.8 - 5e cone fix, PF/3.5-style distance calculations ( github link ) I believe I fixed the 5e cone problems with this update. Also, there are two new options for the --units command. PF/3.5 and 5e  (gridded games only) --units| <u/units/squares/square/hexes/hex, Optional 3.5/pf/5e > -> Adding pf or 3.5 to the units command will utilize pathfinder-style distance calculations, where every other diagonal square is counted as 1.5 units . This will have two effects: The displayed distance will be in full grid increments, either 1u or typically 5ft for most games The determination of whether a token is within range will also use this calculation style. This might pick up some extra tokens that were just out of range based on the default Euclidean/Pythagorean calculations.        ->  Adding  5e  to the units command will utilize 5e-style distance calculations, where  every diagonal square is counted as 1 unit . Unlike the pf/3.5 option, this will only affect the displayed distanc e which will be in full grid increments (either 1u or typically 5ft for most games), and diagonals will only be counted as 1square (or 5ft typically). Unlike the pf/3.5 option, this will not affect whether a token is within range.  5e cones utilize a triangular template where length=max_width Examples (note commas) --units|ft            //Toks in range and displayed distance uses Euclidean distance calculations --units|ft, pf        //Toks in range and displayed distance uses pathfinder/3.5e distance calculations --units|ft, 3.5       //Toks in range and displayed distance uses pathfinder/3.5e distance calculations --units|u, 5e         //Toks in range uses Euclidean distance calculations, displayed distance uses 5e calcs (diags only count 1 unit) Animated gif examples This first example shows a 30ft circular range. It is run first with default distance calculations, then a second time using pathfinder-style calculations. Third line from the bottom. !radar {{ --range|30ft --wavetype|circle --wavespacing|35 --wavedelay|50 --wavelife|200 --pinglife|3000 --layers|gm, token --charfilter|npc_type: celestial#yellow, fiend#red, undead#blue --LoS|yes --title|Divine Sense --units|ft, pf --output|graph, table, compact --graphoptions|grid, circles }} This second example uses a 5e-style cone at a -45 degree angle. The first time it is run using the default distance calculations. The second time it displays the distance to target suing 5e-style calculations (diags only count 1 square). Note that determination of whether a token is "in range" is not affected. Mod is in the third from the last line !radar {{ --range|30ft --wavetype|5e, -45 --wavespacing|35 --wavedelay|50 --wavelife|200 --pinglife|3000 --layers|gm, token --charfilter|npc_type: celestial#yellow, fiend#red, undead#blue --LoS|yes --title|Divine Sense --units|ft, 5e --output|graph, table, compact --graphoptions|grid, circles }}
1621445457

Edited 1621448579
Since you put the effort in to calculate pf/3.5 distances, can you put a check before the printout ? basically what I would love is for the script to check a stat from the sheet ( perception, in this case ), roll 1d20, add the stat, and check it against a number I can put in the gm notes ( which would be the stealth check of the npc), near the "NPC" for example. It would be awesome for stealth vs perception. An even more awesome addon would be to increase the "difficulty" of the check, if the target is out of sight ( hearing through a wall is harder than without the wall for example )
1621453672
David M.
Pro
API Scripter
Renar, I think you can do this with the current version. The following looks like it works, using a bar3 value to store the target number and inline rolls to generate the perception roll (not working for gmnotes for me at the moment, so I'll have to check if it is only treating as a string instead of numeric). This is using 5e attribute names, but you get the idea.  !radar {{ --tokFilter|bar3_value: < [[@{selected|perception_bonus}+[[1d20]]]] }} When you run it, the total number rolled (1d20 + perception) will be added as a filter group in the table output, so the player will see what they rolled. If the target value is less than this number, the creature is spotted and will get pinged! You could optionally have the comparison value either directly entered by the player after they roll from their sheet, or build your comparison value using an inline roll with queries in case the player has some situational circumstances that make the roll calculation different each time (e.g. penalty for low light, etc.). This is a cool application of the script, thanks for the idea!
1621454517
just tested, that's exactly what i wanted, thanks man, that's awesome
1621567063
Styx
Pro
Hi David M, Awesome macro and shout out to Nick O for the YT demo. I've been testing this and noticed that I don't see all pings on the radar graph. All 3 tokens on the map are pulled from the compendium and they all detect in the table correctly, but only the Undead pings on the graph. Any ideas? I'm using Shaped Sheet as well
1621567153
Styx
Pro
Styx said: Hi David M, Awesome macro and shout out to Nick O for the YT demo. I've been testing this and noticed that I don't see all pings on the radar graph. All 3 tokens on the map are pulled from the compendium and they all detect in the table correctly, but only the Undead pings on the graph. Any ideas? I'm using Shaped Sheet as well Nevermind, I found the issue - 2 ##'s in the macro for the colours which when removed fixed it. :)
Hey,  Just seen Nick Olivo's video on this and I am very excited and it looks great, thank you. However here is a very long shot as to how I might want to use it for a unique magic item I created for one of my players, one of the abilities of the artifact is to be able to detect life 2/day for 10 minutes I think.  However it also gives the user an idea of how healthy the target is. The more healthy it gives out a violet hue, then it goes through VIBGYOR with R(Red) meaning about to die. If target is dead there is not aura.  Do you reckon there is a way that this radar can detect the colour depending on the health of the target?  I know it is a long shot but hey, don't ask, don't get. :-)  BTW I will 100% definitely be using this for detect magic. This is awesome. :-) 
1621650008
David M.
Pro
API Scripter
Hi Garry, there is not currently a way to test for percentage of health, as it only tests against one attribute or token property. However, you can create multiple filter groups based on the current health value. Here is an example that creates three groups based on bar1_value. When doing this, you should order them from lowest health to highest. The lowest health category (>0) will ping red, the middle one (>20) will ping yellowish, and the highest one (>40) will ping green. You could add as many filter groups as you want and customize the colors with html codes. !radar {{ --title|HP test --range|6u --tokfilter|bar1_value: >0#ff0000, >20#ffff00, >40#00ff00 --layers|token, gm --units|u --output|graph, table, compact --graphOptions|circles, grid }}
1621662692

Edited 1621668550
Hey, have someone a macro for PF 1E to use Detect Magic with this script? Edit: I make one for Detect Magic Round 3: !radar {{   --range|       18 m   --wavespacing|  35   --wavedelay|    50   --wavelife|     200   --pinglife|     3000   --layers|       gm, token, map   --tokfilter|bar1_max: Faint#ffffff, Moderate#ea9999, Strong#ff00ff, Overwhelming#9900ff   --title|        Detect Magic 3rd Round   --silent|       no gm --units|m, pf  --graphoptions| grid circle --output| graph table --LoS| true }} and also for See Invisibility: !radar {{   --range|       36 m   --wavespacing|  35   --wavedelay|    50   --wavelife|     200   --pinglife|     3000   --layers|       gm   --tokfilter|bar1_value: Invisibility#ffffff   --title|        See Invisibility   --silent|       no gm --units|m, pf  --graphoptions| grid circle --output| graph table --LoS| true }}
1621687355
Can you do math in the check? --tokfilter|bar1_value: >[[@(selected|bar1_max)/25]]#ff0000, >[[@(selected|bar1_max)/50]]#ffff00, >[[@(selected|bar1_max)/75]]#00ff00 David M. said: Hi Garry, there is not currently a way to test for percentage of health, as it only tests against one attribute or token property. However, you can create multiple filter groups based on the current health value. Here is an example that creates three groups based on bar1_value. When doing this, you should order them from lowest health to highest. The lowest health category (>0) will ping red, the middle one (>20) will ping yellowish, and the highest one (>40) will ping green. You could add as many filter groups as you want and customize the colors with html codes. !radar {{ --title|HP test --range|6u --tokfilter|bar1_value: >0#ff0000, >20#ffff00, >40#00ff00 --layers|token, gm --units|u --output|graph, table, compact --graphOptions|circles, grid }}
1621689125
I tweaked the Alien RPG suggested macro a little for my game... !radar {{ --title|M314 Motion Tracker --selectedid|@{selected|token_id} --range|20m --tokfilter|bar1_value:>0#ffffff --groupby|true --wavespacing|70 --wavedelay|10 --wavelife|200 --wavecolor|#ffffff --pinglife|5000 --layers|token, gm --LoS|no --units|m --silent| no gm --wavetype|circle, ?{Scan Direction|N, 0|NE, 45|E, 90|SE, 135|S, 180|SW, 225|W, 270|NW, 315}, 160 --output|graph --graphOptions|circles, reticle }} !roll20AM --audio,play,nomenu|Motion_2_Medium !roll20AM --audio,stop,delay:5,nomenu|Motion_2_Medium I preferred to have the player pick a direction from a dropdown instead of moving/clicking tokens. Set the wave and blip colors to white. And only output the graph, not the table. I also shortened the range to 20m, even though this isn't the distance for the M314 in the book, it works better for my maps/game. The last two lines are calls to the Audio Master API to play the motion tracker sound effect I'm using. I have changed the RadarPing token from the standard transparent .png to a fuzzy white blob something like the movie's tracker blips. I also gave the RadarPing token "sight" - but to make it so that the blips only showed up on the map, but didn't reveal anything based on present lighting, I gave it a limited field of vision set to 0 degrees in both fields. This seemed to work, but I haven't tested it with players or a dummy account, only switching to player mode to try it out. Also of note, I have my filter set as " --tokfilter|bar1_value:>0#ffffff " as I set this to my mobs health, then unlink it to make it per token instead of each token affecting the character sheet attribute. By the way, the suggested macro uses " --charfilter|hp:>0 " but the Alien RPG character sheet has no "hp" attribute, using "health" instead would fix this. This is a fantastic script and is very close to what I was looking for to give my players that Alien motion tracker experience. I might take a closer look at the code later and see if I can customise the look further. For now, I think it's going to blow my players away. Thank you!
1621691933

Edited 1621693197
WOW, thank you David, I didn't get a ping (pardon the pun) to tell me you had replied so quickly, really appreciate this.  Thank you also Darryn, I am going to play about with what you have written, see what happens.  However I have, probably a really basic problem that I can't seem to figure out and I bet it is really simple. I will post a new reply.  David M. said: Hi Garry, there is not currently a way to test for percentage of health, as it only tests against one attribute or token property. However, you can create multiple filter groups based on the current health value. Here is an example that creates three groups based on bar1_value. When doing this, you should order them from lowest health to highest. The lowest health category (>0) will ping red, the middle one (>20) will ping yellowish, and the highest one (>40) will ping green. You could add as many filter groups as you want and customize the colors with html codes. !radar {{ --title|HP test --range|6u --tokfilter|bar1_value: >0#ff0000, >20#ffff00, >40#00ff00 --layers|token, gm --units|u --output|graph, table, compact --graphOptions|circles, grid }}
Help please.............it is working without the graph options and output....... This is my Macro -  This is what I get in chat -
1621693237

Edited 1621693332
I think you need a comma between grid and circle, same with output --graphoptions|grid , circle --output|graph, table Garry Miller said: Help please.............it is working without the graph options and output....... This is my Macro -  This is what I get in chat -
1621693590

Edited 1621693616
Hi Darryn, I have tried that too, no joy, I still get the response above in yellow. Unexpected argument. :-(  Darryn said: I think you need a comma between grid and circle, same with output --graphoptions|grid , circle --output|graph, table
@Garry looks like you're using the one-click version which hasn't yet been updated with the newest features. The first post is this thread has a link to the newest version that you can copy and manually install.
1621694056

Edited 1621694968
Thank you, so very very much :-)  EDIT: IT WORKED YAY :-) Persephone said: @Garry looks like you're using the one-click version which hasn't yet been updated with the newest features. The first post is this thread has a link to the newest version that you can copy and manually install.
I can see where you are going with this Darryn, I copied and pasted and it didn't work, but definitely can see what you mean, I will work on it, but I don't think I am clever enough to work it out. But I will try.  Darryn said: Can you do math in the check? --tokfilter|bar1_value: >[[@(selected|bar1_max)/25]]#ff0000, >[[@(selected|bar1_max)/50]]#ffff00, >[[@(selected|bar1_max)/75]]#00ff00
1621698257

Edited 1621698296
Well I also realized my very quick math was off *doh*.  Here with better math.  (Red when under 25%, Yellow when Under 50%, Green when greater than 50%).  You can adjust the numbers (or add a 4th in the .5 to .75 range).  The order might also need to be tweaked. --tokfilter|bar1_value: <[[@(selected|bar1_max)*.25]]#ff0000, <[[@(selected|bar1_max)*5]]#ffff00, >[[@(selected|bar1_max)*.5]]#00ff00 Garry Miller said: I can see where you are going with this Darryn, I copied and pasted and it didn't work, but definitely can see what you mean, I will work on it, but I don't think I am clever enough to work it out. But I will try.  Darryn said: Can you do math in the check? --tokfilter|bar1_value: >[[@(selected|bar1_max)/25]]#ff0000, >[[@(selected|bar1_max)/50]]#ffff00, >[[@(selected|bar1_max)/75]]#00ff00
I really appreciate your help here, I hope you are not supposed to be doing anything more important. :-)  However this is what happens when I run the latest version you sent to me - Darryn said: Well I also realized my very quick math was off *doh*.  Here with better math.  (Red when under 25%, Yellow when Under 50%, Green when greater than 50%).  You can adjust the numbers (or add a 4th in the .5 to .75 range).  The order might also need to be tweaked. --tokfilter|bar1_value: <[[@(selected|bar1_max)*.25]]#ff0000, <[[@(selected|bar1_max)*5]]#ffff00, >[[@(selected|bar1_max)*.5]]#00ff00
That's only gonna use the health bar of the token that's sending out the radar, which won't work anyway for what you're trying to accomplish.
It's cool, it totally works for HP from 0-5, then 6-10, then 11-15 etc and the scale of detection for the artifact is ROY G BIV, so if I do increments of 5 HP the player will see that the creature is healthy with over 40hp is Violet then when it goes below 40hp it will start going through the colours, until dead. (Might do increments of 10hp or maybe even 15hp).  I think what I am mostly stoked about here is that the Detect Life ability that I made up for this item, can detect invisible creatures. And the next level of the Dungeon they are going to go to is purely Horror, and I can already imagine the panic when only one player can see the invisible creatures. "LOOK OUT THERE IS ONE STOOD RIGHT BEHIND YOU!" Just that one character can see on the radar and the ping on the map. The rest are clueless.  "Where? I can't see it" BLAP! :-)  And so on. 
1621719548
David M.
Pro
API Scripter
Sorry I'm traveling all day today, so unable to keep up with the recent flurry of activity. Thanks to those jumping in with responses!
No worries David, I stumbled across Nick Olivo's video regarding this API and instantly fell in love with it.  So much so I have signed up and am now a patron, although not a mega amount each month, but just a thank you for this. I have never signed up to a patreon before so that was new. But deserved.  I cannot wait for my players to see this in action. And I have a bloomin week to wait yet. Ahhhhhhhhhh.   David M. said: Sorry I'm traveling all day today, so unable to keep up with the recent flurry of activity. Thanks to those jumping in with responses!
1621728808
David M.
Pro
API Scripter
Thank you so much, Garry, and for the kind words! I'm super happy that you like the script, and I hope your players get a kick out of it, too!
1621729699
David M.
Pro
API Scripter
Godsbane said: I tweaked the Alien RPG suggested macro a little for my game... <snip> ...By the way, the suggested macro uses " --charfilter|hp:>0 " but the Alien RPG character sheet has no "hp" attribute, using "health" instead would fix this. <snip> This is a fantastic script and is very close to what I was looking for to give my players that Alien motion tracker experience. I might take a closer look at the code later and see if I can customise the look further. For now, I think it's going to blow my players away. Thank you! Thanks for sharing your update and the correct attribute, Godsbane! I'll put a note and credit you in my example above. I don't actually play Alien RPG, so I was simulating it with the 5e OGL character sheet based on a description from another user. If you have any particular ideas for mods, feel free to post here or PM me, and I can look into how easy/difficult it would be to fit in to a future update. Also, the code is a bit scattered and I'm sure could have been organized way more efficiently (I'm not a programmer by profession, and just started with js last year), but poke around all you want! Sharing is caring :)
Hello! this is such a great script and I really appreciate all the effort put into it and sharing it for free!...how great is that?? So, total novice here, Im basically a cut and paste girl. Ran into a curious issu; yesterday everything was running great no problems at all, log into my game and today and while the graph shows up on the player chat, nothing is registering..its all "N/A" despite the tokens being there, doesnt matter the layer or distance. Any suggestions on what might be happening? All my other scripts are working fine, and I even restarted the sandbox...No idea what to do...
1622149295
David M.
Pro
API Scripter
@Zapatilla, what is your application? Can you post the code you are using? Does the graph have pings or is it blank?
David M. said: @Zapatilla, what is your application? Can you post the code you are using? Does the graph have pings or is it blank? using the script off of Git Hub, animation works fine, graph is blank
1622150429
David M.
Pro
API Scripter
I meant the macro code, not the api script :)  Well at least the graph and table are in agreement, so to figure out why nothing is showing up it will help to see what you are trying to do by looking at your macro code. 
My bad! Thanks by the way for responding so quickly..  Detect Magic !radar {{   --range|        30 ft   --wavespacing|  35   --wavedelay|    50   --wavelife|     200   --pinglife|     4000   --layers|       gm, token, map   --tokfilter|    gmnotes: Abjuration#green, Conjuration#yellow, Divination#blue, Enchantment#9900ff, Evocation#ff4500, Illusion#dd7ebb, Necromancy#black, Transmutation#red, Wild#800080, Dead#8b7355  --graphoptions| grid circle  --output| graph table   --title|        Detect Magic   --units|        u }} Detect Traps !radar {{   --range|        120 ft   --wavespacing|  35   --wavedelay|    50   --wavelife|     200   --pinglife|     4000   --layers|       gm, token, map   --tokfilter|    gmnotes: Trap#green   --graphoptions| grid circle   --output| graph table   --title|        Detect Traps   --units|        u }}
1622153738
David M.
Pro
API Scripter
Ok, using token filters for both. Do you have tokens in range where the token's GM notes contains the name of one of the schools (for detect magic) or the word "trap" somewhere (for detect traps)? It's not case-sensitive, but the spelling must be correct. Also, don't confuse the token's GM notes with the character sheet GM notes.
David M. said: Ok, using token filters for both. Do you have tokens in range where the token's GM notes contains the name of one of the schools (for detect magic) or the word "trap" somewhere (for detect traps)? It's not case-sensitive, but the spelling must be correct. Also, don't confuse the token's GM notes with the character sheet GM notes. As I mentioned in my OP, yesterday everything worked without a hitch, I have everything set up according to your notes and Nick Olivos wonderful video...so heres the crazy part. I tried running the same macros on a different map and every thing works! So, Im guessing there is something on the first map thats keeping the script from working properly, what it could be I dont know, if I find some discrepancy Ill let you know. Again, thank you for the quick reply and really cool script..my players are going to love it!
1622187845

Edited 1622188273
Hey David... very grateful for this terrific API! I have a simple/stupid question... I'm setting up a blindsight macro for one of my characters. I'd like for him to detect both PC's and NPC's that are on the GM layer, but nothing else on the GM layer (like the map numbers, for instance). Also, I'd like NPCs to show up as red, and PC's to show up as blue. I'm sure there's an easy way to configure this, but I got a bit lost in all of the many options you've generously provided. What's the best way for me to go about this? Thanks in advance!
1622210998

Edited 1622211025
David M.
Pro
API Scripter
Thanks, Craig! The first part is easy (differentiating between creatures and non-creature tokens). You can use a --charfilter| command to look at a particular attribute. Tokens not tied to character sheets (pc or npc) will always fail this test and not be included. The second part (pc/npc's different colors) is a little trickier, but doable. The trick would be to find (or create) an attribute that both pcs and npcs have, that can be differentiated. If you are using the 5e OGL sheet, there are a number of "npc_" attributes. Example: if you picked "npc_xp", you know that all published creatures will have a positive non-zero value. If you added the "npc_xp" attribute to all of your pc's character sheets and gave them a negative value, then filtering becomes easy. Here is an example macro that filters on the npc_xp attribute for positive and negative values and only displays the graph*. Npcs are red and pcs are blue. *BUG FOUND: I just noticed that the table output is not grouping properly for the filter I included below (including both a ">" and a "<" filter). I will have to address that this weekend. Until this is fixed, I'd recommend just using the graph output for this type of mixed conditional filter. !radar {{ --range|30ft --wavetype|circle --pinglife|3000 --layers|gm, token --charfilter|npc_xp: >0#red, <0#blue --LoS|yes --title|Blindsight --units|u --output|graph --graphoptions|grid, circles }} You can use whatever attribute you'd like and just follow the same logic.  Note that if you manually create NPC character sheets, you would need to ensure that the chosen attribute was populated with the appropriate value or they won't get pinged. Maybe one of the skill attributes might get auto-populated when you make an npc sheet manually and might be a better choice? 
1622230043
Thanks! I think I'm running into the same issue others had trying to make this work with Bump... ideally Radar would show NPCs on the GM layer as red and PC's that have been Bumped as blue... but I can see how that would be a very complicated thing to pull off.
1622402318

Edited 1622403063
David M.
Pro
API Scripter
Version 0.9 - Composite groupings, bug fix for multiple comparisons ( github link ) Fixed a bug in which multiple comparison types against a single value were duplicating results (e.g. filter groups for hp>0 and  hp<0) Table output will now allow for composite grouping (e.g. if token matches multiple filter conditions, a new group will be made that combines all of the filters to a single group) Example: Detect Magic - objects comprised of more than one school of magic   No change in syntax, only the table output is affected !radar {{ --range|30ft --wavespacing|35 --wavedelay|50 --wavelife|200 --pinglife|4000 --layers|gm, token, map --tokfilter|gmnotes: abjuration#6fa8dc, conjuration#green, divination#ffffff, enchantment#yellow, evocation#red, illusion#ff00ff, necromancy#000000, transmutation#blue --LoS|yes --title|Detect Magic --units|u --graphOptions|grid, circle --output| graph, table }} In the animated gif below, there are four tokens present that represent various schools of magic (as denoted by the token gmnotes, defined by the macro above). Two belong to a single school (one is Enchantment, one is Conjuration) and two represent multiple schools (one is Divination+Transmutation, one is Abjuration+Conjuration). Notes: If a token falls into a multiple filter group, it will only show up in the table output under the combined group. If custom ping colors are specified, a token meeting multiple filter conditions will ping with color of the last matching condition, following the order of the --tokFilter parameters. Static picture of resulting output. Note that the token with [Abjuration+Conjuration] is pinged with the Conjuration color, since that was the last filter it matched
Well this is going to sound really silly but how do you write the words in the gmnotes for this to pick up multiple schools of magic. I have written "abjuration+divination", "abjuration, divination", "abjuration divination" "abjuration divination" All it picks up is divination. Even if I put divination first. Abjuration on it's own is picked up fine. :-/  Thanks for all your help so far. 
1622580944

Edited 1622580965
Garry Miller said: Well this is going to sound really silly but how do you write the words in the gmnotes for this to pick up multiple schools of magic. I have written "abjuration+divination", "abjuration, divination", "abjuration divination" "abjuration divination" All it picks up is divination. Even if I put divination first. Abjuration on it's own is picked up fine. :-/  Thanks for all your help so far.  Ignore this! I am an idiot. 
1622584683
David M.
Pro
API Scripter
No worries, there's a lot of available syntax and for once I didn't add any extra commands! For anyone else who may be following, you write the filter line as you normally would for single groups and the script combines them automatically :)
1624949104

Edited 1624950253
.Hell
Sheet Author
Hey David, is it possible to use an attribute for the range? !radar {{ --range| @{selected|mag}m --title| Bewegungsgespür --silent| no gm --units| u --visible| false/no/0 --output| compact }} I tried to do it like that but got no results EDIT: Nevermind, it works. I tried it on a gridless map, I guess there is currently a bug with gridless maps