From e76ddede60c453c36511899340bc77dc7f60a212 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 14 Feb 2001 01:38:51 +0000 Subject: [PATCH] Kaempfe beschleunigt (evtl). wird mit FASTENEMY define aktiviert. zahlen morgen im lauf des tages. --- src/common/kernel/battle.c | 37 +++++++++++++++++++++++++++++++++++- src/common/kernel/battle.h | 11 ++++++++--- src/common/kernel/message.c | 26 ++++++++++++++++++++++++- src/common/util/goodies.c | 4 ++-- src/eressea-6.opt | Bin 144384 -> 144384 bytes src/eressea/main.c | 11 ++++++++++- 6 files changed, 81 insertions(+), 8 deletions(-) diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index a75cc21dc..3c5770042 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: battle.c,v 1.11 2001/02/11 08:55:30 enno Exp $ + * $Id: battle.c,v 1.12 2001/02/14 01:38:50 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -295,15 +295,30 @@ fbattlerecord(faction * f, region * r, const char *s) boolean enemy(const side * as, const side * ds) { +#ifdef FASTENEMY + switch(as->enemy[ds->index]) { + case E_ENEMY: + case E_ENEMY|E_ATTACKING: + return true; + default: + return false; + } +#else const struct enemy * e = as->enemies[ds->index % 16]; while (e && e->side!=ds) e=e->nexthash; if (e) return true; return false; +#endif } static void set_enemy(side * as, side * ds, boolean attacking) { +#ifdef FASTENEMY + ds->enemy[as->index] |= E_ENEMY; + as->enemy[ds->index] |= E_ENEMY; + if (attacking) as->enemy[ds->index] |= E_ATTACKING; +#else struct enemy * e = as->enemies[ds->index % 16]; while (e && e->side!=ds) e=e->nexthash; if (e==NULL) { @@ -319,6 +334,7 @@ set_enemy(side * as, side * ds, boolean attacking) ds->enemies[as->index % 16] = e; } else e->attacking |= attacking; +#endif } extern int alliance(const ally * sf, const faction * f, int mode); @@ -2522,7 +2538,9 @@ print_stats(battle * b) for (bf=b->factions;bf;bf=bf->next) { faction * f = bf->faction; +#ifndef FASTENEMY struct enemy * e; +#endif fbattlerecord(f, b->region, " "); sprintf(buf, "Heer %d: %s", side->index, seematrix(f, side) @@ -2546,6 +2564,20 @@ print_stats(battle * b) fbattlerecord(f, b->region, buf); strcpy(buf, "Attacke gegen:"); komma = false; +#ifdef FASTENEMY + for_each(s2, b->sides) { + if (side->enemy[s2->index] & E_ATTACKING) { + if (seematrix(f, s2) == true) { + sprintf(buf, "%s%s Heer %d(%s)", buf, komma++ ? "," : "", + s2->index, abkz(s2->bf->faction->name, 3)); + } else { + sprintf(buf, "%s%s Heer %d(Unb)", buf, komma++ ? "," : "", + s2->index); + } + } + } + next(s2); +#else for (i=0;i!=16;i++) for (e=side->enemies[i]; e; e=e->nexthash) if (e->attacking) { struct side * s2 = e->side; @@ -2557,6 +2589,7 @@ print_stats(battle * b) s2->index); } } +#endif fbattlerecord(f, b->region, buf); } buf[77] = (char)0; @@ -2964,12 +2997,14 @@ make_battle(region * r) static void free_side(side * si) { +#ifndef FASTENEMY int i; for (i=0;i!=16;++i) while (si->enemies[i]) { struct enemy * e = si->enemies[i]->nexthash; free(si->enemies[i]); si->enemies[i] = e; } +#endif cv_kill(&si->fighters); } diff --git a/src/common/kernel/battle.h b/src/common/kernel/battle.h index bc8d8beb5..cea2436f5 100644 --- a/src/common/kernel/battle.h +++ b/src/common/kernel/battle.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: battle.h,v 1.2 2001/01/26 16:19:39 enno Exp $ + * $Id: battle.h,v 1.3 2001/02/14 01:38:50 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -65,14 +65,19 @@ typedef struct side { struct battle * battle; struct faction *faction; /* Die Partei, die hier kämpft */ struct bfaction * bf; /* Die Partei, die hier kämpft */ -#ifdef GROUPS const struct group * group; -#endif +#define FASTENEMY +#ifdef FASTENEMY +# define E_ENEMY 1 +# define E_ATTACKING 2 + int enemy[128]; +#else struct enemy { struct enemy * nexthash; boolean attacking; struct side * side; } * enemies[16]; +#endif cvector fighters; /* vector der Einheiten dieser Fraktion */ int index; /* Eintrag der Fraktion in b->matrix/b->enemies */ int size[NUMROWS]; /* Anzahl Personen in Reihe X. 0 = Summe */ diff --git a/src/common/kernel/message.c b/src/common/kernel/message.c index c3fbb4dea..e15bec16c 100644 --- a/src/common/kernel/message.c +++ b/src/common/kernel/message.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: message.c,v 1.6 2001/02/11 20:54:01 enno Exp $ + * $Id: message.c,v 1.7 2001/02/14 01:38:50 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -195,6 +195,30 @@ mistake(const unit * u, const char *command, const char *comment, int mtype) static messagetype * messagetypes; +extern unsigned int new_hashstring(const char* s); + +int +old_hashstring(const char* s) +{ + int key = 0; + int i = strlen(s); + while (i) { + --i; + key = ((key >> 31) & 1) ^ (key << 1) ^ s[i]; + } + return key & 0x7fff; +} + + +void +debug_messagetypes(FILE * out) +{ + messagetype * mt; + for (mt=messagetypes;mt;mt=mt->next) { + fprintf(out, "%ut%u\n", old_hashstring(mt->name), mt->hashkey); + } +} + messagetype * new_messagetype(const char * name, int level, const char * section) { diff --git a/src/common/util/goodies.c b/src/common/util/goodies.c index ac95d0e85..7b393b495 100644 --- a/src/common/util/goodies.c +++ b/src/common/util/goodies.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: goodies.c,v 1.6 2001/02/11 20:54:01 enno Exp $ + * $Id: goodies.c,v 1.7 2001/02/14 01:38:50 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -66,7 +66,7 @@ hashstring(const char* s) while (i>0) { key = (s[--i] + key*37); } - return key; + return key % 0x7FFFFFFF; } char * diff --git a/src/eressea-6.opt b/src/eressea-6.opt index 5d1ac37d343e8ddd8a895090fd5c9348af82ef32..87d1647fe1e85b3ffe4d76624ef691f47623d1eb 100644 GIT binary patch delta 6853 zcmd5=d2AF_7@zO$?(Fnlpu22aTK4EdEmGu21R_|Vg`&t&2{fb>3Jg$KTIf>I1Ys$l zEm#YDz#~Wu`iCOB(52fWD0qMvSgqu=Y~2f)6S9YQe2$WfWtU6Nx6CbY%C68mp{q2STBa1p z%R-L=2!f!5eK|Ws!A)2K|G){cSmsXfH{|Sq@Z$X0vMV=m#bHwBzxcY^xrjaG2=`Nu z*t|&lbR3&2Zi6H8tvRyC*C7Zi~l;MvoDby@UCOX<+l0dEa1L^1z1ns$M*6D+yUu zcHY7u1uLr-;4q&RzdUZmdsP{j=d$j_z7r|v zYp~<~8Y`Zy8;wKj7h=D2R=!;aR{W+upX%yI=um0r+ammi^S3qCM@L2Y;ru~u$NuJs z>dP0ysLLXD=%OO6zJD=_x`G&1u`V8hZ}t#1Jw`jJ9kg|6ots8>ZkhrY1MH6vbasBr z-MMLV=cZk7m>FYBmKHcIeJxW93I`6bWXn!D-zDQsXPn8H?^>AeEGqoFGee$LGLJ8g z2P1zup0e%5qlrA*O^G&va*wa{KpH>d0aGyfFz;A*Jm^h`?G~)B4jAcPs=%qv1kBDc zbM6Hbj=gNe5y#?mT?6Xy8ZS7wm)h$az0fQ^Y4Fz1;TMPNNyPuFu61WX0&QRl3wb5I zOr~v!t+}xM_MgxJq%Er#Ue2+zt@wkf&OY!H6^h!KIjIRRCL;}iNuj{Q&o5;O?Au~O)zHr3j$6rbACfr@Xs;6s8FUo1O@(KLOv;Z z2&K?XS*?5V`46B1x+;x2_de;`MQPOBdlWZ=f~c!ZES0~~0&5^fLDXOd$K9a}jt-(K zUUEJ8@6F)jHX}1Bj-AB6zXcm1QXS2c_=!I$h7n48`|F!f&Ig(mor7v_zy=6YTGNlO zQ@u$_qrQI)%BSg7o`AMB!CN3It$Ofd@!dvP$K^yt;}-x9Gq=yjW}awgukss>v@{Et z^F*Z+{`3F|9n*QBDhueVaU_`)b!g2I&1tBJ0now7pU owI()>FSb+2+&U(ScWJM3JJ7!50x7~+E$qyhafOApsBi240$3Y|&j0`b literal 144384 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 WM-$!{0Y-okU<4QeM&M