@prog limited-shout.muf 1 999 d 1 i : findroom begin dup ok? over room? not and while location loop ; : tell-contents (str room) dup contents begin dup while dup room? not if dup me @ dbcmp not if dup 4 pick notify then then next loop pop ; : tell-children (str room -- str) contents begin dup while dup room? if tell-contents then next loop pop ; : ok-owner? (room -- room bool) dup owner trigger @ owner loc @ owner over over dbcmp 4 rotate rot over dbcmp 4 rotate rot dbcmp and and ; : hide-% "#S" "#" subst "#P" "%" subst ; : unhide-% "%" "#P" subst "#" "#S" subst ; : fmtmsg (msg prop default -- msg fmted) trigger @ rot over over prop-exists? if getpropstr swap pop else pop pop then hide-% "%m" "#Pm" subst "%n" "#Pn" subst over hide-% "%m" subst me @ name hide-% "%n" subst unhide-% ; : main "_succfmt" "You shout, \"%m\"." fmtmsg me @ swap notify "_shoutfmt" "You hear %n shout, \"%m\"." fmtmsg swap pop trigger @ findroom tell-children loc @ "_shout-extra" getpropstr dup if "," explode dup 2 + rotate swap 1 swap 1 for pop swap atoi dbref dup room? if ok-owner? if tell-contents then then pop loop else pop then pop ; . c q