Mercurial > hg > early-roguelike
view rogue4/prob.c @ 87:f871cb0539d3
Don't set the player's ISRUN flag.
rogue4 and rogue5 set the player's ISRUN flag upon exit from sleep or
holding. This is apparently supposed to indicate that the player can
move again. What it actually does is make it harder for monsters to
hit the player, until the flag is reset.
As this behavior makes little sense and seems like a cheat, it has
been deemed a bug and removed.
author | John "Elwin" Edwards |
---|---|
date | Tue, 13 Aug 2013 09:19:56 -0700 |
parents | 9535a08ddc39 |
children |
line wrap: on
line source
/* * * Rogue: Exploring the Dungeons of Doom * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman * All rights reserved. * * See the file LICENSE.TXT for full copyright and licensing information. */ # include <curses.h> # include "rogue.h" # undef max # define TRIES 10000 static char *sccsid = "@(#)prob.c 1.3 (Berkeley) 12/17/81"; main(ac, av) int ac; char **av; { register unsigned int prob, prob2, exp; register struct monster *mp; register unsigned int max, min, i; register unsigned int max2, min2; printf("%17.17s ----experience--- ----hit points---\n", ""); printf("%17.17s %7s %4s %4s %7s %4s %4s lvl\n", "monster", "avg", "min", "max", "avg", "min", "max", "max hp"); seed = 0; for (mp = monsters; mp < &monsters[26]; mp++) { i = TRIES; prob2 = prob = 0; min2 = min = 30000; max2 = max = 0; while (i--) { if ((exp = roll(mp->m_stats.s_lvl, 8)) < min2) min2 = exp; if (exp > max2) max2 = exp; prob2 += exp; mp->m_stats.s_maxhp = exp; if ((exp = mp->m_stats.s_exp + exp_add(mp)) < min) min = exp; if (exp > max) max = exp; prob += exp; } printf("%17.17s: %7.2f %4d %4d %7.2f %4d %4d %3d\n", mp->m_name, ((double) prob) / TRIES, min, max, ((double) prob2) / TRIES, min2, max2, mp->m_stats.s_lvl); fflush(stdout); } } exp_add(mp) register struct monster *mp; { register unsigned int mod; if (mp->m_stats.s_lvl == 1) mod = mp->m_stats.s_maxhp / 8; else mod = mp->m_stats.s_maxhp / 6; if (mp->m_stats.s_lvl > 9) mod *= 20; else if (mp->m_stats.s_lvl > 6) mod *= 4; return mod; } /* * roll: * roll a number of dice */ roll(number, sides) register unsigned int number, sides; { register unsigned int dtotal = 0; dtotal = number; while (number--) dtotal += rnd(sides); return dtotal; } /* * rnd: * Pick a very random number. */ rnd(range) register unsigned int range; { return RN % range; }