From: Pasi Kallinen Date: Sat, 19 Feb 2022 11:11:20 +0000 (+0200) Subject: Reading a magic marker shows the specific red ink color X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=26ea5824c110db948c42f9d01aeaf024f7f3611a;p=nethack Reading a magic marker shows the specific red ink color --- diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 1b91edaa3..3e5cbd8ad 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -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 diff --git a/include/extern.h b/include/extern.h index 0e2d2b655..1a29793c5 100644 --- a/include/extern.h +++ b/include/extern.h @@ -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 *); diff --git a/src/hacklib.c b/src/hacklib.c index d8df82dcc..2aabd633d 100644 --- a/src/hacklib.c +++ b/src/hacklib.c @@ -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) diff --git a/src/read.c b/src/read.c index 513733f99..bb9d50a20 100644 --- a/src/read.c +++ b/src/read.c @@ -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");