From 7750297dc2a340a256bf773a39697f0cfacb1ef1 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 3 Feb 2017 10:57:32 +0100 Subject: [PATCH] express race.magres as percentage, not probability (double->int) --- res/e3a/races.xml | 102 ++++++++++++++--------------- res/eressea/races.xml | 130 ++++++++++++++++++------------------- res/races/aquarian.xml | 2 +- res/races/cat.xml | 2 +- res/races/demon.xml | 2 +- res/races/dragon.xml | 2 +- res/races/dwarf.xml | 2 +- res/races/elf.xml | 2 +- res/races/goblin-2.xml | 2 +- res/races/goblin-3.xml | 2 +- res/races/goblin.xml | 2 +- res/races/halfling.xml | 2 +- res/races/human.xml | 2 +- res/races/insect.xml | 2 +- res/races/orc.xml | 2 +- res/races/troll.xml | 2 +- res/races/wyrm.xml | 2 +- res/races/youngdragon.xml | 2 +- res/races/zombie.xml | 2 +- src/battle.test.c | 4 +- src/kernel/jsonconf.c | 2 +- src/kernel/jsonconf.test.c | 5 +- src/kernel/race.c | 4 ++ src/kernel/race.h | 3 +- src/kernel/race.test.c | 3 +- src/kernel/xmlreader.c | 2 +- src/magic.c | 2 +- src/magic.test.c | 6 +- 28 files changed, 152 insertions(+), 145 deletions(-) diff --git a/res/e3a/races.xml b/res/e3a/races.xml index 2b0f68b9d..3402fdb73 100644 --- a/res/e3a/races.xml +++ b/res/e3a/races.xml @@ -8,7 +8,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -47,7 +47,7 @@ - + @@ -76,7 +76,7 @@ - + @@ -104,7 +104,7 @@ - + @@ -124,7 +124,7 @@ - + @@ -144,7 +144,7 @@ - + @@ -167,7 +167,7 @@ - + @@ -192,7 +192,7 @@ - + @@ -219,7 +219,7 @@ - + @@ -241,7 +241,7 @@ - + @@ -263,7 +263,7 @@ - + @@ -287,7 +287,7 @@ - + @@ -311,7 +311,7 @@ - + @@ -334,7 +334,7 @@ - + @@ -361,7 +361,7 @@ - + @@ -384,7 +384,7 @@ - + @@ -409,7 +409,7 @@ - + @@ -435,7 +435,7 @@ - + @@ -460,7 +460,7 @@ - + @@ -484,7 +484,7 @@ - + @@ -507,7 +507,7 @@ - + @@ -535,7 +535,7 @@ - + @@ -559,7 +559,7 @@ - + @@ -582,7 +582,7 @@ - + @@ -607,16 +607,16 @@ - + - + - + @@ -624,7 +624,7 @@ - + @@ -672,47 +672,47 @@ - + - + - + - + - + - + - + - + @@ -720,21 +720,21 @@ - + - + - + @@ -742,7 +742,7 @@ - + @@ -768,7 +768,7 @@ - + @@ -787,7 +787,7 @@ - + @@ -806,7 +806,7 @@ - + @@ -823,7 +823,7 @@ - + @@ -839,7 +839,7 @@ - + @@ -855,7 +855,7 @@ - + @@ -871,13 +871,13 @@ - + - + @@ -890,7 +890,7 @@ - + @@ -898,7 +898,7 @@ - + diff --git a/res/eressea/races.xml b/res/eressea/races.xml index 2ef5950c9..e4e22d0c3 100644 --- a/res/eressea/races.xml +++ b/res/eressea/races.xml @@ -1,7 +1,7 @@ - - + @@ -27,7 +27,7 @@ - + @@ -61,7 +61,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -148,7 +148,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -209,7 +209,7 @@ - + @@ -244,7 +244,7 @@ - + @@ -275,7 +275,7 @@ - + @@ -308,7 +308,7 @@ - + @@ -339,7 +339,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -401,7 +401,7 @@ - + @@ -431,7 +431,7 @@ - + @@ -463,7 +463,7 @@ - + @@ -495,7 +495,7 @@ - + @@ -525,7 +525,7 @@ - + @@ -558,7 +558,7 @@ - + @@ -589,16 +589,16 @@ - + - + - @@ -607,7 +607,7 @@ - + @@ -671,66 +671,66 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -742,7 +742,7 @@ - + @@ -755,7 +755,7 @@ - + @@ -769,20 +769,20 @@ - + - + - + @@ -801,7 +801,7 @@ - + @@ -827,7 +827,7 @@ - + @@ -860,7 +860,7 @@ - + @@ -889,7 +889,7 @@ - + @@ -921,7 +921,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -1011,11 +1011,11 @@ - + - + @@ -1023,7 +1023,7 @@ - + @@ -1037,7 +1037,7 @@ - + @@ -1055,7 +1055,7 @@ - + @@ -1073,7 +1073,7 @@ - + @@ -1089,7 +1089,7 @@ - + @@ -1104,7 +1104,7 @@ - + @@ -1119,7 +1119,7 @@ - + @@ -1134,12 +1134,12 @@ - + - + @@ -1151,7 +1151,7 @@ - @@ -1182,7 +1182,7 @@ - + @@ -1209,7 +1209,7 @@ - + @@ -1241,7 +1241,7 @@ - + @@ -1271,7 +1271,7 @@ - + @@ -1285,13 +1285,13 @@ - + - + @@ -1300,7 +1300,7 @@ - + diff --git a/res/races/aquarian.xml b/res/races/aquarian.xml index 776f17e93..a0e1189b7 100644 --- a/res/races/aquarian.xml +++ b/res/races/aquarian.xml @@ -1,5 +1,5 @@ - + diff --git a/res/races/cat.xml b/res/races/cat.xml index 818b24b36..75bc8019a 100644 --- a/res/races/cat.xml +++ b/res/races/cat.xml @@ -1,5 +1,5 @@ - + diff --git a/res/races/demon.xml b/res/races/demon.xml index a350fef4a..0ce4c86ff 100644 --- a/res/races/demon.xml +++ b/res/races/demon.xml @@ -1,5 +1,5 @@ - - + diff --git a/res/races/elf.xml b/res/races/elf.xml index dfbd2f2ec..ee1278a26 100644 --- a/res/races/elf.xml +++ b/res/races/elf.xml @@ -1,5 +1,5 @@ - + diff --git a/res/races/goblin-2.xml b/res/races/goblin-2.xml index 9a9c265be..ae90c1918 100644 --- a/res/races/goblin-2.xml +++ b/res/races/goblin-2.xml @@ -1,5 +1,5 @@ - - - - + diff --git a/res/races/human.xml b/res/races/human.xml index 2e4b94af2..8f1ad5cb4 100644 --- a/res/races/human.xml +++ b/res/races/human.xml @@ -1,5 +1,5 @@ - + diff --git a/res/races/insect.xml b/res/races/insect.xml index cecbf0193..dc9faa06d 100644 --- a/res/races/insect.xml +++ b/res/races/insect.xml @@ -1,5 +1,5 @@ - + diff --git a/res/races/orc.xml b/res/races/orc.xml index d9d26ab25..4f4d96ed5 100644 --- a/res/races/orc.xml +++ b/res/races/orc.xml @@ -1,5 +1,5 @@ - + diff --git a/res/races/troll.xml b/res/races/troll.xml index a2341851b..c70020fa2 100644 --- a/res/races/troll.xml +++ b/res/races/troll.xml @@ -1,5 +1,5 @@ - -magres = 0.5; /* gets added to skill bonus */ + rc->_magres = 50; /* percentage, gets added to skill bonus */ calculate_armor(dt, 0, 0, &magres); CuAssertDblEquals_Msg(tc, "race bonus", 0.6, magic_resistance(du), 0.01); CuAssertDblEquals_Msg(tc, "race reduction", 0.4, magres, 0.01); - rc->magres = 1.5; /* should not cause negative damage multiplier */ + rc->_magres = 150; /* should not cause negative damage multiplier */ CuAssertDblEquals_Msg(tc, "magic resistance is never > 0.9", 0.9, magic_resistance(du), 0.01); calculate_armor(dt, 0, 0, &magres); CuAssertDblEquals_Msg(tc, "damage reduction is never < 0.1", 0.1, magres, 0.01); diff --git a/src/kernel/jsonconf.c b/src/kernel/jsonconf.c index 03e210ce0..0cfba4e34 100644 --- a/src/kernel/jsonconf.c +++ b/src/kernel/jsonconf.c @@ -458,7 +458,7 @@ static void json_race(cJSON *json, race *rc) { break; case cJSON_Number: if (strcmp(child->string, "magres") == 0) { - rc->magres = (float)child->valuedouble; + rc->_magres = child->valueint; } else if (strcmp(child->string, "maxaura") == 0) { rc->maxaura = (float)child->valuedouble; diff --git a/src/kernel/jsonconf.test.c b/src/kernel/jsonconf.test.c index 93fcd8d10..7ac6a93cc 100644 --- a/src/kernel/jsonconf.test.c +++ b/src/kernel/jsonconf.test.c @@ -136,7 +136,7 @@ static void test_races(CuTest * tc) { const char * data = "{\"races\": { \"orc\" : { " "\"damage\" : \"1d4\"," - "\"magres\" : 1.0," + "\"magres\" : 100," "\"maxaura\" : 2.0," "\"regaura\" : 3.0," "\"speed\" : 4.0," @@ -163,7 +163,8 @@ static void test_races(CuTest * tc) CuAssertPtrNotNull(tc, rc); CuAssertIntEquals(tc, RCF_NPC | RCF_WALK | RCF_UNDEAD, rc->flags); CuAssertStrEquals(tc, "1d4", rc->def_damage); - CuAssertDblEquals(tc, 1.0, rc->magres, 0.0); + CuAssertIntEquals(tc, 100, rc->_magres); + CuAssertDblEquals(tc, 1.0, rc_magres(rc), 0.0); CuAssertDblEquals(tc, 2.0, rc->maxaura, 0.0); CuAssertDblEquals(tc, 3.0, rc->regaura, 0.0); CuAssertDblEquals(tc, 4.0, rc->speed, 0.0); diff --git a/src/kernel/race.c b/src/kernel/race.c index 1bdba8a1b..3dc708ed1 100644 --- a/src/kernel/race.c +++ b/src/kernel/race.c @@ -282,6 +282,10 @@ bool r_insectstalled(const region * r) return fval(r->terrain, ARCTIC_REGION); } +double rc_magres(const struct race *rc) { + return rc->_magres / 100.0; +} + const char* rc_name(const race * rc, name_t n, char *name, size_t size) { const char * postfix = 0; if (!rc) { diff --git a/src/kernel/race.h b/src/kernel/race.h index 19b7b7ad3..72e1269c9 100644 --- a/src/kernel/race.h +++ b/src/kernel/race.h @@ -116,7 +116,7 @@ extern "C" { typedef struct race { char *_name; - float magres; + int _magres; float healing; double maxaura; /* Faktor auf Maximale Aura */ double regaura; /* Faktor auf Regeneration */ @@ -184,6 +184,7 @@ extern "C" { const char * rc_name_s(const race *rc, name_t n); const char * rc_name(const race *rc, name_t n, char *name, size_t size); + double rc_magres(const struct race *rc); /* Flags. Do not reorder these without changing json_race() in jsonconf.c */ #define RCF_NPC (1<<0) /* cannot be the race for a player faction (and other limits?) */ #define RCF_KILLPEASANTS (1<<1) /* a monster that eats peasants */ diff --git a/src/kernel/race.test.c b/src/kernel/race.test.c index 663a538ee..d40f252bc 100644 --- a/src/kernel/race.test.c +++ b/src/kernel/race.test.c @@ -23,7 +23,8 @@ static void test_rc_defaults(CuTest *tc) { test_setup(); rc = rc_get_or_create("human"); CuAssertStrEquals(tc, "human", rc->_name); - CuAssertDblEquals(tc, 0.0, rc->magres, 0.0); + CuAssertIntEquals(tc, 0, rc->_magres); + CuAssertDblEquals(tc, 0.0, rc_magres(rc), 0.0); CuAssertDblEquals(tc, 0.0, rc->maxaura, 0.0); CuAssertDblEquals(tc, 1.0, rc->recruit_multi, 0.0); CuAssertDblEquals(tc, 1.0, rc->regaura, 0.0); diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c index 854a6dd4c..3d7276bf3 100644 --- a/src/kernel/xmlreader.c +++ b/src/kernel/xmlreader.c @@ -1635,7 +1635,7 @@ static int parse_races(xmlDocPtr doc) rc->def_damage = strdup((const char *)propValue); xmlFree(propValue); - rc->magres = (float)xml_fvalue(node, "magres", rc->magres); + rc->_magres = xml_ivalue(node, "magres", rc->_magres); rc->healing = (float)xml_fvalue(node, "healing", rc->healing); rc->maxaura = (float)xml_fvalue(node, "maxaura", rc->maxaura); rc->regaura = (float)xml_fvalue(node, "regaura", rc->regaura); diff --git a/src/magic.c b/src/magic.c index 7e820f9c3..e48ec6d5d 100644 --- a/src/magic.c +++ b/src/magic.c @@ -1149,7 +1149,7 @@ double magic_resistance(unit * target) const curse_type * ct_goodresist = 0, *ct_badresist = 0; const resource_type *rtype; const race *rc = u_race(target); - double probability = rc->magres; + double probability = rc_magres(rc); const plane *pl = rplane(target->region); if (rc == get_race(RC_HIRNTOETER) && !pl) { diff --git a/src/magic.test.c b/src/magic.test.c index befd1986d..29534b33b 100644 --- a/src/magic.test.c +++ b/src/magic.test.c @@ -413,11 +413,11 @@ static void test_magic_resistance(CuTest *tc) { test_setup(); rc = test_create_race("human"); u = test_create_unit(test_create_faction(rc), test_create_region(0, 0, 0)); - CuAssertDblEquals(tc, rc->magres, magic_resistance(u), 0.01); - rc->magres = 1.0; + CuAssertDblEquals(tc, rc->_magres/100.0, magic_resistance(u), 0.01); + rc->_magres = 100; CuAssertDblEquals_Msg(tc, "magic resistance is capped at 0.9", 0.9, magic_resistance(u), 0.01); rc = test_create_race("braineater"); - rc->magres = 1.0; + rc->_magres = 100; u_setrace(u, rc); CuAssertDblEquals_Msg(tc, "brain eaters outside astral space have 50% magres", 0.5, magic_resistance(u), 0.01); u->region->_plane = get_astralplane();