I may have found an answer - Kaboom. Since I only started learning Javascript about 2 weeks ago, it's still a bit of a learning curve, but I think I can use Kaboom for what I want. My goal is to write an API that can be called as a macro/player ability. So the player clicks on the macro, which is "Throw Grenade" The macro will have as parameters the selected and target tokens (the target being a 'grenade' token the player places). Then I'll use the selected tokens stats, range etc to figure out if the grenade 'hits' or scatters (which will move the grenade token). Then I'll use Kaboom with its nice visual effects, impart a slight movement to the affected tokens and then pass back the list of affected tokens to apply damage to. I'll then use Powercards to display the damage results, since there's no way I can duplicate that kind of script. I've already written an API script which works for targeted ranged weapons (this is a Warhammer 40k/Dark Heresy campaign) - in which the player clicks their macro with their token selected and then is prompted for target(s). It passes the weapon info and target info to the API, which works out range, to hit roll and damage to each target and then uses Powercards (I had to modify Powercards slightly to get the GM and player colours to show up) to display the results in a nice Powercard format. I used the --title tag in powercard to include a tooltip that shows the rolls and math in case a player wants to see. Then the fun stuff was putting different weapon abilities into the script (like flame or melta weapons for instance) and righteous fury (criticals). Learning curve but thankfully I have this wonderful forum and scripts to draw on or adapt from to help me. I only wish javascript had better or more specific error codes (ie what line would be nice) rather than ones like my favourite "Unexpected Token" lol. I think I spend most of my time hunting for missing } or typos. My mantra is now 'just a little bit of code' then test. And save a copy of the script in an editor each time I make a change and it does work so I have something to fall back on (to look for those stupid brackets).