Grassroots
This commit is contained in:
parent
204833227a
commit
3c370dafc6
1
.gitignore
vendored
1
.gitignore
vendored
@ -17,3 +17,4 @@ nytprof.out
|
||||
/pm_to_blib
|
||||
*.o
|
||||
*.bs
|
||||
*.swp
|
||||
|
BIN
lib/OSRIC/.Character.pm.swp
Normal file
BIN
lib/OSRIC/.Character.pm.swp
Normal file
Binary file not shown.
BIN
lib/OSRIC/.Classes.pm.swp
Normal file
BIN
lib/OSRIC/.Classes.pm.swp
Normal file
Binary file not shown.
11
lib/OSRIC/CGI.pm
Normal file
11
lib/OSRIC/CGI.pm
Normal file
@ -0,0 +1,11 @@
|
||||
package OSRIC::CGI;
|
||||
use CGI;
|
||||
|
||||
sub new
|
||||
{
|
||||
my $class = shift;
|
||||
my $q = CGI->new;
|
||||
bless $q, $class;
|
||||
}
|
||||
|
||||
1;
|
99
lib/OSRIC/Character.pm
Normal file
99
lib/OSRIC/Character.pm
Normal file
@ -0,0 +1,99 @@
|
||||
package OSRIC::Character;
|
||||
|
||||
use OSRIC::Classes;
|
||||
use OSRIC::Classes::Assassin;
|
||||
use OSRIC::Classes::Cleric;
|
||||
use OSRIC::Classes::Druid;
|
||||
use OSRIC::Classes::Fighter;
|
||||
use OSRIC::Classes::Illusionist;
|
||||
use OSRIC::Classes::MagicUser;
|
||||
use OSRIC::Classes::Paladin;
|
||||
use OSRIC::Classes::Ranger;
|
||||
use OSRIC::Classes::Thief;
|
||||
|
||||
use OSRIC::Util qw/d/;
|
||||
use JSON qw/encode_json/;
|
||||
|
||||
# Generates a new character:
|
||||
sub new
|
||||
{
|
||||
my $class = shift;
|
||||
my $character =
|
||||
{
|
||||
personal =>
|
||||
{
|
||||
irc => "", # The player's irc nick, not found on the character sheet.
|
||||
name => "",
|
||||
classes => [ ],
|
||||
alignment => "",
|
||||
race => "",
|
||||
xp => 0,
|
||||
hp => 0,
|
||||
ac => 0,
|
||||
lvl => 0,
|
||||
age => 0,
|
||||
height => 0,
|
||||
weight => 0,
|
||||
sex => "M"
|
||||
},
|
||||
stats =>
|
||||
{
|
||||
str => 0,
|
||||
dex => 0,
|
||||
con => 0,
|
||||
int => 0,
|
||||
wis => 0,
|
||||
cha => 0,
|
||||
},
|
||||
equipment =>
|
||||
{
|
||||
items => [ ],
|
||||
weapons => [ ],
|
||||
missiles => [ ],
|
||||
armour => [ ],
|
||||
},
|
||||
wealth =>
|
||||
{
|
||||
coins => 0,
|
||||
gems => [ ],
|
||||
other => [ ],
|
||||
},
|
||||
};
|
||||
bless $character, $class;
|
||||
}
|
||||
|
||||
# Generates the 6 major stats:
|
||||
sub generate_stats
|
||||
{
|
||||
my $self = shift;
|
||||
for my $stat(keys %{$self->{stats}})
|
||||
{
|
||||
# TODO:
|
||||
# * Class specific boosts.
|
||||
# * Perhaps an alternate system where players can choose what number
|
||||
# to allocate to what stat.
|
||||
$self->{stats}->{$stat} = (d(6) + d(6) + d(6));
|
||||
}
|
||||
}
|
||||
|
||||
# Gives the player a certain amount of starting gold (class-dependant):
|
||||
sub generate_gold
|
||||
{
|
||||
my $self = shift;
|
||||
|
||||
# Get the classes and sort by the highest starting gold (see page 28):
|
||||
my @classes = @{$self->{personal}->{classes}};
|
||||
sort { $a->max_starting_gold <=> $b->max_starting_gold } @classes;
|
||||
|
||||
# Generate the starting gold:
|
||||
$self->{wealth}->{coins} = $classes[0]->get_gold;
|
||||
}
|
||||
|
||||
# Encodes the character to JSON:
|
||||
sub to_json
|
||||
{
|
||||
my $self = shift;
|
||||
my $json = encode_json $self;
|
||||
}
|
||||
|
||||
1;
|
21
lib/OSRIC/Classes.pm
Normal file
21
lib/OSRIC/Classes.pm
Normal file
@ -0,0 +1,21 @@
|
||||
package OSRIC::Classes;
|
||||
|
||||
# A sub to get the maximum amount of starting gold (for sorting) and one to get
|
||||
# an actual amount of starting gold:
|
||||
sub max_starting_gold { 0 }
|
||||
sub get_gold { 0 }
|
||||
|
||||
# Minimum score requirements:
|
||||
sub minimum_scores
|
||||
{
|
||||
{
|
||||
str => 0,
|
||||
dex => 0,
|
||||
con => 0,
|
||||
int => 0,
|
||||
wis => 0,
|
||||
cha => 0,
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
23
lib/OSRIC/Classes/Assassin.pm
Normal file
23
lib/OSRIC/Classes/Assassin.pm
Normal file
@ -0,0 +1,23 @@
|
||||
package OSRIC::Classes::Assassin;
|
||||
use parent qw(Classes);
|
||||
use OSRIC::Util qw/d/;
|
||||
|
||||
# A sub to get the maximum amount of starting gold (for sorting) and one to get
|
||||
# an actual amount of starting gold:
|
||||
sub max_starting_gold { 120 }
|
||||
sub get_gold { ((d(6) + d(6)) * 10) } # 2d6 * 10
|
||||
|
||||
# Minimum score requirements:
|
||||
sub minimum_scores
|
||||
{
|
||||
{
|
||||
str => 12,
|
||||
dex => 12,
|
||||
con => 6,
|
||||
int => 11,
|
||||
wis => 6,
|
||||
cha => 0,
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
23
lib/OSRIC/Classes/Cleric.pm
Normal file
23
lib/OSRIC/Classes/Cleric.pm
Normal file
@ -0,0 +1,23 @@
|
||||
package OSRIC::Classes::Assassin;
|
||||
use parent qw(Classes);
|
||||
use OSRIC::Util qw/d/;
|
||||
|
||||
# A sub to get the maximum amount of starting gold (for sorting) and one to get
|
||||
# an actual amount of starting gold:
|
||||
sub max_starting_gold { 180 }
|
||||
sub get_gold { ((d(6) + d(6) + d(6)) * 10) } # 3d6 * 10
|
||||
|
||||
# Minimum score requirements:
|
||||
sub minimum_scores
|
||||
{
|
||||
{
|
||||
str => 6,
|
||||
dex => 3,
|
||||
con => 6,
|
||||
int => 6,
|
||||
wis => 9,
|
||||
cha => 6,
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
23
lib/OSRIC/Classes/Druid.pm
Normal file
23
lib/OSRIC/Classes/Druid.pm
Normal file
@ -0,0 +1,23 @@
|
||||
package OSRIC::Classes::Assassin;
|
||||
use parent qw(Classes);
|
||||
use OSRIC::Util qw/d/;
|
||||
|
||||
# A sub to get the maximum amount of starting gold (for sorting) and one to get
|
||||
# an actual amount of starting gold:
|
||||
sub max_starting_gold { 180 }
|
||||
sub get_gold { ((d(6) + d(6) + d(6)) * 10) } # 3d6 * 10
|
||||
|
||||
# Minimum score requirements:
|
||||
sub minimum_scores
|
||||
{
|
||||
{
|
||||
str => 6,
|
||||
dex => 6,
|
||||
con => 6,
|
||||
int => 6,
|
||||
wis => 12,
|
||||
cha => 15,
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
23
lib/OSRIC/Classes/Fighter.pm
Normal file
23
lib/OSRIC/Classes/Fighter.pm
Normal file
@ -0,0 +1,23 @@
|
||||
package OSRIC::Classes::Assassin;
|
||||
use parent qw(Classes);
|
||||
use OSRIC::Util qw/d/;
|
||||
|
||||
# A sub to get the maximum amount of starting gold (for sorting) and one to get
|
||||
# an actual amount of starting gold:
|
||||
sub max_starting_gold { 200 }
|
||||
sub get_gold { (((d(6) + d(6) + d(6)) + 2) * 10) } # (3d6 + 2) * 10
|
||||
|
||||
# Minimum score requirements:
|
||||
sub minimum_scores
|
||||
{
|
||||
{
|
||||
str => 9,
|
||||
dex => 6,
|
||||
con => 7,
|
||||
int => 3,
|
||||
wis => 6,
|
||||
cha => 6,
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
23
lib/OSRIC/Classes/Illusionist.pm
Normal file
23
lib/OSRIC/Classes/Illusionist.pm
Normal file
@ -0,0 +1,23 @@
|
||||
package OSRIC::Classes::Assassin;
|
||||
use parent qw(Classes);
|
||||
use OSRIC::Util qw/d/;
|
||||
|
||||
# A sub to get the maximum amount of starting gold (for sorting) and one to get
|
||||
# an actual amount of starting gold:
|
||||
sub max_starting_gold { 80 }
|
||||
sub get_gold { ((d(4) + d(4)) * 10) } # 2d4 * 10
|
||||
|
||||
# Minimum score requirements:
|
||||
sub minimum_scores
|
||||
{
|
||||
{
|
||||
str => 6,
|
||||
dex => 16,
|
||||
con => 0,
|
||||
int => 15,
|
||||
wis => 6,
|
||||
cha => 6,
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
23
lib/OSRIC/Classes/MagicUser.pm
Normal file
23
lib/OSRIC/Classes/MagicUser.pm
Normal file
@ -0,0 +1,23 @@
|
||||
package OSRIC::Classes::Assassin;
|
||||
use parent qw(Classes);
|
||||
use OSRIC::Util qw/d/;
|
||||
|
||||
# A sub to get the maximum amount of starting gold (for sorting) and one to get
|
||||
# an actual amount of starting gold:
|
||||
sub max_starting_gold { 80 }
|
||||
sub get_gold { ((d(4) + d(4)) * 10) } # 2d4 * 10
|
||||
|
||||
# Minimum score requirements:
|
||||
sub minimum_scores
|
||||
{
|
||||
{
|
||||
str => 3,
|
||||
dex => 6,
|
||||
con => 6,
|
||||
int => 9,
|
||||
wis => 6,
|
||||
cha => 6,
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
23
lib/OSRIC/Classes/Paladin.pm
Normal file
23
lib/OSRIC/Classes/Paladin.pm
Normal file
@ -0,0 +1,23 @@
|
||||
package OSRIC::Classes::Assassin;
|
||||
use parent qw(Classes);
|
||||
use OSRIC::Util qw/d/;
|
||||
|
||||
# A sub to get the maximum amount of starting gold (for sorting) and one to get
|
||||
# an actual amount of starting gold:
|
||||
sub max_starting_gold { 200 }
|
||||
sub get_gold { (((d(6) + d(6) + d(6)) + 2) * 10) } # (3d6 + 2) * 10
|
||||
|
||||
# Minimum score requirements:
|
||||
sub minimum_scores
|
||||
{
|
||||
{
|
||||
str => 12,
|
||||
dex => 6,
|
||||
con => 9,
|
||||
int => 9,
|
||||
wis => 13,
|
||||
cha => 17,
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
23
lib/OSRIC/Classes/Ranger.pm
Normal file
23
lib/OSRIC/Classes/Ranger.pm
Normal file
@ -0,0 +1,23 @@
|
||||
package OSRIC::Classes::Assassin;
|
||||
use parent qw(Classes);
|
||||
use OSRIC::Util qw/d/;
|
||||
|
||||
# A sub to get the maximum amount of starting gold (for sorting) and one to get
|
||||
# an actual amount of starting gold:
|
||||
sub max_starting_gold { 200 }
|
||||
sub get_gold { (((d(6) + d(6) + d(6)) + 2) * 10) } # (3d6 + 2) * 10
|
||||
|
||||
# Minimum score requirements:
|
||||
sub minimum_scores
|
||||
{
|
||||
{
|
||||
str => 13,
|
||||
dex => 6,
|
||||
con => 14,
|
||||
int => 13,
|
||||
wis => 14,
|
||||
cha => 6,
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
23
lib/OSRIC/Classes/Thief.pm
Normal file
23
lib/OSRIC/Classes/Thief.pm
Normal file
@ -0,0 +1,23 @@
|
||||
package OSRIC::Classes::Assassin;
|
||||
use parent qw(Classes);
|
||||
use OSRIC::Util qw/d/;
|
||||
|
||||
# A sub to get the maximum amount of starting gold (for sorting) and one to get
|
||||
# an actual amount of starting gold:
|
||||
sub max_starting_gold { 120 }
|
||||
sub get_gold { ((d(6) + d(6)) * 10) } # 2d6 * 10
|
||||
|
||||
# Minimum score requirements:
|
||||
sub minimum_scores
|
||||
{
|
||||
{
|
||||
str => 6,
|
||||
dex => 9,
|
||||
con => 6,
|
||||
int => 6,
|
||||
wis => 0,
|
||||
cha => 6,
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
10
lib/OSRIC/Util.pm
Normal file
10
lib/OSRIC/Util.pm
Normal file
@ -0,0 +1,10 @@
|
||||
package OSRIC::Util;
|
||||
|
||||
# Rolls a dice of the specified number:
|
||||
sub d
|
||||
{
|
||||
my $n = shift;
|
||||
return int(rand($n));
|
||||
}
|
||||
|
||||
1;
|
Loading…
Reference in New Issue
Block a user