So, I'm trying to build a Mod that will spawn duplicate images of a Wizard when using the Mirror image Spell... and THEN if those images continue to exist when the Wizard in question moves, the duplicate images automatically reposition next to him. So far, I've gotten creation of the duplicate images to work just fine... but I cant seem to get the second part to work. I've tried to reference what materials are available on the Wiki - considering I know basically nothing of JavaScript and am having to trial-and-error my way through finding stuff that's been previously posted and appropriate it for my own uses... The script seems to load fine, and isnt throwing me error messages anymore, but just - doesnt DO anything when the appropriate token moves. Here what I've got: on("ready",function() { on("chat:message",function(msg){ if(msg.type=="api" && msg.content.indexOf("!MirrorImage")==0) { var selected = msg.selected; if (selected===undefined) { sendChat("API","Please select a character."); return; } var PCtoken = getObj("graphic",selected[0]._id); var character = getObj("character",PCtoken.get("represents")); var playerlist = character.get("controlledby") createObj("graphic",{ left:PCtoken.get("left")-70, top:PCtoken.get("top"), height:70, width:70, pageid:PCtoken.get("pageid"), layer:"objects", imgsrc:"<a href="https://s3.amazonaws.com/files.d20.io/images/294888802/RXdKTBjdjj48-HM_Sq46Yg/thumb.png?165802533255" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/294888802/RXdKTBjdjj48-HM_Sq46Yg/thumb.png?165802533255</a>", name:PCtoken.get("name") + "'s First Mirror Image", controlledby:playerlist, }); createObj("graphic",{ left:PCtoken.get("left"), top:PCtoken.get("top")-70, height:70, width:70, pageid:PCtoken.get("pageid"), layer:"objects", imgsrc:"<a href="https://s3.amazonaws.com/files.d20.io/images/294888802/RXdKTBjdjj48-HM_Sq46Yg/thumb.png?165802533255" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/294888802/RXdKTBjdjj48-HM_Sq46Yg/thumb.png?165802533255</a>", name:PCtoken.get("name") + "'s Second Mirror Image", controlledby:playerlist, }); createObj("graphic",{ left:PCtoken.get("left")+70, top:PCtoken.get("top"), height:70, width:70, pageid:PCtoken.get("pageid"), layer:"objects", imgsrc:"<a href="https://s3.amazonaws.com/files.d20.io/images/294888802/RXdKTBjdjj48-HM_Sq46Yg/thumb.png?165802533255" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/294888802/RXdKTBjdjj48-HM_Sq46Yg/thumb.png?165802533255</a>", name:PCtoken.get("name") + "'s Third Mirror Image", controlledby:playerlist, }); sendChat(PCtoken.get("name"),"creates several illusions of himself."); spawnFx(PCtoken.get("left"),PCtoken.get("top"),"burst-magic",PCtoken.get("pageid")); } }); on("change.graphic", function(obj) { if(obj.type=="graphic" && obj.get("character")==="Martin") { var PCToken = getObj("graphic",selected._id); if(findObjs({_type:"graphic", name:"Martin's First Mirror Image"})) { var FirstImage = findObjs({_type:"graphic", name:"Martin's First Mirror Image"}); } else { var FirstImage = 0; } if(findObjs({_type:"graphic", name:"Martin's Second Mirror Image"})) { var SecondImage = findObjs({_type:"graphic", name:"Martin's Second Mirror Image"}); } else { var SecondImage = 0; } if(findObjs({_type:"graphic", name:"Martin's Third Mirror Image"})) { var ThirdImage = findObjs({_type:"graphic", name:"Martin's Third Mirror Image"}); } else { var ThirdImage = 0; } if(FirstImage !== 0) { FirstImage.set("left", PCToken.get("left")-70); FirstImage.set("top", PCToken.get("top")); } if(SecondImage !== 0) { SecondImage.set("left", PCToken.get("left")); SecondImage.set("top", PCToken.get("top")-70); } if(ThirdImage !== 0) { ThirdImage.set("left", PCToken.get("left")+70); ThirdImage.set("top", PCToken.get("top")); } } }); });