From a67b2fa68dc51e0176c3ae4de8e3a2895c927ad4 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 26 Nov 2017 15:15:25 +0100 Subject: [PATCH] stop using random numbers to scale units. --- src/kernel/unit.c | 40 ++++++++++++---------------------------- src/kernel/unit.h | 2 +- 2 files changed, 13 insertions(+), 29 deletions(-) diff --git a/src/kernel/unit.c b/src/kernel/unit.c index 9b024851b..2e3dab804 100644 --- a/src/kernel/unit.c +++ b/src/kernel/unit.c @@ -1733,38 +1733,22 @@ int unit_max_hp(const unit * u) void scale_number(unit * u, int n) { - const attrib *a; - int remain; - - if (n == u->number) + if (n == u->number) { return; - if (n && u->number > 0) { - int full; - remain = ((u->hp % u->number) * (n % u->number)) % u->number; - - full = u->hp / u->number; /* wieviel kriegt jede person mindestens */ - u->hp = full * n + (u->hp - full * u->number) * n / u->number; - assert(u->hp >= 0); - if ((rng_int() % u->number) < remain) - ++u->hp; /* Nachkommastellen */ - } - else { - remain = 0; - u->hp = 0; } if (u->number > 0) { - for (a = a_find(u->attribs, &at_effect); a && a->type == &at_effect; - a = a->next) { - effect_data *data = (effect_data *)a->data.v; - int snew = data->value / u->number * n; - if (n) { - remain = data->value - snew / n * u->number; - snew += remain * n / u->number; - remain = (remain * n) % u->number; - if ((rng_int() % u->number) < remain) - ++snew; /* Nachkommastellen */ + if (n>0) { + const attrib *a = a_find(u->attribs, &at_effect); + + u->hp = (long long)u->hp * n / u->number; + + for (; a && a->type == &at_effect; a = a->next) { + effect_data *data = (effect_data *)a->data.v; + data->value = (long long)data->value * n / u->number; } - data->value = snew; + } + else { + u->hp = 0; } } if (u->number == 0 || n == 0) { diff --git a/src/kernel/unit.h b/src/kernel/unit.h index d80c0ec79..53f9836db 100644 --- a/src/kernel/unit.h +++ b/src/kernel/unit.h @@ -112,7 +112,7 @@ extern "C" { int flags; struct attrib *attribs; status_t status; - int n; /* helper temporariy variable, used in econmy, enno: attribut? */ + int n; /* helper temporary variable, used in economy, enno: attribut? */ int wants; /* enno: attribut? */ } unit;