&lang`fun.speak %vb=setq(t,\[+SPEAK\]%b)[switch(0,t(setr(L,ufun(%ve/lang`fun.islang,%0))),%qtNo such language.,if(strlen(%1),cand(setr(f,ufun(%ve/lang`fun.isfluency,%1)),ufun(%ve/lang`fun.canspeak,%:,%qL,%qF),setr(f,rand(setr(f,add(1,mul(sub(%qF,1),100))),min(ufun(%ve/lang`fun.fluency,%:,%qL),add(%qF,99))))),switch(setr(f,ufun(%ve/lang`fun.fluency-num,%:,%qL)),0,0,>799,,%qf,setr(f,rand(add(1,mul(sub(%qF,1),100)),ufun(%ve/lang`fun.fluency,%:,%qL))))),%qtYou don't speak [ufun(%ve/lang`fun.langname,%qL)] that fluently.,setq(0,0,N,ufun(%ve/lang`fun.langname,%qL))[speak(%#,%2%3,,%ve/lang`fun.speak-self)][null(ufun(lang`fun.learn,%:,%qL,u(%ve/lang`learn`speech,%qF,ufun(%ve/lang`fun.fluency,%#,%qL)))[setq(W,SPEECH,P,ulocal(%ve/lang`fun.garble-pattern,div(%qF,8),repeat(1%b,50)))][iter(setdiff(lcon(%L),%#),nspemit(setq(q,ufun(%ve/lang`fun.garble-pattern,div(setr(z,ufun(%ve/lang`fun.fluency,##,%qL)),8),%qp))[setr(y,##)][ufun(lang`fun.learn,##,%qL,ufun(%ve/lang`learn`hear,ufun(%ve/lang`fun.fluency,##,%qL),%qF))],speak(%#,%2%3,,%ve/lang`fun.garble)))])])] &lang`cmd.languages %vd=$^\+lang(?\:uage)?s?(/all|(?\: (.+)))?$: @nspemit/silent %#=\[+LANGUAGES\] [switch(0,strlen(squish(get(%ve/lang`languages))),There are no languages in the system.,not(strmatch(%1,/all)),The following languages can be spoken:%r[itemize(sort(get(%ve/lang`languages),i,|),|)],strlen(%2),ufun(%ve/lang`fun.languages,%:,0),t(setr(0,pmatch(%2))),No such player.,orflags(%#,Wr),Permission denied.,ufun(%ve/lang`fun.languages,%q0,1))] &lang`cmd.languages-all %vd +TMCS/ADDPACKAGE lang=+Language/1.2d/System to allow players to learn and speak many languages/