From a754975ef9d957b79f7e142244ff27301081f7ec Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 18 Feb 2017 17:52:25 +0100 Subject: [PATCH 1/4] fix loading data where embassy uses floats. --- src/attributes/dict.c | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/attributes/dict.c b/src/attributes/dict.c index 36d017b2c..f95555734 100644 --- a/src/attributes/dict.c +++ b/src/attributes/dict.c @@ -43,7 +43,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include typedef enum { - TNONE = 0, TINTEGER = 1 + TNONE = 0, TINTEGER = 1, TREAL = 2 } dict_type; typedef struct dict_data { @@ -72,11 +72,18 @@ static int dict_read(attrib * a, void *owner, gamedata *data) dd->name = strdup(name); READ_INT(store, &n); dd->type = (dict_type)n; - if (dd->type != TINTEGER) { + if (dd->type == TINTEGER) { + READ_INT(store, &dd->data.i); + } + else if (dd->type == TREAL) { + float flt; + READ_FLT(store, &flt); + dd->data.real = flt; + } + else { log_error("read dict, invalid type %d", n); return AT_READ_FAIL; } - READ_INT(store, &dd->data.i); return AT_READ_DEPR; } @@ -95,6 +102,16 @@ static void dict_done(attrib * a) free(a->data.v); } +static void upgrade_keyval(const dict_data *dd, int keyval[], int v) { + if (strcmp(dd->name, "embassy_muschel") == 0) { + keyval[0] = atoi36("mupL"); + keyval[1] = v; + } + else { + log_error("dict conversion, bad entry %s", dd->name); + } +} + static void dict_upgrade(attrib **alist, attrib *abegin) { int n = 0, *keys = 0; int i = 0, val[8]; @@ -105,18 +122,17 @@ static void dict_upgrade(attrib **alist, attrib *abegin) { } for (a = abegin; a && a->type == abegin->type; a = a->next) { dict_data *dd = (dict_data *)a->data.v; - if (dd->type != TINTEGER) { - log_error("dict conversion, bad type %d for %s", dd->type, dd->name); + if (dd->type == TINTEGER) { + upgrade_keyval(dd, val + i * 2, dd->data.i); + ++i; + } + else if (dd->type == TREAL) { + upgrade_keyval(dd, val + i * 2, (int)dd->data.real); + ++i; } else { - if (strcmp(dd->name, "embassy_muschel")==0) { - val[i * 2] = atoi36("mupL"); - val[i * 2 + 1] = dd->data.i; - ++i; - } - else { - log_error("dict conversion, bad entry %s", dd->name); - } + log_error("dict conversion, bad type %d for %s", dd->type, dd->name); + assert(!"invalid input"); } if (i == 4) { keys = realloc(keys, sizeof(int) * (n + i + 1)); From daa75543610ea410b3ade74d670224a86001ff12 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 18 Feb 2017 18:14:18 +0100 Subject: [PATCH 2/4] remove race.precombatspell --- res/eressea/races.xml | 1 - src/kernel/race.c | 2 -- src/kernel/race.h | 1 - src/kernel/xmlreader.c | 11 ----------- src/magic.c | 7 ------- 5 files changed, 22 deletions(-) diff --git a/res/eressea/races.xml b/res/eressea/races.xml index e4e22d0c3..de5a26325 100644 --- a/res/eressea/races.xml +++ b/res/eressea/races.xml @@ -1283,7 +1283,6 @@ - diff --git a/src/kernel/race.c b/src/kernel/race.c index a4a11c15d..683d37d63 100644 --- a/src/kernel/race.c +++ b/src/kernel/race.c @@ -277,7 +277,6 @@ void free_races(void) { free(at->data.dice); } } - spellref_free(races->precombatspell); free(xrefs); xrefs = 0; free(races->_name); @@ -337,7 +336,6 @@ race *rc_create(const char *zName) assert(strchr(zName, ' ') == NULL); } rc->_name = strdup(zName); - rc->precombatspell = NULL; rc->attack[0].type = AT_COMBATSPELL; for (i = 1; i < RACE_ATTACKS; ++i) diff --git a/src/kernel/race.h b/src/kernel/race.h index c58bad701..8fc6d5989 100644 --- a/src/kernel/race.h +++ b/src/kernel/race.h @@ -138,7 +138,6 @@ extern "C" { int df_default; /* Verteidigungsskill Unbewaffnet (default: -2) */ int at_bonus; /* Ver�ndert den Angriffsskill (default: 0) */ int df_bonus; /* Ver�ndert den Verteidigungskill (default: 0) */ - struct spellref *precombatspell; signed char *study_speed; /* study-speed-bonus in points/turn (0=30 Tage) */ int flags; int battle_flags; diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c index 3a4b351dd..1ac5583ec 100644 --- a/src/kernel/xmlreader.c +++ b/src/kernel/xmlreader.c @@ -1849,17 +1849,6 @@ static int parse_races(xmlDocPtr doc) } xmlXPathFreeObject(result); - /* reading eressea/races/race/precombatspell */ - xpath->node = node; - result = xmlXPathEvalExpression(BAD_CAST "precombatspell", xpath); - assert(rc->precombatspell == NULL - || !"precombatspell is already initialized"); - for (k = 0; k != result->nodesetval->nodeNr; ++k) { - xmlNodePtr node = result->nodesetval->nodeTab[k]; - rc->precombatspell = xml_spellref(node, "spell"); - } - xmlXPathFreeObject(result); - /* reading eressea/races/race/attack */ xpath->node = node; result = xmlXPathEvalExpression(BAD_CAST "attack", xpath); diff --git a/src/magic.c b/src/magic.c index 89774e96a..19890ec0e 100644 --- a/src/magic.c +++ b/src/magic.c @@ -561,13 +561,6 @@ const spell *get_combatspell(const unit * u, int nr) if (m) { return m->combatspells[nr].sp; } - else { - const race * rc = u_race(u); - if (rc->precombatspell) { - return spellref_get(rc->precombatspell); - } - } - return NULL; } From 7d5586635ea4523a056def5656a81867b1660d8a Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 18 Feb 2017 18:24:44 +0100 Subject: [PATCH 3/4] remove shadowcall spell --- res/core/de/strings.xml | 8 -------- res/core/messages.xml | 10 ---------- res/e3a/races.xml | 31 ------------------------------- res/e3a/spellbooks/gray.xml | 1 - res/e3a/spells.xml | 3 --- res/eressea/races.xml | 25 ------------------------- res/eressea/spellbooks/gray.xml | 1 - res/eressea/spells.xml | 3 --- 8 files changed, 82 deletions(-) diff --git a/res/core/de/strings.xml b/res/core/de/strings.xml index bccfdd165..3aa71393d 100644 --- a/res/core/de/strings.xml +++ b/res/core/de/strings.xml @@ -3819,10 +3819,6 @@ Meteorregen Meteor Shower - - Schattenruf - Shadow Call - Erschaffe einen Ring der Regeneration Create A Ring of Regeneration @@ -4503,10 +4499,6 @@ Verletzt alle Gegner. Injures all enemies. - - Ruft Schattenwesen. - Calls beings from shadow. - Panik. Panic. diff --git a/res/core/messages.xml b/res/core/messages.xml index c28670d65..3fae49eb3 100644 --- a/res/core/messages.xml +++ b/res/core/messages.xml @@ -7521,16 +7521,6 @@ "$unit($mage) casts $spell($spell). $int($amount) fighters are temporarily losing some of their memories." - - - - - - - "$unit($mage) ruft $int($amount) $race($race, 0) zu Hilfe." - "$unit($mage) calls upon the help of $int($amount) $race($race, 0)." - - diff --git a/res/e3a/races.xml b/res/e3a/races.xml index 7e75f3fd4..5060604a3 100644 --- a/res/e3a/races.xml +++ b/res/e3a/races.xml @@ -885,35 +885,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/e3a/spellbooks/gray.xml b/res/e3a/spellbooks/gray.xml index 5967d6265..9c0035e78 100644 --- a/res/e3a/spellbooks/gray.xml +++ b/res/e3a/spellbooks/gray.xml @@ -107,7 +107,6 @@ - diff --git a/res/e3a/spells.xml b/res/e3a/spells.xml index ec656c18f..74eb89146 100644 --- a/res/e3a/spells.xml +++ b/res/e3a/spells.xml @@ -665,9 +665,6 @@ - - - diff --git a/res/eressea/races.xml b/res/eressea/races.xml index de5a26325..26607a297 100644 --- a/res/eressea/races.xml +++ b/res/eressea/races.xml @@ -1284,29 +1284,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/eressea/spellbooks/gray.xml b/res/eressea/spellbooks/gray.xml index a7f718f2a..ae7a1f611 100644 --- a/res/eressea/spellbooks/gray.xml +++ b/res/eressea/spellbooks/gray.xml @@ -123,7 +123,6 @@ - diff --git a/res/eressea/spells.xml b/res/eressea/spells.xml index 5af11913e..1d762f4bd 100644 --- a/res/eressea/spells.xml +++ b/res/eressea/spells.xml @@ -471,9 +471,6 @@ - - - From a553b2258a0509bd7fa04e10262f8ef7a074246f Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 18 Feb 2017 18:25:58 +0100 Subject: [PATCH 4/4] remove code for shadowcall, too --- src/spells.c | 1 - src/spells/combatspells.c | 36 ------------------------------------ src/spells/combatspells.h | 1 - 3 files changed, 38 deletions(-) diff --git a/src/spells.c b/src/spells.c index b40192016..66f5325c9 100644 --- a/src/spells.c +++ b/src/spells.c @@ -6596,7 +6596,6 @@ static spelldata spell_functions[] = { { "powerful_dragonbreath", sp_dragonodem, 0 }, { "drain_skills", sp_dragonodem, 0 }, { "aura_of_fear", sp_flee, 0 }, - { "shadowcall", sp_shadowcall, 0 }, { "immolation", sp_immolation, 0 }, { "firestorm", sp_immolation, 0 }, { "coldfront", sp_immolation, 0 }, diff --git a/src/spells/combatspells.c b/src/spells/combatspells.c index 76fd605ff..939433617 100644 --- a/src/spells/combatspells.c +++ b/src/spells/combatspells.c @@ -815,42 +815,6 @@ int sp_drainodem(fighter * fi, int level, double power, spell * sp) /* ------------------------------------------------------------- */ /* PRECOMBAT */ -int sp_shadowcall(struct castorder * co) -{ - fighter * fi = co->magician.fig; - int level = co->level; - double power = co->force; - battle *b = fi->side->battle; - region *r = b->region; - unit *mage = fi->unit; - attrib *a; - int force = (int)(get_force(power, 3) / 2); - unit *u; - const char *rcnames[3] = { "shadowbat", "nightmare", "vampunicorn" }; - const race *rc = rc_find(rcnames[rng_int() % 3]); - message *msg; - - u = create_unit(r, mage->faction, force, rc, 0, NULL, mage); - setstatus(u, ST_FIGHT); - - set_level(u, SK_WEAPONLESS, (int)(power / 2)); - set_level(u, SK_STAMINA, (int)(power / 2)); - u->hp = u->number * unit_max_hp(u); - - a = a_new(&at_unitdissolve); - a->data.ca[0] = 0; - a->data.ca[1] = 100; - a_add(&u->attribs, a); - - make_fighter(b, u, fi->side, is_attacker(fi)); - msg = - msg_message("sp_shadowcall_effect", "mage amount race", mage, u->number, - u_race(u)); - message_all(b, msg); - msg_release(msg); - return level; -} - static fighter *summon_allies(const fighter *fi, const race *rc, int number) { attrib *a; unit *mage = fi->unit; diff --git a/src/spells/combatspells.h b/src/spells/combatspells.h index 4e3173a66..cf07c2a89 100644 --- a/src/spells/combatspells.h +++ b/src/spells/combatspells.h @@ -49,7 +49,6 @@ extern "C" { int sp_armorshield(struct castorder * co); int sp_stun(struct castorder * co); int sp_undeadhero(struct castorder * co); - int sp_shadowcall(struct castorder * co); int sp_immolation(struct castorder * co); #ifdef __cplusplus