OSDN Git Service

update year to 2020
[jnethack/source.git] / src / exper.c
index 06456e0..164dd73 100644 (file)
@@ -1,17 +1,26 @@
-/* NetHack 3.6 exper.c $NHDT-Date: 1446975467 2015/11/08 09:37:47 $  $NHDT-Branch: master $:$NHDT-Revision: 1.26 $ */
+/* NetHack 3.6 exper.c $NHDT-Date: 1562114352 2019/07/03 00:39:12 $  $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.33 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
+/*-Copyright (c) Robert Patrick Rankin, 2007. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/* JNetHack Copyright */
+/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000  */
+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2020            */
+/* JNetHack may be freely redistributed.  See license for details. */
+
 #include "hack.h"
+#ifndef LONG_MAX
 #include <limits.h>
+#endif
 
-STATIC_DCL long FDECL(newuexp, (int));
 STATIC_DCL int FDECL(enermod, (int));
 
-STATIC_OVL long
+long
 newuexp(lev)
 int lev;
 {
+    if (lev < 1) /* for newuexp(u.ulevel - 1) when u.ulevel is 1 */
+        return 0L;
     if (lev < 10)
         return (10L * (1L << lev));
     if (lev < 20)
@@ -159,24 +168,36 @@ void
 more_experienced(exper, rexp)
 register int exper, rexp;
 {
-    long newexp = u.uexp + exper;
-    long rexpincr = 4 * exper + rexp;
-    long newrexp = u.urexp + rexpincr;
+    long oldexp = u.uexp,
+         oldrexp = u.urexp,
+         newexp = oldexp + exper,
+         rexpincr = 4 * exper + rexp,
+         newrexp = oldrexp + rexpincr;
 
     /* cap experience and score on wraparound */
     if (newexp < 0 && exper > 0)
         newexp = LONG_MAX;
     if (newrexp < 0 && rexpincr > 0)
         newrexp = LONG_MAX;
-    u.uexp = newexp;
-    u.urexp = newrexp;
 
-    if (exper
+    if (newexp != oldexp) {
+        u.uexp = newexp;
+        if (flags.showexp)
+            context.botl = TRUE;
+        /* even when experience points aren't being shown, experience level
+           might be highlighted with a percentage highlight rule and that
+           percentage depends upon experience points */
+        if (!context.botl && exp_percent_changing())
+            context.botl = TRUE;
+    }
+    /* newrexp will always differ from oldrexp unless they're LONG_MAX */
+    if (newrexp != oldrexp) {
+        u.urexp = newrexp;
 #ifdef SCORE_ON_BOTL
-        || flags.showscore
+        if (flags.showscore)
+            context.botl = TRUE;
 #endif
-        )
-        context.botl = 1;
+    }
     if (u.urexp >= (Role_if(PM_WIZARD) ? 1000 : 2000))
         flags.beginner = 0;
 }
@@ -196,7 +217,10 @@ const char *drainer; /* cause of death, if drain should be fatal */
         return;
 
     if (u.ulevel > 1) {
+/*JP
         pline("%s level %d.", Goodbye(), u.ulevel--);
+*/
+        pline("\82³\82æ\82¤\82È\82ç\83\8c\83x\83\8b%d\81D", u.ulevel--);
         /* remove intrinsic abilities */
         adjabil(u.ulevel + 1, u.ulevel);
         reset_rndmonst(NON_PM); /* new monster selection */
@@ -241,7 +265,7 @@ const char *drainer; /* cause of death, if drain should be fatal */
             rehumanize();
     }
 
-    context.botl = 1;
+    context.botl = TRUE;
 }
 
 /*
@@ -264,7 +288,10 @@ boolean incr; /* true iff via incremental experience growth */
     int hpinc, eninc;
 
     if (!incr)
+/*JP
         You_feel("more experienced.");
+*/
+        You("\82æ\82è\8co\8c±\82ð\82Â\82ñ\82¾\82æ\82¤\82È\8bC\82ª\82µ\82½\81D");
 
     /* increase hit points (when polymorphed, do monster form first
        in order to retain normal human/whatever increase for later) */
@@ -293,13 +320,21 @@ boolean incr; /* true iff via incremental experience growth */
             u.uexp = newuexp(u.ulevel);
         }
         ++u.ulevel;
+#if 0 /*JP:T*/
+        pline("Welcome %sto experience level %d.",
+              (u.ulevelmax < u.ulevel) ? "" : "back ",
+              u.ulevel);
+#else
+        pline("%s\83\8c\83x\83\8b%d\82É\82æ\82¤\82±\82»\81D",
+              (u.ulevelmax < u.ulevel) ? "" : "\8dÄ\82Ñ",
+              u.ulevel);
+#endif
         if (u.ulevelmax < u.ulevel)
             u.ulevelmax = u.ulevel;
-        pline("Welcome to experience level %d.", u.ulevel);
         adjabil(u.ulevel - 1, u.ulevel); /* give new intrinsics */
         reset_rndmonst(NON_PM);          /* new monster selection */
     }
-    context.botl = 1;
+    context.botl = TRUE;
 }
 
 /* compute a random amount of experience points suitable for the hero's