The Original bash version of the script written by Steve Frostrom [with a few minor changes by me.]
#!/bin/bash clear max_lvl=40 fmt="%5s %9s %11s %11s %9s %9s\n" printf "$fmt" "" "" "Class" "Cross-Class" "" "" printf "$fmt" "Char" "" "Skill" "Skill" "" "Stat" printf "$fmt" "Level" "XP" "Max Ranks" "Max Ranks" "Feats" "Increases" # function to format numbers say () { case "$1" in 0) echo "--";; *1?|*0|*[4-9]) echo "${1}th";; *1) echo "${1}st";; *2) echo "${1}nd";; *3) echo "${1}rd";; *) echo "$*";; # shouldn't happen esac } # loop level until max_lvl for ((level = 1, xp = 0, feats = 1, stats = 0 ; level <= $max_lvl ; level++)) ; do # sum xp's ((xp = xp + (level - 1) * 1000)) # calc max skill ranks (and print cc funny) ((maxranks = level + 3)) ((maxcc = maxranks / 2, maxranks % 2)) && maxcc="${maxcc}.5" # new feat every 3 levels, but start with 1 ((s_feats = (level % 3) ? (level == 1 ? 1 : 0) : ++feats)) # stat bonus every 4 levels ((s_stats = (level % 4) ? 0 : ++stats)) # print it printf "$fmt" $(say $level) $xp $maxranks $maxcc $(say $s_feats) $(say $s_stats) done