{"id":1,"date":"2016-09-20T15:42:55","date_gmt":"2016-09-20T15:42:55","guid":{"rendered":"http:\/\/rpg20.com\/blog\/?p=1"},"modified":"2026-03-04T14:53:27","modified_gmt":"2026-03-04T20:53:27","slug":"hello-world","status":"publish","type":"post","link":"https:\/\/rpg20.com\/blog\/2016\/09\/20\/hello-world\/","title":{"rendered":"Hello world!"},"content":{"rendered":"<p>Some years ago, a page named <a href=\"http:\/\/web.archive.org\/web\/20081010183436\/http:\/\/www.irony.com\/webtools.html\">Irony.com<\/a> used to have all sorts of generators; but then one day it all <a href=\"http:\/\/rpg.stackexchange.com\/questions\/11542\/what-happened-to-irony-games-tools\/29046#29046\">disappeared<\/a>. I wanted to have something I could rely on.<\/p>\n<p>And this is how I got started with the <a href=\"http:\/\/rpg20.com\/\">rpg20.com<\/a> site.<\/p>\n<h2>Monsters<\/h2>\n<p>The <a href=\"https:\/\/rpg20.com\/index.php\/monsters\">monsters<\/a> database is what started it all. When WoTC released the SRD, I thought of writing a script that converted the document to a more manageable medium. I was already thinking of PHP and MySQL.<\/p>\n<p>Before taking a dive into this endeavor, I searched the web. Turns out that some guy named <a href=\"http:\/\/www.darkshire.net\/%7Ejhkim\/rpg\/srd\/index.html\">John H. Kim<\/a> had already done exactly that. And best of all: he was willing to share it.<\/p>\n<p>I downloaded the monster and spell databases and uploaded to my page. After a quick hack, I had a usable UI. I then added a search function, list by CR option, filter by HP\/CR, and not so long ago: terrain and climate search.<\/p>\n<h2>Images and maps<\/h2>\n<p>Then I thought about generating images. One of the things I remember most fondly about Ed&#8217;s Irony.com was that it generated an image of a town\/village. So I thought I&#8217;d give it a try.<\/p>\n<figure id=\"attachment_8\" aria-describedby=\"caption-attachment-8\" style=\"width: 150px\" class=\"wp-caption alignright\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-thumbnail wp-image-8\" src=\"https:\/\/i0.wp.com\/rpg20.com\/blog\/wp-content\/uploads\/2016\/09\/maptest.jpg?resize=150%2C150&#038;ssl=1\" alt=\"Ugly map\" width=\"150\" height=\"150\" srcset=\"https:\/\/i0.wp.com\/rpg20.com\/blog\/wp-content\/uploads\/2016\/09\/maptest.jpg?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/rpg20.com\/blog\/wp-content\/uploads\/2016\/09\/maptest.jpg?zoom=2&amp;resize=150%2C150&amp;ssl=1 300w, https:\/\/i0.wp.com\/rpg20.com\/blog\/wp-content\/uploads\/2016\/09\/maptest.jpg?zoom=3&amp;resize=150%2C150&amp;ssl=1 450w\" sizes=\"auto, (max-width: 150px) 85vw, 150px\" \/><figcaption id=\"caption-attachment-8\" class=\"wp-caption-text\">Ugly map<\/figcaption><\/figure>\n<p>But the thing is&#8230; I think I&#8217;m terrible at drawing maps. So this has been something I&#8217;ve had a hard time doing: visual improvements.<\/p>\n<p>But I told myself that dungeons should be pretty straightforward. And they look cool. And I love mazes. So I went ahead and made a dungeon generator.<\/p>\n<figure id=\"attachment_9\" aria-describedby=\"caption-attachment-9\" style=\"width: 293px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-9\" src=\"https:\/\/i0.wp.com\/rpg20.com\/blog\/wp-content\/uploads\/2016\/09\/1294300760.png?resize=293%2C300&#038;ssl=1\" alt=\"image of a generated dungeon\" width=\"293\" height=\"300\" srcset=\"https:\/\/i0.wp.com\/rpg20.com\/blog\/wp-content\/uploads\/2016\/09\/1294300760.png?resize=293%2C300&amp;ssl=1 293w, https:\/\/i0.wp.com\/rpg20.com\/blog\/wp-content\/uploads\/2016\/09\/1294300760.png?w=620&amp;ssl=1 620w\" sizes=\"auto, (max-width: 293px) 85vw, 293px\" \/><figcaption id=\"caption-attachment-9\" class=\"wp-caption-text\">A generated Dungeon<\/figcaption><\/figure>\n<h2>Evolution<\/h2>\n<p>I think I only had the monster\/spell databases and the dungeon generator when I showed the page to a friend. He asked if I intended to put something in the room&#8230; descriptions, encounters, anything. A few minutes later my dungeon generator had monsters. Not long after that, it started having treasures.<\/p>\n<p>But then I started thinking: I could have a <a href=\"https:\/\/rpg20.com\/index.php\/region\/\">region<\/a> map that has one or more <a href=\"https:\/\/rpg20.com\/index.php\/city\/\">cities<\/a> (and cities have <a href=\"https:\/\/rpg20.com\/index.php\/tavern\/\">taverns<\/a>, right?), and maybe a <a href=\"https:\/\/rpg20.com\/index.php\/dungeon\/\">dungeon<\/a> somewhere, and there could be <a href=\"https:\/\/rpg20.com\/index.php\/cave\/\">caves<\/a> in a mountain.<\/p>\n<p>So I&#8217;m at the point in which I have a ton of plans and not nearly enough free time to work on it. Ah, well&#8230; I still have fun even if it progresses slowly.<\/p>\n<h2>The code<\/h2>\n<p>These tools are online-only and most of them written in PHP. I don&#8217;t have any plans to develop offline-tools at the moment because it&#8217;s a bit more complicated: I&#8217;d have to compile for Linux, Mac, and Windows (I don&#8217;t own a Mac); any minor change requires to recompile everything; people don&#8217;t always know which version they&#8217;re using; etc.<\/p>\n<p>Will this page dissapear? Well, it might some day. But before that happens, I&#8217;d release this code someplace else.<\/p>\n<p>What&#8217;s the license for my code? I haven&#8217;t decided yet, and nobody&#8217;s asked so far&#8230; I guess I could use <a href=\"http:\/\/en.wikipedia.org\/wiki\/GPL\">GPL<\/a> to make sure modifications are shared back&#8230; But I guess I&#8217;ll decide as soon as someone&#8217;s interested in it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Some years ago, a page named Irony.com used to have all sorts of generators; but then one day it all disappeared. I wanted to have something I could rely on. And this is how I got started with the rpg20.com site. Monsters The monsters database is what started it all. When WoTC released the SRD, &hellip; <a href=\"https:\/\/rpg20.com\/blog\/2016\/09\/20\/hello-world\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Hello world!&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[1,3],"tags":[],"class_list":["post-1","post","type-post","status-publish","format-standard","hentry","category-general","category-ramblings"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rpg20.com\/blog\/wp-json\/wp\/v2\/posts\/1","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rpg20.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpg20.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpg20.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rpg20.com\/blog\/wp-json\/wp\/v2\/comments?post=1"}],"version-history":[{"count":6,"href":"https:\/\/rpg20.com\/blog\/wp-json\/wp\/v2\/posts\/1\/revisions"}],"predecessor-version":[{"id":84,"href":"https:\/\/rpg20.com\/blog\/wp-json\/wp\/v2\/posts\/1\/revisions\/84"}],"wp:attachment":[{"href":"https:\/\/rpg20.com\/blog\/wp-json\/wp\/v2\/media?parent=1"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpg20.com\/blog\/wp-json\/wp\/v2\/categories?post=1"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpg20.com\/blog\/wp-json\/wp\/v2\/tags?post=1"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}