]> granicus.if.org Git - nethack/commitdiff
dipping into burning potions
authorcohrs <cohrs>
Sat, 9 Mar 2002 19:28:16 +0000 (19:28 +0000)
committercohrs <cohrs>
Sat, 9 Mar 2002 19:28:16 +0000 (19:28 +0000)
- candles, et al, light via catch_lit
- non-weapons can be damaged
- only flammable items can be damaged, previously SILVER objects, for example,
  would get a message, but add_erosion_words wouldn't display a damage word
- can't track burnt food, put this in the "seems" case too
- PLASTIC items are is_flammable, which is appropriate for all current uses
- paper gets destroyed (special artifacts excepted by earlier check)
- a cursed potion now spills even if not dipping weapons
- charge for damaging unpaid objects this way
- still very hard to destroy PYEC this way

doc/fixes34.0
src/mkobj.c
src/potion.c

index 32bc97009613eb4cc2b1e66688809bf478eaa797..3130f49d83eb36162f5f791b9aaa7e268dc1494b 100644 (file)
@@ -455,6 +455,8 @@ don't slap against the floor while riding and eating bad food
 got rid of "nori" (since it doesn't really translate "kelp frond" accurately)
 engraving in fog-covered location on in the Wizard quest said you
        engraved in air, not dust
+dipping non-weapons into burning potions of oil had no effect
+dipping arrows into burning potions resulted in rust damage
 
 
 Platform- and/or Interface-Specific Fixes
@@ -576,6 +578,7 @@ USER_SOUNDS compilation option to enable use of SOUND and SOUNDDIR variables
 resistance does not protect inventory from artifacts (cold vs Frost Brand,&c)
 phrase the prompts for P and R commands using "put on" and "remove" as the
        actions rather than repeating W and T commands' "wear" and "take off"
+dipping candles, et al, into burning potions lights them
 
 
 Platform- and/or Interface-Specific New Features
index 658165cea208bf848471dc02e963c58ffff2830c..aa80a7743de6db0951b6e1d685c471f4d0c974d3 100644 (file)
@@ -1045,12 +1045,12 @@ is_flammable(otmp)
 register struct obj *otmp;
 {
        int otyp = otmp->otyp;
+       int omat = objects[otyp].oc_material;
 
        if (objects[otyp].oc_oprop == FIRE_RES || otyp == WAN_FIRE)
                return FALSE;
 
-       return((boolean)(objects[otyp].oc_material <= WOOD &&
-                       objects[otyp].oc_material != LIQUID));
+       return((boolean)((omat <= WOOD && omat != LIQUID) || omat == PLASTIC));
 }
 
 boolean
index f82c390c578bb966816d24080f63f2357b2a1f4e..c18b80f9c07bea5f0285fccab505563a1cd7074b 100644 (file)
@@ -1733,18 +1733,20 @@ dodip()
            }
        }
 
-       if (potion->otyp == POT_OIL &&
-               (obj->oclass == WEAPON_CLASS || is_weptool(obj))) {
+       if (potion->otyp == POT_OIL) {
            boolean wisx = FALSE;
            if (potion->lamplit) {      /* burning */
                int omat = objects[obj->otyp].oc_material;
-               if (obj->oerodeproof || obj_resists(obj, 5, 95) ||
-                       /* `METAL' should not be confused with is_metallic() */
-                       omat == METAL || omat == MITHRIL || omat == BONE) {
+               /* the code here should be merged with fire_damage */
+               if (catch_lit(obj)) {
+                   /* catch_lit does all the work if true */
+               } else if (obj->oerodeproof || obj_resists(obj, 5, 95) ||
+                          !is_flammable(obj) || obj->oclass == FOOD_CLASS) {
                    pline("%s %s to burn for a moment.",
                          Yname2(obj), otense(obj, "seem"));
                } else {
-                   if (omat == PLASTIC) obj->oeroded = MAX_ERODE;
+                   if ((omat == PLASTIC || omat == PAPER) && !obj->oartifact)
+                       obj->oeroded = MAX_ERODE;
                    pline_The("burning oil %s %s.",
                            obj->oeroded == MAX_ERODE ? "destroys" : "damages",
                            yname(obj));
@@ -1753,8 +1755,12 @@ dodip()
                        obfree(obj, (struct obj *)0);
                        obj = (struct obj *) 0;
                    } else {
-                       /* should check for and do something about
-                          damaging unpaid shop goods here */
+                       /* we know it's carried */
+                       if (obj->unpaid) {
+                           /* create a dummy duplicate to put on bill */
+                           verbalize("You burnt it, you bought it!");
+                           bill_dummy_object(obj);
+                       }
                        obj->oeroded++;
                    }
                }
@@ -1762,6 +1768,9 @@ dodip()
                pline_The("potion spills and covers your %s with oil.",
                          makeplural(body_part(FINGER)));
                incr_itimeout(&Glib, d(2,10));
+           } else if (obj->oclass != WEAPON_CLASS && !is_weptool(obj)) {
+               /* the following cases apply only to weapons */
+               goto more_dips;
            /* Oil removes rust and corrosion, but doesn't unburn.
             * Arrows, etc are classed as metallic due to arrowhead
             * material, but dipping in oil shouldn't repair them.
@@ -1785,6 +1794,7 @@ dodip()
            useup(potion);
            return 1;
        }
+    more_dips:
 
        /* Allow filling of MAGIC_LAMPs to prevent identification by player */
        if ((obj->otyp == OIL_LAMP || obj->otyp == MAGIC_LAMP) &&