From the newsgroup, there was a discussion about how you

can't just blind yourself with a cream pie in your inventory
directly by applying it or by throwing it.

On 27 Jul 2002 14:11:06 GMT, <Someone> wrote:
> <email deleted> wrote:
>> <email deleted> (<Someone>) hypothesised:
>>
>> [cream pie]
>>> So I a)pply the pie. What I want to do is to hit MYSELF in the
>>> face with the pie, thereby blinding me and giving me T-P for
>>> just a few turns.
>>
>> Not a bad TTDTDTO ("Thing The DevTeam Didn't Think Of," which is
>> subtly different to a YANI, and not a bug; sorry, I seem to be
>> on a neologismathon today.)
> I tried throwing a cream pie upwards, hoping it would blind me,
> but no luck:
>
> "A cream pie hits the ceiling. What a mess!"
>
This commit is contained in:
nethack.allison
2002-07-27 20:48:45 +00:00
parent 7374338424
commit 02ed5c37c9
3 changed files with 65 additions and 2 deletions
+1
View File
@@ -213,3 +213,4 @@ debug mode: #panic routine to test panic() and panic save file generation
a new PANICLOG optional file to log the reason for panic and impossible messages a new PANICLOG optional file to log the reason for panic and impossible messages
added validate_prefix_locations() for early directory prefix validation added validate_prefix_locations() for early directory prefix validation
fire traps are particularly bad for paper and straw golems fire traps are particularly bad for paper and straw golems
cream pies can be 'a'pplied to cause direct temporary blindness
+63 -2
View File
@@ -34,11 +34,13 @@ STATIC_DCL void FDECL(use_stone, (struct obj *));
STATIC_PTR int NDECL(set_trap); /* occupation callback */ STATIC_PTR int NDECL(set_trap); /* occupation callback */
STATIC_DCL int FDECL(use_whip, (struct obj *)); STATIC_DCL int FDECL(use_whip, (struct obj *));
STATIC_DCL int FDECL(use_pole, (struct obj *)); STATIC_DCL int FDECL(use_pole, (struct obj *));
STATIC_DCL int FDECL(use_cream_pie, (struct obj *));
STATIC_DCL int FDECL(use_grapple, (struct obj *)); STATIC_DCL int FDECL(use_grapple, (struct obj *));
STATIC_DCL int FDECL(do_break_wand, (struct obj *)); STATIC_DCL int FDECL(do_break_wand, (struct obj *));
STATIC_DCL boolean FDECL(figurine_location_checks, STATIC_DCL boolean FDECL(figurine_location_checks,
(struct obj *, coord *, BOOLEAN_P)); (struct obj *, coord *, BOOLEAN_P));
STATIC_DCL boolean NDECL(uhave_graystone); STATIC_DCL boolean NDECL(uhave_graystone);
STATIC_DCL void FDECL(add_class, (char *, CHAR_P));
#ifdef AMIGA #ifdef AMIGA
void FDECL( amii_speaker, ( struct obj *, char *, int ) ); void FDECL( amii_speaker, ( struct obj *, char *, int ) );
@@ -2382,6 +2384,44 @@ use_pole (obj)
return (1); return (1);
} }
STATIC_OVL int
use_cream_pie(obj)
struct obj *obj;
{
boolean wasblind = Blind;
boolean wascreamed = u.ucreamed;
boolean several = FALSE;
if (obj->quan > 1L) {
several = TRUE;
obj = splitobj(obj, 1L);
}
if (Hallucination)
You("give yourself a facial.");
else
pline("You immerse your %s in %s%s.", body_part(FACE),
several ? "one of " : "",
several ? makeplural(the(xname(obj))) : the(xname(obj)));
if(can_blnd((struct monst*)0, &youmonst, AT_WEAP, obj)) {
int blindinc = rnd(25);
u.ucreamed += blindinc;
make_blinded(Blinded + (long)blindinc, FALSE);
if (!Blind || (Blind && wasblind))
pline("There's %ssticky goop all over your %s.",
wascreamed ? "more " : "",
body_part(FACE));
else /* Blind && !wasblind */
You_cant("see through all the sticky goop on your %s.",
body_part(FACE));
}
if (obj->unpaid) {
verbalize("You used it, you bought it!");
bill_dummy_object(obj);
}
obj_extract_self(obj);
delobj(obj);
return(0);
}
STATIC_OVL int STATIC_OVL int
use_grapple (obj) use_grapple (obj)
@@ -2662,15 +2702,33 @@ uhave_graystone()
return FALSE; return FALSE;
} }
STATIC_OVL void
add_class(cl, class)
char *cl;
char class;
{
char tmp[2];
tmp[0] = class;
tmp[1] = '\0';
Strcat(cl, tmp);
}
int int
doapply() doapply()
{ {
register struct obj *obj; register struct obj *obj;
register int res = 1; register int res = 1;
char class_list[MAXOCLASSES];
if(check_capacity((char *)0)) return (0); if(check_capacity((char *)0)) return (0);
obj = getobj(carrying(POT_OIL) || uhave_graystone()
? tools_too : tools, "use or apply"); if (carrying(POT_OIL) || uhave_graystone())
Strcpy(class_list, tools_too);
else
Strcpy(class_list, tools);
if (carrying(CREAM_PIE)) add_class(class_list, FOOD_CLASS);
obj = getobj(class_list, "use or apply");
if(!obj) return 0; if(!obj) return 0;
if (obj->oclass == WAND_CLASS) if (obj->oclass == WAND_CLASS)
@@ -2688,6 +2746,9 @@ doapply()
ublindf->otyp == BLINDFOLD ? "wearing a blindfold" : ublindf->otyp == BLINDFOLD ? "wearing a blindfold" :
"wearing lenses"); "wearing lenses");
break; break;
case CREAM_PIE:
res = use_cream_pie(obj);
break;
case BULLWHIP: case BULLWHIP:
res = use_whip(obj); res = use_whip(obj);
break; break;
+1
View File
@@ -871,6 +871,7 @@ register const char *let,*word;
be offered as a choice when already discovered */ be offered as a choice when already discovered */
(otyp != POT_OIL || !otmp->dknown || (otyp != POT_OIL || !otmp->dknown ||
!objects[POT_OIL].oc_name_known)) !objects[POT_OIL].oc_name_known))
|| (otmp->oclass == FOOD_CLASS && otyp != CREAM_PIE)
|| (otmp->oclass == GEM_CLASS && !is_graystone(otmp)))) || (otmp->oclass == GEM_CLASS && !is_graystone(otmp))))
|| (!strcmp(word, "invoke") && || (!strcmp(word, "invoke") &&
(!otmp->oartifact && !objects[otyp].oc_unique && (!otmp->oartifact && !objects[otyp].oc_unique &&