Dump of #86 (RPG Mirror)

@create $thing named a full-length mirror:Mirror,full-length mirror,myself,a full-length mirror
;;#86.("odrop_failed_msg") = "%<tries> to drop %t but fails!"
;;#86.("odrop_succeeded_msg") = "%<drops> %t."
;;#86.("otake_succeeded_msg") = "%<picks> up %t."
"#86.("key") => E_PERM (Permission denied)
;;#86.("aliases") = {"Mirror", "full-length mirror", "myself", "a full-length mirror"}
;;#86.("description") = {"mirror"}
;;#86.("object_size") = {9595, 1141286565}

@verb #86:"look_self" this any none rxd
@program #86:look_self
rpg = $local.rpg;
if (player.location != this.location)
  player:tell("The mirror is too far away for you to see from here.");
  return;
elseif (!(this.owner in rpg.gms))
  player:tell("Please don't be selfish/lazy.  There are two perfectly fine mirrors for your use by the Academy.  If you feel you NEED to have another mirror, go bug your personal GM about installing one nearby--FOR PUBLIC USE.");
  return;
endif
player:tell("In the mirror you see someone who looks a bit like you.");
ps = player.ps;
po = player.po;
pr = player.pr;
pp = player.pp;
psc = player.psc;
poc = player.poc;
ppc = player.ppc;
prc = player.prc;
loc = player in rpg.pcs;
if (loc)
  doll = rpg.dolls[loc];
  strngth = doll.str;
  app = doll.app;
  intel = doll.int;
  agl = doll.agl;
  emp = doll.emp;
  pot = doll.pot;
  pcn = doll.pcn;
  dex = doll.dex;
  wil = doll.wil;
  end = doll.end;
  inj = doll.inj;
  if (app > 15)
    text = psc + " is stunningly attractive,";
  elseif (app > 12)
    text = psc + " is pleasant to look at,";
  elseif (app > 8)
    text = psc + " is of average attractiveness,";
  elseif (app > 5)
    text = psc + " is quite plain and homely,";
  else
    text = psc + " is hideously repulsive,";
  endif
  if (strngth > 15)
    text = text + " well muscled";
  elseif (strngth > 12)
    text = text + " fairly solidly built";
  elseif (strngth > 8)
    text = text + " of average build";
  elseif (strngth > 5)
    text = text + " lightly built";
  else
    text = text + " very scrawny";
  endif
  if (emp > 15)
    text = ((text + ", with a friendly, caring expression on ") + pp) + " face.";
  elseif (emp > 12)
    text = text + " and looks quite friendly.";
  elseif (emp > 8)
    text = text + " and looks moderately trustworthy.";
  elseif (emp > 5)
    text = ((text + ", with a sly, shifty look to ") + pp) + " eyes.";
  else
    text = ((text + ", with a predatory, used-car salesman look in ") + pp) + " eyes.";
  endif
  if (pcn > 15)
    text = text + " fnord ";
  endif
  if (intel > 15)
    text = ((text + " The clear light of intellect shines keenly from ") + pp) + " eyes.";
  elseif (intel > 12)
    text = ((text + " This is no Einstein, but ") + ps) + " looks reasonably bright.";
  elseif (intel > 8)
  elseif (intel > 5)
    text = ((text + " ") + psc) + " doesn't exactly look stupid, but is clearly no great intellect.";
  else
    text = ((text + " ") + ppc) + " face displays a dull look of vacancy.";
  endif
  if (pcn > 12)
    text = text + " fnord ";
  endif
  if (agl > 15)
    text = ((text + " ") + psc) + " walks lithely, with a minimum of effort.";
  elseif (agl > 12)
    text = ((text + " ") + psc) + " looks reasonably well-coordinated.";
  elseif (agl > 8)
  elseif (agl > 5)
    text = ((text + " ") + psc) + " occasionally steps awkwardly and stumbles.";
  else
    text = ((text + " ") + psc) + " stumbles or trips with every second step.";
  endif
  if (wil > 15)
    text = ((text + " ") + psc) + " fixes you with a gaze of steely determination,";
  elseif (wil > 12)
    text = ((text + " ") + psc) + " looks quite determined,";
  elseif (wil > 8)
    text = (text + " ") + psc;
  elseif (wil > 5)
    text = ((text + " ") + psc) + " gazes timidly at you,";
  else
    text = ((text + " ") + psc) + " gives you a nervous, vacillating, stare,";
  endif
  if (end > 15)
    text = text + " glows with a look of robust vigour";
  elseif (end > 12)
    text = text + " seems to be in good health";
  elseif (end > 8)
    text = text + " looks healthy enough";
  elseif (end > 5)
    text = text + " looks a bit anaemic";
  else
    text = text + " is constantly puffing and out of breath";
  endif
  if (dex > 15)
    text = text + " and is continually tossing objects from one hand to the other, performing various impressive tricks on the way, seemingly without conscious effort.";
  elseif (dex > 12)
    text = text + " and from time to time idly transfers things from one hand to the other, seemingly with little effort.";
  elseif (dex > 8)
    text = ((text + " and seems able to hold things in ") + pp) + " hands without too much difficulty.";
  elseif (dex > 5)
    text = ((((text + " and when ") + ps) + " moves ") + ps) + " sometimes drops things.";
  else
    text = ((((text + " and seems to spend half of ") + pp) + " time picking up things that ") + ps) + " has dropped.";
  endif
  if (pcn > 8)
    text = text + " fnord ";
  endif
  if (pot > 100)
    text = ((text + " You can tell that ") + ps) + " has huge potential for self-improvement.";
  elseif (pot > 30)
    text = ((text + " You get the feeling that ") + ps) + " has some potential for self-improvement.";
  elseif (pot > 0)
    text = ((text + " You get the impression that ") + ps) + " still has a little room for improvement.";
  else
    text = ((((text + " ") + psc) + " appears to have reached ") + pp) + " full potential.";
  endif
  if (inj > (3 * end))
    text = ((text + " ") + player.name) + " is severely wounded and may be close to death.";
  elseif (inj > 0)
    text = ((text + " ") + player.name) + " has some wounds.";
  endif
  player:tell(text);
else
  player:tell(psc, " looks completely unsuitable for adventuring, and should consider joining the Bovine Illuminati to remedy the situation.");
endif
.

@verb #86:"g*et t*ake" this any none rxd
@program #86:get
player:tell("You can't, it's too heavy.");
.

@verb #86:"tell" this none this
@program #86:tell
pass(@args);
rpg = $local.rpg;
text = tostr(@args);
if (index(text, this.snow_white))
  app = 0;
  whobe = {};
  gms = {@rpg.gms, @rpg.object_db.second_characters};
  for t in (rpg.dolls)
    char = t.character;
    if (char in gms)
    elseif ((t.app > app) && is_player(char))
      app = t.app;
      whobe = {char};
    elseif ((t.app == app) && is_player(char))
      whobe = setadd(whobe, char);
    endif
  endfor
  if (whobe)
    fork (rpg.gm_lag)
      rpg:rpg_announce_all_but(this.location, {}, "The Mirror intones, \"", $string_utils:title_list(whobe), (length(whobe) > 1) ? " are" | " is", " the Fairest in the Land.\"");
    endfork
  endif
  return;
endif
found = "N";
for alias in (this.aliases)
  ms1 = ((player.name + " says, \"") + alias) + "*";
  ms2 = ((player.name + " [to ") + alias) + "]:*";
  if ((msg = $string_utils:match_string(text, ms1)) || (msg = $string_utils:match_string(text, ms2)))
    found = "Y";
    break;
  endif
endfor
if (found == "N")
  return;
endif
fork (1 + rpg.gm_lag)
  if ($string_utils:match_string(toliteral(msg), "*guid*"))
    if (player.location != this.location)
      player:tell(this.diff_loc_msg);
      return;
    endif
    doll = rpg:get_doll(player);
    if (doll == $nothing)
      player:tell(this.not_bovine_msg);
      return;
    endif
    {pot, strn, end, dex, agl, intl, emp, wil, pcn, app} = doll:get_unmod_atts("pot", "str", "end", "dex", "agl", "int", "emp", "wil", "pcn", "app");
    player:tell(this.intro_msg);
    player:tell(this.intro2_msg);
    count = 0;
    for attl in ({{"strn", strn}, {"end", end}, {"dex", dex}, {"agl", agl}, {"intl", intl}, {"emp", emp}, {"wil", wil}, {"pcn", pcn}, {"app", app}})
      {att, attv} = attl;
      if (pot >= rpg.costs[min(attv, 25) + 1])
        player:tell(this.(att + "_imp_msg"));
        count = count + 1;
      endif
    endfor
    cref = ((count + 1) / 2) * 2;
    player:tell(this.(("le" + tostr(cref)) + "_imp_msg"));
  endif
endfork
"THX (#105941) - Mon Apr  3, 2000 - Added a  \"Mirror, Mirror, on the wall.  Who's the fairest of them all?\" gag.  What the hell, hunh?";
.

"***finished***