From 598aa5d4fbe965a2b44a259b85a69e97ce3239c8 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 10 Mar 2024 14:08:06 +0100 Subject: [PATCH] bugfix and test for shadowdemons https://bugs.eressea.de/view.php?id=3011 --- src/spells.c | 4 ++-- src/spells.h | 2 ++ src/spells.test.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/spells.c b/src/spells.c index 789791a2e..7d9df327d 100644 --- a/src/spells.c +++ b/src/spells.c @@ -2948,7 +2948,7 @@ static int sp_plague(castorder * co) * Flag: * (SPELLLEVEL) */ -static int sp_summonshadow(castorder * co) +int sp_summonshadow(castorder * co) { region *r = co_get_region(co); unit *caster = co_get_caster(co); @@ -2960,7 +2960,7 @@ static int sp_summonshadow(castorder * co) u = create_unit(r, caster->faction, number, get_race(RC_SHADOW), 0, NULL, caster); /* Bekommen Tarnung = (Magie+Tarnung)/2 und Wahrnehmung 1. */ - val = get_level(caster, SK_MAGIC) + get_level(caster, SK_STEALTH); + val = (get_level(caster, SK_MAGIC) + get_level(caster, SK_STEALTH)) / 2; set_level(u, SK_STEALTH, val); set_level(u, SK_PERCEPTION, 1); diff --git a/src/spells.h b/src/spells.h index 1472353c8..5603093a7 100644 --- a/src/spells.h +++ b/src/spells.h @@ -43,3 +43,5 @@ int sp_destroy_magic(struct castorder *co); int sp_rosthauch(struct castorder *co); int sp_sparkle(struct castorder *co); int sp_summon_familiar(struct castorder *co); + +int sp_summonshadow(struct castorder *co); diff --git a/src/spells.test.c b/src/spells.test.c index 9b83c232b..9f7613598 100644 --- a/src/spells.test.c +++ b/src/spells.test.c @@ -304,6 +304,8 @@ static void test_view_reality(CuTest *tc) { "unit:unit", "region:region", "command:order", MT_NEW_END); mt_create_va(mt_new("viewreality_effect", NULL), "unit:unit", MT_NEW_END); + mt_create_va(mt_new("summonshadow_effect", NULL), + "mage:unit", "number:int", MT_NEW_END); rx = test_create_region(0, TP_RADIUS + 1, NULL); f = test_create_faction(); u = test_create_unit(f, rx); @@ -1425,6 +1427,34 @@ static void test_summon_familiar(CuTest *tc) { CuAssertPtrEquals(tc, rc_special, (race *)u_race(u2)); } +static void test_summonshadow(CuTest *tc) { + struct region *r; + struct faction *f; + unit *u, *u2; + race *rc; + castorder co; + + test_setup(); + r = test_create_plain(0, 0); + f = test_create_faction(); + f->magiegebiet = M_DRAIG; + u = test_create_unit(f, r); + rc = test_create_race("shadowdemon"); + CuAssertPtrEquals(tc, (void *)get_race(RC_SHADOW), rc); + test_set_skill(u, SK_MAGIC, 10, 1); + test_set_skill(u, SK_STEALTH, 6, 1); + test_create_castorder(&co, u, 3, 10., 0, NULL); + + CuAssertIntEquals(tc, co.level, sp_summonshadow(&co)); + CuAssertPtrNotNull(tc, u2 = u->next); + CuAssertPtrEquals(tc, u->faction, u2->faction); + CuAssertPtrEquals(tc, rc, (race *)u_race(u2)); + CuAssertIntEquals(tc, 100, u2->number); + CuAssertIntEquals(tc, 8, effskill(u2, SK_STEALTH, u2->region)); + CuAssertIntEquals(tc, 1, effskill(u2, SK_PERCEPTION, u2->region)); + CuAssertPtrNotNull(tc, test_find_faction_message(f, "summonshadow_effect")); +} + CuSuite *get_spells_suite(void) { CuSuite *suite = CuSuiteNew(); @@ -1464,6 +1494,7 @@ CuSuite *get_spells_suite(void) SUITE_ADD_TEST(suite, test_rosthauch); SUITE_ADD_TEST(suite, test_sparkle); SUITE_ADD_TEST(suite, test_summon_familiar); + SUITE_ADD_TEST(suite, test_summonshadow); return suite; }