User:CommanderC/stab-bonus.pl

From CrawlWiki
Jump to: navigation, search

#!/usr/bin/perl

use strict;
use warnings;

sub stab_weapon {
    my $skill = shift;
    my $weapon = shift;
    my $tier = shift;
    my $tier_penalty = 0;
    my $result = 1;

    $tier_penalty = 2 if ($weapon eq 'Long Blades');
    if ($weapon ne 'Others') {
	$result *= 1 + $skill/(($tier+$tier_penalty)*10);
    }
    $result *= 1 + $skill/($tier*12);
    $result--;
    $result *= 100;
    return $result;
}

sub stab_bonus {
    my $skill = shift;
    my $weapon = shift;
    my @result;
    for (1,2,4,6) {
	push @result, stab_weapon($skill, $weapon, $_);
    }
    return @result;
}

sub do_table {
    print <<'EOL';
{| class="prettytable" style="border:none; margin:0; padding:0;"
|-
! rowspan=2 | Stabbing skill
! colspan=4 | Short Blades
! colspan=4 | Long Blades
! colspan=4 | Others
|-
! Tier 1
! Tier 2
! Tier 3
! Tier 4
! Tier 1
! Tier 2
! Tier 3
! Tier 4
! Tier 1
! Tier 2
! Tier 3
! Tier 4
|-
EOL
   for (1..27) {
        print "| $_\n";
        for my $weapon ("Short Blades", "Long Blades", "Others") {
	    my @b = stab_bonus($_, $weapon);

	    for (@b) {
		printf "| %+.1f%%\n", $_;
	    }
	}
	print "|-\n";
    }
    print "|}\n";
}

do_table;