PDA

View Full Version : Realm Works - Creating Random Tables


daplunk
February 4th, 2017, 04:30 AM
Hi Team,

A quick video this week.

Realm Works - Creating Random Tables (https://youtu.be/_X2lIyXgkNk)

daplunk

Gord
February 4th, 2017, 11:21 AM
This video is a perfect example of why you need to enter all the topic titles before you even bother making something like tables or lists. Sadly, I am still cleaning up most of the realm because I never bothered to do it in the first place.

kbs666
February 4th, 2017, 04:37 PM
It's why I haven't done stuff like that. I simply don't spend time entering all that stuff into RW on the mechanics side. I'd rather spend my time building my world.

I'll get the basic magic items from the CM, I hope, and then add pics as I need them. I don't do loot tables since I determine all the loot for all the encounters before hand to control both what the PC's have and to control the PC's wealth.

daplunk
February 13th, 2017, 03:13 AM
I expanded on the topic of random tables tonight in a new video. This is cool as with a single click from within Realm Works you can get a list of random treasure, npc names, taverns, etc.

Realm Works - Using Inspiration Pad Pro To Generate Random Table Results (https://youtu.be/CjDaqDNQxcI)

daplunk
February 13th, 2017, 03:39 AM
Turns out you can do a very similar thing with the Donjon website.

Realm Works - Linking To Donjon From Realm Works To Display Random Table Results (https://youtu.be/5VavUnoAB-M)

gaffneyks
February 13th, 2017, 05:44 AM
Another excellent video as always! Thanks

I am looking at moving to Fantasy Grounds since it was announced the Content Market will not carry WOTC APs and I just don't have the time to enter a book that large in Realm Works and it appears that's my only option to purchase WOTC AP online. Totally different learning curve than Realm Works.

For Realm Works I just watched a few videos that Ken and You posted and I was rocking and cranked out LMOP pretty quickly and was able to integrate it to Hero Lab almost seamlessly after watching that video. Watched the Syrinscape video, got that working in a matter of minutes too.

You guys have done an awesome job on the video series.

Thanks again.

daplunk
February 13th, 2017, 10:39 AM
Keep in mind that they have not said that they will not support Wotc content. Instead they have said they they cannot support Wotc until a license agreement is put in place.and that these discussions take time.

Ive looked into FG and it does not look like a great campaign manager. The learning curve looks quite steep to be honest while the ability to manage data is rather restricted.

Hope to see you back should the Wotc license get signed.

kbs666
February 13th, 2017, 05:32 PM
I've used earlier versions of FG and other VTT's. RW and VTT's are not the same thing.

In some cases they may be converging, FG is clearly moving into RW's domain, but they have a long way to go before they will be comparable.

FG and other VTT's are great for running a game where people aren't face to face or where everyone is comfortable watching a screen rather than pushing mini's but RW is still far superior for giving the GM the ability to run the game outside of the tactical scene.

I understand that if all you want to do is buy the next hardcover campaign from WotC and run it that RW may not work too well for you in the short term but I have to believe the LWD is doing everything they can to sign a license with Hasbro. It just may take a little longer than we'd all like. I am sure there will be stuff you can use in the CM soon after it launches even if it isn't WotC.

Cursed
February 14th, 2017, 03:49 AM
From what I've understood, RW is is using html (5?) under the hood? If it comes with working javascript engine, random tables (pulling data from json-files or whatever) would be really simple to do.

kbs666
February 14th, 2017, 04:09 AM
There is no javascript that we can access.

Cursed
February 14th, 2017, 04:26 AM
There is no javascript that we can access.

Yup, I really didn't bring up my point well (=at all), I meant to say, that if there was a working javascript engine somewhere there, maybe exposing it (as an experimental/advanced feature) could solve these kind of problems.

kbs666
February 14th, 2017, 06:11 AM
Yup, I really didn't bring up my point well (=at all), I meant to say, that if there was a working javascript engine somewhere there, maybe exposing it (as a experimental/advanced feature) could solve these kind of problems.
I see. Yes, it would solve many problems if there was an exposed scripting engine and RW had an appropriate document interface.

Jaynay27
March 3rd, 2017, 06:59 PM
This video (and the series) is very helpful! Thankyou Daplunk. :)

Early on I was playing with a suggestion someone else made to add a HTML page, with java script, in to RW to add random tables that could be opened and generated within RW itself.
Not sure if this is common knowledge or something that has since been superseded, but the original thread is here (http://forums.wolflair.com/showthread.php?t=50225).

The result of this method will display in RW and have clickable buttons to generate random details for anything you like. Once you attach the complete webpage in RW you no longer have to have internet access to use the generator.

Now I am not a programmer, so cant answer any questions on that side of things, but I was able to do some copy-paste programming (i.e. cheating) to create random encounter tables for Kingmaker.
The results look like this:

http://i.imgur.com/dqesEGX.jpg

Not sure if this is useful or not, but thought it was maybe worth sharing this? I can take no credit for this idea - smarter people than I were using it and helped me to create the generators.

daplunk
March 3rd, 2017, 07:41 PM
Oh hell yes this is exactly the type of thing I've been wondering if possible.

Jaynay27
March 3rd, 2017, 07:45 PM
Oh hell yes this is exactly the type of thing I've been wondering if possible.

Oh cool - glad it was of some help.

I usually just lurk around, but occasionally have something useful to say :D

daplunk
March 3rd, 2017, 07:47 PM
This means it's possible to make dice rollers inside realm works.

Jaynay27
March 3rd, 2017, 07:53 PM
This means it's possible to make dice rollers inside realm works.

Durrr Jaynay brain...seems so obvious now that you mention it! :)

Now that could be VERY useful indeed.

Also - Happy to share the webpages I have if that would be useful (kingmaker encounter tables for all 6 books). Like I said before though, I am not a programmer, so some of the more complex stuff s beyond me.

The code for the pages looks something like this:

<HTML>
<HEAD>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<TITLE>Kingmaker - Stolen Land</TITLE>
</HEAD>
<BODY>

<script language="JavaScript">

// Some Arrays



function rand(x) {
return Math.floor(Math.random() * x) + 1;
}

function tableResults(argument) {

var hexencounterArray = [];
var DayornightArray = [];
var aquaticArray = [];
var forestArray = [];
var hillsArray = [];
var mountainsArray = [];
var tundraArray = [];

hexencounterArray.push({"max": 5, "content": "Random Encounter"});
hexencounterArray.push({"max": 100, "content": "No Encounter"});

DayornightArray.push({"max": 15, "content": "Random Encounter"});
DayornightArray.push({"max": 100, "content": "No Encounter"});

aquaticArray.push({"max": 5, "content": rand(6) + " bandits; CR 1"});
aquaticArray.push({"max": 11, "content": rand(4) + " boars; CR 3"});
aquaticArray.push({"max": 17, "content": rand(4) + " boggards; CR 3"});
aquaticArray.push({"max": 21, "content": "1 brush thylacine; CR 2"});
aquaticArray.push({"max": 28, "content": rand(6) + " elk; CR 5"});
aquaticArray.push({"max": 32, "content": "1 faerie dragon; CR 2"});
aquaticArray.push({"max": 35, "content": rand(4) + " grigs; CR 2"});
aquaticArray.push({"max": 41, "content": "1 grizzly bear; CR 4"});
aquaticArray.push({"max": 49, "content": "1 hunter; CR 1/3"});
aquaticArray.push({"max": 57, "content": "1 nixie; CR 1"});
aquaticArray.push({"max": 62, "content": "1 owlbear; CR 4"});
aquaticArray.push({"max": 69, "content": "1 shambling mound; CR 6"});
aquaticArray.push({"max": 75, "content": "1 slurk; CR 2"});
aquaticArray.push({"max": 79, "content": "1 tatzlwyrm; CR 2"});
aquaticArray.push({"max": 83, "content": rand(4) + " trolls; CR 7"});
aquaticArray.push({"max": 90, "content": "1 will o wisp; CR 6"});
aquaticArray.push({"max": 96, "content": rand(6) + " wolves; CR 4"});
aquaticArray.push({"max": 100, "content": "1 worg; CR 2"});


forestArray.push({"max": 4, "content": rand (6) + " bandits; CR 1"});
forestArray.push({"max": 11, "content": rand(4) + " Boars; CR 3"});
forestArray.push({"max": 14, "content": rand(4) + " boggards; CR 3"});
forestArray.push({"max": 20, "content": "1 brush thylacine; CR 2"});
forestArray.push({"max": 29, "content": rand(6) + " elk; CR 5"});
forestArray.push({"max": 35, "content": "1 faerie dragon; CR 2"});
forestArray.push({"max": 42, "content": rand(4) + " grigs; CR 2"});
forestArray.push({"max": 47, "content": "1 grizzly bear; CR 4"});
forestArray.push({"max": 54, "content": "1 hunter; CR 1/3"});
forestArray.push({"max": 57, "content": rand(8) + " mites; CR 1"});
forestArray.push({"max": 63, "content": "1 owlbear; CR 4"});
forestArray.push({"max": 68, "content": "1 shambling mound; CR 6"});
forestArray.push({"max": 71, "content": "1 slurk; CR 2"});
forestArray.push({"max": 75, "content": "1 tatzlwyrm; CR 2"});
forestArray.push({"max": 79, "content": rand(4) + " trolls; CR 7"});
forestArray.push({"max": 82, "content": "1 werewolf; CR 2"});
forestArray.push({"max": 85, "content": "1 giant whiptail centipede; CR 3"});
forestArray.push({"max": 90, "content": "1 will o wisp; CR 6"});
forestArray.push({"max": 97, "content": rand(6) + " wolves; CR 4"});
forestArray.push({"max": 100, "content": "1 worg; CR 2"});


hillsArray.push({"max": 8, "content": rand(6) + " bandits; CR 1"});
hillsArray.push({"max": 14, "content": rand(4) + " Boars; CR 3"});
hillsArray.push({"max": 19, "content": "1 brush thylacine; CR 2"});
hillsArray.push({"max": 27, "content": rand(6) + " elk; CR 5"});
hillsArray.push({"max": 30, "content": "1 faerie dragon; CR 2"});
hillsArray.push({"max": 35, "content": rand(4) + " grigs; CR 2"});
hillsArray.push({"max": 45, "content": "1 hunter; CR 1/3"});
hillsArray.push({"max": 51, "content": rand(8) + " Kobolds; CR 1"});
hillsArray.push({"max": 55, "content": rand(8) + " mites; CR 1"});
hillsArray.push({"max": 59, "content": "1 owlbear; CR 4"});
hillsArray.push({"max": 62, "content": "1 shambling mound; CR 6"});
hillsArray.push({"max": 67, "content": "1 tatzlwyrm; CR 2"});
hillsArray.push({"max": 70, "content": rand(4) + " trolls; CR 7"});
hillsArray.push({"max": 74, "content": "1 werewolf; CR 2"});
hillsArray.push({"max": 81, "content": "1 giant whiptail centipede; CR 3"});
hillsArray.push({"max": 86, "content": "1 will o wisp; CR 6"});
hillsArray.push({"max": 95, "content": rand(6) + " wolves; CR 4"});
hillsArray.push({"max": 100, "content": "1 worg; CR 2"});


mountainsArray.push({"max": 7, "content": "1 hoarfrost spirit; CR 3; Pathfinder #51 pg 14"});
mountainsArray.push({"max": 14, "content": "1 ice troll; CR 4; Bestiary 2 pg 271"});
mountainsArray.push({"max": 43, "content": "1 yeti; CR 4; Bestiary pg 287"});
mountainsArray.push({"max": 56, "content": "1 frost drake; CR 7 Bestiary 2 pg 108"});
mountainsArray.push({"max": 69, "content": "1 frost giant; CR 9 Bestiary pg 149"});
mountainsArray.push({"max": 75, "content": "1 witchfire; CR 9; Bestiary 2 pg 284"});
mountainsArray.push({"max": 84, "content": "1 frostfallen mammoth; CR 10; Pathfinder #51 pg 84"});
mountainsArray.push({"max": 92, "content": "1 saumen kar; CR 10; Pathfinder #51 pg 90"});
mountainsArray.push({"max": 100, "content": "1 frost worm; CR 12; Bestiary 2 pg 126"});


tundraArray.push({"max": 6, "content": rand(6) + " bandits; CR 1"});
tundraArray.push({"max": 15, "content": rand(4) + " Boars; CR 3"});
tundraArray.push({"max": 20, "content": "1 brush thylacine; CR 2"});
tundraArray.push({"max": 28, "content": rand(6) + " elk; CR 5"});
tundraArray.push({"max": 32, "content": "1 faerie dragon; CR 2"});
tundraArray.push({"max": 38, "content": rand(4) + " grigs; CR 2"});
tundraArray.push({"max": 40, "content": "1 grizzly bear; CR 4"});
tundraArray.push({"max": 51, "content": "1 hunter; CR 1/3"});
tundraArray.push({"max": 55, "content": rand(8) + " Kobolds; CR 1"});
tundraArray.push({"max": 57, "content": rand(8) + " mites; CR 1"});
tundraArray.push({"max": 59, "content": "1 owlbear; CR 4"});
tundraArray.push({"max": 63, "content": "1 shambling mound; CR 6"});
tundraArray.push({"max": 66, "content": "1 tatzlwyrm; CR 2"});
tundraArray.push({"max": 71, "content": rand(4) + " trolls; CR 7"});
tundraArray.push({"max": 75, "content": "1 werewolf; CR 2"});
tundraArray.push({"max": 80, "content": "1 giant whiptail centipede; CR 3"});
tundraArray.push({"max": 86, "content": "1 will o wisp; CR 6"});
tundraArray.push({"max": 95, "content": rand(6) + " wolves; CR 4"});
tundraArray.push({"max": 100, "content": "1 worg; CR 2"});



var allArrays = {
"Hex": hexencounterArray,
"DayNight": DayornightArray,
"aquatic": aquaticArray,
"forest": forestArray,
"hills": hillsArray,
"mountains": mountainsArray,
"tundra": tundraArray
};

var randomNum = rand(100) + 1;
var arrayOfChoices = allArrays[argument];
if (!arrayOfChoices) {
return "no such set: " + argument;
}

var chosenString = "";
for (var itemIndex in arrayOfChoices) {
var item = arrayOfChoices[itemIndex];
if (randomNum <= item.max) {
chosenString = item.content;
break;
}
}
return chosenString;
}

</script>

As the PCs enter a hex, hit the button to see if there is an encounter (5% chance)

<form>
<input type="button" name="Button1" value="Hex Encounter" onClick="this.form.textField1.value =

tableResults('Hex')" size="" />
<textarea name="textField1" cols="40" rows="1" wrap="soft"></textarea>
</form>

For each day or night cycle spent exploring, hit the button to see if there is an encounter (15% chance)

<form>
<input type="button" name="Button2" value="Day or night encounter" onClick="this.form.textField1.value =

tableResults('DayNight')" size="" />
<textarea name="textField1" cols="40" rows="1" wrap="soft"></textarea>
</form>

If there is a random encounter, hit the button of the corresponding terrain to generate an encounter.

<form>
<input type="button" name="Button3" value="Forest" onClick="this.form.textField1.value =

tableResults('forest')" size="" />
<textarea name="textField1" cols="40" rows="1" wrap="soft"></textarea>
</form>

<form>
<input type="button" name="Button4" value="Lake/River" onClick="this.form.textField1.value =

tableResults('aquatic')" size="" />
<textarea name="textField1" cols="40" rows="1" wrap="soft"></textarea>
</form>

<form>
<input type="button" name="Button5" value="Plains" onClick="this.form.textField1.value =

tableResults('tundra')" size="" />
<textarea name="textField1" cols="40" rows="1" wrap="soft"></textarea>
</form>

<form>
<input type="button" name="Button6" value="Hills" onClick="this.form.textField1.value =

tableResults('hills')" size="" />
<textarea name="textField1" cols="40" rows="1" wrap="soft"></textarea>
</form>

</BODY>
</HTML>

daplunk
March 3rd, 2017, 07:59 PM
Go further. Create the content in realm works. Add in a roller for each dice type. Export it and let the world rejoice.

Jaynay27
March 3rd, 2017, 08:05 PM
Go further. Create the content in realm works. Add in a roller for each dice type. Export it and let the world rejoice.

This sounds good, but I haven't been keeping 100% up to date with RW updates recently - I do know about the export function, but have not really used it or looked in to its usefulness.

Be really keen to see an example of what you are thinking about :)

daplunk
March 3rd, 2017, 08:17 PM
Check out my sticky at the top of this sub thread. There's a video on the topic

daplunk
March 3rd, 2017, 08:20 PM
I will do this and release it if others don't. If we make topics called.

D6, d4, d8, d10, d12, d20, d100

Then Realm works will link the he'll out of that where mentioned.

kbs666
March 4th, 2017, 03:28 AM
I completely missed that thread when first posted.

Give me a little while.

kbs666
March 4th, 2017, 04:08 AM
Hmmmm.

Not sure this will work as a dice roller for most people's needs.
Each HTML snippet needs to be opened in a separate tab to work. So to follow a link from a "d4" would first take you to a base article which contains the snippet and then you'd need to open the html page itself to roll the die.

Parody
March 4th, 2017, 06:01 AM
I also made a flexible dice roller a long time ago that folks could use in an HTML page snippet:

ESG Dice Roller (http://www.esglabs.com/othergames/dice_roller.html)