CFX is a custom FX script that was originally written by The Aaron as pseudo code and picked up by myself and fixed/added to it. Syntax: !cfx [effect] [source character id] [destination token id] Example: !cfx bomb-smoke -LEWlKUgYOARwMZHy3sp -LEy3RzsEz8YxL3pZtp Script: on('ready',()=>{ on('chat:message',(msg)=>{ if('api' !== msg.type ) { return; } let args = msg.content.split(/\s+/); switch(args.shift().toLowerCase()){ case '!cfx': { let character = getObj('character',args[1]); let destToken = getObj('graphic', args[2]); if(args[0] && character && destToken) { let pageid = Campaign().get("playerpageid"); let tokens = findObjs({ represents: character.id, pageid: pageid }); if(tokens){ let destPt = { x: destToken.get('left'), y: destToken.get('top') }; tokens.forEach((t)=>{ spawnFxBetweenPoints( {x:t.get('left'),y:t.get('top')}, destPt, args[0], pageid ); }); } else { sendChat("CFX", "/w gm No tokens for that character on your current page.") } } else { sendChat("CFX", "/w gm Use <code>!cfx [effect] [source character id] [destination token id]</code>."); } } break; } }); log("-=> CFX command loaded (!cfx) <=-") }); You cannot delay /fx with the !delay script so I took over this script / command specifically to work with the !delay script located here in the API section of the forums. If you have any issues, suggestions or feature ideas please post them here in this thread.