The Pascal version of the script compiled using Free Pascal and verified to run under both Linux and Windows.
program levels;
Uses
crt;
const
max_lvl = 40;
var
level, feats, stats, maxranks, feats_check, stat_check : integer;
maxcc : real;
xp : longint;
level_out, feats_out, stats_out : String[10];
(* level_th foramts numbers into 1st,2nd,3rd.... *)
function level_th ( s_input : String[10] ) : String[10];
var
s_check : String[2];
second_digit : integer;
begin
(* Setup the exception check *)
second_digit := Length(s_input);
if ( second_digit > 1 ) then
second_digit := second_digit - 1;
s_check := Copy(s_input, second_digit, 2);
(* Case *)
case s_input[Length(s_input)] of
'1': level_th := s_input + 'st';
'2': level_th := s_input + 'nd';
'3': level_th := s_input + 'rd';
otherwise level_th := s_input + 'th'
end;
(* handle expections now *)
if (s_check = '11') or (s_check = '12') or (s_check = '13') then
level_th := s_input + 'th';
end;
(* End level_th *)
begin (* Main *)
(* Column Header *)
Clrscr;
writeln ('Char ',' ':10,'Class Skill':15,'CC Skill ':15,' ':10,'Stat ':12);
writeln ('Level','XP':10,'Max Ranks':15,'Max Ranks':15,'Feats':10,'Increases':12);
(* Data loop *)
level := 1;
xp := 0;
feats := 0;
stats := 0;
repeat
xp := (xp + (level - 1) * 1000);
maxranks := level + 3;
maxcc := maxranks / 2.0;
feats_check := level mod 3;
feats_out := ('--');
if (feats_check = 0) or ( level = 1) then
begin
feats := feats + 1;
Str(feats, feats_out);
feats_out := level_th (feats_out);
end;
stat_check := level mod 4;
stats_out := ('--');
if (stat_check = 0) then
begin
stats := stats + 1;
Str(stats, stats_out);
stats_out := level_th (stats_out);
end;
Str(level, level_out);
level_out := level_th (level_out);
writeln ( level_out:5, xp:10, maxranks:15, maxcc:15:1, feats_out:10, stats_out:12);
level := level + 1;
until level > max_lvl;
end. (* Main *)
(*
# vi: shiftwidth=3 tabstop=3 et
*)