From 7ef6d4e9606027e9cbaa025aa986be41e0f9c62b Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 31 May 2004 18:21:54 +0000 Subject: [PATCH] =?UTF-8?q?-=20Kampf=C3=A4nderung=20(festen=20Gegener=20-?= =?UTF-8?q?=20opponent=20-=20ausw=C3=A4hlen)=20-=20cvsignore=20verzeichnis?= =?UTF-8?q?se=20aktualisieren=20-=20igjarjuk-erscheinen=20deaktiviert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/attributes/.cvsignore | 3 +- src/common/gamecode/.cvsignore | 2 ++ src/common/items/.cvsignore | 2 ++ src/common/kernel/.cvsignore | 3 +- src/common/kernel/battle.c | 62 ++++++++++++++++++++++++-------- src/common/kernel/battle.h | 11 +++--- src/common/kernel/spell.c | 2 ++ src/common/modules/.cvsignore | 2 ++ src/common/races/.cvsignore | 2 ++ src/common/spells/.cvsignore | 2 ++ src/common/triggers/.cvsignore | 2 ++ src/common/util/.cvsignore | 2 ++ src/mapper/.cvsignore | 4 ++- src/scripts/default.lua | 9 +++-- src/scripts/igjarjuk-call.lua | 3 +- 15 files changed, 85 insertions(+), 26 deletions(-) diff --git a/src/common/attributes/.cvsignore b/src/common/attributes/.cvsignore index 6b93b4893..cde50cde0 100644 --- a/src/common/attributes/.cvsignore +++ b/src/common/attributes/.cvsignore @@ -1,2 +1,3 @@ Debug -*.plg +Release +Profile diff --git a/src/common/gamecode/.cvsignore b/src/common/gamecode/.cvsignore index 329d484df..cde50cde0 100644 --- a/src/common/gamecode/.cvsignore +++ b/src/common/gamecode/.cvsignore @@ -1 +1,3 @@ Debug +Release +Profile diff --git a/src/common/items/.cvsignore b/src/common/items/.cvsignore index 329d484df..cde50cde0 100644 --- a/src/common/items/.cvsignore +++ b/src/common/items/.cvsignore @@ -1 +1,3 @@ Debug +Release +Profile diff --git a/src/common/kernel/.cvsignore b/src/common/kernel/.cvsignore index 6b93b4893..cde50cde0 100644 --- a/src/common/kernel/.cvsignore +++ b/src/common/kernel/.cvsignore @@ -1,2 +1,3 @@ Debug -*.plg +Release +Profile diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index 308c948ce..de51fffd1 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -420,7 +420,6 @@ select_corpse(battle * b, fighter * af) continue; if (di < dead) { return df; - break; } di -= dead; } @@ -1333,7 +1332,6 @@ troop select_enemy(battle * b, fighter * af, int minrow, int maxrow) { side *as = af->side; - troop dt = no_troop; int si; int enemies; @@ -1348,10 +1346,10 @@ select_enemy(battle * b, fighter * af, int minrow, int maxrow) enemies = count_enemies(b, as, minrow, maxrow); /* Niemand ist in der angegebenen Entfernung? */ - if (enemies<=0) return dt; + if (enemies<=0) return no_troop; enemies = rand() % enemies; - for (si=0;!dt.fighter && as->enemies[si];++si) { + for (si=0;as->enemies[si];++si) { side *ds = as->enemies[si]; void ** fi; int ui, unitrow[NUMROWS]; @@ -1370,15 +1368,51 @@ select_enemy(battle * b, fighter * af, int minrow, int maxrow) if (dr < minrow || dr > maxrow) continue; if (df->alive - df->removed > enemies) { + troop dt; dt.index = enemies; dt.fighter = df; - enemies = 0; - break; + return dt; } else enemies -= (df->alive - df->removed); } } assert(!enemies); + return no_troop; +} + +static troop +select_opponent(battle * b, troop at, int minrow, int maxrow) +{ + fighter * af = at.fighter; + troop dt = af->person[at.index].opponent; + + if (af->unit->race->flags & RCF_FLY) { + /* flying races ignore min- and maxrow and can attack anyone fighting + * them */ + minrow = FIGHT_ROW; + maxrow = BEHIND_ROW; + } + minrow = max(minrow, FIGHT_ROW); + + if (dt.fighter!=NULL && dt.indexalive) { + fighter * df = dt.fighter; + int row = get_unitrow(df); + if (row>=minrow && row<=maxrow) { + troop ot = df->person[dt.index].opponent; + if (ot.fighter==NULL || ot.index>=ot.fighter->alive) { + df->person[dt.index].opponent = at; + } + return dt; + } + } + dt = select_enemy(b, at.fighter, minrow, maxrow); + if (dt.fighter!=NULL) { + fighter * df = dt.fighter; + troop ot = df->person[dt.index].opponent; + if (ot.fighter==NULL || ot.index>=ot.fighter->alive) { + df->person[dt.index].opponent = at; + } + } return dt; } @@ -1979,11 +2013,11 @@ attack(battle *b, troop ta, const att *a) boolean missile = false; if (wp && fval(wp->type, WTF_MISSILE)) missile=true; if (missile) { - if (row<=BEHIND_ROW) td = select_enemy(b, af, missile_range[0], missile_range[1]); + if (row<=BEHIND_ROW) td = select_opponent(b, ta, missile_range[0], missile_range[1]); else return; } else { - if (row<=FIGHT_ROW) td = select_enemy(b, af, melee_range[0], melee_range[1]); + if (row<=FIGHT_ROW) td = select_opponent(b, ta, melee_range[0], melee_range[1]); else return; } if (!td.fighter) return; @@ -2017,7 +2051,7 @@ attack(battle *b, troop ta, const att *a) do_extra_spell(ta, a); break; case AT_NATURAL: - td = select_enemy(b, af, melee_range[0]-offset, melee_range[1]-offset); + td = select_opponent(b, ta, melee_range[0]-offset, melee_range[1]-offset); if (!td.fighter) return; if(td.fighter->person[td.index].last_action < b->turn) { td.fighter->person[td.index].last_action = b->turn; @@ -2032,7 +2066,7 @@ attack(battle *b, troop ta, const att *a) } break; case AT_DRAIN_ST: - td = select_enemy(b, af, melee_range[0]-offset, melee_range[1]-offset); + td = select_opponent(b, ta, melee_range[0]-offset, melee_range[1]-offset); if (!td.fighter) return; if(td.fighter->person[td.index].last_action < b->turn) { td.fighter->person[td.index].last_action = b->turn; @@ -2055,7 +2089,7 @@ attack(battle *b, troop ta, const att *a) } break; case AT_DRAIN_EXP: - td = select_enemy(b, af, melee_range[0]-offset, melee_range[1]-offset); + td = select_opponent(b, ta, melee_range[0]-offset, melee_range[1]-offset); if (!td.fighter) return; if(td.fighter->person[td.index].last_action < b->turn) { td.fighter->person[td.index].last_action = b->turn; @@ -2070,7 +2104,7 @@ attack(battle *b, troop ta, const att *a) } break; case AT_DAZZLE: - td = select_enemy(b, af, melee_range[0]-offset, melee_range[1]-offset); + td = select_opponent(b, ta, melee_range[0]-offset, melee_range[1]-offset); if (!td.fighter) return; if(td.fighter->person[td.index].last_action < b->turn) { td.fighter->person[td.index].last_action = b->turn; @@ -2085,7 +2119,7 @@ attack(battle *b, troop ta, const att *a) } break; case AT_STRUCTURAL: - td = select_enemy(b, af, melee_range[0]-offset, melee_range[1]-offset); + td = select_opponent(b, ta, melee_range[0]-offset, melee_range[1]-offset); if (!td.fighter) return; if(ta.fighter->person[ta.index].last_action < b->turn) { ta.fighter->person[ta.index].last_action = b->turn; @@ -2136,7 +2170,7 @@ do_attack(fighter * af) if (!enemies) break; for (apr=attacks_per_round(ta); apr > 0; apr--) { - for (a = 0; a < 6; a++) { + for (a=0; a!=10; ++a) { if (au->race->attack[a].type != AT_NONE) attack(b, ta, &(au->race->attack[a])); } diff --git a/src/common/kernel/battle.h b/src/common/kernel/battle.h index 553633e30..e0d867543 100644 --- a/src/common/kernel/battle.h +++ b/src/common/kernel/battle.h @@ -129,6 +129,11 @@ extern "C" { AR_NONE }; + typedef struct troop { + struct fighter *fighter; + int index; + } troop; + typedef struct fighter { struct side *side; struct unit *unit; /* Die Einheit, die hier kämpft */ @@ -160,6 +165,7 @@ extern "C" { int last_action : 8; /* In welcher Runde haben wir zuletzt etwas getan */ struct weapon * missile; /* missile weapon */ struct weapon * melee; /* melee weapon */ + struct troop opponent; /* default opponent */ } * person; int flags; struct { @@ -177,11 +183,6 @@ extern "C" { #endif } fighter; - typedef struct troop { - struct fighter *fighter; - int index; - } troop; - /* schilde */ diff --git a/src/common/kernel/spell.c b/src/common/kernel/spell.c index b62ee6813..ff9dd3cbe 100644 --- a/src/common/kernel/spell.c +++ b/src/common/kernel/spell.c @@ -5351,6 +5351,7 @@ sp_baddreams(castorder *co) region *r = co->rt; curse * c; + return cast_level; /* wirkt erst in der Folgerunde, soll mindestens eine Runde wirken, * also duration+2 */ duration = (int)max(1, power/2); /* Stufe 1 macht sonst mist */ @@ -5390,6 +5391,7 @@ sp_gooddreams(castorder *co) int cast_level = co->level; double power = co->force; + return cast_level; /* wirkt erst in der Folgerunde, soll mindestens eine Runde wirken, * also duration+2 */ duration = (int)max(1, power/2); /* Stufe 1 macht sonst mist */ diff --git a/src/common/modules/.cvsignore b/src/common/modules/.cvsignore index 329d484df..cde50cde0 100644 --- a/src/common/modules/.cvsignore +++ b/src/common/modules/.cvsignore @@ -1 +1,3 @@ Debug +Release +Profile diff --git a/src/common/races/.cvsignore b/src/common/races/.cvsignore index 329d484df..cde50cde0 100644 --- a/src/common/races/.cvsignore +++ b/src/common/races/.cvsignore @@ -1 +1,3 @@ Debug +Release +Profile diff --git a/src/common/spells/.cvsignore b/src/common/spells/.cvsignore index 329d484df..cde50cde0 100644 --- a/src/common/spells/.cvsignore +++ b/src/common/spells/.cvsignore @@ -1 +1,3 @@ Debug +Release +Profile diff --git a/src/common/triggers/.cvsignore b/src/common/triggers/.cvsignore index 329d484df..cde50cde0 100644 --- a/src/common/triggers/.cvsignore +++ b/src/common/triggers/.cvsignore @@ -1 +1,3 @@ Debug +Release +Profile diff --git a/src/common/util/.cvsignore b/src/common/util/.cvsignore index 329d484df..cde50cde0 100644 --- a/src/common/util/.cvsignore +++ b/src/common/util/.cvsignore @@ -1 +1,3 @@ Debug +Release +Profile diff --git a/src/mapper/.cvsignore b/src/mapper/.cvsignore index d287cd3ed..cde50cde0 100644 --- a/src/mapper/.cvsignore +++ b/src/mapper/.cvsignore @@ -1 +1,3 @@ -debug +Debug +Release +Profile diff --git a/src/scripts/default.lua b/src/scripts/default.lua index 42b7747ff..ef3dd56c4 100644 --- a/src/scripts/default.lua +++ b/src/scripts/default.lua @@ -36,9 +36,12 @@ function process(orders) read_orders(orders) -- igjarjuk gets called: - require("igjarjuk-call.lua") - call_igjarjuk() - + -- require("igjarjuk-call.lua") + -- call_igjarjuk() + u = get_unit(atoi36("50ki")) + if u~=nil then + u.region:set_flag(14, true) + end -- process_orders() diff --git a/src/scripts/igjarjuk-call.lua b/src/scripts/igjarjuk-call.lua index 643768ead..91bb23cbf 100644 --- a/src/scripts/igjarjuk-call.lua +++ b/src/scripts/igjarjuk-call.lua @@ -19,7 +19,7 @@ function call_igjarjuk() -- make him a special kind of wyrm wyrm.race = "skeletal_wyrm" - wyrm.hp = 5000 + wyrm.hp = 10000 wyrm.status = 1 wyrm.magic = "nomagic" wyrm:set_skill("sk_magic", 20) @@ -27,6 +27,7 @@ function call_igjarjuk() wyrm.faction:set_policy(laoris.faction, "fight", true) wyrm.faction:set_policy(get_faction(atoi36("dpen")), "fight", true) + laoris:add_item("wand_of_tears", -6) -- inform the folks in the grave about what's up grave = wyrm.region fog:add_notice(tostring(laoris) .. " schwingt die Schwinge des Greifen. Das Auge des Dämons glüht in hellem weißen Licht, Blitze springen auf " .. tostring(wyrm) .. " über.")