-
Notifications
You must be signed in to change notification settings - Fork 2
/
Triador.pm
153 lines (113 loc) · 3.98 KB
/
Triador.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package Random::Name::Triador;
use v5.10.0;
use strict;
use warnings;
use Exporter qw(import);
use Games::Dice qw(roll);
use Random::Name::Pattern qw(random_name);
our $VERSION = '1.000';
our @EXPORT_OK = qw(Yrethi_place_name Zilarban_place_name additions);
my %addition;
$addition{'Vecile'}{'grand duchy'} = 'Vi';
$addition{'Vecile'}{'duchy'} = 'Xi';
$addition{'Vecile'}{'county'} = 'Li';
$addition{'Vecile'}{'barony'} = 'Ci';
$addition{'Vecile'}{'town'} = 'Mi';
$addition{'Vecile'}{'village'} = 'Di';
for ('Telanna','Abru') {
$addition{$_}{'grand duchy'} = 'dil';
$addition{$_}{'duchy'} = 'sar';
$addition{$_}{'county'} = 'til';
$addition{$_}{'barony'} = 'car';
$addition{$_}{'town'} = '';
$addition{$_}{'village'} = '';
}
$addition{'Teglan'}{'grand duchy'} = 'trun';
$addition{'Teglan'}{'duchy'} = 'nar';
$addition{'Teglan'}{'county'} = 'bur';
$addition{'Teglan'}{'barony'} = 'lan';
$addition{'Teglan'}{'town'} = '';
$addition{'Teglan'}{'village'} = '';
$addition{'Krigt'}{'grand duchy'} = 'lain';
$addition{'Krigt'}{'duchy'} = 'dal';
$addition{'Krigt'}{'county'} = 'hik';
$addition{'Krigt'}{'barony'} = 'lode';
$addition{'Krigt'}{'town'} = '';
$addition{'Krigt'}{'village'} = '';
$addition{'Alveigtrudil'}{'grand duchy'} = 'trudil'; # This shouldn't be used, Alveigtrudil is the grand duchy.
$addition{'Alveigtrudil'}{'duchy'} = 'nasar';
$addition{'Alveigtrudil'}{'county'} = 'butil';
$addition{'Alveigtrudil'}{'barony'} = 'lacar';
$addition{'Alveigtrudil'}{'town'} = '';
$addition{'Alveigtrudil'}{'village'} = '';
sub additions {
my ($bare_name,$location,$place) = @_;
my $name;
$name = $addition{'Vecile'}{$place}.' '.$bare_name.$addition{'Telanna'}{$place} if $location eq 'Vi Gwenalladil';
$name = $bare_name.$addition{$location}{$place} if $location =~ /(?:Telanna|Abru|Teglan|Krigt|Alveigtrudil)/;
$name = $addition{$location}{$place}.' '.$bare_name if $location eq 'Vecile';
return $name;
}
sub Yrethi_place_name {
my $syllables = shift;
my $first_syllable = random_name('^Lv');
my @syllable_parts = ($first_syllable);
my $end = $syllables - 1;
for (1..$end) {
my $part = random_name('cv');
$part =~ s/c/k/g;
$part =~ s/f/v/g;
$part =~ s/g/j/g;
$part =~ s/(q)/$1u/gi;
push @syllable_parts, $part if ($part ne lc $syllable_parts[-1]);
}
my $name = join('',@syllable_parts);
if ($name =~ /quu/i) {
my @quu_vowels = qw(a e i o);
my $new_vowel = $quu_vowels[rand @quu_vowels];
$name =~ s/(q|Q)uu/$1u$new_vowel/;
}
$name =~ s/^Aa/Aya/;
$name =~ s/^Ee/Eye/;
$name =~ s/^Ii/Iy/;
$name =~ s/^Oo/Owo/;
$name =~ s/^Uu/Ew/;
if ($name =~ /e$/) {
my @new_vowels;
for (qw(a i o u y)) {
push @new_vowels, $_ if $name !~ /$_/;
}
$name .= $new_vowels[rand @new_vowels];
}
return $name;
}
sub Zilarban_place_name {
my $syllables = roll('1d2') + 1;
my @syllable_parts;
push @syllable_parts, random_name('^c');
my @choices = qw(c ch k l s sh ss th v x z zz);
for my $iter (1..$syllables) {
my $consonent = $choices[rand @choices];
my $syllable = random_name('v').$consonent;
push @syllable_parts, $syllable;
}
my $name = join('',@syllable_parts);
return $name;
}
=pod
=encoding utf8
=head1 NAME
B<Random::Name::Triador> is a name generator for the world of Triador that I am slowly building.
=head1 VERSION
This document describes Random::Name::Triador version 1.000.
=head1 SYNOPSIS
use Random::Name::Triador qw(Yrethi_place_name Zilarban_place_name additions);
=head1 DEPENDENCIES
Random::Name::Triador depends on <Random::Name::Pattern>, L<Games::Dice>, and L<Exporter>.
=head1 AUTHOR
Lady Aleena
=head1 LICENSE AND COPYRIGHT
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>.
Copyright © 2020, Lady Aleena C<<aleena@cpan.org>>. All rights reserved.
=cut
1;