To be honest I was only interested in the first ten digits, which AFAIK need to be manually specified anyway.
If anyone can make this proc better, please do! It'll help me learn and it'll help others out.
/*
Title: Number2Text
Credit to: Android Data
Contributed by: Android Data
This function returns the text form of any number you specify, so long as it's under a hundred.
*/
proc/Number2Text(n)
switch(n)
if(0) return "zero"
if(1) return "one"
if(2) return "two"
if(3) return "three"
if(4) return "four"
if(5) return "five"
if(6) return "six"
if(7) return "seven"
if(8) return "eight"
if(9) return "nine"
if(10) return "ten"
if(11) return "eleven"
if(12) return "twelve"
if(13) return "thirteen"
if(14) return "fourteen"
if(15) return "fifteen"
if(16) return "sixteen"
if(17) return "seventeen"
if(18) return "eighteen"
if(19) return "nineteen"
else
if(n >= 20 && n < 30)
return "twenty-[Number2Text(n - 20)]"
else if(n >= 30 && n < 40)
return "thirty-[Number2Text(n - 30)]"
else if(n >= 40 && n < 50)
return "fourty-[Number2Text(n - 40)]"
else if(n >= 50 && n < 60)
return "fifty-[Number2Text(n - 50)]"
else if(n >= 60 && n < 70)
return "sixty-[Number2Text(n - 60)]"
else if(n >= 70 && n < 80)
return "seventy-[Number2Text(n - 70)]"
else if(n >= 80 && n < 90)
return "eighty-[Number2Text(n - 80)]"
else if(n >= 90 && n < 100)
return "ninety-[Number2Text(n - 90)]"
else if(n >= 100 && n < 1000)
. = round(n / 100)
var/b = n - (. * 100)
return "[Number2Text(.)] hundred[b > 0 ? " and [Number2Text(b)]":]"