Adventure editor tool

Show off your RPG maps, campaigns, and tokens. Share your gaming experiences and stories under General Discussion and save this forum for things you've created that may help others run their own games. Use the subforums when appropriate.

Moderators: dorpond, trevor, Azhrei, Gamerdude

Nildik
Cave Troll
Posts: 76
Joined: Mon Oct 31, 2011 7:32 pm

Adventure editor tool

Post by Nildik »

Maptool is awesome to show map and tokens, but to have a complete adventure, with all the text, images and information of all the encounters, rooms and PNJs, like a book of a adventure module... maptool lacks of that funcionality.
This tool tryes to solve this.

USE
1- Write everything important of your room or encounter in a GM notes of a token (a info token). Every room or encounter must have his own info token.
2- You can enclose text between <share>...</share>. Later, you will be able to share this text to your players
3- You can enclose a image url or a asset image between <image>...</image>. Later, you will be able to share this image to your players.
3- You can allways share the images of portrait and handout of this token
4- You can use html tags to format your text. For example <b>...</b> to use bold or <h1>...</h1> to write titles

When your token has all the information, select it, and press the macro button with a picture of a open book (it has to be in campaign panel). A new frame will be open with all this information nicely presented, formatted and with images and macrolink to share images and text to your players every time is needed.
If you share a image to your players, they will be able to zoom in and out the image.

INSTALATION
1-Drop the files “lib_adventure.rptok”, “EXAMPLE.rptok” and “lib_frames.rptok” to your campaign
2-Import the tables “frames tables.mttable” and “images table.mttalbe”
3-Copy the macro with a image of a book from the lib token “lib:adventure” to your campaign panel
4-Run the macro onCampaignLoad from the lib token “lib:frames”
5-You can now select the token “EXAMPLE - Y1. Main Entrance (CR 2)” and run the macro with a image of a book to test the sample.

EDIT AUG 10, 2015

NEW- Added a new function, Use <infolink>text</infolink> to make a link to a new window with all the text, showed to GM only. You can use the tags <titlelink>text</titlelink> before <infolink> to modify the title of the link

NEW TIP- You can use html tags to make a web link to be open with a browser:
<a href=http://www.d20srd.org/srd/monsters/kobold.htm>kobold stats (web link)</a>

Included all wolph42's improvements
Attachments
scenario campaign 2.cmpgn
EDIT-all together
(4.51 MiB) Downloaded 140 times
lib_frames.rptok
EDIT-lib token of frames with wolph42's improvements
(18.43 KiB) Downloaded 172 times
lib_adventure.rptok
EDIT-lib token with the new function and wolph42's improvements
(19.7 KiB) Downloaded 142 times
EXAMPLE - Y1. Main Entrance (CR 2).rptok
EDIT- example with the new funtion
(110 KiB) Downloaded 125 times
CAPTURE.jpg
CAPTURE.jpg (101.22 KiB) Viewed 2858 times
images table.mttable
(73.95 KiB) Downloaded 135 times
frames table.mttable
(4.03 MiB) Downloaded 169 times
Last edited by Nildik on Sun Aug 09, 2015 7:53 pm, edited 1 time in total.

User avatar
aliasmask
RPTools Team
Posts: 9029
Joined: Tue Nov 10, 2009 6:11 pm
Location: Bay Area

Re: Adventure editor tool

Post by aliasmask »

Very cool. Thanks for sharing.


User avatar
aliasmask
RPTools Team
Posts: 9029
Joined: Tue Nov 10, 2009 6:11 pm
Location: Bay Area

Re: Adventure editor tool

Post by aliasmask »

FYI, I do something similar but it's not as pretty as yours.
\\\ Big Image ///
Example.jpg
Example.jpg (630.25 KiB) Viewed 2842 times
All my data is in one file on a lib token. The marker tokens just hold the room name, like A1. Under GMName, I put the actual room name which is displayed in chat when posting. I was planning on making it a bit more user friendly before sharing. Now that I see what you did I should include an option for a handout. I can also include skill check links in my descriptions.

Nildik
Cave Troll
Posts: 76
Joined: Mon Oct 31, 2011 7:32 pm

Re: Adventure editor tool

Post by Nildik »

I'm very interested in your job aliasmask. Could you share it?, I´m pretty sure that I can use it to get ideas to improve mine.

User avatar
aliasmask
RPTools Team
Posts: 9029
Joined: Tue Nov 10, 2009 6:11 pm
Location: Bay Area

Re: Adventure editor tool

Post by aliasmask »

Nildik wrote:I'm very interested in your job aliasmask. Could you share it?, I´m pretty sure that I can use it to get ideas to improve mine.
Sure. I'll try to consolidate it in to one lib because it has a lot of interdependencies to my framework. But this is the guts of it:
||| parseDialog |||

Code: Select all

[H: EOL = decode("%0A")]
[H: thisLib = getMacroLocation()]

<!-- clear token of old data -->
[H: props = getMatchingLibProperties("room[.].*",thisLib,"json")]
[H, foreach(prop,props): resetProperty(prop,thisLib)]

<!-- read in raw dialog -->
[H: buttonIndex = getMacroIndexes("rawDialog")]
[H: descriptions = json.fromList(getMacroCommand(buttonIndex),EOL)]

<!-- parse lines in to workable data -->
[H: dialogObj = "{}"]
[H: image = ""]
[H, foreach(line,descriptions), code: {
   [H: roomData = listGet(line,0,":")]
   [H, if(listCount(line,":") > 2): text = substring(line,length(roomData)+1); text = listDelete(line,0,":")]
   [H: roomId = replace(lower(listGet(roomData,0,"/")),"[^a-z0-9_.]","")]
   [H: numVars = listCount(roomData,"/")]
   [H, if(numVars >= 2): roomHeader = listGet(roomData,1,"/"); roomHeader = "Description"]
   [H, if(roomId == "image"), code: {
      [H: image = trim(roomHeader)]
   };{
      [H, if(json.isEmpty(roomHeader)): roomHeader = "Description"]
      [H, if(numVars >= 3): targets = listGet(roomData,2,"/"); targets = ""]
      <!-- this rooms json obj -->
      [H: room = json.set("{}","subtitle",roomHeader,"description",text,"targets",targets,"image",image)]
      <!-- append to array of objects for room id -->
      [H: rooms = json.append(json.get(dialogObj,roomId),room)]
      <!-- add rooms to main storage variable -->
      [H: dialogObj = json.set(dialogObj,roomId,rooms)]
   }]
}]

<!-- save data to be used in "description" function -->
[H: roomIds = json.fields(dialogObj,"json")]
[H, foreach(roomId,roomIds): setLibProperty("room."+roomId,json.get(dialogObj,roomId),thisLib)]
Text is read from a macro called rawDialog. The text format of each line is like this:
image/tokenName - tokenName is the name of any token in the campaign. this can be left blank and it will default to the lib token image. This sets all future lines with this image when displaying in the chat.
id: - id is the name of token being used for a marker, like A1. room name defaults to "description". Also, if no gmName is specified on marker token it uses the format room, like "Room A1", other gmName is used in its place.
id/uniqueName: same as above, but unique name is subname of the id, like A1/Trap which may describe a trap in that room.
id/uniqueName/gm: same as above but chat only goes to gm. Can use other names, but I haven't found this very useful and will likely change or remove.

I recently changed the output to a custom output macro so it doesn't like any html at the moment. Changing it to a normal broadcast or post to a frame should fix that. You can include macro code in the lines for clickable links or other calculations.
||| description |||

Code: Select all

<!-- lib.dialog.description -->
[H: assert(isGM(),"<b>GM ONLY FUNCTION</b>",0)]
[H: roomId = "room." + replace(lower(token.name),"[^a-z0-9_.]","")]
[H: infoArray = getLibProperty(roomId)]
[H: title = getGMName()]
[H, if(title == token.name): npcDialog = 1; npcDialog = 0]
[H, if(npcDialog): defaultImage = getImage(token.name); defaultImage = getImage(getMacroLocation())]

[H, if(json.isEmpty(title)): title = "Room "+token.name]

<!-- Get all room info so GM may select which to display -->
[H: options = ""]
[H, foreach(room,infoArray), code: {
   [H: image = getImage(json.get(room,"image"))]
   [H, if(json.isEmpty(image)): image = defaultImage]
   [H: subtitle = json.get(room,"subtitle")]
   [H: description = json.get(room,"description")]
   [H: targets = json.get(room,"targets")]
   [H: options = json.append(options,replace(strformat('<html><table width="600"><tr valign=top><td><img src="%{image}" height=50 width=50 /></td><td width=550><b>%{subtitle} (%{targets}):</b> %{description}</td></tr></table></html>'),",","&#"+44))]
}]
[H: options = json.toList(options)]
[H: PCs = getPCNames()]

[H: inputStr = json.append("","tab0|Dialogs|Chose a Dialog to display|TAB",
   "saveToTranscript|1|Save to Transcript?|CHECK",
   strformat("header|<html>%{token.name} - %{title}</html> %{defaultImage}||label|span=true icon=true iconsize=40"),
   strformat("option|%{options}||radio|span=true"),
   "tab1|Selected|Set Selected PC Token|TAB",
   strformat("selected|%{PCs}|Pick target output|radio|value=string"))]
   
[H: abort(input(json.toList(inputStr,"##")))]

[H: room = json.get(infoArray,option)]
[H: subtitle = json.get(room,"subtitle")]
[H: image = getImage(json.get(room,"image"))]
[H, if(json.isEmpty(image)): image = defaultImage]
[H: description = json.get(room,"description")]
[H: targets = json.get(room,"targets")]
[H, if(json.isEmpty(targets) || targets == "all"), code: {
   [H, if(! json.isEmpty(description)): am.play.output.room(description,strformat("%{title} (%{subtitle})"),image,saveToTranscript)]
};{
   [H, if(! json.isEmpty(description)): am.play.output.basic(description,targets,"DM")]
}]

User avatar
Jagged
Great Wyrm
Posts: 1306
Joined: Mon Sep 15, 2008 9:27 am
Location: Bristol, UK

Re: Adventure editor tool

Post by Jagged »

Very cool ...



... but poor caged mite :(

User avatar
wolph42
Winter Wolph
Posts: 9999
Joined: Fri Mar 20, 2009 5:40 am
Location: Netherlands
Contact:

Re: Adventure editor tool

Post by wolph42 »

@Nildik

For now a very hypothetical question (as I don't know whether I can find the time): upto now I've been absorbing all system agnostic maptool-tools into the bag of tricks. If you follow the link you will see that there is quite a list of stuff from others that I (with permission) absorbed (and usually also improved) in the BoT. Since what you've made is both system agnostic and quite useful, im considering to do the same thing, but obviously only with your permission. Hence the (for now hypothetical) question: would you mind if I integrated your tool into the BoT ?

Nildik
Cave Troll
Posts: 76
Joined: Mon Oct 31, 2011 7:32 pm

Re: Adventure editor tool

Post by Nildik »

wolph42 wrote:@Nildik

For now a very hypothetical question (as I don't know whether I can find the time): upto now I've been absorbing all system agnostic maptool-tools into the bag of tricks. If you follow the link you will see that there is quite a list of stuff from others that I (with permission) absorbed (and usually also improved) in the BoT. Since what you've made is both system agnostic and quite useful, im considering to do the same thing, but obviously only with your permission. Hence the (for now hypothetical) question: would you mind if I integrated your tool into the BoT ?
Of course you can. You have my permission.

User avatar
Full Bleed
Demigod
Posts: 4736
Joined: Sun Feb 25, 2007 11:53 am
Location: FL

Re: Adventure editor tool

Post by Full Bleed »

Is this using the updated "Fancy Frames" drop-in (also from Nildik!) from this thread?

Looks like the frames lib changed its name.
Maptool is the Millennium Falcon of VTT's -- "She may not look like much, but she's got it where it counts."

Nildik
Cave Troll
Posts: 76
Joined: Mon Oct 31, 2011 7:32 pm

Re: Adventure editor tool

Post by Nildik »

Full Bleed wrote: Is this using the updated "Fancy Frames" drop-in (also from Nildik!) from this thread?
Yes, use this drop-in to make the frames "pretty"
Full Bleed wrote:Looks like the frames lib changed its name.
Maybe the macros are updated, but I think that the name still the same... lib:frames both... I think...

User avatar
wolph42
Winter Wolph
Posts: 9999
Joined: Fri Mar 20, 2009 5:40 am
Location: Netherlands
Contact:

Re: Adventure editor tool

Post by wolph42 »

Nildik wrote:
wolph42 wrote:@Nildik

For now a very hypothetical question (as I don't know whether I can find the time): upto now I've been absorbing all system agnostic maptool-tools into the bag of tricks. If you follow the link you will see that there is quite a list of stuff from others that I (with permission) absorbed (and usually also improved) in the BoT. Since what you've made is both system agnostic and quite useful, im considering to do the same thing, but obviously only with your permission. Hence the (for now hypothetical) question: would you mind if I integrated your tool into the BoT ?
Of course you can. You have my permission.
Thanks.

Are you still developing this,or is this finished?

User avatar
Full Bleed
Demigod
Posts: 4736
Joined: Sun Feb 25, 2007 11:53 am
Location: FL

Re: Adventure editor tool

Post by Full Bleed »

Nildik wrote:Maybe the macros are updated, but I think that the name still the same... lib:frames both... I think...
It looks like there are a number of changes.

The version I have (probably Wolph's upgrade of your original) is named "lib:fancyframes" with the following macros on it:

frameClose
frameOpen
Example
frameOverview
onCampaignLoad


The new one is named "lib:frames" with the following macros on it:

frameClose
frameClose2
frameClose3
frameOpen
frameOpen2
frameOpen3
onCampaignLoad
examples frames
examples frames2
examples frames 3
examples frames sci-fi


Both onCampaignLoads define two of the same functions (but on different libs): frameOpen() and frameClose(). And the code has changed a bit in both versions.

Also, the table they both use is also called "frames" with the original having 139 entries (ending with the sci-fi option) and the new one having 169.

Basically, I'm wondering if there will be compatibility problems when trying to use both. I doubt that I'm the only person using the original.
Maptool is the Millennium Falcon of VTT's -- "She may not look like much, but she's got it where it counts."

User avatar
wolph42
Winter Wolph
Posts: 9999
Joined: Fri Mar 20, 2009 5:40 am
Location: Netherlands
Contact:

Re: Adventure editor tool

Post by wolph42 »

Full Bleed wrote:
Nildik wrote:Maybe the macros are updated, but I think that the name still the same... lib:frames both... I think...
It looks like there are a number of changes.

The version I have (probably Wolph's upgrade of your original) is named "lib:fancyframes" with the following macros on it:
yes I did the update. Rewrote a few bits to make it faster and the code a bit leaner. I haven't checked yet but @Nildik: did you use the original frames code or my updates?:
http://forums.rptools.net/viewtopic.php ... 24#p234324

User avatar
wolph42
Winter Wolph
Posts: 9999
Joined: Fri Mar 20, 2009 5:40 am
Location: Netherlands
Contact:

Re: Adventure editor tool

Post by wolph42 »

for those interested, I've had a rough look at the code. translated most of the code from spanish to english (for better reading) and changed a few small things. Ill probly do more, but for now it works again (as it didn't right after the translation).
Here the link: https://www.dropbox.com/s/rgvy55nogfgcl ... cmpgn?dl=0

changes so far:
- translation and a few typos/grammar thingies
- changed the layout of the code a bit
- added a bit of comment
- removed the zoom buttons for web-images (as apparently they don't work for those)
- replaced the frame open/close code with the updates i did earlier (which also was not much, but easier to read and slightly faster).
- quite a bit of tiny unremarkable tweaks
- in the frames, some types go wrong when using the title option, fixed that for those frames

interesting things: if you're referring to a web image:
- <img src=http://etc.></img> if you leave spaces around the = it does not work (go figure).
- the 'size' option (that is the "-50" at the end of any asset id to indicate its height) does not work for external web images
- the code is really nifty !! kuddos to Nildik

Post Reply

Return to “User Creations”