]> granicus.if.org Git - nethack/commitdiff
talking gecko (trunk only)
authornethack.rankin <nethack.rankin>
Tue, 14 Dec 2010 01:14:37 +0000 (01:14 +0000)
committernethack.rankin <nethack.rankin>
Tue, 14 Dec 2010 01:14:37 +0000 (01:14 +0000)
     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".

doc/fixes35.0
src/sounds.c

index 7b27631f59d3d25836ce55b912df2cc0c2b77472..6f21a392350d2137fcde122f6fd2e82e5cb759fe 100644 (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
index 9dfba7fc0bf476a55d445e41848f55eba0744480..9e793f5309fd32901a3252ddea0dace6a65ba7fd 100644 (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:
            {