Games-RolePlay-MapGen
view release on metacpan or search on metacpan
MapGen/Editor.pm view on Meta::CPAN
my $options = [[ # column 1
{ mnemonic => "_Tile Size: ",
type => "text",
desc => "The size of each tile (in Square Feet or Square Units or whatever)",
name => 'tile_size',
default => 10, # NOTE: fixes and matches must exist and must be arrrefs
fixes => [sub { $_[0] =~ s/\s+//g }],
matches => [qr/^\d+$/] },
{ mnemonic => "Cell Size: ",
type => "text",
desc => "The size of each tile in the image (in pixels)",
name => 'cell_size',
default => '23x23',
fixes => [sub { $_[0] =~ s/\s+//g }],
matches => [qr/^\d+x\d+$/] },
{ mnemonic => "Bounding Box: ",
type => "text",
desc => "The size of the whole map (in tiles)",
name => 'bounding_box',
default => '20x20',
fixes => [sub { $_[0] =~ s/\s+//g }],
matches => [qr/^\d+x\d+$/] },
{ mnemonic => "Number of Rooms: ",
type => "text",
desc => "The number of generated rooms, either a number or a roll (e.g., 2, 2d4, 2d4+2)",
name => 'num_rooms',
default => '2d4',
disable => { generator => sub { $_[0] ne "Basic" } },
fixes => [sub { $_[0] =~ s/\s+//g }],
matches => [qr/^(?:\d+|\d+d\d+|\d+d\d+[+-]\d+)$/] },
{ mnemonic => "Min Room Size: ",
type => "text",
desc => "The minimum size of generated rooms (in tiles)",
name => 'min_room_size',
default => '2x2',
disable => { generator => sub { $_[0] ne "Basic" } },
fixes => [sub { $_[0] =~ s/\s+//g }],
matches => [qr/^\d+x\d+$/] },
{ mnemonic => "Max Room Size: ",
type => "text",
desc => "The maximum size of generated rooms (in tiles)",
name => 'max_room_size',
default => '7x7',
disable => { generator => sub { $_[0] ne "Basic" } },
fixes => [sub { $_[0] =~ s/\s+//g }],
matches => [qr/^\d+x\d+$/] },
{ mnemonic => "Open Room-Corridor: ",
type => "text",
desc => "The %-chance of a door occuring between a room tile and a corridor tile where there is already an opening. The percentages are listed as a four touple: door-chance, secret, stuck, locked (e.g., 95,2,25,50 means there's a 95% c...
name => 'open_room_corridor_door_percent',
default => '95, 2, 25, 50',
disable => { generator_plugins => sub { (grep {$_ eq "BasicDoors"} @{$_[0]}) ? 0:1 } },
convert => sub { my @a = split m/\D+/, $_[0]; { door=>$a[0], secret=>$a[1], stuck=>$a[2], locked=>$a[3] } },
trevnoc => sub { join(", ", @{$_[0]}{qw( door secret stuck locked )}) },
matches => [sub { (grep {$_ >= 0 and $_ <= 100} $_[0] =~ m/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)$/) == 4 }],
fixes => [sub { $_[0] =~ s/[^\d,\s]+//g }], },
{ mnemonic => "Closed Room-Corridor: ",
type => "text",
desc => "The %-chance of a door occuring between a room tile and a corridor tile where there isn't an opening. The percentages are listed as a four touple: door-chance, secret, stuck, locked.",
name => 'closed_room_corridor_door_percent',
default => '5, 95, 10, 30',
disable => { generator_plugins => sub { (grep {$_ eq "BasicDoors"} @{$_[0]}) ? 0:1 } },
convert => sub { my @a = split m/\D+/, $_[0]; { door=>$a[0], secret=>$a[1], stuck=>$a[2], locked=>$a[3] } },
trevnoc => sub { join(", ", @{$_[0]}{qw( door secret stuck locked )}) },
matches => [sub { (grep {$_ >= 0 and $_ <= 100} $_[0] =~ m/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)$/) == 4 }],
fixes => [sub { $_[0] =~ s/[^\d,\s]+//g }], },
{ mnemonic => "Open Corridor-Corridor: ",
type => "text",
desc => "The %-chance of a door occuring between a corridor tile and a corridor tile where there is already an opening. The percentages are listed as a four touple: door-chance, secret, stuck, locked.",
name => 'open_corridor_corridor_door_percent',
default => '1, 10, 25, 50',
disable => { generator_plugins => sub { (grep {$_ eq "BasicDoors"} @{$_[0]}) ? 0:1 } },
convert => sub { my @a = split m/\D+/, $_[0]; { door=>$a[0], secret=>$a[1], stuck=>$a[2], locked=>$a[3] } },
trevnoc => sub { join(", ", @{$_[0]}{qw( door secret stuck locked )}) },
matches => [sub { (grep {$_ >= 0 and $_ <= 100} $_[0] =~ m/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)$/) == 4 }],
fixes => [sub { $_[0] =~ s/[^\d,\s]+//g }], },
{ mnemonic => "Closed Corridor-Corridor: ",
type => "text",
desc => "The %-chance of a door occuring between a corridor tile and a corridor tile where there isn't an opening. The percentages are listed as a four touple: door-chance, secret, stuck, locked.",
name => 'closed_corridor_corridor_door_percent',
default => '1, 95, 10, 30',
disable => { generator_plugins => sub { (grep {$_ eq "BasicDoors"} @{$_[0]}) ? 0:1 } },
convert => sub { my @a = split m/\D+/, $_[0]; { door=>$a[0], secret=>$a[1], stuck=>$a[2], locked=>$a[3] } },
trevnoc => sub { join(", ", @{$_[0]}{qw( door secret stuck locked )}) },
matches => [sub { (grep {$_ >= 0 and $_ <= 100} $_[0] =~ m/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)$/) == 4 }],
fixes => [sub { $_[0] =~ s/[^\d,\s]+//g }], },
{ mnemonic => "Max Span: ",
type => "text",
desc => "The door dropper will close spans larger than a single tile in order to drop a door. This is the maximum sized span that it will close.",
name => 'max_span',
default => '50',
disable => { generator_plugins => sub { (grep {$_ eq "BasicDoors"} @{$_[0]}) ? 0:1 } },
fixes => [sub { $_[0] =~ s/\D+//g }], },
], [ # column 2
{ mnemonic => "_Generator: ",
type => "choice",
desc => "The generator used to create the map.",
descs => {
Basic => 'The basic generator uses perfect/sparseandloops to make a map and then drops rooms onto the result.',
Perfect => 'The perfect maze generator James Buck designed.',
SparseAndLoops => "Pretty much, this is same map generator on James Buck's site.",
Blank => "Generates a boring blank map according to your selected bounding box.",
OneBigRoom => "Generates a boring giant room the size of your bounding box.",
},
name => 'generator',
default => $DEFAULT_GENERATOR,
choices => [@GENERATORS] },
{ mnemonic => "Generator _Plugins: ", z=>3,
type => "choices",
desc => "The plugins you wish to use after the map is created.",
descs => {
BasicDoors => 'Adds doors using various strategies.',
FiveSplit => 'Divides map tiles with tiles larger than 5 units square into tiles precisely 5 units square. E.g., if the tile size is set to 10, this will double the bounding box size of your map, but your hallways will be two tiles wi...
},
name => 'generator_plugins',
disable => { FiveSplit => {tile_size => sub { ($_[0]/5) =~ m/\./ }} },
defaults => [@DEFAULT_GENERATOR_PLUGINS],
choices => [@GENERATOR_PLUGINS] },
{ mnemonic => "_Sparseness: ",
type => "text",
desc => "The number of times to repeat the remove-dead-end-tile step in James Buck's generator algorithm.",
name => 'sparseness',
default => 10,
disable => { generator => sub { not {Basic=>1, SparseAndLoops=>1}->{$_[0]} } },
fixes => [sub { $_[0] =~ s/\s+//g }],
matches => [qr/^(?:\d{1,2}|100)$/] },
{ mnemonic => "Same Way Percent:",
type => "text",
desc => "While digging out the perfect maze, this is the percent chance of digging in the same direction as last time each time we visit the node.",
name => 'same_way_percent',
default => 90,
disable => { generator => sub { not {Basic=>1, Perfect=>1, SparseAndLoops=>1}->{$_[0]} } },
fixes => [sub { $_[0] =~ s/\s+//g }],
matches => [qr/^(?:\d{1,2}|100)$/] },
{ mnemonic => "Same Node Percent:",
type => "text",
( run in 1.006 second using v1.01-cache-2.11-cpan-71847e10f99 )