diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index d695ec2cb..a5f3c0e90 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -290,14 +290,15 @@ static void set_enemy(side * as, side * ds, boolean attacking) { int i; - for (i=0;i!=128;++i) { + for (i=0;i!=MAXSIDES;++i) { if (ds->enemies[i]==NULL) ds->enemies[i]=as; if (ds->enemies[i]==as) break; } - for (i=0;i!=128;++i) { + for (i=0;i!=MAXSIDES;++i) { if (as->enemies[i]==NULL) as->enemies[i]=ds; if (as->enemies[i]==ds) break; } + assert(i!=MAXSIDES); ds->relations[as->index] |= E_ENEMY; as->relations[ds->index] |= E_ENEMY; if (attacking) as->relations[ds->index] |= E_ATTACKING; @@ -2236,6 +2237,7 @@ make_side(battle * b, const faction * f, const group * g, unsigned int flags, co s1->nextF = bf->sides; bf->sides = s1; ++b->nsides; + assert(b->nsides<=MAXSIDES); break; } } @@ -2901,7 +2903,14 @@ make_fighter(battle * b, unit * u, side * s1, boolean attack) if (s1==NULL) { for (s2 = b->sides; s2; s2 = s2->next) { if (s2->bf->faction == u->faction && s2->group==g) { - if (s2->flags==flags && s2->stealthfaction==stealthfaction) { +#ifdef SIMPLE_COMBAT + int s1flags = flags|SIDE_HASGUARDS; + int s2flags = s2->flags|SIDE_HASGUARDS; +#else + int s1flags = flags; + int s2flags = s2->flags; +#endif + if (s1flags==s2flags && s2->stealthfaction==stealthfaction) { s1 = s2; break; } diff --git a/src/common/kernel/battle.h b/src/common/kernel/battle.h index c8da10e0d..54e99372f 100644 --- a/src/common/kernel/battle.h +++ b/src/common/kernel/battle.h @@ -36,7 +36,7 @@ extern "C" { #define FLEE_ROW 4 #define LAST_ROW (NUMROWS-1) #define FIRST_ROW FIGHT_ROW -#define MAXSIDES 256 /* if there are ever more than this, we're fucked. */ +#define MAXSIDES 128 /* if there are ever more than this, we're fucked. */ struct message; @@ -91,8 +91,8 @@ extern "C" { # define E_ENEMY 1 # define E_FRIEND 2 # define E_ATTACKING 4 - unsigned char relations[128]; - struct side * enemies[128]; + unsigned char relations[MAXSIDES]; + struct side * enemies[MAXSIDES]; struct fighter * fighters; int index; /* Eintrag der Fraktion in b->matrix/b->enemies */ int size[NUMROWS]; /* Anzahl Personen in Reihe X. 0 = Summe */