]> granicus.if.org Git - nethack/commitdiff
Reading a magic marker shows the specific red ink color
authorPasi Kallinen <paxed@alt.org>
Sat, 19 Feb 2022 11:11:20 +0000 (13:11 +0200)
committerPasi Kallinen <paxed@alt.org>
Sat, 19 Feb 2022 11:11:24 +0000 (13:11 +0200)
doc/fixes3-7-0.txt
include/extern.h
src/hacklib.c
src/read.c

index 1b91edaa39cf2baad8a43385eaf64336fcf370ad..3e5cbd8ad89b4d0b1a2f9fb4c1e14c5f7e08c77f 100644 (file)
@@ -789,6 +789,7 @@ candy bars are bright blue in text mode
 towels weigh more than blindfolds
 knight quest home level contains some saddled warhorses
 allow creating unhidden traps in special levels
+reading magic marker shows the specific red ink color
 
 
 Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
index 0e2d2b655b6b6aee535226bf03f016c9734226d0..1a29793c5aba6f229072100c35a778b13cddd0f6 100644 (file)
@@ -955,6 +955,7 @@ extern char lowc(char);
 extern char *lcase(char *);
 extern char *ucase(char *);
 extern char *upstart(char *);
+extern char *upwords(char *);
 extern char *mungspaces(char *);
 extern char *trimspaces(char *);
 extern char *strip_newline(char *);
index d8df82dcc046897b41c5558fdacbb8f4b0f1c3a7..2aabd633d69a15364d1b6b8c1ee61dadeda87d02 100644 (file)
@@ -18,6 +18,7 @@
         char *          lcase           (char *)
         char *          ucase           (char *)
         char *          upstart         (char *)
+        char *          upwords         (char *)
         char *          mungspaces      (char *)
         char *          trimspaces      (char *)
         char *          strip_newline   (char *)
@@ -147,6 +148,25 @@ upstart(char *s)
     return s;
 }
 
+/* capitalize first letter of every word in a string (in place) */
+char *
+upwords(char *s)
+{
+    char *p;
+    boolean space = TRUE;
+
+    for (p = s; *p; p++)
+        if (*p == ' ') {
+            space = TRUE;
+        } else if (space && letter(*p)) {
+            *p = highc(*p);
+            space = FALSE;
+        } else {
+            space = FALSE;
+        }
+    return s;
+}
+
 /* remove excess whitespace from a string buffer (in place) */
 char *
 mungspaces(char *bp)
index 513733f997a42e58dae85de7433219745e2d3e12..bb9d50a202a1fba6eccd29d76147d6a764fbf9a1 100644 (file)
@@ -489,13 +489,22 @@ doread(void)
         pline("This %s has no label.", singular(scroll, xname));
         return ECMD_OK;
     } else if (otyp == MAGIC_MARKER) {
+        char buf[BUFSZ];
+        const int red_mons[] = { PM_FIRE_ANT, PM_PYROLISK, PM_HELL_HOUND,
+            PM_IMP, PM_LARGE_MIMIC, PM_LEOCROTTA, PM_SCORPION, PM_XAN,
+            PM_GIANT_BAT, PM_WATER_MOCCASIN, PM_FLESH_GOLEM, PM_BARBED_DEVIL,
+            PM_MARILITH, PM_PIRANHA };
+        struct permonst *pm = &mons[red_mons[scroll->o_id % SIZE(red_mons)]];
+
         if (Blind) {
             You_cant(find_any_braille);
             return ECMD_OK;
         }
         if (flags.verbose)
             pline("It reads:");
-        pline("\"Magic Marker(TM) Red Ink Marker Pen.  Water Soluble.\"");
+        Sprintf(buf, "%s", pmname(pm, NEUTRAL));
+        pline("\"Magic Marker(TM) %s Red Ink Marker Pen.  Water Soluble.\"",
+              upwords(buf));
         if (!u.uconduct.literate++)
             livelog_printf(LL_CONDUCT,
                            "became literate by reading a magic marker");