talking gecko (trunk only)

Suggested by <email deleted>, chatting to a gecko will
give a reference to GEICO's car insurance ads.  I limited it to when
the hero is hallucinating.  Chatting to a gecko monster, or to anything
capable of speaking--except for a couple of previously handled special
cases, like quest leader--which happens to look like a gecko at the time,
or (50:50 chance) to a shopkeeper regardless of appearance, you'll get
"15 minutes can save you 15 zorkmids", parodying "15 minutes can save you
15% or more on car insurance".  (One of my comments says there's a chance
to interfere with shopping, but that's not accurate since using #chat to
get shop price quotes doesn't use the monster-response routine.  I left
that comment in anyway; the "15 minutes" response might interfere afterall
if someone mistakenly thinks they can save gold by waiting that long
before paying their shopping bill.)

     I don't think we ever found a good place to add some reference to
GEICO's other--and more relevant to nethack--slogan, "so easy a caveman
can do it".
This commit is contained in:
nethack.rankin
2010-12-14 01:14:37 +00:00
parent 0c1b96470e
commit 3cdc140c72
2 changed files with 32 additions and 2 deletions

View File

@@ -463,6 +463,7 @@ Sunsword's light radius depends on its curse/bless state
Add M-C and M-R meta-key shortcuts for #conduct and #ride, respectively
can now use ESC to cancel out of prompts for playing musical instruments
being crowned gives an additional benefit: one extra skill slot/credit
chatting to a gecko or shopkeeper while hallucinating gives alternate message
Platform- and/or Interface-Specific New Features

View File

@@ -1,5 +1,4 @@
/* NetHack 3.5 sounds.c $Date$ $Revision$ */
/* SCCS Id: @(#)sounds.c 3.5 2007/05/05 */
/* Copyright (c) 1989 Janet Walz, Mike Threepoint */
/* NetHack may be freely redistributed. See license for details. */
@@ -12,6 +11,7 @@
# endif
#endif
STATIC_DCL boolean FDECL(mon_is_gecko, (struct monst *));
STATIC_DCL int FDECL(domonnoise,(struct monst *));
STATIC_DCL int NDECL(dochat);
STATIC_DCL int FDECL(mon_in_room, (struct monst *,int));
@@ -464,6 +464,24 @@ register struct monst *mtmp;
}
}
/* return True if mon is a gecko or seems to look like one (hallucination) */
STATIC_OVL boolean
mon_is_gecko(mon)
struct monst *mon;
{
int glyph;
/* return True if it is actually a gecko */
if (mon->data == &mons[PM_GECKO]) return TRUE;
/* return False if it is a long worm; we might be chatting to its tail
(not strictly needed; long worms are MS_SILENT so won't get here) */
if (mon->data == &mons[PM_LONG_WORM]) return FALSE;
/* result depends upon whether map spot shows a gecko, which will
be due to hallucination or to mimickery since mon isn't one */
glyph = glyph_at(mon->mx, mon->my);
return (boolean)(glyph_to_mon(glyph) == PM_GECKO);
}
STATIC_OVL int
domonnoise(mtmp)
register struct monst *mtmp;
@@ -490,6 +508,9 @@ register struct monst *mtmp;
(same_race(ptr, youmonst.data) || /* current form, */
same_race(ptr, &mons[Race_switch]))) /* unpoly'd form */
msound = MS_HUMANOID;
/* silliness, with slight chance to interfere with shopping */
else if (Hallucination && mon_is_gecko(mtmp))
msound = MS_SELL;
/* be sure to do this before talking; the monster might teleport away, in
* which case we want to check its pre-teleport position
@@ -509,7 +530,15 @@ register struct monst *mtmp;
quest_chat(mtmp);
break;
case MS_SELL: /* pitch, pay, total */
shk_chat(mtmp);
if (!Hallucination || (mtmp->isshk && !rn2(2))) {
shk_chat(mtmp);
} else {
/* approximation of GEICO's advertising slogan (it actually
concludes with "save you 15% or more on car insurance.") */
Sprintf(verbuf, "15 minutes could save you 15 %s.",
currency(15L)); /* "zorkmids" */
verbl_msg = verbuf;
}
break;
case MS_VAMPIRE:
{