I've been kind of playing with this, but I've been using it for dungeon locations. I use it in conjunction with my lib:players token to handle output and integration with game transcripts.
I have a lib token with description macro(s) that posts the information either to chat (used by GM) or in a popup (used by player). I have info tokens to mark the positions where the name is the info tag id and the gm name is something more descriptive which is use in the output.
I use the INSPECT macro in lib:players and as the GM I set the code to:
I can then copy/paste the info tokens where the only change needed is the token name and perhaps the GM name (default name is Room when posting). The prefix to the description macro is determined in the onCampaignLoad and you can have multiple description macros on same lib token to handle a variety of images or naming guidelines. Here's an example of the 3 above:
Code: Select all
@@ @description
@PROPS@ fontColor=black ; autoExecute=true ; fontSize=11pt ; sortBy= ; color=default ; playerEditable=false ; applyToSelected=false ; group= ; tooltip= ; minWidth=94 ;
[H: info = getLibProperty("room."+token.name)]
[H: title = getGMName()]
[H, if(json.isEmpty(title)): title = "Room "+token.name]
[H: description = json.get(info,"description")]
[H, if(! json.isEmpty(description)), code: {
[H, if(isGM()): am.play.output.room(description,title,getImage(getMacroLocation()));
am.play.output.room(description,title,getImage(getMacroLocation()),1)]
};{}]
!!
@@ @description2
@PROPS@ fontColor=black ; autoExecute=true ; fontSize=11pt ; sortBy= ; color=default ; playerEditable=false ; applyToSelected=false ; group= ; tooltip= ; minWidth=94 ;
[H: info = getLibProperty("room."+token.name)]
[H: title = getGMName()]
[H, if(json.isEmpty(title)): title = "Room "+token.name]
[H: description = json.get(info,"description")]
[H, if(! json.isEmpty(description)), code: {
[H, if(isGM()): am.play.output.room(description,title,getImage("image:sewer"));
am.play.output.room(description,title,getImage("image:sewer"),1)]
};{}]
!!
@@ @description3
@PROPS@ fontColor=black ; autoExecute=true ; fontSize=11pt ; sortBy= ; color=default ; playerEditable=false ; applyToSelected=false ; group= ; tooltip= ; minWidth=94 ;
[H: info = getLibProperty("room."+token.name)]
[H: title = getGMName()]
[H, if(json.isEmpty(title)): title = "Room "+token.name]
[H: description = json.get(info,"description")]
[H, if(! json.isEmpty(description)), code: {
[H, if(isGM()): am.play.output.room(description,title,getImage("image:cave"));
am.play.output.room(description,title,getImage("image:cave"),1)]
};{}]
!!
So, for new icons, I just add an image token. I actually just made an update a couple of days ago with the output.room change that allows the output to go to a popup and to include the output when done by the GM to go to chat transcripts.
As you see, there are several things to consider for a simple drop-in (lib:players addon) at this point, but I'm still refining the process. This was recently slapped together. But the big time saver is being able to put all the area descriptions in to one document. When designing the dungeon I have notepad open to add location numbers and descriptions, then I go to the map and change the token names.