diff --git a/Irpg/Classes/Barbarian.pm b/Irpg/Classes/Barbarian.pm new file mode 100644 index 0000000000000000000000000000000000000000..cc517182150e87303866fb9e0593813afb4a6579 --- /dev/null +++ b/Irpg/Classes/Barbarian.pm @@ -0,0 +1,23 @@ +package Irpg::Classes::Barbarian; + +use strict; +use warnings; +use Irpg::Classes::Fighter; +our @ISA = qw(Irpg::Classes::Fighter); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['str'] + $pl_stats->['con'] >= 9) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Barbarian'; + $self->{MOD_STR} = $pl_stats->{str}*1.5; + return $self; +} + +1; diff --git a/Irpg/Classes/Bargainer.pm b/Irpg/Classes/Bargainer.pm new file mode 100644 index 0000000000000000000000000000000000000000..1b5cf581b758684a1ead772bd93e8728fe2f4325 --- /dev/null +++ b/Irpg/Classes/Bargainer.pm @@ -0,0 +1,23 @@ +package Irpg::Classes::Bargainer; + +use strict; +use warnings; +use Irpg::Classes::Cunning; +our @ISA = qw(Irpg::Classes::Cunning); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['cha'] + $pl_stats->['dex'] >= 9) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Bargainer'; + $self->{MOD_CHA} = 1.5; + return $self; +} + +1; diff --git a/Irpg/Classes/Elite_Warrior.pm b/Irpg/Classes/Elite_Warrior.pm new file mode 100644 index 0000000000000000000000000000000000000000..70c6ec6a33f9aaefb2f96e40727ed665c30214c9 --- /dev/null +++ b/Irpg/Classes/Elite_Warrior.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::Elite_Warrior; + +use strict; +use warnings; +use Irpg::Classes::Warrior; +our @ISA = qw(Irpg::Classes::Warrior); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['str'] + $pl_stats->['con'] >= 11) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Elite Warrior'; + $self->{MOD_STR} = $pl_stats->{str}*1.5; + $self->{MOD_CON} = $pl_stats->{con}*1.5; + return $self; +} + +1; diff --git a/Irpg/Classes/Enchanter.pm b/Irpg/Classes/Enchanter.pm new file mode 100644 index 0000000000000000000000000000000000000000..220cac692fa08aaba3cab0f1b7d203d0a80e579d --- /dev/null +++ b/Irpg/Classes/Enchanter.pm @@ -0,0 +1,23 @@ +package Irpg::Classes::Enchanter; + +use strict; +use warnings; +use Irpg::Classes::Enlightened; +our @ISA = qw(Irpg::Classes::Enlightened); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['int'] + $pl_stats->['wis'] >= 9) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Enchanter'; + $self->{MOD_WIS} = 1.5; + return $self; +} + +1; diff --git a/Irpg/Classes/Godfather.pm b/Irpg/Classes/Godfather.pm new file mode 100644 index 0000000000000000000000000000000000000000..e445931abc45ce1c8463ec7cd5a30bd3906db5d5 --- /dev/null +++ b/Irpg/Classes/Godfather.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::Godfather; + +use strict; +use warnings; +use Irpg::Classes::Swindler; +our @ISA = qw(Irpg::Classes::Swindler); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['cha'] + $pl_stats->['dex'] >= 11) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Godfather'; + $self->{MOD_CHA} = 1.5; + $self->{MOD_DEX} = 1.5; + return $self; +} + +1; diff --git a/Irpg/Classes/High_Mage.pm b/Irpg/Classes/High_Mage.pm new file mode 100644 index 0000000000000000000000000000000000000000..dd097309ab960d48076371c8d7a7ce3c904a1547 --- /dev/null +++ b/Irpg/Classes/High_Mage.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::High_Mage; + +use strict; +use warnings; +use Irpg::Classes::Mage; +our @ISA = qw(Irpg::Classes::Mage); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['int'] + $pl_stats->['wis'] >= 11) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'High Mage'; + $self->{MOD_WIS} = 1.5; + $self->{MOD_INT} = 1.5; + return $self; +} + +1; diff --git a/Irpg/Classes/Mage.pm b/Irpg/Classes/Mage.pm new file mode 100644 index 0000000000000000000000000000000000000000..70c4e347ab1d29a697e17f4ef7f0ed31d4041916 --- /dev/null +++ b/Irpg/Classes/Mage.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::Mage; + +use strict; +use warnings; +use Irpg::Classes::Enlightened; +our @ISA = qw(Irpg::Classes::Enlightened); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['int'] + $pl_stats->['wis'] >= 9) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Mage'; + $self->{MOD_WIS} = 1.4; + $self->{MOD_INT} = 1.4; + return $self; +} + +1; diff --git a/Irpg/Classes/Master_Enchanter.pm b/Irpg/Classes/Master_Enchanter.pm new file mode 100644 index 0000000000000000000000000000000000000000..4d334a5c9b8a518b0d64110e79c66dab851f4e80 --- /dev/null +++ b/Irpg/Classes/Master_Enchanter.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::Master_Enchanter; + +use strict; +use warnings; +use Irpg::Classes::Enchanter; +our @ISA = qw(Irpg::Classes::Enchanter); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['int'] + $pl_stats->['wis'] >= 11) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Master Enchanter'; + $self->{MOD_INT} = 1.2; + $self->{MOD_WIS} = 1.8; + return $self; +} + +1; diff --git a/Irpg/Classes/Merchant.pm b/Irpg/Classes/Merchant.pm new file mode 100644 index 0000000000000000000000000000000000000000..1e7b5ee53a05fde00f9117e3f15800a0b1635854 --- /dev/null +++ b/Irpg/Classes/Merchant.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::Merchant; + +use strict; +use warnings; +use Irpg::Classes::Bargainer; +our @ISA = qw(Irpg::Classes::Bargainer); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['cha'] + $pl_stats->['dex'] >= 11) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Merchant'; + $self->{MOD_CHA} = 1.8; + $self->{MOD_DEX} = 1.2; + return $self; +} + +1; diff --git a/Irpg/Classes/Officer.pm b/Irpg/Classes/Officer.pm new file mode 100644 index 0000000000000000000000000000000000000000..3694edac681e39677fa1c66066ba8a6d0f4b2b4a --- /dev/null +++ b/Irpg/Classes/Officer.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::Officer; + +use strict; +use warnings; +use Irpg::Classes::Soldier; +our @ISA = qw(Irpg::Classes::Soldier); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['str'] + $pl_stats->['con'] >= 11) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Officer'; + $self->{MOD_STR} = $pl_stats->{con}*1.2; + $self->{MOD_CON} = $pl_stats->{con}*1.8; + return $self; +} + +1; diff --git a/Irpg/Classes/Old_Wizard.pm b/Irpg/Classes/Old_Wizard.pm new file mode 100644 index 0000000000000000000000000000000000000000..26f3c6c51d2ce816b9a25f5c4290a25d3f11f0f2 --- /dev/null +++ b/Irpg/Classes/Old_Wizard.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::Old_Wizard; + +use strict; +use warnings; +use Irpg::Classes::Wizard; +our @ISA = qw(Irpg::Classes::Wizard); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['int'] + $pl_stats->['wis'] >= 11) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Old Wizard'; + $self->{MOD_INT} = 1.8; + $self->{MOD_WIS} = 1.2; + return $self; +} + +1; diff --git a/Irpg/Classes/Shadow.pm b/Irpg/Classes/Shadow.pm new file mode 100644 index 0000000000000000000000000000000000000000..e181fbdebbbef9073cc887e10c5cb781d943ca99 --- /dev/null +++ b/Irpg/Classes/Shadow.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::Shadow; + +use strict; +use warnings; +use Irpg::Classes::Thief; +our @ISA = qw(Irpg::Classes::Thief); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['cha'] + $pl_stats->['dex'] >= 11) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Shadow'; + $self->{MOD_CHA} = 1.2; + $self->{MOD_DEX} = 1.8; + return $self; +} + +1; diff --git a/Irpg/Classes/Soldier.pm b/Irpg/Classes/Soldier.pm new file mode 100644 index 0000000000000000000000000000000000000000..f29ea4f2f22c0a0397415fd1707d40ce8f9b9b9f --- /dev/null +++ b/Irpg/Classes/Soldier.pm @@ -0,0 +1,23 @@ +package Irpg::Classes::Soldier; + +use strict; +use warnings; +use Irpg::Classes::Fighter; +our @ISA = qw(Irpg::Classes::Fighter); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['str'] + $pl_stats->['con'] >= 9) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Soldier'; + $self->{MOD_CON} = $pl_stats->{con}*1.5; + return $self; +} + +1; diff --git a/Irpg/Classes/Swindler.pm b/Irpg/Classes/Swindler.pm new file mode 100644 index 0000000000000000000000000000000000000000..0ece6ae1bdc5bb1c2d23a68c39d4309ecbcba125 --- /dev/null +++ b/Irpg/Classes/Swindler.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::Swindler; + +use strict; +use warnings; +use Irpg::Classes::Cunning; +our @ISA = qw(Irpg::Classes::Cunning); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['cha'] + $pl_stats->['dex'] >= 9) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Swindler'; + $self->{MOD_CHA} = 1.4; + $self->{MOD_DEX} = 1.4; + return $self; +} + +1; diff --git a/Irpg/Classes/Thief.pm b/Irpg/Classes/Thief.pm new file mode 100644 index 0000000000000000000000000000000000000000..fae3202a37ef8c4ce0a6a1ed61fa94c550e7338d --- /dev/null +++ b/Irpg/Classes/Thief.pm @@ -0,0 +1,23 @@ +package Irpg::Classes::Thief; + +use strict; +use warnings; +use Irpg::Classes::Cunning; +our @ISA = qw(Irpg::Classes::Cunning); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['cha'] + $pl_stats->['dex'] >= 9) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Thief'; + $self->{MOD_DEX} = 1.5; + return $self; +} + +1; diff --git a/Irpg/Classes/Tribe_Chief.pm b/Irpg/Classes/Tribe_Chief.pm new file mode 100644 index 0000000000000000000000000000000000000000..6264faeaf075fc5e5a7e1294a33b9c5cf277c2f3 --- /dev/null +++ b/Irpg/Classes/Tribe_Chief.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::Tribe_Chief; + +use strict; +use warnings; +use Irpg::Classes::Barbarian; +our @ISA = qw(Irpg::Classes::Barbarian); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['str'] + $pl_stats->['con'] >= 11) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Tribe Chief'; + $self->{MOD_STR} = $pl_stats->{str}*1.8; + $self->{MOD_CON} = $pl_stats->{str}*1.2; + return $self; +} + +1; diff --git a/Irpg/Classes/Warrior.pm b/Irpg/Classes/Warrior.pm new file mode 100644 index 0000000000000000000000000000000000000000..9f93b26d83263aabbebdbdbf388004a8d8d298fa --- /dev/null +++ b/Irpg/Classes/Warrior.pm @@ -0,0 +1,24 @@ +package Irpg::Classes::Warrior; + +use strict; +use warnings; +use Irpg::Classes::Fighter; +our @ISA = qw(Irpg::Classes::Fighter); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['str'] + $pl_stats->['con'] >= 9) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Warrior'; + $self->{MOD_STR} = $pl_stats->{str}*1.4; + $self->{MOD_CON} = $pl_stats->{con}*1.4; + return $self; +} + +1; diff --git a/Irpg/Classes/Wizard.pm b/Irpg/Classes/Wizard.pm new file mode 100644 index 0000000000000000000000000000000000000000..0caddcccf72a62d8dc235d9363848bf675e1d2aa --- /dev/null +++ b/Irpg/Classes/Wizard.pm @@ -0,0 +1,23 @@ +package Irpg::Classes::Wizard; + +use strict; +use warnings; +use Irpg::Classes::Enlightened; +our @ISA = qw(Irpg::Classes::Enlightened); + +sub new { + my ($class, $pl_stats) = @_; + + # condition to enter the class + if ($pl_stats->['int'] + $pl_stats->['wis'] >= 9) { + return undef; + } + + my $self = $class->SUPER::new($pl_stats); + bless $self, $class; + $self->{NAME} = 'Wizard'; + $self->{MOD_INT} = 1.5; + return $self; +} + +1; diff --git a/Irpg/Utils.pm b/Irpg/Utils.pm index 2188f2621a066e25fbf384742c06ab892f861689..871877578e9badd0279d6050c3172c9040a01c2f 100644 --- a/Irpg/Utils.pm +++ b/Irpg/Utils.pm @@ -301,6 +301,7 @@ sub loaddb { # load the players database $rps->{$i[0]}{alignment}, $rps->{$i[0]}{gender}) = (@i[1..7],($startup?0:$i[8]),@i[9..$#i]); + $classname =~ s/ /_/g; $rps->{$i[0]}{class} = eval 'Irpg::Classes::'.$classname. '->new($rps->{$i[0]}{stats})'; }