From 560fed45fb7c4e8f6ecbcc80acf5d2b58b8aec89 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 22 Feb 2010 07:56:05 +0000 Subject: [PATCH] removed karma and luck --- src/basic/build.vcproj | 2 +- src/common/build/gamecode.c | 1 - src/common/build/kernel.c | 1 - src/common/gamecode.vcproj | 8 - src/common/gamecode/creport.c | 6 - src/common/gamecode/economy.c | 21 -- src/common/gamecode/laws.c | 21 -- src/common/gamecode/luck.c | 187 ---------- src/common/gamecode/luck.h | 35 -- src/common/gamecode/randenc.c | 37 -- src/common/gamecode/report.c | 23 -- src/common/gamecode/spy.c | 76 ---- src/common/gamecode/spy.h | 1 - src/common/gamecode/study.c | 16 - src/common/gamecode/xmlreport.c | 1 - src/common/kernel.vcproj | 8 - src/common/kernel/battle.c | 75 ---- src/common/kernel/building.c | 6 - src/common/kernel/config.c | 35 +- src/common/kernel/faction.h | 3 - src/common/kernel/karma.c | 606 -------------------------------- src/common/kernel/karma.h | 76 ---- src/common/kernel/magic.c | 52 --- src/common/kernel/move.c | 14 - src/common/kernel/race.c | 1 - src/common/kernel/reports.c | 8 - src/common/kernel/save.c | 16 +- src/common/kernel/skill.c | 1 - src/common/kernel/unit.c | 23 -- src/common/settings.h | 1 - src/common/spells/spells.c | 31 -- 31 files changed, 6 insertions(+), 1386 deletions(-) delete mode 100644 src/common/gamecode/luck.c delete mode 100644 src/common/gamecode/luck.h delete mode 100644 src/common/kernel/karma.c delete mode 100644 src/common/kernel/karma.h diff --git a/src/basic/build.vcproj b/src/basic/build.vcproj index c130acf59..9f857f696 100644 --- a/src/basic/build.vcproj +++ b/src/basic/build.vcproj @@ -2,7 +2,7 @@ #include #include -#include #include #include #include diff --git a/src/common/build/kernel.c b/src/common/build/kernel.c index 89062a38c..9ac333f94 100644 --- a/src/common/build/kernel.c +++ b/src/common/build/kernel.c @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include diff --git a/src/common/gamecode.vcproj b/src/common/gamecode.vcproj index ea714a652..52f512053 100644 --- a/src/common/gamecode.vcproj +++ b/src/common/gamecode.vcproj @@ -213,14 +213,6 @@ RelativePath=".\gamecode\laws.h" > - - - - diff --git a/src/common/gamecode/creport.c b/src/common/gamecode/creport.c index 26ac42a44..44fc20652 100644 --- a/src/common/gamecode/creport.c +++ b/src/common/gamecode/creport.c @@ -38,7 +38,6 @@ without prior permission by the authors of Eressea. #include #include #include -#include #include #include #include @@ -688,11 +687,6 @@ cr_output_unit(FILE * F, const region * r, assert(u && u->number); -#if KARMA_MODULE - if (fspecial(u->faction, FS_HIDDEN)) - a_fshidden = a_find(u->attribs, &at_fshidden); -#endif /* KARMA_MODULE */ - fprintf(F, "EINHEIT %d\n", u->no); fprintf(F, "\"%s\";Name\n", u->name); str = u_description(u, f->locale); diff --git a/src/common/gamecode/economy.c b/src/common/gamecode/economy.c index d4ce52abc..f26502c15 100644 --- a/src/common/gamecode/economy.c +++ b/src/common/gamecode/economy.c @@ -39,7 +39,6 @@ #include #include #include -#include #include #include #include @@ -260,10 +259,6 @@ add_recruits(unit * u, int number, int wanted) unit * unew; char equipment[64]; -#if KARMA_MODULE - int i = fspecial(u->faction, FS_MILITIA); -#endif /* KARMA_MODULE */ - if (u->number==0) { set_number(u, number); u->hp = number * unit_max_hp(u); @@ -280,22 +275,6 @@ add_recruits(unit * u, int number, int wanted) change_level(unew, SK_RIDING, 1); } -#if KARMA_MODULE - if (i > 0) { - if (unew->race->bonus[SK_SPEAR] >= 0) - change_level(unew, SK_SPEAR, i); - if (unew->race->bonus[SK_MELEE] >= 0) - change_level(unew, SK_MELEE, i); - if (unew->race->bonus[SK_LONGBOW] >= 0) - change_level(unew, SK_LONGBOW, i); - if (unew->race->bonus[SK_CROSSBOW] >= 0) - change_level(unew, SK_CROSSBOW, i); - if (unew->race->bonus[SK_RIDING] >= 0) - change_level(unew, SK_RIDING, i); - if (unew->race->bonus[SK_STAMINA] >= 0) - change_level(unew, SK_STAMINA, i); - } -#endif /* KARMA_MODULE */ if (unew!=u) { transfermen(unew, u, unew->number); remove_unit(&r->units, unew); diff --git a/src/common/gamecode/laws.c b/src/common/gamecode/laws.c index 56a53ea59..514c013a6 100644 --- a/src/common/gamecode/laws.c +++ b/src/common/gamecode/laws.c @@ -46,7 +46,6 @@ #include #include #include -#include #include #include #include @@ -3472,15 +3471,6 @@ monthly_healing(void) continue; } -#if KARMA_MODULE - if (fspecial(u->faction, FS_UNDEAD)) continue; - - if(fspecial(u->faction, FS_REGENERATION)) { - u->hp = umhp; - continue; - } -#endif /* KARMA_MODULE */ - p *= heal_factor(u); if (u->hp < umhp) { #ifdef NEW_DAEMONHUNGER_RULE @@ -3984,9 +3974,6 @@ init_processor(void) add_proc_order(p, K_NAME, &name_cmd, 0, NULL); add_proc_order(p, K_GUARD, &guard_off_cmd, 0, NULL); add_proc_order(p, K_RESHOW, &reshow_cmd, 0, NULL); -#if KARMA_MODULE - add_proc_order(p, K_WEREWOLF, &setwere_cmd, 0, NULL); -#endif /* KARMA_MODULE */ if (get_param_int(global.parameters, "rules.alliances", 0)==1) { p+=10; @@ -4012,10 +3999,6 @@ init_processor(void) add_proc_order(p, K_LEAVE, &leave_cmd, 0, "Verlassen"); if (!nobattle) { -#if KARMA_MODULE - p+=10; - add_proc_global(p, &jihad_attacks, "Jihad-Angriffe"); -#endif add_proc_region(p, &do_battle, "Attackieren"); } @@ -4107,10 +4090,6 @@ init_processor(void) p+=10; add_proc_global(p, &reorder, "Einheiten sortieren"); } -#if KARMA_MODULE - p+=10; - add_proc_global(p, &karma, "Jihads setzen"); -#endif add_proc_order(p, K_PROMOTION, &promotion_cmd, 0, "Heldenbefoerderung"); if (!global.disabled[K_NUMBER]) { add_proc_order(p, K_NUMBER, &renumber_cmd, 0, "Neue Nummern (Einheiten)"); diff --git a/src/common/gamecode/luck.c b/src/common/gamecode/luck.c deleted file mode 100644 index e15ab2a96..000000000 --- a/src/common/gamecode/luck.c +++ /dev/null @@ -1,187 +0,0 @@ -/* vi: set ts=2: - * - * - * Eressea PB(E)M host Copyright (C) 1998-2003 - * Christian Schlittchen (corwin@amber.kn-bremen.de) - * Katja Zedel (katze@felidae.kn-bremen.de) - * Henning Peters (faroul@beyond.kn-bremen.de) - * Enno Rehling (enno@eressea.de) - * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) - * - * based on: - * - * Atlantis v1.0 13 September 1993 Copyright 1993 by Russell Wallace - * Atlantis v1.7 Copyright 1996 by Alex Schröder - * - * This program may not be used, modified or distributed without - * prior permission by the authors of Eressea. - * This program may not be sold or used commercially without prior written - * permission from the authors. - */ - -#include -#include - -#include "luck.h" - -/* attributes includes */ -#include -#include - -#include "economy.h" -#include "randenc.h" - -/* kernel include */ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* util includes */ -#include -#include -#include - -/* libc includes */ -#include -#include -#include -#include - -#if KARMA_MODULE - -#define STANDARD_LUCK 0 - -static void -lucky_silver(const unit *u) -{ - int i = 0, r, max = 0; - int luck = fspecial(u->faction, FS_LUCKY); - - do { - r = 1 + rng_int()%(10000*(luck+STANDARD_LUCK)); - if(r > max) max = r; - i++; - } while(i <= luck); - - i_change(&((unit *)u)->items, i_silver, max); - - ADDMSG(&u->faction->msgs, msg_message("lucky_item", - "unit item amount", u, i_silver->rtype, max)); -} - -typedef struct luckyitem { - const char * name; - int weight; /* weighting the item */ -} luckyitem; - -static void -lucky_item(const unit *u) -{ - int i = 0, r, max = 0; - item_type *itype; - int amount; - int luck = fspecial(u->faction, FS_LUCKY); - /* Das ist schöner so, denke ich... */ - static int nitems = 0; - static int maxweight = 0; - struct luckyitem it_list[] = { - { "mallorn", 1 }, - { NULL, 0 } - }; - if (nitems==0) { - while (it_list[nitems].name) { - maxweight +=it_list[nitems].weight; - ++nitems; - } - } - /* weight is unused */ - r = rng_int()%nitems; - - do { - r = rng_int()%nitems; - if(r > max) max = r; - i++; - } while(i <= luck); - - itype = it_find(it_list[r].name); - - if(luck) - amount = 10 + rng_int()%(luck*40) + rng_int()%(luck*40); - else - amount = 5 + rng_int()%10 +rng_int()%10; - - i_change(&((unit *)u)->items, itype, amount); - ADDMSG(&u->faction->msgs, msg_message("lucky_item", - "unit item amount", u, itype->rtype, amount)); -} - -static void -lucky_magic_item(const unit *u) -{ -#if defined(__GNUC__) && !defined(__STDC__) - item_type *itype; - int amount; - int luck = fspecial(u->faction, FS_LUCKY); - const int n_items = 13; - item_type *it_list[] = { - olditemtype[I_AMULET_OF_HEALING], - olditemtype[I_AMULET_OF_TRUE_SEEING], - olditemtype[I_RING_OF_INVISIBILITY], - olditemtype[I_RING_OF_POWER], - olditemtype[I_FIRESWORD], - olditemtype[I_CHASTITY_BELT], - olditemtype[I_FEENSTIEFEL], - olditemtype[I_ANTIMAGICCRYSTAL], - olditemtype[I_RING_OF_NIMBLEFINGER], - olditemtype[I_TROLLBELT], - olditemtype[I_TACTICCRYSTAL], - olditemtype[I_SACK_OF_CONSERVATION], - }; - - itype = it_list[rng_int()%n_items]; - amount = 1 + rng_int()%luck; - - i_change(&((unit *)u)->items, itype, amount); - ADDMSG(&u->faction->msgs, msg_message("lucky_item", - "unit item amount", u, itype->rtype, amount)); -#endif -} - - -static void -lucky_event(const faction *f) -{ - const unit *u = random_unit_in_faction(f); - - if(!u) return; - - switch(rng_int()%3) { - case 0: - lucky_silver(u); - break; - case 1: - lucky_item(u); - break; - case 2: - lucky_magic_item(u); - break; - } -} - -void -check_luck(void) -{ - faction *f; - - for(f=factions; f; f=f->next) { - if(rng_int()%100 < STANDARD_LUCK+fspecial(f, FS_LUCKY)*8) - lucky_event(f); - } -} -#endif /* KARMA_MODULE */ diff --git a/src/common/gamecode/luck.h b/src/common/gamecode/luck.h deleted file mode 100644 index bf98ab2e7..000000000 --- a/src/common/gamecode/luck.h +++ /dev/null @@ -1,35 +0,0 @@ -/* vi: set ts=2: - * - * - * Eressea PB(E)M host Copyright (C) 1998-2003 - * Christian Schlittchen (corwin@amber.kn-bremen.de) - * Katja Zedel (katze@felidae.kn-bremen.de) - * Henning Peters (faroul@beyond.kn-bremen.de) - * Enno Rehling (enno@eressea.de) - * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) - * - * based on: - * - * Atlantis v1.0 13 September 1993 Copyright 1993 by Russell Wallace - * Atlantis v1.7 Copyright 1996 by Alex Schröder - * - * This program may not be used, modified or distributed without - * prior permission by the authors of Eressea. - * This program may not be sold or used commercially without prior written - * permission from the authors. - */ - -#ifndef H_GC_LUCK -#define H_GC_LUCK -#ifdef __cplusplus -extern "C" { -#endif - -extern void check_luck(void); - - -#ifdef __cplusplus -} -#endif -#endif - diff --git a/src/common/gamecode/randenc.c b/src/common/gamecode/randenc.c index 86017c9e5..e54cbfe06 100644 --- a/src/common/gamecode/randenc.c +++ b/src/common/gamecode/randenc.c @@ -24,7 +24,6 @@ #include "randenc.h" #include "economy.h" -#include "luck.h" #include "monster.h" /* kernel includes */ @@ -35,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -618,11 +616,7 @@ drown(region *r) unit ** up = up=&r->units; while (*up) { unit *u = *up; -#if KARMA_MODULE - int amphibian_level = fspecial(u->faction, FS_AMPHIBIAN); -#else int amphibian_level = 0; -#endif if (u->ship || u->race == new_race[RC_SPELL] || u->number==0) { up=&u->next; continue; @@ -1127,30 +1121,6 @@ icebergs(void) } } -#if KARMA_MODULE -static void -karma_update(void) -{ - faction * f; - /* lycanthropen werden werwölfe */ - for (f = factions; f; f=f->next) { - if (f->alive) { - int level = fspecial(f, FS_LYCANTROPE); - if (level > 0) { - unit * u; - for(u = f->units; u; u=u->nextF) { - if (rng_int()%100 < 2*level) { - ADDMSG(&u->faction->msgs, - msg_message("becomewere", "unit region", u, u->region)); - fset(u, UFL_WERE); - } - } - } - } - } -} -#endif - #ifdef HERBS_ROT static void rotting_herbs(void) @@ -1286,10 +1256,6 @@ randomevents(void) } } -#if KARMA_MODULE - karma_update(); -#endif - /* Chaos */ for (r = regions; r; r = r->next) { int i; @@ -1308,7 +1274,4 @@ randomevents(void) dissolve_units(); check_split(); -#if KARMA_MODULE - check_luck(); -#endif /* KARMA_MODULE */ } diff --git a/src/common/gamecode/report.c b/src/common/gamecode/report.c index 90aeb3217..1bf5199df 100644 --- a/src/common/gamecode/report.c +++ b/src/common/gamecode/report.c @@ -42,7 +42,6 @@ #include #include #include -#include #include #include #include @@ -1980,28 +1979,6 @@ report_plaintext(const char * filename, report_context * ctx, const char * chars centre(F, alliancename(f->alliance), true); } -#if KARMA_MODULE - buf[0] = 0; - dh = 0; - for (a=a_find(f->attribs, &at_faction_special); a && a->type==&at_faction_special; a=a->next) { - char buf2[80]; - dh++; - if (fspecials[a->data.sa[0]].maxlevel != 100) { - sprintf(buf2, "%s (%d)", fspecials[a->data.sa[0]].name, a->data.sa[1]); - } else { - sprintf(buf2, "%s", fspecials[a->data.sa[0]].name); - } - if(dh > 1) strcat(buf, ", "); - strcat(buf, buf2); - } - if(dh > 0) centre(F, buf, true); - - if (f->karma > 0) { - sprintf(buf, "Deine Partei hat %d Karma.", f->karma); - centre(F, buf, true); - } -#endif - if (f->age <= 2) { const char * s; if (f->age <= 1) { diff --git a/src/common/gamecode/spy.c b/src/common/gamecode/spy.c index b04934ae7..a89b0c56f 100644 --- a/src/common/gamecode/spy.c +++ b/src/common/gamecode/spy.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -170,44 +169,6 @@ spy_cmd(unit * u, struct order * ord) return 0; } -int -setwere_cmd(unit *u, struct order * ord) -{ -#if KARMA_MODULE - int level = fspecial(u->faction, FS_LYCANTROPE); - const char *s; - - if (!level) { - cmistake(u, ord, 311, MSG_EVENT); - return 0; - } - - init_tokens(ord); - skip_token(); - s = getstrtoken(); - - if (s == NULL || *s == '\0') { - if(fval(u, UFL_WERE)) { - cmistake(u, ord, 309, MSG_EVENT); - } else if(rng_int()%100 < 35+(level-1)*20) { /* 35, 55, 75, 95% */ - fset(u, UFL_WERE); - } else { - cmistake(u, ord, 311, MSG_EVENT); - } - } else if (findparam(s, u->faction->locale) == P_NOT) { - if(fval(u, UFL_WERE)) { - cmistake(u, ord, 310, MSG_EVENT); - } else if(rng_int()%100 < 90-level*20) { /* 70, 50, 30, 10% */ - freset(u, UFL_WERE); - } else { - cmistake(u, ord, 311, MSG_EVENT); - } - - } -#endif /* KARMA_MODULE */ - return 0; -} - void set_factionstealth(unit * u, faction * f) { @@ -328,43 +289,6 @@ setstealth_cmd(unit * u, struct order * ord) /* TARNE ALLES (was nicht so alles geht?) */ u_seteffstealth(u, -1); break; -#if KARMA_MODULE - case P_NUMBER: - /* TARNE ANZAHL [NICHT] */ - if (!fspecial(u->faction, FS_HIDDEN)) { - cmistake(u, ord, 277, MSG_EVENT); - return 0; - } - s = getstrtoken(); - if (findparam(s, u->faction->locale) == P_NOT) { - attrib * a = a_find(u->attribs, &at_fshidden); - if (a==NULL) a->data.ca[0] = 0; - if (a->data.i == 0) a_remove(&u->attribs, a); - } else { - attrib * a = a_find(u->attribs, &at_fshidden); - if (a!=NULL) a = a_add(&u->attribs, a_new(&at_fshidden)); - a->data.ca[0] = 1; - } - break; -#endif /* KARMA_MODULE */ -#if KARMA_MODULE - case P_ITEMS: - /* TARNE GEGENSTÄNDE [NICHT] */ - if(!fspecial(u->faction, FS_HIDDEN)) { - cmistake(u, ord, 277, MSG_EVENT); - return 0; - } - if (findparam(s, u->faction->locale) == P_NOT) { - attrib * a = a_find(u->attribs, &at_fshidden); - if (a!=NULL) a->data.ca[1] = 0; - if (a->data.i == 0) a_remove(&u->attribs, a); - } else { - attrib * a = a_find(u->attribs, &at_fshidden); - if (a==NULL) a = a_add(&u->attribs, a_new(&at_fshidden)); - a->data.ca[1] = 1; - } - break; -#endif /* KARMA_MODULE */ case P_NOT: u_seteffstealth(u, -1); break; diff --git a/src/common/gamecode/spy.h b/src/common/gamecode/spy.h index 1da63aab5..cc75406ee 100644 --- a/src/common/gamecode/spy.h +++ b/src/common/gamecode/spy.h @@ -29,7 +29,6 @@ struct unit; struct region; struct strlist; -extern int setwere_cmd(struct unit * u, struct order * ord); extern int setstealth_cmd(struct unit * u, struct order * ord); extern int spy_cmd(struct unit * u, struct order * ord); extern int sabotage_cmd(struct unit * u, struct order * ord); diff --git a/src/common/gamecode/study.c b/src/common/gamecode/study.c index 57465137b..e9037ae6d 100644 --- a/src/common/gamecode/study.c +++ b/src/common/gamecode/study.c @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -708,21 +707,6 @@ learn_cmd(unit * u, order * ord) change_effect(u, oldpotiontype[P_FOOL], -l); } - #if KARMA_MODULE - l = fspecial(u->faction, FS_WARRIOR); - if (l > 0) { - if (sk == SK_CROSSBOW || sk == SK_LONGBOW - || sk == SK_CATAPULT || sk == SK_MELEE || sk == SK_SPEAR - || sk == SK_STAMINA || sk == SK_WEAPONLESS) - { - teach->value += u->number * 5 * (l+1); - } else { - teach->value -= u->number * 5 * (l+1); - teach->value = MAX(0, teach->value); - } - } - #endif /* KARMA_MODULE */ - if (p != studycost) { /* ist_in_gebaeude(r, u, BT_UNIVERSITAET) == 1) { */ /* p ist Kosten ohne Uni, studycost mit; wenn diff --git a/src/common/gamecode/xmlreport.c b/src/common/gamecode/xmlreport.c index d0b5bacf9..f428f9417 100644 --- a/src/common/gamecode/xmlreport.c +++ b/src/common/gamecode/xmlreport.c @@ -36,7 +36,6 @@ without prior permission by the authors of Eressea. #include #include #include -#include #include #include #include diff --git a/src/common/kernel.vcproj b/src/common/kernel.vcproj index 35d82090c..ccd704235 100644 --- a/src/common/kernel.vcproj +++ b/src/common/kernel.vcproj @@ -277,14 +277,6 @@ RelativePath=".\kernel\item.h" > - - - - diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index 160f525f3..04b81e705 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -27,7 +27,6 @@ #include "faction.h" #include "group.h" #include "item.h" -#include "karma.h" #include "magic.h" #include "message.h" #include "move.h" @@ -1104,13 +1103,6 @@ terminate(troop dt, troop at, int type, const char *damage, boolean missile) ++at.fighter->hits; #endif -#if KARMA_MODULE - if (fval(au, UFL_WERE)) { - int level = fspecial(du->faction, FS_LYCANTROPE); - da += level; - } -#endif /* KARMA_MODULE */ - switch (type) { case AT_STANDARD: weapon = select_weapon(at, true, missile); @@ -1156,14 +1148,6 @@ terminate(troop dt, troop at, int type, const char *damage, boolean missile) /* Momentan nur Trollgürtel und Werwolf-Eigenschaft */ am = select_magicarmor(dt); -#if KARMA_MODULE - if(fval(du, UFL_WERE)) { - /* this counts as magical armor */ - int level = fspecial(du->faction, FS_LYCANTROPE); - am += level; - } -#endif /* KARMA_MODULE */ - #if CHANGED_CROSSBOWS if (awtype && fval(awtype, WTF_ARMORPIERCING)) { /* crossbows */ @@ -1189,22 +1173,6 @@ terminate(troop dt, troop at, int type, const char *damage, boolean missile) ar += am; if (type!=AT_COMBATSPELL && type!=AT_SPELL) { -#if KARMA_MODULE - int faerie_level = fspecial(du->faction, FS_FAERIE); - - da += jihad(au->faction, du->race); - if (type == AT_STANDARD && faerie_level) { - int c; - - for (c=0;weapon->type->itype->construction->materials[c].number; c++) { - if(weapon->type->itype->construction->materials[c].rtype == oldresourcetype[R_IRON]) { - da += faerie_level; - break; - } - } - } -#endif /* KARMA_MODULE */ - if (damage_rules&DAMAGE_CRITICAL) { double kritchance = (sk * 3 - sd) / 200.0; @@ -1905,13 +1873,6 @@ skilldiff(troop at, troop dt, int dist) skdiff += 5; } -#if KARMA_MODULE - /* Werwolf */ - if(fval(au, UFL_WERE)) { - skdiff += fspecial(au->faction, FS_LYCANTROPE); - } -#endif /* KARMA_MODULE */ - if (au->race == new_race[RC_GOBLIN]) { static int goblin_bonus = -1; if (goblin_bonus<0) goblin_bonus = get_param_int(global.parameters, "rules.combat.goblinbonus", 10); @@ -1920,11 +1881,6 @@ skilldiff(troop at, troop dt, int dist) } } -#if KARMA_MODULE - /* TODO this should be a skillmod */ - skdiff += jihad(au->faction, du->race); -#endif - if (df->building) { boolean init = false; static const curse_type * strongwall_ct, * magicwalls_ct; @@ -2695,16 +2651,6 @@ aftermath(battle * b) unit *du = df->unit; int dead = dead_fighters(df); int pr_mercy = 0; -#if KARMA_MODULE - const attrib *a= a_find(du->attribs, &at_prayer_effect); - - while (a && a->type==&at_prayer_effect) { - if (a->data.sa[0] == PR_MERCY) { - pr_mercy = a->data.sa[1]; - } - a = a->next; - } -#endif /* KARMA_MODULE */ #ifdef TROLLSAVE /* Trolle können regenerieren */ @@ -3357,15 +3303,6 @@ make_fighter(battle * b, unit * u, side * s1, boolean attack) /* Effekte von Artefakten */ strongmen = MIN(fig->unit->number, get_item(u, I_TROLLBELT)); -#if KARMA_MODULE - for (a = a_find(u->attribs, &at_prayer_effect); a && a->type==&at_prayer_effect; a = a->next) { - if (a->data.sa[0] == PR_AID) { - pr_aid = true; - break; - } - } -#endif /* KARMA_MODULE */ - /* Hitpoints, Attack- und Defence-Boni für alle Personen */ for (i = 0; i < fig->alive; i++) { assert(i < fig->unit->number); @@ -4414,18 +4351,6 @@ do_battle(region * r) battle_update(b); battle_attacks(b); -#if KARMA_MODULE - /* Regeneration */ - for (fi=0;fi!=b->nfighters;++fi) { - fighter *fig = b->fighters[fi]; - - if (fspecial(fig->unit->faction, FS_REGENERATION)) { - fig->fighting = fig->alive - fig->removed; - if (fig->fighting == 0) continue; - do_regenerate(fig); - } - } -#endif /* KARMA_MODULE */ } if (verbosity>0) log_stdio(stdout, "\n"); diff --git a/src/common/kernel/building.c b/src/common/kernel/building.c index 818a56340..c4f026308 100644 --- a/src/common/kernel/building.c +++ b/src/common/kernel/building.c @@ -379,12 +379,6 @@ static int eressea_building_protection(building * b, unit * u) int beff = buildingeffsize(b, false)-1; /* -1 because the tradepost has no protection value */ -#if KARMA_MODULE - if (fspecial(u->faction, FS_SAPPER)) { - /* Halbe Schutzwirkung, aufgerundet */ - beff = (beff+1)/2; - } -#endif /* KARMA_MODULE */ return beff; } diff --git a/src/common/kernel/config.c b/src/common/kernel/config.c index d5154849c..26a41107f 100644 --- a/src/common/kernel/config.c +++ b/src/common/kernel/config.c @@ -36,7 +36,6 @@ #include "faction.h" #include "group.h" #include "item.h" -#include "karma.h" #include "magic.h" #include "message.h" #include "move.h" @@ -556,9 +555,6 @@ max_magicians(const faction * f) m = a->data.i; } if (f->race == new_race[RC_ELF]) ++m; -#if KARMA_MODULE - m += fspecial(f, FS_MAGOCRACY) * 2; -#endif /* KARMA_MODULE */ return m; } @@ -2429,7 +2425,6 @@ int weight(const unit * u) { int w, n = 0, in_bag = 0; - int faerie_level = 0; item * itm; for (itm=u->items;itm;itm=itm->next) { @@ -2439,15 +2434,7 @@ weight(const unit * u) in_bag += w; } -#if KARMA_MODULE - faerie_level = fspecial(u->faction, FS_FAERIE); -#endif /* KARMA_MODULE */ - - if (faerie_level) { - n += (u->number * u->race->weight)/(1+faerie_level); - } else { - n += u->number * u->race->weight; - } + n += u->number * u->race->weight; w = get_item(u, I_BAG_OF_HOLDING) * BAGCAPACITY; if( w > in_bag ) @@ -2522,14 +2509,6 @@ lifestyle(const unit * u) if (pl && fval(pl, PFL_NOFEED)) return 0; -#if KARMA_MODULE - if(fspecial(u->faction, FS_REGENERATION)) - need += 1; - if(fspecial(u->faction, FS_ADMINISTRATOR)) - need += 1; - if(fspecial(u->faction, FS_WYRM) && u->race == new_race[RC_WYRM]) - need *= 500; -#endif /* KARMA_MODULE */ return need; } @@ -2809,11 +2788,6 @@ default_wage(const region *r, const faction * f, const race * rc, int in_turn) index = 1; } wage = wagetable[esize][index]; -#if KARMA_MODULE - if (fspecial(f, FS_URBAN)) { - wage += wagetable[esize][3]; - } -#endif /* KARMA_MODULE */ } else { if (is_mourning(r, in_turn)) { wage = 10; @@ -3129,13 +3103,6 @@ attrib_init(void) at_register(&at_guard); at_register(&at_group); -#if KARMA_MODULE - at_register(&at_faction_special); - at_register(&at_prayer_timeout); - at_register(&at_wyrm); - at_register(&at_jihad); -#endif /* KARMA_MODULE */ - at_register(&at_building_generic_type); at_register(&at_maxmagicians); at_register(&at_npcfaction); diff --git a/src/common/kernel/faction.h b/src/common/kernel/faction.h index eeace9528..b76d19392 100644 --- a/src/common/kernel/faction.h +++ b/src/common/kernel/faction.h @@ -86,9 +86,6 @@ typedef struct faction { int money; #if SCORE_MODULE int score; -#endif -#if KARMA_MODULE - int karma; #endif struct alliance * alliance; #ifdef VICTORY_DELAY diff --git a/src/common/kernel/karma.c b/src/common/kernel/karma.c deleted file mode 100644 index 348bfc10b..000000000 --- a/src/common/kernel/karma.c +++ /dev/null @@ -1,606 +0,0 @@ -/* vi: set ts=2: - * - * Eressea PB(E)M host Copyright (C) 1998-2003 - * Christian Schlittchen (corwin@amber.kn-bremen.de) - * Katja Zedel (katze@felidae.kn-bremen.de) - * Henning Peters (faroul@beyond.kn-bremen.de) - * Enno Rehling (enno@eressea.de) - * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) - * - * This program may not be used, modified or distributed without - * prior permission by the authors of Eressea. - */ - -/* TODO: enum auf fst_ umstellen. Pointer auf Display-Routine */ -#include -#include - -#include "karma.h" - -/* kernel includes */ -#include "unit.h" -#include "save.h" -#include "race.h" -#include "region.h" -#include "item.h" -#include "group.h" -#include "order.h" -#include "pool.h" -#include "skill.h" -#include "faction.h" -#include "magic.h" -#include "message.h" - -/* util includes */ -#include -#include -#include - -/* libc includes */ -#include -#include - -attrib_type at_faction_special = { - "faction_special", NULL, NULL, NULL, a_writeshorts, a_readshorts -}; - -int -age_prayer_timeout(attrib *a) { - return (--a->data.sa[0]>0)?AT_AGE_KEEP:AT_AGE_REMOVE; -} - -attrib_type at_prayer_timeout = { - "prayer_timeout", NULL, NULL, age_prayer_timeout, a_writeshorts, a_readshorts -}; - -attrib_type at_prayer_effect = { - "prayer_effect", NULL, NULL, NULL, NULL, NULL -}; - -attrib_type at_wyrm = { - "wyrm", NULL, NULL, NULL, a_writeint, a_readint -}; - -attrib_type at_fshidden = { - "fshidden", NULL, NULL, NULL, a_writeint, a_readint -}; - -attrib_type at_jihad = { - "jihad", NULL, NULL, NULL, a_writeshorts, a_readshorts -}; - -#if KARMA_MODULE -struct fspecialdata fspecials[MAXFACTIONSPECIALS] = { - { - "Regeneration", - "Personen in einer Partei mit dieser Eigenschaft heilen jeden " - "Schaden innerhalb einer Woche und zusätzlich in jeder Kampfrunde " - "HP entsprechend ihres Ausdauer-Talents. Sie benötigen jedoch 11 " - "Silber Unterhalt pro Woche.", - 1 - }, - { /* TODO: Für alte Parteien zu stark */ - "Städter", - "Personen einer Partei mit dieser Eigenschaft lieben die Städte und " - "verabscheuen das Leben in der freien Natur. Ihr Arbeitlohn verändert " - "sich in Abhängigkeit vom größten Gebäude in der Region. Ist es eine " - "Zitadelle so erhalten sie 2 Silber mehr pro Runde, bei einer Festung " - "1 Silber mehr. Bei einer Burg bekommen sie den normalen Arbeitslohn, " - "bei einem Turm 1 Silber, bei einer Befestigung 3 Silber weniger. Gibt " - "es kein entsprechendes Gebäude in der Region, verringert sich ihr " - "Arbeitslohn um 5 Silber.", - 1 - }, - { - "Barbar", - "Einheiten dieser Partei erhalten durch Lernen von Waffentalenten " - "(Taktik und Reiten zählen nicht dazu!) 40 statt 30 Lerntage. Weitere " - "Stufen erhöhen den Bonus um 5 Lerntage. Die Fokussierung auf das " - "Kriegerdasein führt jedoch zu Problemen, andere Talente zu erlernen. " - "In allen nichtkriegerischen Talenten einschließlich Magie und Taktik " - "erhalten sie die entsprechende Anzahl von Lerntagen weniger pro " - "Lernwoche.", - 100 - }, - /* TODO: Noch nicht so implementiert. */ - { - "Wyrm", - "Eine Partei mit dieser Eigenschaft kann einen ihrer Magier mit Hilfe " - "eines speziellen Zaubers permanent in einen Drachen verwandeln. Der " - "Drache ist zunächst jung, kann sich jedoch durch Lernen des speziellen " - "Talents 'Drachenwesen' in einen größeren Drachen verwandeln. Um zu " - "einem ausgewachsenen Drachen zu werden benötigt der verwandelte Magier " - "die Talentstufe 6, um zu einem Wyrm zu werden die Talentstufe 12. " - "Ein junger Drache benötigt 1000 Silber Unterhalt pro Woche, ein " - "ausgewachsener Drache 5000 und ein Wyrm 10000 Silber. Bekommt er " - "dieses Silber nicht, besteht eine Wahrscheinlichkeit, das er desertiert!", - 100 - }, - /* TODO: Relativ sinnlose Eigenschaft. */ - { - "Miliz", - "Alle Personen dieser Partei beginnen mit 30 Talenttagen in allen " - "Waffentalenten, in denen ihre Rasse keinen Malus hat. Zusätzliche " - "Stufen bringen jeweils einen zusätzlichen Talentpunkt.", - 100 - }, - { /* Ohne Schiffsunterhaltskosten schwache Eigenschaft. */ - /* Aufpassen: Tragkraft? */ - "Feenreich", - "Alle Personen dieser Partei wiegen nur noch die Hälfte ihres normalen " - "Gewichtes. Die Nähe zum Feenreich macht sie jedoch besonders " - "anfällig gegen Waffen aus Eisen, bei einem Treffer durch eine " - "solche Waffe nehmen sie einen zusätzlichen Schadenspunkt. Zusätzliche " - "Stufen dieser Eigenschaft verringern das Gewicht auf 1/3, 1/4, ... und " - "erhöhen den Schaden durch Eisenwaffen um einen weiteren Punkt.", - 100 - }, - { - "Administrator", - "Das Einheitenlimit einer Partei mit dieser Eigenschaft erhöht sich um " - "400 Einheiten. Leider verschlingt der Verwaltungsaufwand viel Silber, " - "so dass sich der Unterhalt pro Person um 1 Silberstück erhöht. Weitere " - "Stufen der Eigenschaft erhöhen das Limit um weitere 400 Einheiten und " - "den Unterhalt um ein weiteres Silberstück.", - 100 - }, - /* TODO: Noch nicht so implementiert */ - { - "Telepath", - "Der Geist fremder Personen bleibt den Magiern einer Partei mit dieser " - "Eigenschaft nicht verschlossen. Fremde Einheiten erscheinen im Report " - "wie eigene Einheiten, mit allen Talentwerten und Gegenständen. Leider " - "führt eine so intensive Beschäftigung mit dem Geistigen zur körperlichen " - "Verkümmerung, und die Partei erhält -1 auf alle Talente außer " - "Alchemie, Kräuterkunde, Magie, Spionage, Tarnung und Wahrnehmung. Wird " - "diese Eigenschaft ein zweites Mal erworben, so bleibt die Wirkung nicht " - "auf Magier beschränkt, sondern alle Einheiten einer Partei können " - "die Talente und Gegenstände aller fremden Einheiten sehen. Allerdings " - "gibt es in beiden Fällen eine Einschränkung: Die Einheit muß sich einen " - "Monat lang auf die psychischen Ströme einer Region einstellen, bevor " - "sie in der Lage ist, die Gedanken der anderen zu lesen.", - 2 - }, - { - "Amphibium", - "Einheiten dieser Partei können durch Ozeanfelder laufen. Allerdings " - "nehmen sie 10 Schadenspunkte, wenn sie am Ende einer Woche in einem " - "Ozeanfeld stehen. Pferde weigern sich, in ein Ozeanfeld zu laufen. " - "Zusätzliche Stufen dieser Eigenschaft reduzieren den Schaden um jeweils " - "5 Punkte. Achtung: Auf dem Ozean wird kein Schaden regeneriert.", - 3 - }, - /* TODO: negative Eigenschaft */ - { - "Magokrat", - "Eine Partei mit dieser Eigenschaft hat eine so hohe magische " - "Affinität, dass sie pro Stufe der Eigenschaft zwei zusätzlich " - "Magier ausbilden kann.", - 100 - }, - /* TODO: negative Eigenschaft, vergleichsweise schwach */ - { - "Sappeur", - "Befestigungen wirken gegen Einheiten einer Partei mit dieser " - "Eigenschaft nur mit ihrer halben Schutzwirkung (aufgerundet).", - 1 - }, - /* TODO: Noch nicht implementiert */ - { - "Springer", - "Einheiten einer Partei mit dieser Eigenschaft können sich mit " - "Hilfe eines speziellen Befehls über eine Entfernung von zwei " - "Regionen teleportieren. Einheiten, die sich so teleportieren, " - "bleiben jedoch für einige Wochen instabil und können sich in " - "seltenen Fällen selbständig in eine zufällige Nachbarregion " - "versetzen. Zusätzliche Stufen erhöhen die Reichweite um jeweils " - "eine Region, erhöhen jedoch die Wahrscheinlichkeit eines zufälligen " - "Versetzens geringfügig.", - 100 - }, - { - /* Evt. zwei Stufen draus machen */ - "Versteckt", - "Eine Partei mit dieser Eigenschaft hat die Fähigkeit zu Tarnung " - "zur Perfektion getrieben. Jede Einheit mit mindestens Tarnung 3 " - "versteckt alle ihre Gegenstände so, daß sie von anderen Parteien " - "nicht mehr gesehen werden können. Jede Einheit mit mindestens Tarnung 6 " - "schafft es auch, die Zahl der in ihr befindlichen Personen zu verbergen. " - "Um diese Eigenschaft steuern zu können, stehen diesen Parteien die " - "Befehle TARNE ANZAHL [NICHT] und TARNE GEGENSTÄNDE [NICHT] zur " - "Verfügung.", - 1 - }, - /* TODO: Noch nicht implementiert */ - { - "Erdelementarist", - "Alle Gebäude dieser Partei sind von Erdelementaren beseelt und können " - "sich mit Hilfe eines speziellen Befehls jede Woche um eine Region " - "bewegen. Dies macht es den Bewohnern - welche alle einer Partei mit " - "dieser Eigenschaft angehören müssen - jedoch unmöglich, in dieser " - "Woche ihren normalen Tätigkeiten nachzugehen.", - 1 - }, - { - "Magische Immunität", - "Eine Partei mit dieser Eigenschaft ist völlig immun gegen alle Arten " - "von Magie. Allerdings verlieren die Magier einer solchen Partei ihre " - "Fähigkeit, Aura zu regenerieren, völlig.", - 1 - }, - /* TODO: Noch nicht implementiert */ - { - "Vielseitige Magie", - "Eine Partei mit dieser Eigenschaft kann einen ihrer Magier in einem " - "anderen als dem Parteimagiegebiet ausbilden. Weitere Stufen ermöglichen " - "jeweils einem weiteren Magier das Lernen eines anderen Gebiets.", - 100 - }, - { - "Jihad", - "Eine Partei mit dieser Eigenschaft kann eine (Spieler)-Rasse " - "mit dem speziellen kurzen Befehl JIHAD zum Feind erklären. " - "Bei einem Kampf gegen einen Angehörigen dieser Rasse bekommen ihre " - "Kämpfer grundsätzlich einen Bonus von +1 auf Angriff und Schaden. " - "Allerdings kann es zu spontanen Pogromen gegen Angehörige der mit einem " - "Jihad belegten Rasse kommen. Wird die Eigenschaft mehrmals erworben " - "können entweder mehrere Rassen mit einem Jihad belegt werden, " - "oder eine Rasse mehrfach, in diesem Fall addiert sich die Wirkung. " - "Ein einmal erklärter Jihad kann nicht wieder rückgängig gemacht " - "werden.", - 100 - }, - /* TODO: is_undead() und Sonderbehandlungen von Untoten */ - /* in dieser Form ultimative Eigenschaft für Orks */ - { - "Untot", - "Personen einer Partei mit dieser Eigenschaft bekommen automatisch doppelt " - "soviele Trefferpunkte wie normale Angehörige der entsprechenden Rasse, " - "verlieren jedoch ihre Fähigkeit zur Regeneration erlittenen Schadens " - "komplett.", - 1 - }, - { - "Windvolk", - "Ein solches Volk ist sehr athletisch und die Kinder üben besonders " - "den Langstreckenlauf von kleinauf. Nach jahrelangem Training sind " - "sie dann in der Lage, sich zu Fuß so schnell zu bewegen als würden " - "sie reiten. Allerdings hat das jahrelange Konditionstraining ihre " - "Kräfte schwinden lassen, und ihre Tragkraft ist um 2 Gewichtseinheiten " - "verringert.", - 1 - }, - { - "Glück", - "Diese Eigenschaft bewirkt, das der Partei gelegentlich positive " - "Ereignisse zustoßen. Dies können spontane Verbesserungen des " - "Wissensstandes, ein Fund wertvoller Gegenstände oder ähnliches " - "sein. Je häufiger diese Eigenschaft erworben wird, desto größer die " - "Wahrscheinlichkeit für solche Ereignisse, und desto postiver ihre " - "Auswirkungen.", - 100 - }, - { - "Lykanthrop", - "Angehörige einer Partei mit dieser Eigenschaft sind Werwesen. Einheiten " - "einer solchen Partei können sich mit Hilfe der langen Befehle 'WERWESEN' und " - "'WERWESEN NICHT' in eine andere Form verwandeln. Beide Befehle haben " - "nur eine gewisse Erfolgswahrscheinlichkeit und funktionieren nicht immer: " - "Je höher die Stufe der Eigenschaft, desto größer die Wahrscheinlichkeit, " - "dass die Verwandlung gelingt, und je geringer die Chance, sich " - "zurückzuverwandeln. Zudem besteht eine zunehmende kleine Chance der " - "spontanen Verwandlung. In Werform erhalten die Einheiten einen Bonus auf " - "Angriff, Schaden und natürliche Rüstung in Höhe der Eigenschaft. Sie " - "benutzen jedoch keine Pferde im Kampf, und verwenden als Rüstungen nur " - "Schilde. Sie sind eingeschränkt und können in Werform kein Geld verdienen, " - "nicht Zaubern und nicht Lernen oder Lehren.", - 4 - }, - /* TODO: Noch nicht implementiert */ - { - "Elite", - "Für eine Partei mit dieser Eigenschaft verdoppeln sich alle Boni- und " - "Mali ihrer Rasse. Ihre Unterhaltskosten erhöhen sich auf 12 Silber pro " - "Runde, ihr Einheitenlimit reduziert sich auf 25%%. Diese Eigenschaft " - "kann nicht erworben werden, wenn die Partei nach dem Erwerb zuviele " - "Einheiten hätte.", - 1 - } -}; - -void -buy_special(unit *u, struct order * ord, fspecial_t special) -{ - int count = 0; - int cost; - attrib *a, *a2 = NULL; - faction *f = u->faction; - - /* Kosten berechnen */ - - for(a=a_find(f->attribs, &at_faction_special); a && a->type==&at_faction_special; a=a->next) { - count += a->data.sa[1]; - if(a->data.sa[0] == special) a2 = a; - } - - cost = (int)(100 * pow(3, count)); - - /* Prüfen, ob genug Karma vorhanden. */ - - if(f->karma < cost) { - cmistake(u, ord, 250, MSG_EVENT); - return; - } - - /* Alles ok, attribut geben */ - - if (a2) { - if(a2->data.sa[1] < fspecials[special].maxlevel) { - a2->data.sa[1]++; - ADDMSG(&f->msgs, msg_message("new_fspecial_level", - "special level", special, a2->data.sa[1])); - } else { - cmistake(u, ord, 251, MSG_EVENT); - return; - } - } else { - a2 = a_add(&f->attribs, a_new(&at_faction_special)); - a2->data.sa[0] = (short)special; - a2->data.sa[1] = 1; - ADDMSG(&f->msgs, msg_message("new_fspecial", "special", special)); - } -} - -int -fspecial(const faction *f, fspecial_t special) -{ - attrib *a; - - for (a=a_find(f->attribs, &at_faction_special); a && a->type==&at_faction_special; a=a->next) { - if(a->data.sa[0] == special) return a->data.sa[1]; - } - return 0; -} - -static int -sacrifice_cmd(unit * u, struct order * ord) -{ - int n = 1, karma; - const char *s; - - init_tokens(ord); - skip_token(); - s = getstrtoken(); - - if (s && *s) n = atoi(s); - if (n <= 0) { - cmistake(u, ord, 252, MSG_EVENT); - return 0; - } - - s = getstrtoken(); - - switch(findparam(s, u->faction->locale)) { - case P_MONEY: - n = use_pooled(u, oldresourcetype[R_SILVER], GET_DEFAULT, n); - if(n < 10000) { - cmistake(u, ord, 51, MSG_EVENT); - return 0; - } - change_resource(u, oldresourcetype[R_SILVER], n); - karma = n/10000; - u->faction->karma += karma; - break; - - case P_AURA: - if(!is_mage(u)) { - cmistake(u, ord, 214, MSG_EVENT); - return 0; - } - if (get_level(u, SK_MAGIC) < 10) { - cmistake(u, ord, 253, MSG_EVENT); - return 0; - } - n = MIN(get_spellpoints(u), min(max_spellpoints(u->region, u), n)); - if(n <= 0) { - cmistake(u, ord, 254, MSG_EVENT); - return 0; - } - karma = n; - u->faction->karma += n; - change_maxspellpoints(u, -n); - break; - default: - cmistake(u, u->thisorder, 255, MSG_EVENT); - } - return 0; -} - -static int -prayer_cmd(unit * u, struct order * ord) -{ - region *r = u->region; - attrib *a, *a2; - unit *u2; - int karma_cost; - short mult = 1; - param_t p; - const char *s; - - init_tokens(ord); - skip_token(); - s = getstrtoken(); - - if (findparam(s, u->faction->locale) == P_FOR) s = getstrtoken(); - p = findparam(s, u->faction->locale); - - switch(p) { - case P_AURA: - if (!is_mage(u)) { - cmistake(u, ord, 214, MSG_EVENT); - return 0; - } - case P_AID: - case P_MERCY: - break; - default: - cmistake(u, ord, 256, MSG_EVENT); - return 0; - } - - a = a_find(u->faction->attribs, &at_prayer_timeout); - if (a) mult = (short)(2 * a->data.sa[1]); - karma_cost = 10 * mult; - - if (u->faction->karma < karma_cost) { - cmistake(u, ord, 250, MSG_EVENT); - return 0; - } - - u->faction->karma -= karma_cost; - - ADDMSG(&u->faction->msgs, msg_message("pray_success", "unit", u)); - - switch (p) { - case P_AURA: - set_spellpoints(u, max_spellpoints(u->region, u)); - break; - case P_AID: - for(u2 = r->units; u2; u2=u2->next) if(u2->faction == u->faction) { - a2 = a_add(&u->attribs, a_new(&at_prayer_effect)); - a2->data.sa[0] = PR_AID; - a2->data.sa[1] = 1; - } - break; - case P_MERCY: - for(u2 = r->units; u2; u2=u2->next) if(u2->faction == u->faction) { - a2 = a_add(&u->attribs, a_new(&at_prayer_effect)); - a2->data.sa[0] = PR_MERCY; - a2->data.sa[1] = 80; - } - break; - } - - if(!a) a = a_add(&u->faction->attribs, a_new(&at_prayer_timeout)); - a->data.sa[0] = (short)(mult * 14); - a->data.sa[1] = (short)mult; - return 0; -} - -static int -jihad_cmd(unit * u, struct order * ord) -{ - faction *f = u->faction; - int can = fspecial(f, FS_JIHAD); - int has = 0; - const race * jrace; - race_t jrt; - attrib *a; - const char *s; - - for (a = a_find(f->attribs, &at_jihad); a && a->type==&at_jihad; a = a->next) { - has += a->data.sa[1]; - } - - if (has >= can) { - cmistake(u, ord, 280, MSG_EVENT); - return 0; - } - - init_tokens(ord); - skip_token(); - s = getstrtoken(); - - if (!s || !*s) { - cmistake(u, ord, 281, MSG_EVENT); - return 0; - } - - jrace = rc_find(s); - jrt = old_race(jrace); - - if (!playerrace(jrace)) { - cmistake(u, ord, 282, MSG_EVENT); - return 0; - } - - for (a = a_find(f->attribs, &at_jihad); a && a->type==&at_jihad; a = a->next) { - if (a->data.sa[0] == jrt) break; - } - - if (a) { - a->data.sa[1]++; - } else { - a = a_add(&f->attribs, a_new(&at_jihad)); - a->data.sa[0] = (short)jrt; - a->data.sa[1] = 1; - } - - add_message(&f->msgs, msg_message("setjihad", "race", jrace)); - return 0; -} - -int -jihad(faction *f, const race * rc) -{ - attrib *a; - race_t jrt = old_race(rc); - - for(a = a_find(f->attribs, &at_jihad); a && a->type==&at_jihad; a = a->next) { - if(a->data.sa[0] == jrt) return a->data.sa[1]; - } - return 0; -} - -void -jihad_attacks(void) -{ - faction *f; - region *r; - unit *u, *u2; - ally *sf, **sfp; - - for(f=factions; f; f=f->next) if(fspecial(f, FS_JIHAD)) { - region * last = lastregion(f); - for (r=firstregion(f); r != last; r = r->next) if (rng_int()%1000 <= 1) { - boolean doit = false; - - for(u=r->units; u; u=u->next) if(jihad(f, u->race)) { - doit = true; - break; - } - - if(doit == false) continue; - - log_printf("-->> Pogrom durch %s in %s\n", factionid(f), regionname(r, NULL)); - - for(u2 = r->units; u; u=u->next) if(u2->faction == f) { - for(u=r->units; u; u=u->next) if(jihad(f, u->race)) { - /* Allianz auflösen */ - sfp = &u2->faction->allies; - if (fval(u, UFL_GROUP)) { - attrib * a = a_find(u2->attribs, &at_group); - if (a) sfp = &((group*)a->data.v)->allies; - } - - for (sf=*sfp; sf; sf = sf->next) { - if(sf->faction == u->faction) break; - } - - if (sf) sf->status = sf->status & (HELP_ALL - HELP_FIGHT); - - addlist(&u2->orders, create_order(K_ATTACK, u->faction->locale, "%i", u->no)); - } - } - } - } -} - -void -karma(void) -{ - parse(K_PRAY, prayer_cmd, false); - parse(K_SETJIHAD, jihad_cmd, false); - parse(K_SACRIFICE, sacrifice_cmd, true); -} -#endif diff --git a/src/common/kernel/karma.h b/src/common/kernel/karma.h deleted file mode 100644 index 0122d0ba1..000000000 --- a/src/common/kernel/karma.h +++ /dev/null @@ -1,76 +0,0 @@ -/* vi: set ts=2: - * - * Eressea PB(E)M host Copyright (C) 1998-2003 - * Christian Schlittchen (corwin@amber.kn-bremen.de) - * Katja Zedel (katze@felidae.kn-bremen.de) - * Henning Peters (faroul@beyond.kn-bremen.de) - * Enno Rehling (enno@eressea.de) - * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) - * - * This program may not be used, modified or distributed without - * prior permission by the authors of Eressea. - */ -#ifndef H_KRNL_KARMA -#define H_KRNL_KARMA -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - FS_REGENERATION, - FS_URBAN, - FS_WARRIOR, - FS_WYRM, - FS_MILITIA, - FS_FAERIE, - FS_ADMINISTRATOR, - FS_TELEPATHY, - FS_AMPHIBIAN, - FS_MAGOCRACY, - FS_SAPPER, - FS_JUMPER, - FS_HIDDEN, - FS_EARTHELEMENTALIST, - FS_MAGICIMMUNE, - FS_VARIEDMAGIC, - FS_JIHAD, - FS_UNDEAD, - FS_QUICK, - FS_LUCKY, - FS_LYCANTROPE, - FS_ELITE, - MAXFACTIONSPECIALS -} fspecial_t; - -#if KARMA_MODULE -typedef enum { - PR_AID, - PR_MERCY, - MAXPRAYEREFFECTS -} prayereffect_t; - -typedef struct fspecialdata { - const char *name; - const char *description; - const short maxlevel; -} fspecialdata; - -extern struct attrib_type at_faction_special; -extern struct attrib_type at_prayer_timeout; -extern struct attrib_type at_prayer_effect; -extern struct attrib_type at_wyrm; -extern struct attrib_type at_fshidden; -extern struct attrib_type at_jihad; - -extern struct fspecialdata fspecials[]; - -extern int fspecial(const struct faction *f, fspecial_t special); -extern void karma(void); -extern int jihad(struct faction *, const struct race *); -extern void jihad_attacks(void); -#endif - -#ifdef __cplusplus -} -#endif -#endif diff --git a/src/common/kernel/magic.c b/src/common/kernel/magic.c index 3480b1e15..be4476598 100644 --- a/src/common/kernel/magic.c +++ b/src/common/kernel/magic.c @@ -26,7 +26,6 @@ #include "curse.h" #include "faction.h" #include "item.h" -#include "karma.h" #include "message.h" #include "objtypes.h" #include "order.h" @@ -452,47 +451,6 @@ update_spellbook(faction * f, int level) } } -#if KARMA_MODULE -void wyrm_update(unit * u, struct sc_mage * mage, int sk) -{ - spell_list * slist, ** slistp; - /* Nur Wyrm-Magier bekommen den Wyrmtransformationszauber */ - spell * sp = find_spellbyid(M_GRAY, SPL_BECOMEWYRM); - - if (fspecial(u->faction, FS_WYRM) && !has_spell(u, sp) && sp->level<=sk) { - add_spell(mage, find_spellbyid(M_GRAY, SPL_BECOMEWYRM)); - } - - /* Transformierte Wyrm-Magier bekommen Drachenodem */ - if (dragonrace(u->race)) { - race_t urc = old_race(u->race); - switch (urc) { - /* keine breaks! Wyrme sollen alle drei Zauber können.*/ - case RC_WYRM: - sp = find_spellbyid(M_GRAY, SPL_WYRMODEM); - slistp = get_spelllist(mage, u->faction); - if (sp!=NULL && !has_spell(*slistp, sp) && sp->level<=sk) { - add_spell(slistp, sp); - } - case RC_DRAGON: - sp = find_spellbyid(M_GRAY, SPL_DRAGONODEM); - slistp = get_spelllist(mage, u->faction); - if (sp!=NULL && !has_spell(*slistp, sp) && sp->level<=sk) { - add_spell(slistp, sp); - } - case RC_FIREDRAGON: - sp = find_spellbyid(M_GRAY, SPL_FIREDRAGONODEM); - slistp = get_spelllist(mage, u->faction); - if (sp!=NULL && !has_spell(*slistp, sp) && sp->level<=sk) { - add_spell(slistp, sp); - } - break; - } - } - return slistp; -} -#endif - void updatespelllist(unit * u) { @@ -526,9 +484,6 @@ updatespelllist(unit * u) } } -#if KARMA_MODULE - wyrm_update(u, mage, sk); -#endif /* KARMA_MODULE */ } /* ------------------------------------------------------------- */ @@ -1259,9 +1214,6 @@ target_resists_magic(unit *magician, void *obj, int objtyp, int t_bonus) skill * sv; unit * u = (unit*)obj; -#if KARMA_MODULE - if (fspecial(u->faction, FS_MAGICIMMUNE)) return true; -#endif /* KARMA_MODULE */ at = effskill(magician, SK_MAGIC); for (sv = u->skills; sv != u->skills + u->skill_size; ++sv) { @@ -1492,10 +1444,6 @@ regeneration(unit * u) double potenz = 1.5; double divisor = 2.0; -#if KARMA_MODULE - if (fspecial(u->faction, FS_MAGICIMMUNE)) return 0; -#endif /* KARMA_MODULE */ - sk = effskill(u, SK_MAGIC); /* Rassenbonus/-malus */ d = pow(sk, potenz) * u->race->regaura / divisor; diff --git a/src/common/kernel/move.c b/src/common/kernel/move.c index 6ca51f2e1..4b26793d4 100644 --- a/src/common/kernel/move.c +++ b/src/common/kernel/move.c @@ -30,7 +30,6 @@ #include "curse.h" #include "faction.h" #include "item.h" -#include "karma.h" #include "magic.h" #include "message.h" #include "order.h" @@ -211,12 +210,6 @@ int personcapacity(const unit *u) { int cap = u->race->weight+u->race->capacity; - -#if KARMA_MODULE - if (fspecial(u->faction, FS_QUICK)) - cap -= 200; -#endif /* KARMA_MODULE */ - return cap; } @@ -399,9 +392,6 @@ canswim(unit *u) if (get_item(u, I_DOLPHIN) >= u->number && effskill(u, SK_RIDING) >= 4) return true; -#if KARMA_MODULE - if (fspecial(u->faction, FS_AMPHIBIAN)) return true; -#endif /* KARMA_MODULE */ if (u->race->flags & RCF_FLY) return true; if (u->race->flags & RCF_SWIM) return true; @@ -1350,10 +1340,6 @@ movement_speed(unit * u) default: mp = BP_WALKING; -#if KARMA_MODULE - /* faction special */ - if (fspecial(u->faction, FS_QUICK)) mp = BP_RIDING; -#endif /* KARMA_MODULE */ /* Siebenmeilentee */ if (get_effect(u, oldpotiontype[P_FAST]) >= u->number) { diff --git a/src/common/kernel/race.c b/src/common/kernel/race.c index d63b73ad8..4dfa011fb 100644 --- a/src/common/kernel/race.c +++ b/src/common/kernel/race.c @@ -32,7 +32,6 @@ #include "faction.h" #include "group.h" #include "item.h" -#include "karma.h" #include "magic.h" #include "names.h" #include "pathfinder.h" diff --git a/src/common/kernel/reports.c b/src/common/kernel/reports.c index 71e00f5d0..3df55e226 100644 --- a/src/common/kernel/reports.c +++ b/src/common/kernel/reports.c @@ -29,7 +29,6 @@ #include #include #include -#include #include #include #include @@ -439,13 +438,6 @@ bufunit(const faction * f, const unit * u, int indent, int mode, char * buf, siz itemcloak = curse_active(get_curse(u->attribs, itemcloak_ct)); } -#if KARMA_MODULE - if (fspecial(u->faction, FS_HIDDEN)) { - a_fshidden = a_find(u->attribs, &at_fshidden); - } - telepath_see = fspecial(f, FS_TELEPATHY); -#endif /* KARMA_MODULE */ - bytes = (int)strlcpy(bufp, unitname(u), size); if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); diff --git a/src/common/kernel/save.c b/src/common/kernel/save.c index d2b6a7a9d..7bbba6df1 100644 --- a/src/common/kernel/save.c +++ b/src/common/kernel/save.c @@ -29,7 +29,6 @@ #include "faction.h" #include "group.h" #include "item.h" -#include "karma.h" #include "magic.h" #include "message.h" #include "move.h" @@ -1226,12 +1225,10 @@ readfaction(struct storage * store) assert(f->race); f->magiegebiet = (magic_t)store->r_int(store); -#if KARMA_MODULE - f->karma = store->r_int(store); -#else - /* ignore karma */ - store->r_int(store); -#endif /* KARMA_MODULE */ + if (store->versionr_int(store); + } f->flags = store->r_int(store); if (f->no==0) { @@ -1323,11 +1320,6 @@ writefaction(struct storage * store, const faction * f) store->w_tok(store, f->race->_name[0]); store->w_brk(store); store->w_int(store, f->magiegebiet); -#if KARMA_MODULE - store->w_int(store, f->karma); -#else - store->w_int(store, 0); -#endif /* KARMA_MODULE */ store->w_int(store, f->flags&FFL_SAVEMASK); a_write(store, f->attribs); diff --git a/src/common/kernel/skill.c b/src/common/kernel/skill.c index 183d55d10..46bc4d78c 100644 --- a/src/common/kernel/skill.c +++ b/src/common/kernel/skill.c @@ -24,7 +24,6 @@ #include "skill.h" #include "curse.h" -#include "karma.h" #include "item.h" #include "magic.h" #include "race.h" diff --git a/src/common/kernel/unit.c b/src/common/kernel/unit.c index ec9ad6c6b..ea031310e 100644 --- a/src/common/kernel/unit.c +++ b/src/common/kernel/unit.c @@ -26,7 +26,6 @@ #include "building.h" #include "faction.h" #include "group.h" -#include "karma.h" #include "connection.h" #include "item.h" #include "move.h" @@ -1304,22 +1303,6 @@ get_modifier(const unit *u, skill_t sk, int level, const region *r, boolean noit } skill = skillmod(u->attribs, u, r, sk, skill, SMF_ALWAYS); -#if KARMA_MODULE - if (fspecial(u->faction, FS_TELEPATHY)) { - switch(sk) { -case SK_ALCHEMY: -case SK_HERBALISM: -case SK_MAGIC: -case SK_SPY: -case SK_STEALTH: -case SK_PERCEPTION: - break; -default: - skill -= 2; - } - } -#endif - #ifdef HUNGER_REDUCES_SKILL if (fval(u, UFL_HUNGER)) { skill = skill/2; @@ -1689,12 +1672,6 @@ unit_max_hp(const unit * u) p = pow(effskill(u, SK_STAMINA) / 2.0, 1.5) * 0.2; h += (int) (h * p + 0.5); } -#if KARMA_MODULE - if (fspecial(u->faction, FS_UNDEAD)) { - h *= 2; - } -#endif /* KARMA_MODULE */ - /* der healing curse verändert die maximalen hp */ if (heal_ct) { curse *c = get_curse(u->region->attribs, heal_ct); diff --git a/src/common/settings.h b/src/common/settings.h index 78bd22926..c866d648e 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -45,7 +45,6 @@ #define MUSEUM_MODULE 1 #define ARENA_MODULE 1 #define XECMD_MODULE 1 -#define KARMA_MODULE 0 #define DUNGEON_MODULE 0 #define CHANGED_CROSSBOWS 0 /* use the WTF_ARMORPIERCING flag */ #undef GLOBAL_WARMING /* number of turns before global warming sets in */ diff --git a/src/common/spells/spells.c b/src/common/spells/spells.c index f437e4391..905cf9394 100644 --- a/src/common/spells/spells.c +++ b/src/common/spells/spells.c @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -6415,37 +6414,7 @@ sp_break_curse(castorder *co) int sp_becomewyrm(castorder *co) { -#if KARMA_MODULE - unit *u = co->magician.u; - int wyrms_already_created = 0; - int wyrms_allowed = 0; - attrib *a; - - wyrms_allowed = fspecial(u->faction, FS_WYRM); - a = a_find(u->faction->attribs, &at_wyrm); - if (a) wyrms_already_created = a->data.i; - - if (wyrms_already_created >= wyrms_allowed) { - cmistake(u, co->order, 262, MSG_MAGIC); - return 0; - } - - if (!a) { - a_add(&u->faction->attribs, a_new(&at_wyrm)); - a->data.i = 1; - } else { - a->data.i++; - } - - u->race = new_race[RC_WYRM]; - add_spell(get_mage(u), find_spellbyid(M_GRAY, SPL_WYRMODEM)); - - ADDMSG(&u->faction->msgs, msg_message("becomewyrm", "u", u)); - - return co->level; -#else return 0; -#endif /* KARMA_MODULE */ } /* ------------------------------------------------------------- */