2013-03-04 Text Mapper With Lines
SVG Mapper now knows how to draw lines. These lines try to flow from hex to hex…
Example input:
2114 hill 2115 hill 2213 forest 2214 forest "Delan" 2215 hill 2314 forest 2315 forest 2414 hill "Forest Bight Fortress" 2415 forest 2515 forest "Boghra Little" 2214-2615 river river path attributes fill-opacity="0" stroke="black" stroke-width="5" include http://alexschroeder.ch/contrib/default.txt
Result:
I think that I’m not quite understanding how the viewBox is supposed to work. But anyway: these lines can be used for roads, rivers, borders, cliffs, and the like. If they’re very straight, they don’t look too good. There’s no random waviness. One feature I definitely have to add is providing more intermediary points such that the user can guide rivers around the hills or to allow rivers to merge.
Tags: SVG
Maps
Text Mapper 
2013-03-01 Text Mapper Progress
I’m a big fan of the Forgotten Depths. I wanted to use its map as the goal for my Text Mapper. As the mapper now allows the inclusion of other files, I’ve saved my library of colors and icons as default.txt and I’ve saved the map as forgotten-depths.txt. That’s why all you need to do now is include the map:
If you see white hexes, then I haven’t added any definitions for them, yet.
Tags: SVG
Software
Maps
Text Mapper 
2013-02-27 New Text Mapper Shapes
How to create new shapes for Text Mapper?
First, start with an empty SVG file:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg"
height="200px"
width="200px">
</svg>I like to draw stuff using the calligraphy tool (c). I usually simplify the nodes a lot (Ctrl+L), unify the shapes (Ctrl++), edit the nodes by hand (n) until you’re happy with the fewest number of nodes you can manage.
Now move the entire shape such that it is centered on the top left corner. This is (0,0) as far as SVG is concerned. Save it.
Look at the SVG file and notice something like this:
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 7.647323,-20.341905 c -5.784973,-11.791839
-36.204242,-5.139394 -43.951039,7.112364 8.922877,-5.977096
34.793258,-11.641806 37.046343,-5.498373 -17.505656,0.485788
-29.019956,5.940662 -33.027811,23.8472764 C
-21.859546,-12.603312 -7.5022983,-14.191144 2.47485,-12.984161
-8.2112223,6.06712 -19.987316,13.477858 -15.788864,50.225619 c
3.988368,3.362713 8.6116517,-5.097214 4.510279,-7.531518
-0.559084,-6.64895 -0.875559,-13.360661 -0.08632,-20.004922 C
-9.6892813,9.718021 1.072969,-6.510207 8.835372,-12.256094
26.823805,-7.758432 35.550312,0.1756144 34.450001,15.351883
44.387089,3.7916614 29.882349,-11.701263 14.406587,-15.219388
28.287217,-15.939127 40.549839,-6.589098 45.412784,1.4541824
47.026796,-8.361333 28.866764,-19.205208 16.79733,-20.277164 c
10.765708,-6.95198 25.316253,-3.074379 29.792108,3.226712
-4.893545,-14.115874 -36.158133,-10.60357 -38.942114,-3.291453
z"
id="path3007"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccc" />You can already extract this path and use it! Usually it takes several attempts to get the placement right. Once I’m happy, I turn all these floating point numbers into integers in order to save space. Personally, I use Emacs to do it (EmacsWiki:RoundFloatingPoints).
This is what I want:
m 8,-20 c -6,-12 -36,-5 -44,7 9,-6 35,-12 37,-5 -18,0 -29,6 -33,24 C -22,-13 -8,-14 2,-13 -8,6 -20,13 -16,50 c 4,3 9,-5 5,-8 -1,-7 -1,-13 0,-20 C -10,10 1,-7 9,-12 27,-8 36,0 34,15 44,4 30,-12 14,-15 28,-16 41,-7 45,1 47,-8 29,-19 17,-20 c 11,-7 25,-3 30,3 -5,-14 -36,-11 -39,-3 z
Example input:
0202 jungle jungle attributes fill="white" stroke="#b3b3ff" stroke-width="3" jungle path m 8,-20 c -6,-12 -36,-5 -44,7 9,-6 35,-12 37,-5 -18,0 -29,6 -33,24 C -22,-13 -8,-14 2,-13 -8,6 -20,13 -16,50 c 4,3 9,-5 5,-8 -1,-7 -1,-13 0,-20 C -10,10 1,-7 9,-12 27,-8 36,0 34,15 44,4 30,-12 14,-15 28,-16 41,-7 45,1 47,-8 29,-19 17,-20 c 11,-7 25,-3 30,3 -5,-14 -36,-11 -39,-3 z
Output:
Example input:
0101 jungle jungle attributes fill="#9acd32" stroke="black" stroke-width="3" jungle path attributes fill="#228b22" jungle path m 8,-20 c -6,-12 -36,-5 -44,7 9,-6 35,-12 37,-5 -18,0 -29,6 -33,24 C -22,-13 -8,-14 2,-13 -8,6 -20,13 -16,50 c 4,3 9,-5 5,-8 -1,-7 -1,-13 0,-20 C -10,10 1,-7 9,-12 27,-8 36,0 34,15 44,4 30,-12 14,-15 28,-16 41,-7 45,1 47,-8 29,-19 17,-20 c 11,-7 25,-3 30,3 -5,-14 -36,-11 -39,-3 z text font-size="20pt" dy="15px"
Output:
Tags: RPG
Maps
SVG
Text Mapper 
Comments on 2013-02-27 New Text Mapper Shapes
Not enough trees for a jungle
At a watering hole and you have a decent oasis …
– Harald 2013-02-27 11:17 UTC
AlexSchroeder There you go!
I think I like how easy it turns out to be.
– AlexSchroeder 2013-02-27 11:29 UTC
AlexSchroeder I’m still pondering how to do labels.
– AlexSchroeder 2013-02-27 12:01 UTC
Very nice and readable!
– Harald 2013-02-27 12:37 UTC
AlexSchroeder Thank you for the feedback. Added. 
– AlexSchroeder 2013-02-27 14:10 UTC
2013-02-26 Text Mapper
Recently I wanted to create a little hex map and I wanted to do it on an iPad, I wanted to eventually integrate it into my campaign wiki, I wanted it to be SVG based, and so on. All that meant, Hexographer wasn’t the appropriate tool. I needed to cook something up myself. Based on code I wrote nearly five years ago—the Old School Hex Mapper—I wrote up a little something.
I’m calling it the Text Mapper because it takes text input. No interactive fiddling with the map.
There are various sections of the input.
Map
This is simple. Coordinates, terrain.
# map definition 0101 mountain 0102 mountain 0103 hill 0104 forest 0201 mountain 0202 hill 0203 coast 0204 empty 0301 mountain 0302 mountain 0303 plain 0304 sea 0401 hill 0402 sand 0403 forest
The rest of the input determines how things look: what colors to use, what icons to display. When you start the Text Mapper, the input area already contains an example. Start with that before doing anything else.
Terrain attributes
Now it gets tricky. For every terrain we used, the script will generate a hex. We need to provide some SVG attributes! Need documentation? Check out the polygon in the SVG specification and click on show next to presentation attributes. That’s what you should be looking at.
# attributes empty attributes fill="#ffffff" stroke="black" stroke-width="3" plain attributes fill="#7cfc00" stroke="black" stroke-width="3" forest attributes fill="#228b22" stroke="black" stroke-width="3" hill attributes fill="#daa520" stroke="black" stroke-width="3" mountain attributes fill="#708090" stroke="black" stroke-width="3" sand attributes fill="#eedd82" stroke="black" stroke-width="3" coast attributes fill="#7fffd4" stroke="black" stroke-width="3" sea attributes fill="#4169e1" stroke="black" stroke-width="3"
Icons
In order to add little icons, you can specify a path per terrain.
plain path M -18,-13 C -13,-6 -13,4 -8,12 C -11,14 -15,21 -18,26 C -20,17 -22,4 -28,0 C -26,-4 -21,-9 -18,-13 z M 5,-31 C 4,-19 3,-6 6,5 C 1,10 -0,14 -3,19 C -2,6 -3,-4 -4,-16 C -4,-21 2,-26 5,-31 z M 26,-1 C 16,6 19,5 9,18 C 12,3 21,-8 34,-17 C 32,-12 29,-6 27,-1 z
If you don’t want this path to be black, you need to specify attributes for the path element.
plain path attributes fill="#76ee00" hill path attributes fill="#b8860b"
And finally, the coordinates are simple text elements.
text font-size="20pt" dy="15px"
If you wanted a black and white map, for example, you could use different strokes…
empty attributes fill="white" stroke="#b3b3ff" stroke-width="3" mountain attributes fill="white" stroke="#b3b3ff" stroke-width="3" hill attributes fill="white" stroke="#b3b3ff" stroke-width="3" forest attributes fill="white" stroke="#b3b3ff" stroke-width="3"
If you want to create new path elements yourself in Inkscape, you should draw them in a rectangle from (-100,-100) to (100,100) and extract the the path info from the SVG. Yeah, adding new icons isn’t easy.
I need to add more icons. I’d also like to add multiple icons for the same terrain such that the code will pick one at random.
I wonder how easy it’s be to add text labels, roads, rivers and borders. 
The result of the above:
(Also on GitHub.)
Tags: RPG
Hex
Maps
Software
Text Mapper 
2012-11-28 Mapping using Inkscape
I recently decided to “publish” my high level module Caverns of Slime. To the right, you can see the various stages my map went through. And you can see that the entire process started out with map. The map was the backbone of all subsequent activities.
It all started with the first map at the top. Things that made it from the very first draft to the very end:
- the ring like structure with a water flow leading to the Ooze Lord in the center
- the lab of one of my former player characters, Gar
- Shroom Lord (I wanted some continuity with the level above)
- orcs on landsharks throwing bottles of green slime
- Prison of Dis
- Aranea city
- Eternal Swamps
- ghouls
Things that got lost:
- were rats (boring unless transformed in interesting ways)
- poison flowers (what’s interesting about poison flowers? the Eternal Swamps ended up being not so evil…)
- sauro-eels (but giant eels remained)
- “sulfur levels of clockhouse wheels” – a kind of evil Clockwork Nirvana of Mechanus (the evil fusion of men and machine reappeared in the Fortress Dam of Ix)
- refugees of the fungus forest (the level above didn’t seem to have any refugees)
- rock giant with moss (I feel that giants don’t fit thematically)
- dread mages of the shroom kings (which kings? what’s interesting about dread?)
Also note how I abandoned my detailed isometric map in step two. As I drew it, I kept dreading the moment where I’d have to key it and I kept thinking that at higher levels, the party would be flying, teleporting, gating, or pass walling anyway.
As for the final map: I just drew it all using Inkscape. I wanted to write more about it, but in the end, all I did was draw lines, using a lot of Ctrl+L to simplify the paths and then editing the nodes using F2 to make it look better. Every section was on a different layer so that I could lock the rest. The most important decision was to work on paper for the longest time.
Tags: RPG
Maps
Inkscape
Caverns of Slime 
Comments on 2012-11-28 Mapping using Inkscape
Simon Forster I do most of my maps in Inkscape, sometimes by first sketching them out, but often just playing about with it.
– Simon Forster 2012-11-28 11:46 UTC
So you’re saying that you don’t doodle on paper before you turn to Inkscape? I only remember a few maps that I did in Inkscape directly: those were maps I did for Fight On! where the author of the adventure had already provided the doodle—such as this one:
– AlexSchroeder 2012-11-28 13:50 UTC
2012-11-08 Temple of Set
I used 13 acolytes of Set: HD 2 AC 4 D 1d6 SV 15 ML 9 with chain and shield, long knives; they like to cast inflict light wounds in the first round of combat; and a priest HD 7 AC 4 D 1d6 SV 10 ML 10 with the following spells: sticks to snakes, animal growth, charm snake, talk to animals, dispel magic, hold person, fear, blindness and some others I have not determined. The snakes have HD 1 AC 6 D 1d4 SV 16 ML 7. If enlarged, HD 5 AC 6 D 2d6 (no need to roll in subsequent rounds as it keeps constricting) SV 15 ML 8. Use the same stats if he charms the giant python he keeps in the snake pit and sends it after the party.
I used badger people for slaves. The party decided to drop yellow mold down into the flesh pit, followed by burning wood drenched in oil. I decided this killed 4 acolytes, all the rats and all the snakes in the snake pit. Actually, it burnt the rats, suffocated the acolytes and turned the vipers into yellow mold. When faced with a pit of yellow mold, they wondered about washing it down by ripping down the pipe with running water but then decided to just burn it using more oil.
I had two acolytes taking a bath without armor and they were killed quickly. The session ended with the party discovering the secret door, continuing into the prayer hall and trying to draw the acolytes into a fight at the choke point. The priest has been sending nine little snakes and a giant python… And the session ended with a cliff hanger!
(The party also consists of nearly twenty characters including five giant apes.)
2012-10-17 Traveller Maps for Campaign Wiki
Since I’m apparently going to use my Spelljammer-Planescape-Traveller map for a while, I added a way to make map display even easier on Campaign Wiki pages.
Write “Traveller:” followed by the UWP like this:
Traveller: Tu Akhra 0404 D0602B3-1 P As De Lo Lt R Susrael 0503 B0604A4-1 N As De Lt NI A Nova Genova 0607 B867686-1 N Ag Ga Lt NI Ri Hinia Oot 0705 E060200-1 As De Lo Lt A Monkey Island 0308 E064105-0 Lo Lt
And the result will be this:
Klick to switch to the map. There, you can click on the systems to get the wiki pages.
2011-05-24 I Want A Lot Of Labels On My Maps
I prefer my maps to be dense. On the right you can see the treatment I give to a map published in Fight On! magazine. If there is whitespace on the map, it should be filled with text that saves me looking at the key. This is true for typical map keys stretching over many pages, but it’s also true for a One Page Dungeon. I really prefer there to be as little separation between map and key as possible.
I’m working on a dungeon map that hopefully illustrates my point. Too bad it takes so long to do, haha. In 2009 I created something like that for my One Page Dungeon Contest 2009 entry which I retracted when I got a position as a contest judge. These days the Water Temple (SVG) has many things I’d change:
- The map is too linear. I refer you to Melan’s discussion of dungeon maps for an illustration of what’s wrong with my map. This is the most important fault, I feel.
- There but a single named NPCs to interact with. Another one or two would be good.
- The NPC is hardly enough to be called a “faction” – this dungeon needs at least one more significant faction. Something cool like mole-men or crab-men, a wasp queen, or something like that.
- There are no allies to be found, unless you want to call the hard-to-find necromancer an ally. Perhaps if the dungeon clearly indicated that the party starts out with a dead companion and heard about a necromancer living around here that might be able to help (true or false?) then it might work much better.
- There is no opportunity, however small, to effect significant changes for player characters (unless you want multi-class into ghoul?).
Back to the maps I am annotating. The maps are from the Fight On! megadungeon The Darkness Beneath:
Level 2: Warrens of the Troglodytes by Calithena and D. Bowman was published in issue #5.
Level 3: Spawning Grounds of the Crab-Men by D. Bowman was published in issue #3.
I just realized that if I want to print out the remaining levels and mark them up (and not write in my printed copies) I will have to buy PDF versions of the issues I didn’t get contributor copies for (#1–#3 and #11); that would cost me $25. I think I need to figure out how photocopying at home works, ie. scanning and printing.
Comments on 2011-05-24 I Want A Lot Of Labels On My Maps
TheClone The one thing I like about maps for players having no empty spaces is the “exploration” thing. It’s like said in the RPC 2011 interview for the German “ABOREA” system. They gut many details on their maps so you can look at them and ask yourself “what is that thing doing?” and think about it thus serving your gm with many ideas for adventures. It just should have a visible general structure, so you don’t get lost. And between those “big things” you can have many small details that grab the players interest. Surely nothing for a one page dungeon, but something to keep in mind for maps.
– TheClone 2011-05-24 13:26 UTC
AlexSchroeder The only other data point I have are the gorgeous maps for GMs in Paizo products. These look awesome, but when I run the adventure paths, the detail on the maps seems to have no effect on my games. Perhaps my players would disagree and say that my descriptions are better when I look at the detailed maps? I doubt it, but who knows. The problem with the beautiful Paizo maps is that nine times out of ten (made that number up) I found no way to hand them out to players.
They work as (very effective) marketing tools, I guess. I keep falling for them. 
– AlexSchroeder 2011-05-24 13:51 UTC
Your mobile device has a camera that should be “good enough” for a simple scan/print replacement.
– Harald 2011-05-25 09:48 UTC
AlexSchroeder I’d be surprised if my Apple iPhone 3G has good enough resolution. But it’s worth a try for simple maps.
– AlexSchroeder 2011-05-25 14:20 UTC
I have a scanner at home. Alternately, I could bring my camera next time.
– Harald 2011-05-25 20:08 UTC
I actually own a scanner – it’s just that copying a few pages each from a couple of magazines is annoying. I’d pay $5 for somebody else to do it – but not $20. And what I find a bit annoying as well is that I bought the print copies and don’t get automatic access to the PDF.
– AlexSchroeder 2011-05-26 14:00 UTC
2011-04-30 Map Drawing Using Polygons
I’m currently working on randomly generating islands using the ideas presented in Polygonal Map Generation by Amit. Check out his Flash demo! I am nowhere as far, yet. I’m writing my code in Perl and producing SVG output.
See below for source code used. I’d install it on a public server, but unfortunately there are quite some dependencies…
#! /usr/bin/perl -w
# Copyright (C) 2011 Alex Schroeder <alex@gnu.org>
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <http://www.gnu.org/licenses/>.
use strict;
use CGI qw(:standard);
use SVG;
use Math::Geometry::Voronoi;
use Class::Struct;
use Math::Fractal::Noisemaker;
use List::Util qw(min max);
use Data::Dumper;
my $points = 3000;
my $width = 1000;
my $height = 550;
my $center_x = $width / 2;
my $center_y = $height / 2;
my $radius = 500;
my %color = (beach => '#a09077',
ocean => '#44447a',);
struct World => { points => '@',
centroids => '@',
voronoi => '$',
height => '@',
};
sub add_random_points {
my ($world) = @_;
for (my $i = 0; $i < $points; $i++) {
push(@{$world->points}, [rand($width), rand($height)]);
};
# print(join("\n", map {join(",", $_->[0], $_->[1])} @{$world->points}));
return $world;
}
sub add_voronoi {
my ($world) = @_;
$world->voronoi(Math::Geometry::Voronoi->new(points => $world->points));
$world->voronoi->compute;
}
sub add_centroids {
my ($world) = @_;
$world->centroids([]); # clear
foreach my $polygon ($world->voronoi->polygons) {
push(@{$world->centroids}, centroid($polygon));
}
}
sub centroid {
my ($cx, $cy) = (0, 0);
my $A = 0;
my $polygon = shift;
my ($point_index, @points) = @$polygon; # see Math::Geometry::Voronoi
my $point = $points[$#points];
my ($x0, $y0) = ($point->[0], $point->[1]);
for $point (@points) {
my ($x1, $y1) = ($point->[0], $point->[1]);
$cx += ($x0 + $x1) * ($x0 * $y1 - $x1 * $y0);
$cy += ($y0 + $y1) * ($x0 * $y1 - $x1 * $y0);
$A += ($x0 * $y1 - $x1 * $y0);
($x0, $y0) = ($x1, $y1);
}
$A /= 2;
$cx /= 6 * $A;
$cy /= 6 * $A;
return [$cx, $cy, $point_index];
}
sub add_height {
my $world = shift;
$Math::Fractal::Noisemaker::QUIET = 1;
my $grid = Math::Fractal::Noisemaker::square();
$world->height([]); # clear
my $scale = max($height, $width); # grid is a square
foreach my $point (@{$world->points}) {
my $x = int($point->[0]*255/$scale);
my $y = int($point->[1]*255/$scale);
my $h = 0; # we must not skip any points!
$h = $grid->[$x]->get($y) / 255
unless $x < 0 or $y < 0 or $x > 255 or $y > 255;
push(@{$world->height}, $h);
}
}
sub raise_point {
my ($world, $x, $y, $radius) = @_;
my $i = 0;
foreach my $point (@{$world->points}) {
my $dx = $point->[0] - $x;
my $dy = $point->[1] - $y;
my $d = sqrt($dx * $dx + $dy * $dy);
my $v = max(0, $world->height->[$i] - $d / $radius);
$world->height($i, $v);
$i++;
}
}
sub svg {
my $world = shift;
my $svg = new SVG(-width => $width,
-height => $height, );
foreach my $polygon ($world->voronoi->polygons) {
my ($point_index, @points) = @$polygon; # see Math::Geometry::Voronoi
my $x = $world->points->[$point_index]->[0];
my $y = $world->points->[$point_index]->[1];
next if $x < 0 or $y < 0 or $x > $width or $y > $height;
my $z = int($world->height->[$point_index] * 255);
my $color = $z == 0 ? $color{ocean} : "rgb($z,$z,$z)";
my $path = join(",", map { map { int } @$_ } @points);
$svg->polygon(points => $path,
fill => $color,
style => { 'stroke-width' => 1,
'stroke' => 'black'});
}
return $svg->xmlify();
}
sub response {
print header(-type=>'image/svg+xml');
print shift;
}
sub main {
if (path_info eq '/source') {
seek DATA, 0, 0;
print "Content-type: text/plain; charset=UTF-8\r\n\r\n", <DATA>;
} else {
srand(param('seed') || time);
my $world = new World;
add_random_points($world, $points);
add_voronoi($world);
for (my $i = 2; $i--; ) {
# Lloyd Relaxation
add_centroids($world);
$world->points($world->centroids);
add_voronoi($world);
}
# skip corner improvement
# skip Delaunay triangulation
add_height($world);
raise_point($world, $center_x, $center_y, $radius);
# draw
response(svg($world));
}
}
main ();
__DATA__2011-02-12 Map Making Using Inkscape
A long time ago I wrote an Old School Hex Map Tutorial using Inkscape. The campaign I started this with is still on-going after 46 sessions and more than two years of play. We meet on two Sundays per month. Tomorrow is the next session, and I’m looking forward to it.
And I keep working on my map!
It just keeps on growing…
Some of you may recognize this map as a section of the Lenap region in the Wilderlands of High Fantasy.
And I started on a similar map for a new Labyrinth Lord campaign in the Sea of Five Winds region of the Wilderlands of High Fantasy. I love the material because it provides a rough foundation upon which I can build my own campaign setting.
Comments on 2011-02-12 Map Making Using Inkscape
Chris Tregenza I’m a big fan of Inkscape but I’ve never used it to produce that style of map before.
A very useful how-to-guide. Thanks
– Chris Tregenza 2011-02-12 14:35 UTC
AlexSchroeder You’re welcome. I think the benefit of using Inkscape for mapping is that you can keep working on an electronic copy. If you start with a hand-drawn map, scan it, post-process it – that’s cool, but it’s also very much “fixed”. Ideal for a print product, but how will I add new elements for my home campaign? Drawing and scanning elements, and stitching them together, or keeping the original spot-less and working on that… So even though some ink and paper is faster the first time around, I think I’d loose in the long run of a campaign.
I think that you only get this benefit if you’re doing an incremental map.
If you produce a piece that is finished, then using Inkscape is possible, but it’s far less cool, and much less efficient.
Maybe I should put this warning somewhere on the how-to page. 
– AlexSchroeder 2011-02-12 17:12 UTC
John Williams I have never used Inkscape for map making, thanks for the how-to. I just went to your Flickr, your maps are awesome Alex. I’ve been posting some old maps lately, I love map-making it’s kind of an obsession of mine.
– John Williams 2011-02-12 18:47 UTC
AlexSchroeder Thank you for the kind words! Adding to the player map every now and then between sessions is a kind of meditation on the state of the campaign. What have players achieved, explored, uncovered? What random encounters did they have and how will this affect the map? Time to add new locations and lairs!
– AlexSchroeder 2011-02-12 19:58 UTC













Wow, this looks great! I think I’ll need to re-map parts of the Mystara campaign … I may have some time on Sunday.
– Harald 2013-03-01 10:56 UTC
AlexSchroeder Too bad creating new icons takes so damn long. Also, two line labels would be nice. And big, diagonal labels to label areas. “Mirkwood” or something like it. Nice coastlines, roads, rivers…
Regarding roads and rivers: I’m discovering that Bézier curves need a bit more effort since simply doing a quadratic curveto (’T’ in the SVG spec) the hex midpoints isn’t working very well. I will need to rediscover my trigonometry basics!
– AlexSchroeder 2013-03-01 12:00 UTC
Add Comment