-/* 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)
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;
}
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 */
rehumanize();
}
- context.botl = 1;
+ context.botl = TRUE;
}
/*
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) */
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