forked from github/server
parent
476c655cd3
commit
6c9e1fb345
|
@ -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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
register_reports();
|
||||
|
|
|
@ -56,7 +56,6 @@ struct param;
|
|||
|
||||
const char * game_name(void);
|
||||
int game_id(void);
|
||||
int lovar(double xpct_x2);
|
||||
/* returns a value between [0..xpct_2], generated with two dice */
|
||||
|
||||
void init_locale(struct locale *lang);
|
||||
|
|
|
@ -117,7 +117,7 @@ extern "C" {
|
|||
float healing;
|
||||
double maxaura; /* Faktor auf Maximale Aura */
|
||||
double regaura; /* Faktor auf Regeneration */
|
||||
double recruit_multi; /* Faktor für Bauernverbrauch */
|
||||
double recruit_multi; /* Faktor f<EFBFBD>r Bauernverbrauch */
|
||||
int index;
|
||||
int recruitcost;
|
||||
int maintenance;
|
||||
|
@ -132,8 +132,8 @@ extern "C" {
|
|||
int armor;
|
||||
int at_default; /* Angriffsskill Unbewaffnet (default: -2) */
|
||||
int df_default; /* Verteidigungsskill Unbewaffnet (default: -2) */
|
||||
int at_bonus; /* Verändert den Angriffsskill (default: 0) */
|
||||
int df_bonus; /* Verändert den Verteidigungskill (default: 0) */
|
||||
int at_bonus; /* Ver<EFBFBD>ndert den Angriffsskill (default: 0) */
|
||||
int df_bonus; /* Ver<EFBFBD>ndert den Verteidigungskill (default: 0) */
|
||||
struct param *parameters; // additional properties, for an example see natural_armor
|
||||
const struct spell *precombatspell;
|
||||
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_FLY (1<<7) /* kann fliegen */
|
||||
#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_NOTEACH (1<<11) /* kann nicht lehren */
|
||||
#define RCF_HORSE (1<<12) /* Einheit ist Pferd, sozusagen */
|
||||
#define RCF_DESERT (1<<13) /* 5% Chance, das Einheit desertiert */
|
||||
#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_NOWEAPONS (1<<17) /* Einheit kann keine Waffen benutzen */
|
||||
#define RCF_SHAPESHIFT (1<<18) /* Kann TARNE RASSE benutzen. */
|
||||
#define RCF_SHAPESHIFTANY (1<<19) /* Kann TARNE RASSE "string" benutzen. */
|
||||
#define RCF_UNDEAD (1<<20) /* Undead. */
|
||||
#define RCF_DRAGON (1<<21) /* Drachenart (für Zauber) */
|
||||
#define RCF_COASTAL (1<<22) /* kann in Landregionen an der Küste sein */
|
||||
#define RCF_DRAGON (1<<21) /* Drachenart (f<EFBFBD>r Zauber) */
|
||||
#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_CANSAIL (1<<24) /* Einheit darf Schiffe betreten */
|
||||
#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 */
|
||||
|
||||
/* Economic flags */
|
||||
#define ECF_KEEP_ITEM (1<<1) /* gibt Gegenstände weg */
|
||||
#define GIVEPERSON (1<<2) /* übergibt Personen */
|
||||
#define GIVEUNIT (1<<3) /* Einheiten an andere Partei übergeben */
|
||||
#define GETITEM (1<<4) /* nimmt Gegenstände an */
|
||||
#define ECF_KEEP_ITEM (1<<1) /* gibt Gegenst<EFBFBD>nde weg */
|
||||
#define GIVEPERSON (1<<2) /* <EFBFBD>bergibt Personen */
|
||||
#define GIVEUNIT (1<<3) /* Einheiten an andere Partei <EFBFBD>bergeben */
|
||||
#define GETITEM (1<<4) /* nimmt Gegenst<EFBFBD>nde an */
|
||||
#define ECF_REC_ETHEREAL (1<<7) /* Rekrutiert aus dem Nichts */
|
||||
#define ECF_REC_UNLIMITED (1<<8) /* Rekrutiert ohne Limit */
|
||||
|
||||
/* Battle-Flags */
|
||||
#define BF_EQUIPMENT (1<<0) /* Kann Ausrüstung benutzen */
|
||||
#define BF_NOBLOCK (1<<1) /* Wird in die Rückzugsberechnung nicht einbezogen */
|
||||
#define BF_EQUIPMENT (1<<0) /* Kann Ausr<EFBFBD>stung benutzen */
|
||||
#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_CUT (1<<3) /* Halber Schaden durch CUT */
|
||||
#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 race * rc);
|
||||
|
||||
#define playerrace(rc) (!fval((rc), RCF_NPC))
|
||||
#define dragonrace(rc) (fval(rc, RCF_DRAGON))
|
||||
#define humanoidrace(rc) (fval((rc), RCF_UNDEAD) || (rc)==get_race(RC_DRACOID) || playerrace(rc))
|
||||
#define illusionaryrace(rc) (fval(rc, RCF_ILLUSIONARY))
|
||||
#define playerrace(rc) (!((rc)->flags & RCF_NPC))
|
||||
#define dragonrace(rc) ((rc)->flags & RCF_DRAGON)
|
||||
#define humanoidrace(rc) (((rc)->flags & RCF_UNDEAD) || (rc)==get_race(RC_DRACOID) || playerrace(rc))
|
||||
#define illusionaryrace(rc) ((rc)->flags & RCF_ILLUSIONARY)
|
||||
|
||||
bool allowed_dragon(const struct region *src,
|
||||
const struct region *target);
|
||||
|
|
|
@ -51,8 +51,8 @@ extern "C" {
|
|||
int minskill; /* min. skill to sail this (crew) */
|
||||
int sumskill; /* min. sum of crew+captain */
|
||||
|
||||
int at_bonus; /* Verändert den Angriffsskill (default: 0) */
|
||||
int df_bonus; /* Verändert den Verteidigungskill (default: 0) */
|
||||
int at_bonus; /* Ver<EFBFBD>ndert den Angriffsskill (default: 0) */
|
||||
int df_bonus; /* Ver<EFBFBD>ndert den Verteidigungskill (default: 0) */
|
||||
float tac_bonus;
|
||||
|
||||
struct terrain_type ** coasts; /* coast that this ship can land on */
|
||||
|
@ -70,12 +70,12 @@ extern "C" {
|
|||
|
||||
#define NOSHIP NULL
|
||||
|
||||
#define SF_DRIFTED 1<<0
|
||||
#define SF_MOVED 1<<1
|
||||
#define SF_DAMAGED 1<<2 /* for use in combat */
|
||||
#define SF_SELECT 1<<3 /* previously FL_DH */
|
||||
#define SF_FISHING 1<<4 /* was on an ocean, can fish */
|
||||
#define SF_FLYING 1<<5 /* the ship can fly */
|
||||
#define SF_DRIFTED (1<<0)
|
||||
#define SF_MOVED (1<<1)
|
||||
#define SF_DAMAGED (1<<2) /* for use in combat */
|
||||
#define SF_SELECT (1<<3) /* previously FL_DH */
|
||||
#define SF_FISHING (1<<4) /* was on an ocean, can fish */
|
||||
#define SF_FLYING (1<<5) /* the ship can fly */
|
||||
|
||||
#define SFL_SAVEMASK (SF_FLYING)
|
||||
#define INCOME_FISHING 10
|
||||
|
|
32
src/spells.c
32
src/spells.c
|
@ -446,7 +446,7 @@ report_effect(region * r, unit * mage, message * seen, message * unseen)
|
|||
* Vertrauten sehen, und durch den Vertrauten zaubern, allerdings nur
|
||||
* mit seiner halben Stufe. Je nach Vertrautem erhaelt der Magier
|
||||
* 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.
|
||||
*
|
||||
* 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
|
||||
* Kategorie: Region, negativ
|
||||
* Gebiet: Gwyrrd
|
||||
|
@ -1907,7 +1907,7 @@ static int sp_treewalkexit(castorder * co)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Koordinaten setzen und Region loeschen fuer Überpruefung auf
|
||||
/* Koordinaten setzen und Region loeschen fuer <EFBFBD>berpruefung auf
|
||||
* Gueltigkeit */
|
||||
rt = pa->param[0]->data.r;
|
||||
tax = rt->x;
|
||||
|
@ -2194,7 +2194,7 @@ static int sp_ironkeeper(castorder * co)
|
|||
setstatus(keeper, ST_AVOID); /* kaempft nicht */
|
||||
setguard(keeper, true);
|
||||
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()) {
|
||||
fset(keeper, UFL_ANON_FACTION);
|
||||
}
|
||||
|
@ -2572,7 +2572,7 @@ void patzer_fumblecurse(const castorder * co)
|
|||
*
|
||||
* Wirkung:
|
||||
* 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.
|
||||
*
|
||||
* 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;
|
||||
|
||||
/* Jede Person benötigt mindestens 1 HP */
|
||||
/* Jede Person ben<EFBFBD>tigt mindestens 1 HP */
|
||||
if (hp < u->number) {
|
||||
if (hp < 0) { /* Einheit tot */
|
||||
hp = 0;
|
||||
|
@ -3764,7 +3764,7 @@ static int sp_rallypeasantmob(castorder * co)
|
|||
* Gebiet: Cerddor
|
||||
* Wirkung:
|
||||
* 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
|
||||
* koennen.
|
||||
*
|
||||
|
@ -4025,7 +4025,7 @@ static int sp_recruit(castorder * co)
|
|||
return 0;
|
||||
}
|
||||
/* 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,
|
||||
* ist das Verhaeltniss von ausgegebene Aura pro Bauer bei Stufe 2
|
||||
* 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
|
||||
* Gebiet: Cerddor
|
||||
* Wirkung:
|
||||
|
@ -4112,8 +4112,8 @@ static int sp_bigrecruit(castorder * co)
|
|||
* Gebiet: Cerddor
|
||||
* Wirkung:
|
||||
* Erliegt die Einheit dem Zauber, so wird sie dem Magier alles
|
||||
* erzaehlen, was sie ueber die gefragte Region weiß. Ist in der Region
|
||||
* niemand ihrer Partei, so weiß sie nichts zu berichten. Auch kann
|
||||
* erzaehlen, was sie ueber die gefragte Region wei<EFBFBD>. Ist in der Region
|
||||
* niemand ihrer Partei, so wei<EFBFBD> sie nichts zu berichten. Auch kann
|
||||
* sie nur das erzaehlen, was sie selber sehen koennte.
|
||||
* Flags:
|
||||
* (UNITSPELL | TESTCANSEE)
|
||||
|
@ -4176,7 +4176,7 @@ static int sp_pump(castorder * co)
|
|||
* Stufe: 6
|
||||
* Gebiet: Cerddor
|
||||
* 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
|
||||
* sie zum ueberleben braucht. Wirkt gegen Magieresistenz.
|
||||
* _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)
|
||||
return 0;
|
||||
|
||||
/* finde das groeßte Talent: */
|
||||
/* finde das groe<EFBFBD>te Talent: */
|
||||
for (i = 0; i != target->skill_size; ++i) {
|
||||
skill *sv = target->skills + i;
|
||||
if (smax == NULL || skill_compare(sv, smax) > 0) {
|
||||
|
@ -4479,7 +4479,7 @@ int sp_puttorest(castorder * co)
|
|||
return co->level;
|
||||
}
|
||||
|
||||
/* Name: Traumschloeßchen
|
||||
/* Name: Traumschloe<EFBFBD>chen
|
||||
* Stufe: 3
|
||||
* Kategorie: Region, Gebaeude, positiv
|
||||
* Gebiet: Illaun
|
||||
|
@ -4514,7 +4514,7 @@ int sp_icastle(castorder * co)
|
|||
|
||||
b = new_building(bt_illusion, r, mage->faction->locale);
|
||||
|
||||
/* Groeße festlegen. */
|
||||
/* Groe<EFBFBD>e festlegen. */
|
||||
if (type == bt_illusion) {
|
||||
b->size = (rng_int() % (int)((power * power) + 1) * 10);
|
||||
}
|
||||
|
@ -4692,7 +4692,7 @@ int sp_baddreams(castorder * co)
|
|||
* Kategorie:
|
||||
* Wirkung:
|
||||
* 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
|
||||
* bekommen. Der Zauber wirkt erst im Folgemonat.
|
||||
* Flags:
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
without prior permission by the authors of Eressea.
|
||||
*/
|
||||
#include <platform.h>
|
||||
#include <kernel/config.h>
|
||||
#include "combatspells.h"
|
||||
|
||||
/* kernel includes */
|
||||
|
@ -81,7 +80,7 @@ static const char *spell_damage(int sp)
|
|||
{
|
||||
switch (sp) {
|
||||
case 0:
|
||||
/* meist tödlich 20-65 HP */
|
||||
/* meist t<EFBFBD>dlich 20-65 HP */
|
||||
return "5d10+15";
|
||||
case 1:
|
||||
/* sehr variabel 4-48 HP */
|
||||
|
@ -90,7 +89,7 @@ static const char *spell_damage(int sp)
|
|||
/* leicht verwundet 4-18 HP */
|
||||
return "2d8+2";
|
||||
case 3:
|
||||
/* fast immer tödlich 30-50 HP */
|
||||
/* fast immer t<EFBFBD>dlich 30-50 HP */
|
||||
return "5d5+25";
|
||||
case 4:
|
||||
/* verwundet 11-26 HP */
|
||||
|
@ -382,11 +381,11 @@ int sp_combatrosthauch(struct castorder * co)
|
|||
ql_free(fgs);
|
||||
|
||||
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_all(b, msg);
|
||||
msg_release(msg);
|
||||
fi->magic = 0; /* kämpft nichtmagisch weiter */
|
||||
fi->magic = 0; /* k<EFBFBD>mpft nichtmagisch weiter */
|
||||
level = 0;
|
||||
}
|
||||
else {
|
||||
|
@ -453,7 +452,7 @@ int sp_speed(struct castorder * co)
|
|||
|
||||
allies =
|
||||
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*/
|
||||
allies *= 2;
|
||||
|
||||
|
@ -546,7 +545,7 @@ int sp_mindblast_temp(struct castorder * co)
|
|||
|
||||
assert(dt.fighter);
|
||||
du = dt.fighter->unit;
|
||||
if (fval(du, UFL_MARK)) {
|
||||
if (du->flags & UFL_MARK) {
|
||||
/* not this one again */
|
||||
continue;
|
||||
}
|
||||
|
@ -564,7 +563,7 @@ int sp_mindblast_temp(struct castorder * co)
|
|||
}
|
||||
force -= du->number;
|
||||
}
|
||||
fset(du, UFL_MARK);
|
||||
du->flags |= UFL_MARK;
|
||||
reset = 1;
|
||||
enemies -= du->number;
|
||||
}
|
||||
|
@ -572,7 +571,7 @@ int sp_mindblast_temp(struct castorder * co)
|
|||
if (reset) {
|
||||
unit *u;
|
||||
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);
|
||||
du = dt.fighter->unit;
|
||||
if (fval(du, UFL_MARK)) {
|
||||
if (du->flags & UFL_MARK) {
|
||||
/* not this one again */
|
||||
continue;
|
||||
}
|
||||
|
@ -640,7 +639,7 @@ int sp_mindblast(struct castorder * co)
|
|||
else {
|
||||
/* only works against humanoids, don't try others. but do remove them
|
||||
* from 'force' once or we may never terminate. */
|
||||
fset(du, UFL_MARK);
|
||||
du->flags |= UFL_MARK;
|
||||
reset = 1;
|
||||
}
|
||||
enemies -= du->number;
|
||||
|
@ -649,7 +648,7 @@ int sp_mindblast(struct castorder * co)
|
|||
if (reset) {
|
||||
unit *u;
|
||||
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);
|
||||
|
||||
if (fval(mage, UFL_ANON_FACTION)) {
|
||||
fset(u, UFL_ANON_FACTION);
|
||||
if (mage->flags & UFL_ANON_FACTION) {
|
||||
u->flags |= UFL_ANON_FACTION;
|
||||
}
|
||||
|
||||
a = a_new(&at_unitdissolve);
|
||||
|
@ -932,8 +931,8 @@ int sp_shadowknights(struct castorder * co)
|
|||
|
||||
u->hp = u->number * unit_max_hp(u);
|
||||
|
||||
if (fval(mage, UFL_ANON_FACTION)) {
|
||||
fset(u, UFL_ANON_FACTION);
|
||||
if (mage->flags & UFL_ANON_FACTION) {
|
||||
u->flags |= UFL_ANON_FACTION;
|
||||
}
|
||||
|
||||
a = a_new(&at_unitdissolve);
|
||||
|
@ -1016,7 +1015,7 @@ int sp_chaosrow(struct castorder * co)
|
|||
continue;
|
||||
if (power <= 0.0)
|
||||
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))
|
||||
continue;
|
||||
|
@ -1068,7 +1067,7 @@ int sp_chaosrow(struct castorder * co)
|
|||
}
|
||||
|
||||
/* Gesang der Furcht (Kampfzauber) */
|
||||
/* Panik (Präkampfzauber) */
|
||||
/* Panik (Pr<EFBFBD>kampfzauber) */
|
||||
|
||||
int sp_flee(struct castorder * co)
|
||||
{
|
||||
|
@ -1114,13 +1113,13 @@ int sp_flee(struct castorder * co)
|
|||
if (force < 0)
|
||||
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;
|
||||
--force;
|
||||
++panik;
|
||||
}
|
||||
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)) {
|
||||
df->person[n].flags |= FL_PANICED;
|
||||
++panik;
|
||||
|
@ -1165,7 +1164,7 @@ int sp_hero(struct castorder * co)
|
|||
|
||||
allies =
|
||||
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*/
|
||||
allies *= 2;
|
||||
|
||||
|
@ -1222,7 +1221,7 @@ int sp_berserk(struct castorder * co)
|
|||
|
||||
allies =
|
||||
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*/
|
||||
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
|
||||
* 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. */
|
||||
int sp_denyattack(struct castorder * co)
|
||||
{
|
||||
|
@ -1432,17 +1431,16 @@ int sp_denyattack(struct castorder * co)
|
|||
region *r = b->region;
|
||||
message *m;
|
||||
|
||||
/* Fliehende Einheiten verlassen auf jeden Fall Gebäude und Schiffe. */
|
||||
if (!fval(r->terrain, SEA_REGION)) {
|
||||
/* Fliehende Einheiten verlassen auf jeden Fall Geb<EFBFBD>ude und Schiffe. */
|
||||
if (!(r->terrain->flags & SEA_REGION)) {
|
||||
leave(mage, false);
|
||||
}
|
||||
/* und bewachen nicht */
|
||||
setguard(mage, false);
|
||||
/* irgendwie den langen befehl sperren */
|
||||
/* fset(fi, FIG_ATTACKED); */
|
||||
|
||||
/* wir tun so, als wäre die Person geflohen */
|
||||
fset(fi, FIG_NOLOOT);
|
||||
/* wir tun so, als w<EFBFBD>re die Person geflohen */
|
||||
fi->flags |= FIG_NOLOOT;
|
||||
fi->run.hp = mage->hp;
|
||||
fi->run.number = mage->number;
|
||||
/* fighter leeren */
|
||||
|
@ -1480,7 +1478,7 @@ int sp_armorshield(struct castorder * co)
|
|||
message_all(b, m);
|
||||
msg_release(m);
|
||||
|
||||
/* gibt Rüstung +effect für duration Treffer */
|
||||
/* gibt R<EFBFBD>stung +effect f<>r duration Treffer */
|
||||
|
||||
switch (sp->id) {
|
||||
case SPL_ARMORSHIELD:
|
||||
|
@ -1539,7 +1537,7 @@ int sp_fumbleshield(struct castorder * co)
|
|||
message_all(b, m);
|
||||
msg_release(m);
|
||||
|
||||
/* der erste Zauber schlägt mit 100% fehl */
|
||||
/* der erste Zauber schl<EFBFBD>gt mit 100% fehl */
|
||||
|
||||
switch (sp->id) {
|
||||
case SPL_DRAIG_FUMBLESHIELD:
|
||||
|
@ -1605,7 +1603,7 @@ int sp_reanimate(struct castorder * co)
|
|||
&& u_race(tf->unit) != get_race(RC_DAEMON)
|
||||
&& (chance(c))) {
|
||||
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,
|
||||
* also sind die hp von t.fighter->alive
|
||||
* 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;
|
||||
|
||||
/* 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;
|
||||
|
||||
/* wir heilen erstmal keine Monster */
|
||||
|
@ -1711,8 +1709,8 @@ int sp_healing(struct castorder * co)
|
|||
message *msg;
|
||||
bool use_item = has_ao_healing(mage);
|
||||
|
||||
/* bis zu 11 Personen pro Stufe (einen HP müssen sie ja noch
|
||||
* haben, sonst wären sie tot) können geheilt werden */
|
||||
/* bis zu 11 Personen pro Stufe (einen HP m<EFBFBD>ssen sie ja noch
|
||||
* haben, sonst w<EFBFBD>ren sie tot) k<EFBFBD>nnen geheilt werden */
|
||||
|
||||
if (use_item) {
|
||||
healhp *= 2;
|
||||
|
@ -1758,7 +1756,7 @@ int sp_undeadhero(struct castorder * co)
|
|||
int force = (int)get_force(power, 0);
|
||||
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);
|
||||
scramble_fighters(fgs);
|
||||
|
||||
|
@ -1776,7 +1774,7 @@ int sp_undeadhero(struct castorder * co)
|
|||
if (df->alive + df->run.number < du->number) {
|
||||
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++) {
|
||||
if (chance(c)) {
|
||||
++j;
|
||||
|
@ -1818,8 +1816,8 @@ int sp_undeadhero(struct castorder * co)
|
|||
}
|
||||
|
||||
/* inherit stealth from magician */
|
||||
if (fval(mage, UFL_ANON_FACTION)) {
|
||||
fset(u, UFL_ANON_FACTION);
|
||||
if (mage->flags & UFL_ANON_FACTION) {
|
||||
u->flags |= UFL_ANON_FACTION;
|
||||
}
|
||||
|
||||
/* transfer dead people to new unit, set hitpoints to those of old unit */
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#include <platform.h>
|
||||
#include <kernel/config.h>
|
||||
#include "flyingship.h"
|
||||
|
||||
#include <kernel/build.h>
|
||||
|
@ -27,8 +26,8 @@
|
|||
* Stufe: 6
|
||||
*
|
||||
* Wirkung:
|
||||
* Laeßt ein Schiff eine Runde lang fliegen. Wirkt nur auf Boote
|
||||
* bis Kapazität 50.
|
||||
* Lae<EFBFBD>t ein Schiff eine Runde lang fliegen. Wirkt nur auf Boote
|
||||
* bis Kapazit<EFBFBD>t 50.
|
||||
* Kombinierbar mit "Guenstige Winde", aber nicht mit "Sturmwind".
|
||||
*
|
||||
* Flag:
|
||||
|
@ -81,18 +80,20 @@ int sp_flying_ship(castorder * co)
|
|||
|
||||
/* melden, 1x pro Partei */
|
||||
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) {
|
||||
/* das sehen natuerlich auch die Leute an Land */
|
||||
if (!fval(u->faction, FFL_SELECT)) {
|
||||
fset(u->faction, FFL_SELECT);
|
||||
if (!m)
|
||||
if (!(u->faction->flags & FFL_SELECT)) {
|
||||
u->faction->flags |= FFL_SELECT;
|
||||
if (!m) {
|
||||
m = msg_message("flying_ship_result", "mage ship", mage, sh);
|
||||
}
|
||||
add_message(&u->faction->msgs, m);
|
||||
}
|
||||
}
|
||||
if (m)
|
||||
if (m) {
|
||||
msg_release(m);
|
||||
}
|
||||
return cast_level;
|
||||
}
|
||||
|
||||
|
@ -120,7 +121,7 @@ static int flyingship_age(curse * c)
|
|||
{
|
||||
ship *sh = (ship *)c->data.v;
|
||||
if (sh && c->duration == 1) {
|
||||
freset(sh, SF_FLYING);
|
||||
sh->flags &= ~SF_FLYING;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -28,6 +28,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
#include <float.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
|
||||
* den Algorithmus. mu = Mittelwert, sigma = Standardabweichung.
|
||||
* http://de.wikipedia.org/wiki/Standardabweichung#Diskrete_Gleichverteilung.2C_W.C3.BCrfel
|
||||
|
|
|
@ -23,13 +23,14 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/* in dice.c: */
|
||||
extern int dice_rand(const char *str);
|
||||
extern int dice(int count, int value);
|
||||
int dice_rand(const char *str);
|
||||
int dice(int count, int value);
|
||||
|
||||
/* in rand.c: */
|
||||
extern double normalvariate(double mu, double sigma);
|
||||
extern int ntimespprob(int n, double p, double mod);
|
||||
extern bool chance(double x);
|
||||
int lovar(double xpct_x2);
|
||||
double normalvariate(double mu, double sigma);
|
||||
int ntimespprob(int n, double p, double mod);
|
||||
bool chance(double x);
|
||||
|
||||
/* a random source that generates numbers in [0, 1).
|
||||
By calling the random_source_inject... functions you can set a special random source,
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Subproject commit de289b60c5009b6ac8e786f39432c08eadbb69b7
|
Loading…
Reference in New Issue