diff --git a/src/common/kernel/spell.h b/src/common/kernel/spell.h index 42c7bdda2..c636ee118 100644 --- a/src/common/kernel/spell.h +++ b/src/common/kernel/spell.h @@ -28,7 +28,6 @@ extern "C" { /* Prototypen */ - void do_shock(struct unit *u, const char *reason); int use_item_power(struct region * r, struct unit * u); int use_item_regeneration(struct region * r, struct unit * u); void showspells(struct region *r, struct unit *u); diff --git a/src/common/spells/spells.c b/src/common/spells/spells.c index 64d80eec4..548cb65a0 100644 --- a/src/common/spells/spells.c +++ b/src/common/spells/spells.c @@ -107,45 +107,6 @@ report_failure(unit * mage, struct order * ord) { cmistake(mage, ord, 180, MSG_MAGIC); } -/* ------------------------------------------------------------- */ -/* do_shock - Schockt die Einheit, z.B. bei Verlust eines */ -/* Vertrauten. */ -/* ------------------------------------------------------------- */ - -void -do_shock(unit *u, const char *reason) -{ - int i; - if(u->number == 0) return; - - /* HP - Verlust */ - u->hp = (unit_max_hp(u) * u->number)/10; - u->hp = max(1, u->hp); - /* Aura - Verlust */ - if(is_mage(u)) { - set_spellpoints(u, max_spellpoints(u->region,u)/10); - } - - /* Evt. Talenttageverlust */ - for (i=0;i!=u->skill_size;++i) if (rand()%5==0) { - skill * sv = u->skills+i; - int weeks = (sv->level * sv->level - sv->level) / 2; - int change = (weeks+9) / 10; - reduce_skill(u, sv, change); - } - - /* Dies ist ein Hack, um das skillmod und familiar-Attribut beim Mage - * zu löschen wenn der Familiar getötet wird. Da sollten wir über eine - * saubere Implementation nachdenken. */ - - if(!strcmp(reason, "trigger")) { - remove_familiar(u); - } - - ADDMSG(&u->faction->msgs, msg_message("shock", - "mage reason", u, strdup(reason))); -} - /* ------------------------------------------------------------- */ /* Spruchanalyse - Ausgabe von curse->info und curse->name */ /* ------------------------------------------------------------- */ diff --git a/src/common/triggers/shock.c b/src/common/triggers/shock.c index d7ad2f85b..e8a7bdb3c 100644 --- a/src/common/triggers/shock.c +++ b/src/common/triggers/shock.c @@ -17,9 +17,13 @@ #include "shock.h" /* kernel includes */ -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include /* util includes */ #include @@ -27,12 +31,55 @@ #include /* libc includes */ +#include #include #include +#include /*** ** shock **/ +/* ------------------------------------------------------------- */ +/* do_shock - Schockt die Einheit, z.B. bei Verlust eines */ +/* Vertrauten. */ +/* ------------------------------------------------------------- */ + +static void +do_shock(unit *u, const char *reason) +{ + int i; + + if (u->number > 0) { + /* HP - Verlust */ + u->hp = (unit_max_hp(u) * u->number)/10; + u->hp = max(1, u->hp); + } + + /* Aura - Verlust */ + if (is_mage(u)) { + set_spellpoints(u, max_spellpoints(u->region,u)/10); + } + + /* Evt. Talenttageverlust */ + for (i=0;i!=u->skill_size;++i) if (rand()%5==0) { + skill * sv = u->skills+i; + int weeks = (sv->level * sv->level - sv->level) / 2; + int change = (weeks+9) / 10; + reduce_skill(u, sv, change); + } + + /* Dies ist ein Hack, um das skillmod und familiar-Attribut beim Mage + * zu löschen wenn der Familiar getötet wird. Da sollten wir über eine + * saubere Implementation nachdenken. */ + + if (strcmp(reason, "trigger")==0) { + remove_familiar(u); + } + + ADDMSG(&u->faction->msgs, msg_message("shock", + "mage reason", u, strdup(reason))); +} + static int shock_handle(trigger * t, void * data) { @@ -40,8 +87,9 @@ shock_handle(trigger * t, void * data) unit * u = (unit*)t->data.v; if (u!=NULL) { do_shock(u, "trigger"); - } else - log_error(("could not perform shock::handle()\n")); + } else { + log_error(("could not perform shock::handle()\n")); + } unused(data); return 0; }