more config.h removal.

freset/fset/fval must die!
This commit is contained in:
Enno Rehling 2016-11-17 17:06:31 +01:00
parent 476c655cd3
commit 6c9e1fb345
10 changed files with 102 additions and 102 deletions

View File

@ -905,14 +905,6 @@ int wage(const region * r, const faction * f, const race * rc, int in_turn)
return default_wage(r, f, rc, in_turn); return default_wage(r, f, rc, in_turn);
} }
int lovar(double xpct_x2)
{
int n = (int)(xpct_x2 * 500) + 1;
if (n == 0)
return 0;
return (rng_int() % n + rng_int() % n) / 1000;
}
void kernel_init(void) void kernel_init(void)
{ {
register_reports(); register_reports();

View File

@ -56,7 +56,6 @@ struct param;
const char * game_name(void); const char * game_name(void);
int game_id(void); int game_id(void);
int lovar(double xpct_x2);
/* returns a value between [0..xpct_2], generated with two dice */ /* returns a value between [0..xpct_2], generated with two dice */
void init_locale(struct locale *lang); void init_locale(struct locale *lang);

View File

@ -117,7 +117,7 @@ extern "C" {
float healing; float healing;
double maxaura; /* Faktor auf Maximale Aura */ double maxaura; /* Faktor auf Maximale Aura */
double regaura; /* Faktor auf Regeneration */ double regaura; /* Faktor auf Regeneration */
double recruit_multi; /* Faktor für Bauernverbrauch */ double recruit_multi; /* Faktor f<EFBFBD>r Bauernverbrauch */
int index; int index;
int recruitcost; int recruitcost;
int maintenance; int maintenance;
@ -132,8 +132,8 @@ extern "C" {
int armor; int armor;
int at_default; /* Angriffsskill Unbewaffnet (default: -2) */ int at_default; /* Angriffsskill Unbewaffnet (default: -2) */
int df_default; /* Verteidigungsskill Unbewaffnet (default: -2) */ int df_default; /* Verteidigungsskill Unbewaffnet (default: -2) */
int at_bonus; /* Verändert den Angriffsskill (default: 0) */ int at_bonus; /* Ver<EFBFBD>ndert den Angriffsskill (default: 0) */
int df_bonus; /* Verändert den Verteidigungskill (default: 0) */ int df_bonus; /* Ver<EFBFBD>ndert den Verteidigungskill (default: 0) */
struct param *parameters; // additional properties, for an example see natural_armor struct param *parameters; // additional properties, for an example see natural_armor
const struct spell *precombatspell; const struct spell *precombatspell;
signed char *study_speed; /* study-speed-bonus in points/turn (0=30 Tage) */ signed char *study_speed; /* study-speed-bonus in points/turn (0=30 Tage) */
@ -190,20 +190,20 @@ extern "C" {
#define RCF_LEARN (1<<6) /* Lernt automatisch wenn struct faction == 0 */ #define RCF_LEARN (1<<6) /* Lernt automatisch wenn struct faction == 0 */
#define RCF_FLY (1<<7) /* kann fliegen */ #define RCF_FLY (1<<7) /* kann fliegen */
#define RCF_SWIM (1<<8) /* kann schwimmen */ #define RCF_SWIM (1<<8) /* kann schwimmen */
#define RCF_WALK (1<<9) /* kann über Land gehen */ #define RCF_WALK (1<<9) /* kann <EFBFBD>ber Land gehen */
#define RCF_NOLEARN (1<<10) /* kann nicht normal lernen */ #define RCF_NOLEARN (1<<10) /* kann nicht normal lernen */
#define RCF_NOTEACH (1<<11) /* kann nicht lehren */ #define RCF_NOTEACH (1<<11) /* kann nicht lehren */
#define RCF_HORSE (1<<12) /* Einheit ist Pferd, sozusagen */ #define RCF_HORSE (1<<12) /* Einheit ist Pferd, sozusagen */
#define RCF_DESERT (1<<13) /* 5% Chance, das Einheit desertiert */ #define RCF_DESERT (1<<13) /* 5% Chance, das Einheit desertiert */
#define RCF_ILLUSIONARY (1<<14) /* (Illusion & Spell) Does not drop items. */ #define RCF_ILLUSIONARY (1<<14) /* (Illusion & Spell) Does not drop items. */
#define RCF_ABSORBPEASANTS (1<<15) /* Tötet und absorbiert Bauern */ #define RCF_ABSORBPEASANTS (1<<15) /* T<EFBFBD>tet und absorbiert Bauern */
#define RCF_NOHEAL (1<<16) /* Einheit kann nicht geheilt werden */ #define RCF_NOHEAL (1<<16) /* Einheit kann nicht geheilt werden */
#define RCF_NOWEAPONS (1<<17) /* Einheit kann keine Waffen benutzen */ #define RCF_NOWEAPONS (1<<17) /* Einheit kann keine Waffen benutzen */
#define RCF_SHAPESHIFT (1<<18) /* Kann TARNE RASSE benutzen. */ #define RCF_SHAPESHIFT (1<<18) /* Kann TARNE RASSE benutzen. */
#define RCF_SHAPESHIFTANY (1<<19) /* Kann TARNE RASSE "string" benutzen. */ #define RCF_SHAPESHIFTANY (1<<19) /* Kann TARNE RASSE "string" benutzen. */
#define RCF_UNDEAD (1<<20) /* Undead. */ #define RCF_UNDEAD (1<<20) /* Undead. */
#define RCF_DRAGON (1<<21) /* Drachenart (für Zauber) */ #define RCF_DRAGON (1<<21) /* Drachenart (f<EFBFBD>r Zauber) */
#define RCF_COASTAL (1<<22) /* kann in Landregionen an der Küste sein */ #define RCF_COASTAL (1<<22) /* kann in Landregionen an der K<EFBFBD>ste sein */
#define RCF_UNARMEDGUARD (1<<23) /* kann ohne Waffen bewachen */ #define RCF_UNARMEDGUARD (1<<23) /* kann ohne Waffen bewachen */
#define RCF_CANSAIL (1<<24) /* Einheit darf Schiffe betreten */ #define RCF_CANSAIL (1<<24) /* Einheit darf Schiffe betreten */
#define RCF_INVISIBLE (1<<25) /* not visible in any report */ #define RCF_INVISIBLE (1<<25) /* not visible in any report */
@ -213,16 +213,16 @@ extern "C" {
#define RCF_ATTACK_MOVED (1<<29) /* may attack if it has moved */ #define RCF_ATTACK_MOVED (1<<29) /* may attack if it has moved */
/* Economic flags */ /* Economic flags */
#define ECF_KEEP_ITEM (1<<1) /* gibt Gegenstände weg */ #define ECF_KEEP_ITEM (1<<1) /* gibt Gegenst<EFBFBD>nde weg */
#define GIVEPERSON (1<<2) /* übergibt Personen */ #define GIVEPERSON (1<<2) /* <EFBFBD>bergibt Personen */
#define GIVEUNIT (1<<3) /* Einheiten an andere Partei übergeben */ #define GIVEUNIT (1<<3) /* Einheiten an andere Partei <EFBFBD>bergeben */
#define GETITEM (1<<4) /* nimmt Gegenstände an */ #define GETITEM (1<<4) /* nimmt Gegenst<EFBFBD>nde an */
#define ECF_REC_ETHEREAL (1<<7) /* Rekrutiert aus dem Nichts */ #define ECF_REC_ETHEREAL (1<<7) /* Rekrutiert aus dem Nichts */
#define ECF_REC_UNLIMITED (1<<8) /* Rekrutiert ohne Limit */ #define ECF_REC_UNLIMITED (1<<8) /* Rekrutiert ohne Limit */
/* Battle-Flags */ /* Battle-Flags */
#define BF_EQUIPMENT (1<<0) /* Kann Ausrüstung benutzen */ #define BF_EQUIPMENT (1<<0) /* Kann Ausr<EFBFBD>stung benutzen */
#define BF_NOBLOCK (1<<1) /* Wird in die Rückzugsberechnung nicht einbezogen */ #define BF_NOBLOCK (1<<1) /* Wird in die R<EFBFBD>ckzugsberechnung nicht einbezogen */
#define BF_RES_PIERCE (1<<2) /* Halber Schaden durch PIERCE */ #define BF_RES_PIERCE (1<<2) /* Halber Schaden durch PIERCE */
#define BF_RES_CUT (1<<3) /* Halber Schaden durch CUT */ #define BF_RES_CUT (1<<3) /* Halber Schaden durch CUT */
#define BF_RES_BASH (1<<4) /* Halber Schaden durch BASH */ #define BF_RES_BASH (1<<4) /* Halber Schaden durch BASH */
@ -232,10 +232,10 @@ extern "C" {
const char *racename(const struct locale *lang, const struct unit *u, const char *racename(const struct locale *lang, const struct unit *u,
const race * rc); const race * rc);
#define playerrace(rc) (!fval((rc), RCF_NPC)) #define playerrace(rc) (!((rc)->flags & RCF_NPC))
#define dragonrace(rc) (fval(rc, RCF_DRAGON)) #define dragonrace(rc) ((rc)->flags & RCF_DRAGON)
#define humanoidrace(rc) (fval((rc), RCF_UNDEAD) || (rc)==get_race(RC_DRACOID) || playerrace(rc)) #define humanoidrace(rc) (((rc)->flags & RCF_UNDEAD) || (rc)==get_race(RC_DRACOID) || playerrace(rc))
#define illusionaryrace(rc) (fval(rc, RCF_ILLUSIONARY)) #define illusionaryrace(rc) ((rc)->flags & RCF_ILLUSIONARY)
bool allowed_dragon(const struct region *src, bool allowed_dragon(const struct region *src,
const struct region *target); const struct region *target);

View File

@ -51,8 +51,8 @@ extern "C" {
int minskill; /* min. skill to sail this (crew) */ int minskill; /* min. skill to sail this (crew) */
int sumskill; /* min. sum of crew+captain */ int sumskill; /* min. sum of crew+captain */
int at_bonus; /* Verändert den Angriffsskill (default: 0) */ int at_bonus; /* Ver<EFBFBD>ndert den Angriffsskill (default: 0) */
int df_bonus; /* Verändert den Verteidigungskill (default: 0) */ int df_bonus; /* Ver<EFBFBD>ndert den Verteidigungskill (default: 0) */
float tac_bonus; float tac_bonus;
struct terrain_type ** coasts; /* coast that this ship can land on */ struct terrain_type ** coasts; /* coast that this ship can land on */
@ -70,12 +70,12 @@ extern "C" {
#define NOSHIP NULL #define NOSHIP NULL
#define SF_DRIFTED 1<<0 #define SF_DRIFTED (1<<0)
#define SF_MOVED 1<<1 #define SF_MOVED (1<<1)
#define SF_DAMAGED 1<<2 /* for use in combat */ #define SF_DAMAGED (1<<2) /* for use in combat */
#define SF_SELECT 1<<3 /* previously FL_DH */ #define SF_SELECT (1<<3) /* previously FL_DH */
#define SF_FISHING 1<<4 /* was on an ocean, can fish */ #define SF_FISHING (1<<4) /* was on an ocean, can fish */
#define SF_FLYING 1<<5 /* the ship can fly */ #define SF_FLYING (1<<5) /* the ship can fly */
#define SFL_SAVEMASK (SF_FLYING) #define SFL_SAVEMASK (SF_FLYING)
#define INCOME_FISHING 10 #define INCOME_FISHING 10

View File

@ -446,7 +446,7 @@ report_effect(region * r, unit * mage, message * seen, message * unseen)
* Vertrauten sehen, und durch den Vertrauten zaubern, allerdings nur * Vertrauten sehen, und durch den Vertrauten zaubern, allerdings nur
* mit seiner halben Stufe. Je nach Vertrautem erhaelt der Magier * mit seiner halben Stufe. Je nach Vertrautem erhaelt der Magier
* evtl diverse Skillmodifikationen. Der Typ des Vertrauten ist * evtl diverse Skillmodifikationen. Der Typ des Vertrauten ist
* zufaellig bestimmt, wird aber durch Magiegebiet und Rasse beeinflußt. * zufaellig bestimmt, wird aber durch Magiegebiet und Rasse beeinflu<EFBFBD>t.
* "Tierische" Vertraute brauchen keinen Unterhalt. * "Tierische" Vertraute brauchen keinen Unterhalt.
* *
* Ein paar Moeglichkeiten: * Ein paar Moeglichkeiten:
@ -1599,7 +1599,7 @@ static int sp_create_stonegolem(castorder * co)
} }
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
/* Name: Große Duerre /* Name: Gro<EFBFBD>e Duerre
* Stufe: 17 * Stufe: 17
* Kategorie: Region, negativ * Kategorie: Region, negativ
* Gebiet: Gwyrrd * Gebiet: Gwyrrd
@ -1907,7 +1907,7 @@ static int sp_treewalkexit(castorder * co)
return 0; return 0;
} }
/* Koordinaten setzen und Region loeschen fuer Überpruefung auf /* Koordinaten setzen und Region loeschen fuer <EFBFBD>berpruefung auf
* Gueltigkeit */ * Gueltigkeit */
rt = pa->param[0]->data.r; rt = pa->param[0]->data.r;
tax = rt->x; tax = rt->x;
@ -2194,7 +2194,7 @@ static int sp_ironkeeper(castorder * co)
setstatus(keeper, ST_AVOID); /* kaempft nicht */ setstatus(keeper, ST_AVOID); /* kaempft nicht */
setguard(keeper, true); setguard(keeper, true);
fset(keeper, UFL_ISNEW); fset(keeper, UFL_ISNEW);
/* Parteitarnen, damit man nicht sofort weiß, wer dahinter steckt */ /* Parteitarnen, damit man nicht sofort wei<EFBFBD>, wer dahinter steckt */
if (rule_stealth_anon()) { if (rule_stealth_anon()) {
fset(keeper, UFL_ANON_FACTION); fset(keeper, UFL_ANON_FACTION);
} }
@ -2572,7 +2572,7 @@ void patzer_fumblecurse(const castorder * co)
* *
* Wirkung: * Wirkung:
* In einer Wueste, Sumpf oder Gletscher gezaubert kann innerhalb der * In einer Wueste, Sumpf oder Gletscher gezaubert kann innerhalb der
* naechsten 6 Runden ein bis 6 Dracheneinheiten bis Groeße Wyrm * naechsten 6 Runden ein bis 6 Dracheneinheiten bis Groe<EFBFBD>e Wyrm
* entstehen. * entstehen.
* *
* Mit Stufe 12-15 erscheinen Jung- oder normaler Drachen, mit Stufe * Mit Stufe 12-15 erscheinen Jung- oder normaler Drachen, mit Stufe
@ -2817,7 +2817,7 @@ static int change_hitpoints(unit * u, int value)
hp += value; hp += value;
/* Jede Person benötigt mindestens 1 HP */ /* Jede Person ben<EFBFBD>tigt mindestens 1 HP */
if (hp < u->number) { if (hp < u->number) {
if (hp < 0) { /* Einheit tot */ if (hp < 0) { /* Einheit tot */
hp = 0; hp = 0;
@ -3764,7 +3764,7 @@ static int sp_rallypeasantmob(castorder * co)
* Gebiet: Cerddor * Gebiet: Cerddor
* Wirkung: * Wirkung:
* Wiegelt 60% bis 90% der Bauern einer Region auf. Bauern werden ein * Wiegelt 60% bis 90% der Bauern einer Region auf. Bauern werden ein
* großer Mob, der zur Monsterpartei gehoert und die Region bewacht. * gro<EFBFBD>er Mob, der zur Monsterpartei gehoert und die Region bewacht.
* Regionssilber sollte auch nicht durch Unterhaltung gewonnen werden * Regionssilber sollte auch nicht durch Unterhaltung gewonnen werden
* koennen. * koennen.
* *
@ -4025,7 +4025,7 @@ static int sp_recruit(castorder * co)
return 0; return 0;
} }
/* Immer noch zuviel auf niedrigen Stufen. Deshalb die Rekrutierungskosten /* Immer noch zuviel auf niedrigen Stufen. Deshalb die Rekrutierungskosten
* mit einfliessen lassen und dafuer den Exponenten etwas groeßer. * mit einfliessen lassen und dafuer den Exponenten etwas groe<EFBFBD>er.
* Wenn die Rekrutierungskosten deutlich hoeher sind als der Faktor, * Wenn die Rekrutierungskosten deutlich hoeher sind als der Faktor,
* ist das Verhaeltniss von ausgegebene Aura pro Bauer bei Stufe 2 * ist das Verhaeltniss von ausgegebene Aura pro Bauer bei Stufe 2
* ein mehrfaches von Stufe 1, denn in beiden Faellen gibt es nur 1 * ein mehrfaches von Stufe 1, denn in beiden Faellen gibt es nur 1
@ -4056,7 +4056,7 @@ static int sp_recruit(castorder * co)
} }
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
/* Name: Wanderprediger - Große Anwerbung /* Name: Wanderprediger - Gro<EFBFBD>e Anwerbung
* Stufe: 14 * Stufe: 14
* Gebiet: Cerddor * Gebiet: Cerddor
* Wirkung: * Wirkung:
@ -4112,8 +4112,8 @@ static int sp_bigrecruit(castorder * co)
* Gebiet: Cerddor * Gebiet: Cerddor
* Wirkung: * Wirkung:
* Erliegt die Einheit dem Zauber, so wird sie dem Magier alles * Erliegt die Einheit dem Zauber, so wird sie dem Magier alles
* erzaehlen, was sie ueber die gefragte Region weiß. Ist in der Region * erzaehlen, was sie ueber die gefragte Region wei<EFBFBD>. Ist in der Region
* niemand ihrer Partei, so weiß sie nichts zu berichten. Auch kann * niemand ihrer Partei, so wei<EFBFBD> sie nichts zu berichten. Auch kann
* sie nur das erzaehlen, was sie selber sehen koennte. * sie nur das erzaehlen, was sie selber sehen koennte.
* Flags: * Flags:
* (UNITSPELL | TESTCANSEE) * (UNITSPELL | TESTCANSEE)
@ -4176,7 +4176,7 @@ static int sp_pump(castorder * co)
* Stufe: 6 * Stufe: 6
* Gebiet: Cerddor * Gebiet: Cerddor
* Wirkung: * Wirkung:
* Betoert eine Einheit, so das sie ihm den groeßten Teil ihres Bargelds * Betoert eine Einheit, so das sie ihm den groe<EFBFBD>ten Teil ihres Bargelds
* und 50% ihres Besitzes schenkt. Sie behaelt jedoch immer soviel, wie * und 50% ihres Besitzes schenkt. Sie behaelt jedoch immer soviel, wie
* sie zum ueberleben braucht. Wirkt gegen Magieresistenz. * sie zum ueberleben braucht. Wirkt gegen Magieresistenz.
* _min(Stufe*1000$, u->money - maintenace) * _min(Stufe*1000$, u->money - maintenace)
@ -4333,7 +4333,7 @@ static int sp_headache(castorder * co)
if (target->number == 0 || pa->param[0]->flag == TARGET_NOTFOUND) if (target->number == 0 || pa->param[0]->flag == TARGET_NOTFOUND)
return 0; return 0;
/* finde das groeßte Talent: */ /* finde das groe<EFBFBD>te Talent: */
for (i = 0; i != target->skill_size; ++i) { for (i = 0; i != target->skill_size; ++i) {
skill *sv = target->skills + i; skill *sv = target->skills + i;
if (smax == NULL || skill_compare(sv, smax) > 0) { if (smax == NULL || skill_compare(sv, smax) > 0) {
@ -4479,7 +4479,7 @@ int sp_puttorest(castorder * co)
return co->level; return co->level;
} }
/* Name: Traumschloeßchen /* Name: Traumschloe<EFBFBD>chen
* Stufe: 3 * Stufe: 3
* Kategorie: Region, Gebaeude, positiv * Kategorie: Region, Gebaeude, positiv
* Gebiet: Illaun * Gebiet: Illaun
@ -4514,7 +4514,7 @@ int sp_icastle(castorder * co)
b = new_building(bt_illusion, r, mage->faction->locale); b = new_building(bt_illusion, r, mage->faction->locale);
/* Groeße festlegen. */ /* Groe<EFBFBD>e festlegen. */
if (type == bt_illusion) { if (type == bt_illusion) {
b->size = (rng_int() % (int)((power * power) + 1) * 10); b->size = (rng_int() % (int)((power * power) + 1) * 10);
} }
@ -4692,7 +4692,7 @@ int sp_baddreams(castorder * co)
* Kategorie: * Kategorie:
* Wirkung: * Wirkung:
* Dieser Zauber ermoeglicht es dem Traeumer, den Schlaf aller aliierten * Dieser Zauber ermoeglicht es dem Traeumer, den Schlaf aller aliierten
* Einheiten in der Region so zu beeinflussen, daß sie fuer einige Zeit * Einheiten in der Region so zu beeinflussen, da<EFBFBD> sie fuer einige Zeit
* einen Bonus von 1 Talentstufe in allen Talenten * einen Bonus von 1 Talentstufe in allen Talenten
* bekommen. Der Zauber wirkt erst im Folgemonat. * bekommen. Der Zauber wirkt erst im Folgemonat.
* Flags: * Flags:

View File

@ -10,7 +10,6 @@
without prior permission by the authors of Eressea. without prior permission by the authors of Eressea.
*/ */
#include <platform.h> #include <platform.h>
#include <kernel/config.h>
#include "combatspells.h" #include "combatspells.h"
/* kernel includes */ /* kernel includes */
@ -81,7 +80,7 @@ static const char *spell_damage(int sp)
{ {
switch (sp) { switch (sp) {
case 0: case 0:
/* meist tödlich 20-65 HP */ /* meist t<EFBFBD>dlich 20-65 HP */
return "5d10+15"; return "5d10+15";
case 1: case 1:
/* sehr variabel 4-48 HP */ /* sehr variabel 4-48 HP */
@ -90,7 +89,7 @@ static const char *spell_damage(int sp)
/* leicht verwundet 4-18 HP */ /* leicht verwundet 4-18 HP */
return "2d8+2"; return "2d8+2";
case 3: case 3:
/* fast immer tödlich 30-50 HP */ /* fast immer t<EFBFBD>dlich 30-50 HP */
return "5d5+25"; return "5d5+25";
case 4: case 4:
/* verwundet 11-26 HP */ /* verwundet 11-26 HP */
@ -382,11 +381,11 @@ int sp_combatrosthauch(struct castorder * co)
ql_free(fgs); ql_free(fgs);
if (k == 0) { if (k == 0) {
/* keine Waffen mehr da, die zerstört werden könnten */ /* keine Waffen mehr da, die zerst<EFBFBD>rt werden k<>nnten */
message *msg = msg_message("rust_effect_1", "mage", fi->unit); message *msg = msg_message("rust_effect_1", "mage", fi->unit);
message_all(b, msg); message_all(b, msg);
msg_release(msg); msg_release(msg);
fi->magic = 0; /* kämpft nichtmagisch weiter */ fi->magic = 0; /* k<EFBFBD>mpft nichtmagisch weiter */
level = 0; level = 0;
} }
else { else {
@ -453,7 +452,7 @@ int sp_speed(struct castorder * co)
allies = allies =
count_allies(fi->side, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE, ALLY_ANY); count_allies(fi->side, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE, ALLY_ANY);
/* maximal 2*allies Versuche ein Opfer zu finden, ansonsten bestände /* maximal 2*allies Versuche ein Opfer zu finden, ansonsten best<EFBFBD>nde
* die Gefahr eine Endlosschleife*/ * die Gefahr eine Endlosschleife*/
allies *= 2; allies *= 2;
@ -546,7 +545,7 @@ int sp_mindblast_temp(struct castorder * co)
assert(dt.fighter); assert(dt.fighter);
du = dt.fighter->unit; du = dt.fighter->unit;
if (fval(du, UFL_MARK)) { if (du->flags & UFL_MARK) {
/* not this one again */ /* not this one again */
continue; continue;
} }
@ -564,7 +563,7 @@ int sp_mindblast_temp(struct castorder * co)
} }
force -= du->number; force -= du->number;
} }
fset(du, UFL_MARK); du->flags |= UFL_MARK;
reset = 1; reset = 1;
enemies -= du->number; enemies -= du->number;
} }
@ -572,7 +571,7 @@ int sp_mindblast_temp(struct castorder * co)
if (reset) { if (reset) {
unit *u; unit *u;
for (u = b->region->units; u; u = u->next) { for (u = b->region->units; u; u = u->next) {
freset(u, UFL_MARK); u->flags &= ~UFL_MARK;
} }
} }
@ -612,7 +611,7 @@ int sp_mindblast(struct castorder * co)
assert(dt.fighter); assert(dt.fighter);
du = dt.fighter->unit; du = dt.fighter->unit;
if (fval(du, UFL_MARK)) { if (du->flags & UFL_MARK) {
/* not this one again */ /* not this one again */
continue; continue;
} }
@ -640,7 +639,7 @@ int sp_mindblast(struct castorder * co)
else { else {
/* only works against humanoids, don't try others. but do remove them /* only works against humanoids, don't try others. but do remove them
* from 'force' once or we may never terminate. */ * from 'force' once or we may never terminate. */
fset(du, UFL_MARK); du->flags |= UFL_MARK;
reset = 1; reset = 1;
} }
enemies -= du->number; enemies -= du->number;
@ -649,7 +648,7 @@ int sp_mindblast(struct castorder * co)
if (reset) { if (reset) {
unit *u; unit *u;
for (u = b->region->units; u; u = u->next) { for (u = b->region->units; u; u = u->next) {
freset(u, UFL_MARK); u->flags &= ~UFL_MARK;
} }
} }
@ -866,8 +865,8 @@ static fighter *summon_allies(const fighter *fi, const race *rc, int number) {
u->hp = u->number * unit_max_hp(u); u->hp = u->number * unit_max_hp(u);
if (fval(mage, UFL_ANON_FACTION)) { if (mage->flags & UFL_ANON_FACTION) {
fset(u, UFL_ANON_FACTION); u->flags |= UFL_ANON_FACTION;
} }
a = a_new(&at_unitdissolve); a = a_new(&at_unitdissolve);
@ -932,8 +931,8 @@ int sp_shadowknights(struct castorder * co)
u->hp = u->number * unit_max_hp(u); u->hp = u->number * unit_max_hp(u);
if (fval(mage, UFL_ANON_FACTION)) { if (mage->flags & UFL_ANON_FACTION) {
fset(u, UFL_ANON_FACTION); u->flags |= UFL_ANON_FACTION;
} }
a = a_new(&at_unitdissolve); a = a_new(&at_unitdissolve);
@ -1016,7 +1015,7 @@ int sp_chaosrow(struct castorder * co)
continue; continue;
if (power <= 0.0) if (power <= 0.0)
break; break;
/* force sollte wegen des _max(0,x) nicht unter 0 fallen können */ /* force sollte wegen des _max(0,x) nicht unter 0 fallen k<EFBFBD>nnen */
if (is_magic_resistant(mage, df->unit, 0)) if (is_magic_resistant(mage, df->unit, 0))
continue; continue;
@ -1068,7 +1067,7 @@ int sp_chaosrow(struct castorder * co)
} }
/* Gesang der Furcht (Kampfzauber) */ /* Gesang der Furcht (Kampfzauber) */
/* Panik (Präkampfzauber) */ /* Panik (Pr<EFBFBD>kampfzauber) */
int sp_flee(struct castorder * co) int sp_flee(struct castorder * co)
{ {
@ -1114,13 +1113,13 @@ int sp_flee(struct castorder * co)
if (force < 0) if (force < 0)
break; break;
if (df->person[n].flags & FL_PANICED) { /* bei SPL_SONG_OF_FEAR möglich */ if (df->person[n].flags & FL_PANICED) { /* bei SPL_SONG_OF_FEAR m<EFBFBD>glich */
df->person[n].attack -= 1; df->person[n].attack -= 1;
--force; --force;
++panik; ++panik;
} }
else if (!(df->person[n].flags & FL_COURAGE) else if (!(df->person[n].flags & FL_COURAGE)
|| !fval(u_race(df->unit), RCF_UNDEAD)) { || !(u_race(df->unit)->flags & RCF_UNDEAD)) {
if (!is_magic_resistant(mage, df->unit, 0)) { if (!is_magic_resistant(mage, df->unit, 0)) {
df->person[n].flags |= FL_PANICED; df->person[n].flags |= FL_PANICED;
++panik; ++panik;
@ -1165,7 +1164,7 @@ int sp_hero(struct castorder * co)
allies = allies =
count_allies(fi->side, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE, ALLY_ANY); count_allies(fi->side, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE, ALLY_ANY);
/* maximal 2*allies Versuche ein Opfer zu finden, ansonsten bestände /* maximal 2*allies Versuche ein Opfer zu finden, ansonsten best<EFBFBD>nde
* die Gefahr eine Endlosschleife*/ * die Gefahr eine Endlosschleife*/
allies *= 2; allies *= 2;
@ -1222,7 +1221,7 @@ int sp_berserk(struct castorder * co)
allies = allies =
count_allies(fi->side, FIGHT_ROW, BEHIND_ROW - 1, SELECT_ADVANCE, ALLY_ANY); count_allies(fi->side, FIGHT_ROW, BEHIND_ROW - 1, SELECT_ADVANCE, ALLY_ANY);
/* maximal 2*allies Versuche ein Opfer zu finden, ansonsten bestände /* maximal 2*allies Versuche ein Opfer zu finden, ansonsten best<EFBFBD>nde
* die Gefahr eine Endlosschleife*/ * die Gefahr eine Endlosschleife*/
allies *= 2; allies *= 2;
@ -1419,7 +1418,7 @@ int sp_reeling_arrows(struct castorder * co)
} }
/* Magier weicht dem Kampf aus. Wenn er sich bewegen kann, zieht er in /* Magier weicht dem Kampf aus. Wenn er sich bewegen kann, zieht er in
* eine Nachbarregion, wobei ein NACH berücksichtigt wird. Ansonsten * eine Nachbarregion, wobei ein NACH ber<EFBFBD>cksichtigt wird. Ansonsten
* bleibt er stehen und nimmt nicht weiter am Kampf teil. */ * bleibt er stehen und nimmt nicht weiter am Kampf teil. */
int sp_denyattack(struct castorder * co) int sp_denyattack(struct castorder * co)
{ {
@ -1432,17 +1431,16 @@ int sp_denyattack(struct castorder * co)
region *r = b->region; region *r = b->region;
message *m; message *m;
/* Fliehende Einheiten verlassen auf jeden Fall Gebäude und Schiffe. */ /* Fliehende Einheiten verlassen auf jeden Fall Geb<EFBFBD>ude und Schiffe. */
if (!fval(r->terrain, SEA_REGION)) { if (!(r->terrain->flags & SEA_REGION)) {
leave(mage, false); leave(mage, false);
} }
/* und bewachen nicht */ /* und bewachen nicht */
setguard(mage, false); setguard(mage, false);
/* irgendwie den langen befehl sperren */ /* irgendwie den langen befehl sperren */
/* fset(fi, FIG_ATTACKED); */
/* wir tun so, als wäre die Person geflohen */ /* wir tun so, als w<EFBFBD>re die Person geflohen */
fset(fi, FIG_NOLOOT); fi->flags |= FIG_NOLOOT;
fi->run.hp = mage->hp; fi->run.hp = mage->hp;
fi->run.number = mage->number; fi->run.number = mage->number;
/* fighter leeren */ /* fighter leeren */
@ -1480,7 +1478,7 @@ int sp_armorshield(struct castorder * co)
message_all(b, m); message_all(b, m);
msg_release(m); msg_release(m);
/* gibt Rüstung +effect für duration Treffer */ /* gibt R<EFBFBD>stung +effect f<>r duration Treffer */
switch (sp->id) { switch (sp->id) {
case SPL_ARMORSHIELD: case SPL_ARMORSHIELD:
@ -1539,7 +1537,7 @@ int sp_fumbleshield(struct castorder * co)
message_all(b, m); message_all(b, m);
msg_release(m); msg_release(m);
/* der erste Zauber schlägt mit 100% fehl */ /* der erste Zauber schl<EFBFBD>gt mit 100% fehl */
switch (sp->id) { switch (sp->id) {
case SPL_DRAIG_FUMBLESHIELD: case SPL_DRAIG_FUMBLESHIELD:
@ -1605,7 +1603,7 @@ int sp_reanimate(struct castorder * co)
&& u_race(tf->unit) != get_race(RC_DAEMON) && u_race(tf->unit) != get_race(RC_DAEMON)
&& (chance(c))) { && (chance(c))) {
assert(tf->alive < tf->unit->number); assert(tf->alive < tf->unit->number);
/* t.fighter->person[].hp beginnt mit t.index = 0 zu zählen, /* t.fighter->person[].hp beginnt mit t.index = 0 zu z<EFBFBD>hlen,
* t.fighter->alive ist jedoch die Anzahl lebender in der Einheit, * t.fighter->alive ist jedoch die Anzahl lebender in der Einheit,
* also sind die hp von t.fighter->alive * also sind die hp von t.fighter->alive
* t.fighter->hitpoints[t.fighter->alive-1] und der erste Tote * t.fighter->hitpoints[t.fighter->alive-1] und der erste Tote
@ -1668,7 +1666,7 @@ static int heal_fighters(quicklist * fgs, int *power, bool heal_monsters)
break; break;
/* Untote kann man nicht heilen */ /* Untote kann man nicht heilen */
if (df->unit->number == 0 || fval(u_race(df->unit), RCF_NOHEAL)) if (df->unit->number == 0 || (u_race(df->unit)->flags & RCF_NOHEAL))
continue; continue;
/* wir heilen erstmal keine Monster */ /* wir heilen erstmal keine Monster */
@ -1711,8 +1709,8 @@ int sp_healing(struct castorder * co)
message *msg; message *msg;
bool use_item = has_ao_healing(mage); bool use_item = has_ao_healing(mage);
/* bis zu 11 Personen pro Stufe (einen HP müssen sie ja noch /* bis zu 11 Personen pro Stufe (einen HP m<EFBFBD>ssen sie ja noch
* haben, sonst wären sie tot) nnen geheilt werden */ * haben, sonst w<EFBFBD>ren sie tot) k<EFBFBD>nnen geheilt werden */
if (use_item) { if (use_item) {
healhp *= 2; healhp *= 2;
@ -1758,7 +1756,7 @@ int sp_undeadhero(struct castorder * co)
int force = (int)get_force(power, 0); int force = (int)get_force(power, 0);
double c = 0.50 + 0.02 * power; double c = 0.50 + 0.02 * power;
/* Liste aus allen Kämpfern */ /* Liste aus allen K<EFBFBD>mpfern */
fgs = fighters(b, fi->side, FIGHT_ROW, AVOID_ROW, FS_ENEMY | FS_HELP); fgs = fighters(b, fi->side, FIGHT_ROW, AVOID_ROW, FS_ENEMY | FS_HELP);
scramble_fighters(fgs); scramble_fighters(fgs);
@ -1776,7 +1774,7 @@ int sp_undeadhero(struct castorder * co)
if (df->alive + df->run.number < du->number) { if (df->alive + df->run.number < du->number) {
int j = 0; int j = 0;
/* Wieviele Untote können wir aus dieser Einheit wecken? */ /* Wieviele Untote k<EFBFBD>nnen wir aus dieser Einheit wecken? */
for (n = df->alive + df->run.number; n != du->number; n++) { for (n = df->alive + df->run.number; n != du->number; n++) {
if (chance(c)) { if (chance(c)) {
++j; ++j;
@ -1818,8 +1816,8 @@ int sp_undeadhero(struct castorder * co)
} }
/* inherit stealth from magician */ /* inherit stealth from magician */
if (fval(mage, UFL_ANON_FACTION)) { if (mage->flags & UFL_ANON_FACTION) {
fset(u, UFL_ANON_FACTION); u->flags |= UFL_ANON_FACTION;
} }
/* transfer dead people to new unit, set hitpoints to those of old unit */ /* transfer dead people to new unit, set hitpoints to those of old unit */

View File

@ -1,5 +1,4 @@
#include <platform.h> #include <platform.h>
#include <kernel/config.h>
#include "flyingship.h" #include "flyingship.h"
#include <kernel/build.h> #include <kernel/build.h>
@ -27,8 +26,8 @@
* Stufe: 6 * Stufe: 6
* *
* Wirkung: * Wirkung:
* Laeßt ein Schiff eine Runde lang fliegen. Wirkt nur auf Boote * Lae<EFBFBD>t ein Schiff eine Runde lang fliegen. Wirkt nur auf Boote
* bis Kapazität 50. * bis Kapazit<EFBFBD>t 50.
* Kombinierbar mit "Guenstige Winde", aber nicht mit "Sturmwind". * Kombinierbar mit "Guenstige Winde", aber nicht mit "Sturmwind".
* *
* Flag: * Flag:
@ -81,18 +80,20 @@ int sp_flying_ship(castorder * co)
/* melden, 1x pro Partei */ /* melden, 1x pro Partei */
for (u = r->units; u; u = u->next) for (u = r->units; u; u = u->next)
freset(u->faction, FFL_SELECT); u->faction->flags &= ~FFL_SELECT;
for (u = r->units; u; u = u->next) { for (u = r->units; u; u = u->next) {
/* das sehen natuerlich auch die Leute an Land */ /* das sehen natuerlich auch die Leute an Land */
if (!fval(u->faction, FFL_SELECT)) { if (!(u->faction->flags & FFL_SELECT)) {
fset(u->faction, FFL_SELECT); u->faction->flags |= FFL_SELECT;
if (!m) if (!m) {
m = msg_message("flying_ship_result", "mage ship", mage, sh); m = msg_message("flying_ship_result", "mage ship", mage, sh);
}
add_message(&u->faction->msgs, m); add_message(&u->faction->msgs, m);
} }
} }
if (m) if (m) {
msg_release(m); msg_release(m);
}
return cast_level; return cast_level;
} }
@ -120,7 +121,7 @@ static int flyingship_age(curse * c)
{ {
ship *sh = (ship *)c->data.v; ship *sh = (ship *)c->data.v;
if (sh && c->duration == 1) { if (sh && c->duration == 1) {
freset(sh, SF_FLYING); sh->flags &= ~SF_FLYING;
return 1; return 1;
} }
return 0; return 0;

View File

@ -28,6 +28,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <float.h> #include <float.h>
#include <ctype.h> #include <ctype.h>
int lovar(double xpct_x2)
{
int n = (int)(xpct_x2 * 500) + 1;
if (n == 0)
return 0;
return (rng_int() % n + rng_int() % n) / 1000;
}
/* NormalRand aus python, random.py geklaut, dort ist Referenz auf /* NormalRand aus python, random.py geklaut, dort ist Referenz auf
* den Algorithmus. mu = Mittelwert, sigma = Standardabweichung. * den Algorithmus. mu = Mittelwert, sigma = Standardabweichung.
* http://de.wikipedia.org/wiki/Standardabweichung#Diskrete_Gleichverteilung.2C_W.C3.BCrfel * http://de.wikipedia.org/wiki/Standardabweichung#Diskrete_Gleichverteilung.2C_W.C3.BCrfel

View File

@ -23,13 +23,14 @@ extern "C" {
#endif #endif
/* in dice.c: */ /* in dice.c: */
extern int dice_rand(const char *str); int dice_rand(const char *str);
extern int dice(int count, int value); int dice(int count, int value);
/* in rand.c: */ /* in rand.c: */
extern double normalvariate(double mu, double sigma); int lovar(double xpct_x2);
extern int ntimespprob(int n, double p, double mod); double normalvariate(double mu, double sigma);
extern bool chance(double x); int ntimespprob(int n, double p, double mod);
bool chance(double x);
/* a random source that generates numbers in [0, 1). /* a random source that generates numbers in [0, 1).
By calling the random_source_inject... functions you can set a special random source, By calling the random_source_inject... functions you can set a special random source,

1
tolua Submodule

@ -0,0 +1 @@
Subproject commit de289b60c5009b6ac8e786f39432c08eadbb69b7