ID:2144737
 
(See the best response by Lummox JR.)
Code:
proc/Text(mob/M,var/Text="")
var/Blank = " "
for(var/HUD/Text/Te in M.client.screen)
Te.maptext = ""
del(Te)
var/HUD/Text/T = new;M.client.screen.Add(T)
T.maptext_width = length(Text) / length(Text)*300
T.maptext_height = length(Text) / length(Text)*100
while(length(Blank)-2<length(Text)+1)
sleep(M.TxtSpd)
Blank = addtext(Blank,"[getCharacter(Text,length(Blank))]")
T.maptext = "<font face=\"horroroid\"><font size=2>[Blank]"
if(length(Blank)>=length(Text))
sleep(25)
M.client.screen.Remove(T)
break


Problem description: There's my text code, but whenever I initiate a new one before the current onscreen text has finished I get this run-time error. Bee trying all day to sort this out.

runtime error: Cannot modify null.maptext.
proc name: Text (/proc/Text)
source file: OnScreenText.dm,23
usr: Guest-3810343312 (/mob)
src: null
usr.loc: (6,6,3) (/turf/outdoors/cobblestone)
call stack:
Text(Guest-3810343312 (/mob), "It\'s the Starving Beetle Tave...")
The Starving Beetle Tavern (/obj/buildings/TavernSign): Click( (8,8,3) (/turf/outdoors/sidewalk), "default.map1", "icon-x=124;icon-y=143;left=1;s...")


Best response
Something else is deleting T while sleep(M.TxtSpd) is in place. You should recheck after each sleep that T is still valid. You also should make sure M remains valid after the sleep(25).
In response to Lummox JR
Fixed it, thank you!